2019-09-04 19:46:10 +00:00
|
|
|
; Display a 40x96 lo-res image
|
|
|
|
|
|
|
|
; by deater (Vince Weaver) <vince@deater.net>
|
|
|
|
|
|
|
|
|
|
|
|
appleII_intro:
|
|
|
|
|
|
|
|
;===================
|
|
|
|
; init screen
|
|
|
|
jsr TEXT
|
|
|
|
jsr HOME
|
|
|
|
bit KEYRESET
|
|
|
|
|
|
|
|
;===================
|
|
|
|
; init vars
|
|
|
|
|
|
|
|
lda #0
|
|
|
|
sta DRAW_PAGE
|
2019-10-12 17:51:02 +00:00
|
|
|
sta DUDE_X
|
2019-09-04 19:46:10 +00:00
|
|
|
|
|
|
|
;=============================
|
|
|
|
; Load graphic page0
|
|
|
|
|
|
|
|
lda #<appleII_low
|
|
|
|
sta GBASL
|
|
|
|
lda #>appleII_low
|
|
|
|
sta GBASH
|
|
|
|
lda #$c
|
|
|
|
jsr load_rle_gr
|
|
|
|
|
2019-10-12 14:47:38 +00:00
|
|
|
; lda #$4
|
|
|
|
; sta DRAW_PAGE
|
2019-09-04 19:46:10 +00:00
|
|
|
|
2019-10-12 14:47:38 +00:00
|
|
|
; jsr gr_copy_to_current ; copy to page1
|
2019-09-04 19:46:10 +00:00
|
|
|
|
|
|
|
; GR part
|
2019-10-12 14:47:38 +00:00
|
|
|
; bit PAGE1
|
|
|
|
; bit LORES ; 4
|
|
|
|
; bit SET_GR ; 4
|
|
|
|
; bit FULLGR ; 4
|
2019-09-04 19:46:10 +00:00
|
|
|
|
2019-10-12 14:47:38 +00:00
|
|
|
; jsr wait_until_keypressed
|
2019-09-04 19:46:10 +00:00
|
|
|
|
|
|
|
|
|
|
|
;=============================
|
|
|
|
; Load graphic page1
|
|
|
|
|
|
|
|
lda #<appleII_high
|
|
|
|
sta GBASL
|
|
|
|
lda #>appleII_high
|
|
|
|
sta GBASH
|
2019-10-12 14:47:38 +00:00
|
|
|
lda #$10
|
2019-09-04 19:46:10 +00:00
|
|
|
jsr load_rle_gr
|
|
|
|
|
2019-10-12 14:47:38 +00:00
|
|
|
; lda #$0
|
|
|
|
; sta DRAW_PAGE
|
2019-09-04 19:46:10 +00:00
|
|
|
|
2019-10-12 14:47:38 +00:00
|
|
|
; jsr gr_copy_to_current
|
2019-09-04 19:46:10 +00:00
|
|
|
|
|
|
|
; GR part
|
|
|
|
bit PAGE0
|
|
|
|
|
2019-10-12 14:47:38 +00:00
|
|
|
; jsr wait_until_keypressed
|
2019-09-04 19:46:10 +00:00
|
|
|
|
|
|
|
|
|
|
|
;==============================
|
|
|
|
; setup graphics for vapor lock
|
|
|
|
;==============================
|
|
|
|
|
|
|
|
jsr vapor_lock ; 6+
|
|
|
|
|
|
|
|
; vapor lock returns with us at beginning of hsync in line
|
2019-10-12 17:51:02 +00:00
|
|
|
; 114 (7410 cycles), so with 5070 lines to go to vblank
|
2019-09-04 19:46:10 +00:00
|
|
|
|
2019-10-12 17:51:02 +00:00
|
|
|
; 5070+17030+4550=26650
|
2019-10-12 14:47:38 +00:00
|
|
|
|
2019-09-04 19:46:10 +00:00
|
|
|
; GR part
|
|
|
|
bit LORES ; 4
|
|
|
|
bit SET_GR ; 4
|
|
|
|
bit FULLGR ; 4
|
|
|
|
|
2019-10-12 14:47:38 +00:00
|
|
|
lda #0 ; 2
|
|
|
|
sta DRAW_PAGE ; 3
|
|
|
|
jsr gr_clear_all ; 6+ 5454
|
|
|
|
|
|
|
|
lda #4 ; 2
|
|
|
|
sta DRAW_PAGE ; 3
|
|
|
|
jsr gr_clear_all ; 6+ 5454
|
2019-09-04 19:46:10 +00:00
|
|
|
|
2019-10-12 17:51:02 +00:00
|
|
|
; 26650
|
2019-10-12 14:47:38 +00:00
|
|
|
; -12
|
|
|
|
; -5465
|
|
|
|
; -5465
|
|
|
|
; -3 (jmp)
|
|
|
|
;==========
|
2019-10-12 17:51:02 +00:00
|
|
|
; 15705
|
|
|
|
|
|
|
|
; FIXME: delay extra 33?
|
|
|
|
; have no idea why this is needed
|
|
|
|
lda DRAW_PAGE
|
|
|
|
lda DRAW_PAGE
|
|
|
|
lda DRAW_PAGE
|
|
|
|
lda DRAW_PAGE
|
|
|
|
lda DRAW_PAGE
|
|
|
|
lda DRAW_PAGE
|
|
|
|
lda DRAW_PAGE
|
|
|
|
lda DRAW_PAGE
|
|
|
|
lda DRAW_PAGE
|
|
|
|
lda DRAW_PAGE
|
|
|
|
lda DRAW_PAGE
|
|
|
|
|
|
|
|
|
|
|
|
; Try X=29 Y=104 cycles=15705
|
|
|
|
|
|
|
|
ldy #104 ; 2
|
|
|
|
loopA: ldx #29 ; 2
|
2019-09-04 19:46:10 +00:00
|
|
|
loopB: dex ; 2
|
|
|
|
bne loopB ; 2nt/3
|
|
|
|
dey ; 2
|
|
|
|
bne loopA ; 2nt/3
|
|
|
|
|
|
|
|
jmp display_loop ; 3
|
|
|
|
|
|
|
|
.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
|
|
|
|
|
|
|
|
; We want to alternate between page1 and page2 every 65 cycles
|
|
|
|
; vblank = 4550 cycles to do scrolling
|
|
|
|
|
|
|
|
|
|
|
|
; 2 + 48*( (4+2+25*(2+3)) + (4+2+23*(2+3)+4+5)) + 9)
|
|
|
|
; 48*[(6+125)-1] + [(6+115+10)-1]
|
|
|
|
|
|
|
|
display_loop:
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;======================================================
|
|
|
|
; We have 4550 cycles in the vblank, use them wisely
|
|
|
|
;======================================================
|
|
|
|
; do_nothing should be 4550+1 -2-9 -7= 4533
|
2019-10-12 14:47:38 +00:00
|
|
|
; 4550
|
|
|
|
; +1 (fallthrough)
|
|
|
|
; -2 initial conditions
|
2019-10-12 17:51:02 +00:00
|
|
|
; -8 check if done
|
|
|
|
; -1161
|
2019-10-12 14:47:38 +00:00
|
|
|
; -7 (keypress)
|
|
|
|
; -3 (jump)
|
|
|
|
; =====
|
2019-10-12 17:51:02 +00:00
|
|
|
; 3370
|
2019-09-04 19:46:10 +00:00
|
|
|
|
|
|
|
jsr do_nothing ; 6
|
|
|
|
|
2019-10-12 17:51:02 +00:00
|
|
|
ldx DUDE_X ; 3
|
|
|
|
cpx #40 ; 2
|
|
|
|
bne wipe_right ; 3
|
|
|
|
|
|
|
|
done_done:
|
|
|
|
;===========================
|
|
|
|
; delay 1161+1-3=1159
|
|
|
|
|
|
|
|
; delay
|
|
|
|
; Try X=3 Y=55 cycles=1156R3
|
|
|
|
|
|
|
|
lda DUDE_X ; 3
|
|
|
|
|
|
|
|
; -1
|
|
|
|
|
|
|
|
ldy #55 ; 2
|
|
|
|
loop11: ldx #3 ; 2
|
|
|
|
loop21: dex ; 2
|
|
|
|
bne loop21 ; 2nt/3
|
|
|
|
dey ; 2
|
|
|
|
bne loop11 ; 2nt/3
|
|
|
|
|
|
|
|
|
|
|
|
jmp intro_wipe_done ; 3
|
|
|
|
|
|
|
|
|
|
|
|
;=====================
|
2019-10-12 14:47:38 +00:00
|
|
|
;=====================
|
2019-10-12 17:51:02 +00:00
|
|
|
; wipe right
|
2019-10-12 14:47:38 +00:00
|
|
|
;=====================
|
2019-10-12 17:51:02 +00:00
|
|
|
;=====================
|
|
|
|
; 2+ 24*(30+18)-1 +5+3 = 1161
|
2019-10-12 14:47:38 +00:00
|
|
|
|
|
|
|
; page0 -- copy from $c00
|
2019-10-12 17:51:02 +00:00
|
|
|
wipe_right:
|
2019-10-12 14:47:38 +00:00
|
|
|
ldy #0 ; 2
|
|
|
|
;=====
|
2019-10-12 17:51:02 +00:00
|
|
|
; 2
|
2019-10-12 14:47:38 +00:00
|
|
|
page0_loopy:
|
|
|
|
lda gr_offsets,Y ; 4+
|
|
|
|
sta page0_store_smc+1 ; 4
|
|
|
|
sta page0_load_smc+1 ; 4
|
|
|
|
lda gr_offsets+1,Y ; 4+
|
|
|
|
clc ; 2
|
|
|
|
adc #$4 ; 2
|
|
|
|
sta page0_store_smc+2 ; 4
|
|
|
|
adc #$4 ; 2
|
|
|
|
sta page0_load_smc+2 ; 4
|
|
|
|
;=====
|
|
|
|
; 30
|
|
|
|
|
|
|
|
page0_load_smc:
|
|
|
|
lda $1000,X ; 4+
|
|
|
|
page0_store_smc:
|
|
|
|
sta $1000,X ; 5
|
|
|
|
|
|
|
|
iny ; 2
|
2019-10-12 17:51:02 +00:00
|
|
|
iny ; 2
|
|
|
|
cpy #48 ; 2
|
2019-10-12 14:47:38 +00:00
|
|
|
bne page0_loopy ; 3
|
|
|
|
;================
|
2019-10-12 17:51:02 +00:00
|
|
|
; 18
|
2019-10-12 14:47:38 +00:00
|
|
|
|
|
|
|
; -1
|
2019-10-12 17:51:02 +00:00
|
|
|
inc DUDE_X ; 5
|
|
|
|
jmp intro_wipe_done ; 3
|
|
|
|
|
2019-10-12 14:47:38 +00:00
|
|
|
|
|
|
|
;==========================
|
|
|
|
;==========================
|
2019-10-12 17:51:02 +00:00
|
|
|
intro_wipe_done:
|
2019-09-04 19:46:10 +00:00
|
|
|
lda KEYPRESS ; 4
|
2019-10-02 04:03:00 +00:00
|
|
|
bpl no_keypress2 ; 3
|
2019-09-04 19:46:10 +00:00
|
|
|
jmp appleii_done
|
2019-10-02 04:03:00 +00:00
|
|
|
no_keypress2:
|
2019-09-04 19:46:10 +00:00
|
|
|
|
|
|
|
jmp display_loop ; 3
|
|
|
|
|
|
|
|
appleii_done:
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
|
|
;=================================
|
|
|
|
; do nothing
|
|
|
|
;=================================
|
2019-10-12 17:51:02 +00:00
|
|
|
; and take 3370-12 = 3358 cycles to do it
|
2019-09-04 19:46:10 +00:00
|
|
|
do_nothing:
|
|
|
|
|
2019-10-12 17:51:02 +00:00
|
|
|
; Try X=11 Y=55 cycles=3356R2
|
2019-09-04 19:46:10 +00:00
|
|
|
|
2019-10-12 17:51:02 +00:00
|
|
|
nop
|
2019-09-04 19:46:10 +00:00
|
|
|
|
2019-10-12 17:51:02 +00:00
|
|
|
ldy #55 ; 2
|
|
|
|
loop1: ldx #11 ; 2
|
2019-10-12 14:47:38 +00:00
|
|
|
loop2: dex ; 2
|
2019-09-04 19:46:10 +00:00
|
|
|
bne loop2 ; 2nt/3
|
|
|
|
dey ; 2
|
|
|
|
bne loop1 ; 2nt/3
|
|
|
|
|
2019-10-12 14:47:38 +00:00
|
|
|
rts ; 6
|
2019-09-04 19:46:10 +00:00
|
|
|
|
|
|
|
|
|
|
|
|