trunk/src/mess/drivers/pt68k4.c
r25464 | r25465 | |
1 | 1 | /*************************************************************************** |
2 | 2 | |
3 | | Peripheral Technology PT68K4 |
| 3 | Peripheral Technology PT68K4 |
4 | 4 | |
5 | | 03/01/2011 Skeleton driver. |
| 5 | 2011-01-03 Skeleton driver. |
| 6 | 2013-09-30 Connected to a terminal |
6 | 7 | |
7 | 8 | This has the appearance of a PC, including pc power supply, slots, etc |
8 | 9 | on a conventional pc-like motherboard and case. |
9 | 10 | |
10 | 11 | Some pics: http://www.wormfood.net/old_computers/ |
11 | 12 | |
| 13 | Note: bios 0 works with the terminal. When first started, press Enter |
| 14 | to get the logo. Enter HE to get a list of commands. Terminate |
| 15 | numeric entries with a Space (not Enter!). |
| 16 | |
12 | 17 | ****************************************************************************/ |
13 | 18 | |
14 | 19 | #include "emu.h" |
15 | 20 | #include "cpu/m68000/m68000.h" |
| 21 | #include "machine/terminal.h" |
16 | 22 | |
17 | 23 | class pt68k4_state : public driver_device |
18 | 24 | { |
19 | 25 | public: |
20 | 26 | pt68k4_state(const machine_config &mconfig, device_type type, const char *tag) |
21 | | : driver_device(mconfig, type, tag), |
22 | | m_p_ram(*this, "p_ram"), |
23 | | m_maincpu(*this, "maincpu") { } |
| 27 | : driver_device(mconfig, type, tag) |
| 28 | , m_p_base(*this, "rambase") |
| 29 | , m_p_upper(*this, "upper_ram") |
| 30 | , m_maincpu(*this, "maincpu") |
| 31 | , m_terminal(*this, TERMINAL_TAG) |
| 32 | { } |
24 | 33 | |
25 | | required_shared_ptr<UINT16> m_p_ram; |
| 34 | DECLARE_WRITE8_MEMBER(kbd_put); |
| 35 | DECLARE_READ16_MEMBER(status_r); |
| 36 | DECLARE_READ16_MEMBER(nop_r); |
| 37 | //virtual void video_start(); |
| 38 | //UINT32 screen_update_pt68k4(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 39 | private: |
26 | 40 | virtual void machine_reset(); |
27 | | virtual void video_start(); |
28 | | UINT32 screen_update_pt68k4(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 41 | required_shared_ptr<UINT16> m_p_base; |
| 42 | required_shared_ptr<UINT16> m_p_upper; |
29 | 43 | required_device<cpu_device> m_maincpu; |
| 44 | required_device<generic_terminal_device> m_terminal; |
30 | 45 | }; |
31 | 46 | |
32 | 47 | static ADDRESS_MAP_START(pt68k4_mem, AS_PROGRAM, 16, pt68k4_state) |
33 | 48 | ADDRESS_MAP_UNMAP_HIGH |
34 | | AM_RANGE(0x00000000, 0x0007ffff) AM_RAM AM_SHARE("p_ram") // 512 KB RAM / ROM at boot |
35 | | AM_RANGE(0x00f00000, 0x00f0ffff) AM_ROM AM_MIRROR(0xf0000) AM_REGION("user1", 0) |
36 | | AM_RANGE(0x00ff0000, 0x00ffffff) AM_RAM |
| 49 | AM_RANGE(0x000000, 0x07ffff) AM_RAM AM_SHARE("rambase") // 512 KB RAM / ROM at boot |
| 50 | AM_RANGE(0xf80000, 0xf8ffff) AM_ROM AM_REGION("roms", 0) |
| 51 | AM_RANGE(0xfe0002, 0xfe0003) AM_READ(status_r) |
| 52 | AM_RANGE(0xfe0006, 0xfe0007) AM_DEVWRITE8(TERMINAL_TAG, generic_terminal_device, write, 0x00ff) |
| 53 | AM_RANGE(0xfe0012, 0xfe0013) AM_READ(nop_r) |
| 54 | AM_RANGE(0xff0000, 0xffffff) AM_RAM AM_SHARE("upper_ram") |
37 | 55 | ADDRESS_MAP_END |
38 | 56 | |
39 | 57 | /* Input ports */ |
r25464 | r25465 | |
43 | 61 | |
44 | 62 | void pt68k4_state::machine_reset() |
45 | 63 | { |
46 | | UINT8* user1 = memregion("user1")->base(); |
| 64 | UINT8* user1 = memregion("roms")->base(); |
| 65 | memcpy((UINT8*)m_p_base.target(), user1, 8); |
47 | 66 | |
48 | | memcpy((UINT8*)m_p_ram.target(), user1, 8); |
49 | | |
50 | 67 | m_maincpu->reset(); |
51 | 68 | } |
52 | 69 | |
53 | | void pt68k4_state::video_start() |
| 70 | //void pt68k4_state::video_start() |
| 71 | //{ |
| 72 | //} |
| 73 | |
| 74 | //UINT32 pt68k4_state::screen_update_pt68k4(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 75 | //{ |
| 76 | // return 0; |
| 77 | //} |
| 78 | |
| 79 | READ16_MEMBER( pt68k4_state::status_r ) |
54 | 80 | { |
| 81 | return 0x8c; |
55 | 82 | } |
56 | 83 | |
57 | | UINT32 pt68k4_state::screen_update_pt68k4(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 84 | READ16_MEMBER( pt68k4_state::nop_r ) |
58 | 85 | { |
59 | 86 | return 0; |
60 | 87 | } |
61 | 88 | |
| 89 | WRITE8_MEMBER( pt68k4_state::kbd_put ) |
| 90 | { |
| 91 | m_p_upper[0x64f] = 0x100 | data; |
| 92 | } |
| 93 | |
| 94 | static GENERIC_TERMINAL_INTERFACE( terminal_intf ) |
| 95 | { |
| 96 | DEVCB_DRIVER_MEMBER(pt68k4_state, kbd_put) |
| 97 | }; |
| 98 | |
62 | 99 | static MACHINE_CONFIG_START( pt68k4, pt68k4_state ) |
63 | 100 | /* basic machine hardware */ |
64 | 101 | MCFG_CPU_ADD("maincpu",M68000, XTAL_16MHz) |
65 | 102 | MCFG_CPU_PROGRAM_MAP(pt68k4_mem) |
66 | 103 | |
67 | | |
68 | 104 | /* video hardware */ |
69 | | MCFG_SCREEN_ADD("screen", RASTER) |
70 | | MCFG_SCREEN_REFRESH_RATE(50) |
71 | | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ |
72 | | MCFG_SCREEN_SIZE(640, 480) |
73 | | MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) |
74 | | MCFG_SCREEN_UPDATE_DRIVER(pt68k4_state, screen_update_pt68k4) |
75 | | MCFG_PALETTE_LENGTH(2) |
76 | | MCFG_PALETTE_INIT_OVERRIDE(driver_device, black_and_white) |
| 105 | MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf) |
| 106 | //MCFG_SCREEN_ADD("screen", RASTER) |
| 107 | //MCFG_SCREEN_REFRESH_RATE(50) |
| 108 | //MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ |
| 109 | //MCFG_SCREEN_SIZE(640, 480) |
| 110 | //MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) |
| 111 | //MCFG_SCREEN_UPDATE_DRIVER(pt68k4_state, screen_update_pt68k4) |
| 112 | //MCFG_PALETTE_LENGTH(2) |
| 113 | //MCFG_PALETTE_INIT_OVERRIDE(driver_device, black_and_white) |
77 | 114 | MACHINE_CONFIG_END |
78 | 115 | |
79 | 116 | /* ROM definition */ |
80 | 117 | ROM_START( pt68k4 ) |
81 | | ROM_REGION( 0x10000, "user1", ROMREGION_ERASEFF ) |
| 118 | ROM_REGION16_BE( 0x10000, "roms", 0 ) |
82 | 119 | ROM_SYSTEM_BIOS( 0, "humbug", "Humbug" ) |
83 | | ROMX_LOAD( "humpta40.bin", 0x0001, 0x8000, CRC(af67ff64) SHA1(da9fa31338c6847bb0e66118679b1ec01f6dc30b), ROM_SKIP(1) | ROM_BIOS(1)) |
84 | | ROMX_LOAD( "humpta41.bin", 0x0000, 0x8000, CRC(a8b16e27) SHA1(218802f6e20d14cff736bb7423f06ce2f66e074c), ROM_SKIP(1) | ROM_BIOS(1)) |
| 120 | ROMX_LOAD( "humpta40.bin", 0x0000, 0x8000, CRC(af67ff64) SHA1(da9fa31338c6847bb0e66118679b1ec01f6dc30b), ROM_SKIP(1) | ROM_BIOS(1)) |
| 121 | ROMX_LOAD( "humpta41.bin", 0x0001, 0x8000, CRC(a8b16e27) SHA1(218802f6e20d14cff736bb7423f06ce2f66e074c), ROM_SKIP(1) | ROM_BIOS(1)) |
85 | 122 | ROM_SYSTEM_BIOS( 1, "monk", "Monk" ) |
86 | | ROMX_LOAD( "monk_0.bin", 0x0001, 0x8000, CRC(420d6a4b) SHA1(fca8c53c9c3c8ebd09370499cf34f4cc75ed9463), ROM_SKIP(1) | ROM_BIOS(2)) |
87 | | ROMX_LOAD( "monk_1.bin", 0x0000, 0x8000, CRC(fc495e82) SHA1(f7b720d87db4d72a23e6c42d2cdd03216db04b60), ROM_SKIP(1) | ROM_BIOS(2)) |
| 123 | ROMX_LOAD( "monk_0.bin", 0x0000, 0x8000, CRC(420d6a4b) SHA1(fca8c53c9c3c8ebd09370499cf34f4cc75ed9463), ROM_SKIP(1) | ROM_BIOS(2)) |
| 124 | ROMX_LOAD( "monk_1.bin", 0x0001, 0x8000, CRC(fc495e82) SHA1(f7b720d87db4d72a23e6c42d2cdd03216db04b60), ROM_SKIP(1) | ROM_BIOS(2)) |
88 | 125 | ROM_END |
89 | 126 | |
90 | 127 | /* Driver */ |
91 | 128 | |
92 | | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ |
| 129 | /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ |
93 | 130 | COMP( 1990, pt68k4, 0, 0, pt68k4, pt68k4, driver_device, 0, "Peripheral Technology", "PT68K4", GAME_NOT_WORKING | GAME_NO_SOUND) |