@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr ɛA voluntary payment of $2.50 isrequested for this disk. I will giveany technical support I can to thosewho have paid thi}s fee and include aS.A.S.E. with their questions. Write to the address on the title page.This disk contains the first hal}f ofa reference manual for Atari 8 bitcomputers. The manual is written forthe Atari 800 but updates for XL/XEmodels are }included.The files were written withATARIWRITER and for an Epson MX80.You should be able to load them intoanother word p}12 4 1 5 0 10 70 2 12 13227E27HAtari* System Reference manual(c) 1987 By Bob DuHamel }Bob Duhamel6915 Casselberry WaySan Diego, CA 92119*Atari is a registered trademark of Atari Cor }p.This manual contains highly technical information. Such information is provided for those who know how to use it. To } understand the advanced information you are expected to know 6502 assembly language. If you are new to programming, concent }rate on the parts which discuss BASIC commands. Information important to BASIC programmers is in 27Gbold27H print.Addres }ses are usually given in both hexadecimal and decimal numbers. The operating system equate names are given in capital letter }s with the address following in brackets. The decimal address is in parenthsis within the brackets. For example: DOSVEC [ }$000A,2 (10)] name hex decThe ",2" after the hexadecimal number means that this address requires two bytes to hol }d its' information. Any address called a "vector" uses two bytes whether noted or not.Control registers and some other byt }es of memory are shown in the following formatRegister format 7 6 5 4 3 2 1 0 ----------------- | } | ----------------- 1 6 3 1 8 4 2 1 2 4 2 6 8The numbers on top are the bit numbers. Bit 7 i }s the Most Significant Bit (MSB) and bit 0 is the Least Significant bit (LSB). The numbers on the bottom are the bit weights }. These are useful when changing memory with decimal numbers, as you would in BASIC. For example, to set bit 4 of a registe }r to 1, without changing any other bits you would add 16 to the decimal number already in the register. To reset the same bi }t to 0, you would subtract 16 from the number in the register. This is exactly what the command GRAPHICS 8+16 does. It sets } bits 3 and 4 of a graphics mode control register.MSB and LSB may also mean Most Significant Byte or Least Significant Byte }, depending on context.CONTENTS 1 THE CENTRAL INPUT/OUTPUT UTILITY, (CIO) 2 THE DISK OPERATING SYSTEM (D:) 3 } USING THE DOS 2 UTILITIES (DUP.SYS) 4 THE CASSETTE HANDLER (C:) 5 THE KEYBOARD HANDLER (K:) 6 PRINTER HANDLER } (P:) 7 SCREEN EDITOR (E:) 8 THE DISPLAY HANDLER (S:) 9 THE RESIDENT DISK HANDLER10 SYSTEM INTERRUPTS11 T }HE FLOATING POINT ARITHMETIC PACKAGE12 BOOT SOFTWARE FORMATS13 THE SERIAL INPUT/OUTPUT INTERFACE (SIO)14 THE HARD }WARE CHIPS15 DISPLAY LISTS16 PLAYER AND MISSILE (PM) GRAPHICS17 SOUND18 THE JOYSTICK PORTS19 MISC20 T }HE XL AND XE MODELSLAY LISTS16 PLAYER AND MISSILE (PM) GRAPHICS17 SOUND18 THE JOYSTICK PORTS19 MISC20 T 12 4 1 5 0 10 70 2 12 1321-@27E27HCHAPTER 1THE CENTRAL INPUT/OUTPUT UTILITY, (CIO)27GThe ATARI compu$}ter uses a very easy-to-use input and output system called the Central Input/Output utility, or CIO. Nearly all input or out$ }put passes through this utility.CIO uses eight "channels" as paths for I/O. There are not really separate channels for I/O$!} but the computer acts as if there were. 27HEach channel is controlled by a 16 byte block of memory called an Input/Output $"}Control Block or IOCB. The channels are used by putting the proper numbers in the proper IOCB bytes then jumping to the CIO $#}routine. 27GIn BASIC, complete I/O operations can be as easy as typing a command such as LPRINT. In this case BASIC does a$$}ll the work for you.THE CIO CHANNELSThere are eight CIO channels, numbered from 0 to 7. In BASIC some channels are reser$%}ved for BASIC's use.BASIC CIO channel assignments Channel 0 Permanently assigned to the screen editor 6$&} Used for graphics commands 7 Used for the Cassette, disk and printerChannels 6 and 7 are free to use whe$'}n they are not being used by BASIC. 27HWith machine language, all of the channels are available to the programmer.THE IOC$(}B STRUCTURE The IOCB for channel zero starts at address $0340 (decimal 832). This is the only address you need to know. I$)}ndexing from this address is used to find all of the other bytes. Below are the names and uses of the IOCB bytes.IOCB by$*}tes and uses:ADDRESS NAME EXPLANATION $0340 ICHID handler Identifier $0341 ICDNO device number (dis$+}k) $0342 ICCOM command $0343 ICSTA status $0344 ICBAL buffer address (low byte) $0345 ICBAH buffe$,}r address (high byte) $0346 ICPTL address of put byte $0347 ICPTH routine (used by BASIC) $0348 ICBLL b$-}uffer length (low byte) $0349 ICBLH buffer length (high byte) $034A ICAX1 auxiliary information $034B ICAX2$.} - $034C ICAX3 the remaining auxiliary $034D ICAX4 bytes are rarely used $034E ICAX5 - $034F ICAX$/}6 -ICHIDWhen a channel is open, the handler I.D. contains an index to the handler table. The handler table (to be di$0}scussed later) holds the address of the device handling routines. When the channel is closed ICHID contains $FF.ICDNOThe$1} device number is used to distinguish between multiple devices with the same name, such as disk drives.ICCOMThe command b$2}yte tells CIO what operation to perform.CIO command codes HEX DEC +Open $03 3 $3} +close $0C 12 get $07 7 put $09 11 input $05 5 print$4} $09 9 +status request $0D 13 +*special >$0D >13 + command may be made to a clos$5}ed channel * device specific commandsICSTAThe status byte contains an error code if something goes wrong. If bit 7 i$6}s 0 there have been no errors.ICBAL and ICBAHBefore a channel is opened, the buffer address bytes are set point to the bl$7}ock of memory which contains the name of the device the channel is to be opened to. Before actual input or output these byte$8}s are set to point to the block of memory where the I/O data is stored or is to be stored.ICPTL and ICPTHThe put routine $9}pointer is set by CIO to point to the handlers' put-byte routine. When the channel is closed the pointer points to the IOCB-$:}closed routine. This pointer is only used by BASIC.ICBLL and ICBLHThe buffer length bytes show the number of bytes in th$;}e block of memory used to store the input or output data. (See ICBAL and ICBAH.) If the amount of data read during an input$<} operation is less than the length of the buffer, the number of bytes actually read will be put in ICBLL and ICBLH by CIO.I$=}CAX1 through ICAX6The auxiliary information bytes are used to give CIO or the device any special information needed.D:C$>}HAP1.1rough ICAX6The auxiliary information bytes are used to give CIO or the device any special information needed.D:C$27GOPENNING A CIO CHANNELBefore using a CIO channel it must be assigned to an I/O device. 27HIn machine language you sta(@}rt by putting the channel number in the four high bits of the 6502 X register (X = $30 for channel three). Next you place th(A}e necessary codes (parameters) into IOCB 0 indexed by X. The X register will cause the numbers to be offset in memory by 16 (B}times the channel number. This puts the numbers into the correct IOCB instead of IOCB 0. Below are the parameters used to o(C}pen a channel.Channel-open parameters: ICCOM open code ICBAL address of device name ICBAH in memory ICAX(D}1 direction code ICAX2 zeroThe direction code byte in ICAX1 takes on the following format:ICAX1 format for open(E}ing a channel 7 6 5 4 3 2 1 0 ----------------- ICAX1 | W R | ---------(F}-------- 8 4 2 1 W 1 = open for output (write) R 1 = open for input (read)ICAX1 may have the fo(G}llowing data27GCIO direction codes HEX DEC operation $04 4 input $08 8 output $0C(H} 12 input and output (cannot change the length of a disk file)27HICBAL and ICBAH point to the device (I}name stored in memory. The device and file name must be followed by 0 or $9B (decimal 155).Once the parameters are set, ju(J}mping (JSR) to the CIO vector(CIOV) at address $E456 (58454) will cause the channel to be opened. In the following exampl(K}e a basic knowledge of assembly language is assumed.Routine to open channel 1 to the keyboard: ICHID = $0340 (L} ICCOM = ICHID+2 ICAX1 = ICHID+10 ICAX2 = ICHID+11 IOCB1 = $10 channel in four high bits CI(M}OV = $E456 OPEN = $03 OREAD = $04 ;open for input ERROR = (address of error handling routine) ;(N} START LDX IOCB1 LDA OPEN STA ICCOM,X LDA NAME STA ICBAH,X (O} LDA OREAD STA ICAX1,X LDA #0 STA ICAX2,X JSR CIOV BPL OK JMP ERROR ; N(P}AME .BYTE "K:",$9B OK (program continues here)27GTo open a CIO channel in BASIC the OPEN command is used. BASIC (Q}OPEN command format: OPEN #channel,aux1,aux2,device:file name aux1 = direction code aux2 = special codeTo open(R} channel 1 to the keyboard in BASIC Type: OPEN #1,4,0,"K:"The third parameter, aux2, is a rarely used special paramete(S}r. One use is to keep the screen from erasing when changing graphics modes.The fourth parameter is the device to open the (T}channel to. It may be either a string in quotes or a string variable.CIO device names C cassette recorder *(U}D disk drive E screen editor K Keyboard P printer *R RS 232 I/O port S screen handler (V} * Uses a non-resident handler loaded by the device at power-up.The device name must usually be followed by a colo(W}n. With the disk drive a file name is expected after the device name. The screen handler is used for graphics. The screen (X}editor uses both the keyboard handler and the screen handler to work between the keyboard and screen.D:CHAP1.2The screen (r27GUSING AN OPEN CHANNELOnce a channel is opened to a device you have several options:INPUT:27H (ICCOM = $05)27GThe,Z} computer reads data from the device until a carriage-return is read (decimal number 155, hex $9B) or the end of the file (EO,[}F) is reached. A carriage return is also known as an End-Of-Line or EOL. 27HThe IOCB input parameters are:IOCB input pa,\}rameters: ICCOM get record code ICBAL address of buffer to ICBAH store the data in ICBLL length of the data,]} ICALH bufferThe following routine demonstrates the input command in assembly language. Some of the equates are in th,^}e channel openning example above.Input routine: GETREC = $05 BUFF = (address to store data at) ,_}BUFLEN = (number of bytes available at storage address) : LDX IOCB1 LDA GETREC STA ICCOM,X ,`} LDA < BUFF STA ICBAL,X LDA > BUFF STA ICBAH,X LDA < BUFLEN STA ICBLL,X L,a}DA > BUFLEN STA ICBLH,X JSR CIOV BPL OK2 JMP ERROR : OK2 (continues if no errors),b}If the data retrieved is shorter than the prepared buffer, the number of bytes actually read will be put into ICBLL and ICBL,c}H.27GIn BASIC, the INPUT command is used.BASIC INPUT command format: INPUT #channel,string variableor INPUT #ch,d}annel,arithmetic variableFor example: INPUT #1,IN$The above commands will cause the data from the device to be put int,e}o the specified buffer (IN$ in the BASIC example) until an EOL is reached. If the INPUT statement is used again, without clo,f}sing the channel, the computer will get more data from the device until another EOL is read or the end of the file is reached,g}. The new data will write over the old data in the input string or buffer. If an arithmetic variable is used, only numbers ,h}can be input.PRINT: 27H(ICCOM = $09)In assembly language the print command is identical to the input command. The only,i} difference is that the PUTREC code ($09) is stored in ICCOM. Of course the buffer bytes of the IOCB then specify the block ,j}of memory to be output from rather than input to. With the print command, EOLs within the string or buffer are ignored but a,k}n EOL is placed at the end of the data when sent to the device.27GIn BASIC, the PRINT command is used like INPUT except yo,l}u want to use a semicolon instead of a comma to separate parameters. For example: PRINT #1;OUT$or PRINT #1;"HELLO"I,m}f you use a comma, ten space characters will be sent before the string.If the print command is used again, without closing ,n}the channel, the new data will be appended to the end of the data previously sent. Old data will not be written over.GET:,o} 27H(ICCOM = $07)27GIn BASIC this command inputs a single byte of data from the device. EOLs are ignored. In BASIC, GE,p}T is used like INPUT except an arithmetic variable must be used. For example: GET #1,INIf the get command is used again ,q}the next byte from the device will be read. If the end of a file is reached an error will occur.There is no command in BAS,r}IC to input an entire file without stopping at each EOL. If you wish to ignore EOLs while reading a file to a string, you mu,s}st use the GET command. Each byte of data is then put into the string by the program.EXAMPLE: 10 OPEN #1,4,0,"D:TEST" 2,t}0 TRAP 60:REM GOES TO LINE 60 WHEN END OF FILE ERROR OCCURS 30 GET #1,IN 40 IN$(LEN(IN$)+1)=CHR$(IN) 50 GOTO 30 60 CLOSE ,u}#127HIn assembly language, the get command can be used to get any number of bytes from the device. It works just as INPU,v}T does except EOLs are ignored.IOCB get-byte parameters: ICCOM get-character (single byte) code ICBAL \ ICBAH ,w}same as in input ICBLL ICBAH /Other than the ICCOM code (GETCHR = $07) this command is identical to the input command.,x}27GPUT: 27H(ICCOM = $0B)27GIn BASIC, PUT is the opposite of GET. It outputs a single byte from a variable to the devi,y}ce. PUT is used the same as GET. For example: PUT #1,OUT27HIn assembly language, the command byte of the IOCB is load,z}ed with the put-character code (PUTCHR = $0B). Otherwise the PUT command is identical to GET.27GCLOSING A CHANNELClosin,{}g a channel frees it for use by another device or for changing parameters. 27HIn assembly language the close code is put in,|}to the command byte of the IOCB then the CIOV call is made.IOCB close command: CLOSE = $0C : LDX IOCB,}}1 LDA CLOSE STA ICCOM,X JSR CIOV27GIn BASIC, use the CLOSE command followed by the channel number. ,~}CLOSE #1With the disk drive, the file name is not put into the directory until the channel is closed.27HTHE DEVICE TABLE,}CIO uses a jump table located at $031A (794). When a CIO call is made, CIO searches the table for the one-byte device name,}. The two bytes following the device name contain the address of the device handler's vector table. CIO searches the device,} table from the end, $033D (829) to the beginning. This way, if a custom handler has ben substituted for a resident handler,,} the custom handler will be found first. (custom handlers cannot be inserted directly in the place of resident handlers in t,}he device table.)Each handler has its' own vector table. This vector table is 16 bytes long. The two-byte vectors point t,}o the various handler routines. The vectors are stored in the vector table in the following order:Handler vector table o,}rder open close get byte put byte get stat special JMP init code (3 bytes)The open rout,}ine should validate the ICAX parameters and check for illegal commands.The close routine should send any remaining data in ,}the buffer to the device, mark the End-Of-File and update any directories, etc.The get byte routine should get a byte from ,}the device or the handler buffer and put it in the 6502 A register. Handlers with long timouts must monitor the break key fl,}ag and put a $80 in the 6502 Y register if the [BREAK] key is pressed.The put byte routine should send the byte in the 6502,} A register to the device or handler buffer. If the buffer fills, it should be sent to the device. BASIC can call the put b,}yte routine without using CIO.The get status routine may get 4 bytes of status information from the device and put them in ,}DVSTAT [$02EA] to DVSTAT+3.For special commands the handler must examine the command byte and find the proper routine entry,} point.In all cases the status (error code) of the operation should be put in the 6502 Y register.To be compatible with a,}ll versions of the operating system, the handler must redirect DOSINI [$000C,2 (12)] for initialization upon reset. This ini,}tialization must restore the vectors in the handler vector table and jump to the origional DOSINI vector.27GSPECIAL COMMAN,}DSSome devices have special CIO commands. These are known as device specific commands. In assembly language these command,}s are executed just as any other CIO command is. In BASIC the XIO command is used. An example of the XIO command is: XIO,} command code #channel,aux1,aux2,device:file nameTo open a channel with the XIO command instead of the OPEN command use: ,}XIO 3 #1,4,0,"K:"Note that the above command is identical to the OPEN command except "XIO 3" is used instead of "OPEN". 2,}7HAlso note that $03 is the IOCB open code for ICCOM. 575Useful database variables and OS equatesDOSINI $000C,2 ,} (12): initialization vectorBRKKEY $0011 (17): break key flagICHID $0340 (832): start of IOCBsICDNO $034,}1 (833):ICCOM $0342 (834):ICSTA $0343 (835):ICBAL $0344 (836):ICBAH $0345 (837):I,}CPTL $0346 (838):ICPTH $0347 (839):ICBLL $0348 (840):ICBLH $0349 (841):ICAX1 $034A ,} (842):ICAX2 $034B (843):HATABS $031A,16 (794): device handler tableCIOV $E456 (58454): CIO entry vect,}or842):ICAX2 $034B (843):HATABS $031A,16 (794): device handler tableCIOV $E456 (58454): CIO entry vect,12 4 1 5 0 10 70 2 12 1322-@27E27HCHAPTER 2THE DISK OPERATING SYSTEM (D:)27GThe disk operating syste0}m program (DOS) is also called the file management system (FMS). DOS is not a permanent part of the computer, it is loaded i0}n upon power-up if a disk drive is attached to the computer.When the computer is turned on, one of the first things it does0} is send a request to the disk drive to load DOS into the computer. This startup operation is called booting. The word boot0} is short for bootstrapping -- the start-up process of early computers. The term comes from "lifting one's self by one's boo0}t straps".27HAnytime the disk boots, the computer tries to read a program starting at sector 1 and continuing in sequence.0} If the disk has DOS on it, the first three sectors, called the boot record, have a program which loads the DOS.SYS file. 0}27GIf there is no DOS.SYS file on the disk the computer will display: -------------------- | BOOT ERROR | | BO0}OT ERROR | | BOOT ERROR | | BOOT ERROR | | BOOT ERROR | | BOOT ERROR | | (etc.0}) | | | | | -------------------- 27HWhen a disk is formatted, the dri0}ve read/write head passes over the entire disk and puts magnetic marks on it. These marks divide the disk into 32 concentric0} tracks. With DOS 2.0 each track is divided into 18 sectors, each holding 128 bytes of data. With DOS 2.5 there are 32 sect0}ors per track giving a total of 1,024 sectors.Each sector on the disk is marked with a reference number from 1 to 720. Unf0}ortunately, the writers of DOS 2.0 didn't know this so they wrote the DOS to use sectors numbered from 0 to 719. As a result0}, DOS 2.0 cannot access sector 720. The designers of the disk drive were the guilty party in this case. It is normal to num0}ber from 0 in computers. With DOS 2.5, sectors 720 - 1,024 can be accessed normally.Sector 720 can be accessed using the 0}computer's resident disk handler. Some software writers use sector 720 to hide special information to make their programs di0}fficult to copy.DOS 2 SECTOR ASSIGNMENTSSectors 1 through 3 are called the boot record. They contain a program which lo0}ads the DOS.SYS file into memory. Sector 360 is called the Volume Table of Contents or VTOC. The main purpose of the VTOC 0}is to keep track of what sectors are occupied. Bytes 3 and 4 of the VTOC tell how many sectors are available. Starting at b0}yte 10 is the Volume Bit Map. Each byte in the VBM tells the status of eight sectors. If a bit is a 1 the sector is availab0}le. If a bit is a 0 the sector is occupied.Sectors 361 through 368 contain the disk directory. Each directory sector hold0}s eight file names. The first byte of a file name is called the flag byte. It tells the status of that file.Directory f0}lag byte. 7 6 5 4 3 2 1 0 ----------------- | flag byte | -----------------Bits: 7 1 = file de0}leted 6 1 = file in use 5 1 = file locked 0 1 = open for outputThe next two bytes tell how many0} sectors are in the file. The two bytes after them tell the starting sector of the file. The last 11 bytes contain the file0} name.Sector 720 cannot be accessed with DOS 2.0.The boot record, VTOC, directory and sector 720 use 13 sectors. This le0}aves 707 sectors for storing files with DOS 2.0.Each file sector has 125 bytes of data. The last three bytes tell how many0} bytes of the sector are used, what directory entry the sector belongs to and which sector is next in the file.File secto0}r structure 7 6 5 4 3 2 1 0 ----------------- | data | byte 0 - - - - | byt0}es | byte 124 ----------------- | Dir. No. |hi | byte 125 ----------------- |forward pointer| byte 10}26 ----------------- |S| byte count | byte 127 ----------------- hi = high 2 bits of forward pointer 0} S = Short sector flag. 1 = short sector (End Of File)If the directory number does not match the order of the file name0} in the directory, an error 167 (file number mismatch) will occur.As a file is written to an empty disk it is put in conse0}cutive sectors, 125 bytes at a time. After the file is written, the VTOC and directory are updated. When new files are writ0}ten they also use consecutive sectors.When a file is deleted the status bit of the directory is changed to show that the fi0}le has been deleted. DOS then tracks the file, sector by sector, to find what sectors are used. Finally the VTOC is updated0} to show that the deleted file's sectors are available for new files. The file is not erased from the disk; only the VTOC an0}d directory are changed.When a file is deleted, an "island" of free sectors may be left on the disk. When a new file is th0}en written to the disk it will first use these new free sectors. When the island is used up, DOS will skip over the occupied0} sectors to the next free sector. This is the reason for the sector link. A file can end up with it's sectors scattered all0} over a disk. It can be complicated but it's efficient.D:CHAP2.1link. A file can end up with it's sectors scattered all0EDISK FILE STRUCTURE27HThe first few bytes of a file may tell DOS or another program what kind of file it is. These infor4}mation bytes are called a header.A text file is any file which has no header. A listed BASIC program is a type of text fil4}e. A letter from a word processor is another.A binary load file is a file intended to load to a specific address in memory4}. The first two bytes of a binary load file are decimal 255. The next two bytes hold the address at which the file is to lo4}ad. The last two header bytes tell the ending address for the file. If the file is a program and is to run automatically, t4}he initialization and run address are appended to the end of the file.binary load file header Decimal Hexa4}decimal 255 identifier FF 255 FF 0 start 00 7 074} 15 end FF 8 08The above file would load at address $0700 (1792 decimal) and end4} at address $08FF (2063). If a binary load file has initialization and run address appended to it they take on the following4} format:Init and run tailer CHR Decimal Hexadecimalinit address format [b] 226 identifier E24} | 2 02 [c] 227 E3 | 2 02 n address nn 4} n nnrun address format [diamond] 224 identifier E0 | 2 02 [a] 4} 225 E1 | 2 02 n address nn n nn [ ]=inve4}rse videoA program which doesn't need special initialization can be run at the init address. Otherwise, an RTS instructio4}n is expected at the end of the initialization section. The computer will then jump to the run address if specified.INSID4}E THE COMPUTERDOS uses the computer's CIO utility. When a DOS disk is booted a non-resident handler is loaded into memory.4} A new handler name, D, is then added to the handler table. When CIO is called with a device name of D: or Dn:, CIO will se4}arch the handler table for that device name. If the 'D' is found, the next two bytes in the table point to the DOS entry add4}ress.27GDOS FILE NAME CONVENTIONSDOS is unique among CIO handlers in that it requires an eight character file name to fo4}llow the device name. This file name may be followed by a period and then a three character extender.EXAMPLES: D:TEST, D24}:FIREMAN, D:VENTURE.EXE, D:CHAPTER.001The D2: is used for drive number two if present.The file name must use upper-case 4}letters or numbers. The first character must always be a letter. WILD CARDSThe characters * and ? may be used as wild c4}ards. * means any combination of characters and ? means any single character.EXAMPLES: D:P* any file beginning 4}with P and without an extender D:*.EXE any file with the extender .EXE D4}:*.* any file. D:F?REMAN one unknown character, FIREMAN or FOREMAN will mat4}chWild cards can only be used to load, delete, lock and unlock files. When loading a file using wild cards, only the firs4}t matching file will be loaded.When renaming a file, both the new and old names are expected after the device name.EXAMPL4}E: D:OLDNAME.BAS,NEWNAME.BASTo format a disk, only the device name (D: or Dn:) is needed.USING DOSWhen a CIO channel i4}s opened to the disk drive it must actually be opened to a specific file on the disk. The device name in the open command mu4}st be followed by a file name.When a channel is opened to the disk, two special parameters may be used in ICAX1.27HICAX4}1 for disk open: 7 6 5 4 3 2 1 0 ----------------- | W R D A| -----------------4} D 1 = open to read the directory instead of a file A 1 = append data to the end of the fileThis gives the following 4}extra ICAX1 options.27GDisk specific ICAX1 options: HEX DEC $06 6 open to read director4}y $09 9 output, append to the end of an existing fileREADING THE DIRECTORYWh4}en the directory is read, each file name is treated as if it were followed by an EOL. A loop must be used to read all of the4} file names in the directory. The last entry read is the free sector count. After it is read, another read operation will r4}esult in an End-Of-File error.The disk drive has a number of device specific commands other than the regular CIO commands. 4} From BASIC the XIO command is used to access these commands. 27HThe XIO command allows you to directly load the IOCBs from4} BASIC. Each parameter of the XIO command places values in certain bytes of an IOCB.27GXIO command format: XIO comma4}nd channel,aux1,aux2,device:file nameNote that the parameters resemble the BASIC OPEN command. The BASIC OPEN command is 4}identical to it's equivalent XIO command.XIO commands specific to the disk drive.RENAME XIO $20 (32)DELETE XI4}O $21 (33)LOCK XIO $23 (35)UNLOCK XIO $24 (36)POINT XIO $25 (37)NOTE XIO $26 (38)FORMAT 4} XIO $FE (254)EXAMPLES: XIO 33 #1,0,0,"D:JUNK" = delete file named D:JUNK XIO 32 #1,0,0,"D:OLD,NEW" = change name o4}f D:OLD to D:NEWNOTE and POINT can also be used directly from BASIC. NOTE finds the current position of the read/write he4}ad on the disk. POINT moves the read/write head to the desired position.USING NOTE AND POINTThe command format for NOTE 4}and POINT is as follows: NOTE \ channel,sector,byte POINT/EXAMPLE: NOTE #1,SECT,BYTEBASIC requires the se4}ctor and byte parameters in both commands to be variables. Fixed numbers cannot be used. If you try to do a POINT to a sect4}or outside the file the channel is open to, a point error will occur. Care may need to be taken to be sure the file being ac4}cessed is in contiguous sectors on the disk. If it is not, it will be difficult to know where to do points to.One use of N4}OTE is to use the command immediately after opening a channel to a disk file. After the NOTE command, the parameter variable4}s contain the coordinates of the first byte of the file. They can then be used as a reference for the POINT command.27HIn4} assembly language, ICAX3 and ICAX4 are used for the sector number (lsb,msb). ICAX5 is used for the byte number.STATUS REQ4}UESTIf the status request command is used, one of the following values will be found in ICSTA and the 6502 Y register. 4} HEX DEC $01 1 OK $A7 167 file locked $AA 170 file not found 4{12 4 1 5 0 10 70 2 12 1323-@27E27HCHAPTER 3USING THE DOS 2 UTILITIES (DUP.SYS)If you boot a DOS disk 8}with no cartridge in the slot or with BASIC disabled (by holding the OPTION key), DOS will try to load the file named DUP.SYS8}. This is the disk utility file. When using BASIC, typing DOS [RETURN] will load the DUP.SYS file. When the utilities are 8}loaded the menu will appear on the screen.THE DOS UTILITIES MENUDISK OPERATING SYSTEM II VERSION 2.0SCOPYRIGHT 1980 ATA8}RIA. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDGE J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S8}) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRESSF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE D9}ISKH. WRITE DOS FILES SELECT ITEM OR [RETURN] FOR MENU[A] DIRECTORYAfter pressing [A] [RETURN] you will get the promp9}t: DIRECTORY--SEARCH SPEC,LIST FILE?If you want to see the entire directory just press [RETURN] again. If you wish, you 9}may type in a specific file name (D: is optional) or wild cards to search for. If you specify a search spec only matching fi9}les will be displayed.If you want, you can have the directory sent to another device. To do this type a comma and the devi9}ce name. For example, if you type ,P: the directory will be sent to the printer.[B] RUN CARTRIDGEIf a cartridge was inse9}rted or BASIC was not disabled when the computer was turned on, [B] [RETURN] will run that cartridge or BASIC.[C] COPY FIL9}EThis option will copy a file to another part of the same disk (with a different file name) or copy from one disk drive to 9}another. When you press [C] [RETURN] you will be given the prompt: COPY--FROM,TOType the devices and file names separate9}d by a comma.EXAMPLES:FOREMAN,FIREMANorD1:TEST,D2:TESTThe first example will copy to the same disk. The seco9 }nd example will copy from disk drive one to disk drive two.If you want to have the first file appended to the end of the se9 }cond file type /A after the file names.EXAMPLE:RUNMENU.EXE,AUTORUN.SYS/AIf the files are binary load files, this wi9 }ll cause both files to be saved as one file. When the load command is used they will both be loaded and run.[D] DELETE FIL9 }E(S)After pressing [D] [RETURN] you will get the prompt: DELETE FILE SPECAfter typing the file name you will be asked t9 }o confirm the file to delete. DELETE FILE SPEC DELETE-D1:JUNK ARE YOU SURE?Press [Y] if the correct file is displayed. 9}If you use wild cards you will be asked to confirm each matching file.[E] RENAMEUpon typing [E] [RETURN] you will be giv9}en the prompt: RENAME-GIVE OLD NAME,NEWType the file name you want to change and the new name separated by a comma.EX9}AMPLE:COLT,HORSEWARNING! Do not rename a file to a name which already exists on the disk. You will end up with a dupl9}icate file name and will not be able to access one of them. Attempting to rename or delete one of them will rename or delete9} both. The only way to fix a duplicate file name is with a sector editor or other special utility.[F] LOCK FILEA locked 9}file cannot be written to, renamed or deleted. To lock a file type [F] [RETURN]. You will get the prompt: WHAT FILE TO LO9}CK?Type the file name you want to lock. Wild cards will cause all matching files to be locked.[G] UNLOCK FILEUsed the 9}same as lock.[H] WRITE DOS FILESThis option will write the DOS.SYS and DUP.SYS files to a formatted disk. When you type 9}[H] [RETURN] you will receive the prompt: DRIVE TO WRITE DOS FILES TO?Type the number of the drive. If the drive contain9}s a formatted disk the dos files will be written to it.[I] FORMAT DISKThis option formats a new disk or erases a disk wi9}th files on it. Typing [I] [RETURN] will get you the prompt: WHICH DRIVE TO FORMATBe sure you have the correct disk in t9}he proper drive then type the drive number. It is impossible to recover files on a disk formatted by accident.While the di9}sk is being formatted the drive will check to be sure the disk is formatted correctly. If not, the drive attempt to format t9}he disk again. If the disk is defective the drive will not finish the formatting process.[J] DUPLICATE DISKThis option w9}ill copy an entire disk except for sectors listed as free in the VTOC. Some programs are copy-proofed by changing the VTOC t9}o show that some occupied sectors are empty. For such disks, a program which copies the entire disk is needed.When you pre9}ss [J] [RETURN] you will be given the prompt: DUP DISK--SOURCE,DEST DRIVES?If you are using only one disk drive, type 1,19}. If you have only one drive you will be told when to swap disks.[K] BINARY SAVEThis option saves a block of memory as a9 } binary load file. When you type [K] [RETURN] you will be given the prompt: SAVE-GIVE FILE,START,END(,INIT,RUN)Type the 9!}desired file name and a comma. Now type the start and end addresses of the memory block to be saved, in hexadecimal numbers,9"} separated by commas. If the file is a program which is to automatically run when loaded, give the initialization address, i9#}f needed, then the run address.EXAMPLE:CHASE.EXE,0700,09FF,,0700This will save the block of memory from address 079$}00 to 09FF. The program is not initialized before running so there is no address typed after the third comma. When the prog9%}ram is loaded the computer will jump to address 0700, as specified in the last parameter, to run the program.[L] BINARY LOA9&}DTo load a binary file type [L] [RETURN]. You will get the Prompt: LOAD FROM WHAT FILE?Type the file name and the file 9'}will be loaded. If wild cards are used, only the first matching file will be loaded.[M] RUN AT ADDRESSTyping [M] [RETURN9(}] will get the prompt: RUN FROM WHAT ADDRESS?Type the hexadecimal address of the program you want to run.[N] CREATE MEM9)}.SAVA MEM.SAV file is used by BASIC and some other programs to save the part of memory which the DUP.SYS file loads into. 9*}If there is no MEM.SAV file on the disk when you go to the DOS utilities, you will loose that part of memory. With BASIC you9+} will loose your program.When you type [N] [RETURN] you will get the prompt: TYPE Y TO CREATE MEM.SAVTyping [Y] [RETURN9,}] will create a MEM.SAV file on the disk in drive one.[O] DUPLICATE FILEThis option is used to copy a file from one disk 9-}to another, using only one disk drive. When you type [O] [RETURN] you will get the prompt: NAME OF FILE TO MOVE?If you 9.}use wild cards you will be asked to swap disks for each matching file.DOS 2.5 also has option:[P] FORMAT SINGLEDOS 2.59/} normally formats disks to use "enhanced" density. This option will format a disk in single density for use with the 810 dri90}ve.DOS 2.5 also has some special utilities on the master disk. Use the binary load option to run them.RAMDISK.SYSThis 91}program will cause the extra bank of memory in the 130XE to act like a disk drive (called D8:). If this program is on the di92}sk it will automatically run. It need not be renamed to AUTORUN.SYS.COPY32.COMCopies DOS 3 files to DOS 2.DISKFIX.COM93}Can make certain "repairs" to a disk, such as restoring deleted files.SETUP.COMUsed to change the default configuration 94}of DOS.AUTORUN.SYS (DOS 2.0 and 2.5)This program is needed to operate the RS-232 ports on the 850 interface. If you don'95}t want this program to automatically load when you boot with the master disk, rename the file to RS232.SPECIAL DOS INFORMAT96}IONWhen DOS is in memory, changes can be made to the DOS program. These changes can be made by poking the changes into mem97}ory. If you want to make the changes permanent, you can type DOS [RETURN] to load the utilities. From the utilities menu yo98}u can use the write DOS files option to save the changes on disk. Some of the useful changes you can make follow. POKE 1999}13,80This turns off the write verify and speeds up disk writing. POKE 1913,87This turns write verify on POKE 5903,49:}2 POKE 5904,46 POKE 5905,82 POKE 5906,85 POKE 5907,78 POKE 5908,155This causes any binary file with the extender .RUN 9;}to be loaded automatically when the computer is turned on. POKE 5903,65 POKE 5904,85 POKE 5905,84 POKE 5906,79 POKE 599<}07,82 POKE 5908,85This returns the DOS to normal, Automatically loading files named AUTORUN.SYS. DOS 2.0 9=}DOS 2.5 POKE 3772,255 POKE 3818,64 POKE 3774,64 POKE 3822,123 POKE 3778,123This will cau9>}se DOS to accept lower-case as well as upper-case letters in file names. It will also now accept @,[,\,],^ and _ . 9?} POKE 3772,223 POKE 3818,65 POKE 3774,65 POKE 3822,91 POKE 3778,91 This will change DOS back to 9@}normal, accepting only upper-case letters and numbers.4,65 POKE 3822,91 POKE 3778,91 This will change DOS back to 8712 4 1 5 0 10 70 2 12 1324-@27E27HCHAPTER 4THE CASSETTE HANDLER (C:)27HThe cassette handler sends da=B}ta to the cassette recorder in blocks of 128 bytes each. The blocks are sent in the following format:Cassette record for=C}mat ----------------- |0 1 0 1 0 1 0 1| speed measurement bytes ----------------- |=D}0 1 0 1 0 1 0 1| ----------------- | control byte | ----------------- | 128 =E} | = data = | bytes | ----------------- | checksum | handled =F}by SIO -----------------The control byte may have one of the following values. $FC (252) record is full.=G} $FA (250) partly full, next record is EOF. $FE (254) EOF record, data section is all zeroes.The cassette handle=H}r has two modes of operation. The first mode uses only a short gap between records. It is called the no IRG (interrecord ga=I}ps) mode. The second mode uses longer gaps between records and is called the IRG mode. In the IRG mode the computer may sto=J}p the cassette recorder between records for processing data.When a channel is opened to the cassette recorder, bit 7 of ICA=K}UX2 may be set to 1 (ICAX2 = $80 (128)). This will cause the cassette to use the no IRG mode.A cassette file starts with a=L} 20 second mark tone. This tone is followed by the file records with 128 data bytes each. The final record is an End-Of-Fil=M}e record.27GThe cassette is a straight-forward read/write device. There are no special functions other than those common =N}to other CIO devices.27HThe cassette motor is controlled by one of the controller port control registers. If bit 3 of PAC=O}TL [$D302 (54018)] is 0 then the cassette motor is on. 27GThe following BASIC commands will turn the cassette motor on and =P}off.Cassette motor control. POKE 54018,PEEK(54018)-8 motor on POKE 54018,PEEK(54018)+8 motor off 57527H=Q}Useful data base variables and OS equatesPACTL $D302 (54018): port A control register, bit 4 =R} controls cassette motoruatesPACTL $D302 (54018): port A control register, bit 4 <$12 4 1 5 0 10 70 2 12 1325-@27E27HCHAPTER 5THE KEYBOARD HANDLER (K:)27GThe keyboard is a read only dAT}evice and therefore the keyboard handler has no output functions.The keyboard handler reads the keys as ATASCII codes. EacAU}h key is represented by one byte of data. Therefore, each time a key is pressed the data is treated as a byte of data just aAV}s data from any other device is. The only difference is that the computer must wait for the operator to press the keys as itAW} reads the data.27HWhenever a key is pressed an IRQ interrupt is generated by the keyboard reading hardware. The internalAX} code (not ATASCII) for the key just pressed is then stored in CH [$02FC (764)]. The code is then compared with the prior keAY}y code in CH1 [$02F2 (754)]. If the code in CH1 is different from the code in CH, the key is accepted. The code is then conAZ}verted to ATASCII, and placed in the database variable ATACHR [$02FB (763)]. On XL and XE models, KEYDEF [$0079,2 (121)] poiA[}nts to the key-code-to-ATASCII conversion table. (This address is used by the the screen handler in 400/800 models).If theA\} code in CH1 is the same as the code in CH, the new key code will not be accepted unless the key debounce timer, KEYDEL [$02FA]}1 (753)] is 0.When CIO is told to do an input operation from the keyboard, CH is checked to see if a key has been pressed. A^} If CIO finds $FF (255) in CH, it waits until a key is pressed. If CH is not $FF, a key has been pressed and the ATASCII codA_}e for that key is taken from ATACHR. CH is then set to $FF.The data in CH is in the following format.Key code format:A`} 7 6 5 4 3 2 1 0 ----------------- |C|S| key code | ----------------- C 1 = [CTRL] Aa}key is pressed S 1 = [SHIFT] key is pressedAnytime a key is pressed, CH is loaded with the key code. CH will hold the cAb}ode until the computer is commanded to read the keyboard. 27GSometimes the computer will read a key which was pressed long Ac}ago. If you want to prevent this, load CH with $FF before reading the keyboard. (In BASIC use POKE 764,255.) This will cleAd}ar out any old key pressings.Special function keys [CTRL][1] screen output start/stop [CTRL][2] BELAe}L [CTRL][3] Generates End-Of-File status [/|\] or [/] inverse video toggle [CAPS LOWAf}ER] sets lower case [CTRL][CAPS] sets CTRL lock [SHIFT][CAPS] sets caps lock27HKEYBOARD REPEAT DELAY AND RAAg}TE CONTROLOn the XL and XE, KRPDEL [$02D9 (729)] determines the delay before the key repeat begins. The value of this byteAq}?BAtari 8 bitBReference BManual B by BBob BDuHamel B B README BCHAP0 B!CHAP1 B?CHAP1 1 BAYCHAP1 2 B*CHAP2 B6CHAP2 1 BGCHAP3 BACHAP4 B(SCHAP5 BCHAP6 BCHAP7 B4CHAP8 B2CHAP8 1 B#CHAP8 2 B,(CHAP8 3 B!TCHAP9 B&uCHAP10 B'CHAP10 1 is the number of vertical blanks (1/60th second each) to delay. KEYREP [$02DA (730)] determines the repeat rate in verticalAr} blanks.KEYBOARD CLICKThe keyboard click of the XL/XE is heard through the TV speaker. The click may be turned off by puAs}tting $FF in NOCLIK [$02DB (731)].NON-HANDLER, NON-CIO KEYSThe [OPTION], [SELECT] and [START] keys are read from the consAt}ole switch register, CONSOL [$D01F (53279)].The console switch register 7 6 5 4 3 2 1 0 -----Au}-------------------- CONSOL |0 |0 |0 |0 |SP|OP|SE|ST| ------------------------- 8 4 2 Av}1 ST 0 = [START] SE 0 = [SELECT] OP 0 = [OPTION] SP Console speaker. set to 1 during vertical blank. Aw} toggleing this bit operates the speaker (which is heard through the TV on XL/XE models). This biAx}t always reads 0The [HELP] key on XL and XE models is read from HELPFG, [$02DC (732)]. This address is latched and must beAy} reset to zero after being read.The [HELP] key register 7 6 5 4 3 2 1 0 ----------------- HELPFG Az} |C S 0 H 0 0 0 H| ----------------- 1 6 3 1 8 4 2 1 2 4 2 6 8 H 1 A{}= [HELP] (bits 0 and 4) S 1 = [SHIFT] C 1 = [CONTROL] 575Useful database variables and OS equatesKEYDEF A|}$0079,2 (121): key code coversion table vector (XL/XE)KRPDEL $02D9 (729): delay before key repeat (XL/XE)KEYREP $A}}02DA (730): key repeat rate (XL/XE)NOCLIK $02DB (731): $FF turns off key click (XL/XE)HELPFG $02DC (732):A~} [HELP] key (XL/XE)ATACHR $02FB (763): ATASCII Code for last keyCH $02FC (764): keycode, $FF if no key has A}been pressedBRKKEY $0011 (17): break key flag, 0 = break key pressedSRTIMR $022B (555): Key delay and repeat tA}imerSHFLOK $02BE (702): SHIFT/CTRL lock flag 32$00 = lower case$40 (64) = upper case lock$80 (128) = CTRL loA}ck 5INVFLG $02B6 (694): inverse video flag, non-zero = inverseCONSOL $D01F (53279): start, select and option keysIA}RQEN $D20E (53774): IRQ interrupt enable 32bit 7 enables [BREAK]bit 6 enables other keys 5shadow registersPOKMSA}K $0010 (16): IRQEN shadowrupt enable 32bit 7 enables [BREAK]bit 6 enables other keys 5shadow registersPOKMS@"12 4 1 5 0 10 70 2 12 1326-@27E27HCHAPTER 6THE PRINTER HANDLER (P:)The printer is a write only deviceE} so the printer handler has no input functions. The printer handler has no special functions other than the CIO functions coE}mmon to all other devices.Although many printers have special functions, the printer handler has no control over them. SeeE} your printer manual for information on special functions.cial functions, the printer handler has no control over them. SeeD;12 4 1 5 0 10 70 2 12 1327-@27E27HCHAPTER 7SCREEN EDITOR (E:)27HThe screen editor uses both the keybI}oard handler and the screen handler to provide interactive control of the computer. In fact, the keyboard handler, the screeI}n handler and the screen editor are contained in a single section of code and are therefore very closely related.27GThe edI}itor works with one line of characters at a time. The lines it works with are called logical lines and are up to three screeI}n lines long.27HThe screen editor inputs data from the keyboard and then prints the data on the screen. When the [RETURN]I} key is pressed, the editor inputs all of the data on the present logical line for processing by CIO.If characters are typI}ed on the screen, and then the cursor is moved off the line, then back on the line, and new characters are typed, only the chI}aracters to the right of the reentry point of the cursor are input when [RETURN] is pressed. However, if the cursor is movedI} off the line again, then moved back on, all characters on that logical line are input.If bit 0 of ICAX1 is 1, the editor wI}ill act as if the [RETURN] key is being held down. This bit may be changed at any time.27GEditor control codesThe screeI}n editor treats certain ATASCII codes as special control codes.Screen editor control codes KEY HEX DEC I} FUNCTION [RETURN] $9B 155 carriage return or EOL [CLEAR] $7D 125 Clear screen,putI} cursor in 46upper left 10 [UP ARROW] $1C 28 Move cursor up one screen 46line 10 [DOWN] $1D I} 29 down one line [LEFT] $1E 30 left one character [RIGHT] $1F 31 right one chI}aracter [BACK S] $7E 126 Back-space operation [SET TAB] $9F 159 sets tab stop at cursorI} [CLEAR TAB] $9E 158 Clear tab stop at cursor [TAB] $7F 127 move to next tab I}stop [SHIFT] [INSERT] $9D 157 Make space for a new line [SHIFT] [DELETE] $9C 156 I} delete the logical line at 46the cursor 10 [CTRL] [INSERT] $FF 255 make room for a character [I}CTRL] [DELETE] $FE 254 delete character at cursor [ESCAPE] $1B 27 causes next non-EOL cI}ode 46to be displayed as an ATASCII character, even if it is an editor control code 10 [CTRL] sI}creen print start/stop [1] [CTRL] $FD 253 rings bell, no effect on [2] I} display [CTRL] creats End-Of-File status [3] 575Useful database variablesDSPFLG I} $02FE,1 (766): if > 0 then control codes displayedd-Of-File status [3] 575Useful database variablesDSPFLG H812 4 1 5 0 10 70 2 12 1328-@27E27HCHAPTER 8THE DISPLAY HANDLER (S:)27GThe display handler manages thM}e computer's video display. Although no data ever leaves the computer through it, the display is treated like any other CIO M}device. Data sent to the screen may be displayed as either characters or point by point graphics. Although it is only visibM}le in the 40 column text mode, mode 0, there is a cursor on the screen in all of the text or graphics modes. Whenever a charM}acter or graphics point is put on the screen, the cursor moves just as in mode 0.The display is capable of both input and oM}utput. Information can be put on the screen with any of the CIO output commands. An input command will find whatever is on M}the screen at the position of the cursor.27HWhen text or graphics is sent to the screen it is actually stored in an area oM}f memory called the display buffer. What you see on the screen is the computer's interpretation of the data stored there. TM}his will be explained further as each mode is covered.27GDISPLAY HANDLER SPECIAL FUNCTIONS: DRAW FILLSPECIALM} ERROR STATUSES: $84 (132) Invalid special command. $8D (141) Cursor out of range. $91 (145) Nonexistant screM}en mode. $93 (147) Insufficient ram for screen mode.TEXT MODE 027HIn graphics mode 0, data passes through CIO, andM} is stored in the display buffer in the following format. 7 6 5 4 3 2 1 0 ----------------- |I| Data M} | ----------------- 11I 1 = displays character in inverse video.Bits 0 through 6 select one of the 128 charactersM} in the ATASCII set.If bit seven = 1, the character is displayed in inverse video. Converting the above byte to decimal wilM}l give the BASIC ASC(x) equivalent. 10The characters displayed in the text modes are determined by tHE ATASCII character sM}et. This is a bit by bit representation of how the characters appear on the screen. The character set starts $E000 (57344) M}in the operating system ROM. From there, for 1K of memory, each eight bytes holds a "bit map" of a particular character. BeM}low is how the letter A is stored in the character set.Letter A as represented in the C-set 7 6 5 4 3 2 1 0 M} ----------------- $E208 |0 0 0 0 0 0 0 0| ----------------- |0 0 0 1 1 0 0 0| * * -----M}------------ |0 0 1 1 1 1 0 0| * * * * ----------------- |0 1 1 0 0 1 1 0| * * * * M} ----------------- |0 1 1 0 0 1 1 0| * * * * ----------------- |0 1 1 1 1 1 1 0| * * * * *M} * ----------------- |0 1 1 0 0 1 1 0| * * * * ----------------- $E20F |0 0 0 0 0 0 0 0| M} -----------------XL and XE models have an international character set starting at $CC00 (55224). In this character seM}t the graphics characters are replaced by international characters.Custom characters sets may be loaded at any free addressM} which is a multiple of 1,024 ($0400, or 1K). The database variable CHBAS [$02F4 (756)] stores the most significant byte (MSM}B) of the address of the active C-set. Since the LSB of the C-set address is always $00, no LSB is needed to find it.The dM}ata stored in the display buffer does not use the ATASCII code. A special code needed by the ANTIC chip is used.DISPLAY CM}ODE / ATASCII CODE CONVERSION: ATASCII display $00 - $1F ( 0 - 31) = $40 - $5F (64 - M}95) $20 - $5F (32 - 95) = $00 - $3F ( 0 - 63) $60 - $7F (96 - 127) = unchangedThe codes for inverse videoM} (the above codes with bit 7 set (= 1) or the above codes + 128 in decimal) are treated likewise.27GWhen you first turn onM} the computer, BASIC opens channel 0 to the screen editor (E:). The screen editor uses both the keyboard handler and the scrM}een handler, in mode 0, to display characters when they are typed in.TEXT MODES 1 AND 2Graphics modes 1 and 2 offer a spM}lit screen configuration if desired. The split screen has four lines of mode 0 at the bottom of the screen.In mode 1 the sM}creen holds 20 characters horizontally and 24 characters vertically. In mode 2 the characters are twice as tall so the screeM}n holds 12 vertically.In BASIC, characters are sent to the screen with the PRINT command. Since BASIC uses channel 6 for gM}raphics you must specify channel 6 in the command. For example: ? #6;"HELLO" 11If you use a comma in place of the semiM}colon, ten spaces will print before the "HELLO" 10You can also use the PLOT and DRAWTO commands. In this case the COLOR coM}mmand determines the character, as well as the color to be displayed.27HData passes through CIO in the following form:M} 7 6 5 4 3 2 1 0 ----------------- | C | D | ----------------- C determines the color. C M} Default Color Shadow Color Register Register 0 green COLPF1 COLOR1 M} 1 gold COLPF0 COLOR0 2 gold COLPF0 COLOR0 3 green COLPF1 COLOR1 M} 4 red COLPF3 COLOR3 5 blue COLPF2 COLOR2 6 blue COLPF2 COLOR2 M} 7 red COLPF3 COLOR3 11D is a 5 bit ATASCII code which selects the character to be displayed. The dataM}base variable CHBAS selects between upper case (CHBAS=$E0 (224)) and lower case (CHBAS=$E2 (226)). 1027GGRAPHICS MODES 3 M}THROUGH 11Modes 3 through 8 offer a split screen mode. In modes 9 through 11 special programming is required for split scrM}eens.These modes use dot by dot (pixel by pixel) graphics instead of character sets. 27HBefore explaining how graphics arM}e sent to the screen through CIO, I will describe how the data in the display buffer is interpreted by the ANTIC chip.ModeM} 8 is the simplest of the graphics modes. Each byte of the display buffer controls eight pixels horizontally. The first 40 M}bytes of the display buffer control the first horizontal line of graphics. This makes a total of 320 pixels horizontally. IM}f one of the eight bits of a byte is a 1 then the pixel it controls is on. If a bit is a 0 then it's pixel is off. For examM}ple, if a particular byte is equal to $9B (binary 10011011) then its' part of the screen would look like... * ** ** (10M}011011)D:CHAP8.1 byte is equal to $9B (binary 10011011) then its' part of the screen would look like... * ** ** (10LIn reality the pixels are assigned to different color registers. A color register is a byte of memory which controls the colQ}or of all pixels assigned to it. In mode 8, if a bit is = 0 it's pixel is assigned to the register called COLBK. If a bit iQ}s one, it's pixel is assigned to COLPF0. See COLORS below for more information on the color registers.You may notice a cloQ}se similarity between mode 0 and mode 8. The major difference between these modes is where the dot by dot information comes Q}from. In mode 8 this information comes from the display buffer. In mode 0 the display buffer contains codes telling what chQ}aracters to display. The actual dot by dot information comes for the character set at $E000.In mode 7 each pixel is controQ}lled by two bits. Therefore each byte only controls four pixels. There are also only 1/4 as many pixels on the screen as inQ} mode 8. See mode 3 below for an explanation of how the each byte affects the pixels.In a graphics mode, when CIO sends aQ} byte of data to the screen handler, that byte has information for only one pixel. Do not confuse a byte which CIO sends to Q}the screen handler with the bytes in the display buffer.CIO sends data to or retrieves data from the screen in the followinQ}g forms. 7 6 5 4 3 2 1 0 ----------------- |0 0 0 0 0 0| D | Modes 3,5,7 -- D = color --------------Q}--- ----------------- |0 0 0 0 0 0 0|D| Modes 4,6,8 -- D = Color ----------------- -----------------Q} |0 0 0 0| D | Modes 9,10,11 -- D = data -----------------27GMode 3 uses a screen which is 40 pixels horizQ}ontally and 24 vertically. Each pixel is a square the size of a mode 0 character. 27HIt requires 273 bytes of RAM where eaQ}ch byte controls 4 pixels. Each pair of bits controls which of the four color registers their pixel is assigned to.displQ}ay buffer byte for mode 3 7 6 5 4 3 2 1 0 ----------------- | D | D | D | D | ----------------- Q}P1 P2 P3 P4 Pixel/color register assignments: D = 00 COLBK (COLOR4) 01 COLPF0 (COLOR0) 10 COLQ}PF1 (COLOR1) 11 COLPF2 (COLOR2)27GMode 4 uses a screen of 80 columns by 48 rows. Each pixel is half the sizeQ} of those in mode 3. 27HMode 4 requires 537 bytes of RAM where each byte controls 8 pixels. This mode is very similar to mQ}ode 8 except there are fewer but larger pixels.27GMode 5 uses a screen of 80 columns by 48 rows. The pixels are the same Q}size as in mode 4. 27HMode 5 requires 1,017 bytes of RAM where each byte controls 4 pixels in the same manner as in mode 3.Q}27GMode 6 uses a screen of 160 columns by 96 rows. 27HIt requires 2,025 bytes of RAM where each byte controls 8 pixels aQ}s in mode 4.27GMode 7 uses a screen of 160 columns by 96 rows. 27HIt requires 3,945 bytes of RAM where each byte controlQ}s 4 pixels as in modes 3 and 5.Modes 8 through 11 (and 15 on XL and XE models) each require 7,900 bytes of RAM and are verQ}y similar in display set up. The main differences between these modes is the interpretation of data in the display buffer.Q}Mode 15 (sometimes called mode 7.5) uses a screen of 160 columns by 192 rows. Each byte controls 4 pixels as in mode 7. TheQ} main difference between mode 15 and its related modes is bit 0 of each instruction byte in the display list (the program whiQ}ch the ANTIC chip uses). If this bit is 0 the screen is interpreted as mode 15. If the bit is 1 the screen is interpreted aQ}s modes 8 through 11.Modes 8 through 11 are set up identically in memory, including the display list. The only difference Q}is the data in the PRIOR register of the GTIA chip. The shadow register for PRIOR is GPRIOR [$026F (623)].27GMode 8 27H(Q}PRIOR = $00 - $3F (0 - 63)), 27Guses a screen of 320 columns by 192 rows. 27HEach byte controls 8 pixels as in modes 4 andQ} 6.27GMode 9 27H(PRIOR = $40 - $7F (64 - 127)) 27Guses a screen of 80 columns by 192 rows. 27HEach byte controls 2 pixQ}els. 27GThe pixels are all of the same color, controlled by COLBK. 27HEach half of a byte in the display buffer controls Q}the luminance of the assigned pixel. The format of each byte is as follows. 7 6 5 4 3 2 1 0 ----------------- Q} | data | data | ----------------- pixel 1|pixel 227GMode 10 27H(PRIOR = $80 - $BF (128 - 191), 27Gis tQ}he same as mode 9 except 9 color luminance combinations are available. 27HThe data in each half byte chooses one of the 9 cQ}olor registers for the assigned pixel.27GMode 11 27H(PRIOR = $C0 - FF (192 - 255), 27Gis the same as mode 9 except thereQ} is one brightness but 16 colors. 27HThe pixel data chooses one of the 16 available colors. The luminance is that of the bQ}ackground (COLBK).27GUSING THE SCREEN HANDLER27HOPENING A CHANNEL TO THE SCREEN HANDLERWhen a channel is opened to Q}the screen handler the following actions take place: 15The area of memory to be used for the screen data is cleared.A disQ}play list (program for the ANTIC chip) is set up for the proper graphics mode.The top-of-free-memory pointer, MEMTOP [$02E5Q},2 (741)], is set to point to the last free byte before the display list. 10Before opening a channel to the screen handler,Q} the pointer to the highest memory address needed by the program, APPMHI [$000E,2 (14)], should be properly set. This will pQ}revent the screen handler from erasing part of the program when it sets-up the screen data region.When the channel is openQ}ed, two special options can be sent with the direction parameter (ICAX1).ICAX1 for screen open 7 6 5 4 3 2 1 0R} ----------------- | C S W R | ----------------- 1 6 3 1 8 4 2 1 2 4 2 6R} 8 C 1 = don't clear the screen S 1 = split screen R 1 = input W 1 = outputBefore the open command, R}the graphics mode number is placed into ICAX2.ICAX2 for screen open 7 6 5 4 3 2 1 0 -----------------R} | : mode | ----------------- mode = $00 through $0B (0 - 11 (0 - 15 on XL/XE))27GTo open a chR}annel to the screen in BASIC use the GRAPHICS command.D:CHAP8.2through $0B (0 - 11 (0 - 15 on XL/XE))27GTo open a chPDBASIC screen open format GRAPHICS modeFor Example: GRAPHICS 8This will set up a mode 8 graphics screen and open chaV}nnel 6 to it. If the graphics mode is 1 - 8, a split screen will be set up. For example, GRAPHICS 8 will set up a mode 8 scV}reen with a four line text window at the bottom.If 16 is added to the mode number, a full screen will be set-up. For exampV}le, GRAPHICS 8+16 or GRAPHICS 24 will set up a mode 8 screen, with no text window, a full 192 pixels high. If the number 32 V }is added to the mode number, the screen will not clear when the channel opens.27HIf you want to use a channel other than #V }6, you will have to use the open command. It is used in the following format.screen open without GRAPHICS command OPEN V }#channel,direction/special,mode,S:For example: OPEN #1,8,7,S:This will open channel 1 to a mode 7 screen for output onV }ly. For use of special parameters, see ICAX1 above.USING AN OPEN CHANNEL TO THE SCREENOnce a channel is opened to the scV }reen it is used like any other input or output device. In other words, data is placed on the screen by the PRINT and PUT comV}mands. Data is retrieved from the screen with the INPUT and GET commands. The part of the screen which the data will be putV} in or taken from is determined by the X,Y coordinants in the database variables COLCRS [$0055,2 (85)] and ROWCRS [$0054 (84)V}]. What appears on the screen depends on what graphics mode the computer is in.27GBefore sending data to the screen in BAV}SIC, a color register must be assigned to the data. Once a point is plotted on the screen, it's color will be determined by V}the color register it was assigned to.To assign a color to a ploted point, the COLOR command us used as follows.COLOR coV}mmand format COLOR registerFor example, COLOR 1After using the above command, all points plotted will be controlled V}by color register 1. To change color registers, use the COLOR command again.27HIn assembly language, the color is determiV}ned by the data sent to the screen. See the above section on graphics modes for color information.27GIn BASIC the PLOT coV}mmand is used to put data on the screen. The PLOT command is used as follows.The BASIC PLOT command PLOT x,y 11x and V}y are the horizontal and vertical coordinates for the plotted point. 10In modes 3 through 11 a single point will be plotteV}d. In modes 1 and 2 a text character will be printed on the screen by the PLOT command.The PRINT and PUT commands can alsoV} be used in basic. What appears on the screen depends on the graphics mode.In modes 1 and 2 the ATASCII characters sent toV} the screen will be printed just as in mode 0. See the paragraph on modes 1 and 2 above for more information. 27HIn the otV}her modes what appears depends on how the ANTIC chip interprets the data bytes sent to the screen. For example, in mode 8, eV}ven numbered characters will be single pixels in color 1. Odd numbered characters will be in color 0 (background).27GTherV}e are two special commands for the screen handler, DRAW and FILLDRAW 27H(ICCOM = $11 (17))27GThe draw command works exaV}ctly like the plot command except a straight line is drawn from the previous pixel to the new one. In BASIC it is used in thV}e following format.the BASIC DRAW command DRAWTO x,y27HFILL (ICCOM = $12 (18))Fill works like draw except the areaV } to the right of the drawn line will be filled with the color in FILDAT [$02FD (765)]. The fill command expects to find a boV!}undary to the right. If no boundary is found, the entire horizontal screen between the ends of the line is filled.To use tV"}he fill command in BASIC the XIO command must be used in the following format. POSITION x,y XIO 18 #6,0,0,"E:"Note that V#}the cursor is first moved by the POSITION command. Below is an example of how to prepare for and use the fill command.usiV$}ng the fill command 2nd DRAWTO .____. DRAWTO here | | | | | | V%}fill to here ! ! PLOT hereThis will draw and fill a box on the screen.27GTHE COLOR REGISTERSThere are nine bytes V&}of memory which control the colors on the screen. These bytes are called color registers. 27HThe color registers have the V'}following names and relationships.D:CHAP8.3. These bytes are called color registers. 27HThe color registers have the T0Color registers and relationships 377Register Register modesname address 0 & 8 Z)} 1 & 2 3 5 7 4 & 6 9 & 11 10 HEX decimal COLOR numbersPCOLR0 $02C0 704 Z*} 0PCOLR1 $02C1 705 1PCOLR2 $02C2 Z+}706 2PCOLR3 $02C3 707 Z,} 3COLOR0 $02C4 708 0 - 63 1 1 4COLOR1 $02C5 709 1 - 255 64 -127 Z-}2 5COLOR2 $02C6 710 0 128-191 3 6COLOR3 $02C7 711 Z.} 192-255 7COLOR4 $02C8 712 border backgnd 0 backgnd backgnd 8Z/}The color numbers are in decimal. These are actually shadow registers. See the O.S. equates below for relationships. In mZ0}odes 0 - 3 the COLOR number actually determines the character printedThe register to which a pixel/character is assigned toZ1} is determined by the data byte sent to the screen through CIO. 1070The data in the color registers in in the following foZ2}rmat.Color register data format 7 6 5 4 3 2 1 0 ----------------- | color |bright | Z3} ----------------- color = one of 16 possible colors bright = one of 8 possible brightnesses (eZ4}ven numbers, 0 - E)27GIn basic, the COLOR command is used to assign color registers. The corresponding registers dependsZ5} on the graphics mode. For example, COLOR 0 is COLOR2 in mode 8. In most other modes COLOR 0 is COLOR4. See the above charZ6}t for the register relationships.To change the contents of the color registers in BASIC, the SETCOLOR command is used. In Z7}all modes except mode 10, the SETCOLOR command refers to the registers COLOR0 to COLOR4.SETCOLOR/register relationshipsZ8} SETCOLOR 0 COLPF0 (COLOR0) SETCOLOR 1 COLPF1 (COLOR1) SETCOLOR 2 COLPF2 (COLOR2) SETCOLZ9}OR 3 COLPF3 (COLOR3) SETCOLOR 4 COLBK (COLOR4)The format for the SETCOLOR command is...SETCOLOR commaZ:}nd format SETCOLOR register,hue,brightness register = 0 - 4 (0 - 8 in mode 10) hue = 0 - 15 (16 colors) brightZ;}ness = 0 - 16 (even numbers only (8 brightnesses)The following chart gives the colors represented by the hue number.coZ<}lors represented by hue numbers0 grey 8 blue1 gold 9 cyan2 gold-orange 10 blue-gZ=}reen3 red-orange 11 blue-green4 orange 12 green5 magenta 13 yellow-green6 purple-bluZ>}e 14 yellow7 blue 15 yellow-redThe attract modeIf a key is not pressed for more than 9 minutes the Z?}computer will enter the attract mode. This mode is used to prevent burning of the TV phosphors by lowering the brightness anZ@}d constantly changing the colors. 27HThe attract mode timer, ATRACT [$004D (77)], is set to 254 ($FE) when the the attract ZA}mode is entered. 27GTo force the computer out of the attract mode, poke a number less than 127 into ATRACT.27HUseful dZB}atabase variables and OS equates 557APPMHI $000E,2 (14): lower limit for screen regionAZC}TRACT $004D (77): attract mode timer and flagLMARGN $0052 (82): left marginRMARGN $0053 (83): right maZD}rginROWCRS $0054 (84): horizontal cursor positionCOLCRS $0055,2 (85): vertical cursor positionDINDEX $0057 ZE} (87): current graphics modeSAVMSC $0058,2 (88): starting address of display bufferOLDROZF}W $005A (90): previous cursor positionOLDCOL $005B,2 (91): " " "OLDCHR $005D (93): charaZG}cter currently at the text cursorOLDADR $005E,2 (94): memory address of cursorRAMTOP $006A ZH} (106): end-of-RAM + 1 (MSB only)SDLSTL $0230,2 (560): shadow register of display list ZI}addressTXTROW $0290 (656): text window cursor positionTXTCOL $0291,2 (657): " " " "TXTMSC $0294,2ZJ} (660): starting address of text window data bufferRAMSIZ $02E4 (740): permanent end-ofZK}-RAM + 1 (MSB only)CRSINH $02F0 (752): cursor inhibit, 1 = no cursoZL}rFILDAT $02FD (765): color data for fillDSPFLG $02FE (766): if >0 screen control codes ZM} are displayed as ATASCII characters (EOL is uneffected)SSFLAG $02FZN}F (767): > 0 = stop screen printCOLPM0 $D012 (53266): actual color registersCOLPM1 $D013 (53267): loaded fromZO} shadowCOLPM2 $D014 (53268): registers duringCOLPM3 $D015 (53269): vertical blankCOLPF0 $D016 (53270):COLPF1 ZP}$D017 (53271): see aboveCOLPF2 $D018 (53272): for useCOLPF3 $D019 (53273):COLBK $D020 (53274):OS shadZQ}ow registersnext pageOS shadow registersPCOLR0 $02C0 (704): COLPM0PCOLR1 $02C1 (705): COLPM1PCOLR2 $ZR}02C2 (706): COLPM2PCOLR3 $02C3 (707): COLPM3COLOR0 $02C4 (708): COLPF0COLOR1 $02C5 (709): COLPF1CZS}OLOR2 $02C6 (710): COLPF2COLOR3 $02C7 (711): COLPF3COLOR4 $02C8 (712): COLBK $02C5 (709): COLPF1CXa12 4 1 5 0 10 70 2 12 1329-@27E27HCHAPTER 9THE RESIDENT DISK HANDLERThe resident disk handler is sepa^U}rate from DOS and is part of the permanent operating system ROM. The disk handler does not use CIO.The resident disk handl^V}er works with one sector at a time. It is used by setting the drive number, sector number, and operation code in the device ^W}control block. The program then jumps (JSR) to the handler entry vector, DSKINV [$E453 (58451)].Device control block (for^X} resident disk handler) 11DDEVIC [$0300 (768)] Serial bus I.D. Set by handlerDUNIT [$0301 (769)] Drive num^Y}berDCOMND [$0302 (770)] Command byteDSTATS [$0303 (771)] status byteDBUFLO [$0304 (772)]DBUFHI [$0305 (773^Z})] 16Pointer to 128 byte memory block for data storage. 11DTIMLO [$0306 (774)] Timeout value (response time limit) ^[}in secondsDBYTLO [$0308 (776)]DBYTHI [$0309 (777)] number of bytes transferred, set by handlerDAUX1 [$030A (778)]^\}DAUX2 [$030B (779)] sector number 10DISK HANDLER COMMANDSGET SECTORBefore the JSR to DSKINV is made the follo^]}wing parameters are set.GET SECTOR parameters DCOMND = $52 (82) DUNIT = (1 - 4) DBUFHI and DBU^^}FLO = address of 128 byte buffer DAUX1 and DAUX2 = Sector number (LSB,MSB)This operation will read the spec^_}ified sector and put the data into the specified buffer.PUT SECTORPUT SECTOR is used the same as GET SECTOR except for DC^`}OMND.PUT SECTOR parameters DCOMND = $50 (80)This operation sends the data in the specified buffer to the specified^a} disk sector.PUT SECTOR WITH VERIFYPUT SECTOR WITH VERIFY is used the same as PUT SECTOR except for DCOMND.PUT SECTOR ^b}WITH VERIFY parameters DCOMND = $57 (87)This operation sends the data in the specified buffer to the specified disk s^c}ector then checks for errors.GET STATUSOnly the DUNIT and DCOMND need to be setGET STATUS parameters DCOMND = ^d}$53 (83) DUNIT = (1 - 4)The status information will be put in three bytes starting at DVSTAT [$02EA (746)].Statu^e}s format 7 6 5 4 3 2 1 0 ----------------- DVSTAT + 0 | command stat | ^f} ----------------- + 1 | hardware stat | ----------------- ^g} + 2 | timeout value | -----------------The command status byte gives the following information.^h} Bit 0 1 = invalid command frame received 1 1 = invalid data frame received 2 1 = unsuccessful^i} PUT operation 3 1 = disk is write protected 4 1 = active/standbyThe hardware status byte contains the sta^j}tus register of the ISN1771-1 disk controller chip.The timeout byte contains the maximum allowable response time for the dr^k}ive in seconds.FORMAT DISKThe handler will format then verify the the disk. The numbers of all bad sectors (up to 63) wi^l}ll be put into the specified buffer followed by two bytes of $FF.The following parameters are set before the call.FORMA^m}T parameters DCOMND = $21 (33) DUNIT = (1 - 4) DBUFLO and DBUFHI = address of bad sector list (buf^n}fer)After the operation the status byte is set. Also, DBYTLO and DBYTHI will contain the number of bytes of bad sector inf^o}ormation (not including the two $FF bytes). 575Useful data base variables and OS equatesDVSTAT $02EA,3 (746): de^p}vice status block, 3 bytesDDEVIC $0300 (768): serial bus I.D.DUNIT $0301 (769): device numberDCOMND $0302 ^q} (770): command byteDSTATS $0303 (771): status byteDBUFLO $0304 (772): data bufferDBUFHI $0305 (^r}773): pointerDTIMLO $0306 (774): timeout valueDBYTLO $0308 (776): number of bytes transferedDBYTHI $0309 ^s} (777):DAUX1 $030A (778): sectorDAUX2 $030B (779): numberDSKINV $E453 (58451): disk handler entr^t}y vector:DAUX1 $030A (778): sectorDAUX2 $030B (779): numberDSKINV $E453 (58451): disk handler entr\ 12 4 1 5 0 10 70 2 12 13210-@27E27HCHAPTER 10SYSTEM INTERRUPTSThere are four types of interrupts whicbv}h can occur with the 6502 microprocessor:6502 interrupts 1. chip reset 2. IRQ, interrupt request (maskablebw}) 3. MNI (non-maskable interrupt) 4. software interrupt (BRK instruction)CHIP RESETOn the 400/800 the chip bx}reset occurs only upon power-up and causes the computer to do a cold start. On later models, pressing [SYSTEM RESET] will caby}use a chip reset but the computer then does a warm start. On the 400/800, the [SYSTEM RESET] key generates a NMI interrupt.bz}COLD STARTThis is a synopsis of the cold start routine. 111 15The warm start flag [$0008] is set to 0 (false) 112 15b{}If a cartridge slot contains a diagnostic cartridge, control is handed to the cartridge. 113 15The end of RAM is determineb|}d by trying to complement the first byte of each 4K block of memory. 114 15Hardware registers at $D000 - $D4FF (except $D1b}}00 - $D1FF) are cleared. 115 15RAM is cleared from $0008 to the top of ram. 116 15The user program jump vector, DOSVEC b~}[$000A] is set to point to the black board mode (Atari logo display mode in XL/XE models). 117 15The screen margins are sb}et to 2 and 39 118 15Interrupt vectors are initialized. 119 15Bottom of free RAM pointer, MEMLO [$02E7], is set to poinb}t to $0700. 1110 15Resident CIO handlers are initialized. 1111 15If the [START] key is pressed the cassette boot requesb}t flag, CKEY [$004A], is set. 1112 15The CIO device table is initialized. 1113 15If a cartridge is present it is initiab}lized. 1114 15Channel 0 is opened to the screen editor. The top-of-free-RAM pointer, MEMTOP [$02E5], is set to point belob}w the screen region. The computer then waits for the screen to be established before continuing. 1115 15If the cassette bb}oot flag is set the cassette is booted. 1116 15If there is no cartridge present or a cartridge doesn't prevent it, the disb}k is booted. 1117 15The cold start flag is reset. 1118 15If there is a cartridge present, the computer jumps to the carb}tridge's run vector. 1119 15If there is no cartridge present the computer jumps through the vector DOSVEC [$000A (10)]. Db}OSVEC will point to either a booted program, the memo pad routine (400/800) or the logo display routine (XL/XE).WARM STARTb} 111 15The warm start flag is set to $7F (true). 112 15cold start steps 2 - 4 are executed. 113 15RAM is cleared frb}om $0010 - $007F and $0200 - $03FF. 114 15Cold start steps 7 - 14 are executed. 115 15If cassette booted software is prb}esent the computer JSRs through CASINI [$0002]. 116 15If disk booted software is present the computer JSRs through DOSINI b}[$000C (12)]. 10The difference between cold start and warm start is the condition of the warm start flag, WARMST, [$0008].b} If this flag is 0 a complete cold start is executed. If the flag is anything other than 0 then only the warm start part ofb} the warm start/cold start code is executed.NON-MASKABLE INTERRUPTS (NMI)NMI interrupts are generated by the following cob}nditions: 111. Display list interrupt, generated by the ANTIC chip.2. TV vertical blank interrupt, generated by the Ab}NTIC chip.3. [SYSTEM RESET] key (400/800). 10When an NMI interrupt occurs, the hardware register NMIST [$D40F] is b}examined to determine what type of interrupt occurred. The computer is then directed through the proper ram vector to servicb}e the interrupt.DISPLAY LIST INTERRUPTS (DLIs)The computer makes no use of DLIs. The ram vector points to an RTI instrucb}tion.VERTICAL BLANK INTERRUPTS (VBIs)There are two stages to the VBI service routine. The second stage is only done ifb} a critical function was not interrupted.Stage 1 (VBI) 11The real time clock, RTCLOK [$0012 - $0014], is incremented.b}The attract mode variables are processed.System timer 1 is decremented. If it goes to zero the computer JSRs through systb}em time-out vector 1. 10Stage 2 (VBI) 11The hardware registers are loaded with the data in their shadow registers.Syb}stem timer 2 is decremented. If it goes to zero the computer JSRs through the system time-out vector 2.System timers 3, 4b}, and 5 are decremented. If a timer goes to zero the computer sets system timer flags 3, 4, and/or 5.If auto-repeat is acb}tive, the auto-repeat process is done.The keyboard debounce timer is decremented if not 0.Information at the controller pb}ort registers is read, processed and placed in the proper shadow registers. 10[SYSTEM RESET] INTERRUPTIf a [SYSTEM RESETb}] interrupt is generated on the 400/800 the computer jumps to the warm start routine.D:CHAP10.1RRUPTIf a [SYSTEM RESET`dINTERRUPT REQUESTS (maskable interrupts (IRQs))When an IRQ interrupt occurs the hardware register IRQST [$D20E], the PIA stf}atus registers, PACTL [$D302] and PBCTL [$D303] are examined to determine what caused the interrupt.For each interrupt, thef} 6502 accumulator is pushed to the stack. The computer is then directed to the proper ram vector to service the interrupt.f}SOFTWARE INTERRUPT (BRK instruction)The operating system doesn't use software interrupts. The software interrupt vector pof}ints to a PLA followed by an RTI. 11Interrupt vectorsLabel address type functionVDSLST $0200 NMI DLI Points to af}n RTIVVBLKI $0222 NMI stage 1 VBIVVBLKD $0224 NMI return-from-interrupt routineCDTMA1 $0226 NMI time-out 1 (used f}by SIO)CDTMA2 $0228 NMI time-out 2 (not used by OS)VPRCED $0202 IRQ not used (points to PLA,RTI)VINTER $0204 IRQ f}not used (PLA,RTI)VKEYBD $0208 IRQ keyboard interruptVSERIN $020A IRQ used by Serial I/O routineVSEROR $020C IRQ f}used by SIOVSEROC $020E IRQ used by SIOVTIMR1 $0210 IRQ not used by OS (PLA,RTI)VTIMR2 $0212 IRQ not used by OS (f}PLA,RTI)VTIMR4 $0214 IRQ ?VIMIRQ $0216 IRQ main IRQ codeVBREAK $0206 BRK unused by OS (PLA,RTI) 10SYSTEM TIMERf}SThe following timers are updated during vertical blank (VBI) as noted above. If a timer is decremented to 0 the computer f}jumps through it's associated vector or sets it's associated flag. 11Label address flag/vectorRTCLOK $0012 3 byte f}clock ($0012 = MSB)CDTMV1 $0218 CDTMA1 $0226 vector (SIO time-out)CDTMV2 $021A CDTMA2 $0228 vectorCDTMV3 $021C f}CDTMF3 $022A flagCDTMV4 $021E CDTMF4 $022C flagCDTMV5 $0220 CDTMF5 $022E flagHARDWARE INTERRUPT CONTROLThere af}re two registers on the antic chip which control interrupts. These registers can be used to disable interrupts if necessary.f} There are also two associated interrupt status registers.The IRQ enable and status registers use the same address. The rf}esult is that reading the register does not reveal the enabled interrupts but the interrupts pending. IRQ interrupt enable df}ata should usually be written to the OS shadow first. Reading the OS shadow tells which interrupts are enabled.Non maskabf}le interrupt enable 11NMIEN $D40E 7 6 5 4 3 2 1 0 ----------------- | | | not used | f} ----------------- bit 7 1 = DLI enabled 6 1 = VBI enabled 10Non maskable interrupt status 11NMIST $D4f}0F 7 6 5 4 3 2 1 0 ----------------- | | | | not used| ----------------- bit 7 1f} = DLI pending 6 1 = VBI pending 5 1 = [SYSTEM RESET] key pending 10Interrupt request enable 11IRQEN $Df}20E 7 6 5 4 3 2 1 0 ----------------- | | | | | | | | | ----------------- bit 7 f}1 = [BREAK] key interrupt enable 6 1 = keyboard interrupt enable 5 1 = serial input interrupt enable 4 1 = f}serial output interrupt enable 3 1 = serial output-finished interrupt enable 2 1 = timer 4 interrupt enable f}1 1 = timer 2 interrupt enable 0 1 = timer 1 interrupt enable IRQEN has a shadow register, POKMSK [$0010 (A)].Inf}terrupt request status 11IRQST $D20E 7 6 5 4 3 2 1 0 ----------------- | | | | | | | | |f} ----------------- bit 7 1 = [BREAK] key interrupt pending 6 1 = keyboard interrupt pending 5 1 = sef}rial input interrupt pending 4 1 = serial output interrupt pending 3 1 = serial output-finished interrupt pendingf} 2 1 = timer 4 interrupt pending 1 1 = timer 2 interrupt pending 0 1 = timer 1 interrupt pending 10WAIT f}FOR HORIZONTAL SYNCWriting any number to WSYNC [$D40A (54282)] will cause the computer to stop and wait for the next TV horf}izontal sync.It is wise to use DLIs one TV line before needed then writing to WSYNC. This will keep other interrupts fromf} causing DLIs to be serviced late. This can cause a DLI to change something in the middle of a scan line. 5Useful databaf}se variables and OS equatesPOKMSK $0010 (16): IRQEN shadowIRQEN $D20E (53774): enables IRQs when written toIRQf}ST $D20E (53774); gives IRQs waiting when readPACTL $D302 (54018): bit 7 (read) peripheral A interrupt f} status bit 0 (write) peripheral A interrupt enablePBCTL $D303f} (54019): bit 7 (read) peripheral B interrupt status bit 0 (write) peripf}heral B interrupt enableWSYNC $D40A (54282): wait for horizontal syncNMIEN $D40E (54286): f}NMI enableNMIST $D40F (54287): NMI statusleWSYNC $D40A (54282): wait for horizontal syncNMIEN $D40E (54286): d/rocessor and changethem to work with it and a differentprinter.If you have ATARIWRITER and an Epsoncompatible printer, l}oad and printeach CHAP file (CHAP0 - CHAP10).Ignore the files with extensions(i.e. CHAP1.1) as they will auto-matically c}hain to the CHAP files.Change the following codes for adifferent word processor or printer.[CONTROL][O]27E starts NLQ mo}de " [O]27F stops NLQ mode " [O]27G starts BOLD mode " [O]27H stops BOLD mode " [V]D:... chains} new file " [E] page eject " [L] left margin " [R] right margin " [T] top margi}n (half " [B] bottom margin lines) " [Y] page length " " [C] center " [C][C] right }justifyFor a copy of part two of the Atari 8bit reference manual write to:C & T ComputerActiveP.O. Box 893Clinton, OK} 73601For a copy of part two of the Atari 8bit reference manual write to:C & T ComputerActiveP.O. Box 893Clinton, OK