summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/trs80.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/trs80.cpp')
-rw-r--r--src/mame/drivers/trs80.cpp650
1 files changed, 182 insertions, 468 deletions
diff --git a/src/mame/drivers/trs80.cpp b/src/mame/drivers/trs80.cpp
index 546e7aeb630..d51ed215686 100644
--- a/src/mame/drivers/trs80.cpp
+++ b/src/mame/drivers/trs80.cpp
@@ -36,17 +36,13 @@ Interrupts:
IRQ mode 1
NMI
-Printer: Level II usually 37e8; System80 uses port FD; Model 4 uses port F8.
-Uart: TR1602, equivalent to the uart used in the Exidy Sorcerer.
+Printer: Level II usually 37e8; System80 uses port FD.
+
System80 has non-addressable dip switches to set the UART control register.
System80 and LNW80 have non-addressable links to set the baud rate. Receive and Transmit clocks are tied together.
-It is assumed that the TRS80L2 UART setup is identical to the System80, apart from the address ports used.
-Due to the above, the only working emulated UART is for the Model 3.
Cassette baud rates: Model I level I - 250 baud
Model I level II and all clones - 500 baud
- Model III/4 - 500 and 1500 baud selectable at boot time
- - When it says "Cass?" press L for 500 baud, or Enter otherwise.
LNW-80 - 500 baud @1.77MHz and 1000 baud @4MHz.
I/O ports
@@ -72,26 +68,12 @@ F9:
F8:
- UART data (read) status (write) on a system-80
-- Write to printer (Model III/4)
-- Read printer status (Model III/4)
-
-EB:
-- UART data (read and write) on a Model III/4
-
-EA:
-- UART status (read and write) on a Model III/4
-E9:
-- UART Configuration jumpers (read) on a Model III/4
-- Set baud rate (Model III/4)
+Shift and Right-arrow will enable 32 cpl, if the hardware allows it.
-E8:
-- UART Modem Status register (read) on a Model III/4
-- UART Master Reset (write) on a Model III/4
-
-Model 4 - C0-CF = hard drive (optional)
- - 90-93 write sound (optional)
- - 80-8F hires graphics (optional)
+About the system80 - Asian version of trs80l2, known as EACA Video Genie. In USA called
+ PMC-80, in South Africa called TRZ-80, and Dick Smith imported them to Australia and
+ New Zealand as the System 80. The Hungarian version is the ht1080z.
About the ht1080z - This was made for schools in Hungary. Each comes with a BASIC extension roms
which activated Hungarian features. To activate - start emulation - enter SYSTEM
@@ -101,24 +83,8 @@ About the ht1080z - This was made for schools in Hungary. Each comes with a BASI
About the RTC - The time is incremented while ever the cursor is flashing. It is stored in a series
of bytes in the computer's work area. The bytes are in a certain order, this is:
- seconds, minutes, hours, year, day, month. On a model 1, the seconds are stored at
- 0x4041, while on the model 4 it is 0x4217. A reboot always sets the time to zero.
-
-Model 4 memory organisation -
- Mode 0: ROM=0-37E7 and 37EA-3FFF; Printer=37E8-37E9; Keyboard=3800-3BFF; Video=3C00-3FFF
- Mode 1: Keyboard and Video as above; 0-3FFF read=ROM and write=RAM
- Mode 2: Keyboard=F400-F7FF; Video=F800-FFFF; the rest is RAM
- Mode 3: All RAM
- In the "maincpu" memory map, the first 64k is given to the ROM, keyboard, printer and video,
- while the second 64k is RAM that is switched in as needed. The area from 4800-FFFF
- is considered a "black hole", any writes to there will disappear.
- The video is organised as 2 banks of 0x400 bytes, except in Mode 2 where it becomes contiguous.
-
-Model 4P - is the same as Model 4 except:
- - ROM is only 0000-0FFF, while 1000-37FF is given over to RAM
- - There is no cassette support in hardware.
-
-***************************************************************************
+ seconds, minutes, hours, year, day, month. The seconds are stored at 0x4041.
+ A reboot always sets the time to zero.
Not dumped (to our knowledge):
TRS80 Japanese bios
@@ -131,11 +97,45 @@ Not emulated:
TRS80 Japanese kana/ascii switch and alternate keyboard
TRS80 Model III/4 Hard drive, Graphics board, Alternate Character set
LNW80 1.77 / 4.0 MHz switch (this is a physical switch)
+ Radionic has 16 colours with a byte at 350B controlling the operation. See manual.
Virtual floppy disk formats are JV1, JV3, and DMK. Only the JV1 is emulated.
-There don't seem to be any JV1 boot disks for Model III/4.
-***************************************************************************/
+********************************************************************************************************
+
+To Do / Status:
+--------------
+
+For those machines that allow it, add cass2 as an image device and hook it up.
+
+trs80: works
+
+trs80l2: works
+ expansion-box to be slotified
+
+sys80: works
+ investigate expansion-box
+ add 32 / 64 cpl switch
+
+ht1080z works
+ add AY-3-8910
+ investigate expansion-box
+
+radionic: works
+ floppy not working (@6C0, DRQ never gets set)
+ add colour
+ expansion-box?
+ uart?
+ add i8255
+ when pasting, upper and lower case are reversed
+
+lnw80: works
+ add 1.77 / 4 MHz switch
+ find out if it really did support 32-cpl mode or not
+ hi-res and colour are coded but do not work
+ investigate expansion-box
+
+*******************************************************************************************************/
#include "emu.h"
#include "includes/trs80.h"
@@ -147,11 +147,11 @@ There don't seem to be any JV1 boot disks for Model III/4.
#include "formats/dmk_dsk.h"
-void trs80_state::trs80_map(address_map &map)
+void trs80_state::trs80_mem(address_map &map)
{
map(0x0000, 0x0fff).rom();
- map(0x3800, 0x38ff).r(FUNC(trs80_state::trs80_keyboard_r));
- map(0x3c00, 0x3fff).rw(FUNC(trs80_state::trs80_videoram_r), FUNC(trs80_state::trs80_videoram_w)).share("videoram");
+ map(0x3800, 0x3bff).r(FUNC(trs80_state::keyboard_r));
+ map(0x3c00, 0x3fff).ram().share(m_p_videoram);
map(0x4000, 0x7fff).ram();
}
@@ -159,185 +159,79 @@ void trs80_state::trs80_io(address_map &map)
{
map.global_mask(0xff);
map.unmap_value_high();
- map(0xff, 0xff).rw(FUNC(trs80_state::trs80_ff_r), FUNC(trs80_state::trs80_ff_w));
+ map(0xff, 0xff).rw(FUNC(trs80_state::port_ff_r), FUNC(trs80_state::port_ff_w));
}
-void trs80_state::model1_map(address_map &map)
+void trs80_state::m1_mem(address_map &map)
{
map(0x0000, 0x377f).rom(); // sys80,ht1080 needs up to 375F
map(0x37de, 0x37de).rw(FUNC(trs80_state::sys80_f9_r), FUNC(trs80_state::sys80_f8_w));
- map(0x37df, 0x37df).rw("uart", FUNC(ay31015_device::receive), FUNC(ay31015_device::transmit));
- map(0x37e0, 0x37e3).rw(FUNC(trs80_state::trs80_irq_status_r), FUNC(trs80_state::trs80_motor_w));
- map(0x37e4, 0x37e7).w(FUNC(trs80_state::trs80_cassunit_w));
- map(0x37e8, 0x37eb).rw(FUNC(trs80_state::trs80_printer_r), FUNC(trs80_state::trs80_printer_w));
- map(0x37ec, 0x37ec).r(FUNC(trs80_state::trs80_wd179x_r));
+ map(0x37df, 0x37df).rw(m_uart, FUNC(ay31015_device::receive), FUNC(ay31015_device::transmit));
+ map(0x37e0, 0x37e3).rw(FUNC(trs80_state::irq_status_r), FUNC(trs80_state::motor_w));
+ map(0x37e4, 0x37e7).w(FUNC(trs80_state::cassunit_w));
+ map(0x37e8, 0x37eb).rw(FUNC(trs80_state::printer_r), FUNC(trs80_state::printer_w));
+ map(0x37ec, 0x37ec).r(FUNC(trs80_state::wd179x_r));
map(0x37ec, 0x37ec).w(m_fdc, FUNC(fd1793_device::cmd_w));
map(0x37ed, 0x37ed).rw(m_fdc, FUNC(fd1793_device::track_r), FUNC(fd1793_device::track_w));
map(0x37ee, 0x37ee).rw(m_fdc, FUNC(fd1793_device::sector_r), FUNC(fd1793_device::sector_w));
map(0x37ef, 0x37ef).rw(m_fdc, FUNC(fd1793_device::data_r), FUNC(fd1793_device::data_w));
- map(0x3800, 0x38ff).mirror(0x300).r(FUNC(trs80_state::trs80_keyboard_r));
- map(0x3c00, 0x3fff).rw(FUNC(trs80_state::trs80_videoram_r), FUNC(trs80_state::trs80_videoram_w)).share("videoram");
+ map(0x3800, 0x3bff).r(FUNC(trs80_state::keyboard_r));
+ map(0x3c00, 0x3fff).ram().share(m_p_videoram);
map(0x4000, 0xffff).ram();
}
-void trs80_state::model1_io(address_map &map)
+void trs80_state::m1_io(address_map &map)
{
map.global_mask(0xff);
map.unmap_value_high();
- map(0xff, 0xff).rw(FUNC(trs80_state::trs80_ff_r), FUNC(trs80_state::trs80_ff_w));
+ map(0xe8, 0xe8).rw(FUNC(trs80_state::port_e8_r), FUNC(trs80_state::port_e8_w));
+ map(0xe9, 0xe9).portr("E9").w(m_brg, FUNC(com8116_device::stt_str_w));
+ map(0xea, 0xea).rw(FUNC(trs80_state::port_ea_r), FUNC(trs80_state::port_ea_w));
+ map(0xeb, 0xeb).rw(m_uart, FUNC(ay31015_device::receive), FUNC(ay31015_device::transmit));
+ map(0xff, 0xff).rw(FUNC(trs80_state::port_ff_r), FUNC(trs80_state::port_ff_w));
}
void trs80_state::sys80_io(address_map &map)
{
map.global_mask(0xff);
map.unmap_value_high();
- map(0xf8, 0xf8).r("uart", FUNC(ay31015_device::receive)).w(FUNC(trs80_state::sys80_f8_w));
- map(0xf9, 0xf9).r(FUNC(trs80_state::sys80_f9_r)).w("uart", FUNC(ay31015_device::transmit));
- map(0xfd, 0xfd).rw(FUNC(trs80_state::trs80_printer_r), FUNC(trs80_state::trs80_printer_w));
+ map(0xf8, 0xf8).r(m_uart, FUNC(ay31015_device::receive)).w(FUNC(trs80_state::sys80_f8_w));
+ map(0xf9, 0xf9).r(FUNC(trs80_state::sys80_f9_r)).w(m_uart, FUNC(ay31015_device::transmit));
+ map(0xfd, 0xfd).rw(FUNC(trs80_state::printer_r), FUNC(trs80_state::printer_w));
map(0xfe, 0xfe).w(FUNC(trs80_state::sys80_fe_w));
- map(0xff, 0xff).rw(FUNC(trs80_state::trs80_ff_r), FUNC(trs80_state::trs80_ff_w));
+ map(0xff, 0xff).rw(FUNC(trs80_state::port_ff_r), FUNC(trs80_state::port_ff_w));
}
-void trs80_state::lnw80_map(address_map &map)
+void trs80_state::lnw80_mem(address_map &map)
{
+ map(0x0000, 0x3fff).m(m_lnw_bank, FUNC(address_map_bank_device::amap8));
map(0x4000, 0xffff).ram();
}
-void trs80_state::lnw80_io(address_map &map)
-{
- map.global_mask(0xff);
- map.unmap_value_high();
- map(0xe8, 0xe8).rw(FUNC(trs80_state::trs80m4_e8_r), FUNC(trs80_state::trs80m4_e8_w));
- map(0xe9, 0xe9).portr("E9");
- map(0xea, 0xea).rw(FUNC(trs80_state::trs80m4_ea_r), FUNC(trs80_state::trs80m4_ea_w));
- map(0xeb, 0xeb).rw("uart", FUNC(ay31015_device::receive), FUNC(ay31015_device::transmit));
- map(0xfe, 0xfe).rw(FUNC(trs80_state::lnw80_fe_r), FUNC(trs80_state::lnw80_fe_w));
- map(0xff, 0xff).rw(FUNC(trs80_state::trs80_ff_r), FUNC(trs80_state::trs80_ff_w));
-}
-
-void trs80_state::model3_map(address_map &map)
+void trs80_state::lnw_banked_mem(address_map &map)
{
+ map(0x0000, 0x2fff).rom().region("maincpu", 0);
+ map(0x37e0, 0x37e3).rw(FUNC(trs80_state::irq_status_r), FUNC(trs80_state::motor_w));
+ map(0x37e8, 0x37eb).rw(FUNC(trs80_state::printer_r), FUNC(trs80_state::printer_w));
+ map(0x37ec, 0x37ec).r(FUNC(trs80_state::wd179x_r));
+ map(0x37ec, 0x37ec).w(m_fdc, FUNC(fd1793_device::cmd_w));
+ map(0x37ed, 0x37ed).rw(m_fdc, FUNC(fd1793_device::track_r), FUNC(fd1793_device::track_w));
+ map(0x37ee, 0x37ee).rw(m_fdc, FUNC(fd1793_device::sector_r), FUNC(fd1793_device::sector_w));
+ map(0x37ef, 0x37ef).rw(m_fdc, FUNC(fd1793_device::data_r), FUNC(fd1793_device::data_w));
+ map(0x3800, 0x3bff).r(FUNC(trs80_state::keyboard_r));
+ map(0x3c00, 0x3fff).ram().share(m_p_videoram);
+ map(0x4000, 0x7fff).ram().share(m_p_gfxram).region("gfx2", 0);
}
-void trs80_state::model3_io(address_map &map)
-{
- map.global_mask(0xff);
- map.unmap_value_high();
- map(0xe0, 0xe3).rw(FUNC(trs80_state::trs80m4_e0_r), FUNC(trs80_state::trs80m4_e0_w));
- map(0xe4, 0xe4).rw(FUNC(trs80_state::trs80m4_e4_r), FUNC(trs80_state::trs80m4_e4_w));
- map(0xe8, 0xe8).rw(FUNC(trs80_state::trs80m4_e8_r), FUNC(trs80_state::trs80m4_e8_w));
- map(0xe9, 0xe9).portr("E9").w(FUNC(trs80_state::trs80m4_e9_w));
- map(0xea, 0xea).rw(FUNC(trs80_state::trs80m4_ea_r), FUNC(trs80_state::trs80m4_ea_w));
- map(0xeb, 0xeb).rw("uart", FUNC(ay31015_device::receive), FUNC(ay31015_device::transmit));
- map(0xec, 0xef).rw(FUNC(trs80_state::trs80m4_ec_r), FUNC(trs80_state::trs80m4_ec_w));
- map(0xf0, 0xf0).r(FUNC(trs80_state::trs80_wd179x_r));
- map(0xf0, 0xf0).w(m_fdc, FUNC(fd1793_device::cmd_w));
- map(0xf1, 0xf1).rw(m_fdc, FUNC(fd1793_device::track_r), FUNC(fd1793_device::track_w));
- map(0xf2, 0xf2).rw(m_fdc, FUNC(fd1793_device::sector_r), FUNC(fd1793_device::sector_w));
- map(0xf3, 0xf3).rw(m_fdc, FUNC(fd1793_device::data_r), FUNC(fd1793_device::data_w));
- map(0xf4, 0xf4).w(FUNC(trs80_state::trs80m4_f4_w));
- map(0xf8, 0xfb).rw(FUNC(trs80_state::trs80_printer_r), FUNC(trs80_state::trs80_printer_w));
- map(0xfc, 0xff).rw(FUNC(trs80_state::trs80m4_ff_r), FUNC(trs80_state::trs80m4_ff_w));
-}
-
-void trs80_state::model4_io(address_map &map)
-{
- map.global_mask(0xff);
- map.unmap_value_high();
- map(0x84, 0x87).w(FUNC(trs80_state::trs80m4_84_w));
- map(0x88, 0x89).w(FUNC(trs80_state::trs80m4_88_w));
- map(0x90, 0x93).w(FUNC(trs80_state::trs80m4_90_w));
- map(0xe0, 0xe3).rw(FUNC(trs80_state::trs80m4_e0_r), FUNC(trs80_state::trs80m4_e0_w));
- map(0xe4, 0xe4).rw(FUNC(trs80_state::trs80m4_e4_r), FUNC(trs80_state::trs80m4_e4_w));
- map(0xe8, 0xe8).rw(FUNC(trs80_state::trs80m4_e8_r), FUNC(trs80_state::trs80m4_e8_w));
- map(0xe9, 0xe9).portr("E9").w(FUNC(trs80_state::trs80m4_e9_w));
- map(0xea, 0xea).rw(FUNC(trs80_state::trs80m4_ea_r), FUNC(trs80_state::trs80m4_ea_w));
- map(0xeb, 0xeb).rw("uart", FUNC(ay31015_device::receive), FUNC(ay31015_device::transmit));
- map(0xec, 0xef).rw(FUNC(trs80_state::trs80m4_ec_r), FUNC(trs80_state::trs80m4_ec_w));
- map(0xf0, 0xf0).r(FUNC(trs80_state::trs80_wd179x_r));
- map(0xf0, 0xf0).w(m_fdc, FUNC(fd1793_device::cmd_w));
- map(0xf1, 0xf1).rw(m_fdc, FUNC(fd1793_device::track_r), FUNC(fd1793_device::track_w));
- map(0xf2, 0xf2).rw(m_fdc, FUNC(fd1793_device::sector_r), FUNC(fd1793_device::sector_w));
- map(0xf3, 0xf3).rw(m_fdc, FUNC(fd1793_device::data_r), FUNC(fd1793_device::data_w));
- map(0xf4, 0xf4).w(FUNC(trs80_state::trs80m4_f4_w));
- map(0xf8, 0xfb).rw(FUNC(trs80_state::trs80_printer_r), FUNC(trs80_state::trs80_printer_w));
- map(0xfc, 0xff).rw(FUNC(trs80_state::trs80m4_ff_r), FUNC(trs80_state::trs80m4_ff_w));
-}
-
-void trs80_state::model4p_io(address_map &map)
-{
- map.global_mask(0xff);
- map.unmap_value_high();
- map(0x84, 0x87).w(FUNC(trs80_state::trs80m4_84_w));
- map(0x88, 0x89).w(FUNC(trs80_state::trs80m4_88_w));
- map(0x90, 0x93).w(FUNC(trs80_state::trs80m4_90_w));
- map(0x9c, 0x9f).w(FUNC(trs80_state::trs80m4p_9c_w));
- map(0xe0, 0xe3).rw(FUNC(trs80_state::trs80m4_e0_r), FUNC(trs80_state::trs80m4_e0_w));
- map(0xe4, 0xe4).rw(FUNC(trs80_state::trs80m4_e4_r), FUNC(trs80_state::trs80m4_e4_w));
- map(0xe8, 0xe8).rw(FUNC(trs80_state::trs80m4_e8_r), FUNC(trs80_state::trs80m4_e8_w));
- map(0xe9, 0xe9).portr("E9").w(FUNC(trs80_state::trs80m4_e9_w));
- map(0xea, 0xea).rw(FUNC(trs80_state::trs80m4_ea_r), FUNC(trs80_state::trs80m4_ea_w));
- map(0xeb, 0xeb).rw("uart", FUNC(ay31015_device::receive), FUNC(ay31015_device::transmit));
- map(0xec, 0xef).rw(FUNC(trs80_state::trs80m4_ec_r), FUNC(trs80_state::trs80m4_ec_w));
- map(0xf0, 0xf0).r(FUNC(trs80_state::trs80_wd179x_r));
- map(0xf0, 0xf0).w(m_fdc, FUNC(fd1793_device::cmd_w));
- map(0xf1, 0xf1).rw(m_fdc, FUNC(fd1793_device::track_r), FUNC(fd1793_device::track_w));
- map(0xf2, 0xf2).rw(m_fdc, FUNC(fd1793_device::sector_r), FUNC(fd1793_device::sector_w));
- map(0xf3, 0xf3).rw(m_fdc, FUNC(fd1793_device::data_r), FUNC(fd1793_device::data_w));
- map(0xf4, 0xf4).w(FUNC(trs80_state::trs80m4_f4_w));
- map(0xf8, 0xfb).rw(FUNC(trs80_state::trs80_printer_r), FUNC(trs80_state::trs80_printer_w));
- map(0xfc, 0xff).rw(FUNC(trs80_state::trs80m4_ff_r), FUNC(trs80_state::trs80m4_ff_w));
-}
-
-void trs80_state::meritum_map(address_map &map)
-{
- map(0x0000, 0x37ff).rom();
- map(0x3800, 0x38ff).mirror(0x300).r(FUNC(trs80_state::trs80_keyboard_r));
- map(0x3c00, 0x3fff).rw(FUNC(trs80_state::trs80_videoram_r), FUNC(trs80_state::trs80_videoram_w)).share("videoram");
- map(0x4000, 0xffff).ram();
-}
-
-void trs80_state::meritum_io(address_map &map)
+void trs80_state::lnw80_io(address_map &map)
{
map.global_mask(0xff);
map.unmap_value_high();
- // There are specific writes to ports 03, F3, F7, F8, FA, FB, FD
- // so perhaps this system uses devices at these locations.
- // The disk input expects values that are different to the usual,
- // eg. port F0 should be 5, port F2 should have bit 3 set.
- //AM_RANGE(0x03, 0x03) unknown
- map(0xf0, 0xf0).r(FUNC(trs80_state::trs80_wd179x_r));
- map(0xf0, 0xf0).w(m_fdc, FUNC(fd1793_device::cmd_w));
- map(0xf1, 0xf1).rw(m_fdc, FUNC(fd1793_device::track_r), FUNC(fd1793_device::track_w));
- map(0xf2, 0xf2).rw(m_fdc, FUNC(fd1793_device::sector_r), FUNC(fd1793_device::sector_w));
- map(0xf3, 0xf3).rw(m_fdc, FUNC(fd1793_device::data_r), FUNC(fd1793_device::data_w));
- map(0xf4, 0xf4).w(FUNC(trs80_state::trs80m4_f4_w));
- map(0xf8, 0xfb).rw(FUNC(trs80_state::trs80_printer_r), FUNC(trs80_state::trs80_printer_w));
- //AM_RANGE(0xfc, 0xfd) unknown
- map(0xff, 0xff).rw(FUNC(trs80_state::trs80_ff_r), FUNC(trs80_state::trs80_ff_w));
+ m1_io(map);
+ map(0xe9, 0xe9).nopw();
+ map(0xfe, 0xfe).rw(FUNC(trs80_state::lnw80_fe_r), FUNC(trs80_state::lnw80_fe_w));
}
-void trs80_state::cp500_io(address_map &map)
-{
- map.global_mask(0xff);
- map.unmap_value_high();
- map(0xe0, 0xe3).rw(FUNC(trs80_state::trs80m4_e0_r), FUNC(trs80_state::trs80m4_e0_w));
- map(0xe4, 0xe4).rw(FUNC(trs80_state::trs80m4_e4_r), FUNC(trs80_state::trs80m4_e4_w));
- map(0xe8, 0xe8).rw(FUNC(trs80_state::trs80m4_e8_r), FUNC(trs80_state::trs80m4_e8_w));
- map(0xe9, 0xe9).portr("E9").w(FUNC(trs80_state::trs80m4_e9_w));
- map(0xea, 0xea).rw(FUNC(trs80_state::trs80m4_ea_r), FUNC(trs80_state::trs80m4_ea_w));
- map(0xeb, 0xeb).rw("uart", FUNC(ay31015_device::receive), FUNC(ay31015_device::transmit));
- map(0xec, 0xef).rw(FUNC(trs80_state::trs80m4_ec_r), FUNC(trs80_state::trs80m4_ec_w));
- map(0xf0, 0xf0).r(FUNC(trs80_state::trs80_wd179x_r));
- map(0xf0, 0xf0).w(m_fdc, FUNC(fd1793_device::cmd_w));
- map(0xf1, 0xf1).rw(m_fdc, FUNC(fd1793_device::track_r), FUNC(fd1793_device::track_w));
- map(0xf2, 0xf2).rw(m_fdc, FUNC(fd1793_device::sector_r), FUNC(fd1793_device::sector_w));
- map(0xf3, 0xf3).rw(m_fdc, FUNC(fd1793_device::data_r), FUNC(fd1793_device::data_w));
- map(0xf4, 0xf4).w(FUNC(trs80_state::trs80m4_f4_w));
- map(0xf4, 0xf7).r(FUNC(trs80_state::cp500_a11_flipflop_toggle));
- map(0xf8, 0xfb).rw(FUNC(trs80_state::trs80_printer_r), FUNC(trs80_state::trs80_printer_w));
- map(0xfc, 0xff).rw(FUNC(trs80_state::trs80m4_ff_r), FUNC(trs80_state::trs80m4_ff_w));
-}
/**************************************************************************
w/o SHIFT with SHIFT
@@ -382,13 +276,7 @@ NB4: when it was added a 15-key keypad, there were
***************************************************************************/
static INPUT_PORTS_START( trs80 )
- PORT_START("CONFIG") /* IN0 */
- PORT_CONFNAME( 0x80, 0x00, "Floppy Disc Drives")
- PORT_CONFSETTING( 0x00, DEF_STR( Off ) )
- PORT_CONFSETTING( 0x80, DEF_STR( On ) )
- PORT_BIT(0x7f, 0x7f, IPT_UNUSED)
-
- PORT_START("LINE0") /* KEY ROW 0 */
+ PORT_START("LINE0")
PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_NAME("@") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@')
PORT_BIT(0x02, 0x00, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
@@ -398,7 +286,7 @@ static INPUT_PORTS_START( trs80 )
PORT_BIT(0x40, 0x00, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
PORT_BIT(0x80, 0x00, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
- PORT_START("LINE1") /* KEY ROW 1 */
+ PORT_START("LINE1")
PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
PORT_BIT(0x02, 0x00, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
@@ -408,7 +296,7 @@ static INPUT_PORTS_START( trs80 )
PORT_BIT(0x40, 0x00, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
PORT_BIT(0x80, 0x00, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
- PORT_START("LINE2") /* KEY ROW 2 */
+ PORT_START("LINE2")
PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
PORT_BIT(0x02, 0x00, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
@@ -418,20 +306,13 @@ static INPUT_PORTS_START( trs80 )
PORT_BIT(0x40, 0x00, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
PORT_BIT(0x80, 0x00, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
- PORT_START("LINE3") /* KEY ROW 3 */
+ PORT_START("LINE3")
PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
PORT_BIT(0x02, 0x00, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
- /* on Model I and Model III keyboards, there are only 53 keys (+ 12 keypad keys) and these are not connected:
- on Model I, they produce arrows and '_', on Model III either produce garbage or overlap with other keys;
- on Model 4 (which has a 15-key with 3 function keys) here are mapped 'F1', 'F2', 'F3' */
- PORT_BIT(0x08, 0x00, IPT_KEYBOARD) PORT_NAME("(n/c)")
- PORT_BIT(0x10, 0x00, IPT_KEYBOARD) PORT_NAME("(n/c)")
- PORT_BIT(0x20, 0x00, IPT_KEYBOARD) PORT_NAME("(n/c)")
- PORT_BIT(0x40, 0x00, IPT_KEYBOARD) PORT_NAME("(n/c)")
- PORT_BIT(0x80, 0x00, IPT_KEYBOARD) PORT_NAME("(n/c)")
-
- PORT_START("LINE4") /* KEY ROW 4 */
+ PORT_BIT(0xF8, 0x00, IPT_UNUSED)
+
+ PORT_START("LINE4")
PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
PORT_BIT(0x02, 0x00, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"') PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
@@ -441,7 +322,7 @@ static INPUT_PORTS_START( trs80 )
PORT_BIT(0x40, 0x00, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&') PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
PORT_BIT(0x80, 0x00, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'') PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
- PORT_START("LINE5") /* KEY ROW 5 */
+ PORT_START("LINE5")
PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
PORT_BIT(0x02, 0x00, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')') PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_NAME(": *") PORT_CODE(KEYCODE_MINUS) PORT_CHAR(':') PORT_CHAR('*')
@@ -451,7 +332,7 @@ static INPUT_PORTS_START( trs80 )
PORT_BIT(0x40, 0x00, IPT_KEYBOARD) PORT_NAME(". >") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
PORT_BIT(0x80, 0x00, IPT_KEYBOARD) PORT_NAME("/ ?") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
- PORT_START("LINE6") /* KEY ROW 6 */
+ PORT_START("LINE6")
PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD))
PORT_BIT(0x02, 0x00, IPT_KEYBOARD) PORT_NAME("Clear") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(F8)) // 3rd line, 1st key from right
PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_NAME("Break") PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(F9)) // 1st line, 1st key from right
@@ -462,20 +343,20 @@ static INPUT_PORTS_START( trs80 )
PORT_BIT(0x40, 0x00, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
PORT_BIT(0x80, 0x00, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
- PORT_START("LINE7") /* KEY ROW 7 */
- PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_NAME("Left Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
- /* These keys are only on a Model 4. The one marked CTL seems to be another shift key (4 in total). */
- PORT_BIT(0x02, 0x00, IPT_KEYBOARD) PORT_NAME("Right Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
- PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_NAME("CTL") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
- PORT_BIT(0x08, 0x00, IPT_KEYBOARD) PORT_NAME("Caps") PORT_CODE(KEYCODE_CAPSLOCK)
- PORT_BIT(0x10, 0x00, IPT_KEYBOARD) PORT_NAME("F1") PORT_CODE(KEYCODE_F1)
- PORT_BIT(0x20, 0x00, IPT_KEYBOARD) PORT_NAME("F2") PORT_CODE(KEYCODE_F2)
- PORT_BIT(0x40, 0x00, IPT_KEYBOARD) PORT_NAME("F3") PORT_CODE(KEYCODE_F3)
- PORT_BIT(0x80, 0x00, IPT_UNUSED)
+ PORT_START("LINE7")
+ PORT_BIT(0x01, 0x00, IPT_KEYBOARD) PORT_NAME("Left Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
+ PORT_BIT(0x10, 0x00, IPT_KEYBOARD) PORT_NAME("Control") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
+ PORT_BIT(0xee, 0x00, IPT_UNUSED)
INPUT_PORTS_END
-static INPUT_PORTS_START( trs80m3 )
+static INPUT_PORTS_START(trs80l2)
PORT_INCLUDE (trs80)
+ PORT_START("CONFIG")
+ PORT_CONFNAME( 0x80, 0x00, "Floppy Disc Drives")
+ PORT_CONFSETTING( 0x00, DEF_STR( Off ) )
+ PORT_CONFSETTING( 0x80, DEF_STR( On ) )
+ PORT_BIT(0x7f, 0x7f, IPT_UNUSED)
+
PORT_START("E9") // these are the power-on uart settings
PORT_BIT(0x07, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_DIPNAME( 0x88, 0x08, "Parity")
@@ -492,6 +373,21 @@ static INPUT_PORTS_START( trs80m3 )
PORT_DIPSETTING( 0x60, "8")
INPUT_PORTS_END
+static INPUT_PORTS_START(sys80)
+ PORT_INCLUDE (trs80l2)
+ PORT_START("BAUD")
+ PORT_DIPNAME( 0xff, 0x06, "Baud Rate")
+ PORT_DIPSETTING( 0x00, "110")
+ PORT_DIPSETTING( 0x01, "300")
+ PORT_DIPSETTING( 0x02, "600")
+ PORT_DIPSETTING( 0x03, "1200")
+ PORT_DIPSETTING( 0x04, "2400")
+ PORT_DIPSETTING( 0x05, "4800")
+ PORT_DIPSETTING( 0x06, "9600")
+ PORT_DIPSETTING( 0x07, "19200")
+INPUT_PORTS_END
+
+
/**************************** F4 CHARACTER DISPLAYER ***********************************************************/
static const gfx_layout trs80_charlayout =
@@ -520,19 +416,6 @@ static const gfx_layout ht1080z_charlayout =
8*16 /* every char takes 16 bytes */
};
-static const gfx_layout trs80m4_charlayout =
-{
- 8, 8, /* 8 x 8 characters */
- 256, /* 256 characters */
- 1, /* 1 bits per pixel */
- { 0 }, /* no bitplanes */
- /* x offsets */
- { 0, 1, 2, 3, 4, 5, 6, 7 },
- /* y offsets */
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
- 8*8 /* every char takes 8 bytes */
-};
-
static const gfx_layout lnw80_charlayout =
{
8, 8, /* 8 x 8 characters */
@@ -559,19 +442,6 @@ static const gfx_layout radionic_charlayout =
8*8 /* every char takes 16 bytes */
};
-static const gfx_layout meritum_charlayout =
-{
- 6, 11, /* 8 x 16 characters */
- 256, /* 256 characters */
- 1, /* 1 bits per pixel */
- { 0 }, /* no bitplanes */
- /* x offsets */
- { 2, 3, 4, 5, 6, 7 },
- /* y offsets */
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8, 10*8 },
- 8*16 /* every char takes 16 bytes (unused scanlines are blank) */
-};
-
static GFXDECODE_START(gfx_trs80)
GFXDECODE_ENTRY( "chargen", 0, trs80_charlayout, 0, 1 )
GFXDECODE_END
@@ -580,10 +450,6 @@ static GFXDECODE_START(gfx_ht1080z)
GFXDECODE_ENTRY( "chargen", 0, ht1080z_charlayout, 0, 1 )
GFXDECODE_END
-static GFXDECODE_START(gfx_trs80m4)
- GFXDECODE_ENTRY( "chargen", 0, trs80m4_charlayout, 0, 1 )
-GFXDECODE_END
-
static GFXDECODE_START(gfx_lnw80)
GFXDECODE_ENTRY( "chargen", 0, lnw80_charlayout, 0, 4 )
GFXDECODE_END
@@ -592,10 +458,6 @@ static GFXDECODE_START(gfx_radionic)
GFXDECODE_ENTRY( "chargen", 0, radionic_charlayout, 0, 1 )
GFXDECODE_END
-static GFXDECODE_START(gfx_meritum)
- GFXDECODE_ENTRY( "chargen", 0, meritum_charlayout, 0, 1 )
-GFXDECODE_END
-
FLOPPY_FORMATS_MEMBER( trs80_state::floppy_formats )
FLOPPY_TRS80_FORMAT,
@@ -610,9 +472,8 @@ static void trs80_floppies(device_slot_interface &device)
MACHINE_CONFIG_START(trs80_state::trs80) // the original model I, level I, with no extras
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", Z80, 10.6445_MHz_XTAL / 6) // "a little over 1.774 MHz"
- // MAME driver previously configured CPU at "1.796 MHz"; where did this number come from?
- MCFG_DEVICE_PROGRAM_MAP(trs80_map)
+ MCFG_DEVICE_ADD("maincpu", Z80, 10.6445_MHz_XTAL / 6)
+ MCFG_DEVICE_PROGRAM_MAP(trs80_mem)
MCFG_DEVICE_IO_MAP(trs80_io)
/* video hardware */
@@ -636,26 +497,28 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(trs80_state::model1) // model I, level II
trs80(config);
MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(model1_map)
- MCFG_DEVICE_IO_MAP(model1_io)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(trs80_state, trs80_rtc_interrupt, 40)
+ MCFG_DEVICE_PROGRAM_MAP(m1_mem)
+ MCFG_DEVICE_IO_MAP(m1_io)
+ MCFG_DEVICE_PERIODIC_INT_DRIVER(trs80_state, rtc_interrupt, 40)
/* devices */
MCFG_CASSETTE_MODIFY("cassette")
MCFG_CASSETTE_FORMATS(trs80l2_cassette_formats)
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY)
- MCFG_QUICKLOAD_ADD("quickload", trs80_state, trs80_cmd, "cmd", 0.5)
+ MCFG_QUICKLOAD_ADD("quickload", trs80_state, trs80_cmd, "cmd", 1.0)
MCFG_DEVICE_ADD("fdc", FD1793, 4_MHz_XTAL / 4) // todo: should be fd1771
- MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(*this, trs80_state,trs80_fdc_intrq_w))
+ MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(*this, trs80_state, intrq_w))
MCFG_FLOPPY_DRIVE_ADD("fdc:0", trs80_floppies, "sssd", trs80_state::floppy_formats)
MCFG_FLOPPY_DRIVE_SOUND(true)
MCFG_FLOPPY_DRIVE_ADD("fdc:1", trs80_floppies, "sssd", trs80_state::floppy_formats)
MCFG_FLOPPY_DRIVE_SOUND(true)
MCFG_FLOPPY_DRIVE_ADD("fdc:2", trs80_floppies, "", trs80_state::floppy_formats)
+ MCFG_FLOPPY_DRIVE_SOUND(true)
MCFG_FLOPPY_DRIVE_ADD("fdc:3", trs80_floppies, "", trs80_state::floppy_formats)
+ MCFG_FLOPPY_DRIVE_SOUND(true)
MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE("cent_status_in", input_buffer_device, write_bit7))
@@ -667,45 +530,23 @@ MACHINE_CONFIG_START(trs80_state::model1) // model I, level II
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
- MCFG_DEVICE_ADD("uart", AY31015, 0)
- MCFG_AY31015_RX_CLOCK(0.0)
- MCFG_AY31015_TX_CLOCK(0.0)
- MCFG_AY31015_AUTO_RDAV(true)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(trs80_state::model3)
- model1(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_CLOCK(20.2752_MHz_XTAL / 10)
- MCFG_DEVICE_PROGRAM_MAP(model3_map)
- MCFG_DEVICE_IO_MAP(model3_io)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(trs80_state, trs80_rtc_interrupt, 20.2752_MHz_XTAL / 10 / 67584)
-
- MCFG_MACHINE_RESET_OVERRIDE(trs80_state, trs80m4)
-
- MCFG_GFXDECODE_MODIFY("gfxdecode", gfx_trs80m4)
-
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(trs80_state, screen_update_trs80m4)
- MCFG_SCREEN_RAW_PARAMS(12.672_MHz_XTAL, 800, 0, 640, 264, 0, 240)
-MACHINE_CONFIG_END
+ COM8116(config, m_brg, 5.0688_MHz_XTAL); // BR1941L
+ m_brg->fr_handler().set(m_uart, FUNC(ay31015_device::write_rcp));
+ m_brg->ft_handler().set(m_uart, FUNC(ay31015_device::write_tcp));
-MACHINE_CONFIG_START(trs80_state::model4)
- model3(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_IO_MAP(model4_io)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(trs80_state::model4p)
- model3(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_IO_MAP(model4p_io)
+ MCFG_DEVICE_ADD("uart", AY31015, 0)
+ MCFG_AY51013_READ_SI_CB(READLINE("rs232", rs232_port_device, rxd_r))
+ MCFG_AY51013_WRITE_SO_CB(WRITELINE("rs232", rs232_port_device, write_txd))
+ //MCFG_AY51013_WRITE_DAV_CB(WRITELINE( , , ))
+ MCFG_AY51013_AUTO_RDAV(true)
+ MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, nullptr)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(trs80_state::sys80)
model1(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_IO_MAP(sys80_io)
+ MCFG_DEVICE_REMOVE("brg")
MACHINE_CONFIG_END
MACHINE_CONFIG_START(trs80_state::ht1080z)
@@ -718,9 +559,17 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(trs80_state::lnw80)
model1(config);
MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_CLOCK(16_MHz_XTAL / 4) // or 16MHz / 9; 4MHz or 1.77MHz operation selected by HI/LO switch
- MCFG_DEVICE_PROGRAM_MAP(lnw80_map)
+ //MCFG_DEVICE_CLOCK(16_MHz_XTAL / 4) // or 16MHz / 9; 4MHz or 1.77MHz operation selected by HI/LO switch
+ MCFG_DEVICE_CLOCK(16_MHz_XTAL / 9) // need this so cassette can work
+ MCFG_DEVICE_PROGRAM_MAP(lnw80_mem)
MCFG_DEVICE_IO_MAP(lnw80_io)
+
+ ADDRESS_MAP_BANK(config, m_lnw_bank, 0);
+ m_lnw_bank->set_addrmap(0, &trs80_state::lnw_banked_mem);
+ m_lnw_bank->set_data_width(8);
+ m_lnw_bank->set_addr_width(16);
+ m_lnw_bank->set_stride(0x4000);
+
MCFG_MACHINE_RESET_OVERRIDE(trs80_state, lnw80)
MCFG_GFXDECODE_MODIFY("gfxdecode", gfx_lnw80)
@@ -749,23 +598,6 @@ MACHINE_CONFIG_START(trs80_state::radionic)
MCFG_GFXDECODE_MODIFY("gfxdecode", gfx_radionic)
MACHINE_CONFIG_END
-MACHINE_CONFIG_START(trs80_state::meritum)
- sys80(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(meritum_map)
- MCFG_DEVICE_IO_MAP(meritum_io)
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(trs80_state, screen_update_meritum)
- MCFG_GFXDECODE_MODIFY("gfxdecode", gfx_meritum)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(trs80_state::cp500)
- model3(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_IO_MAP(cp500_io)
-
- MCFG_MACHINE_RESET_OVERRIDE(trs80_state, cp500)
-MACHINE_CONFIG_END
/***************************************************************************
@@ -774,15 +606,16 @@ MACHINE_CONFIG_END
***************************************************************************/
ROM_START(trs80)
- ROM_REGION(0x10000, "maincpu",0)
+ ROM_REGION(0x3800, "maincpu",0)
ROM_LOAD("level1.rom", 0x0000, 0x1000, CRC(70d06dff) SHA1(20d75478fbf42214381e05b14f57072f3970f765))
- ROM_REGION(0x00400, "chargen",0)
+ ROM_REGION(0x0400, "chargen",0)
ROM_LOAD("trs80m1.chr", 0x0000, 0x0400, CRC(0033f2b9) SHA1(0d2cd4197d54e2e872b515bbfdaa98efe502eda7))
ROM_END
+
ROM_START(trs80l2)
- ROM_REGION(0x10000, "maincpu",0)
+ ROM_REGION(0x3800, "maincpu",0)
ROM_SYSTEM_BIOS(0, "level2", "Radio Shack Level II Basic")
ROMX_LOAD("trs80.z33", 0x0000, 0x1000, CRC(37c59db2) SHA1(e8f8f6a4460a6f6755873580be6ff70cebe14969), ROM_BIOS(0))
ROMX_LOAD("trs80.z34", 0x1000, 0x1000, CRC(05818718) SHA1(43c538ca77623af6417474ca5b95fb94205500c1), ROM_BIOS(0))
@@ -792,38 +625,39 @@ ROM_START(trs80l2)
ROMX_LOAD("trs80alt.z34",0x1000, 0x1000, CRC(6c791c2d) SHA1(2a38e0a248f6619d38f1a108eea7b95761cf2aee), ROM_BIOS(1))
ROMX_LOAD("trs80alt.zl2",0x2000, 0x1000, CRC(55b3ad13) SHA1(6279f6a68f927ea8628458b278616736f0b3c339), ROM_BIOS(1))
- ROM_REGION(0x00400, "chargen",0)
+ ROM_REGION(0x0400, "chargen",0)
ROM_LOAD("trs80m1.chr", 0x0000, 0x0400, CRC(0033f2b9) SHA1(0d2cd4197d54e2e872b515bbfdaa98efe502eda7))
ROM_END
+
ROM_START(radionic)
- ROM_REGION(0x10000, "maincpu",0)
+ ROM_REGION(0x4000, "maincpu",0)
ROM_LOAD("ep1.bin", 0x0000, 0x1000, CRC(e8908f44) SHA1(7a5a60c3afbeb6b8434737dd302332179a7fca59))
ROM_LOAD("ep2.bin", 0x1000, 0x1000, CRC(46e88fbf) SHA1(a3ca32757f269e09316e1e91ba1502774e2f5155))
ROM_LOAD("ep3.bin", 0x2000, 0x1000, CRC(306e5d66) SHA1(1e1abcfb5b02d4567cf6a81ffc35318723442369))
- ROM_LOAD("ep4.bin", 0x3000, 0x0400, CRC(70f90f26) SHA1(cbee70da04a3efac08e50b8e3a270262c2440120))
- ROM_CONTINUE(0x3000, 0x400)
- ROM_CONTINUE(0x3000, 0x600)
- ROM_IGNORE(0x200)
+ ROM_LOAD("ep4.bin", 0x3000, 0x0800, CRC(70f90f26) SHA1(cbee70da04a3efac08e50b8e3a270262c2440120))
+ ROM_CONTINUE( 0x3000, 0x0800)
- ROM_REGION(0x01000, "chargen",0)
+ ROM_REGION(0x1000, "chargen",0)
ROM_LOAD("trschar.bin", 0x0000, 0x1000, CRC(02e767b6) SHA1(c431fcc6bd04ce2800ca8c36f6f8aeb2f91ce9f7))
ROM_END
+
ROM_START(sys80)
- ROM_REGION(0x10000, "maincpu",0)
+ ROM_REGION(0x3800, "maincpu",0)
ROM_LOAD("sys80rom.1", 0x0000, 0x1000, CRC(8f5214de) SHA1(d8c052be5a2d0ec74433043684791d0554bf203b))
ROM_LOAD("sys80rom.2", 0x1000, 0x1000, CRC(46e88fbf) SHA1(a3ca32757f269e09316e1e91ba1502774e2f5155))
ROM_LOAD("trs80.zl2", 0x2000, 0x1000, CRC(306e5d66) SHA1(1e1abcfb5b02d4567cf6a81ffc35318723442369))
/* This rom turns the system80 into the "blue label" version. SYSTEM then /12288 to activate. */
ROM_LOAD("sys80.ext", 0x3000, 0x0800, CRC(2a851e33) SHA1(dad21ec60973eb66e499fe0ecbd469118826a715))
- ROM_REGION(0x00400, "chargen",0)
+ ROM_REGION(0x0400, "chargen",0)
ROM_LOAD("trs80m1.chr", 0x0000, 0x0400, CRC(0033f2b9) SHA1(0d2cd4197d54e2e872b515bbfdaa98efe502eda7))
ROM_END
+
ROM_START(lnw80)
- ROM_REGION(0x10000, "maincpu",0)
+ ROM_REGION(0x3800, "maincpu",0)
ROM_LOAD("lnw_a.bin", 0x0000, 0x0800, CRC(e09f7e91) SHA1(cd28e72efcfebde6cf1c7dbec4a4880a69e683da))
ROM_LOAD("lnw_a1.bin", 0x0800, 0x0800, CRC(ac297d99) SHA1(ccf31d3f9d02c3b68a0ee3be4984424df0e83ab0))
ROM_LOAD("lnw_b.bin", 0x1000, 0x0800, CRC(c4303568) SHA1(13e3d81c6f0de0e93956fa58c465b5368ea51682))
@@ -831,180 +665,60 @@ ROM_START(lnw80)
ROM_LOAD("lnw_c.bin", 0x2000, 0x0800, CRC(2ba025d7) SHA1(232efbe23c3f5c2c6655466ebc0a51cf3697be9b))
ROM_LOAD("lnw_c1.bin", 0x2800, 0x0800, CRC(ed547445) SHA1(20102de89a3ee4a65366bc2d62be94da984a156b))
- ROM_REGION(0x00800, "chargen",0)
+ ROM_REGION(0x0800, "chargen",0)
ROM_LOAD("lnw_chr.bin", 0x0000, 0x0800, CRC(c89b27df) SHA1(be2a009a07e4378d070002a558705e9a0de59389))
- ROM_REGION(0x04400, "gfx2", ROMREGION_ERASEFF) /* 0x4000 for trs80_gfxram + 0x400 for videoram */
+ ROM_REGION(0x4000, "gfx2", ROMREGION_ERASEFF) // for trs80_gfxram
ROM_END
-ROM_START(trs80m3)
-/* ROMS we have and are missing:
-HAVE TRS-80 Model III Level 1 ROM (U104)
-MISSING TRS-80 Model III Level 2 (ENGLISH) ROM A (U104) ver. CRC BBC4
-MISSING TRS-80 Model III Level 2 (ENGLISH) ROM A (U104) ver. CRC DA75
-HAVE TRS-80 Model III Level 2 (ENGLISH) ROM A (U104) ver. CRC 9639
-HAVE TRS-80 Model III Level 2 (ENGLISH) ROM B (U105) ver. CRC 407C
-MISSING TRS-80 Model III Level 2 (ENGLISH) ROM C (U106) ver. CRC 2B91 - early mfg. #80040316
-MISSING TRS-80 Model III Level 2 (ENGLISH) ROM C (U106) ver. CRC 278A - no production REV A
-HAVE TRS-80 Model III Level 2 (ENGLISH) ROM C (U106) ver. CRC 2EF8 - Manufacturing #80040316 REV B
-HAVE TRS-80 Model III Level 2 (ENGLISH) ROM C (U106) ver. CRC 2F84 - Manufacturing #80040316 REV C
-MISSING TRS-80 Model III Level 2 (ENGLISH) ROM C ver. CRC 2764 - Network III v1
-HAVE TRS-80 Model III Level 2 (ENGLISH) ROM C ver. CRC 276A - Network III v2
-MISSING TRS-80 Model III Level 2 (BELGIUM) CRC ????
-Note: Be careful when dumping rom C: if dumped on the trs-80 m3 with software, bytes 0x7e8 and 0x7e9 (addresses 0x37e8, 0x0x37e9)
- will read as 0xFF 0xFF; on the original rom, these bytes are 0x00 0x00 (for eproms) or 0xAA 0xAA (for mask roms), those two bytes are used for printer status on the trs-80 and are mapped on top of the rom; This problem should be avoided by pulling the rom chips and dumping them directly.
-*/
- ROM_REGION(0x20000, "maincpu",0)
- ROM_SYSTEM_BIOS(0, "trs80m3_revc", "Level 2 bios, RomC Rev C")
- ROMX_LOAD("8041364.u104", 0x0000, 0x2000, CRC(ec0c6daa) SHA1(257cea6b9b46912d4681251019ec2b84f1b95fc8), ROM_BIOS(0)) // Label: "SCM91248C // Tandy (c) 80 // 8041364 // 8134" (Level 2 bios ROM A '9639')
- ROMX_LOAD("8040332.u105", 0x2000, 0x1000, CRC(ed4ee921) SHA1(ec0a19d4b72f71e51965de63250009c3c4e4cab3), ROM_BIOS(0)) // Label: "SCM91619P // Tandy (c) 80 // 8040332 // QQ8117", (Level 2 bios ROM B '407c')
- ROMX_LOAD("8040316c.u106", 0x3000, 0x0800, CRC(c8f79433) SHA1(6f395bba822d39d3cd2b73c8ea25aab4c4c26da7), ROM_BIOS(0)) // Label: "SCM91692P // Tandy (c) 81 // 8040316-C // QQ8220" (Level 2 bios ROM C REV C '2f84')
- ROM_SYSTEM_BIOS(1, "trs80m3_revb", "Level 2 bios, RomC Rev B")
- ROMX_LOAD("8041364.u104", 0x0000, 0x2000, CRC(ec0c6daa) SHA1(257cea6b9b46912d4681251019ec2b84f1b95fc8), ROM_BIOS(1)) // Label: "SCM91248C // Tandy (c) 80 // 8041364 // 8134" (Level 2 bios ROM A '9639')
- ROMX_LOAD("8040332.u105", 0x2000, 0x1000, CRC(ed4ee921) SHA1(ec0a19d4b72f71e51965de63250009c3c4e4cab3), ROM_BIOS(1)) // Label: "SCM91619P // Tandy (c) 80 // 8040332 // QQ8117", (Level 2 bios ROM B '407c')
- ROMX_LOAD("8040316b.u106", 0x3000, 0x0800, CRC(84a5702d) SHA1(297dca756a9d3c6fd13e0fa6f93d172ff795b520), ROM_BIOS(1)) // Label: "SCM91692P // Tandy (c) 80 // 8040316B // QQ8040" (Level 2 bios ROM C REV B '2ef8')
- ROM_SYSTEM_BIOS(2, "trs80m3_n3v2", "Level 2 bios, Network III v2 (student)")
- ROMX_LOAD("8041364.u104", 0x0000, 0x2000, CRC(ec0c6daa) SHA1(257cea6b9b46912d4681251019ec2b84f1b95fc8), ROM_BIOS(2)) // Label: "SCM91248C // Tandy (c) 80 // 8041364 // 8134" (Level 2 bios ROM A '9639')
- ROMX_LOAD("8040332.u105", 0x2000, 0x1000, CRC(ed4ee921) SHA1(ec0a19d4b72f71e51965de63250009c3c4e4cab3), ROM_BIOS(2)) // Label: "SCM91619P // Tandy (c) 80 // 8040332 // QQ8117" (Level 2 bios ROM B '407c')
- ROMX_LOAD("276a.u106", 0x3000, 0x0800, CRC(7d38720a) SHA1(bef621e5ae2a8c1f9e7f6325b7841f5ab8ab7e6a), ROM_BIOS(2)) // 2716 EPROM Label: "MOD.III // ROM C // (276A)" (Network III v2 ROM C '276a')
- ROM_SYSTEM_BIOS(3, "trs80m3_l1", "Level 1 bios")
- ROMX_LOAD("8040032.u104", 0x0000, 0x1000, CRC(6418d641) SHA1(f823ab6ceb102588d27e5f5c751e31175289291c), ROM_BIOS(3) ) // Label: "8040032 // (M) QQ8028 // SCM91616P"; Silkscreen: "TANDY // (C) '80"; (Level 1 bios)
-
- ROM_REGION(0x00800, "chargen",0) /* correct for later systems; the trs80m3_l1 bios uses the non-a version of this rom, dump is pending */
- ROM_LOAD("8044316.u36", 0x0000, 0x0800, NO_DUMP) // Label: "(M) // SCM91665P // 8044316 // QQ8029" ('no-letter' revision)
- ROM_LOAD("8044316a.u36", 0x0000, 0x0800, CRC(444c8b60) SHA1(c52ee41439bd5e57c3b113ebfd61c951e2af4446)) // Label: "Tandy (C) 81 // 8044316A // 8206" (rev A)
-ROM_END
-
-// for model 4 and 4p info, see http://vt100.net/mirror/harte/Radio%20Shack/TRS-80%20Model%204_4P%20Soft%20Tech%20Ref.pdf
-ROM_START(trs80m4)
- ROM_REGION(0x20000, "maincpu",0)
- ROM_LOAD("trs80m4.rom", 0x0000, 0x3800, BAD_DUMP CRC(1a92d54d) SHA1(752555fdd0ff23abc9f35c6e03d9d9b4c0e9677b)) // should be split into 3 roms, roms A, B, C, exactly like trs80m3; in fact, roms A and B are shared between both systems.
-
- ROM_REGION(0x00800, "chargen",0)
- ROM_LOAD("8044316a.u36", 0x0000, 0x0800, CRC(444c8b60) SHA1(c52ee41439bd5e57c3b113ebfd61c951e2af4446)) // according to parts catalog, this is the correct rom for both model 3 and 4
-ROM_END
-
-ROM_START(trs80m4p) // uses a completely different memory map scheme to the others; the trs-80 model 3 roms are loaded from a boot disk, the only rom on the machine is a bootloader; bootloader can be banked out of 0x0000-0x1000 space which is replaced with ram; see the tech ref pdf, pdf page 62
- ROM_REGION(0x20000, "maincpu",0)
- ROM_SYSTEM_BIOS(0, "trs80m4p", "Level 2 bios, gate array machine")
- ROMX_LOAD("8075332.u69", 0x0000, 0x1000, CRC(3a738aa9) SHA1(6393396eaa10a84b9e9f0cf5930aba73defc5c52), ROM_BIOS(0)) // Label: "SCM95060P // 8075332 // TANDY (C) 1983 // 8421" at location U69 (may be located at U70 on some pcb revisions)
- ROM_SYSTEM_BIOS(1, "trs80m4p_hack", "Disk loader hack")
- ROMX_LOAD("trs80m4p_loader_hack.rom", 0x0000, 0x01f8, CRC(7ff336f4) SHA1(41184f5240b4b54f3804f5a22b4d78bbba52ed1d), ROM_BIOS(1))
-
- ROM_REGION(0x00800, "chargen",0)
- ROM_LOAD("8049007.u103", 0x0000, 0x0800, CRC(1ac44bea) SHA1(c9426ab2b2aa5380dc97a7b9c048ccd1bbde92ca)) // Label: "SCM95987P // 8049007 // TANDY (C) 1983 // 8447" at location U103 (may be located at U43 on some pcb revisions)
-ROM_END
ROM_START(ht1080z)
- ROM_REGION(0x10000, "maincpu",0)
+ ROM_REGION(0x3800, "maincpu",0)
ROM_LOAD("ht1080z.rom", 0x0000, 0x3000, CRC(2bfef8f7) SHA1(7a350925fd05c20a3c95118c1ae56040c621be8f))
ROM_LOAD("sys80.ext", 0x3000, 0x0800, CRC(2a851e33) SHA1(dad21ec60973eb66e499fe0ecbd469118826a715))
- ROM_REGION(0x00800, "chargen",0)
+ ROM_REGION(0x0800, "chargen",0)
ROM_LOAD("ht1080z.chr", 0x0000, 0x0800, CRC(e8c59d4f) SHA1(a15f30a543e53d3e30927a2e5b766fcf80f0ae31))
ROM_END
+
ROM_START(ht1080z2)
- ROM_REGION(0x10000, "maincpu",0)
+ ROM_REGION(0x3800, "maincpu",0)
ROM_LOAD("ht1080z.rom", 0x0000, 0x3000, CRC(2bfef8f7) SHA1(7a350925fd05c20a3c95118c1ae56040c621be8f))
ROM_LOAD("ht1080z2.ext", 0x3000, 0x0800, CRC(07415ac6) SHA1(b08746b187946e78c4971295c0aefc4e3de97115))
- ROM_REGION(0x00800, "chargen",0)
+ ROM_REGION(0x0800, "chargen",0)
ROM_LOAD("ht1080z2.chr", 0x0000, 0x0800, CRC(6728f0ab) SHA1(1ba949f8596f1976546f99a3fdcd3beb7aded2c5))
ROM_END
+
ROM_START(ht108064)
- ROM_REGION(0x10000, "maincpu",0)
+ ROM_REGION(0x3800, "maincpu",0)
ROM_LOAD("ht108064.rom", 0x0000, 0x3000, CRC(48985a30) SHA1(e84cf3121f9e0bb9e1b01b095f7a9581dcfaaae4))
ROM_LOAD("ht108064.ext", 0x3000, 0x0800, CRC(fc12bd28) SHA1(0da93a311f99ec7a1e77486afe800a937778e73b))
- ROM_REGION(0x00800, "chargen",0)
+ ROM_REGION(0x0800, "chargen",0)
ROM_LOAD("ht108064.chr", 0x0000, 0x0800, CRC(e76b73a4) SHA1(6361ee9667bf59d50059d09b0baf8672fdb2e8af))
ROM_END
-ROM_START( meritum)
- ROM_REGION(0x10000, "maincpu",0)
- ROM_LOAD( "01.bin", 0x0000, 0x0800, CRC(ed705a47) SHA1(dae8b14eb2ddb2a8b4458215180ebc0fb781816a))
- ROM_LOAD( "02.bin", 0x0800, 0x0800, CRC(ac297d99) SHA1(ccf31d3f9d02c3b68a0ee3be4984424df0e83ab0))
- ROM_LOAD( "03.bin", 0x1000, 0x0800, CRC(a21d0d62) SHA1(6dfdf3806ed2b6502e09a1b6922f21494134cc05))
- ROM_LOAD( "04.bin", 0x1800, 0x0800, CRC(3610bdda) SHA1(602f0ba1e1267f24620f993acac019ac6342a594))
- ROM_LOAD( "05.bin", 0x2000, 0x0800, CRC(461fbf0d) SHA1(bd19187dd992168af43bd68055343d515f152624))
- ROM_LOAD( "06.bin", 0x2800, 0x0800, CRC(ed547445) SHA1(20102de89a3ee4a65366bc2d62be94da984a156b))
- ROM_LOAD( "07.bin", 0x3000, 0x0800, CRC(044b1459) SHA1(faace7353ffbef6587b1b9e7f8b312e0892e3427))
- ROM_REGION(0x1000, "chargen", ROMREGION_INVERT)
- ROM_LOAD( "chargen.bin", 0x0000, 0x1000, CRC(3dfc6439) SHA1(6e45a27f68c3491c403b4eafe45a108f348dd2fd))
-ROM_END
-
-ROM_START( meritum_net )
- ROM_REGION(0x10000, "maincpu",0)
- ROM_LOAD( "01_447_m07_015m.bin", 0x0000, 0x0800, CRC(6d30cb49) SHA1(558241340a84eebcbbf8d92540e028e9164b6f8a))
- ROM_LOAD( "02_440_m08_01.bin", 0x0800, 0x0800, CRC(ac297d99) SHA1(ccf31d3f9d02c3b68a0ee3be4984424df0e83ab0))
- ROM_LOAD( "03_440_m09_015m.bin", 0x1000, 0x0800, CRC(88e267da) SHA1(9cb8626801f8e969f35291de43c1b643c809a3c3))
- ROM_LOAD( "04_447_m10_015m.bin", 0x1800, 0x0800, CRC(e51991e4) SHA1(a7d42436da1af405970f9f99ab34b6d9abd05adf))
- ROM_LOAD( "05_440_m11_02.bin", 0x2000, 0x0800, CRC(461fbf0d) SHA1(bd19187dd992168af43bd68055343d515f152624))
- ROM_LOAD( "06_440_m12_01.bin", 0x2800, 0x0800, CRC(ed547445) SHA1(20102de89a3ee4a65366bc2d62be94da984a156b))
- ROM_LOAD( "07_447_m13_015m.bin", 0x3000, 0x0800, CRC(789f6964) SHA1(9b2231ca7ffd82bbca1f53988a7df833290ddbf2))
- ROM_REGION(0x1000, "chargen", ROMREGION_INVERT)
- ROM_LOAD( "char.bin", 0x0000, 0x1000, CRC(2c09a5a7) SHA1(146891b3ddfc2de95e6a5371536394a657880054))
-ROM_END
-
-ROM_START( cp500 )
- ROM_REGION(0x20000, "maincpu", 0)
- ROM_LOAD("s_8407_cn62516n_cp500a_prologica_83.ci111", 0x0000, 0x4000, CRC(c2fc1b92) SHA1(0eb07baee80f1ee1f28a609eb63a9245dcb68adb))
-
- ROM_REGION(0x20000, "bootrom", 0)
- ROM_LOAD("s_8407_cn62516n_cp500a_prologica_83.ci111", 0x0000, 0x4000, CRC(c2fc1b92) SHA1(0eb07baee80f1ee1f28a609eb63a9245dcb68adb))
-
- ROM_REGION(0x0800, "chargen", 0)
- ROM_LOAD( "100.105.ci36", 0x0000, 0x800, CRC(1765931e) SHA1(49176ceea6cc003efa04fad2f31829b9432fe10f))
-ROM_END
void trs80_state::init_trs80()
{
m_mode = 0;
- m_model4 = 0;
}
void trs80_state::init_trs80l2()
{
m_mode = 2;
- m_model4 = 0;
-}
-
-void trs80_state::init_trs80m4()
-{
- m_mode = 0;
- m_model4 = 2;
- m_p_videoram.set_target(memregion("maincpu")->base()+0x4000,m_p_videoram.bytes());
}
-void trs80_state::init_trs80m4p()
-{
- m_mode = 0;
- m_model4 = 4;
- m_p_videoram.set_target(memregion("maincpu")->base()+0x4000,m_p_videoram.bytes());
-}
-
-void trs80_state::init_lnw80()
-{
- m_mode = 0;
- m_model4 = 0;
- m_p_gfxram = memregion("gfx2")->base();
- m_p_videoram.set_target(memregion("maincpu")->base()+0x4000,m_p_videoram.bytes());
-}
-// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1977, trs80, 0, 0, trs80, trs80, trs80_state, init_trs80, "Tandy Radio Shack", "TRS-80 Model I (Level I Basic)", 0 )
-COMP( 1978, trs80l2, trs80, 0, model1, trs80, trs80_state, init_trs80l2, "Tandy Radio Shack", "TRS-80 Model I (Level II Basic)", 0 )
-COMP( 1983, radionic, trs80, 0, radionic, trs80, trs80_state, init_trs80, "Komtek", "Radionic", 0 )
-COMP( 1980, sys80, trs80, 0, sys80, trs80, trs80_state, init_trs80l2, "EACA Computers Ltd", "System-80", 0 )
-COMP( 1981, lnw80, trs80, 0, lnw80, trs80m3, trs80_state, init_lnw80, "LNW Research", "LNW-80", 0 )
-COMP( 1980, trs80m3, trs80, 0, model3, trs80m3, trs80_state, init_trs80m4, "Tandy Radio Shack", "TRS-80 Model III", 0 )
-COMP( 1980, trs80m4, trs80, 0, model4, trs80m3, trs80_state, init_trs80m4, "Tandy Radio Shack", "TRS-80 Model 4", 0 )
-COMP( 1983, trs80m4p, trs80, 0, model4p, trs80m3, trs80_state, init_trs80m4p, "Tandy Radio Shack", "TRS-80 Model 4P", 0 )
-COMP( 1983, ht1080z, trs80, 0, ht1080z, trs80, trs80_state, init_trs80l2, "Hiradastechnika Szovetkezet", "HT-1080Z Series I", 0 )
-COMP( 1984, ht1080z2, trs80, 0, ht1080z, trs80, trs80_state, init_trs80l2, "Hiradastechnika Szovetkezet", "HT-1080Z Series II", 0 )
-COMP( 1985, ht108064, trs80, 0, ht1080z, trs80, trs80_state, init_trs80, "Hiradastechnika Szovetkezet", "HT-1080Z/64", 0 )
-COMP( 1985, meritum, trs80, 0, meritum, trs80, trs80_state, init_trs80l2, "Mera-Elzab", "Meritum I (Model 2)", 0 )
-COMP( 1985, meritum_net, trs80, 0, meritum, trs80, trs80_state, init_trs80l2, "Mera-Elzab", "Meritum I (Model 2) (network)", 0 )
-COMP( 1982, cp500, trs80, 0, cp500, trs80m3, trs80_state, init_trs80m4, "Prológica", "CP-500 (PVIII REV.3)", 0 )
+// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
+COMP( 1977, trs80, 0, 0, trs80, trs80, trs80_state, init_trs80, "Tandy Radio Shack", "TRS-80 Model I (Level I Basic)", 0 )
+COMP( 1978, trs80l2, 0, 0, model1, trs80l2, trs80_state, init_trs80l2, "Tandy Radio Shack", "TRS-80 Model I (Level II Basic)", 0 )
+COMP( 1983, radionic, trs80l2, 0, radionic, trs80l2, trs80_state, init_trs80, "Komtek", "Radionic", 0 )
+COMP( 1980, sys80, trs80l2, 0, sys80, sys80, trs80_state, init_trs80l2, "EACA Computers Ltd", "System-80", 0 )
+COMP( 1981, lnw80, trs80l2, 0, lnw80, sys80, trs80_state, init_trs80, "LNW Research", "LNW-80", 0 )
+COMP( 1983, ht1080z, trs80l2, 0, ht1080z, sys80, trs80_state, init_trs80l2, "Hiradastechnika Szovetkezet", "HT-1080Z Series I", 0 )
+COMP( 1984, ht1080z2, trs80l2, 0, ht1080z, sys80, trs80_state, init_trs80l2, "Hiradastechnika Szovetkezet", "HT-1080Z Series II", 0 )
+COMP( 1985, ht108064, trs80l2, 0, ht1080z, sys80, trs80_state, init_trs80, "Hiradastechnika Szovetkezet", "HT-1080Z/64", 0 )