Annotation of hatari/src/bios.c, revision 1.1.1.9

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.8   root       11: const char Bios__fileid[] = "Hatari bios.c : " __DATE__ " " __TIME__;
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.9 ! root       35:        LOG_TRACE(TRACE_OS_BIOS, "BIOS Bconstat(%i)\n", Dev);
1.1       root       36: 
1.1.1.9 ! 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.9 ! root       52:        LOG_TRACE(TRACE_OS_BIOS, "BIOS Bconin(%i)\n", Dev);
1.1       root       53: 
1.1.1.9 ! 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.9 ! root       71:        LOG_TRACE(TRACE_OS_BIOS, "BIOS Bconout(%i, 0x%02x)\n", Dev, Char);
1.1       root       72: 
1.1.1.9 ! 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.9 ! root       94:        LOG_TRACE(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.9 ! 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.9 ! root      112:        LOG_TRACE(TRACE_OS_BIOS, "BIOS Bcostat(%i)\n", Dev);
1.1       root      113: 
1.1.1.9 ! 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
1.1.1.9 ! root      121:  * Return true if we've handled the exception, else return false to let TOS attempt it
1.1.1.6   root      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.9 ! root      146:                LOG_TRACE(TRACE_OS_BIOS, "BIOS %d\n", BiosCall);
        !           147:                return false;
1.1.1.3   root      148:        }
1.1       root      149: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.