|
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: 4224 (0x1080) Types: TextFile Names: »TEGN605.BAK«
└─⟦29e35ddf2⟧ Bits:30003931/CCPM_Tegn.imd Disketter indleveret af Steffen Jensen (Piccolo/Piccoline) └─⟦this⟧ »TEGN605.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:=350*round(xmin/728); xmax:=350*round(xmax/728); ymin:=349-round(ymax/93); ymax:=349-round(glymin/93); hoejde:=ymax-ymin; soejle:=xmin+ymin; gemindex:=0; repeat move(pix(.soejle.),temp(.gemindex.),2*hoejde); fill(pix(.soejle.),2*hoejde,p); soejle:=soejle+350; 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:=350*round(xmin/728); xmax:=350*round(xmax/728); ymin:=349-round(ymax/93); ymax:=349-round(glymin/93); hoejde:=ymax-ymin; soejle:=xmin+ymin; gemindex:=0; repeat move(temp(.gemindex.),pix(.soejle.),2*hoejde); soejle:=soejle+350; gemindex:=gemindex+hoejde; until soejle>xmax; end; procedure transretur(xmin,xmax,ymin,ymax:integer); var glymin,soejle,hoejde, mi,mj,gemindex : integer; farve1,farve2:array(.1..8.) of 0..3; rest1,rest2:integer; begin glymin:=ymin; xmin:=350*round(xmin/728); xmax:=350*round(xmax/728); ymin:=349-round(ymax/93); ymax:=349-round(glymin/93); 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; 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 3; rest(.1.):=rest(.1.) shr 2; end; for mj:=1 to 7 do begin farve(.2,mj.):=rest(.2.) and 3; 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+350; gemindex:=gemindex+hoejde; until soejle>xmax; end; «eof»