type str80=string[80]; filename=string[14]; picstring=string[10]; regpack=record a:byte; x:byte; y:byte end; {6502 registers} const store80status=$E018; textstatus=$E01a; page2status=$E01c; xmax=279; ymax=191; black1=0; green=1; blue1=2; white1=3; black2=4; orange=5; blue2=6; white2=7; var xleft,xright,ytop,ybottom:integer; reg:regpack; apple2etextcard:boolean; store80On:boolean; textpage2:boolean; procedure graphwindow(xl,yt,xr,yb:integer); begin if (xl>=0) AND (xlxleft) then xright:=xr else xright:=xmax; if (yt>=0) AND (ytytop) then ybottom:=yb else ybottom:=YMAX end; procedure fullwindow; begin graphwindow(0,0,XMAX,YMAX) end; function inwindow(x,y:integer):boolean; begin inwindow:=(x>=xleft) AND (x <=xright) AND (y>=ytop) AND (y<=ybottom) end; procedure turnstore80On; const store80Onswitch=$E001; begin inline($32/store80Onswitch) end; procedure turnstore80Off; const store80Offswitch=$E000; begin inline($32/store80Offswitch) end; procedure setstore80status; begin if apple2etextcard then begin store80On:=(mem[store80status]>127); turnstore80Off end end; procedure restorestore80status; begin if apple2etextcard then begin if store80On then turnstore80On else turnstore80Off end end; procedure page1; CONST page1switch=$E054; begin inline($3a/page1switch) end; procedure page2; CONST page2switch=$E055; begin inline($3a/page2switch) end; procedure graphcolormode; CONST graphmodeswitch=$E050; hiresOnswitch=$E057; begin if apple2etextcard then turnstore80Off; if (mem[textstatus]>127) then textpage2:=(mem[page2status]>127); page2; inline($3A/graphmodeswitch/$3A/hiresonswitch) end; procedure textmode; CONST textmodeswitch=$E051; hiresoffswitch=$E056; begin if apple2etextcard AND (mem[textstatus]>128)then begin if textpage2 then page2 else page1 end else page1; inline($3A/textmodeswitch/$3A/hiresoffswitch); if apple2etextcard then turnstore80On end; procedure callapplerom(romaddr:integer); const routineptr=$F3D0; slotvalue=$F3C8; aregbuff=$F045; xregbuff=$F046; yregbuff=$F047; begin mem[routineptr]:=lo(romaddr); mem[routineptr+1]:=hi(romaddr); mem[aregbuff]:=reg.a; mem[xregbuff]:=reg.x; mem[yregbuff]:=reg.y; inline ($3A/slotvalue/$C6/$20/$67/$2E/$00/$77); reg.a:=mem[aregbuff]; reg.x:=mem[xregbuff]; reg.y:=mem[yregbuff] end; procedure initgraphics; CONST apple2esignature=6; page2val=$0040; romsignature=$DBB3; readrom=$E081; readram=$E083; fullpageswitch=$E052; clearaddr=$F3F2; pageaddr=$F0E6; var signature:integer; begin inline ($3A/readrom); signature:=mem[romsignature]; inline($3A/readram/$3A/readram); apple2etextcard:=(signature=apple2esignature) AND (mem[store80status]>127); setstore80status; fullwindow; inline($3A/fullpageswitch); mem[pageaddr]:=page2val; callapplerom(clearaddr); restorestore80status end; procedure setcolor(color:integer); const setcoloraddr=$F6EC; begin setstore80status; if (color>white2) or (colorxplot[2]) OR (abs(x1)>abs(x2)) AND (xplot[1]xplot[1] then begin xplot[1]:=abs(x1);yplot[1]:=abs(y1) end; if abs(x2)yplot[1] then yplot[1]:=abs(y1); if abs(y2)0 then fname:=copy(fname,1,pos('.',fname)-1); fname:=fname+'.PIC' end; procedure saveimage(picname:str80); const hires2addr=$3000; numscreenblocks=64; var f:file; begin setstore80status; fixpicname(picname); assign(f,picname); rewrite(f); blockwrite(f,mem[hires2addr],numscreenblocks); close(f); restorestore80status end; procedure loadimage(picname:str80); const hires2addr=$3000; numscreenblocks=64; var f:file; begin setstore80status; fixpicname(picname); assign(f,picname); reset(f); blockread(f,mem[hires2addr],numscreenblocks); close(f); restorestore80status end; {end of GRAFSTUF.INC}