|
|
1.1 root 1: /*
1.1.1.3 root 2: Hatari - xbios.c
3:
1.1.1.14 root 4: This file is distributed under the GNU General Public License, version 2
5: or at your option any later version. Read the file gpl.txt for details.
1.1 root 6:
1.1.1.17! root 7: XBios Handler (Trap #14) - http://toshyp.atari.org/en/004014.html
1.1 root 8:
1.1.1.17! root 9: Intercept and direct XBios calls to allow saving screenshots in host format
1.1.1.15 root 10: and to help with tracing/debugging.
1.1 root 11: */
1.1.1.10 root 12: const char XBios_fileid[] = "Hatari xbios.c : " __DATE__ " " __TIME__;
1.1 root 13:
14: #include "main.h"
1.1.1.3 root 15: #include "configuration.h"
1.1.1.10 root 16: #include "control.h"
1.1 root 17: #include "floppy.h"
1.1.1.4 root 18: #include "log.h"
1.1 root 19: #include "m68000.h"
20: #include "rs232.h"
1.1.1.3 root 21: #include "screenSnapShot.h"
1.1 root 22: #include "stMemory.h"
1.1.1.17! root 23: #include "debugui.h"
1.1.1.3 root 24: #include "xbios.h"
25:
1.1 root 26:
1.1.1.13 root 27: #define HATARI_CONTROL_OPCODE 255
1.1.1.4 root 28:
1.1.1.17! root 29: /* whether to enable XBios(11/20/255) */
1.1.1.15 root 30: static bool bXBiosCommands;
31:
1.1.1.17! root 32:
1.1.1.15 root 33: void XBios_ToggleCommands(void)
34: {
35: if (bXBiosCommands)
36: {
1.1.1.17! root 37: fprintf(stderr, "XBios 11/20/255 Hatari versions disabled.\n");
1.1.1.15 root 38: bXBiosCommands = false;
39: }
40: else
41: {
1.1.1.17! root 42: fprintf(stderr, "XBios 11/20/255 Hatari versions enabled: Dbmsg(), Scrdmp(), HatariControl().\n");
1.1.1.15 root 43: bXBiosCommands = true;
44: }
45: }
1.1.1.4 root 46:
1.1.1.17! root 47:
! 48: /**
! 49: * XBIOS Dbmsg
! 50: * Call 11
! 51: *
! 52: * Atari debugger API:
! 53: * http://dev-docs.atariforge.org/files/Atari_Debugger_1-24-1990.pdf
! 54: * http://toshyp.atari.org/en/004012.html#Dbmsg
! 55: */
! 56: static bool XBios_Dbmsg(Uint32 Params)
! 57: {
! 58: /* Read details from stack */
! 59: const Uint16 reserved = STMemory_ReadWord(Params);
! 60: const Uint16 msgnum = STMemory_ReadWord(Params+SIZE_WORD);
! 61: const Uint32 addr = STMemory_ReadLong(Params+SIZE_WORD+SIZE_WORD);
! 62:
! 63: LOG_TRACE(TRACE_OS_XBIOS, "XBIOS 0x0B Dbmsg(%d, 0x%04X, 0x%x) at PC 0x%X\n",
! 64: reserved, msgnum, addr, M68000_GetPC());
! 65:
! 66: if (reserved != 5 || !bXBiosCommands)
! 67: return false;
! 68:
! 69: fprintf(stderr, "Dbmsg: 0x%04X, 0x%x\n", msgnum, addr);
! 70:
! 71: /* debugger message? */
! 72: if (msgnum >= 0xF000 && msgnum <= 0xF100)
! 73: {
! 74: const char *txt = (const char *)STMemory_STAddrToPointer(addr);
! 75: char buffer[256];
! 76:
! 77: /* between non-halting message and debugger command IDs,
! 78: * are halting messages with message length encoded in ID
! 79: */
! 80: if (msgnum > 0xF000 && msgnum < 0xF100)
! 81: {
! 82: const int len = (msgnum & 0xFF);
! 83: memcpy(buffer, txt, len);
! 84: buffer[len] = '\0';
! 85: txt = buffer;
! 86: }
! 87: fprintf(stderr, "-> \"%s\"\n", txt);
! 88: }
! 89:
! 90: /* not just a message? */
! 91: if (msgnum != 0xF000)
! 92: {
! 93: fprintf(stderr, "-> HALT");
! 94: DebugUI(REASON_PROGRAM);
! 95: }
! 96:
! 97: /* return value != function opcode, to indicate it's implemented */
! 98: Regs[REG_D0] = 0;
! 99: return true;
! 100: }
! 101:
! 102:
! 103: /**
! 104: * XBIOS Scrdmp
! 105: * Call 20
! 106: */
! 107: static bool XBios_Scrdmp(Uint32 Params)
! 108: {
! 109: LOG_TRACE(TRACE_OS_XBIOS, "XBIOS 0x14 Scrdmp() at PC 0x%X\n" , M68000_GetPC());
! 110:
! 111: if (!bXBiosCommands)
! 112: return false;
! 113:
! 114: ScreenSnapShot_SaveScreen();
! 115:
! 116: /* Scrdmp() doesn't have return value, but return something else than
! 117: * function number to indicate this XBios opcode was implemented
! 118: */
! 119: Regs[REG_D0] = 0;
! 120: return true;
! 121: }
! 122:
! 123:
! 124: /**
! 125: * XBIOS remote control interface for Hatari
! 126: * Call 255
! 127: */
! 128: static bool XBios_HatariControl(Uint32 Params)
1.1.1.7 root 129: {
1.1.1.17! root 130: const char *pText;
! 131: pText = (const char *)STMemory_STAddrToPointer(STMemory_ReadLong(Params));
! 132: LOG_TRACE(TRACE_OS_XBIOS, "XBIOS 0x%02X HatariControl(%s) at PC 0x%X\n",
! 133: HATARI_CONTROL_OPCODE, pText, M68000_GetPC());
! 134:
! 135: if (!bXBiosCommands)
! 136: return false;
! 137:
! 138: Control_ProcessBuffer(pText);
! 139:
! 140: /* return value != function opcode, to indicate it's implemented */
! 141: Regs[REG_D0] = 0;
! 142: return true;
! 143: }
1.1 root 144:
1.1.1.2 root 145:
1.1.1.13 root 146: #if ENABLE_TRACING
1.1.1.17! root 147:
1.1.1.7 root 148: /**
149: * XBIOS Floppy Read
150: * Call 8
151: */
1.1.1.8 root 152: static bool XBios_Floprd(Uint32 Params)
1.1 root 153: {
1.1.1.12 root 154: Uint32 pBuffer;
1.1.1.7 root 155: Uint16 Dev,Sector,Side,Track,Count;
1.1 root 156:
1.1.1.7 root 157: /* Read details from stack */
1.1.1.13 root 158: pBuffer = STMemory_ReadLong(Params);
159: Dev = STMemory_ReadWord(Params+SIZE_LONG+SIZE_LONG); /* skip reserved long */
160: Sector = STMemory_ReadWord(Params+SIZE_LONG+SIZE_LONG+SIZE_WORD);
161: Track = STMemory_ReadWord(Params+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD);
162: Side = STMemory_ReadWord(Params+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD+SIZE_WORD);
163: Count = STMemory_ReadWord(Params+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD);
164:
165: LOG_TRACE(TRACE_OS_XBIOS, "XBIOS 0x08 Floprd(0x%x, %d, %d, %d, %d, %d) at PC 0x%X for: %s\n",
1.1.1.16 root 166: pBuffer, Dev, Sector, Track, Side, Count, M68000_GetPC(),
167: Dev < MAX_FLOPPYDRIVES ? EmulationDrives[Dev].sFileName : "n/a");
1.1.1.10 root 168: return false;
1.1 root 169: }
170:
1.1.1.2 root 171:
1.1.1.7 root 172: /**
173: * XBIOS Floppy Write
174: * Call 9
175: */
1.1.1.8 root 176: static bool XBios_Flopwr(Uint32 Params)
1.1 root 177: {
1.1.1.12 root 178: Uint32 pBuffer;
1.1.1.7 root 179: Uint16 Dev,Sector,Side,Track,Count;
1.1 root 180:
1.1.1.7 root 181: /* Read details from stack */
1.1.1.13 root 182: pBuffer = STMemory_ReadLong(Params);
183: Dev = STMemory_ReadWord(Params+SIZE_LONG+SIZE_LONG); /* skip reserved long */
184: Sector = STMemory_ReadWord(Params+SIZE_LONG+SIZE_LONG+SIZE_WORD);
185: Track = STMemory_ReadWord(Params+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD);
186: Side = STMemory_ReadWord(Params+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD+SIZE_WORD);
187: Count = STMemory_ReadWord(Params+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD);
188:
189: LOG_TRACE(TRACE_OS_XBIOS, "XBIOS 0x09 Flopwr(0x%x, %d, %d, %d, %d, %d) at PC 0x%X for: %s\n",
1.1.1.16 root 190: pBuffer, Dev, Sector, Track, Side, Count, M68000_GetPC(),
191: Dev < MAX_FLOPPYDRIVES ? EmulationDrives[Dev].sFileName : "n/a");
1.1.1.13 root 192: return false;
193: }
1.1 root 194:
195:
1.1.1.13 root 196: /**
1.1.1.7 root 197: * XBIOS RsConf
198: * Call 15
199: */
1.1.1.8 root 200: static bool XBios_Rsconf(Uint32 Params)
1.1 root 201: {
1.1.1.17! root 202: Sint16 Baud, Ctrl, Ucr, Rsr, Tsr, Scr;
1.1 root 203:
1.1.1.13 root 204: Baud = STMemory_ReadWord(Params);
205: Ctrl = STMemory_ReadWord(Params+SIZE_WORD);
206: Ucr = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD);
207: Rsr = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_WORD);
208: Tsr = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD);
209: Scr = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD);
1.1.1.15 root 210: LOG_TRACE(TRACE_OS_XBIOS, "XBIOS 0x0F Rsconf(%d, %d, %d, %d, %d, %d) at PC 0x%X\n",
1.1.1.17! root 211: Baud, Ctrl, Ucr, Rsr, Tsr, Scr, M68000_GetPC());
! 212: return false;
1.1.1.10 root 213: }
214:
215:
216: /**
1.1.1.17! root 217: * XBIOS Devconnect
! 218: * Call 139
1.1.1.10 root 219: */
1.1.1.17! root 220: static bool XBios_Devconnect(Uint32 Params)
1.1.1.10 root 221: {
1.1.1.17! root 222: Uint16 src,dst,clk,prescale,protocol;
1.1.1.15 root 223:
1.1.1.17! root 224: /* Read details from stack */
! 225: src = STMemory_ReadWord(Params);
! 226: dst = STMemory_ReadWord(Params+SIZE_WORD);
! 227: clk = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD);
! 228: prescale = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_WORD);
! 229: protocol = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD);
1.1.1.15 root 230:
1.1.1.17! root 231: LOG_TRACE(TRACE_OS_XBIOS, "XBIOS 0x8B Devconnect(%hd, 0x%hx, %hd, %hd, %hd) at PC 0x%X\n",
! 232: src, dst, clk, prescale, protocol ,
! 233: M68000_GetPC() );
! 234: return false;
1.1 root 235: }
236:
1.1.1.2 root 237:
1.1.1.11 root 238: /**
239: * Map XBIOS call opcode to XBIOS function name
1.1.1.14 root 240: *
241: * Mapping is based on TOSHYP information:
242: * http://toshyp.atari.org/en/004014.html
1.1.1.11 root 243: */
244: static const char* XBios_Call2Name(Uint16 opcode)
245: {
246: static const char* names[] = {
247: "Initmous",
248: "Ssbrk",
249: "Physbase",
250: "Logbase",
251: "Getrez",
252: "Setscreen",
253: "Setpalette",
254: "Setcolor",
255: "Floprd",
256: "Flopwr",
257: "Flopfmt",
258: "Dbmsg",
259: "Midiws",
260: "Mfpint",
261: "Iorec",
262: "Rsconf",
263: "Keytbl",
264: "Random",
265: "Protobt",
266: "Flopver",
267: "Scrdmp",
268: "Cursconf",
269: "Settime",
270: "Gettime",
271: "Bioskeys",
272: "Ikbdws",
273: "Jdisint",
274: "Jenabint",
275: "Giaccess",
276: "Offgibit",
277: "Ongibit",
278: "Xbtimer",
279: "Dosound",
280: "Setprt",
281: "Kbdvbase",
282: "Kbrate",
283: "Prtblk",
284: "Vsync",
285: "Supexec",
286: "Puntaes",
287: NULL, /* 40 */
288: "Floprate",
289: "DMAread",
290: "DMAwrite",
291: "Bconmap",
292: NULL, /* 45 */
293: "NVMaccess",
1.1.1.17! root 294: "Waketime", /* TOS 2.06 */
1.1.1.11 root 295: "Metainit",
1.1.1.17! root 296: NULL, /* 49: rest of MetaDOS calls */
1.1.1.11 root 297: NULL,
298: NULL,
299: NULL,
300: NULL,
301: NULL,
302: NULL,
303: NULL,
304: NULL,
305: NULL,
306: NULL,
307: NULL,
308: NULL,
309: NULL,
310: NULL, /* 63 */
311: "Blitmode",
1.1.1.17! root 312: NULL, /* 65: CENTScreen */
1.1.1.11 root 313: NULL,
314: NULL,
315: NULL,
316: NULL,
317: NULL,
318: NULL,
319: NULL,
320: NULL,
321: NULL,
322: NULL,
323: NULL,
324: NULL,
325: NULL,
326: NULL, /* 79 */
327: "EsetShift",
328: "EgetShift",
329: "EsetBank",
330: "EsetColor",
331: "EsetPalette",
332: "EgetPalette",
333: "EsetGray",
334: "EsetSmear",
335: "VsetMode",
336: "VgetMonitor",
337: "VsetSync",
338: "VgetSize",
1.1.1.14 root 339: "VsetVars", /* TOS4 internal */
1.1.1.11 root 340: "VsetRGB",
341: "VgetRGB",
1.1.1.14 root 342: "VcheckMode", /* TOS4 internal (ValidMode()) */
1.1.1.11 root 343: "Dsp_DoBlock",
344: "Dsp_BlkHandShake",
345: "Dsp_BlkUnpacked",
346: "Dsp_InStream",
347: "Dsp_OutStream",
348: "Dsp_IOStream",
349: "Dsp_RemoveInterrupts",
350: "Dsp_GetWordSize",
351: "Dsp_Lock",
352: "Dsp_Unlock",
353: "Dsp_Available",
354: "Dsp_Reserve",
355: "Dsp_LoadProg",
356: "Dsp_ExecProg",
357: "Dsp_ExecBoot",
358: "Dsp_LodToBinary",
359: "Dsp_TriggerHC",
360: "Dsp_RequestUniqueAbility",
361: "Dsp_GetProgAbility",
362: "Dsp_FlushSubroutines",
363: "Dsp_LoadSubroutine",
364: "Dsp_InqSubrAbility",
365: "Dsp_RunSubroutine",
366: "Dsp_Hf0",
367: "Dsp_Hf1",
368: "Dsp_Hf2",
369: "Dsp_Hf3",
370: "Dsp_BlkWords",
371: "Dsp_BlkBytes",
372: "Dsp_HStat",
373: "Dsp_SetVectors",
374: "Dsp_MultBlocks",
375: "Locksnd",
376: "Unlocksnd",
377: "Soundcmd",
378: "Setbuffer",
379: "Setmode",
380: "Settracks",
381: "Setmontracks",
382: "Setinterrupt",
383: "Buffoper",
384: "Dsptristate",
385: "Gpio",
386: "Devconnect",
387: "Sndstatus",
388: "Buffptr",
389: NULL, /* 142 */
390: NULL,
391: NULL,
392: NULL,
393: NULL,
394: NULL,
395: NULL,
1.1.1.14 root 396: NULL, /* 149 */
397: "VsetMask",
398: NULL, /* 151 */
1.1.1.11 root 399: NULL,
400: NULL,
401: NULL,
402: NULL,
403: NULL,
404: NULL,
405: NULL,
406: NULL,
407: NULL,
408: NULL,
409: NULL,
410: NULL,
411: NULL, /* 164 */
412: "WavePlay"
413: };
1.1.1.17! root 414: if (opcode < ARRAY_SIZE(names) && names[opcode]) {
1.1.1.11 root 415: return names[opcode];
416: }
417: return "???";
418: }
1.1.1.13 root 419:
1.1.1.16 root 420: void XBios_Info(FILE *fp, Uint32 dummy)
1.1.1.13 root 421: {
422: Uint16 opcode;
423: for (opcode = 0; opcode < 168; ) {
1.1.1.16 root 424: fprintf(fp, "%02x %-21s", opcode,
1.1.1.13 root 425: XBios_Call2Name(opcode));
426: if (++opcode % 3 == 0) {
1.1.1.16 root 427: fputs("\n", fp);
1.1.1.13 root 428: }
429: }
430: }
1.1.1.17! root 431:
1.1.1.13 root 432: #else /* !ENABLE_TRACING */
1.1.1.17! root 433:
! 434: #define XBios_Floprd(params) false
! 435: #define XBios_Flopwr(params) false
! 436: #define XBios_Rsconf(params) false
! 437: #define XBios_Devconnect(params) false
! 438:
1.1.1.16 root 439: void XBios_Info(FILE *fp, Uint32 bShowOpcodes)
1.1.1.13 root 440: {
1.1.1.16 root 441: fputs("Hatari isn't configured with ENABLE_TRACING\n", fp);
1.1.1.13 root 442: }
1.1.1.17! root 443:
1.1.1.13 root 444: #endif /* !ENABLE_TRACING */
1.1.1.11 root 445:
446:
1.1.1.7 root 447: /**
448: * Check if we need to re-direct XBios call to our own routines
449: */
1.1.1.8 root 450: bool XBios(void)
1.1 root 451: {
1.1.1.7 root 452: Uint32 Params;
453: Uint16 XBiosCall;
1.1 root 454:
1.1.1.7 root 455: /* Find call */
456: Params = Regs[REG_A7];
457: XBiosCall = STMemory_ReadWord(Params);
1.1.1.13 root 458: Params += SIZE_WORD;
1.1.1.11 root 459:
1.1.1.7 root 460: switch (XBiosCall)
461: {
1.1.1.13 root 462: /* commands with special handling */
463: case 8:
1.1.1.7 root 464: return XBios_Floprd(Params);
1.1.1.13 root 465: case 9:
1.1.1.7 root 466: return XBios_Flopwr(Params);
1.1.1.17! root 467: case 11:
! 468: return XBios_Dbmsg(Params);
1.1.1.13 root 469: case 15:
1.1.1.7 root 470: return XBios_Rsconf(Params);
1.1.1.13 root 471: case 20:
1.1.1.7 root 472: return XBios_Scrdmp(Params);
1.1.1.13 root 473: case 139:
474: return XBios_Devconnect(Params);
475: case HATARI_CONTROL_OPCODE:
1.1.1.10 root 476: return XBios_HatariControl(Params);
1.1.1.7 root 477:
1.1.1.13 root 478: case 2: /* Physbase */
479: case 3: /* Logbase */
480: case 4: /* Getrez */
481: case 17: /* Random */
482: case 23: /* Gettime */
483: case 24: /* Bioskeys */
484: case 34: /* Kbdvbase */
485: case 37: /* Vsync */
486: case 39: /* Puntaes */
487: case 81: /* EgetShift */
488: case 89: /* VgetMonitor */
489: case 103: /* Dsp_GetWordSize */
490: case 104: /* Dsp_Lock */
491: case 105: /* Dsp_Unlock */
492: case 113: /* Dsp_RequestUniqueAbility */
493: case 114: /* Dsp_GetProgAbility */
494: case 115: /* Dsp_FlushSubroutines */
495: case 121: /* Dsp_Hf2 */
496: case 122: /* Dsp_Hf3 */
497: case 125: /* Dsp_Hstat */
498: case 128: /* Locksnd */
499: case 129: /* Unlocksnd */
500: /* commands with no args */
1.1.1.15 root 501: LOG_TRACE(TRACE_OS_XBIOS, "XBIOS 0x%02hX %s() at PC 0x%X\n",
502: XBiosCall, XBios_Call2Name(XBiosCall),
503: M68000_GetPC());
1.1.1.13 root 504: return false;
505:
506: case 1: /* Ssbrk */
507: case 14: /* Iorec */
508: case 26: /* Jdisint */
509: case 27: /* Jenabint */
510: case 29: /* Offgibit */
511: case 30: /* Ongibit */
512: case 33: /* Setprt */
513: case 44: /* Bconmap */
514: case 64: /* Blitmode */
515: case 80: /* EsetShift */
516: case 82: /* EsetBank */
517: case 86: /* EsetGray */
518: case 87: /* EsetSmear */
519: case 88: /* VsetMode */
520: case 90: /* VsetSync */
521: case 91: /* VgetSize */
1.1.1.17! root 522: case 95: /* VcheckMode */
1.1.1.13 root 523: case 102: /* Dsp_RemoveInterrupts */
524: case 112: /* Dsp_TriggerHC */
525: case 117: /* Dsp_InqSubrAbility */
526: case 118: /* Dsp_RunSubroutine */
527: case 119: /* Dsp_Hf0 */
528: case 120: /* Dsp_Hf1 */
529: case 132: /* Setmode */
530: case 134: /* Setmontracks */
531: case 136: /* Buffoper */
532: case 140: /* Sndstatus */
533: /* ones taking single word */
1.1.1.15 root 534: LOG_TRACE(TRACE_OS_XBIOS, "XBIOS 0x%02hX %s(0x%hX) at PC 0x%X\n",
1.1.1.13 root 535: XBiosCall, XBios_Call2Name(XBiosCall),
1.1.1.15 root 536: STMemory_ReadWord(Params),
537: M68000_GetPC());
1.1.1.13 root 538: return false;
539:
540: case 6: /* Setpalette */
541: case 22: /* Settime */
542: case 32: /* Dosound */
543: case 36: /* Ptrblt */
544: case 38: /* Supexec */
545: case 48: /* Metainit */
546: case 141: /* Buffptr */
547: /* ones taking long or pointer */
1.1.1.15 root 548: LOG_TRACE(TRACE_OS_XBIOS, "XBIOS 0x%02hX %s(0x%X) at PC 0x%X\n",
1.1.1.13 root 549: XBiosCall, XBios_Call2Name(XBiosCall),
1.1.1.15 root 550: STMemory_ReadLong(Params),
551: M68000_GetPC());
1.1.1.13 root 552: return false;
553:
554: case 7: /* Setcolor */
555: case 21: /* Cursconf */
556: case 28: /* Giaccess */
557: case 35: /* Kbrate */
558: case 41: /* Floprate */
559: case 83: /* EsetColor */
560: case 130: /* Soundcmd */
561: case 133: /* Settracks */
562: case 137: /* Dsptristate */
563: case 135: /* Setinterrupt */
564: case 138: /* Gpio */
565: /* ones taking two words */
1.1.1.15 root 566: LOG_TRACE(TRACE_OS_XBIOS, "XBIOS 0x%02hX %s(0x%hX, 0x%hX) at PC 0x%X\n",
1.1.1.13 root 567: XBiosCall, XBios_Call2Name(XBiosCall),
568: STMemory_ReadWord(Params),
1.1.1.15 root 569: STMemory_ReadWord(Params+SIZE_WORD),
570: M68000_GetPC());
1.1.1.13 root 571: return false;
572:
573: case 12: /* Midiws */
574: case 13: /* Mfpint */
575: case 25: /* Ikbdws */
1.1.1.14 root 576: /* ones taking word length/index and pointer */
1.1.1.15 root 577: LOG_TRACE(TRACE_OS_XBIOS, "XBIOS 0x%02hX %s(%hd, 0x%X) at PC 0x %X\n",
1.1.1.13 root 578: XBiosCall, XBios_Call2Name(XBiosCall),
579: STMemory_ReadWord(Params),
1.1.1.15 root 580: STMemory_ReadLong(Params+SIZE_WORD),
581: M68000_GetPC());
1.1.1.13 root 582: return false;
583:
584: case 84: /* EsetPalette */
585: case 85: /* EgetPalette */
586: case 93: /* VsetRGB */
587: case 94: /* VgetRGB */
588: /* ones taking word, word and long/pointer */
1.1.1.15 root 589: LOG_TRACE(TRACE_OS_XBIOS, "XBIOS 0x%02hX %s(0x%hX, 0x%hX, 0x%X) at PC 0x%X\n",
1.1.1.13 root 590: XBiosCall, XBios_Call2Name(XBiosCall),
591: STMemory_ReadWord(Params),
592: STMemory_ReadWord(Params+SIZE_WORD),
1.1.1.15 root 593: STMemory_ReadLong(Params+SIZE_WORD+SIZE_WORD),
594: M68000_GetPC());
1.1.1.13 root 595: return false;
596:
597: case 106: /* Dsp_Available */
598: case 107: /* Dsp_Reserve */
599: case 111: /* Dsp_LodToBinary */
600: case 126: /* Dsp_SetVectors */
601: /* ones taking two longs/pointers */
1.1.1.15 root 602: LOG_TRACE(TRACE_OS_XBIOS, "XBIOS 0x%02hX %s(0x%X, 0x%X) at PC 0x%X\n",
1.1.1.13 root 603: XBiosCall, XBios_Call2Name(XBiosCall),
604: STMemory_ReadLong(Params),
1.1.1.15 root 605: STMemory_ReadLong(Params+SIZE_LONG),
606: M68000_GetPC());
1.1.1.13 root 607: return false;
608:
609: case 5: /* Setscreen */
1.1.1.14 root 610: if (STMemory_ReadWord(Params+SIZE_LONG+SIZE_LONG) == 3) {
611: /* actually VSetscreen with extra parameter */
1.1.1.15 root 612: LOG_TRACE(TRACE_OS_XBIOS, "XBIOS 0x%02hX VsetScreen(0x%X, 0x%X, 3, 0x%hX) at PC 0x%X\n",
1.1.1.14 root 613: XBiosCall, STMemory_ReadLong(Params),
614: STMemory_ReadLong(Params+SIZE_LONG),
1.1.1.15 root 615: STMemory_ReadWord(Params+SIZE_LONG+SIZE_LONG+SIZE_WORD),
616: M68000_GetPC());
1.1.1.14 root 617: return false;
618: }
1.1.1.13 root 619: case 109: /* Dsp_ExecProg */
620: case 110: /* Dsp_ExecBoot */
621: case 116: /* Dsp_LoadSubroutine */
1.1.1.14 root 622: case 150: /* VsetMask */
1.1.1.13 root 623: /* ones taking two longs/pointers and a word */
1.1.1.15 root 624: LOG_TRACE(TRACE_OS_XBIOS, "XBIOS 0x%02hX %s(0x%X, 0x%X, 0x%hX) at PC 0x%X\n",
1.1.1.13 root 625: XBiosCall, XBios_Call2Name(XBiosCall),
626: STMemory_ReadLong(Params),
627: STMemory_ReadLong(Params+SIZE_LONG),
1.1.1.15 root 628: STMemory_ReadWord(Params+SIZE_LONG+SIZE_LONG),
629: M68000_GetPC());
1.1.1.13 root 630: return false;
631:
632: default: /* rest of XBios calls */
633: LOG_TRACE(TRACE_OS_XBIOS, "XBIOS 0x%02hX (%s)\n",
634: XBiosCall, XBios_Call2Name(XBiosCall));
1.1.1.10 root 635: return false;
1.1.1.7 root 636: }
1.1 root 637: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.