1 // license:BSD-3-Clause
2 // copyright-holders:Justin Kerk
3 /***************************************************************************
4 
5     Tektronix TekXpress XP33x series X terminals
6 
7     Skeleton driver.
8 
9 ****************************************************************************/
10 
11 /*
12 
13     TODO:
14 
15     - everything
16 
17     Technical info:
18     https://www.linux-mips.org/wiki/Tektronix_TekXPress_XP338
19     https://web.archive.org/web/20061013084616/http://tekxp-linux.hopto.org/pmwiki/pmwiki.php/Hardware/XP33x
20     http://bio.gsi.de/DOCS/NCD/xp.html
21 
22     CPU: IDT 79R3052E (MIPS I R3000 embedded core. Big Endian. With MMU, without FPU.)
23     Graphic Chipset: Texas Instruments (34020AGBL-40) TI 34010 (TIGA)
24     Graphic RAMDAC: Brooktree BT458LPJ135 (Supported in XFree86)
25     RAM: 4MB onboard, upgradeable to 52MB, 3 slots for 5V FPM NoParity SIMMs
26     ROM: 256Kb, 2 x 27c1024 (64Kx16), with BootMonitor
27     Peripherals:
28         1x Ethernet Port (AUI and UTP) -- AMD AM79C98 Chipset
29         2x Serial Ports -- Philips SCC2692 Dual UART chipset
30         Keyboard and Mouse controller is a generic PC-Style i8742 with Phoenix BIOS.
31         1x "ERGO" Port (Combined Monitor, Keyboard, Mouse)
32     16K (2K*8) EEPROM is SEEQ NQ2816A-250, AT28C16 compatible. Contains Boot Monitor settings. The content is compressed.
33     Micron MT56C0816 - ??? Flash
34 
35 */
36 
37 
38 #include "emu.h"
39 #include "cpu/mips/mips1.h"
40 #include "cpu/tms34010/tms34010.h"
41 #include "emupal.h"
42 #include "screen.h"
43 
44 
45 #define SCREEN_TAG "screen"
46 
47 class tekxp330_state : public driver_device
48 {
49 public:
tekxp330_state(const machine_config & mconfig,device_type type,const char * tag)50 	tekxp330_state(const machine_config &mconfig, device_type type, const char *tag)
51 		: driver_device(mconfig, type, tag) { }
52 
53 	void tekxp330(machine_config &config);
54 
55 private:
56 	virtual void machine_start() override;
57 
58 	virtual void video_start() override;
59 	uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
60 	void cpu_map(address_map &map);
61 	void tms_map(address_map &map);
62 };
63 
64 /* Memory Maps */
65 
cpu_map(address_map & map)66 void tekxp330_state::cpu_map(address_map &map)
67 {
68 	map(0x00000000, 0x003fffff).ram();
69 	map(0x1fc00000, 0x1fdfffff).rom().region("maincpu", 0);
70 }
71 
tms_map(address_map & map)72 void tekxp330_state::tms_map(address_map &map)
73 {
74 }
75 
76 /* Input Ports */
77 
INPUT_PORTS_START(tekxp330)78 static INPUT_PORTS_START( tekxp330 )
79 INPUT_PORTS_END
80 
81 /* Video */
82 
83 void tekxp330_state::video_start()
84 {
85 }
86 
screen_update(screen_device & screen,bitmap_rgb32 & bitmap,const rectangle & cliprect)87 uint32_t tekxp330_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
88 {
89 	return 0;
90 }
91 
92 /* Machine Initialization */
93 
machine_start()94 void tekxp330_state::machine_start()
95 {
96 }
97 
98 /* Machine Driver */
99 
tekxp330(machine_config & config)100 void tekxp330_state::tekxp330(machine_config &config)
101 {
102 	/* basic machine hardware */
103 	r3052e_device &maincpu(R3052E(config, "maincpu", XTAL(20'000'000))); /* IDT 79R3052E, clock unknown */
104 	maincpu.set_endianness(ENDIANNESS_BIG);
105 	maincpu.set_addrmap(AS_PROGRAM, &tekxp330_state::cpu_map);
106 
107 	tms34010_device &tms(TMS34010(config, "tms", XTAL(40'000'000))); /* clock unknown */
108 	tms.set_addrmap(AS_PROGRAM, &tekxp330_state::tms_map);
109 
110 	/* video hardware */
111 	screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER));
112 	screen.set_refresh_hz(60);
113 	screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
114 	screen.set_screen_update(FUNC(tekxp330_state::screen_update));
115 	screen.set_size(640, 480);
116 	screen.set_visarea(0, 640-1, 0, 480-1);
117 
118 	PALETTE(config, "palette").set_entries(64);
119 }
120 
121 /* ROMs */
122 
123 ROM_START( tekxp330 )
124 	ROM_REGION( 0x200000, "maincpu", 0 )
125 	/* TekXpress XP300 Boot ROM V1.0  Thu Feb 6 14:50:16 PST 1992 */
126 	ROM_LOAD32_DWORD( "xp300.bin", 0x000000, 0x200000, CRC(9a324588) SHA1(a6e10275f8215f446be91128bab4c643693da653) )
127 ROM_END
128 
129 /* System Drivers */
130 
131 //    YEAR  NAME      PARENT  COMPAT  MACHINE   INPUT     CLASS           INIT        COMPANY      FULLNAME           FLAGS
132 COMP( 1992, tekxp330, 0,      0,      tekxp330, tekxp330, tekxp330_state, empty_init, "Tektronix", "TekXpress XP330", MACHINE_IS_SKELETON )
133