reformatted all with radius for consistency

This commit is contained in:
Dagen Brock 2020-03-19 04:08:32 -05:00
parent 4c7cc709cd
commit f1fb6a0dee
8 changed files with 2782 additions and 2797 deletions

View File

@ -1,23 +1,24 @@
************************************************** **************************************************
* Apple Standard Memory Locations * Apple Standard Memory Locations
************************************************** **************************************************
CLRLORES equ $F832 CLRLORES equ $F832
LORES equ $C050 LORES equ $C050
TXTSET equ $C051 TXTSET equ $C051
MIXCLR equ $C052 MIXCLR equ $C052
MIXSET equ $C053 MIXSET equ $C053
TXTPAGE1 equ $C054 TXTPAGE1 equ $C054
TXTPAGE2 equ $C055 TXTPAGE2 equ $C055
KEY equ $C000 KEY equ $C000
C80STOREOFF equ $C000 C80STOREOFF equ $C000
C80STOREON equ $C001 C80STOREON equ $C001
STROBE equ $C010 STROBE equ $C010
SPEAKER equ $C030 SPEAKER equ $C030
VBL equ $C02E VBL equ $C02E
RDVBLBAR equ $C019 ;not VBL (VBL signal low 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)

View File

@ -1,470 +1,466 @@
SPRITE_X db 0 SPRITE_X db 0
SPRITE_Y db 0 ; BYTE,not pixel. gotta be, sorry SPRITE_Y db 0 ; BYTE,not pixel. gotta be, sorry
SPRITE_W db 0 SPRITE_W db 0
SPRITE_W_D2 db 0 SPRITE_W_D2 db 0
SPRITE_H db 0 ; <- in bytes SPRITE_H db 0 ; <- in bytes
SPRITE_MAIN da 0 SPRITE_MAIN da 0
SPRITE_AUX da 0 SPRITE_AUX da 0
SPRITE_MASK da 0 SPRITE_MASK da 0
SPRITE_IMASK da 0 SPRITE_IMASK da 0
SPRITE_COLLISION db 0 SPRITE_COLLISION db 0
SPRITE_Y_IDX dw 0 SPRITE_Y_IDX dw 0
SPRITE_X_IDX dw 0 SPRITE_X_IDX dw 0
SPRITE_SCREEN_P equ $00 SPRITE_SCREEN_P equ $00
SPRITE_DATA_P equ $02 SPRITE_DATA_P equ $02
SPRITE_SCREEN_P2 equ $02 SPRITE_SCREEN_P2 equ $02
SPRITE_AUX_P equ $04 SPRITE_AUX_P equ $04
SPRITE_SCREEN_P3 equ $04 SPRITE_SCREEN_P3 equ $04
SPRITE_MASK_P equ $FA SPRITE_MASK_P equ $FA
SPRITE_SCREEN_P4 equ $FA SPRITE_SCREEN_P4 equ $FA
SPRITE_IMASK_P equ $FC 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 db 0 ; in two's compliment {-3,3}
BIRD_VELOCITY_MAX equ #20 BIRD_VELOCITY_MAX equ #20
BIRD_VELOCITY_MIN equ #%111111111 ; -1 BIRD_VELOCITY_MIN equ #%111111111 ; -1
BIRD_WIDTH equ #5 BIRD_WIDTH equ #5
BIRD_X equ #17 BIRD_X equ #17
BIRD_Y_INIT equ #17 BIRD_Y_INIT equ #17
BIRD_Y db #BIRD_Y_INIT ; (0-47) 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_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 db #0 ; 0=down 1=up
BIRD_FLAP_RATE equ #5 BIRD_FLAP_RATE equ #5
BIRD_FLAP_CNT db 0 BIRD_FLAP_CNT db 0
** **
FlapBird FlapBird
inc BIRD_FLAP_CNT inc BIRD_FLAP_CNT
lda BIRD_FLAP_CNT lda BIRD_FLAP_CNT
cmp #BIRD_FLAP_RATE cmp #BIRD_FLAP_RATE
bcs :flapIt bcs :flapIt
rts rts
:flapIt :flapIt
lda #0 lda #0
sta BIRD_FLAP_CNT sta BIRD_FLAP_CNT
inc BIRD_FLAP inc BIRD_FLAP
lda BIRD_FLAP lda BIRD_FLAP
cmp #2 cmp #2
bne :noFlip bne :noFlip
lda #0 lda #0
sta BIRD_FLAP sta BIRD_FLAP
:noFlip rts :noFlip rts
***** EVEN then ODD, i.e. AUX then MAIN ***** EVEN then ODD, i.e. AUX then MAIN
BIRD_WUP_E_PIXEL BIRD_WUP_E_PIXEL
DO MONO DO MONO
hex 00,EA,EA,FF,F0,50,D5,A5,0F,00 hex 00,EA,EA,FF,F0,50,D5,A5,0F,00
hex AA,EA,EE,CF,CF,D5,55,8A,90,90 hex AA,EA,EE,CF,CF,D5,55,8A,90,90
hex 05,AD,A4,08,08,05,5D,51,01,00 hex 05,AD,A4,08,08,05,5D,51,01,00
ELSE ELSE
hex BB,EA,EA,FF,FB,57,D5,A5,0F,77 hex BB,EA,EA,FF,FB,57,D5,A5,0F,77
hex AA,EA,EE,CF,CF,D5,55,8A,90,97 hex AA,EA,EE,CF,CF,D5,55,8A,90,97
hex B5,AD,A4,B8,B8,75,5D,51,71,77 hex B5,AD,A4,B8,B8,75,5D,51,71,77
FIN FIN
BIRD_WUP_E_MASK BIRD_WUP_E_MASK
hex FF,00,00,00,0F,0F,00,00,00,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,00,00,00,00,00,00,0F
hex F0,00,00,F0,F0,F0,00,00,F0,FF hex F0,00,00,F0,F0,F0,00,00,F0,FF
BIRD_WUP_E_IMASK BIRD_WUP_E_IMASK
hex 00,FF,FF,FF,F0,F0,FF,FF,FF,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,FF,FF,FF,FF,FF,FF,F0
hex 0F,FF,FF,0F,0F,0F,FF,FF,0F,00 hex 0F,FF,FF,0F,0F,0F,FF,FF,0F,00
***** EVEN then ODD, i.e. AUX then MAIN ***** EVEN then ODD, i.e. AUX then MAIN
BIRD_WDN_E_PIXEL BIRD_WDN_E_PIXEL
DO MONO DO MONO
hex 00,EA,EA,FF,F0,50,D5,A5,0F,00 hex 00,EA,EA,FF,F0,50,D5,A5,0F,00
hex AA,EE,EE,CF,CF,DD,5D,8A,90,90 hex AA,EE,EE,CF,CF,DD,5D,8A,90,90
hex 54,AE,A4,08,08,5D,55,51,01,00 hex 54,AE,A4,08,08,5D,55,51,01,00
ELSE ELSE
hex BB,EA,EA,FF,FB,57,D5,A5,0F,77 hex BB,EA,EA,FF,FB,57,D5,A5,0F,77
hex AA,EE,EE,CF,CF,DD,5D,8A,90,97 hex AA,EE,EE,CF,CF,DD,5D,8A,90,97
hex 54,AE,A4,B8,B8,5D,55,51,71,77 hex 54,AE,A4,B8,B8,5D,55,51,71,77
FIN FIN
BIRD_WDN_E_MASK BIRD_WDN_E_MASK
hex FF,00,00,00,0F,0F,00,00,00,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,00,00,00,00,00,00,0F
hex 00,00,00,F0,F0,00,00,00,F0,FF hex 00,00,00,F0,F0,00,00,00,F0,FF
BIRD_WDN_E_IMASK BIRD_WDN_E_IMASK
hex 00,FF,FF,FF,F0,F0,FF,FF,FF,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,FF,FF,FF,FF,FF,FF,F0
hex FF,FF,FF,0F,0F,FF,FF,FF,0F,00 hex FF,FF,FF,0F,0F,FF,FF,FF,0F,00
***** EVEN then ODD, i.e. AUX then MAIN ***** EVEN then ODD, i.e. AUX then MAIN
BIRD_WUP_O_PIXEL BIRD_WUP_O_PIXEL
DO MONO DO MONO
hex 00,A0,A0,F0,00,00,50,50,F0,00 hex 00,A0,A0,F0,00,00,50,50,F0,00
hex A0,AE,EE,FF,FF,55,5D,AA,00,00 hex A0,AE,EE,FF,FF,55,5D,AA,00,00
hex 5A,DE,4E,8C,8C,5D,D5,18,19,09 hex 5A,DE,4E,8C,8C,5D,D5,18,19,09
hex 00,0A,0A,00,00,00,05,05,00,00 hex 00,0A,0A,00,00,00,05,05,00,00
ELSE ELSE
hex BB,AB,AB,FB,BB,77,57,57,F7,77 hex BB,AB,AB,FB,BB,77,57,57,F7,77
hex AB,AE,EE,FF,FF,55,5D,AA,00,77 hex AB,AE,EE,FF,FF,55,5D,AA,00,77
hex 5A,DE,4E,8C,8C,5D,D5,18,19,79 hex 5A,DE,4E,8C,8C,5D,D5,18,19,79
hex BB,BA,BA,BB,BB,77,75,75,77,77 hex BB,BA,BA,BB,BB,77,75,75,77,77
FIN
FIN
BIRD_WUP_O_MASK BIRD_WUP_O_MASK
hex FF,0F,0F,0F,FF,FF,0F,0F,0F,FF hex FF,0F,0F,0F,FF,FF,0F,0F,0F,FF
hex 0F,00,00,00,00,00,00,00,00,FF hex 0F,00,00,00,00,00,00,00,00,FF
hex 00,00,00,00,00,00,00,00,00,F0 hex 00,00,00,00,00,00,00,00,00,F0
hex FF,F0,F0,FF,FF,FF,F0,F0,FF,FF hex FF,F0,F0,FF,FF,FF,F0,F0,FF,FF
BIRD_WUP_O_IMASK BIRD_WUP_O_IMASK
hex 00,F0,F0,F0,00,00,F0,F0,F0,00 hex 00,F0,F0,F0,00,00,F0,F0,F0,00
hex F0,FF,FF,FF,FF,FF,FF,FF,FF,00 hex F0,FF,FF,FF,FF,FF,FF,FF,FF,00
hex FF,FF,FF,FF,FF,FF,FF,FF,FF,0F hex FF,FF,FF,FF,FF,FF,FF,FF,FF,0F
hex 00,0F,0F,00,00,00,0F,0F,00,00 hex 00,0F,0F,00,00,00,0F,0F,00,00
***** EVEN then ODD, i.e. AUX then MAIN ***** EVEN then ODD, i.e. AUX then MAIN
BIRD_WDN_O_PIXEL BIRD_WDN_O_PIXEL
DO MONO DO MONO
hex 00,A0,A0,F0,00,00,50,50,F0,00 hex 00,A0,A0,F0,00,00,50,50,F0,00
hex A0,EE,EE,FF,FF,D5,DD,AA,00,00 hex A0,EE,EE,FF,FF,D5,DD,AA,00,00
hex 4A,EE,4E,8C,8C,DD,55,18,19,09 hex 4A,EE,4E,8C,8C,DD,55,18,19,09
hex 05,0A,0A,00,00,05,05,05,00,00 hex 05,0A,0A,00,00,05,05,05,00,00
ELSE ELSE
hex BB,AB,AB,FB,BB,77,57,57,F7,77 hex BB,AB,AB,FB,BB,77,57,57,F7,77
hex AB,EE,EE,FF,FF,D5,DD,AA,00,77 hex AB,EE,EE,FF,FF,D5,DD,AA,00,77
hex 4A,EE,4E,8C,8C,DD,55,18,19,79 hex 4A,EE,4E,8C,8C,DD,55,18,19,79
hex B5,BA,BA,BB,BB,75,75,75,77,77 hex B5,BA,BA,BB,BB,75,75,75,77,77
FIN FIN
BIRD_WDN_O_MASK BIRD_WDN_O_MASK
hex FF,0F,0F,0F,FF,FF,0F,0F,0F,FF hex FF,0F,0F,0F,FF,FF,0F,0F,0F,FF
hex 0F,00,00,00,00,00,00,00,00,FF hex 0F,00,00,00,00,00,00,00,00,FF
hex 00,00,00,00,00,00,00,00,00,F0 hex 00,00,00,00,00,00,00,00,00,F0
hex F0,F0,F0,FF,FF,F0,F0,F0,FF,FF hex F0,F0,F0,FF,FF,F0,F0,F0,FF,FF
BIRD_WDN_O_IMASK BIRD_WDN_O_IMASK
hex 00,F0,F0,F0,00,00,F0,F0,F0,00 hex 00,F0,F0,F0,00,00,F0,F0,F0,00
hex F0,FF,FF,FF,FF,FF,FF,FF,FF,00 hex F0,FF,FF,FF,FF,FF,FF,FF,FF,00
hex FF,FF,FF,FF,FF,FF,FF,FF,FF,0F hex FF,FF,FF,FF,FF,FF,FF,FF,FF,0F
hex 0F,0F,0F,00,00,0F,0F,0F,00,00 hex 0F,0F,0F,00,00,0F,0F,0F,00,00
** y=line a=height x=col ** y=line a=height x=col
UndrawBird lda BIRD_Y_OLD UndrawBird lda BIRD_Y_OLD
lsr lsr
tay tay
bne :oddBird bne :oddBird
:evenBird lda #3 :evenBird lda #3
bne :continue bne :continue
:oddBird lda #4 :oddBird lda #4
:continue ldx #BIRD_X :continue ldx #BIRD_X
cmp #4 cmp #4
beq :undraw4 beq :undraw4
:undraw3 lda LoLineTableL,y :undraw3 lda LoLineTableL,y
sta SPRITE_SCREEN_P sta SPRITE_SCREEN_P
lda LoLineTableH,y lda LoLineTableH,y
sta SPRITE_SCREEN_P+1 sta SPRITE_SCREEN_P+1
lda LoLineTableL+1,y lda LoLineTableL+1,y
sta SPRITE_SCREEN_P2 sta SPRITE_SCREEN_P2
lda LoLineTableH+1,y lda LoLineTableH+1,y
sta SPRITE_SCREEN_P2+1 sta SPRITE_SCREEN_P2+1
lda LoLineTableL+2,y lda LoLineTableL+2,y
sta SPRITE_SCREEN_P3 sta SPRITE_SCREEN_P3
lda LoLineTableH+2,y lda LoLineTableH+2,y
sta SPRITE_SCREEN_P3+1 sta SPRITE_SCREEN_P3+1
txa txa
pha ; stash pha ; stash
tay ; COL offset tay ; COL offset
sta TXTPAGE2 sta TXTPAGE2
lda #BGCOLORAUX lda #BGCOLORAUX
:wipe1 sta (SPRITE_SCREEN_P),y :wipe1 sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
iny iny
:wipe1b sta (SPRITE_SCREEN_P),y :wipe1b sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
iny iny
:wipe1c sta (SPRITE_SCREEN_P),y :wipe1c sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
iny iny
:wipe1d sta (SPRITE_SCREEN_P),y :wipe1d sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
iny iny
:wipe1e sta (SPRITE_SCREEN_P),y :wipe1e sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
pla ; unstash pla ; unstash
tay tay
sta TXTPAGE1 sta TXTPAGE1
lda #BGCOLOR lda #BGCOLOR
:wipe2 sta (SPRITE_SCREEN_P),y :wipe2 sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
iny iny
:wipe2b sta (SPRITE_SCREEN_P),y :wipe2b sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
iny iny
:wipe2c sta (SPRITE_SCREEN_P),y :wipe2c sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
iny iny
:wipe2d sta (SPRITE_SCREEN_P),y :wipe2d sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
iny iny
:wipe2e sta (SPRITE_SCREEN_P),y :wipe2e sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
rts rts
:undraw4 lda LoLineTableL,y :undraw4 lda LoLineTableL,y
sta SPRITE_SCREEN_P sta SPRITE_SCREEN_P
lda LoLineTableH,y lda LoLineTableH,y
sta SPRITE_SCREEN_P+1 sta SPRITE_SCREEN_P+1
lda LoLineTableL+1,y lda LoLineTableL+1,y
sta SPRITE_SCREEN_P2 sta SPRITE_SCREEN_P2
lda LoLineTableH+1,y lda LoLineTableH+1,y
sta SPRITE_SCREEN_P2+1 sta SPRITE_SCREEN_P2+1
lda LoLineTableL+2,y lda LoLineTableL+2,y
sta SPRITE_SCREEN_P3 sta SPRITE_SCREEN_P3
lda LoLineTableH+2,y lda LoLineTableH+2,y
sta SPRITE_SCREEN_P3+1 sta SPRITE_SCREEN_P3+1
lda LoLineTableL+3,y lda LoLineTableL+3,y
sta SPRITE_SCREEN_P4 sta SPRITE_SCREEN_P4
lda LoLineTableH+3,y lda LoLineTableH+3,y
sta SPRITE_SCREEN_P4+1 sta SPRITE_SCREEN_P4+1
txa txa
pha ; stash pha ; stash
tay ; COL offset tay ; COL offset
sta TXTPAGE2 sta TXTPAGE2
lda #BGCOLORAUX lda #BGCOLORAUX
:wipe3 sta (SPRITE_SCREEN_P),y :wipe3 sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
sta (SPRITE_SCREEN_P4),y sta (SPRITE_SCREEN_P4),y
iny iny
:wipe3b sta (SPRITE_SCREEN_P),y :wipe3b sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
sta (SPRITE_SCREEN_P4),y sta (SPRITE_SCREEN_P4),y
iny iny
:wipe3c sta (SPRITE_SCREEN_P),y :wipe3c sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
sta (SPRITE_SCREEN_P4),y sta (SPRITE_SCREEN_P4),y
iny iny
:wipe3d sta (SPRITE_SCREEN_P),y :wipe3d sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
sta (SPRITE_SCREEN_P4),y sta (SPRITE_SCREEN_P4),y
iny iny
:wipe3e sta (SPRITE_SCREEN_P),y :wipe3e sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
sta (SPRITE_SCREEN_P4),y sta (SPRITE_SCREEN_P4),y
pla ; unstash pla ; unstash
tay tay
sta TXTPAGE1 sta TXTPAGE1
lda #BGCOLOR lda #BGCOLOR
:wipe4 sta (SPRITE_SCREEN_P),y :wipe4 sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
sta (SPRITE_SCREEN_P4),y sta (SPRITE_SCREEN_P4),y
iny iny
:wipe4b sta (SPRITE_SCREEN_P),y :wipe4b sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
sta (SPRITE_SCREEN_P4),y sta (SPRITE_SCREEN_P4),y
iny iny
:wipe4c sta (SPRITE_SCREEN_P),y :wipe4c sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
sta (SPRITE_SCREEN_P4),y sta (SPRITE_SCREEN_P4),y
iny iny
:wipe4d sta (SPRITE_SCREEN_P),y :wipe4d sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
sta (SPRITE_SCREEN_P4),y sta (SPRITE_SCREEN_P4),y
iny iny
:wipe4e sta (SPRITE_SCREEN_P),y :wipe4e sta (SPRITE_SCREEN_P),y
sta (SPRITE_SCREEN_P2),y sta (SPRITE_SCREEN_P2),y
sta (SPRITE_SCREEN_P3),y sta (SPRITE_SCREEN_P3),y
sta (SPRITE_SCREEN_P4),y sta (SPRITE_SCREEN_P4),y
rts rts
DrawBird DrawBird
lda BIRD_Y lda BIRD_Y
lsr lsr
bcs :oddHeight bcs :oddHeight
:evenHeight :evenHeight
sta SPRITE_Y sta SPRITE_Y
lda #3 lda #3
sta SPRITE_H sta SPRITE_H
lda BIRD_FLAP lda BIRD_FLAP
beq :flapDownEven beq :flapDownEven
:flapUpEven CopyPtr BIRD_WUP_E_PIXEL;SPRITE_DATA_P :flapUpEven CopyPtr BIRD_WUP_E_PIXEL;SPRITE_DATA_P
CopyPtr BIRD_WUP_E_MASK;SPRITE_MASK_P CopyPtr BIRD_WUP_E_MASK;SPRITE_MASK_P
CopyPtr BIRD_WUP_E_IMASK;SPRITE_IMASK_P CopyPtr BIRD_WUP_E_IMASK;SPRITE_IMASK_P
jmp :drawSprite jmp :drawSprite
:flapDownEven CopyPtr BIRD_WDN_E_PIXEL;SPRITE_DATA_P :flapDownEven CopyPtr BIRD_WDN_E_PIXEL;SPRITE_DATA_P
CopyPtr BIRD_WDN_E_MASK;SPRITE_MASK_P CopyPtr BIRD_WDN_E_MASK;SPRITE_MASK_P
CopyPtr BIRD_WDN_E_IMASK;SPRITE_IMASK_P CopyPtr BIRD_WDN_E_IMASK;SPRITE_IMASK_P
jmp :drawSprite jmp :drawSprite
:oddHeight :oddHeight
sta SPRITE_Y sta SPRITE_Y
lda #4 lda #4
sta SPRITE_H sta SPRITE_H
lda BIRD_FLAP lda BIRD_FLAP
beq :flapDownOdd beq :flapDownOdd
:flapUpOdd CopyPtr BIRD_WUP_O_PIXEL;SPRITE_DATA_P :flapUpOdd CopyPtr BIRD_WUP_O_PIXEL;SPRITE_DATA_P
CopyPtr BIRD_WUP_O_MASK;SPRITE_MASK_P CopyPtr BIRD_WUP_O_MASK;SPRITE_MASK_P
CopyPtr BIRD_WUP_O_IMASK;SPRITE_IMASK_P CopyPtr BIRD_WUP_O_IMASK;SPRITE_IMASK_P
jmp :drawSprite jmp :drawSprite
:flapDownOdd CopyPtr BIRD_WDN_O_PIXEL;SPRITE_DATA_P :flapDownOdd CopyPtr BIRD_WDN_O_PIXEL;SPRITE_DATA_P
CopyPtr BIRD_WDN_O_MASK;SPRITE_MASK_P CopyPtr BIRD_WDN_O_MASK;SPRITE_MASK_P
CopyPtr BIRD_WDN_O_IMASK;SPRITE_IMASK_P CopyPtr BIRD_WDN_O_IMASK;SPRITE_IMASK_P
jmp :drawSprite jmp :drawSprite
:drawSprite :drawSprite
jsr DrawSpriteBetter jsr DrawSpriteBetter
rts rts
* still does collision * still does collision
DrawSpriteBetter DrawSpriteBetter
lda #0 lda #0
sta SPRITE_X_IDX sta SPRITE_X_IDX
:drawLine lda SPRITE_Y ; :drawLine lda SPRITE_Y ;
tay tay
lda LoLineTableL,y ; SET SCREEN LINE lda LoLineTableL,y ; SET SCREEN LINE
sta SPRITE_SCREEN_P sta SPRITE_SCREEN_P
lda LoLineTableH,y lda LoLineTableH,y
sta SPRITE_SCREEN_P+1 sta SPRITE_SCREEN_P+1
lda #BIRD_X ;SPRITE_X ; ADD IN X OFFSET TO SCREEN POSITION lda #BIRD_X ;SPRITE_X ; ADD IN X OFFSET TO SCREEN POSITION
clc ; I think the highest position is $f8 clc ; I think the highest position is $f8
adc SPRITE_SCREEN_P ; eg- Line 18, col 40= $4f8 adc SPRITE_SCREEN_P ; eg- Line 18, col 40= $4f8
sta SPRITE_SCREEN_P ; SHOULD NEVER CARRY? sta SPRITE_SCREEN_P ; SHOULD NEVER CARRY?
jmp DrawSpriteLineC jmp DrawSpriteLineC
]DSLCD_done ]DSLCD_done
inc SPRITE_Y inc SPRITE_Y
dec SPRITE_H dec SPRITE_H
lda SPRITE_H lda SPRITE_H
bne :drawLine bne :drawLine
rts rts
DrawSpriteLineC DrawSpriteLineC
; EVEN COLS ; EVEN COLS
DD_EVEN lda #0 DD_EVEN lda #0
sta SPRITE_SCREEN_IDX sta SPRITE_SCREEN_IDX
sta TXTPAGE2 sta TXTPAGE2
:lineLoop :lineLoop
:collisionCheckDrawer :collisionCheckDrawer
ldy SPRITE_SCREEN_IDX ; GET SCREEN PIXELS ldy SPRITE_SCREEN_IDX ; GET SCREEN PIXELS
lda (SPRITE_SCREEN_P),y lda (SPRITE_SCREEN_P),y
ldy SPRITE_X_IDX ; PREP Y INDEX ldy SPRITE_X_IDX ; PREP Y INDEX
cmp #BGCOLORAUX ; AUX BGCOLOR @TODO cmp #BGCOLORAUX ; AUX BGCOLOR @TODO
beq :noCollisionSIMPLE beq :noCollisionSIMPLE
pha ; SAVE -> STACK pha ; SAVE -> STACK
and (SPRITE_IMASK_P),y and (SPRITE_IMASK_P),y
cmp #BGCOLORAUX_0LO cmp #BGCOLORAUX_0LO
beq :noCollision beq :noCollision
cmp #BGCOLORAUX_0HI cmp #BGCOLORAUX_0HI
beq :noCollision beq :noCollision
lda #1 lda #1
sta SPRITE_COLLISION sta SPRITE_COLLISION
:noCollision :noCollision
:doPixels pla ; Y=SPRITE X A=BG DATA :doPixels pla ; Y=SPRITE X A=BG DATA
and (SPRITE_MASK_P),y ; CUT OUT SPRITE IN BG DATA and (SPRITE_MASK_P),y ; CUT OUT SPRITE IN BG DATA
ora (SPRITE_DATA_P),y ; OVERLAY OUR SPRITE DATA ora (SPRITE_DATA_P),y ; OVERLAY OUR SPRITE DATA
ldy SPRITE_SCREEN_IDX ldy SPRITE_SCREEN_IDX
sta (SPRITE_SCREEN_P),y sta (SPRITE_SCREEN_P),y
sec sec
bcs :donePixel bcs :donePixel
:noCollisionSIMPLE :noCollisionSIMPLE
lda (SPRITE_DATA_P),y lda (SPRITE_DATA_P),y
ldy SPRITE_SCREEN_IDX ldy SPRITE_SCREEN_IDX
sta (SPRITE_SCREEN_P),y sta (SPRITE_SCREEN_P),y
:donePixel inc SPRITE_X_IDX :donePixel inc SPRITE_X_IDX
inc SPRITE_SCREEN_IDX inc SPRITE_SCREEN_IDX
ldy SPRITE_SCREEN_IDX ldy SPRITE_SCREEN_IDX
cpy SPRITE_W cpy SPRITE_W
bcc :lineLoop bcc :lineLoop
DD_ODD DD_ODD
; ODD COLS ; ODD COLS
lda #0 lda #0
sta SPRITE_SCREEN_IDX sta SPRITE_SCREEN_IDX
sta TXTPAGE1 sta TXTPAGE1
:lineLoop ;ldy SPRITE_X_IDX ;
;lda (SPRITE_IMASK_P),y
;beq :noPixel
:lineLoop
:collisionCheckDrawer :collisionCheckDrawer
ldy SPRITE_SCREEN_IDX ; GET SCREEN PIXELS ldy SPRITE_SCREEN_IDX ; GET SCREEN PIXELS
lda (SPRITE_SCREEN_P),y lda (SPRITE_SCREEN_P),y
ldy SPRITE_X_IDX ; PREP Y INDEX ldy SPRITE_X_IDX ; PREP Y INDEX
cmp #BGCOLOR ; MAIN BGCOLOR @TODO cmp #BGCOLOR ; MAIN BGCOLOR @TODO
beq :noCollisionSIMPLE beq :noCollisionSIMPLE
pha ; SAVE -> STACK pha ; SAVE -> STACK
and (SPRITE_IMASK_P),y and (SPRITE_IMASK_P),y
cmp #BGCOLOR_0LO cmp #BGCOLOR_0LO
beq :noCollision beq :noCollision
cmp #BGCOLOR_0HI cmp #BGCOLOR_0HI
beq :noCollision beq :noCollision
lda #1 lda #1
sta SPRITE_COLLISION sta SPRITE_COLLISION
:noCollision :noCollision
:doPixels pla ; Y=SPRITE X A=BG DATA :doPixels pla ; Y=SPRITE X A=BG DATA
and (SPRITE_MASK_P),y ; CUT OUT SPRITE IN BG DATA and (SPRITE_MASK_P),y ; CUT OUT SPRITE IN BG DATA
ora (SPRITE_DATA_P),y ; OVERLAY OUR SPRITE DATA ora (SPRITE_DATA_P),y ; OVERLAY OUR SPRITE DATA
ldy SPRITE_SCREEN_IDX ldy SPRITE_SCREEN_IDX
sta (SPRITE_SCREEN_P),y sta (SPRITE_SCREEN_P),y
sec sec
bcs :donePixel bcs :donePixel
:noCollisionSIMPLE :noCollisionSIMPLE
lda (SPRITE_DATA_P),y lda (SPRITE_DATA_P),y
ldy SPRITE_SCREEN_IDX ldy SPRITE_SCREEN_IDX
sta (SPRITE_SCREEN_P),y sta (SPRITE_SCREEN_P),y
:donePixel inc SPRITE_X_IDX :donePixel inc SPRITE_X_IDX
inc SPRITE_SCREEN_IDX inc SPRITE_SCREEN_IDX
ldy SPRITE_SCREEN_IDX ldy SPRITE_SCREEN_IDX
cpy SPRITE_W cpy SPRITE_W
bcc :lineLoop bcc :lineLoop
jmp ]DSLCD_done jmp ]DSLCD_done

