root/sys/arch/atari/atari/vectors.s
/*      $NetBSD: vectors.s,v 1.26 2026/03/21 20:14:54 thorpej Exp $     */

/*
 * Copyright (c) 1988 University of Utah
 * Copyright (c) 1990 Regents of the University of California.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 *      @(#)vectors.s   7.2 (Berkeley) 5/7/91
 */

        .data
GLOBAL(vectab)
        .long   0x4ef80400      | 0: jmp 0x400:w (unused reset SSP)
        .long   0               | 1: NOT USED (reset PC)
        VECTOR(buserr_early)    | 2: bus error
        VECTOR(addrerr_early)   | 3: address error
        VECTOR(illinst)         | 4: illegal instruction
        VECTOR(zerodiv)         | 5: zero divide
        VECTOR(chkinst)         | 6: CHK instruction
        VECTOR(trapvinst)       | 7: TRAPV instruction
        VECTOR(privinst)        | 8: privilege violation
        VECTOR(trace)           | 9: trace
        VECTOR(illinst)         | 10: line 1010 emulator
        VECTOR(fpfline)         | 11: line 1111 emulator
        VECTOR(badtrap)         | 12: unassigned, reserved
        VECTOR(coperr)          | 13: coprocessor protocol violation
        VECTOR(fmterr)          | 14: format error
        VECTOR(badtrap)         | 15: uninitialized interrupt vector
        VECTOR(badtrap)         | 16: unassigned, reserved
        VECTOR(badtrap)         | 17: unassigned, reserved
        VECTOR(badtrap)         | 18: unassigned, reserved
        VECTOR(badtrap)         | 19: unassigned, reserved
        VECTOR(badtrap)         | 20: unassigned, reserved
        VECTOR(badtrap)         | 21: unassigned, reserved
        VECTOR(badtrap)         | 22: unassigned, reserved
        VECTOR(badtrap)         | 23: unassigned, reserved
        VECTOR(spurintr)        | 24: spurious interrupt

GLOBAL(autovects)
#ifdef _ATARIHW_
        VECTOR(lev1intr)        | 25: level 1 interrupt autovector
#else
        VECTOR(badtrap)         | 25: Not supported by hardware
#endif
        VECTOR(lev2intr)        | 26: level 2 interrupt autovector
        VECTOR(lev3intr)        | 27: level 3 interrupt autovector
        VECTOR(lev4intr)        | 28: level 4 interrupt autovector
        VECTOR(lev5intr)        | 29: level 5 interrupt autovector
        VECTOR(lev6intr)        | 30: level 6 interrupt autovector
        VECTOR(lev7intr)        | 31: level 7 interrupt autovector
        VECTOR(trap0)           | 32: syscalls
#ifdef COMPAT_13
        VECTOR(trap1)           | 33: compat_13_sigreturn
#else
        VECTOR(illinst)         | 33: TRAP instruction vector
#endif
        VECTOR(trap2)           | 34: trace
#ifdef COMPAT_16
        VECTOR(trap3)           | 35: compat_16_sigreturn special syscall
#else
        VECTOR(illinst)
#endif
        VECTOR(illinst)         | 36: TRAP instruction vector
        VECTOR(illinst)         | 37: TRAP instruction vector
        VECTOR(illinst)         | 38: TRAP instruction vector
        VECTOR(illinst)         | 39: TRAP instruction vector
        VECTOR(illinst)         | 40: TRAP instruction vector
        VECTOR(illinst)         | 41: TRAP instruction vector
        VECTOR(illinst)         | 42: TRAP instruction vector
        VECTOR(illinst)         | 43: TRAP instruction vector
        VECTOR(trap12)          | 44: TRAP instruction vector
        VECTOR(illinst)         | 45: TRAP instruction vector
        VECTOR(illinst)         | 46: TRAP instruction vector
        VECTOR(trap15)          | 47: TRAP instruction vector
        /* N.B. FPCP vectors are patched up after initializing the FPU. */
        VECTOR(badtrap)         | 48: FPCP branch/set on unordered cond
        VECTOR(badtrap)         | 49: FPCP inexact result
        VECTOR(badtrap)         | 50: FPCP divide by zero
        VECTOR(badtrap)         | 51: FPCP underflow
        VECTOR(badtrap)         | 52: FPCP operand error
        VECTOR(badtrap)         | 53: FPCP overflow
        VECTOR(badtrap)         | 54: FPCP signalling NAN
        VECTOR(badtrap)         | 55: FPCP unimplemented data type
        VECTOR(badtrap)         | 56: unassigned, reserved
        VECTOR(badtrap)         | 57: unassigned, reserved
        VECTOR(badtrap)         | 58: unassigned, reserved
        VECTOR(badtrap)         | 59: unassigned, reserved
        VECTOR(badtrap)         | 60: unassigned, reserved
        VECTOR(badtrap)         | 61: unassigned, reserved
        VECTOR(badtrap)         | 62: unassigned, reserved
        VECTOR(badtrap)         | 63: unassigned, reserved

