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

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

unix.superglobalmegacorp.com

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