mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-08-19 14:29:25 +00:00
233 lines
3.8 KiB
ArmAsm
233 lines
3.8 KiB
ArmAsm
; VMW Productions 2018 XMAS Demo
|
|
;
|
|
; by deater (Vince Weaver) <vince@deater.net>
|
|
|
|
.include "zp.inc"
|
|
.include "hardware.inc"
|
|
|
|
xmas2018_start:
|
|
|
|
;===================
|
|
; Check for Apple II and patch
|
|
;===================
|
|
|
|
; lda $FBB3 ; IIe and newer is $06
|
|
; cmp #6
|
|
; beq apple_iie
|
|
|
|
; lda #$54 ;
|
|
; sta ce_patch+1
|
|
|
|
|
|
apple_iie:
|
|
|
|
;===================
|
|
; Init RTS disk code
|
|
;===================
|
|
|
|
jsr rts_init
|
|
|
|
;===================
|
|
; Load graphics
|
|
;===================
|
|
reload_everything:
|
|
; load WREATH.LZ4 to $a000
|
|
; then decompress it to $2000 (HGR PAGE0)
|
|
|
|
lda #<wreath_filename
|
|
sta OUTL
|
|
lda #>wreath_filename
|
|
sta OUTH
|
|
jsr opendir_filename ; open and read entire file into memory
|
|
|
|
; size in ldsizeh:ldsizel (f1/f0)
|
|
|
|
clc
|
|
lda #<($a000)
|
|
sta LZ4_SRC
|
|
adc ldsizel
|
|
sta LZ4_END
|
|
|
|
lda #>($a000)
|
|
sta LZ4_SRC+1
|
|
adc ldsizeh
|
|
sta LZ4_END+1
|
|
|
|
; lda #<($a000+4103-8) ; skip checksum at end
|
|
; sta LZ4_END
|
|
; lda #>($a000+4103-8) ; skip checksum at end
|
|
; sta LZ4_END+1
|
|
|
|
lda #<$2000
|
|
sta LZ4_DST
|
|
lda #>$2000
|
|
sta LZ4_DST+1
|
|
|
|
jsr lz4_decode
|
|
|
|
; load MERRY.LZ4 to $4000
|
|
; then decompress it to $6000
|
|
|
|
lda #<merry_filename
|
|
sta OUTL
|
|
lda #>merry_filename
|
|
sta OUTH
|
|
jsr opendir_filename ; open and read entire file into memory
|
|
|
|
; size in ldsizeh:ldsizel (f1/f0)
|
|
|
|
clc
|
|
lda #<($4000)
|
|
sta LZ4_SRC
|
|
adc ldsizel
|
|
sta LZ4_END
|
|
|
|
lda #>($4000)
|
|
sta LZ4_SRC+1
|
|
adc ldsizeh
|
|
sta LZ4_END+1
|
|
|
|
lda #<$6000
|
|
sta LZ4_DST
|
|
lda #>$6000
|
|
sta LZ4_DST+1
|
|
|
|
jsr lz4_decode
|
|
|
|
|
|
;===================
|
|
; Load music
|
|
;===================
|
|
|
|
; load MUSIC.LZ4 to $4000
|
|
|
|
lda #<music_filename
|
|
sta OUTL
|
|
lda #>music_filename
|
|
sta OUTH
|
|
jsr opendir_filename ; open and read entire file into memory
|
|
|
|
; decompress to $8000
|
|
; decompress from $4000
|
|
; size in ldsizeh:ldsizel (f1/f0)
|
|
|
|
clc
|
|
lda #<($4000)
|
|
sta LZ4_SRC
|
|
adc ldsizel
|
|
sta LZ4_END
|
|
|
|
lda #>($4000)
|
|
sta LZ4_SRC+1
|
|
adc ldsizeh
|
|
sta LZ4_END+1
|
|
|
|
lda #<$8000
|
|
sta LZ4_DST
|
|
lda #>$8000
|
|
sta LZ4_DST+1
|
|
|
|
jsr lz4_decode
|
|
|
|
; load BALL.IMG to $4000
|
|
|
|
lda #<ball_filename
|
|
sta OUTL
|
|
lda #>ball_filename
|
|
sta OUTH
|
|
jsr opendir_filename ; open and read entire file into memory
|
|
|
|
;==================
|
|
; Init mockingboard
|
|
;==================
|
|
|
|
lda #0
|
|
sta MB_PATTERN
|
|
|
|
lda #$0
|
|
sta MB_FRAME
|
|
|
|
jsr mockingboard_init
|
|
|
|
;===================
|
|
; set graphics mode
|
|
;===================
|
|
jsr HOME
|
|
|
|
forever:
|
|
bit PAGE0
|
|
|
|
jsr wreath
|
|
|
|
jsr ball
|
|
|
|
jsr merry
|
|
|
|
; wait 5s before restarting
|
|
|
|
ldx #20
|
|
wait_at_merry:
|
|
lda #255
|
|
jsr WAIT
|
|
dex
|
|
bne wait_at_merry
|
|
|
|
sei ; disable music interrupt
|
|
jsr mockingboard_mute
|
|
|
|
jmp reload_everything
|
|
|
|
;==================
|
|
; Game over
|
|
;==================
|
|
; we never get here
|
|
;game_over_man:
|
|
; jmp game_over_man
|
|
|
|
|
|
; Things included here should be aligned
|
|
; as they are called during cycle-counting
|
|
.align $100
|
|
.include "wreath.s"
|
|
.include "gr_putsprite.s"
|
|
.include "gr_offsets.s"
|
|
.include "gr_fast_clear.s"
|
|
.include "vapor_lock.s"
|
|
.align $100
|
|
.include "play_music.s"
|
|
.include "delay_a.s"
|
|
.include "gr_scroll.s"
|
|
.include "mockingboard.s"
|
|
.align $100
|
|
.include "scroll.table"
|
|
.include "ball.s"
|
|
|
|
|
|
; Things here alignment doesn't matter
|
|
.include "gr_hline.s"
|
|
.include "wait_keypress.s"
|
|
.include "merry.s"
|
|
.include "lz4_decode.s"
|
|
.include "rts.s"
|
|
|
|
greets:
|
|
.incbin "greets.raw.lz4t"
|
|
greets_end:
|
|
|
|
; filename to open is 30-character Apple text:
|
|
wreath_filename: ; .byte "WREATH.LZ4",0
|
|
.byte 'W'|$80,'R'|$80,'E'|$80,'A'|$80,'T'|$80,'H'|$80,'.'|$80,'L'|$80
|
|
.byte 'Z'|$80,'4'|$80,$00
|
|
|
|
merry_filename: ;.byte "MERRY.LZ4",0
|
|
.byte 'M'|$80,'E'|$80,'R'|$80,'R'|$80,'Y'|$80,'.'|$80,'L'|$80,'Z'|$80
|
|
.byte '4'|$80,$00
|
|
|
|
ball_filename: ;.byte "BALL.IMG",0
|
|
.byte 'B'|$80,'A'|$80,'L'|$80,'L'|$80,'.'|$80,'I'|$80,'M'|$80,'G'|$80
|
|
.byte $00
|
|
|
|
music_filename: ;.byte "MUSIC.LZ4",0
|
|
.byte 'M'|$80,'U'|$80,'S'|$80,'I'|$80,'C'|$80,'.'|$80,'L'|$80,'Z'|$80
|
|
.byte '4'|$80,$0
|