bfm_adr2.cpp: General cleanup of sorts (nw)

This commit is contained in:
AJR 2018-03-28 12:16:00 -04:00
parent b4a653b690
commit 442d2d6e01
2 changed files with 67 additions and 65 deletions

View File

@ -158,8 +158,8 @@ TILE_GET_INFO_MEMBER( bfm_adder2_device::get_tile0_info )
tile_index = y * 128 + (x * 2);
data = m_adder_screen_ram[0][tile_index ]<<8;
data |= m_adder_screen_ram[0][tile_index + 1];
data = m_screen_ram[0][tile_index ]<<8;
data |= m_screen_ram[0][tile_index + 1];
code = data & 0x1FFF;
color = 0;
@ -181,8 +181,8 @@ TILE_GET_INFO_MEMBER( bfm_adder2_device::get_tile1_info )
tile_index = y * 128 + (x * 2);
data = m_adder_screen_ram[1][tile_index ]<<8;
data |= m_adder_screen_ram[1][tile_index + 1];
data = m_screen_ram[1][tile_index ]<<8;
data |= m_screen_ram[1][tile_index + 1];
code = data & 0x1FFF;
color = 0;
@ -196,13 +196,13 @@ TILE_GET_INFO_MEMBER( bfm_adder2_device::get_tile1_info )
void bfm_adder2_device::device_reset()
{
m_adder2_screen_page_reg = 0;
m_adder2_c101 = 0;
m_adder2_rx = 0;
m_adder_vbl_triggered = 0;
m_adder2_acia_triggered = 0;
m_adder2_data_from_sc2 = 0;
m_adder2_data_to_sc2 = 0;
m_screen_page_reg = 0;
m_c101 = 0;
m_rx = 0;
m_vbl_triggered = false;
m_acia_triggered = false;
m_data_from_sc2 = 0;
m_data_to_sc2 = 0;
{
uint8_t *rom = machine().root_device().memregion("adder2")->base();
@ -220,17 +220,17 @@ void bfm_adder2_device::device_start()
adder2_decode_char_roms();
save_item(NAME(m_adder2_screen_page_reg));
save_item(NAME(m_adder2_c101));
save_item(NAME(m_adder2_rx));
save_item(NAME(m_adder_vbl_triggered));
save_item(NAME(m_adder2_acia_triggered));
save_item(NAME(m_screen_page_reg));
save_item(NAME(m_c101));
save_item(NAME(m_rx));
save_item(NAME(m_vbl_triggered));
save_item(NAME(m_acia_triggered));
save_item(NAME(m_adder2_data_from_sc2));
save_item(NAME(m_adder2_data_to_sc2));
save_item(NAME(m_data_from_sc2));
save_item(NAME(m_data_to_sc2));
save_item(NAME(m_adder_ram));
save_item(NAME(m_adder_screen_ram));
save_item(NAME(m_screen_ram));
m_tilemap0 = &machine().tilemap().create(*this, tilemap_get_info_delegate(FUNC(bfm_adder2_device::get_tile0_info),this), TILEMAP_SCAN_ROWS, 8, 8, 50, 35);
@ -259,20 +259,22 @@ uint32_t bfm_adder2_device::update_screen(screen_device &screen, bitmap_ind16 &b
{
const rectangle visible1(0, 400-1, 0, 280-1); //minx,maxx, miny,maxy
if (m_adder2_screen_page_reg & SL_DISPLAY) m_tilemap1->draw(screen, bitmap, visible1, 0, 0);
else m_tilemap0->draw(screen, bitmap, visible1, 0, 0);
if (m_screen_page_reg & SL_DISPLAY)
m_tilemap1->draw(screen, bitmap, visible1, 0, 0);
else
m_tilemap0->draw(screen, bitmap, visible1, 0, 0);
return 0;
}
///////////////////////////////////////////////////////////////////////////
INTERRUPT_GEN_MEMBER( bfm_adder2_device::adder2_vbl )
WRITE_LINE_MEMBER(bfm_adder2_device::adder2_vbl_w)
{
if ( m_adder2_c101 & 0x01 )
if (state && BIT(m_c101, 0))
{
m_adder_vbl_triggered = 1;
device.execute().set_input_line(M6809_IRQ_LINE, HOLD_LINE );
m_vbl_triggered = true;
m_cpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
}
}
@ -280,7 +282,7 @@ INTERRUPT_GEN_MEMBER( bfm_adder2_device::adder2_vbl )
READ8_MEMBER( bfm_adder2_device::screen_ram_r )
{
return m_adder2_screen_page_reg & SL_ACCESS ? m_adder_screen_ram[1][offset]:m_adder_screen_ram[0][offset];
return m_screen_page_reg & SL_ACCESS ? m_screen_ram[1][offset]:m_screen_ram[0][offset];
}
///////////////////////////////////////////////////////////////////////////
@ -302,15 +304,15 @@ WRITE8_MEMBER( bfm_adder2_device::screen_ram_w )
palette().set_pen_color(pal, rgb_t(r,g,b));
}
if ( m_adder2_screen_page_reg & SL_ACCESS )
if (m_screen_page_reg & SL_ACCESS)
{
m_adder_screen_ram[1][offset] = data;
m_screen_ram[1][offset] = data;
m_tilemap1->mark_tile_dirty(dirty_off);
}
else
{
m_adder_screen_ram[0][offset] = data;
m_screen_ram[0][offset] = data;
m_tilemap0->mark_tile_dirty(dirty_off);
}
}
@ -342,30 +344,30 @@ WRITE8_MEMBER( bfm_adder2_device::adder2_c001_w )
{
logerror("c101 = %02X\n",data);
//m_adder2_screen_page_reg = 0;
//m_screen_page_reg = 0;
}
///////////////////////////////////////////////////////////////////////////
WRITE8_MEMBER( bfm_adder2_device::adder2_screen_page_w )
{
m_adder2_screen_page_reg = data;
m_screen_page_reg = data;
}
///////////////////////////////////////////////////////////////////////////
READ8_MEMBER( bfm_adder2_device::adder2_vbl_ctrl_r )
{
m_adder_vbl_triggered = 0; // clear VBL start IRQ
m_vbl_triggered = false; // clear VBL start IRQ
return m_adder2_c101;
return m_c101;
}
///////////////////////////////////////////////////////////////////////////
WRITE8_MEMBER( bfm_adder2_device::adder2_vbl_ctrl_w )
{
m_adder2_c101 = data;
m_c101 = data;
}
///////////////////////////////////////////////////////////////////////////
@ -374,8 +376,8 @@ READ8_MEMBER( bfm_adder2_device::adder2_uart_ctrl_r )
{
int status = 0;
if ( m_adder2_data_from_sc2 ) status |= 0x01; // receive buffer full
if ( !m_adder2_data_to_sc2 ) status |= 0x02; // transmit buffer empty
if (m_data_from_sc2) status |= 0x01; // receive buffer full
if (!m_data_to_sc2 ) status |= 0x02; // transmit buffer empty
return status;
}
@ -384,10 +386,10 @@ READ8_MEMBER( bfm_adder2_device::adder2_uart_ctrl_r )
WRITE8_MEMBER( bfm_adder2_device::adder2_uart_ctrl_w )
{
m_adder2_data_from_sc2 = 0; // data available for adder from sc2
m_adder2_sc2data = 0; // data
m_adder2_data_to_sc2 = 0; // data available for sc2 from adder
m_adder2_data = 0; // data
m_data_from_sc2 = false; // data available for adder from sc2
m_sc2data = 0; // data
m_data_to_sc2 = false; // data available for sc2 from adder
m_adder2_data = 0; // data
LOG_CTRL(("adder2 uart ctrl:%02X\n", data));
}
@ -396,8 +398,8 @@ WRITE8_MEMBER( bfm_adder2_device::adder2_uart_ctrl_w )
READ8_MEMBER( bfm_adder2_device::adder2_uart_rx_r )
{
int data = m_adder2_sc2data;
m_adder2_data_from_sc2 = 0; // clr flag, data from scorpion2 board available
int data = m_sc2data;
m_data_from_sc2 = false; // clr flag, data from scorpion2 board available
LOG_CTRL(("rsc2:%02X (%c)\n",data, data ));
@ -408,8 +410,8 @@ READ8_MEMBER( bfm_adder2_device::adder2_uart_rx_r )
WRITE8_MEMBER( bfm_adder2_device::adder2_uart_tx_w )
{
m_adder2_data_to_sc2 = 1; // set flag, data from adder available
m_adder2_data = data; // store data
m_data_to_sc2 = true; // set flag, data from adder available
m_adder2_data = data; // store data
LOG_CTRL(("ssc2 %02X(%c)\n",data, data ));
}
@ -420,8 +422,8 @@ READ8_MEMBER( bfm_adder2_device::adder2_irq_r )
{
int status = 0;
if ( m_adder_vbl_triggered ) status |= 0x02;
if ( m_adder2_acia_triggered ) status |= 0x08;
if (m_vbl_triggered) status |= 0x02;
if (m_acia_triggered) status |= 0x08;
return status;
}
@ -431,10 +433,10 @@ READ8_MEMBER( bfm_adder2_device::adder2_irq_r )
WRITE8_MEMBER(bfm_adder2_device::vid_uart_tx_w)
{
m_adder2_data_from_sc2 = 1; // set flag, data from scorpion2 board available
m_adder2_sc2data = data; // store data
m_data_from_sc2 = true; // set flag, data from scorpion2 board available
m_sc2data = data; // store data
m_adder2_acia_triggered = 1; // set flag, acia IRQ triggered
m_acia_triggered = true; // set flag, acia IRQ triggered
m_cpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE );
@ -452,7 +454,7 @@ WRITE8_MEMBER(bfm_adder2_device::vid_uart_ctrl_w)
READ8_MEMBER(bfm_adder2_device::vid_uart_rx_r)
{
uint8_t data = m_adder2_data;
m_adder2_data_to_sc2 = 0; // clr flag, data from adder available
m_data_to_sc2 = false; // clr flag, data from adder available
//LOG_SERIAL(("radder: %02X(%c)\n",data, data ));
@ -465,8 +467,8 @@ READ8_MEMBER(bfm_adder2_device::vid_uart_ctrl_r)
{
int status = 0;
if ( m_adder2_data_to_sc2 ) status |= 0x01; // receive buffer full
if ( !m_adder2_data_from_sc2) status |= 0x02; // transmit buffer empty
if (m_data_to_sc2 ) status |= 0x01; // receive buffer full
if (!m_data_from_sc2) status |= 0x02; // transmit buffer empty
return status;
}
@ -553,10 +555,10 @@ MACHINE_CONFIG_START(bfm_adder2_device::device_add_mconfig)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_PALETTE("palette")
MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, bfm_adder2_device, update_screen)
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(bfm_adder2_device, adder2_vbl_w)) // board has a VBL IRQ
MCFG_PALETTE_ADD("palette", 16)
MCFG_CPU_ADD("adder2", M6809, ADDER_CLOCK/4 ) // adder2 board 6809 CPU at 2 Mhz
MCFG_CPU_PROGRAM_MAP(adder2_memmap) // setup adder2 board memorymap
MCFG_DEVICE_VBLANK_INT_DEVICE("screen", DEVICE_SELF, bfm_adder2_device, adder2_vbl) // board has a VBL IRQ
MACHINE_CONFIG_END

View File

@ -45,28 +45,28 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
private:
int m_adder2_screen_page_reg; // access/display select
int m_adder2_c101;
int m_adder2_rx;
int m_adder_vbl_triggered; // flag <>0, VBL IRQ triggered
int m_adder2_acia_triggered; // flag <>0, ACIA receive IRQ
int m_screen_page_reg; // access/display select
int m_c101;
int m_rx;
bool m_vbl_triggered; // flag, VBL IRQ triggered
bool m_acia_triggered; // flag, ACIA receive IRQ
uint8_t m_adder_ram[0xE80]; // normal RAM
uint8_t m_adder_screen_ram[2][0x1180]; // paged display RAM
uint8_t m_adder_ram[0xE80]; // normal RAM
uint8_t m_screen_ram[2][0x1180]; // paged display RAM
tilemap_t *m_tilemap0; // tilemap screen0
tilemap_t *m_tilemap1; // timemap screen1
tilemap_t *m_tilemap1; // tilemap screen1
uint8_t m_adder2_data_from_sc2;
uint8_t m_adder2_data_to_sc2;
bool m_data_from_sc2;
bool m_data_to_sc2;
uint8_t m_adder2_data;
uint8_t m_adder2_sc2data;
uint8_t m_sc2data;
optional_device<cpu_device> m_cpu;
uint32_t update_screen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER( adder2_vbl );
DECLARE_WRITE_LINE_MEMBER(adder2_vbl_w);
};
// device type definition