#include "devices.h"
#define BOARD_SIZE 16777216
-#define IO_MASK 0x7f
#define A4091_ROM_VECTOR 0x0200
#define A4091_ROM_OFFSET 0x0000
-#define A4091_ROM_SIZE 32768
-#define A4091_ROM_MASK (A4091_ROM_SIZE - 1)
+#define A4091_ROM_SIZE 65536
#define A4091_IO_OFFSET 0x00800000
#define A4091_IO_ALT 0x00840000
int configured;
bool enabled;
int rom_start, rom_end, rom_offset;
- int io_start, io_end;
+ int io_start, io_end, io_mask;
uae_u8 state[8];
addrbank *bank;
bool irq;
cyberstorm_scsi_ram_put(addr, val);
return;
}
- addr &= IO_MASK;
+ addr &= ncr->io_mask;
lsi_mmio_write(ncr->devobject.lsistate, beswap(addr), val, 1);
}
static void ncr710_io_bput(struct ncr_state *ncr, uaecptr addr, uae_u32 val)
{
- addr &= IO_MASK;
+ addr &= ncr->io_mask;
lsi710_mmio_write(ncr->devobject.lsistate, beswap(addr), val, 1);
}
void cpuboard_ncr720_io_bput(uaecptr addr, uae_u32 v)
{
struct ncr_state *ncr = ncr_cpuboard;
- addr &= IO_MASK;
+ addr &= ncr->io_mask;
lsi_mmio_write(ncr->devobject.lsistate, beswap(addr), v, 1);
}
{
if (addr >= CYBERSTORM_SCSI_RAM_OFFSET && ncr->ramsize)
return cyberstorm_scsi_ram_get(addr);
- addr &= IO_MASK;
+ addr &= ncr->io_mask;
return (uae_u32)lsi_mmio_read(ncr->devobject.lsistate, beswap(addr), 1);
}
static uae_u32 ncr710_io_bget(struct ncr_state *ncr, uaecptr addr)
{
- addr &= IO_MASK;
+ addr &= ncr->io_mask;
return (uae_u32)lsi710_mmio_read(ncr->devobject.lsistate, beswap(addr), 1);
}
uae_u32 cpuboard_ncr720_io_bget(uaecptr addr)
{
struct ncr_state *ncr = ncr_cpuboard;
- addr &= IO_MASK;
+ addr &= ncr->io_mask;
return (uae_u32)lsi_mmio_read(ncr->devobject.lsistate, beswap(addr), 1);
}
ncr->rom_end = WARP_ENGINE_ROM_SIZE * 4;
ncr->io_start = WARP_ENGINE_IO_OFFSET;
ncr->io_end = WARP_ENGINE_IO_END;
+ ncr->io_mask = 0x7f;
for (int i = 0; i < 16; i++) {
uae_u8 b = warpengine_a4000_autoconfig[i];
if (z) {
rom = xcalloc(uae_u8, A4091_ROM_SIZE * 4);
for (int i = 0; i < A4091_ROM_SIZE; i++) {
- uae_u8 b;
- zfile_fread(&b, 1, 1, z);
+ uae_u8 b = 0xff;
+ if (zfile_fread(&b, 1, 1, z) == 0) {
+ if (i == 32768) {
+ zfile_fseek(z, 0, SEEK_SET);
+ zfile_fread(&b, 1, 1, z);
+ }
+ }
rom[i * 4 + 0] = b | 0x0f;
rom[i * 4 + 1] = 0xff;
rom[i * 4 + 2] = (b << 4) | 0x0f;
ncr->rom_end = A4091_IO_OFFSET;
ncr->io_start = A4091_IO_OFFSET;
ncr->io_end = A4091_IO_END;
+ ncr->io_mask = 0x3f;
ncr_reset_board(ncr);
ncr->rom_end = 0x10000;
ncr->io_start = 0x4000;
ncr->io_end = 0x8000;
+ ncr->io_mask = 0x7f;
for (int i = 0; i < 16; i++) {
uae_u8 b = zeus040_autoconfig[i];
ncr->rom_end = 0x8000;
ncr->io_start = 0x8000;
ncr->io_end = 0x9000;
-
+ ncr->io_mask = 0x7f;
ncr->rom = xcalloc(uae_u8, 32768);
load_rom_rc(aci->rc, ROMTYPE_CB_MAGNUM40, 65536, 0, ncr->rom, 32768, 0);