1
0
mirror of https://github.com/RevCurtisP/C02.git synced 2024-11-25 21:33:44 +00:00
C02/vcs/include/timerbar.a02

72 lines
2.3 KiB
Plaintext

;Atari 2600 Timer Bar Kernel
;Timer Variables
TMRPF0 EQU $F0 ;Timer Playfield Leftmost Byte
TMRPF1 EQU $F1
TMRPF2 EQU $F2
TMRPF3 EQU $F3
TMRPF4 EQU $F4
TMRPF5 EQU $F5 ;Timer Playfield Rightmost Byte
;tmprep() - Prepare Timer Bar
TMPREP: LDA #%11111111
STA TMRPF0
STA TMRPF1
STA TMRPF2
STA TMRPF3
STA TMRPF4
STA TMRPF5
RTS
;tmtick() - Tick Down Timer Bar
;Returns: A=$FF If Timer has Not Expired
; $00 If Timer has Expired
TMTICK: LDA TMRPF0 ;Check Leftmost Nybble of Timer Bar
AND #$F0 ;If 0
BEQ TMTICX ; Return FALSE
LSR TMRPF5 ;PF2 right side, reversed bits so shift right
ROL TMRPF4 ;PF1 right side, normal bits so shift left
ROR TMRPF3 ;PF0 right side, reversed bits so shift right
LDA TMRPF3 ;only upper nybble used, so we need to put bit 3 into C
LSR
LSR
LSR
LSR
ROR TMRPF2 ;PF2 left side, reversed bits so shift right
ROL TMRPF1 ;PF1 left side, normal bits so shift left
ROR TMRPF0 ;PF0 left side, reversed bits so shift right
LDA #$FF ;Return TRUE
TMTICX: RTS
;tmdisp() - Display Timer Bar
;Args: A = Timer Bar Color
TMDISP: STA COLUPF ; - Set Playfield Color
LDX #0 ; - Offset for Writes
STX CTRLPF ; - Set Playfield to Defaults
LDY #1 ; - Use Two Scanlines
TMDISL: STA WSYNC ; - Wait for Beginning of Line
LDA TMRPF0,X ; 4 4 - Copy Data to Playfield Left
STA PF0,X ; 5 9 - Indexed Mode Uses Extra Cycles
LDA TMRPF1,X ; 4 13
STA PF1,X ; 5 18
LDA TMRPF2,X ; 4 22
STA PF2,X ; 5 27
JSR TMDISX ;12 39 - Wait 12 Cycles
LDA TMRPF3 ; 3 42 - Copy Data To Playfield Right
STA PF0 ; 3 45
LDA TMRPF4 ; 3 50
STA PF1 ; 3 53
LDA TMRPF5 ; 3 56
STA PF2 ; 3 59
DEY ; 2 62
BPL TMDISL ; 2 64 (3 65)
STA WSYNC ; 3 67
LDA #0 ; 2 2
STA PF0 ; 3 5
STA PF1 ; 3 8
STA PF2 ; 3 11
STA COLUPF ; 3 14
STA WSYNC ; 3 20 - Gap between timer and Arena
TMDISX: RTS