summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2021-05-08 20:38:32 +1000
committer Robbbert <Robbbert@users.noreply.github.com>2021-05-08 20:38:32 +1000
commitbe35212b589dbc26f383352d7a3c089440b13fc5 (patch)
tree77e3d86b2c2116b6566bb86aec37a5d54cd93034
parent63163277ca5731a19ec8313e5db0c3723ad8c05f (diff)
meritum: make it a derived class of trs80
-rw-r--r--src/mame/drivers/lnw80.cpp14
-rw-r--r--src/mame/drivers/meritum.cpp224
-rw-r--r--src/mame/drivers/radionic.cpp26
-rw-r--r--src/mame/drivers/trs80.cpp2
-rw-r--r--src/mame/includes/trs80.h43
-rw-r--r--src/mame/machine/trs80.cpp55
-rw-r--r--src/mame/video/trs80.cpp61
7 files changed, 127 insertions, 298 deletions
diff --git a/src/mame/drivers/lnw80.cpp b/src/mame/drivers/lnw80.cpp
index f6c88298c6b..8811dc70bbb 100644
--- a/src/mame/drivers/lnw80.cpp
+++ b/src/mame/drivers/lnw80.cpp
@@ -312,17 +312,16 @@ void lnw80_state::lnw80_fe_w(u8 data)
void lnw80_state::machine_start()
{
- save_item(NAME(m_mode));
+ save_item(NAME(m_cpl));
save_item(NAME(m_irq));
save_item(NAME(m_mask));
save_item(NAME(m_reg_load));
save_item(NAME(m_lnw_mode));
save_item(NAME(m_cassette_data));
save_item(NAME(m_old_cassette_val));
- save_item(NAME(m_size_store));
+ save_item(NAME(m_cols));
save_item(NAME(m_timeout));
- m_size_store = 0xff;
m_reg_load=1;
m_cassette_data_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(lnw80_state::cassette_data_callback),this));
@@ -331,7 +330,8 @@ void lnw80_state::machine_start()
void lnw80_state::machine_reset()
{
- m_mode = 0;
+ m_cpl = 0;
+ m_cols = 0xff;
m_cassette_data = false;
const u16 s_bauds[8]={ 110, 300, 600, 1200, 2400, 4800, 9600, 19200 };
u16 s_clock = s_bauds[m_io_baud->read()] << 4;
@@ -353,14 +353,14 @@ u32 lnw80_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, cons
u8 skip = 1;
if (mode == 0)
{
- skip = BIT(m_mode, 0) ? 2 : 1;
+ skip = m_cpl ? 2 : 1;
if (skip == 2)
cols >>= 1;
}
- if (cols != m_size_store)
+ if (cols != m_cols)
{
- m_size_store = cols;
+ m_cols = cols;
screen.set_visible_area(0, cols*6-1, 0, 16*12-1);
}
diff --git a/src/mame/drivers/meritum.cpp b/src/mame/drivers/meritum.cpp
index aa38d7e47ec..259b3415a93 100644
--- a/src/mame/drivers/meritum.cpp
+++ b/src/mame/drivers/meritum.cpp
@@ -55,43 +55,27 @@ For Model III:
****************************************************************************/
#include "emu.h"
-#include "cpu/z80/z80.h"
-#include "imagedev/cassette.h"
-#include "imagedev/snapquik.h"
-#include "bus/rs232/rs232.h"
+#include "includes/trs80.h"
#include "machine/input_merger.h"
#include "machine/i8251.h"
#include "machine/i8255.h"
#include "machine/pit8253.h"
-#include "sound/spkrdev.h"
-#include "screen.h"
-#include "speaker.h"
#include "emupal.h"
-class meritum_state : public driver_device
+class meritum_state : public trs80_state
{
public:
meritum_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag)
- , m_maincpu(*this, "maincpu")
+ : trs80_state(mconfig, type, tag)
, m_screen(*this, "screen")
- , m_p_chargen(*this, "chargen")
- , m_p_videoram(*this, "videoram")
- , m_speaker(*this, "speaker")
- , m_cassette(*this, "cassette")
- , m_io_keyboard(*this, "LINE%u", 0)
{ }
void meritum1(machine_config &config);
void meritum2(machine_config &config);
+ void meritumn(machine_config &config);
private:
- void port_ff_w(u8 data);
- u8 port_ff_r();
- u8 keyboard_r(offs_t offset);
- TIMER_CALLBACK_MEMBER(cassette_data_callback);
- DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb);
u32 screen_update_meritum1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
u32 screen_update_meritum2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@@ -100,26 +84,13 @@ private:
void mem_map2(address_map &map);
void io_map2(address_map &map);
- bool m_mode;
- bool m_size_store;
- bool m_cassette_data;
- emu_timer *m_cassette_data_timer;
- double m_old_cassette_val;
- void machine_start() override;
- void machine_reset() override;
- required_device<cpu_device> m_maincpu;
required_device<screen_device> m_screen;
- required_region_ptr<u8> m_p_chargen;
- required_shared_ptr<u8> m_p_videoram;
- required_device<speaker_sound_device> m_speaker;
- required_device<cassette_image_device> m_cassette;
- required_ioport_array<8> m_io_keyboard;
};
void meritum_state::mem_map(address_map &map)
{
map(0x0000, 0x37ff).rom();
- map(0x3800, 0x38ff).mirror(0x300).r(FUNC(meritum_state::keyboard_r));
+ map(0x3800, 0x38ff).r(FUNC(meritum_state::keyboard_r));
map(0x3c00, 0x3fff).ram().share(m_p_videoram);
map(0x4000, 0x7fff).ram();
}
@@ -212,10 +183,10 @@ static INPUT_PORTS_START( meritum )
PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
PORT_BIT(0x02, 0x00, IPT_KEYBOARD) PORT_NAME("Clear") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(F8))
PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_NAME("Break") PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(F9))
- PORT_BIT(0x08, 0x00, IPT_KEYBOARD) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_TAB) PORT_CHAR(UCHAR_MAMEKEY(UP), '[')
- PORT_BIT(0x10, 0x00, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
- PORT_BIT(0x20, 0x00, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR(UCHAR_MAMEKEY(LEFT), 8)
- PORT_BIT(0x40, 0x00, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(UCHAR_MAMEKEY(RIGHT), 9)
+ PORT_BIT(0x08, 0x00, IPT_KEYBOARD) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_TAB) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP), '[')
+ PORT_BIT(0x10, 0x00, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
+ PORT_BIT(0x20, 0x00, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_OPENBRACE) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT), 8)
+ PORT_BIT(0x40, 0x00, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_QUOTE) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT), 9)
PORT_BIT(0x80, 0x00, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
PORT_START("LINE7")
@@ -224,19 +195,19 @@ static INPUT_PORTS_START( meritum )
PORT_BIT(0xFC, 0x00, IPT_UNUSED)
PORT_START("NMI")
- PORT_BIT(0x01, 0x01, IPT_KEYBOARD) PORT_NAME("NMI") PORT_CODE(KEYCODE_BACKSPACE) PORT_WRITE_LINE_DEVICE_MEMBER("nmigate", input_merger_device, in_w<1>)
+ PORT_BIT(0x01, 0x01, IPT_KEYBOARD) PORT_NAME("NMI") PORT_CODE(KEYCODE_F1) PORT_WRITE_LINE_DEVICE_MEMBER("nmigate", input_merger_device, in_w<1>)
INPUT_PORTS_END
u32 meritum_state::screen_update_meritum1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
// lores characters are in the character generator. Each character is 6x12 (basic characters are 6x7 excluding descenders/ascenders).
u16 sy=0,ma=0;
- const u8 cols = m_mode ? 32 : 64;
- const u8 skip = m_mode ? 2 : 1;
+ const u8 cols = m_cpl ? 32 : 64;
+ const u8 skip = m_cpl ? 2 : 1;
- if (m_mode != m_size_store)
+ if (cols != m_cols)
{
- m_size_store = m_mode;
+ m_cols = cols;
screen.set_visible_area(0, cols*6-1, 0, 16*12-1);
}
@@ -278,12 +249,12 @@ u32 meritum_state::screen_update_meritum1(screen_device &screen, bitmap_ind16 &b
u32 meritum_state::screen_update_meritum2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
u16 sy=0,ma=0;
- const u8 cols = m_mode ? 32 : 64;
- const u8 skip = m_mode ? 2 : 1;
+ const u8 cols = m_cpl ? 32 : 64;
+ const u8 skip = m_cpl ? 2 : 1;
- if (m_mode != m_size_store)
+ if (cols != m_cols)
{
- m_size_store = m_mode;
+ m_cols = cols;
screen.set_visible_area(0, cols*6-1, 0, 16*12-1);
}
@@ -314,153 +285,6 @@ u32 meritum_state::screen_update_meritum2(screen_device &screen, bitmap_ind16 &b
return 0;
}
-TIMER_CALLBACK_MEMBER(meritum_state::cassette_data_callback)
-{
- double new_val = (m_cassette->input());
-
- /* Check for HI-LO transition */
- if ( m_old_cassette_val > -0.2 && new_val < -0.2 )
- m_cassette_data = true; /* 500 baud */
-
- m_old_cassette_val = new_val;
-}
-
-u8 meritum_state::port_ff_r()
-{
-/* ModeSel and cassette data
- d7 cassette data from tape
- d6 modesel setting */
-
- return (m_mode ? 0 : 0x40) | (m_cassette_data ? 0x80 : 0) | 0x3f;
-}
-
-void meritum_state::port_ff_w(u8 data)
-{
-/* Standard output port of Model I
- d3 ModeSel bit
- d2 Relay
- d1, d0 Cassette output */
-
- static const double levels[4] = { 0.0, 1.0, -1.0, 0.0 };
- m_cassette->change_state(BIT(data, 2) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR );
- m_cassette->output(levels[data & 3]);
- m_cassette_data = false;
-
- m_mode = BIT(data, 3);
-
- static double const speaker_levels[4] = { 0.0, -1.0, 0.0, 1.0 };
- m_speaker->set_levels(4, speaker_levels);
- m_speaker->level_w(data & 3); // see note about the speaker
-}
-
-u8 meritum_state::keyboard_r(offs_t offset)
-{
- u8 i, result = 0;
-
- for (i = 0; i < 8; i++)
- if (BIT(offset, i))
- result |= m_io_keyboard[i]->read();
-
- return result;
-}
-
-void meritum_state::machine_start()
-{
- m_cassette_data_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(meritum_state::cassette_data_callback),this));
- m_cassette_data_timer->adjust( attotime::zero, 0, attotime::from_hz(11025) );
- save_item(NAME(m_mode));
- save_item(NAME(m_size_store));
- save_item(NAME(m_cassette_data));
- save_item(NAME(m_old_cassette_val));
-}
-
-void meritum_state::machine_reset()
-{
- m_cassette_data = false;
- m_size_store = true;
- m_mode = false;
-}
-
-#define CMD_TYPE_OBJECT_CODE 0x01
-#define CMD_TYPE_TRANSFER_ADDRESS 0x02
-#define CMD_TYPE_END_OF_PARTITIONED_DATA_SET_MEMBER 0x04
-#define CMD_TYPE_LOAD_MODULE_HEADER 0x05
-#define CMD_TYPE_PARTITIONED_DATA_SET_HEADER 0x06
-#define CMD_TYPE_PATCH_NAME_HEADER 0x07
-#define CMD_TYPE_ISAM_DIRECTORY_ENTRY 0x08
-#define CMD_TYPE_END_OF_ISAM_DIRECTORY_ENTRY 0x0a
-#define CMD_TYPE_PDS_DIRECTORY_ENTRY 0x0c
-#define CMD_TYPE_END_OF_PDS_DIRECTORY_ENTRY 0x0e
-#define CMD_TYPE_YANKED_LOAD_BLOCK 0x10
-#define CMD_TYPE_COPYRIGHT_BLOCK 0x1f
-
-/***************************************************************************
- IMPLEMENTATION
-***************************************************************************/
-
-QUICKLOAD_LOAD_MEMBER(meritum_state::quickload_cb)
-{
- address_space &program = m_maincpu->space(AS_PROGRAM);
-
- uint8_t type, length;
- uint8_t data[0x100];
- uint8_t addr[2];
- void *ptr;
-
- while (!image.image_feof())
- {
- image.fread( &type, 1);
- image.fread( &length, 1);
-
- switch (type)
- {
- case CMD_TYPE_OBJECT_CODE: // 01 - block of data
- {
- length -= 2;
- u16 block_length = length ? length : 256;
- image.fread( &addr, 2);
- u16 address = (addr[1] << 8) | addr[0];
- logerror("/CMD object code block: address %04x length %u\n", address, block_length);
- ptr = program.get_write_ptr(address);
- if (!ptr)
- {
- image.message("Attempting to write outside of RAM");
- return image_init_result::FAIL;
- }
- image.fread( ptr, block_length);
- }
- break;
-
- case CMD_TYPE_TRANSFER_ADDRESS: // 02 - go address
- {
- image.fread( &addr, 2);
- u16 address = (addr[1] << 8) | addr[0];
- logerror("/CMD transfer address %04x\n", address);
- m_maincpu->set_state_int(Z80_PC, address);
- }
- return image_init_result::PASS;
-
- case CMD_TYPE_LOAD_MODULE_HEADER: // 05 - name
- image.fread( &data, length);
- logerror("/CMD load module header '%s'\n", data);
- break;
-
- case CMD_TYPE_COPYRIGHT_BLOCK: // 1F - copyright info
- image.fread( &data, length);
- logerror("/CMD copyright block '%s'\n", data);
- break;
-
- default:
- image.fread( &data, length);
- logerror("/CMD unsupported block type %u!\n", type);
- image.message("Unsupported or invalid block type");
- return image_init_result::FAIL;
- }
- }
-
- return image_init_result::PASS;
-}
-
/**************************** F4 CHARACTER DISPLAYER ***********************************************************/
static const gfx_layout charlayout =
@@ -533,7 +357,7 @@ void meritum_state::meritum1(machine_config &config)
quickload_image_device &quickload(QUICKLOAD(config, "quickload", "cmd", attotime::from_seconds(1)));
quickload.set_load_callback(FUNC(meritum_state::quickload_cb));
quickload.set_interface("trs80_quik");
- SOFTWARE_LIST(config, "quik_list").set_original("trs80_quik").set_filter("M");
+ SOFTWARE_LIST(config, "quik_list").set_original("trs80_quik").set_filter("M1");
}
void meritum_state::meritum2(machine_config &config)
@@ -543,7 +367,13 @@ void meritum_state::meritum2(machine_config &config)
m_maincpu->set_addrmap(AS_IO, &meritum_state::io_map2);
I8255(config, "flopppi", 0); // floppy disk interface
m_screen->set_screen_update(FUNC(meritum_state::screen_update_meritum2));
+ SOFTWARE_LIST(config.replace(), "quik_list").set_original("trs80_quik").set_filter("M2");
+}
+void meritum_state::meritumn(machine_config &config)
+{
+ meritum2(config);
+ SOFTWARE_LIST(config.replace(), "quik_list").set_original("trs80_quik").set_filter("MN");
}
@@ -567,6 +397,8 @@ ROM_START( meritum1 )
ROM_REGION(0x1000, "chargen", ROMREGION_INVERT)
ROM_LOAD( "char_gen.ic72", 0x0000, 0x0400, CRC(626fb8b1) SHA1(1274d14efad46e5397bd9952e1277ebee44e0491))
ROM_CONTINUE( 0x0800, 0x0400)
+ ROM_RELOAD( 0x0400, 0x0400)
+ ROM_CONTINUE( 0x0c00, 0x0400)
ROM_END
ROM_START( meritum2)
@@ -601,4 +433,4 @@ ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1983, meritum1, 0, trs80l2, meritum1, meritum, meritum_state, empty_init, "Mera-Elzab", "Meritum I (Model 1)", MACHINE_SUPPORTS_SAVE )
COMP( 1985, meritum2, meritum1, 0, meritum2, meritum, meritum_state, empty_init, "Mera-Elzab", "Meritum I (Model 2)", MACHINE_SUPPORTS_SAVE )
-COMP( 1985, meritum_net, meritum1, 0, meritum2, meritum, meritum_state, empty_init, "Mera-Elzab", "Meritum I (Model 2) (network)", MACHINE_SUPPORTS_SAVE )
+COMP( 1985, meritum_net, meritum1, 0, meritumn, meritum, meritum_state, empty_init, "Mera-Elzab", "Meritum I (Model 2) (network)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/radionic.cpp b/src/mame/drivers/radionic.cpp
index 24c23edb062..c8aed988109 100644
--- a/src/mame/drivers/radionic.cpp
+++ b/src/mame/drivers/radionic.cpp
@@ -131,7 +131,7 @@ public:
private:
INTERRUPT_GEN_MEMBER(rtc_via_nmi);
void radionic_palette(palette_device &palette) const;
- uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
std::unique_ptr<u8[]> m_vram; // video ram
std::unique_ptr<u8[]> m_cram; // colour ram
void machine_start() override;
@@ -332,11 +332,11 @@ static GFXDECODE_START(gfx_radionic)
GFXDECODE_END
/* lores characters are in the character generator. Each character is 8x16. */
-uint32_t radionic_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 radionic_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- uint16_t sy=0,ma=0;
- uint8_t cols = BIT(m_mode, 0) ? 32 : 64;
- uint8_t skip = BIT(m_mode, 0) ? 2 : 1;
+ u16 sy=0,ma=0;
+ u8 cols = m_cpl ? 32 : 64;
+ u8 skip = m_cpl ? 2 : 1;
// colours have to be enabled both by a poke and by switches on the side of the unit
bool col_en = BIT(m_cctrl, 2) && BIT(m_io_config->read(), 4);
bool auto_en = BIT(m_cctrl, 3) || !BIT(m_io_config->read(), 5);
@@ -344,26 +344,26 @@ uint32_t radionic_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
if (col_en && auto_en)
bg = 4; // automatic colour
- if (m_mode != m_size_store)
+ if (cols != m_cols)
{
- m_size_store = m_mode;
+ m_cols = cols;
screen.set_visible_area(0, cols*8-1, 0, 16*16-1);
}
- for (uint8_t y = 0; y < 16; y++)
+ for (u8 y = 0; y < 16; y++)
{
- for (uint8_t ra = 0; ra < 16; ra++)
+ for (u8 ra = 0; ra < 16; ra++)
{
- uint16_t *p = &bitmap.pix(sy++);
+ u16 *p = &bitmap.pix(sy++);
- for (uint16_t x = ma; x < ma + 64; x+=skip)
+ for (u16 x = ma; x < ma + 64; x+=skip)
{
- uint8_t chr = m_vram[x];
+ u8 chr = m_vram[x];
if (col_en && !auto_en)
bg = m_cram[x] & 15;
/* get pattern of pixels for that character scanline */
- uint8_t gfx = m_p_chargen[(chr<<3) | (ra & 7) | (ra & 8) << 8];
+ u8 gfx = m_p_chargen[(chr<<3) | (ra & 7) | (ra & 8) << 8];
/* Display a scanline of a character (8 pixels) */
*p++ = BIT(gfx, 0) ? fg : bg;
diff --git a/src/mame/drivers/trs80.cpp b/src/mame/drivers/trs80.cpp
index fa281f9b8a9..f2fbde72593 100644
--- a/src/mame/drivers/trs80.cpp
+++ b/src/mame/drivers/trs80.cpp
@@ -646,7 +646,7 @@ ROM_END
void trs80_state::init_trs80l2()
{
- m_mode = 2;
+ m_7bit = true;
}
diff --git a/src/mame/includes/trs80.h b/src/mame/includes/trs80.h
index ba30c57bfa6..6e24cc14778 100644
--- a/src/mame/includes/trs80.h
+++ b/src/mame/includes/trs80.h
@@ -61,21 +61,21 @@ protected:
void machine_start() override;
void machine_reset() override;
- void port_ff_w(uint8_t data);
- void sys80_fe_w(uint8_t data);
- void sys80_f8_w(uint8_t data);
- void port_ea_w(uint8_t data);
- void port_e8_w(uint8_t data);
- uint8_t port_ff_r();
- uint8_t sys80_f9_r();
- uint8_t port_ea_r();
- uint8_t port_e8_r();
- uint8_t irq_status_r();
- uint8_t printer_r();
- void printer_w(uint8_t data);
- void cassunit_w(uint8_t data);
- void motor_w(uint8_t data);
- uint8_t keyboard_r(offs_t offset);
+ void port_ff_w(u8 data);
+ void sys80_fe_w(u8 data);
+ void sys80_f8_w(u8 data);
+ void port_ea_w(u8 data);
+ void port_e8_w(u8 data);
+ u8 port_ff_r();
+ u8 sys80_f9_r();
+ u8 port_ea_r();
+ u8 port_e8_r();
+ u8 irq_status_r();
+ u8 printer_r();
+ void printer_w(u8 data);
+ void cassunit_w(u8 data);
+ void motor_w(u8 data);
+ u8 keyboard_r(offs_t offset);
u8 fdc_r(offs_t offset);
void fdc_w(offs_t offset, u8 data);
@@ -85,16 +85,17 @@ protected:
DECLARE_WRITE_LINE_MEMBER(intrq_w);
DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb);
- uint8_t m_mode = 0;
- uint8_t m_irq = 0;
- uint8_t m_mask = 0;
- uint8_t m_tape_unit = 1;
+ u8 m_irq = 0;
+ u8 m_mask = 0;
+ u8 m_tape_unit = 1;
bool m_reg_load = true;
bool m_cassette_data = false;
emu_timer *m_cassette_data_timer;
double m_old_cassette_val = 0;
- uint8_t m_size_store = 0xFF;
- uint16_t m_timeout = 600;
+ bool m_cpl = 0;
+ u8 m_cols = 0xff;
+ bool m_7bit = false;
+ u16 m_timeout = 600;
void trs80_io(address_map &map);
floppy_image_device *m_fdd;
required_device<cpu_device> m_maincpu;
diff --git a/src/mame/machine/trs80.cpp b/src/mame/machine/trs80.cpp
index 806efd20b99..912153720c7 100644
--- a/src/mame/machine/trs80.cpp
+++ b/src/mame/machine/trs80.cpp
@@ -31,7 +31,7 @@ TIMER_CALLBACK_MEMBER(trs80_state::cassette_data_callback)
*************************************/
-uint8_t trs80_state::port_e8_r()
+u8 trs80_state::port_e8_r()
{
/* not emulated
d7 Clear-to-Send (CTS), Pin 5
@@ -44,7 +44,7 @@ uint8_t trs80_state::port_e8_r()
return 0;
}
-uint8_t trs80_state::port_ea_r()
+u8 trs80_state::port_ea_r()
{
/* UART Status Register
d7 Data Received ('1'=condition true)
@@ -54,7 +54,7 @@ uint8_t trs80_state::port_ea_r()
d3 Parity Error ('1'=condition true)
d2..d0 Not used */
- uint8_t data=7;
+ u8 data=7;
m_uart->write_swe(0);
data |= m_uart->tbmt_r() ? 0x40 : 0;
data |= m_uart->dav_r( ) ? 0x80 : 0;
@@ -66,12 +66,12 @@ uint8_t trs80_state::port_ea_r()
return data;
}
-void trs80_state::port_e8_w(uint8_t data)
+void trs80_state::port_e8_w(u8 data)
{
m_reg_load = BIT(data, 1);
}
-void trs80_state::port_ea_w(uint8_t data)
+void trs80_state::port_ea_w(u8 data)
{
if (m_reg_load)
@@ -111,7 +111,7 @@ void trs80_state::port_ea_w(uint8_t data)
}
-uint8_t trs80_state::sys80_f9_r()
+u8 trs80_state::sys80_f9_r()
{
/* UART Status Register - d6..d4 not emulated
d7 Transmit buffer empty (inverted)
@@ -123,7 +123,7 @@ uint8_t trs80_state::sys80_f9_r()
d1 Overrun
d0 Data Available */
- uint8_t data = 0x70;
+ u8 data = 0x70;
m_uart->write_swe(0);
data |= m_uart->tbmt_r() ? 0 : 0x80;
data |= m_uart->dav_r( ) ? 0x01 : 0;
@@ -135,16 +135,16 @@ uint8_t trs80_state::sys80_f9_r()
return data;
}
-uint8_t trs80_state::port_ff_r()
+u8 trs80_state::port_ff_r()
{
/* ModeSel and cassette data
d7 cassette data from tape
d6 modesel setting */
- return (BIT(m_mode, 0) ? 0 : 0x40) | (m_cassette_data ? 0x80 : 0) | 0x3f;
+ return (m_cpl ? 0 : 0x40) | (m_cassette_data ? 0x80 : 0) | 0x3f;
}
-void trs80_state::sys80_f8_w(uint8_t data)
+void trs80_state::sys80_f8_w(u8 data)
{
/* not emulated
d2 reset UART (XR pin)
@@ -152,7 +152,7 @@ void trs80_state::sys80_f8_w(uint8_t data)
d0 RTS */
}
-void trs80_state::sys80_fe_w(uint8_t data)
+void trs80_state::sys80_fe_w(u8 data)
{
/* not emulated
d4 select internal or external cassette player */
@@ -160,7 +160,7 @@ void trs80_state::sys80_fe_w(uint8_t data)
m_tape_unit = BIT(data, 4) ? 2 : 1;
}
-void trs80_state::port_ff_w(uint8_t data)
+void trs80_state::port_ff_w(u8 data)
{
/* Standard output port of Model I
d3 ModeSel bit
@@ -173,7 +173,7 @@ void trs80_state::port_ff_w(uint8_t data)
m_cassette->output(levels[data & 3]);
m_cassette_data = false;
- m_mode = (m_mode & 0xfe) | BIT(data, 3);
+ m_cpl = BIT(data, 3);
static const double speaker_levels[4] = { 0.0, -1.0, 0.0, 1.0 };
m_speaker->set_levels(4, speaker_levels);
@@ -240,19 +240,19 @@ void trs80_state::fdc_w(offs_t offset, u8 data)
m_fdc->write(offset, data ^ 0xff);
}
-uint8_t trs80_state::printer_r()
+u8 trs80_state::printer_r()
{
return m_cent_status_in->read();
}
-void trs80_state::printer_w(uint8_t data)
+void trs80_state::printer_w(u8 data)
{
m_cent_data_out->write(data);
m_centronics->write_strobe(0);
m_centronics->write_strobe(1);
}
-void trs80_state::cassunit_w(uint8_t data)
+void trs80_state::cassunit_w(u8 data)
{
/* not emulated
01 for unit 1 (default)
@@ -261,7 +261,7 @@ void trs80_state::cassunit_w(uint8_t data)
m_tape_unit = data;
}
-uint8_t trs80_state::irq_status_r()
+u8 trs80_state::irq_status_r()
{
/* (trs80l2) Whenever an interrupt occurs, 37E0 is read to see what devices require service.
d7 = RTC
@@ -277,7 +277,7 @@ uint8_t trs80_state::irq_status_r()
}
-void trs80_state::motor_w(uint8_t data)
+void trs80_state::motor_w(u8 data)
{
m_fdd = nullptr;
@@ -301,7 +301,7 @@ void trs80_state::motor_w(uint8_t data)
/*************************************
* Keyboard *
*************************************/
-uint8_t trs80_state::keyboard_r(offs_t offset)
+u8 trs80_state::keyboard_r(offs_t offset)
{
u8 i, result = 0;
@@ -319,19 +319,18 @@ uint8_t trs80_state::keyboard_r(offs_t offset)
void trs80_state::machine_start()
{
- save_item(NAME(m_mode));
+ save_item(NAME(m_cpl));
save_item(NAME(m_irq));
save_item(NAME(m_mask));
save_item(NAME(m_tape_unit));
save_item(NAME(m_reg_load));
save_item(NAME(m_cassette_data));
save_item(NAME(m_old_cassette_val));
- save_item(NAME(m_size_store));
+ save_item(NAME(m_cols));
save_item(NAME(m_timeout));
- m_size_store = 0xff;
- m_tape_unit=1;
- m_reg_load=1;
+ m_tape_unit = 1;
+ m_reg_load = 1;
m_cassette_data_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(trs80_state::cassette_data_callback),this));
m_cassette_data_timer->adjust( attotime::zero, 0, attotime::from_hz(11025) );
@@ -340,6 +339,8 @@ void trs80_state::machine_start()
void trs80_state::machine_reset()
{
m_cassette_data = false;
+ m_cols = 0xff;
+ m_cpl = 0;
// if machine has a uart but no brg, the baud is determined by dipswitch
if (m_io_baud)
{
@@ -377,9 +378,9 @@ QUICKLOAD_LOAD_MEMBER(trs80_state::quickload_cb)
{
address_space &program = m_maincpu->space(AS_PROGRAM);
- uint8_t type, length;
- uint8_t data[0x100];
- uint8_t addr[2];
+ u8 type, length;
+ u8 data[0x100];
+ u8 addr[2];
void *ptr;
while (!image.image_feof())
diff --git a/src/mame/video/trs80.cpp b/src/mame/video/trs80.cpp
index b0aad165ee7..420d5d81f1e 100644
--- a/src/mame/video/trs80.cpp
+++ b/src/mame/video/trs80.cpp
@@ -6,37 +6,32 @@
#include "includes/trs80.h"
#include "screen.h"
-/* Bit assignment for "m_mode"
- d1 7 or 8 bit video (1=requires 7-bit, 0=don't care)
- d0 80/64 or 40/32 characters per line (1=32) */
-
-
/* 7 or 8-bit video, 32/64 characters per line = trs80, trs80l2, sys80 */
-uint32_t trs80_state::screen_update_trs80(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 trs80_state::screen_update_trs80(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- uint16_t sy=0,ma=0;
- uint8_t const cols = BIT(m_mode, 0) ? 32 : 64;
- uint8_t const skip = BIT(m_mode, 0) ? 2 : 1;
+ u16 sy=0,ma=0;
+ u8 const cols = m_cpl ? 32 : 64;
+ u8 const skip = m_cpl ? 2 : 1;
- if (m_mode != m_size_store)
+ if (cols != m_cols)
{
- m_size_store = m_mode;
+ m_cols = cols;
screen.set_visible_area(0, cols*6-1, 0, 16*12-1);
}
- for (uint8_t y = 0; y < 16; y++)
+ for (u8 y = 0; y < 16; y++)
{
- for (uint8_t ra = 0; ra < 12; ra++)
+ for (u8 ra = 0; ra < 12; ra++)
{
- uint16_t *p = &bitmap.pix(sy++);
+ u16 *p = &bitmap.pix(sy++);
- for (uint16_t x = ma; x < ma + 64; x+=skip)
+ for (u16 x = ma; x < ma + 64; x+=skip)
{
- uint8_t chr = m_p_videoram[x];
+ u8 chr = m_p_videoram[x];
if (chr & 0x80)
{
- uint8_t gfxbit = (ra & 0x0c)>>1;
+ u8 gfxbit = (ra & 0x0c)>>1;
/* Display one line of a lores character (6 pixels) */
*p++ = BIT(chr, gfxbit);
*p++ = BIT(chr, gfxbit);
@@ -48,10 +43,10 @@ uint32_t trs80_state::screen_update_trs80(screen_device &screen, bitmap_ind16 &b
}
else
{
- if (BIT(m_mode, 1) & (chr < 32)) chr+=64;
+ if (m_7bit && (chr < 32)) chr+=64;
// if g,j,p,q,y; lower the descender
- uint8_t gfx;
+ u8 gfx;
if ((chr==0x2c)||(chr==0x3b)||(chr==0x67)||(chr==0x6a)||(chr==0x70)||(chr==0x71)||(chr==0x79))
{
if ((ra < 10) && (ra > 1))
@@ -84,31 +79,31 @@ uint32_t trs80_state::screen_update_trs80(screen_device &screen, bitmap_ind16 &b
/* 7 or 8-bit video, 64/32 characters per line = ht1080z, ht1080z2, ht108064 */
-uint32_t trs80_state::screen_update_ht1080z(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 trs80_state::screen_update_ht1080z(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- uint16_t sy=0,ma=0;
- uint8_t const cols = BIT(m_mode, 0) ? 32 : 64;
- uint8_t const skip = BIT(m_mode, 0) ? 2 : 1;
+ u16 sy=0,ma=0;
+ u8 const cols = m_cpl ? 32 : 64;
+ u8 const skip = m_cpl ? 2 : 1;
- if (m_mode != m_size_store)
+ if (cols != m_cols)
{
- m_size_store = m_mode;
+ m_cols = cols;
screen.set_visible_area(0, cols*6-1, 0, 16*12-1);
}
- for (uint8_t y = 0; y < 16; y++)
+ for (u8 y = 0; y < 16; y++)
{
- for (uint8_t ra = 0; ra < 12; ra++)
+ for (u8 ra = 0; ra < 12; ra++)
{
- uint16_t *p = &bitmap.pix(sy++);
+ u16 *p = &bitmap.pix(sy++);
- for (uint16_t x = ma; x < ma + 64; x+=skip)
+ for (u16 x = ma; x < ma + 64; x+=skip)
{
- uint8_t chr = m_p_videoram[x];
+ u8 chr = m_p_videoram[x];
if (chr & 0x80)
{
- uint8_t gfxbit = (ra & 0x0c)>>1;
+ u8 gfxbit = (ra & 0x0c)>>1;
/* Display one line of a lores character (6 pixels) */
*p++ = BIT(chr, gfxbit);
*p++ = BIT(chr, gfxbit);
@@ -120,10 +115,10 @@ uint32_t trs80_state::screen_update_ht1080z(screen_device &screen, bitmap_ind16
}
else
{
- if (BIT(m_mode, 1) && (chr < 32)) chr+=64;
+ if (m_7bit && (chr < 32)) chr+=64;
/* get pattern of pixels for that character scanline */
- uint8_t gfx = m_p_chargen[(chr<<4) | ra ];
+ u8 gfx = m_p_chargen[(chr<<4) | ra ];
/* Display a scanline of a character (6 pixels) */
*p++ = BIT(gfx, 7);