mirror of
https://github.com/holub/mame
synced 2025-04-22 00:11:58 +03:00
- made MCFG_DEVICE_VBLANK_INT_DEVICE param order more logic (nw)
- updated device_execute_interface::interface_post_reset so screen is searched from same context - removed tilelgcy.h since no more users exist - made bfm_adr2 a device
This commit is contained in:
parent
8a514c6435
commit
a8899a4685
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -1787,7 +1787,6 @@ src/emu/speaker.c svneol=native#text/plain
|
||||
src/emu/speaker.h svneol=native#text/plain
|
||||
src/emu/sprite.c svneol=native#text/plain
|
||||
src/emu/sprite.h svneol=native#text/plain
|
||||
src/emu/tilelgcy.h svneol=native#text/plain
|
||||
src/emu/tilemap.c svneol=native#text/plain
|
||||
src/emu/tilemap.h svneol=native#text/plain
|
||||
src/emu/timer.c svneol=native#text/plain
|
||||
|
@ -610,9 +610,10 @@ void device_execute_interface::interface_post_reset()
|
||||
|
||||
// new style - use screen tag directly
|
||||
screen_device *screen;
|
||||
if (m_vblank_interrupt_screen != NULL)
|
||||
screen = downcast<screen_device *>(device().machine().device(m_vblank_interrupt_screen));
|
||||
|
||||
if (m_vblank_interrupt_screen != NULL) {
|
||||
astring tempstring;
|
||||
screen = downcast<screen_device *>(device().machine().device(device().siblingtag(tempstring,m_vblank_interrupt_screen)));
|
||||
}
|
||||
// old style 'hack' setup - use screen #0
|
||||
else
|
||||
screen = device().machine().first_screen();
|
||||
|
@ -120,7 +120,7 @@ enum
|
||||
device_execute_interface::static_set_vblank_int(*device, _func, _tag);
|
||||
#define MCFG_DEVICE_VBLANK_INT_DRIVER(_tag, _class, _func) \
|
||||
device_execute_interface::static_set_vblank_int(*device, device_interrupt_delegate(&_class::_func, #_class "::" #_func, DEVICE_SELF, (_class *)0), _tag);
|
||||
#define MCFG_DEVICE_VBLANK_INT_DEVICE(_devtag, _tag, _class, _func) \
|
||||
#define MCFG_DEVICE_VBLANK_INT_DEVICE(_tag, _devtag, _class, _func) \
|
||||
device_execute_interface::static_set_vblank_int(*device, device_interrupt_delegate(&_class::_func, #_class "::" #_func, _devtag, (_class *)0), _tag);
|
||||
#define MCFG_DEVICE_PERIODIC_INT(_func, _rate) \
|
||||
device_execute_interface::static_set_periodic_int(*device, _func, attotime::from_hz(_rate));
|
||||
|
@ -1,81 +0,0 @@
|
||||
/***************************************************************************
|
||||
|
||||
tilelgcy.h
|
||||
|
||||
Legacy tilemap helpers.
|
||||
|
||||
****************************************************************************
|
||||
|
||||
Copyright Aaron Giles
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
* Neither the name 'MAME' nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR
|
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __TILELGCY_H__
|
||||
#define __TILELGCY_H__
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define TILE_GET_INFO(_name) void _name(driver_device &device, tilemap_t &tilemap, tile_data &tileinfo, tilemap_memory_index tile_index)
|
||||
#define TILEMAP_MAPPER(_name) tilemap_memory_index _name(driver_device &device, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
|
||||
|
||||
#define SET_TILE_INFO(GFX,CODE,COLOR,FLAGS) tileinfo.set(device.machine(), GFX, CODE, COLOR, FLAGS)
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// legacy callbacks
|
||||
typedef void (*tile_get_info_func)(driver_device &device, tilemap_t &tilemap, tile_data &tileinfo, tilemap_memory_index tile_index);
|
||||
typedef tilemap_memory_index (*tilemap_mapper_func)(driver_device &device, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows);
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// FUNCTION PROTOTYPES
|
||||
//**************************************************************************
|
||||
|
||||
|
||||
// ----- tilemap creation and configuration -----
|
||||
|
||||
// create a new tilemap; note that tilemaps are tracked by the core so there is no dispose
|
||||
inline tilemap_t *tilemap_create(running_machine &machine, tile_get_info_func tile_get_info, tilemap_mapper_func mapper, int tilewidth, int tileheight, int cols, int rows)
|
||||
{ return &machine.tilemap().create(tilemap_get_info_delegate(tile_get_info, "", machine.driver_data()), tilemap_mapper_delegate(mapper, "", machine.driver_data()), tilewidth, tileheight, cols, rows); }
|
||||
|
||||
inline tilemap_t *tilemap_create(running_machine &machine, tile_get_info_func tile_get_info, tilemap_standard_mapper mapper, int tilewidth, int tileheight, int cols, int rows)
|
||||
{ return &machine.tilemap().create(tilemap_get_info_delegate(tile_get_info, "", machine.driver_data()), mapper, tilewidth, tileheight, cols, rows); }
|
||||
|
||||
#endif /* __TILELGCY_H__ */
|
@ -100,8 +100,6 @@ Optional (on expansion card) (Viper)
|
||||
#include "sound/upd7759.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "machine/bfm_comn.h"
|
||||
#include "drivlgcy.h"
|
||||
#include "scrlegcy.h"
|
||||
|
||||
#include "sc1_vfd.lh"
|
||||
#include "sc1_vid.lh"
|
||||
@ -113,8 +111,7 @@ public:
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_vfd0(*this, "vfd0"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_upd7759(*this, "upd"),
|
||||
m_adder2(*this, "adder2") { }
|
||||
m_upd7759(*this, "upd") { }
|
||||
|
||||
optional_device<bfm_bd1_t> m_vfd0;
|
||||
|
||||
@ -167,10 +164,6 @@ public:
|
||||
DECLARE_READ8_MEMBER(aciadata_r);
|
||||
DECLARE_WRITE8_MEMBER(triac_w);
|
||||
DECLARE_READ8_MEMBER(triac_r);
|
||||
DECLARE_WRITE8_MEMBER(vid_uart_tx_w);
|
||||
DECLARE_WRITE8_MEMBER(vid_uart_ctrl_w);
|
||||
DECLARE_READ8_MEMBER(vid_uart_rx_r);
|
||||
DECLARE_READ8_MEMBER(vid_uart_ctrl_r);
|
||||
DECLARE_READ8_MEMBER(nec_r);
|
||||
DECLARE_WRITE8_MEMBER(nec_reset_w);
|
||||
DECLARE_WRITE8_MEMBER(nec_latch_w);
|
||||
@ -189,8 +182,7 @@ public:
|
||||
int Scorpion1_GetSwitchState(int strobe, int data);
|
||||
int sc1_find_project_string( );
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_device<upd7759_device> m_upd7759;
|
||||
optional_device<cpu_device> m_adder2;
|
||||
optional_device<upd7759_device> m_upd7759;
|
||||
};
|
||||
|
||||
#define VFD_RESET 0x20
|
||||
@ -619,35 +611,6 @@ WRITE8_MEMBER(bfm_sc1_state::nec_latch_w)
|
||||
m_upd7759->start_w(1); // start
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
WRITE8_MEMBER(bfm_sc1_state::vid_uart_tx_w)
|
||||
{
|
||||
adder2_send(data);
|
||||
m_adder2->set_input_line(M6809_IRQ_LINE, ASSERT_LINE );//HOLD_LINE);// trigger IRQ
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
WRITE8_MEMBER(bfm_sc1_state::vid_uart_ctrl_w)
|
||||
{
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
READ8_MEMBER(bfm_sc1_state::vid_uart_rx_r)
|
||||
{
|
||||
return adder2_receive();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
READ8_MEMBER(bfm_sc1_state::vid_uart_ctrl_r)
|
||||
{
|
||||
return adder2_status();
|
||||
}
|
||||
|
||||
|
||||
// machine start (called only once) /////////////////////////////////////////////////
|
||||
|
||||
void bfm_sc1_state::machine_reset()
|
||||
@ -742,8 +705,8 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( sc1_adder2, AS_PROGRAM, 8, bfm_sc1_state )
|
||||
AM_IMPORT_FROM( sc1_base )
|
||||
|
||||
AM_RANGE(0x3E00, 0x3E00) AM_READWRITE(vid_uart_ctrl_r,vid_uart_ctrl_w) // video uart control reg read
|
||||
AM_RANGE(0x3E01, 0x3E01) AM_READWRITE(vid_uart_rx_r,vid_uart_tx_w) // video uart receive reg
|
||||
AM_RANGE(0x3E00, 0x3E00) AM_DEVREADWRITE("adder2", bfm_adder2_device, vid_uart_ctrl_r,vid_uart_ctrl_w) // video uart control reg read
|
||||
AM_RANGE(0x3E01, 0x3E01) AM_DEVREADWRITE("adder2", bfm_adder2_device, vid_uart_rx_r,vid_uart_tx_w) // video uart receive reg
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -1130,8 +1093,7 @@ static MACHINE_CONFIG_DERIVED( scorpion1_adder2, scorpion1 )
|
||||
|
||||
MCFG_DEFAULT_LAYOUT(layout_sc1_vid)
|
||||
|
||||
//MCFG_BFM_ADDER2_ADD("adder2")
|
||||
MCFG_FRAGMENT_ADD(adder2)
|
||||
MCFG_BFM_ADDER2_ADD("adder2")
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -1244,7 +1206,6 @@ int bfm_sc1_state::sc1_find_project_string( )
|
||||
DRIVER_INIT_MEMBER(bfm_sc1_state,toppoker)
|
||||
{
|
||||
sc1_common_init(3,1, 3);
|
||||
adder2_decode_char_roms(machine()); // decode GFX roms
|
||||
MechMtr_config(machine(),8);
|
||||
sc1_find_project_string();
|
||||
}
|
||||
|
@ -171,8 +171,6 @@ Adder hardware:
|
||||
#include "sc2_dmd.lh"
|
||||
#include "drwho.lh"
|
||||
#include "machine/bfm_comn.h"
|
||||
#include "drivlgcy.h"
|
||||
#include "scrlegcy.h"
|
||||
|
||||
|
||||
class bfm_sc2_state : public driver_device
|
||||
@ -183,8 +181,7 @@ public:
|
||||
m_vfd0(*this, "vfd0"),
|
||||
m_vfd1(*this, "vfd1"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_upd7759(*this, "upd"),
|
||||
m_adder2(*this, "adder2") { }
|
||||
m_upd7759(*this, "upd") { }
|
||||
|
||||
optional_device<bfm_bd1_t> m_vfd0;
|
||||
optional_device<bfm_bd1_t> m_vfd1;
|
||||
@ -270,10 +267,6 @@ public:
|
||||
DECLARE_READ8_MEMBER(uart2data_r);
|
||||
DECLARE_WRITE8_MEMBER(uart2ctrl_w);
|
||||
DECLARE_WRITE8_MEMBER(uart2data_w);
|
||||
DECLARE_WRITE8_MEMBER(vid_uart_tx_w);
|
||||
DECLARE_WRITE8_MEMBER(vid_uart_ctrl_w);
|
||||
DECLARE_READ8_MEMBER(vid_uart_rx_r);
|
||||
DECLARE_READ8_MEMBER(vid_uart_ctrl_r);
|
||||
DECLARE_READ8_MEMBER(key_r);
|
||||
DECLARE_READ8_MEMBER(vfd_status_r);
|
||||
DECLARE_WRITE8_MEMBER(vfd1_bd1_w);
|
||||
@ -321,7 +314,6 @@ public:
|
||||
void sc2awpdmd_common_init(int reels, int decrypt);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<upd7759_device> m_upd7759;
|
||||
optional_device<cpu_device> m_adder2;
|
||||
};
|
||||
|
||||
|
||||
@ -1027,40 +1019,8 @@ WRITE8_MEMBER(bfm_sc2_state::uart2data_w)
|
||||
UART_LOG(("uart2:%x\n", data));
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
WRITE8_MEMBER(bfm_sc2_state::vid_uart_tx_w)
|
||||
{
|
||||
adder2_send(data);
|
||||
m_adder2->set_input_line(M6809_IRQ_LINE, HOLD_LINE );
|
||||
|
||||
LOG_SERIAL(("sadder %02X (%c)\n",data, data ));
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
WRITE8_MEMBER(bfm_sc2_state::vid_uart_ctrl_w)
|
||||
{
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
READ8_MEMBER(bfm_sc2_state::vid_uart_rx_r)
|
||||
{
|
||||
int data = adder2_receive();
|
||||
|
||||
LOG_SERIAL(("radder: %02X(%c)\n",data, data ));
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
READ8_MEMBER(bfm_sc2_state::vid_uart_ctrl_r)
|
||||
{
|
||||
return adder2_status();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
READ8_MEMBER(bfm_sc2_state::key_r)
|
||||
@ -1490,8 +1450,8 @@ static ADDRESS_MAP_START( memmap_vid, AS_PROGRAM, 8, bfm_sc2_state )
|
||||
AM_RANGE(0x3C00, 0x3C07) AM_READ(key_r )
|
||||
AM_RANGE(0x3C80, 0x3C80) AM_WRITE(e2ram_w )
|
||||
|
||||
AM_RANGE(0x3E00, 0x3E00) AM_READWRITE(vid_uart_ctrl_r, vid_uart_ctrl_w) // video uart control reg
|
||||
AM_RANGE(0x3E01, 0x3E01) AM_READWRITE(vid_uart_rx_r, vid_uart_tx_w) // video uart data reg
|
||||
AM_RANGE(0x3E00, 0x3E00) AM_DEVREADWRITE("adder2", bfm_adder2_device, vid_uart_ctrl_r, vid_uart_ctrl_w) // video uart control reg
|
||||
AM_RANGE(0x3E01, 0x3E01) AM_DEVREADWRITE("adder2", bfm_adder2_device, vid_uart_rx_r, vid_uart_tx_w) // video uart data reg
|
||||
ADDRESS_MAP_END
|
||||
|
||||
// input ports for pyramid ////////////////////////////////////////
|
||||
@ -2164,8 +2124,7 @@ static MACHINE_CONFIG_START( scorpion2_vid, bfm_sc2_state )
|
||||
MCFG_NVRAM_ADD_CUSTOM_DRIVER("e2ram", bfm_sc2_state, e2ram_init)
|
||||
MCFG_DEFAULT_LAYOUT(layout_sc2_vid)
|
||||
|
||||
//MCFG_BFM_ADDER2_ADD("adder2")
|
||||
MCFG_FRAGMENT_ADD(adder2)
|
||||
MCFG_BFM_ADDER2_ADD("adder2")
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
MCFG_SOUND_ADD("upd", UPD7759, UPD7759_STANDARD_CLOCK)
|
||||
@ -2275,7 +2234,6 @@ void bfm_sc2_state::adder2_common_init()
|
||||
DRIVER_INIT_MEMBER(bfm_sc2_state,quintoon)
|
||||
{
|
||||
sc2_common_init( 1);
|
||||
adder2_decode_char_roms(machine());
|
||||
MechMtr_config(machine(),8); // setup mech meters
|
||||
|
||||
m_has_hopper = 0;
|
||||
@ -2296,7 +2254,6 @@ DRIVER_INIT_MEMBER(bfm_sc2_state,quintoon)
|
||||
DRIVER_INIT_MEMBER(bfm_sc2_state,pyramid)
|
||||
{
|
||||
sc2_common_init(1);
|
||||
adder2_decode_char_roms(machine()); // decode GFX roms
|
||||
adder2_common_init();
|
||||
|
||||
m_has_hopper = 1;
|
||||
@ -2313,7 +2270,6 @@ DRIVER_INIT_MEMBER(bfm_sc2_state,pyramid)
|
||||
DRIVER_INIT_MEMBER(bfm_sc2_state,sltsbelg)
|
||||
{
|
||||
sc2_common_init(1);
|
||||
adder2_decode_char_roms(machine()); // decode GFX roms
|
||||
adder2_common_init();
|
||||
|
||||
m_has_hopper = 1;
|
||||
@ -2327,7 +2283,6 @@ DRIVER_INIT_MEMBER(bfm_sc2_state,sltsbelg)
|
||||
DRIVER_INIT_MEMBER(bfm_sc2_state,adder_dutch)
|
||||
{
|
||||
sc2_common_init(1);
|
||||
adder2_decode_char_roms(machine()); // decode GFX roms
|
||||
adder2_common_init();
|
||||
|
||||
m_has_hopper = 0;
|
||||
@ -2345,7 +2300,6 @@ DRIVER_INIT_MEMBER(bfm_sc2_state,adder_dutch)
|
||||
DRIVER_INIT_MEMBER(bfm_sc2_state,gldncrwn)
|
||||
{
|
||||
sc2_common_init(1);
|
||||
adder2_decode_char_roms(machine()); // decode GFX roms
|
||||
adder2_common_init();
|
||||
|
||||
m_has_hopper = 0;
|
||||
|
@ -95,9 +95,6 @@ E000-FFFF | R | D D D D D D D D | 8K ROM
|
||||
#include "machine/bfm_bd1.h" // vfd
|
||||
#include "video/bfm_adr2.h"
|
||||
#include "rendlay.h"
|
||||
#include "tilelgcy.h"
|
||||
#include "drivlgcy.h"
|
||||
#include "scrlegcy.h"
|
||||
|
||||
#ifdef MAME_DEBUG
|
||||
#define VERBOSE 1
|
||||
@ -115,27 +112,19 @@ E000-FFFF | R | D D D D D D D D | 8K ROM
|
||||
#define ADDER_CLOCK (XTAL_8MHz)
|
||||
|
||||
|
||||
static int adder2_screen_page_reg; // access/display select
|
||||
static int adder2_c101;
|
||||
static int adder2_rx;
|
||||
static int adder_vbl_triggered; // flag <>0, VBL IRQ triggered
|
||||
static int adder2_acia_triggered; // flag <>0, ACIA receive IRQ
|
||||
|
||||
static UINT8 adder_ram[0xE80]; // normal RAM
|
||||
static UINT8 adder_screen_ram[2][0x1180]; // paged display RAM
|
||||
const device_type BFM_ADDER2 = &device_creator<bfm_adder2_device>;
|
||||
|
||||
static tilemap_t *tilemap0; // tilemap screen0
|
||||
static tilemap_t *tilemap1; // timemap screen1
|
||||
bfm_adder2_device::bfm_adder2_device( const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock )
|
||||
: device_t(mconfig, BFM_ADDER2, "BFM ADDER2", tag, owner, clock, "bfm_adder2", __FILE__),
|
||||
m_cpu(*this, "adder2")
|
||||
{
|
||||
}
|
||||
|
||||
static UINT8 adder2_data_from_sc2;
|
||||
static UINT8 adder2_data_to_sc2;
|
||||
|
||||
static UINT8 adder2_data;
|
||||
static UINT8 adder2_sc2data;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static TILE_GET_INFO( get_tile0_info )
|
||||
TILE_GET_INFO_MEMBER( bfm_adder2_device::get_tile0_info )
|
||||
{
|
||||
short data;
|
||||
int code, color, flags,x,y;
|
||||
@ -145,20 +134,20 @@ static TILE_GET_INFO( get_tile0_info )
|
||||
|
||||
tile_index = y * 128 + (x * 2);
|
||||
|
||||
data = adder_screen_ram[0][tile_index ]<<8;
|
||||
data |= adder_screen_ram[0][tile_index + 1];
|
||||
data = m_adder_screen_ram[0][tile_index ]<<8;
|
||||
data |= m_adder_screen_ram[0][tile_index + 1];
|
||||
|
||||
code = data & 0x1FFF;
|
||||
color = 0;
|
||||
flags = ((data & 0x4000)?TILE_FLIPY:0) |
|
||||
((data & 0x2000)?TILE_FLIPX:0);
|
||||
|
||||
SET_TILE_INFO(0, code, color, flags);
|
||||
SET_TILE_INFO_MEMBER(0, code, color, flags);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static TILE_GET_INFO( get_tile1_info )
|
||||
TILE_GET_INFO_MEMBER( bfm_adder2_device::get_tile1_info )
|
||||
{
|
||||
short data;
|
||||
int code, color, flags,x,y;
|
||||
@ -168,111 +157,109 @@ static TILE_GET_INFO( get_tile1_info )
|
||||
|
||||
tile_index = y * 128 + (x * 2);
|
||||
|
||||
data = adder_screen_ram[1][tile_index ]<<8;
|
||||
data |= adder_screen_ram[1][tile_index + 1];
|
||||
data = m_adder_screen_ram[1][tile_index ]<<8;
|
||||
data |= m_adder_screen_ram[1][tile_index + 1];
|
||||
|
||||
code = data & 0x1FFF;
|
||||
color = 0;
|
||||
flags = ((data & 0x4000)?TILE_FLIPY:0) |
|
||||
((data & 0x2000)?TILE_FLIPX:0);
|
||||
|
||||
SET_TILE_INFO(0, code, color, flags);
|
||||
SET_TILE_INFO_MEMBER(0, code, color, flags);
|
||||
}
|
||||
|
||||
// video initialisation ///////////////////////////////////////////////////
|
||||
|
||||
static VIDEO_RESET( adder2 )
|
||||
void bfm_adder2_device::device_reset()
|
||||
{
|
||||
adder2_screen_page_reg = 0;
|
||||
adder2_c101 = 0;
|
||||
adder2_rx = 0;
|
||||
adder_vbl_triggered = 0;
|
||||
adder2_acia_triggered = 0;
|
||||
adder2_data_from_sc2 = 0;
|
||||
adder2_data_to_sc2 = 0;
|
||||
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;
|
||||
|
||||
{
|
||||
UINT8 *rom = machine.root_device().memregion("adder2")->base();
|
||||
UINT8 *rom = machine().root_device().memregion("adder2")->base();
|
||||
|
||||
machine.root_device().membank("bank2")->configure_entries(0, 4, &rom[0x00000], 0x08000);
|
||||
membank("bank2")->configure_entries(0, 4, &rom[0x00000], 0x08000);
|
||||
|
||||
machine.root_device().membank("bank2")->set_entry(0&0x03);
|
||||
membank("bank2")->set_entry(0&0x03);
|
||||
}
|
||||
}
|
||||
|
||||
static VIDEO_START( adder2 )
|
||||
void bfm_adder2_device::device_start()
|
||||
{
|
||||
machine.save().save_item(NAME(adder2_screen_page_reg));
|
||||
machine.save().save_item(NAME(adder2_c101));
|
||||
machine.save().save_item(NAME(adder2_rx));
|
||||
machine.save().save_item(NAME(adder_vbl_triggered));
|
||||
machine.save().save_item(NAME(adder2_acia_triggered));
|
||||
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));
|
||||
|
||||
machine.save().save_item(NAME(adder2_data_from_sc2));
|
||||
machine.save().save_item(NAME(adder2_data_to_sc2));
|
||||
save_item(NAME(m_adder2_data_from_sc2));
|
||||
save_item(NAME(m_adder2_data_to_sc2));
|
||||
|
||||
machine.save().save_item(NAME(adder_ram));
|
||||
machine.save().save_item(NAME(adder_screen_ram));
|
||||
save_item(NAME(m_adder_ram));
|
||||
save_item(NAME(m_adder_screen_ram));
|
||||
|
||||
tilemap0 = tilemap_create(machine, get_tile0_info, TILEMAP_SCAN_ROWS, 8, 8, 50, 35);
|
||||
m_tilemap0 = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(bfm_adder2_device::get_tile0_info),this), TILEMAP_SCAN_ROWS, 8, 8, 50, 35);
|
||||
|
||||
tilemap1 = tilemap_create(machine, get_tile1_info, TILEMAP_SCAN_ROWS, 8, 8, 50, 35);
|
||||
m_tilemap1 = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(bfm_adder2_device::get_tile1_info),this), TILEMAP_SCAN_ROWS, 8, 8, 50, 35);
|
||||
|
||||
palette_set_color(machine(), 0,MAKE_RGB(0x00,0x00,0x00));
|
||||
palette_set_color(machine(), 1,MAKE_RGB(0x00,0x00,0xFF));
|
||||
palette_set_color(machine(), 2,MAKE_RGB(0x00,0xFF,0x00));
|
||||
palette_set_color(machine(), 3,MAKE_RGB(0x00,0xFF,0xFF));
|
||||
palette_set_color(machine(), 4,MAKE_RGB(0xFF,0x00,0x00));
|
||||
palette_set_color(machine(), 5,MAKE_RGB(0xFF,0x00,0xFF));
|
||||
palette_set_color(machine(), 6,MAKE_RGB(0xFF,0xFF,0x00));
|
||||
palette_set_color(machine(), 7,MAKE_RGB(0xFF,0xFF,0xFF));
|
||||
palette_set_color(machine(), 8,MAKE_RGB(0x80,0x80,0x80));
|
||||
palette_set_color(machine(), 9,MAKE_RGB(0x00,0x00,0x80));
|
||||
palette_set_color(machine(),10,MAKE_RGB(0x00,0x80,0x00));
|
||||
palette_set_color(machine(),11,MAKE_RGB(0x00,0x80,0x80));
|
||||
palette_set_color(machine(),12,MAKE_RGB(0x80,0x00,0x00));
|
||||
palette_set_color(machine(),13,MAKE_RGB(0x80,0x00,0x80));
|
||||
palette_set_color(machine(),14,MAKE_RGB(0x80,0x80,0x00));
|
||||
palette_set_color(machine(),15,MAKE_RGB(0x80,0x80,0x80));
|
||||
}
|
||||
|
||||
// video update ///////////////////////////////////////////////////////////
|
||||
static SCREEN_UPDATE_IND16( adder2 )
|
||||
UINT32 bfm_adder2_device::update_screen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
|
||||
const rectangle visible1(0, 400-1, 0, 280-1); //minx,maxx, miny,maxy
|
||||
|
||||
if (adder2_screen_page_reg & SL_DISPLAY) tilemap1->draw(bitmap, visible1, 0, 0);
|
||||
else tilemap0->draw(bitmap, visible1, 0, 0);
|
||||
if (m_adder2_screen_page_reg & SL_DISPLAY) m_tilemap1->draw(bitmap, visible1, 0, 0);
|
||||
else m_tilemap0->draw(bitmap, visible1, 0, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// adder2 palette initialisation //////////////////////////////////////////
|
||||
|
||||
static PALETTE_INIT( adder2 )
|
||||
{
|
||||
palette_set_color(machine, 0,MAKE_RGB(0x00,0x00,0x00));
|
||||
palette_set_color(machine, 1,MAKE_RGB(0x00,0x00,0xFF));
|
||||
palette_set_color(machine, 2,MAKE_RGB(0x00,0xFF,0x00));
|
||||
palette_set_color(machine, 3,MAKE_RGB(0x00,0xFF,0xFF));
|
||||
palette_set_color(machine, 4,MAKE_RGB(0xFF,0x00,0x00));
|
||||
palette_set_color(machine, 5,MAKE_RGB(0xFF,0x00,0xFF));
|
||||
palette_set_color(machine, 6,MAKE_RGB(0xFF,0xFF,0x00));
|
||||
palette_set_color(machine, 7,MAKE_RGB(0xFF,0xFF,0xFF));
|
||||
palette_set_color(machine, 8,MAKE_RGB(0x80,0x80,0x80));
|
||||
palette_set_color(machine, 9,MAKE_RGB(0x00,0x00,0x80));
|
||||
palette_set_color(machine,10,MAKE_RGB(0x00,0x80,0x00));
|
||||
palette_set_color(machine,11,MAKE_RGB(0x00,0x80,0x80));
|
||||
palette_set_color(machine,12,MAKE_RGB(0x80,0x00,0x00));
|
||||
palette_set_color(machine,13,MAKE_RGB(0x80,0x00,0x80));
|
||||
palette_set_color(machine,14,MAKE_RGB(0x80,0x80,0x00));
|
||||
palette_set_color(machine,15,MAKE_RGB(0x80,0x80,0x80));
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static INTERRUPT_GEN( adder2_vbl )
|
||||
INTERRUPT_GEN_MEMBER( bfm_adder2_device::adder2_vbl )
|
||||
{
|
||||
if ( adder2_c101 & 0x01 )
|
||||
if ( m_adder2_c101 & 0x01 )
|
||||
{
|
||||
adder_vbl_triggered = 1;
|
||||
device->execute().set_input_line(M6809_IRQ_LINE, HOLD_LINE );
|
||||
m_adder_vbl_triggered = 1;
|
||||
device.execute().set_input_line(M6809_IRQ_LINE, HOLD_LINE );
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static READ8_HANDLER( screen_ram_r )
|
||||
READ8_MEMBER( bfm_adder2_device::screen_ram_r )
|
||||
{
|
||||
return adder2_screen_page_reg & SL_ACCESS ? adder_screen_ram[1][offset]:adder_screen_ram[0][offset];
|
||||
return m_adder2_screen_page_reg & SL_ACCESS ? m_adder_screen_ram[1][offset]:m_adder_screen_ram[0][offset];
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static WRITE8_HANDLER( screen_ram_w )
|
||||
WRITE8_MEMBER( bfm_adder2_device::screen_ram_w )
|
||||
{
|
||||
int dirty_off = (offset>>7)*50 + ((offset & 0x7F)>>1);
|
||||
|
||||
@ -289,102 +276,102 @@ static WRITE8_HANDLER( screen_ram_w )
|
||||
palette_set_color(space.machine(), pal, MAKE_RGB(r,g,b));
|
||||
}
|
||||
|
||||
if ( adder2_screen_page_reg & SL_ACCESS )
|
||||
if ( m_adder2_screen_page_reg & SL_ACCESS )
|
||||
{
|
||||
adder_screen_ram[1][offset] = data;
|
||||
tilemap1->mark_tile_dirty(dirty_off);
|
||||
m_adder_screen_ram[1][offset] = data;
|
||||
m_tilemap1->mark_tile_dirty(dirty_off);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
adder_screen_ram[0][offset] = data;
|
||||
tilemap0->mark_tile_dirty(dirty_off);
|
||||
m_adder_screen_ram[0][offset] = data;
|
||||
m_tilemap0->mark_tile_dirty(dirty_off);
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static READ8_HANDLER( normal_ram_r )
|
||||
READ8_MEMBER( bfm_adder2_device::normal_ram_r )
|
||||
{
|
||||
return adder_ram[offset];
|
||||
return m_adder_ram[offset];
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static WRITE8_HANDLER( normal_ram_w )
|
||||
WRITE8_MEMBER( bfm_adder2_device::normal_ram_w )
|
||||
{
|
||||
adder_ram[offset] = data;
|
||||
m_adder_ram[offset] = data;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static WRITE8_HANDLER( adder2_rom_page_w )
|
||||
WRITE8_MEMBER( bfm_adder2_device::adder2_rom_page_w )
|
||||
{
|
||||
space.machine().root_device().membank("bank2")->set_entry(data&0x03);
|
||||
membank("bank2")->set_entry(data&0x03);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static WRITE8_HANDLER( adder2_c001_w )
|
||||
WRITE8_MEMBER( bfm_adder2_device::adder2_c001_w )
|
||||
{
|
||||
logerror("c101 = %02X\n",data);
|
||||
|
||||
//adder2_screen_page_reg = 0;
|
||||
//m_adder2_screen_page_reg = 0;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static WRITE8_HANDLER( adder2_screen_page_w )
|
||||
WRITE8_MEMBER( bfm_adder2_device::adder2_screen_page_w )
|
||||
{
|
||||
adder2_screen_page_reg = data;
|
||||
m_adder2_screen_page_reg = data;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static READ8_HANDLER( adder2_vbl_ctrl_r )
|
||||
READ8_MEMBER( bfm_adder2_device::adder2_vbl_ctrl_r )
|
||||
{
|
||||
adder_vbl_triggered = 0; // clear VBL start IRQ
|
||||
m_adder_vbl_triggered = 0; // clear VBL start IRQ
|
||||
|
||||
return adder2_c101;
|
||||
return m_adder2_c101;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static WRITE8_HANDLER( adder2_vbl_ctrl_w )
|
||||
WRITE8_MEMBER( bfm_adder2_device::adder2_vbl_ctrl_w )
|
||||
{
|
||||
adder2_c101 = data;
|
||||
m_adder2_c101 = data;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static READ8_HANDLER( adder2_uart_ctrl_r )
|
||||
READ8_MEMBER( bfm_adder2_device::adder2_uart_ctrl_r )
|
||||
{
|
||||
int status = 0;
|
||||
|
||||
if ( adder2_data_from_sc2 ) status |= 0x01; // receive buffer full
|
||||
if ( !adder2_data_to_sc2 ) status |= 0x02; // transmit buffer empty
|
||||
if ( m_adder2_data_from_sc2 ) status |= 0x01; // receive buffer full
|
||||
if ( !m_adder2_data_to_sc2 ) status |= 0x02; // transmit buffer empty
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static WRITE8_HANDLER( adder2_uart_ctrl_w )
|
||||
WRITE8_MEMBER( bfm_adder2_device::adder2_uart_ctrl_w )
|
||||
{
|
||||
adder2_data_from_sc2 = 0; // data available for adder from sc2
|
||||
adder2_sc2data = 0; // data
|
||||
adder2_data_to_sc2 = 0; // data available for sc2 from adder
|
||||
adder2_data = 0; // data
|
||||
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
|
||||
|
||||
LOG_CTRL(("adder2 uart ctrl:%02X\n", data));
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static READ8_HANDLER( adder2_uart_rx_r )
|
||||
READ8_MEMBER( bfm_adder2_device::adder2_uart_rx_r )
|
||||
{
|
||||
int data = adder2_sc2data;
|
||||
adder2_data_from_sc2 = 0; // clr flag, data from scorpion2 board available
|
||||
int data = m_adder2_sc2data;
|
||||
m_adder2_data_from_sc2 = 0; // clr flag, data from scorpion2 board available
|
||||
|
||||
LOG_CTRL(("rsc2:%02X (%c)\n",data, data ));
|
||||
|
||||
@ -393,69 +380,87 @@ static READ8_HANDLER( adder2_uart_rx_r )
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static WRITE8_HANDLER( adder2_uart_tx_w )
|
||||
WRITE8_MEMBER( bfm_adder2_device::adder2_uart_tx_w )
|
||||
{
|
||||
adder2_data_to_sc2 = 1; // set flag, data from adder available
|
||||
adder2_data = data; // store data
|
||||
m_adder2_data_to_sc2 = 1; // set flag, data from adder available
|
||||
m_adder2_data = data; // store data
|
||||
|
||||
LOG_CTRL(("ssc2 %02X(%c)\n",data, data ));
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static READ8_HANDLER( adder2_irq_r )
|
||||
READ8_MEMBER( bfm_adder2_device::adder2_irq_r )
|
||||
{
|
||||
int status = 0;
|
||||
|
||||
if ( adder_vbl_triggered ) status |= 0x02;
|
||||
if ( adder2_acia_triggered ) status |= 0x08;
|
||||
if ( m_adder_vbl_triggered ) status |= 0x02;
|
||||
if ( m_adder2_acia_triggered ) status |= 0x08;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
void adder2_send(int data)
|
||||
{
|
||||
adder2_data_from_sc2 = 1; // set flag, data from scorpion2 board available
|
||||
adder2_sc2data = data; // store data
|
||||
|
||||
adder2_acia_triggered = 1; // set flag, acia IRQ triggered
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
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_adder2_acia_triggered = 1; // set flag, acia IRQ triggered
|
||||
|
||||
m_cpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE );
|
||||
|
||||
//LOG_SERIAL(("sadder %02X (%c)\n",data, data ));
|
||||
}
|
||||
|
||||
int adder2_receive(void)
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
WRITE8_MEMBER(bfm_adder2_device::vid_uart_ctrl_w)
|
||||
{
|
||||
UINT8 data = adder2_data;
|
||||
adder2_data_to_sc2 = 0; // clr flag, data from adder available
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
READ8_MEMBER(bfm_adder2_device::vid_uart_rx_r)
|
||||
{
|
||||
UINT8 data = m_adder2_data;
|
||||
m_adder2_data_to_sc2 = 0; // clr flag, data from adder available
|
||||
|
||||
//LOG_SERIAL(("radder: %02X(%c)\n",data, data ));
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
int adder2_status()
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
READ8_MEMBER(bfm_adder2_device::vid_uart_ctrl_r)
|
||||
{
|
||||
int status = 0;
|
||||
|
||||
if ( adder2_data_to_sc2 ) status |= 0x01; // receive buffer full
|
||||
if ( !adder2_data_from_sc2) status |= 0x02; // transmit buffer empty
|
||||
if ( m_adder2_data_to_sc2 ) status |= 0x01; // receive buffer full
|
||||
if ( !m_adder2_data_from_sc2) status |= 0x02; // transmit buffer empty
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// decode character data to a format which can be decoded by MAME //
|
||||
// //
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
void adder2_decode_char_roms(running_machine &machine)
|
||||
void bfm_adder2_device::adder2_decode_char_roms()
|
||||
{
|
||||
UINT8 *p;
|
||||
|
||||
p = machine.root_device().memregion("gfx1")->base();
|
||||
UINT8 *p = machine().root_device().memregion("gfx1")->base();
|
||||
|
||||
if ( p )
|
||||
{
|
||||
UINT8 *s;
|
||||
|
||||
s = auto_alloc_array(machine, UINT8, 0x40000 );
|
||||
s = auto_alloc_array(machine(), UINT8, 0x40000 );
|
||||
{
|
||||
int x, y;
|
||||
|
||||
@ -482,7 +487,7 @@ void adder2_decode_char_roms(running_machine &machine)
|
||||
}
|
||||
y++;
|
||||
}
|
||||
auto_free(machine, s);
|
||||
auto_free(machine(), s);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -491,25 +496,25 @@ void adder2_decode_char_roms(running_machine &machine)
|
||||
// adder2 board memorymap /////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static ADDRESS_MAP_START( adder2_memmap, AS_PROGRAM, 8, driver_device )
|
||||
static ADDRESS_MAP_START( adder2_memmap, AS_PROGRAM, 8, bfm_adder2_device )
|
||||
|
||||
AM_RANGE(0x0000, 0x0000) AM_WRITE_LEGACY(adder2_screen_page_w) // screen access/display select
|
||||
AM_RANGE(0x0000, 0x0000) AM_WRITE(adder2_screen_page_w) // screen access/display select
|
||||
AM_RANGE(0x0000, 0x7FFF) AM_ROMBANK("bank2") // 8k paged ROM (4 pages)
|
||||
AM_RANGE(0x8000, 0x917F) AM_READWRITE_LEGACY(screen_ram_r, screen_ram_w)
|
||||
AM_RANGE(0x9180, 0x9FFF) AM_READWRITE_LEGACY(normal_ram_r, normal_ram_w)
|
||||
AM_RANGE(0x8000, 0x917F) AM_READWRITE(screen_ram_r, screen_ram_w)
|
||||
AM_RANGE(0x9180, 0x9FFF) AM_READWRITE(normal_ram_r, normal_ram_w)
|
||||
|
||||
AM_RANGE(0xC000, 0xC000) AM_WRITE_LEGACY(adder2_rom_page_w) // ROM page select
|
||||
AM_RANGE(0xC001, 0xC001) AM_WRITE_LEGACY(adder2_c001_w) // ??
|
||||
AM_RANGE(0xC000, 0xC000) AM_WRITE(adder2_rom_page_w) // ROM page select
|
||||
AM_RANGE(0xC001, 0xC001) AM_WRITE(adder2_c001_w) // ??
|
||||
|
||||
AM_RANGE(0xC101, 0xC101) AM_READWRITE_LEGACY(adder2_vbl_ctrl_r, adder2_vbl_ctrl_w)
|
||||
AM_RANGE(0xC103, 0xC103) AM_READ_LEGACY(adder2_irq_r) // IRQ latch read
|
||||
AM_RANGE(0xC101, 0xC101) AM_READWRITE(adder2_vbl_ctrl_r, adder2_vbl_ctrl_w)
|
||||
AM_RANGE(0xC103, 0xC103) AM_READ(adder2_irq_r) // IRQ latch read
|
||||
|
||||
// MC6850 compatible uart connected to main (scorpion2) board ///////////////////////////////////////
|
||||
|
||||
AM_RANGE(0xC200, 0xC200) AM_READWRITE_LEGACY(adder2_uart_ctrl_r, adder2_uart_ctrl_w ) // 6850 compatible uart control reg
|
||||
AM_RANGE(0xC201, 0xC201) AM_READWRITE_LEGACY(adder2_uart_rx_r, adder2_uart_tx_w ) // 6850 compatible uart data reg
|
||||
AM_RANGE(0xC200, 0xC200) AM_READWRITE(adder2_uart_ctrl_r, adder2_uart_ctrl_w ) // 6850 compatible uart control reg
|
||||
AM_RANGE(0xC201, 0xC201) AM_READWRITE(adder2_uart_rx_r, adder2_uart_tx_w ) // 6850 compatible uart data reg
|
||||
|
||||
AM_RANGE(0xE000, 0xFFFF) AM_ROM // 8k ROM
|
||||
AM_RANGE(0xE000, 0xFFFF) AM_ROM AM_REGION(":adder2", 0xE000) // 8k ROM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static const gfx_layout charlayout =
|
||||
@ -534,21 +539,29 @@ GFXDECODE_END
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
MACHINE_CONFIG_FRAGMENT( adder2 )
|
||||
MCFG_SCREEN_ADD("adder", RASTER)
|
||||
static MACHINE_CONFIG_FRAGMENT( adder2 )
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_SIZE( 400, 280)
|
||||
MCFG_SCREEN_VISIBLE_AREA( 0, 400-1, 0, 280-1)
|
||||
MCFG_SCREEN_REFRESH_RATE(50)
|
||||
|
||||
MCFG_VIDEO_START( adder2)
|
||||
MCFG_SCREEN_UPDATE_STATIC(adder2)
|
||||
MCFG_VIDEO_RESET( adder2)
|
||||
MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, bfm_adder2_device, update_screen)
|
||||
|
||||
MCFG_PALETTE_LENGTH(16)
|
||||
MCFG_PALETTE_INIT(adder2)
|
||||
MCFG_GFXDECODE(adder2)
|
||||
|
||||
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_CPU_VBLANK_INT("adder", adder2_vbl) // board has a VBL IRQ
|
||||
MCFG_DEVICE_VBLANK_INT_DEVICE("screen", DEVICE_SELF, bfm_adder2_device, adder2_vbl) // board has a VBL IRQ
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
//-------------------------------------------------
|
||||
// machine_config_additions - device-specific
|
||||
// machine configurations
|
||||
//-------------------------------------------------
|
||||
|
||||
machine_config_constructor bfm_adder2_device::device_mconfig_additions() const
|
||||
{
|
||||
return MACHINE_CONFIG_NAME( adder2 );
|
||||
}
|
||||
|
||||
|
@ -1,10 +1,76 @@
|
||||
#ifndef INC_BFMADDER2
|
||||
#define INC_BFMADDER2
|
||||
|
||||
int adder2_receive(void);
|
||||
void adder2_send(int data);
|
||||
int adder2_status(void);
|
||||
class bfm_adder2_device : public device_t
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bfm_adder2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
TILE_GET_INFO_MEMBER( get_tile0_info );
|
||||
TILE_GET_INFO_MEMBER( get_tile1_info );
|
||||
UINT32 update_screen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
INTERRUPT_GEN_MEMBER( adder2_vbl );
|
||||
DECLARE_READ8_MEMBER( screen_ram_r );
|
||||
DECLARE_WRITE8_MEMBER( screen_ram_w );
|
||||
DECLARE_READ8_MEMBER( normal_ram_r );
|
||||
DECLARE_WRITE8_MEMBER( normal_ram_w );
|
||||
DECLARE_WRITE8_MEMBER( adder2_rom_page_w );
|
||||
DECLARE_WRITE8_MEMBER( adder2_c001_w );
|
||||
DECLARE_WRITE8_MEMBER( adder2_screen_page_w );
|
||||
DECLARE_READ8_MEMBER( adder2_vbl_ctrl_r );
|
||||
DECLARE_WRITE8_MEMBER( adder2_vbl_ctrl_w );
|
||||
DECLARE_READ8_MEMBER( adder2_uart_ctrl_r );
|
||||
DECLARE_WRITE8_MEMBER( adder2_uart_ctrl_w );
|
||||
DECLARE_READ8_MEMBER( adder2_uart_rx_r );
|
||||
DECLARE_WRITE8_MEMBER( adder2_uart_tx_w );
|
||||
DECLARE_READ8_MEMBER( adder2_irq_r );
|
||||
|
||||
DECLARE_WRITE8_MEMBER(vid_uart_tx_w);
|
||||
DECLARE_WRITE8_MEMBER(vid_uart_ctrl_w);
|
||||
DECLARE_READ8_MEMBER(vid_uart_rx_r);
|
||||
DECLARE_READ8_MEMBER(vid_uart_ctrl_r);
|
||||
|
||||
void adder2_decode_char_roms();
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
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
|
||||
|
||||
UINT8 m_adder_ram[0xE80]; // normal RAM
|
||||
UINT8 m_adder_screen_ram[2][0x1180]; // paged display RAM
|
||||
|
||||
tilemap_t *m_tilemap0; // tilemap screen0
|
||||
tilemap_t *m_tilemap1; // timemap screen1
|
||||
|
||||
UINT8 m_adder2_data_from_sc2;
|
||||
UINT8 m_adder2_data_to_sc2;
|
||||
|
||||
UINT8 m_adder2_data;
|
||||
UINT8 m_adder2_sc2data;
|
||||
|
||||
optional_device<cpu_device> m_cpu;
|
||||
};
|
||||
|
||||
// device type definition
|
||||
extern const device_type BFM_ADDER2;
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_BFM_ADDER2_ADD(_tag) \
|
||||
MCFG_DEVICE_ADD(_tag, BFM_ADDER2, 0)
|
||||
|
||||
|
||||
void adder2_decode_char_roms(running_machine &machine);
|
||||
MACHINE_CONFIG_EXTERN(adder2);
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user