src/mess/drivers/mccpm.c
| r12949 | r12950 | |
| 4 | 4 | |
| 5 | 5 | 31/08/2010 Skeleton driver. |
| 6 | 6 | 18/11/2010 Connected to a terminal |
| 7 | 28/09/2011 Added more bioses |
| 7 | 8 | |
| 9 | Some Monitor commands (varies between versions): |
| 10 | |
| 11 | B - boot a floppy (^N to regain control) |
| 12 | E - prints a number |
| 13 | I - Select boot drive/set parameters |
| 14 | K,O - display version header |
| 15 | N - newline |
| 16 | Z - print 'EFFF' |
| 17 | |
| 18 | URL for v3.4: http://www.hanshehl.de/mc-prog.htm (German language) |
| 19 | |
| 20 | I/O ports (my guess) |
| 21 | 30 - fdc (1st drive) |
| 22 | 40 - fdc (2nd drive) |
| 23 | F0 - terminal in/out |
| 24 | F1 - terminal status |
| 25 | |
| 26 | SIO? - F0 to F3 |
| 27 | PIO A-Data 0F4h, A-Command 0F5h, B-Data 0F6h, B-Command 0F7h |
| 28 | |
| 29 | 'maincpu' (F59C): unmapped i/o memory write to 00F1 = 01 & FF |
| 30 | 'maincpu' (F59C): unmapped i/o memory write to 00F1 = 00 & FF |
| 31 | 'maincpu' (F59C): unmapped i/o memory write to 00F1 = 03 & FF |
| 32 | 'maincpu' (F59C): unmapped i/o memory write to 00F1 = E1 & FF |
| 33 | 'maincpu' (F59C): unmapped i/o memory write to 00F1 = 04 & FF |
| 34 | 'maincpu' (F59C): unmapped i/o memory write to 00F1 = 4C & FF |
| 35 | 'maincpu' (F59C): unmapped i/o memory write to 00F1 = 05 & FF |
| 36 | 'maincpu' (F59C): unmapped i/o memory write to 00F1 = EA & FF |
| 37 | 'maincpu' (F5A5): unmapped i/o memory write to 00F3 = 01 & FF |
| 38 | 'maincpu' (F5A5): unmapped i/o memory write to 00F3 = 00 & FF |
| 39 | 'maincpu' (F5A5): unmapped i/o memory write to 00F3 = 03 & FF |
| 40 | 'maincpu' (F5A5): unmapped i/o memory write to 00F3 = E1 & FF |
| 41 | 'maincpu' (F5A5): unmapped i/o memory write to 00F3 = 04 & FF |
| 42 | 'maincpu' (F5A5): unmapped i/o memory write to 00F3 = 4C & FF |
| 43 | 'maincpu' (F5A5): unmapped i/o memory write to 00F3 = 05 & FF |
| 44 | 'maincpu' (F5A5): unmapped i/o memory write to 00F3 = EA & FF |
| 45 | 'maincpu' (F5A9): unmapped i/o memory write to 00F5 = CF & FF |
| 46 | 'maincpu' (F5AD): unmapped i/o memory write to 00F5 = 7F & FF |
| 47 | 'maincpu' (F5B1): unmapped i/o memory write to 00F7 = CF & FF |
| 48 | 'maincpu' (F5B4): unmapped i/o memory write to 00F7 = 00 & FF |
| 49 | 'maincpu' (F149): unmapped i/o memory write to 0040 = D0 & FF |
| 50 | 'maincpu' (F14B): unmapped i/o memory write to 0030 = D0 & FF |
| 51 | |
| 8 | 52 | ****************************************************************************/ |
| 9 | 53 | #define ADDRESS_MAP_MODERN |
| 10 | 54 | |
| r12949 | r12950 | |
| 25 | 69 | |
| 26 | 70 | required_device<cpu_device> m_maincpu; |
| 27 | 71 | required_device<device_t> m_terminal; |
| 28 | | DECLARE_READ8_MEMBER( mccpm_f0_r ); |
| 29 | | DECLARE_WRITE8_MEMBER( kbd_put ); |
| 30 | | UINT8 *m_ram; |
| 72 | DECLARE_READ8_MEMBER(mccpm_f0_r); |
| 73 | DECLARE_READ8_MEMBER(mccpm_f1_r); |
| 74 | DECLARE_WRITE8_MEMBER(kbd_put); |
| 75 | UINT8 *m_p_ram; |
| 31 | 76 | UINT8 m_term_data; |
| 32 | 77 | virtual void machine_reset(); |
| 33 | 78 | }; |
| r12949 | r12950 | |
| 41 | 86 | return ret; |
| 42 | 87 | } |
| 43 | 88 | |
| 89 | // bit 0 - key pressed |
| 90 | // bit 2 - ready to send to terminal |
| 91 | READ8_MEMBER( mccpm_state::mccpm_f1_r ) |
| 92 | { |
| 93 | return (m_term_data) ? 5 : 4; |
| 94 | } |
| 95 | |
| 44 | 96 | static ADDRESS_MAP_START(mccpm_mem, AS_PROGRAM, 8, mccpm_state) |
| 45 | 97 | ADDRESS_MAP_UNMAP_HIGH |
| 46 | | AM_RANGE(0x0000, 0xffff) AM_RAM AM_BASE(m_ram) |
| 98 | AM_RANGE(0x0000, 0xffff) AM_RAM AM_BASE(m_p_ram) |
| 47 | 99 | ADDRESS_MAP_END |
| 48 | 100 | |
| 49 | 101 | static ADDRESS_MAP_START( mccpm_io, AS_IO, 8, mccpm_state) |
| 50 | 102 | ADDRESS_MAP_UNMAP_HIGH |
| 51 | 103 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 52 | 104 | AM_RANGE(0xf0, 0xf0) AM_READ(mccpm_f0_r) AM_DEVWRITE_LEGACY(TERMINAL_TAG, terminal_write) |
| 105 | AM_RANGE(0xf1, 0xf1) AM_READ(mccpm_f1_r) |
| 53 | 106 | ADDRESS_MAP_END |
| 54 | 107 | |
| 55 | 108 | /* Input ports */ |
| r12949 | r12950 | |
| 57 | 110 | INPUT_PORTS_END |
| 58 | 111 | |
| 59 | 112 | |
| 60 | | MACHINE_RESET_MEMBER(mccpm_state) |
| 113 | MACHINE_RESET_MEMBER( mccpm_state ) |
| 61 | 114 | { |
| 62 | 115 | UINT8* bios = machine().region("maincpu")->base(); |
| 63 | | memcpy(m_ram, bios, 0x1000); |
| 116 | memcpy(m_p_ram, bios, 0x1000); |
| 64 | 117 | } |
| 65 | 118 | |
| 66 | 119 | WRITE8_MEMBER( mccpm_state::kbd_put ) |
| r12949 | r12950 | |
| 87 | 140 | /* ROM definition */ |
| 88 | 141 | ROM_START( mccpm ) |
| 89 | 142 | ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) |
| 90 | | ROM_LOAD( "mon36.j15", 0x0000, 0x1000, CRC(9c441537) SHA1(f95bad52d9392b8fc9d9b8779b7b861672a0022b)) |
| 143 | ROM_SYSTEM_BIOS(0, "v36", "V3.6") |
| 144 | ROMX_LOAD( "mon36.j15", 0x0000, 0x1000, CRC(9c441537) SHA1(f95bad52d9392b8fc9d9b8779b7b861672a0022b), ROM_BIOS(1)) |
| 145 | ROM_SYSTEM_BIOS(1, "v34", "V3.4") |
| 146 | ROMX_LOAD( "monhemc.bin", 0x0000, 0x1000, CRC(cae7b56e) SHA1(1f40be9491a595e6705099a452743cc0d49bfce8), ROM_BIOS(2)) |
| 147 | ROM_SYSTEM_BIOS(2, "v34a", "V3.4 (alt)") |
| 148 | ROMX_LOAD( "mc01mon.bin", 0x0000, 0x0d00, CRC(d1c89043) SHA1(f52a0ed3793dde0de74596be7339233b6a1770af), ROM_BIOS(3)) |
| 91 | 149 | ROM_END |
| 92 | 150 | |
| 93 | 151 | /* Driver */ |
| 94 | 152 | |
| 95 | | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ |
| 96 | | COMP( 1981, mccpm, 0, 0, mccpm, mccpm, 0, "GRAF Elektronik Systeme GmbH", "mc-CP/M-Computer", GAME_NOT_WORKING | GAME_NO_SOUND) |
| 97 | | |
| 153 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ |
| 154 | COMP( 1981, mccpm, 0, 0, mccpm, mccpm, 0, "GRAF Elektronik Systeme GmbH", "mc-CP/M-Computer", GAME_NOT_WORKING | GAME_NO_SOUND) |