An educational game for teaching English.
Debug Menu#
When reading the current page number, there's code to jump to an entry of an address table to setup the corresponding page. Right after that address table, there's an unreferenced setup subroutine for a debug menu:
00014e3e 30 39 00 move.w (DAT_00ff06b8).l,D0w ; read current page
ff 06 b8
00014e44 e5 40 asl.w #0x2,D0w
00014e46 20 7b 00 04 movea.l (PTR_LAB_00014e4c,PC,D0w*0x1),A0
00014e4a 4e d0 jmp (A0)
PTR_LAB_00014e4c
XREF[1]: FUN_00004286:00014e46(R)
; table of setup handlers for each page
00014e4c 00 01 f1 ce addr LAB_0001f1ce
00014e50 00 02 cf 30 addr LAB_0002cf30
00014e54 00 03 bb 10 addr LAB_0003bb10
00014e58 00 04 74 5a addr LAB_0004745a
00014e5c 00 05 83 d6 addr LAB_000583d6
00014e60 00 05 83 d6 addr LAB_000583d6
00014e64 00 05 83 d6 addr LAB_000583d6
00014e68 4e b9 00 jsr FUN_000046a6.l ; debug menu setup
00 46 a6
We can replace the address in the last table entry (corresponding to page 6) with address 00014e68, by applying the following patch: 00014e64 = 00 01 4e 68
(Source: Original TCRF research)
Debugger#
Controls:
Down/Up |
Increment / Decrement offset by 0x8 |
Down/Up + Red Button |
Increment / Decrement offset by 0x40 |
Pen Button |
Open tab |
Sprite Debugger#
Sprite entries are initialized based on the last open page. In this example, it was page 1.
Controls:
Down/Up |
Increment / Decrement ID |
Right |
Flip sprite |
Left |
Cycle palette |
Sound Test#
Controls:
Down/Up |
Increment / Decrement ID |
Right |
Play |
Locate Utility#
Tracks the pen position, either on pad or StoryWare.
Controls:
Down/Up |
Select NUM entry |
Left |
Clears stored position data |
Right |
View stored position data for all NUM entries |
Pen Button |
Stores current position in selected NUM entry |