lviv: small cleanup

This commit is contained in:
Robbbert 2020-07-29 04:18:33 +10:00
parent 4859bc6bec
commit c6ee58ffac
4 changed files with 64 additions and 59 deletions

View File

@ -280,6 +280,7 @@ Timings:
b: only if the CPU is requesting a RAM write
c: only if the CPU is requesting a RAM read
*******************************************************************************/
#include "emu.h"
@ -287,7 +288,6 @@ Timings:
#include "cpu/i8085/i8085.h"
#include "softlist.h"
#include "speaker.h"
#include "formats/lviv_lvt.h"
@ -429,20 +429,20 @@ void lviv_state::lviv(machine_config &config)
config.set_maximum_quantum(attotime::from_hz(60));
I8255(config, m_ppi[0]);
m_ppi[0]->in_pa_callback().set(FUNC(lviv_state::ppi_0_porta_r));
m_ppi[0]->out_pa_callback().set(FUNC(lviv_state::ppi_0_porta_w));
m_ppi[0]->in_pb_callback().set(FUNC(lviv_state::ppi_0_portb_r));
m_ppi[0]->out_pb_callback().set(FUNC(lviv_state::ppi_0_portb_w));
m_ppi[0]->in_pc_callback().set(FUNC(lviv_state::ppi_0_portc_r));
m_ppi[0]->out_pc_callback().set(FUNC(lviv_state::ppi_0_portc_w));
m_ppi[0]->in_pa_callback().set(FUNC(lviv_state::ppi0_porta_r));
m_ppi[0]->out_pa_callback().set(FUNC(lviv_state::ppi0_porta_w));
m_ppi[0]->in_pb_callback().set(FUNC(lviv_state::ppi0_portb_r));
m_ppi[0]->out_pb_callback().set(FUNC(lviv_state::ppi0_portb_w));
m_ppi[0]->in_pc_callback().set(FUNC(lviv_state::ppi0_portc_r));
m_ppi[0]->out_pc_callback().set(FUNC(lviv_state::ppi0_portc_w));
I8255(config, m_ppi[1]);
m_ppi[1]->in_pa_callback().set(FUNC(lviv_state::ppi_1_porta_r));
m_ppi[1]->out_pa_callback().set(FUNC(lviv_state::ppi_1_porta_w));
m_ppi[1]->in_pb_callback().set(FUNC(lviv_state::ppi_1_portb_r));
m_ppi[1]->out_pb_callback().set(FUNC(lviv_state::ppi_1_portb_w));
m_ppi[1]->in_pc_callback().set(FUNC(lviv_state::ppi_1_portc_r));
m_ppi[1]->out_pc_callback().set(FUNC(lviv_state::ppi_1_portc_w));
m_ppi[1]->in_pa_callback().set(FUNC(lviv_state::ppi1_porta_r));
m_ppi[1]->out_pa_callback().set(FUNC(lviv_state::ppi1_porta_w));
m_ppi[1]->in_pb_callback().set(FUNC(lviv_state::ppi1_portb_r));
m_ppi[1]->out_pb_callback().set(FUNC(lviv_state::ppi1_portb_w));
m_ppi[1]->in_pc_callback().set(FUNC(lviv_state::ppi1_portc_r));
m_ppi[1]->out_pc_callback().set(FUNC(lviv_state::ppi1_portc_w));
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
@ -476,14 +476,14 @@ void lviv_state::lviv(machine_config &config)
ROM_START(lviv)
ROM_REGION(0x14000,"maincpu",0)
ROM_REGION(0x4000,"maincpu",0)
ROM_SYSTEM_BIOS( 0, "lviv", "Lviv/L'vov" )
ROMX_LOAD("lviv.bin", 0x10000, 0x4000, CRC(44a347d9) SHA1(74e067493b2b7d9ab17333202009a1a4f5e460fd), ROM_BIOS(0))
ROMX_LOAD("lviv.bin", 0x0000, 0x4000, CRC(44a347d9) SHA1(74e067493b2b7d9ab17333202009a1a4f5e460fd), ROM_BIOS(0))
ROM_SYSTEM_BIOS( 1, "lviva", "Lviv/L'vov (alternate)" )
ROMX_LOAD("lviva.bin", 0x10000, 0x4000, CRC(551622f5) SHA1(b225f3542b029d767b7db9dce562e8a3f77f92a2), ROM_BIOS(1))
ROMX_LOAD("lviva.bin", 0x0000, 0x4000, CRC(551622f5) SHA1(b225f3542b029d767b7db9dce562e8a3f77f92a2), ROM_BIOS(1))
ROM_SYSTEM_BIOS( 2, "lvivp", "Lviv/L'vov (prototype)" )
ROMX_LOAD("lvivp.bin", 0x10000, 0x4000, CRC(f171c282) SHA1(c7dc2bdb02400e6b5cdcc50040eb06f506a7ed84), ROM_BIOS(2))
ROMX_LOAD("lvivp.bin", 0x0000, 0x4000, CRC(f171c282) SHA1(c7dc2bdb02400e6b5cdcc50040eb06f506a7ed84), ROM_BIOS(2))
ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
COMP( 1989, lviv, 0, 0, lviv, lviv, lviv_state, empty_init, "V. I. Lenin", "PK-01 Lviv", 0 )
COMP( 1989, lviv, 0, 0, lviv, lviv, lviv_state, empty_init, "V. I. Lenin", "PK-01 Lviv", MACHINE_SUPPORTS_SAVE )

