Classic Computer Magazine Archive ANTIC VOL. 1, NO. 1 / APRIL 1982

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.