@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu  } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED736 FREE SECTORS COPYING---D1:DIRECK.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 138ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u; ANALOG MAN by David Plotkin;; COPYRIGHT 1988; BY ANALOG COMPUTING;MODULEBYTE ChrBase=756,Bkgrnd=710,X,Y, T} Fate=53770,Level=[5],CursIn=752, Stick0=632,Ps,Loud=[0],Indx=[0], Snd1=$D208,Snd2=$D20F,Freq=[169], Wsync=$DU}40A,Colbk=$D018, Nmien=$D40E,Consol=53279, Colints=$D017,X0,Y0,Ft=[200], Lv=[5],Ld=[0],Ld2=[0],Atrt=77, PV}mHitClr=$D01E,Dmactl=$22F, Gractl=$D01D,PmBase=$D407, Priority=$26F,Vcount=54283, Loud1=[0],Tone=[8],Flg=[1],W} Mstatus=[0],Pep=[5],My=[0]CARD Scrn=88,RamSet,HiMem=$2E5, Score=[0],Sdlst=560, Vdslst=512,Max=[0], Pm_BX}aseAdr,Adres,AdresBINT Xdir,YdirINT ARRAY Pxdr=[0 0 0 0], Pydr=[0 0 0 0]CARD ARRAY Linept(24),Sc(10)BYTE AY}RRAY Charset,Dlist,Stacky(9), PmHpos(8)=$D000,Stack(9), Stackx(7)=[0 9 26 9 26 9 26], Px(4)=[0 0 0 0],Py(4)=[0Z} 0 0 0], Begx(4)=[0 64 124 184], Begy(4)=[0 18 90 42], Pm_Width(5)=$D008,Plptr, Pm_Mismask(4)=[$FC $F3 $C[}F $3F], Pcolr(4)=704,Pmtopf(8)=$D000, Pmtop(8)=$D008,Pfcol(8),Pcol(8), Chmp1(0)=[0 0 0 0 28 42 54 28 73 127 28 \}20 22 48 0 0 0 0], Chmp2(0)=[0 0 0 0 28 42 54 28 8 127 93 20 52 6 0 0 0 0], Ibm(0)=[0 0 0 0 88 84 88 84 88 0 68 108 8]}4 68 0 0 0 0], Cmdore(0)=[0 0 0 0 224 176 151 134 128 128 134 151 176 224 0 0 0 0], Apple(0)=[0 0 0 0 48 8 8 62 127 127^} 127 127 62 28 0 0 0 0], Estat(4), Msl1(0)=[170 85 170 85 170 85 170 85 170 85 170 85 170 85 170 85 170 85], Msl2(0_})=[85 170 85 170 85 170 85 170 85 170 85 170 85 170 85 170 85 170], ShapeTable(0)=[ 85 17 17 68 68 17 17 85;1-GIRDER `}160 170 160 160 160 160 170 160; 10 170 10 10 10 10 170 10;3 RT LDR 170 51 85 51 170 51 85 51;4 LV1 0 0 0 0 170 85 170 a}85;5 LV1 CRUNCH 85 51 170 51 85 51 170 51;6 LV2 0 0 0 0 85 170 85 170;7 LV2 CRUNCH 255 34 85 34 255 34 85 34;8 LV3 0 b}0 0 0 255 85 255 85;9 LV3 CRUNCH 165 51 90 51 165 51 90 51;10 LV4 0 0 0 0 165 90 165 90;11 LV4 CRUNCH 190 235 215 195c} 195 215 235 190;12 235 130 150 170 170 150 130 235;13 ]PROC Pause() ;TESTWHILE Consol<>6 DO OD RETURNPROC Downld}oad();Step back HiMem and move the;character set into RAMRamSet=(HiMem-$400)&$FC00;1K boundaryChrBase=RamSet RSH 8HiMem=e}RamSetMoveBlock(RamSet,57344,1024)Charset=RamSetRETURNPROC Modify();Modify the RAM character setCARD xxFOR xx=0 TO 10f}3DO Charset(xx+8)=ShapeTable(xx)ODRETURNPROC Pmgraphics()Zero(PmHpos,8)Zero(Pm_Width,5)Dmactl=$2E Pcolr(0)=52Pm_Bag}seAdr=(HiMem-$400)&$FC00PmBase=Pm_BaseAdr RSH 8HiMem=Pm_BaseAdr+384Priority==&$C0%1 Gractl=3RETURNCARD FUNC PmAdr(BYTE h}n)IF n>=4 THEN n=0 ELSE n==+1 FIRETURN(Pm_BaseAdr+384+(n*$80))PROC PmClear(BYTE n)CARD ctrBYTE ARRAY playadrplayadr=Pmi}Adr(n)IF n<4 THEN Zero(playadr,$80) ELSE n==-4FOR ctr=0 TO $80-1DO playadr(ctr)==&Pm_Mismask(n) ODFIRETURNPROC Dlint(j});the display list interrupt routine[$48 $8A $48 $98 $48]Wsync=1 Colbk=50 Colints=12[$68 $A8 $68 $AA $68 $40]PROC Scorek}Line();set up the dliVdslst=Dlint Dlist(27)=132 Nmien=$C0RETURNPROC Moveit(BYTE ARRAY shape BYTE which,num,xl}x,yy)Adres=PmAdr(which)+yyMoveBlock(Adres,shape,num)PmHpos(which)=xxRETURNPROC Putman();Clear PM space/ put Players onm}screenBYTE lpFOR lp=0 TO 3DO Estat(lp)=0 PmClear(lp)OD Mstatus=0 Ld=0 Ld2=0 SndRst()X0=76 Y0=66 Moveit(Chmp1,0,18,X0,Yn}0)FOR lp=1 TO 3DO Px(lp)=Begx(lp) Py(lp)=Begy(lp) IF lp=1 THEN Moveit(Ibm,lp,18,Px(lp),Py(lp)) ELSEIF lp=2 THEN Movo}eit(Cmdore,lp,18,Px(lp),Py(lp)) ELSE Moveit(Apple,lp,18,Px(lp),Py(lp)) FIODRETURNPROC Testcol()BYTE llFOR ll=0 TO p}7 DOPfcol(ll)=0 Pcol(ll)=0 ODDO UNTIL Vcount&128 ODFOR ll=0 TO 7 DOPfcol(ll)=Pmtopf(ll)Pcol(ll)=Pmtop(ll) ODPmHitClr=1q}RETURNBYTE FUNC PmHit(BYTE n,cnum)IF n<4 THEN n==+4 ELSE n==-4 FIIF cnum<4 THEN RETURN((Pcol(n) RSH cnum)&1) ELSE cnum=r}=&3 RETURN((Pfcol(n) RSH cnum)&1)FI RETURN(0)PROC Msldrop();put Pepper on screenBYTE trig=644,lp,tt=[0]IF Ld>1 THEN Lds}==-2 Sound(2,Ld LSH 3,10,Ld) ELSEIF Mstatus>0 THEN Sound(2,Mstatus LSH 2,10,4)FIIF Mstatus>0 THEN tt=1-tt Mstatus==+1t} IF tt=0 THEN MoveBlock(AdresB,Msl2,18) ELSE MoveBlock(AdresB,Msl1,18) FI IF Mstatus=50 THEN Zero(AdresB,18) u} Mstatus=0 Sound(2,0,0,0) FIFIIF trig=1 OR Pep=0 OR Mstatus>0 THEN RETURNFIMstatus=1FOR lp=0 TO 3DO PmHpos(lp+4)=X0v}-3+(lp LSH 2) ODMy=Y0AdresB=PmAdr(4)+MyMoveBlock(AdresB,Msl1,18) Ld=12Pep==-1Position(36,23) Print(" ")Position(36,23w}) PrintB(Pep)RETURNPROC Gotbumped()BYTE lq,lq1IF Ld2>0 THEN Ld2==-1 FISound(3,Ld2 LSH 3,8,Ld2)FOR lq=0 TO 3 DO FOR lq1x}=1 TO 3 DOIF PmHit(lq+4,lq1)=1 AND Estat(lq1)=0 THEN Ld2=14 Estat(lq1)=1 Score==+5 PmHpos(lq+4)=0FI OD ODFOR lq=1 TO 3 Dy}OIF Estat(lq)>0 THEN Estat(lq)==+1 Pcolr(lq)=((Rand(14)+1) LSH 4)+10FIIF Estat(lq)=Ft THEN Estat(lq)=0 PmClear(lq) Pcolz}r(lq)=((Rand(14)+1) LSH 4)+10 Px(lq)=Begx(lq) Py(lq)=Begy(lq) IF lq=1 THEN Moveit(Ibm,lq,18,Px(lq),Py(lq)) ELSEIF lq=2 {}THEN Moveit(Cmdore,lq,18,Px(lq),Py(lq)) ELSE Moveit(Apple,lq,18,Px(lq),Py(lq)) FIFI OD RETURNPROC Title()BYTE colp|}f0=53270,colpf1=53271, colpf3=53273,rtclock=20Graphics(18)Position(5,4) PrintD(6,"ANALOG MAN")Position(8,5) PrintD(6,}}"BY")Position(3,7)PrintD(6,"david plotkin")Position(3,9)PrintD(6," ")WHILE Consol<>5DO colpf3=Fate Atrt=0 Ws~}ync=0 colpf0=128-Vcount+rtclock RSH 2 colpf1=Vcount+rtclock RSH 2ODRETURNPROC Gr4Init();Set up the address of each s}creen;line,initialize and set up Gr. 4CARD xxBYTE clr1=709Graphics(0) CursIn=1 Print(" ")FOR xx=0 TO 23DO Linept(xx)=Sc}rn+(40*xx) ODDlist=Sdlst Dlist(3)=68FOR xx=6 TO 27DO Dlist(xx)=4 OD clr1=68RETURNPROC Update();print data on the text }linePosition(0,23) Print("Score: ")Position(7,23) PrintC(Score)Position(13,23) Print("Lives: ")Position(20,23) PrintB(Lv)}Position(22,23) Print("Hi: ")Position(26,23) PrintC(Max)Position(32,23) Print("SB: ")Position(36,23) Print(" ")Positio}n(36,23) PrintB(Pep)RETURNPROC Plot4(BYTE x,y,ch);Plot a char at location x,yBYTE ARRAY lineline=Linept(y) line(x)=chR}ETURNBYTE FUNC Locate4(BYTE x,y);Returns the value of the char at x,yBYTE ARRAY lineline=Linept(y)RETURN(line(x))PROC} Hline(BYTE x1,y1,x2,ch);draw a line of ch characters from;x1,y1 to x2,y1 (horizontal line)BYTE ARRAY lineBYTE lpline=Li}nept(y1) lp=x1DO line(lp)=ch lp==+1 UNTIL lp=x2+1 ODRETURNINT FUNC HStick(BYTE port)BYTE ARRAY ports(4)=$278INT ARRAY v}alue(4)=[0 1 $FFFF 0]port==&3RETURN (value((ports(port)&$C) RSH 2))INT FUNC VStick(BYTE port)BYTE ARRAY ports(4)=$278IN}T ARRAY value(4)=[0 1 $FFFF 0]port==&3RETURN (value(ports(port)&3))PROC EndGame();game overBYTE trig=644,wsync=$D40A,rt}clock=20, lm=53271,vcount=54283SndRst() Bkgrnd=0 Dlist(10)=2IF Score>Max THEN Max=Score FIPut(125) Update()Position(}7,5)Print("All DONE Press ")DO vcount=0 lm=vcount+rtclock RSH 2 Atrt=0 UNTIL trig=0ODBkgrnd=148 Dlist(10)=4 Put(1}25)Lv=5 Pep=5 Indx=0 Level=5 Ft=200Score=0 Update() PmHitClr=0RETURNPROC Meltdown()BYTE lp,lq,time=20BYTE ARRAY meltS}ndRst() melt=PmAdr(0)+Y0+4FOR lp=0 TO 30DO lq=Rand(10) melt(lq)=Fate Sound(0,Fate,8,8) time=0 DO UNTIL time=3 ODODFOR l}p=0 TO 9DO melt(lp)=0 Sound(0,lp*10,10,8) time=0 DO UNTIL time=2 ODOD Sound(0,0,0,0)RETURNPROC Ouch()BYTE lc,ldIF Pco}l(4)=0 THEN RETURN FIFOR lc=1 TO 3DO IF PmHit(0,lc)=1 AND Estat(lc)>0 THEN RETURN FIODMeltdown()FOR lc=0 TO 7 DO PmClea}r(lc) ODLv==-1 Position(20,23) PrintB(Lv)IF Lv=0 THEN EndGame() ELSE Putman()PmHitClr=0 FI RETURNPROC InitLev();Set ini}tial stack values, call PutmanBYTE lpFOR lp=1 TO 8 DO Stack(lp)=0 ODStacky(1)=4 Stacky(2)=4 Stacky(3)=10Stacky(4)=10 Stac}ky(5)=16 Stacky(6)=16Stacky(7)=0 Stacky(8)=0 Putman()RETURNPROC Girders();draw the main four lines of girders;clear scr}een and init new levelSndRst() Zero(Scrn,960) Loud=0Hline(2,22,37,1) Hline(2,16,37,1)Hline(2,10,37,1) Hline(2,4,37,1)Hlin}e(9,4,13,4) Hline(9,10,13,6)Hline(9,16,13,8) Hline(26,4,30,4)Hline(26,10,30,6) Hline(26,16,30,8)InitLev()RETURNPROC Sc}reen1();draw screen 1BYTE lpGirders();now the laddersFOR lp=4 TO 21DO Plot4(2,lp,2) Plot4(3,lp,3) Plot4(19,lp,2) Plot4}(20,lp,3) Plot4(36,lp,2) Plot4(37,lp,3)OD Position(15,23)Print (" ")RETURNPROC Screen2();draw sc}reen 2BYTE lpGirders() FOR lp=4 TO 21DO Plot4(19,lp,2) Plot4(20,lp,3) ODFOR lp=10 TO 15DO Plot4(2,lp,2) Plot4(3,lp,3) OD}Position(15,23)Print ("")RETURNPROC Screen3();draw screen 3BYTE lpGirders() FOR lp=4 TO 21DO P}lot4(19,lp,2) Plot4(20,lp,3) ODFOR lp=4 TO 9DO Plot4(2,lp,2) Plot4(3,lp,3) ODFOR lp=16 TO 21DO Plot4(36,lp,2) Plot4(37,lp},3) ODPosition(15,23)Print (" ")RETURNPROC Screen4();draw screen 4BYTE lpGirders() Hline(16,4,23},0)Hline(16,16,23,0) FOR lp=4 TO 21DO Plot4(14,lp,2) Plot4(15,lp,3) Plot4(24,lp,2) Plot4(25,lp,3)OD Position(15,23)Prin}t (" ")RETURNPROC Screen5();draw screen 5BYTE lpGirders() Hline(16,10,23,0)Hline(16,16,23,0) FOR }lp=4 TO 21DO Plot4(19,lp,2) Plot4(20,lp,3) ODFOR lp=4 TO 9DO Plot4(14,lp,2) Plot4(15,lp,3) Plot4(24,lp,2) Plot4(25,lp,3)}OD FOR lp=16 TO 21DO Plot4(14,lp,2) Plot4(15,lp,3) Plot4(24,lp,2) Plot4(25,lp,3)OD Position(15,23)Print(" } ")RETURNPROC Screen6();draw screen 6BYTE lpGirders() Hline(16,4,23,0)Hline(16,10,23,0) Hline(16,16,23,0)FOR }lp=4 TO 21DO Plot4(14,lp,2) Plot4(15,lp,3) Plot4(24,lp,2) Plot4(25,lp,3)OD Position(15,23)Print (" }")RETURNPROC Screen7();draw screen 7BYTE lpGirders() Hline(16,10,23,0)Hline(16,16,23,0) FOR lp=4 TO 21DO Plot4(19,lp,}2) Plot4(20,lp,3) ODPosition(15,23)Print (" ")RETURNPROC Screen8();draw screen 8BYTE lpGirders()}Hline(16,10,23,0) Hline(16,16,23,0)FOR lp=4 TO 21DO Plot4(2,lp,2) Plot4(3,lp,3) Plot4(36,lp,2) Plot4(37,lp,3)OD Positio}n(15,23)Print (" ")RETURNPROC Screen9();draw screen 9BYTE lpGirders() Hline(16,4,23,0)Hline(16,1}0,23,0) Hline(16,16,23,0)FOR lp=4 TO 21DO Plot4(2,lp,2) Plot4(3,lp,3) Plot4(36,lp,2) Plot4(37,lp,3)OD Position(15,23)Pr}int (" ")RETURNPROC Falling(BYTE tt);keep track of level statusBYTE lpIF tt=4 THEN IF X0<120 THE}N Stack(1)==+1 ELSE Stack(2)==+1 RETURN FIFIIF tt=6 THEN IF X0<120 THEN Stack(3) ==+1 ELSE Stack(4)==+1 RETURN} FIFIIF tt=8 THEN IF X0<120 THEN Stack(5)==+1 ELSE Stack(6)==+1 RETURN FIFIRETURNPROC Squashed(BYTE wh)BYTE l}k,xx,yyxx=(Stackx(wh) LSH 2)+48yy=(Stacky(wh) LSH 2)+16-14FOR lk=1 TO 3DO IF Px(lk)>=xx-8 AND Px(lk)<=xx+16 AND Py(lk)=}yy THEN Estat(lk)=1 Score==+5 Ld=14 FIOD RETURNRETURNPROC DropLevel();make levels fall, keep track of y posBYTE lp,}levBYTE ARRAY wh(7)=[0 5 5 7 7 9 9]FOR lp=1 TO 6DO IF Stack(lp)>=5 THEN Stack(lp)==+1 FI IF Stack(lp)>=7 THEN Hline}(Stackx(lp),Stacky(lp), Stackx(lp)+4,0) Score==+1 Stacky(lp)==+1 lev=Stacky(lp) IF lev=10 OR lev=16 THEN Stack(lp})=0 Hline(Stackx(lp),lev,Stackx(lp)+4, wh(lp)-1) IF Stacky(lp+2)=lev THEN Stack(lp+2)=7 Stacky(lp+2)=}lev+1 Hline(Stackx(lp+2),lev+1, Stackx(lp+2)+4,wh(lp+2)) FI ELSE Hline(Stackx(lp),lev,Stackx(lp)+4, } wh(lp)) IF lev=22 THEN Stack(lp)=0 FI FI IF lev=10 OR lev=16 OR lev=22 THEN Squashed(lp) FIFI ODRETURN}PROC Check();Look ahead-see whats there and moveBYTE xt1,xt2,yt1,yt2,t1,t2,t3,t4BYTE ARRAY pstnxt1=(X0-48) RSH 2 yt1=(Y}0-16+14) RSH 2t1=Locate4(xt1,yt1)t2=Locate4(xt1+1,yt1)IF t1=0 AND t2=0 THEN;falling Y0==+4 Moveit(pstn,0,18,X0,Y0) Ton}e=10 Loud=10 RETURNFIIF Stick0=15 THEN RETURN ELSE Tone=8 Flg=1-Flg IF Flg=0 THEN pstn=Chmp1 ELSE pstn=Chmp2 FI}FIIF Stick0=7 THEN;move right t1=Locate4(xt1+2,yt1) Loud=6 IF X0<192 THEN X0==+4 FI Moveit(pstn,0,18,X0,Y0) IF (t1=}4 OR t1=6 OR t1=8) THEN Plot4(xt1+2,yt1,t1+1) Falling(t1) FIFIIF Stick0=11 THEN;move left t1=Locate4(xt1-1,yt1) Lou}d=6 IF X0>56 THEN X0==-4 FI Moveit(pstn,0,18,X0,Y0) IF (t1=4 OR t1=6 OR t1=8) THEN Plot4(xt1-1,yt1,t1+1) Falling(t1}) FIFIIF Stick0=14 THEN;move up t1=Locate4(xt1,yt1) t2=Locate4(xt1+1,yt1) t3=Locate4(xt1,yt1-1) t4=Locate4(xt1+1,}yt1-1) IF ((t1=2 AND t2=3) OR (t3=2 AND t4=3)) THEN Y0==-4 Loud=6 Moveit(pstn,0,18,X0,Y0) FIFIIF Stick0=13 }THEN;move down t1=Locate4(xt1,yt1) t2=Locate4(xt1+1,yt1) IF (t1=2 AND t2=3) THEN Y0==+4 Moveit(pstn,0,18,X0,Y0) Lou}d=6 FIFIRETURNPROC Noise();the sound effectsIF Loud>0 THEN Loud==-1 Sound(1,Y0,Tone,Loud)FIRETURNPROC NoChase(B}YTE dl,dr,du,dd,lp)BYTE selIF (du=0 AND dd=0) THEN IF (Pxdr(lp)<0 AND dl=1) THEN RETURN ELSEIF (Pxdr(lp)>0 AND dr=1) THE}N RETURN FI FIIF (dl=0 AND dr=0) THEN IF (Pydr(lp)<0 AND du=1) THEN RETURN ELSEIF (Pydr(lp)>0 AND dd=1) THEN RETURN} FIFI sel=Rand(4)IF (sel=0 AND dl=1) THEN Pxdr(lp)=-4 Pydr(lp)=0 ELSEIF (sel=1 AND dr=1) THEN Pxdr(lp)=4 Pydr(lp)=0 ELS}EIF (sel=2 AND du=1) THEN Pxdr(lp)=0 Pydr(lp)=-4 ELSEIF (sel=3 AND dd=1) THEN Pxdr(lp)=0 Pydr(lp)=4 ELSE Pxdr(lp)=0 Pydr}(lp)=0FIRETURNPROC Chase();the creatures moveBYTE lp,xt1,xt2,yt1,yt2,t1,t2,t3,t4, dir,dl,dr,du,ddINT delx,dely,dx},dyFOR lp=1 TO 3; for each chaserDO delx=X0-Px(lp) dely=Y0-Py(lp) dx=delx dy=dely IF delx<0 THEN delx=-delx FI IF dely<0} THEN dely=-dely FI delx==RSH 2 dely==RSH 2 xt1=(Px(lp)-48) RSH 2 yt1=(Py(lp)-16+14) RSH 2 t1=Locate4(xt1,yt1) t2=Locate}4(xt1+1,yt1) t3=Locate4(xt1,yt1-1) t4=Locate4(xt1+1,yt1-1) dir=0 dl=0 dr=0 du=0 dd=0 IF (t1=2 AND t2=3 AND Py(lp)<91) T}HEN dd=1 FI IF ((t1=2 AND t2=3) OR (t3=2 AND t4=3)) THEN du=1 FI IF (yt1=4 OR yt1=10 OR yt1=16 OR yt1=22) THEN dir=1} FI IF (dir=1 AND Px(lp)>56) THEN dl=1 FI IF (dir=1 AND Px(lp)<192) THEN dr=1 FI IF (dely<=Level AND delx<=Level) TH}EN IF (dx<0 AND dl=1) THEN Pxdr(lp)=-4 Pydr(lp)=0 ELSEIF (dx>0 AND dr=1) THEN Pxdr(lp)=4 Pydr(lp)=0 ELSEIF (dy<}0 AND du=1) THEN Pxdr(lp)=0 Pydr(lp)=-4 ELSEIF (dy>0 AND dd=1) THEN Pxdr(lp)=0 Pydr(lp)=4 ELSE Pxdr(lp)=0 Pydr(lp})=0 FI ELSE NoChase(dl,dr,du,dd,lp) FI IF Estat(lp)<>0 THEN Pxdr(lp)=0 Pydr(lp)=0;killed! FI IF t1=0 AND t2=0 THEN Px}dr(lp)=0 Pydr(lp)=4 FI; falling! Px(lp)==+Pxdr(lp) Py(lp)==+Pydr(lp) IF lp=1 THEN Moveit(Ibm,lp,18,Px(lp),Py(lp)) EL}SEIF lp=2 THEN Moveit(Cmdore,lp,18,Px(lp),Py(lp)) ELSE Moveit(Apple,lp,18,Px(lp),Py(lp)) FIODRETURNPROC Play();th}e play game loopBYTE lp,time=20DO Check() Chase() Msldrop() Atrt=0 Position(7,23) PrintC(Score) FOR lp=0 TO 2 DO Nois}e() time=0 DO UNTIL time=1 OD OD Noise() Testcol() Gotbumped() Ouch() IF Indx=0 THEN EXIT FI DropLevel();make levels fa}ll IF (Stacky(1)=22 AND Stacky(2)=22 AND Stacky(3)=22 AND Stacky(4)=22 AND Stacky(5)=22 AND Stacky(6)=22) THEN }EXIT;test for level finished FI IF Level=5 THEN Check() time=0 DO UNTIL time=2 OD FIODRETURNPROC Vector();Dummy} PROC for the screensRETURNPROC Intro()BYTE tm=20tm=0DO Sound(0,tm,10,4) UNTIL tm=100 ODPosition(15,23)Print(" } ")Update() Sound(0,0,0,0)RETURNPROC Main()BYTE time=20,lp,ch=764Title()Gr4Init() Snd1=0 Snd2=3Downloa}d() Pmgraphics()FOR lp=0 TO 7 DO PmClear(lp) ODFOR lp=1 TO 3DO Pcolr(lp)=((Rand(14)+1)LSH 4)+10 ODPcolr(0)=56 Modify() Sc}oreLine()Sc(1)=Screen1 Sc(2)=Screen2Sc(3)=Screen3 Sc(4)=Screen4Sc(5)=Screen5 Sc(6)=Screen6Sc(7)=Screen7 Sc(8)=Screen8Sc(}9)=Screen9DO Indx==+1 Vector=Sc(Indx) FOR lp=0 TO 7 DO PmClear(lp) OD Vector() Intro() Play() IF Indx=9 THEN Indx=0 Le}vel==+4 IF Pep<8 THEN Pep==+2 FI IF Ft>100 THEN Ft==-20 FI Update() FIODRETURNPlay() IF Indx=9 THEN Indx=0 Le\#LhihiHHȱȱ`8Hh` #E…¦ #`L#` $ }"Ff ee&8L.$ Fj` &`p B V8l $ Vhhl$HHJJJJh }h`hhl$ `Hh$`Hh`Hh` $IHiDiE B $HI B $`ԆՄ }0ȑ8)ȑ`H $ 4%hL$ $LW% $Lf%Lf% $Lr% $L$ $L}% $HI B $`$L%H` B VhKI J }S:DEB $`UVT`% ҩҥ)) ҥ``ƢŢ8*8 %Ţ` }Ƣƣ8`HhL6&Ƥƥ8`$2SGN $850&& }&PROC &&M0Lor m& routi&$&+'$[$A5$86$A6$87$A4$C2$10$03   @|Z*&?& <' PROC }_MUL=*()('R'SET $& = _MUL<'q';integer multip*6I0*6]4XTXTXDlTDగ }0>>&85'+'$$F0UUUUUUUUUUUUUUUUUUUDDU 3U33U3UUU33U33UU }"U""U"UU3Z33Z3ZZ낖La(ILn(La(`Lr(8)&)&&& p$&& }&& f&&&&&`9$L(((g((L)(i(i&e&e('((L(`L#) }Щ ]&Щ ]&./48)&)&&& p$&i&io) o`3L))) }L))L))&i&i) :$ee`A5$86L))) ))))L*)) ]&Lg*8 }))))))Lg*)m))m))=$'))L0*`Lk*HHH ԩ2Щ hhh@L*j*i*&i& }i` of diL* #** )m*&i&***&& f&**`(L***L+*'* )* }L+&&& &L&B&&&'h ***L+*'*'*'*'*IL+*'*'*' } *L+*IL+*'*'*' *L+*'*'*' **LS+`L+++L,+('+H'+ }L+ )L,++LT,+Ю+('+Ю+H'+L,,`10L_,[,Z,Z,L{,Z,iZ,L,8Z,Z,[,L,[, }Z,H' p$)`L,[,)[,[,Z,(' p$)``ML,͠&L-8&&& &  %L-ͥ&L-& }  %ͥ&L-8,,&,LW-'䮷&& f&Ln-'Ү&& f&&I2L-&& ]&& } %I& ͥ&L-`&,,L-,i8&, e,L-&& )m&&i&' }Ү&& f& &8&&$ %L:. .6 %$ %& w%`$6LV.͡&Li.8&&& & %Q. }Q.L.R.R.L.Q.iR. \,IL.R.'L.&R.'&i&&i&Q.iR.L.Q.L.Q.Q. }L0Q.'L;/Q.' &i i Q.Q.'M&L0Q.'Q. ) &i i Q.Q.'Q. }'Q.'Q.'Q.IL/Q.'Q.'Q.' *L0Q.IL/Q.'Q.'Q.' *L0Q.'Q.'Q.' } *Q.L.`L 0 % %L(0 ANALOG MAN0 }% %L@0BY0= }% %Lc0 david plotkin0U }%  %L0 } 0x }%IL0 ҍРM 8 ԅJJeХJJ eL0`$AL0 %L0 0 %000 }0LJ10 m&0*(m&00( :$XeYe0Э0L01&0&&i&iD00 }00L1&m0&m000Ls1D`L1 %L1Score: 1 % %&& l% %L1Lives: 1 } % %& w% %L2Hi: 2 % %&& l% %L?2SB: 2: %$ %LV2 2R %$ %& w%`B0 }$F4Lu2 #m2n2 m&*(m&q2p2p2mm2q2io2`1$84L2222 m&*(m&222m22 }i`585_L2 #22 m&*(m&22222m22i222i2EL,3`lZ3PRLi3 }Y3Y3)Y3Y3x) JJ mb3*(mc3`833L333)33x) m3*(m3 }`L3 &&i &i&ͪ&&&L"4&&&&} % 1 %LK4All DONE Press Ţ46 % ԥJJ e }ЄMLR4&i &i} %&&&&ȍ&&& 1` $4CL4 & )m&ii4i }44ͷ4L45 &44m44i Ҡ ҩ %IL%54L44 ͷ4L54m44i } 4 :$ %IL|54L95 %`5L5L'L5`5͙5L55 \,IL55'L5`5L }5 45͙5L55 )5L58&& %& w%&L6 3L'6 *`$L,6(6(6LI6(6&(6L16&& }& &&&&& *`Lx6 &YX ]&&% 2% 2%  2% 2  2 } 2  2 2  2 2 )6`L7 u677Lk77 r27 r27 r27 r2 }7$ r27% r27L7 %L7 7w %`EL7 u67͖7L77 r27 r27L7 7 }7L77 r27 r27L7 %L87 %`LL8 u688LJ88 r28 r28L&8 }8 8Ls88 r28 r28LO888L88$ r28% r28Lx8 %L8 8 %`9 }L8 u6 2 288L%98 r28 r28 r28 r28L8 %LH9 } 91 %`0LT9 u6  2 2P9P9L9P9 r2P9 r2P9Lv9P9 P9L9P9 r2P9 r2P9 } r2P9 r2P9L9P9P9L:P9 r2P9 r2P9 r2P9 r2P9L9 %L8: : % }`$LD: u6 2  2 2@:@:L:@: r2@: r2@: r2@: r2@:Ls: %L: } : %`$L: u6  2 2::L ;: r2: r2:L: %LC; } ;, %`$LO; u6  2 2K;K;L;K; r2K; r2K;$ r2K;% r2K;Lq; %L; } ; %`$L; u6 2  2 2;;L?<; r2; r2;$ r2 };% r2;L< %Lb< }o= 'o=&o= 'i 2&&o=&o=&p=p=I p=IL>o=&o= 'o= 'i8o=q=p= } 2o=i&Mp=L>o=i&o=ip=i&o=i 'p=io=i 'io=iq= 2L }>o= 'o= 'io=q=p= 2p=IL>o=&p=I p=I p=IL>o=  @ASCLOOP2Q 9 PASCII9 R>EOL H@ASCLO*}OP VALIDASC E@DONE ASC2INTE@ASCERRORQNUMP   QNUM P ,( D@DONE2 @ASCERROR<PRINT +}CONVERTMSGF;P @DONEZdnX;x#X;******************************X;X;INT2ASC macroX;!X;Usage: INT2ASC numb,}er,charsX;#X;'number' is address of integer$X;'chars' is address of resulting#X; ASCII string, ending with EOLX;-} INT2ASC    AError in INT2ASCAQ PNUM Q " PNUM, INT2ASC6$>@ @INTLOOPJ2T Q.}ASCII9^P 9h R>EOLr H@INTLOOP|X;$X;*******************************X;X;LDGZERO macroX;"X;Usage: /} LDGZERO address,bytesX;$X;'address' is beginning of ASCIIX; string of digits$X;'bytes' is max number of digits X0}; to check for leading zerosX; LDGZERO     AError in LDGZEROA& 0 $>: @SUPZEROD 2N Q 9X R>0b H1}@LZDONEl Q> v P 9 (>  H@SUPZERO @LZDONE  rror in LDGZEROA& 0 $>: @SUPZEROD 2N Q 9X R>0b H? X; $X;******************************* X; X;subroutine VALIDASC %X;called by ASC2INT,ASC2BCD macros X; !X;make3}s sure all characters in X;string beginning at address $X;ASCII are valid ASCII codes for #X;numeric digits; looks until 4}it "X;hits an EOL; error message is "X;printed and carry flag is set !X;if an invalid char. is found X; VALIDASC $>5}& LOOPASC0 QASCII9;;get a char: R>EOL;;EOL?D HCHKASC;;no,go check itN (>;;yes, 1st char?X FINVALID;;yes,null e6}ntryb ,;;no, all donel :;;go backv CHKASC R>0;;less than 0? DINVALID;;yes, no good R>:;;greater than 9? EINVA7}LID;;yes, no good M>;;clear 4 hi bits PASCII9;;save 4 lo bits 2;;ready for next DLOOPASC;;char INVALID PRI8}NT ASCERRMSG ;;;set carry to :;;show an error X; ASCERRMSG  ANon-numeric A  Acharacter foundA=EOL X;* #X;*9}*****************************4 X;> X;subroutine ASC2INTH X;called by ASC2INT macroR X;\ $X;converts string of ASCII digit:}sf !X;at address ASCII to a 2-bytep #X;binary integer at address NUM;z X;carry flag set if error X; ASC2INT Q>;;zer;}o hi byte PNUM QASCII;;get first char PNUM $>;;next char EOL? QASCII9;;next char EOL? R>EOL HNEXTDIG<}IT;;no, go on ,;;yes all done : NEXTDIGIT MULT10;;multiply by 10EABORT;;carry set? error2$QASCII9;;next =}char EOL?. R>EOL8HNEXTDIGIT;;no, go onB,L ABORTV :;;exit`CONVERTMSGj AASCII conversionAt A error...A=EOL~>}X;$X;*******************************X;X;subroutine MULT10!X;called by subroutine ASC2INTX;!X;multiplies bina?}ry integer at X;address NUM and NUM+1 by 10X;and adds the next digit inX; MULT10QNUM;;save high byte5@}QNUM;;get low byte TNUM;;multiply x 2 UNUMTNUM;;times 2 again( UNUM2ONUM;;add to self to<PNUM;;effecA}tivelyF7;;multiply x 5P ONUMZ PNUMdTNUM;;times 2 again,nUNUM;;total is now x10xQASCII9;;add in next cB}harONUMPNUMQ>;;adding 0 to highONUM;;byte just pullsPNUM;;in carry value:X;$X;************C}*******************X;X;subroutine INT2ASCX;called by INT2ASC macroX;%X;converts a 2-byte binary integer"X;at D}address NUM to a string of"X;ASCII digits at address ASCIIX;" INT2ASC,%>;;pointer to table6'COUNTER;;of powers E}of 10@NEXTDIGIT2J$>;;digit counterT SUBLOOP^QNUM;;get low byteh;;;subtract lo byterSDECTABLE8;;of current|F}PNUM;;power of 10QNUM;;now subtract hi3;;byte of currentSDECTABLE8;;power of 10DADDITBACK;;if neg,restoreG}PNUM;;save hi byte2;;digit counter1;;point to lo-byte,;;of current powerDSUBLOOP;;of 10 again ADDITBACKH}1;;point to lo byteQNUM;;add lo byte ofODECTABLE8;;power of 10PNUM;;back inA;;convert digitL>0;;counterI} to ASCII&$COUNTER;;and store at0PASCII9;;next position: #COUNTERD3;;point to nextN3;;power of 10X)>;;at end J}of table?bDNEXTDIGIT2;;no, go onlQNUM;;get units columnvL>0;;convert to ASCII$COUNTER;;store it PASCII92K}Q>EOL;;add an EOL inPASCII9;;next position:;;all doneX; DECTABLE '  d  it PASCII92ied%X;Example 1. Interconverting ASCIin X;strings and 2-byte integersxX;X;by Karl E. WiegersX;EI=F>D8:MAM}CRO.LIBX;$X;-------------------------------X; PROGRAM STARTS HEREX;"X;You'll be prompted to enter a"X;numbeN}r with 1-5 digits. This X;is stored at address ENTRY. X;The binary integer produced"X;is stored at address INTEGER. O}X;If the number is too large,%X;missing (null entry) or has non- X;digits in it, you'll get an"%X;error message. 25 wilP}l be added,"X;to the value you entered, and6$X;the result will be converted to@$X;ASCII and printed on the screenJX;T$XQ};-------------------------------^X;hPrX;|- CLSPRINT PROMPTPOSITION =INPUT =ENTRYASR}C2INT ENTRY=INTEGEREENDADD INTEGER=INT2ASC INTEGER=ENTRYLDGZERO ENTRY=POSITION =PRS}INT AFTERPOSITION = PRINT ENTRY END!ENDX; ENTRY&INTEGER0X;: PROMPTD AEnter a number T}AN Awith 1-5 digits:A=EOLX AFTERb AAfter adding 25:A=EOLlX;v$X;-------------------------------X;>D8:SUBSU}.LIB Awith 1-5 digits:A=EOLX AFTERb AAfter adding 25:A=EOLlX;v$X;-------------------------------X;>D8:SUBSmXASUCHCKSUCMBUFSEC@&@rAT' W}""** BOOT-DIRECTORY Maker ** by Bill Bodenstein ((COPYRIGHT 1988 BY ANALOG COMPUTINGE;@%,;@,/X}-@@%3"A67<,.>:,E 33F:A,"@ *F:A,"@@0S(( Atari File Manager System nY}ot inP(#memory. Reboot with DOS 2.0 or 2.5.S&S(( *** BOOT-DIRECTORY Maker ***+(S(#This program will write a shoZ}rt m/l(q,($routine (BOOT-DIRECTORY) to sector 3S("which will list all files names inq(the directory at boot-up.2W([}-("If just searching for a file, holdW(%down pressed, loop untilxX; pressed.X;!}SELECTPRESSED?QCONSOLEPRESSR>SELECTKEYLOOPFOREVERFLOOPFOREVERX;X; X;Fix patch made to sector 1:X; !} JMP $800=>JMP $714 X;and move cursor to top line X;(so LOAD*IT will be happy).X;RESETCURSORQ>PCURSORROW!}X;" RESETJMP,Q>4CONTBOOT6P@Q>5CONTBOOTJPTX;^"X;Return and let FMS take over.hX;rGOBOOTER!CONTBOO!}TX;" RESETJMP,Q>4CONTBOOT6P@Q>5CONTBOOTJPTX;^"X;Return and let FMS take over.hX;rGOBOOTER!CONTBOO @@LEppB.@A@!"#$%& '()*+,- ./01234 56789:%}%}@A#2904/'2!-3/,6%2%}by+evin0eck%}AB0ressanykeytobegin%}%}BC%}5se%}]\^_CeDtoentertextacklearditew%}uitndoDE2eplace7ith0resswhendone#lear0uzzle4ext#lear!ll#hanges!reyousure9. %}瀰値1uit %xitto$/33tart.ew0uzzle,ast#hange5.$/.%E:0HH (wEwExE ԍЎwEhh@l%}yz BrDEE JEEK VLFEF'CvCCC IUT HE[@ "H HDVC%}LFЭ IɛLTHɜLHɝLI-LqI}LJ~) LkH`{ HU&ТT %U HLFUTiT %}HLF/ԩ{E0@1"/FG.X@Y oJT&U H'DvC>DCV@ VK%} "HDPCNXCD GD ɛ~ ݩXC XCĎDXCDeCNjCD GD &LOLɛ%} jC KLG~ թjCDjCл I~`ɛ`GH` `LIhhLELQJLJLKA[ {a `%} BuDEEHI V`'NC` EbC I)Nn Yy`TLETTU HLF$0U%=U%} HLFT*T HLFTT HLFU %U HLF HLpFH HI BHIhLV ITiPͥi'͑ˈͅ˥΅%}ڠ'ˈU I˅] HLFT8 H&˩C̢T 8PͥΠ'͑ˈͅ˥΅ I']ˈU HLFH I%}$hLpFTX˥Y̥i(˥i`Э`@IJy` K "HDOC -H KLG I JhhLF~˩@%}̢ 'ˈiP˥i` "HDOC -HLEXix˥Yi̢ 'ˈiP˥iLE K "HMEOC -H KL%}GhhXi(˥Yi̢'ˈi(˥i JLEfDD` K "H;EJKOC -H KLGhh B V B V@%}i0˭1̠˅Xȱ˅YʍU ` K "H_EXCDHfDDhfD VKd KLG K~˩@̩ %}Di(ͥiα! LK8!fD&iP˥iΨDм`'NCDʴK^L`'DNC`fDDDʊjCD8%}XC!DfD VK`!fD V@ʈ V@fD V@ʈ V@fD V@ʈ V@fD V@ʈ`eC%}DLG@ VK`!fD V@ʈ V@fD V@ʈ V@fD V@ʈ V@fD V@ʈ`eC$ :: EIF;CRYPTOGRAM SOLVER(X;2<X;FSTART!OPNKYSCRPX;Z>D:CRYPTO2.M65dX;nX;x ENTERTEXTX;)}$>' DSPELN QELN19PPMPTLINE(9 QELN29PPMPTLINEP90 IDSPELN CHNGCLRSQ>;;set row andPC)}OLCRS;;col for entryQ>;;upper-leftPROWCRS;;pos of entry PCRSINHQ> " PRNTCHR,$>6W1QEDTPMPT9@PREP)}LINE9J0TIW1^X;h SAYSTARTrQ>| PCRSINH CLRPRMPT MVECRS$>W2QENTPMPT9PPMPTLINE90)}IW2 GETKEYQCONSOL;;read consoleR>;;if START HGETKEY2!ENTERDONE;;then DONE GETKEY2Q>;;RESET consol)}e PCONSOL QKEYPRS&R>0 FGETKEY: GETITD GETLETNR>;;RETURN?XHG1b!RTNlG1R>;;DEL LINE?vHG2 !)}DELINE G2R>HG3 !INLINEG3R>;;DEL CHR? FPRNTITR>HG4 !INSCHRG4R>};;CLS issuedHG5 !C)}LREDT G5R>~ FPRNTIT M>;;turn off HI bitR>  DGETKEY*R> 4DCC>EG6HCC!CRSCTRLR G6R>`\ FGETKEY)}f DPRNTITpR>{z EGETKEYS>PRNTIT PRNTCHR QCOLCRSR>& HGETKEY2 QROWCRSR> HNXTLINEQ>% )}PCOLCRS MVECRS !GETKEY NXTLINEQ> PCOLCRS,$ QROWCRS.O>8 PROWCRSB MVECRSL !GETKEYVX;`X;-)}----------------------jX; Set the Shown screentX; and the write to~X; screen to the mainX; puzzle entry screenX;-)}----------------------X; SETMAINQ>;;Screen offPDMAQ> PDLIENAQ>4DLI1;;ActivatePDLIVEC;;DLI 1 )}Q>5DLI1PDLIVECQ>4DLST1;;and DLIST 1 PDLI Q>5DLST1 PDLI(Q>;;reset colors2PBRD<Q>FPBCKP)}Q>";;and screenZPDMAd Q>4MANSCRn PSCREENx Q>5MANSCRPSCREENQ> PKEYPRS WTKEY QKEYPRSR> F)}WTKEYQ> PKEYPRS DONEWX; X;---------------------------X; The START key has beenX; pressed and we are re)}adyX; to start solving theX; puzzle. We have to putX; the CNTRL prompts on the"X; bottom of the screen and, X; as)}k for the puzzle letters6X; on the prompt line.@ X;---------------------------JX;T ENTERDONE^Q>h PCRSINHrQ>|)} PROWCRSQ>& PCOLCRSQ>  PRNTCHR$>' E2QCMD19PPMPTLINE(9 QCMD29PPMPTLINEP9Q> PRE)}PLINE90IE2 DOREPX; X;---------------------------& X; The CNTRL commands are now0X; on the screen. Time to:)}X; clear the prompt line andD X; put up the REPLACE> promptNX; for the user to startXX; entering text.b X;-----------)}----------------lX;v PRNTREP CLRPRMPT$>E1QREPPMPT9PPMPTLINE90IE1$> PRNTCRSQ>NP)}REPLCHRS9 GETMORE &REPLEN GETEM $REPLEN R> FGETMORE R> * FGETMORE4R>> HGE24H(>R FGETMOR)}E\ HGETWITHfGE24pR>~zHSHOWREPCHR(> FGETMORE BCKREPQ>PREPLCHRS90 IPRNTCRSSHOWREPCHR)}(>  FGETMORES>PREPLCHRS92 HPRNTCRS X; X;--------------------------$ X; This will print the WITH>. X)}; prompt on the screen and8 X; get the replacement charsB X; up to the length of theL X; puzzle chrs and then waitV X; fo)}r the RETURN or BK SP` X; key to be pressed. Thej X; CNTRL-B is now valid andt !X; will have to be dealt with ~ X; too. )}X;--------------------------- X; GETWITH &REPLEN Q> PREPLCHRS9 $> PRNWITHQWTHPMPT9 PWITHCHRS9 )}0 IPRNWITH $> PRNWCRS Q>N PWITHCHRS9 GETWLET( &ROWTMP2 GETEM< $ROWTMPF R> P FWPRNTZ R>d HG)}W5n !BCKTOREPx GW5 R> HGET2 FINENT Q> PWITHCHRS9 STOREREP !PRNTREP GET2R>~ HWPRNT (> )} FGETWLET GETBACK Q> PWITHCHRS9 0 IPRNWCRS" WPRNT, (REPLEN6 FGETWLET@ S>J PWITHCHRS9T 2^ HPRNWC)}RSh X;r "X;-----------------------------| X; This is where we enter the "X; puzzle letters to be changed "X;-------------)}---------------- X; GETEM GETLET R>~ HGE10 : GE10R> HGE11 : GE11R> HGE12 : GE12R>  )}HGE1& :0 GE1R>: HGE2D !CLRCHGN GE2R>X HGE4b 7l 7v !ENTERTEXT GE4R> HGE5 !NEWPUZ GE5R> )}HGE6 !QUIT GE6R> HGE8 !UNDOIT GE8R>A DGETEM R>[ DISOK R>{ EGETEM R>a DGETEM* S> 4 )}ISOK> :H X;R X;---------------------------\ X; Move the cursor so it willf X; show up on the screen p X; after inhibit)}ing it.z X;--------------------------- X; MVECRS $> Q>PUTCHR PICCMD9 Q>4LFRT PICBAL9 Q>5LFRT PICB)}AH9 Q> PICBLL9 Q> PICBLH9 CIOV:X;$X;-------------------.X; Clear the prompt8X; line on Main)}BX; entry screen.LX;-------------------VX;` CLRPRMPTjQ>t$>'~CLR1PPMPTLINE90 ICLR1:X;X;)}--------------------X; Confirm the ClearX; Screen command.X;--------------------X; CHKSURE$>S1QAYSPM)}PT9 PPMPTLINE90IS1( GETYN2 GETLET<%>FM>PR> NZ FNOSUREdR> nn FNOSURExR> Y FISSURER> )}y HGETYN FISSURE NOSURE%> ISSURE:X;X;--------------------------X; We make it here if theX; RE)}TURN key was pressedX; We will have to jumpX; down 2 lines unless weX; are on the last line inX; which case we wi)}ll have"X; to return to the top line,X;--------------------------6X;@RTNJ QROWCRSTR>^HR1h!ENTERTEXTrR)}1#ROWCRS| #ROWCRSQ> PCOLCRS MVECRS !GETKEYX;!X;----------------------------X; This is where we end )}up X; if one of the cursor X; control keys is pressed.!X; We will move in the desiredX; direction with full wrap-)}X; around where required.!X;----------------------------X; CRSCTRLR>& FCRSUP0R>: FCRSDNDR>N FCRS)}LTXX;b!X; A cursor right will fall inlX; to this part of routine.vX; %COLCRS)>% HCRSDONE%> 'COLCRS)} MVECRS !GETKEYX; CRSUP %ROWCRS)> HCRSDONED%> 'ROWCRS  MVECRS !GETKEY X;* CRSDN4 %R)}OWCRS>)>H HCRSDONEDR%>\ 'ROWCRSf MVECRSp !GETKEYzX; CRSLT %COLCRS)> HCRSDONE%>% 'COLC)}RS MVECRS !GETKEYX; CRSDONED PRNTCHR;;Do double CRSDONE!PRNTIT;;print.X; X;---------------------)}------X; This routine will print a$ X; single character stored in.X; the Accumulator8 X;---------------------------B)}X;L PRNTCHRV5`$> j Q>PUTCHRt PICCMD9~Q> PICBLL9 PICBLH97!CIOV;;auto returnX;X;-------------)}-------------X; Delete a line of puzzleX; text from the screen.X; Move all lines below thisX; line up one and era)}se theX; last puzzle text lineX; completely.X;-------------------------- X; DELINE FINDLINE( $ROWCRS2 D)}1QZSCR<,FO>PP PZSCR1Z QZSCRdO>n PZSCR1x22(> FDBLNK%>'D2Q@ZSCR17 P@ZSCR71)}HD2 QZSCR1 PZSCR QZSCR1 PZSCRHD1 DBLNK%>'Q>D3P@ZSCR7"1,HD36Q>@ PCOLCRSJ FI)}NDLINET%>^ Q@ZSCR7h POLDCHRr MVECRS| !GETKEYX; X;---------------------------X; Insert a blank puzzle )}X; line on the screen byX; moving this line and allX; others below it down one X; Fill this line with blanks X;----)}-----------------------X; INLINE $ROWCRS(> FIBLNKQ> PCRSINH MVECRS& Q>4LINE190 PZSCR: Q>5L)}INE19D PZSCRN$>XI10b0l (ROWCRSv FIBLNK QZSCR;S>P PZSCR1 QZSCRS> PZSCR1%>')}I2Q@ZSCR17 P@ZSCR71HI2 QZSCR1 PZSCR  QZSCR1 PZSCR HI1*IBLNK FINDLINE4%>'>Q>H P)}OLDCHRR PCRSINH\I3P@ZSCR7f1pHI3zQ> PCOLCRS MVECRS !GETKEYX;X;--------------------------X; )}Insert a character at theX; cursor position. DeleteX; the last character on theX; line also.X;-------------------)}-------X; INSCHR5 FINDLINEQ>%>$$ P@ZSCR7.78 !PRNTITBX;LX;------------------------VX; Find )}the current line of`X; text on the screen. It jX; will be found in ZSCRtX; when we are done here.~X;-----------------)}--------X; FINDLINE $ROWCRS QSCREEN PZSCRQSCREEN PZSCR F1QZSCR,O>( PZSCR QZSCR)}O>  PZSCR0HF1(:2X;< X;---------------------------F X; This routine will wait andPX; do nothing unti)}l START isZX; pressed.d X;---------------------------nX;x PRSSTRTQ>;;reset CONSOLEPCONSOL;;keys with 8QCO)}NSOL;;now read keyR>;;6=STARTHPRSSTRT;;not yet!:;;got it. RETURNX;!X;---------------------------- X; This )}routine locks on CAPSX; and turns off INVERSE and X; then gets one key from theX; keyboard. The calling X; routine)} will have to doX; the range checks.!X;----------------------------X;" GETLET,Q>@;;UPPERCASE6PSHFLOK;;lock@)}Q>;;INVERSEJPINVFLG;;offT NOPRS^ QKEYPRShR>r FNOPRS|?Q> PKEYPRSQ@y7:X; X;---------------)}------------ X; We come here when the userX; wants to clear out allX; changes to the puzzle. X;--------------------)}-------X; CLRCHG SVEPMPT CLRPRMPT$>CLQCCGPMPT9&PPMPTLINE900:ICLD CHKSUREN)>XHCPb)} RSTPMPTl !GETEMvCP CHNGCLRS CLRBUF77!ENTERDONEX;X; Clear the changes lineX; CHNGCLRSQ>)}4FRSTLINE PZSCRQ>5FRSTLINE PZSCR$>  CP1Q> %>'CP2P@ZSCR7 1*ICP24 QZSCR>,HO>PR PZS)}CR\ QZSCRfO>p PZSCRz0HCP1:X;!X;----------------------------X; We make it here when the!X; us)}er wants to clear out theX; edit screen.!X;----------------------------X; CLREDT CLRPRMPT$>CE10QCPZP)}MPT9PPMPTLINE90 ICE10$ CHKSURE.)>8HCEB !SAYSTARTLCEQSCREENV,`O>xj PZSCRtQSCREEN~O)}> PZSCR$>  CLRLINEQ>%>'NL P@ZSCR71INL QZSCR,O>P PZSCR  QZSCRO>)} PZSCR(02 HCLRLINE<!ENTERTEXTFX;P!X;----------------------------ZX; The user wants to start adX; new puzzle)}. We have to n X; prompt the user to be surexX; of this.!X;----------------------------X; NEWPUZ SVEPMPT C)}LRPRMPT$>NP1QNEWPMPT9PPMPTLINE90INP1 CHKSURE)> HDONEW RSTPMPT !GETEM DONEW"7,)}76 QSCREEN@,JO>(T PZSCR^QSCREENhO>r PZSCR|X;X;------------------------X; Clear the entire s)}creenX;------------------------X;$> DO1Q>%>'DO2P@ZSCR71IDO2 QZSCR,O>( PZSCR Q)}ZSCR O>& PZSCR0 0: HDO1D CLRBUFN !ENTERTEXTX X;b X;-----------------------l X; Clear the replacementv )}X; letter buffers. X;----------------------- X; CLRBUF $> Q> DO3PREPSET9 PUNDOBUF9 0 IDO3 : X)}; $X;------------------------------- X; This routine will QUIT the!!X; puzzle after prompting the !X; user and then exi)}t to DOS!$X;------------------------------- !X;*!QUIT4! SVEPMPT>! CLRPRMPTH!$>R!Q1QQUTPMPT9\!PPMPTLINE9f!)}0p!IQ1z! CHKSURE!)>! HEXIT! RSTPMPT! !GETEM!EXIT!7!7!$>!Q> ! PICCMD9! CIOV!$> !Q> " )}PICCMD9" CIOV"Q>@$" PDLIENA."Q8",B"O>L"P0V" PZSCR`"Qj"P1t" PZSCR~"%>" Q@ZSCR7"PX"3")} Q@ZSCR7"PY"Q>" PCRSINH"Q>"PBCK"Q>"PLUM"Q># PCOLCRS #Q> # PKEYPRS#:(#X;2#"X;------------)}-----------------<#X; We need to UNDO the lastF#"X; change made by the user. We P#X; will have to swap the oldZ#!X; rep buf)}fer with the currentd#X; buffer. This way you cann#X; UNDO the UNDO. Great uh??x#"X;-----------------------------#X;# U)}NDOIT# SVEPMPT# CLRPRMPT#$>#U1QUNDPMPT9#PPMPTLINE 9#0#IU1#$>#U7QUNDOBUF9#5# QREPSET9$ P*}UNDOBUF9$7$ PREPSET9"$0,$IU76$ DOREP@$Q>J$PT$P^$ U2Qh$R>dr$HU2|$ RSTPMPT$ !GETEM$X;$"X;------*}-----------------------$X; Come in here to do the$"X; actual changes to the puzzle$"X; We have to check each screen$X; *}location to see if there$"X; is a match in the REPSET. We$!X; also need to move 'special'$!X; characters right on up with*}$"X; no changes. All 'SPACE's are$X; left alone.$"X;-----------------------------%X;% DOREP% PRNTREPSET&%Q>4FRSTL*}INE0% PZSCR:%Q>5FRSTLINED% PZSCRN%Q> X% PROWTMPb% NXTLNEl%%>v%,% QZSCR%O>(% PZSCR1% QZSCR%O>%*} PZSCR1% CHKNXT% Q@ZSCR17%R>% FNXTCHR%R>!% ECHKREP% INVIT&L> &CH5& P@ZSCR7 & !NXTCHR*& CHKREP4*}&;>&S>!H&>R& QREPSET9\&R>f& HINVITp&FCH5z& NXTCHR&3&)>&& HCHKNXT&,& QZSCR&O>P& PZSCR& QZSCR*}&O>& PZSCR& "ROWTMP& HNXTLNE&:'X;'"X;-----------------------------' X; We need to save the PROMPT$'!X; line*} in temp storage before.'"X; we prompt the user with some8'!X; kind of Yes/No question. WeB'#X; will then be able to restore * }L'X; the prompt line to it'sV' X; original condition if they`'X; answer NO.j'"X;-----------------------------t'X;~' SVEPM* }PT'$>''SV1QPMPTLINE9' PPMPTLN9'0'ISV1':'X;'#X;------------------------------' X; Time to replace the SAVE* }D 'X; prompt line back onto the' X; screen.'#X;------------------------------(X; ( RSTPMPT($>'(RS1QPMPTLN9((P* }PMPTLINE92(0<(IRS1F(:P(X;Z(#X;------------------------------d(!X; This will take the REPLACE n("X; letters from the prom* }pt linex( X; and use them to point into(X; REPSET to store the WITH( X; chars from the prompt line(#X; so that the DOREP *}routine can( X; make changes to the puzzle(X;($X; Also going to save the old rep(X; set into the UNDO buffer.(#X;-----*}-------------------------(X;( STOREREP($>(TOUNDOQREPSET9( PUNDOBUF9)0) ITOUNDO)X;") $REPLEN,)06) TORSA*}@)?J)QWITHCHRS9T) PROWTMP^);h)QREPLCHRS9r)S>!|)>) QROWTMP) PREPSET9)C)>)0) ITORS) DOREP):)X;)#X*};------------------------------)"X; This routine will print the ) X; current replacement set on) X; second line of the scr*}een.*#X;------------------------------*X;*PRNTREPSET&*$>0*%>!:*PR1D* QREPSET9N*R>X* FPR11b*L>l*PR11PR*}EPLINE8v*0*1*)>*HPR1*Q> * PREPLINE8*1*PR2* QREPSET9*R>* FPR22*L>*PR22PREPLINE8*0+1 +*})>+HPR2 +Q> *+ PREPLINE84+1>+PR3H+ QREPSET9R+R>\+ FPR33f+L>p+PR33PREPLINE8z+0+1+)> +HPR3+Q>*} + PREPLINE8+1+PR4+ QREPSET9+R>+ FPR44+L>+PR44PREPLINE8+0,1,)>,HPR4$,:.,X;8,X;----------*}--------------B,X; The user wants to goL,X; back to the REPLACE>V,X; prompt. We have to clear`,X; out the WITH> area ofj,*}X; the line and do itt,X;-------------------------~,X;, BCKTOREP,Q>,$>,BR1PWITHCHRS9,0,IBR1, $REPL*}EN, !PRNTCRS,, START,-----------------~,X;, BCKTOREP,Q>,$>,BR1PWITHCHRS9,0,IBR1, $REPL(# X; CRYPTO2.M65X; DLST1( p=p=B2 MANSCR< ===F =======P ====Z' =.}==========d ======An DLST1xX;X;-------------------------X; The MAIN text entr.}y andX; puzzle solving screenX;-------------------------X; MANSCR A ABCDEF-GHIJKLM-A ANOPQRST-UVWXYZ.} A REPLINE A A A A FRSTLINE A A A .} A A A A A" A A, A A6 .}A CRYPTOGRAA@ AM SOLVER AJ A AT A A^ A .} Ah A Ar A A| A A A by KeviA An Pec. }k A A A A A A A A A.!} A A A A A Press any kA Aey to begin A A ."} A A A A A A A A A A .#} A& A A0 A A: A AD A .$} AN LINE19X A Ab A Al PMPTLINEv A A A .%} A A A A A A A A AELN1.&} A Use Ҡ A AԠ Š  AELN2 A ˠР A AΠ to enter text AREPLCHR.'}SPMPTLINE WITHCHRSPMPTLINECMD1  A ̠  ack A A àlear Šdit A CMD2* A Ӡ .(} Πew A4 A Ѡuit ՠndo A>X;HX;-------------------------RX; Define memory locations\X;------------------.)}-------fX;pLUM;;Char luminancezBCK;;Background colorBRD;;Broder colorDMA/;;DMA enableDLI.*}0;;Dsply List AddrINVFLG;;Inv Video Flag SHFLOK;;Shft Lck 64=uppr COLORBK;;Hrdwre BackgrndWSYNC .+};;Line SyncDLIVEC;;DLI vectorDLIENA;;DLI enable=192CONSOL SCREENXVCOUNT ;;Vert line coun.,}tKEYPRS;;Last key pressROWCRST;;Cursor RowCOLCRSU;;Cursor ColumnOLDCHR];;Chr under Crsr$ZSCR;.-};Z-page scrn pntr.ZSCR1;;2nd Z scrn pntr8CRSINH;;Cursor ON/OFFBOPEN;;CIO openLCLOSE ;;CIO closeVGE..}TCHR;;CIO get`PUTCHR ;;CIO putjICCMDB;;CIO cmdtICBALD;;CIO buff HI~ICBAHE;;CIO buff LOICBLLH./};;CIO len bufICBLHI;;CIO len buf HIICAX1J;;CIO aux 1ICAX2K;;CIO aux 2CIOVV;;CIO entry pntX;%.0}X;--------------------------------%X; We have to set aside some space%X; for various temporary variablesX; All of that.1} is done here.%X;--------------------------------X;REPSET;;rplcment letters PMPTLN(;;Save & rep line ROWT.2}MPUNDOBUF;;undo buffer(REPLEN;;Length of reps2X;<%X;--------------------------------F%X; Now we have some.3} screen promptsP%X;--------------------------------ZX;dREPPMPT AReplace>AnWTHPMPT AWith>AxENTPMPT APress .4}ԠA A when doneA CPZPMPT AClear Puzzle Text?A CCGPMPT AClear All Changes?AAYSPMPT AAre you sureA A.5} (Y/N)A EDTPMPT A A A A QUTPMPT AQuit, Exit to DOS?A NEWPMPT AStart New P.6}uzzle? AUNDPMPT ALast ChangeA A UNDONE.A"SCRN AE:A=,LFRT AA6X;@!X;----------------------------JX; T.7}he first DLI starts hereT!X;----------------------------^X;h COUNT1 rCOLOR1 =0=|X;DLI15;;Interupt, Sa.8}ve AA;;get X reg5;;and save QVCOUNT;;Get V lineR>(;;count andECONT;;reset count$>;;on top of&COUNT.9}1;;screenCONT$COUNT1;;Get color count 2;;add oneQCOLOR19;;get the colorPWSYNC;;wait for horizPCOLORBK;;.:}stuff color&COUNT1;;save new count&7;;Get saved X0>;;put in X:7;;Get saved AD 9;;RETURNNX;X$X;-----------------.;}--------------b$X; This section of code will openlX; the screen editor for I/Ov X; to write characters to the X; screen.<}.$X;-------------------------------X; OPNKYSCRQR>l HISXLQ>PyPzISXL$>  Q>OPEN P.=}ICCMD9  Q>4SCRN PICBAL9  Q>5SCRN* PICBAH94Q> > PICAX19HQ>R PICAX29\ CIOVf !SETMAIN>  Q>OPEN P,l7LABFDTOSCLNddd B6BxBAU@% @ AB2?} @W @g @AU .&;A,;A,;@ ,.6. g +AY1A @2@}CA@UA@g@@""@@K(g$6-+F:A,&@,$AV2A}E6-+F:A,&@,$AVg6-F:@,%F:@,$AV2'-@2"#%' <<&%@2B}&P:'AV,$AV<%@'AVFJ6-%A4%@&P:'AV,$AVJ%@'AVP8$2C}A`&P:'AV,$AV8Aa'AVZ[-A6AV"!% 7AIA@[2D}BBAd1@F:%@,1@F:%@,nC-@@((lost in the:-@(@C(2E}fogxY-@@4(Copyright 1988 Magnum OpusF-@@Y(By Greg Knauss8$@&P:'AV,$2F}AV8@'AV[-@@( 0-@@[(&Please enter the filename and extender++(#2G}of the text to be fogged, place the,,($disk containing it in drive one, and..(&press Π. For a directory of the2H}))(!disk in drive one, press Π(alone.(7AR+(FILENAME.EXT? D:76-AY2I}@4)@"AUAC"A&*!#67,.+(>:,96-&@C A !A2J}(6-&A('!@* A#'6-&@2RR(+++!@d* @,)+!@G* @X,)"@F,* 2K}@,A /6-%@67,.>:,%(>:,/ A "CAR@!!*6.D:967@,.C A2L},8AR@((,( Directory...86-6 Ap@&&@@D:*.*J[@2M}6-%@0-@@#IP:'@,"'@[-@ @#T$(!P:'@,"'@$(^sP:'@2N},"'@("(4-@@"Q(Press Π for more.cAdAUp)@s(h A0rP:2O}'@,'@(|:@(:($ Press Π to enter a filename.,AdAU")@, A@2P}X A@AdAU+6-?-@@B(F X-@@h @@,6-2Q}86-D6-P6-\6-h6-Q)@2+!@d* A#,)"@;6.>:,2R}G6-@Q A@ A ' 6-6.6-@'6-L)@67,.>:,2@2*AU2S}>6-@L6-%@!!@2*AUAP"AP!@ 6-%@kB:,!@2T})6-@:7B:,&@,,]"@F)"@3)"@c)"@X)"@Yk6-%@-"@4)"@9)"@A2U})"@D6-@:7B:,&@,,x"@F)"@3)"@c)"@X)"@Y6-%@;6-%@(2V}6-%,%!@886-;("AU6-8 6-@w8F:Ad,@(A@!(2W}!@ !6-%@&3( (0( Analysis of 7@ HR**** SCREEN DUMP ****\f;A,k A6r}pB67@,.>:,367A,.>:,B67@,.z&&3>:@',>:@e,>:@,%%6-F:@6s},%F:@,$AV6-%@@$A6-P:C:,'AV,6-C:,&$AVAA6t}-%@96-?:A6<,333>:@',>:@u,>:A,>:,  #A@-6u}@C"A6% DD104,104,141,15,6,104,141,14,6,160,4,162,192,173,0,0,202,240,2411145,203,200,216,6v}173,14,6,56,233,40,141,14,6$''144,3,76,13,6,206,15,6,76,13,6,96.$D:LISTING1.BAS2,240,2411145,203,200,216,4_d&<STARXPRIMTHETYPRIMNUMVERTNUMROTARRAY1ARRAY2THETAINVERTEXCOORYCOORXMAARRAYYMAHEIGHWIDTMAXCOL:x}MAXROWINITIALINITIALCOROSCRNXSCRNYXYOFFSEROGRAFSCRNMEMEMLOHIBYTLOBYTSCRNCODUMMYOFFSEADXY:y}@XWCXWB@@AA H A @ @@@@:z}@@@@@@@AS@S@@ :{}!@"@#$%&'()*+,@-./@:|} **** ESCHER VERSION 5 ****&&BY ALLAN MOOSE AND MARIAN LORENZ(2 A@<##**** ROTATION SUBROUTINE ****:}}FP6-$E:,&$G:,Z6-$G:,%$E:,d$nx44**** INITIALIZE SYSTEM, VARIABLES, ARRAYS **** 3,:~}20,-8,8,0,0,8 +@$@ "//9<@,9$@&@<@,6-A`':}-@ "%68<@,-%68<@,- 22**** DETERMINE HEIGHT AND WIDTH OF TILE ****-@:}+O:8<@,,!+6-O:8<@,,+O:8<@,,!+6-O:8<@,, "6-@$6-@:}$,6-P:A ',&@66-P:A',&@@6-%@6-%@JT++**** PLOT THE FIRST RO:}W OF TILES ****^h-@r-A`|-@%6-8<@,%6-8<@, @:}6-%+&@,$% 6-&"@, AP /   --**** DRAW S:}UCCEEDING ROWS OF TILES ****-@6-%@ A0-@&-A`0:}!!-@$@&@:%6-8<@,%6-8<@,D @N6-%+&@,$%X6-%+&@:},$&b"@, A`lCLIPPING ROUTINEv# )!A# A @# )!A# A :}@ /     A @??**** SUBROUTINE TO CREATE AN ARRAY OF DEFORMED TILES ****:}-@&@@6-8<@,@68@$&@<@,-8<@,6-8%@<@,@:}6-8<@,@68@$&@<@,-8<@, 6-8%@<@, 6-&6-& 5"+6:}-+6@,$N:,$@5 AP*6-D:',4 6-A%>! 6-6!ROTATE TOWARD X-AXISH @:}R.6-'@.6-$+6@,#+%@,\& 6-6&ROTATE BACK INTO POSITIONf @p968@$<@,-%:}968@$<@,-%z **** COMPLETE ARRAY2 ****;-@@768@$&@<,-8<,; :}$**** SCREEN DUMP **** A;A,B67@,.>:,367A,.>:,B67@:},.&&3>:@',>:@e,>:@,%%6-F:@,%F:@,$AV6-%@@$A6-P:C:,'AV:},6-C:,&$AVAA-%@96-?:A6<,333>:@',>:@u,>:A:},>:,$ .8 #A B-@CL"A6%V `DD104,104,141,15,6,104,141,14:},6,160,4,162,192,173,0,0,202,240,24j11145,203,200,216,173,14,6,56,233,40,141,14,6t''144,3,76,13,6,206,15,6,76,13,6,96~:}$D:LISTING2.BAS2,240,24j11145,203,200,216,173,14,6,56,233,40,141,14,6t''144,3,76,13,6,206,15,6,76,13,6,96~8BC$ : ICCOICBADICBLECGBINIOCBFILETSPICBANIXMODCCCCC>}  >}##XEBANKS FROM ANALOG COMPUTING^(>:A%,"AR@4-@@^(%Insert disk with pictures. Hit RETU>}RN F:Ad,"AU@4AdAU'AR4(>:A%,"F:A7,A7" Ad'>}6-A46-A6'6-A@n6-@6-@x;@ ,;@ ,/ +@/6-F:@,%F:@>},$AV6-@#A-@"6.D:67@,.+@+@@>} %-%F:@,-%@%F:@,'%'%@%@0RAR@'AV>}@R(>:AV,>:A',Loading ...$6-?:C:hhhLV,<,$@6-?:A6<<<, >}.@.@@K:M(>:A%,"AV@4AW@M(Hit 1-8, ESC to end>})@6-&@H/"%(@>:A%,/ AP"6@!"!! @)!@AP>},!#A%"!+6?AA 'A3A?A@@%6-F:@,%F:@>},$AV@6-?:A6<@<<,J AP(#(-A6A7"!% ($-#PP104,104,104,208,18,104,133,2>}25,104,133,224,104,104,32,65,6,134,226,132,2272#LL76,38,6,104,133,227,104,133,226,104,104,32,65,6,134,224,132,225,162,307#>}MM160,0,177,224,145,226,200,208,249,202,240,7,230,225,230,227,76,40,6,169<#EE253,141,1,211,96,170,24,106,144,8,32,86,6,162>},0,160,64,96,32,86A#II6,162,0,160,94,96,202,189,94,6,141,1,211,96,225,225,229,229,233,233F# 237,237#55PIC.1,PIC.2,PIC>}.3,PIC.4,PIC.5,PIC.6,PIC.7,PIC.8#SCREEN SPECIFIC DATA#31,20,18,0,0,70#31,50,10,4,0,0#31,36,12,68,0,0#>}31,40,202,148,0,0#31,2,4,38,0,0#31,0,10,66,0,148#24,0,10,2,0,2#24,0,10,0,0,0D:EXBANKSN.BAS#<x9 EIX;SAVE#D:XEBANKS.M65X;ASM,,#D:XEBANKS.OBJ(X;2%X;--------------------------------<%X; Save up to 8 Gr.7+,8B},9,10 or 11F!X; screens into the XE's extraPX; RAM. Won't interfere withZ X; BASIC!dX;nX; Call with:x X; A=USR(1536,B}oper,scrn,bank) X; Where:X; 1536 is addr of routineX; oper = 0 for save to XRAM!X; 1 for load from XRAM"X;B} scrn = address of screen RAMX; bank = a number from 1-8$X; signifying which "bank""X; to load/save to/fB}rom.$X;-------------------------------X; FROM TO PORTBX; START"7;# of args,7;ignore B}high byte67;this is the one@HLOAD;make SCRN the TOJX;else make SCRN the FROMTSAVE^7h PFROMr7| PFROM7;B}high of BANK7;low of BANK WHERE&TO 'TO !ACTIONLOAD7 PTO7PTO7;high of BANK7;low B}of BANK WHERE &FROM 'FROM& ACTION0#X;here we actually move the data:$>;# of pagesD LOOP1N%>X LOOPB}2b Q@FROM7l P@TO7v3 HLOOP20 FDONE#FROM;next page of RAM #TO !LOOP1DONEQ>;restore it tB}oPPORTB;normal status.:;back to BASIC WHERE$X; decide if the address is $4000#X; or $5E00. Enable accordingly.B}>;save it for later, W?;odd or even? DEVEN ODD*$X; was an odd number, so the bank4!X; is 1, 3, 5 or 7. That meB}ans>X; it's located at $4000.H ENABLER$>\%>@f:pEVENz#X; set up for pointing to $5E00. ENABLE$>%B}>^: ENABLE0;1-8 now 0-7 QINSTR9 PPORTB: INSTR === ===$5E00. ENABLE$>%@aDEyCALLBUFNUBUFFLINTOTACKSUPOKLOTIMXXXF} $$******************************$$* ZUCCF}HINI PRINTER INTERFACE *$$* by Lee S. Brilliant M.D. *$$* Converts a 400/800 to an *$$* interface/buffer. F} *$$****************************** ::0,10,0,7,6,7,169,177,141,231,2,169,11,141,232,2,1305>>169,26,133,1F}0,169,7,133,11,24,96,169,0,141,47,2,141,1278CC166,11,141,172,11,141,170,11,141,2,211,141,3,211,169,255,1956(??141,0,21F}1,169,52,141,2,211,169,1,141,1,211,169,5,141,17652==3,211,162,0,169,120,141,4,2,169,10,141,5,2,169,213,1521<>>141,10,2,F}169,9,141,11,2,169,104,141,14,2,169,10,141,1235F==15,2,169,41,141,12,2,169,10,141,13,2,169,160,141,8,1195P@@2,169,10,14F}1,9,2,173,231,2,133,203,141,156,11,173,232,1788Z@@2,133,204,141,157,11,169,40,141,4,210,169,0,141,6,210,1738dDD32,127,1F}0,173,16,208,240,13,173,172,11,240,246,169,160,32,2022nBB195,10,76,144,7,169,255,32,195,10,141,162,11,173,166,11,1757x@@F}240,6,32,229,8,76,173,7,165,203,205,156,11,208,21,165,1905FF204,205,157,11,208,14,173,165,11,205,164,11,240,223,141,164,F}2296CC11,76,173,7,165,204,197,106,144,13,173,231,2,133,203,173,2011BB232,2,133,204,76,173,7,230,203,208,2,230,204,173F},164,11,2252>>240,3,76,34,8,160,0,177,203,201,155,208,2,169,13,32,1681>>5,8,76,173,7,141,0,211,173,16,208,240,11,173,F}166,11,1619==240,246,32,229,8,76,8,8,206,1,211,234,238,1,211,96,2045DD234,96,160,0,140,163,11,177,203,141,171,11,201,F}155,208,31,2102;;172,160,11,208,3,76,249,7,169,0,162,8,32,5,8,202,1472DD208,250,238,160,11,173,160,11,201,38,208,236,F}76,201,8,173,2352??160,11,208,11,162,3,189,173,11,32,5,8,202,16,247,173,1611AA171,11,16,8,41,127,141,171,11,206,163,1F}1,201,96,176,12,1562@@201,32,144,6,24,105,224,76,124,8,105,64,133,201,169,0,1616BB133,202,162,3,6,201,38,202,202,208,F}249,24,173,244,2,101,2150DD202,133,202,169,0,141,171,11,169,128,141,155,11,162,7,160,1962@@7,177,201,24,45,155,11,240F},1,56,110,171,11,136,16,241,1602??78,155,11,173,171,11,77,163,11,32,5,8,202,16,224,238,1575"BB160,11,173,160,11,201,38F},208,10,169,0,141,160,11,169,13,1635,??32,5,8,76,173,7,104,170,104,168,169,0,141,166,11,169,15036??5,141,3,211,96,152,7F}2,138,72,32,127,10,169,4,141,159,1532@??11,32,174,9,169,7,141,3,211,169,0,141,166,11,173,166,1583JCC11,208,15,173,172,1F}1,240,246,76,214,8,172,170,11,192,143,2062T<<240,196,173,0,6,201,64,240,3,76,214,8,173,1,6,201,1802^==87,240,23,201,83,F}208,6,32,21,11,76,214,8,160,78,32,1480h>>230,10,76,169,9,160,65,76,230,10,32,53,9,169,40,141,1479r@@159,11,32,174,9,172F},170,11,240,14,160,69,32,230,10,76,1569|;;169,9,32,230,10,76,214,8,32,53,9,160,0,162,0,173,1337FF156,11,133,205,173,15F}7,11,133,206,230,205,208,2,230,206,165,2431CC205,197,203,208,9,165,206,197,204,208,3,76,214,8,165,206,2474DD197,106,1F}44,13,173,231,2,133,205,173,232,2,133,206,76,111,2137AA9,189,0,6,232,145,205,201,155,240,4,224,40,208,202,165,2225AA2F}05,141,156,11,165,206,141,157,11,160,67,76,82,9,169,0,1756DD141,158,11,141,162,11,141,161,11,141,167,11,141,170,11,32,161F}0EE88,11,173,167,11,208,10,173,172,11,240,246,169,138,141,170,2128@@11,32,136,11,96,152,72,173,15,210,141,10,210,48,5F},160,1482CC140,140,170,11,41,32,208,5,160,142,140,170,11,173,158,11,1712DD240,20,173,13,210,205,161,11,240,5,160,143,F}140,170,11,238,2140AA167,11,104,168,104,64,173,13,210,172,162,11,153,0,6,24,1542CC109,161,11,105,0,141,161,11,200,140F},162,11,204,159,11,48,1634AA225,169,1,141,158,11,76,2,10,152,72,238,162,11,172,162,1762@@11,204,159,11,144,17,173,168F},11,240,31,165,16,9,8,133,1500??16,141,14,210,76,86,10,185,0,6,141,13,210,24,109,161,1402CC11,105,0,141,161,11,104,16F}8,104,64,173,161,11,141,13,210,1578&??169,1,141,168,11,76,86,10,169,1,141,169,11,165,16,41,13750CC247,141,14,210,133,16F},104,64,169,1,141,166,11,104,64,169,1754:>>154,141,38,2,169,10,141,39,2,162,0,160,30,169,1,120,1338D??32,92,228,169,0,1F}41,172,11,88,96,169,1,141,172,11,96,1619NAA173,9,210,201,28,208,19,173,165,11,240,6,206,165,11,76,1901XDD186,10,238,165F},11,169,0,141,160,11,104,64,202,208,253,136,2058bDD208,250,96,141,159,11,141,162,11,174,162,11,160,1,169,255,2111lCC141F},31,208,32,188,10,140,31,208,200,174,162,11,32,188,10,1766vCC206,159,11,208,228,96,152,72,169,0,141,169,11,141,159,11,1933F}BB141,162,11,32,123,11,160,2,140,168,11,162,190,32,188,10,1543DD104,168,140,13,210,173,169,11,208,8,173,172,11,240,24F}6,76,2122??204,9,76,209,9,160,65,32,230,10,160,67,32,230,10,169,1672==128,172,170,11,240,2,169,129,141,0,6,173,2,6,14F}1,1,1491::6,169,31,141,2,6,169,4,141,159,11,169,0,141,3,6,1158AA141,162,11,141,169,11,141,168,11,32,123,11,173,0,6,14F}1,1441??13,210,141,161,11,76,5,11,169,19,141,50,2,141,15,210,1375DD141,10,210,160,224,132,16,140,14,210,169,40,141,8,F}210,162,1987CC6,169,160,157,1,210,202,202,16,249,96,160,208,169,35,141,2181BB50,2,141,15,210,76,101,11,169,192,133,16F},141,14,210,169,1650880,162,6,157,1,210,202,202,16,249,96,0,0,0,0,0,1301++0,0,1,0,0,0,0,0,0,0,0,0,0,1,48,75,125<<F}27,169,10,141,162,11,169,1,141,1,3,169,87,141,2,3,123799169,0,141,4,3,169,7,141,5,3,169,1,141,10,3,169,1135 <<0,141,11F},3,32,83,228,48,30,173,4,3,24,105,128,141,1154774,3,173,5,3,105,0,141,5,3,238,10,3,208,3,238,1142 7711,3,206,162,11,20F}8,221,104,96,0,0,0,0,0,0,0,1022i (}%-@A@16-E( TESTING LINE Y-@@]"F}e6-%i ""A0+(( ** ERR0R IN LINE  **+&; 6-% BDY8( ** CHECSUM ERF}ROR **;jC(;} DATA IS CORRECT. INSERT BLANK DISK AND PRESS .F(j(άŠ٠ˠˡAdF}AU$ F:Ad,@A`.c(!( ǠIAT@D:L(c( F} ǠR#6-A&-@@:-@@>"DR6-%@^  " A  F}(4( ǠC6-?:A),F([( *** DONE ***^-F:AU,"@*AU-$AUF}@$D:INTRFACE.BAS *** DONE ***^-F:AU,"@*AU-$AUD3!*1;ZUCCHINI PRINTER INTERFACE BUFFER CONVERSIONX;(X;*************************2X;* BY LEE BRILLIANT M.D. *<X;**J}***********************FX;PX;ZX;PROGRAM CONVERTS A 400/800_%X;COMPUTER TO A PRINTER INTERFACE-dX;BUFFER AND PROGRAM J}LISTER.n$X;PRESS ESC TO CHANGE TO GRAPHICSsX;PRINTING OF TEXT.xX;%X;USES SERIAL PORT TO CONNECT WITHX;MAIN SYSTEM.J}%X;USES JOYSTICK PORTS TO INTERFACEX;WITH PRINTER.X;X;X;*******************X;* RAM ASSIGNMENTS *X;********J}***********X; AUDC1AUDCTL AUDF3 AUDF4 BUFF BUFPNTCDTMA1& CHBAS" J}CHLOC, CIOVV6CONSOL@ CRITICBJ DOSVEC T ICCOMB^ IRQENhKBCODE r MEMLO| PACTLJ}ӆ PBCTLӐ POKMSK PORTAӤ PORTBӮ RAMTOPjSDMCTL/ SERIN SEROUT SETVBV\J}SKREST  SKCTLSKSTATSSKCTL2 TBUFPT TRIG0VINTER&VKEYBD0VSERIN :VSJ}EROCDVSEROR NX;XX;bX;**********lX;* VALUES *vX;**********X;X; ACKA CHKERR CMPLETCJ} EOL ERRE FRMERR LENGTH& NAKN OVRRUN TOUTERX;ORIGINf X;X; X;***********J}*******X;* BEGIN PROGRAM *4X;*****************>X;H ORIGINRX;\ ;;HEADERaX; NUMBER OF SECTORS TO BOOTf ENDPJ}ROORIGINp ORIGIN;;BOOT LOCATIONz RESET;;INIT WARMSTARTX; RESETQ>ENDPRO;;RESRVE SPACEPMEMLO;;FOJ}R PROGRAMQ>ENDPRO PMEMLOQ>START;;PLACE IN;RESET CHAIN PDOSVECQ>STARTPDOSVEC,J}:STARTQ>;;INITIALIZE O.S. PSDMCTLPRCVFLG;;ZERO ALL FLAGS PTIMFLG PSTATUS$PPACTL;;RESET PORTS. PPBCTL8J}Q>;;ALL PINS OUTPUTB PPORTALQ>4;;FIX OUTPUTS ANDQ;SET INTERRUPTV PPACTL`Q>jPPORTB;;ONE PIN OUT FORo ;SJ}TROBEtQ>;;FIX OUTPUTS ANDy;SET INTERRUPT~ PPBCTL$>Q>COMINT;;CHANGE;INTERRUPT VECTORSPVINTER;;FORJ} COMMND FRAMEQ>COMINTPVINTERQ>RCVINTPVSERIN;;SERIAL IN READYQ>RCVINTPVSERINQ>SNDJ}INTPVSEROC;;SERIAL OUT ;COMPLETEQ>SNDINTPVSEROC Q>SNDFRMPVSEROR;;SERIAL OUT REQSTQ>SNDJ}FRM(PVSEROR2Q>KEYBD<PVKEYBD;;KEYBOARDA;INTERRUPT VECTORFQ>KEYBDPPVKEYBDZQMEMLO;;SET BUFJ} POINTERSd PBUFPNTn PBUFENDx QMEMLOPBUFPNTPBUFENDQ>(;;SERIAL BAUD RATE PAUDF3Q> PAUDF4J}PRNTON SETVBX;;SET 1/2;SECOND TIMEOUTPR1QTRIG0;;IS PRINTER ON?FBEEP;;YES SO BRANCHQTIMFLG;;WAIT FOR TIMEJ}OUTFPR1Q>;;SET BEEP TONE TONE!PRNTON;;TRY AGAINBEEPQ>;;READY BEEPER TONE" PCOUNT,X;6X;@X;-J}----------------------JX; MAIN LOOP FOR PRINTERTX;-----------------------^X;h"MNLOOPQRCVFLG;;INCOMING DATA?r FTSTPJ}NT| RECEIV !MNLOOP"TSTPNTQBUFPNT;;ALL DATA SENT?RBUFEND;;COMPARE END DATA$X; WITH CURRENT POINTERJ} HTSTENDQBUFPNTRBUFEND HTSTENDQGRWANT;;GRAPHIC OR TEXT? RGRFLG FMNLOOPPGRFLG;;YES, SET FLAGJ}!MNLOOP;;NO, GO BACK"TSTENDQBUFPNT;;END OF RAM? RRAMTOPDINCPNT;;OKQMEMLO;;MOVE POINTERS!;TO START OF RJ}AM& PBUFPNT0 QMEMLO:PBUFPNTD!MNLOOP;;LOOP BACKNINCPNT#BUFPNT;;INC POINTERX HGRTSTb#BUFPNTlGRTSJ}TQGRFLG;;GRAPHICS?vFGETCH;;NO, PRINT TEXT!GRPRNT;;YES, GRAPHICSGETCH%>;;GET A CHARACTER Q@BUFPNT7 PREOLR>K}EOL;;CONVERT ATASCII;EOL TO PROPER EOL HPRNTC1Q> !PRNTC1 PRINT;;PRINT & RETURN !MNLOOP!PRINTPPORTA;;BIK}TS TO PRINTER WTBUSYQTRIG0;;PRINTER BUSY?FPRNTCH;;NO, BRANCHQRCVFLG;;YES, TEST FOR;INCOMING DATA FWTBUSYK} RECEIV;;GO RECEIVE  !WTBUSYPRNTCH"PORTB;;SET STROBE 4;;WAIT FOR PRINTER*#PORTB;;RESET STROBE4:>DELAY4;;DUK}MMY DELAYH:RGRPRNT%>;;PRINT TEXTW;AS GRAPHICS\ 'INVFLGfQ@BUFPNT7;;GET A CHARp PTEMPzR>EOL;;EOL?HTSTCNK}T;;NO BRCH TO PRINT%CCOUNT;;YES-LINE FULL?HLINFIL;;NO SO FILL!PREOL;;YES SO PRINT EOL LINFILQ>;;FILL OUT PRIK}NTER;LINE WITH 0s$>!FILOOP PRINT;;8 0'S PER CHAR0 HFILOOP #CCOUNT QCCOUNTR>LENGTH;;ALL LINE SENTK}? HLINFIL !EXIT TSTCNTQCCOUNT;;NEW LINE? HCONVRT;;NO SO BRANCH$ $>. !SNDCODQCODE9;;SEND ESCPE SEQ8 PRINTK}B 0L ISNDCODV "CONVRTQTEMP;;ASCII TO ATASCII` ICONVR1j M>t PTEMP~ "INVFLG CONVR1R>` EX8 R> DADD64K} , O> !X8 ADD64O>@ X8PCHLOC;;MULTIPLY X8 TO ;GET CHSET OFFSET Q> PCHLOC $> ROTTCHLOC K }UCHLOC 0 HROT( ,2 QCHBAS;;ADD TO CHBASE TO7 ;FIND LOC. IN RAM< OCHLOCF PCHLOCP SHIFTQ>;;CREATE NEK }W BYTEU ;FROM BITS OFZ PTEMP;;EACH BYTE IN CHRd Q>n PBITMSK;;SELECT WHICH BITx $> SLOOP1%> SLOOP2Q@CHLOCK }7;;SAME BIT IN ;EACH BYTE , MBITMSK FNXTBIT ; NXTBITWTEMP 1 ISLOOP2 VBITMSK;;NEXT BIT QTEMP NIK }NVFLG;;INVERSE CHAR? PRINT 0 ISLOOP1 #CCOUNT" QCCOUNT;;ALL CHARS SENT?, R>LENGTH6 HEXIT2@ EXITQ>;;RESETK } CCOUNTJ PCCOUNTT Q> ;;SEND EOL^ PRINTh EXIT2!MNLOOPr X;| X; X;********** X;* RETURN * X;********** X; K}RETURN7;;RESTORE REGS > 7 ? Q> PRCVFLG;;ZERO FLAG Q> PPBCTL;;RESTORE VINTER : X; X; X;**********K}*********& X;* RECEIVE ROUTINE *0 X;*******************: X;D X;N RECEIVC;;RECEIVE A DATAS ;FRAMEX 5;;SAVE REGISTERSbK} Al 5v  SETVBX;;SET TIMEOUT Q> PBUFSIZ;;# OF BYTES IN ;IN COMMAND FRAME GETFRM CNGINTQ>;;CHANGE VINTERK} TO ;RESPOND PPBCTL;;TO + TRANSITION Q> PRCVFLG INTWATQRCVFLG;;WAIT FOR END $X; OF COMMAND FRAME INTERRK}UPT HTSTDEV;;YES SO BRANCH QTIMFLG;;TIMEOUT? FINTWAT;;NO-KEEP WAITING !RETURN;;YES-RETURN %STATUS;;OPERATION OK}K? )>CHKERR;;YES SO BRANCH FRETURN;;ERROR SO GO BACK TSTDEVQBUFF;;FIRST BYTE IS ;DEVICE ID R>@;;RIGHT DEVICE K}ID?* FTHISDV;;YES SO BRANCH4 !RETURN;;NO SO RETURN> "THISDVQBUFF;;CHECK COMMANDH R>W;;WRITE?R FFRMOK;;YES SO GO K}ON\ R>S;;STATUS?f HWNGCOM;;NO-WRONG COMMANDp  GDSTAT;;SEND STAT FRAMEz !RETURN;;BACK TO MNLOOP WNGCOM%>NAK;;WRONGK} COMMAND SDSTAT !COMPLT;;SEND A COMPLETE ;AND RETURN SNDACK%>ACK;;SEND AN ACK !SDSTAT "FRMOK SNDACK;;COMMK}ND FRAME OK Q>(;;DATA BUF SIZE=40 PBUFSIZ  GETFRM;;GO RECEIVE FRAME %STATUS FMOVBUF;;FRAME OK-BRANCH %>ERRK} SDSTAT !COMPLTSNDSTS SDSTAT;;NO SO SEND;ERROR AND RETURN !RETURN$MOVBUF SNDACK;;ACK FRAME.%>8$>K}BQBUFEND;;SET TEMP POINTERG$X; TO END OF MAIN BUFFERL PTBUFPTVQBUFEND`PTBUFPTjINBFPT#TBUFPTtK} HMOVBF1~#TBUFPT MOVBF1QTBUFPT;;MAIN BUFF FULL? RBUFPNTHMOVBYT;;NO SO BRANCHQTBUFPTRBUFPNTK} HMOVBYT!RETURN;;MAIN BUFFER;FULL SO RETURN#X;RETURN WITHOUT CMP SENT CAUSES!X;HOST TO TIMEOUT FOR UP TO 56 K}X;SECONDS."X;THIS GIVES TIME FOR BUFFER TOX;EMPTY SOME.X;CAN BE CHANGED BY ALTERING"X;COMMAND RESPONSE FRAME BYTE 3K}"MOVBYTQTBUFPT;;END OF RAM? RRAMTOPDGETBYT;;NO SO BRANCH QMEMLO;;RESET POINTER"X; TO START OF BUK}FFER PTBUFPT QMEMLO(PTBUFPT2 !MOVBF1<GETBYTQBUFF9;;MOVE A BYTEA;FROM TEMPF2PSTOBYTP@TBUFPT7ZRK}>EOL;;CARRIAGE RETURN?dFENDMOV;;YES-STOP DATAn(>(;;NO THEN WHOLEs;BUFF MOVED?xHINBFPT;;NO-GET NEXT BYTE!ENDMOK }VQTBUFPT;;YES SO UPDATE;BUFFER POINTERS PBUFENDQTBUFPTPBUFEND"COMPLT%>CMPLET;;SEND COMPLETE;BYTK!}E, AND RETURN !SNDSTSX;-------------X; GET A FRAMEX;-------------X; GETFRMQ>;;GET A DATA FRAMEPBUFRFLK"};;ZERO VARIABLES PCOUNT PCHKSUM PRECOMP PSTATUS" RECVEN;;ENABLE RECEIVE,"CKTIMEQRECOMP;;RECV COMPLETE?6HK#}GOBACK;;YES, RETURN@QTIMFLG;;TIMEOUT?JFCKTIME;;NO SO WAIT AGAINTTIMOUTQ>TOUTER;;TIMEOUT^ PSTATUShGOBACK DISABK$}LEr:|X;X;X;--------------------X; INTERRUPT ROUTINESX;--------------------X;RECEIVE INTERRUPT DRIVENX; K%}BY VSERINX;RCVINTC;;EACH TIME THERE;IS A BYTE READY5;;THIS ROUTINE;EXECUTES.QSKSTAT;;CHECK FOR SERIALK&} ;ERRORSPSKREST;;RESET ERR REGS GNTFRM %>FRMERR 'STATUS NTFRMM> HNTOVRN;;OVERRUN ERR? %>OVRRUN& 'SK'}TATUS0NTOVRNQBUFRFL:FNOTDON;;TEMP BUF FULL?DQSERIN;;CHECKSUM OK?N RCHKSUMX FSRETRNb %>CHKERRl 'STATUSvSRK(}ETRN#RECOMP;;SET RECEIVE{;COMPLETE FLAGINTDON7;;RESTORE Y?79;;RETURN FROM;INTERRUPTNOTDONQSERIN;;GEK)}T A BYTE %COUNTPBUFF8;;PUT IN TEMP BUF,OCHKSUM;;TOTAL CHECKSUMO> PCHKSUM3'COUNT;;INC BUFF COUNTEK*}R )BUFSIZ GINTDON;;BUFF FULL?Q>;;YES SET FLAG  PBUFRFL* !INTDON4X;>X;HX;SERIAL OUTPUT DATA REQUESTRX;DK+}RIVEN BY VSERORWX;\SNDFRMC;;SAVE Yf5p#COUNT;;ALL DATA OUT?z %COUNT )BUFSIZDENDSND;;NO SO SENDQCHKSNT;;K,}CHECKSUM SENT?FSNDCHK;;NO SO SENDQPOKMSK;;YES SO CHANGE;INTERRUPTSL> PPOKMSK PIRQEN !IRETRNENDSK-}NDQBUFF8;;SEND A BYTE PSEROUT,OCHKSUM;;ADD TO CHECKSUMO> PCHKSUMIRETRN7;;RETURN FROM;INTERRUPT$?K.}.789B!SNDCHKQCHKSUM;;SEND CHECKSUML PSEROUTVQ>;;AND SET FLAG` PCHKSNTj !IRETRNtX;~X;SERIAL OUTPUT INTERRK/}UPTX;DRIVEN BY VSEROCX;SNDINTQ>;;SETS FLAG AFTER;CHECKSUM SENT PSNDFLGQPOKMSK;;RESTORE INTRRPTSM>K0} PIRQEN PPOKMSK79X;X;X;COMMAND FRAME INTERRUPTX;DRIVEN BY VINTERX; COMINTQ>;;SET FLAG WHEN!K1}X; WHEN COMMAND FRAME SET PRCVFLG7(92X;<X;FX;SET TIMEOUT INTERRUPTPX;U SETVBXZQ>STIMOT;;SET POINK2}TER_;TO ROUTINEd PCDTMA1nQ>STIMOTxPCDTMA1$>;;SET VB INTERRUPT%>;;1/2 SECOND WAITQ>= SK3}ETVBVQ>PTIMFLG;;ZERO TIMEOUT FLG.:X;STIMOTQ>;;SETS FLAG AFTER ;TIMEOUT PTIMFLG:X;#X;NEWK4} KEYBOARD INTERRUPT HANDLER""X;SETS FLAG ONLY IF ESC PRESSED'X;,KEYBDQKBCODE;;GET ICODE1;FOR KEYPRESS6R>;; ESCAK5}PE?@HKRETRN;;NO, RETURNT FWANTGR^ "GRWANTh !KRETRNrWANTGR#GRWANT|Q>PCCOUNT;;CHAR COUNT=0 KRETRN79K6}X; X;TIMERX; CONTDNCONTDN0;;SHORT INTERVAL ;TIMER HCONTDN1 HCONTDN:X;X;X;SPEAKER TONE RK7}OUTINETONEPBUFSIZ PCOUNT&TONE1$COUNT;;SET VALUES0%>;;FOR TIMER:Q>DPCONSOL;;MOVE SPEAKERN CONTDN;;TIK8}ME DELAYX'CONSOL;;MOVE OTHER WAYb3l$COUNT;;DELAYv CONTDNHTONE1;;KEEP GOING:X;X;X;*****************K9}*******X;************************X;SDSTATC;;SAVE Y5 PSNDFLG PBUFSIZ  PCOUNT SENDEN;;ENABLE POKEY %K:}>;;1 MILLISECOND% ;DELAY* 'CHKSNTX;SDSTATC;;SAVE Y5 PSNDFLG PBUFSIZ  PCOUNT SENDEN;;ENABLE POKEY %H'