Z80߂[͍lMKIII\tgbsOĂ݂悤
ƂłB
Z80̖߂̋@\mȂĂ߂̕ѕFłΖȂƎv܂B
AۂZ80mȂlǂŏ肭ǂ͂킩܂B
^[QbgSEGÃKJ[gbWSʂłB
SGpGGpAT[hp[eB[̃\tgł͈ȉ̕@͂܂g܂B
STEP-0
KSSvC
_œ\Ȃ̂NEZpluĝ݂łB
sȃf[^[ĐƉiv[vɂ͂Ƃ_܂B
f[^[ɂ͕słd܂B
oCiGfB^
@\͕KvłB
BZGfB^gĂ܂B
t@Cc[
oCiGfB^ŎŐoĂǂ̂łA
16384oCgPʂŕł̂ƕ֗łB
͂ӂ̏c[@\gĂ܂B
Z80tAZu
JnAhXwł̂ƕ֗łB
͈ꉞ(mɂmarat̉̕)z80disgĂ܂B
ꂩ̐łz80dis̏o͂g܂B
o͏Ȃ̂Ŗ{͂܂芩߂܂B
C[W
w\tgezoĉB
炭ԍȂ̂\tg̍włB
܂A͂܂WȂ̂łA[U[삵f\tĝ悤ȁA
lbgœ\SMS̃C[Ẅꕔɂ́Aŏɗ]512oCg̃wb_
tĂꍇ̂ō폜ĉB
炩c[̎gpɕtĂ܂\̂ŒӂĉB
t@CTCY16384Ŋ邩ǂŃwb_mFł܂B
STEP-1 SEGA{hCo T_[u[hAE
܂48oCg̃t@CpӂĉB
segakss.hed
0000: 4B 53 43 43 E0 7F 20 40 E0 7F F0 7F 00 00 00 03
0010: F5 E6 80 EE 80 32 00 DE F1 F6 80 32 03 DE C9 00
0020: C3 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00
C[W16384oCg̃ubNɕĂB
ꂼAD3 7FD3 7E܂B
D3 7F(OUT (0x7F),A)D3 7E(OUT (0x7E),A)SN𐧌䂷Ȗ߂łB
D3 7FD3 7Ê͓łꂩ̖߂g܂B
ubNyf[^̉\łB
̐擪ɐقǂsegakss.hedt邾łłĂ܂܂B
̂͂ĂȖڂȂ̂ŒӂĉB
݂̕@ŏ肭mFĂ̂
The Cyber Shinobi(7߂̕ubNyf[^)
T_[u[h(3߂̕ubNyf[^)
܂B
EAScramble Spiritsl炵łB
ɂ邩܂B
STEP-2 SEGAphCo SEGÂقƂǂMKIII\tg
x͋tAZugĉ͂Ă݂܂B
Z80ߎ͓̂ɊoȂĂǂɂȂƎv܂B
܂STEP-1Ŏgpsegakss.hed܂B
.byte 0x4b,0x53,0x43,0x43 ; `FbN'KSCC'
.word 0x7fe0 ; [hAhX(0x8000-0x20)
.word 0x4020 ; [hTCY(0x4000+0x20)
.word 0x7fe0 ; UinitAhX
.word 0x7ff0 ; UplayAhX
.byte 0,0,0 ; gf[^oN͎gpȂ
.byte 3 ; SNGFMUNITgp
L7FE0: PUSH AF ; Uinit
AND #0x80
XOR #0x80
LD (0xDE00),A ; FMUNITgptOݒ
POP AF
OR #0x80
LD (0xDE03),A ; ĐJnȔԍݒ
RET
NOP
L7FF0: JMP 0x8000 ; Uplay(^play:0x8000ɔ)
NOP ; Ȃ 7FFF܂Ŗ߂
...
L8000: ; C[Ẅꕔ
ꂩ̓\tgɂĈقȂA
FMUNITgptOAhX
ĐJnȔԍi[AhX
^playAhX
ׂ邱ƂɂȂ܂B
ꂼ̃AhXׂqg邽߂ɁA
Ƃ肠STEP-1ŐT_[u[hׂĂ݂܂B
z80dis -o0030 -s8000 tdrblade.kss>tdrblade.sz
^play:0x8000ߕӂĂ݂܂B
L8000: EXX ; 8000: D9
L8001: LD A,(0xDE00) ; 8001: 3A 00 DE
L8004: OR A ; 8004: B7
L8005: EX AF,AF' ; 8005: 08
L8006: LD HL,#0xDE0C ; 8006: 21 0C DE
L8009: EXX ; 8009: D9
L800A: LD HL,#0xDE09 ; 800A: 21 09 DE
L800D: LD A,(HL) ; 800D: 7E
L800E: OR A ; 800E: B7
L800F: JR Z,.+0x5D ; L806C ; 800F: 28 5B
L8011: XOR A ; 8011: AF
L8012: LD (HL),A ; 8012: 77
L8013: CALL 0x80E1 ; 8013: CD E1 80
L8016: CALL 0x80FA ; 8016: CD FA 80
L8019: CALL 0x813A ; 8019: CD 3A 81
L801C: CALL 0x8304 ; 801C: CD 04 83
L801F: CALL 0x80B7 ; 801F: CD B7 80
L8022: LD A,(0xDE00) ; 8022: 3A 00 DE
擪EXX߂ƈEX AF,AF'߂ƓڂEXX߂
CALL߂̗SEGAphCo̓łB
܂擪EXX߂̒łFMUNITgptOAWX^ɓǂł܂B
Ƃ肠̃p^[oĂ܂B
Ɍ납ڂCALL߂ŌĂяoTu[`Ă݂܂B
L8304: LD A,(0xDE03) ; 8304: 3A 03 DE
L8307: BIT 7,A ; 8307: CB 7F
L8309: JP Z,0x88CD ; 8309: CA CD 88
L830C: CP #0x90 ; 830C: FE 90
L830E: JP C,0x834C ; 830E: DA 4C 83
L8311: CP #0x9E ; 8311: FE 9E
L8313: JP C,0x837D ; 8313: DA 7D 83
L8316: CP #0xA0 ; 8316: FE A0
L8318: JP C,0x832F ; 8318: DA 2F 83
L831B: CP #0xA3 ; 831B: FE A3
L831D: JP NC,0x88CD ; 831D: D2 CD 88
ŏɋUinitŐݒ肵ȔԍǂݏoWvĂ܂B
LD A,(Ȕԍ)
BIT 7,A
JP Z,0x????
CP #0x??
JP C,0x????
CP #0x??
JP C,0x????
ƂR[hłB
̃p^[oĂ܂B
͂^init̐擪łB
QlESWAT͂܂BSEGÃ\tg̏ꍇl̎菇ƂȂ܂B
8ڂ̃ubN(eswat.007)D3 7Fł܂B
z80dis -s8000 eswat.007>eswat007.sz
܂EXX{ĉB
ESWAT̏ꍇ͐擪ɂ܂BT_[u[hƂقƂǓ悤łB
L8000: EXX ; 8000: D9
L8001: LD A,#0x00 ; 8001: 3E 00
L8003: OR A ; 8003: B7
L8004: EX AF,AF' ; 8004: 08
L8005: LD HL,#0xD00C ; 8005: 21 0C D0
L8008: EXX ; 8008: D9
L8009: CALL 0x8062 ; 8009: CD 62 80
L800C: CALL 0x807B ; 800C: CD 7B 80
L800F: CALL 0x80BB ; 800F: CD BB 80
L8012: CALL 0x8164 ; 8012: CD 64 81
L8015: CALL 0x803D ; 8015: CD 3D 80
L8018: LD IX,#0xD06F ; 8018: DD 21 6F D0
^playAhX̓T_[u[hƓ8000Ƃ킩܂B
FMUNITɂ͑ΉĂȂ悤łB
Ɍ납ڂCALL߂ŌĂяoTu[`Ă݂܂B
AhXȊO̓T_[u[hƂقƂǓ悤łB
L8164: LD A,(0xD003) ; 8164: 3A 03 D0
L8167: BIT 7,A ; 8167: CB 7F
L8169: JP Z,0x854D ; 8169: CA 4D 85
L816C: CP #0x90 ; 816C: FE 90
L816E: JP C,0x81A5 ; 816E: DA A5 81
L8171: CP #0xB0 ; 8171: FE B0
L8173: JP C,0x81CC ; 8173: DA CC 81
L8176: CP #0xB5 ; 8176: FE B5
L8178: JP C,0x818F ; 8178: DA 8F 81
L817B: CP #0xB8 ; 817B: FE B8
L817D: JP NC,0x854D ; 817D: D2 4D 85
ĐJnȔԍi[AhXD003Ƃ킩܂B
segakss.hed̍ĐJnȔԍi[AhXDE03D003ɏ܂B
ʃoCgɗ`Ȃ̂ŒӂĉB
eswat.hed
0000: 4B 53 43 43 E0 7F 20 40 E0 7F F0 7F 00 00 00 03
0010: F5 E6 80 EE 80 32 00 DE F1 F6 80 32[03 D0]C9 00
0020: C3 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00
̃t@Ceswat.007̐擪ɕtΊłB
̂܂܂łǂ̂łAΉFMUNITW͍폜悢ł傤B
eswat_.hed
0000: 4B 53 43 43 E0 7F 20 40 E0 7F F0 7F 00 00 00[02]
0010:[00 00 00 00 00 00 00 00 00]F6 80 32 03 D0 C9 00
0020: C3 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00
lɃt@^V[X^[͂Ă݂܂B
13ڂ̃ubN(ps1-j.012)D3 7Fł܂B
z80dis -s8000 ps1-j.012>ps1-j012.sz
܂EXX߂܂B
L8052: LD A,(0xC000) ; 8052: 3A 00 C0
L8055: OR A ; 8055: B7
L8056: EX AF,AF' ; 8056: 08
L8057: LD HL,#0xC00C ; 8057: 21 0C C0
L805A: EXX ; 805A: D9
L805B: CALL 0x8135 ; 805B: CD 35 81
L805E: CALL 0x815C ; 805E: CD 5C 81
L8061: CALL 0x8466 ; 8061: CD 66 84
L8064: CALL 0x8110 ; 8064: CD 10 81
L8067: LD A,(0xC000) ; 8067: 3A 00 C0
̃\tgłEXX߂͂ЂƂ̂悤łAT_[u[hƎĂ܂B
^playAhX8052AFMUNITgptOAhXC000Ƃ킩܂B
Ɍ납ڂCALL߂ŌĂяoTu[`Ă݂܂B
AhXȊO̓T_[u[hƂقƂǓ悤łB
L8466: LD A,(0xC004) ; 8466: 3A 04 C0
L8469: BIT 7,A ; 8469: CB 7F
L846B: JP Z,0x8000 ; 846B: CA 00 80
L846E: CP #0xA0 ; 846E: FE A0
L8470: JR C,.+0x3D ; L84AD ; 8470: 38 3B
L8472: CP #0xD0 ; 8472: FE D0
L8474: JP C,0x8524 ; 8474: DA 24 85
L8477: CP #0xD5 ; 8477: FE D5
L8479: JP C,0x8490 ; 8479: DA 90 84
L847C: CP #0xDA ; 847C: FE DA
L847E: JP NC,0x8000 ; 847E: D2 00 80
ĐJnȔԍi[AhXC004Ƃ킩܂B
lꂼݒ肵܂B
ʃoCgɗ`Ȃ̂ŒӂĉB
ps1-j.hed
0000: 4B 53 43 43 E0 7F 20 40 E0 7F F0 7F 00 00 00 03
0010: F5 E6 80 EE 80 32[00 C0] F1 F6 80 32[04 C0]C9 00
0020: C3[52 80]00 00 00 00 00 00 00 00 00 00 00 00 00
̃t@Cps1-j.012̐擪ɕtΊłB
APPENDIX-1 FMUNIT&GG-stereo
D3 F0(OUT (0xF0),A)D3 F1(OUT (0xF1),A)FMUNIT𐧌䂷Ȗ߂łB
DB F2(IN A,(0xF2))FMUNITôɎg܂B
D3 06(OUT (0x06),A)GG-stereo𐧌䂷Ȗ߂łB
APPENDIX-2 RpChCo ALESTE
yf[^̂ubN̐擪t߂ɁA
Wve[u̓AhXe[u܂B
ꂩinitplayresetłB
Uinit: PUSH AF ; ????: F5 ȔԍҔ
CALL reset ; ????: CD ?? ??
POP AF ; ????: F1 Ȕԍ
JP init ; ????: C3 ?? ??
ƂR[hߍ߂Ώ肭\܂B
MSX2̃RpC\tgɂ܂B
Wve[u̒fmresetꍇ܂
LD A,#0x80 ; ????: 32 80
CALL fmreset ; ????: CD ?? ??
LD A,#0x01 ; ????: 32 01
CALL fmreset ; ????: CD ?? ??
ȂǂUinitɑgݍ߂FMUNIT邩܂B
.