mirror of
https://github.com/holub/mame
synced 2025-04-24 17:30:55 +03:00
bfm_adr2.cpp: General cleanup of sorts (nw)
This commit is contained in:
parent
b4a653b690
commit
442d2d6e01
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user