true, EXPANSIONTYPE_SCSI,
2017, 10, 0
},
+ {
+ _T("dotto"), _T("Dotto"), _T("Hardital"),
+ NULL, dotto_init, NULL, dotto_add_ide_unit, ROMTYPE_DOTTO, 0, 0, BOARD_AUTOCONFIG_Z2, false,
+ NULL, 0,
+ true, EXPANSIONTYPE_IDE
+ },
{
_T("vector"), _T("Vector Falcon 8000"), _T("HK-Computer"),
NULL, vector_init, NULL, vector_add_scsi_unit, ROMTYPE_VECTOR, 0, 0, BOARD_AUTOCONFIG_Z2, false,
#define IVST500AT_IDE (ACCESSX_IDE + 2 * MAX_DUPLICATE_EXPANSION_BOARDS)
#define TRIFECTA_IDE (IVST500AT_IDE + MAX_DUPLICATE_EXPANSION_BOARDS)
#define TANDEM_IDE (TRIFECTA_IDE + MAX_DUPLICATE_EXPANSION_BOARDS)
-#define TOTAL_IDE (TANDEM_IDE + MAX_DUPLICATE_EXPANSION_BOARDS)
+#define DOTTO_IDE (TANDEM_IDE + MAX_DUPLICATE_EXPANSION_BOARDS)
+#define TOTAL_IDE (DOTTO_IDE + MAX_DUPLICATE_EXPANSION_BOARDS)
#define ALF_ROM_OFFSET 0x0100
#define GVP_IDE_ROM_OFFSET 0x8000
static struct ide_board *ivst500at_board[MAX_DUPLICATE_EXPANSION_BOARDS];
static struct ide_board *trifecta_board[MAX_DUPLICATE_EXPANSION_BOARDS];
static struct ide_board *tandem_board[MAX_DUPLICATE_EXPANSION_BOARDS];
+static struct ide_board *dotto_board[MAX_DUPLICATE_EXPANSION_BOARDS];
static struct ide_hdf *idecontroller_drive[TOTAL_IDE * 2];
static struct ide_thread_state idecontroller_its;
v = ide_irq_check(board->ide[0], false) ? 1 : 0;
}
+ } else if (board->type == DOTTO_IDE) {
+
+ int offset = addr;
+ v = board->rom[offset];
+ if (board->configured) {
+ int regnum = get_adide_reg(addr, board);
+ if (regnum >= 0) {
+ v = get_ide_reg(board, regnum);
+ v = adide_decode_word(v);
+ }
+ }
+
}
return v;
v |= board->rom[(offset + 1) & board->rom_mask];
}
+ } else if (board->type == DOTTO_IDE) {
+
+ int offset = addr;
+ v = board->rom[(offset + 0) & board->rom_mask];
+ v <<= 8;
+ v |= board->rom[(offset + 1) & board->rom_mask];
+ if (board->configured) {
+ int regnum = get_adide_reg(addr, board);
+ if (regnum >= 0) {
+ if (regnum == IDE_DATA) {
+ v = get_ide_reg(board, IDE_DATA);
+ } else {
+ v = get_ide_reg(board, regnum) << 8;
+ v = adide_decode_word(v);
+ }
+ }
+ }
+
}
}
put_ide_reg_multi(board, reg, v, portnum, 1);
}
+ } else if (board->type == DOTTO_IDE) {
+
+ if (board->configured) {
+ int regnum = get_adide_reg(addr, board);
+ v = adide_encode_word(v);
+ put_ide_reg(board, regnum, v);
+ }
+
}
}
if (!reg || addr == 0 || addr == 2) {
put_ide_reg_multi(board, IDE_DATA, v, portnum, 1);
}
+
+ } else if (board->type == DOTTO_IDE) {
+
+ int regnum = get_adide_reg(addr, board);
+ if (regnum == IDE_DATA) {
+ put_ide_reg(board, IDE_DATA, v);
+ } else {
+ v = adide_encode_word(v);
+ put_ide_reg(board, regnum, v >> 8);
+ }
}
}
}
add_ide_standard_unit(ch, ci, rc, tandem_board, TANDEM_IDE, false, false, 2);
}
+bool dotto_init(struct autoconfig_info *aci)
+{
+ const struct expansionromtype *ert = get_device_expansion_rom(ROMTYPE_DOTTO);
+ ide_add_reset();
+
+ uae_u8 *rom = xcalloc(uae_u8, 65536);
+ load_rom_rc(aci->rc, ROMTYPE_DOTTO, 32768, 0, rom, 65536, LOADROM_EVENONLY_ODDONE);
+
+ if (!aci->doinit) {
+ memcpy(aci->autoconfig_raw, rom, sizeof aci->autoconfig_raw);
+ xfree(rom);
+ return true;
+ }
+ struct ide_board *ide = getide(aci);
+
+ ide->bank = &ide_bank_generic;
+ ide->mask = 65536 - 1;
+ ide->rom_size = 65536;
+ ide->rom_mask = 65536 - 1;
+ ide->keepautoconfig = false;
+
+ ide->rom = rom;
+ memcpy(ide->acmemory, ide->rom, sizeof ide->acmemory);
+
+ aci->addrbank = ide->bank;
+ return true;
+}
+
+void dotto_add_ide_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc)
+{
+ add_ide_standard_unit(ch, ci, rc, dotto_board, DOTTO_IDE, false, true, 2);
+}
+
+
extern void x86_xt_ide_bios(struct zfile*, struct romconfig*);
static bool x86_at_hd_init(struct autoconfig_info *aci, int type)
{
return NULL;
}
-#define NEXT_ROM_ID 257
+#define NEXT_ROM_ID 258
#define ALTROM(id,grp,num,size,flags,crc32,a,b,c,d,e) \
{ _T("X"), 0, 0, 0, 0, 0, size, id, 0, 0, flags, (grp << 16) | num, 0, NULL, crc32, a, b, c, d, e },
0x591c3cd4, 0x681b8a67,0x3775dd0c,0x8f13b641,0x8852a51e,0xf3a29da3, NULL, NULL },
{ _T("Mastercard v2.3"), 0, 0, 0, 0, _T("MTECMASTERCARD\0"), 65536, 254, 0, 0, ROMTYPE_MASTERCARD, 0, 0, NULL,
0x4837cc3d, 0xeea5e9ab,0xb3ffb4ed,0xdf09825c,0x7e8de75d,0x0d08c01f, NULL, NULL },
+ { _T("Hardital Dotto"), 0, 0, 0, 0, _T("DOTTO\0"), 32768, 257, 0, 0, ROMTYPE_DOTTO, 0, 0, NULL,
+ 0xee803484, 0x62822cb9,0x0b095efa,0x455496ea,0xd5b22740,0x77d86375, NULL, NULL },
{ _T("CyberStorm MK I 68040"), 0, 0, 0, 0, _T("CSMKI\0"), 32768, 95, 0, 0, ROMTYPE_CB_CSMK1, 0, 0, NULL,
0, 0, 0, 0, 0, 0, NULL, _T("cyberstormmk1_040.rom") },