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

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.10! root       94:        LOG_TRACE(TRACE_OS_BIOS, "BIOS Rwabs %i,%d,0x%lX,%d,%d\n",
1.1.1.9   root       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: /**
1.1.1.10! root      120:  * Print BIOS call name when BIOS tracing enabled.
        !           121:  */
        !           122: static bool Bios_Trace(Uint16 BiosCall)
        !           123: {
        !           124: #if ENABLE_TRACING
        !           125:        /* GCC uses substrings from above trace statements
        !           126:         * where they match, so having them again here
        !           127:         * wastes only a pointer & simplifies things
        !           128:         */
        !           129:        static const char* names[] = {
        !           130:                "Getmpb", "Bconstat","Bconin", "Bconout",
        !           131:                "Rwabs",  "Setexc",  "Tickcal","Getbpb",
        !           132:                "Bcostat","Mediach", "Drvmap", "Kbshift"
        !           133:        };
        !           134:        if (BiosCall < ARRAYSIZE(names)) {
        !           135:                LOG_TRACE(TRACE_OS_BIOS, "BIOS %s()\n", names[BiosCall]);
        !           136:        } else {
        !           137:                LOG_TRACE(TRACE_OS_BIOS, "BIOS %d?\n", BiosCall);
        !           138:        }
        !           139: #endif
        !           140:        /* let TOS handle it */
        !           141:        return false;
        !           142: }
        !           143: 
        !           144: 
        !           145: /*-----------------------------------------------------------------------*/
        !           146: /**
        !           147:  * Check Bios call and see if we need to re-direct to our own routines.
        !           148:  * Return true if we've handled the exception, else return false to let
        !           149:  * TOS attempt it
1.1.1.6   root      150:  */
1.1.1.7   root      151: bool Bios(void)
1.1       root      152: {
1.1.1.3   root      153:        Uint32 Params;
                    154:        Uint16 BiosCall;
1.1       root      155: 
1.1.1.3   root      156:        /* Get call */
                    157:        Params = Regs[REG_A7];
                    158:        BiosCall = STMemory_ReadWord(Params);
                    159: 
                    160:        /* Intercept? */
                    161:        switch(BiosCall)
                    162:        {
                    163:         case 0x1:
                    164:                return Bios_Bconstat(Params);
                    165:         case 0x2:
                    166:                return Bios_Bconin(Params);
                    167:         case 0x3:
                    168:                return Bios_Bconout(Params);
                    169:         case 0x4:
                    170:                return Bios_RWabs(Params);
                    171:         case 0x8:
                    172:                return Bios_Bcostat(Params);
1.1.1.10! root      173:         default:
        !           174:                return Bios_Trace(BiosCall);
1.1.1.3   root      175:        }
1.1       root      176: }

unix.superglobalmegacorp.com

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