|
|
1.1 ! root 1: /* ! 2: Hatari - ide.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. ! 6: ! 7: This is where we intercept read/writes to/from the IDE controller hardware. ! 8: */ ! 9: const char Ide_rcsid[] = "Hatari $Id: ide.c,v 1.3 2007/09/09 20:49:58 thothy Exp $"; ! 10: ! 11: #include "main.h" ! 12: #include "configuration.h" ! 13: #include "ide.h" ! 14: #include "m68000.h" ! 15: #include "stMemory.h" ! 16: #include "sysdeps.h" ! 17: ! 18: ! 19: #define IDE_DEBUG 0 ! 20: ! 21: #if IDE_DEBUG ! 22: #define Dprintf(a) printf a ! 23: #else ! 24: #define Dprintf(a) ! 25: #endif ! 26: ! 27: ! 28: /*-----------------------------------------------------------------------*/ ! 29: /** ! 30: * Handle byte read access from IDE IO memory. ! 31: */ ! 32: uae_u32 Ide_Mem_bget(uaecptr addr) ! 33: { ! 34: Dprintf(("IdeMem_bget($%x)\n", addr)); ! 35: ! 36: addr &= 0x00ffffff; /* Use a 24 bit address */ ! 37: ! 38: if (addr >= 0xf00040 || !ConfigureParams.HardDisk.bUseIdeHardDiskImage) ! 39: { ! 40: /* invalid memory addressing --> bus error */ ! 41: M68000_BusError(addr, 1); ! 42: return -1; ! 43: } ! 44: ! 45: return STRam[addr]; ! 46: } ! 47: ! 48: ! 49: /*-----------------------------------------------------------------------*/ ! 50: /** ! 51: * Handle word read access from IDE IO memory. ! 52: */ ! 53: uae_u32 Ide_Mem_wget(uaecptr addr) ! 54: { ! 55: Dprintf(("IdeMem_wget($%x)\n", addr)); ! 56: ! 57: addr &= 0x00ffffff; /* Use a 24 bit address */ ! 58: ! 59: if (addr >= 0xf00040 || !ConfigureParams.HardDisk.bUseIdeHardDiskImage) ! 60: { ! 61: /* invalid memory addressing --> bus error */ ! 62: M68000_BusError(addr, 1); ! 63: //fprintf(stderr, "Illegal IDE IO memory access: IdeMem_wget($%x)\n", addr); ! 64: return -1; ! 65: } ! 66: ! 67: return STMemory_ReadWord(addr); ! 68: } ! 69: ! 70: ! 71: /*-----------------------------------------------------------------------*/ ! 72: /** ! 73: * Handle long-word read access from IDE IO memory. ! 74: */ ! 75: uae_u32 Ide_Mem_lget(uaecptr addr) ! 76: { ! 77: Dprintf(("IdeMem_lget($%x)\n", addr)); ! 78: ! 79: addr &= 0x00ffffff; /* Use a 24 bit address */ ! 80: ! 81: if (addr >= 0xf00040 || !ConfigureParams.HardDisk.bUseIdeHardDiskImage) ! 82: { ! 83: /* invalid memory addressing --> bus error */ ! 84: M68000_BusError(addr, 1); ! 85: //fprintf(stderr, "Illegal IDE IO memory access: IdeMem_lget($%x)\n", addr); ! 86: return -1; ! 87: } ! 88: ! 89: return STMemory_ReadLong(addr); ! 90: } ! 91: ! 92: ! 93: /*-----------------------------------------------------------------------*/ ! 94: /** ! 95: * Handle byte write access to IDE IO memory. ! 96: */ ! 97: void Ide_Mem_bput(uaecptr addr, uae_u32 val) ! 98: { ! 99: Dprintf(("IdeMem_bput($%x, $%x)\n", addr, val)); ! 100: ! 101: addr &= 0x00ffffff; /* Use a 24 bit address */ ! 102: ! 103: if (addr >= 0xf00040 || !ConfigureParams.HardDisk.bUseIdeHardDiskImage) ! 104: { ! 105: /* invalid memory addressing --> bus error */ ! 106: M68000_BusError(addr, 0); ! 107: //fprintf(stderr, "Illegal IDE IO memory access: IdeMem_bput($%x)\n", addr); ! 108: return; ! 109: } ! 110: ! 111: STMemory_WriteByte(addr, val); ! 112: } ! 113: ! 114: ! 115: /*-----------------------------------------------------------------------*/ ! 116: /** ! 117: * Handle word write access to IDE IO memory. ! 118: */ ! 119: void Ide_Mem_wput(uaecptr addr, uae_u32 val) ! 120: { ! 121: Dprintf(("IdeMem_wput($%x, $%x)\n", addr, val)); ! 122: ! 123: addr &= 0x00ffffff; /* Use a 24 bit address */ ! 124: ! 125: if (addr >= 0xf00040 || !ConfigureParams.HardDisk.bUseIdeHardDiskImage) ! 126: { ! 127: /* invalid memory addressing --> bus error */ ! 128: M68000_BusError(addr, 0); ! 129: //fprintf(stderr, "Illegal IDE IO memory access: IdeMem_wput($%x)\n", addr); ! 130: return; ! 131: } ! 132: ! 133: STMemory_WriteWord(addr, val); ! 134: } ! 135: ! 136: ! 137: /*-----------------------------------------------------------------------*/ ! 138: /** ! 139: * Handle long-word write access to IDE IO memory. ! 140: */ ! 141: void Ide_Mem_lput(uaecptr addr, uae_u32 val) ! 142: { ! 143: Dprintf(("IdeMem_lput($%x, $%x)\n", addr, val)); ! 144: ! 145: addr &= 0x00ffffff; /* Use a 24 bit address */ ! 146: ! 147: if (addr >= 0xf00040 || !ConfigureParams.HardDisk.bUseIdeHardDiskImage) ! 148: { ! 149: /* invalid memory addressing --> bus error */ ! 150: M68000_BusError(addr, 0); ! 151: //fprintf(stderr, "Illegal IDE IO memory access: IdeMem_lput($%x)\n", addr); ! 152: return; ! 153: } ! 154: ! 155: STMemory_WriteLong(addr, val); ! 156: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.