mirror of
https://github.com/holub/mame
synced 2025-06-23 12:58:37 +03:00
bbc: added monitor configuration (Colour, B&W, Green, Amber)
This commit is contained in:
parent
ccd2172b8e
commit
cc22c75313
@ -657,28 +657,66 @@ static INPUT_PORTS_START(bbc_joy)
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
INPUT_CHANGED_MEMBER(bbc_state::monitor_changed)
|
||||
{
|
||||
m_monitortype = read_safe(ioport("BBCCONFIG"), 0) &0x03;
|
||||
}
|
||||
|
||||
|
||||
INPUT_CHANGED_MEMBER(bbc_state::speech_changed)
|
||||
{
|
||||
// Switchable during runtime as some games (Hyper Sports, Space Fighter) are not compatible with Speech
|
||||
m_Speech = read_safe(ioport("BBCCONFIG"), 0) & 0x04;
|
||||
}
|
||||
|
||||
|
||||
static INPUT_PORTS_START(bbc_config)
|
||||
PORT_START("BBCCONFIG")
|
||||
PORT_START("BBCCONFIG")
|
||||
PORT_CONFNAME( 0x03, 0x00, "Monitor") PORT_CHANGED_MEMBER(DEVICE_SELF, bbc_state, monitor_changed, 0)
|
||||
PORT_CONFSETTING( 0x00, "Colour")
|
||||
PORT_CONFSETTING( 0x01, "B&W")
|
||||
PORT_CONFSETTING( 0x02, "Green")
|
||||
PORT_CONFSETTING( 0x03, "Amber")
|
||||
INPUT_PORTS_END
|
||||
|
||||
PORT_CONFNAME( 0x01, 0x00, "Speech Upgrade" )
|
||||
PORT_CONFSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_CONFSETTING( 0x01, DEF_STR( Off ) )
|
||||
|
||||
PORT_CONFNAME( 0x18, 0x00, "Sideways RAM Type" )
|
||||
PORT_CONFSETTING( 0x00, DEF_STR( None ) )
|
||||
PORT_CONFSETTING( 0x08, "Solidisk 128K (fe62)" )
|
||||
PORT_CONFSETTING( 0x10, "Acorn 64K (fe30)" )
|
||||
PORT_CONFSETTING( 0x18, "Acorn 128K (fe30)" )
|
||||
// PORT_CONFSETTING( 0x20, "ATPL Sidewise 16K" )
|
||||
static INPUT_PORTS_START(bbcb_config)
|
||||
PORT_START("BBCCONFIG")
|
||||
PORT_CONFNAME( 0x03, 0x00, "Monitor" ) PORT_CHANGED_MEMBER(DEVICE_SELF, bbc_state, monitor_changed, 0)
|
||||
PORT_CONFSETTING( 0x00, "Colour")
|
||||
PORT_CONFSETTING( 0x01, "B&W")
|
||||
PORT_CONFSETTING( 0x02, "Green")
|
||||
PORT_CONFSETTING( 0x03, "Amber")
|
||||
PORT_CONFNAME( 0x04, 0x04, "Speech Fitted" ) PORT_CHANGED_MEMBER(DEVICE_SELF, bbc_state, speech_changed, 0)
|
||||
PORT_CONFSETTING( 0x00, DEF_STR( No ) )
|
||||
PORT_CONFSETTING( 0x04, DEF_STR( Yes ) )
|
||||
PORT_CONFNAME( 0x18, 0x00, "Sideways RAM Board")
|
||||
PORT_CONFSETTING( 0x00, DEF_STR( None ) )
|
||||
PORT_CONFSETTING( 0x08, "Solidisk 128K (fe62)" )
|
||||
PORT_CONFSETTING( 0x10, "Acorn 64K (fe30)" )
|
||||
PORT_CONFSETTING( 0x18, "Acorn 128K (fe30)" )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START(bbcbp_config)
|
||||
PORT_START("BBCCONFIG")
|
||||
PORT_CONFNAME( 0x03, 0x00, "Monitor") PORT_CHANGED_MEMBER(DEVICE_SELF, bbc_state, monitor_changed, 0)
|
||||
PORT_CONFSETTING( 0x00, "Colour")
|
||||
PORT_CONFSETTING( 0x01, "B&W")
|
||||
PORT_CONFSETTING( 0x02, "Green")
|
||||
PORT_CONFSETTING( 0x03, "Amber")
|
||||
PORT_CONFNAME( 0x04, 0x04, "Speech Fitted") PORT_CHANGED_MEMBER(DEVICE_SELF, bbc_state, speech_changed, 0)
|
||||
PORT_CONFSETTING( 0x00, DEF_STR(No))
|
||||
PORT_CONFSETTING( 0x04, DEF_STR(Yes))
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START(bbca)
|
||||
PORT_INCLUDE(bbc_config)
|
||||
PORT_INCLUDE(bbc_keyboard)
|
||||
PORT_INCLUDE(bbc_dipswitch)
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START(bbcb)
|
||||
PORT_INCLUDE(bbc_config)
|
||||
PORT_INCLUDE(bbcb_config)
|
||||
PORT_INCLUDE(bbc_keyboard)
|
||||
PORT_INCLUDE(bbc_dipswitch)
|
||||
PORT_INCLUDE(bbcb_links)
|
||||
@ -686,7 +724,7 @@ static INPUT_PORTS_START(bbcb)
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START(bbcbp)
|
||||
PORT_INCLUDE(bbc_config)
|
||||
PORT_INCLUDE(bbcbp_config)
|
||||
PORT_INCLUDE(bbc_keyboard)
|
||||
PORT_INCLUDE(bbc_dipswitch)
|
||||
PORT_INCLUDE(bbcbp_links)
|
||||
@ -708,6 +746,7 @@ static INPUT_PORTS_START(abc)
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START(bbcm)
|
||||
PORT_INCLUDE(bbc_config)
|
||||
PORT_INCLUDE(bbc_keyboard)
|
||||
PORT_INCLUDE(bbc_keypad)
|
||||
PORT_INCLUDE(bbc_joy)
|
||||
@ -828,11 +867,11 @@ static MACHINE_CONFIG_START( bbca, bbc_state )
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(12)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(bbc_state, crtc_update_row)
|
||||
//MCFG_MC6845_OUT_DE_CB(WRITELINE(bbc_state, bbc_de_changed))
|
||||
//MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(bbc_state, bbc_hsync))
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(bbc_state, bbc_vsync))
|
||||
MCFG_MC6845_OUT_DE_CB(WRITELINE(bbc_state, bbc_de_changed))
|
||||
MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(bbc_state, bbc_hsync_changed))
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(bbc_state, bbc_vsync_changed))
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(bbc_state, bbca)
|
||||
MCFG_VIDEO_START_OVERRIDE(bbc_state, bbc)
|
||||
|
||||
MCFG_DEFAULT_LAYOUT(layout_bbc)
|
||||
|
||||
@ -884,7 +923,6 @@ static MACHINE_CONFIG_DERIVED( bbcb, bbca )
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(bbc_state, bbcb)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(bbc_state, bbcb)
|
||||
MCFG_VIDEO_START_OVERRIDE(bbc_state, bbcb)
|
||||
|
||||
/* internal ram */
|
||||
MCFG_RAM_MODIFY(RAM_TAG)
|
||||
@ -995,12 +1033,6 @@ static MACHINE_CONFIG_DERIVED( bbcbp, bbcb1770 )
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(bbc_state, bbcbp)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(bbc_state, bbcbp)
|
||||
MCFG_VIDEO_START_OVERRIDE(bbc_state, bbcbp)
|
||||
|
||||
/* internal ram */
|
||||
MCFG_RAM_MODIFY(RAM_TAG)
|
||||
MCFG_RAM_DEFAULT_SIZE("64K")
|
||||
MCFG_RAM_DEFAULT_VALUE(0x00)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -1011,12 +1043,6 @@ static MACHINE_CONFIG_DERIVED( bbcbp128, bbcb1770 )
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(bbc_state, bbcbp)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(bbc_state, bbcbp)
|
||||
MCFG_VIDEO_START_OVERRIDE(bbc_state, bbcbp)
|
||||
|
||||
/* internal ram */
|
||||
MCFG_RAM_MODIFY(RAM_TAG)
|
||||
MCFG_RAM_DEFAULT_SIZE("128K")
|
||||
MCFG_RAM_DEFAULT_VALUE(0x00)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -1029,7 +1055,6 @@ MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( torchf, bbcb )
|
||||
/* basic machine hardware */
|
||||
MCFG_MACHINE_START_OVERRIDE(bbc_state, torch)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(bbc_state, torch)
|
||||
|
||||
/* Add Torch Z80 Communicator co-processor */
|
||||
@ -1206,7 +1231,7 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
|
||||
|
||||
/* internal ram */
|
||||
MCFG_RAM_ADD(RAM_TAG)
|
||||
MCFG_RAM_DEFAULT_SIZE("128K")
|
||||
MCFG_RAM_DEFAULT_SIZE("32K")
|
||||
MCFG_RAM_DEFAULT_VALUE(0x00)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(bbc_state, bbcm)
|
||||
@ -1233,9 +1258,11 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(12)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(bbc_state, crtc_update_row)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(bbc_state, bbc_vsync))
|
||||
MCFG_MC6845_OUT_DE_CB(WRITELINE(bbc_state, bbc_de_changed))
|
||||
MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(bbc_state, bbc_hsync_changed))
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(bbc_state, bbc_vsync_changed))
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(bbc_state, bbcm)
|
||||
MCFG_VIDEO_START_OVERRIDE(bbc_state, bbc)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -48,6 +48,14 @@ enum machine_type_t
|
||||
COMPACT
|
||||
};
|
||||
|
||||
enum monitor_type_t
|
||||
{
|
||||
COLOUR = 0,
|
||||
BLACKWHITE = 1,
|
||||
GREEN = 2,
|
||||
AMBER = 3
|
||||
};
|
||||
|
||||
class bbc_state : public driver_device
|
||||
{
|
||||
public:
|
||||
@ -134,26 +142,17 @@ public:
|
||||
DECLARE_DIRECT_UPDATE_MEMBER(bbcm_direct_handler);
|
||||
|
||||
DECLARE_DRIVER_INIT(bbc);
|
||||
DECLARE_VIDEO_START(bbc);
|
||||
|
||||
DECLARE_MACHINE_START(bbca);
|
||||
DECLARE_MACHINE_RESET(bbca);
|
||||
DECLARE_VIDEO_START(bbca);
|
||||
|
||||
DECLARE_MACHINE_START(bbcb);
|
||||
DECLARE_MACHINE_RESET(bbcb);
|
||||
DECLARE_VIDEO_START(bbcb);
|
||||
|
||||
DECLARE_MACHINE_START(torch);
|
||||
DECLARE_MACHINE_RESET(torch);
|
||||
|
||||
DECLARE_MACHINE_START(bbcbp);
|
||||
DECLARE_MACHINE_RESET(bbcbp);
|
||||
DECLARE_VIDEO_START(bbcbp);
|
||||
|
||||
DECLARE_MACHINE_START(bbcm);
|
||||
DECLARE_MACHINE_RESET(bbcm);
|
||||
DECLARE_VIDEO_START(bbcm);
|
||||
|
||||
DECLARE_MACHINE_START(bbcmc);
|
||||
DECLARE_MACHINE_RESET(bbcmc);
|
||||
|
||||
@ -172,7 +171,11 @@ public:
|
||||
DECLARE_READ8_MEMBER(bbcb_via_user_read_portb);
|
||||
DECLARE_WRITE8_MEMBER(bbcb_via_user_write_portb);
|
||||
DECLARE_WRITE_LINE_MEMBER(bbcb_via_user_irq_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(bbc_vsync);
|
||||
DECLARE_WRITE_LINE_MEMBER(bbc_hsync_changed);
|
||||
DECLARE_WRITE_LINE_MEMBER(bbc_vsync_changed);
|
||||
DECLARE_WRITE_LINE_MEMBER(bbc_de_changed);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(monitor_changed);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(speech_changed);
|
||||
void update_acia_rxd();
|
||||
void update_acia_dcd();
|
||||
void update_acia_cts();
|
||||
@ -181,7 +184,7 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER(write_rxd_serial);
|
||||
DECLARE_WRITE_LINE_MEMBER(write_dcd_serial);
|
||||
DECLARE_WRITE_LINE_MEMBER(write_cts_serial);
|
||||
DECLARE_INPUT_CHANGED_MEMBER( trigger_reset );
|
||||
DECLARE_INPUT_CHANGED_MEMBER(trigger_reset);
|
||||
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(fdc_drq_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(motor_w);
|
||||
@ -248,8 +251,9 @@ public: // HACK FOR MC6845
|
||||
machine_type_t m_machinetype;
|
||||
|
||||
bool m_os01; // flag indicating whether OS 0.1 is being used
|
||||
int m_SWRAMtype; // this stores the DIP switch setting for the SWRAM type being used
|
||||
int m_Speech; // this stores the CONF setting for Speech enabled/disabled
|
||||
int m_monitortype; // monitor type (colour, green, amber)
|
||||
int m_SWRAMtype; // this stores the setting for the SWRAM type being used
|
||||
int m_Speech; // this stores the setting for Speech enabled/disabled
|
||||
|
||||
int m_ACCCON_IRR; // IRQ inputs
|
||||
|
||||
@ -395,8 +399,9 @@ public: // HACK FOR MC6845
|
||||
bitmap_ind16 *m_BBC_bitmap;
|
||||
int m_y_screen_pos;
|
||||
unsigned char m_pixel_bits[256];
|
||||
int m_BBC_HSync;
|
||||
int m_BBC_VSync;
|
||||
int m_hsync;
|
||||
int m_vsync;
|
||||
int m_display_enable;
|
||||
|
||||
int m_Teletext_Latch;
|
||||
int m_VideoULA_CR;
|
||||
@ -420,8 +425,9 @@ public: // HACK FOR MC6845
|
||||
int m_videoULA_palette1[16];
|
||||
int *m_videoULA_palette_lookup;
|
||||
|
||||
rgb_t out_rgb(rgb_t entry);
|
||||
|
||||
void bbc_setvideoshadow(int vdusel);
|
||||
void common_init(int memorySize);
|
||||
void set_pixel_lookup();
|
||||
int vdudriverset();
|
||||
int bbcm_vdudriverset();
|
||||
|
@ -7,8 +7,6 @@
|
||||
|
||||
Gordon Jefferyes
|
||||
mess_bbc@romvault.com
|
||||
Nigel Barnes
|
||||
ngbarnes@hotmail.com
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
@ -18,7 +16,6 @@
|
||||
#include "sound/tms5220.h"
|
||||
#include "machine/6522via.h"
|
||||
#include "machine/wd_fdc.h"
|
||||
#include "imagedev/flopdrv.h"
|
||||
#include "includes/bbc.h"
|
||||
#include "machine/mc146818.h"
|
||||
#include "bus/centronics/ctronics.h"
|
||||
@ -74,7 +71,7 @@ WRITE8_MEMBER(bbc_state::bbc_memoryb3_w)
|
||||
0: none
|
||||
1: 128K (bank 8 to 15) Solidisc sideways ram userport bank latch
|
||||
2: 64K (banks 4 to 7) for Acorn sideways ram FE30 bank latch
|
||||
3: 128K (banks 8 to 15) for Acown sideways ram FE30 bank latch
|
||||
3: 128K (banks 8 to 15) for Acorn sideways ram FE30 bank latch
|
||||
*/
|
||||
static const unsigned short bbc_SWRAMtype1[16]={0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1};
|
||||
static const unsigned short bbc_SWRAMtype2[16]={0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0};
|
||||
@ -1427,7 +1424,7 @@ WRITE_LINE_MEMBER(bbc_state::write_acia_clock)
|
||||
WRITE_LINE_MEMBER(bbc_state::motor_w)
|
||||
{
|
||||
for (int i=0; i != 2; i++) {
|
||||
char devname[1];
|
||||
char devname[8];
|
||||
sprintf(devname, "%d", i);
|
||||
floppy_connector *con = m_i8271->subdevice<floppy_connector>(devname);
|
||||
if (con) {
|
||||
@ -1439,7 +1436,7 @@ WRITE_LINE_MEMBER(bbc_state::motor_w)
|
||||
WRITE_LINE_MEMBER(bbc_state::side_w)
|
||||
{
|
||||
for (int i=0; i != 2; i++) {
|
||||
char devname[1];
|
||||
char devname[8];
|
||||
sprintf(devname, "%d", i);
|
||||
floppy_connector *con = m_i8271->subdevice<floppy_connector>(devname);
|
||||
if (con) {
|
||||
@ -1595,6 +1592,7 @@ int bbc_state::bbc_load_rom(device_image_interface &image, generic_slot_device *
|
||||
{
|
||||
UINT32 size = slot->common_get_size("rom");
|
||||
|
||||
// socket accepts 8K and 16K ROM only
|
||||
if (size != 0x2000 && size != 0x4000)
|
||||
{
|
||||
image.seterror(IMAGE_ERROR_UNSPECIFIED, "Unsupported ROM size");
|
||||
@ -1733,11 +1731,16 @@ void bbc_state::bbcm_setup_banks(memory_bank *membank, int banks, UINT32 shift,
|
||||
MACHINE_START_MEMBER(bbc_state, bbca)
|
||||
{
|
||||
m_machinetype = MODELA;
|
||||
|
||||
bbc_setup_banks(m_bank4, 4, 0, 0x4000);
|
||||
}
|
||||
|
||||
MACHINE_RESET_MEMBER(bbc_state, bbca)
|
||||
{
|
||||
m_monitortype = read_safe(ioport("BBCCONFIG"), 0) & 0x03;
|
||||
m_Speech = read_safe(ioport("BBCCONFIG"), 0) & 0x04;
|
||||
m_SWRAMtype = read_safe(ioport("BBCCONFIG"), 0) & 0x18;
|
||||
|
||||
UINT8 *RAM = m_region_maincpu->base();
|
||||
|
||||
m_bank1->set_base(RAM);
|
||||
@ -1769,9 +1772,12 @@ MACHINE_START_MEMBER(bbc_state, bbcb)
|
||||
|
||||
MACHINE_RESET_MEMBER(bbc_state, bbcb)
|
||||
{
|
||||
m_monitortype = read_safe(ioport("BBCCONFIG"), 0) & 0x03;
|
||||
m_Speech = read_safe(ioport("BBCCONFIG"), 1) & 0x04;
|
||||
m_SWRAMtype = read_safe(ioport("BBCCONFIG"), 0) & 0x18;
|
||||
|
||||
UINT8 *RAM = m_region_maincpu->base();
|
||||
m_Speech = (ioport("BBCCONFIG")->read() >> 0) & 0x01;
|
||||
m_SWRAMtype = (ioport("BBCCONFIG")->read() >> 3) & 0x03;
|
||||
|
||||
m_bank1->set_base(RAM);
|
||||
m_bank3->set_base(RAM + 0x4000);
|
||||
m_memorySize=32;
|
||||
@ -1783,26 +1789,13 @@ MACHINE_RESET_MEMBER(bbc_state, bbcb)
|
||||
}
|
||||
|
||||
|
||||
MACHINE_START_MEMBER(bbc_state, torch)
|
||||
{
|
||||
m_machinetype = MODELB;
|
||||
m_mc6850_clock = 0;
|
||||
bbc_setup_banks(m_bank4, 16, 0, 0x4000);
|
||||
}
|
||||
|
||||
MACHINE_RESET_MEMBER(bbc_state, torch)
|
||||
{
|
||||
UINT8 *RAM = m_region_maincpu->base();
|
||||
m_Speech = 1;
|
||||
m_SWRAMtype = 0;
|
||||
m_bank1->set_base(RAM);
|
||||
m_bank3->set_base(RAM + 0x4000);
|
||||
m_memorySize=32;
|
||||
MACHINE_RESET_CALL_MEMBER(bbcb);
|
||||
|
||||
m_bank4->set_entry(0);
|
||||
m_bank7->set_base(m_region_os->base()); /* bank 7 points at the OS rom from c000 to ffff */
|
||||
|
||||
bbcb_IC32_initialise(this);
|
||||
m_monitortype = 0;
|
||||
m_Speech = 1;
|
||||
m_SWRAMtype = 0;
|
||||
}
|
||||
|
||||
|
||||
@ -1820,7 +1813,10 @@ MACHINE_START_MEMBER(bbc_state, bbcbp)
|
||||
|
||||
MACHINE_RESET_MEMBER(bbc_state, bbcbp)
|
||||
{
|
||||
m_Speech = 1;
|
||||
m_monitortype = read_safe(ioport("BBCCONFIG"), 0) & 0x03;
|
||||
m_Speech = read_safe(ioport("BBCCONFIG"), 1) & 0x04;
|
||||
m_SWRAMtype = 0;
|
||||
|
||||
m_bank1->set_base(m_region_maincpu->base());
|
||||
m_bank2->set_base(m_region_maincpu->base() + 0x3000); /* bank 2 screen/shadow ram from 3000 to 7fff */
|
||||
m_bank4->set_entry(0);
|
||||
@ -1849,6 +1845,10 @@ MACHINE_START_MEMBER(bbc_state, bbcm)
|
||||
|
||||
MACHINE_RESET_MEMBER(bbc_state, bbcm)
|
||||
{
|
||||
m_monitortype = read_safe(ioport("BBCCONFIG"), 0) & 0x03;
|
||||
m_Speech = 0;
|
||||
m_SWRAMtype = 0;
|
||||
|
||||
m_bank1->set_base(m_region_maincpu->base()); /* bank 1 regular lower ram from 0000 to 2fff */
|
||||
m_bank2->set_base(m_region_maincpu->base() + 0x3000); /* bank 2 screen/shadow ram from 3000 to 7fff */
|
||||
m_bank4->set_entry(0);
|
||||
|
@ -103,6 +103,25 @@ static const rgb_t bbc_palette[8] =
|
||||
rgb_t(0x000, 0x000, 0x000)
|
||||
};
|
||||
|
||||
inline rgb_t bbc_state::out_rgb(rgb_t entry)
|
||||
{
|
||||
float luma = float(entry.r()) * 0.299 + float(entry.g()) * 0.587 + float(entry.b()) * 0.114;
|
||||
switch (m_monitortype)
|
||||
{
|
||||
case monitor_type_t::BLACKWHITE:
|
||||
return rgb_t(luma, luma, luma);
|
||||
|
||||
case monitor_type_t::GREEN:
|
||||
return rgb_t(0.2 * luma, 0.9 * luma, 0.1 * luma);
|
||||
|
||||
case monitor_type_t::AMBER:
|
||||
return rgb_t(1.0 * luma, 0.8 * luma, 0.1 * luma);
|
||||
|
||||
default:
|
||||
return entry;
|
||||
}
|
||||
}
|
||||
|
||||
PALETTE_INIT_MEMBER(bbc_state, bbc)
|
||||
{
|
||||
palette.set_pen_colors(0, bbc_palette, ARRAY_LENGTH(bbc_palette));
|
||||
@ -221,9 +240,9 @@ MC6845_UPDATE_ROW( bbc_state::crtc_update_row )
|
||||
int g = BIT(col, 1) * 0xff;
|
||||
int b = BIT(col, 2) * 0xff;
|
||||
|
||||
rgb_t rgb = rgb_t(r, g, b);
|
||||
rgb_t rgb = out_rgb(rgb_t(r, g, b));
|
||||
|
||||
bitmap.pix32(y, (x_pos*m_pixels_per_byte)+pixelno) = rgb;
|
||||
bitmap.pix32(y, (x_pos*m_pixels_per_byte) + pixelno) = rgb;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -242,7 +261,7 @@ MC6845_UPDATE_ROW( bbc_state::crtc_update_row )
|
||||
for(int pixelno=0; pixelno<m_pixels_per_byte; pixelno++)
|
||||
{
|
||||
int col = m_videoULA_palette_lookup[m_pixel_bits[i]] ^ ((x_pos==cursor_x) ? 7 : 0);
|
||||
bitmap.pix32(y, (x_pos*m_pixels_per_byte)+pixelno) = palette[col];
|
||||
bitmap.pix32(y, (x_pos*m_pixels_per_byte)+pixelno) = out_rgb(palette[col]);
|
||||
i = (i<<1) | 1;
|
||||
}
|
||||
}
|
||||
@ -253,18 +272,28 @@ MC6845_UPDATE_ROW( bbc_state::crtc_update_row )
|
||||
{
|
||||
for(int pixelno=0; pixelno<m_pixels_per_byte; pixelno++)
|
||||
{
|
||||
bitmap.pix32(y, (x_pos*m_pixels_per_byte)+pixelno) = palette[7];
|
||||
bitmap.pix32(y, (x_pos*m_pixels_per_byte)+pixelno) = out_rgb(palette[7]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(bbc_state::bbc_vsync)
|
||||
WRITE_LINE_MEMBER(bbc_state::bbc_hsync_changed)
|
||||
{
|
||||
m_hsync = state ? 1 : 0;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(bbc_state::bbc_vsync_changed)
|
||||
{
|
||||
m_vsync = state ? 1 : 0;
|
||||
m_trom->dew_w(state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(bbc_state::bbc_de_changed)
|
||||
{
|
||||
m_display_enable = state ? 1 : 0;
|
||||
}
|
||||
|
||||
/**** BBC B+/Master Shadow Ram change ****/
|
||||
|
||||
@ -284,33 +313,12 @@ void bbc_state::bbc_setvideoshadow(int vdusel)
|
||||
* Initialize the BBC video emulation
|
||||
************************************************************************/
|
||||
|
||||
void bbc_state::common_init(int memorySize)
|
||||
VIDEO_START_MEMBER(bbc_state, bbc)
|
||||
{
|
||||
m_emulation_cursor_size = 1;
|
||||
|
||||
set_pixel_lookup();
|
||||
|
||||
m_BBC_Video_RAM = m_region_maincpu->base();
|
||||
m_memorySize = memorySize;
|
||||
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER(bbc_state,bbca)
|
||||
{
|
||||
common_init(m_ram->size()/1024);
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER(bbc_state,bbcb)
|
||||
{
|
||||
common_init(32);
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER(bbc_state,bbcbp)
|
||||
{
|
||||
common_init(32);
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER(bbc_state,bbcm)
|
||||
{
|
||||
common_init(32);
|
||||
m_memorySize = m_ram->size() / 1024;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user