diff --git a/hash/pmd85_cass.xml b/hash/pmd85_cass.xml index 3681c259843..827ba417ba6 100644 --- a/hash/pmd85_cass.xml +++ b/hash/pmd85_cass.xml @@ -3,16 +3,21 @@ - + Auto 198? <unknown> - + @@ -24,7 +29,7 @@ For now tape loading only works in PMD-85.1 Bludiště 1988 <unknown> - + @@ -32,11 +37,11 @@ For now tape loading only works in PMD-85.1 - + Bombarder 198? <unknown> - + @@ -44,11 +49,11 @@ For now tape loading only works in PMD-85.1 - + Boulder Dash 1988 VBG Software - + @@ -56,11 +61,11 @@ For now tape loading only works in PMD-85.1 - + Faraonova Hbroka 1988 <unknown> - + @@ -68,11 +73,11 @@ For now tape loading only works in PMD-85.1 - + Flappy 1987 VBG Software - + @@ -84,7 +89,7 @@ For now tape loading only works in PMD-85.1 Fred 1988 VBG Software - + @@ -96,7 +101,7 @@ For now tape loading only works in PMD-85.1 Galaxia 1988 Ceres Soft - + @@ -108,7 +113,7 @@ For now tape loading only works in PMD-85.1 Hlípa 1989 ZO Svazarmu - + @@ -116,11 +121,11 @@ For now tape loading only works in PMD-85.1 - + Horác a pavouci 1985 ZO Svazarmu - + @@ -128,11 +133,11 @@ For now tape loading only works in PMD-85.1 - + Karel 1988 <unknown> - + @@ -140,11 +145,11 @@ For now tape loading only works in PMD-85.1 - + Kuriatko 198? <unknown> - + @@ -156,7 +161,7 @@ For now tape loading only works in PMD-85.1 Manic Miner 1987 VBG Software - + @@ -168,7 +173,7 @@ For now tape loading only works in PMD-85.1 Město robotů 1988 <unknown> - + @@ -176,11 +181,11 @@ For now tape loading only works in PMD-85.1 - + Pampuch & Duch 1986 <unknown> - + @@ -192,7 +197,7 @@ For now tape loading only works in PMD-85.1 Penetrator 1988 VBG Software - + @@ -204,7 +209,7 @@ For now tape loading only works in PMD-85.1 Pexeso 1988 Petisoft - + @@ -212,11 +217,11 @@ For now tape loading only works in PMD-85.1 - + Piškvorky 1987 <unknown> - + @@ -224,11 +229,11 @@ For now tape loading only works in PMD-85.1 - + Princ Jasoň 1989 Ceres Soft - + @@ -240,7 +245,7 @@ For now tape loading only works in PMD-85.1 Saboter 1989 VBG Software - + @@ -248,11 +253,11 @@ For now tape loading only works in PMD-85.1 - + Tava - HRA s Nahodou a Prirodou 1985 <unknown> - + @@ -260,11 +265,11 @@ For now tape loading only works in PMD-85.1 - + Zaby 198? <unknown> - + @@ -272,11 +277,11 @@ For now tape loading only works in PMD-85.1 - + ZED 198? <unknown> - + @@ -284,11 +289,11 @@ For now tape loading only works in PMD-85.1 - + GRDEMO 198? <unknown> - + @@ -296,11 +301,11 @@ For now tape loading only works in PMD-85.1 - + KURCA 198? <unknown> - + @@ -308,11 +313,11 @@ For now tape loading only works in PMD-85.1 - + WURMI 198? <unknown> - + @@ -323,21 +328,21 @@ For now tape loading only works in PMD-85.1 - + BASIC20 Demo 198? <unknown> - + @@ -346,17 +351,17 @@ For now tape loading only works in PMD-85.1 cirkus-sasa-tomasa 198? <unknown> - + @@ -365,17 +370,17 @@ For now tape loading only works in PMD-85.1 - + Copy Tape 198? <unknown> - + @@ -384,27 +389,27 @@ For now tape loading only works in PMD-85.1 - + DAM+2 198? <unknown> - + @@ -413,13 +418,13 @@ For now tape loading only works in PMD-85.1 DAT PMD 198? <unknown> - + @@ -428,17 +433,17 @@ For now tape loading only works in PMD-85.1 - + Development Utils 198? <unknown> - + @@ -447,23 +452,23 @@ For now tape loading only works in PMD-85.1 - + Evidence 198? <unknown> - + @@ -471,11 +476,11 @@ For now tape loading only works in PMD-85.1 - + Lemmings (256k) 198? <unknown> - + @@ -487,7 +492,7 @@ For now tape loading only works in PMD-85.1 Lemmings 198? <unknown> - + @@ -496,20 +501,20 @@ For now tape loading only works in PMD-85.1 - + Games 1 198? <unknown> @@ -522,21 +527,21 @@ For now tape loading only works in PMD-85.1 - + Games 2 198? <unknown> @@ -549,15 +554,15 @@ For now tape loading only works in PMD-85.1 - + Games 3 198? <unknown> @@ -570,20 +575,20 @@ For now tape loading only works in PMD-85.1 - + Games by 4004/482 ZO Svazarmu 198? <unknown> @@ -596,10 +601,10 @@ For now tape loading only works in PMD-85.1 - + Games by Libor Lasota 198? <unknown> @@ -612,13 +617,13 @@ For now tape loading only works in PMD-85.1 - + Games by RM-TEAM 198? <unknown> @@ -631,22 +636,22 @@ For now tape loading only works in PMD-85.1 - + Games by VBG Software 198? <unknown> @@ -659,13 +664,13 @@ For now tape loading only works in PMD-85.1 - + GR v1.00 198? <unknown> @@ -678,11 +683,11 @@ For now tape loading only works in PMD-85.1 - + GRED 198? <unknown> @@ -695,10 +700,10 @@ For now tape loading only works in PMD-85.1 - + GREP 198? <unknown> @@ -711,26 +716,26 @@ For now tape loading only works in PMD-85.1 - + HRY1 198? <unknown> @@ -743,20 +748,20 @@ For now tape loading only works in PMD-85.1 - + HRY2 198? <unknown> @@ -769,13 +774,13 @@ For now tape loading only works in PMD-85.1 - K-Studio - 198? - <unknown> - + K-Studio v2.7 + 1988 + S2 Software + @@ -784,18 +789,18 @@ For now tape loading only works in PMD-85.1 - + Karel (Alt) 198? <unknown> - + @@ -804,12 +809,12 @@ For now tape loading only works in PMD-85.1 - + Karel (Alt 2) 198? <unknown> @@ -822,13 +827,13 @@ For now tape loading only works in PMD-85.1 - + Krivky 198? <unknown> @@ -841,16 +846,16 @@ For now tape loading only works in PMD-85.1 - + LOGO 198? <unknown> @@ -863,13 +868,13 @@ For now tape loading only works in PMD-85.1 - + MRS 198? <unknown> @@ -882,13 +887,13 @@ For now tape loading only works in PMD-85.1 - + Musica 198? <unknown> @@ -901,20 +906,20 @@ For now tape loading only works in PMD-85.1 - + Rozne 198? <unknown> @@ -927,12 +932,12 @@ For now tape loading only works in PMD-85.1 - + Rozne (Pascal) 198? <unknown> @@ -945,14 +950,14 @@ For now tape loading only works in PMD-85.1 - + Skladatel 198? <unknown> @@ -965,14 +970,14 @@ For now tape loading only works in PMD-85.1 - + Texted 198? <unknown> @@ -985,13 +990,13 @@ For now tape loading only works in PMD-85.1 - + Vegrap 198? <unknown> diff --git a/src/mame/drivers/pmd85.cpp b/src/mame/drivers/pmd85.cpp index cd048925706..b8eab04d666 100644 --- a/src/mame/drivers/pmd85.cpp +++ b/src/mame/drivers/pmd85.cpp @@ -26,19 +26,19 @@ What's new: Notes on emulation status and to do list: ----------------------------------------- -1. V.24. -2. Tape emulation for other machines than PMD-85.1. -3. Flash video attribute. -4. External interfaces connectors (K2-K5). -5. Speaker. -6. Verify PMD-85.2A, PMD-85.3, Didaktik Alfa and Mato monitor roms. -7. Verify all Basic roms. -8. 8251 in Didaktik Alfa. -9. Colors (if any). -10. PMD-85, Didaktik Alfa 2 and Didaktik Beta (ROMs and documentation needed). -11. FDD interface (ROMs and disk images needed). -12. "Duch & Pampuch" Mato game displays scores with incorrect characters. -13. Tape save in pmd851 is badly formatted - cannot be loaded. +1. V.24. +2. Flash video attribute. +3. External interfaces connectors (K2-K5). +4. C2717PMD is marked MNW, but there's nothing to say why. +5. Verify PMD-85.2A, PMD-85.3, Didaktik Alfa and Mato monitor roms. +6. Verify all Basic roms. +7. 8251 in Didaktik Alfa. +8. Colors (if any). Seems most versions supported 4 colours via RGB connector. But, the TV modulator only carried the G line. + The video signals are developed in a forest of gates which may take a while to work out. +9. PMD-85, Didaktik Alfa 2 and Didaktik Beta (ROMs and documentation needed). +10. FDD interface (ROMs and disk images needed). +11. "Duch & Pampuch" Mato game displays scores with incorrect characters. + PMD-85 technical information ============================ @@ -183,47 +183,50 @@ SUB aaaa bb cc dd... - write bytes to memory starting at aaaa with bb,cc,dd... Cassette -------- -The systems belong to 3 groups which are not compatible with each other. -- pmd851, alfa -- mato -- pmd852, pmd852a, pmd852b, pmd853, c2717, c2717pmd Cassettes tested with Basic - pmd852,pmd852a,pmd852b,pmd853,c2717,c2717pmd - these can save and load back their own files -- pmd851 - won't go into basic -- mato,alfa - don't come with basic? +- pmd851,mato,alfa - not tested yet. -Software list items -- mato - not compatible -- all others - recognise headers of sw-item-tapes, but won't load? Maybe the usage is not understood properly. +Getting into Basic: +- pmd852,pmd852a,pmd852b,pmd853 : In the Machine Configuration, enable Basic and Reset. +- pmd851,alfa : type BASIC 00 (or any parameter) +- mato : type BASIC +- c2717,c2717pmd : you're already in Basic. +- How to get out? Unknown. -- Some software items will crash the emulator, for example >mame pmd851 bdash +Loading a tape: +- In the monitor : type MGLD , where is the file number, usually 00. File numbers will be shown in the + software list usage. +- In Basic : type LOAD , where is the same as above. +- The tape can only be loaded into the environment it's meant for. Otherwise, you'll only get header information + followed by a freeze. -Header information from what I can understand -xx/z yyyyyyyy +Header information from what I can understand: xx/z yyyyyyyy +yyyyyyyy = filename xx = file number z = status code (guesses below) > - only loadable by Basic - ? - only loadable by the monitor - it gives no clue as to the exec address - P - protected? I've had no luck getting one to load -yyyyyyyy = filename + ? - only loadable by the monitor - it gives no clue as to the exec address, but should start by itself if it's + been saved correctly. + x - other codes are added by the user and have program-specific meanings. + +Software list items: Some work, some don't, and some only work on certain machines. A test with "bludiste" +(a monitor program) produced the following: +- pmd851,pmd852,pmd852a,pmd852b,alfa - loads and runs +- c2717,c2717pmd - recognises and prints the header, but then doesn't load the tape, because the machine is + stuck in Basic. +- mato,pmd853 - does nothing + +Some software items will crash MAME, for example "bdash". *******************************************************************************************************************/ #include "emu.h" #include "includes/pmd85.h" - #include "cpu/i8085/i8085.h" -#include "imagedev/cassette.h" -#include "machine/i8251.h" -#include "machine/i8255.h" -#include "machine/pit8253.h" -#include "machine/ram.h" - #include "screen.h" -#include "softlist.h" #include "speaker.h" - #include "formats/pmd_cas.h" @@ -231,7 +234,7 @@ yyyyyyyy = filename // VIDEO EMULATION //************************************************************************** -uint32_t pmd85_state::screen_update_pmd85(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t pmd85_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { for (int y = 0; y < 256; y++) { @@ -258,12 +261,12 @@ uint32_t pmd85_state::screen_update_pmd85(screen_device &screen, bitmap_ind16 &b /* I/O ports */ -void pmd85_state::pmd85_io_map(address_map &map) +void pmd85_state::pmd85_io(address_map &map) { - map(0x00, 0xff).rw(FUNC(pmd85_state::pmd85_io_r), FUNC(pmd85_state::pmd85_io_w)); + map(0x00, 0xff).rw(FUNC(pmd85_state::io_r), FUNC(pmd85_state::io_w)); } -void pmd85_state::mato_io_map(address_map &map) +void pmd85_state::mato_io(address_map &map) { map(0x00, 0xff).rw(FUNC(pmd85_state::mato_io_r), FUNC(pmd85_state::mato_io_w)); } @@ -278,9 +281,7 @@ void pmd85_state::pmd85_mem(address_map &map) map(0x3000, 0x3fff).bankrw("bank4"); map(0x4000, 0x7fff).bankrw("bank5"); map(0x8000, 0x8fff).bankr("bank6"); - map(0x9000, 0x9fff).noprw(); map(0xa000, 0xafff).bankr("bank7"); - map(0xb000, 0xbfff).noprw(); map(0xc000, 0xffff).bankrw("bank8"); } @@ -318,7 +319,6 @@ void pmd85_state::alfa_mem(address_map &map) map(0x4000, 0x7fff).bankrw("bank4"); map(0x8000, 0x8fff).bankr("bank5"); map(0x9000, 0xb3ff).bankr("bank6"); - map(0xb400, 0xbfff).noprw(); map(0xc000, 0xffff).bankrw("bank7"); } @@ -518,7 +518,7 @@ static INPUT_PORTS_START( alfa ) PORT_INCLUDE( pmd85 ) PORT_MODIFY( "DSW0" ) - PORT_BIT( 0x01, 0x00, IPT_UNUSED ) + PORT_BIT( 0x01, 0x01, IPT_UNUSED ) INPUT_PORTS_END @@ -623,7 +623,7 @@ void pmd85_state::pmd85(machine_config &config, bool with_uart) /* basic machine hardware */ I8080(config, m_maincpu, XTAL(18'432'000)/9); m_maincpu->set_addrmap(AS_PROGRAM, &pmd85_state::pmd85_mem); - m_maincpu->set_addrmap(AS_IO, &pmd85_state::pmd85_io_map); + m_maincpu->set_addrmap(AS_IO, &pmd85_state::pmd85_io); config.set_maximum_quantum(attotime::from_hz(60)); @@ -647,10 +647,10 @@ void pmd85_state::pmd85(machine_config &config, bool with_uart) *******************************************************************************/ - PIT8253(config, m_pit8253, 0); - m_pit8253->set_clk<0>(0); - m_pit8253->set_clk<1>(XTAL(18'432'000)/9); - m_pit8253->set_clk<2>(1); + PIT8253(config, m_pit, 0); + m_pit->set_clk<0>(0); + m_pit->set_clk<1>(XTAL(18'432'000)/9); + m_pit->set_clk<2>(1); /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); @@ -659,13 +659,14 @@ void pmd85_state::pmd85(machine_config &config, bool with_uart) screen.set_vblank_time(0); screen.set_size(288, 256); screen.set_visarea(0, 288-1, 0, 256-1); - screen.set_screen_update(FUNC(pmd85_state::screen_update_pmd85)); + screen.set_screen_update(FUNC(pmd85_state::screen_update)); screen.set_palette(m_palette); PALETTE(config, m_palette, palette_device::MONOCHROME_HIGHLIGHT); /* sound hardware */ SPEAKER(config, "mono").front_center(); + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50); /* cassette */ CASSETTE(config, m_cassette); @@ -687,44 +688,44 @@ void pmd85_state::pmd85(machine_config &config, bool with_uart) } /* internal ram */ - RAM(config, m_ram).set_default_size("64K"); + RAM(config, m_ram).set_default_size("64K").set_default_value(0x00); } void pmd85_state::pmd851(machine_config &config) { pmd85(config); - I8255(config, m_ppi8255_0, 0); - m_ppi8255_0->in_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_0_porta_r)); - m_ppi8255_0->in_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_0_portb_r)); - m_ppi8255_0->in_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_0_portc_r)); - m_ppi8255_0->out_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_0_porta_w)); - m_ppi8255_0->out_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_0_portb_w)); - m_ppi8255_0->out_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_0_portc_w)); + I8255(config, m_ppi0, 0); + m_ppi0->in_pa_callback().set(FUNC(pmd85_state::ppi0_porta_r)); + m_ppi0->in_pb_callback().set(FUNC(pmd85_state::ppi0_portb_r)); + m_ppi0->in_pc_callback().set(FUNC(pmd85_state::ppi0_portc_r)); + m_ppi0->out_pa_callback().set(FUNC(pmd85_state::ppi0_porta_w)); + m_ppi0->out_pb_callback().set(FUNC(pmd85_state::ppi0_portb_w)); + m_ppi0->out_pc_callback().set(FUNC(pmd85_state::ppi0_portc_w)); - I8255(config, m_ppi8255_1, 0); - m_ppi8255_1->in_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_1_porta_r)); - m_ppi8255_1->in_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_1_portb_r)); - m_ppi8255_1->in_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_1_portc_r)); - m_ppi8255_1->out_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_1_porta_w)); - m_ppi8255_1->out_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_1_portb_w)); - m_ppi8255_1->out_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_1_portc_w)); + I8255(config, m_ppi1, 0); + m_ppi1->in_pa_callback().set(FUNC(pmd85_state::ppi1_porta_r)); + m_ppi1->in_pb_callback().set(FUNC(pmd85_state::ppi1_portb_r)); + m_ppi1->in_pc_callback().set(FUNC(pmd85_state::ppi1_portc_r)); + m_ppi1->out_pa_callback().set(FUNC(pmd85_state::ppi1_porta_w)); + m_ppi1->out_pb_callback().set(FUNC(pmd85_state::ppi1_portb_w)); + m_ppi1->out_pc_callback().set(FUNC(pmd85_state::ppi1_portc_w)); - I8255(config, m_ppi8255_2, 0); - m_ppi8255_2->in_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_2_porta_r)); - m_ppi8255_2->in_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_2_portb_r)); - m_ppi8255_2->in_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_2_portc_r)); - m_ppi8255_2->out_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_2_porta_w)); - m_ppi8255_2->out_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_2_portb_w)); - m_ppi8255_2->out_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_2_portc_w)); + I8255(config, m_ppi2, 0); + m_ppi2->in_pa_callback().set(FUNC(pmd85_state::ppi2_porta_r)); + m_ppi2->in_pb_callback().set(FUNC(pmd85_state::ppi2_portb_r)); + m_ppi2->in_pc_callback().set(FUNC(pmd85_state::ppi2_portc_r)); + m_ppi2->out_pa_callback().set(FUNC(pmd85_state::ppi2_porta_w)); + m_ppi2->out_pb_callback().set(FUNC(pmd85_state::ppi2_portb_w)); + m_ppi2->out_pc_callback().set(FUNC(pmd85_state::ppi2_portc_w)); - I8255(config, m_ppi8255_3, 0); - m_ppi8255_3->in_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_3_porta_r)); - m_ppi8255_3->in_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_3_portb_r)); - m_ppi8255_3->in_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_3_portc_r)); - m_ppi8255_3->out_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_3_porta_w)); - m_ppi8255_3->out_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_3_portb_w)); - m_ppi8255_3->out_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_3_portc_w)); + I8255(config, m_ppi3, 0); + m_ppi3->in_pa_callback().set(FUNC(pmd85_state::ppi3_porta_r)); + m_ppi3->in_pb_callback().set(FUNC(pmd85_state::ppi3_portb_r)); + m_ppi3->in_pc_callback().set(FUNC(pmd85_state::ppi3_portc_r)); + m_ppi3->out_pa_callback().set(FUNC(pmd85_state::ppi3_porta_w)); + m_ppi3->out_pb_callback().set(FUNC(pmd85_state::ppi3_portb_w)); + m_ppi3->out_pc_callback().set(FUNC(pmd85_state::ppi3_portc_w)); } void pmd85_state::pmd852a(machine_config &config) @@ -744,44 +745,44 @@ void pmd85_state::alfa(machine_config &config) pmd85(config); m_maincpu->set_addrmap(AS_PROGRAM, &pmd85_state::alfa_mem); - I8255(config, m_ppi8255_0, 0); - m_ppi8255_0->in_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_0_porta_r)); - m_ppi8255_0->in_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_0_portb_r)); - m_ppi8255_0->in_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_0_portc_r)); - m_ppi8255_0->out_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_0_porta_w)); - m_ppi8255_0->out_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_0_portb_w)); - m_ppi8255_0->out_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_0_portc_w)); + I8255(config, m_ppi0, 0); + m_ppi0->in_pa_callback().set(FUNC(pmd85_state::ppi0_porta_r)); + m_ppi0->in_pb_callback().set(FUNC(pmd85_state::ppi0_portb_r)); + m_ppi0->in_pc_callback().set(FUNC(pmd85_state::ppi0_portc_r)); + m_ppi0->out_pa_callback().set(FUNC(pmd85_state::ppi0_porta_w)); + m_ppi0->out_pb_callback().set(FUNC(pmd85_state::ppi0_portb_w)); + m_ppi0->out_pc_callback().set(FUNC(pmd85_state::ppi0_portc_w)); - I8255(config, m_ppi8255_1, 0); - m_ppi8255_1->in_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_1_porta_r)); - m_ppi8255_1->in_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_1_portb_r)); - m_ppi8255_1->in_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_1_portc_r)); - m_ppi8255_1->out_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_1_porta_w)); - m_ppi8255_1->out_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_1_portb_w)); - m_ppi8255_1->out_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_1_portc_w)); + I8255(config, m_ppi1, 0); + m_ppi1->in_pa_callback().set(FUNC(pmd85_state::ppi1_porta_r)); + m_ppi1->in_pb_callback().set(FUNC(pmd85_state::ppi1_portb_r)); + m_ppi1->in_pc_callback().set(FUNC(pmd85_state::ppi1_portc_r)); + m_ppi1->out_pa_callback().set(FUNC(pmd85_state::ppi1_porta_w)); + m_ppi1->out_pb_callback().set(FUNC(pmd85_state::ppi1_portb_w)); + m_ppi1->out_pc_callback().set(FUNC(pmd85_state::ppi1_portc_w)); - I8255(config, m_ppi8255_2, 0); - m_ppi8255_2->in_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_2_porta_r)); - m_ppi8255_2->in_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_2_portb_r)); - m_ppi8255_2->in_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_2_portc_r)); - m_ppi8255_2->out_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_2_porta_w)); - m_ppi8255_2->out_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_2_portb_w)); - m_ppi8255_2->out_pc_callback().set(FUNC(pmd85_state::pmd85_ppi_2_portc_w)); + I8255(config, m_ppi2, 0); + m_ppi2->in_pa_callback().set(FUNC(pmd85_state::ppi2_porta_r)); + m_ppi2->in_pb_callback().set(FUNC(pmd85_state::ppi2_portb_r)); + m_ppi2->in_pc_callback().set(FUNC(pmd85_state::ppi2_portc_r)); + m_ppi2->out_pa_callback().set(FUNC(pmd85_state::ppi2_porta_w)); + m_ppi2->out_pb_callback().set(FUNC(pmd85_state::ppi2_portb_w)); + m_ppi2->out_pc_callback().set(FUNC(pmd85_state::ppi2_portc_w)); } void pmd85_state::mato(machine_config &config) { pmd85(config, false); /* no uart */ m_maincpu->set_addrmap(AS_PROGRAM, &pmd85_state::mato_mem); - m_maincpu->set_addrmap(AS_IO, &pmd85_state::mato_io_map); + m_maincpu->set_addrmap(AS_IO, &pmd85_state::mato_io); - I8255(config, m_ppi8255_0, 0); - m_ppi8255_0->in_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_0_porta_r)); - m_ppi8255_0->out_pa_callback().set(FUNC(pmd85_state::pmd85_ppi_0_porta_w)); - m_ppi8255_0->in_pb_callback().set(FUNC(pmd85_state::mato_ppi_0_portb_r)); - m_ppi8255_0->out_pb_callback().set(FUNC(pmd85_state::pmd85_ppi_0_portb_w)); - m_ppi8255_0->in_pc_callback().set(FUNC(pmd85_state::mato_ppi_0_portc_r)); - m_ppi8255_0->out_pc_callback().set(FUNC(pmd85_state::mato_ppi_0_portc_w)); + I8255(config, m_ppi0, 0); + m_ppi0->in_pa_callback().set(FUNC(pmd85_state::ppi0_porta_r)); + m_ppi0->out_pa_callback().set(FUNC(pmd85_state::ppi0_porta_w)); + m_ppi0->in_pb_callback().set(FUNC(pmd85_state::mato_ppi0_portb_r)); + m_ppi0->out_pb_callback().set(FUNC(pmd85_state::ppi0_portb_w)); + m_ppi0->in_pc_callback().set(FUNC(pmd85_state::mato_ppi0_portc_r)); + m_ppi0->out_pc_callback().set(FUNC(pmd85_state::mato_ppi0_portc_w)); } void pmd85_state::c2717(machine_config &config) @@ -792,82 +793,87 @@ void pmd85_state::c2717(machine_config &config) ROM_START(pmd851) - ROM_REGION(0x11000,"maincpu",0) - ROM_LOAD("pmd85-1.bin", 0x10000, 0x1000, CRC(ef50b416) SHA1(afa3ec0d03228adc5287a4cba905ce7ad0497dff)) + ROM_REGION(0x1000,"maincpu",0) + ROM_LOAD("pmd85-1.bin", 0x0000, 0x1000, CRC(ef50b416) SHA1(afa3ec0d03228adc5287a4cba905ce7ad0497dff)) + ROM_REGION(0x2400,"user1",0) - ROM_LOAD_OPTIONAL("pmd85-1.bas", 0x0000, 0x2400, CRC(4fc37d45) SHA1(3bd0f92f37a3f2ee539916dc75508bda37433a72)) + ROM_LOAD("pmd85-1.bas", 0x0000, 0x2400, CRC(4fc37d45) SHA1(3bd0f92f37a3f2ee539916dc75508bda37433a72)) ROM_END ROM_START(pmd852) - ROM_REGION(0x11000,"maincpu",0) - ROM_LOAD("pmd85-2.bin", 0x10000, 0x1000, CRC(d4786f63) SHA1(6facdf37bb012714244b012a0c4bd715a956e42b)) + ROM_REGION(0x1000,"maincpu",0) + ROM_LOAD("pmd85-2.bin", 0x0000, 0x1000, CRC(d4786f63) SHA1(6facdf37bb012714244b012a0c4bd715a956e42b)) + ROM_REGION(0x2400,"user1",0) - ROM_LOAD_OPTIONAL("pmd85-2.bas", 0x0000, 0x2400, CRC(fc4a3ebf) SHA1(3bfc0e9a5cd5187da573b5d539d7246358125a88)) + ROM_LOAD("pmd85-2.bas", 0x0000, 0x2400, CRC(fc4a3ebf) SHA1(3bfc0e9a5cd5187da573b5d539d7246358125a88)) ROM_END ROM_START(pmd852a) - ROM_REGION(0x11000,"maincpu",0) - ROM_LOAD("pmd85-2a.bin", 0x10000, 0x1000, CRC(5a9a961b) SHA1(7363341596367d08b9a98767c6585ce18dfd03af)) + ROM_REGION(0x1000,"maincpu",0) + ROM_LOAD("pmd85-2a.bin", 0x0000, 0x1000, CRC(5a9a961b) SHA1(7363341596367d08b9a98767c6585ce18dfd03af)) + ROM_REGION(0x2400,"user1",0) - ROM_LOAD_OPTIONAL("pmd85-2a.bas", 0x0000, 0x2400, CRC(6ff379ad) SHA1(edcaf2420cac9771596ead5c86c41116b228eca3)) + ROM_LOAD("pmd85-2a.bas", 0x0000, 0x2400, CRC(6ff379ad) SHA1(edcaf2420cac9771596ead5c86c41116b228eca3)) ROM_END ROM_START(pmd852b) - ROM_REGION(0x11000,"maincpu",0) - ROM_LOAD("pmd85-2a.bin", 0x10000, 0x1000, CRC(5a9a961b) SHA1(7363341596367d08b9a98767c6585ce18dfd03af)) + ROM_REGION(0x1000,"maincpu",0) + ROM_LOAD("pmd85-2a.bin", 0x0000, 0x1000, CRC(5a9a961b) SHA1(7363341596367d08b9a98767c6585ce18dfd03af)) + ROM_REGION(0x2400,"user1",0) - ROM_LOAD_OPTIONAL("pmd85-2a.bas", 0x0000, 0x2400, CRC(6ff379ad) SHA1(edcaf2420cac9771596ead5c86c41116b228eca3)) + ROM_LOAD("pmd85-2a.bas", 0x0000, 0x2400, CRC(6ff379ad) SHA1(edcaf2420cac9771596ead5c86c41116b228eca3)) ROM_END ROM_START(pmd853) - ROM_REGION(0x12000,"maincpu",0) - ROM_LOAD("pmd85-3.bin", 0x10000, 0x2000, CRC(83e22c47) SHA1(5f131e27ae3ec8907adbe5cd228c67d131066084)) + ROM_REGION(0x2000,"maincpu",0) + ROM_LOAD("pmd85-3.bin", 0x0000, 0x2000, CRC(83e22c47) SHA1(5f131e27ae3ec8907adbe5cd228c67d131066084)) + ROM_REGION(0x2800,"user1",0) - ROM_LOAD_OPTIONAL("pmd85-3.bas", 0x0000, 0x2800, CRC(1e30e91d) SHA1(d086040abf4c0a7e5da8cf4db7d1668a1d9309a4)) + ROM_LOAD("pmd85-3.bas", 0x0000, 0x2800, CRC(1e30e91d) SHA1(d086040abf4c0a7e5da8cf4db7d1668a1d9309a4)) ROM_END ROM_START(alfa) - ROM_REGION(0x13400,"maincpu",0) - ROM_LOAD("alfa.bin", 0x10000, 0x1000, CRC(e425eedb) SHA1(db93b5de1e16b5ae71be08feb083a2ac15759495)) - ROM_LOAD("alfa.bas", 0x11000, 0x2400, CRC(9a73bfd2) SHA1(74314d989846f64e715f64deb84cb177fa62f4a9)) + ROM_REGION(0x3400,"maincpu",0) + ROM_LOAD("alfa.bin", 0x0000, 0x1000, CRC(e425eedb) SHA1(db93b5de1e16b5ae71be08feb083a2ac15759495)) + ROM_LOAD("alfa.bas", 0x1000, 0x2400, CRC(9a73bfd2) SHA1(74314d989846f64e715f64deb84cb177fa62f4a9)) ROM_END ROM_START(mato) - ROM_REGION(0x14000,"maincpu",0) + ROM_REGION(0x4000,"maincpu",0) ROM_SYSTEM_BIOS(0, "default", "BASIC") - ROMX_LOAD("mato.bin", 0x10000, 0x4000, CRC(574110a6) SHA1(4ff2cd4b07a1a700c55f92e5b381c04f758fb461), ROM_BIOS(0)) + ROMX_LOAD("mato.bin", 0x0000, 0x4000, CRC(574110a6) SHA1(4ff2cd4b07a1a700c55f92e5b381c04f758fb461), ROM_BIOS(0)) ROM_SYSTEM_BIOS(1, "ru", "Russian") - ROMX_LOAD("mato-ru.rom", 0x10000, 0x4000, CRC(44b68be4) SHA1(0d9ea9a9380e2af011a2f0b64c534dd0eb0a1fac), ROM_BIOS(1)) + ROMX_LOAD("mato-ru.rom", 0x0000, 0x4000, CRC(44b68be4) SHA1(0d9ea9a9380e2af011a2f0b64c534dd0eb0a1fac), ROM_BIOS(1)) ROM_SYSTEM_BIOS(2, "lan", "BASIC LAN") - ROMX_LOAD("mato-lan.rom", 0x10000, 0x4000, CRC(422cddde) SHA1(2a3dacf8e3e7637109c9d267f589a00881e9a5f4), ROM_BIOS(2)) + ROMX_LOAD("mato-lan.rom", 0x0000, 0x4000, CRC(422cddde) SHA1(2a3dacf8e3e7637109c9d267f589a00881e9a5f4), ROM_BIOS(2)) ROM_SYSTEM_BIOS(3, "games", "Games v1") - ROMX_LOAD("matoh.bin", 0x10000, 0x4000, CRC(ca25880d) SHA1(38ce0b6a26d48a09fdf96863c3eaf3705aca2590), ROM_BIOS(3)) + ROMX_LOAD("matoh.bin", 0x0000, 0x4000, CRC(ca25880d) SHA1(38ce0b6a26d48a09fdf96863c3eaf3705aca2590), ROM_BIOS(3)) ROM_SYSTEM_BIOS(4, "gamesen", "Games v2 EN") - ROMX_LOAD("matogmen.rom", 0x10000, 0x4000, CRC(47e039c8) SHA1(6cc73a6b58921b33691d2751dee28428456eb222), ROM_BIOS(4)) + ROMX_LOAD("matogmen.rom", 0x0000, 0x4000, CRC(47e039c8) SHA1(6cc73a6b58921b33691d2751dee28428456eb222), ROM_BIOS(4)) ROM_SYSTEM_BIOS(5, "gamessk", "Games v2 SK") - ROMX_LOAD("matogmsk.rom", 0x10000, 0x4000, CRC(d0c9b1e7) SHA1(9e7289d971a957bf161c317e5fa76db3289ee23c), ROM_BIOS(5)) + ROMX_LOAD("matogmsk.rom", 0x0000, 0x4000, CRC(d0c9b1e7) SHA1(9e7289d971a957bf161c317e5fa76db3289ee23c), ROM_BIOS(5)) ROM_SYSTEM_BIOS(6, "games3", "Games v3") - ROMX_LOAD("matogm3.rom", 0x10000, 0x4000, CRC(9352f2c1) SHA1(b3e45c56d2800c69a0bb02febda6fa715f1afbc3), ROM_BIOS(6)) + ROMX_LOAD("matogm3.rom", 0x0000, 0x4000, CRC(9352f2c1) SHA1(b3e45c56d2800c69a0bb02febda6fa715f1afbc3), ROM_BIOS(6)) ROM_END ROM_START(c2717) - ROM_REGION(0x14000,"maincpu",0) - ROM_LOAD("c2717.rom", 0x10000, 0x4000, CRC(da1703b1) SHA1(9fb93e6cae8b551064c7175bf3b4e3113429ce73)) + ROM_REGION(0x4000,"maincpu",0) + ROM_LOAD("c2717.rom", 0x0000, 0x4000, CRC(da1703b1) SHA1(9fb93e6cae8b551064c7175bf3b4e3113429ce73)) ROM_END ROM_START(c2717pmd) - ROM_REGION(0x14000,"maincpu",0) - ROM_LOAD( "c2717-pmd32.rom", 0x10000, 0x4000, CRC(cbdd323c) SHA1(ee9fea11be8bd4f945c583b0ae5684269906d0ce)) + ROM_REGION(0x4000,"maincpu",0) + ROM_LOAD( "c2717-pmd32.rom", 0x00000, 0x4000, CRC(cbdd323c) SHA1(ee9fea11be8bd4f945c583b0ae5684269906d0ce)) ROM_END // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1985, pmd851, 0, 0, pmd851, pmd85, pmd85_state, init_pmd851, "Tesla", "PMD-85.1", 0 ) -COMP( 1985, pmd852, pmd851, 0, pmd851, pmd85, pmd85_state, init_pmd852, "Tesla", "PMD-85.2", 0 ) -COMP( 1985, pmd852a, pmd851, 0, pmd852a, pmd85, pmd85_state, init_pmd852a, "Tesla", "PMD-85.2A", 0 ) -COMP( 1985, pmd852b, pmd851, 0, pmd852a, pmd85, pmd85_state, init_pmd852a, "Tesla", "PMD-85.2B", 0 ) -COMP( 1988, pmd853, pmd851, 0, pmd853, pmd85, pmd85_state, init_pmd853, "Tesla", "PMD-85.3", 0 ) -COMP( 1986, alfa, pmd851, 0, alfa, alfa, pmd85_state, init_alfa, "Didaktik Skalica", "Didaktik Alfa", 0 ) -COMP( 1985, mato, pmd851, 0, mato, mato, pmd85_state, init_mato, "Statny", "Mato", 0 ) -COMP( 1989, c2717, pmd851, 0, c2717, pmd85, pmd85_state, init_c2717, "Zbrojovka Brno", "Consul 2717", 0 ) -COMP( 1989, c2717pmd, pmd851, 0, c2717, pmd85, pmd85_state, init_c2717, "Zbrojovka Brno", "Consul 2717 (with PMD-32)", MACHINE_NOT_WORKING ) +COMP( 1985, pmd851, 0, 0, pmd851, alfa, pmd85_state, init_pmd851, "Tesla", "PMD-85.1", MACHINE_SUPPORTS_SAVE ) +COMP( 1985, pmd852, pmd851, 0, pmd851, pmd85, pmd85_state, init_pmd852, "Tesla", "PMD-85.2", MACHINE_SUPPORTS_SAVE ) +COMP( 1985, pmd852a, pmd851, 0, pmd852a, pmd85, pmd85_state, init_pmd852a, "Tesla", "PMD-85.2A", MACHINE_SUPPORTS_SAVE ) +COMP( 1985, pmd852b, pmd851, 0, pmd852a, pmd85, pmd85_state, init_pmd852a, "Tesla", "PMD-85.2B", MACHINE_SUPPORTS_SAVE ) +COMP( 1988, pmd853, pmd851, 0, pmd853, pmd85, pmd85_state, init_pmd853, "Tesla", "PMD-85.3", MACHINE_SUPPORTS_SAVE ) +COMP( 1986, alfa, pmd851, 0, alfa, alfa, pmd85_state, init_alfa, "Didaktik Skalica", "Didaktik Alfa", MACHINE_SUPPORTS_SAVE ) +COMP( 1985, mato, pmd851, 0, mato, mato, pmd85_state, init_mato, "Statny", "Mato", MACHINE_SUPPORTS_SAVE ) +COMP( 1989, c2717, pmd851, 0, c2717, pmd85, pmd85_state, init_c2717, "Zbrojovka Brno", "Consul 2717", MACHINE_SUPPORTS_SAVE ) +COMP( 1989, c2717pmd, pmd851, 0, c2717, pmd85, pmd85_state, init_c2717, "Zbrojovka Brno", "Consul 2717 (with PMD-32)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/pmd85.h b/src/mame/includes/pmd85.h index 28d79e9739a..2ee987945c6 100644 --- a/src/mame/includes/pmd85.h +++ b/src/mame/includes/pmd85.h @@ -14,6 +14,7 @@ #include "machine/pit8253.h" #include "machine/i8255.h" #include "imagedev/cassette.h" +#include "sound/spkrdev.h" #include "machine/ram.h" #include "emupal.h" @@ -21,37 +22,24 @@ class pmd85_state : public driver_device { public: - pmd85_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_ram(*this, RAM_TAG), - m_cassette(*this, "cassette"), - m_pit8253(*this, "pit8253"), - m_uart(*this, "uart"), - m_ppi8255_0(*this, "ppi8255_0"), - m_ppi8255_1(*this, "ppi8255_1"), - m_ppi8255_2(*this, "ppi8255_2"), - m_ppi8255_3(*this, "ppi8255_3"), - m_region_maincpu(*this, "maincpu"), - m_bank1(*this, "bank1"), - m_bank2(*this, "bank2"), - m_bank3(*this, "bank3"), - m_bank4(*this, "bank4"), - m_bank5(*this, "bank5"), - m_bank6(*this, "bank6"), - m_bank7(*this, "bank7"), - m_bank8(*this, "bank8"), - m_bank9(*this, "bank9"), - m_bank10(*this, "bank10"), - m_bank11(*this, "bank11"), - m_bank12(*this, "bank12"), - m_bank13(*this, "bank13"), - m_bank14(*this, "bank14"), - m_bank15(*this, "bank15"), - m_bank16(*this, "bank16"), - m_io_dsw0(*this, "DSW0"), - m_palette(*this, "palette"), - m_leds(*this, "led%u", 0U) + pmd85_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_rom(*this, "maincpu") + , m_ram(*this, RAM_TAG) + , m_cassette(*this, "cassette") + , m_speaker(*this, "speaker") + , m_pit(*this, "pit") + , m_uart(*this, "uart") + , m_ppi0(*this, "ppi0") + , m_ppi1(*this, "ppi1") + , m_ppi2(*this, "ppi2") + , m_ppi3(*this, "ppi3") + , m_bank(*this, "bank%d", 0U) + , m_io_dsw0(*this, "DSW0") + , m_palette(*this, "palette") + , m_io_keyboard(*this, "KEY%u", 0U) + , m_leds(*this, "led%u", 0U) { } void pmd85(machine_config &config, bool with_uart = true); @@ -78,6 +66,7 @@ private: TIMER_CASSETTE }; + bool m_txd, m_rts; uint8_t m_rom_module_present; uint8_t m_ppi_port_outputs[4][3]; uint8_t m_startup_mem_map; @@ -88,83 +77,52 @@ private: uint8_t m_model; emu_timer * m_cassette_timer; void (pmd85_state::*update_memory)(); - uint8_t pmd85_io_r(offs_t offset); - void pmd85_io_w(offs_t offset, uint8_t data); + uint8_t io_r(offs_t offset); + void io_w(offs_t offset, uint8_t data); uint8_t mato_io_r(offs_t offset); void mato_io_w(offs_t offset, uint8_t data); virtual void machine_reset() override; - uint32_t screen_update_pmd85(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - TIMER_CALLBACK_MEMBER(pmd85_cassette_timer_callback); - uint8_t pmd85_ppi_0_porta_r(); - uint8_t pmd85_ppi_0_portb_r(); - uint8_t pmd85_ppi_0_portc_r(); - void pmd85_ppi_0_porta_w(uint8_t data); - void pmd85_ppi_0_portb_w(uint8_t data); - void pmd85_ppi_0_portc_w(uint8_t data); - uint8_t mato_ppi_0_portb_r(); - uint8_t mato_ppi_0_portc_r(); - void mato_ppi_0_portc_w(uint8_t data); - uint8_t pmd85_ppi_1_porta_r(); - uint8_t pmd85_ppi_1_portb_r(); - uint8_t pmd85_ppi_1_portc_r(); - void pmd85_ppi_1_porta_w(uint8_t data); - void pmd85_ppi_1_portb_w(uint8_t data); - void pmd85_ppi_1_portc_w(uint8_t data); - uint8_t pmd85_ppi_2_porta_r(); - uint8_t pmd85_ppi_2_portb_r(); - uint8_t pmd85_ppi_2_portc_r(); - void pmd85_ppi_2_porta_w(uint8_t data); - void pmd85_ppi_2_portb_w(uint8_t data); - void pmd85_ppi_2_portc_w(uint8_t data); - uint8_t pmd85_ppi_3_porta_r(); - uint8_t pmd85_ppi_3_portb_r(); - uint8_t pmd85_ppi_3_portc_r(); - void pmd85_ppi_3_porta_w(uint8_t data); - void pmd85_ppi_3_portb_w(uint8_t data); - void pmd85_ppi_3_portc_w(uint8_t data); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + TIMER_CALLBACK_MEMBER(cassette_timer_callback); + uint8_t ppi0_porta_r(); + uint8_t ppi0_portb_r(); + uint8_t ppi0_portc_r(); + void ppi0_porta_w(uint8_t data); + void ppi0_portb_w(uint8_t data); + void ppi0_portc_w(uint8_t data); + uint8_t mato_ppi0_portb_r(); + uint8_t mato_ppi0_portc_r(); + void mato_ppi0_portc_w(uint8_t data); + uint8_t ppi1_porta_r(); + uint8_t ppi1_portb_r(); + uint8_t ppi1_portc_r(); + void ppi1_porta_w(uint8_t data); + void ppi1_portb_w(uint8_t data); + void ppi1_portc_w(uint8_t data); + uint8_t ppi2_porta_r(); + uint8_t ppi2_portb_r(); + uint8_t ppi2_portc_r(); + void ppi2_porta_w(uint8_t data); + void ppi2_portb_w(uint8_t data); + void ppi2_portc_w(uint8_t data); + uint8_t ppi3_porta_r(); + uint8_t ppi3_portb_r(); + uint8_t ppi3_portc_r(); + void ppi3_porta_w(uint8_t data); + void ppi3_portb_w(uint8_t data); + void ppi3_portc_w(uint8_t data); void alfa_mem(address_map &map); void c2717_mem(address_map &map); - void mato_io_map(address_map &map); + void mato_io(address_map &map); void mato_mem(address_map &map); void pmd852a_mem(address_map &map); void pmd853_mem(address_map &map); - void pmd85_io_map(address_map &map); + void pmd85_io(address_map &map); void pmd85_mem(address_map &map); - virtual void machine_start() override { m_leds.resolve(); } - - required_device m_maincpu; - required_device m_ram; - required_device m_cassette; - required_device m_pit8253; - optional_device m_uart; - optional_device m_ppi8255_0; - optional_device m_ppi8255_1; - optional_device m_ppi8255_2; - optional_device m_ppi8255_3; - required_memory_region m_region_maincpu; - required_memory_bank m_bank1; - required_memory_bank m_bank2; - required_memory_bank m_bank3; - required_memory_bank m_bank4; - optional_memory_bank m_bank5; - optional_memory_bank m_bank6; - optional_memory_bank m_bank7; - optional_memory_bank m_bank8; - optional_memory_bank m_bank9; - optional_memory_bank m_bank10; - optional_memory_bank m_bank11; - optional_memory_bank m_bank12; - optional_memory_bank m_bank13; - optional_memory_bank m_bank14; - optional_memory_bank m_bank15; - optional_memory_bank m_bank16; - optional_ioport m_io_dsw0; - ioport_port *m_io_port[16]; - required_device m_palette; - output_finder<3> m_leds; + virtual void machine_start() override; void pmd851_update_memory(); void pmd852a_update_memory(); @@ -172,10 +130,25 @@ private: void alfa_update_memory(); void mato_update_memory(); void c2717_update_memory(); - void pmd85_common_driver_init(); + void common_driver_init(); virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; - bool m_txd, m_rts; + required_device m_maincpu; + required_region_ptr m_rom; + required_device m_ram; + required_device m_cassette; + required_device m_speaker; + required_device m_pit; + optional_device m_uart; + optional_device m_ppi0; + optional_device m_ppi1; + optional_device m_ppi2; + optional_device m_ppi3; + optional_memory_bank_array<17> m_bank; + optional_ioport m_io_dsw0; + required_device m_palette; + optional_ioport_array<16> m_io_keyboard; + output_finder<3> m_leds; }; diff --git a/src/mame/machine/pmd85.cpp b/src/mame/machine/pmd85.cpp index fde67618240..b4c6086e019 100644 --- a/src/mame/machine/pmd85.cpp +++ b/src/mame/machine/pmd85.cpp @@ -12,9 +12,8 @@ ***************************************************************************/ #include "emu.h" -#include "cpu/i8085/i8085.h" #include "includes/pmd85.h" -#include "machine/pit8253.h" + enum {PMD85_LED_1 = 0, PMD85_LED_2, PMD85_LED_3}; @@ -29,8 +28,6 @@ void pmd85_state::pmd851_update_memory() if (m_startup_mem_map) { - uint8_t *mem = m_region_maincpu->base(); - space.unmap_write(0x0000, 0x0fff); space.nop_write(0x1000, 0x1fff); space.unmap_write(0x2000, 0x2fff); @@ -39,13 +36,13 @@ void pmd85_state::pmd851_update_memory() space.nop_read(0x1000, 0x1fff); space.nop_read(0x3000, 0x3fff); - m_bank1->set_base(mem + 0x010000); - m_bank3->set_base(mem + 0x010000); - m_bank5->set_base(ram + 0xc000); + m_bank[1]->set_base(m_rom); + m_bank[3]->set_base(m_rom); + m_bank[5]->set_base(ram + 0xc000); - m_bank6->set_base(mem + 0x010000); - m_bank7->set_base(mem + 0x010000); - m_bank8->set_base(ram + 0xc000); + m_bank[6]->set_base(m_rom); + m_bank[7]->set_base(m_rom); + m_bank[8]->set_base(ram + 0xc000); } else { @@ -58,11 +55,11 @@ void pmd85_state::pmd851_update_memory() space.install_read_bank(0x1000, 0x1fff, "bank2"); space.install_read_bank(0x3000, 0x3fff, "bank4"); - m_bank1->set_base(ram); - m_bank2->set_base(ram + 0x1000); - m_bank3->set_base(ram + 0x2000); - m_bank4->set_base(ram + 0x3000); - m_bank5->set_base(ram + 0x4000); + m_bank[1]->set_base(ram); + m_bank[2]->set_base(ram + 0x1000); + m_bank[3]->set_base(ram + 0x2000); + m_bank[4]->set_base(ram + 0x3000); + m_bank[5]->set_base(ram + 0x4000); } } @@ -73,21 +70,19 @@ void pmd85_state::pmd852a_update_memory() if (m_startup_mem_map) { - uint8_t *mem = m_region_maincpu->base(); - space.unmap_write(0x0000, 0x0fff); space.unmap_write(0x2000, 0x2fff); - m_bank1->set_base(mem + 0x010000); - m_bank2->set_base(ram + 0x9000); - m_bank3->set_base(mem + 0x010000); - m_bank4->set_base(ram + 0xb000); - m_bank5->set_base(ram + 0xc000); - m_bank6->set_base(mem + 0x010000); - m_bank7->set_base(ram + 0x9000); - m_bank8->set_base(mem + 0x010000); - m_bank9->set_base(ram + 0xb000); - m_bank10->set_base(ram + 0xc000); + m_bank[1]->set_base(m_rom); + m_bank[2]->set_base(ram + 0x9000); + m_bank[3]->set_base(m_rom); + m_bank[4]->set_base(ram + 0xb000); + m_bank[5]->set_base(ram + 0xc000); + m_bank[6]->set_base(m_rom); + m_bank[7]->set_base(ram + 0x9000); + m_bank[8]->set_base(m_rom); + m_bank[9]->set_base(ram + 0xb000); + m_bank[10]->set_base(ram + 0xc000); } else @@ -95,48 +90,47 @@ void pmd85_state::pmd852a_update_memory() space.install_write_bank(0x0000, 0x0fff, "bank1"); space.install_write_bank(0x2000, 0x2fff, "bank3"); - m_bank1->set_base(ram); - m_bank2->set_base(ram + 0x1000); - m_bank3->set_base(ram + 0x2000); - m_bank4->set_base(ram + 0x5000); - m_bank5->set_base(ram + 0x4000); + m_bank[1]->set_base(ram); + m_bank[2]->set_base(ram + 0x1000); + m_bank[3]->set_base(ram + 0x2000); + m_bank[4]->set_base(ram + 0x5000); + m_bank[5]->set_base(ram + 0x4000); } } void pmd85_state::pmd853_update_memory() { - uint8_t *mem = m_region_maincpu->base(); uint8_t *ram = m_ram->pointer(); if (m_startup_mem_map) { - m_bank1->set_base(mem + 0x010000); - m_bank2->set_base(mem + 0x010000); - m_bank3->set_base(mem + 0x010000); - m_bank4->set_base(mem + 0x010000); - m_bank5->set_base(mem + 0x010000); - m_bank6->set_base(mem + 0x010000); - m_bank7->set_base(mem + 0x010000); - m_bank8->set_base(mem + 0x010000); - m_bank9->set_base(ram); - m_bank10->set_base(ram + 0x2000); - m_bank11->set_base(ram + 0x4000); - m_bank12->set_base(ram + 0x6000); - m_bank13->set_base(ram + 0x8000); - m_bank14->set_base(ram + 0xa000); - m_bank15->set_base(ram + 0xc000); - m_bank16->set_base(ram + 0xe000); + m_bank[1]->set_base(m_rom); + m_bank[2]->set_base(m_rom); + m_bank[3]->set_base(m_rom); + m_bank[4]->set_base(m_rom); + m_bank[5]->set_base(m_rom); + m_bank[6]->set_base(m_rom); + m_bank[7]->set_base(m_rom); + m_bank[8]->set_base(m_rom); + m_bank[9]->set_base(ram); + m_bank[10]->set_base(ram + 0x2000); + m_bank[11]->set_base(ram + 0x4000); + m_bank[12]->set_base(ram + 0x6000); + m_bank[13]->set_base(ram + 0x8000); + m_bank[14]->set_base(ram + 0xa000); + m_bank[15]->set_base(ram + 0xc000); + m_bank[16]->set_base(ram + 0xe000); } else { - m_bank1->set_base(ram); - m_bank2->set_base(ram + 0x2000); - m_bank3->set_base(ram + 0x4000); - m_bank4->set_base(ram + 0x6000); - m_bank5->set_base(ram + 0x8000); - m_bank6->set_base(ram + 0xa000); - m_bank7->set_base(ram + 0xc000); - m_bank8->set_base(m_pmd853_memory_mapping ? mem + 0x010000 : ram + 0xe000); + m_bank[1]->set_base(ram); + m_bank[2]->set_base(ram + 0x2000); + m_bank[3]->set_base(ram + 0x4000); + m_bank[4]->set_base(ram + 0x6000); + m_bank[5]->set_base(ram + 0x8000); + m_bank[6]->set_base(ram + 0xa000); + m_bank[7]->set_base(ram + 0xc000); + m_bank[8]->set_base(m_pmd853_memory_mapping ? m_rom : ram + 0xe000); } } @@ -147,18 +141,16 @@ void pmd85_state::alfa_update_memory() if (m_startup_mem_map) { - uint8_t *mem = m_region_maincpu->base(); - space.unmap_write(0x0000, 0x0fff); space.unmap_write(0x1000, 0x33ff); space.nop_write(0x3400, 0x3fff); - m_bank1->set_base(mem + 0x010000); - m_bank2->set_base(mem + 0x011000); - m_bank4->set_base(ram + 0xc000); - m_bank5->set_base(mem + 0x010000); - m_bank6->set_base(mem + 0x011000); - m_bank7->set_base(ram + 0xc000); + m_bank[1]->set_base(m_rom); + m_bank[2]->set_base(m_rom + 0x1000); + m_bank[4]->set_base(ram + 0xc000); + m_bank[5]->set_base(m_rom); + m_bank[6]->set_base(m_rom + 0x1000); + m_bank[7]->set_base(ram + 0xc000); } else { @@ -166,10 +158,10 @@ void pmd85_state::alfa_update_memory() space.install_write_bank(0x1000, 0x33ff, "bank2"); space.install_write_bank(0x3400, 0x3fff, "bank3"); - m_bank1->set_base(ram); - m_bank2->set_base(ram + 0x1000); - m_bank3->set_base(ram + 0x3400); - m_bank4->set_base(ram + 0x4000); + m_bank[1]->set_base(ram); + m_bank[2]->set_base(ram + 0x1000); + m_bank[3]->set_base(ram + 0x3400); + m_bank[4]->set_base(ram + 0x4000); } } @@ -180,44 +172,41 @@ void pmd85_state::mato_update_memory() if (m_startup_mem_map) { - uint8_t *mem = m_region_maincpu->base(); - space.unmap_write(0x0000, 0x3fff); - m_bank1->set_base(mem + 0x010000); - m_bank2->set_base(ram + 0xc000); - m_bank3->set_base(mem + 0x010000); - m_bank4->set_base(ram + 0xc000); + m_bank[1]->set_base(m_rom); + m_bank[2]->set_base(ram + 0xc000); + m_bank[3]->set_base(m_rom); + m_bank[4]->set_base(ram + 0xc000); } else { space.install_write_bank(0x0000, 0x3fff, "bank1"); - m_bank1->set_base(ram); - m_bank2->set_base(ram + 0x4000); + m_bank[1]->set_base(ram); + m_bank[2]->set_base(ram + 0x4000); } } void pmd85_state::c2717_update_memory() { address_space& space = m_maincpu->space(AS_PROGRAM); - uint8_t *mem = m_region_maincpu->base(); uint8_t *ram = m_ram->pointer(); if (m_startup_mem_map) { space.unmap_write(0x0000, 0x3fff); - m_bank1->set_base(mem + 0x010000); - m_bank2->set_base(ram + 0x4000); - m_bank3->set_base(mem + 0x010000); - m_bank4->set_base(ram + 0xc000); + m_bank[1]->set_base(m_rom); + m_bank[2]->set_base(ram + 0x4000); + m_bank[3]->set_base(m_rom); + m_bank[4]->set_base(ram + 0xc000); } else { space.install_write_bank(0x0000, 0x3fff, "bank1"); - m_bank1->set_base(ram); - m_bank2->set_base(ram + 0x4000); + m_bank[1]->set_base(ram); + m_bank[2]->set_base(ram + 0x4000); } } @@ -229,36 +218,37 @@ void pmd85_state::c2717_update_memory() *******************************************************************************/ -uint8_t pmd85_state::pmd85_ppi_0_porta_r() +uint8_t pmd85_state::ppi0_porta_r() { return 0xff; } -uint8_t pmd85_state::pmd85_ppi_0_portb_r() +uint8_t pmd85_state::ppi0_portb_r() { - return m_io_port[(m_ppi_port_outputs[0][0] & 0x0f)]->read() & m_io_port[15]->read(); + return m_io_keyboard[(m_ppi_port_outputs[0][0] & 0x0f)]->read() & m_io_keyboard[15]->read(); } -uint8_t pmd85_state::pmd85_ppi_0_portc_r() +uint8_t pmd85_state::ppi0_portc_r() { return 0xff; } -void pmd85_state::pmd85_ppi_0_porta_w(uint8_t data) +void pmd85_state::ppi0_porta_w(uint8_t data) { m_ppi_port_outputs[0][0] = data; } -void pmd85_state::pmd85_ppi_0_portb_w(uint8_t data) +void pmd85_state::ppi0_portb_w(uint8_t data) { m_ppi_port_outputs[0][1] = data; } -void pmd85_state::pmd85_ppi_0_portc_w(uint8_t data) +void pmd85_state::ppi0_portc_w(uint8_t data) { m_ppi_port_outputs[0][2] = data; m_leds[PMD85_LED_2] = BIT(data, 3); - m_leds[PMD85_LED_3] = BIT(data, 2); + //m_leds[PMD85_LED_3] = BIT(data, 2); + m_speaker->level_w(BIT(data, 2)); } /******************************************************************************* @@ -269,31 +259,30 @@ void pmd85_state::pmd85_ppi_0_portc_w(uint8_t data) *******************************************************************************/ -uint8_t pmd85_state::mato_ppi_0_portb_r() +uint8_t pmd85_state::mato_ppi0_portb_r() { - int i; - uint8_t data = 0xff; + u8 i,data = 0xff; for (i = 0; i < 8; i++) - { if (!BIT(m_ppi_port_outputs[0][0], i)) - data &= m_io_port[i]->read(); - } + data &= m_io_keyboard[i]->read(); + return data; } -uint8_t pmd85_state::mato_ppi_0_portc_r() +uint8_t pmd85_state::mato_ppi0_portc_r() { - u8 data = m_io_port[8]->read() & 0x7f; + u8 data = m_io_keyboard[8]->read() & 0x7f; data |= (m_cassette->input() > 0.038) ? 0x80 : 0; return data; } -void pmd85_state::mato_ppi_0_portc_w(uint8_t data) +void pmd85_state::mato_ppi0_portc_w(uint8_t data) { m_ppi_port_outputs[0][2] = data; m_leds[PMD85_LED_2] = BIT(data, 3); m_leds[PMD85_LED_3] = BIT(data, 2); + m_speaker->level_w(BIT(data, 1)); m_cassette->output(BIT(data, 0) ? 1 : -1); } @@ -305,32 +294,32 @@ void pmd85_state::mato_ppi_0_portc_w(uint8_t data) *******************************************************************************/ -uint8_t pmd85_state::pmd85_ppi_1_porta_r() +uint8_t pmd85_state::ppi1_porta_r() { return 0xff; } -uint8_t pmd85_state::pmd85_ppi_1_portb_r() +uint8_t pmd85_state::ppi1_portb_r() { return 0xff; } -uint8_t pmd85_state::pmd85_ppi_1_portc_r() +uint8_t pmd85_state::ppi1_portc_r() { return 0xff; } -void pmd85_state::pmd85_ppi_1_porta_w(uint8_t data) +void pmd85_state::ppi1_porta_w(uint8_t data) { m_ppi_port_outputs[1][0] = data; } -void pmd85_state::pmd85_ppi_1_portb_w(uint8_t data) +void pmd85_state::ppi1_portb_w(uint8_t data) { m_ppi_port_outputs[1][1] = data; } -void pmd85_state::pmd85_ppi_1_portc_w(uint8_t data) +void pmd85_state::ppi1_portc_w(uint8_t data) { m_ppi_port_outputs[1][2] = data; } @@ -347,32 +336,32 @@ void pmd85_state::pmd85_ppi_1_portc_w(uint8_t data) *******************************************************************************/ -uint8_t pmd85_state::pmd85_ppi_2_porta_r() +uint8_t pmd85_state::ppi2_porta_r() { return 0xff; } -uint8_t pmd85_state::pmd85_ppi_2_portb_r() +uint8_t pmd85_state::ppi2_portb_r() { return 0xff; } -uint8_t pmd85_state::pmd85_ppi_2_portc_r() +uint8_t pmd85_state::ppi2_portc_r() { return 0xff; } -void pmd85_state::pmd85_ppi_2_porta_w(uint8_t data) +void pmd85_state::ppi2_porta_w(uint8_t data) { m_ppi_port_outputs[2][0] = data; } -void pmd85_state::pmd85_ppi_2_portb_w(uint8_t data) +void pmd85_state::ppi2_portb_w(uint8_t data) { m_ppi_port_outputs[2][1] = data; } -void pmd85_state::pmd85_ppi_2_portc_w(uint8_t data) +void pmd85_state::ppi2_portc_w(uint8_t data) { m_ppi_port_outputs[2][2] = data; } @@ -403,35 +392,35 @@ void pmd85_state::pmd85_ppi_2_portc_w(uint8_t data) *******************************************************************************/ -uint8_t pmd85_state::pmd85_ppi_3_porta_r() +uint8_t pmd85_state::ppi3_porta_r() { - if (memregion("user1")->base() != nullptr) + if (memregion("user1")->base()) return memregion("user1")->base()[m_ppi_port_outputs[3][1] | (m_ppi_port_outputs[3][2] << 8)]; else return 0; } -uint8_t pmd85_state::pmd85_ppi_3_portb_r() +uint8_t pmd85_state::ppi3_portb_r() { return 0xff; } -uint8_t pmd85_state::pmd85_ppi_3_portc_r() +uint8_t pmd85_state::ppi3_portc_r() { return 0xff; } -void pmd85_state::pmd85_ppi_3_porta_w(uint8_t data) +void pmd85_state::ppi3_porta_w(uint8_t data) { m_ppi_port_outputs[3][0] = data; } -void pmd85_state::pmd85_ppi_3_portb_w(uint8_t data) +void pmd85_state::ppi3_portb_w(uint8_t data) { m_ppi_port_outputs[3][1] = data; } -void pmd85_state::pmd85_ppi_3_portc_w(uint8_t data) +void pmd85_state::ppi3_portc_w(uint8_t data) { m_ppi_port_outputs[3][2] = data; } @@ -459,7 +448,7 @@ void pmd85_state::pmd85_ppi_3_portc_w(uint8_t data) *******************************************************************************/ -uint8_t pmd85_state::pmd85_io_r(offs_t offset) +uint8_t pmd85_state::io_r(offs_t offset) { if (m_startup_mem_map) { @@ -472,7 +461,7 @@ uint8_t pmd85_state::pmd85_io_r(offs_t offset) switch (offset & 0x80) { case 0x80: /* Motherboard 8255 */ - return m_ppi8255_0->read(offset & 0x03); + return m_ppi0->read(offset & 0x03); } break; case 0x08: /* ROM module connector */ @@ -481,7 +470,7 @@ uint8_t pmd85_state::pmd85_io_r(offs_t offset) switch (offset & 0x80) { case 0x80: /* ROM module 8255 */ - return m_ppi8255_3->read(offset & 0x03); + return m_ppi3->read(offset & 0x03); } } break; @@ -494,11 +483,11 @@ uint8_t pmd85_state::pmd85_io_r(offs_t offset) case 0x10: /* 8251 (cassette recorder, V24) */ return m_uart->read(offset & 0x01); case 0x40: /* 8255 (GPIO/0, GPIO/1) */ - return m_ppi8255_1->read(offset & 0x03); + return m_ppi1->read(offset & 0x03); case 0x50: /* 8253 */ - return m_pit8253->read(offset & 0x03); + return m_pit->read(offset & 0x03); case 0x70: /* 8255 (IMS-2) */ - return m_ppi8255_2->read(offset & 0x03); + return m_ppi2->read(offset & 0x03); } break; case 0x80: /* external interfaces */ @@ -513,7 +502,7 @@ uint8_t pmd85_state::pmd85_io_r(offs_t offset) return 0xff; } -void pmd85_state::pmd85_io_w(offs_t offset, uint8_t data) +void pmd85_state::io_w(offs_t offset, uint8_t data) { if (m_startup_mem_map) { @@ -527,7 +516,7 @@ void pmd85_state::pmd85_io_w(offs_t offset, uint8_t data) switch (offset & 0x80) { case 0x80: /* Motherboard 8255 */ - m_ppi8255_0->write(offset & 0x03, data); + m_ppi0->write(offset & 0x03, data); /* PMD-85.3 memory banking */ if ((offset & 0x03) == 0x03) { @@ -543,7 +532,7 @@ void pmd85_state::pmd85_io_w(offs_t offset, uint8_t data) switch (offset & 0x80) { case 0x80: /* ROM module 8255 */ - m_ppi8255_3->write(offset & 0x03, data); + m_ppi3->write(offset & 0x03, data); break; } } @@ -558,14 +547,14 @@ void pmd85_state::pmd85_io_w(offs_t offset, uint8_t data) m_uart->write(offset & 0x01, data); break; case 0x40: /* 8255 (GPIO/0, GPIO/0) */ - m_ppi8255_1->write(offset & 0x03, data); + m_ppi1->write(offset & 0x03, data); break; case 0x50: /* 8253 */ - m_pit8253->write(offset & 0x03, data); + m_pit->write(offset & 0x03, data); logerror ("8253 writing. Address: %02x, Data: %02x\n", offset, data); break; case 0x70: /* 8255 (IMS-2) */ - m_ppi8255_2->write(offset & 0x03, data); + m_ppi2->write(offset & 0x03, data); break; } break; @@ -602,7 +591,7 @@ uint8_t pmd85_state::mato_io_r(offs_t offset) switch (offset & 0x80) { case 0x80: /* Motherboard 8255 */ - return m_ppi8255_0->read(offset & 0x03); + return m_ppi0->read(offset & 0x03); } break; } @@ -625,7 +614,7 @@ void pmd85_state::mato_io_w(offs_t offset, uint8_t data) switch (offset & 0x80) { case 0x80: /* Motherboard 8255 */ - return m_ppi8255_0->write(offset & 0x03, data); + return m_ppi0->write(offset & 0x03, data); } break; } @@ -636,19 +625,19 @@ void pmd85_state::device_timer(emu_timer &timer, device_timer_id id, int param, switch (id) { case TIMER_CASSETTE: - pmd85_cassette_timer_callback(ptr, param); + cassette_timer_callback(ptr, param); break; default: throw emu_fatalerror("Unknown id in pmd85_state::device_timer"); } } -TIMER_CALLBACK_MEMBER(pmd85_state::pmd85_cassette_timer_callback) +TIMER_CALLBACK_MEMBER(pmd85_state::cassette_timer_callback) { bool data; bool current_level; - if (!(m_io_dsw0->read() & 0x02)) /* V.24 / Tape Switch */ + if (!BIT(m_io_dsw0->read(), 1)) /* V.24 / Tape Switch */ { /* tape reading */ if (m_cassette->get_state()&CASSETTE_PLAY) @@ -711,18 +700,8 @@ INPUT_CHANGED_MEMBER(pmd85_state::pmd85_reset) machine().schedule_soft_reset(); } -void pmd85_state::pmd85_common_driver_init() +void pmd85_state::common_driver_init() { - static const char *const keynames[] = { - "KEY0", "KEY1", "KEY2", "KEY3", "KEY4", "KEY5", "KEY6", "KEY7", - "KEY8", "KEY9", "KEY10", "KEY11", "KEY12", "KEY13", "KEY14", "KEY15" - }; - - for ( int i = 0; i < 16; i++ ) - { - m_io_port[i] = ioport( keynames[i] ); - } - m_previous_level = 0; m_clk_level = m_clk_level_tape = 1; m_cassette_timer = timer_alloc(TIMER_CASSETTE); @@ -733,67 +712,52 @@ void pmd85_state::init_pmd851() { m_model = PMD85_1; update_memory = &pmd85_state::pmd851_update_memory; - pmd85_common_driver_init(); + common_driver_init(); } void pmd85_state::init_pmd852() { m_model = PMD85_2; update_memory = &pmd85_state::pmd851_update_memory; - pmd85_common_driver_init(); + common_driver_init(); } void pmd85_state::init_pmd852a() { m_model = PMD85_2A; update_memory = &pmd85_state::pmd852a_update_memory; - pmd85_common_driver_init(); + common_driver_init(); } void pmd85_state::init_pmd853() { m_model = PMD85_3; update_memory = &pmd85_state::pmd853_update_memory; - pmd85_common_driver_init(); + common_driver_init(); } void pmd85_state::init_alfa() { m_model = ALFA; update_memory = &pmd85_state::alfa_update_memory; - pmd85_common_driver_init(); + common_driver_init(); } void pmd85_state::init_mato() { m_model = MATO; update_memory = &pmd85_state::mato_update_memory; - - static const char *const keynames[] = { - "KEY0", "KEY1", "KEY2", "KEY3", "KEY4", "KEY5", "KEY6", "KEY7", "KEY8" - }; - - for ( int i = 0; i < 9; i++ ) - { - m_io_port[i] = ioport( keynames[i] ); - } - for ( int i = 9; i < 16; i++ ) - { - m_io_port[i] = nullptr; - } } void pmd85_state::init_c2717() { m_model = C2717; update_memory = &pmd85_state::c2717_update_memory; - pmd85_common_driver_init(); + common_driver_init(); } void pmd85_state::machine_reset() { - int i, j; - /* checking for Rom Module */ m_rom_module_present = 0; switch (m_model) @@ -810,13 +774,28 @@ void pmd85_state::machine_reset() break; } - for (i = 0; i < 4; i++) - for (j = 0; j < 3; j++) + for (u8 i = 0; i < 4; i++) + for (u8 j = 0; j < 3; j++) m_ppi_port_outputs[i][j] = 0; /* memory initialization */ - memset(m_ram->pointer(), 0, sizeof(unsigned char)*0x10000); m_pmd853_memory_mapping = 1; m_startup_mem_map = 1; (this->*update_memory)(); } + +void pmd85_state::machine_start() +{ + m_leds.resolve(); + save_item(NAME(m_txd)); + save_item(NAME(m_rts)); + save_item(NAME(m_rom_module_present)); + save_item(NAME(m_ppi_port_outputs)); + save_item(NAME(m_startup_mem_map)); + save_item(NAME(m_pmd853_memory_mapping)); + save_item(NAME(m_previous_level)); + save_item(NAME(m_clk_level)); + save_item(NAME(m_clk_level_tape)); + save_item(NAME(m_model)); +} +