src/mess/machine/pk8020.c
| r5285 | r5286 | |
| 11 | 11 | #include "cpu/i8085/i8085.h" |
| 12 | 12 | #include "includes/pk8020.h" |
| 13 | 13 | |
| 14 | | static UINT8 vpage = 0; |
| 15 | 14 | static UINT8 attr = 0; |
| 15 | static UINT8 text_attr = 0; |
| 16 | 16 | static UINT8 takt = 0; |
| 17 | 17 | UINT8 pk8020_color = 0; |
| 18 | UINT8 pk8020_video_page = 0; |
| 19 | UINT8 pk8020_wide = 0; |
| 20 | UINT8 pk8020_font = 0; |
| 21 | static UINT8 pk8020_video_page_access = 0; |
| 22 | static UINT8 portc_data; |
| 18 | 23 | |
| 19 | 24 | static void pk8020_set_bank(running_machine *machine,UINT8 data); |
| 20 | 25 | |
| 21 | 26 | /* Driver initialization */ |
| 22 | 27 | DRIVER_INIT(pk8020) |
| 23 | 28 | { |
| 24 | | memset(mess_ram,0,129*1024); |
| 29 | memset(mess_ram,0,(64 + 4*48 + 2)*1024); |
| 25 | 30 | } |
| 26 | 31 | |
| 27 | 32 | static READ8_HANDLER(keyboard_r) |
| r5285 | r5286 | |
| 48 | 53 | line++; |
| 49 | 54 | if (offset & 0x0080) retVal|=input_port_read(space->machine,keynames[line]); |
| 50 | 55 | line++; |
| 56 | |
| 51 | 57 | return retVal; |
| 52 | 58 | } |
| 53 | 59 | |
| 54 | 60 | static READ8_HANDLER(sysreg_r) |
| 55 | 61 | { |
| 56 | | logerror("sysreg_r %02x\n",offset); |
| 57 | | return 0xff; |
| 62 | return mess_ram[offset]; |
| 58 | 63 | } |
| 59 | 64 | static WRITE8_HANDLER(sysreg_w) |
| 60 | 65 | { |
| 61 | | logerror("sysreg_w %02x %02x\n",offset,data); |
| 62 | 66 | if (BIT(offset,7)==0) { |
| 63 | 67 | pk8020_set_bank(space->machine,data >> 2); |
| 64 | 68 | } else if (BIT(offset,6)==0) { |
| 65 | 69 | // Color |
| 66 | | pk8020_color = data; |
| 70 | pk8020_color = data; |
| 67 | 71 | } else if (BIT(offset,2)==0) { |
| 68 | 72 | // Palette set |
| 69 | 73 | UINT8 number = data & 0x0f; |
| r5285 | r5286 | |
| 78 | 82 | |
| 79 | 83 | static READ8_HANDLER(text_r) |
| 80 | 84 | { |
| 81 | | return mess_ram[0x20000+offset]; |
| 85 | if (attr == 3) text_attr=mess_ram[0x40400+offset]; |
| 86 | return mess_ram[0x40000+offset]; |
| 82 | 87 | } |
| 83 | 88 | |
| 84 | 89 | static WRITE8_HANDLER(text_w) |
| 85 | 90 | { |
| 86 | | mess_ram[0x20000+offset] = data; |
| 91 | mess_ram[0x40000+offset] = data; |
| 92 | switch (attr) { |
| 93 | case 0: break; |
| 94 | case 1: mess_ram[0x40400+offset]=0x01;break; |
| 95 | case 2: mess_ram[0x40400+offset]=0x00;break; |
| 96 | case 3: mess_ram[0x40400+offset]=text_attr;break; |
| 97 | } |
| 87 | 98 | } |
| 88 | 99 | |
| 100 | static READ8_HANDLER(gzu_r) |
| 101 | { |
| 102 | UINT8 *addr = mess_ram + 0x10000 + (pk8020_video_page_access * 0xC000); |
| 103 | UINT8 p0 = addr[offset]; |
| 104 | UINT8 p1 = addr[offset + 0x4000]; |
| 105 | UINT8 p2 = addr[offset + 0x8000]; |
| 106 | UINT8 retVal = 0; |
| 107 | if(pk8020_color & 0x80) { |
| 108 | // Color mode |
| 109 | if (!(pk8020_color & 0x10)) { |
| 110 | p0 ^= 0xff; |
| 111 | } |
| 112 | if (!(pk8020_color & 0x20)) { |
| 113 | p1 ^= 0xff; |
| 114 | } |
| 115 | if (!(pk8020_color & 0x40)) { |
| 116 | p2 ^= 0xff; |
| 117 | } |
| 118 | retVal = (p0 & p1 & p2) ^ 0xff; |
| 119 | } else { |
| 120 | // Plane mode |
| 121 | if (pk8020_color & 0x10) { |
| 122 | retVal |= p0; |
| 123 | } |
| 124 | if (pk8020_color & 0x20) { |
| 125 | retVal |= p1; |
| 126 | } |
| 127 | if (pk8020_color & 0x40) { |
| 128 | retVal |= p2; |
| 129 | } |
| 130 | } |
| 131 | return retVal; |
| 132 | } |
| 133 | |
| 134 | static WRITE8_HANDLER(gzu_w) |
| 135 | { |
| 136 | UINT8 *addr = mess_ram + 0x10000 + (pk8020_video_page_access * 0xC000); |
| 137 | UINT8 *plane_0 = addr; |
| 138 | UINT8 *plane_1 = addr + 0x4000; |
| 139 | UINT8 *plane_2 = addr + 0x8000; |
| 140 | |
| 141 | if(pk8020_color & 0x80) |
| 142 | { |
| 143 | // Color mode |
| 144 | plane_0[offset] = (plane_0[offset] & ~data) | ((pk8020_color & 2) ? data : 0); |
| 145 | plane_1[offset] = (plane_1[offset] & ~data) | ((pk8020_color & 4) ? data : 0); |
| 146 | plane_2[offset] = (plane_2[offset] & ~data) | ((pk8020_color & 8) ? data : 0); |
| 147 | } else { |
| 148 | // Plane mode |
| 149 | UINT8 mask = (pk8020_color & 1) ? data : 0; |
| 150 | if (!(pk8020_color & 0x02)) { |
| 151 | plane_0[offset] = (plane_0[offset] & ~data) | mask; |
| 152 | } |
| 153 | if (!(pk8020_color & 0x04)) { |
| 154 | plane_1[offset] = (plane_1[offset] & ~data) | mask; |
| 155 | } |
| 156 | if (!(pk8020_color & 0x08)) { |
| 157 | plane_2[offset] = (plane_2[offset] & ~data) | mask; |
| 158 | } |
| 159 | } |
| 160 | } |
| 161 | |
| 89 | 162 | static READ8_HANDLER(devices_r) |
| 90 | 163 | { |
| 91 | 164 | const device_config *ppi1 = devtag_get_device(space->machine, "ppi8255_1"); |
| r5285 | r5286 | |
| 96 | 169 | const device_config *rs232 = devtag_get_device(space->machine, "rs232"); |
| 97 | 170 | const device_config *lan = devtag_get_device(space->machine, "lan"); |
| 98 | 171 | const device_config *fdc = devtag_get_device(space->machine, "wd1793"); |
| 99 | | switch(offset & 0x38) |
| 100 | | { |
| 101 | | case 0x00: |
| 102 | | case 0x18: |
| 103 | | case 0x20: |
| 104 | | case 0x28: |
| 105 | | case 0x38: |
| 106 | | //logerror("devices_r %02x %04x\n",offset,cpu_get_pc(space->cpu)); |
| 107 | | break; |
| 108 | | } |
| 109 | 172 | |
| 110 | 173 | switch(offset & 0x38) |
| 111 | 174 | { |
| r5285 | r5286 | |
| 145 | 208 | const device_config *rs232 = devtag_get_device(space->machine, "rs232"); |
| 146 | 209 | const device_config *lan = devtag_get_device(space->machine, "lan"); |
| 147 | 210 | const device_config *fdc = devtag_get_device(space->machine, "wd1793"); |
| 148 | | switch(offset & 0x38) |
| 149 | | { |
| 150 | | case 0x00: |
| 151 | | case 0x18: |
| 152 | | case 0x20: |
| 153 | | case 0x28: |
| 154 | | case 0x38: |
| 155 | | //logerror("devices_w %02x %02x %04x\n",offset,data,cpu_get_pc(space->cpu)); |
| 156 | | break; |
| 157 | | } |
| 158 | 211 | |
| 159 | 212 | switch(offset & 0x38) |
| 160 | 213 | { |
| r5285 | r5286 | |
| 166 | 219 | } |
| 167 | 220 | break; |
| 168 | 221 | case 0x18: switch(offset & 3) { |
| 169 | | case 0 : wd17xx_command_w(fdc,0,data); |
| 170 | | case 1 : wd17xx_track_w(fdc,0,data); |
| 171 | | case 2 : wd17xx_sector_w(fdc,0,data); |
| 172 | | case 3 : wd17xx_data_w(fdc,0,data); |
| 222 | case 0 : wd17xx_command_w(fdc,0,data);break; |
| 223 | case 1 : wd17xx_track_w(fdc,0,data);break; |
| 224 | case 2 : wd17xx_sector_w(fdc,0,data);break; |
| 225 | case 3 : wd17xx_data_w(fdc,0,data);break; |
| 173 | 226 | } |
| 174 | 227 | break; |
| 175 | 228 | case 0x20: switch(offset & 1) { |
| r5285 | r5286 | |
| 186 | 239 | static void pk8020_set_bank(running_machine *machine,UINT8 data) |
| 187 | 240 | { |
| 188 | 241 | const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM); |
| 189 | | |
| 190 | 242 | switch(data & 0x1F) { |
| 191 | 243 | case 0x00 : |
| 192 | 244 | { |
| r5285 | r5286 | |
| 309 | 361 | // RAM |
| 310 | 362 | memory_install_read8_handler (space, 0x0000, 0xf7ff, 0, 0, SMH_BANK(1)); |
| 311 | 363 | memory_install_write8_handler(space, 0x0000, 0xf7ff, 0, 0, SMH_BANK(2)); |
| 312 | | memory_set_bankptr(machine, 1, mess_ram + 0x4000); |
| 313 | | memory_set_bankptr(machine, 2, mess_ram + 0x4000); |
| 364 | memory_set_bankptr(machine, 1, mess_ram); |
| 365 | memory_set_bankptr(machine, 2, mess_ram); |
| 314 | 366 | // Keyboard |
| 315 | 367 | memory_install_read8_handler (space, 0xf800, 0xf9ff, 0, 0, keyboard_r); |
| 316 | 368 | memory_install_write8_handler(space, 0xf800, 0xf9ff, 0, 0, SMH_BANK(3)); |
| r5285 | r5286 | |
| 352 | 404 | memory_set_bankptr(machine, 4, mess_ram + 0x4000); |
| 353 | 405 | memory_set_bankptr(machine, 5, mess_ram + 0x4000); |
| 354 | 406 | // Video RAM |
| 355 | | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(6)); |
| 356 | | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(7)); |
| 357 | | memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000); |
| 358 | | memory_set_bankptr(machine, 7, mess_ram + 0x10000 + vpage * 0x4000); |
| 407 | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r); |
| 408 | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w); |
| 359 | 409 | |
| 360 | 410 | } |
| 361 | 411 | break; |
| r5285 | r5286 | |
| 372 | 422 | memory_set_bankptr(machine, 3, mess_ram + 0x2000); |
| 373 | 423 | memory_set_bankptr(machine, 4, mess_ram + 0x2000); |
| 374 | 424 | // Video RAM |
| 375 | | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(5)); |
| 376 | | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(6)); |
| 377 | | memory_set_bankptr(machine, 5, mess_ram + 0x10000 + vpage * 0x4000); |
| 378 | | memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000); |
| 379 | | |
| 425 | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r); |
| 426 | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w); |
| 380 | 427 | } |
| 381 | 428 | break; |
| 382 | 429 | case 0x0A : |
| r5285 | r5286 | |
| 392 | 439 | memory_set_bankptr(machine, 3, mess_ram + 0x4000); |
| 393 | 440 | memory_set_bankptr(machine, 4, mess_ram + 0x4000); |
| 394 | 441 | // Video RAM |
| 395 | | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(5)); |
| 396 | | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(6)); |
| 397 | | memory_set_bankptr(machine, 5, mess_ram + 0x10000 + vpage * 0x4000); |
| 398 | | memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000); |
| 399 | | |
| 442 | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r); |
| 443 | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w); |
| 400 | 444 | } |
| 401 | 445 | break; |
| 402 | 446 | case 0x0B : |
| r5285 | r5286 | |
| 407 | 451 | memory_set_bankptr(machine, 1, mess_ram + 0x0000); |
| 408 | 452 | memory_set_bankptr(machine, 2, mess_ram + 0x0000); |
| 409 | 453 | // Video RAM |
| 410 | | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(3)); |
| 411 | | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(4)); |
| 412 | | memory_set_bankptr(machine, 3, mess_ram + 0x10000 + vpage * 0x4000); |
| 413 | | memory_set_bankptr(machine, 4, mess_ram + 0x10000 + vpage * 0x4000); |
| 414 | | |
| 454 | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r); |
| 455 | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w); |
| 415 | 456 | } |
| 416 | 457 | break; |
| 417 | 458 | case 0x0C : |
| r5285 | r5286 | |
| 428 | 469 | memory_set_bankptr(machine, 3, mess_ram + 0x2000); |
| 429 | 470 | memory_set_bankptr(machine, 4, mess_ram + 0x2000); |
| 430 | 471 | // Video RAM |
| 431 | | memory_install_read8_handler (space, 0x4000, 0x7fff, 0, 0, SMH_BANK(5)); |
| 432 | | memory_install_write8_handler(space, 0x4000, 0x7fff, 0, 0, SMH_BANK(6)); |
| 433 | | memory_set_bankptr(machine, 5, mess_ram + 0x10000 + vpage * 0x4000); |
| 434 | | memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000); |
| 472 | memory_install_read8_handler (space, 0x4000, 0x7fff, 0, 0, gzu_r); |
| 473 | memory_install_write8_handler(space, 0x4000, 0x7fff, 0, 0, gzu_w); |
| 435 | 474 | // RAM |
| 436 | | memory_install_read8_handler (space, 0x8000, 0xfdff, 0, 0, SMH_BANK(7)); |
| 437 | | memory_install_write8_handler(space, 0x8000, 0xfdff, 0, 0, SMH_BANK(8)); |
| 438 | | memory_set_bankptr(machine, 7, mess_ram + 0x8000); |
| 439 | | memory_set_bankptr(machine, 8, mess_ram + 0x8000); |
| 475 | memory_install_read8_handler (space, 0x8000, 0xfdff, 0, 0, SMH_BANK(5)); |
| 476 | memory_install_write8_handler(space, 0x8000, 0xfdff, 0, 0, SMH_BANK(6)); |
| 477 | memory_set_bankptr(machine, 5, mess_ram + 0x8000); |
| 478 | memory_set_bankptr(machine, 6, mess_ram + 0x8000); |
| 440 | 479 | // Devices |
| 441 | 480 | memory_install_read8_handler (space, 0xfe00, 0xfeff, 0, 0, devices_r); |
| 442 | 481 | memory_install_write8_handler(space, 0xfe00, 0xfeff, 0, 0, devices_w); |
| r5285 | r5286 | |
| 453 | 492 | memory_set_bankptr(machine, 1, memory_region(machine,"maincpu") + 0x10000); |
| 454 | 493 | memory_set_bankptr(machine, 2, mess_ram + 0x0000); |
| 455 | 494 | // Video RAM |
| 456 | | memory_install_read8_handler (space, 0x4000, 0x7fff, 0, 0, SMH_BANK(3)); |
| 457 | | memory_install_write8_handler(space, 0x4000, 0x7fff, 0, 0, SMH_BANK(4)); |
| 458 | | memory_set_bankptr(machine, 3, mess_ram + 0x10000 + vpage * 0x4000); |
| 459 | | memory_set_bankptr(machine, 4, mess_ram + 0x10000 + vpage * 0x4000); |
| 495 | memory_install_read8_handler (space, 0x4000, 0x7fff, 0, 0, gzu_r); |
| 496 | memory_install_write8_handler(space, 0x4000, 0x7fff, 0, 0, gzu_w); |
| 460 | 497 | // RAM |
| 461 | 498 | memory_install_read8_handler (space, 0x8000, 0xfdff, 0, 0, SMH_BANK(5)); |
| 462 | 499 | memory_install_write8_handler(space, 0x8000, 0xfdff, 0, 0, SMH_BANK(6)); |
| r5285 | r5286 | |
| 478 | 515 | memory_set_bankptr(machine, 1, mess_ram + 0x0000); |
| 479 | 516 | memory_set_bankptr(machine, 2, mess_ram + 0x0000); |
| 480 | 517 | // Video RAM |
| 481 | | memory_install_read8_handler (space, 0x4000, 0x7fff, 0, 0, SMH_BANK(3)); |
| 482 | | memory_install_write8_handler(space, 0x4000, 0x7fff, 0, 0, SMH_BANK(4)); |
| 483 | | memory_set_bankptr(machine, 3, mess_ram + 0x10000 + vpage * 0x4000); |
| 484 | | memory_set_bankptr(machine, 4, mess_ram + 0x10000 + vpage * 0x4000); |
| 518 | memory_install_read8_handler (space, 0x4000, 0x7fff, 0, 0, gzu_r); |
| 519 | memory_install_write8_handler(space, 0x4000, 0x7fff, 0, 0, gzu_w); |
| 485 | 520 | // RAM |
| 486 | | memory_install_read8_handler (space, 0x8000, 0xfdff, 0, 0, SMH_BANK(5)); |
| 487 | | memory_install_write8_handler(space, 0x8000, 0xfdff, 0, 0, SMH_BANK(6)); |
| 488 | | memory_set_bankptr(machine, 5, mess_ram + 0x8000); |
| 489 | | memory_set_bankptr(machine, 6, mess_ram + 0x8000); |
| 521 | memory_install_read8_handler (space, 0x8000, 0xfdff, 0, 0, SMH_BANK(3)); |
| 522 | memory_install_write8_handler(space, 0x8000, 0xfdff, 0, 0, SMH_BANK(4)); |
| 523 | memory_set_bankptr(machine, 3, mess_ram + 0x8000); |
| 524 | memory_set_bankptr(machine, 4, mess_ram + 0x8000); |
| 490 | 525 | // Devices |
| 491 | 526 | memory_install_read8_handler (space, 0xfe00, 0xfeff, 0, 0, devices_r); |
| 492 | 527 | memory_install_write8_handler(space, 0xfe00, 0xfeff, 0, 0, devices_w); |
| r5285 | r5286 | |
| 689 | 724 | memory_install_read8_handler (space, 0xbf00, 0xbfff, 0, 0, sysreg_r); |
| 690 | 725 | memory_install_write8_handler(space, 0xbf00, 0xbfff, 0, 0, sysreg_w); |
| 691 | 726 | // Video RAM |
| 692 | | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(5)); |
| 693 | | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(6)); |
| 694 | | memory_set_bankptr(machine, 5, mess_ram + 0x10000 + vpage * 0x4000); |
| 695 | | memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000); |
| 727 | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r); |
| 728 | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w); |
| 696 | 729 | } |
| 697 | 730 | break; |
| 698 | 731 | case 0x19 : |
| r5285 | r5286 | |
| 711 | 744 | memory_install_read8_handler (space, 0xbf00, 0xbfff, 0, 0, sysreg_r); |
| 712 | 745 | memory_install_write8_handler(space, 0xbf00, 0xbfff, 0, 0, sysreg_w); |
| 713 | 746 | // Video RAM |
| 714 | | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(5)); |
| 715 | | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(6)); |
| 716 | | memory_set_bankptr(machine, 5, mess_ram + 0x10000 + vpage * 0x4000); |
| 717 | | memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000); |
| 747 | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r); |
| 748 | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w); |
| 718 | 749 | } |
| 719 | 750 | break; |
| 720 | 751 | case 0x1A : |
| r5285 | r5286 | |
| 733 | 764 | memory_install_read8_handler (space, 0xbf00, 0xbfff, 0, 0, sysreg_r); |
| 734 | 765 | memory_install_write8_handler(space, 0xbf00, 0xbfff, 0, 0, sysreg_w); |
| 735 | 766 | // Video RAM |
| 736 | | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(5)); |
| 737 | | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(6)); |
| 738 | | memory_set_bankptr(machine, 5, mess_ram + 0x10000 + vpage * 0x4000); |
| 739 | | memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000); |
| 767 | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r); |
| 768 | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w); |
| 740 | 769 | } |
| 741 | 770 | break; |
| 742 | 771 | case 0x1B : |
| r5285 | r5286 | |
| 750 | 779 | memory_install_read8_handler (space, 0xbf00, 0xbfff, 0, 0, sysreg_r); |
| 751 | 780 | memory_install_write8_handler(space, 0xbf00, 0xbfff, 0, 0, sysreg_w); |
| 752 | 781 | // Video RAM |
| 753 | | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(3)); |
| 754 | | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(4)); |
| 755 | | memory_set_bankptr(machine, 3, mess_ram + 0x10000 + vpage * 0x4000); |
| 756 | | memory_set_bankptr(machine, 4, mess_ram + 0x10000 + vpage * 0x4000); |
| 782 | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r); |
| 783 | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w); |
| 757 | 784 | } |
| 758 | 785 | break; |
| 759 | 786 | case 0x1C : |
| r5285 | r5286 | |
| 769 | 796 | memory_set_bankptr(machine, 3, mess_ram + 0x6000); |
| 770 | 797 | memory_set_bankptr(machine, 4, mess_ram + 0x6000); |
| 771 | 798 | // Video RAM |
| 772 | | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(5)); |
| 773 | | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(6)); |
| 774 | | memory_set_bankptr(machine, 5, mess_ram + 0x10000 + vpage * 0x4000); |
| 775 | | memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000); |
| 799 | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r); |
| 800 | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w); |
| 776 | 801 | } |
| 777 | 802 | break; |
| 778 | 803 | case 0x1D : |
| r5285 | r5286 | |
| 788 | 813 | memory_set_bankptr(machine, 3, mess_ram + 0x2000); |
| 789 | 814 | memory_set_bankptr(machine, 4, mess_ram + 0x2000); |
| 790 | 815 | // Video RAM |
| 791 | | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(5)); |
| 792 | | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(6)); |
| 793 | | memory_set_bankptr(machine, 5, mess_ram + 0x10000 + vpage * 0x4000); |
| 794 | | memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000); |
| 816 | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r); |
| 817 | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w); |
| 795 | 818 | } |
| 796 | 819 | break; |
| 797 | 820 | case 0x1E : |
| r5285 | r5286 | |
| 807 | 830 | memory_set_bankptr(machine, 3, mess_ram + 0x4000); |
| 808 | 831 | memory_set_bankptr(machine, 4, mess_ram + 0x4000); |
| 809 | 832 | // Video RAM |
| 810 | | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(5)); |
| 811 | | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(6)); |
| 812 | | memory_set_bankptr(machine, 5, mess_ram + 0x10000 + vpage * 0x4000); |
| 813 | | memory_set_bankptr(machine, 6, mess_ram + 0x10000 + vpage * 0x4000); |
| 833 | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r); |
| 834 | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w); |
| 814 | 835 | } |
| 815 | 836 | break; |
| 816 | 837 | case 0x1F : |
| r5285 | r5286 | |
| 821 | 842 | memory_set_bankptr(machine, 1, mess_ram); |
| 822 | 843 | memory_set_bankptr(machine, 2, mess_ram); |
| 823 | 844 | // Video RAM |
| 824 | | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, SMH_BANK(3)); |
| 825 | | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, SMH_BANK(4)); |
| 826 | | memory_set_bankptr(machine, 3, mess_ram + 0x10000 + vpage * 0x4000); |
| 827 | | memory_set_bankptr(machine, 4, mess_ram + 0x10000 + vpage * 0x4000); |
| 845 | memory_install_read8_handler (space, 0xc000, 0xffff, 0, 0, gzu_r); |
| 846 | memory_install_write8_handler(space, 0xc000, 0xffff, 0, 0, gzu_w); |
| 828 | 847 | } |
| 829 | 848 | break; |
| 830 | 849 | |
| r5285 | r5286 | |
| 833 | 852 | |
| 834 | 853 | static READ8_DEVICE_HANDLER(pk8020_porta_r) |
| 835 | 854 | { |
| 836 | | return 0xf0 | (takt <<1) | (attr &1)<<3; |
| 855 | return 0xf0 | (takt <<1) | (text_attr)<<3; |
| 837 | 856 | } |
| 838 | 857 | |
| 839 | 858 | static WRITE8_DEVICE_HANDLER(pk8020_portc_w) |
| 840 | | { |
| 841 | | if (((data & 0x30) >> 4)==3) { |
| 842 | | attr ^=1; |
| 859 | { |
| 860 | pk8020_video_page_access =(data>>6) & 3; |
| 861 | attr = (data >> 4) & 3; |
| 862 | pk8020_wide = (data >> 3) & 1; |
| 863 | pk8020_font = (data >> 2) & 1; |
| 864 | pk8020_video_page = (data & 3); |
| 865 | |
| 866 | |
| 867 | portc_data = data; |
| 868 | } |
| 869 | |
| 870 | static WRITE8_DEVICE_HANDLER(pk8020_portb_w) |
| 871 | { |
| 872 | const device_config *fdc = devtag_get_device(device->machine, "wd1793"); |
| 873 | wd17xx_set_side(fdc,BIT(data,4)); |
| 874 | if (BIT(data,0)) { |
| 875 | wd17xx_set_drive(fdc,0); |
| 876 | } else if (BIT(data,1)) { |
| 877 | wd17xx_set_drive(fdc,1); |
| 878 | } else if (BIT(data,2)) { |
| 879 | wd17xx_set_drive(fdc,2); |
| 880 | } else if (BIT(data,3)) { |
| 881 | wd17xx_set_drive(fdc,3); |
| 843 | 882 | } |
| 844 | 883 | } |
| 845 | 884 | |
| 885 | static READ8_DEVICE_HANDLER(pk8020_portc_r) |
| 886 | { |
| 887 | return portc_data; |
| 888 | } |
| 889 | |
| 890 | |
| 846 | 891 | I8255A_INTERFACE( pk8020_ppi8255_interface_1 ) |
| 847 | 892 | { |
| 848 | 893 | DEVCB_HANDLER(pk8020_porta_r), |
| 849 | 894 | DEVCB_NULL, |
| 895 | DEVCB_HANDLER(pk8020_portc_r), |
| 850 | 896 | DEVCB_NULL, |
| 851 | | DEVCB_NULL, |
| 852 | | DEVCB_NULL, |
| 897 | DEVCB_HANDLER(pk8020_portb_w), |
| 853 | 898 | DEVCB_HANDLER(pk8020_portc_w) |
| 854 | 899 | }; |
| 855 | 900 | static READ8_DEVICE_HANDLER(pk8020_unk_r) |
| r5285 | r5286 | |
| 926 | 971 | |
| 927 | 972 | MACHINE_RESET( pk8020 ) |
| 928 | 973 | { |
| 974 | const device_config *fdc = devtag_get_device(machine, "wd1793"); |
| 929 | 975 | pk8020_set_bank(machine,0); |
| 930 | 976 | cpu_set_irq_callback(cputag_get_cpu(machine, "maincpu"), pk8020_irq_callback); |
| 977 | |
| 978 | wd17xx_set_density (fdc,DEN_FM_HI); |
| 931 | 979 | } |
| 932 | 980 | |
| 933 | 981 | DEVICE_IMAGE_LOAD( pk8020_floppy ) |
| r5285 | r5286 | |
| 958 | 1006 | INTERRUPT_GEN( pk8020_interrupt ) |
| 959 | 1007 | { |
| 960 | 1008 | takt ^= 1; |
| 1009 | pic8259_set_irq_line(devtag_get_device(device->machine, "pic8259"),4,1); |
| 961 | 1010 | } |
| 962 | 1011 | |