If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

Ojamajo Doremi ♯

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

Ojamajo Doremi ♯

Developer: Fupac
Publisher: Bandai
Platforms: Sega Pico
Released in JP: March 2000


DebugIcon.png This game has debugging material.
SoundtestIcon.png This game has a hidden sound test.


A game based on the second season of the television show Ojamajo Doremi.

Debug Menu

Acactussayswhat?
Please elaborate.
Having more detail is always a good thing.
Specifically: Can this be cleaned up/rewritten for an audience that may not understand assembly code?

OjamajoDoremiSharp-DebugMenu.png

When reading the page number from the I/O data address, the game compares the read value against a table of known values:

                     page_num_first
                     XREF[2]:     read_page:00003356(*),
                                  read_page:0000335c(R)
00003370 00              ??         00h
                     page_num_values
                     XREF[1]:     read_page:0000335c(R)
00003371 01              ??         01h
00003372 03              ??         03h
00003373 07              ??         07h
00003374 0f              ??         0Fh
00003375 3f              ??         3Fh    ?
00003376 1f              ??         1Fh
00003377 00              ??         00h

Page 5 corresponds to the debug menu handler. However, the comparison function only checks up to address 00003375, due to the cycle counter being set to 5 instead of 6. Therefore, page 5 (value 1Fh) is never returned by the function:

                     read_page
                     XREF[3]:     0000322a(c), 00003272(c),
                                  00003324(c)
00003346 12 39 00        move.b     (IO_PAGE).l,D1b ; read page from memory
         80 00 0d
0000334c 02 81 00        andi.l     #0x3f,D1
         00 00 3f
00003352 70 00           moveq      #0x0,D0
00003354 74 05           moveq      #0x5,D2 ; cycle counter
00003356 43 f9 00        lea        (page_num_first).l,A1
         00 33 70
                     LAB_0000335c
                     XREF[1]:     00003364(j)
0000335c b2 19           cmp.b      (A1)+=>page_num_first,D1b = 01h ; compare and increment index
0000335e 67 00 00 0e     beq.w      LAB_0000336e ; match found, exit cycle
00003362 52 80           addq.l     #0x1,D0
00003364 51 ca ff f6     dbf        D2w,LAB_0000335c ; decrement counter and branch

In practice, when the player opens page 5, the previously open page is kept loaded. We can instead set the counter to 6, so that page 5 can be loaded, by applying the following patch: 00003354 = 74 06.

Menu entries (most are used for loading specific mini-games / scenes):

SOUND TEST
KEY TEST
PG5 TEST
NIKUKUIGAME
HAKOBUGAME
TAKOYAKIGAME
GARD   GAME1
HOUKIRESU POPPU
HOUKIRESU ONNPU
JANNKENN GAME
SYAFFURU GAME
MAJORIKA GAME
POPPU OTUKAI
ISOGE ONNPUTYAN
AIDORU SUTEEGI
DOREMINO MIRUKU
AIKO TO OHURO
ONPU NO UTA
HANA NO KIGENN
POPPU NO RURETO
DOREMI KEKKA
AIKO KEKKA
HAZUKI KEKKA
ONPU KEKKA
POPPU KEKKA
SABISU
GAME OVER
SOUGOU
HAZUKI NO ONETU
HAZUKI NO KOORI
1P KIHON
2P KIHON
3P OKIGAE
HENSINN
(Source: Original TCRF research)

Sound Test

OjamajoDoremiSharp-SoundTest.png

Controls:

Right/Left Increment / Decrement ID
Up/Down Select entry
Red Button Play

Key Test

OjamajoDoremiSharp-KeyTest.png

Pressing a button turns the X marks into O marks. Hold all direction buttons to exit.