A Satellaview research blog.

Ok, kept the updates waiting long enough. Let’s get the wave started.

As usual, I’ve had a long time between updates. I won’t bother making excuses this time, because I got a backlog of stuff to toss up here.

Let me start with the big one, though! … no, wait, ONE of the big ones. Yeah, we got multiple. This article has a lot of technical notes, so the ROM download link will be provided first.


BSゼルダの伝説 MAP 2 第1話 | BS Zelda no Densetsu Map 2 Dai-1-wa
ROM Download

(NOTE: The file name is as it was sent to me. Feel free to rename it to suit your DATs.)

BS Zelda Map 2, episode 1 was redumped.

For reference, the BS Zelda Homepage has had a ROM download of Map 2 up for a while which was sent to them via makuchan. However, that ROM was distributed with several hacks already applied to it, meaning it was not a good preservation ROM for a dat like No-Intro. Many years went by where this unfortunate hacked dump was the best available dump of the ROM.

Now, finally, skaman sent me this dump from sanmaiwashi. This is right from the 8M pack, and is similar enough to the previous hacked ROM that the differences can be spotted immediately. More details are in this BS Zelda Homepage forum thread.

A file comparison in Fhred:

1) 0xc670=50800 to 0xc673=50803 (4 bytes)
2) 0xc675=50805 to 0xc678=50808 (4 bytes)
3) 0xc67b=50811 to 0xc67d=50813 (3 bytes)
4) 0xc67f=50815 to 0xc67f=50815 (1 bytes)
5) 0xffd5=65493 to 0xffd8=65496 (4 bytes)
6) 0xfffc=65532 to 0xfffd=65533 (2 bytes)
7) 0x40055=262229 to 0x4005a=262234 (6 bytes)
8) 0x5bfd3=376787 to 0x5bfd4=376788 (2 bytes)
9) 0xc0b01=789249 to 0xc0b02=789250 (2 bytes)
10) 0xc0b06=789254 to 0xc0b07=789255 (2 bytes)
11) 0xc0b1c=789276 to 0xc0b1d=789277 (2 bytes)
12) 0xc0b3d=789309 to 0xc0b3e=789310 (2 bytes)
13) 0xc0b5e=789342 to 0xc0b5f=789343 (2 bytes)
14) 0xc0b79=789369 to 0xc0b7a=789370 (2 bytes)
15) 0xc0b80=789376 to 0xc0b81=789377 (2 bytes)
16) 0xc0bb5=789429 to 0xc0bb6=789430 (2 bytes)
17) 0xc0bc0=789440 to 0xc0bc1=789441 (2 bytes)
18) 0xc0bd6=789462 to 0xc0bd7=789463 (2 bytes)
19) 0xc0be6=789478 to 0xc0be7=789479 (2 bytes)
20) 0xc0bf6=789494 to 0xc0bf7=789495 (2 bytes)
21) 0xc0c06=789510 to 0xc0c07=789511 (2 bytes)
22) 0xc0c13=789523 to 0xc0c14=789524 (2 bytes)
23) 0xc0c22=789538 to 0xc0c23=789539 (2 bytes)
24) 0xc0c2e=789550 to 0xc0c2f=789551 (2 bytes)
25) 0xc0c35=789557 to 0xc0c36=789558 (2 bytes)
26) 0xc0c3d=789565 to 0xc0c3e=789566 (2 bytes)
27) 0xc0c47=789575 to 0xc0c48=789576 (2 bytes)
28) 0xc0c66=789606 to 0xc0c67=789607 (2 bytes)
29) 0xc0c70=789616 to 0xc0c71=789617 (2 bytes)
30) 0xc0c7b=789627 to 0xc0c7c=789628 (2 bytes)
31) 0xc0c8a=789642 to 0xc0c8b=789643 (2 bytes)
32) 0xc0c9d=789661 to 0xc0c9e=789662 (2 bytes)
33) 0xc0ca6=789670 to 0xc0ca7=789671 (2 bytes)
34) 0xc0cad=789677 to 0xc0cae=789678 (2 bytes)
35) 0xc0cb4=789684 to 0xc0cb5=789685 (2 bytes)
36) 0xc0cc1=789697 to 0xc0cc2=789698 (2 bytes)
37) 0xc0cd2=789714 to 0xc0cd3=789715 (2 bytes)
38) 0xc0ce6=789734 to 0xc0ce7=789735 (2 bytes)
39) 0xc0d04=789764 to 0xc0d05=789765 (2 bytes)
40) 0xc0d13=789779 to 0xc0d14=789780 (2 bytes)
41) 0xc0d1f=789791 to 0xc0d20=789792 (2 bytes)
42) 0xc0d27=789799 to 0xc0d28=789800 (2 bytes)
43) 0xc0d31=789809 to 0xc0d32=789810 (2 bytes)
44) 0xc0d3b=789819 to 0xc0d3c=789820 (2 bytes)
45) 0xc0d43=789827 to 0xc0d44=789828 (2 bytes)
46) 0xc0d50=789840 to 0xc0d51=789841 (2 bytes)
47) 0xc0d5f=789855 to 0xc0d60=789856 (2 bytes)
48) 0xc0d70=789872 to 0xc0d71=789873 (2 bytes)
49) 0xc0d81=789889 to 0xc0d82=789890 (2 bytes)
50) 0xc0d95=789909 to 0xc0d96=789910 (2 bytes)
51) 0xc0db3=789939 to 0xc0db4=789940 (2 bytes)
52) 0xc0dc2=789954 to 0xc0dc3=789955 (2 bytes)
53) 0xc0dce=789966 to 0xc0dcf=789967 (2 bytes)
54) 0xc0dd6=789974 to 0xc0dd7=789975 (2 bytes)
55) 0xc0de0=789984 to 0xc0de1=789985 (2 bytes)
56) 0xc0dea=789994 to 0xc0deb=789995 (2 bytes)
57) 0xc0df2=790002 to 0xc0df3=790003 (2 bytes)
58) 0xc0dff=790015 to 0xc0e00=790016 (2 bytes)
59) 0xc0e0e=790030 to 0xc0e0f=790031 (2 bytes)
60) 0xc0e1f=790047 to 0xc0e20=790048 (2 bytes)
61) 0xc0e28=790056 to 0xc0e29=790057 (2 bytes)
62) 0xc0e31=790065 to 0xc0e32=790066 (2 bytes)
63) 0xc0e56=790102 to 0xc0e57=790103 (2 bytes)
64) 0xc0e70=790128 to 0xc0e71=790129 (2 bytes)
65) 0xc0eb8=790200 to 0xc0eb9=790201 (2 bytes)
66) 0xc0ec6=790214 to 0xc0ec7=790215 (2 bytes)
67) 0xc0ed4=790228 to 0xc0ed5=790229 (2 bytes)
68) 0xc0ee6=790246 to 0xc0ee7=790247 (2 bytes)
69) 0xc0eea=790250 to 0xc0eeb=790251 (2 bytes)
70) 0xc0ef5=790261 to 0xc0ef6=790262 (2 bytes)
71) 0xc0ef9=790265 to 0xc0efa=790266 (2 bytes)
72) 0xc0f07=790279 to 0xc0f08=790280 (2 bytes)
73) 0xc0f1c=790300 to 0xc0f1d=790301 (2 bytes)
74) 0xc0f34=790324 to 0xc0f35=790325 (2 bytes)
75) 0xc0f4a=790346 to 0xc0f4b=790347 (2 bytes)
76) 0xc0f55=790357 to 0xc0f56=790358 (2 bytes)
77) 0xc0f6b=790379 to 0xc0f6c=790380 (2 bytes)
78) 0xc0f7b=790395 to 0xc0f7c=790396 (2 bytes)
79) 0xc0f8b=790411 to 0xc0f8c=790412 (2 bytes)
80) 0xc0f9b=790427 to 0xc0f9c=790428 (2 bytes)
81) 0xc0fa8=790440 to 0xc0fa9=790441 (2 bytes)
82) 0xc0fb7=790455 to 0xc0fb8=790456 (2 bytes)
83) 0xc0fc3=790467 to 0xc0fc4=790468 (2 bytes)
84) 0xc0fcb=790475 to 0xc0fcb=790475 (1 bytes)
85) 0xc0fd2=790482 to 0xc0fd3=790483 (2 bytes)
86) 0xc0fdd=790493 to 0xc0fdd=790493 (1 bytes)
87) 0xc0fe4=790500 to 0xc0fe5=790501 (2 bytes)
88) 0xc0fee=790510 to 0xc0fef=790511 (2 bytes)
89) 0xc0ff9=790521 to 0xc0ffa=790522 (2 bytes)
90) 0xc1008=790536 to 0xc1009=790537 (2 bytes)
91) 0xc2df4=798196 to 0xc2df5=798197 (2 bytes)

Con’s notes about what was changed in the “hacked” ROM:


Most addresses of our “impure rom” simply rewrites bs-x bios registers so that the emulator is able to boot is, like LDA $115808 -> LDA $701808. Your rom crashes on normal emulators, as these bs-x registers (bank $11) are not remapped to bank $70 (sram register).

Other changes:
0xc670:
a9 12 8f f9ff 7f a9 07 8f ff ff 7f… changes the timer to 18:07 so that the game doesn’t freeze immediately.

Then I found a small change in the ingame header
0xffd5:
guess this implements a srm.