View File

@ -41,7 +41,8 @@ public:
DECLARE_INPUT_CHANGED_MEMBER(reset_button);
private:
virtual void machine_reset() override;
void machine_reset() override;
void machine_start() override;
void lviv_palette(palette_device &palette) const;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@ -49,19 +50,19 @@ private:
uint8_t io_r(offs_t offset);
void io_w(offs_t offset, uint8_t data);
uint8_t ppi_0_porta_r();
uint8_t ppi_0_portb_r();
uint8_t ppi_0_portc_r();
uint8_t ppi_1_porta_r();
uint8_t ppi_1_portb_r();
uint8_t ppi_1_portc_r();
uint8_t ppi0_porta_r();
uint8_t ppi0_portb_r();
uint8_t ppi0_portc_r();
uint8_t ppi1_porta_r();
uint8_t ppi1_portb_r();
uint8_t ppi1_portc_r();
void ppi_0_porta_w(uint8_t data);
void ppi_0_portb_w(uint8_t data);
void ppi_0_portc_w(uint8_t data);
void ppi_1_porta_w(uint8_t data);
void ppi_1_portb_w(uint8_t data);
void ppi_1_portc_w(uint8_t data);
void ppi0_porta_w(uint8_t data);
void ppi0_portb_w(uint8_t data);
void ppi0_portc_w(uint8_t data);
void ppi1_porta_w(uint8_t data);
void ppi1_portb_w(uint8_t data);
void ppi1_portc_w(uint8_t data);
DECLARE_SNAPSHOT_LOAD_MEMBER(snapshot_cb);
@ -87,7 +88,7 @@ private:
required_ioport_array<12> m_key;
required_ioport m_joy_port;
uint8_t* m_video_ram;
uint8_t* m_vram;
uint16_t m_colortable[1][4];
uint8_t m_ppi_port_outputs[2][3];
uint8_t m_startup_mem_map;

View File

