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

1.1       root        1: /*
1.1.1.3   root        2:   Hatari - xbios.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:   XBios Handler (Trap #14)
                      8: 
1.1.1.3   root        9:   We intercept and direct some XBios calls to handle the RS-232 etc. and help
                     10:   with floppy 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.3   root       23: #include "xbios.h"
                     24: 
1.1       root       25: 
1.1.1.8   root       26: #define XBIOS_DEBUG 0  /* for floppy read/write */
1.1.1.4   root       27: 
                     28: 
1.1       root       29: /* List of Atari ST RS-232 baud rates */
1.1.1.7   root       30: static const int BaudRates[] =
                     31: {
                     32:        19200, /* 0 */
                     33:        9600,  /* 1 */
                     34:        4800,  /* 2 */
                     35:        3600,  /* 3 */
                     36:        2400,  /* 4 */
                     37:        2000,  /* 5 */
                     38:        1800,  /* 6 */
                     39:        1200,  /* 7 */
                     40:        600,   /* 8 */
                     41:        300,   /* 9 */
                     42:        200,   /* 10 */
                     43:        150,   /* 11 */
                     44:        134,   /* 12 */
                     45:        110,   /* 13 */
                     46:        75,    /* 14 */
                     47:        50     /* 15 */
1.1       root       48: };
                     49: 
1.1.1.2   root       50: 
1.1.1.7   root       51: /**
                     52:  * XBIOS Floppy Read
                     53:  * Call 8
                     54:  */
1.1.1.8   root       55: static bool XBios_Floprd(Uint32 Params)
1.1       root       56: {
1.1.1.4   root       57: #if XBIOS_DEBUG
1.1.1.7   root       58:        char *pBuffer;
                     59:        Uint16 Dev,Sector,Side,Track,Count;
1.1       root       60: 
1.1.1.7   root       61:        /* Read details from stack */
                     62:        pBuffer = (char *)STRAM_ADDR(STMemory_ReadLong(Params+SIZE_WORD));
                     63:        Dev = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG);
                     64:        Sector = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD);
                     65:        Track = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD);
                     66:        Side = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD+SIZE_WORD);
                     67:        Count = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD);
1.1       root       68: 
1.1.1.7   root       69:        Log_Printf(LOG_DEBUG, "FLOPRD %s,%d,%d,%d,%d at addr 0x%X\n", EmulationDrives[Dev].szFileName,
                     70:                   Side, Track, Sector, Count, M68000_GetPC());
1.1       root       71: #endif
                     72: 
1.1.1.10! root       73:        return false;
1.1       root       74: }
                     75: 
1.1.1.2   root       76: 
1.1.1.7   root       77: /**
                     78:  * XBIOS Floppy Write
                     79:  * Call 9
                     80:  */
1.1.1.8   root       81: static bool XBios_Flopwr(Uint32 Params)
1.1       root       82: {
1.1.1.4   root       83: #if XBIOS_DEBUG
1.1.1.7   root       84:        char *pBuffer;
                     85:        Uint16 Dev,Sector,Side,Track,Count;
1.1       root       86: 
1.1.1.7   root       87:        /* Read details from stack */
                     88:        pBuffer = (char *)STRAM_ADDR(STMemory_ReadLong(Params+SIZE_WORD));
                     89:        Dev = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG);
                     90:        Sector = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD);
                     91:        Track = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD);
                     92:        Side = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD+SIZE_WORD);
                     93:        Count = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD);
1.1       root       94: 
1.1.1.7   root       95:        Log_Printf(LOG_DEBUG, "FLOPWR %s,%d,%d,%d,%d at addr 0x%X\n", EmulationDrives[Dev].szFileName,
                     96:                   Side, Track, Sector, Count, M68000_GetPC());
1.1       root       97: #endif
                     98: 
1.1.1.10! root       99:        return false;
1.1       root      100: }
                    101: 
1.1.1.2   root      102: 
1.1.1.7   root      103: /**
                    104:  * XBIOS RsConf
                    105:  * Call 15
                    106:  */
