src/mess/drivers/pasopia.c
| r8535 | r8536 | |
| 22 | 22 | static UINT8 bank_reg; |
| 23 | 23 | static UINT16 cursor_addr; |
| 24 | 24 | static UINT8 cursor_blink; |
| 25 | | static UINT8 plane_reg,attr_data; |
| 25 | static UINT8 plane_reg,attr_data,attr_wrap,attr_latch; |
| 26 | 26 | |
| 27 | 27 | static VIDEO_START( paso7 ) |
| 28 | 28 | { |
| 29 | 29 | p7_vram = auto_alloc_array(machine, UINT8, 0x10000); |
| 30 | 30 | } |
| 31 | 31 | |
| 32 | #define keyb_press(_val_,_charset_) \ |
| 33 | if(input_code_pressed(machine, _val_)) \ |
| 34 | { \ |
| 35 | memory_write_byte(ram_space,0xfda4,0x01); \ |
| 36 | memory_write_byte(ram_space,0xfce1,_charset_); \ |
| 37 | } \ |
| 38 | |
| 39 | #define keyb_shift_press(_val_,_charset_) \ |
| 40 | if(input_code_pressed(machine, _val_) && input_code_pressed(machine, KEYCODE_LSHIFT)) \ |
| 41 | { \ |
| 42 | memory_write_byte(ram_space,0xfda4,0x01); \ |
| 43 | memory_write_byte(ram_space,0xfce1,_charset_); \ |
| 44 | } \ |
| 45 | |
| 46 | /* cheap kludge to use the keyboard without going nuts with the debugger ... */ |
| 47 | static void fake_keyboard_data(running_machine *machine) |
| 48 | { |
| 49 | const address_space *ram_space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM); |
| 50 | |
| 51 | memory_write_byte(ram_space,0xfda4,0x00); //clear flag |
| 52 | |
| 53 | keyb_press(KEYCODE_Z, 'z'); |
| 54 | keyb_press(KEYCODE_X, 'x'); |
| 55 | keyb_press(KEYCODE_C, 'c'); |
| 56 | keyb_press(KEYCODE_V, 'v'); |
| 57 | keyb_press(KEYCODE_B, 'b'); |
| 58 | keyb_press(KEYCODE_N, 'n'); |
| 59 | keyb_press(KEYCODE_M, 'm'); |
| 60 | |
| 61 | keyb_press(KEYCODE_A, 'a'); |
| 62 | keyb_press(KEYCODE_S, 's'); |
| 63 | keyb_press(KEYCODE_D, 'd'); |
| 64 | keyb_press(KEYCODE_F, 'f'); |
| 65 | keyb_press(KEYCODE_G, 'g'); |
| 66 | keyb_press(KEYCODE_H, 'h'); |
| 67 | keyb_press(KEYCODE_J, 'j'); |
| 68 | keyb_press(KEYCODE_K, 'k'); |
| 69 | keyb_press(KEYCODE_L, 'l'); |
| 70 | |
| 71 | keyb_press(KEYCODE_Q, 'q'); |
| 72 | keyb_press(KEYCODE_W, 'w'); |
| 73 | keyb_press(KEYCODE_E, 'e'); |
| 74 | keyb_press(KEYCODE_R, 'r'); |
| 75 | keyb_press(KEYCODE_T, 't'); |
| 76 | keyb_press(KEYCODE_Y, 'y'); |
| 77 | keyb_press(KEYCODE_U, 'u'); |
| 78 | keyb_press(KEYCODE_I, 'i'); |
| 79 | keyb_press(KEYCODE_O, 'o'); |
| 80 | keyb_press(KEYCODE_P, 'p'); |
| 81 | |
| 82 | keyb_press(KEYCODE_0, '0'); |
| 83 | keyb_press(KEYCODE_1, '1'); |
| 84 | keyb_press(KEYCODE_2, '2'); |
| 85 | keyb_press(KEYCODE_3, '3'); |
| 86 | keyb_press(KEYCODE_4, '4'); |
| 87 | keyb_press(KEYCODE_5, '5'); |
| 88 | keyb_press(KEYCODE_6, '6'); |
| 89 | keyb_press(KEYCODE_7, '7'); |
| 90 | keyb_press(KEYCODE_8, '8'); |
| 91 | keyb_press(KEYCODE_9, '9'); |
| 92 | |
| 93 | keyb_shift_press(KEYCODE_0, '='); |
| 94 | keyb_shift_press(KEYCODE_1, '!'); |
| 95 | keyb_shift_press(KEYCODE_2, '"'); |
| 96 | keyb_shift_press(KEYCODE_3, '£'); |
| 97 | keyb_shift_press(KEYCODE_4, '$'); |
| 98 | keyb_shift_press(KEYCODE_5, '%'); |
| 99 | keyb_shift_press(KEYCODE_6, '&'); |
| 100 | keyb_shift_press(KEYCODE_7, '/'); |
| 101 | keyb_shift_press(KEYCODE_8, '('); |
| 102 | keyb_shift_press(KEYCODE_9, ')'); |
| 103 | |
| 104 | keyb_press(KEYCODE_ENTER, 0x0d); |
| 105 | keyb_press(KEYCODE_SPACE, ' '); |
| 106 | keyb_press(KEYCODE_STOP, '.'); |
| 107 | keyb_shift_press(KEYCODE_STOP, ':'); |
| 108 | keyb_press(KEYCODE_BACKSPACE, 0x08); |
| 109 | |
| 110 | } |
| 111 | |
| 32 | 112 | static VIDEO_UPDATE( paso7 ) |
| 33 | 113 | { |
| 34 | 114 | int x,y; |
| r8535 | r8536 | |
| 36 | 116 | |
| 37 | 117 | count = 0x0000; |
| 38 | 118 | |
| 119 | fake_keyboard_data(screen->machine); |
| 120 | |
| 39 | 121 | for(y=0;y<25;y++) |
| 40 | 122 | { |
| 41 | 123 | for(x=0;x<40;x++) |
| r8535 | r8536 | |
| 57 | 139 | |
| 58 | 140 | static READ8_HANDLER( vram_r ) |
| 59 | 141 | { |
| 60 | | // if(!vram_sel) |
| 61 | | // return 0xff; |
| 142 | //if(!vram_sel) |
| 143 | // return 0xff; |
| 62 | 144 | |
| 145 | attr_latch = p7_vram[offset | 0xc000]; |
| 146 | i8255a_w(devtag_get_device(space->machine, "ppi8255_0"), 1, (attr_latch << 4) | (attr_latch & 0x7)); |
| 147 | |
| 63 | 148 | return p7_vram[offset | 0x8000]; //TODO |
| 64 | 149 | } |
| 65 | 150 | |
| 66 | 151 | static WRITE8_HANDLER( vram_w ) |
| 67 | 152 | { |
| 68 | | // if(vram_sel) |
| 69 | | |
| 70 | | if((plane_reg & 0x44) == 0x44) |
| 153 | //if(vram_sel) |
| 71 | 154 | { |
| 72 | | p7_vram[offset | 0x8000] = data; |
| 73 | | p7_vram[offset | 0xc000] = attr_data; |
| 155 | if((plane_reg & 0x44) == 0x44) |
| 156 | { |
| 157 | p7_vram[offset | 0x8000] = data; |
| 158 | attr_latch = attr_wrap ? attr_latch : attr_data; |
| 159 | p7_vram[offset | 0xc000] = attr_latch; |
| 160 | i8255a_w(devtag_get_device(space->machine, "ppi8255_0"), 1, (attr_latch << 4) | (attr_latch & 0x7)); |
| 161 | } |
| 74 | 162 | } |
| 75 | 163 | } |
| 76 | 164 | |
| r8535 | r8536 | |
| 195 | 283 | { |
| 196 | 284 | const address_space *ram_space = cputag_get_address_space(space->machine, "maincpu", ADDRESS_SPACE_PROGRAM); |
| 197 | 285 | mio_sel = 0; |
| 198 | | printf("%08x\n",offset); |
| 286 | //printf("%08x\n",offset); |
| 199 | 287 | //return 0x0d; // hack: this is used for reading the keyboard data, we can fake it a little ... (modify fda4) |
| 200 | 288 | return memory_read_byte(ram_space, offset); |
| 201 | 289 | } |
| r8535 | r8536 | |
| 378 | 466 | */ |
| 379 | 467 | // printf("VIDEO MISC REG %02x\n",data); |
| 380 | 468 | cursor_blink = data & 0x20; |
| 469 | attr_wrap = data & 0x10; |
| 381 | 470 | |
| 382 | 471 | } |
| 383 | 472 | |
| r8535 | r8536 | |
| 474 | 563 | |
| 475 | 564 | if(((i & 0x11) == 0x01) || ((i & 0x11) == 0x10)) |
| 476 | 565 | { |
| 477 | | r = ((i >> 3) & 1) ? 0xff : 0x00; |
| 478 | | g = ((i >> 2) & 1) ? 0xff : 0x00; |
| 566 | r = ((i >> 2) & 1) ? 0xff : 0x00; |
| 567 | g = ((i >> 3) & 1) ? 0xff : 0x00; |
| 479 | 568 | b = ((i >> 1) & 1) ? 0xff : 0x00; |
| 480 | 569 | } |
| 481 | 570 | else { r = g = b = 0x00; } |