mirror of
https://github.com/holub/mame
synced 2025-04-20 15:32:45 +03:00
i8275: Replaced with new implementation. (nw)
This commit is contained in:
parent
bbfd445e15
commit
9966d6e8e5
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -3242,8 +3242,6 @@ src/emu/video/i8244.c svneol=native#text/plain
|
||||
src/emu/video/i8244.h svneol=native#text/plain
|
||||
src/emu/video/i8275.c svneol=native#text/plain
|
||||
src/emu/video/i8275.h svneol=native#text/plain
|
||||
src/emu/video/i8275x.c svneol=native#text/plain
|
||||
src/emu/video/i8275x.h svneol=native#text/plain
|
||||
src/emu/video/m50458.c svneol=native#text/plain
|
||||
src/emu/video/m50458.h svneol=native#text/plain
|
||||
src/emu/video/mb90082.c svneol=native#text/plain
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,16 +1,41 @@
|
||||
/***************************************************************************
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Curt Coder
|
||||
/**********************************************************************
|
||||
|
||||
INTEL 8275 Programmable CRT Controller implementation
|
||||
Intel 8275 Programmable CRT Controller emulation
|
||||
|
||||
25-05-2008 Initial implementation [Miodrag Milanovic]
|
||||
|
||||
Copyright MESS team.
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
***************************************************************************/
|
||||
**********************************************************************
|
||||
_____ _____
|
||||
LC3 1 |* \_/ | 40 Vcc
|
||||
LC2 2 | | 39 LA0
|
||||
LC1 3 | | 38 LA1
|
||||
LC0 4 | | 37 LTEN
|
||||
DRQ 5 | | 36 RVV
|
||||
_DACK 6 | | 35 VSP
|
||||
HRTC 7 | | 34 GPA1
|
||||
VRTC 8 | | 33 GPA0
|
||||
_RD 9 | | 32 HLGT
|
||||
_WR 10 | 8275 | 31 IRQ
|
||||
LPEN 11 | | 30 CCLK
|
||||
DB0 12 | | 29 CC6
|
||||
DB1 13 | | 28 CC5
|
||||
DB2 14 | | 27 CC4
|
||||
DB3 15 | | 26 CC3
|
||||
DB4 16 | | 25 CC2
|
||||
DB5 17 | | 24 CC1
|
||||
DB6 18 | | 23 CC0
|
||||
DB7 19 | | 22 _CS
|
||||
GND 20 |_____________| 21 A0
|
||||
|
||||
#ifndef __I8275_VIDEO__
|
||||
#define __I8275_VIDEO__
|
||||
**********************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __I8275x__
|
||||
#define __I8275x__
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
@ -20,13 +45,26 @@
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_I8275_ADD(_tag, _intrf) \
|
||||
MCFG_DEVICE_ADD(_tag, I8275, 0) \
|
||||
MCFG_DEVICE_CONFIG(_intrf)
|
||||
#define I8275_DRAW_CHARACTER_MEMBER(_name) void _name(bitmap_rgb32 &bitmap, int x, int y, UINT8 linecount, UINT8 charcode, UINT8 lineattr, UINT8 lten, UINT8 rvv, UINT8 vsp, UINT8 gpa, UINT8 hlgt)
|
||||
|
||||
|
||||
#define I8275_INTERFACE(name) \
|
||||
const i8275_interface (name) =
|
||||
#define MCFG_I8275_CHARACTER_WIDTH(_value) \
|
||||
i8275_device::static_set_character_width(*device, _value);
|
||||
|
||||
#define MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(_class, _method) \
|
||||
i8275_device::static_set_display_callback(*device, i8275_draw_character_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner)));
|
||||
|
||||
#define MCFG_I8275_DRQ_CALLBACK(_write) \
|
||||
devcb = &i8275_device::set_drq_wr_callback(*device, DEVCB2_##_write);
|
||||
|
||||
#define MCFG_I8275_IRQ_CALLBACK(_write) \
|
||||
devcb = &i8275_device::set_irq_wr_callback(*device, DEVCB2_##_write);
|
||||
|
||||
#define MCFG_I8275_HRTC_CALLBACK(_write) \
|
||||
devcb = &i8275_device::set_hrtc_wr_callback(*device, DEVCB2_##_write);
|
||||
|
||||
#define MCFG_I8275_VRTC_CALLBACK(_write) \
|
||||
devcb = &i8275_device::set_vrtc_wr_callback(*device, DEVCB2_##_write);
|
||||
|
||||
|
||||
|
||||
@ -34,125 +72,151 @@
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
class i8275_device;
|
||||
|
||||
// ======================> i8275_display_pixels_func
|
||||
|
||||
typedef void (*i8275_display_pixels_func)(i8275_device *device, bitmap_rgb32 &bitmap, int x, int y, UINT8 linecount, UINT8 charcode, UINT8 lineattr, UINT8 lten, UINT8 rvv, UINT8 vsp, UINT8 gpa, UINT8 hlgt);
|
||||
#define I8275_DISPLAY_PIXELS(name) void name(i8275_device *device, bitmap_rgb32 &bitmap, int x, int y, UINT8 linecount, UINT8 charcode, UINT8 lineattr, UINT8 lten, UINT8 rvv, UINT8 vsp, UINT8 gpa, UINT8 hlgt)
|
||||
typedef device_delegate<void (bitmap_rgb32 &bitmap, int x, int y, UINT8 linecount, UINT8 charcode, UINT8 lineattr, UINT8 lten, UINT8 rvv, UINT8 vsp, UINT8 gpa, UINT8 hlgt)> i8275_draw_character_delegate;
|
||||
|
||||
|
||||
// ======================> i8275_interface
|
||||
// ======================> i8275_device
|
||||
|
||||
struct i8275_interface
|
||||
{
|
||||
int m_width; /* char width in pixels */
|
||||
int m_char_delay; /* delay of display char */
|
||||
|
||||
devcb_write_line m_out_drq_cb;
|
||||
devcb_write_line m_out_irq_cb;
|
||||
|
||||
devcb_write_line m_out_hrtc_cb;
|
||||
devcb_write_line m_out_vrtc_cb;
|
||||
|
||||
i8275_display_pixels_func m_display_pixels_func;
|
||||
};
|
||||
|
||||
|
||||
class i8275_device : public device_t,
|
||||
public device_video_interface,
|
||||
public i8275_interface
|
||||
class i8275_device : public device_t,
|
||||
public device_video_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
i8275_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
static void static_set_character_width(device_t &device, int value) { downcast<i8275_device &>(device).m_hpixels_per_column = value; }
|
||||
static void static_set_display_callback(device_t &device, i8275_draw_character_delegate callback) { downcast<i8275_device &>(device).m_display_cb = callback; }
|
||||
|
||||
template<class _Object> static devcb2_base &set_drq_wr_callback(device_t &device, _Object object) { return downcast<i8275_device &>(device).m_write_drq.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_irq_wr_callback(device_t &device, _Object object) { return downcast<i8275_device &>(device).m_write_irq.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_hrtc_wr_callback(device_t &device, _Object object) { return downcast<i8275_device &>(device).m_write_hrtc.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_vrtc_wr_callback(device_t &device, _Object object) { return downcast<i8275_device &>(device).m_write_vrtc.set_callback(object); }
|
||||
|
||||
DECLARE_READ8_MEMBER( read );
|
||||
DECLARE_WRITE8_MEMBER( write );
|
||||
|
||||
DECLARE_WRITE8_MEMBER( dack_w );
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( lpen_w );
|
||||
|
||||
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_config_complete();
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
||||
|
||||
UINT8 get_parameter_light_pen(offs_t offset);
|
||||
void recompute_parameters();
|
||||
void set_parameter_reset(offs_t offset, UINT8 data);
|
||||
void set_parameter_cursor(offs_t offset, UINT8 data);
|
||||
void draw_char_line();
|
||||
|
||||
devcb_resolved_write_line m_out_drq_func;
|
||||
devcb_resolved_write_line m_out_irq_func;
|
||||
devcb_resolved_write_line m_out_hrtc_func;
|
||||
devcb_resolved_write_line m_out_vrtc_func;
|
||||
enum
|
||||
{
|
||||
TIMER_HRTC_ON,
|
||||
TIMER_DRQ_ON,
|
||||
TIMER_SCANLINE
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ST_IE = 0x40,
|
||||
ST_IR = 0x20,
|
||||
ST_LP = 0x10,
|
||||
ST_IC = 0x08,
|
||||
ST_VE = 0x04,
|
||||
ST_DU = 0x02,
|
||||
ST_FO = 0x01
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
CMD_RESET = 0,
|
||||
CMD_START_DISPLAY,
|
||||
CMD_STOP_DISPLAY,
|
||||
CMD_READ_LIGHT_PEN,
|
||||
CMD_LOAD_CURSOR,
|
||||
CMD_ENABLE_INTERRUPT,
|
||||
CMD_DISABLE_INTERRUPT,
|
||||
CMD_PRESET_COUNTERS
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
REG_SCN1 = 0,
|
||||
REG_SCN2,
|
||||
REG_SCN3,
|
||||
REG_SCN4,
|
||||
REG_CUR_COL,
|
||||
REG_CUR_ROW,
|
||||
REG_LPEN_COL,
|
||||
REG_LPEN_ROW,
|
||||
REG_DMA
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
CA_H = 0x01,
|
||||
CA_B = 0x02,
|
||||
CA_CCCC = 0x3c
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
FAC_H = 0x01,
|
||||
FAC_B = 0x02,
|
||||
FAC_GG = 0x0c,
|
||||
FAC_R = 0x10,
|
||||
FAC_U = 0x20
|
||||
};
|
||||
|
||||
devcb2_write_line m_write_irq;
|
||||
devcb2_write_line m_write_drq;
|
||||
devcb2_write_line m_write_hrtc;
|
||||
devcb2_write_line m_write_vrtc;
|
||||
|
||||
i8275_draw_character_delegate m_display_cb;
|
||||
int m_hpixels_per_column;
|
||||
|
||||
bitmap_rgb32 m_bitmap;
|
||||
|
||||
UINT8 m_status_reg; /* value of status reggister */
|
||||
UINT8 m_num_of_params; /* expected number of parameters */
|
||||
UINT8 m_current_command; /* command currently executing */
|
||||
UINT8 m_param_type; /* parameter type */
|
||||
UINT8 m_status;
|
||||
UINT8 m_param[REG_DMA + 1];
|
||||
int m_param_idx;
|
||||
int m_param_end;
|
||||
|
||||
UINT8 m_cursor_col; /* current cursor column */
|
||||
UINT8 m_cursor_row; /* current cursor row */
|
||||
UINT8 m_buffer[2][80];
|
||||
UINT8 m_fifo[2][16];
|
||||
int m_buffer_idx;
|
||||
int m_fifo_idx;
|
||||
bool m_fifo_next;
|
||||
int m_buffer_dma;
|
||||
|
||||
UINT8 m_light_pen_col; /* current light pen column */
|
||||
UINT8 m_light_pen_row; /* current light pen row */
|
||||
int m_lpen;
|
||||
|
||||
/* reset command parameter values*/
|
||||
/* parameter 0 */
|
||||
UINT8 m_rows_type;
|
||||
UINT8 m_chars_per_row;
|
||||
/* parameter 1 */
|
||||
UINT8 m_vert_retrace_rows;
|
||||
UINT8 m_rows_per_frame;
|
||||
/* parameter 2 */
|
||||
UINT8 m_undeline_line_num;
|
||||
UINT8 m_lines_per_row;
|
||||
/* parameter 3 */
|
||||
UINT8 m_line_counter_mode;
|
||||
UINT8 m_field_attribute_mode;
|
||||
UINT8 m_cursor_format;
|
||||
UINT8 m_hor_retrace_count;
|
||||
int m_hlgt;
|
||||
int m_vsp;
|
||||
int m_gpa;
|
||||
int m_rvv;
|
||||
int m_lten;
|
||||
|
||||
/* values for start display command */
|
||||
UINT8 m_burst_space_code;
|
||||
UINT8 m_burst_count_code;
|
||||
int m_scanline;
|
||||
int m_irq_scanline;
|
||||
int m_vrtc_scanline;
|
||||
int m_vrtc_drq_scanline;
|
||||
bool m_du;
|
||||
|
||||
/* buffers */
|
||||
UINT8 m_row_buffer_1[80];
|
||||
UINT8 m_row_buffer_2[80];
|
||||
UINT8 m_row_pos;
|
||||
UINT8 m_buffer_used;
|
||||
int m_cursor_blink;
|
||||
int m_char_blink;
|
||||
|
||||
UINT8 m_fifo_buffer_1[16];
|
||||
UINT8 m_fifo_buffer_2[16];
|
||||
UINT8 m_fifo_write;
|
||||
|
||||
int m_ypos;
|
||||
int m_current_row;
|
||||
|
||||
UINT8 m_cursor_blink_cnt;
|
||||
UINT8 m_char_blink_cnt;
|
||||
|
||||
UINT8 m_next_in_fifo;
|
||||
|
||||
UINT8 m_lineattr;
|
||||
UINT8 m_rvv;
|
||||
UINT8 m_gpa;
|
||||
UINT8 m_hlgt;
|
||||
UINT8 m_underline;
|
||||
UINT8 m_blink;
|
||||
|
||||
UINT8 m_last_data;
|
||||
// timers
|
||||
emu_timer *m_hrtc_on_timer;
|
||||
emu_timer *m_drq_on_timer;
|
||||
emu_timer *m_scanline_timer;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
extern ATTR_DEPRECATED const device_type I8275;
|
||||
extern const device_type I8275;
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -1,573 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Curt Coder
|
||||
/**********************************************************************
|
||||
|
||||
Intel 8275 Programmable CRT Controller emulation
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
/*
|
||||
|
||||
TODO:
|
||||
|
||||
- character attributes
|
||||
- double spaced rows
|
||||
|
||||
*/
|
||||
|
||||
#include "i8275x.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACROS / CONSTANTS
|
||||
//**************************************************************************
|
||||
|
||||
#define LOG 0
|
||||
|
||||
|
||||
const int DMA_BURST_SPACING[] = { 0, 7, 15, 23, 31, 39, 47, 55 };
|
||||
|
||||
|
||||
#define DOUBLE_SPACED_ROWS \
|
||||
BIT(m_param[REG_SCN1], 7)
|
||||
|
||||
#define CHARACTERS_PER_ROW \
|
||||
((m_param[REG_SCN1] & 0x7f) + 1)
|
||||
|
||||
#define VRTC_ROW_COUNT \
|
||||
((m_param[REG_SCN2] >> 5) + 1)
|
||||
|
||||
#define CHARACTER_ROWS_PER_FRAME \
|
||||
((m_param[REG_SCN2] & 0x3f) + 1)
|
||||
|
||||
#define UNDERLINE \
|
||||
(m_param[REG_SCN3] >> 4)
|
||||
|
||||
#define SCANLINES_PER_ROW \
|
||||
((m_param[REG_SCN3] & 0x0f) + 1)
|
||||
|
||||
#define OFFSET_LINE_COUNTER \
|
||||
BIT(m_param[REG_SCN4], 7)
|
||||
|
||||
#define VISIBLE_FIELD_ATTRIBUTE \
|
||||
BIT(m_param[REG_SCN4], 6)
|
||||
|
||||
#define CURSOR_FORMAT \
|
||||
((m_param[REG_SCN4] >> 4) & 0x03)
|
||||
|
||||
#define HRTC_COUNT \
|
||||
(((m_param[REG_SCN4] & 0x0f) + 1) * 2)
|
||||
|
||||
#define DMA_BURST_COUNT \
|
||||
(1 << (m_param[REG_DMA] & 0x03))
|
||||
|
||||
#define DMA_BURST_SPACE \
|
||||
DMA_BURST_SPACING[(m_param[REG_DMA] >> 2) & 0x07]
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// device type definition
|
||||
const device_type I8275x = &device_creator<i8275x_device>;
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// i8275x_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
i8275x_device::i8275x_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, I8275x, "I8275", tag, owner, clock, "i8275x", __FILE__),
|
||||
device_video_interface(mconfig, *this),
|
||||
m_write_irq(*this),
|
||||
m_write_drq(*this),
|
||||
m_write_hrtc(*this),
|
||||
m_write_vrtc(*this),
|
||||
m_status(0),
|
||||
m_param_idx(0),
|
||||
m_param_end(0),
|
||||
m_buffer_idx(0),
|
||||
m_fifo_next(false),
|
||||
m_buffer_dma(0),
|
||||
m_lpen(0),
|
||||
m_hlgt(0),
|
||||
m_vsp(0),
|
||||
m_gpa(0),
|
||||
m_rvv(0),
|
||||
m_lten(0),
|
||||
m_scanline(0),
|
||||
m_du(false),
|
||||
m_cursor_blink(0),
|
||||
m_char_blink(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void i8275x_device::device_start()
|
||||
{
|
||||
// get the screen device
|
||||
m_screen->register_screen_bitmap(m_bitmap);
|
||||
|
||||
// resolve callbacks
|
||||
m_display_cb.bind_relative_to(*owner());
|
||||
m_write_drq.resolve_safe();
|
||||
m_write_irq.resolve_safe();
|
||||
m_write_hrtc.resolve_safe();
|
||||
m_write_vrtc.resolve_safe();
|
||||
|
||||
// allocate timers
|
||||
m_hrtc_on_timer = timer_alloc(TIMER_HRTC_ON);
|
||||
m_drq_on_timer = timer_alloc(TIMER_DRQ_ON);
|
||||
m_scanline_timer = timer_alloc(TIMER_SCANLINE);
|
||||
|
||||
// state saving
|
||||
save_item(NAME(m_status));
|
||||
save_item(NAME(m_param));
|
||||
save_item(NAME(m_param_idx));
|
||||
save_item(NAME(m_param_end));
|
||||
save_item(NAME(m_buffer[0]));
|
||||
save_item(NAME(m_buffer[1]));
|
||||
save_item(NAME(m_buffer_idx));
|
||||
save_item(NAME(m_fifo_idx));
|
||||
save_item(NAME(m_fifo_next));
|
||||
save_item(NAME(m_buffer_dma));
|
||||
save_item(NAME(m_lpen));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
|
||||
void i8275x_device::device_reset()
|
||||
{
|
||||
memset(m_buffer, 0, sizeof(m_buffer));
|
||||
|
||||
m_status &= ~ST_IE;
|
||||
|
||||
m_write_irq(CLEAR_LINE);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_timer - handle timer events
|
||||
//-------------------------------------------------
|
||||
|
||||
void i8275x_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
||||
{
|
||||
//int y = m_screen->vpos();
|
||||
//int x = m_screen->hpos();
|
||||
int rc = m_scanline / SCANLINES_PER_ROW;
|
||||
int lc = m_scanline % SCANLINES_PER_ROW;
|
||||
|
||||
switch (id)
|
||||
{
|
||||
case TIMER_HRTC_ON:
|
||||
//if (LOG) logerror("I8275 '%s' y %u x %u HRTC 1\n", tag(), y, x);
|
||||
m_write_hrtc(1);
|
||||
break;
|
||||
|
||||
case TIMER_DRQ_ON:
|
||||
//if (LOG) logerror("I8275 '%s' y %u x %u DRQ 1\n", tag(), y, x);
|
||||
m_write_drq(1);
|
||||
break;
|
||||
|
||||
case TIMER_SCANLINE:
|
||||
if (!(m_status & ST_VE)) break;
|
||||
|
||||
//if (LOG) logerror("I8275 '%s' y %u x %u HRTC 0\n", tag(), y, x);
|
||||
m_write_hrtc(0);
|
||||
|
||||
if (m_scanline == 0)
|
||||
{
|
||||
//if (LOG) logerror("I8275 '%s' y %u x %u VRTC 0\n", tag(), y, x);
|
||||
m_write_vrtc(0);
|
||||
}
|
||||
else if (m_scanline == m_irq_scanline)
|
||||
{
|
||||
if (m_status & ST_IE)
|
||||
{
|
||||
//if (LOG) logerror("I8275 '%s' y %u x %u IRQ 1\n", tag(), y, x);
|
||||
m_status |= ST_IR;
|
||||
m_write_irq(ASSERT_LINE);
|
||||
}
|
||||
}
|
||||
else if (m_scanline == m_vrtc_scanline)
|
||||
{
|
||||
//if (LOG) logerror("I8275 '%s' y %u x %u VRTC 1\n", tag(), y, x);
|
||||
m_write_vrtc(1);
|
||||
|
||||
// reset field attributes
|
||||
m_hlgt = 0;
|
||||
m_vsp = 0;
|
||||
m_gpa = 0;
|
||||
m_rvv = 0,
|
||||
m_lten = 0;
|
||||
|
||||
m_du = false;
|
||||
|
||||
m_cursor_blink++;
|
||||
m_cursor_blink &= 0x1f;
|
||||
|
||||
m_char_blink++;
|
||||
m_char_blink &= 0x3f;
|
||||
}
|
||||
|
||||
if (lc == 0)
|
||||
{
|
||||
if ((m_scanline < m_vrtc_scanline - SCANLINES_PER_ROW) && (m_buffer_idx < CHARACTERS_PER_ROW) && !m_du)
|
||||
{
|
||||
m_status |= ST_DU;
|
||||
m_du = true;
|
||||
//if (LOG) logerror("I8275 '%s' y %u x %u DMA Underrun\n", tag(), y, x);
|
||||
m_write_drq(0);
|
||||
}
|
||||
|
||||
// swap line buffers
|
||||
m_buffer_dma = !m_buffer_dma;
|
||||
m_buffer_idx = 0;
|
||||
m_fifo_idx = 0;
|
||||
|
||||
if ((!m_du && (m_scanline < m_vrtc_scanline - SCANLINES_PER_ROW)) || (m_scanline == m_vrtc_drq_scanline))
|
||||
{
|
||||
// start DMA burst
|
||||
m_drq_on_timer->adjust(clocks_to_attotime(DMA_BURST_SPACE));
|
||||
}
|
||||
}
|
||||
|
||||
if (m_scanline < m_vrtc_scanline)
|
||||
{
|
||||
int line_counter = OFFSET_LINE_COUNTER ? ((lc - 1) % SCANLINES_PER_ROW) : lc;
|
||||
|
||||
for (int sx = 0; sx < CHARACTERS_PER_ROW; sx++)
|
||||
{
|
||||
int m_lineattr = 0;
|
||||
int lten = 0;
|
||||
int vsp = 0;
|
||||
|
||||
UINT8 data = m_buffer[!m_buffer_dma][sx];
|
||||
|
||||
if (data & 0x80)
|
||||
{
|
||||
if ((data & 0xc0) == 0x80)
|
||||
{
|
||||
// field attribute code
|
||||
m_hlgt = (data & FAC_H) ? 1 : 0;
|
||||
m_vsp = (data & FAC_B) ? 1 : 0;
|
||||
m_gpa = (data & FAC_GG) >> 2;
|
||||
m_rvv = (data & FAC_R) ? 1 : 0;
|
||||
m_lten = (data & FAC_U) ? 1 : 0;
|
||||
|
||||
if (!VISIBLE_FIELD_ATTRIBUTE)
|
||||
{
|
||||
int fifo_idx = 0;
|
||||
|
||||
data = m_fifo[!m_buffer_dma][fifo_idx];
|
||||
|
||||
fifo_idx++;
|
||||
fifo_idx &= 0xf;
|
||||
}
|
||||
else
|
||||
{
|
||||
vsp = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// character attribute code
|
||||
}
|
||||
}
|
||||
|
||||
if (!vsp && m_vsp)
|
||||
{
|
||||
vsp = (m_char_blink < 32) ? 1 : 0;
|
||||
}
|
||||
|
||||
if ((rc == m_param[REG_CUR_ROW]) && (sx == m_param[REG_CUR_COL]))
|
||||
{
|
||||
int vis = 1;
|
||||
|
||||
if (!(CURSOR_FORMAT & 0x02))
|
||||
{
|
||||
vis = (m_cursor_blink < 16) ? 1 : 0;
|
||||
}
|
||||
|
||||
if (CURSOR_FORMAT & 0x01)
|
||||
{
|
||||
lten = (lc == UNDERLINE) ? vis : 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
lten = vis;
|
||||
}
|
||||
}
|
||||
|
||||
if (!m_display_cb.isnull())
|
||||
m_display_cb(m_bitmap,
|
||||
sx * m_hpixels_per_column, // x position on screen of starting point
|
||||
m_scanline, // y position on screen
|
||||
line_counter, // current line of char
|
||||
(data & 0x7f), // char code to be displayed
|
||||
m_lineattr, // line attribute code
|
||||
lten | m_lten, // light enable signal
|
||||
m_rvv, // reverse video signal
|
||||
vsp, // video suppression
|
||||
m_gpa, // general purpose attribute code
|
||||
m_hlgt // highlight
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
m_scanline++;
|
||||
m_scanline %= ((CHARACTER_ROWS_PER_FRAME + VRTC_ROW_COUNT) * SCANLINES_PER_ROW);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// read -
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( i8275x_device::read )
|
||||
{
|
||||
UINT8 data = 0;
|
||||
|
||||
if (offset & 0x01)
|
||||
{
|
||||
data = m_status;
|
||||
|
||||
if (m_status & ST_IR)
|
||||
{
|
||||
//if (LOG) logerror("I8275 '%s' IRQ 0\n", tag());
|
||||
m_write_irq(CLEAR_LINE);
|
||||
}
|
||||
|
||||
m_status &= ~(ST_IR | ST_LP | ST_IC | ST_DU | ST_FO);
|
||||
}
|
||||
else
|
||||
{
|
||||
data = m_param[m_param_idx];
|
||||
m_param_idx++;
|
||||
|
||||
if (m_param_idx > m_param_end)
|
||||
{
|
||||
m_status |= ST_IC;
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// write -
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE8_MEMBER( i8275x_device::write )
|
||||
{
|
||||
if (offset & 0x01)
|
||||
{
|
||||
if (LOG) logerror("I8275 '%s' Command %02x\n", tag(), data);
|
||||
|
||||
switch (data >> 5)
|
||||
{
|
||||
case CMD_RESET:
|
||||
if (LOG) logerror("I8275 '%s' Reset\n", tag());
|
||||
|
||||
m_status &= ~ST_IE;
|
||||
if (LOG) logerror("I8275 '%s' IRQ 0\n", tag());
|
||||
m_write_irq(CLEAR_LINE);
|
||||
m_write_drq(0);
|
||||
|
||||
m_param_idx = REG_SCN1;
|
||||
m_param_end = REG_SCN4;
|
||||
break;
|
||||
|
||||
case CMD_START_DISPLAY:
|
||||
{
|
||||
m_param[REG_DMA] = data;
|
||||
if (LOG) logerror("I8275 '%s' Start Display %u %u\n", tag(), DMA_BURST_COUNT, DMA_BURST_SPACE);
|
||||
m_status |= (ST_IE | ST_VE);
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_STOP_DISPLAY:
|
||||
if (LOG) logerror("I8275 '%s' Stop Display\n", tag());
|
||||
m_status &= ~ST_VE;
|
||||
break;
|
||||
|
||||
case CMD_READ_LIGHT_PEN:
|
||||
if (LOG) logerror("I8275 '%s' Read Light Pen\n", tag());
|
||||
m_param_idx = REG_LPEN_COL;
|
||||
m_param_end = REG_LPEN_ROW;
|
||||
break;
|
||||
|
||||
case CMD_LOAD_CURSOR:
|
||||
if (LOG) logerror("I8275 '%s' Load Cursor\n", tag());
|
||||
m_param_idx = REG_CUR_COL;
|
||||
m_param_end = REG_CUR_ROW;
|
||||
break;
|
||||
|
||||
case CMD_ENABLE_INTERRUPT:
|
||||
if (LOG) logerror("I8275 '%s' Enable Interrupt\n", tag());
|
||||
m_status |= ST_IE;
|
||||
break;
|
||||
|
||||
case CMD_DISABLE_INTERRUPT:
|
||||
if (LOG) logerror("I8275 '%s' Disable Interrupt\n", tag());
|
||||
m_status &= ~ST_IE;
|
||||
break;
|
||||
|
||||
case CMD_PRESET_COUNTERS:
|
||||
if (LOG) logerror("I8275 '%s' Preset Counters\n", tag());
|
||||
m_scanline = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (LOG) logerror("I8275 '%s' Parameter %02x\n", tag(), data);
|
||||
|
||||
m_param[m_param_idx] = data;
|
||||
|
||||
if (m_param_idx == REG_SCN4)
|
||||
{
|
||||
recompute_parameters();
|
||||
}
|
||||
|
||||
m_param_idx++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// dack_w -
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE8_MEMBER( i8275x_device::dack_w )
|
||||
{
|
||||
//int y = m_screen->vpos();
|
||||
//int x = m_screen->hpos();
|
||||
//if (LOG) logerror("I8275 '%s' y %u x %u DACK %04x:%02x %u\n", tag(), y, x, offset, data, m_buffer_idx);
|
||||
|
||||
m_write_drq(0);
|
||||
|
||||
if (m_fifo_next)
|
||||
{
|
||||
if (m_fifo_idx == 16)
|
||||
{
|
||||
m_fifo_idx = 0;
|
||||
m_status |= ST_FO;
|
||||
}
|
||||
|
||||
m_fifo[m_buffer_dma][m_fifo_idx++] = data;
|
||||
|
||||
m_fifo_next = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_buffer[m_buffer_dma][m_buffer_idx++] = data;
|
||||
|
||||
if (!VISIBLE_FIELD_ATTRIBUTE && ((data & 0xc0) == 0x80))
|
||||
{
|
||||
m_fifo_next = true;
|
||||
}
|
||||
|
||||
if (m_buffer_idx == CHARACTERS_PER_ROW)
|
||||
{
|
||||
// stop DMA
|
||||
}
|
||||
else if (!(m_buffer_idx % DMA_BURST_COUNT))
|
||||
{
|
||||
m_drq_on_timer->adjust(clocks_to_attotime(DMA_BURST_SPACE));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_drq_on_timer->adjust(attotime::zero);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// lpen_w -
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER( i8275x_device::lpen_w )
|
||||
{
|
||||
if (!m_lpen && state)
|
||||
{
|
||||
m_param[REG_LPEN_COL] = m_screen->hpos() / m_hpixels_per_column;
|
||||
m_param[REG_LPEN_ROW] = m_screen->vpos() / SCANLINES_PER_ROW;
|
||||
|
||||
m_status |= ST_LP;
|
||||
}
|
||||
|
||||
m_lpen = state;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// screen_update -
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT32 i8275x_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
if (!(m_status & ST_VE))
|
||||
{
|
||||
m_bitmap.fill(rgb_t::black);
|
||||
}
|
||||
|
||||
copybitmap(bitmap, m_bitmap, 0, 0, 0, 0, cliprect);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// recompute_parameters -
|
||||
//-------------------------------------------------
|
||||
|
||||
void i8275x_device::recompute_parameters()
|
||||
{
|
||||
int y = m_screen->vpos();
|
||||
|
||||
int horiz_pix_total = (CHARACTERS_PER_ROW + HRTC_COUNT) * m_hpixels_per_column;
|
||||
int vert_pix_total = (CHARACTER_ROWS_PER_FRAME + VRTC_ROW_COUNT) * SCANLINES_PER_ROW;
|
||||
attoseconds_t refresh = m_screen->frame_period().attoseconds;
|
||||
int max_visible_x = (CHARACTERS_PER_ROW * m_hpixels_per_column) - 1;
|
||||
int max_visible_y = (CHARACTER_ROWS_PER_FRAME * SCANLINES_PER_ROW) - 1;
|
||||
|
||||
if (LOG) logerror("width %u height %u max_x %u max_y %u refresh %f\n", horiz_pix_total, vert_pix_total, max_visible_x, max_visible_y, 1 / ATTOSECONDS_TO_DOUBLE(refresh));
|
||||
|
||||
rectangle visarea;
|
||||
visarea.set(0, max_visible_x, 0, max_visible_y);
|
||||
m_screen->configure(horiz_pix_total, vert_pix_total, visarea, refresh);
|
||||
|
||||
int hrtc_on_pos = CHARACTERS_PER_ROW * m_hpixels_per_column;
|
||||
m_hrtc_on_timer->adjust(m_screen->time_until_pos(y, hrtc_on_pos), 0, m_screen->scan_period());
|
||||
|
||||
m_irq_scanline = (CHARACTER_ROWS_PER_FRAME - 1) * SCANLINES_PER_ROW;
|
||||
m_vrtc_scanline = CHARACTER_ROWS_PER_FRAME * SCANLINES_PER_ROW;
|
||||
m_vrtc_drq_scanline = vert_pix_total - SCANLINES_PER_ROW;
|
||||
|
||||
if (LOG) logerror("irq_y %u vrtc_y %u drq_y %u\n", m_irq_scanline, m_vrtc_scanline, m_vrtc_drq_scanline);
|
||||
|
||||
m_scanline_timer->adjust(m_screen->time_until_pos(0, 0), 0, m_screen->scan_period());
|
||||
}
|
@ -1,222 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Curt Coder
|
||||
/**********************************************************************
|
||||
|
||||
Intel 8275 Programmable CRT Controller emulation
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************
|
||||
_____ _____
|
||||
LC3 1 |* \_/ | 40 Vcc
|
||||
LC2 2 | | 39 LA0
|
||||
LC1 3 | | 38 LA1
|
||||
LC0 4 | | 37 LTEN
|
||||
DRQ 5 | | 36 RVV
|
||||
_DACK 6 | | 35 VSP
|
||||
HRTC 7 | | 34 GPA1
|
||||
VRTC 8 | | 33 GPA0
|
||||
_RD 9 | | 32 HLGT
|
||||
_WR 10 | 8275 | 31 IRQ
|
||||
LPEN 11 | | 30 CCLK
|
||||
DB0 12 | | 29 CC6
|
||||
DB1 13 | | 28 CC5
|
||||
DB2 14 | | 27 CC4
|
||||
DB3 15 | | 26 CC3
|
||||
DB4 16 | | 25 CC2
|
||||
DB5 17 | | 24 CC1
|
||||
DB6 18 | | 23 CC0
|
||||
DB7 19 | | 22 _CS
|
||||
GND 20 |_____________| 21 A0
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __I8275x__
|
||||
#define __I8275x__
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define I8275_DRAW_CHARACTER_MEMBER(_name) void _name(bitmap_rgb32 &bitmap, int x, int y, UINT8 linecount, UINT8 charcode, UINT8 lineattr, UINT8 lten, UINT8 rvv, UINT8 vsp, UINT8 gpa, UINT8 hlgt)
|
||||
|
||||
|
||||
#define MCFG_I8275_CHARACTER_WIDTH(_value) \
|
||||
i8275x_device::static_set_character_width(*device, _value);
|
||||
|
||||
#define MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(_class, _method) \
|
||||
i8275x_device::static_set_display_callback(*device, i8275_draw_character_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner)));
|
||||
|
||||
#define MCFG_I8275_DRQ_CALLBACK(_write) \
|
||||
devcb = &i8275x_device::set_drq_wr_callback(*device, DEVCB2_##_write);
|
||||
|
||||
#define MCFG_I8275_IRQ_CALLBACK(_write) \
|
||||
devcb = &i8275x_device::set_irq_wr_callback(*device, DEVCB2_##_write);
|
||||
|
||||
#define MCFG_I8275_HRTC_CALLBACK(_write) \
|
||||
devcb = &i8275x_device::set_hrtc_wr_callback(*device, DEVCB2_##_write);
|
||||
|
||||
#define MCFG_I8275_VRTC_CALLBACK(_write) \
|
||||
devcb = &i8275x_device::set_vrtc_wr_callback(*device, DEVCB2_##_write);
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
typedef device_delegate<void (bitmap_rgb32 &bitmap, int x, int y, UINT8 linecount, UINT8 charcode, UINT8 lineattr, UINT8 lten, UINT8 rvv, UINT8 vsp, UINT8 gpa, UINT8 hlgt)> i8275_draw_character_delegate;
|
||||
|
||||
|
||||
// ======================> i8275x_device
|
||||
|
||||
class i8275x_device : public device_t,
|
||||
public device_video_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
i8275x_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
static void static_set_character_width(device_t &device, int value) { downcast<i8275x_device &>(device).m_hpixels_per_column = value; }
|
||||
static void static_set_display_callback(device_t &device, i8275_draw_character_delegate callback) { downcast<i8275x_device &>(device).m_display_cb = callback; }
|
||||
|
||||
template<class _Object> static devcb2_base &set_drq_wr_callback(device_t &device, _Object object) { return downcast<i8275x_device &>(device).m_write_drq.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_irq_wr_callback(device_t &device, _Object object) { return downcast<i8275x_device &>(device).m_write_irq.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_hrtc_wr_callback(device_t &device, _Object object) { return downcast<i8275x_device &>(device).m_write_hrtc.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_vrtc_wr_callback(device_t &device, _Object object) { return downcast<i8275x_device &>(device).m_write_vrtc.set_callback(object); }
|
||||
|
||||
DECLARE_READ8_MEMBER( read );
|
||||
DECLARE_WRITE8_MEMBER( write );
|
||||
|
||||
DECLARE_WRITE8_MEMBER( dack_w );
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( lpen_w );
|
||||
|
||||
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
||||
|
||||
void recompute_parameters();
|
||||
|
||||
enum
|
||||
{
|
||||
TIMER_HRTC_ON,
|
||||
TIMER_DRQ_ON,
|
||||
TIMER_SCANLINE
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ST_IE = 0x40,
|
||||
ST_IR = 0x20,
|
||||
ST_LP = 0x10,
|
||||
ST_IC = 0x08,
|
||||
ST_VE = 0x04,
|
||||
ST_DU = 0x02,
|
||||
ST_FO = 0x01
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
CMD_RESET = 0,
|
||||
CMD_START_DISPLAY,
|
||||
CMD_STOP_DISPLAY,
|
||||
CMD_READ_LIGHT_PEN,
|
||||
CMD_LOAD_CURSOR,
|
||||
CMD_ENABLE_INTERRUPT,
|
||||
CMD_DISABLE_INTERRUPT,
|
||||
CMD_PRESET_COUNTERS
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
REG_SCN1 = 0,
|
||||
REG_SCN2,
|
||||
REG_SCN3,
|
||||
REG_SCN4,
|
||||
REG_CUR_COL,
|
||||
REG_CUR_ROW,
|
||||
REG_LPEN_COL,
|
||||
REG_LPEN_ROW,
|
||||
REG_DMA
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
CA_H = 0x01,
|
||||
CA_B = 0x02,
|
||||
CA_CCCC = 0x3c
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
FAC_H = 0x01,
|
||||
FAC_B = 0x02,
|
||||
FAC_GG = 0x0c,
|
||||
FAC_R = 0x10,
|
||||
FAC_U = 0x20
|
||||
};
|
||||
|
||||
devcb2_write_line m_write_irq;
|
||||
devcb2_write_line m_write_drq;
|
||||
devcb2_write_line m_write_hrtc;
|
||||
devcb2_write_line m_write_vrtc;
|
||||
|
||||
i8275_draw_character_delegate m_display_cb;
|
||||
int m_hpixels_per_column;
|
||||
|
||||
bitmap_rgb32 m_bitmap;
|
||||
|
||||
UINT8 m_status;
|
||||
UINT8 m_param[REG_DMA + 1];
|
||||
int m_param_idx;
|
||||
int m_param_end;
|
||||
|
||||
UINT8 m_buffer[2][80];
|
||||
UINT8 m_fifo[2][16];
|
||||
int m_buffer_idx;
|
||||
int m_fifo_idx;
|
||||
bool m_fifo_next;
|
||||
int m_buffer_dma;
|
||||
|
||||
int m_lpen;
|
||||
|
||||
int m_hlgt;
|
||||
int m_vsp;
|
||||
int m_gpa;
|
||||
int m_rvv;
|
||||
int m_lten;
|
||||
|
||||
int m_scanline;
|
||||
int m_irq_scanline;
|
||||
int m_vrtc_scanline;
|
||||
int m_vrtc_drq_scanline;
|
||||
bool m_du;
|
||||
|
||||
int m_cursor_blink;
|
||||
int m_char_blink;
|
||||
|
||||
// timers
|
||||
emu_timer *m_hrtc_on_timer;
|
||||
emu_timer *m_drq_on_timer;
|
||||
emu_timer *m_scanline_timer;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
extern const device_type I8275x;
|
||||
|
||||
|
||||
|
||||
#endif
|
@ -292,12 +292,10 @@ endif
|
||||
#-------------------------------------------------
|
||||
#
|
||||
#@src/emu/video/i8275.h,VIDEOS += I8275
|
||||
#@src/emu/video/i8275x.h,VIDEOS += I8275
|
||||
#-------------------------------------------------
|
||||
|
||||
ifneq ($(filter I8275,$(VIDEOS)),)
|
||||
VIDEOOBJS+= $(VIDEOOBJ)/i8275.o \
|
||||
$(VIDEOOBJ)/i8275x.o
|
||||
VIDEOOBJS+= $(VIDEOOBJ)/i8275.o
|
||||
endif
|
||||
|
||||
#-------------------------------------------------
|
||||
|
@ -44,7 +44,7 @@ static ADDRESS_MAP_START(apogee_mem, AS_PROGRAM, 8, apogee_state )
|
||||
AM_RANGE( 0xec00, 0xec03 ) AM_DEVREADWRITE("pit8253", pit8253_device, read, write) AM_MIRROR(0x00fc)
|
||||
AM_RANGE( 0xed00, 0xed03 ) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) AM_MIRROR(0x00fc)
|
||||
//AM_RANGE( 0xee00, 0xee03 ) AM_DEVREADWRITE("ppi8255_2", i8255_device, read, write) AM_MIRROR(0x00fc)
|
||||
AM_RANGE( 0xef00, 0xef01 ) AM_DEVREADWRITE("i8275", i8275x_device, read, write) AM_MIRROR(0x00fe) // video
|
||||
AM_RANGE( 0xef00, 0xef01 ) AM_DEVREADWRITE("i8275", i8275_device, read, write) AM_MIRROR(0x00fe) // video
|
||||
AM_RANGE( 0xf000, 0xf0ff ) AM_DEVWRITE("dma8257", i8257n_device, write) // DMA
|
||||
AM_RANGE( 0xf000, 0xffff ) AM_ROM // System ROM
|
||||
ADDRESS_MAP_END
|
||||
@ -241,14 +241,14 @@ static MACHINE_CONFIG_START( apogee, apogee_state )
|
||||
|
||||
//MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
|
||||
|
||||
MCFG_DEVICE_ADD("i8275", I8275x, XTAL_16MHz / 12)
|
||||
MCFG_DEVICE_ADD("i8275", I8275, XTAL_16MHz / 12)
|
||||
MCFG_I8275_CHARACTER_WIDTH(6)
|
||||
MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(apogee_state, display_pixels)
|
||||
MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE("dma8257",i8257n_device, dreq2_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_UPDATE_DEVICE("i8275", i8275x_device, screen_update)
|
||||
MCFG_SCREEN_UPDATE_DEVICE("i8275", i8275_device, screen_update)
|
||||
MCFG_SCREEN_REFRESH_RATE(50)
|
||||
MCFG_SCREEN_SIZE(78*6, 30*10)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 78*6-1, 0, 30*10-1)
|
||||
@ -268,7 +268,7 @@ static MACHINE_CONFIG_START( apogee, apogee_state )
|
||||
MCFG_I8257_OUT_HRQ_CB(WRITELINE(radio86_state, hrq_w))
|
||||
MCFG_I8257_IN_MEMR_CB(READ8(radio86_state, memory_read_byte))
|
||||
MCFG_I8257_OUT_MEMW_CB(WRITE8(radio86_state, memory_write_byte))
|
||||
MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275x_device, dack_w))
|
||||
MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275_device, dack_w))
|
||||
MCFG_I8257_REVERSE_RW_MODE(1)
|
||||
|
||||
MCFG_CASSETTE_ADD( "cassette", apogee_cassette_interface )
|
||||
|
@ -32,6 +32,7 @@ public:
|
||||
DECLARE_READ8_MEMBER(ipds_c0_r);
|
||||
DECLARE_WRITE8_MEMBER(ipds_b1_w);
|
||||
DECLARE_WRITE8_MEMBER(kbd_put);
|
||||
I8275_DRAW_CHARACTER_MEMBER( crtc_display_pixels );
|
||||
UINT8 m_term_data;
|
||||
virtual void machine_reset();
|
||||
};
|
||||
@ -79,12 +80,11 @@ void ipds_state::machine_reset()
|
||||
{
|
||||
}
|
||||
|
||||
static I8275_DISPLAY_PIXELS(ipds_display_pixels)
|
||||
I8275_DRAW_CHARACTER_MEMBER( ipds_state::crtc_display_pixels )
|
||||
{
|
||||
int i;
|
||||
ipds_state *state = device->machine().driver_data<ipds_state>();
|
||||
const rgb_t *palette = state->m_palette->palette()->entry_list_raw();
|
||||
UINT8 *charmap = state->memregion("chargen")->base();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT8 *charmap = memregion("chargen")->base();
|
||||
UINT8 pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
|
||||
|
||||
if (vsp)
|
||||
@ -100,17 +100,6 @@ static I8275_DISPLAY_PIXELS(ipds_display_pixels)
|
||||
bitmap.pix32(y, x + i) = palette[(pixels >> (5-i)) & 1 ? (hlgt ? 2 : 1) : 0];
|
||||
}
|
||||
|
||||
const i8275_interface ipds_i8275_interface =
|
||||
{
|
||||
6,
|
||||
0,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
ipds_display_pixels
|
||||
};
|
||||
|
||||
/* F4 Character Displayer */
|
||||
static const gfx_layout ipds_charlayout =
|
||||
{
|
||||
@ -151,7 +140,10 @@ static MACHINE_CONFIG_START( ipds, ipds_state )
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ipds)
|
||||
MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
|
||||
|
||||
MCFG_I8275_ADD ( "i8275", ipds_i8275_interface)
|
||||
MCFG_DEVICE_ADD("i8275", I8275, XTAL_19_6608MHz / 4)
|
||||
MCFG_I8275_CHARACTER_WIDTH(6)
|
||||
MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(ipds_state, crtc_display_pixels)
|
||||
|
||||
MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0)
|
||||
MCFG_GENERIC_KEYBOARD_CB(WRITE8(ipds_state, kbd_put))
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -474,7 +474,7 @@ static MACHINE_CONFIG_START( mm1, mm1_state )
|
||||
MCFG_I8237_OUT_MEMW_CB(WRITE8(mm1_state, write))
|
||||
MCFG_I8237_IN_IOR_2_CB(READ8(mm1_state, mpsc_dack_r))
|
||||
MCFG_I8237_IN_IOR_3_CB(DEVREAD8(UPD765_TAG, upd765_family_device, mdma_r))
|
||||
MCFG_I8237_OUT_IOW_0_CB(DEVWRITE8(I8275_TAG, i8275x_device, dack_w))
|
||||
MCFG_I8237_OUT_IOW_0_CB(DEVWRITE8(I8275_TAG, i8275_device, dack_w))
|
||||
MCFG_I8237_OUT_IOW_1_CB(WRITE8(mm1_state, mpsc_dack_w))
|
||||
MCFG_I8237_OUT_IOW_3_CB(DEVWRITE8(UPD765_TAG, upd765_family_device, mdma_w))
|
||||
MCFG_I8237_OUT_DACK_3_CB(WRITELINE(mm1_state, dack3_w))
|
||||
|
@ -34,7 +34,7 @@ static ADDRESS_MAP_START(mikrosha_mem, AS_PROGRAM, 8, mikrosha_state )
|
||||
AM_RANGE( 0x8000, 0xbfff ) AM_READ(radio_cpu_state_r) // Not connected
|
||||
AM_RANGE( 0xc000, 0xc003 ) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) AM_MIRROR(0x07fc)
|
||||
AM_RANGE( 0xc800, 0xc803 ) AM_DEVREADWRITE("ppi8255_2", i8255_device, read, write) AM_MIRROR(0x07fc)
|
||||
AM_RANGE( 0xd000, 0xd001 ) AM_DEVREADWRITE("i8275", i8275x_device, read, write) AM_MIRROR(0x07fe) // video
|
||||
AM_RANGE( 0xd000, 0xd001 ) AM_DEVREADWRITE("i8275", i8275_device, read, write) AM_MIRROR(0x07fe) // video
|
||||
AM_RANGE( 0xd800, 0xd803 ) AM_DEVREADWRITE("pit8253", pit8253_device, read, write) AM_MIRROR(0x07fc) // Timer
|
||||
AM_RANGE( 0xe000, 0xf7ff ) AM_READ(radio_cpu_state_r) // Not connected
|
||||
AM_RANGE( 0xf800, 0xffff ) AM_DEVWRITE("dma8257", i8257n_device, write) // DMA
|
||||
@ -211,7 +211,7 @@ static MACHINE_CONFIG_START( mikrosha, mikrosha_state )
|
||||
MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
|
||||
MCFG_I8255_OUT_PORTB_CB(WRITE8(radio86_state, mikrosha_8255_font_page_w))
|
||||
|
||||
MCFG_DEVICE_ADD("i8275", I8275x, XTAL_16MHz / 12)
|
||||
MCFG_DEVICE_ADD("i8275", I8275, XTAL_16MHz / 12)
|
||||
MCFG_I8275_CHARACTER_WIDTH(6)
|
||||
MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(mikrosha_state, display_pixels)
|
||||
MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE("dma8257",i8257n_device, dreq2_w))
|
||||
@ -224,7 +224,7 @@ static MACHINE_CONFIG_START( mikrosha, mikrosha_state )
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_UPDATE_DEVICE("i8275", i8275x_device, screen_update)
|
||||
MCFG_SCREEN_UPDATE_DEVICE("i8275", i8275_device, screen_update)
|
||||
MCFG_SCREEN_REFRESH_RATE(50)
|
||||
MCFG_SCREEN_SIZE(78*6, 30*10)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 78*6-1, 0, 30*10-1)
|
||||
@ -241,7 +241,7 @@ static MACHINE_CONFIG_START( mikrosha, mikrosha_state )
|
||||
MCFG_I8257_OUT_HRQ_CB(WRITELINE(radio86_state, hrq_w))
|
||||
MCFG_I8257_IN_MEMR_CB(READ8(radio86_state, memory_read_byte))
|
||||
MCFG_I8257_OUT_MEMW_CB(WRITE8(radio86_state, memory_write_byte))
|
||||
MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275x_device, dack_w))
|
||||
MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275_device, dack_w))
|
||||
MCFG_I8257_REVERSE_RW_MODE(1)
|
||||
|
||||
MCFG_CASSETTE_ADD( "cassette", mikrosha_cassette_interface )
|
||||
|
@ -30,7 +30,7 @@ static ADDRESS_MAP_START(partner_mem, AS_PROGRAM, 8, partner_state )
|
||||
AM_RANGE( 0xc000, 0xc7ff ) AM_RAMBANK("bank8")
|
||||
AM_RANGE( 0xc800, 0xcfff ) AM_RAMBANK("bank9")
|
||||
AM_RANGE( 0xd000, 0xd7ff ) AM_RAMBANK("bank10")
|
||||
AM_RANGE( 0xd800, 0xd8ff ) AM_DEVREADWRITE("i8275", i8275x_device, read, write) // video
|
||||
AM_RANGE( 0xd800, 0xd8ff ) AM_DEVREADWRITE("i8275", i8275_device, read, write) // video
|
||||
AM_RANGE( 0xd900, 0xd9ff ) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write)
|
||||
AM_RANGE( 0xda00, 0xdaff ) AM_WRITE(partner_mem_page_w)
|
||||
AM_RANGE( 0xdb00, 0xdbff ) AM_DEVWRITE("dma8257", i8257n_device, write) // DMA
|
||||
@ -183,14 +183,14 @@ static MACHINE_CONFIG_START( partner, partner_state )
|
||||
MCFG_I8255_IN_PORTC_CB(READ8(radio86_state, radio86_8255_portc_r2))
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(radio86_state, radio86_8255_portc_w2))
|
||||
|
||||
MCFG_DEVICE_ADD("i8275", I8275x, XTAL_16MHz / 12)
|
||||
MCFG_DEVICE_ADD("i8275", I8275, XTAL_16MHz / 12)
|
||||
MCFG_I8275_CHARACTER_WIDTH(6)
|
||||
MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(partner_state, display_pixels)
|
||||
MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE("dma8257",i8257n_device, dreq2_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_UPDATE_DEVICE("i8275", i8275x_device, screen_update)
|
||||
MCFG_SCREEN_UPDATE_DEVICE("i8275", i8275_device, screen_update)
|
||||
MCFG_SCREEN_REFRESH_RATE(50)
|
||||
MCFG_SCREEN_SIZE(78*6, 30*10)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 78*6-1, 0, 30*10-1)
|
||||
@ -209,7 +209,7 @@ static MACHINE_CONFIG_START( partner, partner_state )
|
||||
MCFG_I8257_OUT_MEMW_CB(WRITE8(radio86_state, memory_write_byte))
|
||||
MCFG_I8257_IN_IOR_0_CB(DEVREAD8("wd1793", fd1793_t, data_r))
|
||||
MCFG_I8257_OUT_IOW_0_CB(DEVWRITE8("wd1793", fd1793_t, data_w))
|
||||
MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275x_device, dack_w))
|
||||
MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275_device, dack_w))
|
||||
MCFG_I8257_REVERSE_RW_MODE(1)
|
||||
|
||||
MCFG_CASSETTE_ADD( "cassette", partner_cassette_interface )
|
||||
|
@ -22,7 +22,7 @@ static ADDRESS_MAP_START(radio86_mem, AS_PROGRAM, 8, radio86_state )
|
||||
AM_RANGE( 0x1000, 0x7fff ) AM_RAM // RAM
|
||||
AM_RANGE( 0x8000, 0x8003 ) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) AM_MIRROR(0x1ffc)
|
||||
//AM_RANGE( 0xa000, 0xa003 ) AM_DEVREADWRITE("ppi8255_2", i8255_device, read, write) AM_MIRROR(0x1ffc)
|
||||
AM_RANGE( 0xc000, 0xc001 ) AM_DEVREADWRITE("i8275", i8275x_device, read, write) AM_MIRROR(0x1ffe) // video
|
||||
AM_RANGE( 0xc000, 0xc001 ) AM_DEVREADWRITE("i8275", i8275_device, read, write) AM_MIRROR(0x1ffe) // video
|
||||
AM_RANGE( 0xe000, 0xffff ) AM_DEVWRITE("dma8257", i8257n_device, write) // DMA
|
||||
AM_RANGE( 0xf000, 0xffff ) AM_ROM // System ROM
|
||||
ADDRESS_MAP_END
|
||||
@ -42,7 +42,7 @@ static ADDRESS_MAP_START(radio86rom_mem, AS_PROGRAM, 8, radio86_state )
|
||||
AM_RANGE( 0x1000, 0x7fff ) AM_RAM // RAM
|
||||
AM_RANGE( 0x8000, 0x8003 ) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) AM_MIRROR(0x1ffc)
|
||||
AM_RANGE( 0xa000, 0xa003 ) AM_DEVREADWRITE("ppi8255_2", i8255_device, read, write) AM_MIRROR(0x1ffc)
|
||||
AM_RANGE( 0xc000, 0xc001 ) AM_DEVREADWRITE("i8275", i8275x_device, read, write) AM_MIRROR(0x1ffe) // video
|
||||
AM_RANGE( 0xc000, 0xc001 ) AM_DEVREADWRITE("i8275", i8275_device, read, write) AM_MIRROR(0x1ffe) // video
|
||||
AM_RANGE( 0xe000, 0xffff ) AM_DEVWRITE("dma8257", i8257n_device, write) // DMA
|
||||
AM_RANGE( 0xf000, 0xffff ) AM_ROM // System ROM
|
||||
ADDRESS_MAP_END
|
||||
@ -53,7 +53,7 @@ static ADDRESS_MAP_START(radio86ram_mem, AS_PROGRAM, 8, radio86_state )
|
||||
AM_RANGE( 0xe000, 0xe7ff ) AM_ROM // System ROM page 2
|
||||
AM_RANGE( 0xe800, 0xf5ff ) AM_RAM // RAM
|
||||
AM_RANGE( 0xf700, 0xf703 ) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write)
|
||||
AM_RANGE( 0xf780, 0xf7bf ) AM_DEVREADWRITE("i8275", i8275x_device, read, write) // video
|
||||
AM_RANGE( 0xf780, 0xf7bf ) AM_DEVREADWRITE("i8275", i8275_device, read, write) // video
|
||||
AM_RANGE( 0xf684, 0xf687 ) AM_DEVREADWRITE("ppi8255_2", i8255_device, read, write)
|
||||
AM_RANGE( 0xf688, 0xf688 ) AM_WRITE(radio86_pagesel )
|
||||
AM_RANGE( 0xf800, 0xffff ) AM_DEVWRITE("dma8257", i8257n_device, write) // DMA
|
||||
@ -67,7 +67,7 @@ static ADDRESS_MAP_START(radio86_16_mem, AS_PROGRAM, 8, radio86_state )
|
||||
AM_RANGE( 0x4000, 0x7fff ) AM_READ(radio_cpu_state_r)
|
||||
AM_RANGE( 0x8000, 0x8003 ) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) AM_MIRROR(0x1ffc)
|
||||
//AM_RANGE( 0xa000, 0xa003 ) AM_DEVREADWRITE("ppi8255_2", i8255_device, read, write) AM_MIRROR(0x1ffc)
|
||||
AM_RANGE( 0xc000, 0xc001 ) AM_DEVREADWRITE("i8275", i8275x_device, read, write) AM_MIRROR(0x1ffe) // video
|
||||
AM_RANGE( 0xc000, 0xc001 ) AM_DEVREADWRITE("i8275", i8275_device, read, write) AM_MIRROR(0x1ffe) // video
|
||||
AM_RANGE( 0xe000, 0xffff ) AM_DEVWRITE("dma8257", i8257n_device, write) // DMA
|
||||
AM_RANGE( 0xf000, 0xffff ) AM_ROM // System ROM
|
||||
ADDRESS_MAP_END
|
||||
@ -78,7 +78,7 @@ static ADDRESS_MAP_START(mikron2_mem, AS_PROGRAM, 8, radio86_state )
|
||||
AM_RANGE( 0x1000, 0x7fff ) AM_RAM // RAM
|
||||
AM_RANGE( 0xc000, 0xc003 ) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) AM_MIRROR(0x00fc)
|
||||
//AM_RANGE( 0xc100, 0xc103 ) AM_DEVREADWRITE_LEGACY("ppi8255_2", i8255a_r, i8255a_w) AM_MIRROR(0x00fc)
|
||||
AM_RANGE( 0xc200, 0xc201 ) AM_DEVREADWRITE("i8275", i8275x_device, read, write) AM_MIRROR(0x00fe) // video
|
||||
AM_RANGE( 0xc200, 0xc201 ) AM_DEVREADWRITE("i8275", i8275_device, read, write) AM_MIRROR(0x00fe) // video
|
||||
AM_RANGE( 0xc300, 0xc3ff ) AM_DEVWRITE("dma8257", i8257n_device, write) // DMA
|
||||
AM_RANGE( 0xf000, 0xffff ) AM_ROM // System ROM
|
||||
ADDRESS_MAP_END
|
||||
@ -88,7 +88,7 @@ static ADDRESS_MAP_START(impuls03_mem, AS_PROGRAM, 8, radio86_state )
|
||||
AM_RANGE( 0x1000, 0x7fff ) AM_RAM // RAM
|
||||
AM_RANGE( 0x8000, 0x8003 ) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) AM_MIRROR(0x1ffc)
|
||||
AM_RANGE( 0xa000, 0xbfff ) AM_ROM // Basic ROM
|
||||
AM_RANGE( 0xc000, 0xc001 ) AM_DEVREADWRITE("i8275", i8275x_device, read, write) AM_MIRROR(0x1ffe) // video
|
||||
AM_RANGE( 0xc000, 0xc001 ) AM_DEVREADWRITE("i8275", i8275_device, read, write) AM_MIRROR(0x1ffe) // video
|
||||
AM_RANGE( 0xe000, 0xffff ) AM_DEVWRITE("dma8257", i8257n_device, write) // DMA
|
||||
AM_RANGE( 0xf000, 0xffff ) AM_ROM // System ROM
|
||||
ADDRESS_MAP_END
|
||||
@ -358,14 +358,14 @@ static MACHINE_CONFIG_START( radio86, radio86_state )
|
||||
MCFG_I8255_IN_PORTC_CB(READ8(radio86_state, radio86_8255_portc_r2))
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(radio86_state, radio86_8255_portc_w2))
|
||||
|
||||
MCFG_DEVICE_ADD("i8275", I8275x, XTAL_16MHz / 12)
|
||||
MCFG_DEVICE_ADD("i8275", I8275, XTAL_16MHz / 12)
|
||||
MCFG_I8275_CHARACTER_WIDTH(6)
|
||||
MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(radio86_state, display_pixels)
|
||||
MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE("dma8257",i8257n_device, dreq2_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_UPDATE_DEVICE("i8275", i8275x_device, screen_update)
|
||||
MCFG_SCREEN_UPDATE_DEVICE("i8275", i8275_device, screen_update)
|
||||
MCFG_SCREEN_REFRESH_RATE(50)
|
||||
MCFG_SCREEN_SIZE(78*6, 30*10)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 78*6-1, 0, 30*10-1)
|
||||
@ -381,7 +381,7 @@ static MACHINE_CONFIG_START( radio86, radio86_state )
|
||||
MCFG_I8257_OUT_HRQ_CB(WRITELINE(radio86_state, hrq_w))
|
||||
MCFG_I8257_IN_MEMR_CB(READ8(radio86_state, memory_read_byte))
|
||||
MCFG_I8257_OUT_MEMW_CB(WRITE8(radio86_state, memory_write_byte))
|
||||
MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275x_device, dack_w))
|
||||
MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275_device, dack_w))
|
||||
MCFG_I8257_REVERSE_RW_MODE(1)
|
||||
|
||||
MCFG_CASSETTE_ADD( "cassette", radio86_cassette_interface )
|
||||
|
@ -41,6 +41,7 @@ public:
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
DECLARE_PALETTE_INIT(rt1715);
|
||||
I8275_DRAW_CHARACTER_MEMBER( crtc_display_pixels );
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<ram_device> m_ram;
|
||||
};
|
||||
@ -133,7 +134,7 @@ WRITE8_MEMBER(rt1715_state::rt1715_rom_disable)
|
||||
VIDEO EMULATION
|
||||
***************************************************************************/
|
||||
|
||||
static I8275_DISPLAY_PIXELS( rt1715_display_pixels )
|
||||
I8275_DRAW_CHARACTER_MEMBER( rt1715_state::crtc_display_pixels )
|
||||
{
|
||||
}
|
||||
|
||||
@ -156,17 +157,6 @@ static GFXDECODE_START( rt1715 )
|
||||
GFXDECODE_ENTRY("gfx", 0x0800, rt1715_charlayout, 0, 1)
|
||||
GFXDECODE_END
|
||||
|
||||
static const i8275_interface rt1715_i8275_intf =
|
||||
{
|
||||
8,
|
||||
0,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
rt1715_display_pixels
|
||||
};
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
PALETTE
|
||||
@ -298,7 +288,9 @@ static MACHINE_CONFIG_START( rt1715, rt1715_state )
|
||||
MCFG_PALETTE_ADD("palette", 3)
|
||||
MCFG_PALETTE_INIT_OWNER(rt1715_state, rt1715)
|
||||
|
||||
MCFG_I8275_ADD("a26", rt1715_i8275_intf)
|
||||
MCFG_DEVICE_ADD("a26", I8275, XTAL_2_4576MHz)
|
||||
MCFG_I8275_CHARACTER_WIDTH(8)
|
||||
MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(rt1715_state, crtc_display_pixels)
|
||||
|
||||
MCFG_DEVICE_ADD("a30", Z80CTC, XTAL_10MHz/4 /* ? */)
|
||||
|
||||
|
@ -46,6 +46,7 @@ public:
|
||||
DECLARE_PALETTE_INIT(sm1800);
|
||||
INTERRUPT_GEN_MEMBER(sm1800_vblank_interrupt);
|
||||
IRQ_CALLBACK_MEMBER(sm1800_irq_callback);
|
||||
I8275_DRAW_CHARACTER_MEMBER( crtc_display_pixels );
|
||||
};
|
||||
|
||||
static ADDRESS_MAP_START(sm1800_mem, AS_PROGRAM, 8, sm1800_state)
|
||||
@ -85,12 +86,11 @@ INTERRUPT_GEN_MEMBER(sm1800_state::sm1800_vblank_interrupt)
|
||||
m_irq_state ^= 1;
|
||||
}
|
||||
|
||||
static I8275_DISPLAY_PIXELS(sm1800_display_pixels)
|
||||
I8275_DRAW_CHARACTER_MEMBER( sm1800_state::crtc_display_pixels )
|
||||
{
|
||||
int i;
|
||||
sm1800_state *state = device->machine().driver_data<sm1800_state>();
|
||||
const rgb_t *palette = state->m_palette->palette()->entry_list_raw();
|
||||
UINT8 *charmap = state->memregion("chargen")->base();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT8 *charmap = memregion("chargen")->base();
|
||||
UINT8 pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
|
||||
if (vsp)
|
||||
pixels = 0;
|
||||
@ -105,17 +105,6 @@ static I8275_DISPLAY_PIXELS(sm1800_display_pixels)
|
||||
bitmap.pix32(y, x + i) = palette[(pixels >> (7-i)) & 1 ? (hlgt ? 2 : 1) : 0];
|
||||
}
|
||||
|
||||
const i8275_interface sm1800_i8275_interface = {
|
||||
8,
|
||||
0,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
sm1800_display_pixels
|
||||
};
|
||||
|
||||
|
||||
WRITE8_MEMBER( sm1800_state::sm1800_8255_portb_w )
|
||||
{
|
||||
}
|
||||
@ -188,7 +177,9 @@ static MACHINE_CONFIG_START( sm1800, sm1800_state )
|
||||
MCFG_I8255_IN_PORTC_CB(READ8(sm1800_state, sm1800_8255_portc_r))
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(sm1800_state, sm1800_8255_portc_w))
|
||||
|
||||
MCFG_I8275_ADD ("i8275", sm1800_i8275_interface)
|
||||
MCFG_DEVICE_ADD("i8275", I8275, 2000000)
|
||||
MCFG_I8275_CHARACTER_WIDTH(8)
|
||||
MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(sm1800_state, crtc_display_pixels)
|
||||
|
||||
MCFG_DEVICE_ADD("i8251", I8251, 0)
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -24,6 +24,7 @@ public:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<palette_device> m_palette;
|
||||
virtual void machine_reset();
|
||||
I8275_DRAW_CHARACTER_MEMBER( crtc_display_pixels );
|
||||
};
|
||||
|
||||
static ADDRESS_MAP_START(tim100_mem, AS_PROGRAM, 8, tim100_state)
|
||||
@ -80,12 +81,11 @@ GFXDECODE_END
|
||||
|
||||
// this gets called via a (i8275_dack_w), so does nothing currently
|
||||
// once fixed, pixel count needs adjusting
|
||||
static I8275_DISPLAY_PIXELS(tim100_display_pixels)
|
||||
I8275_DRAW_CHARACTER_MEMBER( tim100_state::crtc_display_pixels )
|
||||
{
|
||||
tim100_state *state = device->machine().driver_data<tim100_state>();
|
||||
int i;
|
||||
const rgb_t *palette = state->m_palette->palette()->entry_list_raw();
|
||||
UINT8 *charmap = state->memregion("chargen")->base();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT8 *charmap = memregion("chargen")->base();
|
||||
UINT8 pixels = charmap[(linecount & 15) + (charcode << 4)];
|
||||
if (vsp)
|
||||
{
|
||||
@ -108,16 +108,6 @@ static I8275_DISPLAY_PIXELS(tim100_display_pixels)
|
||||
}
|
||||
}
|
||||
|
||||
static const i8275_interface tim100_i8276_interface = {
|
||||
16, //12
|
||||
0,
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", I8085_RST65_LINE),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
tim100_display_pixels
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( tim100, tim100_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu",I8085A, XTAL_4_9152MHz) // divider unknown
|
||||
@ -134,7 +124,10 @@ static MACHINE_CONFIG_START( tim100, tim100_state )
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", tim100 )
|
||||
|
||||
MCFG_I8275_ADD ( "i8276", tim100_i8276_interface)
|
||||
MCFG_DEVICE_ADD("i8276", I8275, XTAL_4_9152MHz)
|
||||
MCFG_I8275_CHARACTER_WIDTH(16)
|
||||
MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(tim100_state, crtc_display_pixels)
|
||||
MCFG_I8275_IRQ_CALLBACK(INPUTLINE("maincpu", I8085_RST65_LINE))
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 3)
|
||||
|
||||
|
@ -42,7 +42,7 @@ ToDo:
|
||||
#include "machine/pit8253.h"
|
||||
#include "machine/i8255.h"
|
||||
#include "machine/i8257.h"
|
||||
#include "video/i8275x.h"
|
||||
#include "video/i8275.h"
|
||||
#include "sound/speaker.h"
|
||||
|
||||
|
||||
@ -102,7 +102,7 @@ static ADDRESS_MAP_START( unior_io, AS_IO, 8, unior_state )
|
||||
AM_RANGE(0x3c, 0x3f) AM_DEVREADWRITE("ppi0", i8255_device, read, write) // cassette player control
|
||||
AM_RANGE(0x4c, 0x4f) AM_DEVREADWRITE("ppi1", i8255_device, read, write)
|
||||
AM_RANGE(0x50, 0x50) AM_WRITE(scroll_w)
|
||||
AM_RANGE(0x60, 0x61) AM_DEVREADWRITE("crtc", i8275x_device, read, write)
|
||||
AM_RANGE(0x60, 0x61) AM_DEVREADWRITE("crtc", i8275_device, read, write)
|
||||
AM_RANGE(0xdc, 0xdf) AM_DEVREADWRITE("pit", pit8253_device, read, write )
|
||||
AM_RANGE(0xec, 0xec) AM_DEVREADWRITE("uart",i8251_device, data_r, data_w)
|
||||
AM_RANGE(0xed, 0xed) AM_DEVREADWRITE("uart", i8251_device, status_r, control_w)
|
||||
@ -398,7 +398,7 @@ static MACHINE_CONFIG_START( unior, unior_state )
|
||||
MCFG_SCREEN_REFRESH_RATE(50)
|
||||
MCFG_SCREEN_SIZE(640, 200)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1)
|
||||
MCFG_SCREEN_UPDATE_DEVICE("crtc", i8275x_device, screen_update)
|
||||
MCFG_SCREEN_UPDATE_DEVICE("crtc", i8275_device, screen_update)
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", unior)
|
||||
MCFG_PALETTE_ADD("palette", 3)
|
||||
MCFG_PALETTE_INIT_OWNER(unior_state,unior)
|
||||
@ -435,9 +435,9 @@ static MACHINE_CONFIG_START( unior, unior_state )
|
||||
MCFG_DEVICE_ADD("dma", I8257N, XTAL_20MHz / 9)
|
||||
MCFG_I8257_OUT_HRQ_CB(WRITELINE(unior_state, hrq_w))
|
||||
MCFG_I8257_IN_MEMR_CB(READ8(unior_state, dma_r))
|
||||
MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("crtc", i8275x_device, dack_w))
|
||||
MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("crtc", i8275_device, dack_w))
|
||||
|
||||
MCFG_DEVICE_ADD("crtc", I8275x, XTAL_20MHz / 12)
|
||||
MCFG_DEVICE_ADD("crtc", I8275, XTAL_20MHz / 12)
|
||||
MCFG_I8275_CHARACTER_WIDTH(6)
|
||||
MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(unior_state, display_pixels)
|
||||
MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE("dma",i8257n_device, dreq2_w))
|
||||
|
@ -16,7 +16,7 @@ Wicat - various systems.
|
||||
#include "machine/mm58274c.h"
|
||||
#include "machine/mc2661.h"
|
||||
#include "machine/im6402.h"
|
||||
#include "video/i8275x.h"
|
||||
#include "video/i8275.h"
|
||||
#include "machine/am9517a.h"
|
||||
#include "machine/x2212.h"
|
||||
#include "machine/wd_fdc.h"
|
||||
@ -101,7 +101,7 @@ public:
|
||||
required_device<mc2661_device> m_uart5;
|
||||
required_device<mc2661_device> m_uart6;
|
||||
required_device<cpu_device> m_videocpu;
|
||||
required_device<i8275x_device> m_videoctrl;
|
||||
required_device<i8275_device> m_videoctrl;
|
||||
required_device<am9517a_device> m_videodma;
|
||||
required_device<mc2661_device> m_videouart0;
|
||||
required_device<mc2661_device> m_videouart1;
|
||||
@ -848,7 +848,7 @@ static MACHINE_CONFIG_START( wicat, wicat_state )
|
||||
MCFG_AM9517A_OUT_EOP_CB(WRITELINE(wicat_state, dma_nmi_cb))
|
||||
MCFG_AM9517A_IN_MEMR_CB(READ8(wicat_state, vram_r))
|
||||
MCFG_AM9517A_OUT_MEMW_CB(WRITE8(wicat_state, vram_w))
|
||||
MCFG_AM9517A_OUT_IOW_0_CB(DEVWRITE8("video", i8275x_device, dack_w))
|
||||
MCFG_AM9517A_OUT_IOW_0_CB(DEVWRITE8("video", i8275_device, dack_w))
|
||||
MCFG_IM6402_ADD("videouart", 0, 0)
|
||||
MCFG_IM6402_DR_CALLBACK(WRITELINE(wicat_state, kb_data_ready))
|
||||
|
||||
@ -870,11 +870,11 @@ static MACHINE_CONFIG_START( wicat, wicat_state )
|
||||
MCFG_SCREEN_SIZE(720,300)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0,720-1,0,300-1)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
MCFG_SCREEN_UPDATE_DEVICE("video",i8275x_device,screen_update)
|
||||
MCFG_SCREEN_UPDATE_DEVICE("video",i8275_device,screen_update)
|
||||
|
||||
MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
|
||||
|
||||
MCFG_DEVICE_ADD("video", I8275x, XTAL_19_6608MHz/8)
|
||||
MCFG_DEVICE_ADD("video", I8275, XTAL_19_6608MHz/8)
|
||||
MCFG_I8275_CHARACTER_WIDTH(9)
|
||||
MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(wicat_state, wicat_display_pixels)
|
||||
MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE("videodma",am9517a_device, dreq0_w))
|
||||
|
@ -33,7 +33,7 @@ ToDo:
|
||||
#include "machine/6821pia.h"
|
||||
#include "machine/z80dma.h"
|
||||
#include "machine/pit8253.h"
|
||||
#include "video/i8275x.h"
|
||||
#include "video/i8275.h"
|
||||
#include "sound/beep.h"
|
||||
#include "machine/keyboard.h"
|
||||
#include "machine/wd_fdc.h"
|
||||
@ -91,7 +91,7 @@ private:
|
||||
required_device<i8251_device> m_u2;
|
||||
required_device<pia6821_device> m_pia0;
|
||||
required_device<pia6821_device> m_pia1;
|
||||
required_device<i8275x_device> m_crtc;
|
||||
required_device<i8275_device> m_crtc;
|
||||
required_device<fd1793_t> m_fdc;
|
||||
required_device<floppy_connector> m_floppy0;
|
||||
required_device<floppy_connector> m_floppy1;
|
||||
@ -113,7 +113,7 @@ static ADDRESS_MAP_START( zorba_io, AS_IO, 8, zorba_state )
|
||||
AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("pit", pit8254_device, read, write)
|
||||
AM_RANGE(0x04, 0x04) AM_READWRITE(rom_r,rom_w)
|
||||
AM_RANGE(0x05, 0x05) AM_READWRITE(ram_r,ram_w)
|
||||
AM_RANGE(0x10, 0x11) AM_DEVREADWRITE("crtc", i8275x_device, read, write)
|
||||
AM_RANGE(0x10, 0x11) AM_DEVREADWRITE("crtc", i8275_device, read, write)
|
||||
AM_RANGE(0x20, 0x20) AM_DEVREADWRITE("uart0", i8251_device, data_r, data_w)
|
||||
AM_RANGE(0x21, 0x21) AM_DEVREADWRITE("uart0", i8251_device, status_r, control_w)
|
||||
AM_RANGE(0x22, 0x22) AM_DEVREADWRITE("uart1", i8251_device, data_r, data_w)
|
||||
@ -320,7 +320,7 @@ static MACHINE_CONFIG_START( zorba, zorba_state )
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(50)
|
||||
MCFG_SCREEN_UPDATE_DEVICE("crtc", i8275x_device, screen_update)
|
||||
MCFG_SCREEN_UPDATE_DEVICE("crtc", i8275_device, screen_update)
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", zorba)
|
||||
MCFG_PALETTE_ADD("palette", 3)
|
||||
MCFG_PALETTE_INIT_OWNER(zorba_state, zorba)
|
||||
@ -363,7 +363,7 @@ static MACHINE_CONFIG_START( zorba, zorba_state )
|
||||
MCFG_PIT8253_CLK1(XTAL_24MHz / 3) /* Timer 1: ? */
|
||||
MCFG_PIT8253_CLK2(XTAL_24MHz / 3) /* Timer 2: ? */
|
||||
|
||||
MCFG_DEVICE_ADD("crtc", I8275x, XTAL_14_31818MHz/7)
|
||||
MCFG_DEVICE_ADD("crtc", I8275, XTAL_14_31818MHz/7)
|
||||
MCFG_I8275_CHARACTER_WIDTH(8)
|
||||
MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(zorba_state, zorba_update_chr)
|
||||
MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE("dma", z80dma_device, rdy_w))
|
||||
|
@ -15,7 +15,7 @@
|
||||
#include "machine/ram.h"
|
||||
#include "machine/z80dart.h"
|
||||
#include "machine/upd765.h"
|
||||
#include "video/i8275x.h"
|
||||
#include "video/i8275.h"
|
||||
#include "video/upd7220.h"
|
||||
|
||||
#define SCREEN_TAG "screen"
|
||||
@ -67,7 +67,7 @@ public:
|
||||
required_device<i8212_device> m_iop;
|
||||
required_device<am9517a_device> m_dmac;
|
||||
required_device<pit8253_device> m_pit;
|
||||
required_device<i8275x_device> m_crtc;
|
||||
required_device<i8275_device> m_crtc;
|
||||
required_device<upd765a_device> m_fdc;
|
||||
required_device<upd7201_device> m_mpsc;
|
||||
required_device<upd7220_device> m_hgdc;
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
#include "machine/i8255.h"
|
||||
#include "machine/i8257.h"
|
||||
#include "video/i8275x.h"
|
||||
#include "video/i8275.h"
|
||||
#include "imagedev/cassette.h"
|
||||
|
||||
|
||||
|
@ -112,7 +112,7 @@ MACHINE_CONFIG_FRAGMENT( mm1m6_video )
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", mm1)
|
||||
MCFG_PALETTE_ADD_MONOCHROME_GREEN_HIGHLIGHT("palette")
|
||||
|
||||
MCFG_DEVICE_ADD(I8275_TAG, I8275x, XTAL_18_720MHz/8)
|
||||
MCFG_DEVICE_ADD(I8275_TAG, I8275, XTAL_18_720MHz/8)
|
||||
MCFG_I8275_CHARACTER_WIDTH(8)
|
||||
MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(mm1_state, crtc_display_pixels)
|
||||
MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE(I8237_TAG, am9517a_device, dreq0_w))
|
||||
|
Loading…
Reference in New Issue
Block a user