;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: STA TEMP0 LDA SCNLNS ;PLYR0D = SCNLNS + PLYR0H - PLYR0Y CLC ADC PLYR0H ; ADC #1 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: STA TEMP1 LDA SCNLNS ;PLYR1D = SCNLNS + PLYR1H - PLYR1Y CLC ADC PLYR1H ; ADC #1 SEC SBC TEMP1 STA PLYR1D LDA PLYR1P ;PLYR1T = PLYR1P + PLYR1H - PLYR1Y - 1 CLC ADC PLYR1H SEC SBC TEMP1 STA PLYR1T LDA PLYR1P+1 SBC #0 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 RTS ;dsplns() - Display Two Line Kernal DSPLNS: LDY SCNLNS ; (13) Set Number of Lines to Draw DEY DSPLNL: LDA PLYR0H ;2 21 - Height of Player 0 (Zero Based) DCP PLYR0D ;5 26 - Decrement PLYR0D 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 - Height of Player 1 DCP PLYR1D ;5 21 - Decrement PLYR1D and compare with height BCS DSPLN1 ;2 23 - (3 18) If Player 0 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