hitachi/bml3.cpp: fix IG RAM debug display, hookup cassette SW list

New working software list items
-------------------------------
bml3_cass: BM Tetris [Anna Wu]
This commit is contained in:
angelosa 2024-09-21 12:38:19 +02:00
parent 5c6b4fbd57
commit 5a081e8579
2 changed files with 33 additions and 6 deletions

23
hash/bml3_cass.xml Normal file
View file

@ -0,0 +1,23 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<!--
license:CC0-1.0
-->
<softwarelist name="bml3_cass" description="Hitachi Basic Master Level 3 cassettes">
<software name="bmtetris" supported="yes">
<description>BM Tetris</description>
<year>1990</year>
<publisher>Sakn Soft</publisher>
<notes><![CDATA[
Runs at 30 Hz in-game (verify, interlace?)
]]></notes>
<info name="usage" value="LOAD, press play on tape then RUN. Requires bml3mk5 (uses IG)." />
<part name="cass" interface="bml3_cass">
<dataarea name="cass" size="5106615">
<!-- NOTE: the original .wav won't mount on MAME, this .flac does -->
<rom name="tetris_all.flac" size="5106615" crc="696ce3a4" sha1="ba94ad716c7ecbf4434b67e1b79cd0e1012caecb"/>
</dataarea>
</part>
</software>
</softwarelist>

View file

@ -38,9 +38,10 @@ TODO:
#include "sound/spkrdev.h"
#include "sound/ymopn.h"
#include "video/mc6845.h"
#include "emupal.h"
#include "emupal.h"
#include "screen.h"
#include "softlist_dev.h"
#include "speaker.h"
@ -223,7 +224,7 @@ protected:
virtual u8 get_attr_mask() override { return 0x3f; }
virtual u8 get_ig_mode(u8 attr) override { return BIT(attr, 5); }
// NOTE: if IG attribute is enabled then the rest of attribute byte is ignored (no reverse etc.).
// TODO: if IGMODREG is 1 then the resulting tile will be a white square
// TODO: if IGMODREG is 1 then the resulting tile will be a white square
virtual u8 get_ig_dots(u8 tile, u8 ra, u8 xi) override {
u16 base_offset = tile << 3;
u8 res = 0;
@ -603,7 +604,7 @@ void bml3mk5_state::ig_ram_w(offs_t offset, u8 data)
if (BIT(m_igen, i))
m_ig_ram[offset + 0x800 * i] = data;
}
m_gfxdecode->gfx(0)->mark_dirty(offset / 8);
m_gfxdecode->gfx(0)->mark_dirty(offset >> 3);
}
void bml3mk5_state::main_map(address_map &map)
@ -1015,16 +1016,16 @@ TIMER_DEVICE_CALLBACK_MEMBER( bml3_state::kansas_w )
static const gfx_layout ig_charlayout =
{
8, 8,
RGN_FRAC(1,3),
0x100,
3,
{ RGN_FRAC(0, 3), RGN_FRAC(1, 3), RGN_FRAC(2, 3) },
{ 0x1000*8, 0x800*8, 0 },
{ STEP8(0, 1) },
{ STEP8(0, 8) },
8*8
};
static GFXDECODE_START( gfx_bml3mk5 )
GFXDECODE_ENTRY( nullptr, 0x1800, ig_charlayout, 0, 1 )
GFXDECODE_ENTRY( nullptr, 0, ig_charlayout, 0, 1 )
GFXDECODE_END
@ -1065,6 +1066,7 @@ void bml3_state::bml3(machine_config &config)
CASSETTE(config, m_cassette);
m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED);
m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05);
m_cassette->set_interface("bml3_cass");
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
@ -1102,6 +1104,8 @@ void bml3_state::bml3(machine_config &config)
BML3BUS_SLOT(config, "sl5", m_bml3bus, bml3_cards, nullptr);
BML3BUS_SLOT(config, "sl6", m_bml3bus, bml3_cards, "kanji");
SOFTWARE_LIST(config, "cass_list").set_original("bml3_cass");
#if 0
// TODO: slot device for sound card
// audio