@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@W!( 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 BASIC language TUR > TURBO BASIC OBJ| f}COM > MACHINE language DOC > DOCumentation PIC|MIC|FNT|MVM > Graphics AMS|MUS|MBD > Music LST > BASIC g} LISTing -Some MACHINE language programs can only be run by loading the MENU without BASIC! ------- -For s h}ome programs, XL/XE models may require a "TRANSLATOR" program (available from BELLCOM) to be loaded first! -Most i}programs are relatively self-explanatory; however, some may have separate DOCumentation files. Some BASIC programs m j}ay contain instructions in their program listings. LIST to read. -To view DOCumentation files one page at a time, k} press [START], [Return], or the Joystick Trigger to display the highlighted DOC file. Pressing the [Esc] key cau l}ses a return to MENU. -To print out a hard-copy of any DOCumentation file, [Q]uit the MENU, boot DOS, and then from m} DOS, use the (C)Copy command: D:Filename.DOC,P: -To use this great MENU program on your own disks, simply n} copy the file "AUTORUN.SYS". D:Filename.DOC,P: -To use this great MENU program on your own disks, simply ! __________________________________ MEMORY EXPANSION FILES INFORMATION __________________________________ Wellp},... You've heard about it.... CHAOS Member Claus Buchholtz started it all... THE 256K 800XL!! And now we have q}collected quite a variety of instuction files, documentation, source code for assembler, ramdisk drivers, driver crear}tors, demos, and just about everything else for use in/by/for expanded memory in your ATARI computer. Here's some os}f what's available on this disk from the CHAOS BBS. Be sure to READ the documentation and instruction files for these t} files where possible before worrying about why they crash on you! (All files here are listed in the "UTILITIES/TECHNOLu}OGY" section of the CHAOS BBS!) HINT: the biggest single cause of ramdisk failure is not having set up your DOS to rv}ead any disk drive numbered higher than D2. Read the QXLINSTR file for discussion of this, also see your DOS manual. w}The second most trouble comes from using the wrong ramdisk driver for your DOS. Select carefully, and report your sucx}cess or failures to us here so that we can let everyone else know. Check the messages, especially the LIBRARY BASE (#3)y}, and look for NEW QX.... files in the "N"EW section under "F"iles. ALSO BE SURE TO SEND US ANY EXPANSION, UPGRADE, z}WHATEVER FILES YOU MAY HAVE TO ADD TO OUR LIST!___________________________________Now, here goes...QXLINFO.DOC - {}DOCFILE---------------------This file!QXLINSTR.DOC - DOCFILE----------------------How to do your 256K 800 XL!Includ|}es vital information on howto use and configure your systemafter the mod is installed.QMEGXLD.SRC - SOURCE CODE--------}}-----------------This is Claus's actual assemblercode for constructing a doubledensity ramdisk driver file or adriver to~} make TWO SINGLE densityramdisks. The drive number for theramdisk may be selected beforeassembly using the ATARI ASSEMBLE}Rcart, or any good assembler. Namethe resulting binary fileAUTORUN.SYS or load from DOS.QMEGXLS.SCR - SOURCE CODE----}---------------------Code for constructing a singledensity ramdisk driver file, usefulfor running software designed foru}sing the 128k in the 130XE. (Won'twork with some, like BASIC XEcart!) The drive number for theramdisk may be selected. Se}e thediscussion of these two SOURCE CODEfiles in the QXLINSTR file.Files assembled into OBJECT CODEfor DOS "L"oading fro}m the abovefiles:QXLDD3.OBJ----------Makes a double-density Ramdisknumbered as "D3:"QXLSD34.OBJ-----------Makes} TWO ramdisks, both singledensity, numbered "D3:" and "D4:"QXLSD3XE.OBJ------------Makes one single density ramdisknu}mbered "D3:" that stays out ofthe way of much 130XE software.QXLSD04.OBJ-----------Makes one single density ramdisknu}mbered "D4:" that stays out ofthe way of much 130XE software.QBASXED4.OBJ - OBJECT---------------------This one is spe}cial made to allow adouble-density 503 sector ramdiskcalled "D4:" that will work withDOSXL and BASIC XE!! (Perhaps itwill} work on SOME other DOS's. Letus know.)QXSPARTA.OBJ - OBJECT---------------------Use this like this from SPARTADOSpro}mpt: >D:QXSPARTA D3: (or anydrive # you want...) to set up a1530 sector ramdisk!!! It might doeven more on a 320 or 512X}E! Likeall of these, it is still anybody'sguess what compatibility may or maynot be found.QXCONFIG.OBJ - BASIC--------}------------Writes ramdisk drivers set up frommenu choices, supposedly will workwith MYDOS and others. Some reportsof se}mi-functioning with this fileunder some DOS's.QXLDEMO.BAS - BASIC-------------------Just a quick basic routine to get}you started and to check out bankselection.QXLLOADR.BAS - BASIC--------------------Load that/those ramdisks with files}copied off prepared disksautomatically with this one.QXLDOS25.DOC - DOCFILE----------------------How to set up DOS 2.}5 for ramdiskuse of the extended memory.Now, some other files...GENEMDE2--------Install EMDE vs.2 for 800 plusmemo}ry mod. Generates RAM disk.ADRCHECK--------Extended memory diagnostic for 800plus addressing error test.ERRCHECK--}------Extended memory diagnostic for 800plus Data Bit Error Test.XLDSK.SRCXLDSK.OBJ---------Ramdisk controller for }256K 800XL.RD.DOC RDS.OBJRD.SRC RDD.OBJRD2.SRC-------Ramdisk controller for 256K 800XL.________________________}___________ Keep us up-to-date! Let us know what's hot and what's not in upgrades and software, and upload whatever} you find! SUPPLIED BY THE CHAOS BBS (517) 371-1106 Updated 4/20/86___________________________________ whateverr _________________________________ A 130XE-COMPATIBLE 256K UPGRADE FOR THE ATARI 800XL by Claus Bu}chholz _________________________________ I designed the 256K upgrade described in my article, "The Quarter-Meg Ata}ri" (BYTE, September, 1985 and recapped here in this article), in December, 1984. Since this predated the 130XE, the}re was no precedent for extended memory on the XLs. I felt free to implement a system of eight 32K banks. The major } reason was to keep the add-on circuit as simple as possible. The 130XE, introduced in early 1985, set a different st}andard for bank-select memory. It uses 16K banks and makes them separately available to both the CPU and the video c}ontroller (ANTIC). The XE has 128K total memory. The 64K extended RAM is split into four 16K banks. A 256K 800X}L has 192K extended RAM, which requires 12 16K banks. I have designed a new upgrade for the 800XL that implements such} a scheme. Its similarity to the 130XE's scheme allows use of software for the XE on a 256K 800XL. To select one }of four banks, the XE uses two bits, #2 and #3, in the memory control register (port B of the 6520 PIA, addressed at }$D301 or 54017 decimal). Zeroing bit #4 makes the selected bank appear at addresses $4000-$7FFF (16384 to 32767 decimal}), as seen by the CPU. Zeroing bit #5 makes it appear there as seen by ANTIC. In my upgrade, bits #2, #3, #5 and #6} select one of the twelve banks. Zeroing bit #4 makes the selected bank appear at $4000- $7FFF to both the CPU and AN}TIC. So, any program for the XE that uses the extended RAM for CPU storage will work on an 800XL with this mod. Thos}e programs won't use the additional 128K, though. Programs that use the video banking feature of the XE might run on }the modified XL, but the screen display will be wrong. The Dynamic RAM --------------- Each chip} inputs or outputs one bit at a time, so each bit has a unique address. For the 256K-bit chip the address requires ei}ghteen bits. The chip has nine address inputs, each of which does double-duty. During the first part of a memory access}, half of the address bits are presented to the chip. This half is called the row address. Later in the access cycle,} the chip receives the other half of the address, called the column address. The storage cells in the chip lie in a }matrix, and the cell being addressed lies at the intersection of the row and column specified. To complete the access} cycle, the chip reads or writes the selected bit. The 800XL uses 64K-bit RAM chips, which have eight address inputs} for an eight-bit row address and an eight-bit column address. This is fine for the 16-bit addresses the 6502 gives. T}here are eight of these chips, each contributing one bit to each byte of RAM. The 256K-bit RAM is practically identi}cal to the 64K-bit RAM except that it has one extra pin to accommodate the two additional address bits it needs. This e}xtra pin is pin #1 on the chip. Pin #1 on the 64K-bit chip has no function. The functions of all the other pins on bo}th chips are identical. Therefore, our upgrade involves unplugging the eight 64K-bit RAMs and plugging eight 256K-bi}t chips in their place. We must also add some circuitry to provide two extra address bits for pin #1. The storage ce}lls in dynamic RAM chips are actually microscopic capacitors, storing an amount of electric charge that represents a }0 or 1 bit. Since capacitors leak charge, they must be periodically recharged or refreshed. The chip refreshes one or t}wo entire rows when accessed. This means that every row must be accessed frequently to keep the stored data accurate.} Since normal operation of RAM can't guarantee that, the computer system must provide special access cycles called re}fresh cycles. A refresh cycle is a dummy read cycle in which a refresh address is used as the row address. The 16K- }and 64K-bit RAMs require seven-bit refresh addresses. The computer must provide all 128 possible refresh addresses ever}y few thousandths of a second to keep the RAM refreshed. In the Atari, the video controller provides refresh cycles i}n addition to its screen memory accesses. It automatically provides seven bits for the refresh address. It turns out,} the Atari spends four percent of its time refreshing RAM. One snag in designing the 256K-byte upgrade is that sta}ndard 256K-bit RAMs require an eight-bit refresh address. Older versions of the Atari video controller chip provide onl}y seven bits of refresh address, whereas newer versions give all eight. So, there are two versions of the upgrade's i}nterface circuit. The more complex one must add another bit to the Atari's refresh address. Notes on Bank-sele}ction ----------------------- To fit 256K bytes into the 6502's 64K memory space, we must divide it into banks.} If a program in RAM were to replace the entire 64K RAM with another bank, it would cause itself to disappear, and t}he system would certainly crash. Also, the top 32K of the Atari's address space is cluttered enough with hardware add}resses and ROMs that can be switched in and out themselves. The screen RAM is usually in the top 32K and we don't want }to switch that out and cause glitches to appear on the screen. Additionally, the operating system keeps important da}ta in the lower part of RAM and it expects the data to be there when it is called. Further, the 6502's stack is in lo}w memory. Worse, interrupts occur frequently and the routines they invoke also keep data in low RAM. Programs must th}erefore follow a strict rule: Keep the "normal" bank enabled as much as possible. If you select another bank, you must} first disable all interrupts and not call the operating system until the "standard" bank is restored. Inte}rfacing the RAM ------------------- The interface circuit for the 256K RAM is to be assembled on a small circ}uit board and installed inside the computer, as the computer's expansion slot doesn't carry the signals we need. The }circuit consists of four (or five for older models) chips and replaces one of the chips on the computer motherboard. It} also requires jumper wires to various points on the motherboard and connection to 5 pins of the PIA (U23). The ci}rcuit plugs into the socket at position U27 on the motherboard. This gives it access to six important signals, includ}ing power and ground. The chip that was at U27 becomes IC1 in the circuit. As U27, this chip was one of the two respons}ible for selecting which eight of the sixteen address bits are passed to the 64K RAMs at one time. If your ANTIC (U7}) part number is CO21697, use the circuit described by the first connection list at the end of this article. If it i}s CO12296, include the circuit in the second list. The circuit requires five connections to the PIA (U23). So, pins 12} through 16 must be bent up and connected to the circuit. The extra circuitry for the older version of the 800XL is} an eight-bit binary counter that counts the refresh cycles. It supplies the eighth bit of the refresh address that t}he 256K chips need. The refresh signal it uses comes to the circuit through a jumper wire from the motherboard. } Performing the Upgrade ---------------------- To disassemble the 800XL, remove the six screws on the unders}ide and separate the top and bottom portions of the plastic case. Be careful of the flexible keyboard cable. Pull it }straight up out of its socket on the motherboard. To detach the motherboard from the case bottom, remove three screws:} one on the right side, one in the right rear corner, and one in the left rear. Gently pull the board free of the case}. Next, remove the small nuts and bolts around the metal shielding that encases the motherboard. On the left side of} the exposed motherboard, locate the row of eight 16-pin RAM chips. Just to their right is U27. Behind U27 is a three}-inch square area that fits inside the shielding. The circuit goes there, because the shielding is highest toward the } rear. Replace the 64K RAMs with the 256K RAM chips. The new RAMs are very easily destroyed by static discharges, so} extreme care is necessary in their handling. Lay aluminum foil on the work surface and keep the motherboard, RAM chi}ps, tools and hands in contact with the foil at all times. This keeps everything at the same potential, decreasing the} possibility of damage. On the motherboard, locate the video controller, the 40-pin chip at U7. If the part number st}amped on it reads "CO21697," you are lucky! You may use the simpler circuit. If the number reads "CO12296," you must }use the larger circuit. Assemble the appropriate circuit on a two by three inch circuit board (Radio Shack's #276-15}0 is ideal). Use very low profile sockets or no sockets at all, as height is severely limited by the shielding. If yo}u use no sockets, be careful not to apply heat to the IC pins for too long a time. Keep the wiring on the chip side o}f the board to conserve space. The wiring must be soldered, as there is no room for wire-wrap posts. The board plugs} into the socket at U27 via a 16-pin DIP header and short ribbon cable. Finally, install the jumper wires. Find a res}istor marked R32 immediately behind the row of RAM chips and remove it. A trace from one of the holes runs to pin 1 of }the RAMs. Solder the first jumper to that hole. The next jumpers run to a parallel port which the Atari uses to co}ntrol ROM switching. We need pins 12 through 16, which are normally unused and not connected to any traces. Locate U2}3 and carefully pry the 40-pin chip from its socket. Bend up pins 12, 13, 14, 15 and 16 so that they point straight out}. Reinsert the chip. Cut five adjacent pin positions from an IC socket and solder the jumpers to them. Use this custo}m socket to connect the jumpers to the three protruding pins. Cover the connector with electrical tape, as the shield}ing is very low at this point. If you are using the circuit for the older 800XL, you must install an additional jump}er. Locate a trace on the motherboard from pin 8 of the video controller, U7. Along the trace find a hole and solder }the jumper there. Finally, insert a thin piece of stiff cardboard or plastic under the small circuit board to avoid }shorting the circuit. Refasten the shielding to the motherboard. If it doesn't fit over the circuit, carefully pound a }dent out of the shielding with a hammer. Reassemble the computer. If all has gone well, the computer should power up} and perform normally, although with the 256K in your XL, be sure to wait at least ten seconds after turning the comp}uter off, else it may not coldstart properly when you turn it back on. The computer is ready to try some software th}at utilizes the large RAM space. The RAM-disk Software --------------------- Bank-select RAM is useles}s without software to control it. The software must obey strict rules as outlined above to work properly. The softwar}e must also be tailored to fit the application. Applications vary. For example, many graphics screens may be stored }in the RAM, possibly to be displayed in quick succession for animation. Alternately, the RAM may act as a print spool}er. A word processor would print an entire document quickly into the RAM and go on to other jobs while the RAM empties} slowly to a printer. These applications are rather specific and might not appeal to all users. A more universal ap}plication is the RAM-disk, a RAM-based disk drive simulator. To DOS and to the user's programs, the RAM-disk appears }just as another disk drive, except that it is very fast. The application program may then use standard DOS commands to }access the large RAM space. The 192K bytes of available RAM hold more data than two Atari 810 drives or one double-de}nsity drive. The RAMdisk software I have prepared, QMEGXLD.SRC, offers a choice of either two single-density RAMdisk}s or one double-density. Also available is QMEGXLS.SRC, a RAMdisk program that sets up one single-density RAMdisk an}d leaves the XE-equivalent banks free for XE software. This is quite useful with BASIC XE, DOS 2.5, or the new Synap}se software. Assemble the source code with any assembler that accepts the syntax of the Atari Assembler/Editor. Asse}mbly produces an object file that performs several tasks as it loads. First, it copies the operating system from ROM in}to the underlying RAM. Next, the RAM-disk routines load into the RAM-based OS, overwriting the international characte}r set, a little-used feature of the 800XL. Lastly, it patches the OS to install the RAM-disk program and calls DOS's }initialization routine to let DOS recognize the new drive. The source code allows two options: the drive number and }the density. The RAM-disk can act as any drive numbered 1 to 8. If you have one real drive, you might want the RAM-di}sk to be drive number 2. Remember that your DOS must be set up to look for the drive number chosen. See the DOS manua}l for instructions concerning drive numbers. Typicallly, you must POKE memory location 1802 with a value of 15 in order} to recognize disk drive numbers up to #4. Then you will write new DOS files which will thereafter always include yo}ur POKE. The RAM-disk object file should be made to boot in after DOS so the user needn't worry about it. In Atari D}OS, naming the file AUTORUN.SYS accomplishes this. Once the object file has loaded, the RAM-disk MUST BE FORMATTED be}fore use. You may do it manually from DOS, or the application program may do it automatically (use the BASIC XIO comm}and or a call to CIO in machine code). RESET won't harm the contents of the RAM-disk, nor will rebooting the compute }r, as long as the computer is not turned off (to reboot without powering down, POKE 580,1 and press RESET, or jump to } $E477 in machine code). After rebooting, the RAM-disk program must be reloaded to access the data, which should then } be found unharmed in the RAM-disk. This is why the RAM-disk program does not automatically format the RAM-disk upon  }loading. The major disadvantage to the RAM-disk approach is that all data is lost when the computer is turned off. T }he application must take care to save important data to a real disk before ending. However, the speed, convenience, a}nd versatility of the RAM-disk overshadow its drawbacks. Uses ---- An assembly langu}age programmer, after studying the RAM-disk source code and heeding the rules above, can devise many practical uses f}or a quarter-megabyte of RAM. The large RAM space, joined with the Atari's versatile hardware and low price, gives a } performance/price ratio that is unbeatable in today's micro- computer market. I ask one thing in return for this in}formation: Please pass it around to all your interested friends. Put it in your club's library or on your favorite BBS}. Encouraging software support of 256K will result in many interesting uses for it. Thank you and enjoy! } IMPORTANT NOTE -------------- COPY THE REMAINDER OF THIS FILE TO YOUR 80-COLUMN PRINTER FOR BEST VIEWING R}ESULTS! _________________________________ DEFINITION OF MEMORY CONTROL REGISTER AT $D301 (54017 DECIMAL) } XL MOD 130XE bit: 7 6 5 4 3 2 1 0 bit: 7 6 5} 4 3 2 1 0 D a b E c d B R D V C x y B R D=0 enables diagnostic ROM } D=0 enables diagnostic ROM B=0 enables BASIC ROM B=0 enables BASIC ROM R=1 enables OS ROM } R=1 enables OS ROM E=0 enables extended RAM V=0 enables extended RAM for video abcd is 4-bit} extended RAM bank # C=0 enables extended RAM for CPU - ranges from 4 to 15 xy is 2-bit extended R}AM bank # - banks 12 to 15 are equivalent - ranges from 0 to 3 to XE's banks 0 to 3 } PARTS LIST 8 41256 256K-bit dynamic RAM (200ns or less) 1 74LS153 Dual 4-to-1 multiplex}er (IC2) 1 74LS139 Dual 2-to-4 decoder (IC3) 1 - 33 ohm, 1/4 watt resistor ADDITION}AL PARTS FOR ANTIC #CO12296 1 74LS158 Quad inverting 2-to-1 multiplexer (IC4) 1 74LS393 Dual 4-bit counter (IC5}) LIST OF CONNECTIONS FOR THE UPGRADE CIRCUIT Instead of a drawing of the upgrade circui }t, below is a list of connections. Each entry in the list begins with the name of the signal followed by all t!}he IC pins that connect together and share the signal. IC3-13 means pin 13 of IC3. The IC numbers appear in the par"}ts list above. IC1 is the 74LS158 chip from socket U27 on the XL motherboard. DIP is the DIP header to be plugged in#}to socket U27. U23-xx refers to the pins you bend up on the PIA chip at U23 on the motherboard. Vcc : DIP-16, IC1$}-16, IC2-16, IC3-16, IC3-13 Vss : DIP-8, IC1-8, IC2-8, IC2-1, IC2-15, IC3-8 A7 : DIP-11, IC2-10, IC2-11 %}A15 : DIP-10, IC2-13, IC3-3 A6 : DIP-14, IC2-6, IC2-5 A14 : DIP-13, IC2-3, IC3-2 MUX : DIP-1, IC1-1, I&}C2-2 A4 : DIP-2, IC1-2 A12 : DIP-3, IC1-3 RA4 : IC1-4, DIP-4 A5 : DIP-5, IC1-5 '}A13 : DIP-6, IC1-6 RA5 : IC1-7, DIP-7 -E : DIP-15, IC1-15 RA7 : IC2-9, DIP-9 RA6 : IC2-7, DIP-1(}2 PB2 : U23-12, IC2-4 PB3 : U23-13, IC2-12 PB4 : U23-14, IC3-1 PB5 : U23-15, IC1-10 PB6 : )}U23-16, IC1-11 -Zd : IC1-9, IC3-14 -O1a : IC3-5, IC3-15, IC2-14 -O2b : IC3-10, One side of resistor *}RA8 : Other side of resistor, Pin 1 of all RAMs If your U7 part number is CO12296, do not connect signal A7 above,+} and make the following additional connections. The connection to U7 is to a trace on the motherboard that runs fro,}m pin 8 of U7. Vcc : DIP-16, IC4-16, IC5-14, IC4-3 Vss : DIP-8, IC4-8, IC4-2, IC4-15, IC5-7, IC5-2, IC5-12 -} A7 : DIP-11, IC4-6 -REF : U7-8, IC4-1 REF : IC4-4, IC5-1 A7' : IC4-7, IC2-10, IC2-11 Q7 : I.}C5-8, IC4-5 Q3 : IC5-6, IC5-13 _________________________________ SUPPLIED BY THE CHAOS BBS (517) 371-1106/}5-8, IC4-5 Q3 : IC5-6, IC5-13 _________________________________ SUPPLIED BY THE CHAOS BBS (517) 371-11060100 ; 192K RAMDISK CONTROLLER FOR 256K ATARI 800XL (version 2)0110 ; by Claus Buchholz, Oct., 19850120 ;0130 ; OPTIONS: D1}rive numbers and density0140 ; Note: If DENSITY=DOUBLE make DRIVEB=DRIVEA !0150 ;0160 DRIVEA=30170 DRIVEB=40180 DENSITY=2}SINGLE0190 ;0200 ; Equates0210 ;0220 SINGLE=$80 Sector lengths0230 DOUBLE=$000240 DDEVIC=$300 SIO Device Control Block3}0250 DUNIT=$3010260 DCOMND=$3020270 DSTATS=$3030280 DBUFLO=$3040290 DBYTLO=$3080300 DAUX1=$30A0310 DOSINI=$0C Access to4} RESET initialization0320 CHKSUM=$31 Temporary checksum0330 BUFRLO=$32 Temporary pointer to user's buffer0340 ZTEMP=$34 Te5}mporary miscellaneous use0350 ZTEM2=$38 Temporary miscellaneous use0360 STACKP=$318 Stack pointer save0370 PORTB=$D301 PIA6} port B - memory control register0380 ;0390 ; Load-time code - Copy OS into RAM0400 ;0410 *=$38000420 GO0430 LDA PORT7}B Enable Bank #30440 AND #$830450 ORA #$0C0460 STA PORTB0470 LDA #$C0 Zero page pointer0480 STA $CC0490 LDA #$408}0500 STA $CE0510 LDA #00520 STA $CB0530 STA $CD0540 TAY0550 LOOP0560 LDA ($CB),Y Copy OS0570 STA ($CD),Y0580 9}INY0590 BNE LOOP0600 LDX $CC0610 CPX #$CB Skip pages $CC to $D70620 BNE NXPG0630 LDX #$570640 STX $CE0650 LDX #:}$D70660 NXPG0670 INC $CE0680 INX0690 STX $CC0700 BNE LOOP0710 LDA PORTB0720 ORA #$7C Disable bank0730 AND #$FE;} Enable RAM OS0740 STA PORTB0750 RTS Continue load0760 *=$2E20770 .WORD GO Execute preliminary load-time code0780 ;<}0790 ; Ramdisk controller code0800 ;0810 *=$CC00 Permanent code - in place of alt. char. set0820 HOOK0830 CLC Hook in=}to all SIO calls0840 LDA DDEVIC0850 ADC DUNIT0860 LDY #$00 DRIVEA offset0870 CMP #$31+DRIVEA Right drive number?0880>} BEQ HOOKED0890 LDY #$80 DRIVEB offset0900 CMP #$31+DRIVEB0910 BEQ HOOKED0920 OLDVEC=*+10930 JMP * If not, go to SI?}O0940 HOOKED0950 TSX If so, intercept0960 STX STACKP Save stack pointer0970 STY ZTEM2 Store offset0980 LDA DCOMND E@}xamine command0990 CMP #'! Format?1000 BNE NOFMT1010 JMP FORMAT1020 NOFMT1030 CMP #'P Put sector?1040 BNE NOPUT10A}50 JMP PUTSEC1060 NOPUT1070 CMP #'R Read sector?1080 BNE NOGET1090 JMP GETSEC1100 NOGET1110 CMP #'S Read status?1B}120 BNE NOSTT1130 JMP STATUS1140 NOSTT1150 CMP #'W Write sector?1160 BNE NAKRET1170 JMP PUTSEC1180 ;1190 ; ReturnC}s - Restore stack pointer, report error status and return1200 ;1210 NAKRET1220 LDX STACKP1230 TXS1240 LDY #139 NAK erD}ror for improper command1250 STY DSTATS1260 RTS1270 ERRRET1280 LDX STACKP1290 TXS1300 LDY #144 Bad sector error13E}10 STY DSTATS1320 RTS1330 SUCRET1340 LDX STACKP1350 TXS1360 LDY #1 No error1370 STY DSTATS1380 RTS1390 ;1400 F}; Subroutine - Set pointer to user buffer1410 ;1420 SETBUF1430 LDA DBUFLO Move from DCB to zero page1440 STA BUFRLO145G}0 LDA DBUFLO+11460 STA BUFRLO+11470 RTS1480 ;1490 ; Subroutine - Prepare to access sector of ramdisk1500 ;1510 SETSEH}C1520 LDA #DENSITY1530 STA SECLEN Set sector length1540 LDA DAUX1+1 Check sector #1550 BNE NOTZ1560 LDA DAUX11570 I} BEQ OUTRG Sector 0 invalid1580 CMP #41590 BCS INRNG1600 LDA #$80 Sectors 1-3 always 128 bytes long1610 STA SECLEN16J}20 BNE INRNG1630 OUTRG1640 JMP NAKRET Sector # out of range1650 NOTZ1660 CMP #2 Check for sector # > $2D01670 BCC INK}RNG1680 BNE OUTRG1690 LDA #$D01700 CMP DAUX11710 BCC OUTRG1720 INRNG1730 LDA DAUX1 Sector # valid1740 STA ZTEMPL}1750 LDA DAUX1+11760 ASL ZTEMP1770 ROL A Divide # by 64 - Result is bank #, remainder is page #1780 ASL ZTEMP1790 ROM}L A1800 ADC #4 Bank #1810 TAX1820 LDA ZTEMP1830 LSR A1840 LSR A1850 ADC #$40 Remainder+641860 ;1870 ; SubroutinN}e - Prepare to switch banks:1880 ; X is bank #, A is page #1890 ;1900 SETBNK1910 STA ZTEM2+1 Save page #1920 LDA PORTBO}1930 STA PBN Normal bank1940 AND #$831950 STA PB Bank 01960 TXA1970 ASL A1980 ASL A1990 PHA2000 AND #$0C2010P} ORA PB2020 STA PB2030 PLA2040 ASL A2050 AND #$602060 ORA PB2070 STA PB Bank X2080 LDA $FFFA NMI vector2090 Q}STA ZTEMP2100 LDA $FFFB2110 STA ZTEMP+12120 LDY #02130 LDA #$40 RTI opcode2140 SEI Disable IRQ2150 STA (ZTEMP),YR} Place RTI in NMI routine - disables NMI2160 RTS Leave 0 in Y, bank # in X2170 ;2180 ; Format routine2190 ;2200 FORMATS}2210 LDX #4 Clear banks 4 to F2220 CLOOP12230 LDA #$402240 JSR SETBNK Prepare for switch2250 LDA PB2260 STA PORTB T}Switch bank in2270 TYA2280 CLOOP22290 STA (ZTEM2),Y Zero entire sector2300 INY2310 CPY SECLEN2320 BNE CLOOP22330 U} TAY2340 INC ZTEM2+1 Next page2350 BPL CLOOP22360 LDA PBN2370 STA PORTB Switch bank out2380 LDA NMI2390 STA (ZTEMV}P),Y Enable interrupts2400 CLI2410 INX Next bank2420 CPX #$10 Done?2430 BCC CLOOP12440 JSR SETBUF2450 LDA #$FF RW}eturn a sector with 2 $FFs and the rest 0s2460 LDY #02470 FLOOP2480 CPY #22490 BNE NOTFF2500 LDA #02510 NOTFF2520 X} STA (BUFRLO),Y2530 INY2540 CPY SECLEN2550 BNE FLOOP2560 JMP SUCRET Done2570 ;2580 ; Write sector routine2590 ;26Y}00 PUTSEC2610 JSR SETBUF2620 LDA #02630 STA CHKSUM Zero checksum2640 JSR SETSEC Point to ramdisk sector2650 PLOOP26Z}60 LDA (BUFRLO),Y Get byte from user's buffer2670 LDX PB2680 STX PORTB Switch bank2690 STA (ZTEM2),Y Put byte into ram[}disk2700 LDX PBN2710 STX PORTB Normal bank2720 CLC2730 ADC CHKSUM Add byte to checksum2740 STA CHKSUM2750 INY Ne\}xt byte2760 CPY SECLEN Proper sector length2770 BNE PLOOP2780 LDX #$F Bank F holds checksum table2790 LDA DAUX12800 ]} ASL A2810 LDA DAUX1+12820 ROL A2830 ORA #$60 Sector # indexes checksum table2840 JSR SETBNK2850 LDA DAUX12860 AN^}D #$7F2870 TAY2880 LDA CHKSUM2890 LDX PB2900 STX PORTB Switch bank2910 STA (ZTEM2),Y Store checksum2920 LDX PBN2_}930 STX PORTB Normal bank2940 LDY #02950 LDA NMI2960 STA (ZTEMP),Y Enable interrupts2970 CLI2980 JMP SUCRET Done2`}990 ;3000 ; Read sector routine3010 ;3020 GETSEC3030 JSR SETBUF3040 LDA #03050 STA CHKSUM Zero checksum3060 JSR SEa}TSEC3070 GLOOP3080 LDX PB3090 STX PORTB Switch bank3100 LDA (ZTEM2),Y Get byte from ramdisk3110 LDX PBN3120 STX POb}RTB Normal bank3130 STA (BUFRLO),Y Put byte into user's buffer3140 CLC3150 ADC CHKSUM Add to checksum3160 STA CHKSUMc}3170 INY Next byte3180 CPY SECLEN Proper sector length3190 BNE GLOOP3200 LDX #$F Bank F for checksum table3210 LDA d}DAUX13220 ASL A3230 LDA DAUX1+13240 ROL A3250 ORA #$603260 JSR SETBNK3270 LDA DAUX13280 AND #$7F3290 TAY3300e} LDX PB3310 STX PORTB Switch bank3320 LDA (ZTEM2),Y Get original checksum3330 LDX PBN3340 STX PORTB Normal bank3350f} TAX3360 LDY #03370 LDA NMI3380 STA (ZTEMP),Y Enable interrupts3390 CLI3400 CPX CHKSUM Compare checksums3410 BEQg} GCSOK3420 JMP ERRRET If different, bad sector3430 GCSOK3440 JMP SUCRET If same, done3450 ;3460 ; Read status routineq}-B%DOS SYSB*)DUP SYSB SAUTORUN SYSB_HELP DOCB&oQXLINFO DOCBQXLINSTRDOCBE0QMEGXLD SRCB>~QMEGXLS SRCBQXLDD3 OBJBQXLSD34 OBJBQXLSD3XEOBJBQXLSD04 OBJBQBASXED4OBJB QXSPARTAOBJB-QXCONFIGOBJB QXLDEMO BASB$ QXLLOADRBASBDQXLDOS25DOCBF]SETUP COM3470 ;3480 STATUS3490 JSR SETBUF3500 LDY #3 Return 4 bytes3510 LDA #0 All 0s3520 SLOOP3530 STA (BUFRLO),Y3540 DEYr}3550 BPL SLOOP3560 CMP #DENSITY3570 BNE SDONE3580 LDA #$203590 INY3600 STA (BUFRLO),Y First byte tells density ofs} drive3610 SDONE3620 JMP SUCRET Done3630 ;3640 ; Variable storage area3650 ;3660 PB *=*+1 Value of memory control regit}ster for selected bank3670 PBN *=*+1 Value of memory control register for normal bank3680 NMI *=*+1 First opcode in NMI rouu}tine - Used to restore NMI3690 SECLEN *=*+1 Length of current sector3700 ;3710 ; RESET initialization routine3720 ;3730 v} *=$100 Hidden (hopefully)3740 NEWINI3750 DEC PORTB Enable RAM OS3760 OLDINI=*+13770 JSR * Call original DOSINI routinew}3780 MODINI3790 LDA #NEWINI&$FF Set hook for next RESET3800 STA DOSINI3810 LDA #NEWINI/$1003820 STA DOSINI+13830 Rx}TS3840 ;3850 ; Load-time code - Install ramdisk3860 ;3870 *=$38003880 DO3890 LDA $E45A Save original SIO vector3900 y} STA OLDVEC3910 LDA $E45B3920 STA OLDVEC+13930 LDA #HOOK&$FF Install new SIO vector3940 STA $E45A3950 LDA #HOOK/$10z}03960 STA $E45B3970 LDA $FFFA Save first opcode in NMI routine3980 STA $CB3990 LDA $FFFB4000 STA $CC4010 LDY #04{}020 LDA ($CB),Y4030 STA NMI4040 LDA DOSINI Save original DOSINI vector4050 STA OLDINI4060 LDA DOSINI+14070 STA OLD|}INI+14080 JSR MODINI Install new one4090 JSR $7E0 Re-initialize FMS to show ramdisk present4100 RTS Done4110 *=$2E2}}4120 .WORD DO Execute final load-time code JSR $7E0 Re-initialize FMS to show ramdisk present4100 RTS Done4110 *=$2E2,0100 ; 96K RAMDISK CONTROLLER FOR 256K ATARI 800XL (version 2)0110 ; by Claus Buchholz, Oct., 19850120 ;0130 ; OPTION: Dri}ve number0140 ;0150 DRIVE=30160 ;0170 ; Equates0180 ;0190 DDEVIC=$300 SIO Device Control Block0200 DUNIT=$3010210 DCO}MND=$3020220 DSTATS=$3030230 DBUFLO=$3040240 DBYTLO=$3080250 DAUX1=$30A0260 DOSINI=$0C Access to RESET initialization02}70 CHKSUM=$31 Temporary checksum0280 BUFRLO=$32 Temporary pointer to user's buffer0290 ZTEMP=$34 Temporary miscellaneous us}e0300 ZTEM2=$38 Temporary miscellaneous use0310 STACKP=$318 Stack pointer save0320 PORTB=$D301 PIA port B - memory control} register0330 ;0340 ; Load-time code - Copy OS into RAM0350 ;0360 *=$38000370 GO0380 LDA PORTB Enable Bank #30390 A}ND #$830400 ORA #$0C0410 STA PORTB0420 LDA #$C0 Zero page pointer0430 STA $CC0440 LDA #$400450 STA $CE0460 LDA }#00470 STA $CB0480 STA $CD0490 TAY0500 LOOP0510 LDA ($CB),Y Copy OS0520 STA ($CD),Y0530 INY0540 BNE LOOP0550 } LDX $CC0560 CPX #$CB Skip pages $CC to $D70570 BNE NXPG0580 LDX #$570590 STX $CE0600 LDX #$D70610 NXPG0620 INC }$CE0630 INX0640 STX $CC0650 BNE LOOP0660 LDA PORTB0670 ORA #$7C Disable bank0680 AND #$FE Enable RAM OS0690 STA} PORTB0700 RTS Continue load0710 *=$2E20720 .WORD GO Execute preliminary load-time code0730 ;0740 ; Ramdisk controll}er code0750 ;0760 *=$CC00 Permanent code - in place of alt. char. set0770 HOOK0780 CLC Hook into all SIO calls0790 L}DA DDEVIC0800 ADC DUNIT0810 CMP #$31+DRIVE Right drive number?0820 BEQ HOOKED0830 OLDVEC=*+10840 JMP * If not, go to} SIO0850 HOOKED0860 TSX If so, intercept0870 STX STACKP Save stack pointer0880 LDA DCOMND Examine command0890 CMP #}'! Format?0900 BNE NOFMT0910 JMP FORMAT0920 NOFMT0930 CMP #'P Put sector?0940 BNE NOPUT0950 JMP PUTSEC0960 NOPUT}0970 CMP #'R Read sector?0980 BNE NOGET0990 JMP GETSEC1000 NOGET1010 CMP #'S Read status?1020 BNE NOSTT1030 JMP S}TATUS1040 NOSTT1050 CMP #'W Write sector?1060 BNE NAKRET1070 JMP PUTSEC1080 ;1090 ; Returns - Restore stack pointer,} report error status and return1100 ;1110 NAKRET1120 LDX STACKP1130 TXS1140 LDY #139 NAK error for improper command1}150 STY DSTATS1160 RTS1170 ERRRET1180 LDX STACKP1190 TXS1200 LDY #144 Bad sector error1210 STY DSTATS1220 RTS1}230 SUCRET1240 LDX STACKP1250 TXS1260 LDY #1 No error1270 STY DSTATS1280 RTS1290 ;1300 ; Subroutine - Set pointer} to user buffer1310 ;1320 SETBUF1330 LDA DBUFLO Move from DCB to zero page1340 STA BUFRLO1350 LDA DBUFLO+11360 STA }BUFRLO+11370 RTS1380 ;1390 ; Subroutine - Prepare to access sector of ramdisk1400 ;1410 SETSEC1420 LDA DAUX1+1 Check }sector #1430 BNE NOTZ1440 LDA DAUX11450 BNE INRNG Sector 0 invalid1460 OUTRG1470 JMP NAKRET Sector # out of range14}80 NOTZ1490 CMP #2 Check for sector # > $2D01500 BCC INRNG1510 BNE OUTRG1520 LDA #$D01530 CMP DAUX11540 BCC OUTRG}1550 INRNG1560 LDA DAUX1 Sector # valid1570 ASL A1580 LDA DAUX1+11590 ROL A Divide # by 128 - Result is bank #, rema}inder is page #1600 ADC #4 Bank #1610 TAX1620 LDA DAUX11630 ORA #$80 Remainder+1281640 ;1650 ; Subroutine - Prepare} to switch banks:1660 ; X is bank #, A is 2*page #1670 ;1680 SETBNK1690 LSR A1700 STA ZTEM2+1 Save page #1710 LDA #0}1720 ROR A1730 STA ZTEM21740 LDA PORTB1750 STA PBN Normal bank1760 AND #$831770 STA PB Bank 01780 TXA1790 ASL} A1800 ASL A1810 PHA1820 AND #$0C1830 ORA PB1840 STA PB1850 PLA1860 ASL A1870 AND #$601880 ORA PB1890 STA} PB Bank X1900 LDA $FFFA NMI vector1910 STA ZTEMP1920 LDA $FFFB1930 STA ZTEMP+11940 LDY #01950 LDA #$40 RTI opcod}e1960 SEI Disable IRQ1970 STA (ZTEMP),Y Place RTI in NMI routine - disables NMI1980 RTS Leave 0 in Y, bank # in X199}0 ;2000 ; Format routine2010 ;2020 FORMAT2030 LDX #4 Clear banks 4 to 92040 CLOOP12050 LDA #$802060 JSR SETBNK Prep}are for switch2070 LDA PB2080 STA PORTB Switch bank in2090 TYA2100 CLOOP22110 STA (ZTEM2),Y Zero entire page2120 I}NY2130 BNE CLOOP22140 INC ZTEM2+1 Next page2150 BPL CLOOP22160 LDA PBN2170 STA PORTB Switch bank out2180 LDA NMI}2190 STA (ZTEMP),Y Enable interrupts2200 CLI2210 INX Next bank2220 CPX #$A Done?2230 BCC CLOOP12240 JSR SETBUF22}50 LDA #$FF Return a sector with 2 $FFs and the rest 0s2260 LDY #02270 FLOOP2280 CPY #22290 BNE NOTFF2300 LDA #023}10 NOTFF2320 STA (BUFRLO),Y2330 INY2340 BPL FLOOP2350 JMP SUCRET Done2360 ;2370 ; Write sector routine2380 ;2390 }PUTSEC2400 JSR SETBUF2410 LDA #02420 STA CHKSUM Zero checksum2430 JSR SETSEC Point to ramdisk sector2440 PLOOP2450 } LDA (BUFRLO),Y Get byte from user's buffer2460 LDX PB2470 STX PORTB Switch bank2480 STA (ZTEM2),Y Put byte into ramdis}k2490 LDX PBN2500 STX PORTB Normal bank2510 CLC2520 ADC CHKSUM Add byte to checksum2530 STA CHKSUM2540 INY Next }byte2550 BPL PLOOP2560 LDX #9 Bank 9 holds checksum table2570 LDA DAUX1+12580 ORA #$70 Sector # indexes checksum tabl}e2590 ASL A2600 JSR SETBNK2610 LDY DAUX12620 LDA CHKSUM2630 LDX PB2640 STX PORTB Switch bank2650 STA (ZTEM2),Y }Store checksum2660 LDX PBN2670 STX PORTB Normal bank2680 LDY #02690 LDA NMI2700 STA (ZTEMP),Y Enable interrupts271}0 CLI2720 JMP SUCRET Done2730 ;2740 ; Read sector routine2750 ;2760 GETSEC2770 JSR SETBUF2780 LDA #02790 STA CHK}SUM Zero checksum2800 JSR SETSEC2810 GLOOP2820 LDX PB2830 STX PORTB Switch bank2840 LDA (ZTEM2),Y Get byte from ramd}isk2850 LDX PBN2860 STX PORTB Normal bank2870 STA (BUFRLO),Y Put byte into user's buffer2880 CLC2890 ADC CHKSUM Add} to checksum2900 STA CHKSUM2910 INY Next byte2920 BPL GLOOP2930 LDX #9 Bank 9 holds checksum table2940 LDA DAUX1+1}2950 ORA #$70 Sector # indexes checksum table2960 ASL A2970 JSR SETBNK2980 LDY DAUX12990 LDX PB3000 STX PORTB Swi}tch bank3010 LDA (ZTEM2),Y Get original checksum3020 LDX PBN3030 STX PORTB Normal bank3040 TAX3050 LDY #03060 LDA} NMI3070 STA (ZTEMP),Y Enable interrupts3080 CLI3090 CPX CHKSUM Compare checksums3100 BEQ GCSOK3110 JMP ERRRET If d}ifferent, bad sector3120 GCSOK3130 JMP SUCRET If same, done3140 ;3150 ; Read status routine3160 ;3170 STATUS3180 JSR} SETBUF3190 LDY #3 Return 4 bytes3200 LDA #0 All 0s3210 SLOOP3220 STA (BUFRLO),Y3230 DEY3240 BPL SLOOP3250 JMP S}UCRET Done3260 ;3270 ; Variable storage area3280 ;3290 PB *=*+1 Value of memory control register for selected bank3300 P}BN *=*+1 Value of memory control register for normal bank3310 NMI *=*+1 First opcode in NMI routine - Used to restore NMI33}20 ;3330 ; RESET initialization routine3340 ;3350 *=$100 Hidden (hopefully)3360 NEWINI3370 DEC PORTB Enable RAM OS338}0 OLDINI=*+13390 JSR * Call original DOSINI routine3400 MODINI3410 LDA #NEWINI&$FF Set hook for next RESET3420 STA DOS}INI3430 LDA #NEWINI/$1003440 STA DOSINI+13450 RTS3460 ;3470 ; Load-time code - Install ramdisk3480 ;3490 *=$38003}500 DO3510 LDA $E45A Save original SIO vector3520 STA OLDVEC3530 LDA $E45B3540 STA OLDVEC+13550 LDA #HOOK&$FF Insta}ll new SIO vector3560 STA $E45A3570 LDA #HOOK/$1003580 STA $E45B3590 LDA $FFFA Save first opcode in NMI routine3600 } STA $CB3610 LDA $FFFB3620 STA $CC3630 LDY #03640 LDA ($CB),Y3650 STA NMI3660 LDA DOSINI Save original DOSINI vec}tor3670 STA OLDINI3680 LDA DOSINI+13690 STA OLDINI+13700 JSR MODINI Install new one3710 JSR $7E0 Re-initialize FMS }to show ramdisk present3720 RTS Done3730 *=$2E23740 .WORD DO Execute final load-time code JSR $7E0 Re-initialize FMS a8=8) ө̩@Ω˅ͨˑW΢ |)`8m4 4L̺8!LPL%R!}LzSLWL%ͮ```23`ͭ   LB  4 4*4*i4JJi@!}9Ӎ)͊ H) ͍h )` ͍ͭ45@x4`@ ̭͍Ә89͍ӭ͑4X `̩2LV `̩!}1 ḵ2͎ӑ8͎e11  * ` ̭ )1͎ӑ8͎Ӡ͑4XLV `̩1 k̮͎ӱ8͎ӑ2e11  !} * ` ̭ )͎ӱ8͎Ӫ͑4X1LLLV `̠2 ȑ2LV   `878Z̭[̩Z̍[˭!}̠ˍͥ    `8pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp!}ppˍͥ    `8pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp 8=8) ө̩@Ω˅ͨˑW΢ |)`8m4 5L̺8!LPL%R%}LzSLWL%ͮ```23`ͭ   LB  4 4*4*i4JJi@%}9Ӎ)͊ H) ͍h )` ͍ͭ45@x4`@ ̭͍Ә89͍ӭ͑4X `̩2LV `̩%}1 ḵ2͎ӑ8͎e11  * ` ̭ )1͎ӑ8͎Ӡ͑4XLV `̩1 k̮͎ӱ8͎ӑ2e11  %} * ` ̭ )͎ӱ8͎Ӫ͑4X1LLLV `̠2ɀ ȑ2LV   `878Z̭[̩Z̍[˭%}̠ˍͥ    `8pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp%}ppˍͥ    `8pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp$8=8) ө̩@Ω˅ͨˑW΢ |)`8̭m4L ̺!LPLRLNSL)}WLͮ```23`  L8   *i  J9j8Ӎ)͊ H) ͍h )})` ͍ͭ45@x4` ̭͍Ә89͍ӭ͑4X V̩2LL V̩1 a̱2͎ӑ8͎e11 )} p ̬ 1͎ӑ8͎Ӡ͑4XLL V̩1 a̮͎ӱ8͎ӑ2e11  p ̬ ͎ӱ8͎Ӫ͑4X1LBLL V̠)}2LL   `878Z ̭[ ̩Z̍[˭ӑ2e11  p ̬ ͎ӱ8͎Ӫ͑4X1LBLL V̠(;080 ө̩xԨӑө@X`0m5L ̺!LPLRLkSLW-}Lͮ```23`ͭ   L8   8y)ͭӍ)͊ -} ͍ͭ45@x4͍Ә͍ͅ` ̭͍Ә͍ӭ͑4X V̩2LL V̩1 a̱2͎-}ӑ͎e11 i ̬ 1͎ӑ͎Ӡ͑4XLL V̩1 a̮͎ӱ͎ӑ2e11 i ̬ ͎ӱ͎-}Ӫ͑4X1LBLL V̠2Lͩ2LL   `070Z ̭[ ̩Z̍[˭̠ˍͥ    `-}0͑4X1LBLL V̠2Lͩ2LL   `070Z ̭[ ̩Z̍[˭̠ˍͥ    `,8;LY  `  `8 4  4*4* 5xӪ)5H48jJ54231}0hHӱ4ӑ2GhӪHhHӱ2ӑ4)lD#dd˰ dddddhHhX`LS 1}`Ӫ)Ϩӭ@@@I@@I@(L9S")& $#' Yͱ ͲkͤcYͣ\1}x)ӭ7S38, :  ;7;8 өXL: өX` :  ;"& ;1}#' Ln i  i  x)H DӢdddhjө@3223iH)1} hh) Dөd32ȩ2ȑ22ȑ2 2ȑ2J272ȩ2 |өX`8*   2 34851}042354242 i; i;`8J272ȩ2 |өX`8*   2 3485098n<H cHI`)|MӍөBA@*:@U<: @@ @@N@,U< 5}@ @iA:Ah`MAIN L0 RAM-DISK"h:h:::5} :L::H:H`HI BLV o=`1b<Lxԭ45S]999';;<;<.>n>o> n>`8>5}> y>m>ȱm>L= y> m>L > y> m>m>m>L>>P>Q>S>T>Q>T>>i >L=5}n>o>` m> m>`=;;aL>>P>Q>S>T>Q>T>>i >L=4;OPARUNSTATDRVCDTANUMDRIVEDPTNUMLINERRDRDDUMDRVBYT@9} $$RAM DISK CONFIGURATION PROGRAM9}##FOR THE UPGRADED 256K 800XL'sBY SHAWN HART GG;A`,;@,9@,;@,;@0,9};@,*-@@&68,-* 6.h S`Ap@(-@@2Ai9}<6-?:C:,,F'F:@H,A8'68,-@P dA +'0@A0@@@9}n-@x1+(# ATARI 256K RAM CONFIGURATIONS.(1(&&( 1. 130XE W/ 1 SD RAMDISK''( 2.9} 800XL W/ 2 SD RAMDISKS&&( 3. 800XL W/ 1 DD RAMDISK( 4. BOOT FROM DISK( 5. INSTRUCTIONS 9}(( Select  6-@:,&@H!! @)!@A//AAAAPA9} A6-?:B,COLDSTART,'6-A6-@"'6-10*("} INPUT NUMBER FOR RAMDIS9}K -(0(6$ A$PRINT CURRENT DRIVES;8( (#( DRIVE NUMBER = '86-@:,&@H@-@@E9}"$8,6-J O!! @)!@AT68,-@6-Y A`CALC DRVBYTE^ A9}BUILD ARUN$c%%67@<@,.>:@I%,h A BUILD NUMDRIVE$m APWRITE AUTORUNr$39}6-A 6-@$'6-36-1+(#} INPUT NUMBERS FOR RAMDISK .(1($ A$PRINT CURRENT9} DRIVES8( (#( DRIVE NUMBER = '86-@:,&@H-@@"$8,6- !!9} @)!@A."68,-@$6-. A68,-@6- A`CALC DRVBYTE9} ABUILD ARUN$%%67@<@,.>:@I%,%%67@<@,.>:@I%, A BUILD NU9}MDRIVE$ APWRITE AUTORUN$36-A 6-@$'6-36-1+(#} INPUT NUMBERS F9}OR RAMDISK .(1($ A$PRINT CURRENT DRIVES8( (#( DRIVE NUMBER = '86-@:,&@H-@9}@ "$8,6- !! @)!@A68,-@6-6-! A`CALC D9}RVBYTE& ABUILD ARUN$+%%67@<@,.>:@I%,,%%67@<@,.>:@I%,-##67A<A9},.>:,.##67Ae<Ae,.>:,0 A BUILD NUMDRIVE$5 APWRITE AUTORUN:$XI9}NSTRUCTIONS]++(#}This program writes an AUTORUN.SYSb**("file to disk, which configures theg((( memory in a 256K UPGR9}ADED 800XL,l**("into one of the following options.q)()(Π duplicates the memoryv**("of a 130XE, and adds 1 9}SD RAMDISK.,,($Π gives you a standard 800XL,(and adds 2 SD RAMDISKS.&&(Π is also an 800XL, but:}(with 1 DD RAMDISK. ( **("DOS 2.0, DOS 2.5, DOSXL, SMARTDOS,++(#and MYDOS will work with this file...(:}&MACHDOS and TOPDOS are not compatible.**("RAMDISKS may be numbered from 1-8.**("If you decide to use 1 DD RAMDISK,:}++(#be sure to use a DD compatible DOS.-(-("Change AUTORUN.SYS to AUTORUN.AR1,""(if you are using SMARTDOS.+:}($(ӠΠϠ(+$PRINT CURRENT DRIVES""( CURRENTLY DRIVES AT -@@:}8,"@ =:,  $CALC DRV BYTE6--@@""6-%8,$@#+&@:},  $ #%-@*"/--67B:,%@,.7@$R..@@:} D:AUTORUN.SYSW+(+( WRITING AUTORUN.SYS TO DISK\ @f@p$BUILD STR:}ING TO SET 18026.  67@<@,.>:,$$$"8=8) ө̩@Ω"$$"ͨˑ:}W΢"$$" |)`8m"$$"3L ̺!LPL"$$"RLNSLWLͮ"$: }$"```"$$$"23`  L8 ".$$"   *i  J9j"8$$"8Ӎ)͊ : } H) ͍h )`"B$$" ͍ͭ45@x4`"L$$" ̭͍Ә89͍ӭ"V$$"4X V̩̭2"`: }$$"LL V̩1 a̱2͎ӑ8"j$$"e11  p ̬ 1"t$$"͎ӑ8͎Ӡ͑4XLL V̩"~$$"1 a̮͎: }8͎ӑ2e11"$$"  p ̬ ͎ӱ8͎"$$"Ӫ͑4X1LBLL V̠"$$"2LL   `": }$$"878Z ̭[ ̩Z̍["$$"˭̠ˍͥ    ""`8"$$"8=8) ө̩@Ω":}$$"ͨˑW΢"$$" |)`8m"$$"3 3L̺8!"$$"LPL%:}RLzSLW"$$"L%ͮ``" $$"`23`ͭ "$$"  LB :} " $$" 4 4*4*i4JJi@9"*$$"Ӎ)͊ H) ͍h )` "4$$"͍ͭ45@x4`@ ">$$"̭͍:}89ͭ"H$$"͍ӭ͑4X `̩"R$$"2LV `̩1 ḵ2͎"\$$"ӑ8͎e11 :} "f$$"* ` ̭ )1͎ӑ8͎"p$$"Ӡ͑4XLV `̩1 k̮͎"z$$"8͎ӑ2e11  "$$" * ` :}̭ )͎ӱ8͎"$$"͑4X1LLLV `̠2"$$"ɀ ȑ2LV "$$"  `878Z̭[̩:}Z"$$"̍[˭̠ˍͥ  ""  `8"D:RDSAVn$$"  `878Z̭[̩8bR>AX AA7@ @256XL BANK SELECTION DEMOBY RICHAR>}D EVANS 11/24 %;@0,9@,% A(6.BANK 6-Aa( A(6.BANK 6-Ae( A>}(6.BANK 6-Ai( A(6.BANK 6-As( A(6.BANK 6-A( A>}((6.BANK 6-A( A2(6.BANK 6-A( A<(6.BANK 6-A( AF(>}6.BANK 6-A%( AP(6.BANK 6-A)( AZ)6. BANK 6-A3) Ad)6.>} BANK 6-A7) Ax&#( 256 BANK SELECTION DEMO&(2( (+(WHICH BANK TO EXAMINE (0-11)/2('>}!@( TRY AGAIN' A7 @+B@Aa%$@76-@O @*!@'6-&@>}CB@A%$@O6-@E!@6-&@9B@A%%$@E6-@*6-F:B>}c%, "* A# (>:,6-%@# A ,CB@ -@B:,.6-@:7<,,<Bc%>}@ C$B@A AB@A AB@A AB@A A>}2-@@0+Bc%/ 2$X D:BNKSELDE.MO ABANK Eɛ8B@A A<jy^oCIOCIO2ADRV2SPASNAMESLOCKSTRTLENGLINETMPFILEUSEDBUFLEBUFFILEINFILOUTFILAPPNINDEFILENINIB!}NRETRISTAOUTINLINES @ -A6.A J. ^ | B"}A .B@]B#}dEEALPHABETIZING MULTIFILE COPY BY DAVE SCHAMBACH (N.O.A.U.G.)##XL256K MODS BY:RICHARD PARKER$$B$}CALL:I/O CONN BBS-404-446-8044A +'0@A0@@@;@,6.h V`B%};@,6.h V`?&;@,;@,;@,26-@?6.D1:*.*ee;@E$@,;@EB&},9@E,9@E,;@0,;@,;@,9@E,6/6-@P$P:+I:,&AV,'@P,6;,B'}L8(0Hit to format D5: and D6:or hit N to bypass!<L4NA hAdAU(?("***FORMATTING DRIVE B(}#5 AND #6***hAT@D5:,,AT@D6:8A@L62(B)})Insert disks in D1 and D2 then 6V* B*@@dd-@@P`67B:,%B*}@,.2 d j6-~@(**7@<@,4B+}SECTORSA3&7@<@,4 MEM SAV)(3 AP++7@<@,4BAD AP6-%@B,}7767$@&@<$@,.7@<@,67,.7@<@, AP6-&@@B-}(3-@ 68,-/68,-3 6-@6-@6-6-@x!B.}A }8,!A B  68,-&&6.7$@&@<$@,;;(Ժ 7@<B/}@, 7@ <@, B @@;8,!@-6-@;6B0}-&@ 68,-68,-6- B"A6A#!%@ ( READ ERROR#&B1}@A; @6-%@1( ERROR - ; A/,($ERROR AFTER 5 RETRIES, COPY ABORTED.B2}/&E (8,T@^6-%@h!!%@&A%Ar A (8,*@B3}@6-@"@A0 -@8," 6- &&6.7$@&@<$@,B4}::(Ժ 7@<@, 7@ <@, B7"@6.7@,(6.D5:767@,.B5}7"@6.7@,(6.D6:767@,.A! @@  A"B6}>6- B  @6-%@  A 0 !A@ A> AB7}P -@07<,4*A@ 4 > AP -@7<,4 AA&&6.7$@&@<$B8}@,(˺  B7"@6.7@,(6.D5:767@,.7"@6.7@,B9}(6.D6:767@,.((@5@ 8B@@`$( STOP NOW ?(84YAPPB:}F(( DO YOU WANT DRIVE ONE 'B' DRIVE?,44YFB@@R9( DO D5:AGAIN ?!4Y(6./6.9 AB;} 6-%@"@ &(6.D2:*.*6.6.( A>-($}Insert FoReM program in D1 then 1B<}>%D1:START' 6.$' 6.D1:)'"@6.D2:.'-@@8'7<,4 BB'67B:,B=}%@,.7<,L' t'67B:,%@,..~'+(67B:,%@,.7@ <@,+$+AP@ +6-C:7B>},,+;$AR&AV$P:'AV,;ASP:'AV, +6-%@&%+6-A%$P:'A%,*+;$AV&B?}AV$P:'AV,;AWP:'AV,4+6-?:C:,,>+%%6-F:AV,%AV$F:AW,C++6-F:AQ,(!@*B@}A6+$H+68,-8,%R+ 6-%$.Af@.6-C:7,,.;$Ah&AV$P:'AV,;AiBA}P:'AV,/ 6-8,/;$Ar&AV$P:'AV,;AsP:'AV,/6-?:C:,,0/6-%8,$4N#6-6BB}@#6. ||||||||||||>N(-@(8,B RN..27$@&@<$@,B \N&&6.7$BC}@&@<$@,fN 6-Q   $0u}""* THE END * D:NEWCOPY,B \N&&6.7$@f _________________________________ DOS 2.5 Modification for Q-MegXL _________________________________ I found thFE}e following modification in the Madison (WI.) Area Atari Users Newsletter (October, 1985). Their hardware sig built a 2FF}56 XL upgrade similiar to the one described by Claus Buchholz. Since they didn't have Claus's software at the time, FG}they modified DOS 2.5 so it would run two 720 sector ram-disk drives; one is created by runing RAMDISK.COM, the otherFH} must be formatted (in this version it is drive 7, but can be anything between 2 and 7; see my note below). I tried tFI}his mod on my 256 XL (Claus Buchholz Oct. 1985 version) and it worked. I had found that my new copy of Typesetter foFJ}r the XE did not work with Claus's software (typesetter uses the international character set for its own purposes), bFK}ut DOS 2.5-256K did! In fact I was finally able to load the entire Typesetter package into the RAMDISK, which speedsFL} up operation dramatically! -Richard Evans, East Lansing, MI. _______________________FM}__________ What follows are the instructions as they appeared in the MAAUG newsletter... Pataching DOS 2.FN}5 by Kurt Grittner ----------------- 1) Insert your assembler cartridge. Put Dos 2.5 in drivFO}e 1 (without RAMDISK.COM). Cold start your machine. 2) When the "EDIT" prompt appears, get into debug mode FP} by typing: "BUG". 3) When the "DEBUG" prompt appears, get into the mini-assembler by typing "A". 4) TFQ}ype the following lines ending each with the RETURN key. The mini-assembler will respond to each line with onFR}e or more lines of assembled object code. Notice that you MUST type a space after each "<" sign. FS} B86< LDX #0 105C< LDA #$64 12DE< LDY $21 < CPY #8 < BCC *+4 < ADC #5 < TAY < LDA $185B,YFT} < JMP $1846 148D< CMP #6 14C4< LDA #$70 < JSR $1846 183A< .BYTE "MEM.SAV ERR",$9B 1846< STA $44FU} < LDA $D301 < AND #$83 < ORA $44 < STA $D301 < RTS 185B< .BYTE $20,$24,$28,$2C < .BYTE $4FV}0,$44,$48,$4C < .BYTE $60,$64,$68,$6C 77F< CPX #7 (change # for other < BCC $78A (drive number FW}B88< CMP #7 (--2,3,4,5, or 6. < BCS $BD3 105E< CPY #7 (Don't type this!) < BCS $1076 70A< .BYTE $FX}C3 5) Press RETURN to exit the mini assembler. 6) type "X" followed by RETURN to return to the EDIT moFY}de. 7) Type DOS to access the Dos Menu. 8) Write DOS files to disk. 9) Turn off the machine and cold FZ} start DOS . . with RAMDISK.COM on the disk. When you do a directory of D8: you should have DUP.SYS, MEM.SAVF[}E and 620 sectors free. Use the "I" command to format D7:. When you do a directory you should have 707 F\}sectors free.ectors free. Use the "I" command to format D7:. When you do a directory you should have 707 Du L <.`Lu 4U (c)1983 Action Computer Services  B JKIHJ^}iDiELV`L94 94 BLV`"L44l L4 &` Fj`8冨J_}凪` 4EӅӥ 4`ʆǪƩ Ɛee` 4ƦʆǢ &Ɛeǐ 5 J`}5L4 4'&&&8儨児祂*L4&&*ń8&&L4 W5`hihiHHȱȱJa}L4c !#3`L4JJJJ`H 4h`Hȩh n4L5 w4L5 !4LJb}5 )4L5 /4H8`HhHh [6L5 BHI V䅠L5 L6 94L5ԆJc} ؠPIPP` 6P )4L5 6L6 6L6 7L6H- 68塪墨hL7 7L6 "Jd}7L6 6ȹP`텠8堨塪 6芨Oȩ-`PP 6P棩 Ѥģ0Je}-ģ6000:,80H & &ehe&eģ0ʥ 8堅塅`$ 6&*i0:0i 6Ʀ`Jf}¢ 护°ڱ%ȱ%E 6L\8担CS N6L\8I 7L\8H 8L\8 6L\8 Jg} &B V 5NLMȑ` MLN%B VL5S:8E:9[\ZUVT`Ѣ =9`ȱѢĦJh}`膡``ťƤe8夰LS9 Ƥ8`ŦeѠJi}e桊LW9)")T1RINTE(" but DO use the pD1:AUTORUN.SYSD1:D1:DOS.SYS,DOS.SYSRUN"D: .SAV, @7K8Jj}P?@     Y`  Y0 l `7L 䙣ލJk}Ȏ!"` !"H h`lDD L;;;L9; 6L2; to continue, push Jl}Ԣ; N6)ILL;L9;)L];LL;`Lb; 6^;^;`our BL; 5w;{; _;z;z;IL;{;iw;eJm}x;iw;x;{;{;`z;)z;z;I}L<{;L<z;{;< 5==8= > >=Jr}LD>o=m==i 6=L>`TLI>Lj>} 堢>L ;6L> This program will work with and>t Js};6L>" affect the diskette inserted in> ;6L> drive number %C.%E9> ?8L?"To specify another drive, simplyJt}> ;6LD?# enter just the drive's number at? ;6Lq?" the prompt (any key but a valid?N ;6L?& drive number requestsJu} 'no change').?{ ;6L?Which drive to use ? ? N6 _;E>E>1L:@4E>L:@E> 6E>9E>9E>9E>:L)@ %E%E Jv}Drive %C now selected.%E9@ ?8Lu@Lg@)%E%ENo change--drive %C still selected.%E9@= ?8`'Lz@L@ Current SysteJw}m Configuration:@} ;6L@Active Drives: @ N6v@v@L@ v@=%:L@v@i0 6 6v@L@ 6 )L-ALJx}&A (RamDisk)A ;6 )v@v@ILALdA!κ IF a RAMDISK is added toAB ;6LA# this configuration, thJy}e DOS menuAn ;6LA will NOT work properly!A ;6v@ILOBLA!Һ do NOT return to DOS withA ;6LB" this confiJz}guration active. theA ;6LHB# DOS menu will NOT work properly!B$ ;6L|B)%EUp to %B files open simultaneously.%E%E J{}BR ?8LBDisk writes occur B N6yIPLBLB verify.B ;6LBLB with verify.B ;6` CloLBLC&} J|}B ;6 w@LIC"Do you want to change any part ofC& ;6LrC that configuration (Y/N) ? CS N6 `=J}}LC 6 69` B ByBLC#}Specify active drives by simplyC ;6LC" typing their drive numbers, oneCJ~} ;6L!D! after another. Any key exceptC ;6LOD# a valid drive number (1 to 4) isD+ ;6L}D# assumed to be end of yourJ} entry.DY ;6LDActive drive numbers ? D N6 )   _;BB1LD4BLDB 6 6B) %: LDLJ}DLD 6L!E#How many files do you need to haveD ;6LKE open simultaneously (1-7) ? E+ N6 _;BB1L|E7BL|EJ}B 6B)  6LE!Do you want disk writes to occurE ;6LE verify (Y/N) ?E N6 `=ILEPyLEWyLFJ}!} E ;6 w@L@F#Are you this configurationF ;6LgF is what you want (Y/N) ? FJ}J N6 `=LFByB B LG  6LF!Current system configuration hasF ;6LF been changed. Do you want toFJ} ;6LG! make these changes to the diskF ;6L;G! currently in drive %C (Y/N) ? 9G ?8 `=ILG H69J}:  69LG 6 6LG!Unable to change DOS on that diskG ;6LG! because error # %U occurred.%E9J}G ?8 6LGLB`,LGL!H&}Please enter the name of the BASICG ;6LLH program that you wish to haveH+ ;6LzH# autoJ}matically RUN when this diskHV ;6LH is next Booted.H ;6LH!Do NOT enter the drive specifierH ;6LH# (i.e., do J}not use D:, D1:, etc.)H ;6LI" but DO use the proper extensionH ;6LKI" (e.g., .BAS, .SAV, etc.) if youI( ;6LtI J} SAVEd it with an extension.IU ;6LI"REMEMBER: The BASIC program thatI~ ;6LI wish to 'AUTORUN' in this wayI ;6LJ}I! MUST be SAVEd on the same diskI ;6L%J" which receives this AUTORUN.SYSJ ;6L@J program file!J/ ;6LpJ%Now eJ}nter your BASIC program's nameJJ ;6LJ here >> Jz N6 9 |;LJ`G9 <`ILJLJ&} J}ήӠ堢J ;6LK"When the disk currently in driveJ ;6L=K# number %C is next booted, what%E9K ?8LJ}hK do you want to happen?KN ;6LK"1. The RS232 (R:) drivers for theKr ;6LK! ATARI 850 Interface Module areK ;6LJ}K loaded and made active.K ;6LL&2. A BASIC program will automaticallyK ;6L2L load and RUN.L! ;6L_L"3. Both J}actions (1. and 2. above)L< ;6LxL will occur.Li ;6LL0. None--quit to main menu.L ;6LL! Your choice (0,1,2J},or 3) ? L N6 _;JJ0LL3ʹJLLJ)` = ;LJRINTELM JMMLM9`M)LwO GILMLUM}J}Oops! That was not aM; ;6LsM valid file name!M_ ;6LM%Read the instructions again, please.M} ;6 ;9`99J}Т9 < H699 69LeO9ILN9LN}Be careful!M ;6L9NThe BASIC program name you usedJ}N ;6L`N has not yet been SAVEd onNC ;6LxN this disk!Nj ;6LNDo you want to do this AUTORUNN ;6LN setup aJ}nyway (Y/N) ? N N6 `=ILN9`LeO 6L O#Oops! Error # %U while trying to%E9N ?8L=O check that BASIC progJ}ram file.O ;6L]O%EUnable to continue.OG ?8`:9Т: LJ}U9SI2LU BLU9SI3LU MLU =9LU 6 6 ;LS`:S,or 3) ? U8 N6 _;9S99SI0L~U RLU9SI1LU F>LHA