File diff suppressed because it is too large Load Diff

View File

@ -2,192 +2,192 @@
* Well... optimized number drawing because, why not * Well... optimized number drawing because, why not
**** ****
BB equ #$00 BB equ #$00
BW equ #$F0 BW equ #$F0
WB equ #$0F WB equ #$0F
WW equ #$FF WW equ #$FF
DrawNum_Table da DrawNum_0 DrawNum_Table da DrawNum_0
da DrawNum_1 da DrawNum_1
da DrawNum_2 da DrawNum_2
da DrawNum_3 da DrawNum_3
da DrawNum_4 da DrawNum_4
da DrawNum_5 da DrawNum_5
da DrawNum_6 da DrawNum_6
da DrawNum_7 da DrawNum_7
da DrawNum_8 da DrawNum_8
da DrawNum_9 da DrawNum_9
* y = x, a=val (0-9) * y = x, a=val (0-9)
DrawNum DrawNum
asl asl
tax tax
lda DrawNum_Table,x lda DrawNum_Table,x
sta :jsrPtr+1 sta :jsrPtr+1
lda DrawNum_Table+1,x lda DrawNum_Table+1,x
sta :jsrPtr+2 sta :jsrPtr+2
tya tya
tax tax
:jsrPtr jsr DrawNum_0 :jsrPtr jsr DrawNum_0
rts rts
* x = x offset (even cols) 0-40 * x = x offset (even cols) 0-40
DrawNum_0 sta TXTPAGE2 DrawNum_0 sta TXTPAGE2
lda #BB lda #BB
sta Lo01,x sta Lo01,x
sta Lo02,x sta Lo02,x
sta Lo01+1,x sta Lo01+1,x
sta Lo02+1,X sta Lo02+1,X
sta TXTPAGE1 sta TXTPAGE1
lda #BW lda #BW
sta Lo01,x sta Lo01,x
lda #WB lda #WB
sta Lo02,x sta Lo02,x
lda #WW lda #WW
sta Lo01+1,x sta Lo01+1,x
sta Lo02+1,x sta Lo02+1,x
rts rts
DrawNum_1 sta TXTPAGE2 DrawNum_1 sta TXTPAGE2
lda #BW lda #BW
sta Lo01,x sta Lo01,x
lda #WB lda #WB
sta Lo02,x sta Lo02,x
sta Lo02+1,x sta Lo02+1,x
lda #WW lda #WW
sta Lo01+1,x sta Lo01+1,x
sta TXTPAGE1 sta TXTPAGE1
sta Lo01+1,x sta Lo01+1,x
sta Lo02+1,x sta Lo02+1,x
lda #BB lda #BB
sta Lo01,x sta Lo01,x
sta Lo02,x sta Lo02,x
rts rts
DrawNum_2 sta TXTPAGE2 DrawNum_2 sta TXTPAGE2
lda #BW lda #BW
sta Lo01,x sta Lo01,x
lda #WB lda #WB
sta Lo02+1,x sta Lo02+1,x
lda #BB lda #BB
sta Lo02,x sta Lo02,x
sta Lo01+1,x sta Lo01+1,x
sta TXTPAGE1 sta TXTPAGE1
sta Lo01,x sta Lo01,x
sta Lo02,x sta Lo02,x
lda #WW lda #WW
sta Lo01+1,x sta Lo01+1,x
sta Lo02+1,x sta Lo02+1,x
rts rts
DrawNum_3 sta TXTPAGE2 DrawNum_3 sta TXTPAGE2
lda #BW lda #BW
sta Lo01,x sta Lo01,x
lda #WB lda #WB
sta Lo02,x sta Lo02,x
lda #BB lda #BB
sta Lo01+1,x sta Lo01+1,x
sta Lo02+1,x sta Lo02+1,x
sta TXTPAGE1 sta TXTPAGE1
sta Lo01,x sta Lo01,x
lda #WB lda #WB
sta Lo02,x sta Lo02,x
lda #WW lda #WW
sta Lo01+1,x sta Lo01+1,x
sta Lo02+1,x sta Lo02+1,x
rts rts
DrawNum_4 sta TXTPAGE2 DrawNum_4 sta TXTPAGE2
lda #BB lda #BB
sta Lo01,x sta Lo01,x
sta Lo01+1,x sta Lo01+1,x
sta Lo02+1,x sta Lo02+1,x
lda #BW lda #BW
sta Lo02,x sta Lo02,x
sta TXTPAGE1 sta TXTPAGE1
sta Lo02,x sta Lo02,x
lda #WW lda #WW
sta Lo01,x sta Lo01,x
sta Lo01+1,x sta Lo01+1,x
sta Lo02+1,x sta Lo02+1,x
rts rts
DrawNum_5 sta TXTPAGE2 DrawNum_5 sta TXTPAGE2
lda #BW lda #BW
sta Lo01+1,x sta Lo01+1,x
lda #WB lda #WB
sta Lo02,x sta Lo02,x
lda #BB lda #BB
sta Lo01,x sta Lo01,x
sta Lo02+1,x sta Lo02+1,x
sta TXTPAGE1 sta TXTPAGE1
sta Lo01,x sta Lo01,x
sta Lo02,x sta Lo02,x
lda #WW lda #WW
sta Lo01+1,x sta Lo01+1,x
sta Lo02+1,x sta Lo02+1,x
rts rts
DrawNum_6 sta TXTPAGE2 DrawNum_6 sta TXTPAGE2
lda #BB lda #BB
sta Lo01,x sta Lo01,x
sta Lo02,x sta Lo02,x
sta Lo02+1,x sta Lo02+1,x
lda #WB lda #WB
sta Lo01+1,x sta Lo01+1,x
sta TXTPAGE1 sta TXTPAGE1
sta Lo01,x sta Lo01,x
sta Lo02,x sta Lo02,x
lda #WW lda #WW
sta Lo01+1,x sta Lo01+1,x
sta Lo02+1,x sta Lo02+1,x
rts rts
DrawNum_7 sta TXTPAGE2 DrawNum_7 sta TXTPAGE2
lda #BW lda #BW
sta Lo01,x sta Lo01,x
lda #WW lda #WW
sta Lo02,x sta Lo02,x
sta Lo02+1,x sta Lo02+1,x
lda #BB lda #BB
sta Lo01+1,x sta Lo01+1,x
sta TXTPAGE1 sta TXTPAGE1
sta Lo02,x sta Lo02,x
lda #BW lda #BW
sta Lo01,x sta Lo01,x
lda #WW lda #WW
sta Lo01+1,x sta Lo01+1,x
sta Lo02+1,x sta Lo02+1,x
rts rts
DrawNum_8 sta TXTPAGE2 DrawNum_8 sta TXTPAGE2
lda #WB lda #WB
sta Lo01,x sta Lo01,x
lda #BB lda #BB
sta Lo02,X sta Lo02,X
sta Lo01+1,x sta Lo01+1,x
sta Lo02+1,x sta Lo02+1,x
sta TXTPAGE1 sta TXTPAGE1
sta Lo02,x sta Lo02,x
lda #BW lda #BW
sta Lo01,x sta Lo01,x
lda #WW lda #WW
sta Lo01+1,x sta Lo01+1,x
sta Lo02+1,x sta Lo02+1,x
rts rts
DrawNum_9 sta TXTPAGE2 DrawNum_9 sta TXTPAGE2
lda #BB lda #BB
sta Lo01,x sta Lo01,x
sta Lo01+1,x sta Lo01+1,x
sta Lo02+1,x sta Lo02+1,x
lda #BW lda #BW
sta Lo02,x sta Lo02,x
sta TXTPAGE1 sta TXTPAGE1
sta Lo01,x sta Lo01,x
sta Lo02,x sta Lo02,x
lda #WW lda #WW
sta Lo01+1,x sta Lo01+1,x
sta Lo02+1,x sta Lo02+1,x
rts rts