@ -24,7 +24,7 @@ void lviv_state::update_memory()
{
uint8_t *ram = m_ram->pointer();
if (m_ppi_port_outputs[0][2] & 0x02)
if (BIT(m_ppi_port_outputs[0][2], 1))
{
m_bank[0]->set_base(ram);
m_bank[1]->set_base(ram + 0x4000);
@ -41,17 +41,17 @@ INPUT_CHANGED_MEMBER(lviv_state::reset_button)
machine().schedule_soft_reset();
}
uint8_t lviv_state::ppi_0_porta_r()
uint8_t lviv_state::ppi0_porta_r()
{
return 0xff;
}
uint8_t lviv_state::ppi_0_portb_r()
uint8_t lviv_state::ppi0_portb_r()
{
return 0xff;
}
uint8_t lviv_state::ppi_0_portc_r()
uint8_t lviv_state::ppi0_portc_r()
{
uint8_t data = m_ppi_port_outputs[0][2] & 0x0f;
if (m_cassette->input() > 0.038)
@ -61,32 +61,32 @@ uint8_t lviv_state::ppi_0_portc_r()
return data;
}
void lviv_state::ppi_0_porta_w(uint8_t data)
void lviv_state::ppi0_porta_w(uint8_t data)
{
m_ppi_port_outputs[0][0] = data;
}
void lviv_state::ppi_0_portb_w(uint8_t data)
void lviv_state::ppi0_portb_w(uint8_t data)
{
m_ppi_port_outputs[0][1] = data;
update_palette(data&0x7f);
}
void lviv_state::ppi_0_portc_w(uint8_t data)/* tape in/out, video memory on/off */
void lviv_state::ppi0_portc_w(uint8_t data)/* tape in/out, video memory on/off */
{
m_ppi_port_outputs[0][2] = data;
if (m_ppi_port_outputs[0][1]&0x80)
m_speaker->level_w(data & 0x01);
m_cassette->output((data & 0x01) ? -1.0 : 1.0);
if (BIT(m_ppi_port_outputs[0][1], 7))
m_speaker->level_w(BIT(data, 0));
m_cassette->output(BIT(data, 0) ? -1.0 : 1.0);
update_memory();
}
uint8_t lviv_state::ppi_1_porta_r()
uint8_t lviv_state::ppi1_porta_r()
{
return 0xff;
}
uint8_t lviv_state::ppi_1_portb_r()/* keyboard reading */
uint8_t lviv_state::ppi1_portb_r()/* keyboard reading */
{
return ((m_ppi_port_outputs[1][0] & 0x01) ? 0xff : m_key[0]->read()) &
((m_ppi_port_outputs[1][0] & 0x02) ? 0xff : m_key[1]->read()) &
@ -98,7 +98,7 @@ uint8_t lviv_state::ppi_1_portb_r()/* keyboard reading */
((m_ppi_port_outputs[1][0] & 0x80) ? 0xff : m_key[7]->read());
}
uint8_t lviv_state::ppi_1_portc_r()/* keyboard reading */
uint8_t lviv_state::ppi1_portc_r()/* keyboard reading */
{
return ((m_ppi_port_outputs[1][2] & 0x01) ? 0xff : m_key[ 8]->read()) &
((m_ppi_port_outputs[1][2] & 0x02) ? 0xff : m_key[ 9]->read()) &
@ -106,17 +106,17 @@ uint8_t lviv_state::ppi_1_portc_r()/* keyboard reading */
((m_ppi_port_outputs[1][2] & 0x08) ? 0xff : m_key[11]->read());
}
void lviv_state::ppi_1_porta_w(uint8_t data)/* kayboard scaning */
void lviv_state::ppi1_porta_w(uint8_t data)/* kayboard scanning */
{
m_ppi_port_outputs[1][0] = data;
}
void lviv_state::ppi_1_portb_w(uint8_t data)
void lviv_state::ppi1_portb_w(uint8_t data)
{
m_ppi_port_outputs[1][1] = data;
}
void lviv_state::ppi_1_portc_w(uint8_t data)/* kayboard scaning */
void lviv_state::ppi1_portc_w(uint8_t data)/* kayboard scanning */
{
m_ppi_port_outputs[1][2] = data;
}
@ -131,7 +131,7 @@ uint8_t lviv_state::io_r(offs_t offset)
}
else
{
const uint8_t switch_val = (offset >> 4) & 0x3;
const uint8_t switch_val = BIT(offset, 4, 2);
switch (switch_val)
{
case 0:
@ -164,11 +164,11 @@ void lviv_state::io_w(offs_t offset, uint8_t data)
m_bank[0]->set_base(ram);
m_bank[1]->set_base(ram + 0x4000);
m_bank[2]->set_base(ram + 0x8000);
m_bank[3]->set_base(m_maincpu_region->base() + 0x010000);
m_bank[3]->set_base(m_maincpu_region->base());
}
else
{
const uint8_t switch_val = (offset >> 4) & 0x3;
const uint8_t switch_val = BIT(offset, 4, 2);
switch (switch_val)
{
case 0:
@ -189,7 +189,7 @@ void lviv_state::machine_reset()
{
address_space &space = m_maincpu->space(AS_PROGRAM);
m_video_ram = m_ram->pointer() + 0xc000;
m_vram = m_ram->pointer() + 0xc000;
m_startup_mem_map = 1;
@ -199,14 +199,18 @@ void lviv_state::machine_reset()
space.unmap_write(0xC000, 0xffff);
uint8_t *mem = m_maincpu_region->base();
m_bank[0]->set_base(mem + 0x010000);
m_bank[1]->set_base(mem + 0x010000);
m_bank[2]->set_base(mem + 0x010000);
m_bank[3]->set_base(mem + 0x010000);
/*memset(m_ram->pointer(), 0, sizeof(unsigned char)*0xffff);*/
m_bank[0]->set_base(mem);
m_bank[1]->set_base(mem);
m_bank[2]->set_base(mem);
m_bank[3]->set_base(mem);
}
void lviv_state::machine_start()
{
save_item(NAME(m_colortable));
save_item(NAME(m_ppi_port_outputs));
save_item(NAME(m_startup_mem_map));
}
/*******************************************************************************
Lviv snapshot files (SAV)

View File

@ -62,7 +62,7 @@ uint32_t lviv_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
{
for (int x = 0; x < 256; x += 4)
{
const uint8_t data = m_video_ram[(y << 6) | (x >> 2)];
const uint8_t data = m_vram[(y << 6) | (x >> 2)];
int pen = m_colortable[0][((data & 0x08) >> 3) | ((data & 0x80) >> (3+3))];
bitmap.pix16(y, x + 0) = pen;