; VGA Test Box ; (c) 2007 Pyroelectro.com ; http://www.pyroelectro.com/projects/vga_test_box/index.html ; ; based on the Eric Schlaepfer's MDA/CGA Tester ; http://www.sonic.net/~schlae/pic.html ; Ceramic resonator 4MHz, Tcycle=1mkS ; (VGA: Video mode 640x480 HSync=-31,4KHz 1/HSync=32cycles ; VSync=-60Hz 1/VSync=16667cycles ; processor 16f84 list p=18f4520, f=INHX32 #include CONFIG OSC = XT CONFIG WDT = OFF CONFIG PWRT = ON TopCount: equ 0x0C BotCount: equ 0x0D squ1: equ 0x10 squ2: equ 0x11 squ3: equ 0x12 tri1: equ 0x13 tri2: equ 0x14 tri3: equ 0x15 tri4: equ 0x16 tri5: equ 0x17 tri6: equ 0x18 tri7: equ 0x19 tri8: equ 0x1A tri9: equ 0x1B tri10: equ 0x1C tri11: equ 0x1D blank: macro bcf PORTB, 1 endm point: macro bsf PORTB, 1 endm blank2: macro bcf PORTB, 2 endm point2: macro bsf PORTB, 2 endm blank3: macro bcf PORTB, 0 endm point3: macro bsf PORTB, 0 endm HSync: macro bcf PORTB, 3 ; horiz sync nop bsf PORTB, 3 ; horiz sync endm VSync: macro bcf PORTB, 4 ; vert sync;1 nop;2 nop;3 nop;4 nop;5 nop;6 call Delay10mkS call Delay10mkS ;call Delay10mkS ;call Delay10mkS nop ;upto 36 works bsf PORTB, 4 ; vert sync endm org 0 goto Start org 0x30 ; start address 0 Start: clrf PORTB ;Clear Ports clrf PORTD clrf TRISB ;PORTB OUTUT movlw 0xFF ;PORTD INPUT movwf TRISD bsf PORTB, 4 ; vert sync LoopV: VSync blank movlw D'120' ;Blank Upper and Lower 120 Lines movwf TopCount movwf BotCount ;Load Data For a Square movlw D'40' movwf squ1 movwf squ3 movlw D'140' movwf squ2 ;Load Data For a Triangle movlw D'20' movwf tri1 movwf tri2 movwf tri3 movwf tri4 movwf tri5 movwf tri6 movwf tri7 movwf tri8 movwf tri9 movwf tri10 movwf tri11 movlw 0x0F CPFSLT PORTD call intro ;BTFSC PORTD,0 ; BTFSC PORTD,4 ; BTFSC PORTD,5 ; BTFSC PORTD,6 ; call intro BTFSS PORTD,0 call x_prnt BTFSS PORTD,1 call square_prnt BTFSS PORTD,2 call circle_prnt BTFSS PORTD,3 call triangle_prnt goto LoopV ; 32 (207*32=6624) 207*31+1 = 6418 Delay10mkS: nop nop nop nop nop nop return intro: BlankLoopTop1: ; now, the blank area at the top blank ; 1 blank ; 2 * blank ; 3 * blank ; 4 * blank ; 5 * blank ; 6 * blank ; 7 blank ; 8 * blank ; 9 * blank ; 10 * blank ; 11 * blank ; 12 * blank ; 13 blank ; 14 blank ; 15 * blank ; 16 * blank ; 17 * blank ; 18 * blank ; 19 blank ; 20 * blank ; 21 * blank ; 22 * blank ; 23 * blank ; 24 * blank ; 25 blank ; 26 HSync ; 27-29 decfsz TopCount ; 30 goto BlankLoopTop1 ; 31 #include BlankLoopBot1: ;now, the blank area at the bottom blank ; 1 blank ; 2 * blank ; 3 * blank ; 4 * blank ; 5 * blank ; 6 * blank ; 7 blank ; 8 * blank ; 9 * blank ; 10 * blank ; 11 * blank ; 12 * blank ; 13 blank ; 14 blank ; 15 * blank ; 16 * blank ; 17 * blank ; 18 * blank ; 19 blank ; 20 * blank ; 21 * blank ; 22 * blank ; 23 * blank ; 24 * blank ; 25 blank ; 26 HSync ; 27-29 decfsz BotCount ; 30 goto BlankLoopBot1 ; 31 return circle_prnt: BlankLoopTop0: ; now, the blank area at the top blank ; 1 blank ; 2 * blank ; 3 * blank ; 4 * blank ; 5 * blank ; 6 * blank ; 7 blank ; 8 * blank ; 9 * blank ; 10 * blank ; 11 * blank ; 12 * blank ; 13 blank ; 14 blank ; 15 * blank ; 16 * blank ; 17 * blank ; 18 * blank ; 19 blank ; 20 * blank ; 21 * blank ; 22 * blank ; 23 * blank ; 24 * blank ; 25 blank ; 26 HSync ; 27-29 decfsz TopCount ; 30 goto BlankLoopTop0 ; 31 #include BlankLoopBot0: ;now, the blank area at the bottom blank ; 1 blank ; 2 * blank ; 3 * blank ; 4 * blank ; 5 * blank ; 6 * blank ; 7 blank ; 8 * blank ; 9 * blank ; 10 * blank ; 11 * blank ; 12 * blank ; 13 blank ; 14 blank ; 15 * blank ; 16 * blank ; 17 * blank ; 18 * blank ; 19 blank ; 20 * blank ; 21 * blank ; 22 * blank ; 23 * blank ; 24 * blank ; 25 blank ; 26 HSync ; 27-29 decfsz BotCount ; 30 goto BlankLoopBot0 ; 31 return square_prnt: BlankLoopTop2: ; now, the blank area at the top blank ; 1 blank ; 2 * blank ; 3 * blank ; 4 * blank ; 5 * blank ; 6 * blank ; 7 blank ; 8 * blank ; 9 * blank ; 10 * blank ; 11 * blank ; 12 * blank ; 13 blank ; 14 blank ; 15 * blank ; 16 * blank ; 17 * blank ; 18 * blank ; 19 blank ; 20 * blank ; 21 * blank ; 22 * blank ; 23 * blank ; 24 * blank ; 25 blank ; 26 HSync ; 27-29 decfsz TopCount ; 30 goto BlankLoopTop2 ; 31 #include BlankLoopBot2: ;now, the blank area at the bottom blank ; 1 blank ; 2 * blank ; 3 * blank ; 4 * blank ; 5 * blank ; 6 * blank ; 7 blank ; 8 * blank ; 9 * blank ; 10 * blank ; 11 * blank ; 12 * blank ; 13 blank ; 14 blank ; 15 * blank ; 16 * blank ; 17 * blank ; 18 * blank ; 19 blank ; 20 * blank ; 21 * blank ; 22 * blank ; 23 * blank ; 24 * blank ; 25 blank ; 26 HSync ; 27-29 decfsz BotCount ; 30 goto BlankLoopBot2 ; 31 return x_prnt: BlankLoopTop: ; now, the blank area at the top blank ; 1 blank ; 2 * blank ; 3 * blank ; 4 * blank ; 5 * blank ; 6 * blank ; 7 blank ; 8 * blank ; 9 * blank ; 10 * blank ; 11 * blank ; 12 * blank ; 13 blank ; 14 blank ; 15 * blank ; 16 * blank ; 17 * blank ; 18 * blank ; 19 blank ; 20 * blank ; 21 * blank ; 22 * blank ; 23 * blank ; 24 * blank ; 25 blank ; 26 HSync ; 27-29 decfsz TopCount ; 30 goto BlankLoopTop ; 31 #include BlankLoopBot: ;now, the blank area at the bottom blank ; 1 blank ; 2 * blank ; 3 * blank ; 4 * blank ; 5 * blank ; 6 * blank ; 7 blank ; 8 * blank ; 9 * blank ; 10 * blank ; 11 * blank ; 12 * blank ; 13 blank ; 14 blank ; 15 * blank ; 16 * blank ; 17 * blank ; 18 * blank ; 19 blank ; 20 * blank ; 21 * blank ; 22 * blank ; 23 * blank ; 24 * blank ; 25 blank ; 26 HSync ; 27-29 decfsz BotCount ; 30 goto BlankLoopBot ; 31 return triangle_prnt: BlankLoopTop3: ; now, the blank area at the top blank ; 1 blank ; 2 * blank ; 3 * blank ; 4 * blank ; 5 * blank ; 6 * blank ; 7 blank ; 8 * blank ; 9 * blank ; 10 * blank ; 11 * blank ; 12 * blank ; 13 blank ; 14 blank ; 15 * blank ; 16 * blank ; 17 * blank ; 18 * blank ; 19 blank ; 20 * blank ; 21 * blank ; 22 * blank ; 23 * blank ; 24 * blank ; 25 blank ; 26 HSync ; 27-29 decfsz TopCount ; 30 goto BlankLoopTop3 ; 31 #include BlankLoopBot3: ;now, the blank area at the bottom blank ; 1 blank ; 2 * blank ; 3 * blank ; 4 * blank ; 5 * blank ; 6 * blank ; 7 blank ; 8 * blank ; 9 * blank ; 10 * blank ; 11 * blank ; 12 * blank ; 13 blank ; 14 blank ; 15 * blank ; 16 * blank ; 17 * blank ; 18 * blank ; 19 blank ; 20 * blank ; 21 * blank ; 22 * blank ; 23 * blank ; 24 * blank ; 25 blank ; 26 HSync ; 27-29 decfsz BotCount ; 30 goto BlankLoopBot3 ; 31 return end