From 5bcf71db9a3974be1ef749070059bf421e485c43 Mon Sep 17 00:00:00 2001 From: Curt Coder Date: Sun, 3 Jan 2016 21:00:27 +0200 Subject: [PATCH] pet/cbm2: HSG/HRG WIP. (nw) --- src/devices/bus/cbm2/hrg.cpp | 61 +++++++++++++++++++++++++----------- src/devices/bus/cbm2/hrg.h | 20 ++++++------ src/devices/bus/pet/hsg.cpp | 26 +++++++++++++-- 3 files changed, 76 insertions(+), 31 deletions(-) diff --git a/src/devices/bus/cbm2/hrg.cpp b/src/devices/bus/cbm2/hrg.cpp index 512c50be0c0..e0e9bf667ba 100644 --- a/src/devices/bus/cbm2/hrg.cpp +++ b/src/devices/bus/cbm2/hrg.cpp @@ -14,6 +14,7 @@ - version A (EF9365, 512x512 interlaced, 1 page) - version B (EF9366, 512x256 non-interlaced, 2 pages) + - 256KB version ROM */ @@ -35,8 +36,8 @@ // DEVICE DEFINITIONS //************************************************************************** -const device_type CBM2_HRG_A = &device_creator; -const device_type CBM2_HRG_B = &device_creator; +const device_type CBM2_HRG_A = &device_creator; +const device_type CBM2_HRG_B = &device_creator; //------------------------------------------------- @@ -53,12 +54,32 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const rom_entry *cbm2_graphic_cartridge_device::device_rom_region() const +const rom_entry *cbm2_hrg_t::device_rom_region() const { return ROM_NAME( cbm2_hrg ); } +//------------------------------------------------- +// ADDRESS_MAP( hrg_a_map ) +//------------------------------------------------- + +static ADDRESS_MAP_START( hrg_a_map, AS_0, 8, cbm2_hrg_a_t ) + ADDRESS_MAP_GLOBAL_MASK(0x7fff) + AM_RANGE(0x0000, 0x7fff) AM_RAM +ADDRESS_MAP_END + + +//------------------------------------------------- +// ADDRESS_MAP( hrg_b_map ) +//------------------------------------------------- + +static ADDRESS_MAP_START( hrg_b_map, AS_0, 8, cbm2_hrg_b_t ) + ADDRESS_MAP_GLOBAL_MASK(0x3fff) + AM_RANGE(0x0000, 0x3fff) AM_RAM +ADDRESS_MAP_END + + //------------------------------------------------- // MACHINE_CONFIG_FRAGMENT( cbm2_hrg_a ) //------------------------------------------------- @@ -69,9 +90,11 @@ static MACHINE_CONFIG_FRAGMENT( cbm2_hrg_a ) MCFG_SCREEN_SIZE(512, 512) MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 512-1) MCFG_SCREEN_REFRESH_RATE(25) + MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette") MCFG_DEVICE_ADD(EF9365_TAG, EF9365, 1750000) MCFG_VIDEO_SET_SCREEN(SCREEN_TAG) + MCFG_DEVICE_ADDRESS_MAP(AS_0, hrg_a_map) MCFG_EF936X_PALETTE("palette") MCFG_EF936X_BITPLANES_CNT(1); MCFG_EF936X_DISPLAYMODE(EF936X_512x512_DISPLAY_MODE); @@ -88,9 +111,11 @@ static MACHINE_CONFIG_FRAGMENT( cbm2_hrg_b ) MCFG_SCREEN_SIZE(512, 256) MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1) MCFG_SCREEN_REFRESH_RATE(50) + MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette") MCFG_DEVICE_ADD(EF9366_TAG, EF9365, 1750000) MCFG_VIDEO_SET_SCREEN(SCREEN_TAG) + MCFG_DEVICE_ADDRESS_MAP(AS_0, hrg_b_map) MCFG_EF936X_PALETTE("palette") MCFG_EF936X_BITPLANES_CNT(1); MCFG_EF936X_DISPLAYMODE(EF936X_512x256_DISPLAY_MODE); @@ -102,12 +127,12 @@ MACHINE_CONFIG_END // machine configurations //------------------------------------------------- -machine_config_constructor cbm2_graphic_cartridge_a_device::device_mconfig_additions() const +machine_config_constructor cbm2_hrg_a_t::device_mconfig_additions() const { return MACHINE_CONFIG_NAME( cbm2_hrg_a ); } -machine_config_constructor cbm2_graphic_cartridge_b_device::device_mconfig_additions() const +machine_config_constructor cbm2_hrg_b_t::device_mconfig_additions() const { return MACHINE_CONFIG_NAME( cbm2_hrg_b ); } @@ -119,10 +144,10 @@ machine_config_constructor cbm2_graphic_cartridge_b_device::device_mconfig_addit //************************************************************************** //------------------------------------------------- -// cbm2_graphic_cartridge_device - constructor +// cbm2_hrg_t - constructor //------------------------------------------------- -cbm2_graphic_cartridge_device::cbm2_graphic_cartridge_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) : +cbm2_hrg_t::cbm2_hrg_t(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) : device_t(mconfig, type, name, tag, owner, clock, shortname, source), device_cbm2_expansion_card_interface(mconfig, *this), m_gdc(*this, EF9366_TAG), @@ -130,13 +155,13 @@ cbm2_graphic_cartridge_device::cbm2_graphic_cartridge_device(const machine_confi { } -cbm2_graphic_cartridge_a_device::cbm2_graphic_cartridge_a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - cbm2_graphic_cartridge_device(mconfig, CBM2_HRG_A, "CBM 500/600/700 High Resolution Graphics (A)", tag, owner, clock, "cbm2_hrga", __FILE__) +cbm2_hrg_a_t::cbm2_hrg_a_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + cbm2_hrg_t(mconfig, CBM2_HRG_A, "CBM 500/600/700 High Resolution Graphics (A)", tag, owner, clock, "cbm2_hrga", __FILE__) { } -cbm2_graphic_cartridge_b_device::cbm2_graphic_cartridge_b_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - cbm2_graphic_cartridge_device(mconfig, CBM2_HRG_B, "CBM 500/600/700 High Resolution Graphics (B)", tag, owner, clock, "cbm2_hrgb", __FILE__) +cbm2_hrg_b_t::cbm2_hrg_b_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + cbm2_hrg_t(mconfig, CBM2_HRG_B, "CBM 500/600/700 High Resolution Graphics (B)", tag, owner, clock, "cbm2_hrgb", __FILE__) { } @@ -145,10 +170,8 @@ cbm2_graphic_cartridge_b_device::cbm2_graphic_cartridge_b_device(const machine_c // device_start - device-specific startup //------------------------------------------------- -void cbm2_graphic_cartridge_device::device_start() +void cbm2_hrg_t::device_start() { - m_gdc->set_color_entry(0, 0, 0, 0); - m_gdc->set_color_entry(1, 0, 0xff, 00); } @@ -156,7 +179,7 @@ void cbm2_graphic_cartridge_device::device_start() // device_reset - device-specific reset //------------------------------------------------- -void cbm2_graphic_cartridge_device::device_reset() +void cbm2_hrg_t::device_reset() { m_gdc->reset(); } @@ -166,7 +189,7 @@ void cbm2_graphic_cartridge_device::device_reset() // cbm2_bd_r - cartridge data read //------------------------------------------------- -UINT8 cbm2_graphic_cartridge_device::cbm2_bd_r(address_space &space, offs_t offset, UINT8 data, int csbank1, int csbank2, int csbank3) +UINT8 cbm2_hrg_t::cbm2_bd_r(address_space &space, offs_t offset, UINT8 data, int csbank1, int csbank2, int csbank3) { if (!csbank3) { @@ -197,7 +220,7 @@ UINT8 cbm2_graphic_cartridge_device::cbm2_bd_r(address_space &space, offs_t offs } else if (offset >= 0x7ff0) { - data = m_gdc->data_r(space, offset & 0x07); + data = m_gdc->data_r(space, offset & 0x0f); } } @@ -209,7 +232,7 @@ UINT8 cbm2_graphic_cartridge_device::cbm2_bd_r(address_space &space, offs_t offs // cbm2_bd_w - cartridge data write //------------------------------------------------- -void cbm2_graphic_cartridge_device::cbm2_bd_w(address_space &space, offs_t offset, UINT8 data, int csbank1, int csbank2, int csbank3) +void cbm2_hrg_t::cbm2_bd_w(address_space &space, offs_t offset, UINT8 data, int csbank1, int csbank2, int csbank3) { if (!csbank3) { @@ -232,7 +255,7 @@ void cbm2_graphic_cartridge_device::cbm2_bd_w(address_space &space, offs_t offse } else if (offset >= 0x7ff0) { - m_gdc->data_w(space, offset & 0x07, data); + m_gdc->data_w(space, offset & 0x0f, data); } } } diff --git a/src/devices/bus/cbm2/hrg.h b/src/devices/bus/cbm2/hrg.h index fc759049cf6..67e0f25ad90 100644 --- a/src/devices/bus/cbm2/hrg.h +++ b/src/devices/bus/cbm2/hrg.h @@ -21,14 +21,14 @@ // TYPE DEFINITIONS //************************************************************************** -// ======================> cbm2_graphic_cartridge_device +// ======================> cbm2_hrg_t -class cbm2_graphic_cartridge_device : public device_t, - public device_cbm2_expansion_card_interface +class cbm2_hrg_t : public device_t, + public device_cbm2_expansion_card_interface { public: // construction/destruction - cbm2_graphic_cartridge_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); + cbm2_hrg_t(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); // optional information overrides virtual const rom_entry *device_rom_region() const override; @@ -48,26 +48,26 @@ private: }; -// ======================> cbm2_graphic_cartridge_a_device +// ======================> cbm2_hrg_a_t -class cbm2_graphic_cartridge_a_device : public cbm2_graphic_cartridge_device +class cbm2_hrg_a_t : public cbm2_hrg_t { public: // construction/destruction - cbm2_graphic_cartridge_a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + cbm2_hrg_a_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); // optional information overrides virtual machine_config_constructor device_mconfig_additions() const override; }; -// ======================> cbm2_graphic_cartridge_b_device +// ======================> cbm2_hrg_b_t -class cbm2_graphic_cartridge_b_device : public cbm2_graphic_cartridge_device +class cbm2_hrg_b_t : public cbm2_hrg_t { public: // construction/destruction - cbm2_graphic_cartridge_b_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + cbm2_hrg_b_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); // optional information overrides virtual machine_config_constructor device_mconfig_additions() const override; diff --git a/src/devices/bus/pet/hsg.cpp b/src/devices/bus/pet/hsg.cpp index 117100bafe7..2a90008c307 100644 --- a/src/devices/bus/pet/hsg.cpp +++ b/src/devices/bus/pet/hsg.cpp @@ -62,6 +62,26 @@ const rom_entry *cbm8000_hsg_t::device_rom_region() const } +//------------------------------------------------- +// ADDRESS_MAP( hsg_a_map ) +//------------------------------------------------- + +static ADDRESS_MAP_START( hsg_a_map, AS_0, 8, cbm8000_hsg_a_t ) + ADDRESS_MAP_GLOBAL_MASK(0x7fff) + AM_RANGE(0x0000, 0x7fff) AM_RAM +ADDRESS_MAP_END + + +//------------------------------------------------- +// ADDRESS_MAP( hsg_b_map ) +//------------------------------------------------- + +static ADDRESS_MAP_START( hsg_b_map, AS_0, 8, cbm8000_hsg_b_t ) + ADDRESS_MAP_GLOBAL_MASK(0x3fff) + AM_RANGE(0x0000, 0x3fff) AM_RAM +ADDRESS_MAP_END + + //------------------------------------------------- // MACHINE_CONFIG_FRAGMENT( cbm8000_hsg_a ) //------------------------------------------------- @@ -72,9 +92,11 @@ static MACHINE_CONFIG_FRAGMENT( cbm8000_hsg_a ) MCFG_SCREEN_SIZE(512, 512) MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 512-1) MCFG_SCREEN_REFRESH_RATE(25) + MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette") MCFG_DEVICE_ADD(EF9365_TAG, EF9365, 1750000) MCFG_VIDEO_SET_SCREEN(SCREEN_TAG) + MCFG_DEVICE_ADDRESS_MAP(AS_0, hsg_a_map) MCFG_EF936X_PALETTE("palette") MCFG_EF936X_BITPLANES_CNT(1); MCFG_EF936X_DISPLAYMODE(EF936X_512x512_DISPLAY_MODE); @@ -91,9 +113,11 @@ static MACHINE_CONFIG_FRAGMENT( cbm8000_hsg_b ) MCFG_SCREEN_SIZE(512, 256) MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1) MCFG_SCREEN_REFRESH_RATE(50) + MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette") MCFG_DEVICE_ADD(EF9366_TAG, EF9365, 1750000) MCFG_VIDEO_SET_SCREEN(SCREEN_TAG) + MCFG_DEVICE_ADDRESS_MAP(AS_0, hsg_b_map) MCFG_EF936X_PALETTE("palette") MCFG_EF936X_BITPLANES_CNT(1); MCFG_EF936X_DISPLAYMODE(EF936X_512x256_DISPLAY_MODE); @@ -151,8 +175,6 @@ cbm8000_hsg_b_t::cbm8000_hsg_b_t(const machine_config &mconfig, const char *tag, void cbm8000_hsg_t::device_start() { - m_gdc->set_color_entry(0, 0, 0, 0); - m_gdc->set_color_entry(1, 0, 0xff, 00); }