1
0
mirror of https://github.com/RevCurtisP/C02.git synced 2024-09-27 14:56:27 +00:00

Added Automatic Vertical Delay to Two Line Kernal

This commit is contained in:
Curtis F Kaylor 2017-07-01 00:22:19 -04:00
parent 2a78f64af3
commit 8877655497
3 changed files with 36 additions and 23 deletions

View File

@ -34,11 +34,11 @@ void setup() {
/* Vertical Blank Code */ /* Vertical Blank Code */
void vrtblk() { void vrtblk() {
posobj(0,0); //Set P0 X-Position posobj(0,0); //Set P0 X-Position
p0prep(90, &human); //Set P0 Y-Position & Graphics Pointer p0prep(191, &human); //Set P0 Y-Position & Graphics Pointer
posobj(8,1); //Set P1 X-Position posobj(8,1); //Set P1 X-Position
p1prep(90, &human); //Set P1 Y-Position & Graphics Pointer p1prep(191, &human); //Set P1 Y-Position & Graphics Pointer
VDELP0 = (SWCHB & #P0DIFF) ? #SET : #CLEAR; //VDELP0 = (SWCHB & #P0DIFF) ? #SET : #CLEAR;
VDELP1 = (SWCHB & #P1DIFF) ? #SET : #CLEAR; //VDELP1 = (SWCHB & #P1DIFF) ? #SET : #CLEAR;
} }
/* Execute Kernel Code */ /* Execute Kernel Code */

View File

@ -14,8 +14,12 @@ P1PTRH EQU $D5
;Uses: KNLLNS, P0HGHT ;Uses: KNLLNS, P0HGHT
;Sets: TEMP0 - Y-Position ;Sets: TEMP0 - Y-Position
;Affects; A,C,N,Z ;Affects; A,C,N,Z
P0PREP: STA TEMP0 ;Save Y Position P0PREP: LSR ;Divide by 2 for Two-line Position
LDA #KNLLNS ;Draw = Lines + Height - Y Position STA TEMP0 ;Save Y Position
ROL ;Rotate Carry into Bit 1
EOR #1 ;Reverse It
STA VDELP0 ;and Store in Vertical Delay Register
LDA #KNLLNS-1 ;Draw = Top Line + Height - Y Position
CLC CLC
ADC #P0HGHT ADC #P0HGHT
SEC SEC
@ -43,10 +47,16 @@ P0PREP: STA TEMP0 ;Save Y Position
;Uses: KNLLNS, P1HGHT ;Uses: KNLLNS, P1HGHT
;Sets: TEMP1 - Y-Position ;Sets: TEMP1 - Y-Position
;Affects; A,C,N,Z ;Affects; A,C,N,Z
P1PREP: STA TEMP1 ;Save Y Position P1PREP: CLC ;Add 1 to Y-Position
LDA #KNLLNS ;Draw = Lines + Height - Y Position ADC #1 ;to Compensate for GRP1 Priming
LSR ;Divide by 2 for Two-line Position
STA TEMP1 ;Save Y Position
ROL ;Rotate Carry into Bit 1
EOR #1 ;Reverse It
STA VDELP1 ;and Store in Vertical Delay Register
LDA #KNLLNS-1 ;Draw = Top Line + Height - Y Position + 1
CLC CLC
ADC #P1HGHT ADC #P1HGHT+1
SEC SEC
SBC TEMP1 SBC TEMP1
STA P1DRAW STA P1DRAW
@ -70,26 +80,34 @@ P1PREP: STA TEMP1 ;Save Y Position
;Args: None ;Args: None
;Uses: KNLLNS, P0HGHT, P1HGHT, P0PTRL, P1PTRL ;Uses: KNLLNS, P0HGHT, P1HGHT, P0PTRL, P1PTRL
;Affects: A,X,Y,C,N,Z ;Affects: A,X,Y,C,N,Z
DSPLNS: LDA #5 DSPLNS: LDY #KNLLNS ; - Number of Kernal Lines (Scanlines / 2)
LDA #P1HGHT-1 ; - Preset GRP1 if Player 1 on Top Line
DCP P1DRAW ;
BCS DSPLN0 ;
LDA #0 ;
BYTE $2C ;
DSPLN0: LDA (P1PTRL),Y ;
STA WSYNC ; - Beginning of Line STA WSYNC ; - Beginning of Line
STA HMOVE ; 3 3 - Position Objects STA HMOVE ; 3 3 - Position Objects
DSPLNA: LDY #KNLLNS ; 2 11 - Number of Kernal Lines (Scanlines / 2) STA GRP1 ; 3 6
DEY ; 2 8
AND ($FF),Y ; 5 13 - Waste 5 Cycles to Match Line 2 Loop
DSPLNL: LDA #P0HGHT-1 ; 2 15 - Player 1 Height minus 1 due to STArting with 0 DSPLNL: LDA #P0HGHT-1 ; 2 15 - Player 1 Height minus 1 due to STArting with 0
DCP P0DRAW ; 5 20 - Decrement P0DRAW and compare with height DCP P0DRAW ; 5 20 - Decrement P0DRAW and compare with height
BCS DSPLN0 ; 2 22 - If Player 0 not on Current Scanline BCS DSPLN1 ; 2 22 - If Player 0 not on Current Scanline
LDA #0 ; 2 24 - Load 0 (No Graphics) LDA #0 ; 2 24 - Load 0 (No Graphics)
BYTE $2C ; 4 28 - Else (BIT trick) BYTE $2C ; 4 28 - Else (BIT trick)
DSPLN0: LDA (P0PTRL),Y ; 5 28 - Load Player 0 Graphics Line DSPLN1: LDA (P0PTRL),Y ;(5 28)- Load Player 0 Graphics Line
STA WSYNC ; 3 31 - STArt Line 2 STA WSYNC ; 3 31 - STArt Line 2
STA GRP0 ; 3 3 - Set Player 0 Graphics Data STA GRP0 ; 3 3 - Set Player 0 Graphics Data
LDX #%11111111 ; 2 5 - Set Playfield Pattern for LDX #%11111111 ; 2 5 - Set Playfield Pattern for
STX PF0 ; 3 8 - Vertical Alignment Testing STX PF0 ; 3 8 - Vertical Alignment Testing
LDA #P1HGHT-1 ; 2 10 - Player 1 Height minus 1 due to STArting with 0 LDA #P1HGHT-1 ; 2 10 - Player 1 Height minus 1 due to STArting with 0
DCP P1DRAW ; 5 15 - Load 0 (No Graphics) DCP P1DRAW ; 5 15 - Load 0 (No Graphics)
BCS DPSLN1 ; 2 17 - If Player 1 not on Current Scanline BCS DPSLN2 ; 2 17 - If Player 1 not on Current Scanline
LDA #0 ; 2 19 - Load 0 (No Graphics) LDA #0 ; 2 19 - Load 0 (No Graphics)
BYTE $2C ; 4 23 - Else (BIT trick) BYTE $2C ; 4 23 - Else (BIT trick)
DPSLN1: LDA (P1PTRL),Y ; 5 23 - Load Player 1 Graphics Line DPSLN2: LDA (P1PTRL),Y ;(5 23)- Load Player 1 Graphics Line
STA WSYNC ; 3 26 - STArt Line 2 STA WSYNC ; 3 26 - STArt Line 2
STA GRP1 ; 3 3 - Set Player 1 Graphics Data STA GRP1 ; 3 3 - Set Player 1 Graphics Data
LDX #0 ; 2 5 - Set Playfield Pattern for LDX #0 ; 2 5 - Set Playfield Pattern for

View File

@ -1,11 +1,6 @@
/* k2line.a02 - Two Line Kernal Functions for C02 */ /* k2line.a02 - Atari 2600 Two Line Kernal */
char scnlns; //Number of Scanlines to Display void p0prep(); //Prepare Player 0 for Display
void p1prep(); //Prepare Player 1 for Display
void setpl0(); //Set Player 0 Data
void setpl1(); //Set Player 1 Data
void prppl0(); //Prep Player 0
void prppl1(); //Prep Player 1
void dsplns(); //Display Lines void dsplns(); //Display Lines