mirror of https://github.com/digarok/flapple.git
reformatted all with radius for consistency
This commit is contained in:
parent
4c7cc709cd
commit
f1fb6a0dee
|
@ -1,23 +1,24 @@
|
|||
**************************************************
|
||||
* 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
|
||||
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
|
||||
|
||||
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)
|
||||
|
||||
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)
|
||||
|
||||
|
|
750
src/bird.s
750
src/bird.s
|
@ -1,470 +1,466 @@
|
|||
|
||||
SPRITE_X db 0
|
||||
SPRITE_Y db 0 ; BYTE,not pixel. gotta be, sorry
|
||||
SPRITE_W db 0
|
||||
SPRITE_W_D2 db 0
|
||||
SPRITE_H db 0 ; <- in bytes
|
||||
SPRITE_X db 0
|
||||
SPRITE_Y db 0 ; BYTE,not pixel. gotta be, sorry
|
||||
SPRITE_W db 0
|
||||
SPRITE_W_D2 db 0
|
||||
SPRITE_H db 0 ; <- in bytes
|
||||
|
||||
SPRITE_MAIN da 0
|
||||
SPRITE_AUX da 0
|
||||
SPRITE_MASK da 0
|
||||
SPRITE_IMASK da 0
|
||||
SPRITE_COLLISION db 0
|
||||
SPRITE_Y_IDX dw 0
|
||||
SPRITE_X_IDX dw 0
|
||||
SPRITE_MAIN da 0
|
||||
SPRITE_AUX da 0
|
||||
SPRITE_MASK da 0
|
||||
SPRITE_IMASK da 0
|
||||
SPRITE_COLLISION db 0
|
||||
SPRITE_Y_IDX dw 0
|
||||
SPRITE_X_IDX dw 0
|
||||
|
||||
SPRITE_SCREEN_P equ $00
|
||||
SPRITE_DATA_P equ $02
|
||||
SPRITE_SCREEN_P2 equ $02
|
||||
SPRITE_AUX_P equ $04
|
||||
SPRITE_SCREEN_P3 equ $04
|
||||
SPRITE_MASK_P equ $FA
|
||||
SPRITE_SCREEN_P4 equ $FA
|
||||
SPRITE_IMASK_P equ $FC
|
||||
SPRITE_SCREEN_P equ $00
|
||||
SPRITE_DATA_P equ $02
|
||||
SPRITE_SCREEN_P2 equ $02
|
||||
SPRITE_AUX_P equ $04
|
||||
SPRITE_SCREEN_P3 equ $04
|
||||
SPRITE_MASK_P equ $FA
|
||||
SPRITE_SCREEN_P4 equ $FA
|
||||
SPRITE_IMASK_P equ $FC
|
||||
|
||||
SPRITE_SCREEN_IDX db #$0
|
||||
SPRITE_SCREEN_IDX db #$0
|
||||
|
||||
|
||||
BIRD_VELOCITY db 0 ; in two's compliment {-3,3}
|
||||
BIRD_VELOCITY_MAX equ #20
|
||||
BIRD_VELOCITY_MIN equ #%111111111 ; -1
|
||||
BIRD_WIDTH equ #5
|
||||
BIRD_X equ #17
|
||||
BIRD_Y_INIT equ #17
|
||||
BIRD_Y db #BIRD_Y_INIT ; (0-47)
|
||||
BIRD_Y_OLD db #BIRD_Y_INIT ; used for undraw - to decouple input routine from sequence
|
||||
BIRD_FLAP db #0 ; 0=down 1=up
|
||||
BIRD_FLAP_RATE equ #5
|
||||
BIRD_FLAP_CNT db 0
|
||||
BIRD_VELOCITY db 0 ; in two's compliment {-3,3}
|
||||
BIRD_VELOCITY_MAX equ #20
|
||||
BIRD_VELOCITY_MIN equ #%111111111 ; -1
|
||||
BIRD_WIDTH equ #5
|
||||
BIRD_X equ #17
|
||||
BIRD_Y_INIT equ #17
|
||||
BIRD_Y db #BIRD_Y_INIT ; (0-47)
|
||||
BIRD_Y_OLD db #BIRD_Y_INIT ; used for undraw - to decouple input routine from sequence
|
||||
BIRD_FLAP db #0 ; 0=down 1=up
|
||||
BIRD_FLAP_RATE equ #5
|
||||
BIRD_FLAP_CNT db 0
|
||||
|
||||
**
|
||||
|
||||
FlapBird
|
||||
inc BIRD_FLAP_CNT
|
||||
lda BIRD_FLAP_CNT
|
||||
cmp #BIRD_FLAP_RATE
|
||||
bcs :flapIt
|
||||
rts
|
||||
inc BIRD_FLAP_CNT
|
||||
lda BIRD_FLAP_CNT
|
||||
cmp #BIRD_FLAP_RATE
|
||||
bcs :flapIt
|
||||
rts
|
||||
:flapIt
|
||||
lda #0
|
||||
sta BIRD_FLAP_CNT
|
||||
inc BIRD_FLAP
|
||||
lda BIRD_FLAP
|
||||
cmp #2
|
||||
bne :noFlip
|
||||
lda #0
|
||||
sta BIRD_FLAP
|
||||
:noFlip rts
|
||||
lda #0
|
||||
sta BIRD_FLAP_CNT
|
||||
inc BIRD_FLAP
|
||||
lda BIRD_FLAP
|
||||
cmp #2
|
||||
bne :noFlip
|
||||
lda #0
|
||||
sta BIRD_FLAP
|
||||
:noFlip rts
|
||||
|
||||
|
||||
***** EVEN then ODD, i.e. AUX then MAIN
|
||||
BIRD_WUP_E_PIXEL
|
||||
DO MONO
|
||||
hex 00,EA,EA,FF,F0,50,D5,A5,0F,00
|
||||
hex AA,EA,EE,CF,CF,D5,55,8A,90,90
|
||||
hex 05,AD,A4,08,08,05,5D,51,01,00
|
||||
ELSE
|
||||
hex BB,EA,EA,FF,FB,57,D5,A5,0F,77
|
||||
hex AA,EA,EE,CF,CF,D5,55,8A,90,97
|
||||
hex B5,AD,A4,B8,B8,75,5D,51,71,77
|
||||
FIN
|
||||
DO MONO
|
||||
hex 00,EA,EA,FF,F0,50,D5,A5,0F,00
|
||||
hex AA,EA,EE,CF,CF,D5,55,8A,90,90
|
||||
hex 05,AD,A4,08,08,05,5D,51,01,00
|
||||
ELSE
|
||||
hex BB,EA,EA,FF,FB,57,D5,A5,0F,77
|
||||
hex AA,EA,EE,CF,CF,D5,55,8A,90,97
|
||||
hex B5,AD,A4,B8,B8,75,5D,51,71,77
|
||||
FIN
|
||||
|
||||
BIRD_WUP_E_MASK
|
||||
hex FF,00,00,00,0F,0F,00,00,00,FF
|
||||
hex 00,00,00,00,00,00,00,00,00,0F
|
||||
hex F0,00,00,F0,F0,F0,00,00,F0,FF
|
||||
hex FF,00,00,00,0F,0F,00,00,00,FF
|
||||
hex 00,00,00,00,00,00,00,00,00,0F
|
||||
hex F0,00,00,F0,F0,F0,00,00,F0,FF
|
||||
|
||||
|
||||
BIRD_WUP_E_IMASK
|
||||
hex 00,FF,FF,FF,F0,F0,FF,FF,FF,00
|
||||
hex FF,FF,FF,FF,FF,FF,FF,FF,FF,F0
|
||||
hex 0F,FF,FF,0F,0F,0F,FF,FF,0F,00
|
||||
hex 00,FF,FF,FF,F0,F0,FF,FF,FF,00
|
||||
hex FF,FF,FF,FF,FF,FF,FF,FF,FF,F0
|
||||
hex 0F,FF,FF,0F,0F,0F,FF,FF,0F,00
|
||||
|
||||
***** EVEN then ODD, i.e. AUX then MAIN
|
||||
BIRD_WDN_E_PIXEL
|
||||
DO MONO
|
||||
hex 00,EA,EA,FF,F0,50,D5,A5,0F,00
|
||||
hex AA,EE,EE,CF,CF,DD,5D,8A,90,90
|
||||
hex 54,AE,A4,08,08,5D,55,51,01,00
|
||||
ELSE
|
||||
hex BB,EA,EA,FF,FB,57,D5,A5,0F,77
|
||||
hex AA,EE,EE,CF,CF,DD,5D,8A,90,97
|
||||
hex 54,AE,A4,B8,B8,5D,55,51,71,77
|
||||
FIN
|
||||
DO MONO
|
||||
hex 00,EA,EA,FF,F0,50,D5,A5,0F,00
|
||||
hex AA,EE,EE,CF,CF,DD,5D,8A,90,90
|
||||
hex 54,AE,A4,08,08,5D,55,51,01,00
|
||||
ELSE
|
||||
hex BB,EA,EA,FF,FB,57,D5,A5,0F,77
|
||||
hex AA,EE,EE,CF,CF,DD,5D,8A,90,97
|
||||
hex 54,AE,A4,B8,B8,5D,55,51,71,77
|
||||
FIN
|
||||
|
||||
BIRD_WDN_E_MASK
|
||||
hex FF,00,00,00,0F,0F,00,00,00,FF
|
||||
hex 00,00,00,00,00,00,00,00,00,0F
|
||||
hex 00,00,00,F0,F0,00,00,00,F0,FF
|
||||
hex FF,00,00,00,0F,0F,00,00,00,FF
|
||||
hex 00,00,00,00,00,00,00,00,00,0F
|
||||
hex 00,00,00,F0,F0,00,00,00,F0,FF
|
||||
|
||||
|
||||
BIRD_WDN_E_IMASK
|
||||
hex 00,FF,FF,FF,F0,F0,FF,FF,FF,00
|
||||
hex FF,FF,FF,FF,FF,FF,FF,FF,FF,F0
|
||||
hex FF,FF,FF,0F,0F,FF,FF,FF,0F,00
|
||||
hex 00,FF,FF,FF,F0,F0,FF,FF,FF,00
|
||||
hex FF,FF,FF,FF,FF,FF,FF,FF,FF,F0
|
||||
hex FF,FF,FF,0F,0F,FF,FF,FF,0F,00
|
||||
|
||||
|
||||
***** EVEN then ODD, i.e. AUX then MAIN
|
||||
BIRD_WUP_O_PIXEL
|
||||
DO MONO
|
||||
hex 00,A0,A0,F0,00,00,50,50,F0,00
|
||||
hex A0,AE,EE,FF,FF,55,5D,AA,00,00
|
||||
hex 5A,DE,4E,8C,8C,5D,D5,18,19,09
|
||||
hex 00,0A,0A,00,00,00,05,05,00,00
|
||||
ELSE
|
||||
hex BB,AB,AB,FB,BB,77,57,57,F7,77
|
||||
hex AB,AE,EE,FF,FF,55,5D,AA,00,77
|
||||
hex 5A,DE,4E,8C,8C,5D,D5,18,19,79
|
||||
hex BB,BA,BA,BB,BB,77,75,75,77,77
|
||||
|
||||
FIN
|
||||
DO MONO
|
||||
hex 00,A0,A0,F0,00,00,50,50,F0,00
|
||||
hex A0,AE,EE,FF,FF,55,5D,AA,00,00
|
||||
hex 5A,DE,4E,8C,8C,5D,D5,18,19,09
|
||||
hex 00,0A,0A,00,00,00,05,05,00,00
|
||||
ELSE
|
||||
hex BB,AB,AB,FB,BB,77,57,57,F7,77
|
||||
hex AB,AE,EE,FF,FF,55,5D,AA,00,77
|
||||
hex 5A,DE,4E,8C,8C,5D,D5,18,19,79
|
||||
hex BB,BA,BA,BB,BB,77,75,75,77,77
|
||||
FIN
|
||||
|
||||
BIRD_WUP_O_MASK
|
||||
hex FF,0F,0F,0F,FF,FF,0F,0F,0F,FF
|
||||
hex 0F,00,00,00,00,00,00,00,00,FF
|
||||
hex 00,00,00,00,00,00,00,00,00,F0
|
||||
hex FF,F0,F0,FF,FF,FF,F0,F0,FF,FF
|
||||
hex FF,0F,0F,0F,FF,FF,0F,0F,0F,FF
|
||||
hex 0F,00,00,00,00,00,00,00,00,FF
|
||||
hex 00,00,00,00,00,00,00,00,00,F0
|
||||
hex FF,F0,F0,FF,FF,FF,F0,F0,FF,FF
|
||||
|
||||
|
||||
BIRD_WUP_O_IMASK
|
||||
hex 00,F0,F0,F0,00,00,F0,F0,F0,00
|
||||
hex F0,FF,FF,FF,FF,FF,FF,FF,FF,00
|
||||
hex FF,FF,FF,FF,FF,FF,FF,FF,FF,0F
|
||||
hex 00,0F,0F,00,00,00,0F,0F,00,00
|
||||
hex 00,F0,F0,F0,00,00,F0,F0,F0,00
|
||||
hex F0,FF,FF,FF,FF,FF,FF,FF,FF,00
|
||||
hex FF,FF,FF,FF,FF,FF,FF,FF,FF,0F
|
||||
hex 00,0F,0F,00,00,00,0F,0F,00,00
|
||||
|
||||
|
||||
***** EVEN then ODD, i.e. AUX then MAIN
|
||||
BIRD_WDN_O_PIXEL
|
||||
DO MONO
|
||||
hex 00,A0,A0,F0,00,00,50,50,F0,00
|
||||
hex A0,EE,EE,FF,FF,D5,DD,AA,00,00
|
||||
hex 4A,EE,4E,8C,8C,DD,55,18,19,09
|
||||
hex 05,0A,0A,00,00,05,05,05,00,00
|
||||
ELSE
|
||||
hex BB,AB,AB,FB,BB,77,57,57,F7,77
|
||||
hex AB,EE,EE,FF,FF,D5,DD,AA,00,77
|
||||
hex 4A,EE,4E,8C,8C,DD,55,18,19,79
|
||||
hex B5,BA,BA,BB,BB,75,75,75,77,77
|
||||
FIN
|
||||
DO MONO
|
||||
hex 00,A0,A0,F0,00,00,50,50,F0,00
|
||||
hex A0,EE,EE,FF,FF,D5,DD,AA,00,00
|
||||
hex 4A,EE,4E,8C,8C,DD,55,18,19,09
|
||||
hex 05,0A,0A,00,00,05,05,05,00,00
|
||||
ELSE
|
||||
hex BB,AB,AB,FB,BB,77,57,57,F7,77
|
||||
hex AB,EE,EE,FF,FF,D5,DD,AA,00,77
|
||||
hex 4A,EE,4E,8C,8C,DD,55,18,19,79
|
||||
hex B5,BA,BA,BB,BB,75,75,75,77,77
|
||||
FIN
|
||||
|
||||
BIRD_WDN_O_MASK
|
||||
hex FF,0F,0F,0F,FF,FF,0F,0F,0F,FF
|
||||
hex 0F,00,00,00,00,00,00,00,00,FF
|
||||
hex 00,00,00,00,00,00,00,00,00,F0
|
||||
hex F0,F0,F0,FF,FF,F0,F0,F0,FF,FF
|
||||
hex FF,0F,0F,0F,FF,FF,0F,0F,0F,FF
|
||||
hex 0F,00,00,00,00,00,00,00,00,FF
|
||||
hex 00,00,00,00,00,00,00,00,00,F0
|
||||
hex F0,F0,F0,FF,FF,F0,F0,F0,FF,FF
|
||||
|
||||
|
||||
BIRD_WDN_O_IMASK
|
||||
hex 00,F0,F0,F0,00,00,F0,F0,F0,00
|
||||
hex F0,FF,FF,FF,FF,FF,FF,FF,FF,00
|
||||
hex FF,FF,FF,FF,FF,FF,FF,FF,FF,0F
|
||||
hex 0F,0F,0F,00,00,0F,0F,0F,00,00
|
||||
hex 00,F0,F0,F0,00,00,F0,F0,F0,00
|
||||
hex F0,FF,FF,FF,FF,FF,FF,FF,FF,00
|
||||
hex FF,FF,FF,FF,FF,FF,FF,FF,FF,0F
|
||||
hex 0F,0F,0F,00,00,0F,0F,0F,00,00
|
||||
|
||||
** y=line a=height x=col
|
||||
UndrawBird lda BIRD_Y_OLD
|
||||
lsr
|
||||
tay
|
||||
bne :oddBird
|
||||
:evenBird lda #3
|
||||
bne :continue
|
||||
:oddBird lda #4
|
||||
:continue ldx #BIRD_X
|
||||
cmp #4
|
||||
beq :undraw4
|
||||
:undraw3 lda LoLineTableL,y
|
||||
sta SPRITE_SCREEN_P
|
||||
lda LoLineTableH,y
|
||||
sta SPRITE_SCREEN_P+1
|
||||
lda LoLineTableL+1,y
|
||||
sta SPRITE_SCREEN_P2
|
||||
lda LoLineTableH+1,y
|
||||
sta SPRITE_SCREEN_P2+1
|
||||
lda LoLineTableL+2,y
|
||||
sta SPRITE_SCREEN_P3
|
||||
lda LoLineTableH+2,y
|
||||
sta SPRITE_SCREEN_P3+1
|
||||
UndrawBird lda BIRD_Y_OLD
|
||||
lsr
|
||||
tay
|
||||
bne :oddBird
|
||||
:evenBird lda #3
|
||||
bne :continue
|
||||
:oddBird lda #4
|
||||
:continue ldx #BIRD_X
|
||||
cmp #4
|
||||
beq :undraw4
|
||||
:undraw3 lda LoLineTableL,y
|
||||
sta SPRITE_SCREEN_P
|
||||
lda LoLineTableH,y
|
||||
sta SPRITE_SCREEN_P+1
|
||||
lda LoLineTableL+1,y
|
||||
sta SPRITE_SCREEN_P2
|
||||
lda LoLineTableH+1,y
|
||||
sta SPRITE_SCREEN_P2+1
|
||||
lda LoLineTableL+2,y
|
||||
sta SPRITE_SCREEN_P3
|
||||
lda LoLineTableH+2,y
|
||||
sta SPRITE_SCREEN_P3+1
|
||||
|
||||
txa
|
||||
pha ; stash
|
||||
tay ; COL offset
|
||||
sta TXTPAGE2
|
||||
lda #BGCOLORAUX
|
||||
:wipe1 sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
iny
|
||||
:wipe1b sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
iny
|
||||
:wipe1c sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
iny
|
||||
:wipe1d sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
iny
|
||||
:wipe1e sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
txa
|
||||
pha ; stash
|
||||
tay ; COL offset
|
||||
sta TXTPAGE2
|
||||
lda #BGCOLORAUX
|
||||
:wipe1 sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
iny
|
||||
:wipe1b sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
iny
|
||||
:wipe1c sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
iny
|
||||
:wipe1d sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
iny
|
||||
:wipe1e sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
|
||||
pla ; unstash
|
||||
tay
|
||||
sta TXTPAGE1
|
||||
lda #BGCOLOR
|
||||
:wipe2 sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
iny
|
||||
pla ; unstash
|
||||
tay
|
||||
sta TXTPAGE1
|
||||
lda #BGCOLOR
|
||||
:wipe2 sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
iny
|
||||
|
||||
:wipe2b sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
iny
|
||||
:wipe2c sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
iny
|
||||
:wipe2d sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
iny
|
||||
:wipe2e sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
rts
|
||||
:wipe2b sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
iny
|
||||
:wipe2c sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
iny
|
||||
:wipe2d sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
iny
|
||||
:wipe2e sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
rts
|
||||
|
||||
|
||||
|
||||
:undraw4 lda LoLineTableL,y
|
||||
sta SPRITE_SCREEN_P
|
||||
lda LoLineTableH,y
|
||||
sta SPRITE_SCREEN_P+1
|
||||
lda LoLineTableL+1,y
|
||||
sta SPRITE_SCREEN_P2
|
||||
lda LoLineTableH+1,y
|
||||
sta SPRITE_SCREEN_P2+1
|
||||
lda LoLineTableL+2,y
|
||||
sta SPRITE_SCREEN_P3
|
||||
lda LoLineTableH+2,y
|
||||
sta SPRITE_SCREEN_P3+1
|
||||
lda LoLineTableL+3,y
|
||||
sta SPRITE_SCREEN_P4
|
||||
lda LoLineTableH+3,y
|
||||
sta SPRITE_SCREEN_P4+1
|
||||
:undraw4 lda LoLineTableL,y
|
||||
sta SPRITE_SCREEN_P
|
||||
lda LoLineTableH,y
|
||||
sta SPRITE_SCREEN_P+1
|
||||
lda LoLineTableL+1,y
|
||||
sta SPRITE_SCREEN_P2
|
||||
lda LoLineTableH+1,y
|
||||
sta SPRITE_SCREEN_P2+1
|
||||
lda LoLineTableL+2,y
|
||||
sta SPRITE_SCREEN_P3
|
||||
lda LoLineTableH+2,y
|
||||
sta SPRITE_SCREEN_P3+1
|
||||
lda LoLineTableL+3,y
|
||||
sta SPRITE_SCREEN_P4
|
||||
lda LoLineTableH+3,y
|
||||
sta SPRITE_SCREEN_P4+1
|
||||
|
||||
txa
|
||||
pha ; stash
|
||||
tay ; COL offset
|
||||
sta TXTPAGE2
|
||||
lda #BGCOLORAUX
|
||||
:wipe3 sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
iny
|
||||
:wipe3b sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
iny
|
||||
:wipe3c sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
iny
|
||||
:wipe3d sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
iny
|
||||
:wipe3e sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
txa
|
||||
pha ; stash
|
||||
tay ; COL offset
|
||||
sta TXTPAGE2
|
||||
lda #BGCOLORAUX
|
||||
:wipe3 sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
iny
|
||||
:wipe3b sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
iny
|
||||
:wipe3c sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
iny
|
||||
:wipe3d sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
iny
|
||||
:wipe3e sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
|
||||
pla ; unstash
|
||||
tay
|
||||
sta TXTPAGE1
|
||||
lda #BGCOLOR
|
||||
:wipe4 sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
iny
|
||||
:wipe4b sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
iny
|
||||
:wipe4c sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
iny
|
||||
:wipe4d sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
iny
|
||||
:wipe4e sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
rts
|
||||
pla ; unstash
|
||||
tay
|
||||
sta TXTPAGE1
|
||||
lda #BGCOLOR
|
||||
:wipe4 sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
iny
|
||||
:wipe4b sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
iny
|
||||
:wipe4c sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
iny
|
||||
:wipe4d sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
iny
|
||||
:wipe4e sta (SPRITE_SCREEN_P),y
|
||||
sta (SPRITE_SCREEN_P2),y
|
||||
sta (SPRITE_SCREEN_P3),y
|
||||
sta (SPRITE_SCREEN_P4),y
|
||||
rts
|
||||
|
||||
DrawBird
|
||||
lda BIRD_Y
|
||||
lsr
|
||||
bcs :oddHeight
|
||||
lda BIRD_Y
|
||||
lsr
|
||||
bcs :oddHeight
|
||||
:evenHeight
|
||||
sta SPRITE_Y
|
||||
lda #3
|
||||
sta SPRITE_H
|
||||
lda BIRD_FLAP
|
||||
beq :flapDownEven
|
||||
:flapUpEven CopyPtr BIRD_WUP_E_PIXEL;SPRITE_DATA_P
|
||||
CopyPtr BIRD_WUP_E_MASK;SPRITE_MASK_P
|
||||
CopyPtr BIRD_WUP_E_IMASK;SPRITE_IMASK_P
|
||||
jmp :drawSprite
|
||||
:flapDownEven CopyPtr BIRD_WDN_E_PIXEL;SPRITE_DATA_P
|
||||
CopyPtr BIRD_WDN_E_MASK;SPRITE_MASK_P
|
||||
CopyPtr BIRD_WDN_E_IMASK;SPRITE_IMASK_P
|
||||
jmp :drawSprite
|
||||
sta SPRITE_Y
|
||||
lda #3
|
||||
sta SPRITE_H
|
||||
lda BIRD_FLAP
|
||||
beq :flapDownEven
|
||||
:flapUpEven CopyPtr BIRD_WUP_E_PIXEL;SPRITE_DATA_P
|
||||
CopyPtr BIRD_WUP_E_MASK;SPRITE_MASK_P
|
||||
CopyPtr BIRD_WUP_E_IMASK;SPRITE_IMASK_P
|
||||
jmp :drawSprite
|
||||
:flapDownEven CopyPtr BIRD_WDN_E_PIXEL;SPRITE_DATA_P
|
||||
CopyPtr BIRD_WDN_E_MASK;SPRITE_MASK_P
|
||||
CopyPtr BIRD_WDN_E_IMASK;SPRITE_IMASK_P
|
||||
jmp :drawSprite
|
||||
|
||||
:oddHeight
|
||||
sta SPRITE_Y
|
||||
lda #4
|
||||
sta SPRITE_H
|
||||
lda BIRD_FLAP
|
||||
beq :flapDownOdd
|
||||
:flapUpOdd CopyPtr BIRD_WUP_O_PIXEL;SPRITE_DATA_P
|
||||
CopyPtr BIRD_WUP_O_MASK;SPRITE_MASK_P
|
||||
CopyPtr BIRD_WUP_O_IMASK;SPRITE_IMASK_P
|
||||
jmp :drawSprite
|
||||
:flapDownOdd CopyPtr BIRD_WDN_O_PIXEL;SPRITE_DATA_P
|
||||
CopyPtr BIRD_WDN_O_MASK;SPRITE_MASK_P
|
||||
CopyPtr BIRD_WDN_O_IMASK;SPRITE_IMASK_P
|
||||
jmp :drawSprite
|
||||
sta SPRITE_Y
|
||||
lda #4
|
||||
sta SPRITE_H
|
||||
lda BIRD_FLAP
|
||||
beq :flapDownOdd
|
||||
:flapUpOdd CopyPtr BIRD_WUP_O_PIXEL;SPRITE_DATA_P
|
||||
CopyPtr BIRD_WUP_O_MASK;SPRITE_MASK_P
|
||||
CopyPtr BIRD_WUP_O_IMASK;SPRITE_IMASK_P
|
||||
jmp :drawSprite
|
||||
:flapDownOdd CopyPtr BIRD_WDN_O_PIXEL;SPRITE_DATA_P
|
||||
CopyPtr BIRD_WDN_O_MASK;SPRITE_MASK_P
|
||||
CopyPtr BIRD_WDN_O_IMASK;SPRITE_IMASK_P
|
||||
jmp :drawSprite
|
||||
:drawSprite
|
||||
jsr DrawSpriteBetter
|
||||
rts
|
||||
jsr DrawSpriteBetter
|
||||
rts
|
||||
|
||||
* still does collision
|
||||
DrawSpriteBetter
|
||||
lda #0
|
||||
sta SPRITE_X_IDX
|
||||
:drawLine lda SPRITE_Y ;
|
||||
tay
|
||||
lda LoLineTableL,y ; SET SCREEN LINE
|
||||
sta SPRITE_SCREEN_P
|
||||
lda LoLineTableH,y
|
||||
sta SPRITE_SCREEN_P+1
|
||||
lda #0
|
||||
sta SPRITE_X_IDX
|
||||
:drawLine lda SPRITE_Y ;
|
||||
tay
|
||||
lda LoLineTableL,y ; SET SCREEN LINE
|
||||
sta SPRITE_SCREEN_P
|
||||
lda LoLineTableH,y
|
||||
sta SPRITE_SCREEN_P+1
|
||||
|
||||
lda #BIRD_X ;SPRITE_X ; ADD IN X OFFSET TO SCREEN POSITION
|
||||
clc ; I think the highest position is $f8
|
||||
adc SPRITE_SCREEN_P ; eg- Line 18, col 40= $4f8
|
||||
sta SPRITE_SCREEN_P ; SHOULD NEVER CARRY?
|
||||
lda #BIRD_X ;SPRITE_X ; ADD IN X OFFSET TO SCREEN POSITION
|
||||
clc ; I think the highest position is $f8
|
||||
adc SPRITE_SCREEN_P ; eg- Line 18, col 40= $4f8
|
||||
sta SPRITE_SCREEN_P ; SHOULD NEVER CARRY?
|
||||
|
||||
|
||||
jmp DrawSpriteLineC
|
||||
jmp DrawSpriteLineC
|
||||
]DSLCD_done
|
||||
inc SPRITE_Y
|
||||
dec SPRITE_H
|
||||
lda SPRITE_H
|
||||
bne :drawLine
|
||||
rts
|
||||
inc SPRITE_Y
|
||||
dec SPRITE_H
|
||||
lda SPRITE_H
|
||||
bne :drawLine
|
||||
rts
|
||||
|
||||
|
||||
DrawSpriteLineC
|
||||
; EVEN COLS
|
||||
DD_EVEN lda #0
|
||||
sta SPRITE_SCREEN_IDX
|
||||
sta TXTPAGE2
|
||||
; EVEN COLS
|
||||
DD_EVEN lda #0
|
||||
sta SPRITE_SCREEN_IDX
|
||||
sta TXTPAGE2
|
||||
|
||||
:lineLoop
|
||||
|
||||
:collisionCheckDrawer
|
||||
ldy SPRITE_SCREEN_IDX ; GET SCREEN PIXELS
|
||||
lda (SPRITE_SCREEN_P),y
|
||||
ldy SPRITE_SCREEN_IDX ; GET SCREEN PIXELS
|
||||
lda (SPRITE_SCREEN_P),y
|
||||
|
||||
ldy SPRITE_X_IDX ; PREP Y INDEX
|
||||
cmp #BGCOLORAUX ; AUX BGCOLOR @TODO
|
||||
beq :noCollisionSIMPLE
|
||||
pha ; SAVE -> STACK
|
||||
and (SPRITE_IMASK_P),y
|
||||
cmp #BGCOLORAUX_0LO
|
||||
beq :noCollision
|
||||
cmp #BGCOLORAUX_0HI
|
||||
beq :noCollision
|
||||
lda #1
|
||||
sta SPRITE_COLLISION
|
||||
ldy SPRITE_X_IDX ; PREP Y INDEX
|
||||
cmp #BGCOLORAUX ; AUX BGCOLOR @TODO
|
||||
beq :noCollisionSIMPLE
|
||||
pha ; SAVE -> STACK
|
||||
and (SPRITE_IMASK_P),y
|
||||
cmp #BGCOLORAUX_0LO
|
||||
beq :noCollision
|
||||
cmp #BGCOLORAUX_0HI
|
||||
beq :noCollision
|
||||
lda #1
|
||||
sta SPRITE_COLLISION
|
||||
:noCollision
|
||||
:doPixels pla ; Y=SPRITE X A=BG DATA
|
||||
and (SPRITE_MASK_P),y ; CUT OUT SPRITE IN BG DATA
|
||||
ora (SPRITE_DATA_P),y ; OVERLAY OUR SPRITE DATA
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
sta (SPRITE_SCREEN_P),y
|
||||
sec
|
||||
bcs :donePixel
|
||||
:doPixels pla ; Y=SPRITE X A=BG DATA
|
||||
and (SPRITE_MASK_P),y ; CUT OUT SPRITE IN BG DATA
|
||||
ora (SPRITE_DATA_P),y ; OVERLAY OUR SPRITE DATA
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
sta (SPRITE_SCREEN_P),y
|
||||
sec
|
||||
bcs :donePixel
|
||||
|
||||
:noCollisionSIMPLE
|
||||
lda (SPRITE_DATA_P),y
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
sta (SPRITE_SCREEN_P),y
|
||||
lda (SPRITE_DATA_P),y
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
sta (SPRITE_SCREEN_P),y
|
||||
|
||||
|
||||
:donePixel inc SPRITE_X_IDX
|
||||
inc SPRITE_SCREEN_IDX
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
cpy SPRITE_W
|
||||
bcc :lineLoop
|
||||
:donePixel inc SPRITE_X_IDX
|
||||
inc SPRITE_SCREEN_IDX
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
cpy SPRITE_W
|
||||
bcc :lineLoop
|
||||
|
||||
DD_ODD
|
||||
; ODD COLS
|
||||
lda #0
|
||||
sta SPRITE_SCREEN_IDX
|
||||
sta TXTPAGE1
|
||||
|
||||
:lineLoop ;ldy SPRITE_X_IDX ;
|
||||
;lda (SPRITE_IMASK_P),y
|
||||
;beq :noPixel
|
||||
; ODD COLS
|
||||
lda #0
|
||||
sta SPRITE_SCREEN_IDX
|
||||
sta TXTPAGE1
|
||||
|
||||
:lineLoop
|
||||
:collisionCheckDrawer
|
||||
ldy SPRITE_SCREEN_IDX ; GET SCREEN PIXELS
|
||||
lda (SPRITE_SCREEN_P),y
|
||||
ldy SPRITE_X_IDX ; PREP Y INDEX
|
||||
cmp #BGCOLOR ; MAIN BGCOLOR @TODO
|
||||
beq :noCollisionSIMPLE
|
||||
pha ; SAVE -> STACK
|
||||
and (SPRITE_IMASK_P),y
|
||||
cmp #BGCOLOR_0LO
|
||||
beq :noCollision
|
||||
cmp #BGCOLOR_0HI
|
||||
beq :noCollision
|
||||
lda #1
|
||||
sta SPRITE_COLLISION
|
||||
ldy SPRITE_SCREEN_IDX ; GET SCREEN PIXELS
|
||||
lda (SPRITE_SCREEN_P),y
|
||||
ldy SPRITE_X_IDX ; PREP Y INDEX
|
||||
cmp #BGCOLOR ; MAIN BGCOLOR @TODO
|
||||
beq :noCollisionSIMPLE
|
||||
pha ; SAVE -> STACK
|
||||
and (SPRITE_IMASK_P),y
|
||||
cmp #BGCOLOR_0LO
|
||||
beq :noCollision
|
||||
cmp #BGCOLOR_0HI
|
||||
beq :noCollision
|
||||
lda #1
|
||||
sta SPRITE_COLLISION
|
||||
|
||||
:noCollision
|
||||
:doPixels pla ; Y=SPRITE X A=BG DATA
|
||||
and (SPRITE_MASK_P),y ; CUT OUT SPRITE IN BG DATA
|
||||
ora (SPRITE_DATA_P),y ; OVERLAY OUR SPRITE DATA
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
sta (SPRITE_SCREEN_P),y
|
||||
sec
|
||||
bcs :donePixel
|
||||
:doPixels pla ; Y=SPRITE X A=BG DATA
|
||||
and (SPRITE_MASK_P),y ; CUT OUT SPRITE IN BG DATA
|
||||
ora (SPRITE_DATA_P),y ; OVERLAY OUR SPRITE DATA
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
sta (SPRITE_SCREEN_P),y
|
||||
sec
|
||||
bcs :donePixel
|
||||
|
||||
:noCollisionSIMPLE
|
||||
lda (SPRITE_DATA_P),y
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
sta (SPRITE_SCREEN_P),y
|
||||
lda (SPRITE_DATA_P),y
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
sta (SPRITE_SCREEN_P),y
|
||||
|
||||
|
||||
:donePixel inc SPRITE_X_IDX
|
||||
inc SPRITE_SCREEN_IDX
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
cpy SPRITE_W
|
||||
bcc :lineLoop
|
||||
:donePixel inc SPRITE_X_IDX
|
||||
inc SPRITE_SCREEN_IDX
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
cpy SPRITE_W
|
||||
bcc :lineLoop
|
||||
|
||||
jmp ]DSLCD_done
|
||||
jmp ]DSLCD_done
|
||||
|
|
1630
src/dlrlib.s
1630
src/dlrlib.s
File diff suppressed because it is too large
Load Diff
346
src/numbers.s
346
src/numbers.s
|
@ -2,192 +2,192 @@
|
|||
* Well... optimized number drawing because, why not
|
||||
****
|
||||
|
||||
BB equ #$00
|
||||
BW equ #$F0
|
||||
WB equ #$0F
|
||||
WW equ #$FF
|
||||
BB equ #$00
|
||||
BW equ #$F0
|
||||
WB equ #$0F
|
||||
WW equ #$FF
|
||||
|
||||
DrawNum_Table da DrawNum_0
|
||||
da DrawNum_1
|
||||
da DrawNum_2
|
||||
da DrawNum_3
|
||||
da DrawNum_4
|
||||
da DrawNum_5
|
||||
da DrawNum_6
|
||||
da DrawNum_7
|
||||
da DrawNum_8
|
||||
da DrawNum_9
|
||||
DrawNum_Table da DrawNum_0
|
||||
da DrawNum_1
|
||||
da DrawNum_2
|
||||
da DrawNum_3
|
||||
da DrawNum_4
|
||||
da DrawNum_5
|
||||
da DrawNum_6
|
||||
da DrawNum_7
|
||||
da DrawNum_8
|
||||
da DrawNum_9
|
||||
|
||||
* y = x, a=val (0-9)
|
||||
DrawNum
|
||||
asl
|
||||
tax
|
||||
lda DrawNum_Table,x
|
||||
sta :jsrPtr+1
|
||||
lda DrawNum_Table+1,x
|
||||
sta :jsrPtr+2
|
||||
tya
|
||||
tax
|
||||
:jsrPtr jsr DrawNum_0
|
||||
rts
|
||||
asl
|
||||
tax
|
||||
lda DrawNum_Table,x
|
||||
sta :jsrPtr+1
|
||||
lda DrawNum_Table+1,x
|
||||
sta :jsrPtr+2
|
||||
tya
|
||||
tax
|
||||
:jsrPtr jsr DrawNum_0
|
||||
rts
|
||||
|
||||
* x = x offset (even cols) 0-40
|
||||
DrawNum_0 sta TXTPAGE2
|
||||
lda #BB
|
||||
sta Lo01,x
|
||||
sta Lo02,x
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,X
|
||||
sta TXTPAGE1
|
||||
lda #BW
|
||||
sta Lo01,x
|
||||
lda #WB
|
||||
sta Lo02,x
|
||||
lda #WW
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
rts
|
||||
DrawNum_0 sta TXTPAGE2
|
||||
lda #BB
|
||||
sta Lo01,x
|
||||
sta Lo02,x
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,X
|
||||
sta TXTPAGE1
|
||||
lda #BW
|
||||
sta Lo01,x
|
||||
lda #WB
|
||||
sta Lo02,x
|
||||
lda #WW
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
rts
|
||||
|
||||
DrawNum_1 sta TXTPAGE2
|
||||
lda #BW
|
||||
sta Lo01,x
|
||||
lda #WB
|
||||
sta Lo02,x
|
||||
sta Lo02+1,x
|
||||
lda #WW
|
||||
sta Lo01+1,x
|
||||
sta TXTPAGE1
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
lda #BB
|
||||
sta Lo01,x
|
||||
sta Lo02,x
|
||||
rts
|
||||
DrawNum_1 sta TXTPAGE2
|
||||
lda #BW
|
||||
sta Lo01,x
|
||||
lda #WB
|
||||
sta Lo02,x
|
||||
sta Lo02+1,x
|
||||
lda #WW
|
||||
sta Lo01+1,x
|
||||
sta TXTPAGE1
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
lda #BB
|
||||
sta Lo01,x
|
||||
sta Lo02,x
|
||||
rts
|
||||
|
||||
DrawNum_2 sta TXTPAGE2
|
||||
lda #BW
|
||||
sta Lo01,x
|
||||
lda #WB
|
||||
sta Lo02+1,x
|
||||
lda #BB
|
||||
sta Lo02,x
|
||||
sta Lo01+1,x
|
||||
sta TXTPAGE1
|
||||
sta Lo01,x
|
||||
sta Lo02,x
|
||||
lda #WW
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
rts
|
||||
DrawNum_2 sta TXTPAGE2
|
||||
lda #BW
|
||||
sta Lo01,x
|
||||
lda #WB
|
||||
sta Lo02+1,x
|
||||
lda #BB
|
||||
sta Lo02,x
|
||||
sta Lo01+1,x
|
||||
sta TXTPAGE1
|
||||
sta Lo01,x
|
||||
sta Lo02,x
|
||||
lda #WW
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
rts
|
||||
|
||||
DrawNum_3 sta TXTPAGE2
|
||||
lda #BW
|
||||
sta Lo01,x
|
||||
lda #WB
|
||||
sta Lo02,x
|
||||
lda #BB
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
sta TXTPAGE1
|
||||
sta Lo01,x
|
||||
lda #WB
|
||||
sta Lo02,x
|
||||
lda #WW
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
rts
|
||||
DrawNum_3 sta TXTPAGE2
|
||||
lda #BW
|
||||
sta Lo01,x
|
||||
lda #WB
|
||||
sta Lo02,x
|
||||
lda #BB
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
sta TXTPAGE1
|
||||
sta Lo01,x
|
||||
lda #WB
|
||||
sta Lo02,x
|
||||
lda #WW
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
rts
|
||||
|
||||
DrawNum_4 sta TXTPAGE2
|
||||
lda #BB
|
||||
sta Lo01,x
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
lda #BW
|
||||
sta Lo02,x
|
||||
sta TXTPAGE1
|
||||
sta Lo02,x
|
||||
lda #WW
|
||||
sta Lo01,x
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
rts
|
||||
DrawNum_4 sta TXTPAGE2
|
||||
lda #BB
|
||||
sta Lo01,x
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
lda #BW
|
||||
sta Lo02,x
|
||||
sta TXTPAGE1
|
||||
sta Lo02,x
|
||||
lda #WW
|
||||
sta Lo01,x
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
rts
|
||||
|
||||
DrawNum_5 sta TXTPAGE2
|
||||
lda #BW
|
||||
sta Lo01+1,x
|
||||
lda #WB
|
||||
sta Lo02,x
|
||||
lda #BB
|
||||
sta Lo01,x
|
||||
sta Lo02+1,x
|
||||
sta TXTPAGE1
|
||||
sta Lo01,x
|
||||
sta Lo02,x
|
||||
lda #WW
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
rts
|
||||
DrawNum_5 sta TXTPAGE2
|
||||
lda #BW
|
||||
sta Lo01+1,x
|
||||
lda #WB
|
||||
sta Lo02,x
|
||||
lda #BB
|
||||
sta Lo01,x
|
||||
sta Lo02+1,x
|
||||
sta TXTPAGE1
|
||||
sta Lo01,x
|
||||
sta Lo02,x
|
||||
lda #WW
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
rts
|
||||
|
||||
DrawNum_6 sta TXTPAGE2
|
||||
lda #BB
|
||||
sta Lo01,x
|
||||
sta Lo02,x
|
||||
sta Lo02+1,x
|
||||
lda #WB
|
||||
sta Lo01+1,x
|
||||
sta TXTPAGE1
|
||||
sta Lo01,x
|
||||
sta Lo02,x
|
||||
lda #WW
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
rts
|
||||
DrawNum_6 sta TXTPAGE2
|
||||
lda #BB
|
||||
sta Lo01,x
|
||||
sta Lo02,x
|
||||
sta Lo02+1,x
|
||||
lda #WB
|
||||
sta Lo01+1,x
|
||||
sta TXTPAGE1
|
||||
sta Lo01,x
|
||||
sta Lo02,x
|
||||
lda #WW
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
rts
|
||||
|
||||
DrawNum_7 sta TXTPAGE2
|
||||
lda #BW
|
||||
sta Lo01,x
|
||||
lda #WW
|
||||
sta Lo02,x
|
||||
sta Lo02+1,x
|
||||
lda #BB
|
||||
sta Lo01+1,x
|
||||
sta TXTPAGE1
|
||||
sta Lo02,x
|
||||
lda #BW
|
||||
sta Lo01,x
|
||||
lda #WW
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
rts
|
||||
DrawNum_7 sta TXTPAGE2
|
||||
lda #BW
|
||||
sta Lo01,x
|
||||
lda #WW
|
||||
sta Lo02,x
|
||||
sta Lo02+1,x
|
||||
lda #BB
|
||||
sta Lo01+1,x
|
||||
sta TXTPAGE1
|
||||
sta Lo02,x
|
||||
lda #BW
|
||||
sta Lo01,x
|
||||
lda #WW
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
rts
|
||||
|
||||
DrawNum_8 sta TXTPAGE2
|
||||
lda #WB
|
||||
sta Lo01,x
|
||||
lda #BB
|
||||
sta Lo02,X
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
sta TXTPAGE1
|
||||
sta Lo02,x
|
||||
lda #BW
|
||||
sta Lo01,x
|
||||
lda #WW
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
rts
|
||||
DrawNum_8 sta TXTPAGE2
|
||||
lda #WB
|
||||
sta Lo01,x
|
||||
lda #BB
|
||||
sta Lo02,X
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
sta TXTPAGE1
|
||||
sta Lo02,x
|
||||
lda #BW
|
||||
sta Lo01,x
|
||||
lda #WW
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
rts
|
||||
|
||||
DrawNum_9 sta TXTPAGE2
|
||||
lda #BB
|
||||
sta Lo01,x
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
lda #BW
|
||||
sta Lo02,x
|
||||
sta TXTPAGE1
|
||||
sta Lo01,x
|
||||
sta Lo02,x
|
||||
lda #WW
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
rts
|
||||
DrawNum_9 sta TXTPAGE2
|
||||
lda #BB
|
||||
sta Lo01,x
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
lda #BW
|
||||
sta Lo02,x
|
||||
sta TXTPAGE1
|
||||
sta Lo01,x
|
||||
sta Lo02,x
|
||||
lda #WW
|
||||
sta Lo01+1,x
|
||||
sta Lo02+1,x
|
||||
rts
|
||||
|
||||
|
|
2488
src/pipes.s
2488
src/pipes.s
File diff suppressed because it is too large
Load Diff
38
src/readme.s
38
src/readme.s
|
@ -3,25 +3,27 @@
|
|||
*
|
||||
* Flapple Bird - A de-make of Flappy Bird for the Apple II computer
|
||||
*
|
||||
* More information about this project is available at
|
||||
* http://dagenbrock.com/flappy
|
||||
* # Download releases here:
|
||||
* https://github.com/digarok/flapple/releases
|
||||
*
|
||||
* How to run
|
||||
* ==========
|
||||
* You can download either disk image and run it with an emulator
|
||||
* or transfer it to the respective media and run it on a real
|
||||
* machine (recommended).
|
||||
* The 3.5" ProDOS disk version is "flapple800.po", and the
|
||||
* 5.25" ProDOS disk version is "flapple140.po".
|
||||
* # How to run
|
||||
* You can download either disk image and run it with an emulator like GSplus
|
||||
* or transfer to the respective media and run on a real machine (recommended).
|
||||
* - `flapple800.po` is the 3.5" ProDOS disk version (800KB)
|
||||
* - `flapple140.po` is the 5.25" ProDOS disk version (140KB)
|
||||
*
|
||||
* How to build
|
||||
* ============
|
||||
* This is written to compile on Merlin 8/16, but I believe should
|
||||
* work with all later Merlin variants. Load Merlin, then 'L'oad
|
||||
* the file "flapple.s", finally hit OpenApple-A to assemble and
|
||||
* it should build the "flap.system" file.
|
||||
* It should automatically boot ProDOS and load the color version of the game.
|
||||
* There is a Monochrome version of the game included on the disk.
|
||||
* To run it, quit game with the `q` key, and from the ProDOS selector menu
|
||||
* run `fmono.system`.
|
||||
*
|
||||
* # How to build
|
||||
* This was originally written to compile on Merlin 8/16, but it's now
|
||||
* maintained using Merlin32 (https://github.com/digarok/merlin32/).
|
||||
*
|
||||
*
|
||||
* Again, more information about this project is available at
|
||||
* http://dagenbrock.com/flappy
|
||||
* - Classic Merlin16+ on an Apple IIgs
|
||||
* - Load Merlin, then `L`oad the file "flapple.s", finally hit OpenApple-A to assemble and it should build the "flap.system" file.
|
||||
* - Modern PC builds:
|
||||
* - Assemble with `merlin32 src/flapple.s`
|
||||
* - Make disks with `./make_po.sh`
|
||||
* * Requires having `merlin32` and `cadius` commands available on your system.
|
||||
|
|
226
src/sprite.s
226
src/sprite.s
|
@ -1,144 +1,144 @@
|
|||
SPRITE_X db 0
|
||||
SPRITE_Y db 0 ; BYTE,not pixel. gotta be, sorry
|
||||
SPRITE_W db 0
|
||||
SPRITE_W_D2 db 0
|
||||
SPRITE_H db 0 ; <- in bytes
|
||||
SPRITE_X db 0
|
||||
SPRITE_Y db 0 ; BYTE,not pixel. gotta be, sorry
|
||||
SPRITE_W db 0
|
||||
SPRITE_W_D2 db 0
|
||||
SPRITE_H db 0 ; <- in bytes
|
||||
|
||||
SPRITE_MAIN da 0
|
||||
SPRITE_AUX da 0
|
||||
SPRITE_MASK da 0
|
||||
SPRITE_IMASK da 0
|
||||
SPRITE_COLLISION db 0
|
||||
SPRITE_Y_IDX dw 0
|
||||
SPRITE_X_IDX dw 0
|
||||
SPRITE_MAIN da 0
|
||||
SPRITE_AUX da 0
|
||||
SPRITE_MASK da 0
|
||||
SPRITE_IMASK da 0
|
||||
SPRITE_COLLISION db 0
|
||||
SPRITE_Y_IDX dw 0
|
||||
SPRITE_X_IDX dw 0
|
||||
|
||||
SPRITE_SCREEN_P equz $00
|
||||
SPRITE_MAIN_P equz $02
|
||||
SPRITE_SCREEN_P2 equz $02
|
||||
SPRITE_AUX_P equz $04
|
||||
SPRITE_SCREEN_P3 equz $04
|
||||
SPRITE_MASK_P equz $FA
|
||||
SPRITE_SCREEN_P4 equz $FA
|
||||
SPRITE_IMASK_P equz $FC
|
||||
SPRITE_SCREEN_P equz $00
|
||||
SPRITE_MAIN_P equz $02
|
||||
SPRITE_SCREEN_P2 equz $02
|
||||
SPRITE_AUX_P equz $04
|
||||
SPRITE_SCREEN_P3 equz $04
|
||||
SPRITE_MASK_P equz $FA
|
||||
SPRITE_SCREEN_P4 equz $FA
|
||||
SPRITE_IMASK_P equz $FC
|
||||
|
||||
SPRITE_SCREEN_IDX db #$0
|
||||
AUX_BG_COLOR db #$BB
|
||||
MAIN_BG_COLOR db #$77
|
||||
SPRITE_SCREEN_IDX db #$0
|
||||
AUX_BG_COLOR db #$BB
|
||||
MAIN_BG_COLOR db #$77
|
||||
|
||||
* still does collision
|
||||
DrawSpriteBetter
|
||||
lda #0
|
||||
sta SPRITE_X_IDX
|
||||
:drawLine lda SPRITE_Y ;
|
||||
tay
|
||||
lda LoLineTableL,y ; SET SCREEN LINE
|
||||
sta SPRITE_SCREEN_P
|
||||
lda LoLineTableH,y
|
||||
sta SPRITE_SCREEN_P+1
|
||||
lda #0
|
||||
sta SPRITE_X_IDX
|
||||
:drawLine lda SPRITE_Y ;
|
||||
tay
|
||||
lda LoLineTableL,y ; SET SCREEN LINE
|
||||
sta SPRITE_SCREEN_P
|
||||
lda LoLineTableH,y
|
||||
sta SPRITE_SCREEN_P+1
|
||||
|
||||
lda SPRITE_X ; ADD IN X OFFSET TO SCREEN POSITION
|
||||
clc ; I think the highest position is $f8
|
||||
adc SPRITE_SCREEN_P ; eg- Line 18, col 40= $4f8
|
||||
sta SPRITE_SCREEN_P ; SHOULD NEVER CARRY?
|
||||
lda SPRITE_X ; ADD IN X OFFSET TO SCREEN POSITION
|
||||
clc ; I think the highest position is $f8
|
||||
adc SPRITE_SCREEN_P ; eg- Line 18, col 40= $4f8
|
||||
sta SPRITE_SCREEN_P ; SHOULD NEVER CARRY?
|
||||
|
||||
|
||||
jmp DrawSpriteLineC
|
||||
jmp DrawSpriteLineC
|
||||
]DSLCD_done
|
||||
inc SPRITE_Y
|
||||
dec SPRITE_H
|
||||
lda SPRITE_H
|
||||
bne :drawLine
|
||||
rts
|
||||
inc SPRITE_Y
|
||||
dec SPRITE_H
|
||||
lda SPRITE_H
|
||||
bne :drawLine
|
||||
rts
|
||||
|
||||
|
||||
DrawSpriteLineC
|
||||
; EVEN COLS
|
||||
DD_EVEN lda #0
|
||||
sta SPRITE_SCREEN_IDX
|
||||
sta TXTPAGE2
|
||||
; EVEN COLS
|
||||
DD_EVEN lda #0
|
||||
sta SPRITE_SCREEN_IDX
|
||||
sta TXTPAGE2
|
||||
|
||||
:lineLoop
|
||||
;ldy SPRITE_X_IDX ;
|
||||
;lda (SPRITE_IMASK_P),y
|
||||
;beq :noPixel
|
||||
;ldy SPRITE_X_IDX ;
|
||||
;lda (SPRITE_IMASK_P),y
|
||||
;beq :noPixel
|
||||
|
||||
:collisionCheckDrawer
|
||||
ldy SPRITE_SCREEN_IDX ; GET SCREEN PIXELS
|
||||
lda (SPRITE_SCREEN_P),y
|
||||
pha ; SAVE -> STACK
|
||||
ldy SPRITE_X_IDX ; PREP Y INDEX
|
||||
cmp #$BB ; AUX BGCOLOR @TODO
|
||||
beq :noCollision
|
||||
and (SPRITE_IMASK_P),y
|
||||
cmp #$B0
|
||||
beq :noCollision
|
||||
cmp #$0B
|
||||
beq :noCollision
|
||||
lda #1
|
||||
sta SPRITE_COLLISION
|
||||
sta $c034
|
||||
ldy SPRITE_SCREEN_IDX ; GET SCREEN PIXELS
|
||||
lda (SPRITE_SCREEN_P),y
|
||||
pha ; SAVE -> STACK
|
||||
ldy SPRITE_X_IDX ; PREP Y INDEX
|
||||
cmp #$BB ; AUX BGCOLOR @TODO
|
||||
beq :noCollision
|
||||
and (SPRITE_IMASK_P),y
|
||||
cmp #$B0
|
||||
beq :noCollision
|
||||
cmp #$0B
|
||||
beq :noCollision
|
||||
lda #1
|
||||
sta SPRITE_COLLISION
|
||||
sta $c034
|
||||
|
||||
:noCollision
|
||||
:doPixels pla ; Y=SPRITE X A=BG DATA
|
||||
and (SPRITE_MASK_P),y ; CUT OUT SPRITE IN BG DATA
|
||||
ora (SPRITE_AUX_P),y ; OVERLAY OUR SPRITE DATA
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
sta (SPRITE_SCREEN_P),y
|
||||
:doPixels pla ; Y=SPRITE X A=BG DATA
|
||||
and (SPRITE_MASK_P),y ; CUT OUT SPRITE IN BG DATA
|
||||
ora (SPRITE_AUX_P),y ; OVERLAY OUR SPRITE DATA
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
sta (SPRITE_SCREEN_P),y
|
||||
|
||||
:noPixel inc SPRITE_X_IDX
|
||||
inc SPRITE_X_IDX
|
||||
inc SPRITE_SCREEN_IDX
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
cpy SPRITE_W
|
||||
bcc :lineLoop
|
||||
:noPixel inc SPRITE_X_IDX
|
||||
inc SPRITE_X_IDX
|
||||
inc SPRITE_SCREEN_IDX
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
cpy SPRITE_W
|
||||
bcc :lineLoop
|
||||
|
||||
DD_ODD
|
||||
; ODD COLS
|
||||
inc SPRITE_X_IDX ; + 1 column offset
|
||||
lda SPRITE_X_IDX
|
||||
sec
|
||||
sbc SPRITE_W ; RESET DATA PTR
|
||||
sbc SPRITE_W ; *2 due to pixel skip
|
||||
sta SPRITE_X_IDX
|
||||
lda #0
|
||||
sta SPRITE_SCREEN_IDX
|
||||
sta TXTPAGE1
|
||||
; ODD COLS
|
||||
inc SPRITE_X_IDX ; + 1 column offset
|
||||
lda SPRITE_X_IDX
|
||||
sec
|
||||
sbc SPRITE_W ; RESET DATA PTR
|
||||
sbc SPRITE_W ; *2 due to pixel skip
|
||||
sta SPRITE_X_IDX
|
||||
lda #0
|
||||
sta SPRITE_SCREEN_IDX
|
||||
sta TXTPAGE1
|
||||
|
||||
:lineLoop ;ldy SPRITE_X_IDX ;
|
||||
;lda (SPRITE_IMASK_P),y
|
||||
;beq :noPixel
|
||||
:lineLoop ;ldy SPRITE_X_IDX ;
|
||||
;lda (SPRITE_IMASK_P),y
|
||||
;beq :noPixel
|
||||
|
||||
:collisionCheckDrawer
|
||||
ldy SPRITE_SCREEN_IDX ; GET SCREEN PIXELS
|
||||
lda (SPRITE_SCREEN_P),y
|
||||
pha ; SAVE -> STACK
|
||||
ldy SPRITE_X_IDX ; PREP Y INDEX
|
||||
cmp #$77 ; MAIN BGCOLOR @TODO
|
||||
beq :noCollision
|
||||
and (SPRITE_IMASK_P),y
|
||||
cmp #$70
|
||||
beq :noCollision
|
||||
cmp #$07
|
||||
beq :noCollision
|
||||
lda #1
|
||||
sta SPRITE_COLLISION
|
||||
sta $c034
|
||||
ldy SPRITE_SCREEN_IDX ; GET SCREEN PIXELS
|
||||
lda (SPRITE_SCREEN_P),y
|
||||
pha ; SAVE -> STACK
|
||||
ldy SPRITE_X_IDX ; PREP Y INDEX
|
||||
cmp #$77 ; MAIN BGCOLOR @TODO
|
||||
beq :noCollision
|
||||
and (SPRITE_IMASK_P),y
|
||||
cmp #$70
|
||||
beq :noCollision
|
||||
cmp #$07
|
||||
beq :noCollision
|
||||
lda #1
|
||||
sta SPRITE_COLLISION
|
||||
sta $c034
|
||||
|
||||
:noCollision
|
||||
:doPixels pla ; Y=SPRITE X A=BG DATA
|
||||
and (SPRITE_MASK_P),y ; CUT OUT SPRITE IN BG DATA
|
||||
ora (SPRITE_MAIN_P),y ; OVERLAY OUR SPRITE DATA
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
sta (SPRITE_SCREEN_P),y
|
||||
:doPixels pla ; Y=SPRITE X A=BG DATA
|
||||
and (SPRITE_MASK_P),y ; CUT OUT SPRITE IN BG DATA
|
||||
ora (SPRITE_MAIN_P),y ; OVERLAY OUR SPRITE DATA
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
sta (SPRITE_SCREEN_P),y
|
||||
|
||||
:noPixel inc SPRITE_X_IDX
|
||||
inc SPRITE_X_IDX
|
||||
inc SPRITE_SCREEN_IDX
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
cpy SPRITE_W
|
||||
bcc :lineLoop
|
||||
dec SPRITE_X_IDX ; -1 column offset (for next row)
|
||||
:noPixel inc SPRITE_X_IDX
|
||||
inc SPRITE_X_IDX
|
||||
inc SPRITE_SCREEN_IDX
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
cpy SPRITE_W
|
||||
bcc :lineLoop
|
||||
dec SPRITE_X_IDX ; -1 column offset (for next row)
|
||||
|
||||
jmp ]DSLCD_done
|
||||
jmp ]DSLCD_done
|
||||
|
||||
|
||||
|
|
64
src/util.s
64
src/util.s
|
@ -1,44 +1,44 @@
|
|||
** Register preservation
|
||||
_sX dw 0
|
||||
_sY dw 0
|
||||
_sA dw 0
|
||||
_storeReg sta _sA
|
||||
stx _sX
|
||||
sty _sY
|
||||
rts
|
||||
_loadReg lda _sA
|
||||
ldx _sX
|
||||
ldy _sY
|
||||
rts
|
||||
_sX dw 0
|
||||
_sY dw 0
|
||||
_sA dw 0
|
||||
_storeReg sta _sA
|
||||
stx _sX
|
||||
sty _sY
|
||||
rts
|
||||
_loadReg lda _sA
|
||||
ldx _sX
|
||||
ldy _sY
|
||||
rts
|
||||
|
||||
**************************************************
|
||||
* Awesome PRNG thx to White Flame (aka David Holz)
|
||||
**************************************************
|
||||
GetRand
|
||||
lda _randomByte
|
||||
beq :doEor
|
||||
asl
|
||||
bcc :noEor
|
||||
:doEor eor #$1d
|
||||
:noEor sta _randomByte
|
||||
rts
|
||||
_randomByte db 0
|
||||
lda _randomByte
|
||||
beq :doEor
|
||||
asl
|
||||
bcc :noEor
|
||||
:doEor eor #$1d
|
||||
:noEor sta _randomByte
|
||||
rts
|
||||
_randomByte db 0
|
||||
|
||||
GetRandLow
|
||||
lda _randomByte2
|
||||
beq :doEor
|
||||
asl
|
||||
bcc :noEor
|
||||
:doEor eor #$1d
|
||||
:noEor sta _randomByte2
|
||||
cmp #$80
|
||||
bcs :hot
|
||||
lda #$0
|
||||
rts
|
||||
:hot lda #$04
|
||||
rts
|
||||
lda _randomByte2
|
||||
beq :doEor
|
||||
asl
|
||||
bcc :noEor
|
||||
:doEor eor #$1d
|
||||
:noEor sta _randomByte2
|
||||
cmp #$80
|
||||
bcs :hot
|
||||
lda #$0
|
||||
rts
|
||||
:hot lda #$04
|
||||
rts
|
||||
|
||||
_randomByte2 db 0
|
||||
_randomByte2 db 0
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue