1
0
mirror of https://github.com/RevCurtisP/C02.git synced 2024-07-12 20:29:05 +00:00
C02/vcs/include/k2line1.a02

132 lines
4.4 KiB
Plaintext
Raw Normal View History

;k2line.a02 - Two Line Kernal Assembly Language File for C02
;Requires Constants PLYR0H and PLYR1H,
;Variables PLYR0D and PLYR1D, and Pointers PLYR0P and PLYR1P
PLYR0H EQU $D0 ;Player 0 Height
PLYR1H EQU $D1 ;Player 1 Height
PLYR0D EQU $D2 ;Player 0 Draw Counter
PLYR1D EQU $D3 ;Player 1 Draw Pointer
PLYR0P EQU $D4 ;Player 0 Graphics Pointer
PLYR1P EQU $D6 ;Player 1 Graphics Pointer
PLYR0T EQU $D8 ;Player 0 Pointer Offset
PLYR1T EQU $DA ;Player 1 Pointer Offset
SCNLNS EQU $DF ;Number of Scanlines
;setpl0() - Set Player 0 Data
;Args: A = Player 0 Height
; Y,X = Pointer to Player 0 Graphics Data
SETPL0: STA PLYR0H ;Save Player 0 Height
DEC PLYR0H ;and Decrement
STX PLYR0P ;Save Player 0 Pointer
STY PLYR0P+1
RTS
;setpl1() - Set Player 1 Data
;Args: A = Player 1 Height
; Y,X = Pointer to Player 1 Graphics Data
SETPL1: STA PLYR1H ;Save Player 1 Height
DEC PLYR1H ;and Decrement
STX PLYR1P ;Save Player 1 Pointer
STY PLYR1P+1
RTS
;prppl0() - Prep Player Variables
;Args: A = Player 0 Y-Position
PRPPL0: LDX #1 ;Divide Y-Position by 2
SEC
SBC #1
LSR ;and Set Vertical Delay if No Remainder
STA TEMP0
BCS PRPPN0
STX VDELP0
PRPPN0: LDA SCNLNS ;PLYR0D = SCNLNS + PLYR0H - PLYR0Y
CLC
ADC PLYR0H
SEC
SBC TEMP0
STA PLYR0D
LDA PLYR0P ;PLYR0T = PLYR0P + PLYR0H - PLYR0Y - 1
CLC
ADC PLYR0H
SEC
SBC TEMP0
STA PLYR0T
LDA PLYR0P+1
SBC #0
STA PLYR0T+1
RTS
;prppl1() - Prep Player 1 Variables
;Args: A = Player 1 Y Position
PRPPL1: LDX #1
CLC ;Increment Y-Position
ADC #1 ; to compensate for priming of GRP1
LSR ;Divide by 2
STA TEMP1 ; and set Vertical Delay if No Remainder
BCS PRPPN1
STX VDELP1
PRPPN1: LDA SCNLNS ;PLYR1D = SCNLNS + PLYR1H - PLYR1Y
CLC
ADC #1
ADC PLYR1H
SEC
SBC TEMP1
STA PLYR1D
LDA PLYR1P ;PLYR1T = PLYR1P + PLYR1H - PLYR1Y - 1
CLC
ADC PLYR1H
SEC
SBC TEMP1
STA PLYR1T
LDA PLYR1P+1
SBC #
STA PLYR1T+1
RTS
;prpdsp() - Prep Display
PRPDSP: LDA #0
STA WSYNC ;Wait for Horizontal Sync
STA HMOVE ;Move Objects
STA VDELP0 ;Clear Player 0 Vertical Delay
STA VDELP1 ;Clear Player 0 Vertical Delay
RTS
;dsplns() - Display Two Line Kernal
DSPLNS: LDY SCNLNS ; (13) Set Number of Lines to Draw
LDA PLYR1H ; 2 9 - Get Player 1 Height
DCP PLYR1D ; 5 14 - Decrement counter and compare with height
BCS DSPLNP ; 2 16 - (3 18) If not on current scanline
LDA #0 ; 2 18 - Load Blank Line
BYTE $2C ; 4 22 - Else (BIT trick)
DSPLNP: LDA (PLYR1T),Y ; 5 22 - Load Player 0 Graphics Line
STA GRP1 ; 3 25 - Set Player 0 Graphics Data
DEY
DSPLNL: LDA PLYR0H ;2 21 - Height of Player 0 (Zero Based)
DCP PLYR0D ;5 26 - Decrement counter and compare with height
BCS DSPLN0 ;2 28 - (3 23) If Player 0 not on Current Scanline
LDA #0 ;2 30 - Load Blank Line
BYTE $2C ;4 34 - Else (BIT trick)
DSPLN0: LDA (PLYR0T),Y ;5 49 - Load Player 0 Graphics Line
STA WSYNC ;3 52 - End of Line 2
STA GRP0 ;3 3 - Set Player 0 Graphics Data
LDX #%11111111 ;2 5 - Load Playfield Pattern
STX PF0 ;3 8 - and Store
STX PF1 ;3 11
STX PF2 ;3 14
LDA PLYR1H ;2 16 - Get Player 1 Height
DCP PLYR1D ;5 21 - Decrement counter and compare with height
BCS DSPLN1 ;2 23 - (3 18) If not on current scanline
LDA #0 ;2 25 - Load Blank Line
BYTE $2C ;4 29 - - Else (BIT trick)
DSPLN1 LDA (PLYR1T),Y ;5 34 - Load Player 1 Graphics Line
STA WSYNC ;3 37 - End of Line 1
STA GRP1 ;3 3 - Set Player 0 Graphics Data
LDX #0 ;2 5 - Load Playfield Pattern
STX PF0 ;3 8 - and Store
STX PF1 ;3 11
STX PF2 ;3 14
DEY ;2 16 - decrease the 2LK loop counter
BPL DSPLNL ;2 18 - (3 21) Branch if more lines to draw
RTS