The Atari ST Internals

A programmers reference to the Atari ST, by Jim Boulton 1995.


Table Of Contents

Information

  • Note From The Author
  • General Information
  • Interrupt Priorities
  • TOS Error Numbers
  • Blitter Execution Times
  • Keyboard Scancode Map

    Memory Maps

  • Exception Vectors
  • Application Interrupts
  • Processor State
  • System Variables
  • ROMS

    Peripherals

  • Memory Management Unit
  • Screen Display
  • WD1772 Floppy Disk Controller
  • YM2149 Programmable Sound Generator
  • STE Digital to Analogue Converter
  • Blitter Chip
  • STE Joystick Ports
  • MK68901 Multi Function Periferal
  • Floating Point Unit
  • MC6850 Asynchonous Communications Interface Adaptor
  • Clock (If available)

    Port Pinouts

  • Cartridge Port
  • ACSI DMA Port
  • Parallel Printer Port
  • Joystick and Mouse Ports
  • STE Joystick Ports
  • Monitor Port
  • RS232 Serial Port
  • MIDI Ports
  • External Floppy Port

  • Note From The Author

    Welcome to the definative STFM and STE hardware reference manual! In here you will find a list of all the hardware mapped periferals in the Atari ST range of computers and the function of each of their internal registers. There is also an extensive list of the operating system global variables and other useful programming information for all hardend ST coders.

    This list is mostly complete but if you have any additional information or you have noticed any errors then please inform me! I am also interested in compiling a Falcon list as well, if anyone has the hardware information on the Falcon then please inform me!

    Now a bit of history. This list started out as my own refernce, as I found out more about the ST hardware and the memory map I wrote it down in a text file. When I got my PC I formatted this information on a good word processor and added all the port pinouts. Now I've got my internet connection I decided it was about time this reference went public, and what better way than a WWW page?!

    Long live Atari!

    Jim Boulton - je-boult@csm.uwe.ac.uk


    General Information

    All the following processor timings are based on a bog
    standard 8MHz 68000 as found in all standard ST's.
    
    Clock cycles per line (50Hz)      : 512
    NOPs per scan line (50Hz)         : 128
    Scan lines per VBL (50Hz)         : 313
    
    Clock cycles per line (60Hz)      : 508
    NOPs per scan line (60Hz)         : 127
    Scan lines per VBL (60Hz)         : 315
    
    Clock cycles per VBL              : 160256
    NOPs per VBL                      : 40064
    
    Pixels per clock cycle (low res)  : 1
    Pixels per clock cycle (med res)  : 2
    Pixels per clock cycle (high res) : 4
    Pixels per NOP (low res)          : 4
    Pixels per NOP (med res)          : 8
    Pixels per NOP (high res)         : 16
    

    Interrupt Priorities

    Priority        Description
    15 (HIGHEST)    Monochrome monitor detect
    14              RS232 ring indicator
    13              System clock (timer A)
    12              RS232 receive buffer full
    11              RS232 receive error
    10              RS232 transmit buffer empty
    9               RS232 transmit buffer full
    8               Horizontal blanking counter (MFP timer B)
    7               Disk drive controller
    6               Keyboard and MIDI (ACIA)
    5               MFP timer C
    4               RS232 baud rate generator (MFP timer D)
    3               GPU operation done
    2               RS232 Clear To Send (CTS)
    1               RS232 Data Carrier Detect (DCD)
    0 (LOWEST)      Centronics busy
    

    TOS Error Numbers

    Error   Description of error
    1       General error
    2       Drive not ready
    3       Unknown command
    4       CRC error - disk checksum wrong
    5       Bad request
    6       Seek error - track not found
    7       Unknown media
    8       Sector not found
    9       Out of paper
    10      Write fault
    11      Read fault
    12      General error 12
    13      Disk write protected
    14      Media change detected
    15      Unknown device
    16      Bad sector (verify)
    17      Insert other disk (request)
    32      Invalid function number
    33      File not found
    34      Path not found
    35      Too many files open
    36      Access denied
    37      Invalid handle
    39      Out of memory
    40      Invalid memory block address
    46      Invalid drive specification
    49      No more files
    64      GEMDOS range error - seek wrong?
    65      GEMDOS internal error
    66      Invalid executable file format
    67      Memory block growth failure
    

    Blitter Execution Times

       | HOP
    LOP| 0  1  2  3    HOP = Halftone Operation
    ---+-----------    LOP = Logical Operation
    0  | 1  1  1  1
    1  | 2  2  3  3    All timings are assuming the BLITTER is
    2  | 2  2  3  3    the only DMA device using the BUS. If other
    3  | 1  1  2  2    devices are using the BUS the figures may
    4  | 2  2  3  3    increase.
    5  | 2  2  2  2
    6  | 2  2  3  3    All timing figures are given in nops per word
    7  | 2  2  3  3    of transfer. Ie. a value of 2 would take the
    8  | 2  2  3  3    equivilent time of 2 nops to transfer 1 word
    9  | 2  2  3  3    of data.
    10 | 2  2  2  2
    11 | 2  2  3  3
    12 | 1  1  2  2
    13 | 2  2  3  3
    14 | 2  2  3  3
    15 | 1  1  1  1
    

    Keyboard Scancode Map


    Exception Vectors

    $000  Initial SSP value after reset
    $004  Initial PC address after reset
    $008  Bus error vector
    $00C  Address error vector
    $010  Illegal instruction vector
    $014  Divide by zero vector
    $018  Check instruction vector
    $01C  Trapv instruction vector
    $020  Privilege violation vector
    $024  Trace vector
    $028  Line 0101
    $02C  Line 1111
    ----  Reserved ($30-$5F)
    $060  Spurious interrupt (level 6)
    $064  Interrupt level 1 (HBL)
    $068  Interrupt level 2 (HBL)
    $06C  Interrupt level 3 (processor interrupt)
    $070  Interrupt level 4 (VBL)
    $074  Interrupt level 5
    $078  Interrupt level 6 (MFP interrupts)
    $07C  Interrupt level 7 (non-maskable interrupt)
    $080  Trap 0
    $084  Trap 1
    $088  Trap 2
    $08C  Trap 3
    $090  Trap 4
    $094  Trap 5
    $098  Trap 6
    $09C  Trap 7
    $0A0  Trap 8
    $0A4  Trap 9
    $0A8  Trap 10
    $0AC  Trap 11
    $0B0  Trap 12
    $0B4  Trap 13
    $0B8  Trap 14
    $0BC  Trap 15
    ----  Reserved ($C0-$FF)
    $100  Parallel port interrupt vector (centronics busy)
    $104  RS232 carrier detect interrupt vector
    $108  RS232 clear to send interrupt vector
    $10C  Graphics blt done interrupt vector
    $110  MFP timer D interrupt vector
    $114  MFP timer C interrupt vector (200Hz)
    $118  ACIA keyboard processor interrupt vector
    $11C  Polled fdc/hdc interrupt vector
    $120  MFP timer B interrupt vector (HBL counter)
    $124  RS232 transmit error interrupt vector
    $128  RS232 transmit buffer empty interrupt vector
    $12C  RS232 receive error interrupt vector
    $130  RS232 receive buffer full interrupt vector
    $134  MFP timer A interrupt vector
    $138  RS232 ring interrupt vector
    $13C  Polled monochrome monitor detect interrupt vector
    ----  Reserved ($140-$1FF)
    

    Application Interrupts

    ----  Reserved for OEMs ($200-$37F)
    

    Processor State

    $380  L     proc_lives  Processor state saved if system variable set to $12345678
    $384  16xL  proc_regs   D0-D7/A0-A6,A7_SSP
    $3C4  L     proc_c      First byte exception number
    $3C8  L     proc_usp    User stack pointer
    $3CC  16xW  proc_stk    Sixteen words of superstack
    

    System Variables

    $400  L     evt_timer   Timer handoff (logical vector $100)
    $404  L	    evt_critic  Critical error handoff (logical vector $101)
    $408  L	    evt_term    Process terminate handoff (logical vector $100)
    $40C  15xL  evt_xtra    Space for reserved logical vector ($103-$107)
    $420  L     memvalid    $752019F3 (cold start OK)
    $424  B     memcntlr    Memory controller low nibble
                            0 - 128KB, 4 - 256KB
    $426  L     resvalid    $31415926 to jump to reset vector
    $42A  L     resvector   reset vector
    $42E  L     phystop     Physical RAM top (points to first unusable byte RAM)
    $432  L     _membot     Available memory bottom (getmpb uses)
    $436  L     _memtop     Available memory top (getmpb uses)
    $43A  L     memval2     $237698AA
    $43E  W     flock       Floppy FIFO lock variable
    $440  W     seekrate    0 - 6ms, 1 - 12ms, 2 - 2ms, 3 - 3ms (default) 
    $442  W     _timr_ms    System timer calibration
    $444  W     _fverify    0 - no write verify else verify (default)
    $446  W     _bootdev    System boot device number
    $448  W     palmode     0 - NTSC (60Hz) else PAL (50Hz)
    $44A  B     defshftmd   Default video res. if monitor changed
    $44C  B     sshiftmd    Shadow shiftmd hardware register
                            0 - 320x200x4, 1 - 640x200x2, 2 - 640x400x1
    $44E  L     _v_bas_ad   Screen memory base pointer, 256 byte boundary
    $452  W     vblsem      Vertical blank exclusion semaphore, 1 - vblank enabled
    $454  W     nvbls       No. longwords vblqueue points to (normally 8)
    $456  L     _vblqueue   Vblank handlers pointer to routine address
    $45A  L     colorptr    0 - null, else points to a colour palette
    $45E  L     screenpt    Pointer to screen base
    $462  L     _vbclock    Counter for vblank interrupts
    $466  L     _frclock    Counter for vblank interrupts
    $46A  L     hdv_init    Hard disk initialise vector, else 0
    $46E  L     swv_vec     Monitor changed vector
    $472  L     hdv_bpb     Hard disk bpb vector, else 0
    $476  L     hdv_rw      Hard disk read/write vector, else 0
    $47A  L     hdv_boot    Hard disk boot vector, else 0
    $47E  L     hdv_mediach Hard disk media change vector else, 0
    $482  W     _cmdload    <>0 load and execute COMMAND.PRG (boot dev)
    $484  W     conterm     Attribute bits for console sys, bits:
                              0 - bell on (^G)
                              1 - key repeat
                              2 - key click
                              3 - bios conin() function
    $485  B     Reserved
    $486  L     trp14ret    Saved trap 14 return address
    $48A  L     criticret   Saved return address for evt_critic
    $48E  L     themd       GEMDOS memory descriptions (static)
    
                            Structure MD
                            m_link    Next MD/null
                            m_start   Start of TPA
                            m_length  Byte size of TPA
                            m_own     MD's owner/null
    
    $49E  W     _md
    $4A2  L     savptr      BIOS register save area pointer
    $4A6  W     _nflops     Number of floppy disks attached (0, 1 or 2)
    $4A8  L     con_state   State of conout() parser
    $4AC  W     save_row    Save row number for x-y addressing
    $4AE  L     sav_contxt  Pointer to saved processor context
    $4B2  L     _buf1       GEMDOS two buffer-list pointers
                            1st buffer's data sectors
                            2nd buffer's FAT and DIR sectors
    
                            Structure BCB
                            b_link	  next BCB
                            b_bufdrv  drive number
                            b_buftyp  buffer type
                            b_bufrec  record number cached
                            b_dirty   dirty flag
                            b_dm      drive media descriptor
                            b_bufr    buffer pointer
    
    $4BA  L     _hz_200     Raw 200Hz timer
    $4BE  L     the_env     Default environment string $00000000
    $4C2  L     _drvbits    32 bit vector of live block devices
    $4C6  L     _dskbufp    Pointer to common disk buffer, 1KB system BSS
    $4CA  L     _autopath   Pointer to autoexec path or null
    $4CE  8xL   _vbl_list   Initial vblqueue
    $4EE  W     _prt_cnt    Initially -1, Alt_Help increments
    $4F0  W     _prtabt     Printer abort flag
    $4F2  L     _sysbase    Base of OS pointer (RAM or ROM TOS)
    $4F6  L     _shell_p    Global shell info pointer
    $4FA  L     end_os      Pointer to end of OS memory usage
    $4FE  L     exec_os     Pointer to shell address to exec on startup
    

    ROMS

    $E00000	Start of ROM OS (for version 1.4 and above)
    $FA0000	Start of cartridge memory mapped ROM
    $FC0000	Start of ROM OS (for versions below 1.4)
    

    Memory Management Unit

    $FFFF8001  r/w  |....xxxx|          Memory configuration
                         | |___________ Bank 1 (see table below)
                         |_____________ Bank 0
    
                                        Value  Bank size
                                        0      0KB
                                        1      512KB
                                        2      2048KB
    

    Screen Display

    $FFFF8201  r/w  |xxxxxxxx|          Video base high
    $FFFF8203  r/w  |xxxxxxxx|          Video base medium
    $FFFF8205  r    |..xxxxxx|          Video address counter high (r/w on STe)
    $FFFF8207  r    |xxxxxxxx|          Video address counter med (r/w on STe)
    $FFFF8209  r    |xxxxxxx.|          Video address counter low (r/w on STe)
    $FFFF820A  r/w  |......xx|          Sync mode
                           ||__________ External/Internal sync
                           |___________ 50/60Hz
    
    $FFFF820D  r/w  |xxxxxxx.|          STe video base low
    $FFFF820F  r/w  |xxxxxxxx|          STe over-length line width
    $FFFF8240  r/w  |....xxxxxxxxxxxx|  Palette colour (1 word each, first of 16)
                         ||  ||  ||____ Blue intensity (0-7)
                         ||  ||  |_____ STe blue LSB
                         ||  ||________ Green intensity (0-7)
                         ||  |_________ STe green LSB
                         ||____________ Red intensity (0-7)
                         |_____________ STe red LSB
    
    $FFFF8260  r/w  |......xx|          Screen resolution
                           |___________ 0 - 320x200x4
                                        1 - 640x200x2
                                        2 - 640x400x1
    
    $FFFF8264  r/w  |....xxxx|          Undocumented STE pixel hard scroll
    $FFFF8265  r/w  |....xxxx|          STE pixel hard scroll
    

    WD1772 Floppy Disk Controller

    $FFFF8604  r/w  |........xxxxxxxx|  Disk controller
    $FFFF8606  r    |.............xxx|  DMA status
                                  |||__ DMA Error
                                  ||___ Sector count zero
                                  |____ Read/Write
    
    $FFFF8606  w    |.......xxxxxxxx.|  DMA status
                            ||||||||___ FDC pin A0
                            |||||||____ FDC pin A1
                            ||||||_____ FDC/HDC register select
                            |||||______ FDC/sector count select
                            ||||_______ RESERVED
                            |||________ Enable/Disable DMA
                            ||_________ HDC/FDC
                            |__________ Read/Write
    
    $FFFF8609  r/w  |..xxxxxx|          DTA high byte
    $FFFF860B  r/w  |xxxxxxxx|          DTA middle byte
    $FFFF860D  r/w  |xxxxxxx.|          DTA low byte
    

    YM2149 Programmable Sound Generator

    $FFFF8800  r    |xxxxxxxx|          PSG register data
               w    |xxxxxxxx|          PSG register select
    
               Reg  Bits  Description
               0    8     Channel A fine tune
               1    4     Channel A coarse tune
               2    8     Channel B fine tune
               3    4     Channel B coarse tune
               4    8     Channel C fine tune
               5    4     Channel C coarse tune
               6    5     Noise generator control
               7    8     Mixer control - I/O enable
               8    5     Channel A amplitude
               9    5     Channel B amplitude
               10   5     Channel C amplitude
               11   8     Envelope period fine tune
               12   8     Envelope period coarse tune
               13   4     Envelope shape
               14   8     I/O port A
               15   8     I/O port B (centronics printer port)
    
    $FFFF8802  w    |...xxxxx|          PSG register 5 (Noise Generator) 
    
                    |xxxxxxxx|          PSG register 7 (Mixer Control)
                     ||||||||__________ Channel A tone control (enable/disable)
                     |||||||___________ Channel B tone control
                     ||||||____________ Channel C tone control
                     |||||_____________ Channel A noise control (enable/disable)
                     ||||______________ Channel B noise control
                     |||_______________ Channel C noise control
                     ||________________ I/O Port A status (input/output)
                     |_________________ I/O Port B status
    
                    |...xxxxx|          PSG register 8-10 (Channel Amplitude)
                        ||_____________ Channel volume (0-15)
                        |______________ Hardware enveloping (enable/disable)
    
                    |....xxxx|          PSG register 13 (Envelope Shape)
                         ||||__________ Hold
                         |||___________ Alternate
                         ||____________ Attack
                         |_____________ Continue
    
                    |xxxxxxxx|          PSG register 14 (I/O port A)
                     ||||||||__________ Floppy side 0/1 select
                     |||||||___________ Floppy drive 0 select
                     ||||||____________ Floppy drive 1 select
                     |||||_____________ RS232 Ready To Send (RTS)
                     ||||______________ RS232 Data Terminal Ready (DTR)
                     |||_______________ Centronics STROBE
                     ||________________ General purpose output (GPO)
                     |_________________ RESERVED
    
                     |xxxxxxxx|         PSG register 15 (I/O port B, printer port)
    

    STE Digital to Analogue Converter

    $FFFF8901  r/w  |......xx|          STE enable audio DMA
                           ||__________ Play/Stop
                           |___________ Loop/Play once
    
    $FFFF8903  r/w  |..xxxxxx|          Start address high
    $FFFF8905  r/w  |xxxxxxxx|          Start address medium
    $FFFF8907  r/w  |xxxxxxx.|          Start address low
    $FFFF8909  r/w  |..xxxxxx|          Address counter high
    $FFFF890B  r/w  |xxxxxxxx|          Address counter medium
    $FFFF890D  r/w  |xxxxxxx.|          Address counter low
    $FFFF890F  r/w  |..xxxxxx|          End address high
    $FFFF8911  r/w  |xxxxxxxx|          End address medium
    $FFFF8913  r/w  |xxxxxxx.|          End address low
    
    $FFFF8921  r/w  |x.....xx|          Stereo mode and frequency
                     |     |___________ 0 - 6.25KHz
                     |                  1 - 12.5KHz
                     |                  2 - 25KHz
                     |                  3 - 50KHz
                     |_________________ Mono/Stereo
    
    $FFFF8922  r/w  |xxxxxxxxxxxxxxxx|  Microwire data
    
                    Device  Command                    Operand (6-bit)
                    %10     %000 Mixer control         1 - mix chip
                    %10     %001 Bass                  0 - 12
                    %10     %010 Treble                0 - 12
                    %10     %011 Master volume         0 - 40
                    %10     %100 Right channel volume  0 - 20
                    %10     %101 Left channel volume   0 - 20
    
    $FFFF8924  r/w  |xxxxxxxxxxxxxxxx|  Microwire mask
    

    Blitter Chip

    $FFFF8A00  r/w  |xxxxxxxxxxxxxxxx|  1st of 16 half tone registers
    $FFFF8A20  r/w  |xxxxxxxxxxxxxxx.|  Source x byte increment
    $FFFF8A22  r/w  |xxxxxxxxxxxxxxx.|  Source y byte increment
    $FFFF8A24  r/w  |........xxxxxxxx|  Source address
    $FFFF8A26  r/w  |xxxxxxxxxxxxxxx.|
    $FFFF8A28  r/w  |xxxxxxxxxxxxxxxx|  Left end mask
    $FFFF8A2A  r/w  |xxxxxxxxxxxxxxxx|  Middle mask
    $FFFF8A2C  r/w  |xxxxxxxxxxxxxxxx|  Right end mask
    $FFFF8A2E  r/w  |xxxxxxxxxxxxxxx.|  Destination x byte increment
    $FFFF8A30  r/w  |xxxxxxxxxxxxxxx.|  Destination y byte increment
    $FFFF8A32  r/w  |........xxxxxxxx|  Destination address
    $FFFF8A34  r/w  |xxxxxxxxxxxxxxx.|
    $FFFF8A36  r/w  |xxxxxxxxxxxxxxxx|  x count (0=65536 words)
    $FFFF8A38  r/w  |xxxxxxxxxxxxxxxx|  y count (0=65536 lines)
    $FFFF8A3A  r/w  |......xx|          Halftone operation
                           |___________ Halftone operator (see table)
    
                                        Value  Blitter Output
                                        0      all ones
                                        1      halftone
                                        2      source
                                        3      source AND halftone
    
    $FFFF8A3B  r/w  |....xxxx|          Logical operation
                         |_____________ Logical operator (see table)
    
                                        Value  Blitter Output
                                        0      all zeros
                                        1      source AND destination
                                        2      source AND NOT destination
                                        3      source
                                        4      NOT source AND destination
                                        5      destination
                                        6      source XOR destination
                                        7      source OR destination
                                        8      NOT source AND NOT destination
                                        9      NOT source XOR destination
                                        10     NOT destination
                                        11     source OR NOT destination
                                        12     NOT source
                                        13     NOT source OR destination
                                        14     NOT source OR NOT destination
                                        15     all ones
    
    $FFFF8A3C  r/w  |xxx.xxxx|          Control register
                     ||| |_____________ Current line number
                     |||_______________ Smudge
                     ||________________ Hog
                     |_________________ Busy
    			  
    $FFFF8A3D  r/w  |xx..xxxx|          Skew register
                     ||  |_____________ Pixel skew
                     ||________________ NFSR (No Final Source Read)
                     |_________________ FXSR (Force eXtra Source Read)
    

    STE Joystick Ports

    $FFFF9201  r    |....xxxx|          Fire buttons
                         ||||__________ Fire 0
                         |||___________ Fire 2
                         ||____________ Fire 1
                         |_____________ Fire 3
    
    $FFFF9202  r/w  |xxxxxxxxxxxxxxxx|  Joystick directions (UDLR)
                     |   |   |   |_____ Joystick 0
                     |   |   |_________ Joystick 1
                     |   |_____________ Joystick 2
                     |_________________ Joystick 3
    
    $FFFF9211  r    |xxxxxxxx|          Paddle 0 X
    $FFFF9213  r    |xxxxxxxx|          Paddle 0 Y
    $FFFF9215  r    |xxxxxxxx|          Paddle 1 X
    $FFFF9217  r    |xxxxxxxx|          Paddle 1 Y
    $FFFF9220  r    |......xxxxxxxxxx|  Light pen/gun X
    $FFFF9222  r    |......xxxxxxxxxx|  Light pen/gun Y
    

    MK68901 Multi Function Periferal

    $FFFFFA01  r/w  |x.xx...x|          MFP GP I/O
                     | ||   |__________ Parallel port status
                     | ||______________ WD1772 active
                     | |_______________ Interrupt
                     |_________________ Mono monitor
    
    $FFFFFA03  r/w  |xxxxxxxx|          Active edge
                     ||||||||__________ Centronics busy
                     |||||||___________ RS-232 Data Carrier Detect (DCD)
                     ||||||____________ RS-232 Clear To Send (CTS)
                     |||||_____________ Reserved
                     ||||______________ ACIA Interrupt
                     |||_______________ FDC/HDC interrupt
                     ||________________ RS-232 ring indicator
                     |_________________ Mono monitor detect
    
    $FFFFFA05  r/w  |xxxxxxxx|          Data direction (all bits IN/OUT)
    
    $FFFFFA07  r/w  |xxxxxxxx|          Interrupt enable A
    $FFFFFA0B  r/w  |xxxxxxxx|          Interrupt pending A
    $FFFFFA0F  r/w  |xxxxxxxx|          Interrupt in-service A
    $FFFFFA13  r/w  |xxxxxxxx|          Interrupt mask A
                     ||||||||__________ MFP timer B (ENABLE/DISABLE)
                     |||||||___________ RS-232 transmit error
                     ||||||____________ RS-232 transmit buffer empty
                     |||||_____________ RS-232 receive error
                     ||||______________ RS-232 receive buffer full
                     |||_______________ MFP timer A
                     ||________________ RS-232 ring indicator
                     |_________________ Monochrome detect
     
    $FFFFFA09  r/w  |xxxxxxxx|          Interrupt enable B
    $FFFFFA0D  r/w  |xxxxxxxx|          Interrupt pending B
    $FFFFFA11  r/w  |xxxxxxxx|          Interrupt in-service B
    $FFFFFA15  r/w  |xxxxxxxx|          Interrupt mask B
                     ||||||||__________ Centronics busy (ENABLE/DISABLE)
                     |||||||___________ RS-232 Data Carrier Detect (DCD)
                     ||||||____________ RS-232 Clear To Send (CTS)
                     |||||_____________ Blitter done
                     ||||______________ MFP Timer D (USART)
                     |||_______________ MFP timer C (200Hz clock)
                     ||________________ ACIA interrupt
                     |_________________ FDC/HDC controller
    
    $FFFFFA17  r/w  |....x...|          Vector base
                         |_____________ Manual/Auto end of interrupts
    
    $FFFFFA19  r/w  |....xxxx|          Timer A control
    $FFFFFA1B  r/w  |....xxxx|          Timer B control
                         |_____________ Timer delay mode (see table)
    
                                        Value  Delay (divider)
                                        %0000  Timer stop
                                        %0001  4
                                        %0010  10
                                        %0011  16
                                        %0100  50
                                        %0101  64
                                        %0110  100
                                        %0111  200
                                        %1000  Event count mode
                                        %1xxx  Pulse extension mode (delay as above)
    
    $FFFFFA1D  r/w  |.xxx.xxx|          Timers C&D control
                      |   |____________ Timer D delay mode (see table)
                      |________________ Timer C delay mode (see table)
    
                                        Value  Delay (divider)
                                        %000   Timer stop
                                        %001   4
                                        %010   10
                                        %011   16
                                        %100   50
                                        %101   64
                                        %110   100
                                        %111   200
    
    $FFFFFA1F  r/w  |xxxxxxxx|          Timer A data
    $FFFFFA21  r/w  |xxxxxxxx|          Timer B data
    $FFFFFA23  r/w  |xxxxxxxx|          Timer C data
    $FFFFFA25  r/w  |xxxxxxxx|          Timer D data
    $FFFFFA27  r/w  |xxxxxxxx|          Sync character
    
    $FFFFFA29  r/w  |xxxxxxx.|          USART control register
                     | | |||___________ Parity odd/even
                     | | ||____________ Parity enable/disable
                     | | |_____________ Protocol A (see table)
                     | |_______________ Protocol B (see table)
                     |_________________ Clock divide by 16 off/on
    
                    Protocol A                        Protocol B
                    Value  Stop  Start  Format        Value  Data
                    %00    0     0      Synchronous	  %00    8
                    %01    1     1      Asynchronous  %01    7
                    %10    1     1.5    Asynchronous  %10    6
                    %11    1     2      Asynchronous  %11    5
    
    $FFFFFA2B  r/w  |xxxxxxxx|          Receiver status
                     ||||||||__________ Receiver enable bit
                     |||||||___________ Synchronous strip enable
                     ||||||____________ Match/Character in progress
                     |||||_____________ Found, Search/Break detected
                     ||||______________ Frame error
                     |||_______________ Parity error
                     ||________________ Frame error
                     |_________________ Overrun error
    
    $FFFFFA2D  r/w  |xxxxxxxx|          Transmitter status
                     ||||||||__________ Transmitter enable bit
                     |||||||___________ Low bit
                     ||||||____________ High bit
                     |||||_____________ Break
                     ||||______________ End of transmission
                     |||_______________ Auto turnaround
                     ||________________ Underrun error
                     |_________________ Buffer empty
    
    $FFFFFA2F  r/w  |xxxxxxxx|          USART data
    

    Floating Point Unit

    $FFFFFA40  r/w                      Status register
    $FFFFFA4A  r/w                      Command register
    $FFFFFA4E  r/w                      CCR register
    $FFFFFA50  r/w                      Operation register
    

    MC6850 Asynchonous Communications Interface Adaptor

    $FFFFFC00  r/w  |xxxxxxxx|          Keyboard ACIA control
    $FFFFFC02  r/w  |xxxxxxxx|          Keyboard ACIA data
    $FFFFFC04  r/w  |xxxxxxxx|          MIDI ACIA control
    $FFFFFC06  r/w  |xxxxxxxx|          MIDI ACIA data
    

    Clock (If available)

    $FFFFFC21  r/w  |xxxxxxxx|          Seconds (units)
    $FFFFFC23  r/w  |xxxxxxxx|          Seconds (tens)
    $FFFFFC25  r/w  |xxxxxxxx|          Minutes (units)
    $FFFFFC27  r/w  |xxxxxxxx|          Minutes (tens)
    $FFFFFC29  r/w  |xxxxxxxx|          Hours (units)
    $FFFFFC2B  r/w  |xxxxxxxx|          Hours (tens)
    $FFFFFC2D  r/w  |xxxxxxxx|          Weekday
    $FFFFFC2F  r/w  |xxxxxxxx|          Day (units)
    $FFFFFC31  r/w  |xxxxxxxx|          Day (tens)
    $FFFFFC33  r/w  |xxxxxxxx|          Month (units)
    $FFFFFC35  r/w  |xxxxxxxx|          Month (tens)
    $FFFFFC37  r/w  |xxxxxxxx|          Year (units)
    $FFFFFC39  r/w  |xxxxxxxx|          Year (tens)
    $FFFFFC3B  r/w  |xxxxxxxx|          Clock mode
    $FFFFFC3D  r/w  |xxxxxxxx|          Clock test
    $FFFFFC3F  r/w  |xxxxxxxx|          Clock reset
    

    Cartridge Port

    01 03 05 07 09 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 02 04 06 08 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40
    Pin Use Pin Use 01 +5V 21 Address 8 02 +5V 22 Address 14 03 Data 14 23 Address 7 04 Data 15 24 Address 9 05 Data 12 25 Address 6 06 Data 13 26 Address 10 07 Data 10 27 Address 5 08 Data 11 28 Address 12 09 Data 8 29 Address 11 10 Data 9 30 Address 4 11 Data 6 31 ROM select 3 12 Data 7 32 Address 3 13 Data 4 33 ROM select 4 14 Data 5 34 Address 2 15 Data 2 35 Upper data strobe 16 Data 3 36 Address 1 17 Data 0 37 Lower data strobe 18 Data 1 38 Ground 19 Address 13 39 Ground 20 Address 15 40 Ground

    ACSI DMA Port

    Pin Use                     Pin Use
    01  Data 0                  11  Ground
    02  Data 1                  12  Reset
    03  Data 2                  13  Ground
    04  Data 3                  14  Acknowledge
    05  Data 4                  15  Ground
    06  Data 5                  16  A1
    07  Data 6                  17  Ground
    08  Data 7                  18  Read/Write
    09  Chip select             19  Data request
    10  Interrupt request
    

    Parallel Printer Port

    Pin    Use                  Pin    Use
    01     Centronics STROBE    08     Data 6
    02     Data 0               09     Data 7
    03     Data 1               10     N/C
    04     Data 2               11     Busy
    05     Data 3               12-17  N/C
    06     Data 4               18-25  Ground
    07     Data 5
    

    Joystick and Mouse Ports

    Port 0 - Mouse/Joystick 0   Port 1 - Joystick 1
    Pin Use                     Pin Use
    01  XB / Up                 01  Up
    02  XA / Down               02  Down
    03  YA / Left               03  Left
    04  YB / Right              04  Right
    05  N/C                     05  Port 0 enable
    06  Left button / Fire      06  Fire
    07  +5V DC                  07  +5V DC
    08  Ground                  08  Ground
    09  Right button            09  N/C
    

    STE Joystick Ports

    Port A                      Port B
    Pin Use                     Pin Use
    01  Up 0                    01  Up 1
    02  Down 0                  02  Down 1
    03  Left 0                  03  Left 1
    04  Right 0                 04  Right 1
    05  Paddle 0Y               05  Paddle 1Y
    06  Fire 0                  06  Fire 1
    07  Vcc +5V DC              07  Vcc +5V DC	
    09  Ground                  09  Ground
    10  Fire 2                  10  Fire 3
    11  Up 2                    11  Up 3
    12  Down 2                  12  Down 3
    13  Left 2                  13  Left 3
    14  Right 2                 14  Right 3
    15  Paddle 0X               15  Paddle 1X
    

    Monitor Port

    Pin Use
    01  Audio out
    02  Composite video
    03  General purpose output
    04  Monochrome detect
    05  Audio in
    06  Green
    07  Red
    08  Peritel power
    09  Horizontal sync
    10  Blue
    11  Monochrome
    12  Vertical sync
    13  Ground
    

    RS232 Serial Port

    Pin Use
    01  Protective ground
    02  Transmitted data
    03  Received data
    04  Request To Send (RTS)
    05  Clear To Send (CTS)
    07  Signal ground
    08  Data Carrier Detect (DCD)
    20  Data Terminal Ready (DTR)
    22  Ring indicator
    

    MIDI Ports

    MIDI Out/Thru               MIDI In
    Pin Use                     Pin Use
    01  THRU data               01  THRU data
    02  Shield ground           02  Shield ground
    03  THRU loop return        03  THRU loop return
    04  Transmit data           04  Receive data
    05  OUT loop return         05  OUT loop return
    

    External Floppy Port

    DIN 14-pin male connector (scanned at 100 dpi) original external floppy cable (scanned at 100 dpi) DIN 14-pin male connector (scanned at 100 dpi)
     

    Original external floppy cable (pin to pin)

     
    Pin Use
    01  Read data
    02  Side 0 select
    03  Logic ground
    04  Index pulse
    05  Drive 0 select
    06  Drive 1 select
    07  Logic ground
    08  Motor on
    09  Direction in
    10  Step
    11  Write data
    12  Write gate
    13  Track 00
    14  Write protect