diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index f0601460e05..1345507c35e 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -1889,7 +1889,6 @@ files { MAME_DIR .. "src/mame/drivers/b2m.cpp", MAME_DIR .. "src/mame/includes/b2m.h", MAME_DIR .. "src/mame/machine/b2m.cpp", - MAME_DIR .. "src/mame/video/b2m.cpp", } createMESSProjects(_target, _subtarget, "bondwell") diff --git a/src/mame/drivers/b2m.cpp b/src/mame/drivers/b2m.cpp index 7aeb9cb3c8d..43af7e76820 100644 --- a/src/mame/drivers/b2m.cpp +++ b/src/mame/drivers/b2m.cpp @@ -2,24 +2,40 @@ // copyright-holders:Miodrag Milanovic /*************************************************************************** - Bashkiria-2M driver by Miodrag Milanovic +Bashkiria-2M driver by Miodrag Milanovic - 28/03/2008 Preliminary driver. +2008-03-28 Preliminary driver. + +To get numbers, you have to hold down Shift. + +B2M: +- Hit enter while the square block is showing - it will attempt to boot + a disk. But, it is loaded corruptly, and it runs into the weeds. +- Or, just wait and a menu appears with choices S,L,W,R,G. It's all in + Russian, and choosing any of them produces an error. + +B2MROM: +- At start you are in an empty ramdisk called A: +- You can use SAVE to create an empty file in the CP/M fashion, and you can + TYPE it. +- You can go to Basic by typing BAS. This is corrupted and only a few + commands are accepted: REM, LIST. The commands RUN and NEW cause a disk + error and the machine freezes. SYSTEM quits back to A: +- There's nothing else on the romdisk. + +So, in the end, nothing useful works. + +Need a schematic so that the fdc could be repaired. ****************************************************************************/ #include "emu.h" #include "cpu/i8085/i8085.h" -#include "machine/i8255.h" -#include "machine/pic8259.h" #include "machine/i8251.h" -#include "machine/wd_fdc.h" -#include "machine/ram.h" #include "includes/b2m.h" #include "formats/smx_dsk.h" #include "screen.h" -#include "softlist.h" #include "speaker.h" /* Address maps */ @@ -36,10 +52,10 @@ void b2m_state::b2m_io(address_map &map) { map.global_mask(0x1f); map(0x00, 0x03).rw(m_pit, FUNC(pit8253_device::read), FUNC(pit8253_device::write)); - map(0x04, 0x07).rw("ppi8255_2", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0x08, 0x0b).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0x0c, 0x0c).rw(FUNC(b2m_state::b2m_localmachine_r), FUNC(b2m_state::b2m_localmachine_w)); - map(0x10, 0x13).rw(FUNC(b2m_state::b2m_palette_r), FUNC(b2m_state::b2m_palette_w)); + map(0x04, 0x07).rw("ppi2", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0x08, 0x0b).rw("ppi1", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0x0c, 0x0c).rw(FUNC(b2m_state::localmachine_r), FUNC(b2m_state::localmachine_w)); + map(0x10, 0x13).rw(FUNC(b2m_state::palette_r), FUNC(b2m_state::palette_w)); map(0x14, 0x15).rw(m_pic, FUNC(pic8259_device::read), FUNC(pic8259_device::write)); map(0x18, 0x19).rw("uart", FUNC(i8251_device::read), FUNC(i8251_device::write)); map(0x1c, 0x1f).rw(m_fdc, FUNC(fd1793_device::read), FUNC(fd1793_device::write)); @@ -49,10 +65,10 @@ void b2m_state::b2m_rom_io(address_map &map) { map.global_mask(0x1f); map(0x00, 0x03).rw(m_pit, FUNC(pit8253_device::read), FUNC(pit8253_device::write)); - map(0x04, 0x07).rw("ppi8255_3", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0x08, 0x0b).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0x0c, 0x0c).rw(FUNC(b2m_state::b2m_localmachine_r), FUNC(b2m_state::b2m_localmachine_w)); - map(0x10, 0x13).rw(FUNC(b2m_state::b2m_palette_r), FUNC(b2m_state::b2m_palette_w)); + map(0x04, 0x07).rw("ppi3", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0x08, 0x0b).rw("ppi1", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0x0c, 0x0c).rw(FUNC(b2m_state::localmachine_r), FUNC(b2m_state::localmachine_w)); + map(0x10, 0x13).rw(FUNC(b2m_state::palette_r), FUNC(b2m_state::palette_w)); map(0x14, 0x15).rw(m_pic, FUNC(pic8259_device::read), FUNC(pic8259_device::write)); map(0x18, 0x19).rw("uart", FUNC(i8251_device::read), FUNC(i8251_device::write)); } @@ -192,8 +208,8 @@ void b2m_state::b2m(machine_config &config) i8080_cpu_device &maincpu(I8080(config, m_maincpu, 2000000)); maincpu.set_addrmap(AS_PROGRAM, &b2m_state::b2m_mem); maincpu.set_addrmap(AS_IO, &b2m_state::b2m_io); - maincpu.set_vblank_int("screen", FUNC(b2m_state::b2m_vblank_interrupt)); - maincpu.in_inta_func().set("pic8259", FUNC(pic8259_device::acknowledge)); + maincpu.set_vblank_int("screen", FUNC(b2m_state::vblank_interrupt)); + maincpu.in_inta_func().set("pic", FUNC(pic8259_device::acknowledge)); /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); @@ -201,7 +217,7 @@ void b2m_state::b2m(machine_config &config) screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ screen.set_size(384, 256); screen.set_visarea_full(); - screen.set_screen_update(FUNC(b2m_state::screen_update_b2m)); + screen.set_screen_update(FUNC(b2m_state::screen_update)); screen.set_palette(m_palette); PALETTE(config, m_palette, FUNC(b2m_state::b2m_palette), 4); @@ -210,23 +226,23 @@ void b2m_state::b2m(machine_config &config) m_pit->set_clk<0>(0); m_pit->out_handler<0>().set(m_pic, FUNC(pic8259_device::ir1_w)); m_pit->set_clk<1>(2000000); - m_pit->out_handler<1>().set(FUNC(b2m_state::bm2_pit_out1)); + m_pit->out_handler<1>().set(FUNC(b2m_state::pit_out1)); m_pit->set_clk<2>(2000000); m_pit->out_handler<2>().set(m_pit, FUNC(pit8253_device::write_clk0)); - i8255_device &ppi1(I8255(config, "ppi8255_1")); - ppi1.out_pa_callback().set(FUNC(b2m_state::b2m_8255_porta_w)); - ppi1.in_pb_callback().set(FUNC(b2m_state::b2m_8255_portb_r)); - ppi1.out_pb_callback().set(FUNC(b2m_state::b2m_8255_portb_w)); - ppi1.out_pc_callback().set(FUNC(b2m_state::b2m_8255_portc_w)); + i8255_device &ppi1(I8255(config, "ppi1")); + ppi1.out_pa_callback().set(FUNC(b2m_state::ppi1_porta_w)); + ppi1.in_pb_callback().set(FUNC(b2m_state::ppi1_portb_r)); + ppi1.out_pb_callback().set(FUNC(b2m_state::ppi1_portb_w)); + ppi1.out_pc_callback().set(FUNC(b2m_state::ppi1_portc_w)); - i8255_device &ppi2(I8255(config, "ppi8255_2")); - ppi2.out_pc_callback().set(FUNC(b2m_state::b2m_ext_8255_portc_w)); + i8255_device &ppi2(I8255(config, "ppi2")); + ppi2.out_pc_callback().set(FUNC(b2m_state::ppi2_portc_w)); - i8255_device &ppi3(I8255(config, "ppi8255_3")); - ppi3.in_pa_callback().set(FUNC(b2m_state::b2m_romdisk_porta_r)); - ppi3.out_pb_callback().set(FUNC(b2m_state::b2m_romdisk_portb_w)); - ppi3.out_pc_callback().set(FUNC(b2m_state::b2m_romdisk_portc_w)); + i8255_device &ppi3(I8255(config, "ppi3")); + ppi3.in_pa_callback().set(FUNC(b2m_state::romdisk_porta_r)); + ppi3.out_pb_callback().set(FUNC(b2m_state::romdisk_portb_w)); + ppi3.out_pc_callback().set(FUNC(b2m_state::romdisk_portc_w)); PIC8259(config, m_pic, 0); m_pic->out_int_callback().set_inputline(m_maincpu, 0); @@ -239,7 +255,7 @@ void b2m_state::b2m(machine_config &config) I8251(config, "uart", 0); FD1793(config, m_fdc, 8_MHz_XTAL / 8); - m_fdc->drq_wr_callback().set(FUNC(b2m_state::b2m_fdc_drq)); + m_fdc->drq_wr_callback().set(FUNC(b2m_state::fdc_drq)); FLOPPY_CONNECTOR(config, "fd0", b2m_floppies, "525qd", b2m_state::b2m_floppy_formats); FLOPPY_CONNECTOR(config, "fd1", b2m_floppies, "525qd", b2m_state::b2m_floppy_formats); @@ -258,19 +274,19 @@ void b2m_state::b2mrom(machine_config &config) /* ROM definition */ ROM_START( b2m ) - ROM_REGION( 0x12000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "b2m.rom", 0x10000, 0x2000, CRC(3f3214d6) SHA1(dd93e7fbabf14d1aed6777fe1ccfe0a3ca8fcaf2) ) + ROM_REGION( 0x2000, "maincpu", 0 ) + ROM_LOAD( "b2m.rom", 0x0000, 0x2000, CRC(3f3214d6) SHA1(dd93e7fbabf14d1aed6777fe1ccfe0a3ca8fcaf2) ) ROM_END ROM_START( b2mrom ) - ROM_REGION( 0x22000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "bios2.rom", 0x10000, 0x2000, CRC(c22a98b7) SHA1(7de91e653bf4b191ded62cf21532578268e4a2c1) ) - ROM_LOAD( "ramdos.sys", 0x12000, 0x60c0, CRC(91ed6df0) SHA1(4fd040f2647a6b7930c330c75560a035027d0606) ) + ROM_REGION( 0x12000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "bios2.rom", 0x00000, 0x2000, CRC(c22a98b7) SHA1(7de91e653bf4b191ded62cf21532578268e4a2c1) ) + ROM_LOAD( "ramdos.sys", 0x02000, 0x60c0, CRC(91ed6df0) SHA1(4fd040f2647a6b7930c330c75560a035027d0606) ) ROM_END /* Driver */ /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -COMP( 1989, b2m, 0, 0, b2m, b2m, b2m_state, empty_init, "BNPO", "Bashkiria-2M", MACHINE_SUPPORTS_SAVE) -COMP( 1989, b2mrom, b2m, 0, b2mrom, b2m, b2m_state, empty_init, "BNPO", "Bashkiria-2M ROM-disk", MACHINE_SUPPORTS_SAVE) +COMP( 1989, b2m, 0, 0, b2m, b2m, b2m_state, empty_init, "BNPO", "Bashkiria-2M", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE) +COMP( 1989, b2mrom, b2m, 0, b2mrom, b2m, b2m_state, empty_init, "BNPO", "Bashkiria-2M ROM-disk", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE) diff --git a/src/mame/includes/b2m.h b/src/mame/includes/b2m.h index 520a569d9bb..4a677d8e82b 100644 --- a/src/mame/includes/b2m.h +++ b/src/mame/includes/b2m.h @@ -27,62 +27,59 @@ public: : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") , m_speaker(*this, "speaker") - , m_pit(*this, "pit8253") + , m_pit(*this, "pit") , m_ram(*this, RAM_TAG) , m_palette(*this, "palette") - , m_fdc(*this, "fd1793") - , m_fd(*this, "fd%u", 0U) - , m_pic(*this, "pic8259") + , m_fdc(*this, "fdc") + , m_fd(*this, "fdc:%u", 0U) + , m_pic(*this, "pic") { } - uint8_t b2m_keyboard_r(offs_t offset); - void b2m_palette_w(offs_t offset, uint8_t data); - uint8_t b2m_palette_r(offs_t offset); - void b2m_localmachine_w(uint8_t data); - uint8_t b2m_localmachine_r(); - void init_b2m(); - - void b2m_palette(palette_device &palette) const; - uint32_t screen_update_b2m(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(b2m_vblank_interrupt); - DECLARE_WRITE_LINE_MEMBER(bm2_pit_out1); - void b2m_8255_porta_w(uint8_t data); - void b2m_8255_portb_w(uint8_t data); - void b2m_8255_portc_w(uint8_t data); - uint8_t b2m_8255_portb_r(); - void b2m_ext_8255_portc_w(uint8_t data); - uint8_t b2m_romdisk_porta_r(); - void b2m_romdisk_portb_w(uint8_t data); - void b2m_romdisk_portc_w(uint8_t data); - DECLARE_WRITE_LINE_MEMBER(b2m_fdc_drq); - DECLARE_FLOPPY_FORMATS( b2m_floppy_formats ); - void b2mrom(machine_config &config); void b2m(machine_config &config); + +private: + uint8_t keyboard_r(offs_t offset); + void palette_w(offs_t offset, uint8_t data); + uint8_t palette_r(offs_t offset); + void localmachine_w(uint8_t data); + uint8_t localmachine_r(); + + void b2m_palette(palette_device &palette) const; + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + INTERRUPT_GEN_MEMBER(vblank_interrupt); + DECLARE_WRITE_LINE_MEMBER(pit_out1); + void ppi1_porta_w(uint8_t data); + void ppi1_portb_w(uint8_t data); + void ppi1_portc_w(uint8_t data); + uint8_t ppi1_portb_r(); + void ppi2_portc_w(uint8_t data); + uint8_t romdisk_porta_r(); + void romdisk_portb_w(uint8_t data); + void romdisk_portc_w(uint8_t data); + DECLARE_WRITE_LINE_MEMBER(fdc_drq); + DECLARE_FLOPPY_FORMATS( b2m_floppy_formats ); + void b2m_io(address_map &map); void b2m_mem(address_map &map); void b2m_rom_io(address_map &map); -protected: - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; + void machine_start() override; + void machine_reset() override; - void b2m_postload(); - void b2m_set_bank(int bank); + void postload(); + void set_bank(int bank); - uint8_t m_b2m_8255_porta; - uint8_t m_b2m_video_scroll; - uint8_t m_b2m_8255_portc; + uint8_t m_porta; + uint8_t m_video_scroll; + uint8_t m_portc; - uint8_t m_b2m_video_page; - uint8_t m_b2m_drive; - uint8_t m_b2m_side; + uint8_t m_video_page; - uint8_t m_b2m_romdisk_lsb; - uint8_t m_b2m_romdisk_msb; + uint8_t m_romdisk_lsb; + uint8_t m_romdisk_msb; - uint8_t m_b2m_color[4]; - uint8_t m_b2m_localmachine; + uint8_t m_color[4]; + uint8_t m_localmachine; uint8_t m_vblank_state; required_device m_maincpu; required_device m_speaker; diff --git a/src/mame/machine/b2m.cpp b/src/mame/machine/b2m.cpp index 511dfed6fbb..10c892e25db 100644 --- a/src/mame/machine/b2m.cpp +++ b/src/mame/machine/b2m.cpp @@ -11,14 +11,9 @@ #include "emu.h" #include "cpu/i8085/i8085.h" -#include "imagedev/cassette.h" -#include "machine/wd_fdc.h" -#include "machine/pic8259.h" -#include "machine/i8251.h" #include "includes/b2m.h" -#include "machine/ram.h" -uint8_t b2m_state::b2m_keyboard_r(offs_t offset) +uint8_t b2m_state::keyboard_r(offs_t offset) { uint8_t key = 0x00; if (offset < 0x100) { @@ -39,7 +34,7 @@ uint8_t b2m_state::b2m_keyboard_r(offs_t offset) } -void b2m_state::b2m_set_bank(int bank) +void b2m_state::set_bank(int bank) { uint8_t *rom; address_space &space = m_maincpu->space(AS_PROGRAM); @@ -61,7 +56,7 @@ void b2m_state::b2m_set_bank(int bank) membank("bank2")->set_base(ram + 0x2800); membank("bank3")->set_base(ram + 0x3000); membank("bank4")->set_base(ram + 0x7000); - membank("bank5")->set_base(rom + 0x10000); + membank("bank5")->set_base(rom); break; #if 0 case 1 : @@ -70,9 +65,9 @@ void b2m_state::b2m_set_bank(int bank) membank("bank1")->set_base(ram); membank("bank2")->set_base(ram + 0x2800); - membank("bank3")->set_base(rom + 0x12000); - membank("bank4")->set_base(rom + 0x16000); - membank("bank5")->set_base(rom + 0x10000); + membank("bank3")->set_base(rom + 0x2000); + membank("bank4")->set_base(rom + 0x6000); + membank("bank5")->set_base(rom); break; #endif case 2 : @@ -80,30 +75,30 @@ void b2m_state::b2m_set_bank(int bank) space.unmap_write(0xe000, 0xffff); membank("bank1")->set_base(ram); - space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::b2m_keyboard_r))); + space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r))); membank("bank3")->set_base(ram + 0x10000); membank("bank4")->set_base(ram + 0x7000); - membank("bank5")->set_base(rom + 0x10000); + membank("bank5")->set_base(rom); break; case 3 : space.unmap_write(0x2800, 0x2fff); space.unmap_write(0xe000, 0xffff); membank("bank1")->set_base(ram); - space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::b2m_keyboard_r))); + space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r))); membank("bank3")->set_base(ram + 0x14000); membank("bank4")->set_base(ram + 0x7000); - membank("bank5")->set_base(rom + 0x10000); + membank("bank5")->set_base(rom); break; case 4 : space.unmap_write(0x2800, 0x2fff); space.unmap_write(0xe000, 0xffff); membank("bank1")->set_base(ram); - space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::b2m_keyboard_r))); + space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r))); membank("bank3")->set_base(ram + 0x18000); membank("bank4")->set_base(ram + 0x7000); - membank("bank5")->set_base(rom + 0x10000); + membank("bank5")->set_base(rom); break; case 5 : @@ -111,10 +106,10 @@ void b2m_state::b2m_set_bank(int bank) space.unmap_write(0xe000, 0xffff); membank("bank1")->set_base(ram); - space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::b2m_keyboard_r))); + space.install_read_handler(0x2800, 0x2fff, read8sm_delegate(*this, FUNC(b2m_state::keyboard_r))); membank("bank3")->set_base(ram + 0x1c000); membank("bank4")->set_base(ram + 0x7000); - membank("bank5")->set_base(rom + 0x10000); + membank("bank5")->set_base(rom); break; case 6 : @@ -131,44 +126,44 @@ void b2m_state::b2m_set_bank(int bank) space.unmap_write(0x7000, 0xdfff); space.unmap_write(0xe000, 0xffff); - membank("bank1")->set_base(rom + 0x10000); - membank("bank2")->set_base(rom + 0x10000); - membank("bank3")->set_base(rom + 0x10000); - membank("bank4")->set_base(rom + 0x10000); - membank("bank5")->set_base(rom + 0x10000); + membank("bank1")->set_base(rom); + membank("bank2")->set_base(rom); + membank("bank3")->set_base(rom); + membank("bank4")->set_base(rom); + membank("bank5")->set_base(rom); break; } } -WRITE_LINE_MEMBER(b2m_state::bm2_pit_out1) +WRITE_LINE_MEMBER(b2m_state::pit_out1) { m_speaker->level_w(state); } -void b2m_state::b2m_8255_porta_w(uint8_t data) +void b2m_state::ppi1_porta_w(uint8_t data) { - m_b2m_8255_porta = data; + m_porta = data; } -void b2m_state::b2m_8255_portb_w(uint8_t data) +void b2m_state::ppi1_portb_w(uint8_t data) { - m_b2m_video_scroll = data; + m_video_scroll = data; } -void b2m_state::b2m_8255_portc_w(uint8_t data) +void b2m_state::ppi1_portc_w(uint8_t data) { - m_b2m_8255_portc = data; - b2m_set_bank(m_b2m_8255_portc & 7); - m_b2m_video_page = (m_b2m_8255_portc >> 7) & 1; + m_portc = data; + set_bank(m_portc & 7); + m_video_page = BIT(m_portc, 7); } -uint8_t b2m_state::b2m_8255_portb_r() +uint8_t b2m_state::ppi1_portb_r() { - return m_b2m_video_scroll; + return m_video_scroll; } -WRITE_LINE_MEMBER( b2m_state::b2m_fdc_drq ) +WRITE_LINE_MEMBER( b2m_state::fdc_drq ) { /* Clears HALT state of CPU when data is ready to read */ if (state) @@ -176,27 +171,22 @@ WRITE_LINE_MEMBER( b2m_state::b2m_fdc_drq ) } -void b2m_state::b2m_ext_8255_portc_w(uint8_t data) +void b2m_state::ppi2_portc_w(uint8_t data) { - uint8_t drive = ((data >> 1) & 1) ^ 1; - uint8_t side = (data & 1) ^ 1; + uint8_t drive = BIT(~data, 1); + uint8_t side = BIT(~data, 0); floppy_image_device *floppy = nullptr; if (m_fd[drive].found()) floppy = m_fd[drive]->get_device(); - if (floppy != nullptr) + if (floppy) floppy->mon_w(0); m_fdc->set_floppy(floppy); - if (m_b2m_drive!=drive) { - m_b2m_drive = drive; - } - if (m_b2m_side!=side) { - m_b2m_side = side; - if (floppy != nullptr) - floppy->ss_w(side); - } + if (floppy) + floppy->ss_w(side); + /* When bit 5 is set CPU is in HALT state and stay there until DRQ is triggered from floppy side @@ -207,84 +197,75 @@ void b2m_state::b2m_ext_8255_portc_w(uint8_t data) } } -uint8_t b2m_state::b2m_romdisk_porta_r() +uint8_t b2m_state::romdisk_porta_r() { - uint8_t *romdisk = memregion("maincpu")->base() + 0x12000; - return romdisk[m_b2m_romdisk_msb*256+m_b2m_romdisk_lsb]; + uint8_t *romdisk = memregion("maincpu")->base() + 0x2000; + return romdisk[m_romdisk_msb*256+m_romdisk_lsb]; } -void b2m_state::b2m_romdisk_portb_w(uint8_t data) +void b2m_state::romdisk_portb_w(uint8_t data) { - m_b2m_romdisk_lsb = data; + m_romdisk_lsb = data; } -void b2m_state::b2m_romdisk_portc_w(uint8_t data) +void b2m_state::romdisk_portc_w(uint8_t data) { - m_b2m_romdisk_msb = data & 0x7f; + m_romdisk_msb = data & 0x7f; } -/* Driver initialization */ -void b2m_state::init_b2m() +void b2m_state::palette_w(offs_t offset, uint8_t data) { - m_vblank_state = 0; -} + uint8_t b = BIT(~data, 6, 2) * 0x55; + uint8_t g = BIT(~data, 4, 2) * 0x55; + uint8_t r = BIT(~data, 2, 2) * 0x55; -void b2m_state::b2m_palette_w(offs_t offset, uint8_t data) -{ - uint8_t b = (3 - ((data >> 6) & 3)) * 0x55; - uint8_t g = (3 - ((data >> 4) & 3)) * 0x55; - uint8_t r = (3 - ((data >> 2) & 3)) * 0x55; + uint8_t bw = BIT(~data, 0, 2) * 0x55; - uint8_t bw = (3 - (data & 3)) * 0x55; + m_color[offset & 3] = data; - m_b2m_color[offset & 3] = data; - - if (ioport("MONITOR")->read()==1) { + if (ioport("MONITOR")->read()==1) m_palette->set_pen_color(offset, r, g, b); - } else { + else m_palette->set_pen_color(offset, bw, bw, bw); - } } -uint8_t b2m_state::b2m_palette_r(offs_t offset) +uint8_t b2m_state::palette_r(offs_t offset) { - return m_b2m_color[offset]; + return m_color[offset]; } -void b2m_state::b2m_localmachine_w(uint8_t data) +void b2m_state::localmachine_w(uint8_t data) { - m_b2m_localmachine = data; + m_localmachine = data; } -uint8_t b2m_state::b2m_localmachine_r() +uint8_t b2m_state::localmachine_r() { - return m_b2m_localmachine; + return m_localmachine; } -void b2m_state::b2m_postload() +void b2m_state::postload() { - b2m_set_bank(m_b2m_8255_portc & 7); + set_bank(m_portc & 7); } void b2m_state::machine_start() { /* register for state saving */ - save_item(NAME(m_b2m_8255_porta)); - save_item(NAME(m_b2m_video_scroll)); - save_item(NAME(m_b2m_8255_portc)); - save_item(NAME(m_b2m_video_page)); - save_item(NAME(m_b2m_drive)); - save_item(NAME(m_b2m_side)); - save_item(NAME(m_b2m_romdisk_lsb)); - save_item(NAME(m_b2m_romdisk_msb)); - save_pointer(NAME(m_b2m_color), 4); - save_item(NAME(m_b2m_localmachine)); + save_item(NAME(m_porta)); + save_item(NAME(m_video_scroll)); + save_item(NAME(m_portc)); + save_item(NAME(m_video_page)); + save_item(NAME(m_romdisk_lsb)); + save_item(NAME(m_romdisk_msb)); + save_pointer(NAME(m_color), 4); + save_item(NAME(m_localmachine)); save_item(NAME(m_vblank_state)); - machine().save().register_postload(save_prepost_delegate(FUNC(b2m_state::b2m_postload), this)); + machine().save().register_postload(save_prepost_delegate(FUNC(b2m_state::postload), this)); } -INTERRUPT_GEN_MEMBER(b2m_state::b2m_vblank_interrupt) +INTERRUPT_GEN_MEMBER(b2m_state::vblank_interrupt) { m_vblank_state++; if (m_vblank_state>1) m_vblank_state=0; @@ -293,8 +274,52 @@ INTERRUPT_GEN_MEMBER(b2m_state::b2m_vblank_interrupt) void b2m_state::machine_reset() { - m_b2m_side = 0; - m_b2m_drive = 0; - - b2m_set_bank(7); + m_vblank_state = 0; + set_bank(7); +} + +uint32_t b2m_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + uint8_t code1; + uint8_t code2; + uint8_t col; + int y, x, b; + uint8_t *ram = m_ram->pointer(); + + for (x = 0; x < 48; x++) + { + for (y = 0; y < 256; y++) + { + u16 t = x*256 + ((y + m_video_scroll) & 0xff); + if (m_video_page==0) + { + code1 = ram[0x11000 + t]; + code2 = ram[0x15000 + t]; + } + else + { + code1 = ram[0x19000 + t]; + code2 = ram[0x1d000 + t]; + } + for (b = 7; b >= 0; b--) + { + col = (BIT(code2, b)<<1) + BIT(code1, b); + bitmap.pix16(y, x*8+b) = col; + } + } + } + + return 0; +} + +void b2m_state::b2m_palette(palette_device &palette) const +{ + static constexpr rgb_t b2m_pens[4] = { + { 0x00, 0x00, 0x00 }, // 0 + { 0x00, 0x00, 0x00 }, // 1 + { 0x00, 0x00, 0x00 }, // 2 + { 0x00, 0x00, 0x00 }, // 3 + }; + + palette.set_pen_colors(0, b2m_pens); } diff --git a/src/mame/video/b2m.cpp b/src/mame/video/b2m.cpp deleted file mode 100644 index a2c99de3681..00000000000 --- a/src/mame/video/b2m.cpp +++ /dev/null @@ -1,60 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Miodrag Milanovic -/*************************************************************************** - - Bashkiria-2M video driver by Miodrag Milanovic - - 28/03/2008 Preliminary driver. - -****************************************************************************/ - - -#include "emu.h" -#include "includes/b2m.h" -#include "machine/ram.h" - -void b2m_state::video_start() -{ -} - -uint32_t b2m_state::screen_update_b2m(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - uint8_t code1; - uint8_t code2; - uint8_t col; - int y, x, b; - uint8_t *ram = m_ram->pointer(); - - for (x = 0; x < 48; x++) - { - for (y = 0; y < 256; y++) - { - if (m_b2m_video_page==0) { - code1 = ram[0x11000 + x*256 + ((y + m_b2m_video_scroll) & 0xff)]; - code2 = ram[0x15000 + x*256 + ((y + m_b2m_video_scroll) & 0xff)]; - } else { - code1 = ram[0x19000 + x*256 + ((y + m_b2m_video_scroll) & 0xff)]; - code2 = ram[0x1d000 + x*256 + ((y + m_b2m_video_scroll) & 0xff)]; - } - for (b = 7; b >= 0; b--) - { - col = (((code2 >> b) & 0x01)<<1) + ((code1 >> b) & 0x01); - bitmap.pix16(y, x*8+b) = col; - } - } - } - - return 0; -} - -void b2m_state::b2m_palette(palette_device &palette) const -{ - static constexpr rgb_t b2m_pens[4] = { - { 0x00, 0x00, 0x00 }, // 0 - { 0x00, 0x00, 0x00 }, // 1 - { 0x00, 0x00, 0x00 }, // 2 - { 0x00, 0x00, 0x00 }, // 3 - }; - - palette.set_pen_colors(0, b2m_pens); -}