mirror of
https://github.com/RevCurtisP/C02.git
synced 2024-11-18 21:07:28 +00:00
72 lines
2.3 KiB
Plaintext
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
|
||
|
|