![]() |
Routines |
| Prev: CB95 | Up: Map | Next: CD6F |
|
Manually write "
JP Handler_Interrupts" at AliasInterruptRedirect.
|
||||
| GameEntryPoint | CD14 | LD HL,$FEFE | HL=AliasInterruptRedirect. | |
| CD17 | LD A,$C3 | Write C3 which is the opcode for the "JP" instruction to *HL. |
||
| CD19 | LD (HL),A | |||
| CD1A | INC HL | Increment HL by one. | ||
| CD1B | LD A,$69 | Write 69 to *HL. | ||
| CD1D | LD (HL),A | |||
| CD1E | INC HL | Increment HL by one. | ||
| CD1F | LD A,$FE | Write FE to *HL. | ||
| CD21 | LD (HL),A | |||
|
All will become clear soon...
|
||||
| CD22 | LD HL,$F400 | Write FE to 0104 bytes, starting from InterruptLowOrderByteJumpTable. | ||
| CD25 | LD BC,$0104 | |||
| WriteInterruptJumpAddress | CD28 | LD A,$FE | ||
| CD2A | LD (HL),A | |||
| CD2B | INC HL | |||
| CD2C | DEC BC | |||
| CD2D | LD A,B | |||
| CD2E | OR C | |||
| CD2F | JR NZ,WriteInterruptJumpAddress | |||
| CD31 | LD BC,$0000 | Write 0000 to: | ||
| CD34 | LD ($FFFE),BC | |||
| CD38 | LD ($FFFC),BC | |||
| CD3C | LD ($FFFB),BC | |||
| CD40 | DI | Disable interrupts. | ||
| CD41 | LD HL,$FA00 | Write MelodyData_ThemeTune to *MusicPointerThemeMusic. | ||
| CD44 | LD ($FFF9),HL | |||
|
This sets interrupt mode 02; when the system generates an interrupt, it'll use the high-order byte set here, together with a low-order byte generated from the system to form a 16-bit address to jump to.
As we've just set FE to every address, this means that every generated interrupt will jump to AliasInterruptRedirect, which in turn will jump to Handler_Interrupts.
|
||||
| CD47 | LD A,$F4 | Set F4 as the high-order byte in I. | ||
| CD49 | LD I,A | |||
| CD4B | IM 2 | Set interrupt mode 02. | ||
| CD4D | LD A,$03 | Write 03 to: | ||
| CD4F | LD ($FFF7),A | |||
| CD52 | LD ($FFF8),A | |||
| CD55 | EI | Enable interrupts. | ||
| CD56 | LD HL,$A06C | HL=Graphics_MaskSprite. | ||
| CD59 | LD B,$80 | B=80. | ||
| CD5B | XOR A | Write 00 to *HL. | ||
| GameEntryPoint_0 | CD5C | LD (HL),A | ||
| CD5D | INC HL | Increment HL by one. | ||
| CD5E | DJNZ GameEntryPoint_0 | Decrease counter by one and loop back to GameEntryPoint_0 until counter is zero. | ||
| CD60 | EXX | Switch to the shadow registers. | ||
| CD61 | PUSH HL | Stash HL' on the stack. | ||
| CD62 | EXX | Switch back to the normal registers. | ||
| CD63 | XOR A | Write 00 to *DF_SZ. | ||
| CD64 | LD ($5C6B),A | |||
| CD67 | LD A,$02 | A=02. | ||
| CD69 | CALL $1601 | Call CHAN_OPEN. | ||
| CD6C | JP DisplayIntroductionScreen | Jump to DisplayIntroductionScreen. | ||
| Prev: CB95 | Up: Map | Next: CD6F |