megadmo: add e-mail check

This commit is contained in:
Vince Weaver 2018-09-29 00:59:14 -04:00
parent c78e29e0fc
commit 7c0ca01789
5 changed files with 239 additions and 0 deletions

View File

@ -26,6 +26,7 @@ megademo.o: megademo.s \
gr_hline.s gr_offsets.s vapor_lock.s delay_a.s wait_keypress.s \
c64_opener.s c64.img.lz4 \
falling_apple.s apple_40_96.inc \
check_email.s email_40_96.inc \
bird_mountain.s \
fireworks.s fw_background.inc fw_state_machine.s fw.s \
hgr.s random16.s move_letters.s
@ -39,6 +40,11 @@ apple_40_96.inc: ./images/apple_40_96.png
####
email_40_96.inc: ./email_40_96.png
$(PNG_TO_40x96) asm ./email_40_96.png email > email_40_96.inc
####
c64.img.lz4: c64.img
lz4 -f -16 c64.img

45
megademo/TODO Normal file
View File

@ -0,0 +1,45 @@
Overall:
fix off-by-one line vaporlock
Music:
compose music
fit in RAM
c64_opener:
get curtain-opening effect working
add text to background
starring:
implement
complete graphics
add wipe effect with tengwar
e-mail:
implement
half text
40x96 graphics
use existing move_letters?
**01234567890123456**
2 DEATER,
3
4 Wir MuSSEN
5 ZUSAMMEN SEIN.
6
7 RAUMFAHRST DU
8 SCHNELL.
9
10 DEIN IMMER
11
12 FroGGY SuE
13 _
14 [_]
15 /| |\
16 /_|_|_\
17 /_\
18
19
20
21
22

181
megademo/check_email.s Normal file
View File

@ -0,0 +1,181 @@
; Display e-mail demo
; 40x96 graphics as well as half-screen text manipulation
check_email:
;===================
; init screen
jsr TEXT
jsr HOME
bit KEYRESET
;===================
; init vars
lda #0
sta DRAW_PAGE
;=============================
; Load graphic page0
lda #$0c
sta BASH
lda #$00
sta BASL ; load image to $c00
lda #<email_low
sta GBASL
lda #>email_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 #<email_high
sta GBASL
lda #>email_high
sta GBASH
jsr load_rle_gr
lda #0
sta DRAW_PAGE
jsr gr_copy_to_current
; GR part
bit PAGE0
;==============================
; 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
jsr gr_copy_to_current ; 6+ 9292
; now we have 322 left
; 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
ldy #6 ; 2
celoopA:ldx #9 ; 2
celoopB:dex ; 2
bne celoopB ; 2nt/3
dey ; 2
bne celoopA ; 2nt/3
jmp em_display_loop
.align $100
;================================================
; Email 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]
; For this part we want
; T00000000000000000000 G0000000000000000000000
; T00000000000000000000 G0000000000000000000000
; T00000000000000000000 G1111111111111111111111
; T00000000000000000000 G1111111111111111111111
; T11111111111111111111 G0000000000000000000000
; T11111111111111111111 G0000000000000000000000
; T11111111111111111111 G1111111111111111111111
; T11111111111111111111 G1111111111111111111111
em_display_loop:
ldy #48 ; 2
em_outer_loop:
bit PAGE0 ; 4
ldx #25 ; 130 cycles with PAGE0 ; 2
em_page0_loop: ; delay 126+bit
dex ; 2
bne em_page0_loop ; 2/3
bit PAGE1 ; 4
ldx #23 ; 130 cycles with PAGE1 ; 2
em_page1_loop: ; delay 115+(7 loop)+4 (bit)+4(extra)
dex ; 2
bne em_page1_loop ; 2/3
nop ; 2
lda DRAW_PAGE ; 3
dey ; 2
bne em_outer_loop ; 2/3
;======================================================
; We have 4550 cycles in the vblank, use them wisely
;======================================================
; do_nothing should be 4550+1 -2-9 -7= 4533
jsr do_nothing ; 6
lda KEYPRESS ; 4
bpl em_no_keypress ; 3
jmp em_start_over
em_no_keypress:
jmp em_display_loop ; 3
em_start_over:
bit KEYRESET ; clear keypress ; 4
rts ; 6
.include "email_40_96.inc"

BIN
megademo/email_40_96.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@ -11,6 +11,8 @@
;===================
jsr HOME
jsr check_email
; C64 Opening Sequence
jsr c64_opener
@ -22,6 +24,8 @@
; Starring Screens
; E-mail arriving
jsr check_email
; Leaving house
@ -32,6 +36,8 @@
; Enter ship
; mode7 (???)
; Fly in space
; Arrive
@ -54,6 +60,7 @@ loop_forever:
.include "lz4_decode.s"
.include "c64_opener.s"
.include "falling_apple.s"
.include "check_email.s"
.align $100
.include "gr_offsets.s"
.include "gr_hline.s"