SYSTEMS GUIDE
Memory Map-Page 0
by James Capparell
This department will be devoted to systems related questions, descriptions, and
elaborations. Over the next few issues of ANTIC we will construct a complete
memory map. A memory map is nothing but a list of the reserved memory locations
in RAM and ROM with a description of the purpose of each location.
We will present the addresses in ascending order with decimal and hexadecimal
(base 16) address equivalent. Listed next to the address will be the number of
contiguous locations that are related by function. Lobyte-hibyte address vectors
are typical examples of two continguous bytes referred to by one name. Printed
next to the number of locations will be the name assigned the address(es) in the
ATARI documentation. Finally we give a simple (and sometimes not so simple)
explanation of the function.
For example: 12 $C 2 DOSINI
Address 12 (decimal) or C (hexidecimal) has 2 continguous locations devoted to the function named DOSINI.
This month, in SYSTEM GUIDE, we describe the low end of RAM memory. These RAM locations are initialized whenever you turn the ATARI on. The values are copied from the ROM data base. Addresses 0 to 255 decimal are known as page 0. We are only showing the first 128 locations, those we've deciphered so far. I would like
to invite all of you to participate in this project. Help us pry into the secrets of these last 128 bytes. If you've discovered something interesting, don't keep it a secret, share it. Our intent is to provide the most accurate up-to-date information. If you see an error, have an addendum, or can provide an interesting example please forward it and we'll all be doing one another a service. THANKS.
- 0 $0 1 LINZBS
- ???
- 1 $1 1 LINZBS
- ???
- 2 $2 2 CASINI
- If cassette booted successfully during powerup then JSR thru here.
- 4 $4 2 RAMLO
- RAM pointer for memory test.
- 6 $6 1 TRAMSZ
- Temporary register for RAM size.
- 7 $7 1 TSTDAT
- RAM test data register.
- 8 $8 1 WARMST
- Warmstart flag set true (-1) when S/RESET pushed. When false (0) then powerup retry.
- 9 $9 1 BOOT
- Boot flag success indicator.
- 10 $A 2 DOSVEC
- Disk software start vector.
- 12 $C 2 DOSINI
- Used to store address of initialization of application upon DOS boot. JSR indirect thru here to initialize application.
- 14 $E 2 APPMHI
- Contains highest address of RAM needed by user. Screen handler opens S: only if no RAM needed below this address.
- 16 $10 1 POKMSK
- IRQ service uses and alters POKMSK. These are POKEY interrupts. Shadow for IRQEN ($D20E).
bit 7 = 1 Break key interrupt enable.
bit 6 = 1 Other key interrupt enable.
bit 5 = 1 Serial input data ready interrupt enable.
bit 4 = 1 Serial output data needed interrupt enable.
bit 3 = 1 Serial out transmission finished interrupt enable.
bit 2 = 1 Timer 4 interrupt enable.
bit 1 = 1 Timer 1 interrupt enable.
- 17 $11 1 BRKKEY
- This is initialized to -1 by OS. (-1 = no break key pressed.) Monitored by keyboard also screen editor. Break during I/O returns status of $80. This is set to 0 when break key is pressed.
- 18 $12 3 RTCLOK
- Updated every vblank interrupt (1/60 sec.). Called frame counter initialized to 0 and overflows to 0. The least significant byte of counter is $12 and it uses 16msec units.
- 21 $15 2 BUFADR
- Indirect buffer address register. Used as temporary page 0 pointer to current disk buffer.
- 23 $17 1 ICCOMT
- Command for vector ????
- 24 $18 2 DSKFMS
- Disk file manager pointer ????
- 26 $1A 2 DSKUTL
- Disk utilities pointer ????
- 28 $1C 1 PTIMOT
- Printer timeout every printer status request. Typical timeout for the 825 is 5 seconds. Initialized to 30 sec.
- 29 $1D 1 PBPNT
- Print buffer pointer, index into printer buffer ranges from 0 to value of PBUFSZ.
- 30 $1E 1 PBUFSZ
- Print buffer size of printer record for current mode.
normal = 40 bytes
double width = 20 bytes
sideways = 29 bytes
status = 4
- 31 $1F 1 PTEMP
- Printer handler uses this temp register to save value of character to output to printer.
- 32 $20 1 ZIOCB
- IOCBAS ICHIDZ HANDLER INDEX # FF = FREE IOCB.
- 33 $21 1 ICDNOZ
- Device # (DRIVE #)
- 34 $22 1 ICCOMZ
- Command code.
- 35 $23 1 ICSTAZ
- Status of last IOCB action.
- 36 $24 1 ICBALZ
- Buffer address low byte.
- 37 $25 1 ICBAHZ
- Buffer address high byte.
- 38 $26 1 ICPTLZ
- Put byte routine (address -1) low byte.
- 39 $27 1 ICPTHZ
- Put byte high byte.
- 40 $28 1 ICBLIZ
- Buffer length low byte.
- 41 $29 1 ICBLHZ
- Buffer length high byte.
- 42 $2A 1 ICAZ1Z
- Auxiliary information first byte.
- 43 $2B 1 ICAZ2Z
- Auxiliary information second byte.
- 44 $2C 1 ICSPRZ
- Spare bytes local CIO use.
- 45 $2D 1 ICSPRZ
- Spare bytes local CIO use.
- 46 $2E 1 ICSPRZ
- IOCB Number multiplied by 16.
- 47 $2F 1 CIOCHR
- Character byte for current operation.
- 48 $30 1 STATUS
- Internal status storage.
- 49 $31 1 CHKSUM
- Single byte sum with carry to least significant bit.
- 50 $32 1 BUFRLO
- Pointer to data buffer low byte. ??? which buffer.
- 51 $33 1 BUFRI
- Pointer to data buffer high byte.
- 52 $34 1 BFENLO
- Next byte past end of data buffer. (lobyte)
- 53 $35 1 BFENHI
- Next byte past end of data buffer. (hibyte)
- 54 $36 1 CRETRY
- Number of command frame retries.
- 55 $37 1 DRETRY
- Number of device retries.
- 56 $38 1 BUFRFL
- Buffer full flag.
- 57 $39 1 RECVDN
- Receive done flag.
- 58 #3A 1 XMTDON
- Transmission done flag.
- 59 #3B 1 CHKSNT
- Checksum sent flag.
- 60 $3C 1 NOCKSM
- No checksum follows data flag.
- 61 $3D 1 BPTR
- Cassette record data index into data portion of record being read or written. Values range 0 to current value BLIMI ($28A) when BPTR = BLIM thin buffer CASOFF ($3FD) is empty if reading or full if writing.
- 62 $3E 1 FTYPE
- Interrecord Gap type. Copy of ICAX2Z from open command.
FTYPE 0 normal gaps. [?]
FTYPE 0 continuous gaps. [?]
- 63 $3F 1 FEOF
- Cassette end of file flag used by cassette handler to indicate end of file.
- 64 $40 1 FREQ
- Beep count retain and count number of beeps requested of beep routine by cassette handler during open processing.
- 65 $41 1 SOUNDR
- Noisy I/O flag. When I/O is done buzzer sounds. Poke 0 and it won't buzz.
- 66 $42 1 CRITIC
- Defines critical section (if non-zero) checked on NMI process after stage 1 processed.
- 67 $43 7
- Disk file manager zero page.
- 74 $4A 1 CKEY
- Cassette boot request flag on powerup (coldstart). Start key checked, if pressed then CKEY is set.
- 75 $4B 1 CASSBT
- Cassette boot flag.
- 76 $4C 1 DSTAT
- Display status used by display handler.
- 77 $4D 1 ATRACT
- Attract flag set to 0 by IRQ whenever a key is pressed. Incremented every 4 seconds by stage 1 vblank. When value is 127 then value is set to $FE until attract mode is terminated.
- 78 $4E 1 DRKMSK
- Dark attract mask = $FE when attract mode inactive.
- 79 $4F 1 COLRSH
- Attract color shifter XOR's with playfield colors. At stage 2, vblank color registers are XOR'd with COLRSH and DRKMSK then sent to hardware color registers. When attract inactive, COLRSH = 0 and DRKMSK = $F6 reducing luminence 50% and COLRSH = RTCLOCK + 1 affecting color change every 256/60 = 4.1 sec.
- 80 $50 1 TEMP
- Used by display handler in moving data to and from screen.
- 81 $51 1 HOLD1
- Same as TEMP ($50). When BASIC in use, these two locations called LOMEM and point to 256 byte buffer at end of OS. RAM used to tokenize one line of BASIC.
- 82 $52 1 LMARGN
- Column of left margin of text screen, initialized to 2.
- 83 $53 1 RMARGN
- Column of right margin of text screen initialized to 39. Margins are user alterable. Ignored in every mode but 0.
- 84 $54 1 FOWCRS
- Display row number used in graphics screen and mode 0. Range 0-191. This location and COLCRS define the cursor location for the next data element to be read/written to main screen segment.
- 85 %55 2 COLCRS
- Display column number used in graphics and mode 0 (lobyte). Range 0-319 (hibyte). Home position is 0,0 for both graphics and text.
- 87 $57 1 DINDEX
- Display mode current screen mode obtained from low order 4 bits of most recent open AUXI byte.
- 88 $58 2 SAVMSC
- Lowest address of display memory. This location corresponds to the upper left corner of screen (lobyte).
- 90 $5A 1 OLDROW
- These next 3 locations are updated from ROWCRS and COLCRS before every operation???
- 91 $5B 2 OLDCOL
- These variable used only in draw and fil commands (lobyte).
- 93 $5D 1 OLDCHR
- Retains value of character under visible text cursor. Used to restore character when cursor moves.
- 94 $5E 2 OLDADR
- Retains memory address of current visible text cursor location. Used in conjunction with OLDCHR to restore character value when cursor moves lobyte.
- 96 $60 1 NEWROW
- Point draw goes to.
- 97 $61 2 NEWCOL
- Column draw command uses.
- 99 $63 1 LOGCOL
- Points at column in logical line. A logical line can contain up to 3 physical lines. This variable is used by display handler.
- 100 $64 2 ADRESS
- Temporary storage holds contents of SAVMSC ($58) and SAVEMSC + 1 ($59). ??
- 102 $66 2 MLTTMP
- OPNTMP first byte used in open as temp. ??
- 104 $68 2 SAVADR
- ???
- 106 $6A 1 RAMTOP
- RAM size defined by power on logic.
- 107 $6B 1 BUFCNT
- Screen editor current logical line size.
- 108 $6C 2 BUFSTR
- Editor low byte???
- 110 $6E 1 BITMSK
- ???
- 111 $6F 1 SHFAMT
- Pixel justification???
- 112 $70 2 ROWAC
- Accumulator control row point plotting and increment and decrement functions???
- 114 $72 2 COLAC
- Controls column point plotting.