summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cracyc <cracyc@users.noreply.github.com>2014-04-30 04:13:31 +0000
committer cracyc <cracyc@users.noreply.github.com>2014-04-30 04:13:31 +0000
commit194b93093425ccc6598fe888db4005d651d3d6e1 (patch)
treefbec0e100e10d4c93de5ff635e3f6f43504c81b6
parent3ec0e3224aceb284d630c8e4d5dadd4187970aad (diff)
(mess) radio86: convert to new 8257 and 8275 (nw)
i8257: fix off-by-one (nw) --- Unior doesn't quite display properly. Only remaining user of 8257dma is dkong.
-rw-r--r--.gitattributes1
-rw-r--r--src/emu/machine/i8257.c83
-rw-r--r--src/emu/machine/i8257.h42
-rw-r--r--src/emu/video/i8275x.c11
-rw-r--r--src/mess/drivers/apogee.c42
-rw-r--r--src/mess/drivers/fanucspmg.c12
-rw-r--r--src/mess/drivers/mikrosha.c42
-rw-r--r--src/mess/drivers/partner.c61
-rw-r--r--src/mess/drivers/pc8001.c14
-rw-r--r--src/mess/drivers/radio86.c39
-rw-r--r--src/mess/drivers/unior.c59
-rw-r--r--src/mess/includes/partner.h17
-rw-r--r--src/mess/includes/radio86.h25
-rw-r--r--src/mess/machine/partner.c84
-rw-r--r--src/mess/machine/radio86.c73
-rw-r--r--src/mess/mess.mak1
-rw-r--r--src/mess/video/radio86.c113
17 files changed, 313 insertions, 406 deletions
diff --git a/.gitattributes b/.gitattributes
index 8468c261350..059e893bf4c 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -8926,7 +8926,6 @@ src/mess/video/poisk1.h svneol=native#text/plain
src/mess/video/poly88.c svneol=native#text/plain
src/mess/video/pp01.c svneol=native#text/plain
src/mess/video/primo.c svneol=native#text/plain
-src/mess/video/radio86.c svneol=native#text/plain
src/mess/video/rm380z.c svneol=native#text/plain
src/mess/video/rmnimbus.c svneol=native#text/plain
src/mess/video/samcoupe.c svneol=native#text/plain
diff --git a/src/emu/machine/i8257.c b/src/emu/machine/i8257.c
index a6a521de0c4..6de5771afbe 100644
--- a/src/emu/machine/i8257.c
+++ b/src/emu/machine/i8257.c
@@ -219,22 +219,35 @@ inline void i8257n_device::dma_write()
// end_of_process -
//-------------------------------------------------
-inline void i8257n_device::end_of_process()
+inline void i8257n_device::advance()
{
- m_status |= 1 << m_current_channel;
- m_request &= ~(1 << m_current_channel);
- set_tc(1);
+ bool tc = (m_channel[m_current_channel].m_count == 0);
+ bool al = (MODE_AUTOLOAD && (m_current_channel == 2));
- if (MODE_AUTOLOAD && (m_current_channel == 2))
+ if(tc)
{
- // autoinitialize
- m_channel[2].m_address = m_channel[3].m_address;
- m_channel[2].m_count = m_channel[3].m_count;
- m_channel[2].m_mode = m_channel[3].m_mode;
+ m_status |= 1 << m_current_channel;
+ m_request &= ~(1 << m_current_channel); // docs imply this isn't right but pc-8001 works better with it
+ set_tc(1);
+
+ if(al)
+ {
+ // autoinitialize
+ m_channel[2].m_address = m_channel[3].m_address;
+ m_channel[2].m_count = m_channel[3].m_count;
+ m_channel[2].m_mode = m_channel[3].m_mode;
+ }
+ else if(MODE_TC_STOP)
+ // disable channel
+ m_transfer_mode &= ~(1 << m_current_channel);
+ }
+
+ if(!(al && tc))
+ {
+ m_channel[m_current_channel].m_count--;
+ m_channel[m_current_channel].m_count &= 0x3fff;
+ m_channel[m_current_channel].m_address++;
}
- else if(MODE_TC_STOP)
- // disable channel
- m_transfer_mode &= ~(1 << m_current_channel);
}
@@ -251,6 +264,7 @@ i8257n_device::i8257n_device(const machine_config &mconfig, const char *tag, dev
: device_t(mconfig, I8257N, "I8257N", tag, owner, clock, "i8257n", __FILE__),
device_execute_interface(mconfig, *this),
m_icount(0),
+ m_reverse_rw(0),
m_tc(false),
m_msb(0),
m_hreq(CLEAR_LINE),
@@ -310,13 +324,6 @@ void i8257n_device::device_start()
m_out_dack_2_cb.resolve_safe();
m_out_dack_3_cb.resolve_safe();
- for (int i = 0; i < 4; i++)
- {
- m_channel[i].m_address = 0;
- m_channel[i].m_count = 0;
- m_channel[i].m_mode = 0;
- }
-
// state saving
save_item(NAME(m_msb));
save_item(NAME(m_hreq));
@@ -328,6 +335,19 @@ void i8257n_device::device_start()
save_item(NAME(m_transfer_mode));
save_item(NAME(m_status));
save_item(NAME(m_request));
+
+ save_item(NAME(m_channel[0].m_address));
+ save_item(NAME(m_channel[0].m_count));
+ save_item(NAME(m_channel[0].m_mode));
+ save_item(NAME(m_channel[1].m_address));
+ save_item(NAME(m_channel[1].m_count));
+ save_item(NAME(m_channel[1].m_mode));
+ save_item(NAME(m_channel[2].m_address));
+ save_item(NAME(m_channel[2].m_count));
+ save_item(NAME(m_channel[2].m_mode));
+ save_item(NAME(m_channel[3].m_address));
+ save_item(NAME(m_channel[3].m_count));
+ save_item(NAME(m_channel[3].m_mode));
}
@@ -347,6 +367,12 @@ void i8257n_device::device_reset()
m_hreq = -1;
m_tc = 0;
+ for (int i = 0; i < 4; i++)
+ {
+ m_channel[i].m_address = 0;
+ m_channel[i].m_count = 0;
+ m_channel[i].m_mode = 0;
+ }
set_hreq(0);
set_dack();
}
@@ -444,12 +470,7 @@ void i8257n_device::execute_run()
{
dma_write();
}
- m_channel[m_current_channel].m_count--;
- m_channel[m_current_channel].m_count &= 0x3fff;
- m_channel[m_current_channel].m_address++;
-
- if(!m_channel[m_current_channel].m_count)
- end_of_process();
+ advance();
if(next_channel())
m_state = STATE_S1;
@@ -495,7 +516,11 @@ READ8_MEMBER( i8257n_device::read )
case REGISTER_WORD_COUNT:
if (m_msb)
{
- data = (m_channel[channel].m_count >> 8) | (m_channel[channel].m_mode << 6);
+ data = (m_channel[channel].m_count >> 8);
+ if(m_reverse_rw && m_channel[channel].m_mode)
+ data |= (m_channel[channel].m_mode == 1) ? 0x2000 : 0x1000;
+ else
+ data |= (m_channel[channel].m_mode << 6);
}
else
{
@@ -550,10 +575,14 @@ WRITE8_MEMBER( i8257n_device::write )
{
m_channel[channel].m_count = ((data & 0x3f) << 8) | (m_channel[channel].m_count & 0xff);
m_channel[channel].m_mode = (data >> 6);
+
+ if(m_reverse_rw && m_channel[channel].m_mode)
+ m_channel[channel].m_mode = (m_channel[channel].m_mode == 1) ? 2 : 1;
+
if(MODE_AUTOLOAD && (channel == 2))
{
m_channel[3].m_count = ((data & 0x3f) << 8) | (m_channel[3].m_count & 0xff);
- m_channel[3].m_mode = (data >> 6);
+ m_channel[3].m_mode = m_channel[2].m_mode;
}
}
else
diff --git a/src/emu/machine/i8257.h b/src/emu/machine/i8257.h
index ad0f4199dd7..8de8bb13ca4 100644
--- a/src/emu/machine/i8257.h
+++ b/src/emu/machine/i8257.h
@@ -45,58 +45,62 @@
DEVICE CONFIGURATION MACROS
***************************************************************************/
-#define MCFG_I8257N_ADD(_tag, _clock, _config) \
+#define MCFG_I8257_ADD(_tag, _clock, _config) \
MCFG_DEVICE_ADD(_tag, I8257N, _clock) \
MCFG_DEVICE_CONFIG(_config)
-#define MCFG_I8257N_OUT_HRQ_CB(_devcb) \
+#define MCFG_I8257_OUT_HRQ_CB(_devcb) \
devcb = &i8257n_device::set_out_hrq_callback(*device, DEVCB2_##_devcb);
-#define MCFG_I8257N_OUT_TC_CB(_devcb) \
+#define MCFG_I8257_OUT_TC_CB(_devcb) \
devcb = &i8257n_device::set_out_tc_callback(*device, DEVCB2_##_devcb);
-#define MCFG_I8257N_IN_MEMR_CB(_devcb) \
+#define MCFG_I8257_IN_MEMR_CB(_devcb) \
devcb = &i8257n_device::set_in_memr_callback(*device, DEVCB2_##_devcb);
-#define MCFG_I8257N_OUT_MEMW_CB(_devcb) \
+#define MCFG_I8257_OUT_MEMW_CB(_devcb) \
devcb = &i8257n_device::set_out_memw_callback(*device, DEVCB2_##_devcb);
-#define MCFG_I8257N_IN_IOR_0_CB(_devcb) \
+#define MCFG_I8257_IN_IOR_0_CB(_devcb) \
devcb = &i8257n_device::set_in_ior_0_callback(*device, DEVCB2_##_devcb);
-#define MCFG_I8257N_IN_IOR_1_CB(_devcb) \
+#define MCFG_I8257_IN_IOR_1_CB(_devcb) \
devcb = &i8257n_device::set_in_ior_1_callback(*device, DEVCB2_##_devcb);
-#define MCFG_I8257N_IN_IOR_2_CB(_devcb) \
+#define MCFG_I8257_IN_IOR_2_CB(_devcb) \
devcb = &i8257n_device::set_in_ior_2_callback(*device, DEVCB2_##_devcb);
-#define MCFG_I8257N_IN_IOR_3_CB(_devcb) \
+#define MCFG_I8257_IN_IOR_3_CB(_devcb) \
devcb = &i8257n_device::set_in_ior_3_callback(*device, DEVCB2_##_devcb);
-#define MCFG_I8257N_OUT_IOW_0_CB(_devcb) \
+#define MCFG_I8257_OUT_IOW_0_CB(_devcb) \
devcb = &i8257n_device::set_out_iow_0_callback(*device, DEVCB2_##_devcb);
-#define MCFG_I8257N_OUT_IOW_1_CB(_devcb) \
+#define MCFG_I8257_OUT_IOW_1_CB(_devcb) \
devcb = &i8257n_device::set_out_iow_1_callback(*device, DEVCB2_##_devcb);
-#define MCFG_I8257N_OUT_IOW_2_CB(_devcb) \
+#define MCFG_I8257_OUT_IOW_2_CB(_devcb) \
devcb = &i8257n_device::set_out_iow_2_callback(*device, DEVCB2_##_devcb);
-#define MCFG_I8257N_OUT_IOW_3_CB(_devcb) \
+#define MCFG_I8257_OUT_IOW_3_CB(_devcb) \
devcb = &i8257n_device::set_out_iow_3_callback(*device, DEVCB2_##_devcb);
-#define MCFG_I8257N_OUT_DACK_0_CB(_devcb) \
+#define MCFG_I8257_OUT_DACK_0_CB(_devcb) \
devcb = &i8257n_device::set_out_dack_0_callback(*device, DEVCB2_##_devcb);
-#define MCFG_I8257N_OUT_DACK_1_CB(_devcb) \
+#define MCFG_I8257_OUT_DACK_1_CB(_devcb) \
devcb = &i8257n_device::set_out_dack_1_callback(*device, DEVCB2_##_devcb);
-#define MCFG_I8257N_OUT_DACK_2_CB(_devcb) \
+#define MCFG_I8257_OUT_DACK_2_CB(_devcb) \
devcb = &i8257n_device::set_out_dack_2_callback(*device, DEVCB2_##_devcb);
-#define MCFG_I8257N_OUT_DACK_3_CB(_devcb) \
+#define MCFG_I8257_OUT_DACK_3_CB(_devcb) \
devcb = &i8257n_device::set_out_dack_3_callback(*device, DEVCB2_##_devcb);
+// HACK: the radio86 and alikes require this, is it a bug in the soviet clone or is there something else happening?
+#define MCFG_I8257_REVERSE_RW_MODE(_flag) \
+ i8257n_device::static_set_reverse_rw_mode(*device, _flag);
+
// ======================> i8257n_device
class i8257n_device : public device_t,
@@ -138,6 +142,7 @@ public:
template<class _Object> static devcb2_base &set_out_dack_2_callback(device_t &device, _Object object) { return downcast<i8257n_device &>(device).m_out_dack_2_cb.set_callback(object); }
template<class _Object> static devcb2_base &set_out_dack_3_callback(device_t &device, _Object object) { return downcast<i8257n_device &>(device).m_out_dack_3_cb.set_callback(object); }
+ static void static_set_reverse_rw_mode(device_t &device, bool flag) { downcast<i8257n_device &>(device).m_reverse_rw = flag; }
protected:
// device-level overrides
virtual void device_start();
@@ -153,10 +158,11 @@ private:
inline void set_dack();
inline void dma_read();
inline void dma_write();
- inline void end_of_process();
+ inline void advance();
inline void set_tc(int state);
bool next_channel();
+ bool m_reverse_rw;
bool m_tc;
int m_msb;
int m_hreq;
diff --git a/src/emu/video/i8275x.c b/src/emu/video/i8275x.c
index 625b46584b2..11429583c07 100644
--- a/src/emu/video/i8275x.c
+++ b/src/emu/video/i8275x.c
@@ -266,6 +266,12 @@ void i8275x_device::device_timer(emu_timer &timer, device_timer_id id, int param
if (m_scanline < m_vrtc_scanline)
{
+
+ if (OFFSET_LINE_COUNTER)
+ {
+ lc = (lc - 1) & 0x0f;
+ }
+
for (int sx = 0; sx < CHARACTERS_PER_ROW; sx++)
{
int m_lineattr = 0;
@@ -329,11 +335,6 @@ void i8275x_device::device_timer(emu_timer &timer, device_timer_id id, int param
}
}
- if (OFFSET_LINE_COUNTER)
- {
- lc = (lc - 1) & 0x0f;
- }
-
if (!m_display_cb.isnull())
m_display_cb(m_bitmap,
sx * m_hpixels_per_column, // x position on screen of starting point
diff --git a/src/mess/drivers/apogee.c b/src/mess/drivers/apogee.c
index 949ec99a07e..f8d3dac2cc7 100644
--- a/src/mess/drivers/apogee.c
+++ b/src/mess/drivers/apogee.c
@@ -12,9 +12,7 @@
#include "sound/wave.h"
#include "sound/speaker.h"
#include "machine/i8255.h"
-#include "machine/8257dma.h"
#include "machine/pit8253.h"
-#include "video/i8275.h"
#include "imagedev/cassette.h"
#include "formats/rk_cas.h"
#include "includes/radio86.h"
@@ -33,6 +31,7 @@ public:
DECLARE_WRITE_LINE_MEMBER(pit8253_out0_changed);
DECLARE_WRITE_LINE_MEMBER(pit8253_out1_changed);
DECLARE_WRITE_LINE_MEMBER(pit8253_out2_changed);
+ I8275_DRAW_CHARACTER_MEMBER(display_pixels);
required_device<speaker_sound_device> m_speaker;
};
@@ -45,8 +44,8 @@ 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", i8275_device, read, write) AM_MIRROR(0x00fe) // video
- AM_RANGE( 0xf000, 0xf0ff ) AM_DEVWRITE("dma8257", i8257_device, i8257_w) // DMA
+ AM_RANGE( 0xef00, 0xef01 ) AM_DEVREADWRITE("i8275", i8275x_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
@@ -178,6 +177,27 @@ WRITE_LINE_MEMBER(apogee_state::pit8253_out2_changed)
m_speaker->level_w(m_out0+m_out1+m_out2);
}
+I8275_DRAW_CHARACTER_MEMBER(apogee_state::display_pixels)
+{
+ int i;
+ const rgb_t *palette = m_palette->palette()->entry_list_raw();
+ const UINT8 *charmap = m_charmap + (gpa & 1) * 0x400;
+ UINT8 pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
+ if(linecount == 8)
+ return;
+ if (vsp) {
+ pixels = 0;
+ }
+ if (lten) {
+ pixels = 0xff;
+ }
+ if (rvv) {
+ pixels ^= 0xff;
+ }
+ for(i=0;i<6;i++) {
+ bitmap.pix32(y, x + i) = palette[(pixels >> (5-i)) & 1 ? (hlgt ? 2 : 1) : 0];
+ }
+}
/* F4 Character Displayer */
static const gfx_layout apogee_charlayout =
@@ -221,12 +241,15 @@ static MACHINE_CONFIG_START( apogee, apogee_state )
//MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
- MCFG_I8275_ADD("i8275", apogee_i8275_interface)
+ MCFG_DEVICE_ADD("i8275", I8275x, XTAL_16MHz / 9 / 4)
+ 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", i8275_device, screen_update)
+ MCFG_SCREEN_UPDATE_DEVICE("i8275", i8275x_device, screen_update)
MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(78*6, 30*10)
MCFG_SCREEN_VISIBLE_AREA(0, 78*6-1, 0, 30*10-1)
@@ -241,11 +264,12 @@ static MACHINE_CONFIG_START( apogee, apogee_state )
MCFG_SOUND_CONFIG(apogee_speaker_interface)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
- MCFG_DEVICE_ADD("dma8257", I8257, XTAL_16MHz / 9)
+ MCFG_DEVICE_ADD("dma8257", I8257N, XTAL_16MHz / 9)
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", i8275_device, dack_w))
+ MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275x_device, dack_w))
+ MCFG_I8257_REVERSE_RW_MODE(1)
MCFG_CASSETTE_ADD( "cassette", apogee_cassette_interface )
MCFG_SOFTWARE_LIST_ADD("cass_list","apogee")
diff --git a/src/mess/drivers/fanucspmg.c b/src/mess/drivers/fanucspmg.c
index 910d855de88..4b22fc6cd00 100644
--- a/src/mess/drivers/fanucspmg.c
+++ b/src/mess/drivers/fanucspmg.c
@@ -862,12 +862,12 @@ static MACHINE_CONFIG_START( fanucspmg, fanucspmg_state )
MCFG_PIT8253_CLK2(XTAL_15MHz/12)
MCFG_DEVICE_ADD(DMAC_TAG, I8257N, XTAL_15MHz / 5)
- MCFG_I8257N_OUT_HRQ_CB(WRITELINE(fanucspmg_state, hrq_w))
- MCFG_I8257N_OUT_TC_CB(WRITELINE(fanucspmg_state, tc_w))
- MCFG_I8257N_IN_MEMR_CB(READ8(fanucspmg_state, memory_read_byte))
- MCFG_I8257N_OUT_MEMW_CB(WRITE8(fanucspmg_state, memory_write_byte))
- MCFG_I8257N_IN_IOR_0_CB(READ8(fanucspmg_state, fdcdma_r))
- MCFG_I8257N_OUT_IOW_0_CB(WRITE8(fanucspmg_state, fdcdma_w))
+ MCFG_I8257_OUT_HRQ_CB(WRITELINE(fanucspmg_state, hrq_w))
+ MCFG_I8257_OUT_TC_CB(WRITELINE(fanucspmg_state, tc_w))
+ MCFG_I8257_IN_MEMR_CB(READ8(fanucspmg_state, memory_read_byte))
+ MCFG_I8257_OUT_MEMW_CB(WRITE8(fanucspmg_state, memory_write_byte))
+ MCFG_I8257_IN_IOR_0_CB(READ8(fanucspmg_state, fdcdma_r))
+ MCFG_I8257_OUT_IOW_0_CB(WRITE8(fanucspmg_state, fdcdma_w))
MCFG_PIC8259_ADD(PIC0_TAG, INPUTLINE("maincpu", 0), VCC, READ8(fanucspmg_state, get_slave_ack))
MCFG_PIC8259_ADD(PIC1_TAG, DEVWRITELINE(PIC0_TAG, pic8259_device, ir7_w), GND, NULL)
diff --git a/src/mess/drivers/mikrosha.c b/src/mess/drivers/mikrosha.c
index 3f7a6c83d41..74a85ff8e3e 100644
--- a/src/mess/drivers/mikrosha.c
+++ b/src/mess/drivers/mikrosha.c
@@ -11,9 +11,7 @@
#include "cpu/i8085/i8085.h"
#include "sound/wave.h"
#include "machine/i8255.h"
-#include "machine/8257dma.h"
#include "machine/pit8253.h"
-#include "video/i8275.h"
#include "imagedev/cassette.h"
#include "formats/rk_cas.h"
#include "includes/radio86.h"
@@ -25,6 +23,7 @@ public:
mikrosha_state(const machine_config &mconfig, device_type type, const char *tag)
: radio86_state(mconfig, type, tag) { }
DECLARE_WRITE_LINE_MEMBER(mikrosha_pit_out2);
+ I8275_DRAW_CHARACTER_MEMBER(display_pixels);
};
@@ -35,10 +34,10 @@ 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", i8275_device, read, write) AM_MIRROR(0x07fe) // video
+ AM_RANGE( 0xd000, 0xd001 ) AM_DEVREADWRITE("i8275", i8275x_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", i8257_device, i8257_w) // DMA
+ AM_RANGE( 0xf800, 0xffff ) AM_DEVWRITE("dma8257", i8257n_device, write) // DMA
AM_RANGE( 0xf800, 0xffff ) AM_ROM // System ROM
ADDRESS_MAP_END
@@ -155,6 +154,28 @@ WRITE_LINE_MEMBER(mikrosha_state::mikrosha_pit_out2)
{
}
+I8275_DRAW_CHARACTER_MEMBER(mikrosha_state::display_pixels)
+{
+ int i;
+ const rgb_t *palette = m_palette->palette()->entry_list_raw();
+ const UINT8 *charmap = m_charmap + (m_mikrosha_font_page & 1) * 0x400;
+ UINT8 pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
+ if(linecount == 8)
+ return;
+ if (vsp) {
+ pixels = 0;
+ }
+ if (lten) {
+ pixels = 0xff;
+ }
+ if (rvv) {
+ pixels ^= 0xff;
+ }
+ for(i=0;i<6;i++) {
+ bitmap.pix32(y, x + i) = palette[(pixels >> (5-i)) & 1 ? (hlgt ? 2 : 1) : 0];
+ }
+}
+
/* F4 Character Displayer */
static const gfx_layout mikrosha_charlayout =
{
@@ -190,7 +211,10 @@ 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_I8275_ADD("i8275", mikrosha_i8275_interface)
+ MCFG_DEVICE_ADD("i8275", I8275x, XTAL_16MHz / 9 / 4)
+ 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))
MCFG_DEVICE_ADD("pit8253", PIT8253, 0)
MCFG_PIT8253_CLK0(0)
@@ -200,9 +224,8 @@ static MACHINE_CONFIG_START( mikrosha, mikrosha_state )
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_UPDATE_DEVICE("i8275", i8275_device, screen_update)
+ MCFG_SCREEN_UPDATE_DEVICE("i8275", i8275x_device, screen_update)
MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(78*6, 30*10)
MCFG_SCREEN_VISIBLE_AREA(0, 78*6-1, 0, 30*10-1)
@@ -214,11 +237,12 @@ static MACHINE_CONFIG_START( mikrosha, mikrosha_state )
MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
- MCFG_DEVICE_ADD("dma8257", I8257, XTAL_16MHz / 9)
+ MCFG_DEVICE_ADD("dma8257", I8257N, XTAL_16MHz / 9)
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", i8275_device, dack_w))
+ MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275x_device, dack_w))
+ MCFG_I8257_REVERSE_RW_MODE(1)
MCFG_CASSETTE_ADD( "cassette", mikrosha_cassette_interface )
MCFG_SOFTWARE_LIST_ADD("cass_list","mikrosha")
diff --git a/src/mess/drivers/partner.c b/src/mess/drivers/partner.c
index 0380fb3c06b..e9c3742ce65 100644
--- a/src/mess/drivers/partner.c
+++ b/src/mess/drivers/partner.c
@@ -11,12 +11,8 @@
#include "cpu/i8085/i8085.h"
#include "sound/wave.h"
#include "machine/i8255.h"
-#include "machine/8257dma.h"
-#include "machine/wd17xx.h"
-#include "video/i8275.h"
#include "imagedev/cassette.h"
-#include "imagedev/flopdrv.h"
-#include "formats/basicdsk.h"
+#include "formats/smx_dsk.h"
#include "formats/rk_cas.h"
#include "includes/radio86.h"
#include "machine/ram.h"
@@ -34,10 +30,10 @@ 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", i8275_device, read, write) // video
+ AM_RANGE( 0xd800, 0xd8ff ) AM_DEVREADWRITE("i8275", i8275x_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", i8257_device, i8257_w) // DMA
+ AM_RANGE( 0xdb00, 0xdbff ) AM_DEVWRITE("dma8257", i8257n_device, write) // DMA
AM_RANGE( 0xdc00, 0xddff ) AM_RAMBANK("bank11")
AM_RANGE( 0xde00, 0xdeff ) AM_WRITE(partner_win_memory_page_w)
AM_RANGE( 0xe000, 0xe7ff ) AM_RAMBANK("bank12")
@@ -147,27 +143,13 @@ static const cassette_interface partner_cassette_interface =
NULL
};
-static LEGACY_FLOPPY_OPTIONS_START(partner)
- LEGACY_FLOPPY_OPTION(partner, "cpm", "Partner disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
- HEADS([2])
- TRACKS([80])
- SECTORS([5])
- SECTOR_LENGTH([1024])
- FIRST_SECTOR_ID([1]))
-LEGACY_FLOPPY_OPTIONS_END
+FLOPPY_FORMATS_MEMBER( partner_state::floppy_formats )
+ FLOPPY_SMX_FORMAT
+FLOPPY_FORMATS_END
-static const floppy_interface partner_floppy_interface =
-{
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- FLOPPY_STANDARD_5_25_DSHD,
- LEGACY_FLOPPY_OPTIONS_NAME(partner),
- "floppy_5_25",
- NULL
-};
+static SLOT_INTERFACE_START( partner_floppies )
+ SLOT_INTERFACE( "525qd", FLOPPY_525_QD )
+SLOT_INTERFACE_END
/* F4 Character Displayer */
static const gfx_layout partner_charlayout =
@@ -193,7 +175,6 @@ static MACHINE_CONFIG_START( partner, partner_state )
MCFG_CPU_ADD("maincpu", I8080, XTAL_16MHz / 9)
MCFG_CPU_PROGRAM_MAP(partner_mem)
- MCFG_MACHINE_START_OVERRIDE(partner_state, partner )
MCFG_MACHINE_RESET_OVERRIDE(partner_state, partner )
MCFG_DEVICE_ADD("ppi8255_1", I8255, 0)
@@ -202,12 +183,15 @@ 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_I8275_ADD("i8275", partner_i8275_interface)
+ MCFG_DEVICE_ADD("i8275", I8275x, XTAL_16MHz / 9 / 4)
+ 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", i8275_device, screen_update)
+ MCFG_SCREEN_UPDATE_DEVICE("i8275", i8275x_device, screen_update)
MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(78*6, 30*10)
MCFG_SCREEN_VISIBLE_AREA(0, 78*6-1, 0, 30*10-1)
@@ -219,20 +203,23 @@ static MACHINE_CONFIG_START( partner, partner_state )
MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
- MCFG_DEVICE_ADD("dma8257", I8257, XTAL_16MHz / 9)
+ MCFG_DEVICE_ADD("dma8257", I8257N, XTAL_16MHz / 9)
MCFG_I8257_OUT_HRQ_CB(WRITELINE(partner_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_IN_IOR_0_CB(READ8(partner_state, partner_fdc_r))
- MCFG_I8257_OUT_IOW_0_CB(WRITE8(partner_state, partner_fdc_w))
- MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275_device, dack_w))
+ 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_REVERSE_RW_MODE(1)
MCFG_CASSETTE_ADD( "cassette", partner_cassette_interface )
MCFG_SOFTWARE_LIST_ADD("cass_list","partner_cass")
- MCFG_FD1793_ADD("wd1793", partner_wd17xx_interface )
+ MCFG_FD1793x_ADD("wd1793", XTAL_16MHz / 16)
+ MCFG_WD_FDC_DRQ_CALLBACK(DEVWRITELINE("dma8257", i8257n_device, dreq0_w))
+ MCFG_FLOPPY_DRIVE_ADD("wd1793:0", partner_floppies, "525qd", partner_state::floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD("wd1793:1", partner_floppies, "525qd", partner_state::floppy_formats)
- MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(partner_floppy_interface)
MCFG_SOFTWARE_LIST_ADD("flop_list","partner_flop")
/* internal ram */
diff --git a/src/mess/drivers/pc8001.c b/src/mess/drivers/pc8001.c
index b544c58ca45..a1164ca51a2 100644
--- a/src/mess/drivers/pc8001.c
+++ b/src/mess/drivers/pc8001.c
@@ -493,7 +493,6 @@ static MACHINE_CONFIG_START( pc8001, pc8001_state )
/* video hardware */
MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_UPDATE_DEVICE(UPD3301_TAG, upd3301_device, screen_update)
MCFG_SCREEN_SIZE(640, 220)
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1)
@@ -509,9 +508,9 @@ static MACHINE_CONFIG_START( pc8001, pc8001_state )
MCFG_DEVICE_ADD(I8255A_TAG, I8255A, 0)
MCFG_DEVICE_ADD(I8257_TAG, I8257N, 4000000)
- MCFG_I8257N_OUT_HRQ_CB(WRITELINE(pc8001_state, hrq_w))
- MCFG_I8257N_IN_MEMR_CB(READ8(pc8001_state, dma_mem_r))
- MCFG_I8257N_OUT_IOW_2_CB(DEVWRITE8(UPD3301_TAG, upd3301_device, dack_w))
+ MCFG_I8257_OUT_HRQ_CB(WRITELINE(pc8001_state, hrq_w))
+ MCFG_I8257_IN_MEMR_CB(READ8(pc8001_state, dma_mem_r))
+ MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8(UPD3301_TAG, upd3301_device, dack_w))
MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL_32_768kHz, NULL, NULL)
@@ -542,7 +541,6 @@ static MACHINE_CONFIG_START( pc8001mk2, pc8001mk2_state )
/* video hardware */
MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_UPDATE_DEVICE(UPD3301_TAG, upd3301_device, screen_update)
MCFG_SCREEN_SIZE(640, 220)
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1)
@@ -558,9 +556,9 @@ static MACHINE_CONFIG_START( pc8001mk2, pc8001mk2_state )
MCFG_DEVICE_ADD(I8255A_TAG, I8255A, 0)
MCFG_DEVICE_ADD(I8257_TAG, I8257N, 4000000)
- MCFG_I8257N_OUT_HRQ_CB(WRITELINE(pc8001_state, hrq_w))
- MCFG_I8257N_IN_MEMR_CB(READ8(pc8001_state, dma_mem_r))
- MCFG_I8257N_OUT_IOW_2_CB(DEVWRITE8(UPD3301_TAG, upd3301_device, dack_w))
+ MCFG_I8257_OUT_HRQ_CB(WRITELINE(pc8001_state, hrq_w))
+ MCFG_I8257_IN_MEMR_CB(READ8(pc8001_state, dma_mem_r))
+ MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8(UPD3301_TAG, upd3301_device, dack_w))
MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL_32_768kHz, NULL, NULL)
diff --git a/src/mess/drivers/radio86.c b/src/mess/drivers/radio86.c
index 9b44a76ac1a..9aa27038f7a 100644
--- a/src/mess/drivers/radio86.c
+++ b/src/mess/drivers/radio86.c
@@ -11,8 +11,6 @@
#include "cpu/i8085/i8085.h"
#include "sound/wave.h"
#include "machine/i8255.h"
-#include "machine/8257dma.h"
-#include "video/i8275.h"
#include "imagedev/cassette.h"
#include "imagedev/cartslot.h"
#include "formats/rk_cas.h"
@@ -24,8 +22,8 @@ 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", i8275_device, read, write) AM_MIRROR(0x1ffe) // video
- AM_RANGE( 0xe000, 0xffff ) AM_DEVWRITE("dma8257", i8257_device, i8257_w) // DMA
+ AM_RANGE( 0xc000, 0xc001 ) AM_DEVREADWRITE("i8275", i8275x_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
@@ -44,8 +42,8 @@ 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", i8275_device, read, write) AM_MIRROR(0x1ffe) // video
- AM_RANGE( 0xe000, 0xffff ) AM_DEVWRITE("dma8257", i8257_device, i8257_w) // DMA
+ AM_RANGE( 0xc000, 0xc001 ) AM_DEVREADWRITE("i8275", i8275x_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
@@ -55,10 +53,10 @@ 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", i8275_device, read, write) // video
+ AM_RANGE( 0xf780, 0xf7bf ) AM_DEVREADWRITE("i8275", i8275x_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", i8257_device, i8257_w) // DMA
+ AM_RANGE( 0xf800, 0xffff ) AM_DEVWRITE("dma8257", i8257n_device, write) // DMA
AM_RANGE( 0xf800, 0xffff ) AM_ROM // System ROM page 1
ADDRESS_MAP_END
@@ -69,8 +67,8 @@ 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", i8275_device, read, write) AM_MIRROR(0x1ffe) // video
- AM_RANGE( 0xe000, 0xffff ) AM_DEVWRITE("dma8257", i8257_device, i8257_w) // DMA
+ AM_RANGE( 0xc000, 0xc001 ) AM_DEVREADWRITE("i8275", i8275x_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
@@ -80,8 +78,8 @@ 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", i8275_device, read, write) AM_MIRROR(0x00fe) // video
- AM_RANGE( 0xc300, 0xc3ff ) AM_DEVWRITE("dma8257", i8257_device, i8257_w) // DMA
+ AM_RANGE( 0xc200, 0xc201 ) AM_DEVREADWRITE("i8275", i8275x_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
@@ -90,8 +88,8 @@ 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", i8275_device, read, write) AM_MIRROR(0x1ffe) // video
- AM_RANGE( 0xe000, 0xffff ) AM_DEVWRITE("dma8257", i8257_device, i8257_w) // DMA
+ AM_RANGE( 0xc000, 0xc001 ) AM_DEVREADWRITE("i8275", i8275x_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
@@ -360,13 +358,15 @@ 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_I8275_ADD("i8275", radio86_i8275_interface)
+ MCFG_DEVICE_ADD("i8275", I8275x, XTAL_16MHz / 9 / 4) // 1 dma transfer per char clock
+ 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", i8275_device, screen_update)
+ MCFG_SCREEN_UPDATE_DEVICE("i8275", i8275x_device, screen_update)
MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(78*6, 30*10)
MCFG_SCREEN_VISIBLE_AREA(0, 78*6-1, 0, 30*10-1)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", radio86)
@@ -377,11 +377,12 @@ static MACHINE_CONFIG_START( radio86, radio86_state )
MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
- MCFG_DEVICE_ADD("dma8257", I8257, XTAL_16MHz / 9)
+ MCFG_DEVICE_ADD("dma8257", I8257N, XTAL_16MHz / 9)
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", i8275_device, dack_w))
+ MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275x_device, dack_w))
+ MCFG_I8257_REVERSE_RW_MODE(1)
MCFG_CASSETTE_ADD( "cassette", radio86_cassette_interface )
MCFG_SOFTWARE_LIST_ADD("cass_list","radio86")
diff --git a/src/mess/drivers/unior.c b/src/mess/drivers/unior.c
index 05d65c6ecfb..5eb4c367d7b 100644
--- a/src/mess/drivers/unior.c
+++ b/src/mess/drivers/unior.c
@@ -41,8 +41,8 @@ ToDo:
#include "machine/i8251.h"
#include "machine/pit8253.h"
#include "machine/i8255.h"
-#include "machine/8257dma.h"
-#include "video/i8275.h"
+#include "machine/i8257.h"
+#include "video/i8275x.h"
#include "sound/speaker.h"
@@ -69,9 +69,11 @@ public:
DECLARE_READ8_MEMBER(ppi1_c_r);
DECLARE_WRITE8_MEMBER(ppi1_a_w);
DECLARE_WRITE8_MEMBER(ppi1_c_w);
- DECLARE_WRITE8_MEMBER(cpu_status_callback);
+ DECLARE_WRITE_LINE_MEMBER(hrq_w);
DECLARE_PALETTE_INIT(unior);
DECLARE_READ8_MEMBER(dma_r);
+ I8275_DRAW_CHARACTER_MEMBER(display_pixels);
+
UINT8 *m_p_vram;
UINT8 *m_p_chargen;
private:
@@ -81,7 +83,7 @@ private:
virtual void video_start();
required_device<cpu_device> m_maincpu;
required_device<pit8253_device> m_pit;
- required_device<i8257_device> m_dma;
+ required_device<i8257n_device> m_dma;
required_device<i8251_device> m_uart;
public:
required_device<palette_device> m_palette;
@@ -96,11 +98,11 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( unior_io, AS_IO, 8, unior_state )
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x30, 0x38) AM_DEVREADWRITE("dma", i8257_device, i8257_r, i8257_w) // dma data
+ AM_RANGE(0x30, 0x38) AM_DEVREADWRITE("dma", i8257n_device, read, write) // dma data
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", i8275_device, read, write)
+ AM_RANGE(0x60, 0x61) AM_DEVREADWRITE("crtc", i8275x_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)
@@ -256,11 +258,14 @@ WRITE8_MEMBER( unior_state::scroll_w )
memcpy(m_p_vram, m_p_vram+80, 24*80);
}
-static I8275_DISPLAY_PIXELS(display_pixels)
+I8275_DRAW_CHARACTER_MEMBER(unior_state::display_pixels)
{
- unior_state *state = device->machine().driver_data<unior_state>();
- const rgb_t *palette = state->m_palette->palette()->entry_list_raw();
- UINT8 gfx = state->m_p_chargen[(linecount & 7) | (charcode << 3)];
+ const rgb_t *palette = m_palette->palette()->entry_list_raw();
+ UINT8 gfx = m_p_chargen[(linecount & 7) | (charcode << 3)];
+
+ if(linecount == 8)
+ return;
+
if (vsp)
gfx = 0;
@@ -274,17 +279,6 @@ static I8275_DISPLAY_PIXELS(display_pixels)
bitmap.pix32(y, x + i) = palette[BIT(gfx, 5-i) ? (hlgt ? 2 : 1) : 0];
}
-static const i8275_interface crtc_intf =
-{
- 6,
- 0,
- DEVCB_DEVICE_LINE_MEMBER("dma", i8257_device, i8257_drq2_w),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- display_pixels
-};
-
static const rgb_t unior_palette[3] =
{
rgb_t(0x00, 0x00, 0x00), // black
@@ -369,9 +363,10 @@ READ8_MEMBER(unior_state::dma_r)
return m_p_vram[offset & 0x7ff];
}
-WRITE8_MEMBER( unior_state::cpu_status_callback )
+WRITE_LINE_MEMBER( unior_state::hrq_w )
{
- m_dma->i8257_hlda_w(BIT(data, 3));
+ m_maincpu->set_input_line(INPUT_LINE_HALT, state);
+ m_dma->hlda_w(state);
}
@@ -397,15 +392,13 @@ static MACHINE_CONFIG_START( unior, unior_state )
MCFG_CPU_ADD("maincpu",I8080, XTAL_20MHz / 9) // unknown clock
MCFG_CPU_PROGRAM_MAP(unior_mem)
MCFG_CPU_IO_MAP(unior_io)
- MCFG_I8085A_STATUS(WRITE8(unior_state, cpu_status_callback))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(640, 200)
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1)
- MCFG_SCREEN_UPDATE_DEVICE("crtc", i8275_device, screen_update)
+ MCFG_SCREEN_UPDATE_DEVICE("crtc", i8275x_device, screen_update)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", unior)
MCFG_PALETTE_ADD("palette", 3)
MCFG_PALETTE_INIT_OWNER(unior_state,unior)
@@ -439,12 +432,16 @@ static MACHINE_CONFIG_START( unior, unior_state )
MCFG_I8255_IN_PORTC_CB(READ8(unior_state, ppi1_c_r))
MCFG_I8255_OUT_PORTC_CB(WRITE8(unior_state, ppi1_c_w))
- MCFG_DEVICE_ADD("dma", I8257, XTAL_20MHz / 9) // unknown clock
- MCFG_I8257_OUT_HRQ_CB(INPUTLINE("maincpu", I8085_HALT))
- MCFG_I8257_OUT_MEMW_CB(DEVWRITE8("crtc", i8275_device, dack_w))
- MCFG_I8257_IN_IOR_2_CB(READ8(unior_state, dma_r))
+ MCFG_DEVICE_ADD("dma", I8257N, XTAL_20MHz / 9) // unknown clock
+ 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_I8275_ADD("crtc", crtc_intf)
+ MCFG_DEVICE_ADD("crtc", I8275x, XTAL_20MHz / 9 / 4) // unknown clock
+ 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))
+ MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mess/includes/partner.h b/src/mess/includes/partner.h
index 2efc3c67b57..f4d9e845345 100644
--- a/src/mess/includes/partner.h
+++ b/src/mess/includes/partner.h
@@ -8,8 +8,7 @@
#define partner_H_
#include "machine/i8255.h"
-#include "machine/8257dma.h"
-#include "machine/wd17xx.h"
+#include "machine/wd_fdc.h"
#include "machine/ram.h"
class partner_state : public radio86_state
@@ -29,24 +28,16 @@ public:
DECLARE_DRIVER_INIT(partner);
DECLARE_MACHINE_START(partner);
DECLARE_MACHINE_RESET(partner);
- DECLARE_WRITE_LINE_MEMBER(partner_wd17xx_drq_w);
- DECLARE_WRITE_LINE_MEMBER(hrq_w);
-
- //to remove trampoline once it use new wd17xx core
- DECLARE_READ8_MEMBER(partner_fdc_r);
- DECLARE_WRITE8_MEMBER(partner_fdc_w);
+ I8275_DRAW_CHARACTER_MEMBER(display_pixels);
void partner_window_1(UINT8 bank_num, UINT16 offset,UINT8 *rom);
void partner_window_2(UINT8 bank_num, UINT16 offset,UINT8 *rom);
void partner_iomap_bank(UINT8 *rom);
void partner_bank_switch();
required_device<ram_device> m_ram;
- required_device<fd1793_device> m_fdc;
+ required_device<fd1793_t> m_fdc;
+ DECLARE_FLOPPY_FORMATS( floppy_formats );
};
-/*----------- defined in machine/partner.c -----------*/
-
-extern const wd17xx_interface partner_wd17xx_interface;
-
#endif /* partner_H_ */
diff --git a/src/mess/includes/radio86.h b/src/mess/includes/radio86.h
index 0f797a3f453..5105351e802 100644
--- a/src/mess/includes/radio86.h
+++ b/src/mess/includes/radio86.h
@@ -8,8 +8,8 @@
#define radio86_H_
#include "machine/i8255.h"
-#include "machine/8257dma.h"
-#include "video/i8275.h"
+#include "machine/i8257.h"
+#include "video/i8275x.h"
#include "imagedev/cassette.h"
@@ -79,11 +79,12 @@ public:
DECLARE_WRITE8_MEMBER(mikrosha_8255_font_page_w);
DECLARE_READ8_MEMBER(memory_read_byte);
DECLARE_WRITE8_MEMBER(memory_write_byte);
+ I8275_DRAW_CHARACTER_MEMBER(display_pixels);
required_device<cpu_device> m_maincpu;
protected:
required_device<cassette_image_device> m_cassette;
- optional_device<i8257_device> m_dma8257;
+ optional_device<i8257n_device> m_dma8257;
required_device<i8255_device> m_ppi8255_1;
optional_device<i8255_device> m_ppi8255_2;
required_memory_region m_region_maincpu;
@@ -118,22 +119,4 @@ public:
INPUT_PORTS_EXTERN( radio86 );
INPUT_PORTS_EXTERN( ms7007 );
-
-/*----------- defined in machine/radio86.c -----------*/
-
-extern const i8275_interface radio86_i8275_interface;
-extern const i8275_interface partner_i8275_interface;
-extern const i8275_interface mikrosha_i8275_interface;
-extern const i8275_interface apogee_i8275_interface;
-
-extern void radio86_init_keyboard(running_machine &machine);
-
-
-/*----------- defined in video/radio86.c -----------*/
-
-extern I8275_DISPLAY_PIXELS(radio86_display_pixels);
-extern I8275_DISPLAY_PIXELS(partner_display_pixels);
-extern I8275_DISPLAY_PIXELS(mikrosha_display_pixels);
-extern I8275_DISPLAY_PIXELS(apogee_display_pixels);
-
#endif /* radio86_H_ */
diff --git a/src/mess/machine/partner.c b/src/mess/machine/partner.c
index 6f896573bf0..0ee65a4186c 100644
--- a/src/mess/machine/partner.c
+++ b/src/mess/machine/partner.c
@@ -10,10 +10,6 @@
#include "emu.h"
#include "cpu/i8085/i8085.h"
#include "imagedev/cassette.h"
-#include "machine/i8255.h"
-#include "machine/8257dma.h"
-#include "machine/wd17xx.h"
-#include "video/i8275.h"
#include "includes/radio86.h"
#include "includes/partner.h"
#include "imagedev/flopdrv.h"
@@ -26,26 +22,6 @@ DRIVER_INIT_MEMBER(partner_state,partner)
m_tape_value = 0x80;
}
-WRITE_LINE_MEMBER(partner_state::partner_wd17xx_drq_w)
-{
- i8257_device *device = machine().device<i8257_device>("dma8257");
- if (state)
- device->i8257_drq0_w(1);
-}
-
-const wd17xx_interface partner_wd17xx_interface =
-{
- DEVCB_LINE_GND,
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(partner_state,partner_wd17xx_drq_w),
- {FLOPPY_0, FLOPPY_1, NULL, NULL}
-};
-
-MACHINE_START_MEMBER(partner_state,partner)
-{
- m_fdc->set_pause_time(10);
-}
-
void partner_state::partner_window_1(UINT8 bank_num, UINT16 offset,UINT8 *rom)
{
char bank[10];
@@ -94,25 +70,30 @@ READ8_MEMBER(partner_state::partner_floppy_r){
WRITE8_MEMBER(partner_state::partner_floppy_w){
if (offset<0x100) {
switch(offset & 3) {
- case 0x00 : m_fdc->command_w(space, 0,data); break;
+ case 0x00 : m_fdc->cmd_w(space, 0,data); break;
case 0x01 : m_fdc->track_w(space, 0,data);break;
case 0x02 : m_fdc->sector_w(space, 0,data);break;
default : m_fdc->data_w(space, 0,data);break;
}
} else {
- floppy_get_device(machine(), 0)->floppy_mon_w(1);
- floppy_get_device(machine(), 1)->floppy_mon_w(1);
+ floppy_image_device *floppy0 = m_fdc->subdevice<floppy_connector>("0")->get_device();
+ floppy_image_device *floppy1 = m_fdc->subdevice<floppy_connector>("1")->get_device();
+
if (((data >> 6) & 1)==1) {
- m_fdc->set_drive(0);
- floppy_get_device(machine(), 0)->floppy_mon_w(0);
- floppy_get_device(machine(), 0)->floppy_drive_set_ready_state(1, 1);
+ m_fdc->set_floppy(floppy0);
+ floppy0->mon_w(0);
+ floppy0->ss_w(data >> 7);
}
+ else
+ floppy0->mon_w(1);
+
if (((data >> 3) & 1)==1) {
- m_fdc->set_drive(1);
- floppy_get_device(machine(), 1)->floppy_mon_w(0);
- floppy_get_device(machine(), 1)->floppy_drive_set_ready_state(1, 1);
+ m_fdc->set_floppy(floppy1);
+ floppy1->mon_w(0);
+ floppy1->ss_w(data >> 7);
}
- m_fdc->set_side(data >> 7);
+ else
+ floppy1->mon_w(1);
}
}
@@ -349,23 +330,26 @@ WRITE8_MEMBER(partner_state::partner_mem_page_w)
partner_bank_switch();
}
-WRITE_LINE_MEMBER(partner_state::hrq_w)
+I8275_DRAW_CHARACTER_MEMBER(partner_state::display_pixels)
{
- /* HACK - this should be connected to the BUSREQ line of Z80 */
- m_maincpu->set_input_line(INPUT_LINE_HALT, state);
-
- /* HACK - this should be connected to the BUSACK line of Z80 */
- machine().device<i8257_device>("dma8257")->i8257_hlda_w(state);
-}
-
-READ8_MEMBER(partner_state::partner_fdc_r)
-{
- return m_fdc->data_r(space,offset);
-}
-
-WRITE8_MEMBER(partner_state::partner_fdc_w)
-{
- m_fdc->data_w(space,offset,data);
+ int i;
+ const rgb_t *palette = m_palette->palette()->entry_list_raw();
+ const UINT8 *charmap = m_charmap + 0x400 * (gpa * 2 + hlgt);
+ UINT8 pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
+ if(linecount == 8)
+ return;
+ if (vsp) {
+ pixels = 0;
+ }
+ if (lten) {
+ pixels = 0xff;
+ }
+ if (rvv) {
+ pixels ^= 0xff;
+ }
+ for(i=0;i<6;i++) {
+ bitmap.pix32(y, x + i) = palette[(pixels >> (5-i)) & 1];
+ }
}
MACHINE_RESET_MEMBER(partner_state,partner)
diff --git a/src/mess/machine/radio86.c b/src/mess/machine/radio86.c
index db4b903f230..ff0949490b4 100644
--- a/src/mess/machine/radio86.c
+++ b/src/mess/machine/radio86.c
@@ -10,8 +10,6 @@
#include "emu.h"
#include "cpu/i8085/i8085.h"
#include "machine/i8255.h"
-#include "machine/8257dma.h"
-#include "video/i8275.h"
#include "includes/radio86.h"
@@ -99,7 +97,7 @@ WRITE_LINE_MEMBER(radio86_state::hrq_w)
m_maincpu->set_input_line(INPUT_LINE_HALT, state);
/* HACK - this should be connected to the BUSACK line of Z80 */
- m_dma8257->i8257_hlda_w(state);
+ m_dma8257->hlda_w(state);
}
READ8_MEMBER(radio86_state::memory_read_byte)
@@ -186,42 +184,41 @@ WRITE8_MEMBER(radio86_state::mikrosha_8255_font_page_w)
m_mikrosha_font_page = (data > 7) & 1;
}
-const i8275_interface radio86_i8275_interface = {
- 6,
- 0,
- DEVCB_DEVICE_LINE_MEMBER("dma8257", i8257_device, i8257_drq2_w),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- radio86_display_pixels
-};
+I8275_DRAW_CHARACTER_MEMBER(radio86_state::display_pixels)
+{
+ int i;
+ const rgb_t *palette = m_palette->palette()->entry_list_raw();
+ const UINT8 *charmap = m_charmap;
+ UINT8 pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
+ if(linecount == 8)
+ return;
+ if (vsp) {
+ pixels = 0;
+ }
+ if (lten) {
+ pixels = 0xff;
+ }
+ if (rvv) {
+ pixels ^= 0xff;
+ }
+ for(i=0;i<6;i++) {
+ bitmap.pix32(y, x + i) = palette[(pixels >> (5-i)) & 1 ? (hlgt ? 2 : 1) : 0];
+ }
+}
-const i8275_interface mikrosha_i8275_interface = {
- 6,
- 0,
- DEVCB_DEVICE_LINE_MEMBER("dma8257", i8257_device, i8257_drq2_w),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- mikrosha_display_pixels
+static const rgb_t radio86_palette[3] = {
+ rgb_t(0x00, 0x00, 0x00), // black
+ rgb_t(0xa0, 0xa0, 0xa0), // white
+ rgb_t(0xff, 0xff, 0xff) // highlight
};
-const i8275_interface apogee_i8275_interface = {
- 6,
- 0,
- DEVCB_DEVICE_LINE_MEMBER("dma8257", i8257_device, i8257_drq2_w),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- apogee_display_pixels
-};
+PALETTE_INIT_MEMBER(radio86_state,radio86)
+{
+ palette.set_pen_colors(0, radio86_palette, ARRAY_LENGTH(radio86_palette));
+}
+
+void radio86_state::video_start()
+{
+ m_charmap = memregion("gfx1")->base();
+}
-const i8275_interface partner_i8275_interface = {
- 6,
- 1,
- DEVCB_DEVICE_LINE_MEMBER("dma8257", i8257_device, i8257_drq2_w),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- partner_display_pixels
-};
diff --git a/src/mess/mess.mak b/src/mess/mess.mak
index 38b800a8a87..3bac83c732f 100644
--- a/src/mess/mess.mak
+++ b/src/mess/mess.mak
@@ -1628,7 +1628,6 @@ $(MESSOBJ)/psion.a: \
$(MESSOBJ)/radio.a: \
$(MESS_DRIVERS)/radio86.o \
$(MESS_MACHINE)/radio86.o \
- $(MESS_VIDEO)/radio86.o \
$(MESS_DRIVERS)/apogee.o \
$(MESS_DRIVERS)/partner.o \
$(MESS_MACHINE)/partner.o \
diff --git a/src/mess/video/radio86.c b/src/mess/video/radio86.c
deleted file mode 100644
index 97a7ddf3e79..00000000000
--- a/src/mess/video/radio86.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/***************************************************************************
-
- Radio-86RK video driver by Miodrag Milanovic
-
- 06/03/2008 Preliminary driver.
-
-****************************************************************************/
-
-
-#include "emu.h"
-#include "video/i8275.h"
-#include "includes/radio86.h"
-
-I8275_DISPLAY_PIXELS(radio86_display_pixels)
-{
- radio86_state *state = device->machine().driver_data<radio86_state>();
- int i;
- const rgb_t *palette = state->m_palette->palette()->entry_list_raw();
- const UINT8 *charmap = state->m_charmap;
- UINT8 pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
- if (vsp) {
- pixels = 0;
- }
- if (lten) {
- pixels = 0xff;
- }
- if (rvv) {
- pixels ^= 0xff;
- }
- for(i=0;i<6;i++) {
- bitmap.pix32(y, x + i) = palette[(pixels >> (5-i)) & 1 ? (hlgt ? 2 : 1) : 0];
- }
-}
-
-
-I8275_DISPLAY_PIXELS(mikrosha_display_pixels)
-{
- radio86_state *state = device->machine().driver_data<radio86_state>();
- int i;
- const rgb_t *palette = state->m_palette->palette()->entry_list_raw();
- const UINT8 *charmap = state->m_charmap + (state->m_mikrosha_font_page & 1) * 0x400;
- UINT8 pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
- if (vsp) {
- pixels = 0;
- }
- if (lten) {
- pixels = 0xff;
- }
- if (rvv) {
- pixels ^= 0xff;
- }
- for(i=0;i<6;i++) {
- bitmap.pix32(y, x + i) = palette[(pixels >> (5-i)) & 1 ? (hlgt ? 2 : 1) : 0];
- }
-}
-
-I8275_DISPLAY_PIXELS(apogee_display_pixels)
-{
- radio86_state *state = device->machine().driver_data<radio86_state>();
- int i;
- const rgb_t *palette = state->m_palette->palette()->entry_list_raw();
- const UINT8 *charmap = state->m_charmap + (gpa & 1) * 0x400;
- UINT8 pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
- if (vsp) {
- pixels = 0;
- }
- if (lten) {
- pixels = 0xff;
- }
- if (rvv) {
- pixels ^= 0xff;
- }
- for(i=0;i<6;i++) {
- bitmap.pix32(y, x + i) = palette[(pixels >> (5-i)) & 1 ? (hlgt ? 2 : 1) : 0];
- }
-}
-
-I8275_DISPLAY_PIXELS(partner_display_pixels)
-{
- radio86_state *state = device->machine().driver_data<radio86_state>();
- int i;
- const rgb_t *palette = state->m_palette->palette()->entry_list_raw();
- const UINT8 *charmap = state->m_charmap + 0x400 * (gpa * 2 + hlgt);
- UINT8 pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
- if (vsp) {
- pixels = 0;
- }
- if (lten) {
- pixels = 0xff;
- }
- if (rvv) {
- pixels ^= 0xff;
- }
- for(i=0;i<6;i++) {
- bitmap.pix32(y, x + i) = palette[(pixels >> (5-i)) & 1];
- }
-}
-
-static const rgb_t radio86_palette[3] = {
- rgb_t(0x00, 0x00, 0x00), // black
- rgb_t(0xa0, 0xa0, 0xa0), // white
- rgb_t(0xff, 0xff, 0xff) // highlight
-};
-
-PALETTE_INIT_MEMBER(radio86_state,radio86)
-{
- palette.set_pen_colors(0, radio86_palette, ARRAY_LENGTH(radio86_palette));
-}
-
-void radio86_state::video_start()
-{
- m_charmap = memregion("gfx1")->base();
-}