true,
adscsi2000_settings
},
+ {
+ _T("trumpcardpro"), _T("Grand Slam"), _T("IVS"),
+ trumpcardpro_init, NULL, trumpcardpro_add_scsi_unit, ROMTYPE_IVSTPRO, 0, 0, BOARD_AUTOCONFIG_Z2, false,
+ NULL, 0,
+ false, EXPANSIONTYPE_SCSI,
+ 2112, 4, 0, false, NULL,
+ false, NULL,
+ { 0xd1, 2, 0x00, 0x00, 0x08, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00 },
+ },
{
_T("kommos"), _T("A500/A2000 SCSI"), _T("Jürgen Kommos"),
kommos_init, NULL, kommos_add_scsi_unit, ROMTYPE_KOMMOS, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true,
#define ROMTYPE_MEVOLUTION 0x00100037
#define ROMTYPE_GOLEMFAST 0x00100038
#define ROMTYPE_PHOENIXB 0x00100039
+#define ROMTYPE_IVSTPRO 0x0010003A
#define ROMTYPE_NOT 0x00800000
#define ROMTYPE_QUAD 0x01000000
int id;
int cpu;
int cloanto;
- int type;
+ uae_u32 type;
int group;
int title;
const TCHAR *partnumber;
const struct expansionromtype *get_device_expansion_rom(int romtype);
const struct expansionromtype *get_unit_expansion_rom(int hdunit);
struct boardromconfig *get_device_rom_new(struct uae_prefs *p, int romtype, int devnum, int *index);
-void clear_device_rom(struct uae_prefs *p, int romtype, int devnum);
+void clear_device_rom(struct uae_prefs *p, int romtype, int devnum, bool deleteDevice);
struct boardromconfig *get_boardromconfig(struct uae_prefs *p, int romtype, int *index);
#define LOADROM_FILL 1
addrbank *phoenixboard_init(struct romconfig *rc);
void phoenixboard_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc);
+addrbank *trumpcardpro_init(struct romconfig*);
+void trumpcardpro_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc);
+
void x86_xt_hd_bput(int, uae_u8);
uae_u8 x86_xt_hd_bget(int);
addrbank *x86_xt_hd_init(struct romconfig *rc);
return NULL;
}
-#define NEXT_ROM_ID 161
+#define NEXT_ROM_ID 162
#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 },
ALTROMPN(157, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, NULL, 0x39b0075e, 0xf6644ea0, 0x6c3ed349, 0xfb0fb6b4, 0xa9f07655, 0x0b104179)
{ _T("Phoenix Board SCSI v.J"), 3, 1, 3, 1, _T("PBSCSI\0"), 32768, 159, 0, 0, ROMTYPE_PHOENIXB, 0, 0, NULL,
0x1f672e4b, 0xb20d50b8, 0x31ec9823, 0xfa732fc6, 0x522ecc6a, 0xae36ec33, NULL, NULL },
+ { _T("IVS GramdSlam/Trumpcard Pro v4.9"), 4, 9, 4, 9, _T("IVSPRO\0"), 16384, 161, 0, 0, ROMTYPE_IVSTPRO, 0, 0, NULL,
+ 0x4a15f224, 0x29500b47, 0x289e84ac, 0x575e3c7d, 0x82199b45, 0x605d8fc9, 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") },
return brc;
}
-void clear_device_rom(struct uae_prefs *p, int romtype, int devnum)
+void clear_device_rom(struct uae_prefs *p, int romtype, int devnum, bool deleteDevice)
{
int index;
struct boardromconfig *brc = get_device_rom(p, romtype, devnum, &index);
if (!brc)
return;
- memset(&brc->roms[index], 0, sizeof(struct romconfig));
+ if (deleteDevice) {
+ memset(brc, 0, sizeof(struct boardromconfig));
+ } else {
+ memset(&brc->roms[index], 0, sizeof(struct romconfig));
+ }
}
struct boardromconfig *get_device_rom(struct uae_prefs *p, int romtype, int devnum, int *index)
#define OMTI_ADAPTER 23
#define OMTI_X86 24
#define NCR5380_PHOENIXBOARD 25
-#define NCR_LAST 26
+#define NCR5380_TRUMPCARDPRO 26
+#define NCR_LAST 27
extern int log_scsiemu;
break;
case SCSI_SIGNAL_PHASE_STATUS:
#if RAW_SCSI_DEBUG
- if (!nodebug)
- write_log(_T("raw_scsi: status byte read %02x\n"), sd->status);
+ if (!nodebug || next)
+ write_log(_T("raw_scsi: status byte read %02x. Next=%d\n"), sd->status, next);
#endif
v = sd->status;
if (next) {
break;
case SCSI_SIGNAL_PHASE_MESSAGE_IN:
#if RAW_SCSI_DEBUG
- if (!nodebug)
- write_log(_T("raw_scsi: message byte read %02x\n"), sd->status);
+ if (!nodebug || next)
+ write_log(_T("raw_scsi: message byte read %02x. Next=%d\n"), sd->status, next);
#endif
v = sd->status;
rs->status = v;
break;
default:
write_log(_T("raw_scsi_put_data but bus phase is %d!\n"), rs->bus_phase);
+ //raw_scsi_get_data_2(rs, true, false);
break;
}
}
if (scsi->irq) {
v |= 1 << 4;
}
- if (scsi->dma_active && !scsi->dma_controller) {
+ if (scsi->dma_active && !scsi->dma_controller && r->bus_phase == (scsi->regs[3] & 7)) {
v |= 1 << 6;
}
if (scsi->regs[2] & 4) {
#endif
break;
case 8: // fake dma port
- raw_scsi_put_data(r, v, true);
+ if (r->bus_phase == (scsi->regs[3] & 7)) {
+ raw_scsi_put_data(r, v, true);
+ }
ncr5380_check_phase(scsi);
break;
}
return addr;
}
+static int trumpcardpro_reg(struct soft_scsi *ncr, uaecptr addr)
+{
+ if (addr & 1)
+ return -1;
+ if (addr & 0x8000)
+ return -1;
+ if ((addr & 0xe0) == 0x60)
+ return 8;
+ if ((addr & 0xe0) != 0x40)
+ return -1;
+ addr >>= 1;
+ addr &= 7;
+ return addr;
+}
static uae_u8 read_supra_dma(struct soft_scsi *ncr, uaecptr addr)
{
uae_u8 val = 0;
} else if (addr < 0x8000) {
v = ncr->rom[addr];
}
+
+ } else if (ncr->type == NCR5380_TRUMPCARDPRO) {
+
+ reg = trumpcardpro_reg(ncr, addr);
+ if (reg >= 0) {
+ v = ncr5380_bget(ncr, reg);
+ } else if (addr & 0x8000) {
+ v = ncr->rom[addr & 0x7fff];
+ } else if ((addr & 0xe0) == 0xc0) {
+ v = ncr->irq && ncr->intena ? 4 : 0;
+ }
+
}
+
#if NCR5380_DEBUG > 1
- if ((origaddr >= 0xf00000 && size == 1) || (origaddr < 0xf00000))
+ if (!(origaddr & 0x8000))
write_log(_T("GET %08x %02x %d %08x %d\n"), origaddr, v, reg, M68K_GETPC, regs.intmask);
#endif
ncr5380_bput(ncr, reg, val);
}
+ } else if (ncr->type == NCR5380_TRUMPCARDPRO) {
+
+ reg = trumpcardpro_reg(ncr, addr);
+ if (reg >= 0) {
+ ncr5380_bput(ncr, reg, val);
+ }
}
#if NCR5380_DEBUG > 1
- write_log(_T("PUT %08x %02x %d %08x %d\n"), origddr, val, reg, M68K_GETPC, regs.intmask);
+ if (1)
+ write_log(_T("PUT %08x %02x %d %08x %d\n"), origddr, val, reg, M68K_GETPC, regs.intmask);
#endif
}
generic_soft_scsi_add(ch, ci, rc, NCR5380_ADSCSI, 65536, 65536, ROMTYPE_ADSCSI);
}
+addrbank *trumpcardpro_init(struct romconfig *rc)
+{
+ struct soft_scsi *scsi = getscsi(rc);
+
+ if (!scsi)
+ return &expamem_null;
+
+ scsi->intena = true;
+
+ load_rom_rc(rc, ROMTYPE_IVSTPRO, 16384, 0, scsi->rom, 32768, LOADROM_EVENONLY_ODDONE | LOADROM_FILL);
+
+ const struct expansionromtype *ert = get_device_expansion_rom(ROMTYPE_IVSTPRO);
+ for (int i = 0; i < 16; i++) {
+ uae_u8 b = ert->autoconfig[i];
+ ew(scsi, i * 4, b);
+ }
+
+ return scsi->bank;
+}
+
+void trumpcardpro_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc)
+{
+ generic_soft_scsi_add(ch, ci, rc, NCR5380_TRUMPCARDPRO, 65536, 32768, NCR5380_TRUMPCARDPRO);
+}
+
bool rochard_scsi_init(struct romconfig *rc, uaecptr baseaddress)
{
struct soft_scsi *scsi = getscsi(rc);