| 1179 | } |
| 1180 | |
| 1181 | static uae_u32 ide_read_word(struct ide_board *board, uaecptr addr) |
| 1182 | { |
| 1183 | uae_u32 v = 0xffff; |
| 1184 | |
| 1185 | addr &= board->mask; |
| 1186 | |
| 1187 | if (addr < 0x40 && (!board->configured || board->keepautoconfig)) { |
| 1188 | v = board->acmemory[addr] << 8; |
| 1189 | v |= board->acmemory[addr + 1]; |
| 1190 | return v; |
| 1191 | } |
| 1192 | |
| 1193 | if (board->type == APOLLO_IDE) { |
| 1194 | |
| 1195 | if (addr >= APOLLO_ROM_OFFSET) { |
| 1196 | if (board->rom) { |
| 1197 | v = board->rom[(addr + 0 - APOLLO_ROM_OFFSET) & board->rom_mask]; |
| 1198 | v <<= 8; |
| 1199 | v |= board->rom[(addr + 1 - APOLLO_ROM_OFFSET) & board->rom_mask]; |
| 1200 | } |
| 1201 | } |
| 1202 | |
| 1203 | } else if (board->type == DATAFLYERPLUS_IDE) { |
| 1204 | |
| 1205 | if (!(addr & 0x8000) && (board->subtype & 2)) { |
| 1206 | if (board->rom) { |
| 1207 | v = board->rom[(addr + 0) & board->rom_mask]; |
| 1208 | v <<= 8; |
| 1209 | v |= board->rom[(addr + 1) & board->rom_mask]; |
| 1210 | } |
| 1211 | } |
| 1212 | |
| 1213 | } else if (board->type == ROCHARD_IDE) { |
| 1214 | |
| 1215 | if (addr < 8192) { |
| 1216 | if (board->rom) { |
| 1217 | v = board->rom[(addr + 0) & board->rom_mask]; |
| 1218 | v <<= 8; |
| 1219 | v |= board->rom[(addr + 1) & board->rom_mask]; |
| 1220 | } |
| 1221 | } |
| 1222 | |
| 1223 | } |
| 1224 | |
| 1225 | if (board->configured) { |
| 1226 | |
| 1227 | if (board->type == BUDDHA_IDE) { |
| 1228 | |
| 1229 | int portnum; |
| 1230 | int regnum = get_buddha_reg(addr, board, &portnum, NULL); |
| 1231 | if (regnum == IDE_DATA) { |
| 1232 | if (board->ide[portnum]) { |
| 1233 | v = get_ide_reg_multi(board, IDE_DATA, portnum, 1); |
| 1234 | } |
| 1235 | } else { |
| 1236 | v = ide_read_byte(board, addr) << 8; |
| 1237 | v |= ide_read_byte(board, addr + 1); |
| 1238 | } |
no test coverage detected