src/mess/drivers/atarist.c
| r817 | r818 | |
| 22 | 22 | |
| 23 | 23 | - US keyboard layout |
| 24 | 24 | - add serial communications to HD63701 cpu core |
| 25 | | - connect keyboard ports to ikbd |
| 26 | 25 | - connect mouse to ikbd |
| 27 | 26 | - floppy image device_load |
| 28 | 27 | - MFP interrupts |
| r817 | r818 | |
| 219 | 218 | /* IKBD */ |
| 220 | 219 | |
| 221 | 220 | static UINT8 acia_ikbd_rx, acia_ikbd_tx; |
| 222 | | static UINT8 keylatch; |
| 223 | | static int joylatch; |
| 221 | static UINT8 ikbd_keymask; |
| 222 | static int ikbd_joyen; |
| 224 | 223 | |
| 225 | | static WRITE8_HANDLER( hd6301_port1_w ) |
| 224 | static WRITE8_HANDLER( ikbd_port1_w ) |
| 226 | 225 | { |
| 227 | | keylatch = data; |
| 226 | ikbd_keymask = data; |
| 228 | 227 | } |
| 229 | 228 | |
| 230 | | static READ8_HANDLER( hd6301_port2_r ) |
| 229 | static READ8_HANDLER( ikbd_port2_r ) |
| 231 | 230 | { |
| 232 | 231 | /* |
| 233 | 232 | |
| r817 | r818 | |
| 241 | 240 | |
| 242 | 241 | */ |
| 243 | 242 | |
| 244 | | UINT8 data = 0; |
| 245 | | |
| 246 | | data |= acia_ikbd_tx << 3; |
| 247 | | |
| 248 | | return data; |
| 243 | return readinputportbytag("JOY1") | (acia_ikbd_tx << 3); |
| 249 | 244 | } |
| 250 | 245 | |
| 251 | | static WRITE8_HANDLER( hd6301_port2_w ) |
| 246 | static WRITE8_HANDLER( ikbd_port2_w ) |
| 252 | 247 | { |
| 253 | 248 | /* |
| 254 | 249 | |
| r817 | r818 | |
| 262 | 257 | |
| 263 | 258 | */ |
| 264 | 259 | |
| 265 | | joylatch = data & 0x01; |
| 260 | ikbd_joyen = data & 0x01; |
| 266 | 261 | acia_ikbd_rx = (data & 0x10) >> 4; |
| 267 | 262 | } |
| 268 | 263 | |
| 269 | | static WRITE8_HANDLER( hd6301_port_3_w ) |
| 264 | static WRITE8_HANDLER( ikbd_port_3_w ) |
| 270 | 265 | { |
| 271 | | // 0x01 CAPS LOCK led |
| 266 | set_led_status(1, data & 0x01); |
| 272 | 267 | } |
| 273 | 268 | |
| 274 | | static READ8_HANDLER( hd6301_port_3_r ) |
| 269 | static READ8_HANDLER( ikbd_port_3_r ) |
| 275 | 270 | { |
| 276 | 271 | /* |
| 277 | 272 | |
| r817 | r818 | |
| 288 | 283 | |
| 289 | 284 | */ |
| 290 | 285 | |
| 291 | | return 0xff; |
| 286 | UINT8 data = 0xff; |
| 287 | |
| 288 | if ((readinputportbytag("P31") & ikbd_keymask) == ikbd_keymask) data -= 0x02; |
| 289 | if ((readinputportbytag("P32") & ikbd_keymask) == ikbd_keymask) data -= 0x04; |
| 290 | if ((readinputportbytag("P33") & ikbd_keymask) == ikbd_keymask) data -= 0x08; |
| 291 | if ((readinputportbytag("P34") & ikbd_keymask) == ikbd_keymask) data -= 0x10; |
| 292 | if ((readinputportbytag("P35") & ikbd_keymask) == ikbd_keymask) data -= 0x20; |
| 293 | if ((readinputportbytag("P36") & ikbd_keymask) == ikbd_keymask) data -= 0x40; |
| 294 | if ((readinputportbytag("P37") & ikbd_keymask) == ikbd_keymask) data -= 0x80; |
| 295 | |
| 296 | return data; |
| 292 | 297 | } |
| 293 | 298 | |
| 294 | | static READ8_HANDLER( hd6301_port_4_r ) |
| 299 | static READ8_HANDLER( ikbd_port_4_r ) |
| 295 | 300 | { |
| 296 | 301 | /* |
| 297 | 302 | |
| 298 | 303 | bit description |
| 299 | 304 | |
| 300 | | 0 JOY 0-1 or keyboard row input |
| 301 | | 1 JOY 0-2 or keyboard row input |
| 302 | | 2 JOY 0-3 or keyboard row input |
| 303 | | 3 JOY 0-4 or keyboard row input |
| 305 | 0 JOY 0-1 or mouse XB or keyboard row input |
| 306 | 1 JOY 0-2 or mouse XA or keyboard row input |
| 307 | 2 JOY 0-3 or mouse YA or keyboard row input |
| 308 | 3 JOY 0-4 or mouse YB or keyboard row input |
| 304 | 309 | 4 JOY 1-1 or keyboard row input |
| 305 | 310 | 5 JOY 1-2 or keyboard row input |
| 306 | 311 | 6 JOY 1-3 or keyboard row input |
| r817 | r818 | |
| 308 | 313 | |
| 309 | 314 | */ |
| 310 | 315 | |
| 311 | | return 0xff; |
| 316 | if (ikbd_joyen) |
| 317 | { |
| 318 | UINT8 data = 0xff; |
| 319 | |
| 320 | if ((readinputportbytag("P40") & ikbd_keymask) == ikbd_keymask) data -= 0x01; |
| 321 | if ((readinputportbytag("P41") & ikbd_keymask) == ikbd_keymask) data -= 0x02; |
| 322 | if ((readinputportbytag("P42") & ikbd_keymask) == ikbd_keymask) data -= 0x04; |
| 323 | if ((readinputportbytag("P43") & ikbd_keymask) == ikbd_keymask) data -= 0x08; |
| 324 | if ((readinputportbytag("P44") & ikbd_keymask) == ikbd_keymask) data -= 0x10; |
| 325 | if ((readinputportbytag("P45") & ikbd_keymask) == ikbd_keymask) data -= 0x20; |
| 326 | if ((readinputportbytag("P46") & ikbd_keymask) == ikbd_keymask) data -= 0x40; |
| 327 | if ((readinputportbytag("P47") & ikbd_keymask) == ikbd_keymask) data -= 0x80; |
| 328 | |
| 329 | return data; |
| 330 | } |
| 331 | else |
| 332 | { |
| 333 | if (readinputportbytag("config") & 0x01) |
| 334 | { |
| 335 | UINT8 data = readinputportbytag("JOY0") & 0xf0; |
| 336 | |
| 337 | return data; |
| 338 | } |
| 339 | else |
| 340 | { |
| 341 | return readinputportbytag("JOY0"); |
| 342 | } |
| 343 | } |
| 312 | 344 | } |
| 313 | 345 | |
| 314 | 346 | /* Memory Maps */ |
| 315 | 347 | |
| 316 | | static ADDRESS_MAP_START(ikbd_map, ADDRESS_SPACE_PROGRAM, 8) |
| 348 | static ADDRESS_MAP_START( ikbd_map, ADDRESS_SPACE_PROGRAM, 8 ) |
| 317 | 349 | AM_RANGE(0x0000, 0x001f) AM_READWRITE(hd63701_internal_registers_r, hd63701_internal_registers_w) |
| 318 | 350 | AM_RANGE(0x0080, 0x00ff) AM_RAM |
| 319 | 351 | AM_RANGE(0xf000, 0xffff) AM_ROM |
| 320 | 352 | ADDRESS_MAP_END |
| 321 | 353 | |
| 322 | | static ADDRESS_MAP_START(ikbd_io_map, ADDRESS_SPACE_IO, 8) |
| 323 | | AM_RANGE(HD63701_PORT1, HD63701_PORT1) AM_WRITE(hd6301_port1_w) |
| 324 | | AM_RANGE(HD63701_PORT2, HD63701_PORT2) AM_READWRITE(hd6301_port2_r, hd6301_port2_w) |
| 325 | | AM_RANGE(HD63701_PORT3, HD63701_PORT3) AM_READ(hd6301_port_3_r) |
| 326 | | AM_RANGE(HD63701_PORT4, HD63701_PORT4) AM_READ(hd6301_port_4_r) |
| 354 | static ADDRESS_MAP_START( ikbd_io_map, ADDRESS_SPACE_IO, 8 ) |
| 355 | AM_RANGE(HD63701_PORT1, HD63701_PORT1) AM_WRITE(ikbd_port1_w) |
| 356 | AM_RANGE(HD63701_PORT2, HD63701_PORT2) AM_READWRITE(ikbd_port2_r, ikbd_port2_w) |
| 357 | AM_RANGE(HD63701_PORT3, HD63701_PORT3) AM_READ(ikbd_port_3_r) |
| 358 | AM_RANGE(HD63701_PORT4, HD63701_PORT4) AM_READ(ikbd_port_4_r) |
| 327 | 359 | ADDRESS_MAP_END |
| 328 | 360 | |
| 329 | | static ADDRESS_MAP_START(st_map, ADDRESS_SPACE_PROGRAM, 16) |
| 361 | static ADDRESS_MAP_START( st_map, ADDRESS_SPACE_PROGRAM, 16 ) |
| 330 | 362 | AM_RANGE(0x000000, 0x000007) AM_ROM |
| 331 | 363 | AM_RANGE(0x000008, 0x1fffff) AM_RAMBANK(1) |
| 332 | 364 | AM_RANGE(0x200000, 0x3fffff) AM_RAMBANK(2) |
| r817 | r818 | |
| 344 | 376 | AM_RANGE(0xfffc06, 0xfffc07) AM_READWRITE(acia6850_1_data_msb_r, acia6850_1_data_msb_w) |
| 345 | 377 | ADDRESS_MAP_END |
| 346 | 378 | |
| 347 | | static ADDRESS_MAP_START(megast_map, ADDRESS_SPACE_PROGRAM, 16) |
| 379 | static ADDRESS_MAP_START( megast_map, ADDRESS_SPACE_PROGRAM, 16 ) |
| 348 | 380 | AM_RANGE(0x000000, 0x000007) AM_ROM |
| 349 | 381 | AM_RANGE(0x000008, 0x1fffff) AM_RAMBANK(1) |
| 350 | 382 | AM_RANGE(0x200000, 0x3fffff) AM_RAMBANK(2) |
| r817 | r818 | |
| 520 | 552 | |
| 521 | 553 | INPUT_PORTS_START( atarist ) |
| 522 | 554 | PORT_START_TAG("config") |
| 523 | | PORT_CONFNAME( 0x20, 0x00, "Input Port 0 Device") |
| 555 | PORT_CONFNAME( 0x01, 0x00, "Input Port 0 Device") |
| 524 | 556 | PORT_CONFSETTING( 0x00, "Mouse" ) |
| 525 | | PORT_CONFSETTING( 0x20, DEF_STR(Joystick) ) |
| 557 | PORT_CONFSETTING( 0x01, DEF_STR( Joystick ) ) |
| 526 | 558 | PORT_CONFNAME( 0x80, 0x80, "Monitor") |
| 527 | 559 | PORT_CONFSETTING( 0x00, "Monochrome" ) |
| 528 | 560 | PORT_CONFSETTING( 0x80, "Color" ) |