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

1.1       root        1: /*
                      2:   Hatari
                      3: 
                      4:   XBios Handler (Trap #14)
                      5: 
                      6:   We intercept and direct some XBios calls to handle the RS-232/Blitter and help with floppy
                      7:   debugging
                      8: */
                      9: 
                     10: #include "main.h"
                     11: #include "debug.h"
                     12: #include "decode.h"
                     13: #include "floppy.h"
                     14: #include "m68000.h"
                     15: #include "misc.h"
                     16: #include "rs232.h"
                     17: #include "stMemory.h"
                     18: 
                     19: /* List of Atari ST RS-232 baud rates */
                     20: static int BaudRates[] = {
                     21:   19200, //0
                     22:   9600,  //1
                     23:   4800,  //2
                     24:   3600,  //3
                     25:   2400,  //4
                     26:   2000,  //5
                     27:   1800,  //6
                     28:   1200,  //7
                     29:   600,   //8
                     30:   300,   //9
                     31:   200,   //10
                     32:   150,   //11
                     33:   134,   //12
                     34:   110,   //13
                     35:   75,    //14
                     36:   50     //15
                     37: };
                     38: 
                     39: //-----------------------------------------------------------------------
                     40: /*
                     41:   XBIOS Floppy Read
                     42:   Call 8
                     43: */
                     44: BOOL XBios_Floprd(unsigned long Params)
                     45: {
                     46: #ifdef DEBUG_TO_FILE
                     47:   char *pBuffer;
                     48:   unsigned short int Dev,Sector,Side,Track,Count;
                     49: 
                     50:   // Read details from stack
                     51:   pBuffer = (char *)STRAM_ADDR(STMemory_ReadLong(Params+SIZE_WORD));
                     52:   Dev = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG);
                     53:   Sector = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD);
                     54:   Track = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD);
                     55:   Side = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD+SIZE_WORD);
                     56:   Count = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD);
                     57: 
                     58:   Debug_FDC("FLOPRD %s,%d,%d,%d,%d at addr 0x%X\n",EmulationDrives[Dev].szFileName,Side,Track,Sector,Count,PC);
                     59: #endif
                     60: 
                     61:   return(FALSE);
                     62: }
                     63: 
                     64: //-----------------------------------------------------------------------
                     65: /*
                     66:   XBIOS Floppy Write
                     67:   Call 9
                     68: */
                     69: BOOL XBios_Flopwr(unsigned long Params)
                     70: {
                     71: #ifdef DEBUG_TO_FILE
                     72:   char *pBuffer;
                     73:   unsigned short int Dev,Sector,Side,Track,Count;
                     74: 
                     75:   // Read details from stack
                     76:   pBuffer = (char *)STRAM_ADDR(STMemory_ReadLong(Params+SIZE_WORD));
                     77:   Dev = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG);
                     78:   Sector = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD);
                     79:   Track = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD);
                     80:   Side = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD+SIZE_WORD);
                     81:   Count = STMemory_ReadWord(Params+SIZE_WORD+SIZE_LONG+SIZE_LONG+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD);
                     82: 
                     83:   Debug_FDC("FLOPWR %s,%d,%d,%d,%d at addr 0x%X\n",EmulationDrives[Dev].szFileName,Side,Track,Sector,Count,PC);
                     84: #endif
                     85: 
                     86:   return(FALSE);
                     87: }
                     88: 
                     89: //-----------------------------------------------------------------------
                     90: /*
                     91:   XBIOS RsConf
                     92:   Call 15
                     93: */
                     94: BOOL XBios_Rsconf(unsigned long Params)
                     95: {
                     96:   short int Baud,Ctrl,Ucr,Rsr,Tsr,Scr;
                     97:   int BaudRate=-1;
                     98: 
                     99:   Baud = STMemory_ReadWord(Params+SIZE_WORD);
                    100:   Ctrl = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD);
                    101:   Ucr = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_WORD);
                    102:   Rsr = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD);
                    103:   Tsr = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD);
                    104:   Scr = STMemory_ReadWord(Params+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD+SIZE_WORD);
                    105: 
                    106:   // Set baud, if passed valid setting
                    107:   if ( (Baud>=0) && (Baud<=15) ) {
                    108:     // Convert ST baud rate index to value
                    109:     BaudRate = BaudRates[Baud];
                    110:     // Set RS-232, pass Communication Control and USART Control register
                    111:     RS232_SetConfig(BaudRate,Ctrl,Ucr);
                    112: 
                    113:     return(TRUE);
                    114:   }
                    115: 
                    116:   return(FALSE);
                    117: }
                    118: 
                    119: //-----------------------------------------------------------------------
                    120: /*
                    121:   XBIOS Scrdmp
                    122:   Call 20
                    123: */
                    124: BOOL XBios_Scrdmp(unsigned long Params)
                    125: {
                    126:   // Correct return code?
                    127:   Regs[REG_D0] = 0;
                    128: 
                    129:   return(TRUE);
                    130: }
                    131: 
                    132: //-----------------------------------------------------------------------
                    133: /*
                    134:   XBIOS Prtblk
                    135:   Call 36
                    136: */
                    137: BOOL XBios_Prtblk(unsigned long Params)
                    138: {
                    139:   // Correct return code?
                    140:   Regs[REG_D0] = 0;
                    141: 
                    142:   return(TRUE);
                    143: }
                    144: 
                    145: //-----------------------------------------------------------------------
                    146: /*
                    147:   XBIOS BlitMode
                    148:   Call 64
                    149: */
                    150: BOOL XBios_BlitMode(unsigned long Params)
                    151: {
                    152:   // No blitter
                    153:   Regs[REG_D0] = 0;
                    154: 
                    155:   return(TRUE);
                    156: }
                    157: 
                    158: //-----------------------------------------------------------------------
                    159: /*
                    160:   Check if we need to re-direct XBios call to our own routines
                    161: */
                    162: BOOL XBios(void)
                    163: {
                    164:   unsigned long Params;
                    165:   unsigned short int XBiosCall;
                    166: 
                    167:   /* Find call */
                    168:   Params = Regs[REG_A7];
                    169:   XBiosCall = STMemory_ReadWord(Params);
                    170: //  Debug_File("XBIOS %d\n",XBiosCall);
                    171: 
                    172:   switch(XBiosCall) {
                    173:     case 8:
                    174:       return(XBios_Floprd(Params));
                    175:     case 9:
                    176:       return(XBios_Flopwr(Params));
                    177:     case 15:
                    178:       return(XBios_Rsconf(Params));
                    179:     case 20:
                    180:       return(XBios_Scrdmp(Params));
                    181:     case 36:
                    182:       return(XBios_Prtblk(Params));
                    183:     case 64:
                    184:       return(XBios_BlitMode(Params));
                    185: 
                    186:     default:  // Call as normal!
                    187:       return(FALSE);
                    188:   }
                    189: }

unix.superglobalmegacorp.com

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