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
**************************************************
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)

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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

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
*
* 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.

View File

@ -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

View File

@ -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