Z80߂[͍lMKIII\tgbsOĂ݂悤
ƂłB

Z80̖߂̋@\mȂĂ߂̕ѕFłΖȂƎv܂B
AۂZ80mȂlǂŏ肭ǂ͂킩܂B

^[QbgSEGÃKJ[gbWSʂłB
SGpGGpAT[hp[eB[̃\tgł͈ȉ̕@͂܂g܂B



STEP-0 



  KSSvC
    _œ\Ȃ̂NEZpluĝ݂ł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\tĝ悤ȁA
    lbgœ\SMS̃C[Ẅꕔɂ́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 7Ê͓łꂩ̖߂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 SEGÂقƂǂ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[Ẅꕔ

  ꂩ̓\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͂܂BSEGÃ\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ΉFMUNIT֌W͍폜悢ł傤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))FMUNITôɎ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



