From 1acb62a3e4408c1dfda13cfda517d781e7c0751e Mon Sep 17 00:00:00 2001 From: thorpej Date: Sat, 13 Jan 2024 18:51:37 +0000 Subject: [PATCH] Switch the sun68k platforms over to the common m68k vector table. --- sys/arch/sun2/include/vectors.h | 3 + sys/arch/sun2/sun2/locore2.c | 8 +- sys/arch/sun2/sun2/promlib.c | 8 +- sys/arch/sun3/include/vectors.h | 3 + sys/arch/sun3/sun3/locore2.c | 8 +- sys/arch/sun3/sun3/sunmon.c | 8 +- sys/arch/sun3/sun3x/locore2.c | 8 +- sys/arch/sun68k/conf/files.sun68k | 4 +- .../{sun68k/vector.h => include/vectors.h} | 51 +++---- sys/arch/sun68k/sun68k/isr.c | 57 ++----- sys/arch/sun68k/sun68k/vector.c | 139 ------------------ 11 files changed, 67 insertions(+), 230 deletions(-) create mode 100644 sys/arch/sun2/include/vectors.h create mode 100644 sys/arch/sun3/include/vectors.h rename sys/arch/sun68k/{sun68k/vector.h => include/vectors.h} (63%) delete mode 100644 sys/arch/sun68k/sun68k/vector.c diff --git a/sys/arch/sun2/include/vectors.h b/sys/arch/sun2/include/vectors.h new file mode 100644 index 000000000000..e005e113bdcd --- /dev/null +++ b/sys/arch/sun2/include/vectors.h @@ -0,0 +1,3 @@ +/* $NetBSD: vectors.h,v 1.1 2024/01/13 18:51:37 thorpej Exp $ */ + +#include diff --git a/sys/arch/sun2/sun2/locore2.c b/sys/arch/sun2/sun2/locore2.c index c73775dda128..7db92985f736 100644 --- a/sys/arch/sun2/sun2/locore2.c +++ b/sys/arch/sun2/sun2/locore2.c @@ -1,4 +1,4 @@ -/* $NetBSD: locore2.c,v 1.28 2020/07/11 13:07:01 nia Exp $ */ +/* $NetBSD: locore2.c,v 1.29 2024/01/13 18:51:38 thorpej Exp $ */ /*- * Copyright (c) 1996 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: locore2.c,v 1.28 2020/07/11 13:07:01 nia Exp $"); +__KERNEL_RCSID(0, "$NetBSD: locore2.c,v 1.29 2024/01/13 18:51:38 thorpej Exp $"); #include "opt_ddb.h" #include "opt_modular.h" @@ -54,10 +54,10 @@ __KERNEL_RCSID(0, "$NetBSD: locore2.c,v 1.28 2020/07/11 13:07:01 nia Exp $"); #include #include #include +#include #include #include -#include #include "ksyms.h" @@ -285,7 +285,7 @@ _bootstrap(void) * Point interrupts/exceptions to our vector table. * (Until now, we use the one setup by the PROM.) */ - setvbr((void **)vector_table); + vec_init(); /* Interrupts are enabled later, after autoconfig. */ /* diff --git a/sys/arch/sun2/sun2/promlib.c b/sys/arch/sun2/sun2/promlib.c index 41259d6ec327..05307e2dce4d 100644 --- a/sys/arch/sun2/sun2/promlib.c +++ b/sys/arch/sun2/sun2/promlib.c @@ -1,4 +1,4 @@ -/* $NetBSD: promlib.c,v 1.19 2020/09/10 02:03:44 rin Exp $ */ +/* $NetBSD: promlib.c,v 1.20 2024/01/13 18:51:38 thorpej Exp $ */ /*- * Copyright (c) 1996 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: promlib.c,v 1.19 2020/09/10 02:03:44 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: promlib.c,v 1.20 2024/01/13 18:51:38 thorpej Exp $"); #include #include @@ -41,10 +41,10 @@ __KERNEL_RCSID(0, "$NetBSD: promlib.c,v 1.19 2020/09/10 02:03:44 rin Exp $"); #define _SUN2_PROMLIB_PRIVATE #include +#include #include #include -#include #include /* @@ -131,7 +131,7 @@ _mode_kernel(struct kernel_state *state, int full) */ if (full) { set_clk_mode(1, 0); - setvbr(vector_table); + setvbr(vectab); set_clk_mode(0, 1); splx(state->saved_spl); } diff --git a/sys/arch/sun3/include/vectors.h b/sys/arch/sun3/include/vectors.h new file mode 100644 index 000000000000..a3a63a0e3480 --- /dev/null +++ b/sys/arch/sun3/include/vectors.h @@ -0,0 +1,3 @@ +/* $NetBSD: vectors.h,v 1.1 2024/01/13 18:51:38 thorpej Exp $ */ + +#include diff --git a/sys/arch/sun3/sun3/locore2.c b/sys/arch/sun3/sun3/locore2.c index b1e35f32d1ef..8761c5c57e81 100644 --- a/sys/arch/sun3/sun3/locore2.c +++ b/sys/arch/sun3/sun3/locore2.c @@ -1,4 +1,4 @@ -/* $NetBSD: locore2.c,v 1.103 2020/07/11 13:07:01 nia Exp $ */ +/* $NetBSD: locore2.c,v 1.104 2024/01/13 18:51:38 thorpej Exp $ */ /*- * Copyright (c) 1996 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: locore2.c,v 1.103 2020/07/11 13:07:01 nia Exp $"); +__KERNEL_RCSID(0, "$NetBSD: locore2.c,v 1.104 2024/01/13 18:51:38 thorpej Exp $"); #include "opt_ddb.h" #include "opt_modular.h" @@ -54,12 +54,12 @@ __KERNEL_RCSID(0, "$NetBSD: locore2.c,v 1.103 2020/07/11 13:07:01 nia Exp $"); #include #include #include +#include #include #include #include #include -#include #include "ksyms.h" @@ -344,7 +344,7 @@ _bootstrap(void) * it will not cause "spurrious level 7" complaints. * Done after _vm_init so the PROM can debug that. */ - setvbr((void **)vector_table); + vec_init(); /* Interrupts are enabled later, after autoconfig. */ /* diff --git a/sys/arch/sun3/sun3/sunmon.c b/sys/arch/sun3/sun3/sunmon.c index a12a9b3ed4de..39c386fb15f4 100644 --- a/sys/arch/sun3/sun3/sunmon.c +++ b/sys/arch/sun3/sun3/sunmon.c @@ -1,4 +1,4 @@ -/* $NetBSD: sunmon.c,v 1.23 2024/01/12 23:46:53 thorpej Exp $ */ +/* $NetBSD: sunmon.c,v 1.24 2024/01/13 18:51:38 thorpej Exp $ */ /*- * Copyright (c) 1996 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: sunmon.c,v 1.23 2024/01/12 23:46:53 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sunmon.c,v 1.24 2024/01/13 18:51:38 thorpej Exp $"); #include #include @@ -39,12 +39,12 @@ __KERNEL_RCSID(0, "$NetBSD: sunmon.c,v 1.23 2024/01/12 23:46:53 thorpej Exp $"); #include #include +#include #include #include #include -#include static void **sunmon_vbr; static void *sunmon_vcmd; /* XXX: always 0? */ @@ -76,7 +76,7 @@ _mode_kernel(void) /* Disable the PROM NMI clock. */ set_clk_mode(0, IREG_CLOCK_ENAB_7, 0); /* Restore our own vector table */ - setvbr(vector_table); + setvbr(vectab); /* Enable our level-5 clock. */ set_clk_mode(IREG_CLOCK_ENAB_5, 0, 1); } diff --git a/sys/arch/sun3/sun3x/locore2.c b/sys/arch/sun3/sun3x/locore2.c index 5f1417331c1d..61e51f250cf0 100644 --- a/sys/arch/sun3/sun3x/locore2.c +++ b/sys/arch/sun3/sun3x/locore2.c @@ -1,4 +1,4 @@ -/* $NetBSD: locore2.c,v 1.42 2020/07/11 13:07:01 nia Exp $ */ +/* $NetBSD: locore2.c,v 1.43 2024/01/13 18:51:38 thorpej Exp $ */ /*- * Copyright (c) 1996 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: locore2.c,v 1.42 2020/07/11 13:07:01 nia Exp $"); +__KERNEL_RCSID(0, "$NetBSD: locore2.c,v 1.43 2024/01/13 18:51:38 thorpej Exp $"); #include "opt_ddb.h" @@ -53,10 +53,10 @@ __KERNEL_RCSID(0, "$NetBSD: locore2.c,v 1.42 2020/07/11 13:07:01 nia Exp $"); #include #include #include +#include #include #include -#include /* This is defined in locore.s */ extern char kernel_text[]; @@ -226,7 +226,7 @@ _bootstrap(void) * it will not cause "spurrious level 7" complaints. * Done after _vm_init so the PROM can debug that. */ - setvbr((void **)vector_table); + vec_init(); /* Interrupts are enabled later, after autoconfig. */ /* diff --git a/sys/arch/sun68k/conf/files.sun68k b/sys/arch/sun68k/conf/files.sun68k index 1b5f6cd2e887..b490deb2a401 100644 --- a/sys/arch/sun68k/conf/files.sun68k +++ b/sys/arch/sun68k/conf/files.sun68k @@ -1,4 +1,4 @@ -# $NetBSD: files.sun68k,v 1.5 2006/10/05 14:46:12 tsutsui Exp $ +# $NetBSD: files.sun68k,v 1.6 2024/01/13 18:51:38 thorpej Exp $ # # common sun68k configuration info @@ -10,10 +10,10 @@ file arch/sun68k/sun68k/bus.c file arch/sun68k/sun68k/ctrlsp.S !_sun3x_ file arch/sun68k/sun68k/isr.c file arch/sun68k/sun68k/stub.c -file arch/sun68k/sun68k/vector.c file arch/m68k/m68k/kgdb_machdep.c kgdb file arch/m68k/m68k/procfs_machdep.c procfs +file arch/m68k/m68k/vectors.c file arch/m68k/m68k/vm_machdep.c file dev/sun/disksubr.c diff --git a/sys/arch/sun68k/sun68k/vector.h b/sys/arch/sun68k/include/vectors.h similarity index 63% rename from sys/arch/sun68k/sun68k/vector.h rename to sys/arch/sun68k/include/vectors.h index d4054b35e0a8..3f460f7b18a7 100644 --- a/sys/arch/sun68k/sun68k/vector.h +++ b/sys/arch/sun68k/include/vectors.h @@ -1,11 +1,11 @@ -/* $NetBSD: vector.h,v 1.4 2008/04/28 20:23:39 martin Exp $ */ +/* $NetBSD: vectors.h,v 1.1 2024/01/13 18:51:38 thorpej Exp $ */ /*- - * Copyright (c) 1996 The NetBSD Foundation, Inc. + * Copyright (c) 1996, 2024 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation - * by Adam Glass. + * by Adam Glass and Gordon W. Ross, and by Jason R. Thorpe. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -29,31 +29,28 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#define NVECTORS 256 +#ifndef _SUN68K_VECTORS_H_ +#define _SUN68K_VECTORS_H_ -#define AUTOVEC_BASE 0x18 +#ifdef _KERNEL -extern void *vector_table[]; +#include -void _isr_autovec(void); +#define MACHINE_RESET_SP (void *)0xfffe000 +#define MACHINE_RESET_PC (void *)0xfef0000 -void addrerr(void); -void badtrap(void); -void buserr(void); -void chkinst(void); -void coperr(void); -void fmterr(void); -void fpfline(void); -void fpunsupp(void); -void illinst(void); -void privinst(void); -void trace(void); -void trap0(void); -void trap1(void); -void trap12(void); -void trap15(void); -void trap2(void); -void trap3(void); -void trapvinst(void); -void zerodiv(void); -void fpfault(void); +#define MACHINE_BUSERR_HANDLER buserr +#define MACHINE_ADDRERR_HANDLER addrerr + +#define MACHINE_AV0_HANDLER _isr_autovec +#define MACHINE_AV1_HANDLER _isr_autovec +#define MACHINE_AV2_HANDLER _isr_autovec +#define MACHINE_AV3_HANDLER _isr_autovec +#define MACHINE_AV4_HANDLER _isr_autovec +#define MACHINE_AV5_HANDLER _isr_autovec +#define MACHINE_AV6_HANDLER _isr_autovec +#define MACHINE_AV7_HANDLER _isr_autovec + +#endif /* _KERNEL */ + +#endif /* _SUN68K_VECTORS_H_ */ diff --git a/sys/arch/sun68k/sun68k/isr.c b/sys/arch/sun68k/sun68k/isr.c index 0a0d87dcb1db..c3e2c3573fac 100644 --- a/sys/arch/sun68k/sun68k/isr.c +++ b/sys/arch/sun68k/sun68k/isr.c @@ -1,4 +1,4 @@ -/* $NetBSD: isr.c,v 1.28 2024/01/12 23:36:30 thorpej Exp $ */ +/* $NetBSD: isr.c,v 1.29 2024/01/13 18:51:38 thorpej Exp $ */ /*- * Copyright (c) 1996 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: isr.c,v 1.28 2024/01/12 23:36:30 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: isr.c,v 1.29 2024/01/13 18:51:38 thorpej Exp $"); #include #include @@ -48,8 +48,7 @@ __KERNEL_RCSID(0, "$NetBSD: isr.c,v 1.28 2024/01/12 23:36:30 thorpej Exp $"); #include #include - -#include +#include extern int intrcnt[]; /* statistics */ @@ -68,9 +67,6 @@ struct isr { int idepth; -void set_vector_entry(int, void *); -void *get_vector_entry(int); - /* * These are called from locore. The "struct clockframe" arg * is really just the normal H/W interrupt frame format. @@ -83,7 +79,7 @@ void isr_add_custom(int level, void *handler) { - set_vector_entry(AUTOVEC_BASE + level, handler); + vec_set_entry(VECI_INTRAV0 + level, handler); } @@ -101,12 +97,9 @@ isr_autovec(struct clockframe cf) idepth++; - vec = (cf.cf_vo & 0xFFF) >> 2; -#ifdef DIAGNOSTIC - if ((vec < AUTOVEC_BASE) || (vec >= (AUTOVEC_BASE + NUM_LEVELS))) - panic("isr_autovec: bad vec"); -#endif - ipl = vec - AUTOVEC_BASE; + vec = VECO_TO_VECI(cf.cf_vo & 0xFFF); + KASSERT(vec >= VECI_INTRAV0 && vec <= VECI_INTRAV7); + ipl = vec - VECI_INTRAV0; n = intrcnt[ipl]; intrcnt[ipl] = n + 1; @@ -166,12 +159,13 @@ static struct vector_handler isr_vector_handlers[192]; void isr_vectored(struct clockframe cf) { + extern char badtrap[]; struct vector_handler *vh; int ipl, vec; idepth++; - vec = (cf.cf_vo & 0xFFF) >> 2; + vec = VECO_TO_VECI(cf.cf_vo & 0xFFF); ipl = getsr(); ipl = (ipl >> 8) & 7; @@ -179,15 +173,15 @@ isr_vectored(struct clockframe cf) curcpu()->ci_data.cpu_nintr++; #ifdef DIAGNOSTIC - if (vec < 64 || vec >= 256) { + if (vec < VECI_USRVEC_START || vec >= NVECTORS) { printf("isr_vectored: vector=0x%x (invalid)\n", vec); goto out; } #endif - vh = &isr_vector_handlers[vec - 64]; + vh = &isr_vector_handlers[vec - VECI_USRVEC_START]; if (vh->func == NULL) { printf("isr_vectored: vector=0x%x (nul func)\n", vec); - set_vector_entry(vec, (void *)badtrap); + vec_set_entry(vec, badtrap); goto out; } @@ -211,39 +205,18 @@ isr_add_vectored(isr_func_t func, void *arg, int level, int vec) { struct vector_handler *vh; - if (vec < 64 || vec >= 256) { + if (vec < VECI_USRVEC_START || vec >= NVECTORS) { printf("isr_add_vectored: vect=0x%x (invalid)\n", vec); return; } - vh = &isr_vector_handlers[vec - 64]; + vh = &isr_vector_handlers[vec - VECI_USRVEC_START]; if (vh->func) { printf("isr_add_vectored: vect=0x%x (in use)\n", vec); return; } vh->func = func; vh->arg = arg; - set_vector_entry(vec, (void *)_isr_vectored); -} - -/* - * XXX - could just kill these... - */ -void -set_vector_entry(int entry, void *handler) -{ - - if ((entry < 0) || (entry >= NVECTORS)) - panic("set_vector_entry: setting vector too high or low"); - vector_table[entry] = handler; -} - -void * -get_vector_entry(int entry) -{ - - if ((entry < 0) || (entry >= NVECTORS)) - panic("get_vector_entry: setting vector too high or low"); - return (void *)vector_table[entry]; + vec_set_entry(vec, _isr_vectored); } const uint16_t ipl2psl_table[NIPL] = { diff --git a/sys/arch/sun68k/sun68k/vector.c b/sys/arch/sun68k/sun68k/vector.c deleted file mode 100644 index 0efa7083511c..000000000000 --- a/sys/arch/sun68k/sun68k/vector.c +++ /dev/null @@ -1,139 +0,0 @@ -/* $NetBSD: vector.c,v 1.7 2008/04/28 20:23:39 martin Exp $ */ - -/*- - * Copyright (c) 1996 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Adam Glass and Gordon W. Ross. - * - * 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. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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. - */ - -/* - * The interrupt vector table. - */ - -#include -__KERNEL_RCSID(0, "$NetBSD: vector.c,v 1.7 2008/04/28 20:23:39 martin Exp $"); - -#include "opt_compat_netbsd.h" -#include "opt_compat_sunos.h" - -#include -#include - -#include "vector.h" - -#define BADTRAP16 badtrap, badtrap, badtrap, badtrap, \ - badtrap, badtrap, badtrap, badtrap, \ - badtrap, badtrap, badtrap, badtrap, \ - badtrap, badtrap, badtrap, badtrap - -#define fpbsun fpfault -#define fpdz fpfault -#define fpinex fpfault -#define fpoperr fpfault -#define fpovfl fpfault -#define fpsnan fpfault -#define fpunfl fpfault - -void *vector_table[NVECTORS] = { - (void *)0xfffe000, /* 0: NOT USED (reset SP) */ - (void *)0xfef0000, /* 1: NOT USED (reset PC) */ - buserr, /* 2: bus error */ - addrerr, /* 3: address error */ - illinst, /* 4: illegal instruction */ - zerodiv, /* 5: zero divide */ - chkinst, /* 6: CHK instruction */ - trapvinst, /* 7: TRAPV instruction */ - privinst, /* 8: privilege violation */ - trace, /* 9: trace (single-step) */ - illinst, /* 10: line 1010 emulator */ - fpfline, /* 11: line 1111 emulator */ - badtrap, /* 12: unassigned, reserved */ - coperr, /* 13: coprocessor protocol violatio */ - fmterr, /* 14: format error */ - badtrap, /* 15: uninitialized interrupt vecto */ - badtrap, /* 16: unassigned, reserved */ - badtrap, /* 17: unassigned, reserved */ - badtrap, /* 18: unassigned, reserved */ - badtrap, /* 19: unassigned, reserved */ - badtrap, /* 20: unassigned, reserved */ - badtrap, /* 21: unassigned, reserved */ - badtrap, /* 22: unassigned, reserved */ - badtrap, /* 23: unassigned, reserved */ - _isr_autovec, /* 24: spurious interrupt */ - _isr_autovec, /* 25: level 1 interrupt autovector */ - _isr_autovec, /* 26: level 2 interrupt autovector */ - _isr_autovec, /* 27: level 3 interrupt autovector */ - _isr_autovec, /* 28: level 4 interrupt autovector */ - _isr_autovec, /* 29: level 5 interrupt autovector */ - _isr_autovec, /* 30: level 6 interrupt autovector */ - _isr_autovec, /* 31: level 7 interrupt autovector */ - trap0, /* 32: syscalls */ -#if defined(COMPAT_13) || defined(COMPAT_SUNOS) - trap1, /* 33: compat_13_sigreturn */ -#else - illinst, -#endif - trap2, /* 34: trace */ -#ifdef COMPAT_16 - trap3, /* 35: compat_16_sigreturn */ -#else - illinst, -#endif - illinst, /* 36: TRAP instruction vector */ - illinst, /* 37: TRAP instruction vector */ - illinst, /* 38: TRAP instruction vector */ - illinst, /* 39: TRAP instruction vector */ - illinst, /* 40: TRAP instruction vector */ - illinst, /* 41: TRAP instruction vector */ - illinst, /* 42: TRAP instruction vector */ - illinst, /* 43: TRAP instruction vector */ - trap12, /* 44: TRAP 12: cachectl */ - illinst, /* 45: TRAP instruction vector */ - illinst, /* 46: TRAP instruction vector */ - trap15, /* 47: TRAP 15: breakpoint */ - fpbsun, /* 48: FPCP branch/set on unordered */ - fpinex, /* 49: FPCP inexact result */ - fpdz, /* 50: FPCP divide by zero */ - fpunfl, /* 51: FPCP underflow */ - fpoperr, /* 52: FPCP operand error */ - fpovfl, /* 53: FPCP overflow */ - fpsnan, /* 54: FPCP signalling NAN */ - fpunsupp, /* 55: FPCP unimplemented data type */ - badtrap, /* 56: unassigned, reserved */ - badtrap, /* 57: unassigned, reserved */ - badtrap, /* 58: unassigned, reserved */ - badtrap, /* 59: unassigned, reserved */ - badtrap, /* 60: unassigned, reserved */ - badtrap, /* 61: unassigned, reserved */ - badtrap, /* 62: unassigned, reserved */ - badtrap, /* 63: unassigned, reserved */ - - /* 64-255: set later by isr_add_vectored() */ - - BADTRAP16, BADTRAP16, BADTRAP16, BADTRAP16, - BADTRAP16, BADTRAP16, BADTRAP16, BADTRAP16, - BADTRAP16, BADTRAP16, BADTRAP16, BADTRAP16, -};