mirror of
https://github.com/RevCurtisP/C02.git
synced 2024-11-24 15:31:17 +00:00
132 lines
4.4 KiB
Plaintext
132 lines
4.4 KiB
Plaintext
;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
|
||
|