|
|
1.1 root 1: /*
1.1.1.2 root 2: Hatari - bios.c
3:
4: This file is distributed under the GNU Public License, version 2 or at
5: your option any later version. Read the file gpl.txt for details.
1.1 root 6:
7: Bios Handler (Trap #13)
8:
1.1.1.7 ! root 9: We intercept some Bios calls for debugging
1.1 root 10: */
1.1.1.7 ! root 11: const char Bios_rcsid[] = "Hatari $Id: bios.c,v 1.14 2008/11/03 20:24:25 thothy Exp $";
1.1 root 12:
13: #include "main.h"
1.1.1.2 root 14: #include "configuration.h"
1.1 root 15: #include "floppy.h"
1.1.1.3 root 16: #include "log.h"
1.1 root 17: #include "m68000.h"
18: #include "printer.h"
19: #include "rs232.h"
20: #include "stMemory.h"
1.1.1.2 root 21: #include "bios.h"
1.1 root 22:
23:
24: /*-----------------------------------------------------------------------*/
1.1.1.6 root 25: /**
26: * BIOS Return input device status
27: * Call 1
28: */
1.1.1.7 ! root 29: static bool Bios_Bconstat(Uint32 Params)
1.1 root 30: {
1.1.1.3 root 31: Uint16 Dev;
1.1 root 32:
1.1.1.3 root 33: Dev = STMemory_ReadWord(Params+SIZE_WORD);
1.1.1.2 root 34:
1.1.1.7 ! root 35: HATARI_TRACE(HATARI_TRACE_OS_BIOS, "BIOS Bconstat(%i)\n", Dev);
1.1 root 36:
1.1.1.3 root 37: return FALSE;
1.1 root 38: }
39:
1.1.1.2 root 40:
1.1 root 41: /*-----------------------------------------------------------------------*/
1.1.1.6 root 42: /**
43: * BIOS Read character from device
44: * Call 2
45: */
1.1.1.7 ! root 46: static bool Bios_Bconin(Uint32 Params)
1.1 root 47: {
1.1.1.3 root 48: Uint16 Dev;
1.1 root 49:
1.1.1.3 root 50: Dev = STMemory_ReadWord(Params+SIZE_WORD);
1.1.1.2 root 51:
1.1.1.7 ! root 52: HATARI_TRACE(HATARI_TRACE_OS_BIOS, "BIOS Bconin(%i)\n", Dev);
1.1 root 53:
1.1.1.3 root 54: return FALSE;
1.1 root 55: }
56:
1.1.1.2 root 57:
1.1 root 58: /*-----------------------------------------------------------------------*/
1.1.1.6 root 59: /**
60: * BIOS Write character to device
61: * Call 3
62: */
1.1.1.7 ! root 63: static bool Bios_Bconout(Uint32 Params)
1.1 root 64: {
1.1.1.3 root 65: Uint16 Dev;
66: unsigned char Char;
1.1 root 67:
1.1.1.3 root 68: Dev = STMemory_ReadWord(Params+SIZE_WORD);
69: Char = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD);
1.1.1.2 root 70:
1.1.1.7 ! root 71: HATARI_TRACE(HATARI_TRACE_OS_BIOS, "BIOS Bconout(%i, 0x%02x)\n", Dev, Char);
1.1 root 72:
1.1.1.3 root 73: return FALSE;
1.1 root 74: }
75:
1.1.1.2 root 76:
1.1 root 77: /*-----------------------------------------------------------------------*/
1.1.1.6 root 78: /**
79: * BIOS Read/Write disk sector
80: * Call 4
81: */
1.1.1.7 ! root 82: static bool Bios_RWabs(Uint32 Params)
1.1 root 83: {
1.1.1.3 root 84: Uint32 pBuffer;
85: Uint16 RWFlag, Number, RecNo, Dev;
86:
87: /* Read details from stack */
88: RWFlag = STMemory_ReadWord(Params+SIZE_WORD);
89: pBuffer = STMemory_ReadLong(Params+SIZE_WORD+SIZE_WORD);
90: Number = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_LONG);
91: RecNo = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_LONG+SIZE_WORD);
92: Dev = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_LONG+SIZE_WORD+SIZE_WORD);
1.1 root 93:
1.1.1.7 ! root 94: HATARI_TRACE(HATARI_TRACE_OS_BIOS, "BIOS RWabs %i,%d,0x%lX,%d,%d\n",
! 95: Dev, RWFlag, STRAM_ADDR(pBuffer), RecNo, Number);
1.1 root 96:
1.1.1.3 root 97: return FALSE;
1.1 root 98: }
99:
1.1.1.2 root 100:
1.1 root 101: /*-----------------------------------------------------------------------*/
1.1.1.6 root 102: /**
103: * BIOS Return output device status
104: * Call 8
105: */
1.1.1.7 ! root 106: static bool Bios_Bcostat(Uint32 Params)
1.1 root 107: {
1.1.1.3 root 108: Uint16 Dev;
1.1 root 109:
1.1.1.3 root 110: Dev = STMemory_ReadWord(Params+SIZE_WORD);
1.1.1.2 root 111:
1.1.1.7 ! root 112: HATARI_TRACE(HATARI_TRACE_OS_BIOS, "BIOS Bcostat(%i)\n", Dev);
1.1 root 113:
1.1.1.3 root 114: return FALSE;
1.1 root 115: }
116:
117:
118: /*-----------------------------------------------------------------------*/
1.1.1.6 root 119: /**
120: * Check Bios call and see if we need to re-direct to our own routines
121: * Return TRUE if we've handled the exception, else return FALSE to let TOS attempt it
122: */
1.1.1.7 ! root 123: bool Bios(void)
1.1 root 124: {
1.1.1.3 root 125: Uint32 Params;
126: Uint16 BiosCall;
1.1 root 127:
1.1.1.3 root 128: /* Get call */
129: Params = Regs[REG_A7];
130: BiosCall = STMemory_ReadWord(Params);
131:
132: /* Intercept? */
133: switch(BiosCall)
134: {
135: case 0x1:
136: return Bios_Bconstat(Params);
137: case 0x2:
138: return Bios_Bconin(Params);
139: case 0x3:
140: return Bios_Bconout(Params);
141: case 0x4:
142: return Bios_RWabs(Params);
143: case 0x8:
144: return Bios_Bcostat(Params);
145: default: /* Call as normal! */
1.1.1.7 ! root 146: HATARI_TRACE ( HATARI_TRACE_OS_BIOS, "BIOS %d\n", BiosCall );
1.1.1.3 root 147: return FALSE;
148: }
1.1 root 149: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.