src/emu/video/mc6845.c
| r9781 | r9782 | |
| 39 | 39 | TYPE_H46505, |
| 40 | 40 | TYPE_HD6845, |
| 41 | 41 | TYPE_SY6545_1, |
| 42 | TYPE_SY6845E, |
| 42 | 43 | |
| 43 | 44 | NUM_TYPES |
| 44 | 45 | }; |
| 45 | 46 | |
| 46 | 47 | /* mode macros */ |
| 47 | | |
| 48 | 48 | #define MODE_TRANSPARENT(d) (((d)->mode_control & 0x08) != 0) |
| 49 | 49 | #define MODE_TRANSPARENT_PHI2(d) (((d)->mode_control & 0x88) == 0x88) |
| 50 | 50 | /* FIXME: not supported yet */ |
| 51 | 51 | #define MODE_TRANSPARENT_BLANK(d) (((d)->mode_control & 0x88) == 0x08) |
| 52 | 52 | #define MODE_UPDATE_STROBE(d) (((d)->mode_control & 0x40) != 0) |
| 53 | #define MODE_CURSOR_SKEW(d) (((d)->mode_control & 0x20) != 0) |
| 54 | #define MODE_DISPLAY_ENABLE_SKEW(d) (((d)->mode_control & 0x10) != 0) |
| 55 | #define MODE_ROW_COLUMN_ADDRESSING(d) (((d)->mode_control & 0x04) != 0) |
| 53 | 56 | |
| 54 | | /* capabilities */ /* MC6845 MC6845-1 C6545-1 R6545-1 H46505 HD6845 SY6545-1 */ |
| 55 | | static const int supports_disp_start_addr_r[NUM_TYPES] = { TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }; |
| 56 | | static const int supports_vert_sync_width[NUM_TYPES] = { FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE }; |
| 57 | | static const int supports_status_reg_d5[NUM_TYPES] = { FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE }; |
| 58 | | static const int supports_status_reg_d6[NUM_TYPES] = { FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE }; |
| 57 | /* capabilities */ /* MC6845 MC6845-1 C6545-1 R6545-1 H46505 HD6845 SY6545-1 SY6845E */ |
| 58 | static const int supports_disp_start_addr_r[NUM_TYPES] = { TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }; |
| 59 | static const int supports_vert_sync_width[NUM_TYPES] = { FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE }; |
| 60 | static const int supports_status_reg_d5[NUM_TYPES] = { FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE }; |
| 61 | static const int supports_status_reg_d6[NUM_TYPES] = { FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE }; |
| 59 | 62 | |
| 60 | 63 | /* FIXME: check other variants */ |
| 61 | | static const int supports_status_reg_d7[NUM_TYPES] = { FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE }; |
| 64 | static const int supports_status_reg_d7[NUM_TYPES] = { FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, TRUE }; |
| 62 | 65 | |
| 63 | 66 | /* FIXME: check other variants */ |
| 64 | | static const int supports_transparent[NUM_TYPES] = { FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE }; |
| 67 | static const int supports_transparent[NUM_TYPES] = { FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, TRUE }; |
| 65 | 68 | |
| 66 | 69 | |
| 67 | 70 | typedef struct _mc6845_t mc6845_t; |
| r9781 | r9782 | |
| 169 | 172 | (device->type() == R6545_1) || |
| 170 | 173 | (device->type() == H46505) || |
| 171 | 174 | (device->type() == HD6845) || |
| 172 | | (device->type() == SY6545_1)); |
| 175 | (device->type() == SY6545_1) || |
| 176 | (device->type() == SY6845E)); |
| 173 | 177 | |
| 174 | 178 | return (mc6845_t *)downcast<legacy_device_base *>(device)->token(); |
| 175 | 179 | } |
| r9781 | r9782 | |
| 982 | 986 | common_start(device, TYPE_SY6545_1); |
| 983 | 987 | } |
| 984 | 988 | |
| 989 | static DEVICE_START( sy6845e ) |
| 990 | { |
| 991 | common_start(device, TYPE_SY6845E); |
| 992 | } |
| 985 | 993 | |
| 994 | |
| 986 | 995 | static DEVICE_RESET( mc6845 ) |
| 987 | 996 | { |
| 988 | 997 | mc6845_t *mc6845 = get_safe_token(device); |
| r9781 | r9782 | |
| 1062 | 1071 | switch (state) |
| 1063 | 1072 | { |
| 1064 | 1073 | /* --- the following bits of info are returned as NULL-terminated strings --- */ |
| 1065 | | case DEVINFO_STR_NAME: strcpy(info->s, "Motorla 6845-1"); break; |
| 1074 | case DEVINFO_STR_NAME: strcpy(info->s, "Motorola 6845-1"); break; |
| 1066 | 1075 | |
| 1067 | 1076 | /* --- the following bits of info are returned as pointers to data or functions --- */ |
| 1068 | 1077 | case DEVINFO_FCT_START: info->start = DEVICE_START_NAME(mc6845_1); break; |
| r9781 | r9782 | |
| 1147 | 1156 | } |
| 1148 | 1157 | |
| 1149 | 1158 | |
| 1159 | DEVICE_GET_INFO( sy6845e ) |
| 1160 | { |
| 1161 | switch (state) |
| 1162 | { |
| 1163 | /* --- the following bits of info are returned as NULL-terminated strings --- */ |
| 1164 | case DEVINFO_STR_NAME: strcpy(info->s, "Synertek 6845E"); break; |
| 1165 | |
| 1166 | /* --- the following bits of info are returned as pointers to data or functions --- */ |
| 1167 | case DEVINFO_FCT_START: info->start = DEVICE_START_NAME(sy6845e); break; |
| 1168 | |
| 1169 | default: DEVICE_GET_INFO_CALL(mc6845); break; |
| 1170 | } |
| 1171 | } |
| 1172 | |
| 1150 | 1173 | DEFINE_LEGACY_DEVICE(MC6845, mc6845); |
| 1151 | 1174 | DEFINE_LEGACY_DEVICE(MC6845_1, mc6845_1); |
| 1152 | 1175 | DEFINE_LEGACY_DEVICE(R6545_1, r6545_1); |
| r9781 | r9782 | |
| 1154 | 1177 | DEFINE_LEGACY_DEVICE(H46505, h46505); |
| 1155 | 1178 | DEFINE_LEGACY_DEVICE(HD6845, hd6845); |
| 1156 | 1179 | DEFINE_LEGACY_DEVICE(SY6545_1, sy6545_1); |
| 1180 | DEFINE_LEGACY_DEVICE(SY6845E, sy6845e); |
src/mess/machine/abc99.c
| r9781 | r9782 | |
| 22 | 22 | Notes: |
| 23 | 23 | Relevant IC's shown. |
| 24 | 24 | |
| 25 | | CPU0 - STMicro ET8035N-6 |
| 26 | | CPU1 - STMicro ET8035N-6 |
| 27 | | ROM0 - Texas Instruments TMS2516JL-16 "107268-16" |
| 28 | | ROM1 - STMicro ET2716Q-1 "107268-17" |
| 29 | | GI - General Insruments 321239007 "4=7" |
| 30 | | CN1 - DB15 mouse connector |
| 31 | | CN1 - 12 pin PCB header |
| 25 | CPU0 - STMicro ET8035N-6 8035 CPU |
| 26 | CPU1 - STMicro ET8035N-6 8035 CPU |
| 27 | ROM0 - Texas Instruments TMS2516JL-16 2Kx8 ROM "107268-16" |
| 28 | ROM1 - STMicro ET2716Q-1 2Kx8 ROM "107268-17" |
| 29 | GI - General Instruments 321239007 keyboard chip "4=7" |
| 30 | CN1 - DB15 connector, Luxor ABC R8 (3 button mouse) |
| 31 | CN2 - 12 pin PCB header, keyboard data cable |
| 32 | SW1 - reset switch? |
| 32 | 33 | |
| 33 | 34 | */ |
| 34 | 35 | |
| 36 | #define ADDRESS_MAP_MODERN |
| 37 | |
| 35 | 38 | #include "emu.h" |
| 36 | 39 | #include "abc99.h" |
| 37 | 40 | #include "cpu/mcs48/mcs48.h" |
| r9781 | r9782 | |
| 43 | 46 | // MACROS / CONSTANTS |
| 44 | 47 | //************************************************************************** |
| 45 | 48 | |
| 49 | #define I8035_Z2_TAG "z2" |
| 46 | 50 | #define I8035_Z5_TAG "z5" |
| 47 | | #define I8035_Z2_TAG "z2" |
| 48 | 51 | |
| 49 | 52 | |
| 50 | 53 | |
| r9781 | r9782 | |
| 79 | 82 | //------------------------------------------------- |
| 80 | 83 | |
| 81 | 84 | ROM_START( abc99 ) |
| 85 | ROM_REGION( 0x800, I8035_Z2_TAG, 0 ) |
| 86 | ROM_LOAD( "107268-17.z3", 0x000, 0x800, CRC(2f60cc35) SHA1(ebc6af9cd0a49a0d01698589370e628eebb6221c) ) |
| 87 | |
| 82 | 88 | ROM_REGION( 0x800, I8035_Z5_TAG, 0 ) |
| 83 | 89 | ROM_LOAD( "107268-16.z6", 0x000, 0x800, CRC(785ec0c6) SHA1(0b261beae20dbc06fdfccc50b19ea48b5b6e22eb) ) |
| 84 | 90 | |
| 85 | | ROM_REGION( 0x800, I8035_Z2_TAG, 0 ) |
| 86 | | ROM_LOAD( "107268-17.z3", 0x000, 0x800, CRC(2f60cc35) SHA1(ebc6af9cd0a49a0d01698589370e628eebb6221c) ) |
| 87 | | |
| 88 | 91 | ROM_REGION( 0x1800, "investigate", 0) |
| 89 | 92 | ROM_LOAD( "106819-09.bin", 0x0000, 0x1000, CRC(ffe32a71) SHA1(fa2ce8e0216a433f9bbad0bdd6e3dc0b540f03b7) ) |
| 90 | 93 | ROM_LOAD( "107268-64.bin", 0x1000, 0x0800, CRC(e33683ae) SHA1(0c1d9e320f82df05f4804992ef6f6f6cd20623f3) ) |
| r9781 | r9782 | |
| 102 | 105 | |
| 103 | 106 | |
| 104 | 107 | //------------------------------------------------- |
| 105 | | // ADDRESS_MAP( abc99_z5_mem ) |
| 108 | // ADDRESS_MAP( abc99_z2_mem ) |
| 106 | 109 | //------------------------------------------------- |
| 107 | 110 | |
| 108 | | static ADDRESS_MAP_START( abc99_z5_mem, ADDRESS_SPACE_PROGRAM, 8 ) |
| 109 | | AM_RANGE(0x0000, 0x07ff) AM_ROM AM_REGION("abc99:z5", 0) |
| 111 | static ADDRESS_MAP_START( abc99_z2_mem, ADDRESS_SPACE_PROGRAM, 8, abc99_device ) |
| 112 | AM_RANGE(0x0000, 0x07ff) AM_ROM AM_REGION("abc99:z2", 0) |
| 110 | 113 | ADDRESS_MAP_END |
| 111 | 114 | |
| 112 | 115 | |
| 113 | 116 | //------------------------------------------------- |
| 114 | | // ADDRESS_MAP( abc99_z3_mem ) |
| 117 | // ADDRESS_MAP( abc99_z2_io ) |
| 115 | 118 | //------------------------------------------------- |
| 116 | 119 | |
| 117 | | static ADDRESS_MAP_START( abc99_z2_mem, ADDRESS_SPACE_PROGRAM, 8 ) |
| 118 | | AM_RANGE(0x0000, 0x07ff) AM_ROM AM_REGION("abc99:z2", 0) |
| 120 | static ADDRESS_MAP_START( abc99_z2_io, ADDRESS_SPACE_IO, 8, abc99_device ) |
| 121 | AM_RANGE(0x30, 0x30) AM_READ_PORT("X0") AM_WRITENOP |
| 122 | AM_RANGE(0x31, 0x31) AM_READ_PORT("X1") AM_WRITENOP |
| 123 | AM_RANGE(0x32, 0x32) AM_READ_PORT("X2") AM_WRITENOP |
| 124 | AM_RANGE(0x33, 0x33) AM_READ_PORT("X3") AM_WRITENOP |
| 125 | AM_RANGE(0x34, 0x34) AM_READ_PORT("X4") AM_WRITENOP |
| 126 | AM_RANGE(0x35, 0x35) AM_READ_PORT("X5") AM_WRITENOP |
| 127 | AM_RANGE(0x36, 0x36) AM_READ_PORT("X6") AM_WRITENOP |
| 128 | AM_RANGE(0x37, 0x37) AM_READ_PORT("X7") AM_WRITENOP |
| 129 | AM_RANGE(0x38, 0x38) AM_READ_PORT("X8") AM_WRITENOP |
| 130 | AM_RANGE(0x39, 0x39) AM_READ_PORT("X9") AM_WRITENOP |
| 131 | AM_RANGE(0x3a, 0x3a) AM_READ_PORT("X10") AM_WRITENOP |
| 132 | AM_RANGE(0x3b, 0x3b) AM_READ_PORT("X11") AM_WRITENOP |
| 133 | AM_RANGE(0x3c, 0x3c) AM_READ_PORT("X12") AM_WRITENOP |
| 134 | AM_RANGE(0x3d, 0x3d) AM_READ_PORT("X13") AM_WRITENOP |
| 135 | AM_RANGE(0x3e, 0x3e) AM_READ_PORT("X14") AM_WRITENOP |
| 136 | AM_RANGE(0x3f, 0x3f) AM_READ_PORT("X15") AM_WRITENOP |
| 137 | // AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_DEVWRITE(DEVICE_SELF, abc99_device, z2_p1_w) |
| 138 | // AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_DEVREAD(DEVICE_SELF, abc99_device, z2_t1_r) |
| 119 | 139 | ADDRESS_MAP_END |
| 120 | 140 | |
| 121 | 141 | |
| 122 | 142 | //------------------------------------------------- |
| 123 | | // ADDRESS_MAP( abc99_z5_io ) |
| 143 | // ADDRESS_MAP( abc99_z5_mem ) |
| 124 | 144 | //------------------------------------------------- |
| 125 | 145 | |
| 126 | | static ADDRESS_MAP_START( abc99_z5_io, ADDRESS_SPACE_IO, 8 ) |
| 146 | static ADDRESS_MAP_START( abc99_z5_mem, ADDRESS_SPACE_PROGRAM, 8, abc99_device ) |
| 147 | AM_RANGE(0x0000, 0x07ff) AM_ROM AM_REGION("abc99:z5", 0) |
| 127 | 148 | ADDRESS_MAP_END |
| 128 | 149 | |
| 129 | 150 | |
| 130 | 151 | //------------------------------------------------- |
| 131 | | // ADDRESS_MAP( abc99_z3_io ) |
| 152 | // ADDRESS_MAP( abc99_z5_io ) |
| 132 | 153 | //------------------------------------------------- |
| 133 | 154 | |
| 134 | | static ADDRESS_MAP_START( abc99_z2_io, ADDRESS_SPACE_IO, 8 ) |
| 155 | static ADDRESS_MAP_START( abc99_z5_io, ADDRESS_SPACE_IO, 8, abc99_device ) |
| 156 | // AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_DEVREAD(DEVICE_SELF, abc99_device, z5_p1_r) |
| 157 | // AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_DEVWRITE(DEVICE_SELF, abc99_device, z5_p2_w) |
| 158 | // AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_DEVWRITE(DEVICE_SELF, abc99_device, z5_t0_w) |
| 159 | // AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_DEVREAD(DEVICE_SELF, abc99_device, z5_t1_r) |
| 135 | 160 | ADDRESS_MAP_END |
| 136 | 161 | |
| 137 | 162 | |
| r9781 | r9782 | |
| 140 | 165 | //------------------------------------------------- |
| 141 | 166 | |
| 142 | 167 | static MACHINE_CONFIG_FRAGMENT( abc99 ) |
| 168 | // keyboard CPU |
| 169 | MDRV_CPU_ADD(I8035_Z2_TAG, I8035, XTAL_6MHz) |
| 170 | MDRV_CPU_PROGRAM_MAP(abc99_z2_mem) |
| 171 | MDRV_CPU_IO_MAP(abc99_z2_io) |
| 172 | |
| 173 | // mouse CPU |
| 143 | 174 | MDRV_CPU_ADD(I8035_Z5_TAG, I8035, XTAL_6MHz) |
| 144 | 175 | MDRV_CPU_PROGRAM_MAP(abc99_z5_mem) |
| 145 | 176 | MDRV_CPU_IO_MAP(abc99_z5_io) |
| 146 | | |
| 147 | | MDRV_CPU_ADD(I8035_Z2_TAG, I8035, XTAL_6MHz) |
| 148 | | MDRV_CPU_PROGRAM_MAP(abc99_z2_mem) |
| 149 | | MDRV_CPU_IO_MAP(abc99_z2_io) |
| 150 | 177 | MACHINE_CONFIG_END |
| 151 | 178 | |
| 152 | 179 | |
| r9781 | r9782 | |
| 166 | 193 | //------------------------------------------------- |
| 167 | 194 | |
| 168 | 195 | INPUT_PORTS_START( abc99 ) |
| 196 | PORT_START("abc99:X0") |
| 197 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 198 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 199 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 200 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 201 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 202 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 203 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 204 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 205 | |
| 206 | PORT_START("abc99:X1") |
| 207 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 208 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 209 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 210 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 211 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 212 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 213 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 214 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 215 | |
| 216 | PORT_START("abc99:X2") |
| 217 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 218 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 219 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 220 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 221 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 222 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 223 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 224 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 225 | |
| 226 | PORT_START("abc99:X3") |
| 227 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 228 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 229 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 230 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 231 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 232 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 233 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 234 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 235 | |
| 236 | PORT_START("abc99:X4") |
| 237 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 238 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 239 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 240 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 241 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 242 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 243 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 244 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 245 | |
| 246 | PORT_START("abc99:X5") |
| 247 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 248 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 249 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 250 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 251 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 252 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 253 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 254 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 255 | |
| 256 | PORT_START("abc99:X6") |
| 257 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 258 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 259 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 260 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 261 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 262 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 263 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 264 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 265 | |
| 266 | PORT_START("abc99:X7") |
| 267 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 268 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 269 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 270 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 271 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 272 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 273 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 274 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 275 | |
| 276 | PORT_START("abc99:X8") |
| 277 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 278 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 279 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 280 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 281 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 282 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 283 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 284 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 285 | |
| 286 | PORT_START("abc99:X9") |
| 287 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 288 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 289 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 290 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 291 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 292 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 293 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 294 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 295 | |
| 296 | PORT_START("abc99:X10") |
| 297 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 298 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 299 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 300 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 301 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 302 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 303 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 304 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 305 | |
| 306 | PORT_START("abc99:X11") |
| 307 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 308 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 309 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 310 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 311 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 312 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 313 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 314 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 315 | |
| 316 | PORT_START("abc99:X12") |
| 317 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 318 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 319 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 320 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 321 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 322 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 323 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 324 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 325 | |
| 326 | PORT_START("abc99:X13") |
| 327 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 328 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 329 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 330 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 331 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 332 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 333 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 334 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 335 | |
| 336 | PORT_START("abc99:X14") |
| 337 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 338 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 339 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 340 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 341 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 342 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 343 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 344 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 345 | |
| 346 | PORT_START("abc99:X15") |
| 347 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 348 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 349 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 350 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 351 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 352 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 353 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 354 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 169 | 355 | INPUT_PORTS_END |
| 170 | 356 | |
| 171 | 357 | |
| r9781 | r9782 | |
| 182 | 368 | : device_t(_machine, config), |
| 183 | 369 | m_config(config) |
| 184 | 370 | { |
| 185 | | |
| 186 | 371 | } |
| 187 | 372 | |
| 188 | 373 | |
| r9781 | r9782 | |
| 202 | 387 | void abc99_device::device_reset() |
| 203 | 388 | { |
| 204 | 389 | } |
| 390 | |
| 391 | |
| 392 | //------------------------------------------------- |
| 393 | // z2_p1_w - |
| 394 | //------------------------------------------------- |
| 395 | |
| 396 | WRITE8_MEMBER( abc99_device::z2_p1_w ) |
| 397 | { |
| 398 | } |
| 399 | |
| 400 | |
| 401 | //------------------------------------------------- |
| 402 | // z2_t1_r - |
| 403 | //------------------------------------------------- |
| 404 | |
| 405 | READ8_MEMBER( abc99_device::z2_t1_r ) |
| 406 | { |
| 407 | return 0; |
| 408 | } |
| 409 | |
| 410 | |
| 411 | //------------------------------------------------- |
| 412 | // z5_p1_r - |
| 413 | //------------------------------------------------- |
| 414 | |
| 415 | READ8_MEMBER( abc99_device::z5_p1_r ) |
| 416 | { |
| 417 | return 0; |
| 418 | } |
| 419 | |
| 420 | |
| 421 | //------------------------------------------------- |
| 422 | // z5_p2_w - |
| 423 | //------------------------------------------------- |
| 424 | |
| 425 | WRITE8_MEMBER( abc99_device::z5_p2_w ) |
| 426 | { |
| 427 | } |
| 428 | |
| 429 | |
| 430 | //------------------------------------------------- |
| 431 | // z5_t0_w - |
| 432 | //------------------------------------------------- |
| 433 | |
| 434 | WRITE8_MEMBER( abc99_device::z5_t0_w ) |
| 435 | { |
| 436 | } |
| 437 | |
| 438 | |
| 439 | //------------------------------------------------- |
| 440 | // z5_t1_r - |
| 441 | //------------------------------------------------- |
| 442 | |
| 443 | READ8_MEMBER( abc99_device::z5_t1_r ) |
| 444 | { |
| 445 | return 0; |
| 446 | } |
src/mess/drivers/abc1600.c
| r9781 | r9782 | |
| 10 | 10 | |
| 11 | 11 | TODO: |
| 12 | 12 | |
| 13 | - MCS-48 PC:01DC - Unimplemented opcode = 75 (ENT0 CLK, enable clock/3 output on T0) |
| 13 | 14 | - video |
| 14 | 15 | - keyboard |
| 15 | 16 | - mouse |
| r9781 | r9782 | |
| 17 | 18 | - DMA |
| 18 | 19 | - DART |
| 19 | 20 | - CIO |
| 21 | - RTC |
| 20 | 22 | - hard disk (Xebec controller card w/ Z80A, 1K RAM, ROM "104521G", PROM "103911", Xebec 3198-0009, Xebec 3198-0045, 16MHz xtal, 20MHz xtal) |
| 21 | 23 | - monitor portrait/landscape mode |
| 22 | 24 | |
| r9781 | r9782 | |
| 26 | 28 | |
| 27 | 29 | #include "emu.h" |
| 28 | 30 | #include "cpu/m68000/m68000.h" |
| 31 | #include "cpu/z80/z80.h" |
| 29 | 32 | #include "devices/flopdrv.h" |
| 30 | 33 | #include "devices/messram.h" |
| 31 | 34 | #include "machine/abc99.h" |
| r9781 | r9782 | |
| 48 | 51 | static ADDRESS_MAP_START( abc1600_mem, ADDRESS_SPACE_PROGRAM, 8, abc1600_state ) |
| 49 | 52 | AM_RANGE(0x00000, 0x03fff) AM_ROM |
| 50 | 53 | AM_RANGE(0x04000, 0x7efff) AM_RAM |
| 51 | | AM_RANGE(0x7f100, 0x7f100) AM_DEVWRITE_LEGACY(SY6845EA_TAG, mc6845_address_w) |
| 52 | | AM_RANGE(0x7f101, 0x7f101) AM_DEVREADWRITE_LEGACY(SY6845EA_TAG, mc6845_register_r, mc6845_register_w) |
| 54 | AM_RANGE(0x7f100, 0x7f100) AM_DEVWRITE_LEGACY(SY6845E_TAG, mc6845_address_w) |
| 55 | AM_RANGE(0x7f101, 0x7f101) AM_DEVREADWRITE_LEGACY(SY6845E_TAG, mc6845_register_r, mc6845_register_w) |
| 53 | 56 | // AM_RANGE(0x7f000, 0x7f000) AM_DEVREADWRITE_LEGACY(Z8410AB1_0_TAG, z80dma_r, z80dma_w) |
| 54 | 57 | // AM_RANGE(0x7f000, 0x7f000) AM_DEVREADWRITE_LEGACY(Z8410AB1_1_TAG, z80dma_r, z80dma_w) |
| 55 | 58 | // AM_RANGE(0x7f000, 0x7f000) AM_DEVREADWRITE_LEGACY(Z8410AB1_2_TAG, z80dma_r, z80dma_w) |
| 56 | 59 | // AM_RANGE(0x7f000, 0x7f003) AM_DEVREADWRITE_LEGACY(Z80DART_TAG, z80dart_ba_cd_r, z80dart_ba_cd_w) |
| 57 | 60 | // AM_RANGE(0x7f000, 0x7f003) AM_DEVREADWRITE_LEGACY(SAB1797_02P_TAG, wd17xx_r, wd17xx_w) |
| 58 | 61 | // AM_RANGE(0x7f000, 0x7f003) AM_DEVREADWRITE(Z8536B1_TAG, z8536_r, z8536_w) |
| 62 | // AM_RANGE(0x7f000, 0x7f003) AM_DEVREADWRITE(E050_C16PC_TAG, e050c16pc_r, e050c16pc_w) |
| 59 | 63 | AM_RANGE(0x80000, 0xfffff) AM_RAM |
| 60 | 64 | ADDRESS_MAP_END |
| 61 | 65 | |
| 62 | 66 | |
| 67 | //------------------------------------------------- |
| 68 | // ADDRESS_MAP( xebec_mem ) |
| 69 | //------------------------------------------------- |
| 63 | 70 | |
| 71 | static ADDRESS_MAP_START( xebec_mem, ADDRESS_SPACE_PROGRAM, 8, abc1600_state ) |
| 72 | AM_RANGE(0x0000, 0x0fff) AM_ROM |
| 73 | AM_RANGE(0x1000, 0x13ff) AM_RAM |
| 74 | ADDRESS_MAP_END |
| 75 | |
| 76 | |
| 77 | //------------------------------------------------- |
| 78 | // ADDRESS_MAP( xebec_io ) |
| 79 | //------------------------------------------------- |
| 80 | |
| 81 | static ADDRESS_MAP_START( xebec_io, ADDRESS_SPACE_IO, 8, abc1600_state ) |
| 82 | ADDRESS_MAP_END |
| 83 | |
| 84 | |
| 85 | |
| 64 | 86 | //************************************************************************** |
| 65 | 87 | // INPUT PORTS |
| 66 | 88 | //************************************************************************** |
| r9781 | r9782 | |
| 80 | 102 | //************************************************************************** |
| 81 | 103 | |
| 82 | 104 | //------------------------------------------------- |
| 83 | | // MC6845_UPDATE_ROW( abc1600_update_row ) |
| 105 | // mc6845_interface crtc_intf |
| 84 | 106 | //------------------------------------------------- |
| 85 | 107 | |
| 86 | 108 | static MC6845_UPDATE_ROW( abc1600_update_row ) |
| 87 | 109 | { |
| 88 | 110 | } |
| 89 | 111 | |
| 112 | static MC6845_ON_UPDATE_ADDR_CHANGED( crtc_update ) |
| 113 | { |
| 114 | } |
| 90 | 115 | |
| 91 | | //------------------------------------------------- |
| 92 | | // mc6845_interface crtc_intf |
| 93 | | //------------------------------------------------- |
| 94 | | |
| 95 | 116 | static const mc6845_interface crtc_intf = |
| 96 | 117 | { |
| 97 | 118 | SCREEN_TAG, |
| r9781 | r9782 | |
| 103 | 124 | DEVCB_NULL, |
| 104 | 125 | DEVCB_NULL, |
| 105 | 126 | DEVCB_NULL, |
| 106 | | NULL |
| 127 | crtc_update |
| 107 | 128 | }; |
| 108 | 129 | |
| 109 | 130 | |
| r9781 | r9782 | |
| 111 | 132 | // VIDEO_UPDATE( abc1600 ) |
| 112 | 133 | //------------------------------------------------- |
| 113 | 134 | |
| 135 | void abc1600_state::video_start() |
| 136 | { |
| 137 | // allocate video RAM |
| 138 | m_video_ram = auto_alloc_array(machine, UINT8, 128*1024); |
| 139 | } |
| 140 | |
| 141 | |
| 142 | //------------------------------------------------- |
| 143 | // VIDEO_UPDATE( abc1600 ) |
| 144 | //------------------------------------------------- |
| 145 | |
| 114 | 146 | bool abc1600_state::video_update(screen_device &screen, bitmap_t &bitmap, const rectangle &cliprect) |
| 115 | 147 | { |
| 116 | 148 | mc6845_update(m_crtc, &bitmap, &cliprect); |
| r9781 | r9782 | |
| 251 | 283 | MDRV_CPU_ADD(MC68008P8_TAG, M68008, XTAL_64MHz/8) |
| 252 | 284 | MDRV_CPU_PROGRAM_MAP(abc1600_mem) |
| 253 | 285 | |
| 286 | MDRV_CPU_ADD(Z8400A_TAG, Z80, XTAL_16MHz/4) |
| 287 | MDRV_CPU_PROGRAM_MAP(xebec_mem) |
| 288 | MDRV_CPU_IO_MAP(xebec_io) |
| 289 | |
| 254 | 290 | // video hardware |
| 255 | 291 | MDRV_SCREEN_ADD(SCREEN_TAG, RASTER) |
| 256 | 292 | MDRV_SCREEN_REFRESH_RATE(50) |
| r9781 | r9782 | |
| 260 | 296 | MDRV_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1) |
| 261 | 297 | MDRV_PALETTE_LENGTH(2) |
| 262 | 298 | MDRV_PALETTE_INIT(black_and_white) |
| 263 | | MDRV_MC6845_ADD(SY6845EA_TAG, MC6845, XTAL_64MHz, crtc_intf) |
| 299 | MDRV_MC6845_ADD(SY6845E_TAG, SY6845E, XTAL_64MHz, crtc_intf) |
| 264 | 300 | |
| 265 | 301 | // sound hardware |
| 266 | 302 | |
| r9781 | r9782 | |
| 313 | 349 | ROM_LOAD( "1025 6490354-01.6e", 0x618, 0x104, CRC(9bda0468) SHA1(ad373995dcc18532274efad76fa80bd13c23df25) ) |
| 314 | 350 | |
| 315 | 351 | ROM_REGION( 0x1000, Z8400A_TAG, 0 ) // Xebec hard disk controller card |
| 316 | | ROM_LOAD( "104521g", 0x0000, 0x1000, NO_DUMP ) |
| 352 | ROM_LOAD( "104521g", 0x0800, 0x0800, BAD_DUMP CRC(1b004bdd) SHA1(ad8b14d9f2511826d7e81a11c23077fc02846fe7) ) // missing first half |
| 317 | 353 | |
| 318 | 354 | ROM_REGION( 0x100, "103911", 0 ) // Xebec hard disk controller card |
| 319 | 355 | ROM_LOAD( "103911", 0x000, 0x100, NO_DUMP ) // DM74S288N |