New clones marked as NOT_WORKING

--------------------------------
Husky Hunter [Nigel Barnes, Phill Harvey-Smith]

hunter2: Added appropriate RAM size options, and minor keyboard corrections. [Nigel Barnes]
This commit is contained in:
Nigel Barnes 2019-08-23 14:17:35 +01:00
parent 83e181a921
commit 1fb9976d81
2 changed files with 162 additions and 101 deletions

View File

@ -2,15 +2,22 @@
// copyright-holders:Robbbert,Barry Rodewald
/***************************************************************************
Skeleton driver for Husky Hunter 2
2014-03-06 Skeleton [Robbbert]
2014-03-07 Fixed screen [Barry Rodewald]
2014-03-07 Added more stuff [Robbbert]
Husky Hunter, Hunter 2
http://www.seasip.info/VintagePC/husky2.html
No schematics or manuals available.
The main hardware difference between the original Hunter and Hunter 2 is
the LCD panel, in the Hunter 2 it is physically larger. It is also driven
differently. The Hunter sets up the HD61830 number of time divisions to
be 32 and uses both address counters RAC1/RAC2, whereas the Hunter 2 sets
number of time divisions to 64 and only uses RAC1 to address the upper half
of the screen.
Early models would use all 6 ROM sockets to provide 48K ROM (6 x 2764),
whereas later models would populate 2 sockets with 2 x 32K ROM (TC57256),
though only 48K of this is ever paged in.
Usage:
The RAMdisk must first be formatted using 'format'.
TODO:
- Add ports 83 and 85
@ -23,9 +30,9 @@
#include "emu.h"
#include "bus/rs232/rs232.h"
#include "cpu/z80/z80.h"
#include "machine/bankdev.h"
#include "machine/mm58274c.h"
#include "machine/nsc810.h"
#include "machine/ram.h"
#include "machine/nvram.h"
#include "sound/spkrdev.h"
#include "video/hd61830.h"
@ -41,16 +48,19 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_speaker(*this, "speaker")
, m_kbd(*this, "X%u", 0)
, m_rs232(*this, "serial")
, m_rom(*this, "roms")
, m_ram(*this, "rams")
, m_rom(*this, "rom")
, m_ram(*this, RAM_TAG)
, m_nvram(*this, "nvram")
, m_bank1(*this, "bank1")
, m_bank2(*this, "bank2")
, m_bank3(*this, "bank3")
, m_battery(*this, "BATTERY")
{ }
void hunter2(machine_config &config);
void hunter(machine_config &config);
void init_hunter2();
@ -59,11 +69,10 @@ protected:
private:
DECLARE_READ8_MEMBER(keyboard_r);
DECLARE_READ8_MEMBER(serial_dsr_r);
DECLARE_READ8_MEMBER(portb_r);
DECLARE_WRITE8_MEMBER(keyboard_w);
DECLARE_READ8_MEMBER(serial_rx_r);
DECLARE_READ8_MEMBER(portc_r);
DECLARE_WRITE8_MEMBER(display_ctrl_w);
DECLARE_WRITE8_MEMBER(port80_w);
DECLARE_WRITE8_MEMBER(serial_tx_w);
DECLARE_WRITE8_MEMBER(serial_dtr_w);
DECLARE_WRITE8_MEMBER(serial_rts_w);
@ -77,7 +86,6 @@ private:
DECLARE_WRITE_LINE_MEMBER(cts_w);
DECLARE_WRITE_LINE_MEMBER(rxd_w);
void hunter2_banked_mem(address_map &map);
void hunter2_io(address_map &map);
void hunter2_mem(address_map &map);
@ -85,29 +93,22 @@ private:
uint8_t m_irq_mask;
required_device<cpu_device> m_maincpu;
required_device<speaker_sound_device> m_speaker;
required_ioport_array<7> m_kbd;
required_device<rs232_port_device> m_rs232;
required_memory_region m_rom;
required_memory_region m_ram;
required_device<ram_device> m_ram;
required_device<nvram_device> m_nvram;
required_device<address_map_bank_device> m_bank1;
required_device<address_map_bank_device> m_bank2;
required_device<address_map_bank_device> m_bank3;
required_memory_bank m_bank1;
required_memory_bank m_bank2;
required_memory_bank m_bank3;
required_ioport m_battery;
};
void hunter2_state::hunter2_banked_mem(address_map &map)
{
map(0x00000, 0x2ffff).rom().region("roms", 0x0000);
map(0x30000, 0x3ffff).noprw();
map(0x40000, 0xfffff).ram().region("rams", 0x0000);
}
void hunter2_state::hunter2_mem(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x3fff).rw(m_bank1, FUNC(address_map_bank_device::read8), FUNC(address_map_bank_device::write8));
map(0x4000, 0x7fff).rw(m_bank2, FUNC(address_map_bank_device::read8), FUNC(address_map_bank_device::write8));
map(0x8000, 0xbfff).rw(m_bank3, FUNC(address_map_bank_device::read8), FUNC(address_map_bank_device::write8));
map(0xc000, 0xffff).ram();
map(0x0000, 0x7fff).bankr("bank1");
map(0x8000, 0xbfff).bankr("bank2");
map(0xc000, 0xffff).bankrw("bank3");
}
void hunter2_state::hunter2_io(address_map &map)
@ -118,13 +119,16 @@ void hunter2_state::hunter2_io(address_map &map)
map(0x20, 0x20).w("lcdc", FUNC(hd61830_device::data_w));
map(0x21, 0x21).rw("lcdc", FUNC(hd61830_device::status_r), FUNC(hd61830_device::control_w));
map(0x3e, 0x3e).r("lcdc", FUNC(hd61830_device::data_r));
map(0x40, 0x4f).rw("rtc", FUNC(mm58274c_device::read), FUNC(mm58274c_device::write));
map(0x60, 0x60).w(FUNC(hunter2_state::display_ctrl_w));
map(0x80, 0x80).w(FUNC(hunter2_state::port80_w));
map(0x81, 0x81).w(FUNC(hunter2_state::serial_tx_w));
map(0x82, 0x82).w(FUNC(hunter2_state::serial_dtr_w));
map(0x84, 0x84).w(FUNC(hunter2_state::serial_rts_w));
map(0x86, 0x86).w(FUNC(hunter2_state::speaker_w));
map(0x40, 0x4f).mirror(0x10).rw("rtc", FUNC(mm58274c_device::read), FUNC(mm58274c_device::write));
map(0x60, 0x60).mirror(0x1f).w(FUNC(hunter2_state::display_ctrl_w));
map(0x80, 0x80).mirror(0x18).noprw(); /* POWSAV - Power save control */
map(0x81, 0x81).mirror(0x18).w(FUNC(hunter2_state::serial_tx_w));
map(0x82, 0x82).mirror(0x18).w(FUNC(hunter2_state::serial_rts_w));
map(0x83, 0x83).mirror(0x18).noprw(); /* POWHLD - Power control */
map(0x84, 0x84).mirror(0x18).noprw(); /* INVCON - V24 inverter control */
map(0x85, 0x85).mirror(0x18).w(FUNC(hunter2_state::serial_dtr_w));
map(0x86, 0x86).mirror(0x18).w(FUNC(hunter2_state::speaker_w));
map(0x87, 0x87).mirror(0x18).noprw(); /* AUXPWR - Turns on the auxiliary power */
map(0xbb, 0xbb).w(FUNC(hunter2_state::irqctrl_w));
map(0xe0, 0xe0).w(FUNC(hunter2_state::memmap_w));
}
@ -143,7 +147,7 @@ static INPUT_PORTS_START( hunter2 )
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v')
PORT_START("X1")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&')
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('i')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('u')
@ -153,8 +157,8 @@ static INPUT_PORTS_START( hunter2 )
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n')
PORT_START("X2")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(')
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('p')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('o')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('l')
@ -179,7 +183,7 @@ static INPUT_PORTS_START( hunter2 )
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR(']')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('\"')
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('?') PORT_CHAR('/')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
PORT_START("X5")
@ -188,7 +192,7 @@ static INPUT_PORTS_START( hunter2 )
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('w')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('a')
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctl/Fn") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('z')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
@ -201,24 +205,27 @@ static INPUT_PORTS_START( hunter2 )
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHAR('s')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('c')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x')
PORT_START("BATTERY")
PORT_CONFNAME(0x04, 0x00, "Battery")
PORT_CONFSETTING(0x00, "OK")
PORT_CONFSETTING(0x04, "Low")
INPUT_PORTS_END
READ8_MEMBER( hunter2_state::keyboard_r )
{
uint8_t i,data = 0xff;
for (i = 0; i < 7; i++)
uint8_t data = 0xff;
for (int i = 0; i < 7; i++)
{
if (!BIT(m_keydata, i))
{
char kbdrow[6];
sprintf(kbdrow,"X%d", i);
data &= ioport(kbdrow)->read();
data &= m_kbd[i]->read();
}
}
return data;
}
READ8_MEMBER( hunter2_state::serial_dsr_r )
READ8_MEMBER( hunter2_state::portb_r )
{
uint8_t res = 0x00;
@ -231,10 +238,16 @@ READ8_MEMBER( hunter2_state::serial_dsr_r )
WRITE8_MEMBER( hunter2_state::keyboard_w )
{
m_keydata = data;
//logerror("Key row select %02x\n",data);
}
READ8_MEMBER( hunter2_state::serial_rx_r )
/*
INPUTS - This port has a number of input functions:
Bit 0 = Data in (inverted from RS-232 line)
Bit 1 = DCD (inverted from RS-232 line)
Bit 2 = Power low warning (0 = Power OK, 1 = Power low)
Bit 3 = TXCLK (inverted from RS-232 line)
*/
READ8_MEMBER( hunter2_state::portc_r )
{
uint8_t res = 0x28;
@ -242,10 +255,14 @@ READ8_MEMBER( hunter2_state::serial_rx_r )
res |= 0x01;
if(m_rs232->dcd_r())
res |= 0x02;
res |= m_battery->read();
return res;
}
/*
ANGLE - Controls display viewing angle. Input value in the range 0-0x1F.
*/
WRITE8_MEMBER( hunter2_state::display_ctrl_w )
{
/* according to the website,
@ -255,26 +272,29 @@ Bits 1,0,7,6: Contrast level.
*/
}
WRITE8_MEMBER( hunter2_state::port80_w )
{
}
/*
V24OUT - Directly outputs to the V24 data line signal on bit 0.
The output is voltage inverted ie. 0 = +ve, 1 = -ve
*/
WRITE8_MEMBER( hunter2_state::serial_tx_w )
{
m_rs232->write_txd(data & 0x01);
// logerror("TXD write %02x\n",data);
}
/*
DTR output bit
*/
WRITE8_MEMBER( hunter2_state::serial_dtr_w )
{
m_rs232->write_dtr(data & 0x01);
// logerror("DTR write %02x\n",data);
}
/*
RTS output bit
*/
WRITE8_MEMBER( hunter2_state::serial_rts_w )
{
m_rs232->write_rts(data & 0x01);
// logerror("RTS write %02x\n",data);
}
WRITE8_MEMBER( hunter2_state::speaker_w )
@ -283,6 +303,7 @@ WRITE8_MEMBER( hunter2_state::speaker_w )
}
/*
ICRREG - NSC800 internal interrupt mask register
Bit 0 = Enable normal interrupts
Bit 1 = Enable RSTC interrupts
Bit 2 = Enable RSTB interrupts
@ -300,31 +321,41 @@ WRITE8_MEMBER( hunter2_state::irqctrl_w )
}
/*
data bank0 bank1 bank2
00 00 01 02
01 00 01 03
02 00 01 04
....
09 00 01 11
80 16 17 18
....
8F 61 62 63
PAGE - Memory paging register
*/
WRITE8_MEMBER( hunter2_state::memmap_w )
{
if (data < 0x0a)
address_space &prog_space = m_maincpu->space(AS_PROGRAM);
uint8_t bank = data & 0x0f;
switch (BIT(data, 7))
{
m_bank1->set_bank(0);
m_bank2->set_bank(1);
m_bank3->set_bank(2 + data);
}
else
if (data >= 0x80)
{
uint8_t bank = data & 0x0f;
m_bank1->set_bank(16 + (bank*3));
m_bank2->set_bank(17 + (bank*3));
m_bank3->set_bank(18 + (bank*3));
case 0: /* ROM */
prog_space.install_read_bank(0x0000, 0x7fff, m_bank1);
m_bank1->set_base(m_rom->base());
/* select ROM bank only if present */
if (m_rom->bytes() > (0x8000 + (0x4000 * bank)))
{
prog_space.install_read_bank(0x8000, 0xbfff, m_bank2);
m_bank2->set_base(m_rom->base() + (0x8000 + (0x4000 * bank)));
}
else
{
prog_space.unmap_readwrite(0x8000, 0xbfff);
}
break;
case 1: /* RAM */
/* select RAM bank only if present */
if (m_ram->size() > (0x4000 + (0xc000 * bank)))
{
prog_space.install_readwrite_bank(0x0000, 0xbfff, m_bank1);
m_bank1->set_base(m_ram->pointer() + (0x4000 + (0xc000 * bank)));
}
else
{
prog_space.unmap_readwrite(0x0000, 0xbfff);
}
break;
}
}
@ -332,17 +363,16 @@ void hunter2_state::machine_reset()
{
m_keydata = 0xff;
m_irq_mask = 0;
m_bank1->set_bank(0);
m_bank2->set_bank(1);
m_bank3->set_bank(2);
/* select ROM/RAM banks */
m_bank1->set_base(m_rom->base());
m_bank2->set_base(m_rom->base() + 0x4000);
m_bank3->set_base(m_ram->pointer());
}
// it is presumed that writing to rom will go nowhere
void hunter2_state::init_hunter2()
{
uint8_t *ram = m_ram->base();
m_nvram->set_base(ram,m_ram->bytes());
m_nvram->set_base(m_ram->pointer(), m_ram->size());
}
void hunter2_state::hunter2_palette(palette_device &palette) const
@ -381,7 +411,7 @@ WRITE_LINE_MEMBER(hunter2_state::rxd_w)
void hunter2_state::hunter2(machine_config &config)
{
/* basic machine hardware */
NSC800(config, m_maincpu, XTAL(4'000'000));
NSC800(config, m_maincpu, 8_MHz_XTAL / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &hunter2_state::hunter2_mem);
m_maincpu->set_addrmap(AS_IO, &hunter2_state::hunter2_io);
@ -402,16 +432,16 @@ void hunter2_state::hunter2(machine_config &config)
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50);
/* Devices */
mm58274c_device &rtc(MM58274C(config, "rtc", 0));
mm58274c_device &rtc(MM58274C(config, "rtc", 32.768_kHz_XTAL));
// this is all guess
rtc.set_mode24(0); // 12 hour
rtc.set_day1(1); // monday
nsc810_device &iotimer(NSC810(config, "iotimer", 0, XTAL(4'000'000), XTAL(4'000'000)));
nsc810_device &iotimer(NSC810(config, "iotimer", 0, 8_MHz_XTAL / 2, 8_MHz_XTAL / 2));
iotimer.portA_read_callback().set(FUNC(hunter2_state::keyboard_r));
iotimer.portB_read_callback().set(FUNC(hunter2_state::serial_dsr_r));
iotimer.portB_read_callback().set(FUNC(hunter2_state::portb_r));
iotimer.portB_write_callback().set(FUNC(hunter2_state::keyboard_w));
iotimer.portC_read_callback().set(FUNC(hunter2_state::serial_rx_r));
iotimer.portC_read_callback().set(FUNC(hunter2_state::portc_r));
iotimer.timer0_callback().set(FUNC(hunter2_state::timer0_out));
iotimer.timer1_callback().set(FUNC(hunter2_state::timer1_out));
@ -419,25 +449,55 @@ void hunter2_state::hunter2(machine_config &config)
m_rs232->cts_handler().set(FUNC(hunter2_state::cts_w));
m_rs232->rxd_handler().set(FUNC(hunter2_state::rxd_w));
/* internal ram */
RAM(config, m_ram).set_default_size("352K").set_extra_options("80K,144K,208K,496K").set_default_value(0xff);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
}
ADDRESS_MAP_BANK(config, "bank1").set_map(&hunter2_state::hunter2_banked_mem).set_endianness(ENDIANNESS_LITTLE).set_data_width(8).set_stride(0x4000);
ADDRESS_MAP_BANK(config, "bank2").set_map(&hunter2_state::hunter2_banked_mem).set_endianness(ENDIANNESS_LITTLE).set_data_width(8).set_stride(0x4000);
ADDRESS_MAP_BANK(config, "bank3").set_map(&hunter2_state::hunter2_banked_mem).set_endianness(ENDIANNESS_LITTLE).set_data_width(8).set_stride(0x4000);
ADDRESS_MAP_BANK(config, "bank4").set_map(&hunter2_state::hunter2_banked_mem).set_endianness(ENDIANNESS_LITTLE).set_data_width(8).set_stride(0x4000);
void hunter2_state::hunter(machine_config &config)
{
hunter2(config);
/* video hardware */
screen_device &screen(*subdevice<screen_device>("screen"));
screen.set_size(240, 64);
screen.set_visarea(0, 239, 0, 63);
}
/* ROM definition */
ROM_START( hunter2 )
ROM_REGION(0x30000, "roms", ROMREGION_ERASEFF) // board has space for 6 roms, but only 2 are populated normally
ROM_LOAD( "tr032kx8mrom0.ic50", 0x0000, 0x8000, CRC(694d252c) SHA1(b11dbf24faf648596d92b1823e25a8e4fb7f542c) )
ROM_LOAD( "tr032kx8mrom1.ic51", 0x8000, 0x8000, CRC(82901642) SHA1(d84f2bbd2e9e052bd161a313c240a67918f774ad) )
ROM_START( hunter )
ROM_REGION(0x10000, "rom", ROMREGION_ERASEFF) // board has space for 6 roms, but only 2 are populated normally
ROM_SYSTEM_BIOS(0, "1", "DEMOS 2.2 9G06h")
ROMX_LOAD( "99-06h-00.ic50", 0x0000, 0x8000, CRC(ccc57737) SHA1(917d0d7983ab735b24e36b1e75b948c444105f28), ROM_BIOS(0) )
ROMX_LOAD( "99-06h-01.ic51", 0x8000, 0x8000, CRC(8b1b18c7) SHA1(734d37505cf4c3c8effc75dedd129311a9b20a38), ROM_BIOS(0) )
ROM_SYSTEM_BIOS(1, "2", "DEMOS 2.2 9G+")
ROMX_LOAD( "husky0iss9.ic50", 0x0000, 0x8000, CRC(77f80f33) SHA1(b0240ecfc95d32e960179af2bfa97fe5b38f7440), ROM_BIOS(1) )
ROMX_LOAD( "husky1iss9.ic51", 0x8000, 0x8000, CRC(2c8f05fb) SHA1(5debc00037259be0d017c34e54ef4992cd6c0b38), ROM_BIOS(1) )
ROM_SYSTEM_BIOS(2, "3", "DEMOS Ver 2.2") // not working, maybe auto-run software from RAM
ROMX_LOAD( "v08c-0.ic50", 0x0000, 0x2000, CRC(e32687f5) SHA1(1679e1aa78d822da57f59f1eb5560c96794a199f), ROM_BIOS(2) )
ROMX_LOAD( "v08c-1.ic51", 0x2000, 0x2000, CRC(cc669b10) SHA1(f9a197bfc9e5800910ba71b5c4e8d810320a7a43), ROM_BIOS(2) )
ROMX_LOAD( "v08c-2.ic52", 0x4000, 0x2000, CRC(df0a4dcb) SHA1(79e49d37ae710790c29bc49e2ec7c9c113a36561), ROM_BIOS(2) )
ROMX_LOAD( "v08c-3.ic53", 0x6000, 0x2000, CRC(d6a7869e) SHA1(e3d3364b4083f312031e96b340fbda763b310d28), ROM_BIOS(2) )
ROMX_LOAD( "v08c-4.ic54", 0x8000, 0x2000, CRC(0339b049) SHA1(7d5d5297ee9db348566b8f717942bde0eb67d058), ROM_BIOS(2) )
ROMX_LOAD( "v08c-5.ic55", 0xa000, 0x2000, CRC(98fcde65) SHA1(b9f3ce9a172ab29672026912e96c4a838cbddb46), ROM_BIOS(2) )
ROM_SYSTEM_BIOS(3, "4", "DEMOS 2.2 9G06h (6 ROMs)")
ROMX_LOAD( "eprom0.ic50", 0x0000, 0x2000, CRC(ad861c35) SHA1(fe8bcad60d4a0dc94cc6756d9132743f27fbb65d), ROM_BIOS(3) )
ROMX_LOAD( "eprom1.ic51", 0x2000, 0x2000, CRC(c8c2fae8) SHA1(4235b4483ea8a091d332248074f72f220692c05e), ROM_BIOS(3) )
ROMX_LOAD( "eprom2.ic52", 0x4000, 0x2000, CRC(b301621f) SHA1(02a0ce58405e95b48f7ac8aa291cb836a6927375), ROM_BIOS(3) )
ROMX_LOAD( "eprom3.ic53", 0x6000, 0x2000, CRC(be6f196a) SHA1(73fc7f953b56d491ad4fcfe80636db0150a718dc), ROM_BIOS(3) )
ROMX_LOAD( "eprom4.ic54", 0x8000, 0x2000, CRC(7a0d2228) SHA1(6667fbd5583217ea7ba9b4b4fc9dc56240b0e14e), ROM_BIOS(3) )
ROMX_LOAD( "eprom5.ic55", 0xa000, 0x2000, CRC(48526702) SHA1(bd8f5a37e5f16511623dc128e2b95b4866b4297a), ROM_BIOS(3) )
ROM_END
// 48 x 4k blocks plus 1 sinkhole
ROM_REGION(0xc4000, "rams", ROMREGION_ERASEVAL(0xa5)) // board can have up to 736k of ram, but 192k is standard
ROM_START( hunter2 )
ROM_REGION(0x10000, "rom", ROMREGION_ERASEFF) // board has space for 6 roms, but only 2 are populated normally
ROM_SYSTEM_BIOS(0, "1", "DEMOS 2.21 9G08h V4")
ROMX_LOAD( "tr032kx8mrom0.ic50", 0x0000, 0x8000, CRC(694d252c) SHA1(b11dbf24faf648596d92b1823e25a8e4fb7f542c), ROM_BIOS(0) )
ROMX_LOAD( "tr032kx8mrom1.ic51", 0x8000, 0x8000, CRC(82901642) SHA1(d84f2bbd2e9e052bd161a313c240a67918f774ad), ROM_BIOS(0) )
ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1981, hunter2, 0, 0, hunter2, hunter2, hunter2_state, init_hunter2, "Husky", "Hunter 2", MACHINE_NOT_WORKING )
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1983, hunter, hunter2, 0, hunter, hunter2, hunter2_state, init_hunter2, "Husky Computers Ltd", "Husky Hunter", MACHINE_NOT_WORKING )
COMP( 1984, hunter2, 0, 0, hunter2, hunter2, hunter2_state, init_hunter2, "Husky Computers Ltd", "Husky Hunter 2", MACHINE_NOT_WORKING )

View File

@ -15749,6 +15749,7 @@ ht68k //
amu880 //
@source:hunter2.cpp
hunter // Husky Hunter
hunter2 // Husky Hunter 2
@source:hunter16.cpp