// license:BSD-3-Clause
// copyright-holders:Nigel Barnes
/***************************************************************************
Husky Hawk
No schematics or manuals available.
Known RAM configurations:
Hawk - 352K
****************************************************************************/
#include "emu.h"
#include "bus/rs232/rs232.h"
#include "cpu/z180/z180.h"
#include "machine/msm6242.h"
#include "machine/ram.h"
#include "machine/nvram.h"
#include "sound/spkrdev.h"
#include "emupal.h"
#include "screen.h"
#include "speaker.h"
class hawk_state : public driver_device
{
public:
hawk_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_palette(*this, "palette")
, m_speaker(*this, "speaker")
, m_rs232(*this, "serial")
, m_ram(*this, RAM_TAG)
, m_nvram(*this, "nvram")
{ }
void hawk(machine_config &config);
void init_hawk();
protected:
virtual void machine_reset() override;
private:
void hawk_palette(palette_device &palette) const;
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void hawk_mem(address_map &map);
void hawk_io(address_map &map);
required_device<cpu_device> m_maincpu;
required_device<palette_device> m_palette;
required_device<speaker_sound_device> m_speaker;
required_device<rs232_port_device> m_rs232;
required_device<ram_device> m_ram;
required_device<nvram_device> m_nvram;
};
void hawk_state::hawk_io(address_map &map)
{
map.unmap_value_high();
map(0x0010, 0x0010).mirror(0xff00).nopw();
map(0x0018, 0x0018).nopw();
map(0x003f, 0x003f).nopw();
map(0x0080, 0x00bf).noprw(); // Z180 internal registers
map(0x00c0, 0x00cf).mirror(0xff00).rw("rtc", FUNC(msm6242_device::read), FUNC(msm6242_device::write));
}
void hawk_state::hawk_mem(address_map &map)
{
map(0x00000, 0x1ffff).rom();
map(0x20000, 0x7ffff).ram().share(RAM_TAG);
}
static INPUT_PORTS_START( hawk )
INPUT_PORTS_END
void hawk_state::machine_reset()
{
}
void hawk_state::init_hawk()
{
m_nvram->set_base(m_ram->pointer(), m_ram->size());
}
uint32_t hawk_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
// video RAM at 78000 ??
return 0;
}
void hawk_state::hawk_palette(palette_device &palette) const
{
palette.set_pen_color(0, rgb_t(138, 146, 148));
palette.set_pen_color(1, rgb_t(92, 83, 88));
}
void hawk_state::hawk(machine_config &config)
{
/* basic machine hardware */
Z80180(config, m_maincpu, 12.288_MHz_XTAL); /* HD64B180R0F */
m_maincpu->set_addrmap(AS_PROGRAM, &hawk_state::hawk_mem);
m_maincpu->set_addrmap(AS_IO, &hawk_state::hawk_io);
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
screen.set_refresh_hz(60);
screen.set_screen_update(FUNC(hawk_state::screen_update));
screen.set_size(240, 64);
screen.set_visarea(0, 239, 0, 63);
PALETTE(config, m_palette, FUNC(hawk_state::hawk_palette), 2);
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50);
/* rtc */
MSM6242(config, "rtc", 32.768_kHz_XTAL); // M6242B
RS232_PORT(config, m_rs232, default_rs232_devices, nullptr);
/* internal ram */
RAM(config, m_ram).set_default_size("352K");
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
}
ROM_START(hawk)
ROM_REGION(0x20000, "maincpu", ROMREGION_ERASEFF)
ROM_SYSTEM_BIOS(0, "120", "DEMOS 2.21 V1.20")
ROMX_LOAD("hawk-v1.20.rom", 0x00000, 0x20000, CRC(186b1974) SHA1(eb46041715266cc263d71aad4f09cdf0c913cd16), ROM_BIOS(0))
ROM_SYSTEM_BIOS(1, "110", "DEMOS 2.21 V1.10")
ROMX_LOAD("hawk-v1.10-0.rom", 0x00000, 0x08000, CRC(c933ed5c) SHA1(f7b8375099ade54e3573467bf8e7f62624958e4c), ROM_BIOS(1))
ROMX_LOAD("hawk-v1.10-1.rom", 0x08000, 0x08000, CRC(121b5ce0) SHA1(baf06bc0d16501b50cbf97b686612b00098c73ab), ROM_BIOS(1))
ROMX_LOAD("hawk-v1.10-2.rom", 0x10000, 0x08000, CRC(cd5d94c7) SHA1(44c996b4bf00185ccb303cf9ef9bbd705018390c), ROM_BIOS(1))
ROM_SYSTEM_BIOS(2, "110a", "DEMOS 2.21 V1.10 (alt)")
ROMX_LOAD("v1.10_0.rom", 0x00000, 0x08000, CRC(7ad48dcf) SHA1(0e2b82dec0a082f4a8032b7a64cc9afdbf421521), ROM_BIOS(2))
ROMX_LOAD("v1.10_1.rom", 0x08000, 0x08000, CRC(121b5ce0) SHA1(baf06bc0d16501b50cbf97b686612b00098c73ab), ROM_BIOS(2))
ROMX_LOAD("v1.10_2.rom", 0x10000, 0x08000, CRC(cd5d94c7) SHA1(44c996b4bf00185ccb303cf9ef9bbd705018390c), ROM_BIOS(2))
ROMX_LOAD("56189.rom", 0x18000, 0x08000, CRC(1b2db82b) SHA1(2185d27816bde263c62db1a2441d8a6d2cb6d193), ROM_BIOS(2))
ROM_SYSTEM_BIOS(3, "101", "DEMOS 2.21 V1.01")
ROMX_LOAD("hawk-v1.01-0.rom", 0x00000, 0x08000, CRC(96404435) SHA1(3b108d6906ecc7d7a36c36b993e79ec7480668fa), ROM_BIOS(3))
ROMX_LOAD("hawk-v1.01-1.rom", 0x08000, 0x08000, CRC(4f99c76c) SHA1(45ff638277cff7b1fb2e21c4c348dad2b2e779b7), ROM_BIOS(3))
ROMX_LOAD("hawk-v1.01-2.rom", 0x10000, 0x08000, CRC(982ed053) SHA1(ab0a860f1204f36f490fdfadfefe2ee4a82ed3be), ROM_BIOS(3))
ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1987, hawk, 0, 0, hawk, hawk, hawk_state, init_hawk, "Husky Computers Ltd", "Husky Hawk", MACHINE_IS_SKELETON )