
 MoonDriver ver 150402 by BouKiCHi

MoonDriverƂ́H

@MSX̃TEhJ[gbWłAMoonSound(OPL4)𐧌䂷hCołB
@tMMLRpCgp邱Ƃō쐬f[^Đł܂B
  (KvMain RAMTCY 128Kbytesȏ)

---------------

MoonDriverpR}hꗗ

 VOP - {[OPݒ   : {[̒l𔽉fOP̑I(OPL3)
 OPM - 4OP[hXCb`  : Reg.$104̒l(OPL3)
 TVP - TVP             : Reg.$BD̏3bit(OPL3)
 OPB - OPBASE           : W/WXR}h̃Iy[^x[XAhX(OPL3)
 FB  - FB                : FeedBack̐ݒ(OPL3)
 DR  - Drum              : Reg.$BD̉5bit(OPL3)
 WX  - Load 2OPs         : 2OPݒs(OPL3)
 W   - Load 4OPs         : Fݒ(OPL4)/4OPݒs(OPL3)
 P   - p              : pݒ(OPL4)/bit1 = R, bit0 = L(OPL3)
 j   - Wv           : wʒu܂ŃWv(s)܂
 `   - hZbg        : h̃rbgZbg܂(OPL3)
 y   - WX^o        : WX^o͂܂(OPL3)
 DN  - hm[g        : h̃m[gݒ肵܂(OPL3)
 yo  - ItZbgo      : ItZbgtAhXw̃WX^o͂܂(OPL3)
 
gp@

@MDRV.COM  MOON.BIN ́AMSX-DOSœ삷oCiłB
@
@JgfBNgɋȃt@CMOON.BINAMDRV.COMuA
@MSX-DOSŁA
@>MDRV SONG.MDR
@Ɠ͂邱ƂōĐł܂B

@f[^쐬́AWindowsōsƂł܂B
@
@:songsfBNgŁA
@make_mdr data
@ƂƁAdata.mmldata.mdrɃRpC܂B


`

@ppmckcƂقړłAǉꂽ`܂B

@Fe[u̒`(OPL4)
  @TONE<n> = { } 
  
@KƂɈقȂg`蓖Ă̂ŁA
@Kx[XɃe[u쐬܂B

@ttone.exeɂĉFe[u̒go͂ł܂B

@f[^͎̏Ԃŕł܂B

@@ŒቹKAōKAFAsb`RNgA
@@LFO & VIB, AR & D1R, DL & D2R, RC & RR, AM

@(sڂOPL4eWX^ɑΉ)


  #EX-OPL3
@OPL3LtOłBOPL3̎gp錾܂B

@#OPL4-NOUSE
@OPL4g`tOłB
@̒`LqĂꍇAOPL3p[ggbNAJnA
@hCo̕Sy܂B(OPL4L̓gbNaJn܂)

@@OPL<n>
@OPL3̃Iy[^e[ułB
@F`tH[}bg͈ȉ̒ʂɂȂ܂B

----------------
@OPL0 = {
;FB ST VOP
0, 0, 0,

;\
0, 0

;TR VI SU KSR MUL KSL OL AR DR SL RR WF
0 ,0 ,0 ,0  ,1  ,0  ,2 ,5 ,4 ,5 ,5 ,0,
0 ,0 ,0 ,0  ,1  ,0  ,8 ,5 ,2 ,4 ,8 ,0,
0 ,0 ,0 ,0  ,0  ,0  ,0 ,5 ,5 ,5 ,5 ,0,
0 ,0 ,0 ,0  ,0  ,0  ,0 ,5 ,5 ,5 ,5 ,0
}
----------------
@l̏ڍׂ͌q܂B
@ӁFo[W̉F`TVP͖łB\Ƃ0ĂB

@#PCMFILE(J)
@ĐɃhCoǂݍރ[U[`PCM̃t@Cw肵܂B

@:#PCMFILE USERPCM.PCM

@:DOSł邽߁A8.3t@CŎw肷Kv܂B

R}h

@ppmckcƂقړłA̃R}hǉĂ܂B
@
@VOP<n> {[OPI
@
@VOP̓{[R}h(܂̓Gx[v)Őݒ肷Iy[^ύX܂B

 l̉4bitLŁA
 xxxx4321
 ƂȂAl̓Iy[^ԍĂ܂B

 :3Iy[^{[ωɂ

@@ VOP4

 2:2,4Iy[^{[ωɂ

@@ VOP10

 (10 = $0a = %00001010Ɠ)

 {[̊֌W͎̒ʂB

 ő : v63 = @OPLOLƓ
 ŏ : v(@OPLOLl)

  : OL = 12, MAX = v63, MIN = 12
i{[ŏlȉ̏ꍇׂ͂čŏ)

@P - PANR}h($f0) (OPL3/OPL4)
@
@OPL3ɂ͉4bitDCBÅe`l̗LtOɂȂ܂B

@OPL4ɂ́A0𒆐SƂ17܂ł`lA
@159܂łE`l̉ʌɂȂ܂B
@8̓~[gɂȂ܂B

  M - LFOXCb`($ef) (OPL4)

  M1LFOIAM0LFOItɂȂ܂B
@LFOɊւf[^@TONEŒ`Ă܂B

@W - g`؂ւ($f1) (OPL3/OPL4)

@W<n>Ŕg`؂ւ܂B
@nOPL4ɂ@TONE<n>̔ԍƓɂȂ܂B
@nOPL3ɂ@OPL<n>̔ԍƓɂȂ܂B
@
  DA<n> - _vijXCb`($eb)

  n = 0offAn = 1onɂȂ܂B

  RV<n> - [o[uXCb`($ea) (OPL4)

  n = 0offAn = 1onɂȂ܂B

  & - X[

@X[ɂ̓NI^CY(q)ɂȂ܂B
@
@j - Wv
@
@w莞Ԃ܂ős܂BL[Is܂B
@
@` - hZbg (OPL3)
@
@Y[h̃h̃rbgZbg܂B

@:`[BSMCH][]
@B = BD / S = SD / M = TOM / C = TC / H = HH
@*BSMCH͓w
@̓ftHgł0łB


  y - WX^o($f5) (OPL3)
  
  WX^̒ڏo͂s܂B
  
  :y<addr, data>
  :y$260, $ff

  R}ĥ͎悤ɂȂ܂B
  $f5, <addr_lo>, <addr_hi>, <value>
  
  AhX̏8bit͎̒ʂłB
  $00 : ݂̃`lɉWX^(gbNL A-I = \, J-R = )
  $01 : \WX^
  $02 : WX^

  DN - hm[g (OPL3)
  
  h̃m[g(Fnum/BLK)ݒ肵܂

@:DN[BSMCH]<m[g>
@
@* vrAqR}hȂǃRpCŃm[gƃEFCgɕϊ@\ɂ͒ӂKvłB

  yo - ItZbgtWX^o (OPL3)
  
  AhXɃItZbgWX^̒ڏo͂s܂B
  ̃R}h͓yR}h($f5)ɕϊ܂B

  :yo<addr, data>
  :yo$b0, $22

  ItZbg݂͌̃gbNɌvZ܂B
@̂悤ɕϊ܂B
  :B yo$b0,$22
  -> y$1b1,$22

  :L yo$b0,$22
  -> y$2b2,$22

  AhXAȉ͈̔͂ł͎̂悤ȕϊs܂B
@E(addr >= 0x20 && addr < 0xa0)
@E(addr >= 0xe0 && addr < 0x100)

@AhX=AhX+((gbNԍ/3)*8) + (gbNԍ % 3)
@* ɂ_؂̂

OPL3gbNL̐

@2OP[h̃gbNL
@"ABC DEF GHI JKL MNO PQR"
@18łB
@
@Y[h"GHI"3gbNYƂĎg܂B

@Ŝ̂A64OP[hɕύX\ŁA"ABC JKL"4OP[hƂĎgA
@"DEF MNO"gps\ɂȂ܂B

@OPL4Ƃ̓gpłׂ͂ďɂȂ܂B

R}hꗗ
| R}hꗗ | ԍ | Ӗ |
| VOP, RV | $EA | {[OPݒ(OPL3)/[o[u(OPL4) |
| DA | $EB | DAMPXCb`(OPL4) |
| OPM | $EB | RlNVZN^(Reg.$104)̐ݒ |
| OPB | $E6 | Iy[^x[XAhX(W/WXɗp) |
| WX  | $E5 | 2IyFݒ |
| TVP | $E4 | TVP̐ݒ |
| DR | $F2 | h |
| FB | $E3 | FeedBack̐ݒ |
| W | $F1 | 4OPFݒ |
| j | $E2 | wʒu܂ŃWv |
| ` | $E1 | hZbg |
| DN | $E0 | hm[g |

TVPɂ

Reg.$BD̏3rbg
DAM, DVB, RYT3rbgݒ肷

F`(@OPL)̎

FB ST 
TR VI SU KSR MUL KSL OL AR DR SL RR WF

ꂼ̒l͎̂悤OPL3֏܂܂B

Reg.$C0 =
((FB & 0x07) << 1) | 
((ST & 0x02) >> 1)

Reg.$C0 + 3 =
((ST & 0x01))

*[vJn(Reg̓x[XAhX)
Reg.$20 = 
((TR & 1) << 7) |
((VI & 1) << 6) |
((SU & 1) << 5) |
((KSR & 1) << 4) |
(MUL & 0x0f)

Reg.$40 =
((KSL & 3) << 6) |
(OL & 0x3f)

Reg.$60 =
((AR & 0x0f) << 4) |
(DR & 0x0f)

Reg.$60 =
((AR & 0x0f) << 4) |
(DR & 0x0f)

Reg.$80 =
((SR & 0x0f) << 4) |
(RR & 0x0f)

Reg.$E0 =
(WF & 0x07)

Iy[^[vBWWXł̓[v񐔂قȂB

_Ŏgp\MoonDriver̋@\

@sb`Gx[vA{[Gx[vA
@m[gGx[vAn[hEFALFOA
@f`[A_vijA[o[u
@X[AoN؂ւ

̃\tgEFA

@e\tgEFA̒쌠͕ʂɂ܂B
@pceas  - Magic kitBf[^̍쐬ɎgpĂ܂B
@tone   - ٍ̉Fe[uo̓vO
  mmckc  - ppmck release9ppmckcx[Xɉ́B

CZX

@vÔ̗̂pɊւ郉CZXłB

@EvO𗘗pʂƂċN邠錻ۂɑ΂āA
@@҂͈ؕۏႢ܂B

@Eώɂ͒҂̕\ȂƁB

[Xm[g
ver 150402
#PITCH_CORRECTIONgpɃf`[
sb`Gx[ṽf[^𔽓]悤ɂB
@OPLVOP̐ݒǉB 

ver 150324
 OPL3F`STp[^̒`CB

ver 150318
 RpC̃X[CB

ver 150311
 yoR}hɃAhXϊ@\̒ǉsB

ver 150303
 PCMFILE`̒ǉB
 yoR}h̒ǉB
 hLgXVB

ver 150301
 OPL3Fnume[u̍XVB
 hFnumftHglύXB
 R}hǋLB
 MDRV.COMMOON.BINǂݏo悤ɂB

ver 150227
 yR}h̎B
 hm[gR}h̎B
 hZbgR}h̃oOCAFnumݒs悤ɂB

ver 150224 hLgTVPR}ȟ뎚CB
 WvR}hCB
 p̐ݒgvZł͂ȂPANR}h͉Fݒ莞ɍs悤ɂB
 āAKvŒɂB
 WX^ݎ̃EFCg폜B
 hZbg@\ǉB

ver 150223 Wv@\̒ǉBTVP̉Fł̐ݒp~B
ver 150202 hCo𕪗ł悤ɂB
ver 070701 @ɑΉ悤߁B
ver 070528 OPL3ǉ
ver 070513 DA,RVR}hǉBs[g̏CB
ver 070505 Ŕzz
