diff options
Diffstat (limited to 'src/mame/machine/b2m.cpp')
-rw-r--r-- | src/mame/machine/b2m.cpp | 322 |
1 files changed, 0 insertions, 322 deletions
diff --git a/src/mame/machine/b2m.cpp b/src/mame/machine/b2m.cpp deleted file mode 100644 index fae7b699f9c..00000000000 --- a/src/mame/machine/b2m.cpp +++ /dev/null @@ -1,322 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Miodrag Milanovic -/*************************************************************************** - - Bashkiria-2M machine driver by Miodrag Milanovic - - 28/03/2008 Preliminary driver. - -****************************************************************************/ - - -#include "emu.h" -#include "cpu/i8085/i8085.h" -#include "includes/b2m.h" - -uint8_t b2m_state::keyboard_r(offs_t offset) -{ - uint8_t key = 0x00; - if (offset < 0x100) { - if ((offset & 0x01)!=0) { key |= ioport("LINE0")->read(); } - if ((offset & 0x02)!=0) { key |= ioport("LINE1")->read(); } - if ((offset & 0x04)!=0) { key |= ioport("LINE2")->read(); } - if ((offset & 0x08)!=0) { key |= ioport("LINE3")->read(); } - if ((offset & 0x10)!=0) { key |= ioport("LINE4")->read(); } - if ((offset & 0x20)!=0) { key |= ioport("LINE5")->read(); } - if ((offset & 0x40)!=0) { key |= ioport("LINE6")->read(); } - if ((offset & 0x80)!=0) { key |= ioport("LINE7")->read(); } - } else { - if ((offset & 0x01)!=0) { key |= ioport("LINE8")->read(); } - if ((offset & 0x02)!=0) { key |= ioport("LINE9")->read(); } - if ((offset & 0x04)!=0) { key |= ioport("LINE10")->read(); } - } - return key; -} - - -void b2m_state::set_bank(int bank) -{ - uint8_t *rom; - address_space &space = m_maincpu->space(AS_PROGRAM); - uint8_t *ram = m_ram->pointer(); - - space.install_write_bank(0x0000, 0x27ff, "bank1"); - space.install_write_bank(0x2800, 0x2fff, "bank2"); - space.install_write_bank(0x3000, 0x6fff, "bank3"); - space.install_write_bank(0x7000, 0xdfff, "bank4"); - space.install_write_bank(0xe000, 0xffff, "bank5"); - - rom = memregion("maincpu")->base(); - switch(bank) { - case 0 : - case 1 : - space.unmap_write(0xe000, 0xffff); - - membank("bank1")->set_base(ram); - membank("bank2")->set_base(ram + 0x2800); - membank("bank3")->set_base(ram + 0x3000); - membank("bank4")->set_base(ram + 0x7000); - membank("bank5")->set_base(rom); - break; -#if 0 - case 1 : - space.unmap_write(0x3000, 0x6fff); - space.unmap_write(0xe000, 0xffff); - - membank("bank1")->set_base(ram); - membank("bank2")->set_base(ram + 0x2800); - membank("bank3")->set_base(rom + 0x2000); - membank("bank4")->set_base(rom + 0x6000); - membank("bank5")->set_base(rom); - break; -#endif - case 2 : - 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::keyboard_r))); - membank("bank3")->set_base(ram + 0x10000); - membank("bank4")->set_base(ram + 0x7000); - 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::keyboard_r))); - membank("bank3")->set_base(ram + 0x14000); - membank("bank4")->set_base(ram + 0x7000); - 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::keyboard_r))); - membank("bank3")->set_base(ram + 0x18000); - membank("bank4")->set_base(ram + 0x7000); - membank("bank5")->set_base(rom); - - break; - case 5 : - 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::keyboard_r))); - membank("bank3")->set_base(ram + 0x1c000); - membank("bank4")->set_base(ram + 0x7000); - membank("bank5")->set_base(rom); - - break; - case 6 : - membank("bank1")->set_base(ram); - membank("bank2")->set_base(ram + 0x2800); - membank("bank3")->set_base(ram + 0x3000); - membank("bank4")->set_base(ram + 0x7000); - membank("bank5")->set_base(ram + 0xe000); - break; - case 7 : - space.unmap_write(0x0000, 0x27ff); - space.unmap_write(0x2800, 0x2fff); - space.unmap_write(0x3000, 0x6fff); - space.unmap_write(0x7000, 0xdfff); - space.unmap_write(0xe000, 0xffff); - - 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::pit_out1) -{ - m_speaker->level_w(state); -} - -void b2m_state::ppi1_porta_w(uint8_t data) -{ - m_porta = data; -} - -void b2m_state::ppi1_portb_w(uint8_t data) -{ - m_video_scroll = data; -} - -void b2m_state::ppi1_portc_w(uint8_t data) -{ - m_portc = data; - set_bank(m_portc & 7); - m_video_page = BIT(m_portc, 7); -} - -uint8_t b2m_state::ppi1_portb_r() -{ - return m_video_scroll; -} - -WRITE_LINE_MEMBER( b2m_state::fdc_drq ) -{ - /* Clears HALT state of CPU when data is ready to read */ - if (state) - m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); -} - - -void b2m_state::ppi2_portc_w(uint8_t data) -{ - 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) - floppy->mon_w(0); - m_fdc->set_floppy(floppy); - - 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 - */ - - if ((data & 0xf0)==0x20) { - m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); - } -} - -uint8_t b2m_state::romdisk_porta_r() -{ - uint8_t *romdisk = memregion("maincpu")->base() + 0x2000; - return romdisk[m_romdisk_msb*256+m_romdisk_lsb]; -} - -void b2m_state::romdisk_portb_w(uint8_t data) -{ - m_romdisk_lsb = data; -} - -void b2m_state::romdisk_portc_w(uint8_t data) -{ - m_romdisk_msb = data & 0x7f; -} - -void b2m_state::palette_w(offs_t offset, uint8_t data) -{ - uint8_t b = BIT(~data, 6, 2) * 0x55; - uint8_t g = BIT(~data, 4, 2) * 0x55; - uint8_t r = BIT(~data, 2, 2) * 0x55; - - uint8_t bw = BIT(~data, 0, 2) * 0x55; - - m_color[offset & 3] = data; - - if (ioport("MONITOR")->read()==1) - m_palette->set_pen_color(offset, r, g, b); - else - m_palette->set_pen_color(offset, bw, bw, bw); -} - -uint8_t b2m_state::palette_r(offs_t offset) -{ - return m_color[offset]; -} - -void b2m_state::localmachine_w(uint8_t data) -{ - m_localmachine = data; -} - -uint8_t b2m_state::localmachine_r() -{ - return m_localmachine; -} - -void b2m_state::postload() -{ - set_bank(m_portc & 7); -} - -void b2m_state::machine_start() -{ - /* register for state saving */ - 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::postload), this)); -} - -INTERRUPT_GEN_MEMBER(b2m_state::vblank_interrupt) -{ - m_vblank_state++; - if (m_vblank_state>1) m_vblank_state=0; - m_pic->ir0_w(m_vblank_state); -} - -void b2m_state::machine_reset() -{ - m_vblank_state = 0; - set_bank(7); -} - -uint32_t b2m_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - u8 const *const ram = m_ram->pointer(); - - for (int x = 0; x < 48; x++) - { - for (int y = 0; y < 256; y++) - { - u16 const t = x*256 + ((y + m_video_scroll) & 0xff); - u8 code1, code2; - if (m_video_page==0) - { - code1 = ram[0x11000 + t]; - code2 = ram[0x15000 + t]; - } - else - { - code1 = ram[0x19000 + t]; - code2 = ram[0x1d000 + t]; - } - for (int b = 7; b >= 0; b--) - { - u8 const col = (BIT(code2, b)<<1) + BIT(code1, b); - bitmap.pix(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); -} |