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

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.9 ! root       12: const char XBios_rcsid[] = "Hatari $Id: xbios.c,v 1.18 2008-11-03 20:24:25 thothy Exp $";
1.1       root       13: 
                     14: #include "main.h"
1.1.1.3   root       15: #include "configuration.h"
1.1       root       16: #include "floppy.h"
1.1.1.4   root       17: #include "log.h"
1.1       root       18: #include "m68000.h"
                     19: #include "rs232.h"
1.1.1.3   root       20: #include "screenSnapShot.h"
1.1       root       21: #include "stMemory.h"
1.1.1.3   root       22: #include "xbios.h"
                     23: 
1.1       root       24: 
1.1.1.8   root       25: #define XBIOS_DEBUG 0  /* for floppy read/write */
1.1.1.4   root       26: 
                     27: 
1.1       root       28: /* List of Atari ST RS-232 baud rates */
1.1.1.7   root       29: static const int BaudRates[] =
                     30: {
                     31:        19200, /* 0 */
                     32:        9600,  /* 1 */
                     33:        4800,  /* 2 */
                     34:        3600,  /* 3 */
                     35:        2400,  /* 4 */
                     36:        2000,  /* 5 */
                     37:        1800,  /* 6 */
                     38:        1200,  /* 7 */
                     39:        600,   /* 8 */
                     40:        300,   /* 9 */
                     41:        200,   /* 10 */
                     42:        150,   /* 11 */
                     43:        134,   /* 12 */
                     44:        110,   /* 13 */
                     45:        75,    /* 14 */
                     46:        50     /* 15 */
1.1       root       47: };
                     48: 
1.1.1.2   root       49: 
                     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.7   root       73:        return FALSE;
1.1       root       74: }
                     75: 
1.1.1.2   root       76: 
                     77: /*-----------------------------------------------------------------------*/
1.1.1.7   root       78: /**
                     79:  * XBIOS Floppy Write
                     80:  * Call 9
                     81:  */
1.1.1.8   root       82: static bool XBios_Flopwr(Uint32 Params)
1.1       root       83: {
1.1.1.4   root       84: #if XBIOS_DEBUG
1.1.1.7   root       85:        char *pBuffer;
                     86:        Uint16 Dev,Sector,Side,Track,Count;
1.1       root       87: 
1.1.1.7   root       88:        /* Read details from stack */
                     89:        pBuffer = (char *)STRAM_ADDR(STMemory_ReadLong(Params+SIZE_WORD));
                     90:        Dev = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG);
                     91:        Sector = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD);
                     92:        Track = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD);
                     93:        Side = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD+SIZE_WORD);
                     94:        Count = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD);
1.1       root       95: 
1.1.1.7   root       96:        Log_Printf(LOG_DEBUG, "FLOPWR %s,%d,%d,%d,%d at addr 0x%X\n", EmulationDrives[Dev].szFileName,
                     97:                   Side, Track, Sector, Count, M68000_GetPC());
1.1       root       98: #endif
                     99: 
1.1.1.7   root      100:        return FALSE;
1.1       root      101: }
                    102: 
1.1.1.2   root      103: 
                    104: /*-----------------------------------------------------------------------*/
1.1.1.7   root      105: /**
                    106:  * XBIOS RsConf
                    107:  * Call 15
                    108:  */
1.1.1.8   root      109: static bool XBios_Rsconf(Uint32 Params)
1.1       root      110: {
1.1.1.7   root      111:        short int Baud,Ctrl,Ucr,Rsr,Tsr,Scr;
1.1       root      112: 
1.1.1.7   root      113:        Baud = STMemory_ReadWord(Params+SIZE_WORD);
                    114:        Ctrl = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD);
                    115:        Ucr = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_WORD);
                    116:        Rsr = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD);
                    117:        Tsr = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD);
                    118:        Scr = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD);
                    119: 
                    120:        /* Set baud rate and other configuration, if RS232 emaulation is enabled */
                    121:        if (ConfigureParams.RS232.bEnableRS232)
                    122:        {
                    123:                if (Baud>=0 && Baud<=15)
                    124:                {
                    125:                        /* Convert ST baud rate index to value */
                    126:                        int BaudRate = BaudRates[Baud];
                    127:                        /* And set new baud rate: */
                    128:                        RS232_SetBaudRate(BaudRate);
                    129:                }
                    130: 
                    131:                if (Ucr != -1)
                    132:                {
                    133:                        RS232_HandleUCR(Ucr);
                    134:                }
                    135: 
                    136:                if (Ctrl != -1)
                    137:                {
                    138:                        RS232_SetFlowControl(Ctrl);
                    139:                }
1.1       root      140: 
1.1.1.7   root      141:                return TRUE;
                    142:        }
1.1       root      143: 
1.1.1.7   root      144:        return FALSE;
1.1       root      145: }
                    146: 
1.1.1.2   root      147: 
                    148: /*-----------------------------------------------------------------------*/
1.1.1.7   root      149: /**
                    150:  * XBIOS Scrdmp
                    151:  * Call 20
                    152:  */
1.1.1.8   root      153: static bool XBios_Scrdmp(Uint32 Params)
1.1       root      154: {
1.1.1.7   root      155:        ScreenSnapShot_SaveScreen();
1.1.1.3   root      156: 
1.1.1.7   root      157:        /* Correct return code? */
                    158:        Regs[REG_D0] = 0;
1.1       root      159: 
1.1.1.7   root      160:        return TRUE;
1.1       root      161: }
                    162: 
1.1.1.2   root      163: 
                    164: /*-----------------------------------------------------------------------*/
1.1.1.7   root      165: /**
                    166:  * Check if we need to re-direct XBios call to our own routines
                    167:  */
1.1.1.8   root      168: bool XBios(void)
1.1       root      169: {
1.1.1.7   root      170:        Uint32 Params;
                    171:        Uint16 XBiosCall;
1.1       root      172: 
1.1.1.7   root      173:        /* Find call */
                    174:        Params = Regs[REG_A7];
                    175:        XBiosCall = STMemory_ReadWord(Params);
                    176: 
                    177:        switch (XBiosCall)
                    178:        {
                    179:         case 8:
1.1.1.8   root      180:                HATARI_TRACE ( HATARI_TRACE_OS_XBIOS, "XBIOS Floprd()\n" );
1.1.1.7   root      181:                return XBios_Floprd(Params);
                    182:         case 9:
1.1.1.8   root      183:                HATARI_TRACE ( HATARI_TRACE_OS_XBIOS, "XBIOS Flopwr()\n" );
1.1.1.7   root      184:                return XBios_Flopwr(Params);
                    185:         case 15:
1.1.1.8   root      186:                HATARI_TRACE ( HATARI_TRACE_OS_XBIOS, "XBIOS Rsconf()\n" );
1.1.1.7   root      187:                return XBios_Rsconf(Params);
                    188:         case 20:
1.1.1.8   root      189:                HATARI_TRACE ( HATARI_TRACE_OS_XBIOS, "XBIOS Scrdmp()\n" );
1.1.1.7   root      190:                return XBios_Scrdmp(Params);
                    191: 
                    192:         default:  /* Call as normal! */
1.1.1.8   root      193:                HATARI_TRACE ( HATARI_TRACE_OS_XBIOS, "XBIOS %d\n", XBiosCall );
1.1.1.7   root      194:                return FALSE;
                    195:        }
1.1       root      196: }

unix.superglobalmegacorp.com

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