NULL, 0,
false, EXPANSIONTYPE_CUSTOM | EXPANSIONTYPE_SCSI
},
+ {
+ _T("alf2"), _T("A.L.F.2"), _T("Elaborate Bytes"),
+ NULL, alf2_init, NULL, alf2_add_scsi_unit, ROMTYPE_ALF2, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true,
+ NULL, 0,
+ false, EXPANSIONTYPE_CUSTOM | EXPANSIONTYPE_SCSI
+ },
{
_T("alf3"), _T("A.L.F.3"), _T("Elaborate Bytes"),
NULL, ncr_alf3_autoconfig_init, NULL, alf3_add_scsi_unit, ROMTYPE_ALF3 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false,
#define ROMTYPE_SSQUIRREL 0x00100082
#define ROMTYPE_MASTERCARD 0x00100083
#define ROMTYPE_DOTTO 0x00100084
+#define ROMTYPE_ALF2 0x00100085
#define ROMTYPE_NOT 0x00800000
#define ROMTYPE_QUAD 0x01000000
bool alf1_init(struct autoconfig_info *aci);
void alf1_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc);
+bool alf2_init(struct autoconfig_info *aci);
+void alf2_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc);
+
bool promigos_init(struct autoconfig_info *aci);
void promigos_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc);
return NULL;
}
-#define NEXT_ROM_ID 264
+#define NEXT_ROM_ID 265
#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 },
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("A.L.F. 2"), 0, 0, 0, 0, _T("ALF2\0"), 65536, 264, 0, 0, ROMTYPE_ALF2, 0, 0, NULL,
+ 0x9cf8a7b7, 0x3df4667c,0xd3436367,0x7896da65,0x94994769,0x13bc6746, 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") },
#define NCR5380_12GAUGE 41
#define NCR5380_OVERDRIVE 42
#define NCR5380_TRUMPCARD 43
-#define NCR_LAST 44
+#define OMTI_ALF2 44
+#define NCR_LAST 45
extern int log_scsiemu;
return addr;
}
+static int alf2_reg(struct soft_scsi *ncr, uaecptr addr, bool write)
+{
+ if (!(addr & 0x10000))
+ return -1;
+ addr &= 0xffff;
+ if ((addr & 0x7ff9) != 0x0641)
+ return -2;
+ addr >>= 1;
+ addr &= 3;
+ return addr;
+}
+
static int wedge_reg(struct soft_scsi *ncr, uaecptr addr, int size, bool write)
{
if (size != 1)
if (reg >= 0)
v = omti_bget(ncr, reg);
+ } else if (ncr->type == OMTI_ALF2) {
+
+ reg = alf2_reg(ncr, origaddr, false);
+ if (reg >= 0) {
+ v = omti_bget(ncr, reg);
+ } else if (reg == -1) {
+ v = ncr->rom[addr & 32767];
+ }
+
} else if (ncr->type == OMTI_PROMIGOS) {
reg = promigos_reg(ncr, addr, size, false);
if (reg >= 0)
omti_bput(ncr, reg, val);
+ } else if (ncr->type == OMTI_ALF2) {
+
+ reg = alf2_reg(ncr, origaddr, true);
+ if (reg >= 0)
+ omti_bput(ncr, reg, val);
+
} else if (ncr->type == OMTI_PROMIGOS) {
reg = promigos_reg(ncr, addr, size, true);
{
bool iaa = isautoconfigaddr(addr);
uae_u32 v;
- addr &= ncr->board_mask;
if (!ncr->configured && iaa) {
addr &= 65535;
if (addr >= sizeof ncr->acmemory)
{
bool iaa = isautoconfigaddr(addr);
b &= 0xff;
- addr &= ncr->board_mask;
if (!ncr->configured && iaa) {
addr &= 65535;
switch (addr)
generic_soft_scsi_add(ch, ci, rc, OMTI_ALF1, 65536, 0, ROMTYPE_ALF1);
}
+bool alf2_init(struct autoconfig_info *aci)
+{
+ aci->start = 0xef0000;
+ aci->size = 0x20000;
+ scsi_add_reset();
+ if (!aci->doinit)
+ return true;
+
+ struct soft_scsi *scsi = getscsi(aci->rc);
+ if (!scsi)
+ return false;
+
+ load_rom_rc(aci->rc, ROMTYPE_ALF2, 32768, 32768, scsi->rom, 32768, 0);
+
+ scsi->baseaddress = 0xf00000;
+ scsi->baseaddress2 = 0xef0000;
+ scsi->board_mask = 65535;
+
+ map_banks(scsi->bank, scsi->baseaddress >> 16, 1, 0);
+ map_banks(scsi->bank, scsi->baseaddress2 >> 16, 1, 0);
+
+ scsi->configured = 1;
+ aci->addrbank = scsi->bank;
+ return true;
+}
+
+void alf2_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc)
+{
+ generic_soft_scsi_add(ch, ci, rc, OMTI_ALF2, 65536, 32768, ROMTYPE_ALF2);
+}
+
bool promigos_init(struct autoconfig_info *aci)
{
aci->start = 0xf40000;