summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/poisk1.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/poisk1.cpp')
-rw-r--r--src/mame/drivers/poisk1.cpp272
1 files changed, 141 insertions, 131 deletions
diff --git a/src/mame/drivers/poisk1.cpp b/src/mame/drivers/poisk1.cpp
index 7fd8d30d95c..b55015e01db 100644
--- a/src/mame/drivers/poisk1.cpp
+++ b/src/mame/drivers/poisk1.cpp
@@ -2,9 +2,9 @@
// copyright-holders:Sergey Svishchev
/***************************************************************************
- drivers/poisk1.c
+ drivers/poisk1.c
- Driver file for Poisk-1
+ Driver file for Poisk-1
***************************************************************************/
@@ -29,7 +29,7 @@
#define CGA_PALETTE_SETS 83
/* one for colour, one for mono, 81 for colour composite */
-#define BG_COLOR(x) (((x) & 7)|(((x) & 0x10) >> 1))
+#define BG_COLOR(x) (((x)&7) | (((x)&0x10) >> 1))
#define VERBOSE_DBG 0
@@ -50,26 +50,27 @@ class p1_state : public driver_device
{
public:
p1_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_pic8259(*this, "pic8259"),
- m_pit8253(*this, "pit8253"),
- m_ppi8255n1(*this, "ppi8255n1"),
- m_ppi8255n2(*this, "ppi8255n2"),
- m_isabus(*this, "isa"),
- m_speaker(*this, "speaker"),
- m_cassette(*this, "cassette"),
- m_ram(*this, RAM_TAG),
- m_palette(*this, "palette") { }
-
- required_device<cpu_device> m_maincpu;
- required_device<pic8259_device> m_pic8259;
- required_device<pit8253_device> m_pit8253;
- required_device<i8255_device> m_ppi8255n1;
- required_device<i8255_device> m_ppi8255n2;
- required_device<isa8_device> m_isabus;
- required_device<speaker_sound_device> m_speaker;
- required_device<cassette_image_device> m_cassette;
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_pic8259(*this, "pic8259")
+ , m_pit8253(*this, "pit8253")
+ , m_ppi8255n1(*this, "ppi8255n1")
+ , m_ppi8255n2(*this, "ppi8255n2")
+ , m_isabus(*this, "isa")
+ , m_speaker(*this, "speaker")
+ , m_cassette(*this, "cassette")
+ , m_ram(*this, RAM_TAG)
+ , m_palette(*this, "palette")
+ { }
+
+ required_device<cpu_device> m_maincpu;
+ required_device<pic8259_device> m_pic8259;
+ required_device<pit8253_device> m_pit8253;
+ required_device<i8255_device> m_ppi8255n1;
+ required_device<i8255_device> m_ppi8255n2;
+ required_device<isa8_device> m_isabus;
+ required_device<speaker_sound_device> m_speaker;
+ required_device<cassette_image_device> m_cassette;
required_device<ram_device> m_ram;
required_device<palette_device> m_palette;
@@ -139,22 +140,21 @@ public:
READ8_MEMBER(p1_state::p1_trap_r)
{
uint8_t data = m_video.trap[offset];
- DBG_LOG(1,"trap",("R %.2x $%02x\n", 0x28+offset, data));
- if (offset == 0)
- m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
+ DBG_LOG(1, "trap", ("R %.2x $%02x\n", 0x28 + offset, data));
+ if (offset == 0) m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
return data;
}
WRITE8_MEMBER(p1_state::p1_trap_w)
{
- DBG_LOG(1,"trap",("W %.2x $%02x\n", 0x28+offset, data));
+ DBG_LOG(1, "trap", ("W %.2x $%02x\n", 0x28 + offset, data));
}
READ8_MEMBER(p1_state::p1_cga_r)
{
uint16_t port = offset + 0x3d0;
- DBG_LOG(1,"cga",("R %.4x\n", port));
+ DBG_LOG(1, "cga", ("R %.4x\n", port));
m_video.trap[1] = 0x40 | ((port >> 8) & 0x3f);
m_video.trap[0] = port & 255;
m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
@@ -165,7 +165,7 @@ WRITE8_MEMBER(p1_state::p1_cga_w)
{
uint16_t port = offset + 0x3d0;
- DBG_LOG(1,"cga",("W %.4x $%02x\n", port, data));
+ DBG_LOG(1, "cga", ("W %.4x $%02x\n", port, data));
m_video.trap[2] = data;
m_video.trap[1] = 0xC0 | ((port >> 8) & 0x3f);
m_video.trap[0] = port & 255;
@@ -174,9 +174,8 @@ WRITE8_MEMBER(p1_state::p1_cga_w)
WRITE8_MEMBER(p1_state::p1_vram_w)
{
- DBG_LOG(1,"vram",("W %.4x $%02x\n", offset, data));
- if (m_video.videoram_base)
- m_video.videoram_base[offset] = data;
+ DBG_LOG(1, "vram", ("W %.4x $%02x\n", offset, data));
+ if (m_video.videoram_base) m_video.videoram_base[offset] = data;
m_video.trap[2] = data;
m_video.trap[1] = 0x80 | ((offset >> 8) & 0x3f);
m_video.trap[0] = offset & 255;
@@ -197,31 +196,37 @@ WRITE8_MEMBER(p1_state::p1_ppi2_porta_w)
{
address_space &program = m_maincpu->space(AS_PROGRAM);
- DBG_LOG(1,"color_select_68",("W $%02x\n", data));
+ DBG_LOG(1, "color_select_68", ("W $%02x\n", data));
// NMI DISABLE
- if (BIT((data ^ m_video.color_select_68), 3)) {
- program.unmap_readwrite( 0xb8000, 0xbbfff, 0 );
- if (BIT(data, 3)) {
- program.install_readwrite_bank( 0xb8000, 0xbbfff, "bank11" );
- } else {
- program.install_read_bank( 0xb8000, 0xbbfff, "bank11" );
- program.install_write_handler( 0xb8000, 0xbbfff, WRITE8_DELEGATE(p1_state, p1_vram_w) );
+ if (BIT((data ^ m_video.color_select_68), 3))
+ {
+ program.unmap_readwrite(0xb8000, 0xbbfff, 0);
+ if (BIT(data, 3))
+ {
+ program.install_readwrite_bank(0xb8000, 0xbbfff, "bank11");
+ }
+ else
+ {
+ program.install_read_bank(0xb8000, 0xbbfff, "bank11");
+ program.install_write_handler(0xb8000, 0xbbfff, WRITE8_DELEGATE(p1_state, p1_vram_w));
}
}
// DISPLAY BANK
- if (BIT((data ^ m_video.color_select_68), 6)) {
+ if (BIT((data ^ m_video.color_select_68), 6))
+ {
if (BIT(data, 6))
m_video.videoram = m_video.videoram_base.get() + 0x4000;
else
m_video.videoram = m_video.videoram_base.get();
}
// HIRES -- XXX
- if (BIT((data ^ m_video.color_select_68), 7)) {
+ if (BIT((data ^ m_video.color_select_68), 7))
+ {
if (BIT(data, 7))
- machine().first_screen()->set_visible_area(0, 640-1, 0, 200-1);
+ machine().first_screen()->set_visible_area(0, 640 - 1, 0, 200 - 1);
else
- machine().first_screen()->set_visible_area(0, 320-1, 0, 200-1);
+ machine().first_screen()->set_visible_area(0, 320 - 1, 0, 200 - 1);
}
m_video.color_select_68 = data;
set_palette_luts();
@@ -229,12 +234,12 @@ WRITE8_MEMBER(p1_state::p1_ppi2_porta_w)
/*
06Ah Dxx 6 Enable/Disable color burst (?)
- 7 Enable/Disable D7H/D7L
+ 7 Enable/Disable D7H/D7L
*/
WRITE8_MEMBER(p1_state::p1_ppi_portc_w)
{
- DBG_LOG(1,"mode_control_6a",("W $%02x\n", data));
+ DBG_LOG(1, "mode_control_6a", ("W $%02x\n", data));
m_video.mode_control_6a = data;
set_palette_luts();
@@ -244,7 +249,7 @@ void p1_state::set_palette_luts(void)
{
/* Setup 2bpp palette lookup table */
// HIRES
- if ( m_video.color_select_68 & 0x80 )
+ if (m_video.color_select_68 & 0x80)
{
m_video.palette_lut_2bpp[0] = 0;
}
@@ -285,17 +290,17 @@ void p1_state::set_palette_luts(void)
cga fetches 2 byte per mc6845 access.
***************************************************************************/
-POISK1_UPDATE_ROW( p1_state::cga_gfx_2bpp_update_row )
+POISK1_UPDATE_ROW(p1_state::cga_gfx_2bpp_update_row)
{
const rgb_t *palette = m_palette->palette()->entry_list_raw();
- uint32_t *p = &bitmap.pix32(ra);
- uint16_t odd, offset;
+ uint32_t *p = &bitmap.pix32(ra);
+ uint16_t odd, offset;
int i;
- if ( ra == 0 ) DBG_LOG(1,"cga_gfx_2bpp_update_row",("\n"));
- odd = ( ra & 1 ) << 13;
- offset = ( ma & 0x1fff ) | odd;
- for ( i = 0; i < stride; i++ )
+ if (ra == 0) DBG_LOG(1, "cga_gfx_2bpp_update_row", ("\n"));
+ odd = (ra & 1) << 13;
+ offset = (ma & 0x1fff) | odd;
+ for (i = 0; i < stride; i++)
{
uint8_t data = videoram[ offset++ ];
@@ -312,18 +317,18 @@ POISK1_UPDATE_ROW( p1_state::cga_gfx_2bpp_update_row )
Even scanlines are from CGA_base + 0x0000, odd from CGA_base + 0x2000
***************************************************************************/
-POISK1_UPDATE_ROW( p1_state::cga_gfx_1bpp_update_row )
+POISK1_UPDATE_ROW(p1_state::cga_gfx_1bpp_update_row)
{
const rgb_t *palette = m_palette->palette()->entry_list_raw();
- uint32_t *p = &bitmap.pix32(ra);
- uint8_t fg = 15, bg = BG_COLOR(m_video.color_select_68);
- uint16_t odd, offset;
+ uint32_t *p = &bitmap.pix32(ra);
+ uint8_t fg = 15, bg = BG_COLOR(m_video.color_select_68);
+ uint16_t odd, offset;
int i;
- if ( ra == 0 ) DBG_LOG(1,"cga_gfx_1bpp_update_row",("bg %d\n", bg));
- odd = ( ra & 1 ) << 13;
- offset = ( ma & 0x1fff ) | odd;
- for ( i = 0; i < stride; i++ )
+ if (ra == 0) DBG_LOG(1, "cga_gfx_1bpp_update_row", ("bg %d\n", bg));
+ odd = (ra & 1) << 13;
+ offset = (ma & 0x1fff) | odd;
+ for (i = 0; i < stride; i++)
{
uint8_t data = videoram[ offset++ ];
@@ -344,18 +349,18 @@ POISK1_UPDATE_ROW( p1_state::cga_gfx_1bpp_update_row )
Even scanlines are from CGA_base + 0x0000, odd from CGA_base + 0x2000
***************************************************************************/
-POISK1_UPDATE_ROW( p1_state::poisk1_gfx_1bpp_update_row )
+POISK1_UPDATE_ROW(p1_state::poisk1_gfx_1bpp_update_row)
{
const rgb_t *palette = m_palette->palette()->entry_list_raw();
- uint32_t *p = &bitmap.pix32(ra);
- uint8_t fg, bg = BG_COLOR(m_video.color_select_68);
- uint16_t odd, offset;
+ uint32_t *p = &bitmap.pix32(ra);
+ uint8_t fg, bg = BG_COLOR(m_video.color_select_68);
+ uint16_t odd, offset;
int i;
- if ( ra == 0 ) DBG_LOG(1,"poisk1_gfx_1bpp_update_row",("bg %d\n", bg));
- odd = ( ra & 1 ) << 13;
- offset = ( ma & 0x1fff ) | odd;
- for ( i = 0; i < stride; i++ )
+ if (ra == 0) DBG_LOG(1, "poisk1_gfx_1bpp_update_row", ("bg %d\n", bg));
+ odd = (ra & 1) << 13;
+ offset = (ma & 0x1fff) | odd;
+ for (i = 0; i < stride; i++)
{
uint8_t data = videoram[ offset++ ];
@@ -376,28 +381,28 @@ PALETTE_INIT_MEMBER(p1_state, p1)
{
int i;
- DBG_LOG(0,"init",("palette_init()\n"));
+ DBG_LOG(0, "init", ("palette_init()\n"));
- for ( i = 0; i < CGA_PALETTE_SETS * 16; i++ )
+ for (i = 0; i < CGA_PALETTE_SETS * 16; i++)
{
- palette.set_pen_color(i, cga_palette[i][0], cga_palette[i][1], cga_palette[i][2] );
+ palette.set_pen_color(i, cga_palette[i][0], cga_palette[i][1], cga_palette[i][2]);
}
}
void p1_state::video_start()
{
- address_space &space = m_maincpu->space( AS_PROGRAM );
+ address_space &space = m_maincpu->space(AS_PROGRAM);
- DBG_LOG(0,"init",("video_start()\n"));
+ DBG_LOG(0, "init", ("video_start()\n"));
memset(&m_video, 0, sizeof(m_video));
m_video.videoram_base = std::make_unique<uint8_t[]>(0x8000);
m_video.videoram = m_video.videoram_base.get();
m_video.stride = 80;
- space.install_readwrite_bank(0xb8000, 0xbbfff, "bank11" );
+ space.install_readwrite_bank(0xb8000, 0xbbfff, "bank11");
machine().root_device().membank("bank11")->set_base(m_video.videoram);
- space.install_readwrite_bank(0xbc000, 0xbffff, "bank12" );
+ space.install_readwrite_bank(0xbc000, 0xbffff, "bank12");
machine().root_device().membank("bank12")->set_base(m_video.videoram + 0x4000);
}
@@ -410,13 +415,19 @@ uint32_t p1_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, co
// bit 6 of 6Ah disables color burst -- not implemented
for (ra = cliprect.min_y; ra <= cliprect.max_y; ra++)
{
- if (BIT(m_video.color_select_68, 7)) {
- if (BIT(m_video.mode_control_6a, 7)) {
+ if (BIT(m_video.color_select_68, 7))
+ {
+ if (BIT(m_video.mode_control_6a, 7))
+ {
cga_gfx_1bpp_update_row(bitmap, cliprect, m_video.videoram, ma, ra, m_video.stride);
- } else {
+ }
+ else
+ {
poisk1_gfx_1bpp_update_row(bitmap, cliprect, m_video.videoram, ma, ra, m_video.stride);
}
- } else {
+ }
+ else
+ {
cga_gfx_2bpp_update_row(bitmap, cliprect, m_video.videoram, ma, ra, m_video.stride);
}
if (ra & 1) ma += m_video.stride;
@@ -427,13 +438,13 @@ uint32_t p1_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, co
// Timer. Poisk-1 uses single XTAL for everything? -- check
-WRITE_LINE_MEMBER( p1_state::p1_speaker_set_spkrdata )
+WRITE_LINE_MEMBER(p1_state::p1_speaker_set_spkrdata)
{
m_p1_spkrdata = state ? 1 : 0;
m_speaker->level_w(m_p1_spkrdata & m_p1_input);
}
-WRITE_LINE_MEMBER( p1_state::p1_pit8253_out2_changed )
+WRITE_LINE_MEMBER(p1_state::p1_pit8253_out2_changed)
{
m_p1_input = state ? 1 : 0;
m_speaker->level_w(m_p1_spkrdata & m_p1_input);
@@ -444,7 +455,7 @@ WRITE_LINE_MEMBER( p1_state::p1_pit8253_out2_changed )
WRITE8_MEMBER(p1_state::p1_ppi_porta_w)
{
m_kbpoll_mask = data;
- DBG_LOG(2,"p1_ppi_porta_w",("( %02X -> %02X )\n", data, m_kbpoll_mask));
+ DBG_LOG(2, "p1_ppi_porta_w", ("( %02X -> %02X )\n", data, m_kbpoll_mask));
}
READ8_MEMBER(p1_state::p1_ppi_porta_r)
@@ -452,7 +463,7 @@ READ8_MEMBER(p1_state::p1_ppi_porta_r)
uint8_t ret;
ret = m_kbpoll_mask;
- DBG_LOG(1,"p1_ppi_porta_r",("= %02X\n", ret));
+ DBG_LOG(1, "p1_ppi_porta_r", ("= %02X\n", ret));
return ret;
}
@@ -499,60 +510,59 @@ READ8_MEMBER(p1_state::p1_ppi2_portc_r)
int data = 0xff;
double tap_val = m_cassette->input();
- data = ( data & ~0x10 ) | ( tap_val < 0 ? 0x10 : 0x00 );
+ data = (data & ~0x10) | (tap_val < 0 ? 0x10 : 0x00);
- DBG_LOG(2,"p1_ppi_portc_r",("= %02X (tap_val %f) at %s\n",
- data, tap_val, machine().describe_context()));
+ DBG_LOG(2, "p1_ppi_portc_r", ("= %02X (tap_val %f) at %s\n", data, tap_val, machine().describe_context()));
return data;
}
WRITE8_MEMBER(p1_state::p1_ppi2_portb_w)
{
m_pit8253->write_gate2(BIT(data, 0));
- p1_speaker_set_spkrdata( data & 0x02 );
+ p1_speaker_set_spkrdata(data & 0x02);
}
READ8_MEMBER(p1_state::p1_ppi_r)
{
-// DBG_LOG(1,"p1ppi",("R %.2x\n", 0x60+offset));
- switch (offset) {
- case 0:
- return m_ppi8255n1->read(space, 0);
- case 9:
- case 10:
- case 11:
- return m_ppi8255n1->read(space, offset - 8);
- case 8:
- return m_ppi8255n2->read(space, 0);
- case 1:
- case 2:
- case 3:
- return m_ppi8255n2->read(space, offset);
- default:
- DBG_LOG(1,"p1ppi",("R %.2x (unimp)\n", 0x60+offset));
- return 0xff;
+ switch (offset)
+ {
+ case 0:
+ return m_ppi8255n1->read(space, 0);
+ case 9:
+ case 10:
+ case 11:
+ return m_ppi8255n1->read(space, offset - 8);
+ case 8:
+ return m_ppi8255n2->read(space, 0);
+ case 1:
+ case 2:
+ case 3:
+ return m_ppi8255n2->read(space, offset);
+ default:
+ DBG_LOG(1, "p1ppi", ("R %.2x (unimp)\n", 0x60 + offset));
+ return 0xff;
}
}
WRITE8_MEMBER(p1_state::p1_ppi_w)
{
-// DBG_LOG(1,"p1ppi",("W %.2x $%02x\n", 0x60+offset, data));
- switch (offset) {
- case 0:
- return m_ppi8255n1->write(space, 0, data);
- case 9:
- case 10:
- case 11:
- return m_ppi8255n1->write(space, offset - 8, data);
- case 8:
- return m_ppi8255n2->write(space, 0, data);
- case 1:
- case 2:
- case 3:
- return m_ppi8255n2->write(space, offset, data);
- default:
- DBG_LOG(1,"p1ppi",("W %.2x $%02x (unimp)\n", 0x60+offset, data));
- return;
+ switch (offset)
+ {
+ case 0:
+ return m_ppi8255n1->write(space, 0, data);
+ case 9:
+ case 10:
+ case 11:
+ return m_ppi8255n1->write(space, offset - 8, data);
+ case 8:
+ return m_ppi8255n2->write(space, 0, data);
+ case 1:
+ case 2:
+ case 3:
+ return m_ppi8255n2->write(space, offset, data);
+ default:
+ DBG_LOG(1, "p1ppi", ("W %.2x $%02x (unimp)\n", 0x60 + offset, data));
+ return;
}
}
@@ -562,24 +572,24 @@ WRITE8_MEMBER(p1_state::p1_ppi_w)
*
**********************************************************/
-DRIVER_INIT_MEMBER( p1_state, poisk1 )
+DRIVER_INIT_MEMBER(p1_state, poisk1)
{
address_space &program = m_maincpu->space(AS_PROGRAM);
- DBG_LOG(0,"init",("driver_init()\n"));
+ DBG_LOG(0, "init", ("driver_init()\n"));
- program.install_readwrite_bank(0, m_ram->size()-1, "bank10");
- membank( "bank10" )->set_base( m_ram->pointer() );
+ program.install_readwrite_bank(0, m_ram->size() - 1, "bank10");
+ membank("bank10")->set_base(m_ram->pointer());
}
-MACHINE_START_MEMBER( p1_state, poisk1 )
+MACHINE_START_MEMBER(p1_state, poisk1)
{
- DBG_LOG(0,"init",("machine_start()\n"));
+ DBG_LOG(0, "init", ("machine_start()\n"));
}
-MACHINE_RESET_MEMBER( p1_state, poisk1 )
+MACHINE_RESET_MEMBER(p1_state, poisk1)
{
- DBG_LOG(0,"init",("machine_reset()\n"));
+ DBG_LOG(0, "init", ("machine_reset()\n"));
m_kbpoll_mask = 0;
}