|
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»