|
|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 4480 (0x1180)
Types: TextFile
Names: »TEGN005.BAK«
└─⟦29e35ddf2⟧ Bits:30003931/CCPM_Tegn.imd Disketter indleveret af Steffen Jensen (Piccolo/Piccoline)
└─⟦this⟧ »TEGN005.BAK«
function space(diskdrev:char):integer;
TYPE
REGISTRE = RECORD AX,BX,CX,DX,BP,SI,DI,DS,ES,FLAGS:INTEGER; END;
STR15=STRINGÆ15Å;
VAR FCB :STRING(.13.);
DIRCODE :ARRAY(.0..3,0..31.) OF BYTE;
REGS :REGISTRE;
DRIVE,A :INTEGER;
BEGIN
drive:=ord(diskdrev)-65;
FCB:=CHR(DRIVE+1); FCB(.13.):='?';
(* F_DMAOFF *)
REGS.CX:=26; REGS.DX:=OFS(DIRCODE); SWINT(224,REGS);
(* F_DMASEG *)
REGS.CX:=51; REGS.DX:=SEG(DIRCODE); SWINT(224,REGS);
(* F_SFIRST *)
REGS.CX:=17; REGS.DX:=OFS(FCB)+1; REGS.DS:=SEG(FCB);
SWINT(224,REGS); A:=REGS.AX;
(* DRV_SPACE *) REGS.CX:=46; REGS.DX:= DRIVE; SWINT(224,REGS);
SPACE:=(DIRCODE(.0,0.)DIV 8+DIRCODE(.0,1.)*32+DIRCODE(.0,2.)*8192);
END;
procedure drv_get(var diskdrev : char);
var
d_no :integer;
begin
reg.cx := $19;
swint(224,reg);
d_no := reg.ax;
diskdrev:=chr(65+d_no);
end;
function Skaerm22khz: boolean;
var
nvm : ^byte;
begin
reg.ax:=4;swint($28,reg); nvm:=ptr(reg.es,reg.si+18); Skaerm22khz:=(nvm^>=2);
end;
(* ▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀ *)
function Farveskaerm: boolean;
type
config_array = array(.0..22.) of byte;
var
configptr: ^config_array;
begin
reg.ax:=4; swint($28,reg); configptr:=PTR(reg.es,reg.si);
if (configptr^(.18.)=0) or (configptr^(.18.)=2) then
Farveskaerm:=true
else
Farveskaerm:=false;
end;
procedure fjern(xmin,xmax,ymin,ymax:integer);
var
glymin,soejle,hoejde,
gemindex,k : integer;
p,q : char;
begin
p:=chr(0);
q:=chr(255);
glymin:=ymin;
xmin:=videolinier*round(xmin/xkoordinat_blok);
xmax:=videolinier*round(xmax/xkoordinat_blok);
ymin:=(videolinier-1)-round(ymax/ykoordinat_linie);
ymax:=(videolinier-1)-round(glymin/ykoordinat_linie);
hoejde:=ymax-ymin;
soejle:=xmin+ymin;
gemindex:=0;
repeat
move(pix(.soejle.),temp(.gemindex.),2*hoejde);
fill(pix(.soejle.),2*hoejde,p);
soejle:=soejle+videolinier;
gemindex:=gemindex+hoejde;
until soejle>xmax;
end;
(* ▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀▶88◀ *)
procedure retur(xmin,xmax,ymin,ymax:integer);
var
glymin,soejle,hoejde,
gemindex : integer;
begin
glymin:=ymin;
xmin:=videolinier*round(xmin/xkoordinat_blok);
xmax:=videolinier*round(xmax/xkoordinat_blok);
ymin:=(videolinier-1)-round(ymax/ykoordinat_linie);
ymax:=(videolinier-1)-round(glymin/ykoordinat_linie);
hoejde:=ymax-ymin;
soejle:=xmin+ymin;
gemindex:=0;
repeat
move(temp(.gemindex.),pix(.soejle.),2*hoejde);
soejle:=soejle+videolinier;
gemindex:=gemindex+hoejde;
until soejle>xmax;
end;
procedure transretur(xmin,xmax,ymin,ymax:integer);
var
glymin,soejle,hoejde,
tre,mi,mj,rest1,rest2,gemindex,ene,anden : integer;
rest:array(.1..2.) of integer;
farve:array(.1..2,1..8.) of integer;
begin
glymin:=ymin;
xmin:=videolinier*round(xmin/xkoordinat_blok);
xmax:=videolinier*round(xmax/xkoordinat_blok);
ymin:=(videolinier-1)-round(ymax/ykoordinat_linie);
ymax:=(videolinier-1)-round(glymin/ykoordinat_linie);
hoejde:=ymax-ymin;
soejle:=xmin+ymin;
gemindex:=0;
repeat
rqlocator(2,xin,yin,status,term,xout,yout)
until (term=32) or (term=33);
if term=32 then begin ene:=1;anden:=2;end
else begin ene:=2;anden:=1;end;
tre:=$fff3;
repeat
mi:=0;
repeat
rest(.ene.):=pix(.soejle+mi.);
rest(.anden.):=temp(.gemindex+mi.);
for mj:=1 to 7 do
begin
farve(.1,mj.):= rest(.1.) and tre;
rest(.1.):=rest(.1.) shr 2;
end;
for mj:=1 to 7 do
begin
farve(.2,mj.):= rest(.2.) and tre;
rest(.2.):=rest(.2.) shr 2;
end;
if rest(.2.)=0 then rest(.2.):=rest(.1.);
for mj:=7 downto 1 do
begin
if farve(.2,mj.)=0 then
rest(.2.):=(rest(.2.) shl 2)+farve(.1,mj.)
else
rest(.2.):=(rest(.2.) shl 2)+farve(.2,mj.);
end;
pix(.soejle+mi.):=rest(.2.);
mi:=mi+1;
until mi=hoejde-1;
soejle:=soejle+videolinier;
gemindex:=gemindex+hoejde;
until soejle>xmax;
end;
«eof»