示例#1
0
        //203-288
        //;==============================================================================
        //;
        //;	PCM(PPC/P86)ファイルの読み込み
        //;		P86DRV.COMが常駐していれば.P86を、
        //;		そうでない場合は.PPCを読む。
        //;		PMDPPZEが常駐している場合は無条件にPVIをPPZ8に読み込む。
        //;
        //;		input DS:AX filename(128byte)
        //; ES:DI pcm_work(32KB, P86の場合は必要無し)
        //; output cy = 1    Not Loaded
        //; PMDB2/PMD86の場合
        //;				AX=1	SPB/ADPCM-RAMかPMDB2がない
        //;					86B/P86DRV かPMD86がない
        //; AX=2	ファイルがない
        //;				AX=3	ファイルがPMDのPCMデータではない
        //;				AX=4	SPB/既に読み込んであるのと同じだった
        //;					86B/容量OVER
        //;				AX=5	ファイルが読めない
        //;				AX=6	PCMメモリがアクセス中だった
        //;			PMDPPZEの場合
        //;				AX=1	ファイルの読み込み失敗
        //;				AX=2	データ形式が違う
        //;				AX=3	メモリが確保できない
        //;				AX=4	EMSハンドルのマッピングができない
        //;				AX=5	PPZ8が常駐していない
        //;
        //;	.PPC format:
        //; WORK=PMD内PCMWORK , DATA=PCMRAM先頭のWORK , FILE=PCMFILE
        //;					 123456789012345678901234567890
        //;		DATA/FILEのみ		"ADPCM DATA for  PMD ver.4.4-  "30bytes
        //;		WORK/DATA/FILE		1Word Next START Address
        //;					2Word*256	START/STOP
        //;		WORK/DATAのみ		128bytes FILENAME
        //; DATAのみ		32bytes 予備
        //;
        //;		PCMRAM_Work		=00000H~00025H
        //;		PCMRAM_Main_data	=00026H~01FFFH
        //;
        //;	.P86 format:
        //;		"PCM86 DATA",0ah,0	12 byte
        //;		P86DRVのversion		1  byte
        //;		全体のサイズ		3  byte
        //;		音色table start(3),size(3) * 256 (1536) bytes
        //;		音色データ 可変
        //;
        //;==============================================================================
        public void pcm_all_load(string ppcFile)
        {
            //cld
            //r.stack.Push(r.ds);
            //r.stack.Push(r.es);
            r.stack.Push(r.bx);
            r.stack.Push(r.cx);
            r.stack.Push(r.dx);
            r.stack.Push(r.si);
            r.stack.Push(r.di);
            r.stack.Push(r.bp);

            pw.filename_ofs = ppcFile; // r.ax;
            pw.filename_seg = 0;       // r.ds;
            pw.pcmdata_ofs  = r.di;
            pw.pcmdata_seg  = 0;       // r.es;
            r.ah            = 0xe;     //;GET_PCM_ADR
            pmd.int60_main(r.ax);      //	int	60h		;DS:DX=PCMワーク
            pw.pcmwork_ofs = r.dx;
            pw.pcmwork_seg = 0;        // r.ds;

            all_load();

            r.bp = r.stack.Pop();
            r.di = r.stack.Pop();
            r.si = r.stack.Pop();
            r.dx = r.stack.Pop();
            r.cx = r.stack.Pop();
            r.bx = r.stack.Pop();
            //r.es = r.stack.Pop();
            //r.ds = r.stack.Pop();
        }
示例#2
0
 public int GetStatus()
 {
     if (work.Status < 0)
     {
         return(-1);
     }
     pmd.int60_main(0x0a00);
     return(pmd.pw.status2 != 0xff ? 1 : 0);
 }