mirror of
https://github.com/holub/mame
synced 2025-10-04 08:28:39 +03:00
(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.
This commit is contained in:
parent
3ec0e3224a
commit
194b930934
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -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
|
||||
|
@ -219,13 +219,18 @@ inline void i8257n_device::dma_write()
|
||||
// end_of_process -
|
||||
//-------------------------------------------------
|
||||
|
||||
inline void i8257n_device::end_of_process()
|
||||
inline void i8257n_device::advance()
|
||||
{
|
||||
bool tc = (m_channel[m_current_channel].m_count == 0);
|
||||
bool al = (MODE_AUTOLOAD && (m_current_channel == 2));
|
||||
|
||||
if(tc)
|
||||
{
|
||||
m_status |= 1 << m_current_channel;
|
||||
m_request &= ~(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 (MODE_AUTOLOAD && (m_current_channel == 2))
|
||||
if(al)
|
||||
{
|
||||
// autoinitialize
|
||||
m_channel[2].m_address = m_channel[3].m_address;
|
||||
@ -235,6 +240,14 @@ inline void i8257n_device::end_of_process()
|
||||
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++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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")
|
||||
|
@ -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)
|
||||
|
@ -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")
|
||||
|
@ -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 */
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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")
|
||||
|
@ -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 */
|
||||
|
@ -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_ */
|
||||
|
@ -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_ */
|
||||
|
@ -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)
|
||||
|
@ -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];
|
||||
}
|
||||
}
|
||||
|
||||
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 mikrosha_i8275_interface = {
|
||||
6,
|
||||
0,
|
||||
DEVCB_DEVICE_LINE_MEMBER("dma8257", i8257_device, i8257_drq2_w),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
mikrosha_display_pixels
|
||||
};
|
||||
PALETTE_INIT_MEMBER(radio86_state,radio86)
|
||||
{
|
||||
palette.set_pen_colors(0, radio86_palette, ARRAY_LENGTH(radio86_palette));
|
||||
}
|
||||
|
||||
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
|
||||
};
|
||||
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
|
||||
};
|
||||
|
@ -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 \
|
||||
|
@ -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();
|
||||
}
|
Loading…
Reference in New Issue
Block a user