diff options
Diffstat (limited to 'src/mame/drivers/micral.cpp')
-rw-r--r-- | src/mame/drivers/micral.cpp | 471 |
1 files changed, 0 insertions, 471 deletions
diff --git a/src/mame/drivers/micral.cpp b/src/mame/drivers/micral.cpp deleted file mode 100644 index 692c61480b7..00000000000 --- a/src/mame/drivers/micral.cpp +++ /dev/null @@ -1,471 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Robbbert -/******************************************************************************** - -Bull (Originally R2E) Micral 80-22G - -2015-10-01 Skeleton [Robbbert] - -http://www.ti99.com/exelvision/website/index.php?page=r2e-micral-8022-g - -This expensive, futuristic-looking design featured a motherboard and slots, -much like an ancient pc. The known chip complement is: -Z80A, 4MHz; 64KB RAM, 2KB BIOS ROM, 256x4 prom (7611); -CRT8002, TMS9937 (=CRT5037), 4KB video RAM, 256x4 prom (7611); -2x 5.25 inch floppy drives, one ST506 5MB hard drive; -CDP6402 UART. Sound is a beeper. -The keyboard has a uPD780C (=Z80) and 1KB of ROM. - -The FDC and HDC are unknown. -No manuals, schematic or circuit description have been found. - -Commands must be in uppercase. Reboot to exit each command. -Bx[,x]: ?? -Gxxxx : go (writes a jump @FFED then jumps to FFEB) -T : test -* : echo keystrokes -enter : ?? - -Using generic keyboard via the uart for now. It's unknown how the real keyboard -communicates with the main cpu. - -FFF8/9 are used for sending instructions to the screen. FFF9 is command/status, -and FFF8 is data. The codes 0-D seem to be for the CRT5037, but the results don't -make much sense. Code A0 is to write a byte to the current cursor position, and -B0 is to get the status. - -Screen needs: -- Scrolling -- Proper character generator -- To be properly understood -- According to the web, graphics are possible. A screenshot shows reverse video - exists. - -Other things... -- Beeper -- 2 floppy drives -- keyboard -- unknown ports - --------------------- -Honeywell Bull Questar/M - -http://www.histoireinform.com/Histoire/+infos6/chr6inf3.htm -https://www.esocop.org/docs/Questar.pdf - -*********************************************************************************/ - -#include "emu.h" -#include "cpu/z80/z80.h" -#include "video/tms9927.h" -//#include "sound/beep.h" -#include "emupal.h" -#include "screen.h" -#include "speaker.h" -#include "machine/ay31015.h" -#include "machine/clock.h" -#include "bus/rs232/rs232.h" - - -class micral_state : public driver_device -{ -public: - micral_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - , m_maincpu(*this, "maincpu") - , m_rom(*this, "maincpu") - , m_ram(*this, "mainram") - //, m_beep(*this, "beeper") - , m_p_chargen(*this, "chargen") - , m_uart(*this, "uart") - , m_crtc(*this, "crtc") - { } - - void micral(machine_config &config); - -private: - virtual void machine_reset() override; - virtual void machine_start() override; - u8 keyin_r(); - u8 status_r(); - u8 unk_r(); - u8 video_r(offs_t offset); - void video_w(offs_t offset, u8 data); - u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - - void io_kbd(address_map &map); - void mem_kbd(address_map &map); - void mem_map(address_map &map); - - u16 s_curpos; - u8 s_command; - u8 s_data; - std::unique_ptr<u8[]> m_vram; - memory_passthrough_handler *m_rom_shadow_tap; - required_device<cpu_device> m_maincpu; - required_region_ptr<u8> m_rom; - required_shared_ptr<u8> m_ram; - //required_device<beep_device> m_beep; - required_region_ptr<u8> m_p_chargen; - required_device<ay31015_device> m_uart; - required_device<crt5037_device> m_crtc; -}; - -u8 micral_state::status_r() -{ - return m_uart->dav_r() | 4; -} - -u8 micral_state::unk_r() -{ - return 0x96; -} - -u8 micral_state::keyin_r() -{ - m_uart->write_rdav(0); - u8 result = m_uart->receive(); - m_uart->write_rdav(1); - return result; -} - -u8 micral_state::video_r(offs_t offset) -{ - if (offset) - return 0x07; - else - return m_vram[s_curpos]; -} - -void micral_state::video_w(offs_t offset, u8 data) -{ - if (offset) - { - s_command = data; - if (s_command == 0x0c) - s_curpos = (s_curpos & 0xff00) | s_data; - else - if (s_command == 0x0d) - s_curpos = (s_curpos & 0xff) | ((s_data & 0x1f) << 8); - else - if (s_command == 0xa0) - m_vram[s_curpos] = s_data; - - //if (s_command < 0x10) - //m_crtc->write(s_command, s_data); - } - else - { - s_data = data; - } -} - - -void micral_state::mem_map(address_map &map) -{ - map.unmap_value_high(); - map(0x0000, 0xffef).ram().share("mainram"); - map(0xf800, 0xfeff).rom().region("maincpu", 0); - map(0xfff6, 0xfff7); // .nopw(); // unknown ports - map(0xfff8, 0xfff9).rw(FUNC(micral_state::video_r), FUNC(micral_state::video_w)); - map(0xfffa, 0xfffa).r(FUNC(micral_state::keyin_r)); - map(0xfffb, 0xfffb).r(FUNC(micral_state::unk_r)); - map(0xfffc, 0xfffc).r(FUNC(micral_state::status_r)); - map(0xfffd, 0xffff); // more unknown ports -} - -void micral_state::mem_kbd(address_map &map) -{ - map.unmap_value_high(); - map(0x0000, 0x03ff).rom(); - map(0x8000, 0x8000).ram(); // byte returned to main cpu after receiving irq - map(0x8001, 0x8001).portr("X0"); - map(0x8002, 0x8002).portr("X1"); - map(0x8004, 0x8004).portr("X2"); - map(0x8008, 0x8008).portr("X3"); - map(0x8010, 0x8010).portr("X4"); - map(0x8020, 0x8020).portr("X5"); - map(0x8040, 0x8040).portr("X6"); - map(0x8080, 0x8080).portr("X7"); - map(0x8100, 0x8100).portr("X8"); - map(0x8200, 0x8200).portr("X9"); - map(0x8400, 0x8400).portr("X10"); - map(0x8800, 0x8800).portr("X11"); - map(0x9000, 0x9000).portr("X12"); - map(0xa000, 0xa000).portr("X13"); -} - -void micral_state::io_kbd(address_map &map) -{ - map.global_mask(0xff); - map(0x00, 0x00).portr("X14"); -} - -/* Input ports */ -static INPUT_PORTS_START( micral ) - PORT_START("X0") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ESC) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 01 - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 00 - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 03 - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 00 - - PORT_START("X1") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) // 2A - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) // 22 - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) // 28 - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) // 94 - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) // 90 - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 29 - - PORT_START("X2") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 3E, 3C - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 00 - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) - - PORT_START("X3") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // '^' - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 00 - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 00 - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) - - PORT_START("X4") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) // 5B - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // OB - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) - - PORT_START("X5") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) // 3F - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // ':','/' - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 08 - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 06 - - PORT_START("X6") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TAB) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 00 - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 02 - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 00 - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 00 - - PORT_START("X7") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) // 91 - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) // 27 - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) // '-' - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) // '_' - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) // 8E - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) // '+' - - PORT_START("X8") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 00 - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 00 - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) - - PORT_START("X9") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // '@', '#' - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 00 - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) - - PORT_START("X10") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 9C, '%' - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 05 - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 7F - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) - - PORT_START("X11") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // ';','.' - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // '!','&' - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 0A - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 00 - - PORT_START("X12") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 95,FE - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 97,FC - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 9D,'$' - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 96,'\' - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 99,84 - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 9A,92 - - PORT_START("X13") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 00 - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 00 - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 00 - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 00 - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 00 - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) // 00 - - PORT_START("X14") - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RCONTROL) // ?? don't look for a new keypress - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LCONTROL) // ?? -INPUT_PORTS_END - -uint32_t micral_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - uint16_t sy=0,ma=0; - - for (uint8_t y = 0; y < 24; y++) - { - for (uint8_t ra = 0; ra < 10; ra++) - { - uint16_t *p = &bitmap.pix(sy++); - - for (uint16_t x = 0; x < 80; x++) - { - uint8_t gfx = 0; - if (ra < 9) - { - uint8_t chr = m_vram[x+ma]; - gfx = m_p_chargen[(chr<<4) | ra ]; - if (((s_curpos & 0xff)==x) && ((s_curpos >> 8)==y)) - gfx ^= 0xff; - } - /* Display a scanline of a character */ - *p++ = BIT(gfx, 7); - *p++ = BIT(gfx, 6); - *p++ = BIT(gfx, 5); - *p++ = BIT(gfx, 4); - *p++ = BIT(gfx, 3); - *p++ = BIT(gfx, 2); - *p++ = BIT(gfx, 1); - *p++ = BIT(gfx, 0); - } - } - ma+=256; - } - return 0; -} - -void micral_state::machine_reset() -{ - // no idea if these are hard-coded, or programmable - m_uart->write_xr(0); - m_uart->write_xr(1); - m_uart->write_swe(0); - m_uart->write_np(1); - m_uart->write_tsb(0); - m_uart->write_nb1(1); - m_uart->write_nb2(1); - m_uart->write_eps(1); - m_uart->write_cs(1); - m_uart->write_cs(0); - - address_space &program = m_maincpu->space(AS_PROGRAM); - program.install_rom(0x0000, 0x07ff, m_rom); // do it here for F3 - m_rom_shadow_tap = program.install_read_tap(0xf800, 0xffff, "rom_shadow_r",[this](offs_t offset, u8 &data, u8 mem_mask) - { - if (!machine().side_effects_disabled()) - { - // delete this tap - m_rom_shadow_tap->remove(); - - // reinstall ram over the rom shadow - m_maincpu->space(AS_PROGRAM).install_ram(0x0000, 0x07ff, m_ram); - } - - // return the original data - return data; - }); -} - -void micral_state::machine_start() -{ - m_vram = make_unique_clear<u8[]>(0x2000); - save_pointer(NAME(m_vram), 0x2000); - save_item(NAME(s_curpos)); - save_item(NAME(s_command)); - save_item(NAME(s_data)); -} - -void micral_state::micral(machine_config &config) -{ - // basic machine hardware - Z80(config, m_maincpu, XTAL(4'000'000)); - m_maincpu->set_addrmap(AS_PROGRAM, &micral_state::mem_map); - // no i/o ports on main cpu - z80_device &keyboard(Z80(config, "keyboard", XTAL(1'000'000))); // freq unknown - keyboard.set_addrmap(AS_PROGRAM, &micral_state::mem_kbd); - keyboard.set_addrmap(AS_IO, &micral_state::io_kbd); - - // video hardware - screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER, rgb_t::green())); - screen.set_refresh_hz(60); - screen.set_vblank_time(ATTOSECONDS_IN_USEC(250)); - screen.set_screen_update(FUNC(micral_state::screen_update)); - screen.set_size(640, 240); - screen.set_visarea(0, 639, 0, 239); - screen.set_palette("palette"); - PALETTE(config, "palette", palette_device::MONOCHROME); - //GFXDECODE(config, "gfxdecode", "palette", gfx_micral); - - CRT5037(config, m_crtc, 4000000 / 8); // xtal freq unknown - m_crtc->set_char_width(8); // unknown - //m_crtc->vsyn_callback().set(TMS5501_TAG, FUNC(tms5501_device::sens_w)); - m_crtc->set_screen("screen"); - - /* sound hardware */ - //SPEAKER(config, "mono").front_center(); - //BEEP(config, m_beep, 2000).add_route(ALL_OUTPUTS, "mono", 0.50); - - AY31015(config, m_uart); // CDP6402 - m_uart->read_si_callback().set("rs232", FUNC(rs232_port_device::rxd_r)); - m_uart->write_so_callback().set("rs232", FUNC(rs232_port_device::write_txd)); - - clock_device &uart_clock(CLOCK(config, "uart_clock", 153600)); - uart_clock.signal_handler().set(m_uart, FUNC(ay31015_device::write_tcp)); - uart_clock.signal_handler().append(m_uart, FUNC(ay31015_device::write_rcp)); - - RS232_PORT(config, "rs232", default_rs232_devices, "keyboard"); -} - -ROM_START( micral ) - ROM_REGION( 0x0800, "maincpu", 0 ) - ROM_LOAD( "8022g.rom", 0x0000, 0x0800, CRC(882732a9) SHA1(3f37b82c450a54aedec209bd46fcbcf131c86313) ) - - ROM_REGION( 0x0400, "keyboard", 0 ) - ROM_LOAD( "2010221.rom", 0x0000, 0x0400, CRC(65123378) SHA1(401f0a648b78bf1662a1cd2546e83ba8e3cb7a42) ) - - // Using the chargen from 'c10' for now. - ROM_REGION( 0x2000, "chargen", 0 ) - ROM_LOAD( "c10_char.bin", 0x0000, 0x2000, BAD_DUMP CRC(cb530b6f) SHA1(95590bbb433db9c4317f535723b29516b9b9fcbf)) -ROM_END - -ROM_START( questarm ) - ROM_REGION( 0x0800, "maincpu", 0 ) - ROM_LOAD( "qm_547_1.rom", 0x0000, 0x0800, CRC(8e6dc953) SHA1(b31375af8c6769578d2000fff3e751e94e7ae4d4) ) - - // using the keyboard ROM from 'micral' for now - ROM_REGION( 0x0400, "keyboard", 0 ) - ROM_LOAD( "2010221.rom", 0x0000, 0x0400, CRC(65123378) SHA1(401f0a648b78bf1662a1cd2546e83ba8e3cb7a42) ) - - // Using the chargen from 'c10' for now. - ROM_REGION( 0x2000, "chargen", 0 ) - ROM_LOAD( "c10_char.bin", 0x0000, 0x2000, BAD_DUMP CRC(cb530b6f) SHA1(95590bbb433db9c4317f535723b29516b9b9fcbf)) -ROM_END - -/* Driver */ - -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1981, micral, 0, 0, micral, micral, micral_state, empty_init, "Bull R2E", "Micral 80-22G", MACHINE_IS_SKELETON | MACHINE_SUPPORTS_SAVE ) -COMP( 1982, questarm, micral, 0, micral, micral, micral_state, empty_init, "Honeywell Bull", "Questar/M", MACHINE_IS_SKELETON | MACHINE_SUPPORTS_SAVE ) |