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:
Curt Coder 2024-04-29 15:27:29 +03:00
parent ed05abeca9
commit 3b9a6c2322
4 changed files with 166 additions and 50 deletions

View File

@ -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 //

View File

@ -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 )

View File

@ -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);
};

View File

@ -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);