From: Toni Wilen Date: Sat, 30 Jun 2018 18:33:05 +0000 (+0300) Subject: QuikPak XP X-Git-Tag: 4010~37 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=00893e1019b2559ec32c78d4aeef38568bbf1255;p=francis%2Fwinuae.git QuikPak XP --- diff --git a/cpuboard.cpp b/cpuboard.cpp index f4e1843c..49cfc974 100644 --- a/cpuboard.cpp +++ b/cpuboard.cpp @@ -7,6 +7,8 @@ * TekMagic * Warp Engine * +* And more. +* * Copyright 2014 Toni Wilen * */ @@ -349,6 +351,10 @@ static bool is_a1230s2(struct uae_prefs *p) { return ISCPUBOARDP(p, BOARD_GVP, BOARD_GVP_SUB_A1230SII); } +static bool is_quikpak(struct uae_prefs *p) +{ + return ISCPUBOARDP(p, BOARD_GVP, BOARD_GVP_SUB_QUIKPAK); +} static bool is_aca500(struct uae_prefs *p) { @@ -766,6 +772,9 @@ static uae_u32 REGPARAM2 blizzardea_bget(uaecptr addr) if (is_tekmagic(&currprefs)) { cpuboard_non_byte_ea = true; v = cpuboard_ncr710_io_bget(addr); + } else if (is_quikpak(&currprefs)) { + cpuboard_non_byte_ea = true; + v = cpuboard_ncr720_io_bget(addr); } else if (is_blizzard2060(&currprefs) && addr >= BLIZZARD_2060_SCSI_OFFSET) { v = cpuboard_ncr9x_scsi_get(addr); } else if (is_blizzard1230mk2(&currprefs) && addr >= 0x10000 && (currprefs.cpuboard_settings & 2)) { @@ -846,6 +855,9 @@ static void REGPARAM2 blizzardea_bput(uaecptr addr, uae_u32 b) if (is_tekmagic(&currprefs)) { cpuboard_non_byte_ea = true; cpuboard_ncr710_io_bput(addr, b); + } else if (is_quikpak(&currprefs)) { + cpuboard_non_byte_ea = true; + cpuboard_ncr720_io_bput(addr, b); } else if (is_blizzard1230mk2(&currprefs) && addr >= 0x10000 && (currprefs.cpuboard_settings & 2)) { cpuboard_ncr9x_scsi_put(addr, b); } else if (is_blizzard2060(&currprefs) && addr >= BLIZZARD_2060_SCSI_OFFSET) { @@ -1601,7 +1613,7 @@ void cpuboard_map(void) map_banks(&dummy_bank, 0xf00000 >> 16, 0x80000 >> 16, 0); } } - if (is_tekmagic(&currprefs)) { + if (is_tekmagic(&currprefs) || is_quikpak(&currprefs)) { map_banks(&blizzardf0_bank, 0xf00000 >> 16, 131072 >> 16, 0); map_banks(&blizzardea_bank, 0xf40000 >> 16, 65536 >> 16, 0); } @@ -1878,7 +1890,7 @@ static void cpuboard_init_2(void) blizzardram_bank.label = _T("fusionforty"); mapped_malloc(&blizzardram_bank); - } else if (is_tekmagic(&currprefs)) { + } else if (is_tekmagic(&currprefs) || is_quikpak(&currprefs)) { blizzardf0_bank.start = 0x00f00000; blizzardf0_bank.reserved_size = 131072; @@ -2444,7 +2456,10 @@ bool cpuboard_autoconfig_init(struct autoconfig_info *aci) return true; case BOARD_GVP_SUB_TEKMAGIC: romtype = ROMTYPE_CB_TEKMAGIC; - break; + break; + case BOARD_GVP_SUB_QUIKPAK: + romtype = romtype = ROMTYPE_CB_QUIKPAK; + break; } break; @@ -2666,6 +2681,14 @@ bool cpuboard_autoconfig_init(struct autoconfig_info *aci) cpuboard_non_byte_ea = false; aci->start = 0xf00000; aci->size = f0rom_size; + } else if (is_quikpak(p)) { + earom_size = 65536; + f0rom_size = 131072; + zfile_fread(blizzardf0_bank.baseaddr, 1, f0rom_size, autoconfig_rom); + autoconf = false; + cpuboard_non_byte_ea = false; + aci->start = 0xf00000; + aci->size = f0rom_size; } else if (is_blizzard2060(p)) { f0rom_size = 65536; earom_size = 131072; diff --git a/expansion.cpp b/expansion.cpp index 036e86f2..2dca8bf2 100644 --- a/expansion.cpp +++ b/expansion.cpp @@ -5625,6 +5625,14 @@ static const struct cpuboardsubtype gvpboard_sub[] = { gvpa1230s2_settings, NULL, 2017, 9, 0, false }, + { + _T("QuikPak XP"), + _T("quikpakxp"), + ROMTYPE_CB_QUIKPAK, 0, + quikpak_add_scsi_unit, EXPANSIONTYPE_SCSI, + BOARD_MEMORY_HIGHMEM, + 64 * 1024 * 1024, + }, { NULL } diff --git a/include/cpuboard.h b/include/cpuboard.h index b004dc9a..061d126e 100644 --- a/include/cpuboard.h +++ b/include/cpuboard.h @@ -69,6 +69,7 @@ void blizzardppc_irq_setonly(int id, int level); #define BOARD_GVP_SUB_GFORCE030 3 #define BOARD_GVP_SUB_TEKMAGIC 4 #define BOARD_GVP_SUB_A1230SII 5 +#define BOARD_GVP_SUB_QUIKPAK 6 #define BOARD_KUPKE 6 diff --git a/include/ncr_scsi.h b/include/ncr_scsi.h index b730238f..86918445 100644 --- a/include/ncr_scsi.h +++ b/include/ncr_scsi.h @@ -26,6 +26,8 @@ extern bool ncr710_magnum40_autoconfig_init(struct autoconfig_info *aci); void cpuboard_ncr710_io_bput(uaecptr addr, uae_u32 v); uae_u32 cpuboard_ncr710_io_bget(uaecptr addr); +void cpuboard_ncr720_io_bput(uaecptr addr, uae_u32 v); +uae_u32 cpuboard_ncr720_io_bget(uaecptr addr); extern void a4000t_add_scsi_unit (int ch, struct uaedev_config_info *ci, struct romconfig *rc); extern bool is_a4000t_scsi(void); @@ -33,6 +35,7 @@ extern bool a4000t_scsi_init(struct autoconfig_info *aci); extern void warpengine_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc); extern void tekmagic_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc); +extern void quikpak_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc); extern void cyberstorm_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc); extern void blizzardppc_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc); extern void a4091_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc); diff --git a/include/rommgr.h b/include/rommgr.h index 6c7db2ba..60782a6c 100644 --- a/include/rommgr.h +++ b/include/rommgr.h @@ -48,6 +48,7 @@ extern int decode_cloanto_rom_do (uae_u8 *mem, int size, int real_size); #define ROMTYPE_CB_FALCON40 0x0004001b #define ROMTYPE_CB_A1230S2 0x0004001c #define ROMTYPE_CB_TYPHOON2 0x0004001d +#define ROMTYPE_CB_QUIKPAK 0x0004001e #define ROMTYPE_FREEZER 0x00080000 #define ROMTYPE_AR 0x00080001 diff --git a/ncr_scsi.cpp b/ncr_scsi.cpp index 5b021c00..5457786c 100644 --- a/ncr_scsi.cpp +++ b/ncr_scsi.cpp @@ -11,7 +11,7 @@ #ifdef NCR -#define NCR_DEBUG 1 +#define NCR_DEBUG 10 #include "options.h" #include "uae.h" @@ -195,6 +195,8 @@ void ncr_rethink(void) void pci_set_irq(PCIDevice *pci_dev, int level) { struct ncr_state *ncr = (struct ncr_state*)pci_dev; + if (!ncr) + return; ncr->irq = level != 0; ncr->irq_func(ncr->id, ncr->irq); } @@ -289,6 +291,8 @@ int pci_dma_rw(PCIDevice *dev, dma_addr_t addr, void *buf, dma_addr_t len, DMADi void pci710_set_irq(PCIDevice *pci_dev, int level) { struct ncr_state *ncr = (struct ncr_state*)pci_dev; + if (!ncr) + return; ncr->irq = level != 0; ncr->irq_func(ncr->id, ncr->irq); } @@ -443,6 +447,13 @@ void cpuboard_ncr710_io_bput(uaecptr addr, uae_u32 v) ncr710_io_bput(ncr_cpuboard, addr, v); } +void cpuboard_ncr720_io_bput(uaecptr addr, uae_u32 v) +{ + struct ncr_state *ncr = ncr_cpuboard; + addr &= IO_MASK; + lsi_mmio_write(ncr->devobject.lsistate, beswap(addr), v, 1); +} + static void ncr_bput2 (struct ncr_state *ncr, uaecptr addr, uae_u32 val) { uae_u32 v = val; @@ -513,6 +524,13 @@ uae_u32 cpuboard_ncr710_io_bget(uaecptr addr) return ncr710_io_bget(ncr_cpuboard, addr); } +uae_u32 cpuboard_ncr720_io_bget(uaecptr addr) +{ + struct ncr_state *ncr = ncr_cpuboard; + addr &= IO_MASK; + return lsi_mmio_read(ncr_cpuboard, beswap(addr), 1); +} + static bool isncrboard(struct ncr_state *ncr, struct ncr_state **ncrb) { return ncr == ncrb[0] || ncr == ncrb[1] || ncr == ncrb[2] || ncr == ncrb[3]; @@ -1137,6 +1155,12 @@ void tekmagic_add_scsi_unit (int ch, struct uaedev_config_info *ci, struct romco ncr_add_scsi_unit(&ncr_cpuboard, ch, ci, rc, false); } +void quikpak_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc) +{ + ncr_add_scsi_unit(&ncr_cpuboard, ch, ci, rc, true); +} + + void a4091_add_scsi_unit (int ch, struct uaedev_config_info *ci, struct romconfig *rc) { ncr_add_scsi_unit(&ncra4091[ci->controller_type_unit], ch, ci, rc, false); diff --git a/rommgr.cpp b/rommgr.cpp index 3c2ba70a..dcc56eb3 100644 --- a/rommgr.cpp +++ b/rommgr.cpp @@ -463,6 +463,8 @@ static struct romdata roms[] = { 0x3befa0c0, 0x4414673c, 0xa52f78a0, 0xae656824, 0xfd08b54f, 0xa1de237c, NULL, NULL }, ALTROMPN(166, 1, 1, 32768, ROMTYPE_ODD | ROMTYPE_8BIT, NULL, 0xb64e3bbf, 0xd6f4fc81, 0x38325a78, 0x74ff1c15, 0x7c93f1a2, 0x444904ae) ALTROMPN(166, 1, 2, 32768, ROMTYPE_EVEN | ROMTYPE_8BIT, NULL, 0x541b5988, 0x3546517b, 0x57cecd2f, 0x9fbfcd0c, 0xf26fdbbf, 0xfb009e3e) + { _T("QuikPak 4060 XP"), 2, 1, 2, 1, _T("QUIKPAK\0"), 32768, 239, 0, 0, ROMTYPE_CB_QUIKPAK, 0, 0, NULL, + 0x3a8eb518, 0x902dd0ba, 0x56c2afd0, 0xbb425bf5, 0x264fbc62, 0x90ad2c4e, NULL, NULL }, { _T("Preferred Technologies Nexus"), 1, 0, 1, 0, _T("PTNEXUS\0"), 8192, 139, 0, 0, ROMTYPE_PTNEXUS, 0, 0, NULL, 0xf495879a, 0xa3bd0202, 0xe14aa5b6, 0x49d3ce88, 0x22975950, 0x6500dbc2, NULL, NULL },