From a6df86ab6ff46bfd1df0b478abb33478c7df61c2 Mon Sep 17 00:00:00 2001 From: tron Date: Tue, 30 Sep 2003 17:47:44 +0000 Subject: Fix GCC 3.3.1 related build problem. --- emulators/xcopilot/distinfo | 3 +- emulators/xcopilot/patches/patch-aj | 502 ++++++++++++++++++++++++++++++++++++ 2 files changed, 504 insertions(+), 1 deletion(-) create mode 100644 emulators/xcopilot/patches/patch-aj diff --git a/emulators/xcopilot/distinfo b/emulators/xcopilot/distinfo index 51464cf5859..a0e2799a382 100644 --- a/emulators/xcopilot/distinfo +++ b/emulators/xcopilot/distinfo @@ -1,4 +1,4 @@ -$NetBSD: distinfo,v 1.2 2001/04/20 10:50:01 agc Exp $ +$NetBSD: distinfo,v 1.3 2003/09/30 17:47:44 tron Exp $ SHA1 (xcopilot-0.6.6.tar.gz) = 91f76d1fd8fc19b6fea18853425aa3076e945d5d Size (xcopilot-0.6.6.tar.gz) = 343264 bytes @@ -11,3 +11,4 @@ SHA1 (patch-af) = 5b1a93a5b08444e53fdbb17e1148149542cc6dd1 SHA1 (patch-ag) = 68a22072946811f9cc97434f532081a07fda567f SHA1 (patch-ah) = fa166c5ecf7458c91f89b216aee5acb6de270292 SHA1 (patch-ai) = 255d997e2ef340a8d4b91ce25c2a3071df5c4520 +SHA1 (patch-aj) = 560a3dd902323ec1d07c292b6e8f95acb6c1c939 diff --git a/emulators/xcopilot/patches/patch-aj b/emulators/xcopilot/patches/patch-aj new file mode 100644 index 00000000000..1031f29d72b --- /dev/null +++ b/emulators/xcopilot/patches/patch-aj @@ -0,0 +1,502 @@ +$NetBSD: patch-aj,v 1.1 2003/09/30 17:47:44 tron Exp $ + +--- mc68k/fab_custom.c.orig 1998-07-29 01:08:48.000000000 +0200 ++++ mc68k/fab_custom.c 2003-09-30 19:22:12.000000000 +0200 +@@ -1027,252 +1027,251 @@ + * Max Okumoto + *---------------------------------------------------------------------------*/ + static char *HACK[] = { +-" +-/**************************************** +- * Handle a key event. The fields * +- * keydown and key of the shared image * +- * are interpreted, and the dragonball * +- * registers updated * +- ****************************************/ +-static void +-dokey(void) +-{ +- UBYTE d; +- d = db_PDDATA.x; +- if (CustShptr->keydown) { +- db_PDDATA.x |= (1 << CustShptr->key); +- CustShptr->keydown = 0; +- CustShptr->key = -1; +- } else if (CustShptr->key >= 0) { +- db_PDDATA.x &= ~(1 << CustShptr->key); +- CustShptr->key = -1; +- } +- db_PDDATA_edge |= db_PDDATA.x & ~d; +- db_IPR.anon.PEN = CustShptr->pen; +- db_IPR.x = (db_IPR.x & 0xffff00ff) | +- ((((db_PDDATA_edge & db_PDIRQEDGE.x) | +- (db_PDDATA.x & ~db_PDIRQEDGE.x)) & db_PDIRQEN.x) << 8); +-} +- +-void +-updateisr() +-{ +- db_IPR.anon.PEN = CustShptr->pen; +- db_ISR.x = db_IPR.x & ~db_IMR.x; +- if (db_ISR.x) { +- specialflags |= SPCFLAG_INT; +- } +- CustShptr->run_updateisr = 0; +-} +- +-void +-maybe_updateisr() +-{ +- if (CustShptr->run_updateisr) { +- dokey(); +- updateisr(); +- } +-} +- +-int +-intbase() +-{ +- return db_IVR.anon.VECTOR << 3; +-} +- +-int +-intlev() +-{ +- if (db_ISR.anon.IRQ7) return 7; +- if (db_ISR.anon.SPIS) return 6; +- if (db_ISR.anon.TMR1) return 6; +- if (db_ISR.anon.IRQ6) return 6; +- if (db_ISR.anon.PEN) return 5; +- if (db_ISR.anon.SPIM) return 4; +- if (db_ISR.anon.TMR2) return 4; +- if (db_ISR.anon.UART) return 4; +- if (db_ISR.anon.WDT) return 4; +- if (db_ISR.anon.RTC) return 4; +- if (db_ISR.anon.KB) return 4; +- if (db_ISR.anon.PWM) return 4; +- if (db_ISR.anon.INT0) return 4; +- if (db_ISR.anon.INT1) return 4; +- if (db_ISR.anon.INT2) return 4; +- if (db_ISR.anon.INT3) return 4; +- if (db_ISR.anon.INT4) return 4; +- if (db_ISR.anon.INT5) return 4; +- if (db_ISR.anon.INT6) return 4; +- if (db_ISR.anon.INT7) return 4; +- if (db_ISR.anon.IRQ3) return 3; +- if (db_ISR.anon.IRQ2) return 2; +- if (db_ISR.anon.IRQ1) return 1; +- return -1; +-} +- +-static void +-pen(int down, int x, int y) +-{ +- if (!pendown && down) { +- db_IPR.anon.PEN = 1; +- updateisr(); +- } else if (pendown && !down) { +- db_IPR.anon.PEN = 0; +- updateisr(); +- } +- pendown = down; +- penx = x; +- peny = y; +-} +- +-static void +-hotsync(int down) +-{ +- if (down) { +- db_IPR.anon.IRQ1 = 1; +- } else { +- db_IPR.anon.IRQ1 = 0; +- } +- updateisr(); +-} +- +-/* +- * custptr is a pointer to a shared memory block which will \"back-up\" +- * the register values of the custom circuits, allowing other processes +- * to look at register values +- */ +-void +-custom_init(shared_img * shptr) +-{ +- CustShptr = shptr; +- CustShptr->PICF = 0; +- CustShptr->VPW = 0xff; +- CustShptr->POSR = 0; +- CustShptr->grpalette[0] = 1; +- CustShptr->grpalette[1] = 0; +- CustShptr->grpalette[2] = 3; +- CustShptr->grpalette[3] = 7; +- CustShptr->quit = 0; +- CustShptr->run_updateisr = 0; +- CustShptr->LcdPower = lcdOn; +- CustShptr->Backlight = 0; +- customreset(); +-} +- +-void +-do_cycles(int longtime) +-{ +- if (db_TCTL2.anon.TEN) { +- db_TCN2.anon.COUNT++; +- if (db_TCN2.anon.COUNT > db_TCMP2.anon.COMPARE || longtime) { +- db_TSTAT2.anon.COMP = 1; +- if (db_TCTL2.anon.FRR == 0) { +- db_TCN2.anon.COUNT = 0; +- } +- if (db_TCTL2.anon.IRQEN) { +- db_IPR.anon.TMR2 = 1; +- updateisr(); +- } +- } +- } +- /* +- * Determine if there are any chars to read from the serial port or +- * debugger +- */ +- +- /* +- * WARNING: This uses a shared memory data structure to store the +- * FIFO. The producer is adding things to this _at the same time_ as +- * this is consuming. Examine main.c and take a course in concurrent +- * programming before modifying this. :-) - Ian +- */ +- +- if (CustShptr->serial.head != CustShptr->serial.tail && +- db_USTCNT.anon.UART_ENABLE && !db_URX.anon.DATA_READY) { +- int curhead = CustShptr->serial.head; +- db_URX.anon.DATA = CustShptr->serial.fifo[curhead]; +- curhead += 1; +- if (curhead == FIFO_SIZE) { +- curhead = 0; +- } +- CustShptr->serial.head = curhead; +- db_URX.anon.DATA_READY = 1; +- if (db_USTCNT.anon.RX_READY_ENABLE) { +- db_IPR.anon.UART = 1; +- updateisr(); +- } +- } +- if (CustShptr->gdb.head != CustShptr->gdb.tail && +- db_USTCNT.anon.UART_ENABLE && !db_URXdb.anon.DATA_READY) { +- int curhead = CustShptr->gdb.head; +- db_URXdb.anon.DATA = CustShptr->gdb.fifo[curhead]; +- curhead += 1; +- if (curhead == FIFO_SIZE) { +- curhead = 0; +- } +- CustShptr->gdb.head = curhead; +- db_URXdb.anon.DATA_READY = 1; +- } +-} +- +-struct EventType { +- UWORD eType; +- UWORD penDown; +- UWORD screenX; +- UWORD screenY; +- UWORD data[8]; +-}; +- +-struct SndCommandType { +- UWORD cmd; +- UWORD param1hi; +- UWORD param1lo; +- UWORD param2; +- UWORD param3; +-}; +- +-#define keyDownEvent 4 +-#define sysTrapEvtGetEvent 41245 +-#define sysTrapSndDoCmd 41523 +- +-int +-do_api(int api) +-{ +- switch (api) { +- case sysTrapEvtGetEvent: +- if (CustShptr->kbin != CustShptr->kbout) { +- +- struct EventType *ev; +- int out; +- +- out = CustShptr->kbout; +- ev = (struct EventType *) get_real_address(get_long(CustShptr->regs.a[7])); +- +- ev->eType = keyDownEvent; +- ev->data[0] = CustShptr->kb[out]; +- ev->data[1] = 0; +- ev->data[2] = 0; +- CustShptr->kbout = (out + 1) & 7; +- return 1; +- } +- break; +- case sysTrapSndDoCmd: +- { +- struct SndCommandType *sc; +- sc = (struct SndCommandType *) +- get_real_address(get_long(CustShptr->regs.a[7] + 4)); +- if ((sc->cmd >> 8) == 1) { +- CustShptr->BellFreq = (sc->param1hi << 16) + sc->param1lo; +- CustShptr->BellDur = sc->param2; +- CustShptr->BellAmp = sc->param3; +- CustShptr->LcdReq = lcdBell; +- return 1; +- } +- } +- break; +- } +- return 0; +-} +-" ++"\n" ++"/****************************************\n" ++" * Handle a key event. The fields *\n" ++" * keydown and key of the shared image *\n" ++" * are interpreted, and the dragonball *\n" ++" * registers updated *\n" ++" ****************************************/\n" ++"static void\n" ++"dokey(void)\n" ++"{\n" ++" UBYTE d;\n" ++" d = db_PDDATA.x;\n" ++" if (CustShptr->keydown) {\n" ++" db_PDDATA.x |= (1 << CustShptr->key);\n" ++" CustShptr->keydown = 0;\n" ++" CustShptr->key = -1;\n" ++" } else if (CustShptr->key >= 0) {\n" ++" db_PDDATA.x &= ~(1 << CustShptr->key);\n" ++" CustShptr->key = -1;\n" ++" }\n" ++" db_PDDATA_edge |= db_PDDATA.x & ~d;\n" ++" db_IPR.anon.PEN = CustShptr->pen;\n" ++" db_IPR.x = (db_IPR.x & 0xffff00ff) |\n" ++" ((((db_PDDATA_edge & db_PDIRQEDGE.x) |\n" ++" (db_PDDATA.x & ~db_PDIRQEDGE.x)) & db_PDIRQEN.x) << 8);\n" ++"}\n" ++"\n" ++"void\n" ++"updateisr()\n" ++"{\n" ++" db_IPR.anon.PEN = CustShptr->pen;\n" ++" db_ISR.x = db_IPR.x & ~db_IMR.x;\n" ++" if (db_ISR.x) {\n" ++" specialflags |= SPCFLAG_INT;\n" ++" }\n" ++" CustShptr->run_updateisr = 0;\n" ++"}\n" ++"\n" ++"void\n" ++"maybe_updateisr()\n" ++"{\n" ++" if (CustShptr->run_updateisr) {\n" ++" dokey();\n" ++" updateisr();\n" ++" }\n" ++"}\n" ++"\n" ++"int\n" ++"intbase()\n" ++"{\n" ++" return db_IVR.anon.VECTOR << 3;\n" ++"}\n" ++"\n" ++"int\n" ++"intlev()\n" ++"{\n" ++" if (db_ISR.anon.IRQ7) return 7;\n" ++" if (db_ISR.anon.SPIS) return 6;\n" ++" if (db_ISR.anon.TMR1) return 6;\n" ++" if (db_ISR.anon.IRQ6) return 6;\n" ++" if (db_ISR.anon.PEN) return 5;\n" ++" if (db_ISR.anon.SPIM) return 4;\n" ++" if (db_ISR.anon.TMR2) return 4;\n" ++" if (db_ISR.anon.UART) return 4;\n" ++" if (db_ISR.anon.WDT) return 4;\n" ++" if (db_ISR.anon.RTC) return 4;\n" ++" if (db_ISR.anon.KB) return 4;\n" ++" if (db_ISR.anon.PWM) return 4;\n" ++" if (db_ISR.anon.INT0) return 4;\n" ++" if (db_ISR.anon.INT1) return 4;\n" ++" if (db_ISR.anon.INT2) return 4;\n" ++" if (db_ISR.anon.INT3) return 4;\n" ++" if (db_ISR.anon.INT4) return 4;\n" ++" if (db_ISR.anon.INT5) return 4;\n" ++" if (db_ISR.anon.INT6) return 4;\n" ++" if (db_ISR.anon.INT7) return 4;\n" ++" if (db_ISR.anon.IRQ3) return 3;\n" ++" if (db_ISR.anon.IRQ2) return 2;\n" ++" if (db_ISR.anon.IRQ1) return 1;\n" ++" return -1;\n" ++"}\n" ++"\n" ++"static void\n" ++"pen(int down, int x, int y)\n" ++"{\n" ++" if (!pendown && down) {\n" ++" db_IPR.anon.PEN = 1;\n" ++" updateisr();\n" ++" } else if (pendown && !down) {\n" ++" db_IPR.anon.PEN = 0;\n" ++" updateisr();\n" ++" }\n" ++" pendown = down;\n" ++" penx = x;\n" ++" peny = y;\n" ++"}\n" ++"\n" ++"static void\n" ++"hotsync(int down)\n" ++"{\n" ++" if (down) {\n" ++" db_IPR.anon.IRQ1 = 1;\n" ++" } else {\n" ++" db_IPR.anon.IRQ1 = 0;\n" ++" }\n" ++" updateisr();\n" ++"}\n" ++"\n" ++"/*\n" ++" * custptr is a pointer to a shared memory block which will \"back-up\"\n" ++" * the register values of the custom circuits, allowing other processes\n" ++" * to look at register values\n" ++" */\n" ++"void\n" ++"custom_init(shared_img * shptr)\n" ++"{\n" ++" CustShptr = shptr;\n" ++" CustShptr->PICF = 0;\n" ++" CustShptr->VPW = 0xff;\n" ++" CustShptr->POSR = 0;\n" ++" CustShptr->grpalette[0] = 1;\n" ++" CustShptr->grpalette[1] = 0;\n" ++" CustShptr->grpalette[2] = 3;\n" ++" CustShptr->grpalette[3] = 7;\n" ++" CustShptr->quit = 0;\n" ++" CustShptr->run_updateisr = 0;\n" ++" CustShptr->LcdPower = lcdOn;\n" ++" CustShptr->Backlight = 0;\n" ++" customreset();\n" ++"}\n" ++"\n" ++"void\n" ++"do_cycles(int longtime)\n" ++"{\n" ++" if (db_TCTL2.anon.TEN) {\n" ++" db_TCN2.anon.COUNT++;\n" ++" if (db_TCN2.anon.COUNT > db_TCMP2.anon.COMPARE || longtime) {\n" ++" db_TSTAT2.anon.COMP = 1;\n" ++" if (db_TCTL2.anon.FRR == 0) {\n" ++" db_TCN2.anon.COUNT = 0;\n" ++" }\n" ++" if (db_TCTL2.anon.IRQEN) {\n" ++" db_IPR.anon.TMR2 = 1;\n" ++" updateisr();\n" ++" }\n" ++" }\n" ++" }\n" ++" /*\n" ++" * Determine if there are any chars to read from the serial port or\n" ++" * debugger\n" ++" */\n" ++"\n" ++" /*\n" ++" * WARNING: This uses a shared memory data structure to store the\n" ++" * FIFO. The producer is adding things to this _at the same time_ as\n" ++" * this is consuming. Examine main.c and take a course in concurrent\n" ++" * programming before modifying this. :-) - Ian\n" ++" */\n" ++"\n" ++" if (CustShptr->serial.head != CustShptr->serial.tail &&\n" ++" db_USTCNT.anon.UART_ENABLE && !db_URX.anon.DATA_READY) {\n" ++" int curhead = CustShptr->serial.head;\n" ++" db_URX.anon.DATA = CustShptr->serial.fifo[curhead];\n" ++" curhead += 1;\n" ++" if (curhead == FIFO_SIZE) {\n" ++" curhead = 0;\n" ++" }\n" ++" CustShptr->serial.head = curhead;\n" ++" db_URX.anon.DATA_READY = 1;\n" ++" if (db_USTCNT.anon.RX_READY_ENABLE) {\n" ++" db_IPR.anon.UART = 1;\n" ++" updateisr();\n" ++" }\n" ++" }\n" ++" if (CustShptr->gdb.head != CustShptr->gdb.tail &&\n" ++" db_USTCNT.anon.UART_ENABLE && !db_URXdb.anon.DATA_READY) {\n" ++" int curhead = CustShptr->gdb.head;\n" ++" db_URXdb.anon.DATA = CustShptr->gdb.fifo[curhead];\n" ++" curhead += 1;\n" ++" if (curhead == FIFO_SIZE) {\n" ++" curhead = 0;\n" ++" }\n" ++" CustShptr->gdb.head = curhead;\n" ++" db_URXdb.anon.DATA_READY = 1;\n" ++" }\n" ++"}\n" ++"\n" ++"struct EventType {\n" ++" UWORD eType;\n" ++" UWORD penDown;\n" ++" UWORD screenX;\n" ++" UWORD screenY;\n" ++" UWORD data[8];\n" ++"};\n" ++"\n" ++"struct SndCommandType {\n" ++" UWORD cmd;\n" ++" UWORD param1hi;\n" ++" UWORD param1lo;\n" ++" UWORD param2;\n" ++" UWORD param3;\n" ++"};\n" ++"\n" ++"#define keyDownEvent 4\n" ++"#define sysTrapEvtGetEvent 41245\n" ++"#define sysTrapSndDoCmd 41523\n" ++"\n" ++"int\n" ++"do_api(int api)\n" ++"{\n" ++" switch (api) {\n" ++" case sysTrapEvtGetEvent:\n" ++" if (CustShptr->kbin != CustShptr->kbout) {\n" ++"\n" ++" struct EventType *ev;\n" ++" int out;\n" ++"\n" ++" out = CustShptr->kbout;\n" ++" ev = (struct EventType *) get_real_address(get_long(CustShptr->regs.a[7]));\n" ++"\n" ++" ev->eType = keyDownEvent;\n" ++" ev->data[0] = CustShptr->kb[out];\n" ++" ev->data[1] = 0;\n" ++" ev->data[2] = 0;\n" ++" CustShptr->kbout = (out + 1) & 7;\n" ++" return 1;\n" ++" }\n" ++" break;\n" ++" case sysTrapSndDoCmd:\n" ++" {\n" ++" struct SndCommandType *sc;\n" ++" sc = (struct SndCommandType *)\n" ++" get_real_address(get_long(CustShptr->regs.a[7] + 4));\n" ++" if ((sc->cmd >> 8) == 1) {\n" ++" CustShptr->BellFreq = (sc->param1hi << 16) + sc->param1lo;\n" ++" CustShptr->BellDur = sc->param2;\n" ++" CustShptr->BellAmp = sc->param3;\n" ++" CustShptr->LcdReq = lcdBell;\n" ++" return 1;\n" ++" }\n" ++" }\n" ++" break;\n" ++" }\n" ++" return 0;\n" ++"}\n\n" + }; + + /*---------------------------------------------------------------------------* -- cgit v1.2.3