diff options
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 |
commit | be35212b589dbc26f383352d7a3c089440b13fc5 (patch) | |
tree | 77e3d86b2c2116b6566bb86aec37a5d54cd93034 | |
parent | 63163277ca5731a19ec8313e5db0c3723ad8c05f (diff) |
meritum: make it a derived class of trs80
-rw-r--r-- | src/mame/drivers/lnw80.cpp | 14 | ||||
-rw-r--r-- | src/mame/drivers/meritum.cpp | 224 | ||||
-rw-r--r-- | src/mame/drivers/radionic.cpp | 26 | ||||
-rw-r--r-- | src/mame/drivers/trs80.cpp | 2 | ||||
-rw-r--r-- | src/mame/includes/trs80.h | 43 | ||||
-rw-r--r-- | src/mame/machine/trs80.cpp | 55 | ||||
-rw-r--r-- | src/mame/video/trs80.cpp | 61 |
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); |