1798 lines
44 KiB
ArmAsm
1798 lines
44 KiB
ArmAsm
|
DSK JUMPYGUY
|
||
|
|
||
|
**************************************************
|
||
|
* To Do:
|
||
|
*
|
||
|
**************************************************
|
||
|
* Variables
|
||
|
**************************************************
|
||
|
|
||
|
ROW EQU $FA ; row/col in text screen
|
||
|
COLUMN EQU $FB
|
||
|
CHAR EQU $FC ; char/pixel to plot
|
||
|
PROGRESS EQU $FD ; write to main or alt
|
||
|
PLOTROW EQU $FE ; row/col in text page
|
||
|
PLOTCOLUMN EQU $FF
|
||
|
RNDSEED EQU $EA ; +eb +ec
|
||
|
SPRITEOFFSET EQU $CE ; where am I in the midst of drawing
|
||
|
SPRITEINDEX EQU $1D ; which table do I look for sprite data
|
||
|
SPRITELO EQU $1E ; address of sprite pixel table
|
||
|
SPRITEHI EQU $1F
|
||
|
PLOTINDEX EQU $1C ; which sprite am i drawing
|
||
|
SPRITEWIDTH EQU $ED
|
||
|
SPRITEHEIGHT EQU $EF
|
||
|
BGCHAR EQU $40 ; stores the background pixel for overwriting
|
||
|
JUMPING EQU $41 ; are we jumping, and if so, what frame are we on
|
||
|
COLLISIONROW EQU $E1 ; address of colliding pixels
|
||
|
COLLISIONCOLUMN EQU $E2
|
||
|
COLLISIONFLAG EQU $E3 ; has there been a collision this frame?
|
||
|
|
||
|
PLAYERSCORE EQU $09
|
||
|
HISCORE EQU $0A
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* Apple Standard Memory Locations
|
||
|
**************************************************
|
||
|
CLRLORES EQU $F832
|
||
|
LORES EQU $C050
|
||
|
TXTSET EQU $C051
|
||
|
MIXCLR EQU $C052
|
||
|
MIXSET EQU $C053
|
||
|
TXTPAGE1 EQU $C054
|
||
|
TXTPAGE2 EQU $C055
|
||
|
KEY EQU $C000
|
||
|
C80STOREOFF EQU $C000
|
||
|
C80STOREON EQU $C001
|
||
|
STROBE EQU $C010
|
||
|
SPEAKER EQU $C030
|
||
|
VBL EQU $C02E
|
||
|
RDVBLBAR EQU $C019 ;not VBL (VBL signal low
|
||
|
WAIT EQU $FCA8
|
||
|
RAMWRTAUX EQU $C005
|
||
|
RAMWRTMAIN EQU $C004
|
||
|
SETAN3 EQU $C05E ;Set annunciator-3 output to 0
|
||
|
SET80VID EQU $C00D ;enable 80-column display mode (WR-only)
|
||
|
HOME EQU $FC58 ; clear the text screen
|
||
|
CH EQU $24 ; cursor Horiz
|
||
|
CV EQU $25 ; cursor Vert
|
||
|
VTAB EQU $FC22 ; Sets the cursor vertical position (from CV)
|
||
|
COUT EQU $FDED ; Calls the output routine whose address is stored in CSW,
|
||
|
; normally COUTI
|
||
|
STROUT EQU $DB3A ;Y=String ptr high, A=String ptr low
|
||
|
|
||
|
ALTTEXT EQU $C055
|
||
|
ALTTEXTOFF EQU $C054
|
||
|
|
||
|
ROMINIT EQU $FB2F
|
||
|
ROMSETKBD EQU $FE89
|
||
|
ROMSETVID EQU $FE93
|
||
|
|
||
|
ALTCHAR EQU $C00F ; enables alternative character set - mousetext
|
||
|
|
||
|
BLINK EQU $F3
|
||
|
SPEED EQU $F1
|
||
|
|
||
|
**************************************************
|
||
|
* START - sets up various fiddly zero page bits
|
||
|
**************************************************
|
||
|
|
||
|
ORG $2000 ; PROGRAM DATA STARTS AT $2000
|
||
|
|
||
|
JSR ROMSETVID ; Init char output hook at $36/$37
|
||
|
JSR ROMSETKBD ; Init key input hook at $38/$39
|
||
|
JSR ROMINIT ; GR/HGR off, Text page 1
|
||
|
|
||
|
LDA #$01
|
||
|
STA PROGRESS ; which page do we write to
|
||
|
|
||
|
LDA #$00
|
||
|
STA BLINK ; blinking text? no thanks.
|
||
|
STA JUMPING
|
||
|
STA BGCHAR
|
||
|
STA LORES ; low res graphics mode
|
||
|
STA COLLISIONFLAG ; no collision yet
|
||
|
STA NUMBEROFSPRITES ; just the runner for attract screen
|
||
|
STA HISCORE
|
||
|
STA PLAYERSCORE
|
||
|
JSR CLRLORES ; clear screen
|
||
|
|
||
|
|
||
|
DRAWBOARD JSR HOME
|
||
|
|
||
|
LDA #$70
|
||
|
STA SPEED ; re-using the applesoft variable. fun.
|
||
|
|
||
|
|
||
|
STA ALTTEXTOFF ; display main text page
|
||
|
JSR RNDINIT ; *should* cycle the random seed.
|
||
|
LDA #$00
|
||
|
STA NUMBEROFSPRITES ; just the runner for attract screen
|
||
|
STA SPRITECOLUMN
|
||
|
STA LASTCOLUMN ; reset runner position
|
||
|
INC PROGRESS
|
||
|
|
||
|
|
||
|
* SPRITECOLUMN HEX 01,28,40,58
|
||
|
* need to reset the runner and sprites for next try
|
||
|
LDX #$0
|
||
|
LDA #$01
|
||
|
STA SPRITECOLUMN,X
|
||
|
INX
|
||
|
LDA #$28
|
||
|
STA SPRITECOLUMN,X
|
||
|
INX
|
||
|
LDA #$40
|
||
|
STA SPRITECOLUMN,X
|
||
|
INX
|
||
|
LDA #$58
|
||
|
STA SPRITECOLUMN,X
|
||
|
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* blanks the screen
|
||
|
**************************************************
|
||
|
; FOR EACH ROW/COLUMN
|
||
|
|
||
|
LDA #$18 ; X = 24
|
||
|
STA PLOTROW
|
||
|
ROWLOOP2 ; (ROW 20 to 0)
|
||
|
DEC PLOTROW ; start columnloop (COLUMN 0 to 40)
|
||
|
LDA #$28
|
||
|
STA PLOTCOLUMN
|
||
|
COLUMNLOOP2 DEC PLOTCOLUMN
|
||
|
|
||
|
LDA PLOTROW
|
||
|
PLOTZERO LDA #$00 ; set all pixels to 00
|
||
|
PLOTLINE STA CHAR
|
||
|
JSR PLOTQUICK ; plot 00
|
||
|
INC PROGRESS
|
||
|
JSR PLOTQUICK ; plot 00 to alt
|
||
|
INC PROGRESS
|
||
|
|
||
|
LDA PLOTCOLUMN ; last COLUMN?
|
||
|
BNE COLUMNLOOP2 ; loop
|
||
|
|
||
|
; /columnloop2
|
||
|
|
||
|
LDA PLOTROW ; last ROW?
|
||
|
BNE ROWLOOP2 ; loop
|
||
|
|
||
|
; /rowloop2
|
||
|
JSR DRAWGROUND
|
||
|
INC PROGRESS
|
||
|
JSR DRAWGROUND
|
||
|
JSR DRAWCLOUDS
|
||
|
JSR DRAWSCOREBD
|
||
|
|
||
|
* if the high score is above, say, 90. You get a burger.
|
||
|
|
||
|
LDA PLAYERSCORE
|
||
|
CMP #$5A
|
||
|
BCS BURGERTIME
|
||
|
|
||
|
JSR DRAWLOGO
|
||
|
INC PROGRESS
|
||
|
JSR DRAWLOGO
|
||
|
|
||
|
JMP FIXJUMP
|
||
|
|
||
|
BURGERTIME JSR DRAWBURGER
|
||
|
INC PROGRESS
|
||
|
JSR DRAWBURGER
|
||
|
|
||
|
|
||
|
FIXJUMP LDA #$11 ; fix jumper masking on first frame of attract mode
|
||
|
STA LASTROW
|
||
|
STA SPRITEROW
|
||
|
|
||
|
LDA PLAYERSCORE
|
||
|
CMP HISCORE
|
||
|
BCC NOHISCORE
|
||
|
* if the current PLAYERSCORE is higher than hiscore, set HISCORE, then reset PLAYERSCORE
|
||
|
STA HISCORE
|
||
|
NOHISCORE JSR UPDATEHISCORE
|
||
|
LDA #$00
|
||
|
STA PLAYERSCORE
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* MAIN LOOP
|
||
|
* waits for keyboard input, moves cursor, etc
|
||
|
**************************************************
|
||
|
|
||
|
ATTRACT
|
||
|
JSR NEXTSCREEN ; animate one frame per loop
|
||
|
|
||
|
LDA SPEED
|
||
|
JSR WAIT
|
||
|
|
||
|
LDA KEY ; check for keydown
|
||
|
CMP #$A0 ; space bar pause?
|
||
|
BEQ STARTGAME
|
||
|
|
||
|
CMP #$9B ; ESC
|
||
|
BEQ END ; exit on ESC?
|
||
|
|
||
|
JSR DRAWCLOUDS
|
||
|
|
||
|
|
||
|
JMP ATTRACT ; loop until a key
|
||
|
|
||
|
STARTGAME STA STROBE
|
||
|
|
||
|
JSR ERASELOGO
|
||
|
INC PROGRESS
|
||
|
JSR ERASELOGO
|
||
|
|
||
|
LDA #$03
|
||
|
STA NUMBEROFSPRITES ; add obstacle sprites
|
||
|
|
||
|
JMP MAIN ; back to waiting for a key
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* MAIN LOOP
|
||
|
* waits for keyboard input, moves cursor, etc
|
||
|
**************************************************
|
||
|
|
||
|
MAIN
|
||
|
MAINLOOP JSR NEXTSCREEN ; animate one frame per loop
|
||
|
|
||
|
LDA COLLISIONFLAG ; collided with something on last go-round. time to reset.
|
||
|
BNE GOTRESET
|
||
|
|
||
|
LDA KEY ; check for keydown
|
||
|
CMP #$A0 ; space bar
|
||
|
BEQ GOTJUMP ;
|
||
|
CMP #$D2 ; R to reset
|
||
|
BEQ GOTRESET
|
||
|
|
||
|
CMP #$9B ; ESC
|
||
|
BEQ END ; exit on ESC?
|
||
|
|
||
|
CMP #$CA ; J also jumps
|
||
|
BEQ GOTJUMP ;
|
||
|
|
||
|
GOLOOP JMP MAINLOOP ; loop until a key
|
||
|
|
||
|
|
||
|
|
||
|
GOTJUMP STA STROBE
|
||
|
* if jumping == 0, then jumping == 1
|
||
|
LDA JUMPING
|
||
|
BNE ALREADYJUMPING ; not zero, skip
|
||
|
INC JUMPING ; should be 1 now.
|
||
|
|
||
|
ALREADYJUMPING
|
||
|
JMP MAINLOOP ; back to waiting for a key
|
||
|
|
||
|
GOTRESET STA STROBE
|
||
|
JMP DRAWBOARD
|
||
|
|
||
|
END STA STROBE
|
||
|
STA ALTTEXTOFF
|
||
|
STA TXTSET
|
||
|
JSR HOME
|
||
|
RTS ; END
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* subroutines
|
||
|
*
|
||
|
**************************************************
|
||
|
|
||
|
**************************************************
|
||
|
* main animation loop
|
||
|
**************************************************
|
||
|
|
||
|
NEXTSCREEN
|
||
|
|
||
|
* MASK ALL THE SPRITES *THEN*
|
||
|
* RENDER ALL THE SPRITES
|
||
|
|
||
|
|
||
|
LOADSPRITES
|
||
|
LDX NUMBEROFSPRITES ; number of sprites, starts with last one
|
||
|
STX PLOTINDEX ; start with last sprite, PLOTINDEX decrements per loop
|
||
|
INC PLOTINDEX
|
||
|
|
||
|
* MASK the sprites *i just rendered* on the hidden frame
|
||
|
MASKALLTHETHINGS
|
||
|
|
||
|
DEC PLOTINDEX
|
||
|
LDX PLOTINDEX
|
||
|
LDA SPRITEINDEXTABLE,X ; use spriteindex to mask sprites. all else is X for position, velocity
|
||
|
STA SPRITEINDEX
|
||
|
LDX SPRITEINDEX
|
||
|
LDA SPRITEWIDTHTABLE,X
|
||
|
STA SPRITEWIDTH
|
||
|
LDA SPRITEHEIGHTTABLE,X
|
||
|
STA SPRITEHEIGHT
|
||
|
|
||
|
LDX PLOTINDEX ; return X to plotindex for plotting position
|
||
|
LDA SPRITEROW,X
|
||
|
STA PLOTROW
|
||
|
STA LASTROW,X
|
||
|
LDA SPRITECOLUMN,X
|
||
|
STA PLOTCOLUMN
|
||
|
STA LASTCOLUMN,X
|
||
|
INC PROGRESS
|
||
|
JSR CLEARSPRITE ; be sure to clear previous frames before animating, since it's not triggered by movement
|
||
|
INC PROGRESS
|
||
|
|
||
|
LDA PLOTINDEX
|
||
|
BNE MASKALLTHETHINGS ; do runner/sprite zero last.
|
||
|
;/MASKALLTHETHINGS
|
||
|
|
||
|
INC PROGRESS
|
||
|
JSR DRAWGROUND ; covers the mask with green grass layer
|
||
|
INC PROGRESS
|
||
|
|
||
|
|
||
|
|
||
|
* plot the runner, sprite 0
|
||
|
* define the proper sprite
|
||
|
|
||
|
RUNNINGMAN
|
||
|
* animate sprite 0 - should rotate between runners on each frame.
|
||
|
LDA JUMPING
|
||
|
BNE JUMPINGMAN
|
||
|
* if JUMPING not zero, skip to JUMPINGMAN
|
||
|
|
||
|
LDX #$0 ; load SPRITEINDEXTABLE,0
|
||
|
STX PLOTINDEX ; reset plotindex for sprite 0
|
||
|
LDA SPRITEINDEXTABLE,X
|
||
|
CLC
|
||
|
ADC #$01 ; INC it 05->06->07->08
|
||
|
CMP #$09
|
||
|
BCC SWAPTY ; if more than 8, set to 5 then swap
|
||
|
LDA #$05
|
||
|
SWAPTY JSR SWAPSPRITE ; SWAP SPRITEINDEX
|
||
|
|
||
|
|
||
|
LDX SPRITEINDEXTABLE ; use spriteindex to swap sprites. all else is plotindex for position, velocity
|
||
|
|
||
|
LDA SPRITELOTABLE,X
|
||
|
STA SPRITELO
|
||
|
LDA SPRITEHITABLE,X
|
||
|
STA SPRITEHI
|
||
|
|
||
|
LDA SPRITEWIDTHTABLE,X
|
||
|
STA SPRITEWIDTH
|
||
|
LDA SPRITEHEIGHTTABLE,X
|
||
|
STA SPRITEHEIGHT
|
||
|
|
||
|
LDX #$0
|
||
|
|
||
|
LDA SPRITEROW,X
|
||
|
STA PLOTROW
|
||
|
STA LASTROW
|
||
|
LDA SPRITECOLUMN,X
|
||
|
STA PLOTCOLUMN
|
||
|
STA LASTCOLUMN
|
||
|
JSR PLOTSPRITE ; plot sprite zero, runner.
|
||
|
|
||
|
|
||
|
JMP CONTINUERUNNING
|
||
|
|
||
|
|
||
|
|
||
|
JUMPINGMAN
|
||
|
LDX #$0 ; load SPRITEINDEXTABLE,0
|
||
|
STX PLOTINDEX ; reset plotindex for sprite 0
|
||
|
|
||
|
* if spriteindex,0 (runner) != 9, swapsprite to 9.
|
||
|
LDA SPRITEINDEXTABLE
|
||
|
CMP #$09
|
||
|
BEQ DONEYET
|
||
|
LDA #$09
|
||
|
JSR SWAPSPRITE
|
||
|
|
||
|
|
||
|
|
||
|
* if jumping > 11, done jumping, swapsprite to 5. set jumping to 0
|
||
|
DONEYET INC JUMPING
|
||
|
LDA JUMPING
|
||
|
CMP #$12 ; 18 frames of jumping
|
||
|
BCC CONTINUEJUMPING
|
||
|
|
||
|
DONEJUMPING LDA #$0
|
||
|
STA JUMPING
|
||
|
LDA #$05
|
||
|
JSR SWAPSPRITE
|
||
|
|
||
|
LDX SPRITEINDEXTABLE ; use spriteindex to mask sprites. all else is X for position, velocity
|
||
|
LDA SPRITEWIDTHTABLE,X
|
||
|
STA SPRITEWIDTH
|
||
|
LDA SPRITEHEIGHTTABLE,X
|
||
|
STA SPRITEHEIGHT
|
||
|
|
||
|
LDX #$0 ; return X to plotindex of 0 for plotting position
|
||
|
LDA SPRITEROW,X
|
||
|
STA PLOTROW
|
||
|
STA LASTROW
|
||
|
LDA SPRITECOLUMN,X
|
||
|
STA PLOTCOLUMN
|
||
|
STA LASTCOLUMN
|
||
|
|
||
|
JSR CLEARSPRITE ; be sure to clear previous frames before animating, since it's not triggered by movement
|
||
|
|
||
|
|
||
|
|
||
|
* otherwise
|
||
|
STILLJUMPING
|
||
|
* increment jumping frame number
|
||
|
|
||
|
CONTINUEJUMPING
|
||
|
|
||
|
LDX JUMPING ; if not jumping, or *done* jumping, uses JUMPINGCURVE,0
|
||
|
LDA JUMPINGCURVE,X ; what row to render on which frame of the JUMP
|
||
|
STA SPRITEROW ; spriterow, 0
|
||
|
STA LASTROW ; LASTROW,0
|
||
|
|
||
|
LDX SPRITEINDEXTABLE ; use spriteindex to swap sprites. all else is plotindex for position, velocity
|
||
|
|
||
|
LDA SPRITELOTABLE,X
|
||
|
STA SPRITELO
|
||
|
LDA SPRITEHITABLE,X
|
||
|
STA SPRITEHI
|
||
|
|
||
|
LDA SPRITEWIDTHTABLE,X
|
||
|
STA SPRITEWIDTH
|
||
|
LDA SPRITEHEIGHTTABLE,X
|
||
|
STA SPRITEHEIGHT
|
||
|
|
||
|
LDX #$0
|
||
|
|
||
|
LDA SPRITEROW,X
|
||
|
STA PLOTROW
|
||
|
STA LASTROW
|
||
|
LDA SPRITECOLUMN,X
|
||
|
STA PLOTCOLUMN
|
||
|
STA LASTCOLUMN
|
||
|
JSR PLOTSPRITE ; plot sprite zero, runner.
|
||
|
|
||
|
|
||
|
CONTINUERUNNING
|
||
|
|
||
|
COLLIDINGORNOT
|
||
|
* set colliding sprites to FF
|
||
|
LDA #$FF
|
||
|
LDY #$0
|
||
|
STY COLLISIONFLAG ; clear collision detector flag
|
||
|
STA COLLIDINGSPRITES,Y
|
||
|
LDY #$1
|
||
|
STA COLLIDINGSPRITES,Y
|
||
|
|
||
|
|
||
|
|
||
|
* plot obstacle sprites
|
||
|
|
||
|
LDX NUMBEROFSPRITES ; number of sprites, starts with last one
|
||
|
STX PLOTINDEX ; start with last sprite, PLOTINDEX decrements per loop
|
||
|
LDA PLOTINDEX
|
||
|
BNE NEXTSPRITE
|
||
|
JMP UPDATESCREEN ; sprite zero already done. chill.
|
||
|
|
||
|
|
||
|
NEXTSPRITE LDA SPRITEINDEXTABLE,X ; get the index of that sprite - may be out of order
|
||
|
STA SPRITEINDEX
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
* define the obstacle sprite
|
||
|
LDX SPRITEINDEX ; use spriteindex to swap sprites. all else is plotindex for position, velocity
|
||
|
|
||
|
LDA SPRITELOTABLE,X
|
||
|
STA SPRITELO
|
||
|
LDA SPRITEHITABLE,X
|
||
|
STA SPRITEHI
|
||
|
|
||
|
LDA SPRITEWIDTHTABLE,X
|
||
|
STA SPRITEWIDTH
|
||
|
LDA SPRITEHEIGHTTABLE,X
|
||
|
STA SPRITEHEIGHT
|
||
|
|
||
|
LDX PLOTINDEX ; return X to plotindex for plotting position
|
||
|
|
||
|
|
||
|
* update obstacle position
|
||
|
|
||
|
* if moving left, decrement SPRITECOLUMN
|
||
|
* if moving right, increment SPRITECOLUMN
|
||
|
HORIZONTAL LDA HORIZSIGN,X
|
||
|
BEQ MOVINGLEFT
|
||
|
LDA SPRITECOLUMN,X
|
||
|
CLC
|
||
|
ADC HVELOCITY,X
|
||
|
STA SPRITECOLUMN,X
|
||
|
STA PLOTCOLUMN
|
||
|
JMP NEXTOBSTACLE
|
||
|
MOVINGLEFT LDA SPRITECOLUMN,X
|
||
|
SEC
|
||
|
SBC HVELOCITY,X
|
||
|
STA SPRITECOLUMN,X
|
||
|
STA PLOTCOLUMN
|
||
|
CLC
|
||
|
ADC SPRITEWIDTH ; add the sprite width to see if it's all the way off screen
|
||
|
BMI OFFLEFT
|
||
|
JMP NEXTOBSTACLE ; still positive number, still on screen
|
||
|
|
||
|
OFFLEFT LDA #$40 ; off the left side. wrap around to right side
|
||
|
STA SPRITECOLUMN,X
|
||
|
|
||
|
* cleared an obstacle. Increment the player score. In DECIMAL
|
||
|
LDA PLAYERSCORE
|
||
|
SED
|
||
|
CLC
|
||
|
ADC #$01
|
||
|
STA PLAYERSCORE
|
||
|
CLD
|
||
|
|
||
|
* display updated player score
|
||
|
|
||
|
STX $07 ; hang onto X
|
||
|
JSR UPDATESCORE
|
||
|
LDX $07 ; back to X, thanks.
|
||
|
|
||
|
* twinkle the stars.
|
||
|
JSR DRAWCLOUDS
|
||
|
|
||
|
|
||
|
|
||
|
* as one obstacle goes off to the left, kick another off from the right. speed up runner
|
||
|
|
||
|
LDA SPEED
|
||
|
CMP #$40 ; faster than $40, start ramping forward "level 2"
|
||
|
BCC GOTTAGOFAST ; speed max at 1, not 0. odd.
|
||
|
|
||
|
DEC SPEED ; running slightly faster with each iteration
|
||
|
JMP NEXTOBSTACLE
|
||
|
GOTTAGOFAST ; already running at full speed.
|
||
|
* start sending the obstacles two at a time?
|
||
|
DEC SPEED ; running slightly faster with each iteration
|
||
|
|
||
|
|
||
|
* move runner closer to obstacles
|
||
|
|
||
|
* need to mask the runner left side
|
||
|
STX $07 ; hang onto X
|
||
|
|
||
|
LDX SPRITEINDEXTABLE ; use spriteindex to mask sprites. all else is X for position, velocity
|
||
|
LDA SPRITEWIDTHTABLE,X
|
||
|
STA SPRITEWIDTH
|
||
|
LDA SPRITEHEIGHTTABLE,X
|
||
|
STA SPRITEHEIGHT
|
||
|
|
||
|
|
||
|
LDX #$0 ; zero for the runner sprite
|
||
|
JSR CLEARSPRITE ; flicker?
|
||
|
INC PROGRESS
|
||
|
JSR CLEARSPRITE ; flicker?
|
||
|
INC PROGRESS ; do i need both of these?
|
||
|
|
||
|
REDRAWRUNNER LDX SPRITEINDEXTABLE ; use spriteindex to swap sprites. all else is plotindex for position, velocity
|
||
|
|
||
|
LDA SPRITELOTABLE,X
|
||
|
STA SPRITELO
|
||
|
LDA SPRITEHITABLE,X
|
||
|
STA SPRITEHI
|
||
|
|
||
|
LDA SPRITEWIDTHTABLE,X
|
||
|
STA SPRITEWIDTH
|
||
|
LDA SPRITEHEIGHTTABLE,X
|
||
|
STA SPRITEHEIGHT
|
||
|
|
||
|
LDX #$0
|
||
|
|
||
|
* don't go completely off the screen
|
||
|
LDA SPRITECOLUMN
|
||
|
CMP #$1C
|
||
|
BCS REPLOTRUNNER
|
||
|
|
||
|
MOVERIGHT INC SPRITECOLUMN ; spritecolumn, 0 = runner horiz position.
|
||
|
INC LASTCOLUMN
|
||
|
|
||
|
REPLOTRUNNER LDA SPRITEROW,X
|
||
|
STA PLOTROW
|
||
|
STA LASTROW
|
||
|
LDA SPRITECOLUMN,X
|
||
|
STA PLOTCOLUMN
|
||
|
STA LASTCOLUMN
|
||
|
JSR PLOTSPRITE ; plot sprite zero, runner.
|
||
|
|
||
|
|
||
|
LDX $07 ; back to X, thanks.
|
||
|
|
||
|
|
||
|
|
||
|
NEXTOBSTACLE
|
||
|
LDA SPRITEROW,X
|
||
|
STA PLOTROW
|
||
|
LDA SPRITECOLUMN,X
|
||
|
STA PLOTCOLUMN
|
||
|
|
||
|
LDA SPRITEINDEXTABLE,X ; get the index of that sprite - may be out of order
|
||
|
STA SPRITEINDEX
|
||
|
|
||
|
* redefine the ball sprite
|
||
|
LDX SPRITEINDEX ; use spriteindex to swap sprites. all else is plotindex for position, velocity
|
||
|
|
||
|
LDA SPRITELOTABLE,X
|
||
|
STA SPRITELO
|
||
|
LDA SPRITEHITABLE,X
|
||
|
STA SPRITEHI
|
||
|
|
||
|
LDA SPRITEWIDTHTABLE,X
|
||
|
STA SPRITEWIDTH
|
||
|
LDA SPRITEHEIGHTTABLE,X
|
||
|
STA SPRITEHEIGHT
|
||
|
|
||
|
* plot new sprite on next frame
|
||
|
PLOTOBSTACLE JSR PLOTSPRITE
|
||
|
|
||
|
|
||
|
CHECKCOLLISION LDA COLLISIONFLAG
|
||
|
BEQ NOCOLLISION ; still zero, no collision yet
|
||
|
|
||
|
|
||
|
* collision detected.
|
||
|
* show crash sprite, centered on collision location.
|
||
|
* save the current score
|
||
|
* compare to the high score
|
||
|
* if higher, adjust the high score
|
||
|
* kill the player and return to ATTRACT
|
||
|
|
||
|
|
||
|
LDA COLLISIONROW
|
||
|
STA PLOTROW
|
||
|
DEC PLOTROW
|
||
|
DEC PLOTROW
|
||
|
LDA COLLISIONCOLUMN
|
||
|
STA PLOTCOLUMN
|
||
|
DEC PLOTCOLUMN
|
||
|
DEC PLOTCOLUMN
|
||
|
DEC PLOTCOLUMN
|
||
|
* redefine the obstacle sprite
|
||
|
LDX #$0 ; spriteindex 0 = splosion.
|
||
|
|
||
|
LDA SPRITELOTABLE,X
|
||
|
STA SPRITELO
|
||
|
LDA SPRITEHITABLE,X
|
||
|
STA SPRITEHI
|
||
|
|
||
|
LDA SPRITEWIDTHTABLE,X
|
||
|
STA SPRITEWIDTH
|
||
|
LDA SPRITEHEIGHTTABLE,X
|
||
|
STA SPRITEHEIGHT
|
||
|
|
||
|
* plot new sprite on next frame
|
||
|
INC PROGRESS
|
||
|
JSR PLOTSPRITE
|
||
|
INC PROGRESS
|
||
|
LDA COLLISIONROW
|
||
|
STA PLOTROW
|
||
|
DEC PLOTROW
|
||
|
DEC PLOTROW
|
||
|
LDA COLLISIONCOLUMN
|
||
|
STA PLOTCOLUMN
|
||
|
DEC PLOTCOLUMN
|
||
|
DEC PLOTCOLUMN
|
||
|
DEC PLOTCOLUMN
|
||
|
JSR PLOTSPRITE
|
||
|
|
||
|
JSR BONK ; animation *and* sound? Dinner *and* a show?
|
||
|
|
||
|
LDA #$ff
|
||
|
JSR WAIT
|
||
|
|
||
|
JMP ENDSCREEN
|
||
|
|
||
|
|
||
|
NOCOLLISION
|
||
|
|
||
|
* loop for next sprite
|
||
|
DEC PLOTINDEX
|
||
|
BEQ UPDATESCREEN ; plotindex of 0, we already did the runner
|
||
|
BNE LOOPTY ; not yet 0, go back and plot another sprite
|
||
|
|
||
|
|
||
|
LOOPTY LDX PLOTINDEX
|
||
|
JMP NEXTSPRITE
|
||
|
|
||
|
|
||
|
UPDATESCREEN
|
||
|
INC PROGRESS
|
||
|
ROR PROGRESS ; lowest bit into carry
|
||
|
BCC ALTSCREEN ; carry set on odd, not on even
|
||
|
STA ALTTEXTOFF
|
||
|
JMP NORMSCREEN
|
||
|
|
||
|
ALTSCREEN STA ALTTEXT
|
||
|
|
||
|
|
||
|
* wait after screen swap, to let it happen?
|
||
|
NORMSCREEN ROL PROGRESS
|
||
|
|
||
|
LDA SPEED
|
||
|
JSR WAIT
|
||
|
|
||
|
ENDSCREEN RTS
|
||
|
|
||
|
;/NEXTSCREEN
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* Draw a sprite at PLOTROW, PLOTCOLUMN - clobbers A, Y
|
||
|
**************************************************
|
||
|
|
||
|
PLOTSPRITE
|
||
|
LDA #$0
|
||
|
STA SPRITEOFFSET ; set offset to 0
|
||
|
|
||
|
LDA #$0
|
||
|
STA ROW ; for each ROW in X
|
||
|
|
||
|
SPRITEROWS LDA #$0
|
||
|
STA COLUMN ; for each COLUMN in Y
|
||
|
LDA PLOTCOLUMN
|
||
|
CLC
|
||
|
ADC COLUMN
|
||
|
STA PLOTCOLUMN
|
||
|
SPRITECOLUMNS LDY SPRITEOFFSET
|
||
|
LDA (SPRITELO),Y ; LDA Sprite Origin,OFFSET
|
||
|
STA CHAR ; store character
|
||
|
INC PROGRESS
|
||
|
JSR PLOTCHAR ; PLOT on offscreen frame
|
||
|
INC PROGRESS
|
||
|
INC SPRITEOFFSET
|
||
|
INC PLOTCOLUMN
|
||
|
INC COLUMN
|
||
|
LDA SPRITEWIDTH
|
||
|
CMP COLUMN
|
||
|
BCS SPRITECOLUMNS ; do next column
|
||
|
|
||
|
INC PLOTROW
|
||
|
INC ROW
|
||
|
DEC PLOTCOLUMN
|
||
|
LDA PLOTCOLUMN ; PLOTCOLUMN back to sprite's origin
|
||
|
SEC
|
||
|
SBC SPRITEWIDTH
|
||
|
STA PLOTCOLUMN
|
||
|
|
||
|
LDA SPRITEHEIGHT
|
||
|
CMP ROW
|
||
|
BCS SPRITEROWS ; do next row
|
||
|
|
||
|
SPRITEDONE RTS
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* Erase sprite-sized hole at lastrow, lastcolumn - clobbers A
|
||
|
**************************************************
|
||
|
|
||
|
CLEARSPRITE
|
||
|
LDA #$0
|
||
|
STA SPRITEOFFSET ; set offset to 0
|
||
|
STA ROW ; for each ROW in X
|
||
|
|
||
|
LDA LASTROW,X
|
||
|
STA PLOTROW
|
||
|
LDA LASTCOLUMN,X
|
||
|
SEC
|
||
|
SBC HVELOCITY,X ; obstacles moving left, dammit.
|
||
|
STA PLOTCOLUMN
|
||
|
|
||
|
|
||
|
CLEARROWS LDA #$0
|
||
|
STA COLUMN ; for each COLUMN in Y
|
||
|
LDA PLOTCOLUMN
|
||
|
CLC
|
||
|
ADC COLUMN
|
||
|
STA PLOTCOLUMN
|
||
|
CLEARCOLUMNS LDY SPRITEOFFSET
|
||
|
LDA #$00
|
||
|
STA CHAR ; store character
|
||
|
JSR PLOTQUICK ; PLOT on offscreen frame
|
||
|
INC SPRITEOFFSET
|
||
|
INC PLOTCOLUMN
|
||
|
INC COLUMN
|
||
|
; LDA SPRITEWIDTH
|
||
|
LDA #$08 ; clear 9px wide mask
|
||
|
CMP COLUMN
|
||
|
BCS CLEARCOLUMNS ; do next column
|
||
|
|
||
|
INC PLOTROW
|
||
|
INC ROW
|
||
|
DEC PLOTCOLUMN
|
||
|
LDA PLOTCOLUMN ; PLOTCOLUMN back to sprite's origin
|
||
|
SEC
|
||
|
; SBC SPRITEWIDTH
|
||
|
SBC #$08
|
||
|
STA PLOTCOLUMN
|
||
|
|
||
|
LDA SPRITEHEIGHT
|
||
|
CMP ROW
|
||
|
BCS CLEARROWS ; do next row
|
||
|
|
||
|
CLEARDONE RTS
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* process two digit score (decimal) into two
|
||
|
* numeral sprites - clobbers A, X
|
||
|
**************************************************
|
||
|
|
||
|
UPDATESCORE
|
||
|
|
||
|
* get score
|
||
|
LDA PLAYERSCORE
|
||
|
* get low nibble of score
|
||
|
* AND score with 0F
|
||
|
AND #$0F
|
||
|
* load sprite for that digit
|
||
|
CLC
|
||
|
ADC #$0A
|
||
|
* spriteindex = digit + #$0A to X
|
||
|
TAX
|
||
|
|
||
|
LDA SPRITELOTABLE,X
|
||
|
STA SPRITELO
|
||
|
LDA SPRITEHITABLE,X
|
||
|
STA SPRITEHI
|
||
|
|
||
|
LDA SPRITEWIDTHTABLE,X
|
||
|
STA SPRITEWIDTH
|
||
|
LDA SPRITEHEIGHTTABLE,X
|
||
|
STA SPRITEHEIGHT
|
||
|
|
||
|
* plotrow = 0
|
||
|
LDA #$0
|
||
|
STA PLOTROW
|
||
|
* plotcolumn = #$0C and #$11
|
||
|
LDA #$11
|
||
|
STA PLOTCOLUMN
|
||
|
JSR PLOTSPRITE
|
||
|
INC PROGRESS
|
||
|
* plot sprite again for alternate frame
|
||
|
LDA #$0
|
||
|
STA PLOTROW
|
||
|
LDA #$11
|
||
|
STA PLOTCOLUMN
|
||
|
JSR PLOTSPRITE ; plot those sprites where they already are
|
||
|
INC PROGRESS
|
||
|
|
||
|
* get score
|
||
|
LDA PLAYERSCORE
|
||
|
* get HI nibble of score
|
||
|
* AND score with F0
|
||
|
AND #$F0
|
||
|
LSR
|
||
|
LSR
|
||
|
LSR
|
||
|
LSR
|
||
|
* load sprite for that digit
|
||
|
CLC
|
||
|
ADC #$0A
|
||
|
* spriteindex = digit + #$0A to X
|
||
|
TAX
|
||
|
|
||
|
LDA SPRITELOTABLE,X
|
||
|
STA SPRITELO
|
||
|
LDA SPRITEHITABLE,X
|
||
|
STA SPRITEHI
|
||
|
|
||
|
LDA SPRITEWIDTHTABLE,X
|
||
|
STA SPRITEWIDTH
|
||
|
LDA SPRITEHEIGHTTABLE,X
|
||
|
STA SPRITEHEIGHT
|
||
|
|
||
|
* plotrow = 0
|
||
|
LDA #$0
|
||
|
STA PLOTROW
|
||
|
* plotcolumn = #$0C and #$11
|
||
|
LDA #$0C
|
||
|
STA PLOTCOLUMN
|
||
|
JSR PLOTSPRITE
|
||
|
INC PROGRESS
|
||
|
* plot sprite again for alternate frame
|
||
|
LDA #$0
|
||
|
STA PLOTROW
|
||
|
LDA #$0C
|
||
|
STA PLOTCOLUMN
|
||
|
JSR PLOTSPRITE ; plot those sprites where they already are
|
||
|
INC PROGRESS
|
||
|
|
||
|
|
||
|
|
||
|
RTS
|
||
|
|
||
|
**************************************************
|
||
|
* process two digit high score (decimal) into two
|
||
|
* numeral sprites - clobbers A, X
|
||
|
**************************************************
|
||
|
|
||
|
|
||
|
UPDATEHISCORE
|
||
|
|
||
|
* get score
|
||
|
LDA HISCORE
|
||
|
* get low nibble of score
|
||
|
* AND score with 0F
|
||
|
AND #$0F
|
||
|
* load sprite for that digit
|
||
|
CLC
|
||
|
ADC #$0A
|
||
|
* spriteindex = digit + #$0A to X
|
||
|
TAX
|
||
|
|
||
|
LDA SPRITELOTABLE,X
|
||
|
STA SPRITELO
|
||
|
LDA SPRITEHITABLE,X
|
||
|
STA SPRITEHI
|
||
|
|
||
|
LDA SPRITEWIDTHTABLE,X
|
||
|
STA SPRITEWIDTH
|
||
|
LDA SPRITEHEIGHTTABLE,X
|
||
|
STA SPRITEHEIGHT
|
||
|
|
||
|
* plotrow = 0
|
||
|
LDA #$0
|
||
|
STA PLOTROW
|
||
|
* plotcolumn = #$1D and #$23
|
||
|
LDA #$23
|
||
|
STA PLOTCOLUMN
|
||
|
JSR PLOTSPRITE
|
||
|
INC PROGRESS
|
||
|
* plot sprite again for alternate frame
|
||
|
LDA #$0
|
||
|
STA PLOTROW
|
||
|
LDA #$23
|
||
|
STA PLOTCOLUMN
|
||
|
JSR PLOTSPRITE ; plot those sprites where they already are
|
||
|
INC PROGRESS
|
||
|
|
||
|
* get score
|
||
|
LDA HISCORE
|
||
|
* get HI nibble of score
|
||
|
* AND score with F0
|
||
|
AND #$F0
|
||
|
LSR
|
||
|
LSR
|
||
|
LSR
|
||
|
LSR
|
||
|
* load sprite for that digit
|
||
|
CLC
|
||
|
ADC #$0A
|
||
|
* spriteindex = digit + #$0A to X
|
||
|
TAX
|
||
|
|
||
|
LDA SPRITELOTABLE,X
|
||
|
STA SPRITELO
|
||
|
LDA SPRITEHITABLE,X
|
||
|
STA SPRITEHI
|
||
|
|
||
|
LDA SPRITEWIDTHTABLE,X
|
||
|
STA SPRITEWIDTH
|
||
|
LDA SPRITEHEIGHTTABLE,X
|
||
|
STA SPRITEHEIGHT
|
||
|
|
||
|
* plotrow = 0
|
||
|
LDA #$0
|
||
|
STA PLOTROW
|
||
|
* plotcolumn = #$1D and #$23
|
||
|
LDA #$1e
|
||
|
STA PLOTCOLUMN
|
||
|
JSR PLOTSPRITE
|
||
|
INC PROGRESS
|
||
|
* plot sprite again for alternate frame
|
||
|
LDA #$0
|
||
|
STA PLOTROW
|
||
|
LDA #$1e
|
||
|
STA PLOTCOLUMN
|
||
|
JSR PLOTSPRITE ; plot those sprites where they already are
|
||
|
INC PROGRESS
|
||
|
|
||
|
|
||
|
|
||
|
RTS
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* prints one CHAR at PLOTROW,PLOTCOLUMN - clobbers A,Y
|
||
|
* used for plotting background elements that don't need collision detection
|
||
|
**************************************************
|
||
|
PLOTQUICK
|
||
|
LDY PLOTROW
|
||
|
TYA
|
||
|
CMP #$18
|
||
|
BCS OUTOFBOUNDS2 ; stop plotting if dimensions are outside screen
|
||
|
|
||
|
ROR PROGRESS
|
||
|
BCC PLOTQUICKALT ; every other frame, write to alt text page
|
||
|
|
||
|
LDA LoLineTableL,Y
|
||
|
STA $0
|
||
|
LDA LoLineTableH,Y
|
||
|
STA $1 ; now word/pointer at $0+$1 points to line
|
||
|
JMP LOADQUICK
|
||
|
|
||
|
PLOTQUICKALT LDA AltLineTableL,Y
|
||
|
STA $0
|
||
|
LDA AltLineTableH,Y
|
||
|
STA $1 ; now word/pointer at $0+$1 points to line
|
||
|
|
||
|
LOADQUICK ROL PROGRESS ; return progress state for next ROR
|
||
|
|
||
|
LDY PLOTCOLUMN
|
||
|
TYA
|
||
|
CMP #$28
|
||
|
BCS OUTOFBOUNDS2 ; stop plotting if dimensions are outside screen
|
||
|
|
||
|
STY $06 ; hang onto Y for a sec...
|
||
|
|
||
|
LDA CHAR
|
||
|
LDY $06
|
||
|
STA ($0),Y
|
||
|
|
||
|
OUTOFBOUNDS2 RTS
|
||
|
;/PLOTQUICK
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* prints one CHAR at PLOTROW,PLOTCOLUMN - clobbers A,Y
|
||
|
* checks for collisions. This is the tricky part.
|
||
|
**************************************************
|
||
|
PLOTCHAR
|
||
|
|
||
|
* "foreground" is obstacle sprite
|
||
|
* "background" is already rendered sprite 0, runner
|
||
|
|
||
|
* get char to overwrite
|
||
|
* if CHAR and BGCHAR are the same, skip?
|
||
|
JSR GETCHAR
|
||
|
STA BGCHAR
|
||
|
; CMP CHAR
|
||
|
; BEQ OUTOFBOUNDS
|
||
|
|
||
|
LDA CHAR
|
||
|
BEQ OUTOFBOUNDS ; don't plot 00 px
|
||
|
|
||
|
LDY PLOTROW
|
||
|
TYA
|
||
|
CMP #$18
|
||
|
BCS OUTOFBOUNDS ; stop plotting if dimensions are outside screen
|
||
|
|
||
|
CLC
|
||
|
ROR PROGRESS
|
||
|
BCC PLOTCHARALT ; every other frame, write to alt text page
|
||
|
ROL PROGRESS
|
||
|
|
||
|
LDA LoLineTableL,Y
|
||
|
STA $0
|
||
|
LDA LoLineTableH,Y
|
||
|
STA $1 ; now word/pointer at $0+$1 points to line
|
||
|
JMP LOADCHAR
|
||
|
|
||
|
PLOTCHARALT ROL PROGRESS
|
||
|
LDA AltLineTableL,Y
|
||
|
STA $0
|
||
|
LDA AltLineTableH,Y
|
||
|
STA $1 ; now word/pointer at $0+$1 points to line
|
||
|
|
||
|
LOADCHAR ; return progress state for next ROR
|
||
|
|
||
|
LDY PLOTCOLUMN
|
||
|
TYA
|
||
|
CMP #$28
|
||
|
BCS OUTOFBOUNDS ; stop plotting if dimensions are outside screen
|
||
|
|
||
|
STY $06 ; hang onto Y for a sec...
|
||
|
|
||
|
|
||
|
|
||
|
* check collisions only on rows with runner/obstacles
|
||
|
LDY PLOTROW
|
||
|
TYA
|
||
|
CMP #$17
|
||
|
BCS FULLPIXEL
|
||
|
|
||
|
CMP #$0F
|
||
|
BCC FULLPIXEL
|
||
|
|
||
|
|
||
|
CLOBBER LDA CHAR ; this would be a byte with two pixels
|
||
|
BEQ FULLPIXEL ; zero foreground pixel? ignore for collision
|
||
|
CMP #$CC ; green "grass" pixel? ignore
|
||
|
LDA BGCHAR
|
||
|
BEQ FULLPIXEL ; zero background pixel? ignore
|
||
|
CMP #$CC ; green "grass" pixel? ignore
|
||
|
BEQ FULLPIXEL
|
||
|
|
||
|
NONZERO
|
||
|
LDA #$01
|
||
|
STA COLLISIONFLAG ; set collision detected
|
||
|
|
||
|
JMP PLOTCOLLISION
|
||
|
|
||
|
FULLPIXEL LDA CHAR
|
||
|
LDY $06
|
||
|
STA ($0),Y
|
||
|
|
||
|
|
||
|
OUTOFBOUNDS RTS
|
||
|
;/PLOTCHAR
|
||
|
|
||
|
|
||
|
* DEBUG where pixels overlap, make a purple spot to track. #$33
|
||
|
|
||
|
PLOTCOLLISION
|
||
|
;LDA #$33 ; collision spot purple for debugging
|
||
|
;LDY PLOTCOLUMN
|
||
|
;STA (COLLISIONLO),Y ; collision spot purple
|
||
|
|
||
|
LDA CHAR
|
||
|
LDY $06
|
||
|
STA ($0),Y
|
||
|
|
||
|
LDA PLOTCOLUMN
|
||
|
STA COLLISIONCOLUMN
|
||
|
LDA PLOTROW
|
||
|
STA COLLISIONROW
|
||
|
|
||
|
COLLISIONDONE RTS
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* changes index in SPRITEINDEXTABLE to new value from Accumulator - clobbers Y
|
||
|
**************************************************
|
||
|
|
||
|
SWAPSPRITE
|
||
|
LDY PLOTINDEX ; get current plotindex
|
||
|
STA SPRITEINDEXTABLE,Y ; put accumulator's sprite index into table instead of current ball
|
||
|
RTS
|
||
|
|
||
|
**************************************************
|
||
|
* GETS one CHAR at PLOTROW,PLOTCOLUMN - value returns in Accumulator - clobbers Y
|
||
|
**************************************************
|
||
|
GETCHAR
|
||
|
LDY PLOTROW
|
||
|
CLC
|
||
|
ROR PROGRESS
|
||
|
BCC GETCHARALT ; every other frame, write to alt text page
|
||
|
ROL PROGRESS ; return progress state for next ROR
|
||
|
|
||
|
LDA LoLineTableL,Y
|
||
|
STA $0
|
||
|
LDA LoLineTableH,Y
|
||
|
JMP STORECHAR
|
||
|
|
||
|
GETCHARALT ROL PROGRESS ; return progress state for next ROR
|
||
|
LDA AltLineTableL,Y
|
||
|
STA $0
|
||
|
LDA AltLineTableH,Y
|
||
|
|
||
|
STORECHAR STA $1 ; now word/pointer at $0+$1 points to line
|
||
|
LDY PLOTCOLUMN
|
||
|
LDA ($0),Y ; byte at row,col is now in accumulator
|
||
|
RTS
|
||
|
;/GETCHAR
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* draws the splash screen logo - clobbers A, Y
|
||
|
**************************************************
|
||
|
|
||
|
DRAWLOGO ; draws the moon and clouds
|
||
|
LDA #$26
|
||
|
STA PLOTCOLUMN
|
||
|
LDA #$B ; down a bit.
|
||
|
STA PLOTROW
|
||
|
LDA #$0
|
||
|
STA SPRITEOFFSET ; set offset to 0
|
||
|
|
||
|
LDA #$05
|
||
|
STA ROW ; for each ROW
|
||
|
LOGOROWS LDA #$24
|
||
|
STA COLUMN ; for each COLUMN
|
||
|
LDA PLOTCOLUMN
|
||
|
SEC
|
||
|
SBC COLUMN
|
||
|
STA PLOTCOLUMN
|
||
|
LOGOCOLUMNS LDY SPRITEOFFSET
|
||
|
LDA LOGO1,Y ; LDA Sprite Origin,OFFSET
|
||
|
STA CHAR ; store character
|
||
|
JSR PLOTQUICK ; PLOT on frame
|
||
|
INC SPRITEOFFSET
|
||
|
INC PLOTCOLUMN
|
||
|
DEC COLUMN ; count down columns from 40
|
||
|
BNE LOGOCOLUMNS ; do next column
|
||
|
|
||
|
INC PLOTROW
|
||
|
DEC ROW ; count down rows from 4
|
||
|
BNE LOGOROWS ; do next row
|
||
|
|
||
|
|
||
|
LDA #$0
|
||
|
STA SPRITEOFFSET ; set offset to 0
|
||
|
LDA #$05
|
||
|
STA ROW ; for each ROW
|
||
|
LOGO2ROWS LDA #$24
|
||
|
STA COLUMN ; for each COLUMN
|
||
|
LDA PLOTCOLUMN
|
||
|
SEC
|
||
|
SBC COLUMN
|
||
|
STA PLOTCOLUMN
|
||
|
LOGO2COLUMNS LDY SPRITEOFFSET
|
||
|
LDA LOGO2,Y ; LDA Sprite Origin,OFFSET
|
||
|
STA CHAR ; store character
|
||
|
JSR PLOTQUICK ; PLOT on frame
|
||
|
INC SPRITEOFFSET
|
||
|
INC PLOTCOLUMN
|
||
|
DEC COLUMN ; count down columns from 40
|
||
|
BNE LOGO2COLUMNS ; do next column
|
||
|
|
||
|
INC PLOTROW
|
||
|
DEC ROW ; count down rows from 4
|
||
|
BNE LOGO2ROWS ; do next row
|
||
|
|
||
|
LOGODONE
|
||
|
RTS
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* erases the logo, ready to start game - clobbers A
|
||
|
**************************************************
|
||
|
; FOR EACH ROW/COLUMN
|
||
|
|
||
|
ERASELOGO LDA #$16 ; X = 22
|
||
|
STA PLOTROW
|
||
|
ERASELOOP ; (ROW 22 to 12)
|
||
|
DEC PLOTROW ; start columnloop (COLUMN 0 to 40)
|
||
|
LDA #$28
|
||
|
STA PLOTCOLUMN
|
||
|
ERASELOOP2 DEC PLOTCOLUMN
|
||
|
|
||
|
LDA PLOTROW
|
||
|
LDA #$00 ; set all pixels to 00
|
||
|
STA CHAR
|
||
|
JSR PLOTQUICK ; plot 00
|
||
|
LDA PLOTCOLUMN ; last COLUMN?
|
||
|
BNE ERASELOOP2 ; loop
|
||
|
|
||
|
; /ERASELOOP2
|
||
|
LDA PLOTROW ; last ROW?
|
||
|
CMP #$0B
|
||
|
BCS ERASELOOP ; loop
|
||
|
; /ERASELOOP
|
||
|
RTS
|
||
|
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* draws the header moon and clouds - clobbers A, Y
|
||
|
**************************************************
|
||
|
|
||
|
DRAWCLOUDS ; draws the moon and clouds
|
||
|
LDA #$28
|
||
|
STA PLOTCOLUMN
|
||
|
LDA #$5 ; down a bit.
|
||
|
STA PLOTROW
|
||
|
LDA #$0
|
||
|
STA SPRITEOFFSET ; set offset to 0
|
||
|
|
||
|
LDA #$04
|
||
|
STA ROW ; for each ROW
|
||
|
CLOUDROWS LDA #$28
|
||
|
STA COLUMN ; for each COLUMN
|
||
|
LDA PLOTCOLUMN
|
||
|
SEC
|
||
|
SBC COLUMN
|
||
|
STA PLOTCOLUMN
|
||
|
CLOUDCOLUMNS LDY SPRITEOFFSET
|
||
|
|
||
|
JSR RND
|
||
|
CMP #$80
|
||
|
BCC TWINKLESTARS
|
||
|
LDA CLOUDS,Y ; LDA Sprite Origin,OFFSET
|
||
|
JMP NORMALSTARS
|
||
|
TWINKLESTARS LDA TWINKLE,Y ; LDA Sprite Origin,OFFSET
|
||
|
NORMALSTARS STA CHAR ; store character
|
||
|
JSR PLOTQUICK ; PLOT on frame
|
||
|
INC PROGRESS
|
||
|
JSR PLOTQUICK ; PLOT on offscreen frame
|
||
|
INC PROGRESS
|
||
|
INC SPRITEOFFSET
|
||
|
INC PLOTCOLUMN
|
||
|
DEC COLUMN ; count down columns from 40
|
||
|
BNE CLOUDCOLUMNS ; do next column
|
||
|
|
||
|
INC PLOTROW
|
||
|
DEC ROW ; count down rows from 4
|
||
|
BNE CLOUDROWS ; do next row
|
||
|
CLOUDSDONE
|
||
|
RTS
|
||
|
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* draws the scoreboard and initial zero scores - clobbers A, Y
|
||
|
**************************************************
|
||
|
|
||
|
DRAWSCOREBD ; draws the scoreboard
|
||
|
LDA #$28
|
||
|
STA PLOTCOLUMN
|
||
|
LDA #$0 ; down a bit.
|
||
|
STA PLOTROW
|
||
|
LDA #$0
|
||
|
STA SPRITEOFFSET ; set offset to 0
|
||
|
|
||
|
LDA #$04
|
||
|
STA ROW ; for each ROW
|
||
|
SCOREBDROWS LDA #$28
|
||
|
STA COLUMN ; for each COLUMN
|
||
|
LDA PLOTCOLUMN
|
||
|
SEC
|
||
|
SBC COLUMN
|
||
|
STA PLOTCOLUMN
|
||
|
SCOREBDCOLUMNS LDY SPRITEOFFSET
|
||
|
LDA SCOREBOARD,Y ; LDA Sprite Origin,OFFSET
|
||
|
STA CHAR ; store character
|
||
|
JSR PLOTQUICK ; PLOT on frame
|
||
|
INC PROGRESS
|
||
|
JSR PLOTQUICK ; PLOT on offscreen frame
|
||
|
INC PROGRESS
|
||
|
INC SPRITEOFFSET
|
||
|
INC PLOTCOLUMN
|
||
|
DEC COLUMN ; count down columns from 40
|
||
|
BNE SCOREBDCOLUMNS ; do next column
|
||
|
|
||
|
INC PLOTROW
|
||
|
DEC ROW ; count down rows from 4
|
||
|
BNE SCOREBDROWS ; do next row
|
||
|
SCOREBDDONE
|
||
|
RTS
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* redraws the brown and green ground/footer - clobbers A
|
||
|
**************************************************
|
||
|
|
||
|
DRAWGROUND
|
||
|
LDA #$16
|
||
|
STA PLOTROW
|
||
|
LDA #$28
|
||
|
STA PLOTCOLUMN
|
||
|
|
||
|
COLUMNLOOP3 DEC PLOTCOLUMN
|
||
|
LDA #$CC ; set all pixels to CC green
|
||
|
STA CHAR
|
||
|
JSR PLOTQUICK ; plot CC
|
||
|
LDA PLOTCOLUMN ; last COLUMN?
|
||
|
BNE COLUMNLOOP3 ; loop
|
||
|
|
||
|
; /columnloop3
|
||
|
INC PLOTROW
|
||
|
|
||
|
LDA #$28
|
||
|
STA PLOTCOLUMN
|
||
|
COLUMNLOOP4 DEC PLOTCOLUMN
|
||
|
LDA #$84 ; set all pixels to 84 green/brown
|
||
|
STA CHAR
|
||
|
JSR PLOTQUICK ; plot 84
|
||
|
LDA PLOTCOLUMN ; last COLUMN?
|
||
|
BNE COLUMNLOOP4 ; loop
|
||
|
|
||
|
; /columnloop4
|
||
|
|
||
|
RTS
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* draws the BURGER - clobbers A, Y
|
||
|
* congratulations on finding the easter egg.
|
||
|
**************************************************
|
||
|
|
||
|
DRAWBURGER ; draws the BURGER
|
||
|
LDA #$20
|
||
|
STA PLOTCOLUMN
|
||
|
LDA #$B ; down a bit.
|
||
|
STA PLOTROW
|
||
|
LDA #$0
|
||
|
STA SPRITEOFFSET ; set offset to 0
|
||
|
|
||
|
LDA #$07
|
||
|
STA ROW ; for each ROW
|
||
|
BURGERROWS LDA #$17
|
||
|
STA COLUMN ; for each COLUMN
|
||
|
LDA PLOTCOLUMN
|
||
|
SEC
|
||
|
SBC COLUMN
|
||
|
STA PLOTCOLUMN
|
||
|
BURGERCOLUMNS LDY SPRITEOFFSET
|
||
|
LDA BURGER,Y ; LDA Sprite Origin,OFFSET
|
||
|
STA CHAR ; store character
|
||
|
JSR PLOTQUICK ; PLOT on frame
|
||
|
INC SPRITEOFFSET
|
||
|
INC PLOTCOLUMN
|
||
|
DEC COLUMN ; count down columns from 40
|
||
|
BNE BURGERCOLUMNS ; do next column
|
||
|
|
||
|
INC PLOTROW
|
||
|
DEC ROW ; count down rows from 4
|
||
|
BNE BURGERROWS ; do next row
|
||
|
|
||
|
|
||
|
BURGERDONE
|
||
|
RTS
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* CLICKS and BEEPS - clobbers X,Y,A
|
||
|
**************************************************
|
||
|
CLICK LDX #$06
|
||
|
CLICKLOOP LDA #$10 ; SLIGHT DELAY
|
||
|
JSR WAIT
|
||
|
LDA SPEAKER
|
||
|
DEX
|
||
|
BNE CLICKLOOP
|
||
|
RTS
|
||
|
;/CLICK
|
||
|
|
||
|
BEEP LDX #$30
|
||
|
BEEPLOOP LDA #$08 ; short DELAY
|
||
|
JSR WAIT
|
||
|
LDA SPEAKER
|
||
|
DEX
|
||
|
BNE BEEPLOOP
|
||
|
RTS
|
||
|
;/BEEP
|
||
|
|
||
|
|
||
|
BONK LDX #$50
|
||
|
BONKLOOP LDA #$20 ; longer DELAY
|
||
|
JSR WAIT
|
||
|
LDA SPEAKER
|
||
|
DEX
|
||
|
BNE BONKLOOP
|
||
|
RTS
|
||
|
;/BONK
|
||
|
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* DATASOFT RND 6502
|
||
|
* BY JAMES GARON
|
||
|
* 10/02/86
|
||
|
* Thanks to John Brooks for this. I modified it slightly.
|
||
|
*
|
||
|
* returns a randomish number in Accumulator.
|
||
|
**************************************************
|
||
|
RNDINIT
|
||
|
LDA $C030 ; #$AB
|
||
|
STA RNDSEED
|
||
|
LDA $4E ; #$55
|
||
|
STA RNDSEED+1
|
||
|
LDA PROGRESS ; #$7E
|
||
|
STA RNDSEED+2
|
||
|
RTS
|
||
|
|
||
|
* RESULT IN ACC
|
||
|
RND LDA RNDSEED
|
||
|
ROL RNDSEED
|
||
|
EOR RNDSEED
|
||
|
ROR RNDSEED
|
||
|
INC RNDSEED+1
|
||
|
BNE RND10
|
||
|
LDA RNDSEED+2
|
||
|
INC RNDSEED+2
|
||
|
RND10 ADC RNDSEED+1
|
||
|
BVC RND20
|
||
|
INC RNDSEED+1
|
||
|
BNE RND20
|
||
|
LDA RNDSEED+2
|
||
|
INC RNDSEED+2
|
||
|
RND20 STA RNDSEED
|
||
|
RTS
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* Data Tables
|
||
|
*
|
||
|
**************************************************
|
||
|
**************************************************
|
||
|
* sprites definitions
|
||
|
**************************************************
|
||
|
|
||
|
REDBALL HEX 10,B1,F1,10
|
||
|
HEX 11,BB,BB,11
|
||
|
HEX 01,1B,1B,01
|
||
|
|
||
|
PURPLEBALL HEX 30,b3,f3,30
|
||
|
HEX 33,00,00,33
|
||
|
HEX 03,3b,3b,03
|
||
|
|
||
|
|
||
|
STUMP HEX 00,80,08,08,08,08,80,00,00
|
||
|
HEX 00,88,88,08,88,88,88,00,00
|
||
|
HEX 84,88,08,80,88,08,88,84,cc
|
||
|
HEX 84,84,88,88,84,84,88,84,84
|
||
|
|
||
|
ROCK HEX 00,50,aa,5a,af,a0,00,00,00
|
||
|
HEX 00,5a,55,5a,aa,a5,5a,00,00
|
||
|
HEX c4,45,50,05,50,55,45,44,cc
|
||
|
|
||
|
PIT1 HEX 42,26,26,26,26,26,42,cc,cc
|
||
|
HEX 88,22,22,22,22,22,88,84,84
|
||
|
|
||
|
RUNNER1 HEX 00,00,00,90,90,90,00,00
|
||
|
HEX 00,b0,f0,f9,fb,b0,00,b0
|
||
|
HEX 0b,00,00,ff,ff,00,0b,00
|
||
|
HEX 00,00,00,22,02,02,20,00
|
||
|
HEX 00,11,02,00,00,00,12,10
|
||
|
HEX CC,c4,c4,c4,c4,c4,c4,c4
|
||
|
RUNNER2 HEX 00,00,00,90,90,90
|
||
|
HEX 00,00,00,f9,fb,00
|
||
|
HEX 00,00,B0,ff,fb,b0
|
||
|
HEX 00,00,00,22,02,20
|
||
|
HEX 00,00,11,02,01,02
|
||
|
HEX CC,CC,c4,c4,c4,c4
|
||
|
RUNNER3 HEX 00,00,00,90,90,90,00,00
|
||
|
HEX 00,00,b0,f9,fb,f0,00,b0
|
||
|
HEX 00,0b,00,ff,ff,00,0b,00
|
||
|
HEX 00,00,00,22,02,20,00,00
|
||
|
HEX 00,11,02,00,00,12,10,00
|
||
|
HEX CC,c4,c4,c4,c4,c4,c4,CC
|
||
|
RUNNER4 HEX 00,00,00,90,90,90
|
||
|
HEX 00,00,00,f9,fb,00
|
||
|
HEX 00,00,bb,ff,ff,b0
|
||
|
HEX 00,00,00,22,22,00
|
||
|
HEX 00,00,11,00,12,10
|
||
|
HEX CC,CC,c4,c4,c4,c4
|
||
|
JUMPY HEX 00,00,00,00,00,00,00,00,00
|
||
|
HEX 00,00,00,90,90,90,00,00,00
|
||
|
HEX 00,00,b0,f9,fb,f0,00,b0,00
|
||
|
HEX 00,0b,00,ff,ff,00,0b,00,10
|
||
|
HEX 10,20,20,02,02,02,02,02,01
|
||
|
HEX 01,00,00,00,00,00,00,00,00
|
||
|
HEX 00,00,00,00,00,00,00,00,00
|
||
|
|
||
|
SPRITELOTABLE db <SPLOSION,<PURPLEBALL,<STUMP,<ROCK,<PIT1,<RUNNER1,<RUNNER2,<RUNNER3,<RUNNER4,<JUMPY,<ZERO,<ONE,<TWO,<THREE,<FOUR,<FIVE,<SIX,<SEVEN,<EIGHT,<NINE
|
||
|
SPRITEHITABLE db >SPLOSION,>PURPLEBALL,>STUMP,>ROCK,>PIT1,>RUNNER1,>RUNNER2,>RUNNER3,>RUNNER4,>JUMPY,>ZERO,>ONE,>TWO,>THREE,>FOUR,>FIVE,>SIX,>SEVEN,>EIGHT,>NINE
|
||
|
|
||
|
SPRITEHEIGHTTABLE HEX 02,02,03,02,01,05,05,05,05,06,02,02,02,02,02,02,02,02,02,02
|
||
|
SPRITEWIDTHTABLE HEX 04,03,08,08,08,07,05,07,05,08,03,03,03,03,03,03,03,03,03,03
|
||
|
|
||
|
SPRITEINDEXTABLE HEX 05,02,03,04 ; on-screen sprites can be any of the above, in any order
|
||
|
|
||
|
**************************************************
|
||
|
* sprite position, velocity, etc of on-screen sprites
|
||
|
**************************************************
|
||
|
|
||
|
SPRITEROW HEX 11,14,14,16
|
||
|
SPRITECOLUMN HEX 01,28,40,58
|
||
|
LASTROW HEX 11,16,00,00 ; location of last sprite drawn, for erasure
|
||
|
LASTCOLUMN HEX 01,28,40,58
|
||
|
HORIZSIGN HEX 00,00,00,00 ; 1 for positive H velocity, 0 for negative H velocity
|
||
|
VERTSIGN HEX 00,00,00,00 ; 1 or 0 for direction
|
||
|
HVELOCITY HEX 00,01,01,01 ; horizontal delta
|
||
|
VVELOCITY HEX 00,00,00,00 ; vertical delta
|
||
|
|
||
|
COLLIDINGSPRITES HEX FF,FF
|
||
|
|
||
|
NUMBEROFSPRITES HEX 00
|
||
|
|
||
|
|
||
|
CLOUDS HEX 00,00,A0,FA,ff,ff,ff,fa,a0,00,00,00,00,00,00,00,00,00,00,00,00,00,0a,00,00,00,00,00,00,00,00,f0,00,00,00,00,00,00,00,00
|
||
|
HEX 05,05,f5,f5,f5,a5,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55
|
||
|
HEX 55,55,55,5a,5f,5f,5f,5f,5a,50,50,50,a0,00,00,00,00,00,0a,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05
|
||
|
HEX 05,05,05,05,05,00,00,00,00,00,00,00,00,00,00,00,0f,00,00,00,00,00,00,00,00,00,00,00,f0,00,00,00,00,00,00,00,00,00,00,00
|
||
|
|
||
|
TWINKLE HEX 00,00,A0,FA,ff,ff,ff,fa,a0,00,00,00,00,00,00,00,00,00,00,00,00,00,0f,00,00,00,00,00,00,00,00,50,00,00,00,00,00,00,00,00
|
||
|
HEX 05,05,f5,f5,f5,a5,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55
|
||
|
HEX 55,55,55,5a,5f,5f,5f,5f,5a,50,50,50,a0,00,00,00,00,00,0a,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05
|
||
|
HEX 05,05,05,05,05,00,00,00,00,00,00,00,00,00,00,00,0a,00,00,00,00,00,00,00,00,00,00,00,a0,00,00,00,00,00,00,00,00,00,00,00
|
||
|
|
||
|
|
||
|
JUMPINGCURVE HEX 11,10,0f,0e,0d,0c,0b,0a,09,09,09,09,0a,0b,0c,0d,0e,0f,0f
|
||
|
* how far up from base to be on each frame.
|
||
|
*** make this a nice smooth curve.
|
||
|
|
||
|
LOGO1 HEX 00,00,55,5a,5a,aa,00,55,aa,00,00,55,aa,00,50,a5,aa,aa,a5,aa,aa,a0,00,50,a5,5a,5a,aa,a5,00,55,aa,00,00,55,aa
|
||
|
HEX 00,00,00,00,55,aa,00,55,aa,00,00,55,aa,00,55,aa,05,55,aa,05,55,aa,00,55,aa,00,00,55,aa,00,55,aa,00,00,55,aa
|
||
|
HEX 00,00,00,00,55,aa,00,55,aa,a0,50,a5,aa,00,55,aa,00,55,aa,00,55,aa,00,55,aa,00,50,a5,aa,00,55,aa,00,00,55,aa
|
||
|
HEX 50,a0,00,00,55,aa,00,00,05,0a,0a,0a,00,00,05,5a,00,05,5a,00,05,5a,00,55,aa,0a,0a,0a,05,00,00,05,5a,5a,5a,aa
|
||
|
HEX 55,aa,00,00,55,aa,00,00,00,50,a5,5a,5a,5a,00,00,00,00,00,00,00,00,00,05,5a,00,00,00,00,00,05,5a,5a,5a,5a,05
|
||
|
LOGO2 HEX 00,05,5a,5a,5a,05,00,00,55,aa,05,00,00,00,00,55,aa,00,00,55,aa,00,55,aa,00,00,55,aa,00,00,00,00,00,00,00,00
|
||
|
HEX 00,00,00,00,00,00,00,00,55,aa,00,55,5a,aa,00,55,aa,00,00,55,aa,00,55,aa,00,00,55,aa,00,00,00,00,00,00,00,00
|
||
|
HEX 00,00,00,00,00,00,00,00,55,aa,50,00,55,aa,00,55,aa,a0,50,a5,aa,00,55,aa,00,00,55,aa,00,00,00,00,00,00,00,00
|
||
|
HEX 00,00,00,00,00,00,00,00,00,05,5a,5a,5a,5a,00,00,05,0a,0a,0a,00,00,00,05,5a,5a,5a,aa,00,00,00,00,00,00,00,00
|
||
|
HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,05,5a,5a,5a,5a,05,00,00,00,00,00,00,00,00
|
||
|
|
||
|
|
||
|
SCOREBOARD HEX 22,22,22,22,22,22,22,22,22,22,22,22,f2,f2,f2,f2,22,f2,f2,f2,f2,22,22,22,22,22,22,22,22,22,f2,f2,f2,f2,22,f2,f2,f2,f2,22
|
||
|
HEX 22,2a,aa,22,a2,22,a2,22,a2,a2,a2,22,ff,22,22,ff,22,ff,22,22,ff,22,22,22,aa,22,aa,22,2a,22,ff,22,22,ff,22,ff,22,22,ff,22
|
||
|
HEX 22,22,aa,22,aa,a2,aa,22,aa,a2,aa,22,ff,f2,f2,ff,22,ff,f2,f2,ff,22,22,22,aa,2a,aa,22,aa,22,ff,f2,f2,ff,22,ff,f2,f2,ff,22
|
||
|
HEX 22,22,22,22,22,22,22,22,2a,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22
|
||
|
|
||
|
ZERO HEX f2,f2,f2,f2,ff,22,22,ff,ff,f2,f2,FF
|
||
|
ONE HEX 22,f2,f2,22,22,22,ff,22,22,22,ff,22
|
||
|
TWO HEX f2,f2,f2,f2,F2,F2,F2,FF,FF,F2,F2,F2
|
||
|
THREE HEX f2,f2,f2,f2,22,F2,F2,FF,F2,F2,F2,FF
|
||
|
FOUR HEX F2,22,22,F2,FF,F2,F2,FF,22,22,22,FF
|
||
|
FIVE HEX f2,f2,f2,f2,FF,F2,F2,F2,F2,F2,F2,FF
|
||
|
SIX HEX f2,f2,f2,f2,FF,F2,F2,F2,FF,F2,F2,ff
|
||
|
SEVEN HEX f2,f2,f2,f2,22,22,22,FF,22,22,22,FF
|
||
|
EIGHT HEX f2,f2,f2,f2,FF,F2,F2,FF,FF,F2,F2,ff
|
||
|
NINE HEX f2,f2,f2,f2,FF,F2,F2,FF,F2,F2,F2,FF
|
||
|
|
||
|
DIGITSLO db <ZERO,<ONE,<TWO,<THREE,<FOUR,<FIVE,<SIX,<SEVEN,<EIGHT,<NINE
|
||
|
DIGITSHI db >ZERO,>ONE,>TWO,>THREE,>FOUR,>FIVE,>SIX,>SEVEN,>EIGHT,>NINE
|
||
|
|
||
|
|
||
|
SPLOSION HEX b0,00,30,00,b0
|
||
|
HEX 30,93,d9,93,30
|
||
|
HEX b0,03,39,03,b0
|
||
|
|
||
|
BURGER HEX 00,00,00,00,90,90,d9,99,d9,99,d9,99,d9,99,d9,99,d9,90,90,00,00,00,00
|
||
|
HEX 00,00,90,89,d8,9d,d9,9d,d9,9d,d9,9d,d9,9d,d9,9d,d9,9d,d9,99,90,00,00
|
||
|
HEX 00,00,d0,d9,18,19,d9,d9,19,d9,d9,d9,d9,d9,d9,d9,19,19,19,d9,d0,00,00
|
||
|
HEX 0c,0c,84,8c,84,84,84,c4,4d,4d,8d,88,88,88,4c,4c,84,81,8c,8c,8c,04,0c
|
||
|
HEX 00,08,80,88,80,88,88,88,88,88,88,88,88,88,88,88,88,88,80,88,80,08,00
|
||
|
HEX 00,00,00,99,89,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,00,00,00
|
||
|
HEX 00,00,00,00,09,08,09,09,09,09,09,09,09,09,09,09,09,09,09,00,00,00,00
|
||
|
|
||
|
|
||
|
**************************************************
|
||
|
* Lores/Text lines
|
||
|
* Thanks to Dagen Brock for this.
|
||
|
**************************************************
|
||
|
Lo01 equ $400
|
||
|
Lo02 equ $480
|
||
|
Lo03 equ $500
|
||
|
Lo04 equ $580
|
||
|
Lo05 equ $600
|
||
|
Lo06 equ $680
|
||
|
Lo07 equ $700
|
||
|
Lo08 equ $780
|
||
|
Lo09 equ $428
|
||
|
Lo10 equ $4a8
|
||
|
Lo11 equ $528
|
||
|
Lo12 equ $5a8
|
||
|
Lo13 equ $628
|
||
|
Lo14 equ $6a8
|
||
|
Lo15 equ $728
|
||
|
Lo16 equ $7a8
|
||
|
Lo17 equ $450
|
||
|
Lo18 equ $4d0
|
||
|
Lo19 equ $550
|
||
|
Lo20 equ $5d0
|
||
|
* the "plus four" lines
|
||
|
Lo21 equ $650
|
||
|
Lo22 equ $6d0
|
||
|
Lo23 equ $750
|
||
|
Lo24 equ $7d0
|
||
|
|
||
|
|
||
|
Alt01 equ $800
|
||
|
Alt02 equ $880
|
||
|
Alt03 equ $900
|
||
|
Alt04 equ $980
|
||
|
Alt05 equ $A00
|
||
|
Alt06 equ $A80
|
||
|
Alt07 equ $B00
|
||
|
Alt08 equ $B80
|
||
|
Alt09 equ $828
|
||
|
Alt10 equ $8a8
|
||
|
Alt11 equ $928
|
||
|
Alt12 equ $9a8
|
||
|
Alt13 equ $A28
|
||
|
Alt14 equ $Aa8
|
||
|
Alt15 equ $B28
|
||
|
Alt16 equ $Ba8
|
||
|
Alt17 equ $850
|
||
|
Alt18 equ $8d0
|
||
|
Alt19 equ $950
|
||
|
Alt20 equ $9d0
|
||
|
* the "plus four" lines
|
||
|
Alt21 equ $A50
|
||
|
Alt22 equ $Ad0
|
||
|
Alt23 equ $B50
|
||
|
Alt24 equ $Bd0
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
LoLineTable da Lo01,Lo02,Lo03,Lo04
|
||
|
da Lo05,Lo06,Lo07,Lo08
|
||
|
da Lo09,Lo10,Lo11,Lo12
|
||
|
da Lo13,Lo14,Lo15,Lo16
|
||
|
da Lo17,Lo18,Lo19,Lo20
|
||
|
da Lo21,Lo22,Lo23,Lo24
|
||
|
|
||
|
AltLineTable da Alt01,Alt02,Alt03,Alt04
|
||
|
da Alt05,Alt06,Alt07,Alt08
|
||
|
da Alt09,Alt10,Alt11,Alt12
|
||
|
da Alt13,Alt14,Alt15,Alt16
|
||
|
da Alt17,Alt18,Alt19,Alt20
|
||
|
da Alt21,Alt22,Alt23,Alt24
|
||
|
|
||
|
|
||
|
** Here we split the table for an optimization
|
||
|
** We can directly get our line numbers now
|
||
|
** Without using ASL
|
||
|
LoLineTableH db >Lo01,>Lo02,>Lo03
|
||
|
db >Lo04,>Lo05,>Lo06
|
||
|
db >Lo07,>Lo08,>Lo09
|
||
|
db >Lo10,>Lo11,>Lo12
|
||
|
db >Lo13,>Lo14,>Lo15
|
||
|
db >Lo16,>Lo17,>Lo18
|
||
|
db >Lo19,>Lo20,>Lo21
|
||
|
db >Lo22,>Lo23,>Lo24
|
||
|
LoLineTableL db <Lo01,<Lo02,<Lo03
|
||
|
db <Lo04,<Lo05,<Lo06
|
||
|
db <Lo07,<Lo08,<Lo09
|
||
|
db <Lo10,<Lo11,<Lo12
|
||
|
db <Lo13,<Lo14,<Lo15
|
||
|
db <Lo16,<Lo17,<Lo18
|
||
|
db <Lo19,<Lo20,<Lo21
|
||
|
db <Lo22,<Lo23,<Lo24
|
||
|
|
||
|
AltLineTableH db >Alt01,>Alt02,>Alt03
|
||
|
db >Alt04,>Alt05,>Alt06
|
||
|
db >Alt07,>Alt08,>Alt09
|
||
|
db >Alt10,>Alt11,>Alt12
|
||
|
db >Alt13,>Alt14,>Alt15
|
||
|
db >Alt16,>Alt17,>Alt18
|
||
|
db >Alt19,>Alt20,>Alt21
|
||
|
db >Alt22,>Alt23,>Alt24
|
||
|
AltLineTableL db <Alt01,<Alt02,<Alt03
|
||
|
db <Alt04,<Alt05,<Alt06
|
||
|
db <Alt07,<Alt08,<Alt09
|
||
|
db <Alt10,<Alt11,<Alt12
|
||
|
db <Alt13,<Alt14,<Alt15
|
||
|
db <Alt16,<Alt17,<Alt18
|
||
|
db <Alt19,<Alt20,<Alt21
|
||
|
db <Alt22,<Alt23,<Alt24
|
||
|
|