File diff suppressed because it is too large Load Diff

View File

@ -3,25 +3,27 @@
* *
* Flapple Bird - A de-make of Flappy Bird for the Apple II computer * Flapple Bird - A de-make of Flappy Bird for the Apple II computer
* *
* More information about this project is available at * # Download releases here:
* http://dagenbrock.com/flappy * https://github.com/digarok/flapple/releases
* *
* How to run * # How to run
* ========== * You can download either disk image and run it with an emulator like GSplus
* You can download either disk image and run it with an emulator * or transfer to the respective media and run on a real machine (recommended).
* or transfer it to the respective media and run it on a real * - `flapple800.po` is the 3.5" ProDOS disk version (800KB)
* machine (recommended). * - `flapple140.po` is the 5.25" ProDOS disk version (140KB)
* The 3.5" ProDOS disk version is "flapple800.po", and the
* 5.25" ProDOS disk version is "flapple140.po".
* *
* How to build * 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.
* This is written to compile on Merlin 8/16, but I believe should * To run it, quit game with the `q` key, and from the ProDOS selector menu
* work with all later Merlin variants. Load Merlin, then 'L'oad * run `fmono.system`.
* the file "flapple.s", finally hit OpenApple-A to assemble and
* it should build the "flap.system" file.
* *
* # 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/).
* *
* * - Classic Merlin16+ on an Apple IIgs
* Again, more information about this project is available at * - Load Merlin, then `L`oad the file "flapple.s", finally hit OpenApple-A to assemble and it should build the "flap.system" file.
* http://dagenbrock.com/flappy * - 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.

