mirror of
https://github.com/holub/mame
synced 2025-04-17 22:13:04 +03:00
New working clones
------------------ Nokia MikroMikko 1 M4 [Niko Nieminen] Nokia MikroMikko 1 M4G [Niko Nieminen] Nokia MikroMikko 1 M6G [Curt Coder] New clones marked not working ----------------------------- Nokia MikroMikko 1 M7 [Niko Nieminen] Nokia MikroMikko 1 M7G [Niko Nieminen]
This commit is contained in:
parent
ed05abeca9
commit
3b9a6c2322
@ -34888,8 +34888,12 @@ quizpani // (c) 1993 NMK
|
||||
dbox // (c) 1996 Nokia Multimedia
|
||||
|
||||
@source:nokia/mikromik.cpp
|
||||
mm1m4 //
|
||||
mm1m4g //
|
||||
mm1m6 //
|
||||
mm1m6g //
|
||||
mm1m7 //
|
||||
mm1m7g //
|
||||
|
||||
@source:nokia/nokia_3310.cpp
|
||||
noki3210 //
|
||||
|
@ -37,6 +37,19 @@
|
||||
RST6.5 8212 INT
|
||||
RST7.5 DMA EOP
|
||||
|
||||
Models:
|
||||
|
||||
M1: 1x 160KB floppy
|
||||
M2: 2x 160KB floppy
|
||||
M3: 1x 320KB floppy
|
||||
M4: 2x 320KB floppy
|
||||
M5: 1x 640KB floppy
|
||||
M6: 2x 640KB floppy
|
||||
M7: 1x 640KB floppy + 5MB hard disk
|
||||
M4G: 2x 320KB floppy + GDC
|
||||
M6G: 2x 640KB floppy + GDC
|
||||
M7G: 1x 640KB floppy + 5MB hard disk + GDC
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -216,8 +229,13 @@ void mm1_state::llen_w(int state)
|
||||
void mm1_state::motor_on_w(int state)
|
||||
{
|
||||
LOG("MOTOR %u\n", state);
|
||||
|
||||
m_floppy[0]->mon_w(!state);
|
||||
m_floppy[1]->mon_w(!state);
|
||||
|
||||
if (m_floppy[1])
|
||||
{
|
||||
m_floppy[1]->mon_w(!state);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -226,10 +244,6 @@ void mm1_state::motor_on_w(int state)
|
||||
// ADDRESS MAPS
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// ADDRESS_MAP( mm1_map )
|
||||
//-------------------------------------------------
|
||||
|
||||
void mm1_state::mm1_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0xffff).rw(FUNC(mm1_state::read), FUNC(mm1_state::write));
|
||||
@ -244,6 +258,11 @@ void mm1_state::mmu_io_map(address_map &map)
|
||||
map(0x40, 0x40).mirror(0x0f).rw(m_iop, FUNC(i8212_device::read), FUNC(i8212_device::write));
|
||||
map(0x50, 0x51).mirror(0x0e).m(m_fdc, FUNC(upd765a_device::map));
|
||||
map(0x60, 0x67).mirror(0x08).w("outlatch", FUNC(ls259_device::write_d0));
|
||||
}
|
||||
|
||||
void mm1_state::mm1g_mmu_io_map(address_map &map)
|
||||
{
|
||||
mmu_io_map(map);
|
||||
map(0x70, 0x71).mirror(0x0e).rw(m_hgdc, FUNC(upd7220_device::read), FUNC(upd7220_device::write));
|
||||
}
|
||||
|
||||
@ -382,16 +401,18 @@ void mm1_state::floppy_formats(format_registration &fr)
|
||||
fr.add_mfm_containers();
|
||||
fr.add(FLOPPY_MM1_FORMAT);
|
||||
}
|
||||
/*
|
||||
void mm2_state::floppy_formats(format_registration &fr)
|
||||
FLOPPY_MM2_FORMAT
|
||||
}
|
||||
*/
|
||||
static void mm1_floppies(device_slot_interface &device)
|
||||
|
||||
static void mm1_floppies_320k(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("525qd", FLOPPY_525_QD);
|
||||
device.option_add("525", FLOPPY_525_DD);
|
||||
}
|
||||
|
||||
static void mm1_floppies_640k(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("525", FLOPPY_525_QD);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACHINE INITIALIZATION
|
||||
@ -413,23 +434,12 @@ void mm1_state::machine_start()
|
||||
}
|
||||
|
||||
|
||||
void mm1_state::machine_reset()
|
||||
{
|
||||
// reset FDC
|
||||
m_fdc->reset();
|
||||
}
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACHINE DRIVERS
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// machine_config( mm1 )
|
||||
//-------------------------------------------------
|
||||
|
||||
void mm1_state::mm1(machine_config &config)
|
||||
void mm1_state::common(machine_config &config)
|
||||
{
|
||||
// basic system hardware
|
||||
I8085A(config, m_maincpu, 6.144_MHz_XTAL);
|
||||
@ -482,8 +492,6 @@ void mm1_state::mm1(machine_config &config)
|
||||
UPD765A(config, m_fdc, 16_MHz_XTAL/2, true, true);
|
||||
m_fdc->intrq_wr_callback().set_inputline(m_maincpu, I8085_RST55_LINE);
|
||||
m_fdc->drq_wr_callback().set(m_dmac, FUNC(am9517a_device::dreq3_w));
|
||||
FLOPPY_CONNECTOR(config, UPD765_TAG ":0", mm1_floppies, "525qd", mm1_state::floppy_formats).enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, UPD765_TAG ":1", mm1_floppies, "525qd", mm1_state::floppy_formats).enable_sound(true);
|
||||
|
||||
UPD7201(config, m_mpsc, 6.144_MHz_XTAL/2);
|
||||
m_mpsc->out_txda_callback().set(m_rs232a, FUNC(rs232_port_device::write_txd));
|
||||
@ -508,28 +516,73 @@ void mm1_state::mm1(machine_config &config)
|
||||
SOFTWARE_LIST(config, "flop_list").set_original("mm1_flop");
|
||||
}
|
||||
|
||||
void mm1_state::mm1(machine_config &config)
|
||||
{
|
||||
common(config);
|
||||
mm1_video(config);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// machine_config( mm1m6 )
|
||||
//-------------------------------------------------
|
||||
void mm1_state::mm1g(machine_config &config)
|
||||
{
|
||||
common(config);
|
||||
mm1g_video(config);
|
||||
|
||||
m_io->set_addrmap(0, &mm1_state::mm1g_mmu_io_map);
|
||||
}
|
||||
|
||||
void mm1_state::mm1_320k_dual(machine_config &config)
|
||||
{
|
||||
FLOPPY_CONNECTOR(config, UPD765_TAG ":0", mm1_floppies_320k, "525", mm1_state::floppy_formats).enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, UPD765_TAG ":1", mm1_floppies_320k, "525", mm1_state::floppy_formats).enable_sound(true);
|
||||
}
|
||||
|
||||
void mm1_state::mm1m4(machine_config &config)
|
||||
{
|
||||
mm1(config);
|
||||
mm1_320k_dual(config);
|
||||
}
|
||||
|
||||
void mm1_state::mm1m4g(machine_config &config)
|
||||
{
|
||||
mm1g(config);
|
||||
mm1_320k_dual(config);
|
||||
}
|
||||
|
||||
void mm1_state::mm1_640k_dual(machine_config &config)
|
||||
{
|
||||
FLOPPY_CONNECTOR(config, UPD765_TAG ":0", mm1_floppies_640k, "525", mm1_state::floppy_formats).enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, UPD765_TAG ":1", mm1_floppies_640k, "525", mm1_state::floppy_formats).enable_sound(true);
|
||||
}
|
||||
|
||||
void mm1_state::mm1m6(machine_config &config)
|
||||
{
|
||||
mm1(config);
|
||||
// video hardware
|
||||
mm1m6_video(config);
|
||||
mm1_640k_dual(config);
|
||||
}
|
||||
|
||||
void mm1_state::mm1m6g(machine_config &config)
|
||||
{
|
||||
mm1g(config);
|
||||
mm1_640k_dual(config);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// machine_config( mm1m7 )
|
||||
//-------------------------------------------------
|
||||
void mm1_state::mm1_640k(machine_config &config)
|
||||
{
|
||||
FLOPPY_CONNECTOR(config, UPD765_TAG ":0", mm1_floppies_640k, "525", mm1_state::floppy_formats).enable_sound(true);
|
||||
}
|
||||
|
||||
void mm1_state::mm1m7(machine_config &config)
|
||||
{
|
||||
mm1(config);
|
||||
// video hardware
|
||||
mm1m6_video(config);
|
||||
mm1_640k(config);
|
||||
|
||||
// TODO hard disk
|
||||
}
|
||||
|
||||
void mm1_state::mm1m7g(machine_config &config)
|
||||
{
|
||||
mm1g(config);
|
||||
mm1_640k(config);
|
||||
|
||||
// TODO hard disk
|
||||
}
|
||||
@ -540,6 +593,24 @@ void mm1_state::mm1m7(machine_config &config)
|
||||
// ROMS
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( mm1m4 )
|
||||
//-------------------------------------------------
|
||||
|
||||
ROM_START( mm1m4 )
|
||||
ROM_REGION( 0x4000, I8085A_TAG, 0 ) // BIOS
|
||||
ROM_LOAD( "9081b.ic43", 0x0000, 0x2000, CRC(60841940) SHA1(d755e9be53f27f41d1e93b4c1793f9ea6a3e1229) )
|
||||
|
||||
ROM_REGION( 0x200, "address", 0 ) // address decoder
|
||||
ROM_LOAD( "720793a.ic24", 0x0000, 0x0200, CRC(deea87a6) SHA1(8f19e43252c9a0b1befd02fc9d34fe1437477f3a) )
|
||||
|
||||
ROM_REGION( 0x1000, "chargen", 0 ) // character generator
|
||||
ROM_LOAD( "6807b.ic61", 0x0000, 0x1000, CRC(32b36220) SHA1(8fe7a181badea3f7e656dfaea21ee9e4c9baf0f1) )
|
||||
ROM_END
|
||||
|
||||
#define rom_mm1m4g rom_mm1m4
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( mm1m6 )
|
||||
//-------------------------------------------------
|
||||
@ -555,12 +626,25 @@ ROM_START( mm1m6 )
|
||||
ROM_LOAD( "6807b.ic61", 0x0000, 0x1000, CRC(32b36220) SHA1(8fe7a181badea3f7e656dfaea21ee9e4c9baf0f1) )
|
||||
ROM_END
|
||||
|
||||
#define rom_mm1m6g rom_mm1m6
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( mm1m7 )
|
||||
//-------------------------------------------------
|
||||
|
||||
#define rom_mm1m7 rom_mm1m6
|
||||
ROM_START( mm1m7 )
|
||||
ROM_REGION( 0x4000, I8085A_TAG, 0 ) // BIOS
|
||||
ROM_LOAD( "9057c.ic2", 0x0000, 0x2000, CRC(89bbc042) SHA1(7e8800c94934b81ce08b7af862e1159e0517684d) )
|
||||
|
||||
ROM_REGION( 0x200, "address", 0 ) // address decoder
|
||||
ROM_LOAD( "720793a.ic24", 0x0000, 0x0200, CRC(deea87a6) SHA1(8f19e43252c9a0b1befd02fc9d34fe1437477f3a) )
|
||||
|
||||
ROM_REGION( 0x1000, "chargen", 0 ) // character generator
|
||||
ROM_LOAD( "6807b.ic61", 0x0000, 0x1000, CRC(32b36220) SHA1(8fe7a181badea3f7e656dfaea21ee9e4c9baf0f1) )
|
||||
ROM_END
|
||||
|
||||
#define rom_mm1m7g rom_mm1m7
|
||||
|
||||
|
||||
|
||||
@ -568,6 +652,10 @@ ROM_END
|
||||
// SYSTEM DRIVERS
|
||||
//**************************************************************************
|
||||
|
||||
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
|
||||
COMP( 1981, mm1m6, 0, 0, mm1m6, mm1, mm1_state, empty_init, "Nokia Data", "MikroMikko 1 M6", MACHINE_SUPPORTS_SAVE )
|
||||
COMP( 1981, mm1m7, mm1m6, 0, mm1m7, mm1, mm1_state, empty_init, "Nokia Data", "MikroMikko 1 M7", MACHINE_SUPPORTS_SAVE )
|
||||
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
|
||||
COMP( 1981, mm1m4, 0, 0, mm1m4, mm1, mm1_state, empty_init, "Nokia Data", "MikroMikko 1 M4", MACHINE_SUPPORTS_SAVE )
|
||||
COMP( 1981, mm1m4g, mm1m4, 0, mm1m4g, mm1, mm1_state, empty_init, "Nokia Data", "MikroMikko 1 M4G", MACHINE_SUPPORTS_SAVE )
|
||||
COMP( 1981, mm1m6, 0, 0, mm1m6, mm1, mm1_state, empty_init, "Nokia Data", "MikroMikko 1 M6", MACHINE_SUPPORTS_SAVE )
|
||||
COMP( 1981, mm1m6g, mm1m6, 0, mm1m6g, mm1, mm1_state, empty_init, "Nokia Data", "MikroMikko 1 M6G", MACHINE_SUPPORTS_SAVE )
|
||||
COMP( 1981, mm1m7, 0, 0, mm1m7, mm1, mm1_state, empty_init, "Nokia Data", "MikroMikko 1 M7", MACHINE_NOT_WORKING )
|
||||
COMP( 1981, mm1m7g, mm1m7, 0, mm1m7g, mm1, mm1_state, empty_init, "Nokia Data", "MikroMikko 1 M7G", MACHINE_NOT_WORKING )
|
||||
|
@ -52,7 +52,7 @@ public:
|
||||
m_mpsc(*this, UPD7201_TAG),
|
||||
m_hgdc(*this, UPD7220_TAG),
|
||||
m_palette(*this, "palette"),
|
||||
m_floppy(*this, UPD765_TAG ":%u:525qd", 0U),
|
||||
m_floppy(*this, UPD765_TAG ":%u:525", 0U),
|
||||
m_rs232a(*this, RS232_A_TAG),
|
||||
m_rs232b(*this, RS232_B_TAG),
|
||||
m_rs232c(*this, RS232_C_TAG),
|
||||
@ -68,14 +68,23 @@ public:
|
||||
m_fdc_tc(0)
|
||||
{ }
|
||||
|
||||
void common(machine_config &config);
|
||||
void mm1(machine_config &config);
|
||||
void mm1g(machine_config &config);
|
||||
void mm1m4(machine_config &config);
|
||||
void mm1m4g(machine_config &config);
|
||||
void mm1m6(machine_config &config);
|
||||
void mm1m6_video(machine_config &config);
|
||||
void mm1m6g(machine_config &config);
|
||||
void mm1m7(machine_config &config);
|
||||
void mm1m7g(machine_config &config);
|
||||
void mm1_320k_dual(machine_config &config);
|
||||
void mm1_640k(machine_config &config);
|
||||
void mm1_640k_dual(machine_config &config);
|
||||
void mm1_video(machine_config &config);
|
||||
void mm1g_video(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
private:
|
||||
required_device<i8085a_cpu_device> m_maincpu;
|
||||
@ -86,9 +95,9 @@ private:
|
||||
required_device<i8275_device> m_crtc;
|
||||
required_device<upd765a_device> m_fdc;
|
||||
required_device<upd7201_device> m_mpsc;
|
||||
required_device<upd7220_device> m_hgdc;
|
||||
optional_device<upd7220_device> m_hgdc;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device_array<floppy_image_device, 2> m_floppy;
|
||||
optional_device_array<floppy_image_device, 2> m_floppy;
|
||||
required_device<rs232_port_device> m_rs232a;
|
||||
required_device<rs232_port_device> m_rs232b;
|
||||
required_device<rs232_port_device> m_rs232c;
|
||||
@ -96,7 +105,7 @@ private:
|
||||
required_memory_region m_rom;
|
||||
required_memory_region m_mmu_rom;
|
||||
required_memory_region m_char_rom;
|
||||
required_shared_ptr<uint16_t> m_video_ram;
|
||||
optional_shared_ptr<uint16_t> m_video_ram;
|
||||
|
||||
int m_a8;
|
||||
|
||||
@ -147,6 +156,7 @@ private:
|
||||
void mm1_palette(palette_device &palette) const;
|
||||
void mm1_map(address_map &map);
|
||||
void mmu_io_map(address_map &map);
|
||||
void mm1g_mmu_io_map(address_map &map);
|
||||
void mm1_upd7220_map(address_map &map);
|
||||
};
|
||||
|
||||
|
@ -88,7 +88,10 @@ uint32_t mm1_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, c
|
||||
m_crtc->screen_update(screen, bitmap, cliprect);
|
||||
|
||||
/* graphics */
|
||||
m_hgdc->screen_update(screen, bitmap, cliprect);
|
||||
if (m_hgdc)
|
||||
{
|
||||
m_hgdc->screen_update(screen, bitmap, cliprect);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -128,10 +131,10 @@ void mm1_state::mm1_palette(palette_device &palette) const
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// machine_config( mm1m6_video )
|
||||
// machine_config( mm1_video )
|
||||
//-------------------------------------------------
|
||||
|
||||
void mm1_state::mm1m6_video(machine_config &config)
|
||||
void mm1_state::mm1_video(machine_config &config)
|
||||
{
|
||||
screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER));
|
||||
screen.set_refresh_hz( 50 );
|
||||
@ -147,8 +150,19 @@ void mm1_state::mm1m6_video(machine_config &config)
|
||||
m_crtc->set_character_width(HORIZONTAL_CHARACTER_PIXELS);
|
||||
m_crtc->set_display_callback(FUNC(mm1_state::crtc_display_pixels));
|
||||
m_crtc->drq_wr_callback().set(m_dmac, FUNC(am9517a_device::dreq0_w));
|
||||
m_crtc->vrtc_wr_callback().set(m_hgdc, FUNC(upd7220_device::ext_sync_w));
|
||||
m_crtc->set_screen("screen");
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// machine_config( mm1g_video )
|
||||
//-------------------------------------------------
|
||||
|
||||
void mm1_state::mm1g_video(machine_config &config)
|
||||
{
|
||||
mm1_video(config);
|
||||
|
||||
m_crtc->vrtc_wr_callback().set(m_hgdc, FUNC(upd7220_device::ext_sync_w));
|
||||
|
||||
UPD7220(config, m_hgdc, XTAL(18'720'000)/8);
|
||||
m_hgdc->set_addrmap(0, &mm1_state::mm1_upd7220_map);
|
||||
|
Loading…
Reference in New Issue
Block a user