w䩨PբԠ0 )i(Ԑ䩍 &01ԭ 9 9!! 9##`L`H ԍI h@$iskformatiertmit30%%$9QPUP6c "ibosoft #/-093(/07eitere)nformationenbei#/-093(/04elpppppppBPppppppppA&SUPPLIED BY THE CHAOS BBS (517) 371-1106 A 130XE-COMPATIBLE 256K UPGRADE FOR THE ATARI 800XL by Cl}aus Buchholz I designed the 256K upgrade described in my article, "The Quarter-Meg Atari" (BYTE, September, 1985 and re}capped here in this article), in December, 1984. Since this predated the 130XE, there was no precedent for extended memory o}n 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 standard for bank-select memory. It uses 16K banks and mak }es them separately available to both the CPU and the video controller (ANTIC). The XE has 128K total memory. The 64K ex }tended RAM is split into four 16K banks. A 256K 800XL 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 th }e XE on a 256K 800XL. To select one of four banks, the XE uses two bits, #2 and #3, in the memory control register (por }t 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 bo}th the CPU and ANTIC. So, any program for the XE that uses the extended RAM for CPU storage will work on an 800XL with this m}od. Those 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 eighteen bits. The chip has nine address input}s, each of which does double-duty. During the first part of a memory access, half of the address bits are presented to the ch}ip. This half is called the row address. Later in the access cycle, the chip receives the other half of the address, called t}he column address. The storage cells in the chip lie in a matrix, and the cell being addressed lies at the intersection of th}e 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. There are eight of these chips, each contributing one bit to each byte of RAM. The} 256K-bit RAM is practically identical to the 64K-bit RAM except that it has one extra pin to accommodate the two additional }address bits it needs. This extra 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 both chips are identical. Therefore, our upgrade involves unplugging the eight 64K-bit RAMs and plugg}ing eight 256K-bit chips in their place. We must also add some circuitry to provide two extra address bits for pin #1. T}he storage cells in dynamic RAM chips are actually microscopic capacitors, storing an amount of electric charge that represen}ts a 0 or 1 bit. Since capacitors leak charge, they must be periodically recharged or refreshed. The chip refreshes one or tw }o entire rows when accessed. This means that every row must be accessed frequently to keep the stored data accurate. Since no!}rmal operation of RAM can't guarantee that, the computer system must provide special access cycles called refresh cycles. A r"}efresh cycle is a dummy read cycle in which a refresh address is used as the row address. The 16K- and 64K-bit RAMs requ#}ire seven-bit refresh addresses. The computer must provide all 128 possible refresh addresses every few thousandths of a seco$}nd to keep the RAM refreshed. In the Atari, the video controller provides refresh cycles in addition to its screen memory acc%}esses. 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 standard 256K-bit RAMs require an eight-bit refresh '}address. Older versions of the Atari video controller chip provide only seven bits of refresh address, whereas newer versions(} give all eight. So, there are two versions of the upgrade's interface circuit. The more complex one must add another bit to )}the Atari's refresh address.Notes on Bank-selection To fit 256K bytes into the 6502's 64K memory space, we must divi*}de it into banks. If a program in RAM were to replace the entire 64K RAM with another bank, it would cause itself to disappe+}ar, and the system would certainly crash. Also, the top 32K of the Atari's address space is cluttered enough with hardware ad,}dresses 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 sw-}itch that out and cause glitches to appear on the screen. Additionally, the operating system keeps important data in the low.}er part of RAM and it expects the data to be there when it is called. Further, the 6502's stack is in low memory. Worse, inte/}rrupts occur frequently and the routines they invoke also keep data in low RAM. Programs must therefore follow a strict rule:0} Keep the "normal" bank enabled as much as possible. If you select another bank, you must first disable all interrupts and no1}t call the operating system until the "standard" bank is restored.Interfacing the RAM The interface circuit for the 2}256K RAM is to be assembled on a small circuit board and installed inside the computer, as the computer's expansion slot does3}n't carry the signals we need. The circuit consists of four (or five for older models) chips and replaces one of the chips on4} the computer motherboard. It also requires jumper wires to various points on the motherboard and connection to 5 pins of the5} PIA (U23). The circuit plugs into the socket at position U27 on the motherboard. This gives it access to six important 6}signals, including power and ground. The chip that was at U27 becomes IC1 in the circuit. As U27, this chip was one of the tw7}o responsible for selecting which eight of the sixteen address bits are passed to the 64K RAMs at one time. If your ANTI8}C (U7) part number is CO21697, use the circuit described by the first connection list at the end of this article. If it is C9}O12296, 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 the 256K chips need. T<}he 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 underside and separate the top and bottom portions of the plastic case. B>}e 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. Ge@}ntly pull the board free of the case. Next, remove the small nuts and bolts around the metal shielding that encases the A}motherboard. On the left side of the exposed motherboard, locate the row of eight 16-pin RAM chips. Just to their right is U2B}7. Behind U27 is a three-inch square area that fits inside the shielding. The circuit goes there, because the shielding is hiC}ghest toward the rear. Replace the 64K RAMs with the 256K RAM chips. The new RAMs are very easily destroyed by static diD}scharges, so extreme care is necessary in their handling. Lay aluminum foil on the work surface and keep the motherboard, RAME} chips, tools and hands in contact with the foil at all times. This keeps everything at the same potential, decreasing the poF}ssibility of damage. On the motherboard, locate the video controller, the 40-pin chip at U7. If the part number stamped G}on it reads "CO21697," you are lucky! You may use the simpler circuit. If the number reads "CO12296," you must use the largerH} circuit. Assemble the appropriate circuit on a two by three inch circuit board (Radio Shack's #276-150 is ideal). Use vI}ery low profile sockets or no sockets at all, as height is severely limited by the shielding. If you use no sockets, be carefJ}ul not to apply heat to the IC pins for too long a time. Keep the wiring on the chip side of the board to conserve space. TheK} 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 DL}IP header and short ribbon cable. Finally, install the jumper wires. Find a resistor marked R32 immediately behind the row ofM} 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. N} The next jumpers run to a parallel port which the Atari uses to control ROM switching. We need pins 12 through 16, which areO} normally unused and not connected to any traces. Locate U23 and carefully pry the 40-pin chip from its socket. Bend up pins P}12, 13, 14, 15 and 16 so that they point straight out. Reinsert the chip. Cut five adjacent pin positions from an IC socket aQ}nd solder the jumpers to them. Use this custom socket to connect the jumpers to the three protruding pins. Cover the connectoR}r with electrical tape, as the shielding is very low at this point. If you are using the circuit for the older 800XL, yoS}u must install an additional jumper. Locate a trace on the motherboard from pin 8 of the video controller, U7. Along the tracT}e find a hole and solder the jumper there. Finally, insert a thin piece of stiff cardboard or plastic under the small ciU}rcuit board to avoid shorting the circuit. Refasten the shielding to the motherboard. If it doesn't fit over the circuit, carV}efully pound a dent out of the shielding with a hammer. Reassemble the computer. If all has gone well, the computer shouW}ld power up and perform normally, although with the 256K in your XL, be sure to wait at least ten seconds after turning the cX}omputer off, else it may not coldstart properly when you turn it back on. The computer is ready to try some software thaY}t utilizes the large RAM space.The RAM-disk Software Bank-select RAM is useless without software to control it. TZ}he software must obey strict rules as outlined above to work properly. The software must also be tailored to fit the applicat[}ion. Applications vary. For example, many graphics screens may be stored in the RAM, possibly to be displayed in quick s\}uccession for animation. Alternately, the RAM may act as a print spooler. A word processor would print an entire document qui]}ckly into the RAM and go on to other jobs while the RAM empties slowly to a printer. These applications are rather speci^}fic and might not appeal to all users. A more universal application 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 pr`}ogram may then use standard DOS commands to access the large RAM space. The 192K bytes of available RAM hold more data than ta}wo Atari 810 drives or one double-density drive. The RAMdisk software I have prepared, QMEGXLD.SRC, offers a choice of eb}ither two single-density RAMdisks or one double-density. Also available is QMEGXLS.SRC, a RAMdisk program that sets up one sc}ingle-density RAMdisk and leaves the XE-equivalent banks free for XE software. This is quite useful with BASIC XE, DOS 2.5, d}or the new Synapse software. Assemble the source code with any assembler that accepts the syntax of the Atari Assembler/e}Editor. Assembly produces an object file that performs several tasks as it loads. First, it copies the operating system from f}ROM into the underlying RAM. Next, the RAM-disk routines load into the RAM-based OS, overwriting the international character g}set, a little-used feature of the 800XL. Lastly, it patches the OS to install the RAM-disk program and calls DOS's initializah}tion routine to let DOS recognize the new drive. The source code allows two options: the drive number and the density. Ti}he RAM-disk can act as any drive numbered 1 to 8. If you have one real drive, you might want the RAM-disk to be drive number j}2. Remember that your DOS must be set up to look for the drive number chosen. See the DOS manual for instructions concerning k}drive numbers. Typicallly, you must POKE memory location 1802 with a value of 15 in order to recognize disk drive numbers upl} to #4. Then you will write new DOS files which will thereafter always include your POKE. The RAM-disk object file shoum}ld be made to boot in after DOS so the user needn't worry about it. In Atari DOS, naming the file AUTORUN.SYS accomplishes thn}is. Once the object file has loaded, the RAM-disk MUST BE FORMATTED before use. You may do it manually from DOS, or the applio}cation program may do it automatically (use the BASIC XIO command or a call to CIO in machine code). RESET won't harm thp}e contents of the RAM-disk, nor will rebooting the computer, as long as the computer is not turned off (to reboot without powq}ering down, POKE 580,1 and press RESET, or jump to $E477 in machine code). After rebooting, the RAM-disk program must be relor}aded to access the data, which should then be found unharmed in the RAM-disk. This is why the RAM-disk program does not automs}atically format the RAM-disk upon loading. The major disadvantage to the RAM-disk approach is that all data is lost whent} the computer is turned off. The application must take care to save important data to a real disk before ending. However, theu} speed, convenience, and versatility of the RAM-disk overshadow its drawbacks.Uses An assembly language programmer, v}after studying the RAM-disk source code and heeding the rules above, can devise many practical uses for a quarter-megabyte ofw} RAM. The large RAM space, joined with the Atari's versatile hardware and low price, gives a performance/price ratio that is x}unbeatable in today's microcomputer market. I ask one thing in return for this information: Please pass it around to ay}ll your interested friends. Put it in your club's library or on your favorite BBS. Encouraging software support of 256K will z}result in many interesting uses for it. Thank you and enjoy!NOTE: SEVER FILE HERE AND COPY THE REMAINDER TO YOUR PRINTE{}R FOR BEST RESULTS! 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 RAM bank # - banks} 12 to 15 are equivalent - ranges from 0 to 3 to XE's banks 0 to 3 PA}RTS LIST 8 41256 256K-bit dynamic RAM (200ns or less) 1 74LS153 Dual 4-to-1 multiplexer (IC2) 1 74LS139} Dual 2-to-4 decoder (IC3) 1 - 33 ohm, 1/4 watt resistor ADDITIONAL PARTS FOR ANTIC #CO12}296 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 circuit, below is a list }of connections. Each entry in the list begins with the name of the signal followed by all the IC pins that connec}t together and share the signal. IC3-13 means pin 13 of IC3. The IC numbers appear in the parts list above. IC1 is} the 74LS158 chip from socket U27 on the XL motherboard. DIP is the DIP header to be plugged into socket U27. U23-xx re}fers 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, I}C3-3 A6 : DIP-14, IC2-6, IC2-5 A14 : DIP-13, IC2-3, IC3-2 MUX : DIP-1, IC1-1, IC2-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-12 PB2 : U23-12, I}C2-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 res}istor, Pin 1 of all RAMs If your U7 part number is CO12296, do not connect signal A7 above, and make the followin}g additional connections. The connection to U7 is to a trace on the motherboard that runs from pin 8 of U7. V}cc : 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 : IC5-8, IC4-5 Q3 :} IC5-6, IC5-13SUPPLIED BY THE CHAOS BBS (517) 371-1106: IC4-7, IC2-10, IC2-11 Q7 : IC5-8, IC4-5 Q3 :?0100 ; 192K RAMDISK CONTROLLER FOR 256K ATARI 800XL (version 2)0110 ; by Claus Buchholz, Oct., 19850120 ;0130 ; OPTIONS: D}rive numbers and density0140 ; Note: If DENSITY=DOUBLE make DRIVEB=DRIVEA !0150 ;0160 DRIVEA=30170 DRIVEB=40180 DENSITY=}SINGLE0190 ;0200 ; Equates0210 ;0220 SINGLE=$80 Sector lengths0230 DOUBLE=$000240 DDEVIC=$300 SIO Device Control Block}0250 DUNIT=$3010260 DCOMND=$3020270 DSTATS=$3030280 DBUFLO=$3040290 DBYTLO=$3080300 DAUX1=$30A0310 DOSINI=$0C Access to} RESET initialization0320 CHKSUM=$31 Temporary checksum0330 BUFRLO=$32 Temporary pointer to user's buffer0340 ZTEMP=$34 Te}mporary miscellaneous use0350 ZTEM2=$38 Temporary miscellaneous use0360 STACKP=$318 Stack pointer save0370 PORTB=$D301 PIA} port B - memory control register0380 ;0390 ; Load-time code - Copy OS into RAM0400 ;0410 *=$38000420 GO0430 LDA PORT}B Enable Bank #30440 AND #$830450 ORA #$0C0460 STA PORTB0470 LDA #$C0 Zero page pointer0480 STA $CC0490 LDA #$40}0500 STA $CE0510 LDA #00520 STA $CB0530 STA $CD0540 TAY0550 LOOP0560 LDA ($CB),Y Copy OS0570 STA ($CD),Y0580 }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 NOPUT10}50 JMP PUTSEC1060 NOPUT1070 CMP #'R Read sector?1080 BNE NOGET1090 JMP GETSEC1100 NOGET1110 CMP #'S Read status?1}120 BNE NOSTT1130 JMP STATUS1140 NOSTT1150 CMP #'W Write sector?1160 BNE NAKRET1170 JMP PUTSEC1180 ;1190 ; Return}s - Restore stack pointer, report error status and return1200 ;1210 NAKRET1220 LDX STACKP1230 TXS1240 LDY #139 NAK er}ror for improper command1250 STY DSTATS1260 RTS1270 ERRRET1280 LDX STACKP1290 TXS1300 LDY #144 Bad sector error13}10 STY DSTATS1320 RTS1330 SUCRET1340 LDX STACKP1350 TXS1360 LDY #1 No error1370 STY DSTATS1380 RTS1390 ;1400 }; Subroutine - Set pointer to user buffer1410 ;1420 SETBUF1430 LDA DBUFLO Move from DCB to zero page1440 STA BUFRLO145}0 LDA DBUFLO+11460 STA BUFRLO+11470 RTS1480 ;1490 ; Subroutine - Prepare to access sector of ramdisk1500 ;1510 SETSE}C1520 LDA #DENSITY1530 STA SECLEN Set sector length1540 LDA DAUX1+1 Check sector #1550 BNE NOTZ1560 LDA DAUX11570 } BEQ OUTRG Sector 0 invalid1580 CMP #41590 BCS INRNG1600 LDA #$80 Sectors 1-3 always 128 bytes long1610 STA SECLEN16}20 BNE INRNG1630 OUTRG1640 JMP NAKRET Sector # out of range1650 NOTZ1660 CMP #2 Check for sector # > $2D01670 BCC IN}RNG1680 BNE OUTRG1690 LDA #$D01700 CMP DAUX11710 BCC OUTRG1720 INRNG1730 LDA DAUX1 Sector # valid1740 STA ZTEMP}1750 LDA DAUX1+11760 ASL ZTEMP1770 ROL A Divide # by 64 - Result is bank #, remainder is page #1780 ASL ZTEMP1790 RO}L A1800 ADC #4 Bank #1810 TAX1820 LDA ZTEMP1830 LSR A1840 LSR A1850 ADC #$40 Remainder+641860 ;1870 ; Subroutin}e - Prepare to switch banks:1880 ; X is bank #, A is page #1890 ;1900 SETBNK1910 STA ZTEM2+1 Save page #1920 LDA PORTB}1930 STA PBN Normal bank1940 AND #$831950 STA PB Bank 01960 TXA1970 ASL A1980 ASL A1990 PHA2000 AND #$0C2010} ORA PB2020 STA PB2030 PLA2040 ASL A2050 AND #$602060 ORA PB2070 STA PB Bank X2080 LDA $FFFA NMI vector2090 }STA ZTEMP2100 LDA $FFFB2110 STA ZTEMP+12120 LDY #02130 LDA #$40 RTI opcode2140 SEI Disable IRQ2150 STA (ZTEMP),Y} Place RTI in NMI routine - disables NMI2160 RTS Leave 0 in Y, bank # in X2170 ;2180 ; Format routine2190 ;2200 FORMAT}2210 LDX #4 Clear banks 4 to F2220 CLOOP12230 LDA #$402240 JSR SETBNK Prepare for switch2250 LDA PB2260 STA PORTB }Switch bank in2270 TYA2280 CLOOP22290 STA (ZTEM2),Y Zero entire sector2300 INY2310 CPY SECLEN2320 BNE CLOOP22330 } TAY2340 INC ZTEM2+1 Next page2350 BPL CLOOP22360 LDA PBN2370 STA PORTB Switch bank out2380 LDA NMI2390 STA (ZTEM}P),Y Enable interrupts2400 CLI2410 INX Next bank2420 CPX #$10 Done?2430 BCC CLOOP12440 JSR SETBUF2450 LDA #$FF R}eturn a sector with 2 $FFs and the rest 0s2460 LDY #02470 FLOOP2480 CPY #22490 BNE NOTFF2500 LDA #02510 NOTFF2520 } STA (BUFRLO),Y2530 INY2540 CPY SECLEN2550 BNE FLOOP2560 JMP SUCRET Done2570 ;2580 ; Write sector routine2590 ;26}00 PUTSEC2610 JSR SETBUF2620 LDA #02630 STA CHKSUM Zero checksum2640 JSR SETSEC Point to ramdisk sector2650 PLOOP26}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 SE}TSEC3070 GLOOP3080 LDX PB3090 STX PORTB Switch bank3100 LDA (ZTEM2),Y Get byte from ramdisk3110 LDX PBN3120 STX PO}RTB Normal bank3130 STA (BUFRLO),Y Put byte into user's buffer3140 CLC3150 ADC CHKSUM Add to checksum3160 STA CHKSUM}3170 INY Next byte3180 CPY SECLEN Proper sector length3190 BNE GLOOP3200 LDX #$F Bank F for checksum table3210 LDA }DAUX13220 ASL A3230 LDA DAUX1+13240 ROL A3250 ORA #$603260 JSR SETBNK3270 LDA DAUX13280 AND #$7F3290 TAY3300} LDX PB3310 STX PORTB Switch bank3320 LDA (ZTEM2),Y Get original checksum3330 LDX PBN3340 STX PORTB Normal bank3350} TAX3360 LDY #03370 LDA NMI3380 STA (ZTEMP),Y Enable interrupts3390 CLI3400 CPX CHKSUM Compare checksums3410 BEQ} GCSOK3420 JMP ERRRET If different, bad sector3430 GCSOK3440 JMP SUCRET If same, done3450 ;3460 ; Read status routine}3470 ;3480 STATUS3490 JSR SETBUF3500 LDY #3 Return 4 bytes3510 LDA #0 All 0s3520 SLOOP3530 STA (BUFRLO),Y3540 DEY}3550 BPL SLOOP3560 CMP #DENSITY3570 BNE SDONE3580 LDA #$203590 INY3600 STA (BUFRLO),Y First byte tells density of} drive3610 SDONE3620 JMP SUCRET Done3630 ;3640 ; Variable storage area3650 ;3660 PB *=*+1 Value of memory control regi}ster for selected bank3670 PBN *=*+1 Value of memory control register for normal bank3680 NMI *=*+1 First opcode in NMI rou}tine - Used to restore NMI3690 SECLEN *=*+1 Length of current sector3700 ;3710 ; RESET initialization routine3720 ;3730 } *=$100 Hidden (hopefully)3740 NEWINI3750 DEC PORTB Enable RAM OS3760 OLDINI=*+13770 JSR * Call original DOSINI routine}3780 MODINI3790 LDA #NEWINI&$FF Set hook for next RESET3800 STA DOSINI3810 LDA #NEWINI/$1003820 STA DOSINI+13830 R}TS3840 ;3850 ; Load-time code - Install ramdisk3860 ;3870 *=$38003880 DO3890 LDA $E45A Save original SIO vector3900 } STA OLDVEC3910 LDA $E45B3920 STA OLDVEC+13930 LDA #HOOK&$FF Install new SIO vector3940 STA $E45A3950 LDA #HOOK/$10}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,R>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 Aj8=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ˍͥ    `8pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp8=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Ӫ)5H48jJ5423}0hHӱ4ӑ2GhӪHhHӱ2ӑ4)lD#dd˰ dddddhHhX`LS }`Ӫ)Ϩӭ@@@I@@I@(L9S")& $#' Yͱ ͲkͤcYͣ\}x)ӭ7S38, :  ;7;8 өXL: өX` :  ;"& ;}#' Ln i  i  x)H DӢdddhjө@3223iH)} hh) Dөd32ȩ2ȑ22ȑ2 2ȑ2J272ȩ2 |өX`8*   2 3485}042354242 i; i;`8J272ȩ2 |өX`8*   2 34859 DOS 2.5 Modification for Q-MegXL I found the following modification in the Madison (WI.) Area Atari Users Ne!}wsletter (October, 85). Their hardware sig built a 256 XL upgrade similiar to the one described by Claus Buchholz. Si!}nce they didn't have Claus's software at the time, they modified DOS 2.5 so it would run two 720 sector ram-disk driv!}es; one is created by runing RAMDISK.COM, the other must be formatted (in this version it is drive 7, but can be anythi! }ng between 2 and 7; see my note below). I tried this mod on my 256 XL (Claus Buchholz Oct. 85 version) and it worked.! } I had found that my new copy of Typesetter for the XE did not work with Claus's software (typesetter uses the interna! }tional character set for its own purposes), but DOS 2.5-256K did! In fact I was finally able to load the entire Type! }setter package into the RAMDISK, which speeds up operation dramatically! Richard Evans, East Lansing, MI. What ! }follows are the instructions as they appeared in the MAAUG newsletter. Pataching DOS 2.5 by Kurt Grittner 1!}) Insert your assembler cartridge. Put Dos 2.5 in drive 1 (without RAMDISK.COM). Cold start your machine. 2) When!} the "EDIT" prompt appears, get into debug mode by typing: "BUG". 3) When the "DEBUG" prompt appears, get into the!} mini-assembler by typing "A". 4) Type the following lines ending each with the RETURN key. The mini!}-assembler will respond to each line with one or more lines of assembled object code. Notice that you MUST type a spac!}e after each "<" sign. B86< LDX #0 105C< LDA #$64 12DE< LDY $21 < CPY #8 < BCC *+4 < ADC #5 < TAY < LDA !}$185B,y < JMP $1846 148D< CMP #6 14C4< LDA #$70 < JSR $1846 183A< BYTE. "MEM.SAV ERR",$9B 1846< STA $44 < LDA $!}D301 < AND #$83 < ORA $44 < STA $D301 < RTS 185B< .BYTE $20,$24,$28,$2C < BYTE. $40,$44,$48,$4C < BYTE. $60,$64!},$68,$6C, 77F< CPX #7 (change # for other < BCC $78A (drive number B88< CMP #7 (--2,3,4,5, or 6. < BCS $BD3 10!}5E< CPY #7 (Don't type this!) < BCS $1076 70A< .BYTE $C3 5) Press RETURN to exit the mini assembler. 6) t!}ype "X" followed by RETURN to return to the EDIT mode. 7) Type DOS to access the Dos Menu. 8) Write DOS files to !}disk. 9) Turn off the machine and clod start DOS . . with RAMDISK.COM on the disk. When you do a directory of D8!}: you should have DUP.SYS, MEM.SAVE and 620 sectors free. Use the "I" command to format D7:. When you do!} a directory you should have 707 sectors free. t D7:. When you do [y^oCIOCIO2ADRV2SPASNAMESLOCKSTRTLENGLINETMPFILEUSEDBUFLEBUFFILEINFILOUTFILAPPNINDEFILENINI%}NRETRISTAOUTINLINES @ -A6.A J. ^ | %}A .B@]%}dEEALPHABETIZING MULTIFILE COPY BY DAVE SCHAMBACH (N.O.A.U.G.)##XL256K MODS BY:RICHARD PARKER$$%}CALL:I/O CONN BBS-404-446-8044A +'0@A0@@@;@,6.h V`% };@,6.h V`?&;@,;@,;@,26-@?6.D1:*.*ee;@E$@,;@E%!},9@E,9@E,;@0,;@,;@,9@E,6/6-@P$P:+I:,&AV,'@P,6;,%"}L8(0Hit to format D5: and D6:or hit N to bypass!<L4NA hAdAU(?("***FORMATTING DRIVE %#}#5 AND #6***hAT@D5:,,AT@D6:8A@L62(%$})Insert disks in D1 and D2 then 6V* B*@@dd-@@P`67B:,%%%}@,.2 d j6-~@(**7@<@,4%&}SECTORSA3&7@<@,4 MEM SAV)(3 AP++7@<@,4BAD AP6-%@%'}7767$@&@<$@,.7@<@,67,.7@<@, AP6-&@@%(}(3-@ 68,-/68,-3 6-@6-@6-6-@x!%)}A }8,!A B  68,-&&6.7$@&@<$@,;;(Ժ 7@<%*}@, 7@ <@, B @@;8,!@-6-@;6%+}-&@ 68,-68,-6- B"A6A#!%@ ( READ ERROR#&%,}@A; @6-%@1( ERROR - ; A/,($ERROR AFTER 5 RETRIES, COPY ABORTED.%-}/&E (8,T@^6-%@h!!%@&A%Ar A (8,*@%.}@6-@"@A0 -@8," 6- &&6.7$@&@<$@,%/}::(Ժ 7@<@, 7@ <@, B7"@6.7@,(6.D5:767@,.%0}7"@6.7@,(6.D6:767@,.A! @@  A"%1}>6- B  @6-%@  A 0 !A@ A> A%2}P -@07<,4*A@ 4 > AP -@7<,4 AA&&6.7$@&@<$%3}@,(˺  B7"@6.7@,(6.D5:767@,.7"@6.7@,%4}(6.D6:767@,.((@5@ 8B@@`$( STOP NOW ?(84YAPP%5}F(( DO YOU WANT DRIVE ONE 'B' DRIVE?,44YFB@@R9( DO D5:AGAIN ?!4Y(6./6.9 A%6} 6-%@"@ &(6.D2:*.*6.6.( A>-($}Insert FoReM program in D1 then 1%7}>%D1:START' 6.$' 6.D1:)'"@6.D2:.'-@@8'7<,4 BB'67B:,%8}%@,.7<,L' t'67B:,%@,..~'+(67B:,%@,.7@ <@,+$+AP@ +6-C:7%9},,+;$AR&AV$P:'AV,;ASP:'AV, +6-%@&%+6-A%$P:'A%,*+;$AV&%:}AV$P:'AV,;AWP:'AV,4+6-?:C:,,>+%%6-F:AV,%AV$F:AW,C++6-F:AQ,(!@*%;}A6+$H+68,-8,%R+ 6-%$.Af@.6-C:7,,.;$Ah&AV$P:'AV,;Ai%<}P:'AV,/ 6-8,/;$Ar&AV$P:'AV,;AsP:'AV,/6-?:C:,,0/6-%8,$4N#6-6%=}@#6. ||||||||||||>N(-@(8,B RN..27$@&@<$@,B \N&&6.7$%>}@&@<$@,fN 6-Q   $0u}""* THE END * D:NEWCOPY,B \N&&6.7$$fSUPPLIED BY THE CHAOS BBS (517) 371-1106MEMORY EXPANSION FILES INFORMATIONYou've heard about it....CHAOS Member C)@}laus Buchholtzstarted it all... , and now we havecollected quite a variety ofinstuction files, documentation)A},source code for assembler, ramdiskdrivers, driver creators, demos,and just about everything else foruse in/by/for expand)B}ed memory inyour ATARI computer. Here's what'savailable on line here at the CHAOSBSS so far. We include expansionfiles )C}for the XL, the 800, the XE,and the ST!! Be sure to thedocumentation and instruction filesfor these where possible b)D}eforeworrying about why they crash onyou. (All files here are listed inthe "UTILITIES/TECHNOLOGY" section)HINT: the big)E}gest single cause oframdisk failure is not having setup your DOS to read any disk drivenumbered higher than 2. Read theQ)F}XLINSTR file for discussion ofthis, also see your DOS manual. The second most trouble comes fromusing the wrong ramdisk dr)G}iver foryour DOS. Select carefully, andreport your success or failures tous here so that we can let everyoneelse know. Ch)H}eck the messages,especially the LIBRARY BASE (#3),and look for NEW خ files inthe "N"EW section under "F"iles.ALSO B)I}E SURE TO SEND US ANYEXPANSION, UPGRADE, WHATEVER FILESYOU MAY HAVE TO ADD TO OUR LIST! Ӻ - DOCFILETh)J}is file! - DOCFILEHow to do your 256K 800 XL!Includes vital information on howto use and configure your systema)K}fter the mod is installed. - SOURCE CODEThis is Claus's actual assemblercode for constructing a doubledensity ram)L}disk driver file or adriver to make TWO SINGLE densityramdisks. The drive number for theramdisk may be selected beforeas)M}sembly using the ATARI ASSEMBLERcart, or any good assembler. Namethe resulting binary fileAUTORUN.SYS or load from DOS.)N} - SOURCE CODECode for constructing a singledensity ramdisk driver file, usefulfor running software designed forus)O}ing the 128k in the 130XE. (Won'twork with some, like BASIC XEcart!) The drive number for theramdisk may be selected. See)P} thediscussion of these two SOURCE CODEfiles in the QXLINSTR file.Files assembled into OBJECT CODEfor DOS "L"oading from)Q} the abovefiles:ij - Makes a double-densityRamdisk numbered as "D3:"ij - Makes TWO ramdisks, bothsingle densi)R}ty, numbered "D3:" and"D4:"ij - Makes one single densityramdisk numbered "D3:" that staysout of the way of much 13)S}0XEsoftware.İ - Makes one single densityramdisk numbered "D4:" that staysout of the way of much 130XEsoftware.)T}Now, Other files:Ĵ - OBJECTThis one is special made to allow adouble-density 503 sector ramdiskcalled "D4:" that )U}will work withDOSXL and BASIC XE!! Perhaps itwill work on SOME other DOS's. Letus know. - OBJECTUse this like )V}this from SPARTADOSprompt: >D:QXSPARTA D3: (or anydrive # you want...) to set up a1530 sector ramdisk!!! It might doeve)W}n more on a 320 or 512XE! Likeall of these, it is still anybody'sguess what compatibility may or maynot be found.)X} - BASICWrites ramdisk drivers set up frommenu choices, supposedly will workwith MYDOS and others. Some reportsof semi-f)Y}unctioning with this fileunder some DOS's. - BASICJust a quick basic routine to getyou started and to check out )Z}bankselection. - BASICLoad that/those ramdisks with filescopied off prepared disksautomatically with this one.)[}More text and modifications:Ӳ - DOCFILEHow to set up DOS 2.5 for ramdiskuse of the extended memory.ŵ -)\} DOCFILEThe first upgrade suggested for theXE series computer. How to do it,full instructions. What softwareworks is up )]}to you to tell US.ų - DOCFILEA much simpler version of anupgrade for the 130XE... again,software is a grey area.)^} - DOCFILEHere's the 1000K upgrade how-tofile for the 520 ST.Keep us up-to-date! Let us knowwhat's hot and wha)_}t's not inupgrades and software, and uploadwhatever you find!SUPPLIED BY THE CHAOS BBS (517) 371-1106 hot and wha(qOPARUNSTATDRVCDTANUMDRIVEDPTNUMLINERRDRDDUMDRVBYT@-a} $$RAM DISK CONFIGURATION PROGRAM-b}##FOR THE UPGRADED 256K 800XL'sBY SHAWN HART GG;A`,;@,9@,;@,;@0,-c};@,*-@@&68,-* 6.h S`Ap@(-@@2Ai-d}<6-?:C:,,F'F:@H,A8'68,-@P dA +'0@A0@@@-e}n-@x1+(# ATARI 256K RAM CONFIGURATIONS.(1(&&( 1. 130XE W/ 1 SD RAMDISK''( 2.-f} 800XL W/ 2 SD RAMDISKS&&( 3. 800XL W/ 1 DD RAMDISK( 4. BOOT FROM DISK( 5. INSTRUCTIONS -g}(( Select  6-@:,&@H!! @)!@A//AAAAPA-q}BQXLINSTRDUABEQMEGXLD CUAB QXLDEMO SUABQXLDD3 OUABQXLSD34 OUABQXLSD3XEOUABQXLSD04 OUABQBASXED4OUABQXLDOS25DUAB$QXLLOADRSUAB!?QXLINFO DUAB-`QXCONFIGOUAB QXSPARTAOUAB>QMEGXLS CUABHXE576DOCDUAB'(XE320K DUAB3OXE512K DUAB#TEST576KSUAB)XE1088K BMENU  A6-?:B,COLDSTART,'6-A6-@"'6-10*("} INPUT NUMBER FOR RAMDIS-r}K -(0(6$ A$PRINT CURRENT DRIVES;8( (#( DRIVE NUMBER = '86-@:,&@H@-@@E-s}"$8,6-J O!! @)!@AT68,-@6-Y A`CALC DRVBYTE^ A-t}BUILD ARUN$c%%67@<@,.>:@I%,h A BUILD NUMDRIVE$m APWRITE AUTORUNr$3-u}6-A 6-@$'6-36-1+(#} INPUT NUMBERS FOR RAMDISK .(1($ A$PRINT CURRENT-v} DRIVES8( (#( DRIVE NUMBER = '86-@:,&@H-@@"$8,6- !!-w} @)!@A."68,-@$6-. A68,-@6- A`CALC DRVBYTE-x} ABUILD ARUN$%%67@<@,.>:@I%,%%67@<@,.>:@I%, A BUILD NU-y}MDRIVE$ APWRITE AUTORUN$36-A 6-@$'6-36-1+(#} INPUT NUMBERS F-z}OR RAMDISK .(1($ A$PRINT CURRENT DRIVES8( (#( DRIVE NUMBER = '86-@:,&@H-@-{}@ "$8,6- !! @)!@A68,-@6-6-! A`CALC D-|}RVBYTE& ABUILD ARUN$+%%67@<@,.>:@I%,,%%67@<@,.>:@I%,-##67A<A-}},.>:,.##67Ae<Ae,.>:,0 A BUILD NUMDRIVE$5 APWRITE AUTORUN:$XI-~}NSTRUCTIONS]++(#}This program writes an AUTORUN.SYSb**("file to disk, which configures theg((( memory in a 256K UPGR-}ADED 800XL,l**("into one of the following options.q)()(Π duplicates the memoryv**("of a 130XE, and adds 1 -}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̭[̩,b8n<H cHI`)|MӍөBA@*:@U<: @@ @@N@,U< 1}@ @iA:Ah`MAIN L0 RAM-DISK"h:h:::1} :L::H:H`HI BLV o=`1b<Lxԭ45S]999';;<;<.>n>o> n>`8>1}> y>m>ȱm>L= y> m>L > y> m>m>m>L>>P>Q>S>T>Q>T>>i >L=1}n>o>` m> m>`=;;aL>>P>Q>S>T>Q>T>>i >L=0;0100 ; 96K RAMDISK CONTROLLER FOR 256K ATARI 800XL (version 2)0110 ; by Claus Buchholz, Oct., 19850120 ;0130 ; OPTION: Dri5}ve number0140 ;0150 DRIVE=30160 ;0170 ; Equates0180 ;0190 DDEVIC=$300 SIO Device Control Block0200 DUNIT=$3010210 DCO5}MND=$3020220 DSTATS=$3030230 DBUFLO=$3040240 DBYTLO=$3080250 DAUX1=$30A0260 DOSINI=$0C Access to RESET initialization025}70 CHKSUM=$31 Temporary checksum0280 BUFRLO=$32 Temporary pointer to user's buffer0290 ZTEMP=$34 Temporary miscellaneous us5}e0300 ZTEM2=$38 Temporary miscellaneous use0310 STACKP=$318 Stack pointer save0320 PORTB=$D301 PIA port B - memory control5} register0330 ;0340 ; Load-time code - Copy OS into RAM0350 ;0360 *=$38000370 GO0380 LDA PORTB Enable Bank #30390 A5}ND #$830400 ORA #$0C0410 STA PORTB0420 LDA #$C0 Zero page pointer0430 STA $CC0440 LDA #$400450 STA $CE0460 LDA 5}#00470 STA $CB0480 STA $CD0490 TAY0500 LOOP0510 LDA ($CB),Y Copy OS0520 STA ($CD),Y0530 INY0540 BNE LOOP0550 5} LDX $CC0560 CPX #$CB Skip pages $CC to $D70570 BNE NXPG0580 LDX #$570590 STX $CE0600 LDX #$D70610 NXPG0620 INC 5}$CE0630 INX0640 STX $CC0650 BNE LOOP0660 LDA PORTB0670 ORA #$7C Disable bank0680 AND #$FE Enable RAM OS0690 STA5} PORTB0700 RTS Continue load0710 *=$2E20720 .WORD GO Execute preliminary load-time code0730 ;0740 ; Ramdisk controll5}er code0750 ;0760 *=$CC00 Permanent code - in place of alt. char. set0770 HOOK0780 CLC Hook into all SIO calls0790 L5}DA DDEVIC0800 ADC DUNIT0810 CMP #$31+DRIVE Right drive number?0820 BEQ HOOKED0830 OLDVEC=*+10840 JMP * If not, go to5} SIO0850 HOOKED0860 TSX If so, intercept0870 STX STACKP Save stack pointer0880 LDA DCOMND Examine command0890 CMP #5}'! Format?0900 BNE NOFMT0910 JMP FORMAT0920 NOFMT0930 CMP #'P Put sector?0940 BNE NOPUT0950 JMP PUTSEC0960 NOPUT5}0970 CMP #'R Read sector?0980 BNE NOGET0990 JMP GETSEC1000 NOGET1010 CMP #'S Read status?1020 BNE NOSTT1030 JMP S5}TATUS1040 NOSTT1050 CMP #'W Write sector?1060 BNE NAKRET1070 JMP PUTSEC1080 ;1090 ; Returns - Restore stack pointer,5} report error status and return1100 ;1110 NAKRET1120 LDX STACKP1130 TXS1140 LDY #139 NAK error for improper command15}150 STY DSTATS1160 RTS1170 ERRRET1180 LDX STACKP1190 TXS1200 LDY #144 Bad sector error1210 STY DSTATS1220 RTS15}230 SUCRET1240 LDX STACKP1250 TXS1260 LDY #1 No error1270 STY DSTATS1280 RTS1290 ;1300 ; Subroutine - Set pointer5} to user buffer1310 ;1320 SETBUF1330 LDA DBUFLO Move from DCB to zero page1340 STA BUFRLO1350 LDA DBUFLO+11360 STA 5}BUFRLO+11370 RTS1380 ;1390 ; Subroutine - Prepare to access sector of ramdisk1400 ;1410 SETSEC1420 LDA DAUX1+1 Check 5}sector #1430 BNE NOTZ1440 LDA DAUX11450 BNE INRNG Sector 0 invalid1460 OUTRG1470 JMP NAKRET Sector # out of range145}80 NOTZ1490 CMP #2 Check for sector # > $2D01500 BCC INRNG1510 BNE OUTRG1520 LDA #$D01530 CMP DAUX11540 BCC OUTRG5}1550 INRNG1560 LDA DAUX1 Sector # valid1570 ASL A1580 LDA DAUX1+11590 ROL A Divide # by 128 - Result is bank #, rema5}inder is page #1600 ADC #4 Bank #1610 TAX1620 LDA DAUX11630 ORA #$80 Remainder+1281640 ;1650 ; Subroutine - Prepare5} to switch banks:1660 ; X is bank #, A is 2*page #1670 ;1680 SETBNK1690 LSR A1700 STA ZTEM2+1 Save page #1710 LDA #05}1720 ROR A1730 STA ZTEM21740 LDA PORTB1750 STA PBN Normal bank1760 AND #$831770 STA PB Bank 01780 TXA1790 ASL5} A1800 ASL A1810 PHA1820 AND #$0C1830 ORA PB1840 STA PB1850 PLA1860 ASL A1870 AND #$601880 ORA PB1890 STA5} PB Bank X1900 LDA $FFFA NMI vector1910 STA ZTEMP1920 LDA $FFFB1930 STA ZTEMP+11940 LDY #01950 LDA #$40 RTI opcod5}e1960 SEI Disable IRQ1970 STA (ZTEMP),Y Place RTI in NMI routine - disables NMI1980 RTS Leave 0 in Y, bank # in X1995}0 ;2000 ; Format routine2010 ;2020 FORMAT2030 LDX #4 Clear banks 4 to 92040 CLOOP12050 LDA #$802060 JSR SETBNK Prep5}are for switch2070 LDA PB2080 STA PORTB Switch bank in2090 TYA2100 CLOOP22110 STA (ZTEM2),Y Zero entire page2120 I5}NY2130 BNE CLOOP22140 INC ZTEM2+1 Next page2150 BPL CLOOP22160 LDA PBN2170 STA PORTB Switch bank out2180 LDA NMI5}2190 STA (ZTEMP),Y Enable interrupts2200 CLI2210 INX Next bank2220 CPX #$A Done?2230 BCC CLOOP12240 JSR SETBUF225}50 LDA #$FF Return a sector with 2 $FFs and the rest 0s2260 LDY #02270 FLOOP2280 CPY #22290 BNE NOTFF2300 LDA #0235}10 NOTFF2320 STA (BUFRLO),Y2330 INY2340 BPL FLOOP2350 JMP SUCRET Done2360 ;2370 ; Write sector routine2380 ;2390 5}PUTSEC2400 JSR SETBUF2410 LDA #02420 STA CHKSUM Zero checksum2430 JSR SETSEC Point to ramdisk sector2440 PLOOP2450 5} LDA (BUFRLO),Y Get byte from user's buffer2460 LDX PB2470 STX PORTB Switch bank2480 STA (ZTEM2),Y Put byte into ramdis5}k2490 LDX PBN2500 STX PORTB Normal bank2510 CLC2520 ADC CHKSUM Add byte to checksum2530 STA CHKSUM2540 INY Next 5}byte2550 BPL PLOOP2560 LDX #9 Bank 9 holds checksum table2570 LDA DAUX1+12580 ORA #$70 Sector # indexes checksum tabl5}e2590 ASL A2600 JSR SETBNK2610 LDY DAUX12620 LDA CHKSUM2630 LDX PB2640 STX PORTB Switch bank2650 STA (ZTEM2),Y 5}Store checksum2660 LDX PBN2670 STX PORTB Normal bank2680 LDY #02690 LDA NMI2700 STA (ZTEMP),Y Enable interrupts2715}0 CLI2720 JMP SUCRET Done2730 ;2740 ; Read sector routine2750 ;2760 GETSEC2770 JSR SETBUF2780 LDA #02790 STA CHK5}SUM Zero checksum2800 JSR SETSEC2810 GLOOP2820 LDX PB2830 STX PORTB Switch bank2840 LDA (ZTEM2),Y Get byte from ramd5}isk2850 LDX PBN2860 STX PORTB Normal bank2870 STA (BUFRLO),Y Put byte into user's buffer2880 CLC2890 ADC CHKSUM Add5} to checksum2900 STA CHKSUM2910 INY Next byte2920 BPL GLOOP2930 LDX #9 Bank 9 holds checksum table2940 LDA DAUX1+15}2950 ORA #$70 Sector # indexes checksum table2960 ASL A2970 JSR SETBNK2980 LDY DAUX12990 LDX PB3000 STX PORTB Swi5}tch bank3010 LDA (ZTEM2),Y Get original checksum3020 LDX PBN3030 STX PORTB Normal bank3040 TAX3050 LDY #03060 LDA5} NMI3070 STA (ZTEMP),Y Enable interrupts3080 CLI3090 CPX CHKSUM Compare checksums3100 BEQ GCSOK3110 JMP ERRRET If d5}ifferent, bad sector3120 GCSOK3130 JMP SUCRET If same, done3140 ;3150 ; Read status routine3160 ;3170 STATUS3180 JSR5} SETBUF3190 LDY #3 Return 4 bytes3200 LDA #0 All 0s3210 SLOOP3220 STA (BUFRLO),Y3230 DEY3240 BPL SLOOP3250 JMP S5}UCRET Done3260 ;3270 ; Variable storage area3280 ;3290 PB *=*+1 Value of memory control register for selected bank3300 P5}BN *=*+1 Value of memory control register for normal bank3310 NMI *=*+1 First opcode in NMI routine - Used to restore NMI335}20 ;3330 ; RESET initialization routine3340 ;3350 *=$100 Hidden (hopefully)3360 NEWINI3370 DEC PORTB Enable RAM OS3385}0 OLDINI=*+13390 JSR * Call original DOSINI routine3400 MODINI3410 LDA #NEWINI&$FF Set hook for next RESET3420 STA DOS5}INI3430 LDA #NEWINI/$1003440 STA DOSINI+13450 RTS3460 ;3470 ; Load-time code - Install ramdisk3480 ;3490 *=$380035}500 DO3510 LDA $E45A Save original SIO vector3520 STA OLDVEC3530 LDA $E45B3540 STA OLDVEC+13550 LDA #HOOK&$FF Insta5}ll new SIO vector3560 STA $E45A3570 LDA #HOOK/$1003580 STA $E45B3590 LDA $FFFA Save first opcode in NMI routine3600 5} STA $CB3610 LDA $FFFB3620 STA $CC3630 LDY #03640 LDA ($CB),Y3650 STA NMI3660 LDA DOSINI Save original DOSINI vec5}tor3670 STA OLDINI3680 LDA DOSINI+13690 STA OLDINI+13700 JSR MODINI Install new one3710 JSR $7E0 Re-initialize FMS 5}to show ramdisk present3720 RTS Done3730 *=$2E23740 .WORD DO Execute final load-time code JSR $7E0 Re-initialize FMS 4a The 130XE/576K upgrade, by Scott Peterson.Copyright (C) 1986, released to the public. Here we go again, this time 9}I recommend you have some electronics experience if you wish to preform the upgrade. Some of the work is duplicated from the 9}320K upgrade so 320XE owners will not have as much work to do. One other point, when in the 576K mode you MUST use some sort 9}of basic cart. as you lose the internal basic, this is only in the 576K mode, in the 130XE mode internal basic will function 9}normally.TOOLS NEEDED; To preform this upgrade you need the following;Low wattage fine tip soldering iron.Vacuum de-sold9}ering tool(like Radio Shack PN#64-2098).Some 30-gauge wire(Radio Shack PN#278-501).#2 phillips head screwdriver.Heat-shrin9}k tubing, 1/8 in. Dia. Also a pair of small needle-nose pliers and a small flat tip screwdriver are handy.PARTS NEEDED;Z19} 74LS158Z2-Z17 41256(150ns.)Z18 74LS138Z19 7432R1-R2 33 ohm 1/4 watt resistor.S1 Micro-mini DPDT switch(l9}ike Radio Shack PN#275-626) Remove the 130XE case and metal RF shield to get down to the mother board.(320XE users go to st9}ep two).STEP ONE: Now de-solder and remove the eight ram chips U26 thru U33(MT4264). They are the row closest to the TV RF9} module(do NOT use solder wick, the circuit board of the 130XE has very weak runs and they will pull loose if not completely 9}de-soldered). Replace these with the 16 pin low profile sockets. Take a piece of wire approx 12 in. long and run a jumper fro9}m pin 1 of each socket to the next. When you are done the wire should be attached to pin 1 of each of the new sockets and you9} should have about 6 inchs left over. Do this on the rear of the mother board and then snake the wire thru the large hole nea9}r the ram chips. Next, desolder and remove U23(CO14795), and replace it with a 40 pin socket. Bend up pins 15 and 16 and in9}sert it in the socket you just installed. Take Z1(74LS158) and break off pins 5,6,7,9,10,11,12,13,14. Bend up the other pins 9}on it except 8 and 16. Put this "piggy back" on top of U20(HD14050, or 4050 - located just to the right of C50) and solder pi9}ns 8 and 16 of Z1 to pins 8 and 16 on U20. Now take a short jumper from pin 15 on Z1 to pin 8 of Z1. Take a piece of wire abo9}ut 4 in. long, solder one end to pin 30 on the chip marked "CO14805" on the mother board, and the other end to pin 1 on Z1. N9}ext solder a wire to pin 15(one of the two you bent out) of U23 and connect the other end to pin 2 on Z1. Solder a wire to pi9}n 16 on U23 and connect the other end to pin 3 on Z1. Take R1(33 ohm) and trim the leads to about 1/4 in. Take the wire you9} connected to pin 1 of the ram chip sockets and solder it to one end of R1, solder the other end of R1 to pin 4 on Z1.STEP T9}WO: Slide the mother board back into the bottem half of the plastic case(do not use the RF shield, you must be able to get a9}t the mother board), and attach the keyboard. It will rest above the mother board without touching it. Test all 41256 ram chi9}ps by putting one set of 8 in the sockets and using the handlers(or DOS's), and then the next. After testing all ram chips re9}move them all from the sockets, and take 8 of them and cut about half of pin 15 off of each one. Only the "fat" part of pin 19}5 should be left. After doing this you have to "piggy back" the 8 256K ram chips with the short pin 15's on top of the other 9}8 256K ram chips. Now solder all the pins together on the stacked ram chips except for pin 15, it should not be touching the 9}other pin 15, make sure you have them going pin 1 to 1, pin 2 to 2,ect. When you get done you will have 8 sets of Piggy backe9}d 256K ram chips. Now take a piece of wire about 16 in. long and run a jumper from pin 15 to the next one on all the top 256k9} DRAM's, leaving about 1 inch between each ram chip. Put these stacked ram chips into the 8 sockets you installed earlier. Ta9}ke Z18(74LS138) and bend up all the pins except 8 and 16, cut the pins you bent up in half so only the fat part is left, and:} solder pins 8 and 16 to pins 8 and 16 of the other 74LS138 right below the U23(CO14795). Take Z19 and bend up all pins excep:}t 7 and 14, once again cut all the pins you bent up in half and solder pins 7 and 14 to pins 7 and 14 of the 74LS08 right bel:}ow U23. Take the wire you jumpered earlier to pin 15 of Z10 thru Z17(the upper row of 256K ram chips) and go out 2 in. and :}cut the wire, now install R2(33 ohm) between this cut. Place a piece of heat shrink tubing over R1 and make sure no wire is e:}xposed and heat it with a lighter. Take the other end of this wire and connect it to Z18 pin 14. Find the 2 33 ohm resistors :}just to the right of U28(one of the ram chips you socketized). The upper one of the 2 is R111, desolder the right leg of it a:}nd bend it up. Take a piece of wire and solder it to the land where you just removed the leg of R111. Connect the other end t:}o Z18 pin 4. Trim back the leg of R111 and solder a wire to it, slip a piece of heat shrink tube over it and heat it up. Now :}connect the other end to Z18 pin 12. Take a short wire and run a jumper from pins 1 and 16 of Z18. Take another short wire an: }d connect a jumper from pins 3,5, and 8 of Z18. Now connect a wire from Z18 pin 2 to Z19 pin 3. Find the wire you installed : }from U23 pin 15 to Z1(74LS158) pin 2 and desolder it from U23. Take it and reconnect it to Z19 pin 11. Ok, now pry U23(CO1479: }5) back out of the socket and bend up pin 11, plug it back in. Run a jumper from pins 1 and 4 of Z19, and another jumper from: } pins 10 and 13 of Z19. Connect a wire from U23 pin 11 to Z19 pin 1, and from U23 pin 15 to Z19 pin 13. Now connect a wire fr: }om Z19 pin 8 to the right side of the 3.3K ohm resistor marked R206(located at the bottem right of U23). Connect a wire to Z1:}9 pin 6 and run it to pin 18 of U3(CO61618). Now comes the tricky part, drill a small hole(1/4 in. or so, depending on the sw:}itch size) at the rear right on the back of your 130XE. Take the small DPDT switch(S1) and install it in the hole. Now connec:}t it as shown(make sure the switch DOESNT have a center off position); S1(rear) U23 ________ U23:} pin 20 ----|-O O-|----- pin 1 | \ / | Z19 ---|-O \/ O-|--- Z19pins 2+12 | /\ | pins 5+9:} | / \ | | O O | |________| Note: where the wires cross in the middle, they are NOT:} connected. Make the connection from the switch to U23 on the rear of the mother board. Well that's it(thank god). Now re-ass:}emble the computer, being carefull not to break any wiring going to the switch. You should now have in one switch position a :}100% compatable 130xe, and in the other you have a 576K 130XE that does not have Antic memory enhance mode and also can-not u:}se internal basic. In the 130XE mode you gain 64K as bit 6 of the PIA can still be used. The following page list of the bit t:}able and numbers to be used in location 54017(PORTB). Once again, if you need help call the Peanut Gallery BBS (408)-384-3906:}. If you want a mailer of all the upgrades I have as well as a disk with handlers, source codes, ect. send a money order(plea:}se, no checks) for $10.00 to;Scott PetersonP.O.Box 33Ft.Ord CA. 93941-0033 This includes the 800 288K upgrade by D.G.Byr:}d, the 800XL/256K(C.Burchholz), the 130XE/320k upgrade and anything else I finish. Good luck, and have fun.Memory Co:}ntrol Register 54017(D301) 130XE in 576K mode.Bit 7 6 5 4 3 2 1 0 D a b C c d e RD=0 enable diag. ROMR=1 ena:}ble OS ROMC=0 enable extended memoryabcde= memory control bits.-------------------------------------Bank# Control#(de:}c) Hex-------------------------------------Bank 0 ---------->129 81Bank 1 ---------->131 83Bank 2 ---------->133 8:}5Bank 3 ---------->135 87Bank 4 ---------->137 89Bank 5 ---------->139 8BBank 6 ---------->141 8DBank 7 --------:}-->143 8FBank 8 ---------->161 A1Bank 9 ---------->163 A3Bank 10 --------->165 A5Bank 11 --------->167 A7Bank : }12 --------->169 A9Bank 13 --------->171 ABBank 14 --------->173 ADBank 15 --------->175 AFBank 16 --------->193 :!} C1Bank 17 --------->195 C3Bank 18 --------->197 C5Bank 19 --------->199 C7Bank 20 --------->201 C9Bank 21 ----:"}----->203 CBBank 22 --------->205 CDBank 23 --------->207 CFBank 24 --------->225 E1Bank 25 --------->227 E3Ba:#}nk 26 --------->229 E5Bank 27 --------->231 E7Bank 28 --------->233 E9Bank 29 --------->235 EBBank 30 --------->2:$}37 EDBank 31 --------->239 EF------------------------------------- There is a version of MYDOS to support this mod, it:%}s called 4.1A and will run up to 32 16K banks. At this time ICD is working on a RD.COM file to support this. Also I have writ:&}ten a machine lang. tester that will load and test all 32 banks of memory to insure that they are there and work. Wonder how :'}long it will take Jay Torres to copy this one. Good luck Scott Petersonand work. Wonder how 8h<                   >)}                          >*}        The 130XE/320K upgrade-by Scott Peterson(downloaded from SIG-ATARI) After both >+}reading and building both the 800/288K upgrade (D. G. Byrd), and the 800XL/256K upgrade (C. Buchholz), I decided that there a>,}lso had to be a way to upgrade the 130XE. There is, and thanks to the "Freddie" chip (CO61991) this modification is much ea>-}sier to do than either of the other upgrades. To do the upgrade you will need a soldering iron, de-soldering tool, and so>.}me fine wire. See the parts list for the chips needed. First, remove both the case and the metal shield to get down to>/} the mother-board. Then remove the eight ram-chip U26 thru U33 (MT4264). They are the row closest to the TV RF module. Nex>0}t, install Z2 thru Z9 in the place of U23 thru U33. These are the 256K ram-chips. You can solder them to the mother board, >1}or use sockets. Now take a piece of wire approximately 12 in. long and run a jumper from pin one on each of the 256K ram-chi>2}ps to the next. After you do this the wire will be connected to pin 1 on Z2 thru Z9 and you should have about 6 inches left >3}over. Do this on the rear of the mother board and then snake the wire thru the large hole near the ram chips. Next, des>4}older and remove U23 (CO14795), and replace it with a 40 pin socket. Bend up pins 15 and 16 on U23 and insert it in the sock>5}et you just installed. Take Z1 (74LS158) and bend up all the pins on it except pins 8 and 16. Put this "piggy-back" on top >6}of U20 (HD14050) and solder pins 8 and 16 of Z1 to pins 8 and 16 on U20. Now solder a short jumper from pin 15 on Z1 to pin >7}8 of Z1. Now, take a piece of wire about 4 in. long, solder one end to pin 30 on the chip marked "CO14805" on the mother >8}board, and the other to pin 1 on Z1. Next solder a wire to pin 15 (one of the two you bent out) of U23 and connect the other>9} end to pin 2 on Z1. Solder a wire to pin 16 on U23 and connect the other end to pin 3 on Z1. Take R1 (33 ohm) and trim>:} the leads to about 1/4 in. Take the wire you connected to pin one on the 256K ram-chips and solder it to one end of R1, sol>;}der the other end of R1 to pin 4 on Z1. Re-assemble the RF shield and case and you are finished.PARTS LIST:Z1 74LS15><}8 (2 to 1 Multiplexer)Z2-Z9 41256 dynamic RAM (150ns)R1 33 ohm 1/4 watt resistor. 1 40 pin socket. 8 16 >=}pin sockets (optional). The next page is a quick over view of the bit table and numbers to be used in location 54017 (PO>>}RTB). I have finished modifying a ramdisk handler for the extra ram. It uses a ram based OS so BASIC XE or XL can't be used>?}. At present the best deal for this modification is to use MYDOS 4.0. This supports a very large single density ramdisk. W>@}ith BASIC XE you can use a 1500 sector ramdisk and without it you can have about 2000 sectors. This upgrade has been buil>A}t and tested on a BBS, it has run for days on end without a memory loss or error. If you need help or more information feel >B}free to call the Peanut Gallery (408)-384-3906. 24HR, 300/1200 Baud. Leave mail to the Sysop (thats me). Good luck and let>C} me know if you write a better handler. Memory Control Register 54017 ($D301) 130XE/320K Bit 7 6 5 4 3 2 1 0 >D} D a b C c d B RD=0 enable diagnostic ROM.B=0 enable BASIC ROM.R=1 enable OS ROM.C=0 enable extended RAM.abcd= memory >E}control bits.--------------------Bank # Control#--------------------Bank 0 -------->131|Bank 1 -------->135|Bank 2 -->F}------>139|Bank 3 -------->143|Bank 4 -------->163| Basic= offBank 5 -------->167| OS = onBank 6 -------->171| >G} ENH = onBank 7 -------->175|Bank 8 -------->195|Bank 9 -------->199|Bank 10 ------->203|Bank 11 ------->207|Bank 12 ->H}------>227|<--\Bank 13 ------->231| \Bank 14 ------->235| / 130XE BanksBank 15 ------->239|<--/-------------------->I} If you are using MYDOS 3.016 and wish to use BASIC XE and a ram-disk at the same time, boot DOS and POKE 5275,163 and 53>J}24,16. Go to DOS and write the new DOS. This will keep the two from "bumping" into each other. A similar poke can be done >K}to DOS 2.5, it is POKE 4838,163. The handler I have will set up 192K of the extra ram as 2 SD ramdisks or 1 DD ramdisk. >L}If you are a hot-shot programmer (Im not), I think a print spooler that uses part of this ram would also be very nice. This >M}mod is easy to do and perfect for running a BBS. One note, on compuserve there is a mod by Rich Andrews which should not be >N}confused with this one, his uses 33 new chips and mine uses 9 new chips. Have fun.-Scott Petersonrews which should not be <d THE ATARI 130XE MEMORY UPGRADE The Atari 130XE lends itself to memory increases quite BP} easily. For those who may care the Freddie chip (Part # CO61991-29) has been around for a while. Remember thBQ}e 1400 and 1450XL computers? These machines used Freddie strictly for memory management of 64k. The pinBR} on Freddie dhat we will be concerned with is pin 36. This pin is labeled 16KCAS. Pin 36 is used to enaBS}ble the extra 64K bank(s) and is active low. Technical Overview Now for the good part. BT} If we redirect the output of pin 36 to another bank of 64K ram chips we can via software select any one BU}of 8 banks of 64K. In this configuration one would have a maximum of 589,815 bytes of memory. The only BV}disadvantage of this is the fact that under these constraints the hardware becomes more complex and the sBW}oftware to drive it does too. I recommend that for general purposes the 130XE be upgraded to a maximum of BX} 320K. It gives the user sufficient "horsepower" and yet at the same time the software does not become too intensBY}e. Now for the bad news. To implement the 320K mod one has to remove the internal basic ROM which reallyBZ} isn't that bad because most users are using Basic XL/XE anyway. The reason for this is quite good. ThaB[}t bit is required for the addressing of the extra bank(s) of memory. Actually one could use the Self-tesB\}t bit but that requires additional hardware or a reburn of the O.S. ROM. More on that later. B]} The Mod What we will do is to wire up a 74LS138 to the 6520 PIA and to pin 36 of Freddie. This chB^}ip can be best described as a routing switch. The data that we want to re-direct is presented at pin 4 oB_}f the 138 and the data output is pins 15, 14, 13 and 12. The pins that tell the chip to what bank to dirB`}ects it's output to are pins 1, 2, and 3. Now for the installation. 1) Take 32 64K x 1 RAM chips Ba}and bend out pin 15 on all of them. Pin 15 is the CAS line. 2) Solder these chips onto the existiBb}ng RAM chips in the 130. Do not solder anything to pin 15 yet! For ease of servicing and soldering I stBc}aggered these new RAM chips onto the existing ones. I recommend this highly. When you has completed solBd}dering in each new bank take a piece of insulated wire and solder this wire to pin 15 of each new Be} RAM chip. Wire wrap wire works nicely for this. Continue with this process until all 3 additional banks areBf} wired. 3) Just to the right of Freddie is an area to solder in a 14 pin IC chip. We will use thiBg}s area to supply +5 and ground to our 74138. Take a 74LS138 and bend out all of the pins except pins 8 aBh}nd 16. Solder pins 8 and 16 into the holes of the unused chip area next to Freddie. 4) Next to thBi}e RAM chips is a chip with the part # of CO25953. Behind the chip are two 33 ohm resistors. (orange, oraBj}nge, black, gold) Unsolder the right-most lead of the rear resistor. (R111) Solder a wire from the free Bk} end of the resistor to PIN 15 of the 74138. Solder another wire from the land where the resistor used to go to pBl}in 4 of the 74138. 5) Solder two wires from pins 11 and 16 of the 6520 PIA chip (Part # Bm}CO14795-12) to pins 1 and 2 of the 74138. Also ground pins 3 and 5 of the 74138. 6) Solder the CASBn} line from each new bank of 64K to pins 14, 13, and 12 of the 74138. 7) Unsolder the Basic ROM chiBo}p from the board. This is the 24 pin chip that is located closest to the front of the machine just to thBp}e left of the 555 timer IC. Thats it. Conclusion and Tech notes: To test each banBq}k boot with DOS 2.5 with your basic cartridge, POKE 5439,49, set the appropriate PIA port bit, go to DOS Br}and reformat D8. Continue through all the banks and check your directory. If you write a file to one bank, Bs} switch banks, and write another file, you will not lose what you wrote to the first. The real advantage is thaBt}t you can have your ramdisk and Basic XE too. Around the bbs's here in Chicago there is a file floating Bu}around called RAMDISK2. The source code is available on compuserve. By re-writing the routine you can hBv}ave your ramdisk invisible to Basic XE and/or double density. I mentioned previously about using thBw}e Self-test bit in the PIA port. To use this bit you have to disconnct the line on the PIA that runs to Bx}the PAL MMU and connect it to a 556 timer that will enable the self-test input to the PAL for about 3-5 sBy}econds. Half of the timer is used for timing and the other half is used as an inverter. The reason for Bz}using a timer is that on boot-up the OS uses some of the routines in the self test to check for validB{} RAM and to determine RAM size. I have done this and then pulled the circuit out. It was just too "messyB|}" to suit me. One potential problem is the 555 timer used in the 130. This chip is used B}}for system reset timing. If you press your system reset key down and hold it there the system should notB~} reset. If it does you will notice that if you release it the system will reset again. The reason for tB}his is because the 555 timer is putting out a spike that the system sees as a valid reset. To solve the B}problem replace the chip. It seems about 1 in 10 are bad. That's it! Hope you enjoy the mod. RicB}h Andrews Box 229-1 RR#7 Lockport, Il 60441Ԡ٠JJJJJJJJJJJJJJJJJJJJenjoy the mod. Ric@`$d0L 2L>%L-Lx%Lo(L(L(L(L4)L2)L%L%L%L%L%LU,L`,L(L)L,L(L+L$(L".L,L(L'L'L'Lm'Lv'L,L,L'L(L'L'L.L.LkF}.L.L.L.L.L.L.L#*L.*L&L&L.&L=&LF&LQ&Lk&Lr&L{&L&L&L&L)L)L)L)L,.L)L:'L'L&LL'L['LR'L*L*L.L&L&L&La'LB(LR(LF}.L(L/L9/L6/L/L/L/L/L0L0L+0LC0L/L^(Lj(L)'L@'Lo/Lr/LO/L%L'L%L% -膚 ɩҍD҅ 2 22F}2 a(2222 ` -Lq -l ԤՄԅ`ȱ`ȱ`ȥ`F}ԑȥՑ`ԤՄ`ԤԅդՅ` '0=D '04.5 '0.( '0 ' ' 8`ԅ`F} & & & &ѐ & &ʥ %аЪ %Зьɛ &0 &0 `F}ԥ`Ɠƒ` % &LS* %LS* %օ0֥0 S*` %eԥe` %La* % % o*L% %Lo* % &L|* %L|* %F}L% % Ʌ` BLV䅆L' %ԅ`TU HH 'hhL, B VԩL%p v'PF}KJBDEL, &fL=) %ԅ`Ę eĘ +L4( % & %` %Ԅԅ`F} -``&eԅԥeՅ`L% o(ԨL%Ԅ & %eԥe` Ԅ &ɛ +0` d) ذIF} ( 8ԅԩՅL%L,ȹɛ꩛` d)f & 8fԆՅɛ摥0LF}?)$0`2 2L,(,ɛM(M( )ɛ )򩀅` %ԍ`ԄL%F}ԄL%ɛԆL% &󅐩f =) ؐL(L4,ԅԥՅL%82ԭ 2L%ԤՄԅե`F}8ե`eեe` B* K+fL% B* +fL%8ԨՄԅL% & B*ԥՄԩՅօפԥFf G+F}ԥ K+ԅՅԥզЦ`ԅՅʩ0B+=+ B+ 08f$˹ `' d F}+1ԦԄզՄFԐ eਊe&Lh+Ԇ`hh L, +Ff&֐ݥ ԆՅԠ&&&8થF}օԈ`քע +Ե 8`晄 ,L,`GHFH` U,0ɛȄ ؐL,HI h 8F}ԅԩՅL%?S, ,򦅩DEBHIL,ɛ +` +` %HI BL,F}՝HIB VL,L%B Vú.hh -l. -0dd-8/ i - 0-- ,F}@ . ,... + x' $(.Ԏ.8ե ".LO-- , `,ɛD(C` ذ -L- -L 2 -- ,F}L- - -L-l lp '8`ERROR- ?Run address> BASIC exitTrace:P8Յթԅ` ,.L, .-F}ȘH *h00,)` & ҅ԭ ) |*օեׅ` L,0թԅթᨊઐF}```Յ`8Յթԅ`0 ԩ`ԅ`` ' %`BԝK)I JD/ELVS:)H)h yF}` & % & %TԅUՅV`&B ,NLսM` & %ԝL՝MN%BL, & /` BHIL, & /`F}B JKL, %ԅUՅV & %ԅT`)ҩҊ H) hҘ` %)xԩL% %))Lc&LZ& %F})pԩL% %)|LZ&Lc& V0L-$2}2e4e5666L 2 $ Z$e5 H$ ?$ Z$i5 H$ ?$ Z$5 H$ F}?$ Z$5 H$ ?$g5 !$6 '$ 3$6 '$6 !$ $ԌӢ5 !$5~22 $$ $ Z$5 H$6 !$ E$ ?$5 !$6 '$6 !$F}6 $$ $6 $5 $L26 $5 $LZ25 !$5 $$ $ Z$52{3 H$ ?$Ӣg5 !$6 '$5 !$6 '$ 3$F}6 '$6 !$ $Ԍө Z$e5 H$ ?$5 !$5 $$ $ Z$ʠ5 H$6 !$ E$ ?$5 !$|336 '$6 !$ $6 $L3F}5 !$٠5 $$ $ Z$۠5 H$6 !$ E$5 H$6 !$ E$ ?$g5 !$6 '$6 $5 $L33d46 !$ $L,4 Z$5 HF}$6 !$ E$5 H$ ?$6 $5 $L35 !$6 $$ $ Z$6 H$ ?$L$L$e44129,131,133,135,137,139,141,143,161,163,1F}65,167,169,171,173,175,193,195,197,199,201,203,205,207,225227,229,231,233,235,237,2394d5129,131,133,135,137,139,141,143,F}161,163,165,167,169,171,173,175,193,195,197,199,201,203,205,207,225227,229,231,233,235,237,239e55} 576XE MEMORY TESF}TER BY SCOTT PETERSON LOADING BANK #@J8 DONE LOADING TESTING BANK #56ERROR AT BANK# LOCATIONF} # BANK # OK. TEST COMPLETE.$DING BANK #@J8 DONE LOADING TESTING BANK #56ERROR AT BANK# LOCATIOND*Supplied by the CHAOS BBS (517) 371-1106 The final step, the 1088XE ByJ} Scott Peterson, April 1986 ----------------------------- Well, this is it for me, the J}last installment on the 130XE. I have not built this mother, but the theory behind it has been built and teJ}sted. This doc assumes you have allready built and tested a 576K 130XE. to finish it you will need the follJ}owing parts; Quanity part no. description. ------------------------------- 16 41256-15 256J}K DRAM'S 1 7432 quad OR gate 1 7404 quad invert buff. 2 33 omh resistoJ}rs. Small piece of PC board. ------------------------------- Note: On the 74 series, you J}can sub them with 74LS series chips, they use less power... Tools; Nothing fancy, a fine tip soldeJ}ring iron and some fine wire, ect. Mount the 7404 and the 7432 on a small PC board(1in. X 2in.) coJ}nnect together pin 14 on the 7432 and pin 14 on the 7404 with a lengh of fine wire. This is the +5v supply to the J} chips, connect it to pin 14 of any 14 pin chip in the 130XE or pin 16 of any 16 pin chip in the 130XE. Next cJ}onnect a lenght of wire to pin 7 of the 7432 and pin 7 of the 7404, this is ground for the two chips, conneJ}ct it to pin 7 of any 14 pin chip in the 130XE or pin 8 of and 16 pin chip. Next, take U23(U23) out of the J}socket and bend up pin 17, reinsert it in the socket. Solder a piece of wire to pin 17 U23, and connect it J}to the 7432 pins 2 and 5. Next connect a wire to pin 14 on U23(PIA) run it to pin 1 on the 7404 and pin 1 oJ}n the 7432. Now connect a wire from the 7432 pin 6 to pin 17 of the socket U23 is in. Find the 74LS138 you piggy J} backed to the mother board when doing the 576k mod, remove the jumper from pins 1 and 16. solder a wire from pJ}in 3 of the 7432 on the PC board to pin 1 of the piggybacked 74LS138. Put some double backed tape on the PCJ} board and stick it somewhere on the mother board of the 130XE. RAM-CHIP installation(lots of them!) Take tJ}he 16 new ram chips and cut pin 15 on all of them in half so only the 'fat' part is left. Now, you have to J}piggy back them on-top of the 64K drams(the left-most row of chips). Solder in 8 of them, connecting all piJ}ns except pin 15, then connect a jumper to pin 15 of each new ram chip. Make sure you have about a foot leJ}ft over. Solder in the next 8 doing the same thing. When you get done you should have 2 new rows of 256k DRAM's soldJ}er in on-top of the 64K DRAM's, with a 2 wires, one connected to all the pin 15's of the middle row and anoJ}ther connected to all the pin 15's of the top row. Take one wire and go out a few inches and install a 33 oJ}hm resistor in-line, cover with heat shrink tubing and do the same to the other wire. Connect onJ}e wire to pin 15 of the 74LS138 and the other to pin 13 of the 74LS138. Your done!!! Sorry, as of right nowJ} I know of no software to run on this. I release this doc file with out testing it. I have built the small J}circuit on the PC board and connected it in a 576K 130XE and used it to move the memory instead of the basiJ}c control bit, so I know it works, this little circuit works in both the 800xl or 130XE if you have something you J} would like to use bit 7(self test bit) for. If you have constructed a 320XE mod and would like to use bit 7 iJ}nstead of bit 5, this is a good way to do it. A warning though, you will regain you antic enhanced mode butJ} software written for the original 320XE mod will not run on it after you do it. If you are trying to figurJ}e out your memory control bits here's a cheat sheet. Decimal 128 64 32 16 8 4 2 1 J} --------------------- Control bit 7 6 5 4 3 2 1 0 --------------------- JuJ}st find you control bits and add them up to figure out the decimal control number. When you get done you should haveJ} in one switch position a 130XE with 320K,built in basic and antic enhanced mode. In the other position youJ} lose antic enhanced mode, internal baisc but you have 1088K of memory, 64 banks of 16K. By the way, typingJ} BYE will still throw you into the self test mode(bit 7 still works). If anyone complete's this monster, plJ}ease call my BBS at (408)-384-3906, or leave me a message at compuserve. Good Luck J} ScottSupplied by the CHAOS BBS (517) 371-1106userve. Good Luck HJ AFCPPAGSEBYTCOUN:#S# a#@AA@b N}SAVE "D:DOCREAD.BAS" BY MATHEW S HOWE 1984 C99A<@,;@%,;@,;@,C @466L}