DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦3b1287cee⟧ TextFile

    Length: 4352 (0x1100)
    Types: TextFile
    Names: »NY005.PAS«

Derivation

└─⟦29e35ddf2⟧ Bits:30003931/CCPM_Tegn.imd Disketter indleveret af Steffen Jensen (Piccolo/Piccoline)
    └─⟦this⟧ »NY005.PAS« 

TextFile


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,
  mi,mj,rest1,rest2,gemindex           : integer;
  farve1,farve2:array(.1..8.) of 0..3;
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;
   gotoxy(70,20);write('Mogens');
   repeat
        mi:=0;
        repeat
(*          pix(.soejle+mi.):=pix(.soejle+mi.) exor temp(.gemindex+mi.);
  *)        rest1:=pix(.soejle+mi.);
            rest2:=temp(.gemindex+mi.);
            for mj:=1 to 7 do
            begin
               farve1(.mj.):=rest1 mod 4;
               rest1:=rest1 div 4;
            end;
            for mj:=1 to 7 do
            begin
               farve2(.mj.):=rest2 mod 4;
                rest2:=rest2 div 4;
            end;
            if rest2=0 then rest2:=rest1;
            for mj:=7 downto 1 do
            begin
              if farve2(.mj.)=0 then
                rest2:=4*rest2+farve1(.mj.)
              else
                rest2:=4*rest2+farve2(.mj.);
            end;
          pix(.soejle+mi.):=rest2;

          mi:=mi+1;
        until mi=hoejde-1;
        (*move(temp(.gemindex.),pix(.soejle.),2*hoejde);
       *) soejle:=soejle+videolinier;
        gemindex:=gemindex+hoejde;
   until soejle>xmax;
end;
«eof»