dos33fsprogs/megademo/falling_apple.s

229 lines
3.7 KiB
ArmAsm
Raw Normal View History

2018-09-17 04:44:32 +00:00
; Display Falling Apple II and message
falling_apple:
;===================
; init screen
jsr TEXT
jsr HOME
2018-09-17 04:44:32 +00:00
bit KEYRESET
;===================
; init vars
lda #0
sta DRAW_PAGE
2018-10-21 18:56:43 +00:00
sta FRAME
sta FRAMEH
2018-09-17 04:44:32 +00:00
;=============================
; Load graphic page0
lda #$0c
sta BASH
lda #$00
sta BASL ; load image to $c00
lda #<apple_low
sta GBASL
lda #>apple_low
sta GBASH
jsr load_rle_gr
lda #4
sta DRAW_PAGE
jsr gr_copy_to_current ; copy to page1
; GR part
bit PAGE1
bit LORES ; 4
bit SET_GR ; 4
bit FULLGR ; 4
;=============================
; Load graphic page1
lda #$0c
sta BASH
lda #$00
sta BASL ; load image to $c00
lda #<apple_high
sta GBASL
lda #>apple_high
sta GBASH
jsr load_rle_gr
lda #0
sta DRAW_PAGE
jsr gr_copy_to_current
; GR part
bit PAGE0
sei
2018-09-17 04:44:32 +00:00
;==============================
; setup graphics for vapor lock
;==============================
jsr vapor_lock ; 6
; vapor lock returns with us at beginning of hsync in line
; 114 (7410 cycles), so with 5070 lines to go
2018-09-17 04:44:32 +00:00
jsr gr_copy_to_current ; 6+ 9292
; now we have 322 left
2018-09-17 04:44:32 +00:00
; GR part
bit LORES ; 4
bit SET_GR ; 4
bit FULLGR ; 4
; 322 - 12 = 310
; - 3 for jmp
; 307
; Try X=9 Y=6 cycles=307
2018-09-17 04:44:32 +00:00
ldy #6 ; 2
faloopA:ldx #9 ; 2
faloopB:dex ; 2
bne faloopB ; 2nt/3
dey ; 2
bne faloopA ; 2nt/3
2018-09-17 04:44:32 +00:00
jmp fa_display_loop ; 3
2018-09-17 04:44:32 +00:00
.align $100
;================================================
; Display Loop
;================================================
; each scan line 65 cycles
; 1 cycle each byte (40cycles) + 25 for horizontal
; Total of 12480 cycles to draw screen
; Vertical blank = 4550 cycles (70 scan lines)
; Total of 17030 cycles to get back to where was
2018-10-21 18:56:43 +00:00
; in the end, scrolling in was deemed to complex
; what we do is load both to PAGE1/PAGE2 and then
; slowly shift from all PAGE1 to PAGE1/PAGE every two scanlines
2018-09-17 04:44:32 +00:00
fa_display_loop:
2018-09-17 04:44:32 +00:00
ldy #48 ; 2
outer_loop:
bit PAGE0 ; 4
ldx #25 ; 130 cycles with PAGE0 ; 2
page0_loop: ; delay 126+bit
dex ; 2
bne page0_loop ; 2/3
bit PAGE1 ; 4
ldx #23 ; 130 cycles with PAGE1 ; 2
page1_loop: ; delay 115+(7 loop)+4 (bit)+4(extra)
dex ; 2
bne page1_loop ; 2/3
nop ; 2
lda DRAW_PAGE ; 3
dey ; 2
bne outer_loop ; 2/3
2018-10-21 18:40:42 +00:00
;======================================================
; We have 4550 cycles in the vblank, use them wisely
;======================================================
; 4550 cycles
2018-10-21 18:56:43 +00:00
; -1 (+1-2) from above
; -25 inc framecount
; -7 see if timeout
2018-10-21 18:40:42 +00:00
; -10 keypress
2018-10-28 16:59:33 +00:00
;-1038 music
2018-10-21 18:40:42 +00:00
;================
2018-10-28 16:59:33 +00:00
; 3469
2018-10-21 18:40:42 +00:00
2018-10-28 16:59:33 +00:00
jsr play_music ; 6+1032
2018-10-21 18:40:42 +00:00
2018-10-28 16:59:33 +00:00
; Try X=230 Y=3 cycles=3469
ldy #3 ; 2
faloop1:ldx #230 ; 2
2018-10-21 18:40:42 +00:00
faloop2:dex ; 2
bne faloop2 ; 2nt/3
dey ; 2
bne faloop1 ; 2nt/3
2018-09-17 04:44:32 +00:00
2018-10-21 18:56:43 +00:00
;========================
; Increment Frame at 20Hz
;========================
; noinc: 13+12=25
; inc: 13+12=25
inc FRAME ; 5
lda FRAME ; 3
cmp #4 ; 2
bne fa_noinc ; 3
; -1
lda #0 ; 2
sta FRAME ; 3
inc FRAMEH ; 5
jmp fa_doneinc ; 3
fa_noinc:
lda $0 ; 3
lda $0 ; 3
lda $0 ; 3
lda $0 ; 3
fa_doneinc:
;====================
; exit after 5s or so
;====================
; 7 cycles
lda FRAMEH ; 3
cmp #77 ; 2
2018-10-21 18:56:43 +00:00
beq fa_done ; 3
; -1
2018-10-21 18:40:42 +00:00
;=====================
; check for keypress
; 10 cycles
2018-09-17 04:44:32 +00:00
lda KEYPRESS ; 4
bpl fa_no_keypress ; 3
jmp fa_done
fa_no_keypress:
2018-09-17 04:44:32 +00:00
jmp fa_display_loop ; 3
2018-09-17 04:44:32 +00:00
fa_done:
2018-09-27 04:00:36 +00:00
bit KEYRESET ; clear keypress ; 4
; jsr mockingboard_mute
cli
2018-09-27 04:00:36 +00:00
rts ; 6
2018-09-17 04:44:32 +00:00
;.include "../asm_routines/gr_unrle.s"
;.include "gr_copy.s"
2018-09-17 04:44:32 +00:00
;.include "apple_40_96.inc"
2018-09-17 04:44:32 +00:00