Annotation of hatari/src/xbios.c, revision 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.