@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`  `8  ɐ     `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.D8:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D8: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 ALLOWED697 FREE SECTORS COPYING---D8:COPY32.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- 164ɛ+,' 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 D8u05  15 2 2151^116115ύ011$r2ԭ5 3)5)5ԭx GT}@@L00)+& 2 L0=ɛ -L!1LV1L1 /3 3ȹ441L-4 v3 25 2H 2h͔5U}L3L3 2 k3U hh`DOC`QL3P1Lk0S1H /3h0B k3@ VL0LU!#$53 1181118V}1111Ε5 1Lk0552 1Ȍ1i111i11115Lk0pppB4f5&&&&&&&&^6f^6&&&&&W}&&A1@BJ D2ELVK@BHILV^Щ6 2BD2EJ VBD5EHI0 V0%5X}5 2iХiL[2 25 25`D:*.*` i@`8 ``@i `8@`0 BLV525<4Y}5`HH i ԍΗ552 ԍhh@ Lح1Э1Ѣ 24.4 24Z}4`D4E` 2BJ k3LVRH` 2BD4EhK)I JLV333}ress of string passedto XIO 32, or the default).+8 xcoord Pointer xposition (P/M coord).+9 ycoord !?} Pointer yposition (P/M coord).+10 forecol Foregroundcolour on OPEN.+11 backcol Backgroundcolour!@} on OPEN.+12 minx Left edge ofactive area (P/M coord).+13 miny Top edge ofactive area (P/M co!A}ord).+14 maxx Right edge ofactive area (P/M coord).+15 maxy Bottom edge ofactive area (P/M co!B}ord).6.1 Vectors.The calcxy vector is supplied by theCORE system. By doing an indirect JSRthrough this vector you can !C}get andset the co-ordinates of the pointer.You are encouraged to use this vectorto get the co-ordinates rather thanlook u!D}p xcoord and ycoord in thetable. (All of the supplied devicedrivers use the vector.) The calcxyroutine should be called wi!E}th a valuein the A register. The lowest threebits when set cause the calcxyroutine to:Bit Function--- -------- !F}0 Set the x position to thevalue in the X register. 1 Set the y position to thevalue in the Y register. 2 For!G}ce a redraw of the pointer.The A register is unchanged by theroutine. X and Y are loaded with theactual co-ordinates of t!H}he cursor:these may be different from yourrequested co-ordinates if the pointerwas limited to the active area. Make sure!I} all "unused" bits of A arereset, because future versions mayuse them for other purposes. You arenot required to make sure!J} that X andY are in range: that is doneautomatically. Even with bit 1 set,the pointer is only updated if theactual y co-o!K}rdinate has changedsince the last screen update. If youmust have the screen updated then setbit 2. The only reason you sho!L}uldwant to set bit 2 is if you changethe pointer address (saddr) to a newpointer. For example with a light penyou may wan!M}t a completely blankpointer when the light pen is lifted.But try to leave things as you findthem, or your user may get ann!N}oyed.Example call to calcxy: LDA #%000 ; Get the status JSR indirect ; of the pointer. : !O} : indirect: JMP (calcxy)The actual values loaded into X and Yare player/missile co-ordinates ofthe position of the d!P}atum point. The click vector should be providedby your driver. It is used todetermine the state of the button.Your routi!Q}ne should set A to 0 if thebutton is pressed, and to 1 if it isnot pressed. You are not required tosave any registers or f!R}lags. End yourroutine with a RTS. Example (fromJOYSTICK): click: LDA stick1 ; Get stick value RTS !S} ; Simple eh!The movep vector should be providedby your driver. It is called by NOTEto allow the pointer to be movedarou!T}nd. On entry, the A register willbe set to indicate the exit condition.If the click function returns thevalue in this regi!U}ster your routineshould return. NOTE decides the valuedepending on whether it is in Click,Unclick or Toggle mode.Your mo!V}vep function should move thepointer around using the calcxyvector. It should return with a RTS.You are not required to sav!W}e anyregisters or flags. Good practicedictates that you should call yourclick function to determine the exitcondition, al!X}though only a puristwould do this by going through theclickp vector. For example: movep: STA exit ; Save exitcondi!Y}tion loop: LDA #0 ; Main loop. : : LDA #%011 ; Set X and Y. JMP indirect ; update!Z}screen. JSR clickp ; Done yet? CMP exit ; Check exitcondition. BNE loop ; No, loopb![}ack. RTS ; Yes, done. indirect: JMP (calcxy)heck exitcondition. BNE loop ; No, loopb E7.0 How MMCONFIG.COM was generated.MMCONFIG.COM was generated largelyautomatically, and it may be usefulto discuss the wa%]}y I did it.The 6502 processor does not make iteasy to generate relocatable code ofany size, because there are norelative%^} jump instructions and so on.It is therefore difficult to writecode that will relocate itself whenit loads. This is furthe%_}r hinderedbecause the standard DOS loader mustload programs into absolute addresses.My solution is to produce aconfigura%`}tion program which allowsthe programs to be configured to workat a particular place in memory. Ofcourse, this does mean th%a}at anyparticular configuration is thenfixed once the file is written out. The first time I used this method waswih my 80%b}-column driver. In thatinstance the configuration programwas written in BASIC, which made itrather slow, so this time I ch%c}ose towrite it in PL65 (which I used towrite Multi-Mouse itself, except thatI only used assembly language and nohigh-leve%d}l statements). 7.1 Generating data tables.The method I use is to compile all ofthe programs twice, at differentplaces%e} in memory. The first time theyare compiled at $2000, the second at$3000, although in fact the secondcan be compiled on an%f}y page boundary.The first object file is given theextension .20 and the second .30. TheFILEDUMP program is then run which,%g}when given the filename, takes thetwo versions and produces a .REC filefrom them. For example given thefilename CORE it t%q}B%DOS SYSB*)DUP SYSB SAUTORUN SYSB_MMMAN1 DOCBxMMMAN2 DOCBmMMMAN3 DOCB"MMMAN4 DOCBMMMAN5 DOCB,0MMMAN6 DOCB"\MMMAN7 DOCBMMMAN8 DOCBMMMAN9 DOCBEMMCONFIGCOMBTESTPTR BASB TURBOMODTURB%!FILEDUMPCOMakes CORE.20 andCORE.30 and generates CORE.REC. This.REC file contains PL65 statementsand can be directly included into th%r}eMMCONFIG program with no furtherprocessing.The .REC file contains two datatables: The first is just a hex dumpof the .%s}20 file. The second givesoffsets into this table where thedata bytes are different between the.30 and .20 files.Effectiv%t}ely the only differences willbe page addresses of data items andprocedures within the program. Byadding on a delta value t%u}o each ofthese values, the program caneffectively be relocated by wholepages.7.2 Advantages & disadvantages.This meth%v}od has the flaw that thecode can only be relocated by wholepages, although in this case there isno disadvantage because it%w} must starton a 2K boundary for the player/missile graphics to work. Also, itcannot cope with any arithmetic onaddresses %x}other than additions andsubtractions. That is, if an addresswas say multiplied by three then therelocator could not detect%y} it.However, it is very unusual (andthoroughly bad practice) to doanything to addresses other than addor subtract offsets%z} from them.The beauty of it is that therelocation is entirely automatic, andthat all that is needed to generate abinary %{}file is to dump the firstbuffer straight to disk. It alsomakes the configuration programstand-alone with no need to have a%|}nyother files to run the configuration.The write_code procedure in theMMCONFIG program actually performsthe relocation. %}}It calls add_delta torelocate the code, writes the buffer,and then calls add_delta again torelocate the code back to itso%~}riginal position, so that it can berelocated to a different place in thesame run. 7.3 Other configuration.The other p%}art of the configurationis to configure items such ascolours, the DOS file to load, and soon. For these there are a set of%}offsets into the CORE data table,which is then updated whenever theoptions are selected. The offsetshave to be worked out%} manually, sincethere is no easy way to have themautomatically computed. But the jobcan be completed fairly easily armedw%}ith a cross-reference and a listingof the program from which the dumpwas created. (That is, the COREsource code.)In fact%} it is these miscellaneousconfigurable items which are the realproblems to program for; therelocation is very simple once %}theprocedures have been written. I tryto offer a fairly reasonable set ofitems but it could be taken further,the idea is %}to know when to stop. Ifyou think that a particular variableneeds to be configurable, for examplethe position of the point%}er on anOPEN command, then tell me about it.ular variableneeds to be configurable, for examplethe position of the point$08.0 Device Drivers.This section describes data formatsof the four supported input devices.8.1 Mouse.An ST mouse retur)}ns a four-bit valueinto the joystick pins. The value canbe read using STICK(1). My devicereads the hardware register direc)}tly,because the shadow register isupdated too slowly to keep up withfast mouse movement.The four-bit value is split into)} twotwo-bit pairs. Bits 1 and 0 handlethe horizontal axis, bits 3 and 2handle the vertical axis.The two bit-pairs change)} in a Graycode as the mouse moves. The Graycode order is thus: 00 01 11 10 00 again, and so on.If the mou)}se in one direction, thissequence is returned continuously asthe mouse moves. If it is moving inthe opposite direction, th)}e sequenceis returned in the opposite order.All that is necessary to determinemovement is to compare the two-bitcode aga)}inst the last read code. Ifthe two are the same, no movement hasoccured. If they are different, thecode is checked against)} a tablecontaining the Gray code sequence. Ifit matches the value in this table,it is moved in the appropriatedirection, )}else it is moved in theopposite direction.The left button on the mouse isreturned like the joystick button, inSTRIG(1). )}The right button comes outonto the second paddle. When theright button is pressed the paddlevalue falls from 228 to about )}100.However I do not use this valuebecause I found it to be unreliable.Did you know you can play MissileCommand with a m)}ouse when in Trakballmode?8.2 Trakball.The trakball, like the mouse, returnsa four-bit coded value where two bitsare )}for the vertical axis and two forthe horizontal. As with the mouse, Iread the hardware register directly,because the shado)}w is updated tooslowly for fast trakball movement.Bit 3 of the trakball output changeswhen there is vertical movement. If)}the value of bit 3 has changed sincelast read, bit 2 indicates thedirection of movement, 1=down, 0=up.Similarly, bit 1 c)}hanges when thereis horizontal movement. If the valueof bit 1 has changed since last read,bit 1 indicate the direction of)}movement, 1=right, 0=left.All trakball trigger values return inthe same way as the joystick, viaSTRIG(1).8.3 Touch Tab)}let.The Touch Tablet returns two paddlevales. The horizontal axis isreturned in PADDLE(2), and thevertical in PADDLE(3).)}The axes both run from 0 to 228. Inthe horizontal axis, 0 is the left ofthe tablet, and 228 is the right ofthe tablet. I)}n the vertical axis, 0is the bottom of the tablet and 228is the tp of the tablet.I "trim" the values so that there isno )}need to have the pointer rightagainst the edge of the tablet.Notice that the vertical axis isinverted compared to that of )}thescreen.The touch tablet has three buttons,and each of these resets one bit inSTICK(1). Since I don't discriminatebet)}ween buttons I just check whetherany bit is reset by comparing thevalue of STICK(1) with %1111.8.4. Joystick.The joyst)}ick returns a four-bit valuein STICK(1). Each bit corresponds toone of the directions. Bit 0 is setto 0 when there is up m)}ovement. Bit 1is set to zero when there is downmovement, bit 2 when there is leftmovement and bit 3 when there isright mo)}vement.Diagonal movements set two of thebits to zero, for example up and leftsets bits 0 and 2 to zero. It ispossible to)} set both 'up' and 'down'bits, but it should never happen(Multi-Mouse will just cancel nothbits out so no movement will oc)}cur.)The trigger button is, of course,returned in STRIG(1).-Mouse will just cancel nothbits out so no movement will oc(A9.0 Endnotes.This section includes miscellaneousinformation concerning your beta-testrelease and also requesting your hel-}p.9.1 New Tablet Driver.I have redesigned the tablet handlersince version 1.0 of Multi-Mouse. Theaveraging is now muc-}h better (it hada bug in it before). It also preventsthe shape from zooming to the topright corner when the pointer isrem-}oved from the tablet. Instead itjust stays where it was.9.2 Other Device Drivers.I have written Multi-Mouse with theid-}ea of allowing people to add theirown device drivers. I hope that Ihave provided a good enough interfaceand documentation -}to allow this.However, if you have a device thatyou would like to use with Multi-Mouse, but don't feel up to writingfor -}it yourself, I can help. Contactme and I will try to arrangesomething.I have only programmed for thosedevices which I ow-}n. I should beespecially interested if anyone haswritten a device driver for one thefollowing devices, or wants onewritte-}n: Koala Pad (should be just a new Tablet driver.) Light Pen Keyboard9.3 Distribution.You-} may distribute Multi-Mouse at nocharge. The only condition is thatyou must not modify the programsbefore distributing the-}m. This issimply because otherwise I end upgetting technical questions frompeople who have a modified copy thatI don't kn-}ow about. If you have anymodifications, include the details asa text file on the disk, and pleasesend me a copy.9.4 Ove-}r to You.If you have written a device yourself,I would be very pleased to receive acopy of the source code. With yourper-}mission, I will then include it inthe configuration program anddocument it as part of Multi-Mouse.Of course, you will be c-}redited asthe author.If you spot any errors in thedocumentation, of either a technicalor a typographical nature, please-}annotate the documentation and returnit. I need your support. As a user ofmy utilites, tell me what you thinkof them and h-}ow I can improve them.Phone me on (0438) 354652, or writeto:Simon Trew322 York RoadSTEVENAGEHerts.SG1 4HW.This pr-}ogram came from L.A.C.E.The London Atari Computer EnthusiastsSimon Trew322 York RoadSTEVENAGEHerts.SG1 4HW.This pr,A!dBʝ  ` ``  } }  `8     `8   `    ^ ~ 1} e  e &` > &&8  > > ƀ` !  ` =   =  `   1}   ` ]   ]  ` I  I `    U  M  E  `  2  (  ׽1} ͽ     `   } }  `  ` > } } 1}ȱ ` > } } Ƚ `} } ` 腋`8HH``膇`1}H8     h}  }  `8           Ā фIJ)ee1}慠ф$%Ɓ   ``` #Ji  ` #J #i  ` # #JJ 1}#JJ8   i L6#8    8  8 ȱ 8 ȱ   1} }  }  %`   ȱ 8  8 ȱ L6# }  } 8ȱ僰 6#81}  ȱ   } Ƚ }  }  }  %`8  8 ȱ  6# ȱ  Ƚ 1} 8倥偐 $>  %1}> `    1 8 Ѝ`    1 8  ? ` JH hJH hJ ?  1}`W^M~L LLi0HW!NNi h` 80LMWL>M ^M~L1} 8 NW!^N` !`l `! !)I! !! U!`l `!. ! 8LMN !ʎ  81} ! !` $$%8    `ЍР` `CUTWLMpA"0H")!0!` "01} ύ ߍ  ! Ȍ! ԩ>/Э   oo`B&L!%L! L "`<"l"0";"N"!"1} ## MM"&`l"`&i&؛ " " " " &7& B V0B1}D&EJ V0 e& B V`HL` 49CFKNUYbehoty~1},AWq #(-=S]diqv{1}%(*@EJPU\t  N#@#@##`M#L#JJJJH)J#h) JJK#L#: #HH#J# D#J#hHI#K#1} D#K#h #J#H#K#I#8nL# @#M#Д`l `` #08;BGJOR_bgjwz}  Z#@#@##1}y``W#Y#X# @#W#yX#riN#siR#X#Y#Y#ǩM#yN#M#NM#jNM#jN#1}yR#N#NN#jNN#jI #Ђl `` */369>KX`ejquz  G#@#@##`1}E# #8)HMF#      #h)F# @#E#`l `` *KQTW]  E#@#@#{#`D1}# u#yJJJJ @#D#`l `` 8;E  P#@#@##`ccO#N#JJJJH) J1}L#h)M#M#N#: #HJ#L# D#L#hHK#M# D#M#h #L#J#M#K#8nN# @#O#В`l `` %391}<?FKNSVcfkn{~ D:MM.COM !11 !00 !1}00 !0000 ! ! R" !LY1 !00 !00 ! '(11 ! ! R" !L1 !00 !11 ! '( !L11}1 ! ! '(`0123456789ABCDEF$xx !11)111JJJJ111 !11 !`L2Please type in two hex1}1 ! !0 !00 ! 1LH2characters. There is no12 ! !0 !00 ! 1L2need to press Return: j2 ! !1}0 !00 ! 1L21122 ! 4' !11 !A ! f" !L2 !1 &!0 ! 5! !1L3 !1 &!A1} ! 5! !11 ! ! f" !11 !1 !1 # !1 ! R'1182121L2 ! ! R' !1 " !1} ]! !1 " !`L3Please type a filename̠3 ! !0 !00 ! 1L4a1}nd press Return: 4 ! !0 !00 ! 1 !3 ! ! e( !3333 ! ! R" !L43 !: ! 7"3 !: 1}! 7" ! !L4L4D:4 ! !3 ! %3 !3 !33 !3 ! $3 !33 !`L4333 !33 !`1} !55 ! !44 !4L*5**5555&5'5Hȱh !44 &! ! ! &! ! !41} &! !558&55'55L@5` !55 !55 !55 !5550 !55 !55 !55 !1} 50 !0 &! &! !+ !55 !55 ! '(0 ! K!55 !55 !55 ! 55` !^6Lw6Creating drive1}rh6 ! !L6, please wait...6 ! ! 1 ! w' ! ! !ɠ0 !00 ! 'Ǡ( ! !\, !v ! 5^6 !1} ! &L7H- ! !- ! ! 5L7 ! &LH7. ! !Ӡ. ! ! 5L7 ! &Ls7/ !J !ՠ/ ! ! 51}L7 ! &L7 / !b !o/ ! ! 5L7 ! &L7/ ! !0 ! ! 5L7 ! w'`x:+7+ ! ! 1}%" !L8L8(None)7 ! !0 ! %L28}Multi-Mouse v2.1c by S.8 ! !LL8 Trew 1991.A8 ! ! 1 ! ! R'L1}8For help see section 5 ofk8 ! !L8 the manual.8 ! ! 10 !00 !0 !00 ! 1L8A. Start Page......1}.. Ԡ8 ! !0 ! &! 1 1L"9B. Device name....... 9 ! !ؠ7 !77 ! 1LZ9C. Driver filename... D9 ! 1}!ɠ0 !00 ! 1L9D. Foreground|9 ! !0 !00 ! 1L9E. Background9 ! !0 !00 ! 1L9F. Res1}erved pages.... ۠9 ! !0 ! 1 1L":G. Dos 2.x file...... : ! !0 !00 ! 1L[:H. Make ST mouse driverD1}: ! !0 !00 ! 1L:J. Make tablet driver}: ! !0 !00 ! 1L:K. Make joystick driver: ! !01} !00 ! 1L;L. Make trakball driver: ! !0 !00 ! 1L@;M. Make Amiga mouse driver&; ! !0 !01}0 ! 1Ls;N. Make core onlyb; ! !0 !00 ! 1L;Q. Quit; ! !0 !00 ! 1 ! ! R'`1}N+S+N+ ! &! ! ! 4' !;; !A ! &L< 1 !00 ! ! ! ! 7" !LN+N+L?E ! &L>S+S+L?F ! &L> 1 !00 ! ! f" !L>L1}[>You must reserve atH> ! !0 !00 ! 1L>least 6 pages for}> ! !0 !00 ! 1L>the driver.> !1} !0 !00 ! 1 1 !0L/>L?G ! &Lm? 3Ϡ; ! %Ϡ; !;; !L?? ! ! 3$ !Le?Ϡ; !;; !1}0 ! %0 ! !+ ! %+Lj?+L?H ! &L? ! _6L?J ! &L? ! _6L?K ! &L? ! _6L?L ! &1}L? ! _6L?M ! &L? ! _6L?N ! &L? ! _6L?; !D ! f"; !E ! R" ! !L;; !`LF@You are ad1}vised not to0@ ! !0 !00 ! 1L@use any drivers createdh@ ! !0 !00 ! 1L@on this run after@ 1}! !0 !00 ! 1L@this error occurred.Ԡ@ ! !0 !00 ! 1`0 ! ! R" !L,A00 !1} &! ! 5! ! ! !0` AؠA [# ! w' ! w' ! ! !LAK:~A ! ! ' 7 ;Q ! %" !LAGoodbye.A1} ! !0 !00 ! 1 ! w' V#`ؠA [#LAError A ! ! ! 1 15 ! !LB -@5L*BPress any key: B1} ! !0 !00 ! 1 ! 4' ! ]! !L\A V#`PAA ! ! ! 1 15 ! !LB -@5L*BPress any key: B0=10 REM !------------------------------!11 REM ! TESTPTR BY SIZ 1991 !12 REM !------------------------------!13 RE5}M ! This program demonstrates !14 REM ! some features of Multi-Mouse !15 REM ! in a BASIC environment. !16 REM !--5}----------------------------!17 REM 18 REM !------------------------------!19 REM ! Set up a graphics 15 screen !20 REM 5}! with a text window. !21 REM !------------------------------!22 GRAPHICS 15:COLOR 123 REM !---------------------5}---------!24 REM ! Read in the custom shape, a !25 REM ! crosshair. !26 REM !--------------------------6}----!27 READ HEIGHT:DIM XHAIR$(HEIGHT*2+3)28 XHAIR$(1)=CHR$(HEIGHT)29 FOR LOOP=2 TO HEIGHT*2+330 READ IN:XHAIR$(LOOP)=CHR6}$(IN):NEXT LOOP31 REM !------------------------------!32 REM ! Open the mouse driver and !33 REM ! set the maximum limi6}t to !34 REM ! (159,159) so that the mouse !35 REM ! cannot enter the text window.!36 REM !--------------------------6}----!37 OPEN #1,12,0,"M:"38 ? #1;"Most":X=159:POINT #1,X,X39 REM !------------------------------!40 REM ! Display the cro6}sshair, wait !41 REM ! for a click and plot the !42 REM ! point at the shape. !43 REM !---------------------6}---------!44 ? #1;"Click":XIO 32,#1,12,0,XHAIR$45 NOTE #1,X,Y:PLOT X,Y:PRINT X,Y46 REM !------------------------------!476} REM ! Display the standard pointer,!48 REM ! wait for an unclick and draw !49 REM ! a line to that point. This !50 REM 6}! enables the line to be !51 REM ! "dragged". !52 REM !------------------------------!53 ? #1;"Unc6}lick":XIO 32,#1,12,0,CHR$(0)54 NOTE #1,X,Y:DRAWTO X,Y:PRINT X,Y55 GOTO 4456 REM !------------------------------!57 REM ! 6 }Data for the shape. The data !58 REM ! is made up as follows: !59 REM ! Line 63: height,xoff,yoff !60 REM ! Line 6 }64: "white" data !61 REM ! Line 65: "black" data !62 REM !------------------------------!63 DATA 11,3,564 D6 }ATA 0,16,16,16,16,108,16,16,16,16,065 DATA 56,40,40,40,238,130,238,40,40,40,56------------------------!63 DATA 11,3,564 D4P10 REM !------------------------------!11 REM ! TURBOMOD.TUR BY SIZ 1991 !12 REM !------------------------------!13 RE: }M ! This program reads in your !14 REM ! Turbo-BASIC XL binary file !15 REM ! and creates a new one that !16 REM ! i:}s compatible with some !17 REM ! other MEMLO-changing devices !18 REM ! including my 80:, M: and N: !19 REM ! device:} handlers. This !20 REM ! program supersedes 80TBMODI !21 REM ! because the new binary file !22 REM ! will now lo:}ad correctly !23 REM ! whether or not a low-memory !24 REM ! device is used, there is no !25 REM ! need to keep a s:}eparate copy !26 REM ! of Turbo-BASIC XL. !27 REM !------------------------------!28 REM 29 REM !--------------:}----------------!30 REM ! Read in the names of the !31 REM ! input and output files. !32 REM !-------------------:}-----------!33 TRAP #ERROR34 DIM IN$(20),OUT$(20),BUFFER$(4000)35 INPUT "Input file: ";IN$36 INPUT "Output file: ";OUT$:}37 CLOSE #1:OPEN #1,4,0,IN$38 CLOSE #2:OPEN #2,8,0,OUT$39 REM 40 REM !------------------------------!41 REM ! Modify the :}first segment to !42 REM ! replace the fixed MEMLO with !43 REM ! MEMLO-checking code. !44 REM !-----------------:}-------------!45 GET #1,MLL,MHH:REM file header 46 GET #1,MLL,MHH:REM Segment head47 GET #1,MLL,MHH:REM Segment tail48 GE:}T #1,MLL,MHH:REM Memlo consts49 PUT #2,$FF,$FF:REM file header50 PUT #2,$02,$21:REM segment head51 PUT #2,$1A,$21:REM segm:}ent tail52 PUT #2,$A0,MLL,$A9,MHH53 PUT #2,$CD,$E8,$02,$9054 PUT #2,$0F,$D0,$07,$CC55 PUT #2,$E7,$02,$90,$0856 PUT #2,$F:}0,$06,$8D,$E857 PUT #2,$02,$8C,$E7,$02,$6058 PUT #2,$E2,$02:REM init segment59 PUT #2,$E3,$02:REM init segment60 PUT #2,$:}02,$21:REM run new code.61 REM 62 REM !------------------------------!63 REM ! Copy the rest of the file !64 REM ! in :}the usual way, making !65 REM ! a 4000-byte copy pass until !66 REM ! an EOF or an error occurs. !67 REM !---------:}---------------------!68 REPEAT 69 TRAP #EOF70 BGET #1,ADR(BUFFER$),400071 # EOF:PB=DPEEK($0348+$10)72 TRAP #ERR:}OR73 LAST=PB<400074 IF PB>075 BPUT #2,ADR(BUFFER$),PB76 ENDIF 77 UNTIL LAST78 REM 79 REM !------------------:}------------!80 REM ! Error routine: If EOF then !81 REM ! the copy completed or the !82 REM ! user ended his input. :} !83 REM ! Otherwise display the error. !84 REM !------------------------------!85 # ERROR:CLOSE 86 IF ERR=13687 : } PRINT "Program finished OK."88 ELSE 89 PRINT "Error ";ERR;" at line ";ERL90 ENDIF 91 END OR:CLOSE 86 IF ERR=13687 8a!(ʝ  ` ``  } }  `8     `8   `    ^ ~ >"} e  e &` > &&8  > > ƀ` !  ` =   =  `   >#}   ` ]   ]  ` I  I `    U  M  E  `  2  (  ׽>$} ͽ     `   } }  `  ` > } } >%}ȱ ` > } } Ƚ `} } ` 腋`8HH``膇`>&}H8     h}  }  `8           Ā фIJ)ee>'}慠ф$%Ɓ   ``` #Ji  ` #J #i  ` # #JJ >(}#JJ8   i L6#8    8  8 ȱ 8 ȱ   >)} }  }  %`   ȱ 8  8 ȱ L6# }  } 8ȱ僰 6#8>*}  ȱ   } Ƚ }  }  }  %`8  8 ȱ  6# ȱ  Ƚ >+} 8倥偐,}` 􆆥IȄ8傅ƅ褂`慑`   8`` ` >-}Ƚ L&`  B D E H Ii& V0`ʘ  1#` ! ! ! &` !L>.}'M' !J'K' !I' !H' !G'J ! !G' ! ]! ! !H'K ! !G' ! ]! ! !I'G' ! !J'K' >/}!L'M' ! &` !'' !'' !''' ! ! R" !L5(' ! !'' !'' ! &` !9(:( !7(8(>0} !6(6( ! !7(8( !9(:( ! &` !w(x( !u(v( !t(t( ! !u(v( !w(x( ! &t( ! ! ]!H &! !>1}Hȱh !`HRD:D: (>2}$xxxx0123456789ABCDEF !II !GIHIGI)TIRIGIJJJJTIQIII ! ! %" !LIHI)TIPIHIJJJJTIOILI>3}$PI !LIMI !NI k#`NI !LIMI !` !IIIL JBYTE J ! !I ! %I !I !II !I ! >4}$I !LQJ_data [JJ ! !I ! $I !HH ! ! eII ! $I !LJ] DATA J ! !I ! $I !I >5}!II ! ;(IIII !HH ! f" !LLII !۠( " !II !I ! ! eII ! $II ! &! !>6}IIII !HH ! f" !LKI !LgK,fK ! !I ! $LKI !LK;K ! !I ! $II ! ! %" !>7}LKI !LK ĠK ! !I ! $I !I !II ! ;(IILJII ! ! R" !LULI !L&L%L ! !>8}I ! $I !I !II ! ;(` !VLZL[LWLXLWLXL !HH ! f" !LLWLXL !۠( "WLXL !۠8>9} " 7" !LLZL[L ! &! !ZL[LWLXL ! &! !WLXLLvLLLINT L ! !I ! %I !I !II !I >:}! $I !LDM_reloc [;}I !II ! ;(IIWLXLZL[L ! ! R" !L6OWLXL !۠( " !YLYL !WLXL !۠8 " 7" !LOZL[L><} ! ! 5! !ZL[LI !WLXL ! ! eII ! $ZL[L ! ! 7" !LNI !LN,N ! !I ! $LNI !LN>=};N ! !I ! $II !$ ! %" !LOI !LN ߠN ! !I ! $VL !I !II ! ;(IIWLXL >>}! &! !WLXLLMII ! ! R" !LOI !LZOYO ! !I ! $VL !I !II ! ;(`LO*** Error O >?}! !I ! %I ! ! ! eII ! $I !LO ***֠O ! !I ! $ !I !II ! ;( ! 4'` !P>@}H !I !II !H ! $H !I !II !H ! $ߠH !LiP.20eP ! !H ! $H !LP.30P ! >A}!H ! $P ! 4' !LPLoading P ! ! ;( !H !HH ! ;(P ! ! !H !HH ! N'$Q [#P !>B}( ! ! 'P HHIHP ! 4' !LQQLoading IQ ! ! ;( !H !HH ! ;(P ! ! !H !H>C}H ! N'P !۠8 !HH ! 'P ! 4' V#`D:R [# !LRInput file, eg 'CORE': Q ! ! ;>D}( !I ! ! y( ! 5! !II ! PR [#àQ !I !II !ŠQ ! $àQ !LtR.RECoR ! !ŠQ ! $>E} ! ! !ŠQ !QQ ! N' ! I ! \L !LRENDFILEĠR ! ! ;( ! 4' V#` O V#`QR ! !ŠQ ! $<h