mirror of
https://github.com/digarok/flapple.git
synced 2024-05-28 10:41:27 +00:00
fix indenting with Cadius (by Brutal Deluxe)
This commit is contained in:
parent
065ec1274d
commit
ce33363ef3
|
@ -1,22 +1,23 @@
|
|||
**************************************************
|
||||
* 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)
|
||||
|
|
791
src/bird.s
791
src/bird.s
|
@ -1,487 +1,488 @@
|
|||
|
||||
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_DATA_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_DATA_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
|
||||
SPRITE_SCREEN_IDX db #$0
|
||||
|
||||
|
||||
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_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
|
||||
:flapIt
|
||||
lda #0
|
||||
sta BIRD_FLAP_CNT
|
||||
inc BIRD_FLAP
|
||||
lda BIRD_FLAP
|
||||
cmp #2
|
||||
bne :noFlip
|
||||
lda #0
|
||||
sta BIRD_FLAP
|
||||
:noFlip rts
|
||||
FlapBird
|
||||
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
|
||||
|
||||
|
||||
***** 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
|
||||
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
|
||||
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
|
||||
: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
|
||||
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
|
||||
|
||||
: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
|
||||
: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
|
||||
:drawSprite
|
||||
jsr DrawSpriteBetter
|
||||
rts
|
||||
jsr DrawSpriteBetter
|
||||
rts
|
||||
|
||||
*** MAKE IT WORK
|
||||
|
||||
BirdTest
|
||||
lda BIRD_X ;#30 (0-79)
|
||||
sta SPRITE_X
|
||||
lda BIRD_Y ;#10 (0-23)
|
||||
sta SPRITE_Y
|
||||
lda #5 ;/2 value (we do two passes of 1/2... Aux/Main)
|
||||
sta SPRITE_W
|
||||
lda #3 ;/2 value (must be byte aligned vertically
|
||||
sta SPRITE_H
|
||||
lda BIRD_X ;#30 (0-79)
|
||||
sta SPRITE_X
|
||||
lda BIRD_Y ;#10 (0-23)
|
||||
sta SPRITE_Y
|
||||
lda #5 ;/2 value (we do two passes of 1/2... Aux/Main)
|
||||
sta SPRITE_W
|
||||
lda #3 ;/2 value (must be byte aligned vertically
|
||||
sta SPRITE_H
|
||||
; CopyPtr BIRD_WDN_MAIN;SPRITE_MAIN_P
|
||||
; CopyPtr BIRD_WDN_AUX;SPRITE_AUX_P
|
||||
; CopyPtr BIRD_WDN_MASK;SPRITE_MASK_P
|
||||
; CopyPtr BIRD_WDN_IMASK;SPRITE_IMASK_P
|
||||
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?
|
||||
|
||||
|
||||
jmp DrawSpriteLineC
|
||||
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
|
||||
]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
|
||||
|
||||
:lineLoop
|
||||
; 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 ;ldy SPRITE_X_IDX ;
|
||||
;lda (SPRITE_IMASK_P),y
|
||||
;beq :noPixel
|
||||
|
||||
: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
|
||||
: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
|
||||
|
||||
:noCollisionSIMPLE
|
||||
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
|
||||
lda (SPRITE_DATA_P),y
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
sta (SPRITE_SCREEN_P),y
|
||||
|
||||
|
||||
jmp ]DSLCD_done
|
||||
:donePixel inc SPRITE_X_IDX
|
||||
inc SPRITE_SCREEN_IDX
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
cpy SPRITE_W
|
||||
bcc :lineLoop
|
||||
|
||||
|
||||
jmp ]DSLCD_done
|
||||
|
||||
|
||||
|
|
1673
src/dlrlib.s
1673
src/dlrlib.s
File diff suppressed because it is too large
Load Diff
1629
src/flapple.s
1629
src/flapple.s
File diff suppressed because it is too large
Load Diff
349
src/numbers.s
349
src/numbers.s
|
@ -2,191 +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
|
||||
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
|
||||
|
||||
* 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
|
||||
|
|
2499
src/pipes.s
2499
src/pipes.s
File diff suppressed because it is too large
Load Diff
|
@ -1,39 +1,39 @@
|
|||
|
||||
PlayFlappySong
|
||||
ldy #0
|
||||
:loop lda FlappySong,y
|
||||
cmp #NoteEnd
|
||||
beq :done
|
||||
cmp #NoteRest
|
||||
bne :notRest
|
||||
ldx FlappySong+1,y
|
||||
jsr VBlankX
|
||||
clc
|
||||
bcc :nextNote
|
||||
:notRest ldx FlappySong+1,y
|
||||
jsr SENoteAX
|
||||
ldx #2
|
||||
jsr VBlankX
|
||||
:nextNote iny
|
||||
iny
|
||||
lda KEY ; allow user to skip my totally awesome song
|
||||
bpl :noKey
|
||||
sta STROBE
|
||||
rts
|
||||
:noKey clc
|
||||
bcc :loop
|
||||
:done rts
|
||||
ldy #0
|
||||
:loop lda FlappySong,y
|
||||
cmp #NoteEnd
|
||||
beq :done
|
||||
cmp #NoteRest
|
||||
bne :notRest
|
||||
ldx FlappySong+1,y
|
||||
jsr VBlankX
|
||||
clc
|
||||
bcc :nextNote
|
||||
:notRest ldx FlappySong+1,y
|
||||
jsr SENoteAX
|
||||
ldx #2
|
||||
jsr VBlankX
|
||||
:nextNote iny
|
||||
iny
|
||||
lda KEY ; allow user to skip my totally awesome song
|
||||
bpl :noKey
|
||||
sta STROBE
|
||||
rts
|
||||
:noKey clc
|
||||
bcc :loop
|
||||
:done rts
|
||||
|
||||
|
||||
FlappySong hex 72,22,72,22,56,22,01,0E
|
||||
hex 72,22,72,22,56,22,01,0E
|
||||
hex 72,22,72,22,56,22,01,0E
|
||||
hex 72,22,72,22,80,22,01,0E
|
||||
hex 72,22,72,22,56,22,01,0E
|
||||
hex 72,22,72,22,56,22,01,0E
|
||||
hex 72,22,72,22,4C,22,56,22
|
||||
hex 5B,22,72,22,5B,22,56,40
|
||||
hex 02 ; end byte
|
||||
FlappySong hex 72,22,72,22,56,22,01,0E
|
||||
hex 72,22,72,22,56,22,01,0E
|
||||
hex 72,22,72,22,56,22,01,0E
|
||||
hex 72,22,72,22,80,22,01,0E
|
||||
hex 72,22,72,22,56,22,01,0E
|
||||
hex 72,22,72,22,56,22,01,0E
|
||||
hex 72,22,72,22,4C,22,56,22
|
||||
hex 5B,22,72,22,5B,22,56,40
|
||||
hex 02 ; end byte
|
||||
|
||||
|
||||
|
||||
|
@ -42,120 +42,121 @@ FlappySong hex 72,22,72,22,56,22,01,0E
|
|||
* wrapper for SEplayNote
|
||||
* a = freq ... x = dur
|
||||
**************************************************
|
||||
SENoteAX jsr _storeReg
|
||||
sta _SECURRNOTE
|
||||
stx _SECURRNOTE+1
|
||||
jsr SEplayNote
|
||||
jsr _loadReg
|
||||
rts
|
||||
SENoteAX jsr _storeReg
|
||||
sta _SECURRNOTE
|
||||
stx _SECURRNOTE+1
|
||||
jsr SEplayNote
|
||||
jsr _loadReg
|
||||
rts
|
||||
|
||||
|
||||
**************************************************
|
||||
*
|
||||
**************************************************
|
||||
ds \
|
||||
ds \
|
||||
|
||||
SEplayNote
|
||||
ldy _SECURRNOTE+1
|
||||
:loop lda SPEAKER
|
||||
:whyWut dey
|
||||
bne :thar
|
||||
dec _SECURRNOTE+1
|
||||
beq :doneThat
|
||||
:thar dex
|
||||
bne :whyWut
|
||||
ldx _SECURRNOTE
|
||||
jmp :loop
|
||||
:doneThat rts
|
||||
ldy _SECURRNOTE+1
|
||||
:loop lda SPEAKER
|
||||
:whyWut dey
|
||||
bne :thar
|
||||
dec _SECURRNOTE+1
|
||||
beq :doneThat
|
||||
:thar dex
|
||||
bne :whyWut
|
||||
ldx _SECURRNOTE
|
||||
jmp :loop
|
||||
:doneThat rts
|
||||
|
||||
SEplayNote_OLD
|
||||
:loop lda SPEAKER
|
||||
:whyWut dey
|
||||
bne :thar
|
||||
dec _SECURRNOTE+1
|
||||
beq :doneThat
|
||||
:thar dex
|
||||
bne :whyWut
|
||||
ldx _SECURRNOTE
|
||||
jmp :loop
|
||||
:doneThat rts
|
||||
:loop lda SPEAKER
|
||||
:whyWut dey
|
||||
bne :thar
|
||||
dec _SECURRNOTE+1
|
||||
beq :doneThat
|
||||
:thar dex
|
||||
bne :whyWut
|
||||
ldx _SECURRNOTE
|
||||
jmp :loop
|
||||
:doneThat rts
|
||||
|
||||
|
||||
_SECURRNOTE db 0,0 ; current note being played (frequency/duration)
|
||||
_SECURRNOTE db 0,0 ; current note being played (frequency/duration)
|
||||
|
||||
|
||||
|
||||
**************************************************
|
||||
* This is essentially the scale
|
||||
**************************************************
|
||||
_SE_tones db NoteG0,NoteGsharp0,NoteA0,NoteBflat0,NoteB0
|
||||
db NoteC1,NoteCsharp1,NoteD1,NoteDsharp1,NoteE1
|
||||
db NoteF1,NoteFsharp1,NoteG1,NoteGsharp1,NoteA1
|
||||
db NoteBflat1,NoteB1,NoteC2,NoteCsharp2,NoteD2
|
||||
db NoteDsharp2,NoteE2,NoteF2
|
||||
_SE_tones db NoteG0,NoteGsharp0,NoteA0,NoteBflat0,NoteB0
|
||||
db NoteC1,NoteCsharp1,NoteD1,NoteDsharp1,NoteE1
|
||||
db NoteF1,NoteFsharp1,NoteG1,NoteGsharp1,NoteA1
|
||||
db NoteBflat1,NoteB1,NoteC2,NoteCsharp2,NoteD2
|
||||
db NoteDsharp2,NoteE2,NoteF2
|
||||
|
||||
NoteRest equ $01 ;\_ these are inaudible anyway
|
||||
NoteEnd equ $02 ;/
|
||||
NoteG0 equ $00 ; because it loops (underflow)
|
||||
NoteGsharp0 equ $f0
|
||||
NoteA0 equ $e6
|
||||
NoteBflat0 equ $d5
|
||||
NoteB0 equ $cb ; speculating here on up
|
||||
NoteC1 equ $c0
|
||||
NoteCsharp1 equ $b5
|
||||
NoteD1 equ $ac
|
||||
NoteDsharp1 equ $a3
|
||||
NoteE1 equ $99
|
||||
NoteF1 equ $90
|
||||
NoteFsharp1 equ $89
|
||||
NoteG1 equ $80
|
||||
NoteGsharp1 equ $79
|
||||
NoteA1 equ $72
|
||||
NoteBflat1 equ $6c
|
||||
NoteB1 equ $66
|
||||
NoteC2 equ $60
|
||||
NoteCsharp2 equ $5b
|
||||
NoteD2 equ $56
|
||||
NoteDsharp2 equ $51
|
||||
NoteE2 equ $4c
|
||||
NoteF2 equ $48
|
||||
; starts to suck here anyway
|
||||
NoteRest equ $01 ;\_ these are inaudible anyway
|
||||
NoteEnd equ $02 ;/
|
||||
NoteG0 equ $00 ; because it loops (underflow)
|
||||
NoteGsharp0 equ $f0
|
||||
NoteA0 equ $e6
|
||||
NoteBflat0 equ $d5
|
||||
NoteB0 equ $cb ; speculating here on up
|
||||
NoteC1 equ $c0
|
||||
NoteCsharp1 equ $b5
|
||||
NoteD1 equ $ac
|
||||
NoteDsharp1 equ $a3
|
||||
NoteE1 equ $99
|
||||
NoteF1 equ $90
|
||||
NoteFsharp1 equ $89
|
||||
NoteG1 equ $80
|
||||
NoteGsharp1 equ $79
|
||||
NoteA1 equ $72
|
||||
NoteBflat1 equ $6c
|
||||
NoteB1 equ $66
|
||||
NoteC2 equ $60
|
||||
NoteCsharp2 equ $5b
|
||||
NoteD2 equ $56
|
||||
NoteDsharp2 equ $51
|
||||
NoteE2 equ $4c
|
||||
NoteF2 equ $48
|
||||
; starts to suck here anyway
|
||||
|
||||
|
||||
SErandStatic
|
||||
ldy #$ff
|
||||
:loop lda SPEAKER
|
||||
jsr GetRand
|
||||
tax
|
||||
beq :next
|
||||
:wait dex
|
||||
bne :wait
|
||||
:next dey
|
||||
bne :loop
|
||||
rts
|
||||
ldy #$ff
|
||||
:loop lda SPEAKER
|
||||
jsr GetRand
|
||||
tax
|
||||
beq :next
|
||||
:wait dex
|
||||
bne :wait
|
||||
:next dey
|
||||
bne :loop
|
||||
rts
|
||||
|
||||
* y = length
|
||||
SErandStaticBit
|
||||
:loop lda SPEAKER
|
||||
jsr GetRand
|
||||
lsr
|
||||
tax
|
||||
beq :next
|
||||
:wait dex
|
||||
bne :wait
|
||||
:next dey
|
||||
bne :loop
|
||||
rts
|
||||
:loop lda SPEAKER
|
||||
jsr GetRand
|
||||
lsr
|
||||
tax
|
||||
beq :next
|
||||
:wait dex
|
||||
bne :wait
|
||||
:next dey
|
||||
bne :loop
|
||||
rts
|
||||
|
||||
* y = length - no shift so wider range
|
||||
SErandStaticBit2
|
||||
:loop lda SPEAKER
|
||||
jsr GetRand
|
||||
tax
|
||||
beq :next
|
||||
:wait dex
|
||||
bne :wait
|
||||
:next dey
|
||||
bne :loop
|
||||
rts
|
||||
:loop lda SPEAKER
|
||||
jsr GetRand
|
||||
tax
|
||||
beq :next
|
||||
:wait dex
|
||||
bne :wait
|
||||
:next dey
|
||||
bne :loop
|
||||
rts
|
||||
|
||||
|
||||
|
|
269
src/sprite.s
269
src/sprite.s
|
@ -1,161 +1,162 @@
|
|||
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
|
||||
|
||||
*** MAKE IT WORK
|
||||
|
||||
BirdTest
|
||||
lda BIRD_X ;#30 (0-79)
|
||||
sta SPRITE_X
|
||||
lda BIRD_Y ;#10 (0-23)
|
||||
sta SPRITE_Y
|
||||
lda #5 ;/2 value (we do two passes of 1/2... Aux/Main)
|
||||
sta SPRITE_W
|
||||
lda #3 ;/2 value (must be byte aligned vertically
|
||||
sta SPRITE_H
|
||||
CopyPtr BIRD_WDN_MAIN;SPRITE_MAIN_P
|
||||
CopyPtr BIRD_WDN_AUX;SPRITE_AUX_P
|
||||
CopyPtr BIRD_WDN_MASK;SPRITE_MASK_P
|
||||
CopyPtr BIRD_WDN_IMASK;SPRITE_IMASK_P
|
||||
jsr DrawSpriteBetter
|
||||
rts
|
||||
lda BIRD_X ;#30 (0-79)
|
||||
sta SPRITE_X
|
||||
lda BIRD_Y ;#10 (0-23)
|
||||
sta SPRITE_Y
|
||||
lda #5 ;/2 value (we do two passes of 1/2... Aux/Main)
|
||||
sta SPRITE_W
|
||||
lda #3 ;/2 value (must be byte aligned vertically
|
||||
sta SPRITE_H
|
||||
CopyPtr BIRD_WDN_MAIN;SPRITE_MAIN_P
|
||||
CopyPtr BIRD_WDN_AUX;SPRITE_AUX_P
|
||||
CopyPtr BIRD_WDN_MASK;SPRITE_MASK_P
|
||||
CopyPtr BIRD_WDN_IMASK;SPRITE_IMASK_P
|
||||
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 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
|
||||
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
|
||||
]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
|
||||
|
||||
:lineLoop
|
||||
;ldy SPRITE_X_IDX ;
|
||||
;lda (SPRITE_IMASK_P),y
|
||||
;beq :noPixel
|
||||
; EVEN COLS
|
||||
DD_EVEN lda #0
|
||||
sta SPRITE_SCREEN_IDX
|
||||
sta TXTPAGE2
|
||||
|
||||
: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 #$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
|
||||
: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
|
||||
|
||||
: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
|
||||
|
||||
:lineLoop ;ldy SPRITE_X_IDX ;
|
||||
;lda (SPRITE_IMASK_P),y
|
||||
;beq :noPixel
|
||||
; 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
|
||||
|
||||
: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
|
||||
: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
|
||||
|
||||
: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
|
||||
|
||||
|
|
65
src/util.s
65
src/util.s
|
@ -1,44 +1,45 @@
|
|||
** 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
Block a user