dos33fsprogs/monkey/title.s

352 lines
5.7 KiB
ArmAsm
Raw Normal View History

2020-09-17 03:30:12 +00:00
; Monkey Title
; by deater (Vince Weaver) <vince@deater.net>
; Zero Page
.include "zp.inc"
.include "hardware.inc"
.include "common_defines.inc"
2020-09-17 05:12:40 +00:00
music_start = $4800
2020-09-17 03:30:12 +00:00
title_start:
;===================
; init screen
jsr TEXT
jsr HOME
bit KEYRESET
bit SET_GR
bit PAGE0
bit LORES
2020-09-17 05:12:40 +00:00
bit FULLGR
lda #0
sta clear_all_color+1
jsr clear_all
2020-09-17 03:30:12 +00:00
lda #0
sta ANIMATE_FRAME
sta FRAMEL
sta FRAMEH
2020-09-17 05:12:40 +00:00
sta DISP_PAGE
2020-09-17 13:37:34 +00:00
lda #4
sta DRAW_PAGE
2020-09-17 14:23:31 +00:00
;====================================
; load LF logo
;====================================
lda #<logo_lzsa
sta LZSA_SRC_LO
lda #>logo_lzsa
sta LZSA_SRC_HI
lda #$c ; load to page $c00
jsr decompress_lzsa2_fast
2020-09-17 05:12:40 +00:00
setup_music:
; decompress music
lda #<theme_lzsa
sta LZSA_SRC_LO
lda #>theme_lzsa
sta LZSA_SRC_HI
lda #$48 ; load to page $4800
jsr decompress_lzsa2_fast
jsr mockingboard_detect
2020-09-17 03:30:12 +00:00
;====================================
2020-09-17 14:23:31 +00:00
;====================================
; Main LOGO loop
;====================================
2020-09-17 03:30:12 +00:00
;====================================
2020-09-17 14:23:31 +00:00
logo_loop:
; copy over background
2020-09-17 05:12:40 +00:00
2020-09-17 03:30:12 +00:00
jsr gr_copy_to_current
2020-09-17 14:23:31 +00:00
; draw sparks
2020-09-17 03:30:12 +00:00
2020-09-17 14:23:31 +00:00
lda FRAMEH ; only do this once
bne done_sparks
2020-09-17 13:37:34 +00:00
2020-09-17 14:23:31 +00:00
ldy #0
spark_loop:
lda sparks,Y
bmi done_sparks
2020-09-17 03:30:12 +00:00
2020-09-17 14:23:31 +00:00
sta XPOS
iny
2020-09-17 03:30:12 +00:00
2020-09-17 14:23:31 +00:00
lda sparks,Y
sta YPOS
iny
2020-09-17 03:30:12 +00:00
2020-09-17 14:23:31 +00:00
; calc which spark
lda sparks,Y
sta TEMPY
sec
lda FRAMEL
sbc TEMPY ; negative if too soon
bmi draw_empty_sprite
cmp #5 ; over 5 if done
bcs draw_empty_sprite
asl
tax
lda spark_sprites,X
sta INL
lda spark_sprites+1,X
jmp draw_spark_sprite
draw_empty_sprite:
lda #<empty_sprite
sta INL
lda #>empty_sprite
draw_spark_sprite:
sta INH
iny
tya
pha
jsr put_sprite_crop
pla
tay
jmp spark_loop
done_sparks:
; flip page
2020-09-17 03:30:12 +00:00
2020-09-17 13:37:34 +00:00
jsr page_flip
2020-09-17 03:30:12 +00:00
2020-09-17 13:37:34 +00:00
; incrememnt frame
2020-09-17 03:30:12 +00:00
2020-09-17 13:37:34 +00:00
jsr inc_frame
2020-09-17 03:30:12 +00:00
2020-09-17 13:37:34 +00:00
; if it's been x seconds then go to next part
2020-09-17 14:23:31 +00:00
lda FRAMEL
cmp #$50
2020-09-17 13:37:34 +00:00
beq do_monkey_loop
2020-09-17 03:30:12 +00:00
2020-09-17 13:37:34 +00:00
; early escape if keypressed
lda KEYPRESS
bpl do_logo_loop
2020-09-17 03:30:12 +00:00
2020-09-17 13:37:34 +00:00
jmp done_with_title
2020-09-17 03:30:12 +00:00
2020-09-17 13:37:34 +00:00
do_logo_loop:
2020-09-17 14:23:31 +00:00
; delay
lda #200
jsr WAIT
2020-09-17 13:37:34 +00:00
jmp logo_loop
2020-09-17 03:30:12 +00:00
2020-09-17 05:12:40 +00:00
;====================================
2020-09-17 13:37:34 +00:00
; load Background logo
2020-09-17 05:12:40 +00:00
;====================================
2020-09-17 13:37:34 +00:00
do_monkey_loop:
2020-09-17 05:12:40 +00:00
lda #<title_lzsa
sta LZSA_SRC_LO
lda #>title_lzsa
sta LZSA_SRC_HI
lda #$c ; load to page $c00
jsr decompress_lzsa2_fast
2020-09-17 13:37:34 +00:00
monkey_loop:
2020-09-17 05:12:40 +00:00
jsr gr_copy_to_current
2020-09-17 15:05:29 +00:00
lda #0
sta XPOS
lda #4
sta YPOS
lda #<cloud_sprite
sta INL
lda #>cloud_sprite
sta INH
jsr put_sprite_crop
2020-09-17 13:37:34 +00:00
jsr page_flip
2020-09-17 14:23:31 +00:00
; early escape if end of song
lda DONE_PLAYING
bmi done_with_title
2020-09-17 13:37:34 +00:00
; early escape if keypressed
lda KEYPRESS
bpl loop_again
jmp done_with_title
loop_again:
jmp monkey_loop
2020-09-17 05:12:40 +00:00
;==========================
; turn off music
;==========================
2020-09-17 13:37:34 +00:00
done_with_title:
bit KEYRESET ; clear keypress
sei ; clear interrupts
2020-09-17 05:12:40 +00:00
2020-09-17 13:37:34 +00:00
jsr clear_ay_both ; silence ay-3-8910 chips
2020-09-17 05:12:40 +00:00
2020-09-17 03:30:12 +00:00
;==========================
; load main program
;==========================
lda #LOAD_MONKEY
sta WHICH_LOAD
rts
;==========================
; includes
;==========================
; level graphics
2020-09-17 05:12:40 +00:00
.include "graphics_intro/title_graphics.inc"
2020-09-17 03:30:12 +00:00
2020-09-17 13:37:34 +00:00
.include "text_print.s"
2020-09-17 03:30:12 +00:00
.include "gr_offsets.s"
2020-09-17 05:12:40 +00:00
.include "gr_fast_clear.s"
2020-09-17 03:30:12 +00:00
.include "gr_copy.s"
2020-09-17 13:37:34 +00:00
.include "gr_putsprite_crop.s"
.include "gr_pageflip.s"
2020-09-17 05:12:40 +00:00
.include "decompress_fast_v2.s"
2020-09-17 03:30:12 +00:00
2020-09-17 05:12:40 +00:00
.include "ym_play.s"
.include "interrupt_handler.s"
.include "mockingboard.s"
2020-09-17 13:37:34 +00:00
;wait_until_keypressed:
; lda KEYPRESS
; bpl wait_until_keypressed
2020-09-17 03:30:12 +00:00
2020-09-17 13:37:34 +00:00
; bit KEYRESET
2020-09-17 03:30:12 +00:00
2020-09-17 13:37:34 +00:00
; rts
;====================================
; inc frame count
;====================================
inc_frame:
inc FRAMEL
bne room_frame_no_oflo
inc FRAMEH
room_frame_no_oflo:
2020-09-17 03:30:12 +00:00
rts
2020-09-17 05:12:40 +00:00
; music is compressed
; decompressed it is 30720 bytes
; we decompress to $4800
; so total size of our code can't be biggr than $2800 = 10k
theme_lzsa:
.incbin "music/theme.lzsa"
2020-09-17 14:23:31 +00:00
spark_sprites:
.word empty_sprite
.word spark0_sprite
.word spark1_sprite
.word spark2_sprite
.word spark1_sprite
.word spark0_sprite
empty_sprite:
.byte 1,1
.byte $AA
2020-09-17 13:37:34 +00:00
2020-09-17 14:23:31 +00:00
spark0_sprite:
2020-09-17 13:37:34 +00:00
.byte 3,2
.byte $AA,$AA,$AA
.byte $AA,$AF,$AA
2020-09-17 14:23:31 +00:00
spark1_sprite:
2020-09-17 13:37:34 +00:00
.byte 3,2
.byte $AA,$3A,$AA
.byte $A3,$3F,$A3
2020-09-17 14:23:31 +00:00
spark2_sprite:
2020-09-17 13:37:34 +00:00
.byte 3,3
.byte $AA,$b3,$AA
.byte $Ab,$bF,$Ab
.byte $Aa,$a3,$Aa
; spark locations (grow+shrink)
sparks:
; X,Y timestamp
2020-09-17 14:23:31 +00:00
.byte 0,10, 32 ; first: 0,10
.byte 3,26, 34 ; second: 3,26
.byte 6,10, 36 ; third: 6,10
.byte 6,28, 38 ; 4th 6,28
.byte 10,14, 40 ; 5th 10,14
.byte 15,22, 42 ; 6th 15,22
.byte 19,14, 44 ; 7th 19,14
.byte 25,24, 46 ; 8th 25,24
.byte 28,10, 48 ; 9th 28,10
.byte 32,30, 50 ; 10th 32,30
.byte 37,10, 52 ; 11th 37,10
2020-09-17 13:37:34 +00:00
.byte $ff
2020-09-17 15:05:29 +00:00
cloud_sprite:
.byte 40,6
;line 1
.byte $AA,$AA,$AA,$AA,$AA,$AA,$AA,$A5,$AA,$AA
.byte $AA,$AA,$AA,$AA,$5A,$5A,$7A,$75,$55,$05
.byte $5A,$AA,$AA,$AA,$77,$5A,$AA,$AA,$AA,$AA
.byte $AA,$AA,$AA,$AA,$AA,$AA,$5A,$5A,$AA,$AA
;line 2
.byte $7A,$7A,$77,$7A,$7A,$77,$7A,$77,$7A,$AA
.byte $AA,$5A,$5A,$57,$07,$77,$55,$05,$50,$05
.byte $77,$00,$5A,$AA,$A5,$A5,$AA,$AA,$AA,$AA
.byte $7A,$AA,$AA,$AA,$A5,$AA,$77,$07,$77,$AA
;line 3
.byte $A5,$A7,$55,$05,$50,$55,$05,$05,$55,$57
.byte $57,$50,$57,$57,$70,$07,$77,$75,$50,$55
.byte $55,$55,$00,$07,$7A,$77,$77,$77,$AA,$57
.byte $77,$AA,$5A,$77,$7A,$5A,$07,$75,$05,$AA
;line 4
.byte $AA,$AA,$A7,$57,$57,$57,$07,$75,$75,$75
.byte $70,$00,$75,$55,$75,$70,$77,$77,$50,$05
.byte $07,$55,$75,$75,$07,$57,$50,$00,$50,$05
.byte $77,$7A,$70,$07,$77,$77,$75,$70,$75,$5A
;line 5
.byte $AA,$AA,$AA,$AA,$AA,$A5,$A5,$AA,$A0,$A5
.byte $A5,$A5,$A5,$A5,$A5,$A5,$05,$55,$57,$55
.byte $55,$57,$57,$00,$57,$57,$55,$07,$07,$57
.byte $50,$77,$77,$50,$07,$77,$77,$77,$77,$55
;line 6
.byte $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
.byte $AA,$AA,$AA,$AA,$AA,$AA,$AA,$A0,$A5,$A5
.byte $A5,$A5,$A5,$A0,$AA,$A5,$55,$55,$55,$55
.byte $55,$A5,$A5,$A7,$A5,$A5,$A5,$A5,$A5,$A0