{$M 16384,0,384000} {player}
{$G+,S-,I-,A+,Q-,R-,E-,N-,X-,Y-,D+,F-,L-}
program player;
uses oma,sb_det3,textunit,omaems,dos{,memory};
const moduuli:string='ode2ptk'; {default module}
frequency=45454; {5000-45454}
{{$define ripsamples} {savettaa samplet diskille}
{{$define purkka} {lukee sampledatan filen lopusta, ei 'oikeasta' kohdasta}
{$i loader.pas}
{$i device.pas}
{$i playing.pas}
var i:longint;
c:integer;
last:array[1..32] of byte;
ch:char;
stri:string;
function strr2(nro:longint):string;
var res:string;
begin
str(nro,res);
strr2:=res;
end;
procedure ulkonako; far;
begin
text50;
hidecursor;
retrace;
for i:=0 to (80*50-1) do
mem[$b800:i+i+1]:=4 shl 4;
for i:=0 to 79 do mem[$b800:i+i+1]:=1 shl 4;
for i:=0 to 79 do mem[$b800:i+i+1+160*49]:=1 shl 4;
if length(module.title)>0 then stri:='"'+module.title+'" ' else
stri:='';
mwrite(' player, copyright Kaj Björklund 1996. All rights reserved.',0,0,14+1 shl 4);
mwrite(' BLASTER=A2'+strr2((base-$200) div $10)+'0h I'+strr2(irq)+' D'+strr2(dma)+
', playing '+stri+'at '+strr2(playspeed)+'Hz',0,49,14+1 shl 4);
{ mwrite('Name Rate Length Loop End',2,16,14+1 shl 4);}
for i:=1 to 31 do begin
mwrite(' '+samples[i].name+' ',1,i+16,15+4 shl 4);
if samples[i].used then begin
if samples[i].loop.endi>0 then begin
mwrite(strr2(samples[i].c2spd)+'Hz, vol:'+strr2(samples[i].volume)+', len:'+strr2(samples[i].length)
+', loop:'+strr2(samples[i].loop.start)+'-'+strr2(samples[i].loop.endi),26,i+16,15+4 shl 4);
end else
mwrite(strr2(samples[i].c2spd)+'Hz, vol:'+strr2(samples[i].volume)+', len:'+strr2(samples[i].length),26,i+16,15+4 shl 4);
end;
end;
mwrite(' Channel Volume Note Effect ',0,3,4 shl 4+14);
for i:=1 to module.channels do begin
mwrite(' ',1,i+3,7 shl 4);
end;
end;
begin
fillchar(last,sizeof(last),0);
playspeed:=frequency; {5000-45454}
randomize;
sw_detect;
if (got.base=false) or (got.irq=false) or (got.dma=false) then hw_detect;
if (got.base=false) or (got.irq=false) or (got.dma=false) then begin
writeln('no sb.');
halt(1);
end;
base:=blaster.base;
irq:=blaster.irq;
dma:=blaster.dma;
if paramcount>0 then moduuli:=paramstr(1);
if paramcount=2 then begin
val(paramstr(2),i,c);
if (i>4999) and (i<45455) then playspeed:=i else playspeed:=22050;
end;
if not(load_mod(moduuli)) then halt(0);
writeln('samplejen yhteiskoko ',(totalsamples+512) div 1024,'kB');
writeln((memavail+512) div 1024,'kB vapaana.');
writeln('paina nappulaa..');
ch:=readkey;
init;
initplaying;
interrupts:=65000;
ulkonako;
repeat
asm sti; end;
retrace;
for i:=1 to module.channels do begin
mwrite(strr2(i),2,i+3,7 shl 4+15);
mwrite(strr2(channel[i].volume)+' ',12,i+3,7 shl 4);
if channa[i].note<>132 then
mwrite(notes[channa[i].note]+' ',22,i+3,7 shl 4)
else if channa[i].lastnote<132 then
mwrite(notes[channa[i].lastnote]+' ',22,i+3,8+7 shl 4);
mwrite(effyt[channa[i].effy],32,i+3,7 shl 4);
mwrite(' ',0,last[i]+16,4 shl 4);
if channa[i].instru>0 then begin
mwrite(#14,0,channa[i].instru+16,4 shl 4+12);
last[i]:=channa[i].instru;
end;
end;
case (interrupts shr 4 and 3) of
0:mwrite('|',78,0,15+1 shl 4);
1:mwrite('/',78,0,15+1 shl 4);
2:mwrite('-',78,0,15+1 shl 4);
3:mwrite('\',78,0,15+1 shl 4);
end;
case (interrupts shr 3 and 3) of
0:mwrite('|',77,0,15+1 shl 4);
1:mwrite('/',77,0,15+1 shl 4);
2:mwrite('-',77,0,15+1 shl 4);
3:mwrite('\',77,0,15+1 shl 4);
end;
case (interrupts and 3) of
0:mwrite('|',76,0,15+1 shl 4);
1:mwrite('/',76,0,15+1 shl 4);
2:mwrite('-',76,0,15+1 shl 4);
3:mwrite('\',76,0,15+1 shl 4);
end;
mwrite('Row : '+strr2(play.row)+'/64 ',42,4,15+4 shl 4);
mwrite('Ord : '+strr2(play.order)+'/'+strr2(song.length)+' ',42,5,15+4 shl 4);
mwrite('Pat : '+strr2(play.physpatta)+'/'+strr2(song.patterns)+' ',42,6,15+4 shl 4);
mwrite('Spd : '+strr2(play.speed)+' at '+strr2(play.bpm)+'bpm ',42,7,15+4 shl 4);
mwrite('Gls : '+strr2(byte(glissando)),42,8,15+4 shl 4);
if keypressed then ch:=readkey;
if keypressed then begin
while keypressed do ch:=readkey;
ch:=#255;
end;
case ch of
'd','D':begin
text25;
{ setmemtop(heapptr);}
swapvectors;
exec(getenv('COMSPEC'),'');
swapvectors;
{ setmemtop(heapend);}
while keypressed do ch:=readkey;
writeln('press any key..');
ch:=readkey;
while keypressed do ch:=readkey;
ch:=#255;
ulkonako;
end;
'+':if master<64 then inc(master,1);
'-':if master>0 then dec(master,1);
end;
if ch<>#27 then ch:=#255;
mwrite('Master(+/-): '+strr2(master)+' ',0,1,15+4 shl 4);
until (ch=#27);
while keypressed do ch:=readkey;
text25;
writeln;
writeln('Usage: PLAYER modfile[.MOD] [hz]');
writeln;
deinitplaying;
deinit;
free_mod;
end.