Subject: Re: Memory Map for IIe (64K & 128K versions?) From: Rubywand Date: Thu, Oct 22, 1998 000(H Message-id: <362ED81F.F67D3C17@swbell.net> Wraithe writes ... > > Does anyone have, or know of, a memory map for the various incarnations of > the IIe? I'm specifically interested in where screen memory starts (text & > graphics), keyboard, joystick, serial port, etc. I used to have all this > stuff 15 years ago, on carefully noted handwritten sheets--I was in high > school & too poor to afford the manuals, so I copied down anything I could > find. I don't really need a hardcopy--actually, an electronic copy or > web-site with the info would be great! > > I've searched the net for anything along these lines, but have come up > empty. And I've seen various books for sale, but haven't a clue as to which > one has the information I'm looking for. > .... Below is a nice listing posted by kburtch@pts.mot.com ... >> Most of the names (assembler "equate" names) are listed in pairs, and the comment on the first one often represents what the second actually does, but refers to with what function the softswitch pair are associated. SOFTSWITCHES KEYBOARD = $C000 ;keyboard data (latched) (RD-only) CLR80COL = $C000 ;use 80-column memory mapping (WR-only) SET80COL = $C001 CLRAUXRD = $C002 ;read from auxilliary 48K SETAUXRD = $C003 CLRAUXWR = $C004 ;write to auxilliary 48K SETAUXWR = $C005 CLRCXROM = $C006 ;use external slot ROM SETCXROM = $C007 CLRAUXZP = $C008 ;use auxilliary ZP, stack, & LC SETAUXZP = $C009 CLRC3ROM = $C00A ;use external slot C3 ROM SETC3ROM = $C00B CLR80VID = $C00C ;use 80-column display mode SET80VID = $C00D CLRALTCH = $C00E ;use alternate character set ROM SETALTCH = $C00F STROBE = $C010 ;strobe (unlatch) keyboard data Bit seven of these "RD..." locations is 1 if the condition is true RDLCBNK2 = $C011 ;reading from LC bank $Dx 2 RDLCRAM = $C012 ;reading from LC RAM RDRAMRD = $C013 ;reading from auxilliary 48K RDRAMWR = $C014 ;writing to auxilliary 48K RDCXROM = $C015 ;using external slot ROM RDAUXZP = $C016 ;using auxilliary ZP, stack, & LC RDC3ROM = $C017 ;using external slot C3 ROM RD80COL = $C018 ;using 80-column memory mapping RDVBLBAR = $C019 ;not VBL (VBL signal low) RDTEXT = $C01A ;using text mode RDMIXED = $C01B ;using mixed mode RDPAGE2 = $C01C ;using text/graphics page2 RDHIRES = $C01D ;using Hi-res graphics mode RDALTCH = $C01E ;using alternate character set ROM RD80VID = $C01F ;using 80-column display mode SPEAKER = $C030 ;toggle speaker diaphragm CLRTEXT = $C050 ;enable text-only mode SETTEXT = $C051 CLRMIXED = $C052 ;enable graphics/text mixed mode SETMIXED = $C053 TXTPAGE1 = $C054 ;select page1/2 (or page1/1x) TXTPAGE2 = $C055 CLRHIRES = $C056 ;enable Hi-res graphics SETHIRES = $C057 SETAN0 = $C058 ;4-bit annunciator inputs CLRAN0 = $C059 SETAN1 = $C05A CLRAN1 = $C05B SETAN2 = $C05C CLRAN2 = $C05D SETAN3 = $C05E CLRAN3 = $C05F OPNAPPLE = $C061 ;open apple (command) key data CLSAPPLE = $C062 ;closed apple (option) key data PDLTRIG = $C070 ;trigger paddles For WR-enable LC RAM, the softswitch REQUIRES two successive reads $C080 ;RD LC RAM bank2, WR-protect LC RAM ROMIN = $C081 ;RD ROM, WR-enable LC RAM $C082 ;RD ROM, WR-protect LC RAM LCBANK2 = $C083 ;RD LC RAM bank2, WR-enable LC RAM $C084 ;RD LC RAM bank2, WR-protect LC RAM $C085 ;RD ROM, WR-enable LC RAM $C086 ;RD ROM, WR-protect LC RAM $C087 ;RD LC RAM bank2, WR-enable LC RAM $C088 ;RD LC RAM bank1, WR-protect LC RAM $C089 ;RD ROM, WR-enable LC RAM $C08A ;RD ROM, WR-protect LC RAM LCBANK1 = $C08B ;RD LC RAM bank1, WR-enable LC RAM $C08C ;RD LC RAM bank1, WR-protect LC RAM $C08D ;RD ROM, WR-enable LC RAM $C08E ;RD ROM, WR-protect LC RAM $C08F ;RD LC RAM bank1, WR-enable LC RAM CLRC8ROM = $CFFF ;switch out slot C8 ROM -------------------------------------------------------------------- Example: To enable double Hi-res graphics, the following code will accomplish this: STA SETHIRES STA SETAN3 STA CLRMIXED STA CLRTEXT JSR $C300 << You can find listings of Apple II soft switches and popular monitor routines in a manual for your computer-- e.g. the Apple II Reference Manual (for II and II+), the IIe Technical Reference Manual, the Apple IIgs Firmware Reference Manual, etc.. An excellent guide to many PEEKs & POKEs and monitor routines is the famous "Peeks, Pokes, and Pointers" poster from Beagle Bros (early 1980's). A fairly exhaustive guide to important memory locations in the Apple II is What's Where in the Apple II: An Atlas to the Apple Computer by William Luebbert (1981). With very few exceptions, soft switches, monitor routines, and important vectors have remained stable since early Apple II models. So, although an old chart or listing may be missing some which are available on a newer Apple II, the ones shown will almost always work. So far, I have yet to come across a good II+ or enhanced IIe or IIgs memory map chart on the net. The manuals mentioned earlier plus manuals for DOS 3.3 and ProDOS will contain this information. Below is a quickie memory map for a typical 64k Apple II which is, also, the Main Bank of a 128k Apple II. $0000 --------------- ZERO Page area-- used for holding many system parameters, a few system routines and variables, DOS & ProDOS parms, ... . Also, this area has a number of 'open' addresses the user can employ. $0100 --------------- STACK page-- place where JSR return addresses, etc. gets PUSHed. $0200 --------------- Commands buffer area-- e.g. place where typed-in stuff usually gets put first $0300 --------------- Mainly Open area-- a nice place to load in short machine language routines (like sound routines, etc.) Roughly the upper 32 bytes are used for holding Reset, IRQ, ... vectors and some DOS vectors. $0400 --------------- Text "Page" 1 (or LoRes "Page" 1)-- Place where most TEXT you see on a 40-col display is located (40 chars x 24 lines). If in Graphics mode, you see a 16-color LoRes display (40 x 48). If in Graphics mode with Full Graphics set, you see just LoRes. If in Graphics mode with Mixed set, you get 40 lines of Lores with 4 lines of TEXT at the bottom. (On a 128k Apple II, this can be used as half of the 80-col. Text "Page" 1 or half of the Double-LoRes "Page" 1.) $0800 --------------- BASIC program area-- place where a BASIC program resides. This space can be used for non-BASIC programs and routines, too (like stuff you BRUN or large machine language routines you BLOAD to use along with a BASIC program. The space actually available for a BASIC program or ML routines or whatever depends upon what other parts of the $0800-$BFFF space are used. $0800-$0BFF can be used as Text "Page" 2 (or LoRes "Page" 2). This is rarely done; but, if it is, then a BASIC program must start after $0BFF. (On a 128k Apple II, this can be used as half of the 80-col. Text "Page" 2 or half of the Double-LoRes "Page" 2.) $2000-$3FFF can be used as HiRes "Page" 1-- i.e. the place Hires pics load in to be displayed. This is a fairly common use. As long as a BASIC program, etc. is small enough, it can load in at $0800 (actually $0801 for BASIC) as long as the space is not being used as a second Text or Lores "Page". A large BASIC program would usually load in after the HiRes area, at $4001. (On a 128k Apple II, this can be used as half of the Double-HiRes "Page" 1.) $4000-$5FFF can be used as HiRes "Page" 2-- i.e. another place Hires pics load in to be displayed. This is a good place to load in/display Hires pics for moderate size BASIC programs. Such Programs will, then have $0801-$3FFF available (assuming no Text or LoRes "Page" 2 is active and HiRes "Page" 1 is not used for graphics. Sometimes, both HiRes "Pages" are used in order to do speedier animations or for some other reason. If this is done, you must start your BASIC program before the Hires areas or after. (On a 128k Apple II, this can be used as half of the Double-HiRes "Page" 2.) $8000 --- (Approximately)--- This is the typical 'safe' upper limit for the BASIC program area (i.e. for Program + variables) when DOS or ProDOS are also present. DOS 3.3 usually allows going a bit higher. $9000 --- (Approximately)---- DOS or ProDOS plus buffers use up most of this space. $BFFF --------------- End of 'Program Space' $C000 --------------- Area usually employed for I/O, Soft-Switches, memory address space for use by Slot cards, etc. $D000 --------------- Usually employed for BASIC in-ROM or for one of two 4kB "Language Card" banks of RAM. $E000 --------------- Usually employed for BASIC in-ROM (continued) and the Monitor in-ROM or for one 8kB "Language Card" bank. In-ROM BASIC runs from $D000-$F7FF The In-ROM Monitor runs from $F800-$FFFF $FFFF --------------- End of 64kB "Main Bank" memory Rubywand