View File

@ -1,144 +1,144 @@
SPRITE_X db 0 SPRITE_X db 0
SPRITE_Y db 0 ; BYTE,not pixel. gotta be, sorry SPRITE_Y db 0 ; BYTE,not pixel. gotta be, sorry
SPRITE_W db 0 SPRITE_W db 0
SPRITE_W_D2 db 0 SPRITE_W_D2 db 0
SPRITE_H db 0 ; <- in bytes SPRITE_H db 0 ; <- in bytes
SPRITE_MAIN da 0 SPRITE_MAIN da 0
SPRITE_AUX da 0 SPRITE_AUX da 0
SPRITE_MASK da 0 SPRITE_MASK da 0
SPRITE_IMASK da 0 SPRITE_IMASK da 0
SPRITE_COLLISION db 0 SPRITE_COLLISION db 0
SPRITE_Y_IDX dw 0 SPRITE_Y_IDX dw 0
SPRITE_X_IDX dw 0 SPRITE_X_IDX dw 0
SPRITE_SCREEN_P equz $00 SPRITE_SCREEN_P equz $00
SPRITE_MAIN_P equz $02 SPRITE_MAIN_P equz $02
SPRITE_SCREEN_P2 equz $02 SPRITE_SCREEN_P2 equz $02
SPRITE_AUX_P equz $04 SPRITE_AUX_P equz $04
SPRITE_SCREEN_P3 equz $04 SPRITE_SCREEN_P3 equz $04
SPRITE_MASK_P equz $FA SPRITE_MASK_P equz $FA
SPRITE_SCREEN_P4 equz $FA SPRITE_SCREEN_P4 equz $FA
SPRITE_IMASK_P equz $FC SPRITE_IMASK_P equz $FC
SPRITE_SCREEN_IDX db #$0 SPRITE_SCREEN_IDX db #$0
AUX_BG_COLOR db #$BB AUX_BG_COLOR db #$BB
MAIN_BG_COLOR db #$77 MAIN_BG_COLOR db #$77
* still does collision * still does collision
DrawSpriteBetter DrawSpriteBetter
lda #0 lda #0
sta SPRITE_X_IDX sta SPRITE_X_IDX
:drawLine lda SPRITE_Y ; :drawLine lda SPRITE_Y ;
tay tay
lda LoLineTableL,y ; SET SCREEN LINE lda LoLineTableL,y ; SET SCREEN LINE
sta SPRITE_SCREEN_P sta SPRITE_SCREEN_P
lda LoLineTableH,y lda LoLineTableH,y
sta SPRITE_SCREEN_P+1 sta SPRITE_SCREEN_P+1
lda SPRITE_X ; ADD IN X OFFSET TO SCREEN POSITION lda SPRITE_X ; ADD IN X OFFSET TO SCREEN POSITION
clc ; I think the highest position is $f8 clc ; I think the highest position is $f8
adc SPRITE_SCREEN_P ; eg- Line 18, col 40= $4f8 adc SPRITE_SCREEN_P ; eg- Line 18, col 40= $4f8
sta SPRITE_SCREEN_P ; SHOULD NEVER CARRY? sta SPRITE_SCREEN_P ; SHOULD NEVER CARRY?
jmp DrawSpriteLineC jmp DrawSpriteLineC
]DSLCD_done ]DSLCD_done
inc SPRITE_Y inc SPRITE_Y
dec SPRITE_H dec SPRITE_H
lda SPRITE_H lda SPRITE_H
bne :drawLine bne :drawLine
rts rts
DrawSpriteLineC DrawSpriteLineC
; EVEN COLS ; EVEN COLS
DD_EVEN lda #0 DD_EVEN lda #0
sta SPRITE_SCREEN_IDX sta SPRITE_SCREEN_IDX
sta TXTPAGE2 sta TXTPAGE2
:lineLoop :lineLoop
;ldy SPRITE_X_IDX ; ;ldy SPRITE_X_IDX ;
;lda (SPRITE_IMASK_P),y ;lda (SPRITE_IMASK_P),y
;beq :noPixel ;beq :noPixel
:collisionCheckDrawer :collisionCheckDrawer
ldy SPRITE_SCREEN_IDX ; GET SCREEN PIXELS ldy SPRITE_SCREEN_IDX ; GET SCREEN PIXELS
lda (SPRITE_SCREEN_P),y lda (SPRITE_SCREEN_P),y
pha ; SAVE -> STACK pha ; SAVE -> STACK
ldy SPRITE_X_IDX ; PREP Y INDEX ldy SPRITE_X_IDX ; PREP Y INDEX
cmp #$BB ; AUX BGCOLOR @TODO cmp #$BB ; AUX BGCOLOR @TODO
beq :noCollision beq :noCollision
and (SPRITE_IMASK_P),y and (SPRITE_IMASK_P),y
cmp #$B0 cmp #$B0
beq :noCollision beq :noCollision
cmp #$0B cmp #$0B
beq :noCollision beq :noCollision
lda #1 lda #1
sta SPRITE_COLLISION sta SPRITE_COLLISION
sta $c034 sta $c034
:noCollision :noCollision
:doPixels pla ; Y=SPRITE X A=BG DATA :doPixels pla ; Y=SPRITE X A=BG DATA
and (SPRITE_MASK_P),y ; CUT OUT SPRITE IN BG DATA and (SPRITE_MASK_P),y ; CUT OUT SPRITE IN BG DATA
ora (SPRITE_AUX_P),y ; OVERLAY OUR SPRITE DATA ora (SPRITE_AUX_P),y ; OVERLAY OUR SPRITE DATA
ldy SPRITE_SCREEN_IDX ldy SPRITE_SCREEN_IDX
sta (SPRITE_SCREEN_P),y sta (SPRITE_SCREEN_P),y
:noPixel inc SPRITE_X_IDX :noPixel inc SPRITE_X_IDX
inc SPRITE_X_IDX inc SPRITE_X_IDX
inc SPRITE_SCREEN_IDX inc SPRITE_SCREEN_IDX
ldy SPRITE_SCREEN_IDX ldy SPRITE_SCREEN_IDX
cpy SPRITE_W cpy SPRITE_W
bcc :lineLoop bcc :lineLoop
DD_ODD DD_ODD
; ODD COLS ; ODD COLS
inc SPRITE_X_IDX ; + 1 column offset inc SPRITE_X_IDX ; + 1 column offset
lda SPRITE_X_IDX lda SPRITE_X_IDX
sec sec
sbc SPRITE_W ; RESET DATA PTR sbc SPRITE_W ; RESET DATA PTR
sbc SPRITE_W ; *2 due to pixel skip sbc SPRITE_W ; *2 due to pixel skip
sta SPRITE_X_IDX sta SPRITE_X_IDX
lda #0 lda #0
sta SPRITE_SCREEN_IDX sta SPRITE_SCREEN_IDX
sta TXTPAGE1 sta TXTPAGE1
:lineLoop ;ldy SPRITE_X_IDX ; :lineLoop ;ldy SPRITE_X_IDX ;
;lda (SPRITE_IMASK_P),y ;lda (SPRITE_IMASK_P),y
;beq :noPixel ;beq :noPixel
:collisionCheckDrawer :collisionCheckDrawer
ldy SPRITE_SCREEN_IDX ; GET SCREEN PIXELS ldy SPRITE_SCREEN_IDX ; GET SCREEN PIXELS
lda (SPRITE_SCREEN_P),y lda (SPRITE_SCREEN_P),y
pha ; SAVE -> STACK pha ; SAVE -> STACK
ldy SPRITE_X_IDX ; PREP Y INDEX ldy SPRITE_X_IDX ; PREP Y INDEX
cmp #$77 ; MAIN BGCOLOR @TODO cmp #$77 ; MAIN BGCOLOR @TODO
beq :noCollision beq :noCollision
and (SPRITE_IMASK_P),y and (SPRITE_IMASK_P),y
cmp #$70 cmp #$70
beq :noCollision beq :noCollision
cmp #$07 cmp #$07
beq :noCollision beq :noCollision
lda #1 lda #1
sta SPRITE_COLLISION sta SPRITE_COLLISION
sta $c034 sta $c034
:noCollision :noCollision
:doPixels pla ; Y=SPRITE X A=BG DATA :doPixels pla ; Y=SPRITE X A=BG DATA
and (SPRITE_MASK_P),y ; CUT OUT SPRITE IN BG DATA and (SPRITE_MASK_P),y ; CUT OUT SPRITE IN BG DATA
ora (SPRITE_MAIN_P),y ; OVERLAY OUR SPRITE DATA ora (SPRITE_MAIN_P),y ; OVERLAY OUR SPRITE DATA
ldy SPRITE_SCREEN_IDX ldy SPRITE_SCREEN_IDX
sta (SPRITE_SCREEN_P),y sta (SPRITE_SCREEN_P),y
:noPixel inc SPRITE_X_IDX :noPixel inc SPRITE_X_IDX
inc SPRITE_X_IDX inc SPRITE_X_IDX
inc SPRITE_SCREEN_IDX inc SPRITE_SCREEN_IDX
ldy SPRITE_SCREEN_IDX ldy SPRITE_SCREEN_IDX
cpy SPRITE_W cpy SPRITE_W
bcc :lineLoop bcc :lineLoop
dec SPRITE_X_IDX ; -1 column offset (for next row) dec SPRITE_X_IDX ; -1 column offset (for next row)
jmp ]DSLCD_done jmp ]DSLCD_done

