; Play music while showing AppleIIbot programs ; by deater (Vince Weaver) ; Zero Page .include "zp.inc" .include "hardware.inc" STROUT = $db3a NONE = 0 DO_LOAD = 1 DO_LIST = 2 DO_RUN = 3 DO_CREDITS = 4 DONE = 5 ;========================================== ; we are loaded at $6000 ; ; since we are now decompressed here after load ; we don't have to worry about running into DOS3.3 at $9600 ; ; we shouldn't need to set HIMEM as we don't use many vars ; and variable memory starts right after the program bot_demo: ;=================== ; PT3 player Setup lda #0 sta DONE_PLAYING lda #1 sta LOOP jsr mockingboard_detect bcc mockingboard_not_found setup_interrupt: jsr mockingboard_init jsr mockingboard_setup_interrupt jsr reset_ay_both jsr clear_ay_both jsr pt3_init_song start_interrupts: tsx stx original_stack cli mockingboard_not_found: ;=================== ; init screen ;=================== jsr TEXT jsr SETGR jsr HOME ; bit SET_GR ; bit TEXTGR bit KEYRESET ;=================== ; init vars ;=================== ;============================= ; Load title screen ;============================= lda #bg_rle sta GBASH lda #$c jsr load_rle_gr ;============================== ; wipe it to page1 gr ;============================== jsr do_wipe ;============================= ; mockingboard where available ;============================= jsr mock_anim ;============================== ;============================== ;============================== ; command loop ;============================== ;============================== ;============================== command_loop: ; check if irq handler has set trigger because we hit limit lda trigger beq not_trigger lda #0 ; reset trigger sta trigger lda command ; load current command (also set in irq) cmp #DONE ; if done, just loop forever beq command_loop cmp #DO_LIST ; if command is list bne not_do_list jmp do_list ; then do it not_do_list: cmp #DO_LOAD ; if command is load bne not_do_load jsr do_load ; then do it jmp not_trigger not_do_load: cmp #DO_RUN ; if command is run bne not_do_run jmp do_run ; then do it not_do_run: ; cmp #DO_CREDITS ; bne not_trigger ; jmp switch_to_credits not_trigger: jmp command_loop command: .byte $00 which: .byte $00 timeout: .byte 8 ; original timeout trigger: .byte $00 original_stack: .byte $00 .include "gr_unrle.s" .include "gr_offsets.s" .include "bg.inc" .include "pt3_lib_core.s" .include "pt3_lib_init.s" .include "pt3_lib_mockingboard_setup.s" .include "interrupt_handler.s" ; if you're self patching, detect has to be after interrupt_handler.s .include "pt3_lib_mockingboard_detect.s" .include "commands.s" .include "timeline.inc" .include "wipe.s" .include "mock_anim.s" .include "credits.s" .include "nozp.inc" PT3_LOC = song .align $100 song: .incbin "music/mAZE_-_The_Upbeated_Eaten_Apple.pt3"