Why does input and sound is broken at specified point? ...Becauase Sound CPU is reset. Resetting Sound CPU is triggerd in the above routine which is executed when boss tank appears. 2ED1: 34 inc (hl) 2ED2: CD 87 33 call $3387 2ED5: 3A 3D C0 ld a,($C03D) 2ED8: DA CF 04 jp c,$04CF 2EDB: 11 47 00 ld de,$0047 2EDE: 21 98 C1 ld hl,$C198 2EE1: 19 add hl,de // hl = $C1DF 2EE2: 7E ld a,(hl) 2EE3: B7 or a 2EE4: CA EB 2E jp z,$2EEB // Sound CPU Reset! 2EE7: D3 00 out ($00),a 2EE9: D3 01 out ($01),a 2EEB: ... The value on $C1DF must be always 0. But if it's not 0, main CPU calls to reset sound CPU. Where does $C1DF is set? ...It's in the following routine on main CPU. 0E54: 3A E7 C1 ld a,($C1E7) 0E57: 2A E5 C1 ld hl,($C1E5) 0E5A: 95 sub l 0E5B: 86 add a,(hl) 0E5C: 32 E7 C1 ld ($C1E7),a 0E5F: 23 inc hl 0E60: 22 E5 C1 ld ($C1E5),hl 0E63: 01 01 40 ld bc,$4001 0E66: 09 add hl,bc 0E67: D0 ret nc 0E68: 22 E5 C1 ld ($C1E5),hl 0E6B: 7D ld a,l 0E6C: 21 E7 C1 ld hl,$C1E7 0E6F: AE xor (hl) 0E70: 77 ld (hl),a 0E71: C8 ret z // Write 0x37 into $C1DF 0E72: 21 A8 C1 ld hl,$C1A8 0E75: 06 00 ld b,$00 0E77: 0E 37 ld c,$37 0E79: 09 add hl,bc 0E7A: 71 ld (hl),c 0E7B: C9 ret This routine is... In-game ROM checker!! $C1E5 (2 bytes) is current address on ROM and $C1E7 is calculated value. This routine starts after player helicopter takes off and finish checking after read $BFFF (0xBFFF + 0x4001 = 0), it's around first part of Area 4. And if total calculated value is not 0, stored 0x37 into $C1A8 as ROM error. I attach 4 state save files for tigerh which are saved on 0.128u4. And I have confirmed these routine on tigerhj, tigerhb1, tigerhb3. In tigerhb2... 2EDB: 11 47 00 ld de,$0047 2EDE: 21 98 C1 ld hl,$C198 2EE1: 19 add hl,de 2EE2: 7E ld a,(hl) 2EE3: B7 or a 2EE4: CA EB 2E jp z,$2EEB 2EE7: AF xor a 2EE8: 00 nop 2EE9: 00 nop 2EEA: 00 nop 2EEB: ... Resetting sound CPU is killed so that this problem never happens.