{ JR> Well, Can you post the sorce code on how to play to the Sound blaster JR> Byte by Byte? I could probley find out after that! JR> James Sure thing... this Program will load a File into memory then play it a Byte at a time... It should be pretty self-explanatory. } Program rawdemo; Uses Crt; {$I-} Const fname = 'NELLAF.VOC'; { Can be any raw data File } resetport = $226; readport = $22A; Writeport = $22C; statusport = $22E; dac_Write = $10; adc_read = $20; midi_read = $30; midi_Write = $38; speakeron = $D1; speakeroff = $D3; Function reset_dsp : Boolean; Var count, bdum : Byte; begin reset_dsp := False; port[resetport] := 1; For count := 1 to 6 do bdum := port[statusport]; port[resetport] := 0; For count := 1 to 6 do bdum := port[statusport]; Repeat Until port[statusport] > $80; if port[readport] = $AA then reset_dsp := True; end; Procedure spk_on; begin Repeat Until port[Writeport] < $80; port[Writeport] := $D1; end; Procedure spk_off; begin Repeat Until port[Writeport] < $80; port[Writeport] := $D3; end; Procedure generic(reg,cmd:Integer; data:Byte); begin Repeat Until port[Writeport] < $80; port[reg] := cmd; Repeat Until port[Writeport] < $80; port[reg] := data; end; Procedure Write_dsp(data:Byte); Assembler; Asm mov dx,$22C mov cx,6 { Change either value of CX For } @1: in al,dx loop @1 mov al,10h out dx,al mov cx,36 { faster or slower playing. } @2: in al,dx loop @2 mov al,data out dx,al end; Function read_dsp : Byte; begin Repeat Until port[Writeport] < $80; port[Writeport] := $20; Repeat Until port[statusport] > $80; read_dsp := port[readport]; end; Procedure Write_midi(data:Byte); begin Repeat Until port[Writeport] < $80; port[Writeport] := $38; Repeat Until port[Writeport] < $80; port[Writeport] := data; end; Function read_midi : Byte; begin Repeat Until port[Writeport] < $80; port[Writeport] := $30; Repeat Until port[statusport] > $80; read_midi := port[readport]; end; Function loadFile(Var buffer:Pointer; Filename:String) : Word; Var fromf : File; size : LongInt; errcode : Integer; begin assign(fromf,Filename); reset(fromf,1); errcode := ioresult; if errcode = 0 then begin size := Filesize(fromf); Writeln(size); getmem(buffer,size); blockread(fromf,buffer^,size); end else size := 0; loadFile := size; close(fromf); end; Procedure unload(buffer:Pointer; size:Word); begin freemem(buffer,size); end; Var ch : Char; buf : Pointer; index, fsize : Word; begin ClrScr; Writeln; Writeln; if not reset_dsp then begin Writeln('Unable to initialize SoundBlaster.'); halt(1); end; fsize := loadFile(buf,fname); if (fsize <= 0) then begin Writeln(fname, ' not found.'); halt(2); end; { For index := 1 to fsize do dec(mem[seg(buf^):ofs(buf^)+index-1],80);} { For MOD samples } spk_on; Writeln('Playing...'); For index := 1 to fsize do Write_dsp(mem[seg(buf^):ofs(buf^)+index-1]); spk_off; unload(buf,fsize); Writeln('Done.'); ch := ReadKey; end.