jensen: minor update (nw)

* reworked srom to use new xc1765e device
* added another flash dump and noted sources
This commit is contained in:
Patrick Mackinlay 2019-02-20 14:26:38 +07:00
parent 0bbb3c5489
commit e17ff486db
2 changed files with 47 additions and 26 deletions

View File

@ -41,21 +41,15 @@ void jensen_state::machine_reset()
unpack_srom(); unpack_srom();
} }
u8 jensen_state::get_srom_byte(unsigned const start_bit) u32 jensen_state::get_srom(unsigned const bits)
{ {
unsigned const byte_offset = start_bit >> 3; u32 data = 0;
// check if byte-aligned for (unsigned i = 0; i < bits; i++)
if (start_bit & 7) if (m_srom->data_r())
{ data |= (1U << i);
unsigned const shift = start_bit & 7;
return return data;
(m_srom->as_u8(byte_offset + 0) >> shift) |
(m_srom->as_u8(byte_offset + 1) << (8 - shift));
}
else
return m_srom->as_u8(byte_offset);
} }
void jensen_state::unpack_srom() void jensen_state::unpack_srom()
@ -66,23 +60,40 @@ void jensen_state::unpack_srom()
* with the data being written into the primary instruction cache. * with the data being written into the primary instruction cache.
*/ */
// the bit offsets to each instruction
unsigned const lw_bit_offset[] = { 0, 157, 32, 189, 64, 221, 96, 253 };
unsigned ram_offset = 0; unsigned ram_offset = 0;
u32 lw_data[8];
m_srom->reset();
// there are up to 256 blocks of 293 bits each // there are up to 256 blocks of 293 bits each
for (unsigned block = 0; block < 256; block++) for (unsigned block = 0; block < 256; block++)
{ {
// each block contains 8 instruction longwords // lw0 lw2 lw4 lw6
for (unsigned lw = 0; lw < 8; lw++) lw_data[0] = get_srom(32);
{ lw_data[2] = get_srom(32);
unsigned const srom_offset = block * 293 + lw_bit_offset[lw]; lw_data[4] = get_srom(32);
lw_data[6] = get_srom(32);
m_ram->write(BYTE4_XOR_LE(ram_offset + 0), get_srom_byte(srom_offset + 0)); get_srom(21); // tag
m_ram->write(BYTE4_XOR_LE(ram_offset + 1), get_srom_byte(srom_offset + 8)); get_srom(6); // asn
m_ram->write(BYTE4_XOR_LE(ram_offset + 2), get_srom_byte(srom_offset + 16)); get_srom(1); // asm
m_ram->write(BYTE4_XOR_LE(ram_offset + 3), get_srom_byte(srom_offset + 24)); get_srom(1); // v
// lw1 lw3 lw5 lw7
lw_data[1] = get_srom(32);
lw_data[3] = get_srom(32);
lw_data[5] = get_srom(32);
lw_data[7] = get_srom(32);
get_srom(8); // bht
// copy each instruction longword to ram
for (u32 const lw : lw_data)
{
m_ram->write(BYTE4_XOR_LE(ram_offset + 0), lw >> 0);
m_ram->write(BYTE4_XOR_LE(ram_offset + 1), lw >> 8);
m_ram->write(BYTE4_XOR_LE(ram_offset + 2), lw >> 16);
m_ram->write(BYTE4_XOR_LE(ram_offset + 3), lw >> 24);
ram_offset += 4; ram_offset += 4;
} }
@ -159,6 +170,8 @@ void jensen_state::jensen(machine_config &config)
m_ram->set_extra_options("32M,64M,80M,128M"); m_ram->set_extra_options("32M,64M,80M,128M");
m_ram->set_default_value(0); m_ram->set_default_value(0);
XC1765E(config, m_srom);
// TODO: 1x1M + 1x256K flash? // TODO: 1x1M + 1x256K flash?
INTEL_E28F008SA(config, m_feprom[0]); INTEL_E28F008SA(config, m_feprom[0]);
INTEL_E28F008SA(config, m_feprom[1]); INTEL_E28F008SA(config, m_feprom[1]);
@ -216,7 +229,7 @@ void jensen_state::jensen(machine_config &config)
// 30-40385-01 Compaq QVision 1024/E (1MB VGA) // 30-40385-01 Compaq QVision 1024/E (1MB VGA)
// Optional // Optional
// DE422-SA DEC EtherWORKS EISA board (10 Mbps TP and BNC connectors) // DE422-SA Digital EISA Ethernet Controller (10 Mbps TP and BNC connectors)
} }
void jensen_state::d2k300axp(machine_config &config) void jensen_state::d2k300axp(machine_config &config)
@ -271,11 +284,18 @@ ROM_START(dpcaxp150)
* sizes and content. * sizes and content.
*/ */
ROM_REGION32_LE(0x100000, "feprom1", 0) ROM_REGION32_LE(0x100000, "feprom1", 0)
// source: dumped from physical board
ROM_SYSTEM_BIOS(0, "v19", "Version 1.9, 22-JUN-1995") ROM_SYSTEM_BIOS(0, "v19", "Version 1.9, 22-JUN-1995")
ROMX_LOAD("001z5__bl07.v19", 0x00000, 0x100000, CRC(26da3478) SHA1(baa7c92b01244aad84420268a06d04c6e2a30754), ROM_BIOS(0)) ROMX_LOAD("001z5__bl07.v19", 0x00000, 0x100000, CRC(26da3478) SHA1(baa7c92b01244aad84420268a06d04c6e2a30754), ROM_BIOS(0))
// source: extracted from ftp://ftp.hp.com/pub/alphaserver/firmware/retired_platforms/alphapc/dec2000_axp150/
ROM_SYSTEM_BIOS(1, "v22", "Version 2.2, 12-FEB-1996") ROM_SYSTEM_BIOS(1, "v22", "Version 2.2, 12-FEB-1996")
ROMX_LOAD("001z5__bl07.v22", 0x00000, 0x100000, CRC(1edb9c98) SHA1(a45f0dde236e189a57afc1ed354201180ab2f234), ROM_BIOS(1)) ROMX_LOAD("001z5__bl07.v22", 0x00000, 0x100000, CRC(1edb9c98) SHA1(a45f0dde236e189a57afc1ed354201180ab2f234), ROM_BIOS(1))
// source: extracted from https://archive.org/details/decpcaxp
ROM_SYSTEM_BIOS(2, "v13", "Version 1.3, 10-JUN-1994")
ROMX_LOAD("001z5__bl07.v13", 0x00000, 0x100000, CRC(8035f370) SHA1(2ebd75267ab7373d344efe44e700645ed31b44cd), ROM_BIOS(2))
ROM_END ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */

View File

@ -10,6 +10,7 @@
// memory // memory
#include "machine/ram.h" #include "machine/ram.h"
#include "machine/xc1700e.h"
#include "machine/intelfsh.h" #include "machine/intelfsh.h"
// various hardware // various hardware
@ -48,7 +49,7 @@ protected:
virtual void machine_reset() override; virtual void machine_reset() override;
void unpack_srom(); void unpack_srom();
u8 get_srom_byte(unsigned const start_bit); u32 get_srom(unsigned const bits);
// address maps // address maps
void local_memory(address_map &map); void local_memory(address_map &map);
@ -60,7 +61,7 @@ private:
// devices // devices
required_device<alpha_device> m_cpu; required_device<alpha_device> m_cpu;
required_device<ram_device> m_ram; required_device<ram_device> m_ram;
required_memory_region m_srom; required_device<xc1765e_device> m_srom;
required_device_array<intel_e28f008sa_device, 2> m_feprom; required_device_array<intel_e28f008sa_device, 2> m_feprom;
required_device<i82357_device> m_isp; required_device<i82357_device> m_isp;