Hi Aerostar!
Somehow I screwed up my working file and now I have rows 1-9 as white squares while rows 10 and 11 are X's! I have done something stupid just not sure what after several days of trying!
Thanks, EdCode:'**************************************************************** '* Name : NTSC -RPM-V2 * '* Author : Ed Cannady * '* Notice : Copyright (c) 2017 * '* : All Rights Reserved * '* Date : 06-30-17 * '* Version : 1.0 * '* Notes : VIDEO IDENT * '* : WITH GREAT HELP FROM AEROSTAR * '**************************************************************** ' WORKS USES SYNC FOR SWITCHING BETWEEN MIXED AND FULL TEXT MODE ' GOING FROM VID IN TO TEXT AND BACK TO VID IN #CONFIG __config _HS_OSC & _WDT_ON & _MCLRE_ON & _LVP_OFF & _CP_OFF #ENDCONFIG '@ device PIC16F628A,HS_OSC,BOD_ON,MCLR_ON,PWRT_ON 'AEROSTAR SET UP define OSC 20 '--------------------------------------------------------------- '16f628a ED definitions TVSDA VAR PORTB.4 '0 OUTPUT to pin 11 of stv chip CS0 VAR PORTB.6 '0 OUTPUT to pin 13 of stv chip TVSCL VAR PORTB.5 '0 OUTPUT to pin 12 of stv chip SYNCH0 VAR PORTB.7 '1 INPUT to pin 7 of stv chip '--------------------------------------------------------------- ZOOMREG CON %0000000011001100 ' 12 ZOOM REGISTER COLREG CON %0000000011001101 ' 13 COLOUR REGISTER CONREG CON %0000000011001110 ' 14 CONTROL REGISTER POSREG CON %0000000011001111 ' 15 POSITION REGISTER MODEREG CON %0000000011010000 ' 16 MODE REGISTER ICOUNT VAR BYTE BITCOUNTER VAR BYTE WDATA VAR WORD CHARCOUNTER VAR BYTE LINECOUNTER VAR BYTE STVCHAR VAR BYTE ASCCHAR VAR BYTE CHARS VAR BYTE CHARS2 VAR BYTE TEMP VAR BYTE TEMP1 VAR BYTE COUNTER VAR BYTE PULSES VAR BYTE CURRENTMODE0 VAR BYTE PRPM VAR WORD '---------------------------------------------------------------- ' TOPLEFT CON 0 ' TOPMIDDLE CON 5 ' TOPRIGHT CON 10 ' BOTLEFT CON 2560 '10*256 ' BOTMIDDLE CON 2565 '(10*256)+ 5 ' BOTRIGHT CON 2570 '(10*256)+ 10 '---------------------------------------------------------------- DATA @0,"NTSC.",$FF,"NO SYNCHS RECEIVED",$FF TRISB = %10001111 '---------------------------------------------------------------- PAUSE 500 GOSUB Init PAUSE 500 GOSUB Init CURRENTMODE0=255 ' FORCES TRYSYNCHS TO SET MODE FIRST TIME Demo: CHARCOUNTER = 0 LINECOUNTER = 0 ' CURRENTMODE0 = 0 '0 = MIXED 1 = TEXT gosub CLS GOSUB TRYSYNCHS '================================== TEMP = 0 LOOPER: GOSUB HEADER ' LINE 3 RIGHT HAND SIDE TEST. GOSUB FILLSCREEN STOPHERE: GOTO STOPHERE ' PRPM = 6789 ' IF CURRENTMODE0=0 THEN ' ONLY WHEN INCOMING VIDEO SIGNAL ' GOSUB HEADER ' LINE 3 RIGHT HAND SIDE TEST. ' ENDIF ' IF CURRENTMODE0=1 THEN ' GOSUB NOVIDEO ' DISPLAYS NO VIDEO IF NO INCOMING SYNCHS ' ENDIF GOSUB TRYSYNCHS '=========================== ' PAUSE 500 'I/2 SECOND DELAY ' TOGGLE HEARTBEAT ' LED GOTO LOOPER 'DO IT FOREVER DISPLAYCHAR: WDATA = %0001011100000000 + STVCHAR ' 11 10 9 8 7654 3210 ' WDATA = %0001 0 1 1 1 0000 0000 + STVCHAR ' bit 11 = character background 0 = disabled 1 = enabled ' bit 10 = red ' bit 09 = green ' bit 08 = blue ' 000 = black ' 001 = blue ' 010 = green ' 011 = cyan ' 100 = red ' 101 = magenta ' 110 = yellow ' 111 = white ' bit 7 = blink 1=enable 0=disable GOSUB SEND RETURN SETLINE: WDATA = LINECOUNTER*256 + CHARCOUNTER GOSUB Send 'position cursor RETURN WasteTime: ' WORKS WITH LESS NOPS pauseus 20 ' was 20 nops RETURN StartCommunication: TVSCL = 1 'HIGH TVSCL GOSUB WasteTime CS0 = 0 'LOW CS0 GOSUB WasteTime TVSCL = 0 'LOW TVSCL GOSUB WasteTime RETURN StopCommunication: TVSCL = 1 'HIGH TVSCL GOSUB WasteTime CS0 = 1 'HIGH CS0 GOSUB WasteTime RETURN SendOne: TVSDA = 1 'HIGH TVSDA GOSUB WasteTime TVSCL = 0 'LOW TVSCL GOSUB WasteTime TVSCL = 1 'HIGH TVSCL GOSUB WasteTime RETURN SendZero: TVSDA = 0 'LOW TVSDA GOSUB WasteTime TVSCL = 0 ' LOW TVSCL GOSUB WasteTime TVSCL = 1 'HIGH TVSCL GOSUB WasteTime TVSDA = 1 'HIGH TVSDA GOSUB WasteTime RETURN OutByte: FOR BITCOUNTER = 1 TO 16 IF WDATA.15 = 1 THEN GOSUB SendOne ELSE GOSUB SendZero ENDIF WDATA = WDATA << 1 NEXT BITCOUNTER RETURN Send: GOSUB StartCommunication GOSUB OutByte GOSUB StopCommunication RETURN '------------------------------------------------------------- Init: ' PAUSE 50 added - seems to improve reliability of init TVSCL = 1 'HIGH TVSCL TVSDA = 1 'HIGH TVSDA CS0 = 1 'HIGH CS0 WDATA = $3000 '%110000 00000000 GOSUB Send ' Init STV5730 PAUSE 50 WDATA = $3000 GOSUB Send PAUSE 50 WDATA = $00DB '%00000000 11011011 GOSUB Send PAUSE 50 WDATA = $1000 '%00010000 00000000 GOSUB Send PAUSE 50 '------------------------------------------------------------- WDATA = %0000000011001100 GOSUB Send ' Init registers (point to register 12) PAUSE 50 '------------------------------------------------------------- WDATA = %0001000000000000 'NORMAL ' WDATA = %0001000011110000 '4 PIXELS HORIZ AND VERT GOSUB Send ' Zoom ADDRESS 12 PAUSE 50 '------------------------------------------------------------- WDATA = %0001001000000000 ' WDATA = %0001001000000100 GOSUB Send ' Color ADDRESS 13 PAUSE 50 '-------------------------------------------------------- WDATA= %0001101011010100 'CHANGE BIT 0 TO 1 FOR TEXT ONLY GOSUB Send ' Control ADDRESS 14 '------------------------------------------------------------- WDATA = %0001001100001111 ' was WDATA = %0001 0111 1100 1111 GOSUB Send ' Position ADDRESS 15 '------------------------------------------------------------- WDATA = %0001000100101110 '$183E BIT 11 CHANGED TO 0 M4 = 0 GOSUB Send ' Mode ADDRESS 16 %0001100000111110 '------------------------------------------------------------- WDATA = $00C0 '%00000000 11000000 GOSUB Send ' Set row attributes FOR ICOUNT = 0 TO 10 WDATA = %0001000010000001 '%00010000 11000100 was $10C4 ' WDATA =%0001000010000111 GOSUB Send NEXT ICOUNT RETURN CLS: 'character=$0B 'SPACE TEMP1=0 ' LINECOUNTER TEMP =0 'CHARCOUNTER loop2: WDATA = 0 ' LINECOUNTER*256 + CHARCOUNTER ADDRESS GOSUB Send LOOP3: ' :CHARACTERS WDATA = %0001011100001011 ' 1011 0BH SPACECHARACTER GOSUB Send TEMP = TEMP + 1 IF TEMP >= 28 THEN TEMP = 0 TEMP1=TEMP1 + 1 ENDIF IF TEMP1 >= 11 THEN SCREENBLANK GOTO LOOP3 SCREENBLANK: RETURN GETSTVCHAR: 'CONVERT ASCII TO STV STVCHAR =$7F ' FORCES CLOCK PICTURE IF ERROR LOOKDOWN ASCCHAR,["0123456789- ABCDEFGHIJKLMNOPQRSTUVWXYZ:./'abcdefghijklmnopqrstuvwxyz"],STVCHAR RETURN HEADER: LINECOUNTER=0 'SET START POSITION CHARCOUNTER=1 'SET CURSOR POSITION GOSUB SETLINE FOR CHARS2=0 TO 4 READ CHARS2, ASCCHAR gosub GETSTVCHAR 'CONVERT ASCII TO STV GOSUB DISPLAYCHAR NEXT LINECOUNTER=10 'SET START POSITION CHARCOUNTER=1 'SET CURSOR POSITION GOSUB SETLINE ASCCHAR = "P" gosub GETSTVCHAR 'CONVERT ASCII TO STV GOSUB DISPLAYCHAR ASCCHAR = "R" gosub GETSTVCHAR 'CONVERT ASCII TO STV GOSUB DISPLAYCHAR ASCCHAR = "P" gosub GETSTVCHAR 'CONVERT ASCII TO STV GOSUB DISPLAYCHAR ASCCHAR = "M" gosub GETSTVCHAR 'CONVERT ASCII TO STV GOSUB DISPLAYCHAR ASCCHAR = " " gosub GETSTVCHAR 'CONVERT ASCII TO STV GOSUB DISPLAYCHAR STVCHAR = PRPM DIG 3 '****** DIG VALUES ONLY GOSUB DISPLAYCHAR 'NEEDS TO BE STVCHAR !! STVCHAR = PRPM DIG 2 GOSUB DISPLAYCHAR STVCHAR = PRPM DIG 1 GOSUB DISPLAYCHAR STVCHAR = PRPM DIG 0 GOSUB DISPLAYCHAR RETURN NOVIDEO: LINECOUNTER=5 'SET START POSITION CHARCOUNTER=4 'SET CURSOR POSITION GOSUB SETLINE FOR CHARS2=6 TO 23 ' FROM EEPROM DATA READ CHARS2, ASCCHAR gosub GETSTVCHAR 'CONVERT ASCII TO STV GOSUB DISPLAYCHAR NEXT RETURN TRYSYNCHS: PULSES=0 COUNT SYNCH0,4,PULSES '3MS SHOULD COUNT TO 2 OR 3 IF PULSES > 0 THEN MIXED0 FULL0: IF CURRENTMODE0=1 THEN RETURN WDATA= %0000000011001110 'CONTROL REGISTER GOSUB SEND WDATA= %0001101011010101 'CHANGE BIT 0 TO 1 FOR TEXT ONLY OTIGINAL ' WDATA= %0001101111010100 'CHANGE BIT 0 TO 1 FOR TEXT ONLY GOSUB SEND STAYHERE02: CURRENTMODE0=1 GOSUB CLS GOBACK0: RETURN MIXED0: IF CURRENTMODE0=0 THEN RETURN WDATA= %0000000011001110 'CONTROL REGISTER GOSUB SEND WDATA= %0001101011010100 GOSUB SEND STAYHERE01: CURRENTMODE0=0 GOSUB CLS RETURN '----------------------debug fills screen with X------------------ FILLSCREEN: 'character=$0B 'SPACE TEMP1=0 ' LINECOUNTER TEMP =0 'CHARCOUNTER loop2a: WDATA = 0 ' LINECOUNTER*256 + CHARCOUNTER ADDRESS GOSUB Send LOOP3a: ' :CHARACTERS 100011 WDATA = %0001011101100011 ' X CHARACTER ' WDATA = %0001011101110111 ' if temp1 =0 then WDATA = %0001011101110111 if temp1 =1 then WDATA = %0001000001100011 if temp1 =2 then WDATA = %0001000101100011 if temp1 =3 then WDATA = %0001001001100011 if temp1 =4 then WDATA = %0001001101100011 if temp1 =5 then WDATA = %0001010001100011 if temp1 =6 then WDATA = %0001010101100011 if temp1 =7 then WDATA = %0001011001100011 if temp1 =8 then WDATA = %0001011101100011 if temp1 >=9 then WDATA = %0001011100100011 GOSUB Send TEMP = TEMP + 1 IF TEMP >= 28 THEN TEMP = 0 TEMP1=TEMP1 + 1 ENDIF IF TEMP1 >= 11 THEN SCREENBLANKA GOTO LOOP3A SCREENBLANKA: RETURN




Bookmarks