1.1.1.8   root      107: static bool XBios_Rsconf(Uint32 Params)
1.1       root      108: {
1.1.1.7   root      109:        short int Baud,Ctrl,Ucr,Rsr,Tsr,Scr;
1.1       root      110: 
1.1.1.7   root      111:        Baud = STMemory_ReadWord(Params+SIZE_WORD);
                    112:        Ctrl = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD);
                    113:        Ucr = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_WORD);
                    114:        Rsr = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD);
                    115:        Tsr = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD);
                    116:        Scr = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD);
                    117: 
                    118:        /* Set baud rate and other configuration, if RS232 emaulation is enabled */
                    119:        if (ConfigureParams.RS232.bEnableRS232)
                    120:        {
                    121:                if (Baud>=0 && Baud<=15)
                    122:                {
                    123:                        /* Convert ST baud rate index to value */
                    124:                        int BaudRate = BaudRates[Baud];
                    125:                        /* And set new baud rate: */
                    126:                        RS232_SetBaudRate(BaudRate);
                    127:                }
                    128: 
                    129:                if (Ucr != -1)
                    130:                {
                    131:                        RS232_HandleUCR(Ucr);
                    132:                }
                    133: 
                    134:                if (Ctrl != -1)
                    135:                {
                    136:                        RS232_SetFlowControl(Ctrl);
                    137:                }
1.1       root      138: 
1.1.1.10! root      139:                return true;
1.1.1.7   root      140:        }
1.1       root      141: 
1.1.1.10! root      142:        return false;
1.1       root      143: }
                    144: 
1.1.1.2   root      145: 
1.1.1.7   root      146: /**
                    147:  * XBIOS Scrdmp
                    148:  * Call 20
                    149:  */
1.1.1.8   root      150: static bool XBios_Scrdmp(Uint32 Params)
1.1       root      151: {
1.1.1.7   root      152:        ScreenSnapShot_SaveScreen();
1.1.1.3   root      153: 
1.1.1.7   root      154:        /* Correct return code? */
                    155:        Regs[REG_D0] = 0;
1.1       root      156: 
1.1.1.10! root      157:        return true;
        !           158: }
        !           159: 
        !           160: 
        !           161: /**
        !           162:  * XBIOS remote control interface for Hatari
        !           163:  * Call 255
        !           164:  */
        !           165: static bool XBios_HatariControl(Uint32 Params)
        !           166: {
        !           167:        char *pText;
        !           168: 
        !           169:        pText = (char *)STRAM_ADDR(STMemory_ReadLong(Params+SIZE_WORD));
        !           170:        Control_ProcessBuffer(pText);
        !           171:        Regs[REG_D0] = 0;
        !           172:        return true;
1.1       root      173: }
                    174: 
1.1.1.2   root      175: 
1.1.1.7   root      176: /**
                    177:  * Check if we need to re-direct XBios call to our own routines
                    178:  */
1.1.1.8   root      179: bool XBios(void)
1.1       root      180: {
1.1.1.7   root      181:        Uint32 Params;
                    182:        Uint16 XBiosCall;
1.1       root      183: 
1.1.1.7   root      184:        /* Find call */
                    185:        Params = Regs[REG_A7];
                    186:        XBiosCall = STMemory_ReadWord(Params);
                    187: 
                    188:        switch (XBiosCall)
                    189:        {
                    190:         case 8:
1.1.1.10! root      191:                LOG_TRACE(TRACE_OS_XBIOS, "XBIOS Floprd()\n");
1.1.1.7   root      192:                return XBios_Floprd(Params);
                    193:         case 9:
1.1.1.10! root      194:                LOG_TRACE(TRACE_OS_XBIOS, "XBIOS Flopwr()\n");
1.1.1.7   root      195:                return XBios_Flopwr(Params);
                    196:         case 15:
1.1.1.10! root      197:                LOG_TRACE(TRACE_OS_XBIOS, "XBIOS Rsconf()\n");
1.1.1.7   root      198:                return XBios_Rsconf(Params);
                    199:         case 20:
1.1.1.10! root      200:                LOG_TRACE(TRACE_OS_XBIOS, "XBIOS Scrdmp()\n");
1.1.1.7   root      201:                return XBios_Scrdmp(Params);
1.1.1.10! root      202:         case 255:
        !           203:                LOG_TRACE(TRACE_OS_XBIOS, "XBIOS HatariControl()\n");
        !           204:                return XBios_HatariControl(Params);
1.1.1.7   root      205: 
                    206:         default:  /* Call as normal! */
1.1.1.10! root      207:                LOG_TRACE(TRACE_OS_XBIOS, "XBIOS %d\n", XBiosCall);
        !           208:                return false;
1.1.1.7   root      209:        }
1.1       root      210: }

unix.superglobalmegacorp.com

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