mirror of
https://github.com/holub/mame
synced 2025-05-10 16:21:42 +03:00
Merge pull request #2384 from npwoods/coco3_gime_cleanups
[CoCo 3] Cleanups to the GIME implementation
This commit is contained in:
commit
6582ec8a93
@ -44,7 +44,7 @@ static ADDRESS_MAP_START( coco3_mem, AS_PROGRAM, 8, coco3_state )
|
||||
AM_RANGE(0xFF20, 0xFF3F) AM_READWRITE(ff20_read, ff20_write)
|
||||
AM_RANGE(0xFF40, 0xFF5F) AM_READWRITE(ff40_read, ff40_write)
|
||||
AM_RANGE(0xFF60, 0xFF8F) AM_READWRITE(ff60_read, ff60_write)
|
||||
AM_RANGE(0xFF90, 0xFFDF) AM_DEVREADWRITE(GIME_TAG, gime_base_device, read, write)
|
||||
AM_RANGE(0xFF90, 0xFFDF) AM_DEVREADWRITE(GIME_TAG, gime_device, read, write)
|
||||
|
||||
// While Tepolt and other sources say that the interrupt vectors are mapped to
|
||||
// the same memory accessed at $BFFx, William Astle offered evidence that this
|
||||
|
@ -61,7 +61,7 @@ protected:
|
||||
virtual void cart_w(bool line) override;
|
||||
|
||||
private:
|
||||
required_device<gime_base_device> m_gime;
|
||||
required_device<gime_device> m_gime;
|
||||
};
|
||||
|
||||
#endif // MAME_INCLUDES_COCO3_H
|
||||
|
@ -2,7 +2,7 @@
|
||||
// copyright-holders:Nathan Woods
|
||||
/*********************************************************************
|
||||
|
||||
gime.c
|
||||
gime.cpp
|
||||
|
||||
Implementation of CoCo GIME (Graphics Interrupt Memory Enhancement)
|
||||
video chip.
|
||||
@ -108,14 +108,14 @@
|
||||
// ctor
|
||||
//-------------------------------------------------
|
||||
|
||||
gime_base_device::gime_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, const uint8_t *fontdata)
|
||||
: mc6847_friend_device(mconfig, type, tag, owner, clock, fontdata, true, 263, 25+192+26+3, false),
|
||||
m_write_irq(*this),
|
||||
m_write_firq(*this),
|
||||
m_read_floating_bus(*this),
|
||||
m_maincpu_tag(nullptr),
|
||||
m_ram_tag(nullptr),
|
||||
m_ext_tag(nullptr)
|
||||
gime_device::gime_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, const uint8_t *fontdata)
|
||||
: mc6847_friend_device(mconfig, type, tag, owner, clock, fontdata, true, 263, 25+192+26+3, false)
|
||||
, m_write_irq(*this)
|
||||
, m_write_firq(*this)
|
||||
, m_read_floating_bus(*this)
|
||||
, m_maincpu_tag(nullptr)
|
||||
, m_ram_tag(nullptr)
|
||||
, m_ext_tag(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
@ -125,7 +125,7 @@ gime_base_device::gime_base_device(const machine_config &mconfig, device_type ty
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::device_start(void)
|
||||
void gime_device::device_start(void)
|
||||
{
|
||||
// find the RAM device - make sure that it is started
|
||||
m_ram = machine().device<ram_device>(m_ram_tag);
|
||||
@ -198,7 +198,7 @@ void gime_base_device::device_start(void)
|
||||
// update_rgb_palette
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::update_rgb_palette(void)
|
||||
void gime_device::update_rgb_palette(void)
|
||||
{
|
||||
for (int color = 0; color < 64; color++)
|
||||
{
|
||||
@ -212,7 +212,7 @@ void gime_base_device::update_rgb_palette(void)
|
||||
// update_composite_palette
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::update_composite_palette(void)
|
||||
void gime_device::update_composite_palette(void)
|
||||
{
|
||||
for (int color = 0; color < 64; color++)
|
||||
{
|
||||
@ -227,7 +227,7 @@ void gime_base_device::update_composite_palette(void)
|
||||
// get_composite_color
|
||||
//-------------------------------------------------
|
||||
|
||||
inline gime_base_device::pixel_t gime_base_device::get_composite_color(int color)
|
||||
inline gime_device::pixel_t gime_device::get_composite_color(int color)
|
||||
{
|
||||
static pixel_t composite_palette[64] = {
|
||||
0x000000, 0x004c00, 0x004300, 0x0a3100, 0x2f1b00, 0x550100, 0x6c0000, 0x770006,
|
||||
@ -261,7 +261,7 @@ inline gime_base_device::pixel_t gime_base_device::get_composite_color(int color
|
||||
// get_rgb_color
|
||||
//-------------------------------------------------
|
||||
|
||||
inline gime_base_device::pixel_t gime_base_device::get_rgb_color(int color)
|
||||
inline gime_device::pixel_t gime_device::get_rgb_color(int color)
|
||||
{
|
||||
return (((color >> 4) & 2) | ((color >> 2) & 1)) * 0x550000
|
||||
| (((color >> 3) & 2) | ((color >> 1) & 1)) * 0x005500
|
||||
@ -274,7 +274,7 @@ inline gime_base_device::pixel_t gime_base_device::get_rgb_color(int color)
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::device_reset(void)
|
||||
void gime_device::device_reset(void)
|
||||
{
|
||||
/* Tepolt verifies that the GIME registers are all cleared on initialization */
|
||||
memset(m_gime_registers, 0, sizeof(m_gime_registers));
|
||||
@ -311,7 +311,7 @@ void gime_base_device::device_reset(void)
|
||||
// device_timer - handle timer callbacks
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
||||
void gime_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
||||
{
|
||||
switch(id)
|
||||
{
|
||||
@ -331,7 +331,7 @@ void gime_base_device::device_timer(emu_timer &timer, device_timer_id id, int pa
|
||||
// device_pre_save - device-specific pre save
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::device_pre_save()
|
||||
void gime_device::device_pre_save()
|
||||
{
|
||||
super::device_pre_save();
|
||||
|
||||
@ -345,7 +345,7 @@ void gime_base_device::device_pre_save()
|
||||
// device_post_load - device-specific post load
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::device_post_load()
|
||||
void gime_device::device_post_load()
|
||||
{
|
||||
super::device_post_load();
|
||||
update_memory();
|
||||
@ -362,7 +362,7 @@ void gime_base_device::device_post_load()
|
||||
// device_input_ports
|
||||
//-------------------------------------------------
|
||||
|
||||
ioport_constructor gime_base_device::device_input_ports() const
|
||||
ioport_constructor gime_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME(mc6847_artifacting);
|
||||
}
|
||||
@ -394,7 +394,7 @@ ioport_constructor gime_base_device::device_input_ports() const
|
||||
// timer_type
|
||||
//-------------------------------------------------
|
||||
|
||||
gime_base_device::timer_type_t gime_base_device::timer_type(void)
|
||||
gime_device::timer_type_t gime_device::timer_type(void)
|
||||
{
|
||||
// wraps the GIME register access and returns an enumeration
|
||||
return (m_gime_registers[0x01] & 0x20) ? GIME_TIMER_CLOCK : GIME_TIMER_HBORD;
|
||||
@ -406,7 +406,7 @@ gime_base_device::timer_type_t gime_base_device::timer_type(void)
|
||||
// timer_type_string
|
||||
//-------------------------------------------------
|
||||
|
||||
const char *gime_base_device::timer_type_string(void)
|
||||
const char *gime_device::timer_type_string(void)
|
||||
{
|
||||
const char *result;
|
||||
switch(timer_type())
|
||||
@ -429,7 +429,7 @@ const char *gime_base_device::timer_type_string(void)
|
||||
// timer_elapsed
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::timer_elapsed(void)
|
||||
void gime_device::timer_elapsed(void)
|
||||
{
|
||||
/* reset the timer; give her another run! */
|
||||
reset_timer();
|
||||
@ -448,7 +448,7 @@ void gime_base_device::timer_elapsed(void)
|
||||
// reset_timer
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::reset_timer(void)
|
||||
void gime_device::reset_timer(void)
|
||||
{
|
||||
/* value is from 0-4095 */
|
||||
m_timer_value = ((m_gime_registers[0x04] & 0x0F) * 0x100) | m_gime_registers[0x05];
|
||||
@ -491,7 +491,7 @@ void gime_base_device::reset_timer(void)
|
||||
// update_memory
|
||||
//-------------------------------------------------
|
||||
|
||||
inline void gime_base_device::update_memory(void)
|
||||
inline void gime_device::update_memory(void)
|
||||
{
|
||||
for (int bank = 0; bank <= 8; bank++)
|
||||
{
|
||||
@ -505,7 +505,7 @@ inline void gime_base_device::update_memory(void)
|
||||
// update_memory
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::update_memory(int bank)
|
||||
void gime_device::update_memory(int bank)
|
||||
{
|
||||
// choose bank
|
||||
assert((bank >= 0) && (bank < ARRAY_LENGTH(m_read_banks)) && (bank < ARRAY_LENGTH(m_write_banks)));
|
||||
@ -594,7 +594,7 @@ void gime_base_device::update_memory(int bank)
|
||||
// memory_pointer
|
||||
//-------------------------------------------------
|
||||
|
||||
uint8_t *gime_base_device::memory_pointer(uint32_t address)
|
||||
uint8_t *gime_device::memory_pointer(uint32_t address)
|
||||
{
|
||||
return &m_ram->pointer()[address % m_ram->size()];
|
||||
}
|
||||
@ -605,7 +605,7 @@ uint8_t *gime_base_device::memory_pointer(uint32_t address)
|
||||
// update_cart_rom
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::update_cart_rom(void)
|
||||
void gime_device::update_cart_rom(void)
|
||||
{
|
||||
m_cart_rom = m_cart_device->get_cart_base();
|
||||
update_memory();
|
||||
@ -617,7 +617,7 @@ void gime_base_device::update_cart_rom(void)
|
||||
// read
|
||||
//-------------------------------------------------
|
||||
|
||||
uint8_t gime_base_device::read(offs_t offset)
|
||||
uint8_t gime_device::read(offs_t offset)
|
||||
{
|
||||
uint8_t data = 0x00;
|
||||
|
||||
@ -649,7 +649,7 @@ uint8_t gime_base_device::read(offs_t offset)
|
||||
// read_gime_register
|
||||
//-------------------------------------------------
|
||||
|
||||
inline uint8_t gime_base_device::read_gime_register(offs_t offset)
|
||||
inline uint8_t gime_device::read_gime_register(offs_t offset)
|
||||
{
|
||||
offset &= 0x0F;
|
||||
|
||||
@ -688,7 +688,7 @@ inline uint8_t gime_base_device::read_gime_register(offs_t offset)
|
||||
// read_mmu_register
|
||||
//-------------------------------------------------
|
||||
|
||||
inline uint8_t gime_base_device::read_mmu_register(offs_t offset)
|
||||
inline uint8_t gime_device::read_mmu_register(offs_t offset)
|
||||
{
|
||||
return (m_mmu[offset & 0x0F] & 0x3F) | (read_floating_bus() & 0xC0);
|
||||
}
|
||||
@ -699,7 +699,7 @@ inline uint8_t gime_base_device::read_mmu_register(offs_t offset)
|
||||
// read_palette_register
|
||||
//-------------------------------------------------
|
||||
|
||||
inline uint8_t gime_base_device::read_palette_register(offs_t offset)
|
||||
inline uint8_t gime_device::read_palette_register(offs_t offset)
|
||||
{
|
||||
// Bits 7/6 are floating, and behave oddly. On a real CoCo 3
|
||||
//
|
||||
@ -717,7 +717,7 @@ inline uint8_t gime_base_device::read_palette_register(offs_t offset)
|
||||
// read_floating_bus
|
||||
//-------------------------------------------------
|
||||
|
||||
inline uint8_t gime_base_device::read_floating_bus(void)
|
||||
inline uint8_t gime_device::read_floating_bus(void)
|
||||
{
|
||||
return m_read_floating_bus(0);
|
||||
}
|
||||
@ -728,7 +728,7 @@ inline uint8_t gime_base_device::read_floating_bus(void)
|
||||
// write
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::write(offs_t offset, uint8_t data)
|
||||
void gime_device::write(offs_t offset, uint8_t data)
|
||||
{
|
||||
switch(offset & 0xF0)
|
||||
{
|
||||
@ -757,7 +757,7 @@ void gime_base_device::write(offs_t offset, uint8_t data)
|
||||
// write_gime_register
|
||||
//-------------------------------------------------
|
||||
|
||||
inline void gime_base_device::write_gime_register(offs_t offset, uint8_t data)
|
||||
inline void gime_device::write_gime_register(offs_t offset, uint8_t data)
|
||||
{
|
||||
// this is needed for writes to FF95
|
||||
bool timer_was_off = (m_gime_registers[0x04] == 0x00) && (m_gime_registers[0x05] == 0x00);
|
||||
@ -980,7 +980,7 @@ inline void gime_base_device::write_gime_register(offs_t offset, uint8_t data)
|
||||
// write_mmu_register
|
||||
//-------------------------------------------------
|
||||
|
||||
inline void gime_base_device::write_mmu_register(offs_t offset, uint8_t data)
|
||||
inline void gime_device::write_mmu_register(offs_t offset, uint8_t data)
|
||||
{
|
||||
offset &= 0x0F;
|
||||
|
||||
@ -1000,7 +1000,7 @@ inline void gime_base_device::write_mmu_register(offs_t offset, uint8_t data)
|
||||
// write_palette_register
|
||||
//-------------------------------------------------
|
||||
|
||||
inline void gime_base_device::write_palette_register(offs_t offset, uint8_t data)
|
||||
inline void gime_device::write_palette_register(offs_t offset, uint8_t data)
|
||||
{
|
||||
offset &= 0x0F;
|
||||
|
||||
@ -1033,7 +1033,7 @@ inline void gime_base_device::write_palette_register(offs_t offset, uint8_t data
|
||||
// write_sam_register
|
||||
//-------------------------------------------------
|
||||
|
||||
inline void gime_base_device::write_sam_register(offs_t offset)
|
||||
inline void gime_device::write_sam_register(offs_t offset)
|
||||
{
|
||||
/* change the SAM state */
|
||||
uint16_t xorval = alter_sam_state(offset);
|
||||
@ -1051,7 +1051,7 @@ inline void gime_base_device::write_sam_register(offs_t offset)
|
||||
// interrupt_rising_edge
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::interrupt_rising_edge(uint8_t interrupt)
|
||||
void gime_device::interrupt_rising_edge(uint8_t interrupt)
|
||||
{
|
||||
// evaluate IRQ
|
||||
if ((m_gime_registers[0x00] & 0x20) && (m_gime_registers[0x02] & interrupt))
|
||||
@ -1067,7 +1067,7 @@ void gime_base_device::interrupt_rising_edge(uint8_t interrupt)
|
||||
// change_gime_irq
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::change_gime_irq(uint8_t data)
|
||||
void gime_device::change_gime_irq(uint8_t data)
|
||||
{
|
||||
// did the value actually change?
|
||||
if (m_irq != data)
|
||||
@ -1082,7 +1082,7 @@ void gime_base_device::change_gime_irq(uint8_t data)
|
||||
// change_gime_firq
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::change_gime_firq(uint8_t data)
|
||||
void gime_device::change_gime_firq(uint8_t data)
|
||||
{
|
||||
// did the value actually change?
|
||||
if (m_firq != data)
|
||||
@ -1107,7 +1107,7 @@ void gime_base_device::change_gime_firq(uint8_t data)
|
||||
// John Kowalski confirms this behavior
|
||||
//-------------------------------------------------
|
||||
|
||||
inline offs_t gime_base_device::get_video_base(void)
|
||||
inline offs_t gime_device::get_video_base(void)
|
||||
{
|
||||
offs_t result;
|
||||
uint8_t ff9d_mask, ff9e_mask;
|
||||
@ -1139,7 +1139,7 @@ inline offs_t gime_base_device::get_video_base(void)
|
||||
// new_frame
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::new_frame(void)
|
||||
void gime_device::new_frame(void)
|
||||
{
|
||||
/* call inherited function */
|
||||
super::new_frame();
|
||||
@ -1162,7 +1162,7 @@ void gime_base_device::new_frame(void)
|
||||
// horizontal_sync_changed
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::horizontal_sync_changed(bool line)
|
||||
void gime_device::horizontal_sync_changed(bool line)
|
||||
{
|
||||
set_interrupt_value(INTERRUPT_HBORD, line);
|
||||
|
||||
@ -1181,7 +1181,7 @@ void gime_base_device::horizontal_sync_changed(bool line)
|
||||
// enter_bottom_border
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::enter_bottom_border(void)
|
||||
void gime_device::enter_bottom_border(void)
|
||||
{
|
||||
set_interrupt_value(INTERRUPT_VBORD, true);
|
||||
set_interrupt_value(INTERRUPT_VBORD, false);
|
||||
@ -1193,7 +1193,7 @@ void gime_base_device::enter_bottom_border(void)
|
||||
// update_border
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::update_border(uint16_t physical_scanline)
|
||||
void gime_device::update_border(uint16_t physical_scanline)
|
||||
{
|
||||
uint8_t border;
|
||||
if (m_legacy_video)
|
||||
@ -1231,7 +1231,7 @@ void gime_base_device::update_border(uint16_t physical_scanline)
|
||||
// record_border_scanline
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::record_border_scanline(uint16_t physical_scanline)
|
||||
void gime_device::record_border_scanline(uint16_t physical_scanline)
|
||||
{
|
||||
m_line_in_row = 0;
|
||||
update_border(physical_scanline);
|
||||
@ -1244,7 +1244,7 @@ void gime_base_device::record_border_scanline(uint16_t physical_scanline)
|
||||
// get_lines_per_row
|
||||
//-------------------------------------------------
|
||||
|
||||
inline uint16_t gime_base_device::get_lines_per_row(void)
|
||||
inline uint16_t gime_device::get_lines_per_row(void)
|
||||
{
|
||||
uint16_t lines_per_row;
|
||||
if (m_legacy_video)
|
||||
@ -1332,8 +1332,8 @@ inline uint16_t gime_base_device::get_lines_per_row(void)
|
||||
// record_scanline_res
|
||||
//-------------------------------------------------
|
||||
|
||||
template<uint8_t xres, gime_base_device::get_data_func get_data, bool record_mode>
|
||||
inline uint32_t gime_base_device::record_scanline_res(int scanline)
|
||||
template<uint8_t xres, gime_device::get_data_func get_data, bool record_mode>
|
||||
inline uint32_t gime_device::record_scanline_res(int scanline)
|
||||
{
|
||||
int column;
|
||||
uint32_t base_offset = m_legacy_video ? 0 : (m_gime_registers[0x0F] & 0x7F) * 2;
|
||||
@ -1363,7 +1363,7 @@ inline uint32_t gime_base_device::record_scanline_res(int scanline)
|
||||
// in legacy video modes
|
||||
//-------------------------------------------------
|
||||
|
||||
uint32_t gime_base_device::get_data_mc6847(uint32_t video_position, uint8_t *data, uint8_t *mode)
|
||||
uint32_t gime_device::get_data_mc6847(uint32_t video_position, uint8_t *data, uint8_t *mode)
|
||||
{
|
||||
*data = *memory_pointer(video_position);
|
||||
*mode = (m_ff22_value & (MODE_AG|MODE_GM2|MODE_GM1|MODE_GM0|MODE_CSS))
|
||||
@ -1383,7 +1383,7 @@ uint32_t gime_base_device::get_data_mc6847(uint32_t video_position, uint8_t *dat
|
||||
// text modes without attributes
|
||||
//-------------------------------------------------
|
||||
|
||||
uint32_t gime_base_device::get_data_without_attributes(uint32_t video_position, uint8_t *data, uint8_t *mode)
|
||||
uint32_t gime_device::get_data_without_attributes(uint32_t video_position, uint8_t *data, uint8_t *mode)
|
||||
{
|
||||
*data = *memory_pointer(video_position);
|
||||
*mode = NO_ATTRIBUTE;
|
||||
@ -1397,7 +1397,7 @@ uint32_t gime_base_device::get_data_without_attributes(uint32_t video_position,
|
||||
// data/mode in GIME text modes with attributes
|
||||
//-------------------------------------------------
|
||||
|
||||
uint32_t gime_base_device::get_data_with_attributes(uint32_t video_position, uint8_t *data, uint8_t *mode)
|
||||
uint32_t gime_device::get_data_with_attributes(uint32_t video_position, uint8_t *data, uint8_t *mode)
|
||||
{
|
||||
*data = *memory_pointer(video_position + 0);
|
||||
*mode = *memory_pointer(video_position + 1);
|
||||
@ -1424,7 +1424,7 @@ uint32_t gime_base_device::get_data_with_attributes(uint32_t video_position, uin
|
||||
// record_body_scanline
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::record_body_scanline(uint16_t physical_scanline, uint16_t logical_scanline)
|
||||
void gime_device::record_body_scanline(uint16_t physical_scanline, uint16_t logical_scanline)
|
||||
{
|
||||
/* update the border first */
|
||||
update_border(physical_scanline);
|
||||
@ -1447,7 +1447,7 @@ void gime_base_device::record_body_scanline(uint16_t physical_scanline, uint16_t
|
||||
case MODE_AG|MODE_GM0:
|
||||
case MODE_AG|MODE_GM1|MODE_GM0:
|
||||
case MODE_AG|MODE_GM2|MODE_GM0:
|
||||
pitch = record_scanline_res<16, &gime_base_device::get_data_mc6847, true>(physical_scanline);
|
||||
pitch = record_scanline_res<16, &gime_device::get_data_mc6847, true>(physical_scanline);
|
||||
break;
|
||||
|
||||
case 0:
|
||||
@ -1462,7 +1462,7 @@ void gime_base_device::record_body_scanline(uint16_t physical_scanline, uint16_t
|
||||
case MODE_AG|MODE_GM2:
|
||||
case MODE_AG|MODE_GM2|MODE_GM1:
|
||||
case MODE_AG|MODE_GM2|MODE_GM1|MODE_GM0:
|
||||
pitch = record_scanline_res<32, &gime_base_device::get_data_mc6847, true>(physical_scanline);
|
||||
pitch = record_scanline_res<32, &gime_device::get_data_mc6847, true>(physical_scanline);
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -1482,14 +1482,14 @@ void gime_base_device::record_body_scanline(uint16_t physical_scanline, uint16_t
|
||||
/* graphics */
|
||||
switch(m_gime_registers[0x09] & 0x1C)
|
||||
{
|
||||
case 0x00: pitch = record_scanline_res< 16, &gime_base_device::get_data_without_attributes, false>(physical_scanline); break;
|
||||
case 0x04: pitch = record_scanline_res< 20, &gime_base_device::get_data_without_attributes, false>(physical_scanline); break;
|
||||
case 0x08: pitch = record_scanline_res< 32, &gime_base_device::get_data_without_attributes, false>(physical_scanline); break;
|
||||
case 0x0C: pitch = record_scanline_res< 40, &gime_base_device::get_data_without_attributes, false>(physical_scanline); break;
|
||||
case 0x10: pitch = record_scanline_res< 64, &gime_base_device::get_data_without_attributes, false>(physical_scanline); break;
|
||||
case 0x14: pitch = record_scanline_res< 80, &gime_base_device::get_data_without_attributes, false>(physical_scanline); break;
|
||||
case 0x18: pitch = record_scanline_res<128, &gime_base_device::get_data_without_attributes, false>(physical_scanline); break;
|
||||
case 0x1C: pitch = record_scanline_res<160, &gime_base_device::get_data_without_attributes, false>(physical_scanline); break;
|
||||
case 0x00: pitch = record_scanline_res< 16, &gime_device::get_data_without_attributes, false>(physical_scanline); break;
|
||||
case 0x04: pitch = record_scanline_res< 20, &gime_device::get_data_without_attributes, false>(physical_scanline); break;
|
||||
case 0x08: pitch = record_scanline_res< 32, &gime_device::get_data_without_attributes, false>(physical_scanline); break;
|
||||
case 0x0C: pitch = record_scanline_res< 40, &gime_device::get_data_without_attributes, false>(physical_scanline); break;
|
||||
case 0x10: pitch = record_scanline_res< 64, &gime_device::get_data_without_attributes, false>(physical_scanline); break;
|
||||
case 0x14: pitch = record_scanline_res< 80, &gime_device::get_data_without_attributes, false>(physical_scanline); break;
|
||||
case 0x18: pitch = record_scanline_res<128, &gime_device::get_data_without_attributes, false>(physical_scanline); break;
|
||||
case 0x1C: pitch = record_scanline_res<160, &gime_device::get_data_without_attributes, false>(physical_scanline); break;
|
||||
default:
|
||||
fatalerror("Should not get here\n");
|
||||
}
|
||||
@ -1499,14 +1499,14 @@ void gime_base_device::record_body_scanline(uint16_t physical_scanline, uint16_t
|
||||
/* text */
|
||||
switch(m_gime_registers[0x09] & 0x15)
|
||||
{
|
||||
case 0x00: pitch = record_scanline_res< 32, &gime_base_device::get_data_without_attributes, true>(physical_scanline); break;
|
||||
case 0x01: pitch = record_scanline_res< 32, &gime_base_device::get_data_with_attributes, true>(physical_scanline); break;
|
||||
case 0x04: pitch = record_scanline_res< 40, &gime_base_device::get_data_without_attributes, true>(physical_scanline); break;
|
||||
case 0x05: pitch = record_scanline_res< 40, &gime_base_device::get_data_with_attributes, true>(physical_scanline); break;
|
||||
case 0x10: pitch = record_scanline_res< 64, &gime_base_device::get_data_without_attributes, true>(physical_scanline); break;
|
||||
case 0x11: pitch = record_scanline_res< 64, &gime_base_device::get_data_with_attributes, true>(physical_scanline); break;
|
||||
case 0x14: pitch = record_scanline_res< 80, &gime_base_device::get_data_without_attributes, true>(physical_scanline); break;
|
||||
case 0x15: pitch = record_scanline_res< 80, &gime_base_device::get_data_with_attributes, true>(physical_scanline); break;
|
||||
case 0x00: pitch = record_scanline_res< 32, &gime_device::get_data_without_attributes, true>(physical_scanline); break;
|
||||
case 0x01: pitch = record_scanline_res< 32, &gime_device::get_data_with_attributes, true>(physical_scanline); break;
|
||||
case 0x04: pitch = record_scanline_res< 40, &gime_device::get_data_without_attributes, true>(physical_scanline); break;
|
||||
case 0x05: pitch = record_scanline_res< 40, &gime_device::get_data_with_attributes, true>(physical_scanline); break;
|
||||
case 0x10: pitch = record_scanline_res< 64, &gime_device::get_data_without_attributes, true>(physical_scanline); break;
|
||||
case 0x11: pitch = record_scanline_res< 64, &gime_device::get_data_with_attributes, true>(physical_scanline); break;
|
||||
case 0x14: pitch = record_scanline_res< 80, &gime_device::get_data_without_attributes, true>(physical_scanline); break;
|
||||
case 0x15: pitch = record_scanline_res< 80, &gime_device::get_data_with_attributes, true>(physical_scanline); break;
|
||||
default:
|
||||
fatalerror("Should not get here\n");
|
||||
}
|
||||
@ -1537,7 +1537,7 @@ void gime_base_device::record_body_scanline(uint16_t physical_scanline, uint16_t
|
||||
// record_partial_body_scanline
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::record_partial_body_scanline(uint16_t physical_scanline, uint16_t logical_scanline, int32_t start_clock, int32_t end_clock)
|
||||
void gime_device::record_partial_body_scanline(uint16_t physical_scanline, uint16_t logical_scanline, int32_t start_clock, int32_t end_clock)
|
||||
{
|
||||
fatalerror("NYI");
|
||||
}
|
||||
@ -1548,7 +1548,7 @@ void gime_base_device::record_partial_body_scanline(uint16_t physical_scanline,
|
||||
// update_geometry
|
||||
//-------------------------------------------------
|
||||
|
||||
void gime_base_device::update_geometry(void)
|
||||
void gime_device::update_geometry(void)
|
||||
{
|
||||
uint16_t top_border_scanlines, body_scanlines;
|
||||
|
||||
@ -1602,7 +1602,7 @@ void gime_base_device::update_geometry(void)
|
||||
// emit_dummy_samples
|
||||
//-------------------------------------------------
|
||||
|
||||
uint32_t gime_base_device::emit_dummy_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette)
|
||||
uint32_t gime_device::emit_dummy_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette)
|
||||
{
|
||||
fatalerror("Should not get here\n");
|
||||
}
|
||||
@ -1611,7 +1611,7 @@ uint32_t gime_base_device::emit_dummy_samples(const scanline_record *scanline, i
|
||||
// emit_mc6847_samples
|
||||
//-------------------------------------------------
|
||||
|
||||
inline uint32_t gime_base_device::emit_mc6847_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette)
|
||||
inline uint32_t gime_device::emit_mc6847_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette)
|
||||
{
|
||||
return super::emit_mc6847_samples<2>(
|
||||
scanline->m_mode[sample_start],
|
||||
@ -1631,7 +1631,7 @@ inline uint32_t gime_base_device::emit_mc6847_samples(const scanline_record *sca
|
||||
//-------------------------------------------------
|
||||
|
||||
template<int xscale, int bits_per_pixel>
|
||||
inline uint32_t gime_base_device::emit_gime_graphics_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette)
|
||||
inline uint32_t gime_device::emit_gime_graphics_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette)
|
||||
{
|
||||
const uint8_t *data = &scanline->m_data[sample_start];
|
||||
mc6847_friend_device::emit_graphics<bits_per_pixel, xscale>(data, sample_count, pixels, 0, palette);
|
||||
@ -1645,7 +1645,7 @@ inline uint32_t gime_base_device::emit_gime_graphics_samples(const scanline_reco
|
||||
//-------------------------------------------------
|
||||
|
||||
template<int xscale>
|
||||
inline uint32_t gime_base_device::emit_gime_text_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette)
|
||||
inline uint32_t gime_device::emit_gime_text_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette)
|
||||
{
|
||||
uint8_t attribute = scanline->m_mode[sample_start];
|
||||
const uint8_t *data = &scanline->m_data[sample_start];
|
||||
@ -1704,8 +1704,8 @@ inline uint32_t gime_base_device::emit_gime_text_samples(const scanline_record *
|
||||
// render_scanline
|
||||
//-------------------------------------------------
|
||||
|
||||
template<int sample_count, gime_base_device::emit_samples_proc emit_samples>
|
||||
inline void gime_base_device::render_scanline(const scanline_record *scanline, pixel_t *pixels, int min_x, int max_x, palette_resolver *resolver)
|
||||
template<int sample_count, gime_device::emit_samples_proc emit_samples>
|
||||
inline void gime_device::render_scanline(const scanline_record *scanline, pixel_t *pixels, int min_x, int max_x, palette_resolver *resolver)
|
||||
{
|
||||
int left_border, right_border;
|
||||
int x, x2, pixel_position;
|
||||
@ -1774,14 +1774,14 @@ inline void gime_base_device::render_scanline(const scanline_record *scanline, p
|
||||
// update_screen
|
||||
//-------------------------------------------------
|
||||
|
||||
bool gime_base_device::update_screen(bitmap_rgb32 &bitmap, const rectangle &cliprect, const pixel_t *RESTRICT palette)
|
||||
bool gime_device::update_screen(bitmap_rgb32 &bitmap, const rectangle &cliprect, const pixel_t *RESTRICT palette)
|
||||
{
|
||||
int base_x = 64;
|
||||
int min_x = USE_HORIZONTAL_CLIP ? cliprect.min_x : 0;
|
||||
int max_x = USE_HORIZONTAL_CLIP ? cliprect.max_x : (base_x * 2 + 512 - 1);
|
||||
int min_y = cliprect.min_y;
|
||||
int max_y = cliprect.max_y;
|
||||
palette_resolver resolver(this, palette);
|
||||
palette_resolver resolver(*this, palette);
|
||||
|
||||
/* if the video didn't change, indicate as much */
|
||||
if (!has_video_changed())
|
||||
@ -1796,7 +1796,7 @@ bool gime_base_device::update_screen(bitmap_rgb32 &bitmap, const rectangle &clip
|
||||
if (m_scanlines[y].m_line_in_row == (uint8_t) ~0)
|
||||
{
|
||||
/* this is a border scanline */
|
||||
render_scanline<0, &gime_base_device::emit_dummy_samples>(scanline, pixels, min_x, max_x, &resolver);
|
||||
render_scanline<0, &gime_device::emit_dummy_samples>(scanline, pixels, min_x, max_x, &resolver);
|
||||
}
|
||||
else if (m_legacy_video)
|
||||
{
|
||||
@ -1807,11 +1807,11 @@ bool gime_base_device::update_screen(bitmap_rgb32 &bitmap, const rectangle &clip
|
||||
case MODE_AG|MODE_GM0:
|
||||
case MODE_AG|MODE_GM1|MODE_GM0:
|
||||
case MODE_AG|MODE_GM2|MODE_GM0:
|
||||
render_scanline<16, &gime_base_device::emit_mc6847_samples>(scanline, pixels, min_x, max_x, &resolver);
|
||||
render_scanline<16, &gime_device::emit_mc6847_samples>(scanline, pixels, min_x, max_x, &resolver);
|
||||
break;
|
||||
|
||||
default:
|
||||
render_scanline<32, &gime_base_device::emit_mc6847_samples>(scanline, pixels, min_x, max_x, &resolver);
|
||||
render_scanline<32, &gime_device::emit_mc6847_samples>(scanline, pixels, min_x, max_x, &resolver);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1820,38 +1820,38 @@ bool gime_base_device::update_screen(bitmap_rgb32 &bitmap, const rectangle &clip
|
||||
/* GIME graphics */
|
||||
switch(scanline->m_ff99_value & 0x1F)
|
||||
{
|
||||
case 0x00: render_scanline< 16, &gime_base_device::emit_gime_graphics_samples< 4, 1> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x01: render_scanline< 16, &gime_base_device::emit_gime_graphics_samples< 8, 2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x00: render_scanline< 16, &gime_device::emit_gime_graphics_samples< 4, 1> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x01: render_scanline< 16, &gime_device::emit_gime_graphics_samples< 8, 2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x02:
|
||||
case 0x03: render_scanline< 16, &gime_base_device::emit_gime_graphics_samples<16, 4> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x04: render_scanline< 20, &gime_base_device::emit_gime_graphics_samples< 4, 1> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x05: render_scanline< 20, &gime_base_device::emit_gime_graphics_samples< 8, 2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x03: render_scanline< 16, &gime_device::emit_gime_graphics_samples<16, 4> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x04: render_scanline< 20, &gime_device::emit_gime_graphics_samples< 4, 1> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x05: render_scanline< 20, &gime_device::emit_gime_graphics_samples< 8, 2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x06:
|
||||
case 0x07: render_scanline< 20, &gime_base_device::emit_gime_graphics_samples<16, 4> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x08: render_scanline< 32, &gime_base_device::emit_gime_graphics_samples< 2, 1> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x09: render_scanline< 32, &gime_base_device::emit_gime_graphics_samples< 4, 2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x07: render_scanline< 20, &gime_device::emit_gime_graphics_samples<16, 4> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x08: render_scanline< 32, &gime_device::emit_gime_graphics_samples< 2, 1> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x09: render_scanline< 32, &gime_device::emit_gime_graphics_samples< 4, 2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x0A:
|
||||
case 0x0B: render_scanline< 32, &gime_base_device::emit_gime_graphics_samples< 8, 4> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x0C: render_scanline< 40, &gime_base_device::emit_gime_graphics_samples< 2, 1> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x0D: render_scanline< 40, &gime_base_device::emit_gime_graphics_samples< 4, 2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x0B: render_scanline< 32, &gime_device::emit_gime_graphics_samples< 8, 4> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x0C: render_scanline< 40, &gime_device::emit_gime_graphics_samples< 2, 1> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x0D: render_scanline< 40, &gime_device::emit_gime_graphics_samples< 4, 2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x0E:
|
||||
case 0x0F: render_scanline< 40, &gime_base_device::emit_gime_graphics_samples< 8, 4> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x10: render_scanline< 64, &gime_base_device::emit_gime_graphics_samples< 1, 1> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x11: render_scanline< 64, &gime_base_device::emit_gime_graphics_samples< 2, 2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x0F: render_scanline< 40, &gime_device::emit_gime_graphics_samples< 8, 4> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x10: render_scanline< 64, &gime_device::emit_gime_graphics_samples< 1, 1> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x11: render_scanline< 64, &gime_device::emit_gime_graphics_samples< 2, 2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x12:
|
||||
case 0x13: render_scanline< 64, &gime_base_device::emit_gime_graphics_samples< 4, 4> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x14: render_scanline< 80, &gime_base_device::emit_gime_graphics_samples< 1, 1> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x15: render_scanline< 80, &gime_base_device::emit_gime_graphics_samples< 2, 2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x13: render_scanline< 64, &gime_device::emit_gime_graphics_samples< 4, 4> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x14: render_scanline< 80, &gime_device::emit_gime_graphics_samples< 1, 1> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x15: render_scanline< 80, &gime_device::emit_gime_graphics_samples< 2, 2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x16:
|
||||
case 0x17: render_scanline< 80, &gime_base_device::emit_gime_graphics_samples< 4, 4> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x17: render_scanline< 80, &gime_device::emit_gime_graphics_samples< 4, 4> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x18:
|
||||
case 0x19: render_scanline<128, &gime_base_device::emit_gime_graphics_samples< 1, 2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x19: render_scanline<128, &gime_device::emit_gime_graphics_samples< 1, 2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x1A:
|
||||
case 0x1B: render_scanline<128, &gime_base_device::emit_gime_graphics_samples< 2, 4> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x1B: render_scanline<128, &gime_device::emit_gime_graphics_samples< 2, 4> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x1C:
|
||||
case 0x1D: render_scanline<160, &gime_base_device::emit_gime_graphics_samples< 1, 2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x1D: render_scanline<160, &gime_device::emit_gime_graphics_samples< 1, 2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x1E:
|
||||
case 0x1F: render_scanline<160, &gime_base_device::emit_gime_graphics_samples< 2, 4> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x1F: render_scanline<160, &gime_device::emit_gime_graphics_samples< 2, 4> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1859,10 +1859,10 @@ bool gime_base_device::update_screen(bitmap_rgb32 &bitmap, const rectangle &clip
|
||||
/* GIME text */
|
||||
switch(scanline->m_ff99_value & 0x14)
|
||||
{
|
||||
case 0x00: render_scanline<32, &gime_base_device::emit_gime_text_samples<2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x04: render_scanline<40, &gime_base_device::emit_gime_text_samples<2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x10: render_scanline<64, &gime_base_device::emit_gime_text_samples<1> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x14: render_scanline<80, &gime_base_device::emit_gime_text_samples<1> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x00: render_scanline<32, &gime_device::emit_gime_text_samples<2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x04: render_scanline<40, &gime_device::emit_gime_text_samples<2> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x10: render_scanline<64, &gime_device::emit_gime_text_samples<1> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
case 0x14: render_scanline<80, &gime_device::emit_gime_text_samples<1> >(scanline, pixels, min_x, max_x, &resolver); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1875,7 +1875,7 @@ bool gime_base_device::update_screen(bitmap_rgb32 &bitmap, const rectangle &clip
|
||||
// update_composite
|
||||
//-------------------------------------------------
|
||||
|
||||
bool gime_base_device::update_composite(bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
bool gime_device::update_composite(bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
update_value(&m_displayed_rgb, false);
|
||||
const pixel_t *palette = (m_gime_registers[0x08] & 0x10)
|
||||
@ -1890,7 +1890,7 @@ bool gime_base_device::update_composite(bitmap_rgb32 &bitmap, const rectangle &c
|
||||
// update_rgb
|
||||
//-------------------------------------------------
|
||||
|
||||
bool gime_base_device::update_rgb(bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
bool gime_device::update_rgb(bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
update_value(&m_displayed_rgb, true);
|
||||
return update_screen(bitmap, cliprect, m_rgb_palette);
|
||||
@ -1906,10 +1906,10 @@ bool gime_base_device::update_rgb(bitmap_rgb32 &bitmap, const rectangle &cliprec
|
||||
// palette_resolver::palette_resolver
|
||||
//-------------------------------------------------
|
||||
|
||||
inline gime_base_device::palette_resolver::palette_resolver(gime_base_device *gime, const pixel_t *palette)
|
||||
inline gime_device::palette_resolver::palette_resolver(gime_device &gime, const pixel_t *palette)
|
||||
: m_gime(gime)
|
||||
, m_palette(palette)
|
||||
{
|
||||
m_gime = gime;
|
||||
m_palette = palette;
|
||||
memset(m_resolved_palette, 0, sizeof(m_resolved_palette));
|
||||
m_current_resolved_palette = -1;
|
||||
}
|
||||
@ -1920,12 +1920,12 @@ inline gime_base_device::palette_resolver::palette_resolver(gime_base_device *gi
|
||||
// palette_resolver::get_palette
|
||||
//-------------------------------------------------
|
||||
|
||||
inline const gime_base_device::pixel_t *gime_base_device::palette_resolver::get_palette(uint16_t palette_rotation)
|
||||
inline const gime_device::pixel_t *gime_device::palette_resolver::get_palette(uint16_t palette_rotation)
|
||||
{
|
||||
if (UNEXPECTED(m_current_resolved_palette != palette_rotation))
|
||||
{
|
||||
for (int i = 0; i < 16; i++)
|
||||
m_resolved_palette[i] = lookup(m_gime->m_palette_rotated[palette_rotation][i]);
|
||||
m_resolved_palette[i] = lookup(m_gime.m_palette_rotated[palette_rotation][i]);
|
||||
m_current_resolved_palette = palette_rotation;
|
||||
}
|
||||
return m_resolved_palette;
|
||||
@ -1937,7 +1937,7 @@ inline const gime_base_device::pixel_t *gime_base_device::palette_resolver::get_
|
||||
// palette_resolver::lookup
|
||||
//-------------------------------------------------
|
||||
|
||||
inline gime_base_device::pixel_t gime_base_device::palette_resolver::lookup(uint8_t color)
|
||||
inline gime_device::pixel_t gime_device::palette_resolver::lookup(uint8_t color)
|
||||
{
|
||||
assert(color <= 63);
|
||||
return m_palette[color];
|
||||
@ -1949,7 +1949,7 @@ inline gime_base_device::pixel_t gime_base_device::palette_resolver::lookup(uint
|
||||
// hires_font
|
||||
//-------------------------------------------------
|
||||
|
||||
const uint8_t gime_base_device::hires_font[128][12] =
|
||||
const uint8_t gime_device::hires_font[128][12] =
|
||||
{
|
||||
{ 0x38, 0x44, 0x40, 0x40, 0x40, 0x44, 0x38, 0x10}, { 0x44, 0x00, 0x44, 0x44, 0x44, 0x4C, 0x34, 0x00},
|
||||
{ 0x08, 0x10, 0x38, 0x44, 0x7C, 0x40, 0x38, 0x00}, { 0x10, 0x28, 0x38, 0x04, 0x3C, 0x44, 0x3C, 0x00},
|
||||
@ -2023,27 +2023,26 @@ const uint8_t gime_base_device::hires_font[128][12] =
|
||||
// VARIATIONS
|
||||
//**************************************************************************
|
||||
|
||||
namespace
|
||||
{
|
||||
class gime_ntsc_device : public gime_device
|
||||
{
|
||||
public:
|
||||
gime_ntsc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: gime_device(mconfig, GIME_NTSC, tag, owner, clock, ntsc_round_fontdata8x12)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
class gime_pal_device : public gime_device
|
||||
{
|
||||
public:
|
||||
gime_pal_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: gime_device(mconfig, GIME_PAL, tag, owner, clock, pal_round_fontdata8x12)
|
||||
{
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
DEFINE_DEVICE_TYPE(GIME_NTSC, gime_ntsc_device, "gime_ntsc", "CoCo GIME (NTSC)")
|
||||
DEFINE_DEVICE_TYPE(GIME_PAL, gime_pal_device, "gime_pal", "CoCo GIME (PAL)")
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// gime_ntsc_device
|
||||
//-------------------------------------------------
|
||||
|
||||
gime_ntsc_device::gime_ntsc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: gime_base_device(mconfig, GIME_NTSC, tag, owner, clock, ntsc_round_fontdata8x12)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// gime_pal_device
|
||||
//-------------------------------------------------
|
||||
|
||||
gime_pal_device::gime_pal_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: gime_base_device(mconfig, GIME_PAL, tag, owner, clock, pal_round_fontdata8x12)
|
||||
{
|
||||
}
|
||||
|
@ -28,22 +28,22 @@
|
||||
#define MCFG_GIME_FSYNC_CALLBACK MCFG_MC6847_FSYNC_CALLBACK
|
||||
|
||||
#define MCFG_GIME_IRQ_CALLBACK(_write) \
|
||||
devcb = &gime_base_device::set_irq_wr_callback(*device, DEVCB_##_write);
|
||||
devcb = &gime_device::set_irq_wr_callback(*device, DEVCB_##_write);
|
||||
|
||||
#define MCFG_GIME_FIRQ_CALLBACK(_write) \
|
||||
devcb = &gime_base_device::set_firq_wr_callback(*device, DEVCB_##_write);
|
||||
devcb = &gime_device::set_firq_wr_callback(*device, DEVCB_##_write);
|
||||
|
||||
#define MCFG_GIME_FLOATING_BUS_CALLBACK(_read) \
|
||||
devcb = &gime_base_device::set_floating_bus_rd_callback(*device, DEVCB_##_read);
|
||||
devcb = &gime_device::set_floating_bus_rd_callback(*device, DEVCB_##_read);
|
||||
|
||||
#define MCFG_GIME_MAINCPU(_tag) \
|
||||
gime_base_device::set_maincpu_tag(*device, _tag);
|
||||
gime_device::set_maincpu_tag(*device, _tag);
|
||||
|
||||
#define MCFG_GIME_RAM(_tag) \
|
||||
gime_base_device::set_ram_tag(*device, _tag);
|
||||
gime_device::set_ram_tag(*device, _tag);
|
||||
|
||||
#define MCFG_GIME_EXT(_tag) \
|
||||
gime_base_device::set_ext_tag(*device, _tag);
|
||||
gime_device::set_ext_tag(*device, _tag);
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
@ -52,15 +52,15 @@
|
||||
|
||||
class cococart_slot_device;
|
||||
|
||||
class gime_base_device : public mc6847_friend_device, public sam6883_friend_device
|
||||
class gime_device : public mc6847_friend_device, public sam6883_friend_device
|
||||
{
|
||||
public:
|
||||
template <class Object> static devcb_base &set_irq_wr_callback(device_t &device, Object &&cb) { return downcast<gime_base_device &>(device).m_write_irq.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_firq_wr_callback(device_t &device, Object &&cb) { return downcast<gime_base_device &>(device).m_write_firq.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_floating_bus_rd_callback(device_t &device, Object &&cb) { return downcast<gime_base_device &>(device).m_read_floating_bus.set_callback(std::forward<Object>(cb)); }
|
||||
static void set_maincpu_tag(device_t &device, const char *tag) { downcast<gime_base_device &>(device).m_maincpu_tag = tag; }
|
||||
static void set_ram_tag(device_t &device, const char *tag) { downcast<gime_base_device &>(device).m_ram_tag = tag; }
|
||||
static void set_ext_tag(device_t &device, const char *tag) { downcast<gime_base_device &>(device).m_ext_tag = tag; }
|
||||
template <class Object> static devcb_base &set_irq_wr_callback(device_t &device, Object &&cb) { return downcast<gime_device &>(device).m_write_irq.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_firq_wr_callback(device_t &device, Object &&cb) { return downcast<gime_device &>(device).m_write_firq.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_floating_bus_rd_callback(device_t &device, Object &&cb) { return downcast<gime_device &>(device).m_read_floating_bus.set_callback(std::forward<Object>(cb)); }
|
||||
static void set_maincpu_tag(device_t &device, const char *tag) { downcast<gime_device &>(device).m_maincpu_tag = tag; }
|
||||
static void set_ram_tag(device_t &device, const char *tag) { downcast<gime_device &>(device).m_ram_tag = tag; }
|
||||
static void set_ext_tag(device_t &device, const char *tag) { downcast<gime_device &>(device).m_ext_tag = tag; }
|
||||
|
||||
// read/write
|
||||
DECLARE_READ8_MEMBER( read ) { return read(offset); }
|
||||
@ -91,7 +91,7 @@ public:
|
||||
void set_il2(bool value) { set_interrupt_value(INTERRUPT_EI2, value); }
|
||||
|
||||
protected:
|
||||
gime_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, const uint8_t *fontdata);
|
||||
gime_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, const uint8_t *fontdata);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start(void) override;
|
||||
@ -124,17 +124,17 @@ private:
|
||||
uint16_t m_palette[160];
|
||||
};
|
||||
|
||||
typedef uint32_t (gime_base_device::*get_data_func)(uint32_t, uint8_t *, uint8_t *);
|
||||
typedef uint32_t (gime_device::*get_data_func)(uint32_t, uint8_t *, uint8_t *);
|
||||
|
||||
class palette_resolver
|
||||
{
|
||||
public:
|
||||
palette_resolver(gime_base_device *gime, const pixel_t *palette);
|
||||
palette_resolver(gime_device &gime, const pixel_t *palette);
|
||||
const pixel_t *get_palette(uint16_t palette_rotation);
|
||||
pixel_t lookup(uint8_t color);
|
||||
|
||||
private:
|
||||
gime_base_device *m_gime;
|
||||
gime_device &m_gime;
|
||||
const pixel_t *m_palette;
|
||||
pixel_t m_resolved_palette[16];
|
||||
int m_current_resolved_palette;
|
||||
@ -279,7 +279,7 @@ private:
|
||||
uint32_t record_scanline_res(int scanline);
|
||||
|
||||
// rendering sampled graphics
|
||||
typedef uint32_t (gime_base_device::*emit_samples_proc)(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette);
|
||||
typedef uint32_t (gime_device::*emit_samples_proc)(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette);
|
||||
uint32_t emit_dummy_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette);
|
||||
uint32_t emit_mc6847_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette);
|
||||
template<int xscale>
|
||||
@ -295,19 +295,7 @@ private:
|
||||
// VARIATIONS
|
||||
//**************************************************************************
|
||||
|
||||
class gime_ntsc_device : public gime_base_device
|
||||
{
|
||||
public:
|
||||
gime_ntsc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
};
|
||||
|
||||
class gime_pal_device : public gime_base_device
|
||||
{
|
||||
public:
|
||||
gime_pal_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
};
|
||||
|
||||
DECLARE_DEVICE_TYPE(GIME_NTSC, gime_ntsc_device)
|
||||
DECLARE_DEVICE_TYPE(GIME_PAL, gime_pal_device)
|
||||
extern const device_type GIME_NTSC;
|
||||
extern const device_type GIME_PAL;
|
||||
|
||||
#endif //MAME_VIDEO_GIME_H
|
||||
|
Loading…
Reference in New Issue
Block a user