]> git.sur5r.net Git - cc65/blob - asminc/atari.inc
98c721296c4473a537e0a79bd3b2f79eeca80fe0
[cc65] / asminc / atari.inc
1 ;-------------------------------------------------------------------------
2 ; Atari System Equates
3 ; by Freddy Offenga, Christian Groessler, and Christian Krueger
4 ;
5 ; References:
6 ; - Atari 400/800 OS rev.B source code, Atari 1979
7 ; - Atari OS manual - XL addendum
8 ; - Atari XL/XE rev.2 source code, Atari 1984
9 ; - Mapping the Atari - revised edition, Ian Chadwick 1985
10 ; - SpartaDOS-X User Guide  (Aug-8-2016)
11 ;
12 ; ##old##       old OS rev.B label - moved or deleted
13 ; ##1200xl##    new label introduced in 1200XL OS (rev.10/11)
14 ; ##rev2##      new label introduced in XL/XE OS rev.2
15 ;-------------------------------------------------------------------------
16
17 ;-------------------------------------------------------------------------
18 ; Configuration Equates
19 ;-------------------------------------------------------------------------
20
21 MAXDEV  = 33            ;offset to last possible entry of HATABS
22 IOCBSZ  = 16            ;length of IOCB
23
24 SEIOCB  = 0*IOCBSZ      ;##rev2## screen editor IOCB index
25 MAXIOC  = 8*IOCBSZ      ;first invalid IOCB index
26
27 DSCTSZ  = 128           ;##rev2## disk sector size
28
29 LEDGE   = 2             ;left edge
30 REDGE   = 39            ;right edge
31
32 INIML   = $0700         ;##rev2## initial MEMLO
33
34 ICSORG  = $CC00         ;##rev2## international character set origin
35 DCSORG  = $E000         ;##rev2## domestic character set origin
36
37 ; IOCB Command Code Equates
38
39 OPEN    = $03           ;open
40 GETREC  = $05           ;get record
41 GETCHR  = $07           ;get character(s)
42 PUTREC  = $09           ;put record
43 PUTCHR  = $0B           ;put character(s)
44 CLOSE   = $0C           ;close
45 STATIS  = $0D           ;status
46 SPECIL  = $0E           ;special
47
48 ; DOS IOCB command codes
49
50 RENAME  = $20           ;rename disk file
51 DELETE  = $21           ;delete disk file
52 LOCKFL  = $23           ;lock file (set to read-only)
53 UNLOCK  = $24           ;unlock file
54 POINT   = $25           ;point sector
55 NOTE    = $26           ;note sector
56 GETFL   = $27           ;get file length
57 CHDIR_MYDOS     = $29   ;change directory (MyDOS)
58 MKDIR   = $2A           ;make directory (MyDOS/SpartaDOS)
59 RMDIR   = $2B           ;remove directory (SpartaDOS)
60 CHDIR_SPDOS     = $2C   ;change directory (SpartaDOS)
61 FORMAT  = $FE           ;format
62
63 GETCWD  = $30           ;get current directory (MyDOS/SpartaDOS)
64
65 ; Special Entry Command Equates
66 ; DOS Commands
67 ; Command line table, Index values for (DOSVEC),Y -- COMTAB
68 ; Compatible with OS/A+, DOS XL and SpartaDOS
69
70 COMTAB  = 0             ;DOS entry jump vector
71 ZCRNAME = 3             ;file name crunch routine jump vector
72 BUFOFF  = 10            ;next parameter buffer offset
73 COMFNAM = 33            ;destination buffer for crunch routine
74 LBUF    = 63            ;command line input buffer
75
76 ; Screen IOCB Commands
77
78 DRAWLN  = $11           ;draw line
79 FILLIN  = $12           ;draw line with right fill
80
81 ; ICAX1 Auxiliary Byte 1 Equates
82
83 APPEND  = $01           ;open write append (D:)
84 DIRECT  = $02           ;open for directory access (D:)
85 OPNIN   = $04           ;open for input (all devices)
86 OPNOT   = $08           ;open for output (all devices)
87 MXDMOD  = $10           ;open for mixed mode (E:, S:)
88 INSCLR  = $20           ;open for input without clearing screen
89
90 ; Device Code Equates
91
92 CASSET  = 'C'           ;cassette
93 DISK    = 'D'           ;disk
94 SCREDT  = 'E'           ;screen editor
95 KBD     = 'K'           ;keyboard
96 PRINTR  = 'P'           ;printer
97 DISPLY  = 'S'           ;screen display
98
99 ; SIO Command Code Equates
100
101 SIO_FORMAT   = $21      ;format disk (default density)
102 SIO_FORMATS  = $22      ;1050: format medium density
103 SIO_CONFIG   = $44      ;configure drive
104 SIO_CONFIGSF = $4B      ;slow/fast configure drive??
105 SIO_RDPERCOM = $4E      ;read PERCOM block (XF551)
106 SIO_WRPERCOM = $4F      ;write PERCOM block (XF551)
107 SIO_WRITE    = $50      ;write sector
108 SIO_READ     = $52      ;read sector
109 SIO_STAT     = $53      ;get status information
110 SIO_VERIFY   = $56      ;verify sector
111 SIO_WRITEV   = $57      ;write sector with verify
112 SIO_WRITETRK = $60      ;write track (Speedy)
113 SIO_READTRK  = $62      ;read track (Speedy)
114
115 ; SIO Status Code (DSTATS)
116 ; Input: data direction
117 ;     Bit #7 - W (write operation)
118 ;         #6 - R (read operation)
119 ; Output: status code
120 ;     $01 (001) -- OPERATION COMPLETE (NO ERRORS)
121 ;     $8A (138) -- DEVICE TIMEOUT (DOESN'T RESPOND)
122 ;     $8B (139) -- DEVICE NAK
123 ;     $8C (140) -- SERIAL BUS INPUT FRAMING ERROR
124 ;     $8E (142) -- SERIAL BUS DATA FRAME OVERRUN ERROR
125 ;     $8F (143) -- SERIAL BUS DATA FRAME CHECKSUM ERROR
126 ;     $90 (144) -- DEVICE DONE ERROR
127
128 ; Character and Key Code Equates
129
130 CLS     = $7D           ;##rev2## clear screen
131 EOL     = $9B           ;end of line (RETURN)
132
133 HELP    = $11           ;##1200xl## key code for HELP
134 CNTLF1  = $83           ;##1200xl## key code for CTRL-F1
135 CNTLF2  = $84           ;##1200xl## key code for CTRL-F2
136 CNTLF3  = $93           ;##1200xl## key code for CTRL-F3
137 CNTLF4  = $94           ;##1200xl## key code for CTRL-F4
138 CNTL1   = $9F           ;##1200xl## key code for CTRL-1
139
140 ; Status Code Equates
141
142 SUCCES  = 1             ;($01) succesful operation
143
144 BRKABT  = 128           ;($80) BREAK key abort
145 PRVOPN  = 129           ;($81) IOCB already open error
146 NONDEV  = 130           ;($82) nonexistent device error
147 WRONLY  = 131           ;($83) IOCB opened for write only error
148 NVALID  = 132           ;($84) invalid command error
149 NOTOPN  = 133           ;($85) device/file not open error
150 BADIOC  = 134           ;($86) invalid IOCB index error
151 RDONLY  = 135           ;($87) IOCB opened for read only error
152 EOFERR  = 136           ;($88) end of file error
153 TRNRCD  = 137           ;($89) truncated record error
154 TIMOUT  = 138           ;($8A) peripheral device timeout error
155 DNACK   = 139           ;($8B) device does not acknowledge command
156 FRMERR  = 140           ;($8C) serial bus framing error
157 CRSROR  = 141           ;($8D) cursor overrange error
158 OVRRUN  = 142           ;($8E) serial bus data overrun error
159 CHKERR  = 143           ;($8F) serial bus checksum error
160 DERROR  = 144           ;($90) device done (operation incomplete)
161 BADMOD  = 145           ;($91) bad screen mode number error
162 FNCNOT  = 146           ;($92) function not implemented in handler
163 SCRMEM  = 147           ;($93) insufficient memory for screen mode
164
165 DSKFMT  = 148           ;($94) SpartaDOS: unrecognized disk format
166 INCVER  = 149           ;($95) SpartaDOS: disk was made with incompat. version
167 DIRNFD  = 150           ;($96) SpartaDOS: directory not found
168 FEXIST  = 151           ;($97) SpartaDOS: file exists
169 NOTBIN  = 152           ;($98) SpartaDOS: file not binary
170 LSYMND  = 154           ;($9A) SDX: loader symbol not defined
171 BADPRM  = 156           ;($9C) SDX: bad parameter
172 OUTOFM  = 158           ;($9E) SDX: out of memory
173 INVDEV  = 160           ;($A0) invalid device number
174 TMOF    = 161           ;($A1) too many open files
175 DSKFLL  = 162           ;($A2) disk full
176 FATLIO  = 163           ;($A3) fatal I/O error
177 FNMSMT  = 164           ;($A4) internal file number mismatch
178 INVFNM  = 165           ;($A5) invalid file name
179 PDLERR  = 166           ;($A6) point data length error
180 EPERM   = 167           ;($A7) permission denied
181 DINVCM  = 168           ;($A8) command invalid for disk
182 DIRFLL  = 169           ;($A9) directory full
183 FNTFND  = 170           ;($AA) file not found
184 PNTINV  = 171           ;($AB) point invalid
185 BADDSK  = 173           ;($AD) bad disk
186 INCFMT  = 176           ;($B0) DOS 3: incompatible file system
187 XNTBIN  = 180           ;($B4) XDOS: file not binary
188
189 ; DCB Device Bus Equates
190
191 DISKID  = $31           ;##rev2## disk bus ID
192 PDEVN   = $40           ;##rev2## printer bus ID
193 CASET   = $60           ;##rev2## cassette bus ID
194
195 ; Bus Command Equates
196
197 FOMAT   = '!'           ;##rev2## format command
198 PUTSEC  = 'P'           ;##rev2## put sector command
199 READ    = 'R'           ;##rev2## read command
200 STATC   = 'S'           ;##rev2## status command
201 WRITE   = 'W'           ;##rev2## write command
202
203 ; Command Auxiliary Byte Equates
204
205 DOUBLE  = 'D'           ;##rev2## print 20 characters double width
206 NORMAL  = 'N'           ;##rev2## print 40 characters normally
207 PLOT    = 'P'           ;##rev2## plot
208 SIDWAY  = 'S'           ;##rev2## print 16 characters sideways
209
210 ; Bus Response Equates
211
212 ACK     = 'A'           ;##rev2## device acknowledged
213 COMPLT  = 'C'           ;##rev2## device succesfully completed operation
214 ERROR   = 'E'           ;##rev2## device incurred error
215 NACK    = 'N'           ;##rev2## device did not understand
216
217 ; Floating Point Miscellaneous Equates
218
219 FPREC   = 6             ;precision
220
221 FMPREC  = FPREC-1       ;##rev2## length of mantissa
222
223 ; Cassette Record Type Equates
224
225 HDR     = $FB           ;##rev2## header
226 DTA     = $FC           ;##rev2## data record
227 DT1     = $FA           ;##rev2## last data record
228 EOT     = $FE           ;##rev2## end of tape (file)
229
230 TONE1   = 2             ;##rev2## record
231 TONE2   = 1             ;##rev2## playback
232
233 ; Cassette Timing Equates
234
235 WLEADN  = 1152          ;##rev2## NTSC 19.2 second WRITE file leader
236 RLEADN  = 576           ;##rev2## NTSC 9.6 second READ file leader
237 WIRGLN  = 180           ;##rev2## NTSC 3.0 second WRITE IRG
238 RIRGLN  = 120           ;##rev2## NTSC 2.0 second READ IRG
239 WSIRGN  = 15            ;##rev2## NTSC 0.25 second WRITE short IRG
240 RSIRGN  = 10            ;##rev2## NTSC 0.16 second READ short IRG
241 BEEPNN  = 30            ;##rev2## NTSC 0.5 second beep duration
242 BEEPFN  = 10            ;##rev2## NTSC 0.16 seconrd beep duration
243
244 WLEADP  = 960           ;##rev2## PAL 19.2 second WRITE file leader
245 RLEADP  = 480           ;##rev2## PAL 9.6 second READ file leader
246 WIRGLP  = 150           ;##rev2## PAL 3.0 second WRITE IRG
247 RIRGLP  = 100           ;##rev2## PAL 2.0 second READ IRG
248 WSIRGP  = 13            ;##rev2## PAL 0.25 second WRITE short IRG
249 RSIRGP  = 8             ;##rev2## PAL 0.16 second READ short IRG
250 BEEPNP  = 25            ;##rev2## PAL 0.5 second beep duration
251 BEEPFP  = 8             ;##rev2## PAL 0.16 seconrd beep duration
252
253 WIRGHI  = 0             ;##rev2## high WRITE IRG
254 RIRGHI  = 0             ;##rev2## high READ IRG
255
256 ; Power-up Validation Byte Value Equates
257
258 PUPVL1  = $5C           ;##rev2## power-up validation value 1
259 PUPVL2  = $93           ;##rev2## power-up validation value 2
260 PUPVL3  = $25           ;##rev2## power-up validation value 3
261
262 ; Relocating Loader Miscellaneous Equates
263
264 DATAER  = 156           ;##rev2## end of record appears before END
265 MEMERR  = 157           ;##rev2## memory insufficient for load error
266
267 ; Miscellaneous Equates
268
269 IOCFRE  = $FF           ;IOCB free indication
270
271 B19200  = $0028         ;##rev2## 19200 baud POKEY counter value
272 B00600  = $05CC         ;##rev2## 600 baud POKEY counter value
273
274 HITONE  = $05           ;##rev2## FSK high freq. POKEY counter value
275 LOTONE  = $07           ;##rev2## FSK low freq. POKEY counter value
276
277 NCOMLO  = $34           ;##rev2## PIA lower NOT COMMAND line command
278 NCOMHI  = $3C           ;##rev2## PIA raise NOT COMMAND line command
279
280 MOTRGO  = $34           ;##rev2## PIA cassette motor ON command
281 MOTRST  = $3C           ;##rev2## PIA cassette motor OFF command
282
283 NODAT   = $00           ;##rev2## SIO immediate operation
284 GETDAT  = $40           ;##rev2## SIO read data frame
285 PUTDAT  = $80           ;##rev2## SIO write data frame
286
287 CRETRI  = 13            ;##rev2## number of command frame retries
288 DRETRI  = 1             ;##rev2## number of device retries
289 CTIM    = 2             ;##rev2## command frame ACK timeout
290
291 NBUFSZ  = 40            ;##rev2## print normal buffer size
292 DBUFSZ  = 20            ;##rev2## print double buffer size
293 SBUFSZ  = 29            ;##rev2## print sideways buffer size
294
295 ;-------------------------------------------------------------------------
296 ; Page Zero Address Equates
297 ;-------------------------------------------------------------------------
298
299 LINZBS  = $00           ;LINBUG RAM (WILL BE REPLACED BY MONITOR RAM)
300 LNFLG   = $00           ;##1200xl## 1-byte LNBUG flag (0 = not LNBUG)
301 NGFLAG  = $01           ;##1200xl## 1-byte memory status (0 = failure)
302
303 ; Not Cleared
304
305 CASINI  = $02           ;CASSETTE INIT LOCATION
306 RAMLO   = $04           ;RAM POINTER FOR MEMORY TEST
307 TRAMSZ  = $06           ;TEMPORARY REGISTER FOR RAM SIZE
308 ;TSTDAT = $07           ;##old## RAM TEST DATA REGISTER
309 CMCMD   = $07           ;##rev2## 1-byte command communications
310
311 ; Cleared upon Coldstart only
312
313 WARMST  = $08           ;WARM START FLAG
314 BOOTQ   = $09           ;SUCCESSFUL BOOT FLAG
315 DOSVEC  = $0A           ;DISK SOFTWARE START VECTOR
316 DOSINI  = $0C           ;DISK SOFTWARE INIT ADDRESS
317 APPMHI  = $0E           ;APPLICATIONS MEMORY HI LIMIT
318
319 ; Cleared upon Coldstart or Warmstart
320
321 INTZBS  = $10           ;INTERRUPT HANDLER
322
323 POKMSK  = $10           ;SYSTEM MASK FOR POKEY IRQ ENABLE (shadow of IRQEN)
324 BRKKEY  = $11           ;BREAK KEY FLAG
325 RTCLOK  = $12           ;REAL TIME CLOCK (IN 16 MSEC UNITS>
326 BUFADR  = $15           ;INDIRECT BUFFER ADDRESS REGISTER
327 ICCOMT  = $17           ;COMMAND FOR VECTOR
328 DSKFMS  = $18           ;DISK FILE MANAGER POINTER
329 DSKUTL  = $1A           ;DISK UTILITIES POINTER
330 ABUFPT  = $1C           ;##1200xl## 4-byte ACMI buffer pointer area
331
332 ;PTIMOT = $1C           ;##old## PRINTER TIME OUT REGISTER
333 ;PBPNT  = $1D           ;##old## PRINT BUFFER POINTER
334 ;PBUFSZ = $1E           ;##old## PRINT BUFFER SIZE
335 ;PTEMP  = $1F           ;##old## TEMPORARY REGISTER
336
337 ZIOCB   = $20           ;ZERO PAGE I/O CONTROL BLOCK
338 IOCBAS  = $20           ;16-byte page zero IOCB
339 ICHIDZ  = $20           ;HANDLER INDEX NUMBER (FF = IOCB FREE)
340 ICDNOZ  = $21           ;DEVICE NUMBER (DRIVE NUMBER)
341 ICCOMZ  = $22           ;COMMAND CODE
342 ICSTAZ  = $23           ;STATUS OF LAST IOCB ACTION
343 ICBALZ  = $24           ;BUFFER ADDRESS LOW BYTE
344 ICBAHZ  = $25           ;1-byte high buffer address
345 ICPTLZ  = $26           ;PUT BYTE ROUTINE ADDRESS -1
346 ICPTHZ  = $27           ;1-byte high PUT-BYTE routine address
347 ICBLLZ  = $28           ;BUFFER LENGTH LOW BYTE
348 ICBLHZ  = $29           ;1-byte high buffer length
349 ICAX1Z  = $2A           ;AUXILIARY INFORMATION FIRST BYTE
350 ICAX2Z  = $2B           ;1-byte second auxiliary information
351 ICSPRZ  = $2C           ;4-byte spares
352
353 ENTVEC  = $2C           ;##rev2## 2-byte (not used)
354 ICIDNO  = $2E           ;IOCB NUMBER X 16
355 CIOCHR  = $2F           ;CHARACTER BYTE FOR CURRENT OPERATION
356
357 STATUS  = $30           ;INTERNAL STATUS STORAGE
358 CHKSUM  = $31           ;CHECKSUM (SINGLE BYTE SUM WITH CARRY)
359 BUFRLO  = $32           ;POINTER TO DATA BUFFER (LO BYTE)
360 BUFRHI  = $33           ;POINTER TO DATA BUFFER (HI BYTE)
361 BFENLO  = $34           ;NEXT BYTE PAST END OF THE DATA BUFFER LO
362 BFENHI  = $35           ;NEXT BYTE PAST END OF THE DATA BUFFER HI
363 ;CRETRY = $36           ;##old## NUMBER OF COMMAND FRAME RETRIES
364 ;DRETRY = $37           ;##old## NUMBER OF DEVICE RETRIES
365 LTEMP   = $36           ;##1200xl## 2-byte loader temporary
366 BUFRFL  = $38           ;DATA BUFFER FULL FLAG
367 RECVDN  = $39           ;RECEIVE DONE FLAG
368 XMTDON  = $3A           ;TRANSMISSION DONE FLAG
369 CHKSNT  = $3B           ;CHECKSUM SENT FLAG
370 NOCKSM  = $3C           ;NO CHECKSUM FOLLOWS DATA FLAG
371 BPTR    = $3D           ;1-byte cassette buffer pointer
372 FTYPE   = $3E           ;1-byte cassette IRG type
373 FEOF    = $3F           ;1-byte cassette EOF flag (0 = quiet)
374 FREQ    = $40           ;1-byte cassette beep counter
375 SOUNDR  = $41           ;NOISY I/0 FLAG. (ZERO IS QUIET)
376
377 CRITIC  = $42           ;DEFINES CRITICAL SECTION (CRITICAL IF NON-Z)
378
379 FMSZPG  = $43           ;DISK FILE MANAGER SYSTEM ZERO PAGE
380
381 ;CKEY   = $4A           ;##old## FLAG SET WHEN GAME START PRESSED
382 ZCHAIN  = $4A           ;##1200xl## 2-byte handler linkage chain pointer
383 ;CASSBT = $4B           ;##old## CASSETTE BOOT FLAG
384 DSTAT   = $4C           ;DISPLAY STATUS
385 ATRACT  = $4D           ;ATRACT FLAG
386 DRKMSK  = $4E           ;DARK ATRACT MASK
387 COLRSH  = $4F           ;ATRACT COLOR SHIFTER (EOR'ED WITH PLAYFIELD
388
389
390 TMPCHR  = $50           ;1-byte temporary character
391 HOLD1   = $51           ;1-byte temporary
392 LMARGN  = $52           ;left margin (normally 2, cc65 C startup code sets it to 0)
393 RMARGN  = $53           ;right margin (normally 39 if no XEP80 is used)
394 ROWCRS  = $54           ;1-byte cursor row
395 COLCRS  = $55           ;2-byte cursor column
396 DINDEX  = $57           ;1-byte display mode
397 SAVMSC  = $58           ;2-byte saved memory scan counter
398 OLDROW  = $5A           ;1-byte prior row
399 OLDCOL  = $5B           ;2-byte prior column
400 OLDCHR  = $5D           ;DATA UNDER CURSOR
401 OLDADR  = $5E           ;2-byte saved cursor memory address
402 FKDEF   = $60           ;##1200xl## 2-byte function key definition table
403 ;NEWROW = $60           ;##old## POINT DRAW GOES TO
404 ;NEWCOL = $61           ;##old##
405 PALNTS  = $62           ;##1200xl## 1-byte PAL/NTSC indicator (0 = NTSC)
406 LOGCOL  = $63           ;POINTS AT COLUMN IN LOGICAL LINE
407 ADRESS  = $64           ;2-byte temporary address
408
409 MLTTMP  = $66           ;1-byte temporary
410 OPNTMP  = $66           ;FIRST BYTE IS USED IN OPEN AS TEMP
411 TOADR   = $66           ;##rev2## 2-byte destination address
412
413 SAVADR  = $68           ;2-byte saved address
414 FRMADR  = $68           ;##rev2## 2-byte source address
415
416 RAMTOP  = $6A           ;RAM SIZE DEFINED BY POWER ON LOGIC
417 BUFCNT  = $6B           ;BUFFER COUNT
418 BUFSTR  = $6C           ;EDITOR GETCH POINTER
419 BITMSK  = $6E           ;BIT MASK
420 SHFAMT  = $6F           ;1-byte shift amount for pixel justifucation
421 ROWAC   = $70           ;2-byte draw working row
422 COLAC   = $72           ;2-byte draw working column
423 ENDPT   = $74           ;2-byte end point
424 DELTAR  = $76           ;1-byte row difference
425 DELTAC  = $77           ;2-byte column difference
426 KEYDEF  = $79           ;##1200xl## 2-byte key definition table address
427 ;ROWINC = $79           ;##old##
428 ;COLINC = $7A           ;##old##
429 SWPFLG  = $7B           ;NON-0 1F TXT AND REGULAR RAM IS SWAPPED
430 HOLDCH  = $7C           ;CH IS MOVED HERE IN KGETCH BEFORE CNTL & SH
431 INSDAT  = $7D           ;1-byte temporary
432 COUNTR  = $7E           ;2-byte draw iteration count
433
434 ; Floating Point Package Page Zero Address Equates
435
436 FR0     = $D4           ;6-byte register 0
437 FR0M    = $D5           ;##rev2## 5-byte register 0 mantissa
438 QTEMP   = $D9           ;##rev2## 1-byte temporary
439
440 FRE     = $DA           ;6-byte (internal) register E
441
442 FR1     = $E0           ;FP REG1
443 FR1M    = $E1           ;##rev2## 5-byte register 1 mantissa
444
445 FR2     = $E6           ;6-byte (internal) register 2
446
447 FRX     = $EC           ;1-byte temporary
448
449 EEXP    = $ED           ;VALUE OF E
450
451 FRSIGN  = $EE           ;##rev2## 1-byte floating point sign
452 NSIGN   = $EE           ;SIGN OF #
453
454 PLYCNT  = $EF           ;##rev2## 1-byte polynomial degree
455 ESIGN   = $EF           ;SIGN OF EXPONENT
456
457 SGNFLG  = $F0           ;##rev2## 1-byte sign flag
458 FCHRFLG = $F0           ;1ST CHAR FLAG
459
460 XFMFLG  = $F1           ;##rev2## 1-byte transform flag
461 DIGRT   = $F1           ;# OF DIGITS RIGHT OF DECIMAL
462
463 CIX     = $F2           ;CURRENT INPUT INDEX
464 INBUFF  = $F3           ;POINTS TO USER'S LINE INPUT BUFFER
465
466 ZTEMP1  = $F5           ;2-byte temporary
467 ZTEMP4  = $F7           ;2-byte temporary
468 ZTEMP3  = $F9           ;2-byte temporary
469
470 ;DEGFLG = $FB           ;##old## same as RADFLG
471 ;RADFLG = $FB           ;##old## 0=RADIANS, 6=DEGREES
472
473 FLPTR   = $FC           ;2-byte floating point number pointer
474 FPTR2   = $FE           ;2-byte floating point number pointer
475
476 ;-------------------------------------------------------------------------
477 ; Page Two Address Equates
478 ;-------------------------------------------------------------------------
479
480 INTABS  = $0200         ;INTERRUPT RAM
481
482 VDSLST  = $0200         ;DISPLAY LIST NMI VECTOR
483 VPRCED  = $0202         ;PROCEED LINE IRQ VECTOR
484 VINTER  = $0204         ;INTERRUPT LINE IRQ VECTOR
485 VBREAK  = $0206         ;SOFTWARE BREAK (00) INSTRUCTION IRQ VECTOR
486 VKEYBD  = $0208         ;POKEY KEYBOARD IRQ VECTOR
487 VSERIN  = $020A         ;POKEY SERIAL INPUT READY IRQ
488 VSEROR  = $020C         ;POKEY SERIAL OUTPUT READY IRQ
489 VSEROC  = $020E         ;POKEY SERIAL OUTPUT COMPLETE IRQ
490 VTIMR1  = $0210         ;POKEY TIMER 1 IRQ
491 VTIMR2  = $0212         ;POKEY TIMER 2 IRQ
492 VTIMR4  = $0214         ;POKEY TIMER 4 IRQ
493 VIMIRQ  = $0216         ;IMMEDIATE IRQ VECTOR
494 CDTMV1  = $0218         ;COUNT DOWN TIMER 1
495 CDTMV2  = $021A         ;COUNT DOWN TIMER 2
496 CDTMV3  = $021C         ;COUNT DOWN TIMER 3
497 CDTMV4  = $021E         ;COUNT DOWN TIMER 4
498 CDTMV5  = $0220         ;COUNT DOWN TIMER 5
499 VVBLKI  = $0222         ;IMMEDIATE VERTICAL BLANK NMI VECTOR
500 VVBLKD  = $0224         ;DEFERRED VERTICAL BLANK NMI VECTOR
501 CDTMA1  = $0226         ;COUNT DOWN TIMER 1 JSR ADDRESS
502 CDTMA2  = $0228         ;COUNT DOWN TIMER 2 JSR ADDRESS
503 CDTMF3  = $022A         ;COUNT DOWN TIMER 3 FLAG
504 SRTIMR  = $022B         ;SOFTWARE REPEAT TIMER
505 CDTMF4  = $022C         ;COUNT DOWN TIMER 4 FLAG
506 INTEMP  = $022D         ;IAN'S TEMP
507 CDTMF5  = $022E         ;COUNT DOWN TIMER FLAG 5
508 SDMCTL  = $022F         ;SAVE DMACTL REGISTER
509 SDLSTL  = $0230         ;SAVE DISPLAY LIST LOW BYTE
510 SDLSTH  = $0231         ;SAVE DISPLAY LIST HI BYTE
511 SSKCTL  = $0232         ;SKCTL REGISTER RAM
512 LCOUNT  = $0233         ;##1200xl## 1-byte relocating loader record
513 LPENH   = $0234         ;LIGHT PEN HORIZONTAL VALUE
514 LPENV   = $0235         ;LIGHT PEN VERTICAL VALUE
515 BRKKY   = $0236         ;BREAK KEY VECTOR
516 ;RELADR = $0238         ;##1200xl## 2-byte relocatable loader address
517 VPIRQ   = $0238         ;##rev2## 2-byte parallel device IRQ vector
518 CDEVIC  = $023A         ;COMMAND FRAME BUFFER - DEVICE
519 CCOMND  = $023B         ;COMMAND
520 CAUX1   = $023C         ;COMMAND AUX BYTE 1
521 CAUX2   = $023D         ;COMMAND AUX BYTE 2
522
523 TEMP    = $023E         ;TEMPORARY RAM CELL
524
525 ERRFLG  = $023F         ;ERROR FLAG - ANY DEVICE ERROR EXCEPT TIME OUT
526
527 DFLAGS  = $0240         ;DISK FLAGS FROM SECTOR ONE
528 DBSECT  = $0241         ;NUMBER OF DISK BOOT SECTORS
529 BOOTAD  = $0242         ;ADDRESS WHERE DISK BOOT LOADER WILL BE PUT
530 COLDST  = $0244         ;COLDSTART FLAG (1=IN MIDDLE OF COLDSTART>
531 RECLEN  = $0245         ;##1200xl## 1-byte relocating loader record length
532 DSKTIM  = $0246         ;DISK TIME OUT REGISTER
533 ;LINBUF = $0247         ;##old## CHAR LINE BUFFER
534 PDVMSK  = $0247         ;##rev2## 1-byte parallel device selection mask
535 SHPDVS  = $0248         ;##rev2## 1-byte PDVS (parallel device select)
536 PDIMSK  = $0249         ;##rev2## 1-byte parallel device IRQ selection
537 RELADR  = $024A         ;##rev2## 2-byte relocating loader relative adr.
538 PPTMPA  = $024C         ;##rev2## 1-byte parallel device handler temporary
539 PPTMPX  = $024D         ;##rev2## 1-byte parallel device handler temporary
540
541 CHSALT  = $026B         ;##1200xl## 1-byte character set alternate
542 VSFLAG  = $026C         ;##1200xl## 1-byte fine vertical scroll count
543 KEYDIS  = $026D         ;##1200xl## 1-byte keyboard disable
544 FINE    = $026E         ;##1200xl## 1-byte fine scrolling mode
545 GPRIOR  = $026F         ;GLOBAL PRIORITY CELL
546
547 PADDL0  = $0270         ;1-byte potentiometer 0
548 PADDL1  = $0271         ;1-byte potentiometer 1
549 PADDL2  = $0272         ;1-byte potentiometer 2
550 PADDL3  = $0273         ;1-byte potentiometer 3
551 PADDL4  = $0274         ;1-byte potentiometer 4
552 PADDL5  = $0275         ;1-byte potentiometer 5
553 PADDL6  = $0276         ;1-byte potentiometer 6
554 PADDL7  = $0277         ;1-byte potentiometer 7
555
556 STICK0  = $0278         ;1-byte joystick 0
557 STICK1  = $0279         ;1-byte joystick 1
558 STICK2  = $027A         ;1-byte joystick 2
559 STICK3  = $027B         ;1-byte joystick 3
560
561 PTRIG0  = $027C         ;1-byte paddle trigger 0
562 PTRIG1  = $027D         ;1-byte paddle trigger 1
563 PTRIG2  = $027E         ;1-byte paddle trigger 2
564 PTRIG3  = $027F         ;1-byte paddle trigger 3
565 PTRIG4  = $0280         ;1-byte paddle trigger 4
566 PTRIG5  = $0281         ;1-byte paddle trigger 5
567 PTRIG6  = $0281         ;1-byte paddle trigger 6
568 PTRIG7  = $0283         ;1-byte paddle trigger 7
569
570 STRIG0  = $0284         ;1-byte joystick trigger 0
571 STRIG1  = $0285         ;1-byte joystick trigger 1
572 STRIG2  = $0286         ;1-byte joystick trigger 2
573 STRIG3  = $0287         ;1-byte joystick trigger 3
574
575 ;CSTAT  = $0288         ;##old## cassette status register
576 HIBYTE  = $0288         ;##1200xl## 1-byte relocating loader high byte
577 WMODE   = $0289         ;1-byte cassette WRITE mode
578 BLIM    = $028A         ;1-byte cassette buffer limit
579 IMASK   = $028B         ;##rev2## (not used)
580 JVECK   = $028C         ;2-byte jump vector or temporary
581 NEWADR  = $028E         ;##1200xl## 2-byte relocating address
582 TXTROW  = $0290         ;TEXT ROWCRS
583 TXTCOL  = $0291         ;TEXT COLCRS
584 TINDEX  = $0293         ;TEXT INDEX
585 TXTMSC  = $0294         ;FOOLS CONVRT INTO NEW MSC
586 TXTOLD  = $0296         ;OLDROW & OLDCOL FOR TEXT (AND THEN SOME)
587 ;TMPX1  = $029C         ;##old## 1-byte temporary register
588 CRETRY  = $029C         ;##1200xl## 1-byte number of command frame retries
589 HOLD3   = $029D         ;1-byte temporary
590 SUBTMP  = $029E         ;1-byte temporary
591 HOLD2   = $029F         ;1-byte (not used)
592 DMASK   = $02A0         ;1-byte display (pixel location) mask
593 TMPLBT  = $02A1         ;1-byte (not used)
594 ESCFLG  = $02A2         ;ESCAPE FLAG
595 TABMAP  = $02A3         ;15-byte (120 bit) tab stop bit map
596 LOGMAP  = $02B2         ;LOGICAL LINE START BIT MAP
597 INVFLG  = $02B6         ;INVERSE VIDEO FLAG (TOGGLED BY ATARI KEY)
598 FILFLG  = $02B7         ;RIGHT FILL FLAG FOR DRAW
599 TMPROW  = $02B8         ;1-byte temporary row
600 TMPCOL  = $02B9         ;2-byte temporary column
601 SCRFLG  = $02BB         ;SET IF SCROLL OCCURS
602 HOLD4   = $02BC         ;TEMP CELL USED IN DRAW ONLY
603 ;HOLD5  = $02BD         ;##old## DITTO
604 DRETRY  = $02BD         ;##1200xl## 1-byte number of device retries
605 SHFLOK  = $02BE         ;1-byte shift/control lock flags
606 BOTSCR  = $02BF         ;BOTTOM OF SCREEN   24 NORM 4 SPLIT
607
608 PCOLR0  = $02C0         ;1-byte player-missile 0 color/luminance
609 PCOLR1  = $02C1         ;1-byte player-missile 1 color/luminance
610 PCOLR2  = $02C2         ;1-byte player-missile 2 color/luminance
611 PCOLR3  = $02C3         ;1-byte player-missile 3 color/luminance
612
613 COLOR0  = $02C4         ;1-byte playfield 0 color/luminance
614 COLOR1  = $02C5         ;1-byte playfield 1 color/luminance
615 COLOR2  = $02C6         ;1-byte playfield 2 color/luminance
616 COLOR3  = $02C7         ;1-byte playfield 3 color/luminance
617
618 COLOR4  = $02C8         ;1-byte background color/luminance
619
620 PARMBL  = $02C9         ;##rev2## 6-byte relocating loader parameter
621 RUNADR  = $02C9         ;##1200xl## 2-byte run address
622 HIUSED  = $02CB         ;##1200xl## 2-byte highest non-zero page address
623 ZHIUSE  = $02CD         ;##1200xl## 2-byte highest zero page address
624
625 OLDPAR  = $02CF         ;##rev2## 6-byte relocating loader parameter
626 GBYTEA  = $02CF         ;##1200xl## 2-byte GET-BYTE routine address
627 LOADAD  = $02D1         ;##1200xl## 2-byte non-zero page load address
628 ZLOADA  = $02D3         ;##1200xl## 2-byte zero page load address
629
630 DSCTLN  = $02D5         ;##1200xl## 2-byte disk sector length
631 ACMISR  = $02D7         ;##1200xl## 2-byte ACMI interrupt service routine
632 KRPDEL  = $02D9         ;##1200xl## 1-byte auto-repeat delay
633 KEYREP  = $02DA         ;##1200xl## 1-byte auto-repeat rate
634 NOCLIK  = $02DB         ;##1200xl## 1-byte key click disable
635 HELPFG  = $02DC         ;##1200xl## 1-byte HELP key flag (0 = no HELP)
636 DMASAV  = $02DD         ;##1200xl## 1-byte SDMCTL save/restore
637 PBPNT   = $02DE         ;##1200xl## 1-byte printer buffer pointer
638 PBUFSZ  = $02DF         ;##1200xl## 1-byte printer buffer size
639
640 GLBABS  = $02E0         ;4-byte global variables for non-DOS users
641 RUNAD   = $02E0         ;##map## 2-byte binary file run address
642 INITAD  = $02E2         ;##map## 2-byte binary file initialization address
643
644 RAMSIZ  = $02E4         ;RAM SIZE (HI BYTE ONLY)
645 MEMTOP  = $02E5         ;TOP OF AVAILABLE USER MEMORY
646 MEMLO   = $02E7         ;BOTTOM OF AVAILABLE USER MEMORY
647 HNDLOD  = $02E9         ;##1200xl## 1-byte user load flag
648 DVSTAT  = $02EA         ;STATUS BUFFER
649 CBAUDL  = $02EE         ;1-byte low cassette baud rate
650 CBAUDH  = $02EF         ;1-byte high cassette baud rate
651 CRSINH  = $02F0         ;CURSOR INHIBIT (00 = CURSOR ON)
652 KEYDEL  = $02F1         ;KEY DELAY
653 CH1     = $02F2         ;1-byte prior keyboard character
654 CHACT   = $02F3         ;CHACTL REGISTER RAM
655 CHBAS   = $02F4         ;CHBAS REGISTER RAM
656
657 NEWROW  = $02F5         ;##1200xl## 1-byte draw destination row
658 NEWCOL  = $02F6         ;##1200xl## 2-byte draw destination column
659 ROWINC  = $02F8         ;##1200xl## 1-byte draw row increment
660 COLINC  = $02F9         ;##1200xl## 1-byte draw column increment
661
662 CHAR    = $02FA         ;1-byte internal character
663 ATACHR  = $02FB         ;ATASCII CHARACTER
664 CH      = $02FC         ;GLOBAL VARIABLE FOR KEYBOARD
665 FILDAT  = $02FD         ;RIGHT FILL DATA <DRAW>
666 DSPFLG  = $02FE         ;DISPLAY FLAG   DISPLAY CNTLS IF NON-ZERO
667 SSFLAG  = $02FF         ;START/STOP FLAG FOR PAGING (CNTL 1). CLEARE
668
669 ;-------------------------------------------------------------------------
670 ; Page Three Address Equates
671 ;-------------------------------------------------------------------------
672
673 DCB     = $0300         ;DEVICE CONTROL BLOCK
674 DDEVIC  = $0300         ;PERIPHERAL UNIT 1 BUS I.D. NUMBER
675 DUNIT   = $0301         ;UNIT NUMBER
676 DCOMND  = $0302         ;BUS COMMAND
677 DSTATS  = $0303         ;COMMAND TYPE/STATUS RETURN
678 DBUFLO  = $0304         ;1-byte low data buffer address
679 DBUFHI  = $0305         ;1-byte high data buffer address
680 DTIMLO  = $0306         ;DEVICE TIME OUT IN 1 SECOND UNITS
681 DUNUSE  = $0307         ;UNUSED BYTE
682 DBYTLO  = $0308         ;1-byte low number of bytes to transfer
683 DBYTHI  = $0309         ;1-byte high number of bytes to transfer
684 DAUX1   = $030A         ;1-byte first command auxiliary
685 DAUX2   = $030B         ;1-byte second command auxiliary
686
687 TIMER1  = $030C         ;INITIAL TIMER VALUE
688 ;ADDCOR = $030E         ;##old## ADDITION CORRECTION
689 JMPERS  = $030E         ;##1200xl## 1-byte jumper options
690 CASFLG  = $030F         ;CASSETTE MODE WHEN SET
691 TIMER2  = $0310         ;2-byte final baud rate timer value
692 TEMP1   = $0312         ;TEMPORARY STORAGE REGISTER
693 ;TEMP2  = $0314         ;##old## TEMPORARY STORAGE REGISTER
694 TEMP2   = $0313         ;##1200xl## 1-byte temporary
695 PTIMOT  = $0314         ;##1200xl## 1-byte printer timeout
696 TEMP3   = $0315         ;TEMPORARY STORAGE REGISTER
697 SAVIO   = $0316         ;SAVE SERIAL IN DATA PORT
698 TIMFLG  = $0317         ;TIME OUT FLAG FOR BAUD RATE CORRECTION
699 STACKP  = $0318         ;SIO STACK POINTER SAVE CELL
700 TSTAT   = $0319         ;TEMPORARY STATUS HOLDER
701
702 HATABS  = $031A         ;35-byte handler address table (was 38 bytes)
703 PUPBT1  = $033D         ;##1200xl## 1-byte power-up validation byte 1
704 PUPBT2  = $033E         ;##1200xl## 1-byte power-up validation byte 2
705 PUPBT3  = $033F         ;##1200xl## 1-byte power-up validation byte 3
706
707 IOCB    = $0340         ;I/O CONTROL BLOCKS
708 ICHID   = $0340         ;HANDLER INDEX NUMBER (FF=IOCB FREE)
709 ICDNO   = $0341         ;DEVICE NUMBER (DRIVE NUMBER)
710 ICCOM   = $0342         ;COMMAND CODE
711 ICSTA   = $0343         ;STATUS OF LAST IOCB ACTION
712 ICBAL   = $0344         ;1-byte low buffer address
713 ICBAH   = $0345         ;1-byte high buffer address
714 ICPTL   = $0346         ;1-byte low PUT-BYTE routine address - 1
715 ICPTH   = $0347         ;1-byte high PUT-BYTE routine address - 1
716 ICBLL   = $0348         ;1-byte low buffer length
717 ICBLH   = $0349         ;1-byte high buffer length
718 ICAX1   = $034A         ;1-byte first auxiliary information
719 ICAX2   = $034B         ;1-byte second auxiliary information
720 ICAX3   = $034C         ;1-byte third auxiliary information
721 ICAX4   = $034D         ;1-byte fourth auxiliary information
722 ICAX5   = $034E         ;1-byte fifth auxiliary information
723 ICSPR   = $034F         ;SPARE BYTE
724
725 PRNBUF  = $03C0         ;PRINTER BUFFER
726 SUPERF  = $03E8         ;##1200xl## 1-byte editor super function flag
727 CKEY    = $03E9         ;##1200xl## 1-byte cassette boot request flag
728 CASSBT  = $03EA         ;##1200xl## 1-byte cassette boot flag
729 CARTCK  = $03EB         ;##1200xl## 1-byte cartridge equivalence check
730 DERRF   = $03EC         ;##rev2## 1-byte screen OPEN error flag
731
732 ; Remainder of Page Three Not Cleared upon Reset
733
734 ACMVAR  = $03ED         ;##1200xl## 11 bytes reserved for ACMI
735 BASICF  = $03F8         ;##rev2## 1-byte BASIC switch flag
736 MINTLK  = $03F9         ;##1200xl## 1-byte ACMI module interlock
737 GINTLK  = $03FA         ;##1200xl## 1-byte cartridge interlock
738 CHLINK  = $03FB         ;##1200xl## 2-byte loaded handler chain link
739 CASBUF  = $03FD         ;CASSETTE BUFFER
740
741 ;-------------------------------------------------------------------------
742 ; Page Four/Five Address Equates
743 ;-------------------------------------------------------------------------
744
745 ; USER AREA STARTS HERE AND GOES TO END OF PAGE FIVE
746 USAREA  = $0480         ;128 bytes reserved for application
747
748 LBPR1   = $057E         ;LBUFF PREFIX 1
749 LBPR2   = $057F         ;LBUFF PREFIX 2
750 LBUFF   = $0580         ;128-byte line buffer
751
752 PLYARG  = $05E0         ;6-byte floating point polynomial argument
753 FPSCR   = $05E6         ;6-byte floating point temporary
754 FPSCR1  = $05EC         ;6-byte floating point temporary
755
756 ;LBFEND = $05FF         ;##old## END OF LBUFF
757
758
759 DOS     = $0700
760
761 ;-------------------------------------------------------------------------
762 ; SpartaDOS-X Definitions
763 ;-------------------------------------------------------------------------
764
765 SDX_FLAG     = DOS              ; 'S' for SpartaDOS
766 SDX_VERSION  = $0701            ; SD version (e.g. $32 = 3.2, $40 = 4.0)
767                                 ; address $0702 contains sub-version, e.g.
768                                 ; 8 in case of SDX 4.48
769 SDX_KERNEL   = $0703            ; SDX kernel entry point
770 SDX_BLOCK_IO = $0706            ; block I/O entry point
771 SDX_MISC     = $0709            ; "misc" entry point
772 SDX_DEVICE   = $0761
773 SDX_DATE     = $077B            ; day, month, year (3 bytes)
774 SDX_TIME     = $077E            ; hour, min, sec (3 bytes)
775 SDX_DATESET  = $0781
776 SDX_PATH     = $07A0            ; 64 bytes
777 SDX_IFSYMBOL = $07EB            ; only valid on SDX 4.40 or newer
778 SDX_S_LOOKUP = SDX_IFSYMBOL     ; alternative name for SDX_IFSYMBOL
779
780 ; values for SDX_DEVICE
781
782 SDX_CLK_DEV  = $10              ; clock device
783
784 ; clock device functions
785
786 SDX_KD_GETTD = 100              ; get time and date
787 SDX_KD_SETTD = 101              ; set time and date
788
789 ;-------------------------------------------------------------------------
790 ; Cartridge Address Equates
791 ;-------------------------------------------------------------------------
792
793 CARTCS  = $BFFA         ;##rev2## 2-byte cartridge coldstart address
794 CART    = $BFFC         ;##rev2## 1-byte cartridge present indicator
795                         ;0=Cart Exists
796 CARTFG  = $BFFD         ;##rev2## 1-byte cartridge flags
797                         ;D7  0=Not a Diagnostic Cart
798                         ;    1=Is a Diagnostic cart and control is
799                         ;      given to cart before any OS is init.
800                         ;D2  0=Init but Do not Start Cart
801                         ;    1=Init and Start Cart
802                         ;D0  0=Do not boot disk
803                         ;    1=Boot Disk
804 CARTAD  = $BFFE         ;##rev2## 2-byte cartridge start vector
805
806 ;-------------------------------------------------------------------------
807 ; CTIA/GTIA Address Equates
808 ;-------------------------------------------------------------------------
809
810 GTIA    = $D000         ;CTIA/GTIA area
811 .include "atari_gtia.inc"
812
813 ;-------------------------------------------------------------------------
814 ; PBI Address Equates
815 ;-------------------------------------------------------------------------
816
817 PBI     = $D100         ;##rev2## parallel bus interface area
818
819 ; Read Addresses
820
821 PDVI    = $D1FF         ;##rev2## parallel device IRQ status
822
823 ; Write Addresses
824
825 PDVS    = $D1FF         ;##rev2## parallel device select
826
827 ;-------------------------------------------------------------------------
828 ; POKEY Address Equates
829 ;-------------------------------------------------------------------------
830
831 POKEY     = $D200         ;POKEY area
832 .include  "atari_pokey.inc"
833
834 ;-------------------------------------------------------------------------
835 ; ANTIC Address Equates
836 ;-------------------------------------------------------------------------
837
838 ANTIC     = $D400         ;ANTIC area
839 .include  "atari_antic.inc"
840
841 ; PBI RAM Address Equates
842
843 PBIRAM  = $D600         ;##rev2## parallel bus interface RAM area
844
845 ; Parallel Device Address Equates
846
847 PDID1   = $D803         ;##rev2## parallel device ID 1
848 PDIDV   = $D805         ;##rev2## parallel device I/O vector
849 PDIRQV  = $D808         ;##rev2## parallel device IRQ vector
850 PDID2   = $D80B         ;##rev2## parallel device ID 2
851 PDVV    = $D80D         ;##rev2## parallel device vector table
852
853 ;-------------------------------------------------------------------------
854 ; PIA Address Equates
855 ;-------------------------------------------------------------------------
856
857 PIA     = $D300         ;PIA area
858
859 PORTA   = $D300         ;port A direction register or jacks one/two
860 PORTB   = $D301         ;port B direction register or memory management
861
862 PACTL   = $D302         ;port A control
863 PBCTL   = $D303         ;port B control
864
865 ;-------------------------------------------------------------------------
866 ; Floating Point Package Address Equates
867 ;-------------------------------------------------------------------------
868
869 AFP     = $D800         ;convert ASCII to floating point
870 FASC    = $D8E6         ;convert floating point to ASCII
871 IFP     = $D9AA         ;convert integer to floating point
872 FPI     = $D9D2         ;convert floating point to integer
873 ZFR0    = $DA44         ;zero FR0
874 ZF1     = $DA46         ;zero floating point number
875 FSUB    = $DA60         ;subtract floating point numbers
876 FADD    = $DA66         ;add floating point numbers
877 FMUL    = $DADB         ;multiply floating point numbers
878 FDIV    = $DB28         ;divide floating point numbers
879 PLYEVL  = $DD40         ;evaluate floating point polynomial
880 FLD0R   = $DD89         ;load floating point number
881 FLD0P   = $DD8D         ;load floating point number
882 FLD1R   = $DD98         ;load floating point number
883 PLD1P   = $DD9C         ;load floating point number
884 FST0R   = $DDA7         ;store floating point number
885 FST0P   = $DDAB         ;store floating point number
886 FMOVE   = $DDB6         ;move floating point number
887 LOG     = $DECD         ;calculate floating point logarithm
888 LOG10   = $DED1         ;calculate floating point base 10 logarithm
889 EXP     = $DDC0         ;calculate floating point exponential
890 EXP10   = $DDCC         ;calculate floating point base 10 exponential
891
892 ;-------------------------------------------------------------------------
893 ; Device Handler Vector Table Address Equates
894 ;-------------------------------------------------------------------------
895
896 EDITRV  = $E400         ;editor handler vector table
897 SCRENV  = $E410         ;screen handler vector table
898 KEYBDV  = $E420         ;keyboard handler vector table
899 PRINTV  = $E430         ;printer handler vector table
900 CASETV  = $E440         ;cassette handler vector table
901
902 ;-------------------------------------------------------------------------
903 ; Jump Vector Address Equates
904 ;-------------------------------------------------------------------------
905
906 DISKIV  = $E450         ;vector to initialize DIO
907 DSKINV  = $E453         ;vector to DIO
908 .ifdef __ATARIXL__
909 .ifndef SHRAM_HANDLERS
910 .import CIO_handler, SIO_handler, SETVBV_handler
911 .endif
912 .define CIOV    CIO_handler
913 .define SIOV    SIO_handler
914 .define SETVBV  SETVBV_handler
915 CIOV_org    = $E456     ;vector to CIO
916 SIOV_org    = $E459     ;vector to SIO
917 SETVBV_org  = $E45C     ;vector to set VBLANK parameters
918 .else
919 CIOV    = $E456         ;vector to CIO
920 SIOV    = $E459         ;vector to SIO
921 SETVBV  = $E45C         ;vector to set VBLANK parameters
922 ; aliases in order not to have to sprinkle common code with .ifdefs
923 CIOV_org    = CIOV
924 SIOV_org    = SIOV
925 SETVBV_org  = SETVBV
926 .endif
927 SYSVBV  = $E45F         ;vector to process immediate VBLANK
928 XITVBV  = $E462         ;vector to process deferred VBLANK
929 SIOINV  = $E465         ;vector to initialize SIO
930 SENDEV  = $E468         ;vector to enable SEND
931 INTINV  = $E46B         ;vector to initialize interrupt handler
932 CIOINV  = $E46E         ;vector to initialize CIO
933 BLKBDV  = $E471         ;vector to power-up display
934 WARMSV  = $E474         ;vector to warmstart
935 COLDSV  = $E477         ;vector to coldstart
936 RBLOKV  = $E47A         ;vector to read cassette block
937 CSOPIV  = $E47D         ;vector to open cassette for input
938 VCTABL  = $E480         ;RAM vector initial value table
939 PUPDIV  = $E480         ;##rev2## vector to power-up display
940 SLFTSV  = $E483         ;##rev2## vector to self-test
941 PHENTV  = $E486         ;##rev2## vector to enter peripheral handler
942 PHUNLV  = $E489         ;##rev2## vector to unlink peripheral handler
943 PHINIV  = $E48C         ;##rev2## vector to initialize peripheral handler
944 GPDVV   = $E48F         ;##rev2## generic parallel device handler vector
945
946 ; NOTE: OS rom self-test labels are not included in this file
947
948 ;-------------------------------------------------------------------------
949 ; Some misc. stuff from the 400/800 rev.B source
950 ;-------------------------------------------------------------------------
951
952 ; THE FOLLOWING ARE IN BASIC CARTRIDGE:
953 SIN     = $BD81         ;FR0 <- SIN (FR0) DEGFLG (0=RAD,6=DEG) CARRY
954 COS     = $BD73         ;FR0 <- COS (FR0) CARRY
955 ATAN    = $BE43         ;FR0 <- ATAN(FR0) CARRY
956 SQR     = $BEB1         ;FR0 <- ROOT(FR0) CARRY
957
958 RADON   = 0             ;INDICATES RADIANS
959 DEGON   = 6             ;INDICATES DEGREES
960
961 ASCZER  = '0'           ;ASCII ZERO
962 COLON   = $3A           ;ASCII COLON
963 CR      = $9B           ;SYSTEM EOL (CARRIAGE RETURN)
964
965 ;-------------------------------------------------------------------------
966 ; 6502
967 ;-------------------------------------------------------------------------
968
969 NMIVEC  = $FFFA
970 RESVEC  = $FFFC
971 IRQVEC  = $FFFE
972
973 ;-------------------------------------------------------------------------
974 ; BASIC
975 ;-------------------------------------------------------------------------
976
977 LOMEM   = $80           ;2-byte low memory pointer
978 VNTP    = $82           ;2-byte variable name table address
979 VNTD    = $84           ;2-byte variable name table end + 1
980 VVTP    = $86           ;2-byte variable value table
981 STMTAB  = $88           ;2-byte statement table address
982 STMCUR  = $8A           ;2-byte current statement pointer
983 STARP   = $8C           ;2-byte string and array table pointer
984 RUNSTK  = $8E           ;2-byte runtime stack address
985 BMEMTOP = $90           ;2-byte top of memory pointer
986 STOPLN  = $BA           ;2-byte stopped line number
987 ERRSAVE = $C3           ;1-byte error code
988 PTABW   = $C9           ;1-byte tab width
989
990 ;-------------------------------------------------------------------------
991 ; ATASCII CHARACTER DEFS
992 ;-------------------------------------------------------------------------
993
994 ATCLR   = $7D           ;CLEAR SCREEN CHARACTER
995 ATRUB   = $7E           ;BACK SPACE (RUBOUT)
996 ATTAB   = $7F           ;TAB
997 ATEOL   = $9B           ;END-OF-LINE
998 ATDELL  = $9C           ;delete line
999 ATINSL  = $9D           ;insert line
1000 ATCTAB  = $9E           ;clear TAB
1001 ATSTAB  = $9F           ;set TAB
1002 ATBEL   = $FD           ;CONSOLE BELL
1003 ATDEL   = $FE           ;delete char.
1004 ATINS   = $FF           ;insert char.
1005 ATURW   = $1C           ;UP-ARROW
1006 ATDRW   = $1D           ;DOWN-ARROW
1007 ATLRW   = $1E           ;LEFT-ARROW
1008 ATRRW   = $1F           ;RIGHT-ARROW
1009 ATESC   = $1B           ;ESCAPE
1010
1011 ;-------------------------------------------------------------------------
1012 ; OFFSETS INTO SECTSIZETAB (DIO functions)
1013 ;-------------------------------------------------------------------------
1014
1015 sst_flag     = 0        ; length 1
1016 sst_sectsize = 1        ;        2
1017 sst_driveno  = 3        ;        1  (drive #)
1018 sst_size     = 4        ; size of one entry
1019                         ; if changed, adapt diopncls.s
1020
1021 ;-------------------------------------------------------------------------
1022 ; OFFSETS INTO dio_phys_pos
1023 ;-------------------------------------------------------------------------
1024
1025 diopp_head   = 0        ; head
1026 diopp_track  = 1        ; track / cylinder
1027 diopp_sector = 3        ; sector
1028 diopp_size   = 5        ; size of structure
1029
1030 ;-------------------------------------------------------------------------
1031 ; VALUES for dos_type
1032 ;-------------------------------------------------------------------------
1033
1034 SPARTADOS    = 0
1035 REALDOS      = 1
1036 BWDOS        = 2
1037 OSADOS       = 3        ; OS/A+
1038 XDOS         = 4
1039 ATARIDOS     = 5
1040 MYDOS        = 6
1041 NODOS        = 255
1042 ; The DOSes with dos_type below or equal MAX_DOS_WITH_CMDLINE do support
1043 ; command line arguments.
1044 MAX_DOS_WITH_CMDLINE = XDOS
1045
1046 ;-------------------------------------------------------------------------
1047 ; XDOS defines (version 2.4, taken from xdos24.pdf)
1048 ;-------------------------------------------------------------------------
1049
1050 XOPT         = $070B    ; XDOS options
1051 XCAR         = $070C    ; XDOS cartridge address (+ $70D)
1052 XPAT         = $086F    ; XDOS bugfix and patch number
1053 XVER         = $0870    ; XDOS version number
1054 XFILE        = $087D    ; XDOS filename buffer
1055 XLINE        = $0880    ; XDOS DUP input line
1056 XGLIN        = $0871    ; get line
1057 XSKIP        = $0874    ; skip parameter
1058 .ifdef __ATARIXL__
1059 .ifndef SHRAM_HANDLERS
1060 .import XMOVE_handler
1061 .endif
1062 .define XMOVE XMOVE_handler
1063 XMOVE_org    = $0877    ; move filename
1064 .else
1065 XMOVE        = $0877    ; move filename
1066 .endif
1067 XGNUM        = $087A    ; get number
1068
1069 ;-------------------------------------------------------------------------
1070 ; End of atari.inc
1071 ;-------------------------------------------------------------------------