rfk e`p

PDrfkeNjbNW
@P|P@@XN[܂\łȂꍇ̃`FbN@
@P|Q@@eNX`e[u̕ύX@
@P|R@@`揈Pʎw̕ύX@
@P|S  @|[Yiꎞ~ĵ
@P|T@@풓A풓vO̍쐬@ɂ

QDrfk֐̎gp̒
@Q|P@@XvCg\֐p̃Agr[ge[uɂ
@Q|Q@@slLookAt֐̎gp̒
@Q|R@@slDispSprite֐̎gp̒
@Q|S@@slPutSprite֐̎gp̒
@Q|T@@slSlaveFunc֐̎gp̒
@Q|U@@sl16MapRA֐̎gp@ɂ
@Q|V@@rfk̂bcCuɂ
  Q|W@@slScrAutoDisp֐̎gp̒
@Q|X@@slLight֐̎gp̒
@Q|PO@slPutPolygon֐slPutPolygonS֐ɂ
@Q|PP@slCurWindow֐ɂ

RDrfk̓ɂ
@R|P@@rfkŎgpĂ銄荞݂ɂ
@R|Q  @rfkŎgpĂn[hEFAfoCXɂ
@R|R@@rfkł̎Oϊɂ
@R|S@@rfk̃|S\[`̏@ɂ
@R|T@@̂߂̃f[^e[uɂ
@R|U@@rfkZ\[gZf[^obt@ɂ
@R|V@@}X^CPUƃX[uCPUԂ̃f[^̎󂯓nɂ
@R|W@@TEhRg[ɂ

SDrfk̃guV[eBO
@S|P  XvCg^|S̎cۂ̑Ήɂ



PDrfkeNjbNW
P|P@XN[܂\łȂꍇ̃`FbN@
@SGL̓VXeϐVDP2̃WX^eҔ̈ 60FFCC0Ԓnp
Ă܂B̓êقƂǂ VuN̏VDP2WX^ɕʂĂ܂B
  VDP2̃WX^͏ݐpŃ[Uݒ肵lQƂłȂ߁A\ł
ȂƂ߂ɂ̂łÄ̗QƂ邱ƂVDP2̃WX^ɑ
Ăǂ̂悤Ȑݒ肪Ă̂킩܂B
@fobOɂ̗͂̈QƂĂۂ̌˂~߂邱Ƃɗp
B

P|Q@eNX`e[u̕ύX@
@slinitSystem֐œo^eNX`e[uvOŕύXꍇ
ȉ̂悤ɍs܂B

@@extern TEXTURE *FormTbl;  /* VXeϐ(System Work) */
@@extern TEXTURE *textbl2;  /* ύXeNX`e[u  */
            :
    FormTbl = textbl2;        /* z̓o^ */
    

P|R@`揈Pʎw̕ύX@
@slinitSystem֐œo^`揈PʂłAvOŕύX
ꍇ͈ȉ̂悤ɍs܂B
@
@@extern Sint8 SynchConst;  /* VXeϐ(System Work) */

    SynchConst = ύXl;

yӁz
@Ver1.3VDP1̕`I҂t[`FWiinit.docQƂ̂ƁjT|[
gɂÃt[`FW̕ύXi̋t̏ꍇj̍ۂɂ́Aϐ
̕ύXOɈȉ̊֐̎sKvłB
@@
@̃t[`FWVDP1̕`I҂t[`FW̕ύX
@@@extern Sint8 SynchConst;  /* VXeϐ(System Work) */

  @@slInitSystem( .. , .. , 2 );
             :
@@@slDynamicFrame(ON);
    @SynchConst = 2;

@VDP1̕`I҂t[`FW̃t[`FW̕ύX
@@@extern Sint8 SynchConst;  /* VXeϐ(System Work) */

  @@slInitSystem( .. , .. , -2 );
             :
@@@slDynamicFrame(OFF);
    @SynchConst = 2;

P|S  |[Yiꎞ~ĵ
@PauseFlag ϐZbg邱ƂɂAXN[AXvCg̃f[^]
~ł悤ɂȂ܂B
  ȉɊerbg̈Ӗ܂B
    _SysPause : SGLɂ͉e̖rbgłB[U|[Ył邱Ƃm邽
                ߂Ɏgp܂B
    _ScrPause : XN[̃f[^]s܂B
    _SprPause : XvCg(|S)f[^̓]s܂B

@̕ϐ𗘗păAvP[VŃ|[Yiꎞ~jԂǗ邱Ƃ
܂B
@  extern Sint8 PauseFlag;
  
    if(PadPush & PER_DGT_TS) {
        PauseFlag ^= _SysPause | _SprPause;
    }
    if(PauseFlag == 0) {    /* Cxggp */
        slExecuteEvent();
    }

P|T@풓A풓vO̍쐬@ɂ
@vOf[^傫ȂAT^[̃ɂׂĂȂꍇAf[
^͎̂gpf[^݂̂炩ߓǂݍłĂƂ@Ƃ邱
ł܂AvȌꍇ̓I[o[CȂǂ̎@ƂKv܂B
@Â悤ȋ@\풓ĂȂ̂ŁAvOł̍HvƃP[W
GfB^̋@\gpčsKv܂B
@ȉɈƂĎ܂̂ŎQlɂĂB

iPj풓vO̍쐬
@풓vÓAŒt@C̓ǂݍ݂⋤ʂɎgp郉Cuu
ƂĎgp܂B
@菇ƂẮACD-ROM풓vOw̃AhXɓǂݍ݁Aȉ2
̕@̂ǂ炩ł̔풓vOs܂B

@(a) wAhXĂяo@
@@풓vOsAhX炩ߋLqĂA풓vO
@ǂݍ񂾌ÃAhXs܂B

@@vŐLq၄
    @@fid = GFS_NameToId((Sint8 *)fname); /* fname͔풓vO */
  @  @GFS_Load(fid, 0, 0x6080000, GFS_BUFSIZ_INF);

@@@/* JnAhX͔풓vÕ}bvt@C擾 */
@@@@((volatile void (*)())(0x6081000))();@
  @vÕN̐錾
    @@GCC -m2 -Xlinker -Tkernal.cof -Xlinker -e -Xlinker ___Start ....

@@̗̏ꍇA풓vO̎sJn֐̃AhXςꍇA
@vO̍ăRpCKvɂȂ܂B

@(b) O錾Ŋ֐`ĂAN-defsymIvVŊO錾
@@ɑ΂ăAhXݒ肵܂B֐̎śA풓vOǂݍ
@@As܂B

  @vŐLq၄
        extern void SUB_main1( void );
        #define SUB_ADDR    0x06080000
@@@@
        void main( void ) 
        {
         @@   :
        /* 풓vÕ[h */
            buf[0].type = CDBUF_COPY;
            buf[0].trans.copy.addr = (Uint32)SUB_ADDR;
                  :
            slCdLoadFile();
        /* 풓vO̎s */
            SUB_main1();
       @@     :
      @@}
  @vÕN̐錾
          GCC -m2 -Xlinker -defsym -Xlinker _SUB_main1=0x06081000 \
             -Xlinker -Tkernal.cof -Xlinker -e -Xlinker ___Start ....

@@풓̎sJn֐̃AhXsɂȂ܂̂ŁAxɃAhX
@肵āA풓vO쐬A̔풓̃}bvt@C{̎
@sJnAhX擾čēxAhXݒ肵ăNKvꍇ
@܂B

iQj풓vO̍쐬@
@풓vÓAɎgpvOf[^ł͂ȂAႦ΃Xe[WP
ʂłgpȂvOs悤ɂ܂B풓vO͕
Ă\܂񂪁Aȉȓ_ɒӂč쐬ĂB

@(a) vO~O̒
@@IuWFNgt@Cɏ풓Ɠ֐ō쐬Ȃ悤ɒӂăvO
@~O܂BiႦ΁Amain֐ȂǂԂ\܂Bj

@(b) 풓̓ǂݍݎ̒
@@풓̃X^[gAhX풓̓ǂݍ݊JnAhXƓAhXɐ
@肵ĂB
  
@(c) 풓vÕ}bv̎󂯓n
@@풓쐬ƂɃJ-RIvVw肵ď풓̎st@C
@iƂKernal.COFjw肵܂B
@@@@@GCC -m2 -Xlinker -R -Xlinker kernal.cof@.....
@@̎wɂA풓̃V{𒊏oĔ풓vOɑgݍ݂܂B
@gp郉Cu풓ƓlɃNĂ֐݂ꍇ́A-R
@w肵COFFt@C̏D悵܂B

iRj풓Ăяo풓̎sJnAhX̍ēo^
@풓vO쐬A}bvt@C풓Ăяo֐̃Ah
X𒲂ׂāAN -defsymIvVōēxsJn֐̃AhXĐݒ
܂B
@łɏ풓vO쐬̃AhXƓꍇ͍sKv͂܂B


QDrfk֐̎gp̒
Q|P@XvCg\֐p̃Agr[ge[uɂ
  slPutSprite֐AslDispSprite֐ŎgpAgr[ge[úA|S
p̂̂ƂقړłA擪̂Q̃f[^ȂȂĂ܂B
  Cł̃e[u쐬ꍇASPR_ATTR^錾ĂASPR_ATTRIBUTE
}Ngp邱Ƃł܂B
 () SPR_ATTR attr_AM2Logo = {
	      SPR_ATTRIBUTE(PN_AM2_Logo,CL_AM2_Logo,No_Gouraud,
	      Window_In|ECdis,sprNoflip|_ZmCB)
	  };

  _ZmCB ̓|WVXvCĝǂ̈ʒuww肷̂ŁA
ȉ9`Ă܂B
        _ZmLT    _ZmCT    _ZmRT
           +-------+-------+
           |       |       |
     _ZmLC +----_ZmCC------+ _ZmRC
           |       |       |
           +-------+-------+
        _ZmLB    _ZmCB    _ZmRB

Q|Q@slLookAt֐̎gp̒
  slLookAt ֐ł xƕsɂȂ悤Ȏ͍쐬ł܂B
i^A^悤ȏꍇɂ́Aw邢͂yɂ炵ĉj
@JݒꍇA slLookAt֐gpꍇƁAslTranslate֐
slRot?֐Ƃgݍ킹ĎgpꍇƂgĉB
  Ⴆ΁AvC[̔s@猩ʂ쐬ꍇɂ́Aȉ̂悤ɂ
B
	slRotX(-plptr->ang[X]) ;
	slRotY(-plptr->ang[Y]) ;
	slRotZ(-plptr->ang[Z]) ;
	slTranslate(-plptr->pos[X] , -plptr->pos[Y] , -plptr->pos[Z]) ;

  ܂AŒJ̎Ԃǂꍇɂ́Aȉ̂悤ɂ܂B
	slLookAt(cmptr->pos , tgptr->pos , toFIXED(0.0)) ;

Q|R@slDispSprite֐̎gp̒
@slDispSprite֐ ŃXP[ 1.00w肵ꍇAG1hbg傫
\܂B
  ̓n[hEGAw肵\TCY1hbg傫\Ă܂߂
Aꍇɂ XP[ 0.99999 w肵ĉB̒ĺA
SL_DEF.H  ORIGINAL Ƃ}Nɂ`Ă܂B

Q|S@slPutSprite֐̎gp̒
  slPutSprite֐Ń|WVɑ傫Ȓlw肷ƃI[o[t[āAʊO
XvCg\Ă܂ꍇ܂B
@slTranslate֐Ƒgݍ킹AslPutSprite ֐ɓn|WV傫ȂȂ
悤ɒӂĉB

Q|T@slSlaveFunc֐̎gp̒
@slSlaveFunc֐Ŏs֐ł̓}X^[CPU̕ϐ邱Ƃ̂Ȃ
ɒӂĉBꍇɂ͕K}X^[CPUŁALbV
p[WijĉB܂AX[uCPUɑ΂ăt@NV𔭍s
悤Ȋ֐iXvCgRg[֌Wj͎sȂŉB

Q|U@sl16MapRA֐̎gp@ɂ
@scroll.docɖLĂ܂Asl16MapRA֐ɓny[Wio[̃e[u
ۂVRAMƍvĂȂ߂ɐ삵ĂȂꍇ悤łB
  sl16MapRA֐, sl16MapRB֐ł̓e[uɓĂy[Wio[VRAM̐
琔ʂԍɂȂĂ̂ƂāAe[u0Ԗڂ̗vf0x800{A
̒lAhXƂēo^܂B
@Ⴆ΁A
    #define    RBG0_CEL_ADR    (VDP2_VRAM_A0)
    #define    RBG0_MAP_ADR    (VDP2_VRAM_B0)
    #define    RBG0_COL_ADR    (VDP2_COLRAM)
    #define    RBG0_KTB_ADR    (VDP2_VRAM_A1)
    #define    RBG0_PRA_ADR    (VDP2_VRAM_A1+ 0x1fe00)
Ƃ̂悤ɁAVRAM-B0oNɃp^[l[ꍇAe[uɂ128,132,
136...Ƃlݒ肳Ȃ΂Ȃ܂B(0,4,8...Ƃf[^Zbg
P[X悤ł)
    #define@@MAPOFFSET  (RBG0_MAP_ADR-VDP_VRAM_A0)/0x800
    #define    DD    4+MAPOFFSET
    Uint8    map[16] = {
         0*DD, 1*DD, 2*DD, 3*DD,
         4*DD, 5*DD, 6*DD, 7*DD,
         8*DD, 9*DD,10*DD,11*DD,
        12*DD,13*DD,14*DD,15*DD,
    };
    #undef    DD
    sl16MapRA(map);

@L̂悤ȕ@Őݒ肷΁Aݒ肷邱Ƃł܂B

Q|V@rfk̂bcCuɂ
@SGLł́ACD-ROMANZX郉CuƂāAslCdxxxx֐pӂĂ܂A
܂荂xȎg͂ł܂BCinepakCuMPEGCuATrueMotion
gpꍇ́At@CVXeCu(GFS_xxxx֐)Xg[Cu
(STM_xxxx֐)gp悤ɂĂB̃CúASGLŒ񋟂Ă
LIBCD.Aɑgݍ܂Ă܂B

Q|W@slScrAutoDisp֐̎gp̒
@slScrAutoDisp֐́A\XN[ʂ̓o^TCNp^[e[u
Iɍ쐬֗Ȋ֐łAׂẴP[XɑΉł֐ł͂܂B
̊֐ŏo͂TCNp^[e[ũf[^́AfobOɕK`Fb
NāAeɉďC悤ɂĂB
@slScrAutoDisp֐Őݒ肳ꂽTCNp^[e[uSGL̃VXeϐ̈
(060FFC00Ԓn)0x0D0`0x0x0DF܂ł̗̈Ɋi[Ă܂B

Q|X@slLight֐̎gp̒
@SGL̃`[gA}jAɁAslLight֐w莞ɃJg}gNXɃX
P[삪ĂꍇAvZɍsȂꍇƋLqĂ
܂BiSGL REFERENCE}jA slLight̍ɂLځj
@SGĽvŹAxNgƊe|S̖@xNgƂ̓ϒlɋP
xvZsȂĂ܂BXP[l傫鎖ŁAe|S̖@xNgg
債Ă܂܂Bׁ̈Ae|S̋PxȂȂAÄ̗ɗ}Ƀ|
SÂȂĂ܂ꍇ܂B
@̑ΉƂāAXP[OہA̕xNgɑ΂ĂXP[
O邱ƂɂΉ邱Ƃ\łB
@Ⴆ΁AXP[lP̎Ɠľʂ𓾂ɂ́A
@@@̖@xNg n:( nx, ny, nz )
@@@XP[Ol   m:( mx, my, mz )
@@@xNg     l:( lx, ly, lz )
ƂAXP[|Ȃ̖@xNgƌ̕xNgƂ̓ς́A
  @@I1 = nx * lx + ny * ly + nz * lz
ƂȂAXP[|A
  @@n:( mx * nx, my * ny, mz * nz )
ƂȂ܂B
@xNgɉ{ȂA
@@  I2  = mx * nx * lx + my * ny * ly + mz * nz * lz
@@     != I1
ƂȂAl1Ƃ͓ϒlĂ܂܂B
@̑Ή邽߂ɁAxNg̊eXP[OlŊ܂B
@@@l:( lx / mx, ly / my, lz / mz  )
@Ɠς́A
@@@I3 = mx * nx * lx / mx + my * ny * ly / my + mz * nz * lz / mz
@@@@ = nx * lx + ny * ly + nz * lz
@@@@ = I1
ƂȂAl1ƓϒlɂȂ܂B
@vOɓKpƁAL̂悤ȃvOɂȂ܂B
၄
    extern FIXED MsLightVector[ XYZ ]; /* SGĽ(VXeϐ) */
    typedef struct {
        FIXED pos[XYZ];
        ANGLE ang[XYZ];
        FIXED sca[XYZ];
        MATRIX base;
    } CAMERA;
    static CAMERA cam;

    void main( void )
    {
        FIXED UnitLight[ XYZ ];
        FIXED CurrentLight[ XYZ ];

        slInitSystem(TV_320x224, NULL, 1);
        slPrint("Sample slLight Function", slLocate(6,2));
     /* Jʒȕ */
        cam.pos[X] = cam.pos[Y] = toFIXED(0);
        cam.pos[Z] = toFIXED(220.0);
        cam.ang[X] = cam.ang[Y] = cam.ang[Z] = DEGtoANG(0);
        cam.sca[X] = cam.sca[Y] = cam.sca[Z] = toFIXED(1);
        slUnitMatrix( cam.base );
     /* ̐ݒ(덷ł̂Œڌf[^Ȃ悤ɂ) */
        UnitLight[ X ] = MsLightVector[ X ];
        UnitLight[ Y ] = MsLightVector[ Y ];
        UnitLight[ Z ] = toFIXED( 1.0 );
        while(-1) {
        /* pbh̎擾֐ */
            get_pad();
        /* pbg̕ωꍇA^ɂȂ */
            if ( check_pad_change( &cam ) ){
                slPushMatrix();
                {
                    slLoadMatrix(cam.base);
                    slTransposeMatrix();
                    slRotX(cam.ang[X]);
                    slRotY(cam.ang[Y]);
                    slRotZ(cam.ang[Z]);
                    slTransposeMatrix();
                    slGetMatrix(cam.base);
                }
                slPopMatrix();
            }

            slPushMatrix();
            {
                slTranslate(cam.pos[X], cam.pos[Y], cam.pos[Z]);
                slMultiMatrix(cam.base);
            /* XP[ */
                slScale(cam.sca[X], cam.sca[Y], cam.sca[Z]);
            /* XP[xNgɔf */
                CurrentLight[ X ] = slDivFX( cam.sca[ X ], UnitLight[ X ] );
                CurrentLight[ Y ] = slDivFX( cam.sca[ Y ], UnitLight[ Y ] );
                CurrentLight[ Z ] = slDivFX( cam.sca[ Z ], UnitLight[ Z ] );
                slLight( CurrentLight );
                slPutPolygon(pdata);
            }
            slPopMatrix();
            slSynch();
        }
    }

MsLightVector̓VXeϐŁǍ݂xNgĂ܂B
iSGL REFERENCE ManualMsLight͕ύXĂAMsLightVectorVXe
@ϐłBj

Q|PO@slPutPolygon֐slPutPolygonS֐ɂ
@slPutPolygon֐slPutPolygonS֐͈ȉ̂悤ɓ삪Ⴂ܂̂ŒӂĂ
B
iPjslPutPolygon֐̓
@slPutPolygon֐́A}X^CPUŃX[uCPU̖st@NV̏Ԃ𒲂
Ď̂Rނ̏ɕē삵܂B
  (a) st@NVꍇ
@  X[uCPUɕ\p̉ZׂĔC邽߁Aȉ̃f[^obt@ɐς
  X[uCPUɃNGXg𔭍s܂B
@  E_̓o^
@  E_f[^e[ũAhX
@  E|S̓o^
@  E|Sf[^e[ũAhX
@  EAgr[gf[^e[ũAhX
@  EZp}gNX
  (b) st@NVЂƂ̏ꍇ
@  X[uCPŨt@NVǂݏo|C^ƁA}X^CPȔ݃|C^
  Ƃ̍𒲂ׂāA̍f[^ЂƂł΁A_f[^̉]ƕsړ
  ϊ}X^CPUs܂B̉ŽAȉ̃f[^obt@ɐςŁA
  X[uCPUɃNGXg𔭍s܂B
@  E_̓o^
@  EZ̒_f[^e[ũAhX
@  E|S̓o^
@  E|Sf[^e[ũAhX
@  EAgr[gf[^e[ũAhX
@  EZp}gNX̉](RR)
  (c) st@NVӂȏ̏ꍇ
  @|Sf[^쐬Ɋւ镔ׂă}X^CPUs܂B
  f[^쐬̌A쐬f[^yobt@ɓo^邽߁AX[uCPUɃNGXg
  𔭍s܂B
@  E|S(XvCg)f[^e[ũAhX
@  E|S̓o^
@  E_̓o^

@|S̉ZɎgpobt@́A}X^CPUƃX[uCPUƂ݂̏
Ȃ悤ɋLĂ܂B
@LĂ̂͒_f[^̉Zʂi[obt@ƁAŏIIɍ쐬
|Sf[^̃obt@ł͈ȉ̂悤ɂċhł܂B
@_f[^̉Zpobt@
@@gpobt@TCY͒_̐ɂ茈܂̂Ń}X^CPUƃX[uCPȖo
@̎gp܂߂Ď̃|C^i߂ď݂dȂȂ悤ɂ
@܂B
@|Sf[^̃obt@
@@|Sf[^͕\ΏۂƂȂ|S̐ɂĎgpʂω邽߁A
@e[ũ|So^ł̓|C^i߂Ȃ̂ŁAX[uCPU̓obt
@@擪A}X^CPUobt@납gpĂƂŏ݂dȂ
@Ȃ悤ɂĂ܂B

iQjslPutPolygonS֐̓
@@slPutPolygonS֐ł́AX[uCPȔ󋵂`FbNɂׂĂ̕\
@p̏sȂ킹܂BX[uCPUɋIɍs킹邱ƂɂACCPU
@ŃAvP[VŗL̏s킹āAvOŜ̏CPUoX
@悭삳邱Ƃł܂B


Q|PP@slCurWindow֐ɂ
  slWindow֐́A֐s_ŎÕEBhEɐ؂ւ܂A
slCurWindow֐s邱Ƃŕ\EBhEw肷邱Ƃł܂B
́AEBhEɕێȂĂ̂ŁAEBhE̐ݒ񐔂
ƂɂȂ܂B
@gp၄
@@@slCurWindow(winFar);
      slWindow(--- for Far side Window ---);
@@@slCurWindow(winNear);
      slWindow(--- for Near side Window ---);
@@@...
@@@slCurWindow(winFar);
      slPutPolygon(PD_XX);        /* Q[ʂւ̕\ */
@@@slCurWindow(winNear);
      slPutPolygon(PD_xx);        /* }bvւ̕\ */

@@@slCurWindow(...);

@\EBhÉAslSynch֐s winFar ɕ\AEBhE؂ւ
slWindow֐̎sislPutPolygon֐Ȃǂ̕\֐sjAslCurWindow
֐s܂ŁAEBhEɑ΂ĕ\s܂B
@̊֐gpł̒ӓ_ƂslCurWindow֐ɂĐ؂ւp[
^͈ȉ̊֐ɂĐݒ肳ꂽ݂̂̂łBslWindow֐AslZdspLevel֐A
slPerspective֐A}gNXAxNgɂĂ͍Đݒ肳܂̂ŁA
ӂĂB
@slSprWinNum֐sƃJgEBhEio[iwinFarAwinNearj
܂B


RDrfk̓ɂ

R|P@rfkŎgpĂ銄荞݂ɂ
@SGL ł͈ȉ̊荞݂gpĂ܂B
iPjVuNIN荞
@SGL łVuNIN̊荞݂ňȉ̏sĂ܂B
@EFRT̃JE^ǂݍŁAFRT_Countϐɐݒ肵܂B
@EVDP2̃WX^ɃXN[̃f[^]܂B
@@f[^SGL̃VXeϐ̈ɓo^ĂCPU DMÃ`l1
@@gpē]܂B
@@̓]́ASynchCountϐ0̎łPauseFlagϐ_ScrPause`
@ĂȂꍇɍs܂B
@Ef[^](slTransferEntry֐)s܂B
@E[Uo^֐(slIntFunction֐œo^ꂽ[U֐)s܂B
@EytF̏s܂Bn߂ɓǂݍFRT_Count68JE^i
@Ɏs܂B(300usec)

iQjVuNOUT荞
@SGL łVuNOUT̊荞ݏňȉ̎sĂ܂B
@EVDP1̃t[Rg[s܂BSynchCountϐ1̏ꍇɃC[X
@Cg[h̃ZbgA0̏ꍇɃt[`FWZbg܂B
@EXvCgf[^̓]s܂B
@EytFf[^̓ǂݍ݂s܂B
@ESynchCounťZs܂B

R|Q  rfkŎgpĂn[hEFAfoCXɂ
@SGLł́Aȉ̃n[hEFAfoCXgpĂÃfoCXgpɂ
萧ꍇ܂B

iPjDMARg[ɂ
@SEGASATURNł́ADMARg[ƂSCUɓꂽDMACPUɓꂽDMA
2ނASGLł͗DMAgpĂ܂B

@(a)SCUɓDMARg[ɂ
@@SCUDMAɂ́A0`23̃`lpӂĂ܂BSGLł́Aȉ̂悤
@ɎgpĂ܂B
    y`l 0z
      Egp
@@y`l 1z
@@@EXvCg(|S)f[^̓]
      Et[(slInitSystem֐̐ݒŕςꍇ܂)Ŏgp
@@y`l 2z
@@@EPCMXg[f[^̓]AuLOf[^]Ŏgp

@@̑SBLŗpӂĂDMA_֐Qgݍ܂Ă܂B
@@SCU-DMA쒆ł΁ASGLϐăEGCg悤ɂĂ
@܂Aݒ蒆Ɋ݂ꍇɂ̓`FbNł܂̂ŁAKSGLŗp
@DMACugpĂB
    SCUDMAɊւn[hEFAeɂẮA
    EHARDWARE MANUAL Vol.1uSCU[U[Y}jAv
    ETECHNICAL INFORMATION 
    @uDeveloper's Information STN-10 SCUdlύXɂ鐧Eӎv
    QƂ悤ɂ肢܂B

  (b) CPUɓDMARg[ɂ
  @CPU DMA ɂ́A0  12̃`l܂BSGLł́Aȉ̂悤Ɏgp
  Ă܂B
  @y`l 0z
  @@TEh֌W̃f[^]pAslDMACopy֐AslDMAXCopy֐
  @y`l 1z
  @@VuNݓŃXN[̃f[^]

@@`l 1ɂẮASGL̃VXe\Ƃ܂̂ŃAvł͎gp
@ȂłB
@@CPU-DMA쒆ł΁ASGLϐăEGCg悤ɂĂ
@܂Aݒ蒆Ɋ݂ꍇɂ̓`FbNł܂̂ŁAKSGLŗp
@DMACugpĂB
    CPUDMAɊւn[hEFAeɂẮA
    uSH7095n[hEFA}jA 9._CNgANZXRg[v
@QƂ悤ɂ肢܂B

iQjFRT(t[jO^C})ɂ
@@CPU ɓꂽ FRT ytFNGXgs̃^C~O`FbNp
@VuNݏŃJE^̓ǂݏo邽߂ɎgpĂ܂BNbN
@128ݒŃ^C}삵Ă̂ƂĎgpĂ܂̂ŁAAvP[
@Vł͕ύXȂ͈͂ŎgpĂB

iRjCPŨLbVɂ
@@SGLł4Way[hŎgpĂ܂B܂ALbVp[W@́AR
@g[WX^̃p[Wrbggp@ŃNAĂ܂B

iSjCPȔZAZɂ
@@SGLł͊ݏȊOŎgpĂ܂BAvP[Vł͖Ȃgp
@Ƃ\łB

R|R@rfkł̎Oϊɂ
@SGLł́AJŽ_ɂAZ̃vXĂ܂B
ĕ̂\ꍇÂJ̎EɕsړA]邱
ƂɂāA\悤ɂ܂B
@̂̓J畨̂܂ł񂾐ŁAeʂɌʒuœe܂B
̓JÅԂ̋ƁAJAeʊԂ̋Ƃ̑ȎOp`vZ
Ƃŋ߂܂B
@ʏ함͓̂eʂʒuɂ邽߁Akĕ\܂Aeʂ
߂̂͋tɊg傳܂BJɔɋ߂ȂꍇAeʂւ̓e
łȂȂ邽߁ASGLł͕̂Ƃĕ\̂̓JƓeʊԂ1/2
ʒu܂ŁislZdspLevel֐ɂ1/4 邢 1/8ɕύXjŁA߂ꍇ
͕\܂B

R|S@rfk̃|S\[`̏@ɂ
@SGL̃|S\́A}X^CPUX[uCPUɑ΂āAZɕKvȃf[^n
ANGXg𔭍s܂BAX[uCPȔ󋵂ɂ艉Z̈ꕔ}X
^CPUs܂B
@X[uCPU͓nꂽf[^ȉ̏ɏ܂B

iPj_̉]Asړѓϊ̎s
@@]ƕsړ́Aʏ̃}gNXZs܂BAɓϊ
@邽߁AZ  Y  X ̏ɉZ܂B
@@@@Z' = M02 * X + M12 * Y + M22 * Z + M32
@@Z' _ɂA_ɔɋ߂ꍇAXN[̓eŃI
@[o[t[N₷Ȃ邽߁A̎ Z' = DS / 4 ƂĉZ܂B
@islZdspLevel֐ɂύX\j
    Z' gpāAϊWZo܂B
    ϊWk ́Aȉ̂悤ɂȂ܂B
    @@DX = X' * DS / Z'
    @@DY = Y' * DS / Z'
@@LDS / Z'ɂ镔ϊWkɂȂǍvZɂ͏ZKv
@Ȃ邽߁AZ'ɌvZĂ܂iZɂ39NbNKvɂȂ܂jB
@@@@Y' = M01 * X + M11 * Y + M21 * Z + M31
@@@@X' = M00 * X + M10 * Y + M20 * Z + M30
@@Žʂł܂łY'AX'vZĂ܂B
@@ϊWk vZꂽAX' Y'ɂāA\ʒuDxADyƂ܂B
@@@@Dx = X' * k
@@@@Dy = Y' * k
@@̉Zʂobt@ɃZbg܂B
@@obt@ɂ́A
@@@@FIXED  X'
@@@@FIXED  Y'
@@@@FIXED  Z'
@@@@Sint16 Dx
@@@@Sint16 Dy
@gɂāA_̐ɓo^Ă܂B

iQje|Sɑ΂\菈ƕ\f[^̍쐬
@(a) |S̖@xNgƉ]sɂāǍ݂̍킹܂B
@@}gNXZ̕sړZs܂B
@@@@nX = M00 * NX + M10 * NY + M20 * NZ
@@@@nY = M01 * NX + M11 * NY + M21 * NZ
@@@@nZ = M02 * NX + M12 * NY + M22 * NZ
@@̉ZɂēꂽxNginXAnYAnZjƃ|SɎgpĂ钸
@_̈iPXAPYAPZjƂ̓ςƂǍʂ̕𒲂ׂĕ\肵܂B
@@_f[^̓obt@̒_ɊY X'AY'AZ'gp܂B̕\
@ŗƔ肳ꂽ|S͖ʑ𒲂ׂāAЖʃ|Sł΂Ŏ̃|
@SɈڂ܂AʂłΖ@xNǧtɁievf̕
@]܂j܂B

@(b) \[eBO[hɂA|SZʒu߂ĕ\͈͓ł邩ׂ
@@B|SɎgpĂ4_Zʒuiobt@Z'̏16rbgj
@@|SZʒu߁AZlimit܂łɓĂ邩ǂׂ܂B\Ώۂ
@@Zobt@ɓo^āAΏۊOłΎ̃|SɈڂ܂B

@(c) UseClip̎gpAʏ̕\ʒun[hEFAŗL͈͓ł邩
@@܂Bn[hEFAŎgpłʒuf[^̗L͈͂́AX -2048`+2047A
@@Y  -1024`+1023ł̂ŁA͈͓̔ł邩ǂׂ܂B
@@@ɂ͏_̈ʒuItZbgƂĉAőlƔrĉzĂȂ
@@ΗL͈͓ɂȂ܂B
@@@@CX = DX + ClipXAdder
@@@@CY = DY + ClipYAdder
@@@̉ZsAꂩ}CiX邢͍őlzĂΗL͈
@@OƂȂ܂B
@(d) UseLightgp̌ɂPx̌vZs܂B@xNgƌxNg
    Ƃ̓ςA̒lɂăJ[f[^ɃItZbg܂B
@@@ItZbgf[^́ACLOfstBuf(MEMORY.DOC)Ƃobt@ɃVXȅ
@@̍ۂɗpӂĂAȉ̂悤Ȍ`ɂȂĂ܂B
@@@RGB̒l͂ꂼ 0 ` 31̒lŁAPx0`31iς̏5rbgŃ}CiX
@@̏ꍇɂ0ɁA1.0ȏɂȂꍇ31jƂĂ܂B
@@@ꂼ̃O[vɂ̓J[f[^0`31ɑ΂锭Ff[^ĂA
@@͋Px0̏ꍇɌ̃J[0.5{APx31̏ꍇɂ1.5{ɂȂlp
@@ӂAől31ƂȂĂ܂BiJ[e[uɂĂ͂R|TɂĐ
@@܂j
@@@eNX`gpĂꍇɂ͏L̕@ƂȂ߁AVDP1̃O[[
@@VF[fBO𗘗păeNX`ŜɃJ[ItZbg悤ɂ
@@܂B
@(e) |SiXvCgjf[^̍쐬s܂BeNX`ł΁AAg
@@r[g̃eNX`io[eNX`iGj̃TCYCGAhX
@@ׂāAp^̃Zbgѕ\[hAO[[VF[fBOe[uK
@@vɉăZbg܂B
@@@|S4_̕\ʒuiPjō쐬obt@oăp^
@@ɃZbg1|S̏IƂȂ܂B
@(f) c̃|S𒲂ׂāA(a)珈JԂ܂Bc|S0
@@Ȃ珈I܂B

R|T@̂߂̃f[^e[uɂ
@SGL̃|S\AUseLight錾ꍇɎgpe[u̓eL
܂BSGLł́AslInitSystem֐CLOfstBuf̗̈iMEMORY.DOCQƂ̎j
ɂ̃e[u쐬Ă܂AėpIɍ쐬Ă̂ŃAvP[Vɂ
čȂꍇ܂B̃e[u̓eύX邱ƂɂAƎ̌
\ł܂B
@eNX`gpĂꍇ́AVDP1̃O[[VF[fBOe[ugp
܂B̃e[uɂĂύX邱Ƃ\łBiMEMORY.DOCQƂ̎j
@eNX`̌vZ̒ӓ_ƂẮAJ[[hRGB[h̏ꍇ݂̂ɍs
܂BJ[pbg[h̏ꍇ͍s܂B
@ȉɂꂼ̃J[e[u̓eL܂B

|S̏ꍇ@e[u(CLOfstBuf)@Px0`31
@( 0) 0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,A,A,B,B,C,C,D,D,E,E,F,F
@( 1) 0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,9,9,A,A,B,B,C,C,D,D,E,E,F,F,10
@( 2) 0,0,1,1,2,2,3,3,4,5,5,6,6,7,7,8,9,9,A,A,B,B,C,C,D,E,E,F,F,10,10,11
@( 3) 0,0,1,1,2,2,3,4,4,5,5,6,7,7,8,8,9,A,A,B,B,C,D,D,E,E,F,10,10,11,11,12
@( 4) 0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9,A,A,B,B,C,D,D,E,F,F,10,10,11,12,12,13
@( 5) 0,0,1,1,2,3,3,4,5,5,6,7,7,8,9,9,A,B,B,C,D,D,E,F,F,10,11,11,12,13,13,14
@( 6) 0,0,1,2,2,3,4,4,5,6,6,7,8,8,9,A,B,B,C,D,D,E,F,F,10,11,11,12,13,13,14,15
@( 7) 0,0,1,2,2,3,4,5,5,6,7,7,8,9,A,A,B,C,C,D,E,F,F,10,11,11,12,13,14,14,15,16
@( 8) 0,0,1,2,3,3,4,5,6,6,7,8,9,9,A,B,C,C,D,E,F,F,10,11,12,12,13,14,15,15,16,
@@@17
@( 9) 0,0,1,2,3,3,4,5,6,7,7,8,9,A,A,B,C,D,E,E,F,10,11,11,12,13,14,15,15,16,17,
@@@18
@(10) 0,0,1,2,3,4,4,5,6,7,8,8,9,A,B,C,D,D,E,F,10,11,11,12,13,14,15,15,16,17,
@@@18,19
@(11) 0,0,1,2,3,4,5,5,6,7,8,9,A,A,B,C,D,E,F,10,10,11,12,13,14,15,15,16,17,18,
@@@19,1A
@(12) 0,0,1,2,3,4,5,6,7,7,8,9,A,B,C,D,E,E,F,10,11,12,13,14,15,15,16,17,18,19,
@@@1A,1B
@(13) 0,0,1,2,3,4,5,6,7,8,9,9,A,B,C,D,E,F,10,11,12,13,13,14,15,16,17,18,19,1A,
@@@1B,1C
@(14) 0,0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,F,10,11,12,13,14,15,16,17,18,19,1A,1B,
@@@1C,1D
@(15) 0,0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,10,11,12,13,14,15,16,17,18,19,1A,1B,
@@@1C,1D,1E
@(16) 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,
@@@1D,1E,1F
@(17) 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,
@@@1D,1E,1F
@(18) 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,
@@@1E,1F,1F
@(19) 0,1,2,3,4,5,6,7,8,9,A,C,D,E,F,10,11,12,13,14,15,16,18,19,1A,1B,1C,1D,1E,
@@@1F,1F,1F
@(20) 0,1,2,3,4,5,6,7,9,A,B,C,D,E,F,10,12,13,14,15,16,17,18,19,1B,1C,1D,1E,1F,
@@@1F,1F,1F
@(21) 0,1,2,3,4,5,6,8,9,A,B,C,D,F,10,11,12,13,14,15,17,18,19,1A,1B,1C,1E,1F,
@@@1F,1F,1F,1F
@(22) 0,1,2,3,4,5,7,8,9,A,B,D,E,F,10,11,13,14,15,16,17,18,1A,1B,1C,1D,1E,1F,
@@@1F,1F,1F,1F
@(23) 0,1,2,3,4,6,7,8,9,A,C,D,E,F,11,12,13,14,15,17,18,19,1A,1C,1D,1E,1F,1F,
@@@1F,1F,1F,1F
@(24) 0,1,2,3,5,6,7,8,A,B,C,D,F,10,11,12,14,15,16,17,19,1A,1B,1C,1E,1F,1F,1F,
@@@1F,1F,1F,1F
@(25) 0,1,2,3,5,6,7,8,A,B,C,E,F,10,11,13,14,15,17,18,19,1A,1C,1D,1E,1F,1F,1F,
@@@1F,1F,1F,1F
@(26) 0,1,2,3,5,6,7,9,A,B,D,E,F,11,12,13,15,16,17,18,1A,1B,1C,1E,1F,1F,1F,1F,
@@@1F,1F,1F,1F
@(27) 0,1,2,4,5,6,8,9,A,C,D,E,10,11,12,14,15,16,18,19,1A,1C,1D,1E,1F,1F,1F,1F,
@@@1F,1F,1F,1F
@(28) 0,1,2,4,5,6,8,9,B,C,D,F,10,11,13,14,16,17,18,1A,1B,1C,1E,1F,1F,1F,1F,1F,
@@@1F,1F,1F,1F
@(29) 0,1,2,4,5,7,8,9,B,C,E,F,10,12,13,15,16,17,19,1A,1C,1D,1E,1F,1F,1F,1F,1F,
@@@1F,1F,1F,1F
@(30) 0,1,2,4,5,7,8,A,B,C,E,F,11,12,14,15,17,18,19,1B,1C,1E,1F,1F,1F,1F,1F,1F,
@@@1F,1F,1F,1F
@(31) 0,1,2,4,5,7,8,A,B,D,E,10,11,13,14,16,17,18,1A,1B,1D,1E,1F,1F,1F,1F,1F,
@@@1F,1F,1F,1F,1F

eNX`gp@VDP1O[[VF[fBOe[u@Px0`31
@( 0) 0000  0000  0000  0000@@( 1) 0421  0421  0421  0421
@( 2) 0842  0842  0842  0842@@( 3) 0C63  0C63  0C63  0C63
@( 4) 1084  1084  1084  1084@@( 5) 14A5  14A5  14A5  14A5
@( 6) 18C6  18C6  18C6  18C6@@( 7) 1CE7  1CE7  1CE7  1CE7
@( 8) 2108  2108  2108  2108@@( 9) 2529  2529  2529  2529
@(10) 294A  294A  294A  294A@@(11) 2D6B  2D6B  2D6B  2D6B
@(12) 318C  318C  318C  318C@@(13) 35AD  35AD  35AD  35AD
@(14) 39CE  39CE  39CE  39CE@@(15) 3DEF  3DEF  3DEF  3DEF
@(16) 4210  4210  4210  4210@@(17) 4631  4631  4631  4631
@(18) 4A52  4A52  4A52  4A52@@(19) 4E73  4E73  4E73  4E73
@(20) 5294  5294  5294  5294@@(21) 56B5  56B5  56B5  56B5
@(22) 5AD6  5AD6  5AD6  5AD6@@(23) 5EF7  5EF7  5EF7  5EF7
@(24) 6318  6318  6318  6318@@(25) 6739  6739  6739  6739
@(26) 6B5A  6B5A  6B5A  6B5A@@(27) 6F7B  6F7B  6F7B  6F7B
@(28) 739C  739C  739C  739C@@(29) 77BD  77BD  77BD  77BD
@(30) 7BDE  7BDE  7BDE  7BDE@@(31) 7FFF  7FFF  7FFF  7FFF

R|U@rfkZ\[gZf[^obt@ɂ
@SGLsȂĂZ\[gZobt@f[^̍\ɂāA܂B
Z\[gɂOɍsȂϊƕ\ɂĐAZ\[g̕@ƁA
Zf[^obt@\у|Sf[^̍\An[hEFAɓ]@܂Ő
܂B
iPjϊ̉Z
@]AsړɂĂ͒ʏ̃}gNXZWJ`ŎsĂ܂B
@@@X' = M00 * X + M10 * Y + M20 * Z + M30
@@@Y' = M01 * X + M11 * Y + M21 * Z + M31
@@@Z' = M02 * X + M12 * Y + M22 * Z + M32
@ɂēꂽX'AY'AZ'gpēϊs܂B
@ϊł́A
@@  DX = X' * (DS / Z')
@@  DY = Y' * (DS / Z')     ; DS̓XN[ʒu
̎gpĂ܂Â܂܎sƏZ2KvɂȂ̂Ő(DS / Z')
vZāA̒lX'AY'ĕ\p̈ʒuDXADYƂ܂B܂AZ'}Ci
XłA0ɋ߂ꍇɂ͐ełȂ߁A(DS / 4)ꍇ
(DS / 4)ƂČvZ܂B
iQj|S̕\̉Z
@|S̕\́Aʂ̖@xNgƎ_xNgƂ̓ςǍ
݂̕邱ƂŔ肵Ă܂B
@_xNǵAȅꍇZɂȂ܂Aϊł̂ŖʂɌxN
gƂȂAɂ̓|S1_̈ʒuxNgp邱Ƃł܂B
@ȏォA\邽߂ɂ́A
@(a) ʂ̖@xNgL̉]Zɂ\ʂɍ킹܂BA
    sړ͂܂B
@@@  nX = M00 * NX + M10 * NY + M20 * NZ
@@@  nY = M01 * NX + M11 * NY + M21 * NZ
@@@  nZ = M02 * NX + M12 * NY + M22 * NZ
@(b) P_̈ʒuxNg(1)Ƃ̓ςƂ܂B
@@@  P = nX * PX + nY * PY + nZ * PZ
      P}CiXłΎ_ɌĂ̂ŁA\̑ΏۂɂȂ܂B
iRjZ\[g
@vCIeB߂邽߂̃\[eBÓAZʒuɑΉobt@ɕ\f[
^̃AhXo^āAZ̉̂珇ɏEoŁA̕ł͔r
Ȃߍ҂ł܂Aƃf[^ɓo^ĂȂobt@
̋ǂ݂Ƃʂȏ邽߁Ay邽߂Z|WV(15rbg)
㉺2oCgɕA܂ʃoCgɂă\[gAGg[ꂽZʒu
ɑ΂ē񎟂̃\[gsƂŁǍyƋǂ݉񐔂̒ቺsȂĂ
B
iSjZobt@ƃ|Sf[^̍\
@SGL̃|Sf[^́An[hEFAŎgpXvCgf[^30oCgƃ\[g
ɕKvZʒuуf[^|C^Zbgɂč\Ă܂BZobt@ɂ́A
|Sf[^ւ̃AhXo^ĂANULL̏ꍇ̓|Sf[^݂
܂B
              Zobt@@@@@@@@@@@|Sf[^
            ------------           ----------          ----------
@@ Z = 0@|         -|-----------|->      |     /----|->      |
            ------------           |        |    /     |        |
@@ Z = 1@|   NULL   |           |        |   /      |        |
            ------------           |        |  /       |        |
@@ Z = 2@|   NULL   |           |  next -|-/        |  NULL  |
            ------------           ----------          ----------
    @@@@|          |
    @@@@|   ....   |           |Sf[^̍\
    @@@@|          |@@@@@@   -------------
            ------------            00 |  CMDCTRL  |
     Z =255 |   NULL   |            02 |  CMDLINK  |
            ------------            04 |  CMDPMOD  |
        |C^NULL̈ʒuɂ    06 |  CMDCOLR  |
        |S݂Ȃ        08 |  CMDSRCA  |
                                    0A |  CMDSIZE  |
                                    0C |  CMDXA    |
                                    0E |  CMDYA    |
                                    10 |  CMDXB    |
                                    12 |  CMDYB    |
         n[h]pe[u       14 |  CMDXC    |
         --------------------       16 |  CMDYC    |
         |  ]TCY      |       18 |  CMDXD    |
         --------------------       1A |  CMDYD    |
         |  ]AhX  |       1C |  CMDGRDA  |
         --------------------       1E |  CMDZPOS  |
         |  ]AhX  |       20 |  CMDNEXT  |
         --------------------          -------------
iTjn[hEFA(VDP1)ւ̓]@
@n[hEFA(VDP1)ւ̓]ɂ́ASCU-DMÅԐڃ[hgpĂ܂B
LZ\[gobt@珇ɓǂ݂AYf[^AhX]p̃e[
uɃZbg܂B

R|V@}X^CPUƃX[uCPUԂ̃f[^̎󂯓nɂ
@SEGASATURNɓdăAvP[VvO삷܂ł́AX
[uCPU͓삵Ă炸A}X^CPÛ݂œ삵Ă܂B}X^CPUƃX[uCPU
͓oXʂāA⑼̃foCXɐڑĂ̂ŁA邱
Ƃł܂A܂ǗȂƃ}X^CPUƃX[uCPÛǂ炩҂
ԂɂȂāA2CPUɂAbv]߂Ȃꍇ܂B
@SGLł́AslInitSystem֐sƓŃX[uCPU삵ASGLƎ̃X
[uǗ֐sČ悭2CPUgpł悤ɂĂ܂B
@ȉASGL̃X[uCPŮǗ@ɂĐ܂B
@SGLł́AslInitSystem֐InitSlaveSh֐ɂSMPC̃Zbg
FRTCvbgLv`҂ԂɂȂ܂BŁASlaveCommand|C^ϐ
SlaveControl֐ƂSGL̃X[uCPUǗ֐ZbgāAFRTCvbgLv
`M͂(0x21000000Ԓn-1)ƃX[uCPUSlaveControl֐
s܂B
@SlaveControl֐SGL̃X[uCPUǗ֐ŁA}X^CPUƃX[uCPÛǂ
҂ԂɂȂČ_EȂ悤ɁA}X^CPŨNGXgL
̃obt@Ŏ󂯓n悤ɂāANGXgoꂽǂ̓}X^CPU
̏݃|C^ƃX[uCPU̓ǂݍ݃|C^ƂƂ邱ƂŔF
悤ɂĂ܂B̕@ɂāA}X^CPU̓NGXgobt@ɒǉ
_Ŏ̏Ɉڂ邱Ƃł̂ŁAX[uCPȔI҂KvȂ悤
Ă܂B
@SGLŃ[UX[uCPUgpꍇAslSlaveFunc֐Ɏs֐Zb
gƁASlaveControl֐̊Ǘœ삵܂Bɂ́As[U
֐Aɂ͂̃[U֐̑n܂B
@܂AX[uCPU͊荞݊֌W}X^CPUɔׂĂȂ萧̂ŁASGL
̓}X^CPUŊ荞݊֌W̏s悤ɂĂ܂B


R|W@TEhRg[ɂ
@SGL̃TEhRg[ł́A傫ăV[PXĐPCMXg[Đ
̓gpł悤ɂȂĂ܂B
@V[PXĐPCMXg[Đ́Aꂼꓯ8܂Ŏgp邱Ƃł
܂BgpꍇAǗԍƂIDpăTEhhCo̐
؂ւ킯łA[Uł܂ōl͖̂ʓ|łBŁASGLł
BGMɂ0ԂUAʉ17gp邱ƂƂāAʉo͂֐
Ăяoۂɋ󂢂Ă锭Ǘԍďo͂悤ɂ邱ƂŁA
[U̕SyĂ܂B
@܂APCMXg[Đł̓}X^CPUSCSPɑ΂āAĐf[^莞Ԃ
Ƃɓ]Ȃ΂ȂȂ킯łAPCMXg[ĐVbgĐ(f[
^n߂I܂ło͂̂ŁA[vȂǂ̓ꏈsȂ)Ɍ
邱ƂŁA[UǗKvȂASGL̊荞ݏ[`̒ł̊
s悤ɂȂĂ܂B
@܂A{[ƃpo͂foCX(V[PXAPCMXg[ACDDA)ɂ
ėL͈͂قȂĂ߁Aꂵlň悤SGLŕϊăTE
hhCoɓnĂ܂B
@@{[F@   0` 127(ő)
@@p@@@F@-128A-127`+127(-128ł̓p̐Ȃ)
@@@@@@@@@@@@Left: -127 << 0 >> +127 :Right
@TEhRg[t@NV́ATEhhCoƃnhVFCNȂ
n܂AnhVFCN̉񐔂炷߁ASGLɃR}hp̃o
bt@ZbgAobt@tɂȂ邩AslSynch֐sꂽɃnhVF
CN悤ɂȂĂ܂B(Å֐ɂĂ͑ɃnhVFCN
܂)
@łATEho͊֐sĂɂ̓TEhhCoɃf[^o͂
܂̂ŒӂĂB
@ATEhhCő@\\Ɏgpꍇ́ASBLCuŒ񋟂
TEhI/FCugp悤ɂĂB(CinepakCuSGL
Ŏgpꍇ́AKTEhI/FCugpKv܂B)
@܂ATEhhCoSEGA񋟂̃TEhhCoɑΉĂASGL/LIBfB
NgɂSDDRVS.TSKgp悤ɂ肢܂B

SDrfk̃guV[eBO

S|P  XvCg^|S̎cۂ̑Ήɂ

@rfkőʃf[^bc̃f[^ǂݍ݂ɂāAXvCgi|S
܂ށj̎ccԂɂȂꍇ܂B
@rfkł slSynch() ֐̎sɂAX[ubotɃXvCg]p
NGXge[u쐬t@NVAuuN荞ݏ̒
e[u쐬ς݂ł邩`FbNA쐬Ă΂rbt|cl`N
ĂucoP̂uq`lɑ΂ăR}h]܂B
@ucoP̕\R}h͂̎ɂ]܂̂ŁAucoP̂uq`l
ɂ͏ɕ\R}hcĂ邱ƂɂȂ܂B
@Ⴆ΁AslSynch֐sȂꍇA荞݂֎~Ԃ莞
ƁA\R}ĥ͎c܂܂ɂȂĂ܂̂ŁARXvCg͕\
ꂽ܂܂ɂȂ܂B
@ccĂƂԂꍇAL̂Q_sĂ邩`F
bNĂ݂ĂB
@ʏA|S(XvCg)߂ɂ slSynch֐]ɌĂׂ΂
ŁA΍ƂĈȉ̃Tv̂悤ɂĂB
    void sample(){
        while(-1){
	    slDispSprite(...) ;
	    slPushMatrix() ;
	    {
	        slTranslate(...) ;
	        slRotY(...) ;
	        slPutPolygon(...) ;
	    }
	    slPopMatrix() ;
	    slSynch() ;		/* ŁAucoPɓ]܂ */
	    slSynch() ;		/* ŁAGhR}h]܂ */
        }
    }