View File

@ -1,44 +1,44 @@
** Register preservation ** Register preservation
_sX dw 0 _sX dw 0
_sY dw 0 _sY dw 0
_sA dw 0 _sA dw 0
_storeReg sta _sA _storeReg sta _sA
stx _sX stx _sX
sty _sY sty _sY
rts rts
_loadReg lda _sA _loadReg lda _sA
ldx _sX ldx _sX
ldy _sY ldy _sY
rts rts
************************************************** **************************************************
* Awesome PRNG thx to White Flame (aka David Holz) * Awesome PRNG thx to White Flame (aka David Holz)
************************************************** **************************************************
GetRand GetRand
lda _randomByte lda _randomByte
beq :doEor beq :doEor
asl asl
bcc :noEor bcc :noEor
:doEor eor #$1d :doEor eor #$1d
:noEor sta _randomByte :noEor sta _randomByte
rts rts
_randomByte db 0 _randomByte db 0
GetRandLow GetRandLow
lda _randomByte2 lda _randomByte2
beq :doEor beq :doEor
asl asl
bcc :noEor bcc :noEor
:doEor eor #$1d :doEor eor #$1d
:noEor sta _randomByte2 :noEor sta _randomByte2
cmp #$80 cmp #$80
bcs :hot bcs :hot
lda #$0 lda #$0
rts rts
:hot lda #$04 :hot lda #$04
rts rts
_randomByte2 db 0 _randomByte2 db 0