diff --git a/games/mist_hgr/link_book_mist_dock.s b/games/mist_hgr/link_book_mist_dock.s index 140d448b..99a3e082 100644 --- a/games/mist_hgr/link_book_mist_dock.s +++ b/games/mist_hgr/link_book_mist_dock.s @@ -8,12 +8,26 @@ mist_link_book: and #SOUND_MOCKINGBOARD beq skip_turn_off_music - sei ; disable interrupts + ; disable interrupts + jsr mockingboard_disable_interrupt jsr clear_ay_both skip_turn_off_music: + ; load link noise if IIc + ; we have to load it late due to IIc needing ROM copy in AUX + ; until done playing music + ; this makes an awkward pause but seems best compromise + + lda APPLEII_MODEL + cmp #'C' + bne link_noise_already_loaded + + jsr load_linking_noise +link_noise_already_loaded: + + ; clear screen ; clear to black diff --git a/games/mist_hgr/mist_title.s b/games/mist_hgr/mist_title.s index a699a8ef..07c75a2e 100644 --- a/games/mist_hgr/mist_title.s +++ b/games/mist_hgr/mist_title.s @@ -113,27 +113,6 @@ yes_language_card: lda SOUND_STATUS ora #SOUND_IN_LC sta SOUND_STATUS - - ; load sounds into LC - - ; read ram, write ram, use $d000 bank1 - bit $C08B - bit $C08B - - lda #linking_noise_compressed - sta getsrc_smc+2 - - lda #$D0 ; decompress to $D000 - - jsr decompress_lzsa2_fast - -blah: - - ; read rom, nowrite, use $d000 bank1 - bit $C08A - no_language_card: ;=================================== @@ -227,6 +206,13 @@ mockingboard_notfound: done_setup_sound: + lda APPLEII_MODEL + cmp #'C' + beq link_noise_not_yet + + jsr load_linking_noise +link_noise_not_yet: + ;========================== ; wait a bit at text title @@ -709,6 +695,19 @@ skip_intro: ; lda #1 ; jsr draw_and_wait + + ;================================ + ; shut off speech if still going + ;================================ + + lda SOUND_STATUS + and #SOUND_SSI263 + beq no_not_speeking + + jsr ssi263_speech_shutdown +no_not_speeking: + + done_intro: ; restore to full screen (no text) @@ -973,7 +972,12 @@ get_mist_book: jsr mockingboard_init jsr reset_ay_both - jsr mockingboard_setup_interrupt + +; jsr mockingboard_setup_interrupt + + ; to make it work on IIc? + jsr done_iic_hack + jsr pt3_init_song @@ -1110,3 +1114,36 @@ animate_xloop: done_animate_book: rts + + + + +load_linking_noise: + ; load sound effect into language card + ; do this late as IIc mockingboard support messes with language card + + ; update sound status + lda SOUND_STATUS + and #SOUND_IN_LC + beq skip_load_linking_noise + + ; load sounds into LC + + ; read ram, write ram, use $d000 bank1 + bit $C08B + bit $C08B + + lda #linking_noise_compressed + sta getsrc_smc+2 + + lda #$D0 ; decompress to $D000 + + jsr decompress_lzsa2_fast + + ; read rom, nowrite, use $d000 bank1 + bit $C08A + +skip_load_linking_noise: + rts diff --git a/games/mist_hgr/pt3_lib_mockingboard_setup.s b/games/mist_hgr/pt3_lib_mockingboard_setup.s index 89a4cac0..b94a29b5 100644 --- a/games/mist_hgr/pt3_lib_mockingboard_setup.s +++ b/games/mist_hgr/pt3_lib_mockingboard_setup.s @@ -182,8 +182,6 @@ mockingboard_setup_interrupt: sei ; disable interrupts - - copy_rom_loop: lda $c089 ; read ROM, write RAM1 lda $c089 @@ -214,11 +212,12 @@ write_rom_loop: lda #>interrupt_handler sta $ffff - lda #$EA ; nop out the "lda $45" in the irq handler + + ; nop out the "lda $45" in the irq handler + lda #$EA sta interrupt_smc sta interrupt_smc+1 .endif - done_iic_hack: diff --git a/games/mist_hgr/ssi263_simple_speech.s b/games/mist_hgr/ssi263_simple_speech.s index d6bb05b2..991df322 100644 --- a/games/mist_hgr/ssi263_simple_speech.s +++ b/games/mist_hgr/ssi263_simple_speech.s @@ -70,8 +70,6 @@ ssi263_speech_init: ldx #SSI263_I jsr ssi263_write_chip - - cli ; enable interrupts rts @@ -84,6 +82,8 @@ ssi263_speech_init: ssi263_speech_shutdown: sei + jsr ssi263_disable + rts @@ -195,6 +195,27 @@ no_oflo: speech_end: + jsr ssi263_disable + +end_interrupt: + + pla + tay ; restore Y + pla + tax ; restore X + + pla ; restore A + +ssi_interrupt_smc: + lda $45 ; restore A (II+/IIe) + + plp ; restore flags + + rti ; return from interrupt + + + +ssi263_disable: ; If at the end, turn everything off ; Toggle CTL while DR set to disable A/!R @@ -222,21 +243,8 @@ speech_end: ldx #VIA6522_IER2 jsr ssi263_write_chip -end_interrupt: + rts - pla - tay ; restore Y - pla - tax ; restore X - - pla ; restore A - -ssi_interrupt_smc: - lda $45 ; restore A (II+/IIe) - - plp ; restore flags - - rti ; return from interrupt speech_busy: .byte $00 speech_playing: .byte $00