Code: Select all
; PIXY TEST 1 BY SHAOS (JAN 2017)
; ===============================
; Build: gpasm pic12-t1.asm
processor pic12c508
radix dec
include "p12c50X.inc"
__CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF & _IntRC_OSC
; +5V
; .--*
; # | PIC12C508
; 480* # | ---v---
; # \--|1 8|- GND
; | NC -|2 7|--###-\ 1.5 kOhm
; SYNC *-----|3 6|--###--* 680 Ohm
; | IN -|4 5|--###-/| 330 Ohm
; | ------- |
; ----------------###--*---> VIDEO (8 gray levels)
; 1 kOhm
LineN EQU 0x08 ; line counter
TempN EQU 0x09 ; temporary counter
movwf OSCCAL ; store factory calibration value
movlw 0xC0
option
goto loop
; call ; 2/2 (FRAME SYNC)
Line_:
nop ; 1/3
nop ; 1/4
; blank 48 instructions
clrf GPIO ; 1/5
movlw 15 ; 1/6
movwf TempN ; 1/7
Line_loop: ; 15*3-1=44/51
decfsz TempN,f ; (1/1)
goto Line_loop ; (2/3)
nop ; 1/52
clrf GPIO ; 1/53 -> video 48
nop ; 1/54
nop ; 1/55
movlw 0x18 ; 0x08 ; 1/56
tris GPIO ; 1/57
incf LineN,F ; 1/58 -> sync
nop ; 1/59 -> sync
nop ; 1/60 -> sync
movlw 0x08 ; 0x18 ; 1/61 -> sync
tris GPIO ; 1/62 -> sync
retlw 1 ; 2/64
; call ; 2/2
Line0:
nop ; 1/3
nop ; 1/4
; blank 48 instructions
clrf GPIO ; 1/5
movlw 15 ; 1/6
movwf TempN ; 1/7
Line0loop: ; 15*3-1=44/51
decfsz TempN,f ; (1/1)
goto Line0loop ; (2/3)
nop ; 1/52
clrf GPIO ; 1/53 -> video 48
nop ; 1/54
nop ; 1/55
movlw 0x08 ; 1/56
tris GPIO ; 1/57
incf LineN,F ; 1/58 -> sync
nop ; 1/59 -> sync
nop ; 1/60 -> sync
movlw 0x18 ; 1/61 -> sync
tris GPIO ; 1/62 -> sync
retlw 1 ; 2/64
; call ; 2/2
Line1:
nop ; 1/3
nop ; 1/4
; video 48 instructions
movlw 1 ; 1/5
movwf GPIO ; 1/6
comf GPIO,f ; 1/7
comf GPIO,f ; 1/8
comf GPIO,f ; 1/9
comf GPIO,f ; 1/10
comf GPIO,f ; 1/11
comf GPIO,f ; 1/12
comf GPIO,f ; 1/13
comf GPIO,f ; 1/14
comf GPIO,f ; 1/15
comf GPIO,f ; 1/16
comf GPIO,f ; 1/17
comf GPIO,f ; 1/18
comf GPIO,f ; 1/19
comf GPIO,f ; 1/20
comf GPIO,f ; 1/21
comf GPIO,f ; 1/22
comf GPIO,f ; 1/23
comf GPIO,f ; 1/24
comf GPIO,f ; 1/25
comf GPIO,f ; 1/26
comf GPIO,f ; 1/27
comf GPIO,f ; 1/28
comf GPIO,f ; 1/29
comf GPIO,f ; 1/30
comf GPIO,f ; 1/31
comf GPIO,f ; 1/32
comf GPIO,f ; 1/33
comf GPIO,f ; 1/34
comf GPIO,f ; 1/35
comf GPIO,f ; 1/36
comf GPIO,f ; 1/37
comf GPIO,f ; 1/38
comf GPIO,f ; 1/39
comf GPIO,f ; 1/40
comf GPIO,f ; 1/41
comf GPIO,f ; 1/42
comf GPIO,f ; 1/43
comf GPIO,f ; 1/44
comf GPIO,f ; 1/45
comf GPIO,f ; 1/46
comf GPIO,f ; 1/47
comf GPIO,f ; 1/48
comf GPIO,f ; 1/49
comf GPIO,f ; 1/50
comf GPIO,f ; 1/51
comf GPIO,f ; 1/52
clrf GPIO ; 1/53 -> video 48
nop ; 1/54
nop ; 1/55
movlw 0x08 ; 1/56
tris GPIO ; 1/57
incf LineN,F ; 1/58 -> sync
nop ; 1/59 -> sync
nop ; 1/60 -> sync
movlw 0x18 ; 1/61 -> sync
tris GPIO ; 1/62 -> sync
retlw 1 ; 2/64
; call ; 2/2
Line2:
nop ; 1/3
nop ; 1/4
; video 48 instructions
movlw 1 ; 1/5
movwf GPIO ; 1/6
incf GPIO,f ; 1/7
incf GPIO,f ; 1/8
incf GPIO,f ; 1/9
incf GPIO,f ; 1/10
incf GPIO,f ; 1/11
incf GPIO,f ; 1/12
incf GPIO,f ; 1/13
incf GPIO,f ; 1/14
incf GPIO,f ; 1/15
incf GPIO,f ; 1/16
incf GPIO,f ; 1/17
incf GPIO,f ; 1/18
incf GPIO,f ; 1/19
incf GPIO,f ; 1/20
incf GPIO,f ; 1/21
incf GPIO,f ; 1/22
incf GPIO,f ; 1/23
incf GPIO,f ; 1/24
incf GPIO,f ; 1/25
incf GPIO,f ; 1/26
incf GPIO,f ; 1/27
incf GPIO,f ; 1/28
incf GPIO,f ; 1/29
incf GPIO,f ; 1/30
incf GPIO,f ; 1/31
incf GPIO,f ; 1/32
incf GPIO,f ; 1/33
incf GPIO,f ; 1/34
incf GPIO,f ; 1/35
incf GPIO,f ; 1/36
incf GPIO,f ; 1/37
incf GPIO,f ; 1/38
incf GPIO,f ; 1/39
incf GPIO,f ; 1/40
incf GPIO,f ; 1/41
incf GPIO,f ; 1/42
incf GPIO,f ; 1/43
incf GPIO,f ; 1/44
incf GPIO,f ; 1/45
incf GPIO,f ; 1/46
incf GPIO,f ; 1/47
incf GPIO,f ; 1/48
incf GPIO,f ; 1/49
incf GPIO,f ; 1/50
incf GPIO,f ; 1/51
incf GPIO,f ; 1/52
clrf GPIO ; 1/53 -> video 48
nop ; 1/54
nop ; 1/55
movlw 0x08 ; 1/56
tris GPIO ; 1/57
incf LineN,F ; 1/58 -> sync
nop ; 1/59 -> sync
nop ; 1/60 -> sync
movlw 0x18 ; 1/61 -> sync
tris GPIO ; 1/62 -> sync
retlw 1 ; 2/64
; MAIN LOOP
loop:
clrf LineN
loop2:
; lines 1-8 (row 1)
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
; lines 9-16 (row 2)
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
; lines 17-24 (row 3)
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
; lines 25-32 (row 4)
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
; lines 33-40 (row 5)
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
; lines 41-48 (row 6)
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
; lines 49-56 (row 7)
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
; lines 57-64 (row 8)
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
; lines 65-72 (row 9)
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
; lines 73-80 (row 10)
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
; lines 81-88 (row 11)
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
; lines 89-96 (row 12)
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
; lines 97-104 (row 13)
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
; lines 105-112 (row 14)
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
; lines 113-120 (row 15)
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
; lines 121-128 (row 16)
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
; lines 129-136 (row 17)
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
; lines 137-144 (row 18)
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
; lines 145-152 (row 19)
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
; lines 153-160 (row 20)
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
; lines 161-168 (row 21)
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
; lines 169-176 (row 22)
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
; lines 177-184 (row 23)
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
; lines 185-192 (row 24)
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
; lines 192-200 (row 25)
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
; lines 201-208 (row 26)
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
call Line2
; lines 209-216 (row 27)
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
call Line1
; lines 217-232 (16 blank lines)
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
; lines 233-236 (4 sync lines)
call Line_
call Line_
call Line_
call Line_
; lines 237-262 (26 blank lines)
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
call Line0
; call Line0 - last blank line must be incomplete to compensate 3 cycles
nop ; 1/1
clrf GPIO ; 1/2
movlw 16 ; 1/3
movwf TempN ; 1/4
Line00loop: ; 16*3-1=47/51
decfsz TempN,f ; (1/1)
goto Line00loop ; (2/3)
nop ; 1/52
clrf GPIO ; 1/53 -> video 48
nop ; 1/54
nop ; 1/55
movlw 0x08 ; 1/56
tris GPIO ; 1/57
clrf LineN ; 1/58
nop ; 1/59 -> sync
nop ; 1/60 -> sync
movlw 0x18 ; 1/61 -> sync
tris GPIO ; 1/62 -> sync
goto loop2 ; 2/64
END