GLOBAL(uservects)
        /*
         * MFP 1 auto vectors (ipl 6)
         */
        VECTOR(intr_glue)       |  64: parallel port - BUSY
        VECTOR(badmfpint)       |  65: modem port 1 - DCD
        VECTOR(badmfpint)       |  66: modem port 1 - CTS
        VECTOR(badmfpint)       |  67: ISA1 [ Hades only ]
        VECTOR(badmfpint)       |  68: modem port 1 baudgen (Timer D)
#ifdef STATCLOCK
        ASVECTOR(mfp_timc)      |  69: Timer C {stat,prof}clock
#else
        VECTOR(badmfpint)       |  69: Timer C
#endif /* STATCLOCK */
#if NKBD > 0
        ASVECTOR(mfp_kbd)       |  70: KBD/MIDI IRQ
#else
        VECTOR(badmfpint)       |  70:
#endif /* NKBD > 0 */
        VECTOR(intr_glue)       |  71: FDC/ACSI DMA
        VECTOR(badmfpint)       |  72: Display enable counter
        VECTOR(badmfpint)       |  73: modem port 1 - XMIT error
        VECTOR(badmfpint)       |  74: modem port 1 - XMIT buffer empty
        VECTOR(badmfpint)       |  75: modem port 1 - RCV error
        VECTOR(badmfpint)       |  76: modem port 1 - RCV buffer full
        ASVECTOR(mfp_tima)      |  77: Timer A (System clock)
        VECTOR(badmfpint)       |  78: modem port 1 - RI
        VECTOR(badmfpint)       |  79: Monochrome detect (ISA2 [ Hades only ])

        /*
         * MFP 2 auto vectors (ipl 6)
         */
        VECTOR(badmfpint)       |  80: I/O pin 1 J602
        VECTOR(badmfpint)       |  81: I/O pin 3 J602
        VECTOR(badmfpint)       |  82: SCC-DMA
        VECTOR(badmfpint)       |  83: modem port 2 - RI
        VECTOR(badmfpint)       |  84: serial port 1 baudgen (Timer D)
        VECTOR(badmfpint)       |  85: TCCLC SCC (Timer C)
        VECTOR(badmfpint)       |  86: FDC Drive Ready
#if NNCRSCSI > 0
        ASVECTOR(mfp2_5380dm)   |  87: SCSI DMA
#else
        VECTOR(badmfpint)       |  87:
#endif /* NNCRSCSI > 0 */
        VECTOR(badmfpint)       |  88: Display enable (Timer B)
        VECTOR(badmfpint)       |  89: serial port 1 - XMIT error
        VECTOR(badmfpint)       |  90: serial port 1 - XMIT buffer empty
        VECTOR(badmfpint)       |  91: serial port 1 - RCV error
        VECTOR(badmfpint)       |  92: serial port 1 - RCV buffer full
        VECTOR(badmfpint)       |  93: Timer A
        VECTOR(badmfpint)       |  94: RTC
#if NNCRSCSI > 0
        ASVECTOR(mfp2_5380)     |  95: SCSI 5380
#else
        VECTOR(badmfpint)       |  95:
#endif /* NNCRSCSI > 0 */

        /*
         * Interrupts from the 8530 SCC
         */
        VECTOR(badtrap)         |  96: SCC Tx empty channel B
        VECTOR(badtrap)         |  97: Not used
        VECTOR(badtrap)         |  98: SCC Ext./Status Channel B
        VECTOR(badtrap)         |  99: Not used
        VECTOR(badtrap)         | 100: SCC Rx Channel B
        VECTOR(badtrap)         | 101: Not used
        VECTOR(badtrap)         | 102: SCC Special Rx cond.  Channel B
        VECTOR(badtrap)         | 103: Not used
        VECTOR(badtrap)         | 104: SCC Tx empty channel A
        VECTOR(badtrap)         | 105: Not used
        VECTOR(badtrap)         | 106: SCC Ext./Status Channel A
        VECTOR(badtrap)         | 107: Not used
        VECTOR(badtrap)         | 108: SCC Rx Channel A
        VECTOR(badtrap)         | 109: Not used
        VECTOR(badtrap)         | 110: SCC Special Rx cond.  Channel A
        VECTOR(badtrap)         | 111: Not used

#define BADTRAP16       VECTOR(badtrap) ; VECTOR(badtrap) ; \
                        VECTOR(badtrap) ; VECTOR(badtrap) ; \
                        VECTOR(badtrap) ; VECTOR(badtrap) ; \
                        VECTOR(badtrap) ; VECTOR(badtrap) ; \
                        VECTOR(badtrap) ; VECTOR(badtrap) ; \
                        VECTOR(badtrap) ; VECTOR(badtrap) ; \
                        VECTOR(badtrap) ; VECTOR(badtrap) ; \
                        VECTOR(badtrap) ; VECTOR(badtrap) ;
        BADTRAP16               | 112-255: user interrupt vectors
        BADTRAP16               | 112-255: user interrupt vectors
        BADTRAP16               | 112-255: user interrupt vectors
        BADTRAP16               | 112-255: user interrupt vectors
        BADTRAP16               | 112-255: user interrupt vectors
        BADTRAP16               | 112-255: user interrupt vectors
        BADTRAP16               | 112-255: user interrupt vectors
        BADTRAP16               | 112-255: user interrupt vectors
        BADTRAP16               | 112-255: user interrupt vectors
        BADTRAP16               | 112-255: user interrupt vectors