trunk/src/mess/includes/pasopia.h
| r0 | r17668 | |
| 1 | #define PASOPIA_KEYBOARD \ |
| 2 | PORT_START("KEY0") \ |
| 3 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) \ |
| 4 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) \ |
| 5 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CAPS LOCK") PORT_CODE(KEYCODE_CAPSLOCK) \ |
| 6 | PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) \ |
| 7 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \ |
| 8 | PORT_DIPSETTING( 0x08, DEF_STR( On ) ) \ |
| 9 | PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) \ |
| 10 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \ |
| 11 | PORT_DIPSETTING( 0x10, DEF_STR( On ) ) \ |
| 12 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("KANA LOCK") \ |
| 13 | PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) \ |
| 14 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \ |
| 15 | PORT_DIPSETTING( 0x40, DEF_STR( On ) ) \ |
| 16 | PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) \ |
| 17 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \ |
| 18 | PORT_DIPSETTING( 0x80, DEF_STR( On ) ) \ |
| 19 | PORT_START("KEY1") \ |
| 20 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) \ |
| 21 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) \ |
| 22 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) \ |
| 23 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) \ |
| 24 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) \ |
| 25 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) \ |
| 26 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) \ |
| 27 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) \ |
| 28 | PORT_START("KEY2") \ |
| 29 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) \ |
| 30 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) \ |
| 31 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) \ |
| 32 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) \ |
| 33 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK) \ |
| 34 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) \ |
| 35 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL_PAD) \ |
| 36 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CODE(KEYCODE_ENTER) \ |
| 37 | PORT_START("KEY3") \ |
| 38 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("RIGHT") \ |
| 39 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Status?") \ |
| 40 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("BACKSPACE") \ |
| 41 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) \ |
| 42 | PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) \ |
| 43 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \ |
| 44 | PORT_DIPSETTING( 0x10, DEF_STR( On ) ) \ |
| 45 | PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) \ |
| 46 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \ |
| 47 | PORT_DIPSETTING( 0x20, DEF_STR( On ) ) \ |
| 48 | PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) \ |
| 49 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \ |
| 50 | PORT_DIPSETTING( 0x40, DEF_STR( On ) ) \ |
| 51 | PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) \ |
| 52 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \ |
| 53 | PORT_DIPSETTING( 0x80, DEF_STR( On ) ) \ |
| 54 | PORT_START("KEY4") \ |
| 55 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_HOME) PORT_NAME("CLS") \ |
| 56 | PORT_DIPNAME( 0x02, 0x00, "4" ) \ |
| 57 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \ |
| 58 | PORT_DIPSETTING( 0x02, DEF_STR( On ) ) \ |
| 59 | PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) \ |
| 60 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \ |
| 61 | PORT_DIPSETTING( 0x04, DEF_STR( On ) ) \ |
| 62 | PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) \ |
| 63 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \ |
| 64 | PORT_DIPSETTING( 0x08, DEF_STR( On ) ) \ |
| 65 | PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) \ |
| 66 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \ |
| 67 | PORT_DIPSETTING( 0x10, DEF_STR( On ) ) \ |
| 68 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("LEFT") \ |
| 69 | PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) \ |
| 70 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \ |
| 71 | PORT_DIPSETTING( 0x40, DEF_STR( On ) ) \ |
| 72 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_NAME("SPACE") \ |
| 73 | PORT_START("KEY5") \ |
| 74 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_NAME("F1") \ |
| 75 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_NAME("F2") \ |
| 76 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3) PORT_NAME("F3") \ |
| 77 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_NAME("F4") \ |
| 78 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F5) PORT_NAME("F5") \ |
| 79 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F6) PORT_NAME("F6") \ |
| 80 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F7) PORT_NAME("F7") \ |
| 81 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F8) PORT_NAME("F8") \ |
| 82 | PORT_START("KEY6") \ |
| 83 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_NAME("1") \ |
| 84 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_NAME("2") \ |
| 85 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_NAME("4") \ |
| 86 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_NAME("R") \ |
| 87 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_NAME("Y") \ |
| 88 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("=") \ |
| 89 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("^") \ |
| 90 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Yen Symbol") \ |
| 91 | PORT_START("KEY7") \ |
| 92 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_NAME("2") \ |
| 93 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_NAME("3") \ |
| 94 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_NAME("8") \ |
| 95 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_NAME("T") \ |
| 96 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_NAME("U") \ |
| 97 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_NAME("7") \ |
| 98 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("@") \ |
| 99 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("[") \ |
| 100 | PORT_START("KEY8") \ |
| 101 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_NAME("-") \ |
| 102 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_NAME("5") \ |
| 103 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_NAME("6") \ |
| 104 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_NAME("F") \ |
| 105 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_NAME("H") \ |
| 106 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_NAME("9") \ |
| 107 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(":") \ |
| 108 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("]") \ |
| 109 | PORT_START("KEY9") \ |
| 110 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_NAME("Q") \ |
| 111 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_NAME("W") \ |
| 112 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_NAME("E") \ |
| 113 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_NAME("G") \ |
| 114 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_NAME("J") \ |
| 115 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_NAME("I") \ |
| 116 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_NAME("O") \ |
| 117 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_NAME("P") \ |
| 118 | PORT_START("KEYA") \ |
| 119 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_NAME("A") \ |
| 120 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_NAME("S") \ |
| 121 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_NAME("D") \ |
| 122 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_NAME("V") \ |
| 123 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_NAME("N") \ |
| 124 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_NAME("K") \ |
| 125 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_NAME("L") \ |
| 126 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(";") \ |
| 127 | PORT_START("KEYB") \ |
| 128 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_NAME("Z") \ |
| 129 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_NAME("X") \ |
| 130 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_NAME("C") \ |
| 131 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_NAME("B") \ |
| 132 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_NAME("M") \ |
| 133 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(",") \ |
| 134 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(".") \ |
| 135 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("/") |
trunk/src/mess/drivers/pasopia7.c
| r17667 | r17668 | |
| 23 | 23 | #include "sound/sn76496.h" |
| 24 | 24 | #include "video/mc6845.h" |
| 25 | 25 | #include "rendlay.h" |
| 26 | #include "includes/pasopia.h" |
| 26 | 27 | |
| 27 | 28 | class pasopia7_state : public driver_device |
| 28 | 29 | { |
| r17667 | r17668 | |
| 63 | 64 | DECLARE_WRITE8_MEMBER(pasopia7_fdc_w); |
| 64 | 65 | DECLARE_READ8_MEMBER(pasopia7_io_r); |
| 65 | 66 | DECLARE_WRITE8_MEMBER(pasopia7_io_w); |
| 66 | | DECLARE_READ8_MEMBER(test_r); |
| 67 | | DECLARE_WRITE_LINE_MEMBER(testa_w); |
| 68 | | DECLARE_WRITE_LINE_MEMBER(testb_w); |
| 67 | DECLARE_READ8_MEMBER(mux_r); |
| 68 | DECLARE_READ8_MEMBER(keyb_r); |
| 69 | DECLARE_WRITE8_MEMBER(mux_w); |
| 69 | 70 | DECLARE_READ8_MEMBER(crtc_portb_r); |
| 70 | 71 | DECLARE_WRITE8_MEMBER(screen_mode_w); |
| 71 | 72 | DECLARE_WRITE8_MEMBER(plane_reg_w); |
| r17667 | r17668 | |
| 101 | 102 | UINT8 m_screen_type; |
| 102 | 103 | int m_addr_latch; |
| 103 | 104 | void pasopia_nmi_trap(); |
| 105 | UINT8 m_mux_data; |
| 104 | 106 | DECLARE_DRIVER_INIT(p7_lcd); |
| 105 | 107 | DECLARE_DRIVER_INIT(p7_raster); |
| 106 | 108 | }; |
| r17667 | r17668 | |
| 128 | 130 | ram_space->write_byte(0xfce1,_charset_); \ |
| 129 | 131 | } \ |
| 130 | 132 | |
| 131 | | /* cheap kludge to use the keyboard without going nuts with the debugger ... */ |
| 132 | | static void fake_keyboard_data(running_machine &machine) |
| 133 | | { |
| 134 | | address_space *ram_space = machine.device("maincpu")->memory().space(AS_PROGRAM); |
| 135 | 133 | |
| 136 | | ram_space->write_byte(0xfda4,0x00); //clear flag |
| 137 | | |
| 138 | | keyb_press(KEYCODE_Z, 'z'); |
| 139 | | keyb_press(KEYCODE_X, 'x'); |
| 140 | | keyb_press(KEYCODE_C, 'c'); |
| 141 | | keyb_press(KEYCODE_V, 'v'); |
| 142 | | keyb_press(KEYCODE_B, 'b'); |
| 143 | | keyb_press(KEYCODE_N, 'n'); |
| 144 | | keyb_press(KEYCODE_M, 'm'); |
| 145 | | |
| 146 | | keyb_press(KEYCODE_A, 'a'); |
| 147 | | keyb_press(KEYCODE_S, 's'); |
| 148 | | keyb_press(KEYCODE_D, 'd'); |
| 149 | | keyb_press(KEYCODE_F, 'f'); |
| 150 | | keyb_press(KEYCODE_G, 'g'); |
| 151 | | keyb_press(KEYCODE_H, 'h'); |
| 152 | | keyb_press(KEYCODE_J, 'j'); |
| 153 | | keyb_press(KEYCODE_K, 'k'); |
| 154 | | keyb_press(KEYCODE_L, 'l'); |
| 155 | | |
| 156 | | keyb_press(KEYCODE_Q, 'q'); |
| 157 | | keyb_press(KEYCODE_W, 'w'); |
| 158 | | keyb_press(KEYCODE_E, 'e'); |
| 159 | | keyb_press(KEYCODE_R, 'r'); |
| 160 | | keyb_press(KEYCODE_T, 't'); |
| 161 | | keyb_press(KEYCODE_Y, 'y'); |
| 162 | | keyb_press(KEYCODE_U, 'u'); |
| 163 | | keyb_press(KEYCODE_I, 'i'); |
| 164 | | keyb_press(KEYCODE_O, 'o'); |
| 165 | | keyb_press(KEYCODE_P, 'p'); |
| 166 | | |
| 167 | | keyb_press(KEYCODE_0, '0'); |
| 168 | | keyb_press(KEYCODE_1, '1'); |
| 169 | | keyb_press(KEYCODE_2, '2'); |
| 170 | | keyb_press(KEYCODE_3, '3'); |
| 171 | | keyb_press(KEYCODE_4, '4'); |
| 172 | | keyb_press(KEYCODE_5, '5'); |
| 173 | | keyb_press(KEYCODE_6, '6'); |
| 174 | | keyb_press(KEYCODE_7, '7'); |
| 175 | | keyb_press(KEYCODE_8, '8'); |
| 176 | | keyb_press(KEYCODE_9, '9'); |
| 177 | | |
| 178 | | keyb_shift_press(KEYCODE_0, '='); |
| 179 | | keyb_shift_press(KEYCODE_1, '!'); |
| 180 | | keyb_shift_press(KEYCODE_2, '"'); |
| 181 | | keyb_shift_press(KEYCODE_3, '?'); |
| 182 | | keyb_shift_press(KEYCODE_4, '$'); |
| 183 | | keyb_shift_press(KEYCODE_5, '%'); |
| 184 | | keyb_shift_press(KEYCODE_6, '&'); |
| 185 | | keyb_shift_press(KEYCODE_7, '/'); |
| 186 | | keyb_shift_press(KEYCODE_8, '('); |
| 187 | | keyb_shift_press(KEYCODE_9, ')'); |
| 188 | | |
| 189 | | keyb_press(KEYCODE_ENTER, 0x0d); |
| 190 | | keyb_press(KEYCODE_SPACE, ' '); |
| 191 | | keyb_press(KEYCODE_STOP, '.'); |
| 192 | | keyb_shift_press(KEYCODE_STOP, ':'); |
| 193 | | keyb_press(KEYCODE_BACKSPACE, 0x08); |
| 194 | | keyb_press(KEYCODE_0_PAD, '@'); //@ |
| 195 | | keyb_press(KEYCODE_COMMA, ','); |
| 196 | | keyb_shift_press(KEYCODE_COMMA, ';'); |
| 197 | | keyb_press(KEYCODE_MINUS_PAD, '-'); |
| 198 | | keyb_press(KEYCODE_PLUS_PAD, '+'); |
| 199 | | keyb_press(KEYCODE_ASTERISK, '*'); |
| 200 | | } |
| 201 | | |
| 202 | 134 | static void draw_cg4_screen(running_machine &machine, bitmap_ind16 &bitmap,const rectangle &cliprect,int width) |
| 203 | 135 | { |
| 204 | 136 | UINT8 *vram = machine.root_device().memregion("vram")->base(); |
| r17667 | r17668 | |
| 376 | 308 | |
| 377 | 309 | bitmap.fill(screen.machine().pens[0], cliprect); |
| 378 | 310 | |
| 379 | | fake_keyboard_data(screen.machine()); |
| 380 | | |
| 381 | 311 | width = state->m_x_width ? 80 : 40; |
| 382 | 312 | |
| 383 | 313 | if(state->m_gfx_mode) |
| r17667 | r17668 | |
| 656 | 586 | |
| 657 | 587 | io_port = offset & 0xff; //trim down to 8-bit bus |
| 658 | 588 | |
| 659 | | if(io_port >= 0x30 && io_port <= 0x33) |
| 660 | | printf("[%02x]\n",offset & 3); |
| 661 | | |
| 662 | 589 | if(io_port >= 0x08 && io_port <= 0x0b) |
| 663 | 590 | return m_ppi0->read(space, io_port & 3); |
| 664 | 591 | else |
| r17667 | r17668 | |
| 679 | 606 | return m_ctc->read(space,io_port & 3); |
| 680 | 607 | else |
| 681 | 608 | if(io_port >= 0x30 && io_port <= 0x33) |
| 682 | | return m_pio->read_alt(space, io_port & 3); |
| 609 | return m_pio->read(space, io_port & 3); |
| 683 | 610 | // else if(io_port == 0x3a) { SN1 } |
| 684 | 611 | // else if(io_port == 0x3b) { SN2 } |
| 685 | 612 | // else if(io_port == 0x3c) { bankswitch } |
| r17667 | r17668 | |
| 708 | 635 | |
| 709 | 636 | io_port = offset & 0xff; //trim down to 8-bit bus |
| 710 | 637 | |
| 711 | | if(io_port >= 0x30 && io_port <= 0x33) |
| 712 | | printf("[%02x] <- %02x\n",offset & 3,data); |
| 713 | | |
| 714 | 638 | if(io_port >= 0x08 && io_port <= 0x0b) |
| 715 | 639 | m_ppi0->write(space, io_port & 3, data); |
| 716 | 640 | else |
| r17667 | r17668 | |
| 733 | 657 | m_ctc->write(space, io_port & 3, data); |
| 734 | 658 | else |
| 735 | 659 | if(io_port >= 0x30 && io_port <= 0x33) |
| 736 | | m_pio->write_alt(space, io_port & 3, data); |
| 660 | m_pio->write(space, io_port & 3, data); |
| 737 | 661 | else |
| 738 | 662 | if(io_port == 0x3a) |
| 739 | 663 | m_sn1->write(space, 0, data); |
| r17667 | r17668 | |
| 766 | 690 | AM_RANGE( 0x0000, 0xffff) AM_READWRITE( pasopia7_io_r, pasopia7_io_w ) |
| 767 | 691 | ADDRESS_MAP_END |
| 768 | 692 | |
| 769 | | /* Input ports */ |
| 693 | /* TODO: where are SPACE and RETURN keys? */ |
| 770 | 694 | static INPUT_PORTS_START( pasopia7 ) |
| 695 | PASOPIA_KEYBOARD |
| 771 | 696 | INPUT_PORTS_END |
| 772 | 697 | |
| 773 | 698 | static const gfx_layout p7_chars_8x8 = |
| r17667 | r17668 | |
| 819 | 744 | DEVCB_DEVICE_LINE_MEMBER("z80ctc", z80ctc_device, trg3) // ZC/TO2 callback |
| 820 | 745 | }; |
| 821 | 746 | |
| 822 | | READ8_MEMBER( pasopia7_state::test_r ) |
| 747 | |
| 748 | READ8_MEMBER( pasopia7_state::mux_r ) |
| 823 | 749 | { |
| 824 | | return machine().rand(); |
| 750 | return m_mux_data; |
| 825 | 751 | } |
| 826 | 752 | |
| 827 | | WRITE_LINE_MEMBER( pasopia7_state::testa_w ) |
| 753 | READ8_MEMBER( pasopia7_state::keyb_r ) |
| 828 | 754 | { |
| 829 | | printf("A %02x\n",state); |
| 755 | const char *const keynames[3][4] = { { "KEY0", "KEY1", "KEY2", "KEY3" }, |
| 756 | { "KEY4", "KEY5", "KEY6", "KEY7" }, |
| 757 | { "KEY8", "KEY9", "KEYA", "KEYB" } }; |
| 758 | int i,j; |
| 759 | UINT8 res; |
| 760 | |
| 761 | res = 0; |
| 762 | for(j=0;j<3;j++) |
| 763 | { |
| 764 | if(m_mux_data & 0x10 << j) |
| 765 | { |
| 766 | for(i=0;i<4;i++) |
| 767 | { |
| 768 | if(m_mux_data & 1 << i) |
| 769 | res |= ioport(keynames[j][i])->read(); |
| 770 | } |
| 771 | } |
| 772 | } |
| 773 | |
| 774 | return res ^ 0xff; |
| 830 | 775 | } |
| 831 | 776 | |
| 832 | | WRITE_LINE_MEMBER( pasopia7_state::testb_w ) |
| 777 | WRITE8_MEMBER( pasopia7_state::mux_w ) |
| 833 | 778 | { |
| 834 | | printf("B %02x\n",state); |
| 779 | m_mux_data = data; |
| 835 | 780 | } |
| 836 | 781 | |
| 837 | 782 | static Z80PIO_INTERFACE( z80pio_intf ) |
| 838 | 783 | { |
| 839 | 784 | DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), //doesn't work? |
| 840 | | DEVCB_DRIVER_MEMBER(pasopia7_state, test_r), |
| 785 | DEVCB_DRIVER_MEMBER(pasopia7_state, mux_r), |
| 786 | DEVCB_DRIVER_MEMBER(pasopia7_state, mux_w), |
| 841 | 787 | DEVCB_NULL, |
| 842 | | DEVCB_DRIVER_LINE_MEMBER(pasopia7_state, testa_w), |
| 843 | | DEVCB_DRIVER_MEMBER(pasopia7_state, test_r), |
| 788 | DEVCB_DRIVER_MEMBER(pasopia7_state, keyb_r), |
| 844 | 789 | DEVCB_NULL, |
| 845 | | DEVCB_DRIVER_LINE_MEMBER(pasopia7_state, testb_w) |
| 790 | DEVCB_NULL |
| 846 | 791 | }; |
| 847 | 792 | |
| 848 | 793 | static const z80_daisy_config p7_daisy[] = |
| r17667 | r17668 | |
| 1049 | 994 | * Sound interface |
| 1050 | 995 | * |
| 1051 | 996 | *************************************/ |
| 1052 | | |
| 1053 | | |
| 997 | |
| 998 | |
| 1054 | 999 | //------------------------------------------------- |
| 1055 | 1000 | // sn76496_config psg_intf |
| 1056 | 1001 | //------------------------------------------------- |
trunk/src/mess/drivers/pasopia.c
| r17667 | r17668 | |
| 17 | 17 | #include "machine/z80pio.h" |
| 18 | 18 | #include "video/mc6845.h" |
| 19 | 19 | #include "machine/keyboard.h" |
| 20 | #include "includes/pasopia.h" |
| 20 | 21 | |
| 21 | 22 | class pasopia_state : public driver_device |
| 22 | 23 | { |
| r17667 | r17668 | |
| 55 | 56 | DECLARE_WRITE_LINE_MEMBER(testa_w); |
| 56 | 57 | DECLARE_WRITE_LINE_MEMBER(testb_w); |
| 57 | 58 | DECLARE_WRITE8_MEMBER(kbd_put); |
| 59 | DECLARE_READ8_MEMBER(mux_r); |
| 60 | DECLARE_READ8_MEMBER(keyb_r); |
| 61 | DECLARE_WRITE8_MEMBER(mux_w); |
| 58 | 62 | |
| 59 | 63 | UINT8 m_hblank; |
| 60 | 64 | UINT16 m_vram_addr; |
| 61 | 65 | UINT8 m_vram_latch; |
| 62 | 66 | UINT8 m_attr_latch; |
| 63 | 67 | // UINT8 m_gfx_mode; |
| 68 | UINT8 m_mux_data; |
| 64 | 69 | bool m_video_wl; |
| 65 | 70 | bool m_ram_bank; |
| 66 | 71 | UINT8 *m_p_vram; |
| r17667 | r17668 | |
| 125 | 130 | // 0x1c - 0x1f something |
| 126 | 131 | AM_RANGE(0x20,0x23) AM_DEVREADWRITE("ppi8255_2", i8255_device, read, write) |
| 127 | 132 | AM_RANGE(0x28,0x2b) AM_DEVREADWRITE("z80ctc", z80ctc_device, read, write) |
| 128 | | AM_RANGE(0x30,0x33) AM_DEVREADWRITE("z80pio", z80pio_device, read_alt, write_alt) |
| 133 | AM_RANGE(0x30,0x33) AM_DEVREADWRITE("z80pio", z80pio_device, read, write) |
| 129 | 134 | // 0x38 printer |
| 130 | 135 | AM_RANGE(0x3c,0x3c) AM_WRITE(pasopia_ctrl_w) |
| 131 | 136 | ADDRESS_MAP_END |
| 132 | 137 | |
| 133 | 138 | /* Input ports */ |
| 134 | 139 | static INPUT_PORTS_START( pasopia ) |
| 140 | PASOPIA_KEYBOARD |
| 135 | 141 | INPUT_PORTS_END |
| 136 | 142 | |
| 137 | 143 | static MACHINE_START(pasopia) |
| r17667 | r17668 | |
| 243 | 249 | DEVCB_DEVICE_LINE_MEMBER("z80ctc", z80ctc_device, trg3) // ZC/TO2 callback |
| 244 | 250 | }; |
| 245 | 251 | |
| 246 | | READ8_MEMBER( pasopia_state::testa_r ) |
| 252 | READ8_MEMBER( pasopia_state::mux_r ) |
| 247 | 253 | { |
| 248 | | printf("A R\n"); |
| 249 | | return 0xff; |
| 254 | return m_mux_data; |
| 250 | 255 | } |
| 251 | 256 | |
| 252 | | READ8_MEMBER( pasopia_state::testb_r ) |
| 257 | READ8_MEMBER( pasopia_state::keyb_r ) |
| 253 | 258 | { |
| 254 | | printf("B R\n"); |
| 255 | | return 0xff; |
| 256 | | } |
| 259 | const char *const keynames[3][4] = { { "KEY0", "KEY1", "KEY2", "KEY3" }, |
| 260 | { "KEY4", "KEY5", "KEY6", "KEY7" }, |
| 261 | { "KEY8", "KEY9", "KEYA", "KEYB" } }; |
| 262 | int i,j; |
| 263 | UINT8 res; |
| 257 | 264 | |
| 258 | | WRITE_LINE_MEMBER( pasopia_state::testa_w ) |
| 259 | | { |
| 260 | | printf("A %02x\n",state); |
| 265 | res = 0; |
| 266 | for(j=0;j<3;j++) |
| 267 | { |
| 268 | if(m_mux_data & 0x10 << j) |
| 269 | { |
| 270 | for(i=0;i<4;i++) |
| 271 | { |
| 272 | if(m_mux_data & 1 << i) |
| 273 | res |= ioport(keynames[j][i])->read(); |
| 274 | } |
| 275 | } |
| 276 | } |
| 277 | |
| 278 | return res ^ 0xff; |
| 261 | 279 | } |
| 262 | 280 | |
| 263 | | WRITE_LINE_MEMBER( pasopia_state::testb_w ) |
| 281 | WRITE8_MEMBER( pasopia_state::mux_w ) |
| 264 | 282 | { |
| 265 | | printf("B %02x\n",state); |
| 283 | m_mux_data = data; |
| 266 | 284 | } |
| 267 | 285 | |
| 268 | 286 | static Z80PIO_INTERFACE( z80pio_intf ) |
| 269 | 287 | { |
| 270 | 288 | DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), //doesn't work? |
| 271 | | DEVCB_DRIVER_MEMBER(pasopia_state, testa_r), // port A read |
| 272 | | DEVCB_NULL, // port A write |
| 273 | | DEVCB_DRIVER_LINE_MEMBER(pasopia_state, testa_w), // ready A |
| 274 | | DEVCB_DRIVER_MEMBER(pasopia_state, testb_r), // port B read |
| 275 | | DEVCB_NULL, // port B write |
| 276 | | DEVCB_DRIVER_LINE_MEMBER(pasopia_state, testb_w) // ready B |
| 289 | DEVCB_DRIVER_MEMBER(pasopia_state, mux_r), |
| 290 | DEVCB_DRIVER_MEMBER(pasopia_state, mux_w), |
| 291 | DEVCB_NULL, |
| 292 | DEVCB_DRIVER_MEMBER(pasopia_state, keyb_r), |
| 293 | DEVCB_NULL, |
| 294 | DEVCB_NULL |
| 277 | 295 | }; |
| 278 | 296 | |
| 279 | 297 | static const mc6845_interface mc6845_intf = |
| r17667 | r17668 | |
| 313 | 331 | { NULL } |
| 314 | 332 | }; |
| 315 | 333 | |
| 316 | | // temporary hack |
| 317 | | WRITE8_MEMBER( pasopia_state::kbd_put ) |
| 318 | | { |
| 319 | | address_space *mem = m_maincpu->memory().space(AS_PROGRAM); |
| 320 | | mem->write_byte(0xfe79, data); |
| 321 | | } |
| 322 | 334 | |
| 323 | | static ASCII_KEYBOARD_INTERFACE( keyboard_intf ) |
| 324 | | { |
| 325 | | DEVCB_DRIVER_MEMBER(pasopia_state, kbd_put) |
| 326 | | }; |
| 327 | 335 | |
| 328 | 336 | DRIVER_INIT_MEMBER(pasopia_state,pasopia) |
| 329 | 337 | { |
| r17667 | r17668 | |
| 364 | 372 | MCFG_I8255A_ADD( "ppi8255_2", ppi8255_intf_2 ) |
| 365 | 373 | MCFG_Z80CTC_ADD( "z80ctc", XTAL_4MHz, ctc_intf ) |
| 366 | 374 | MCFG_Z80PIO_ADD( "z80pio", XTAL_4MHz, z80pio_intf ) |
| 367 | | |
| 368 | | // temporary hack |
| 369 | | MCFG_ASCII_KEYBOARD_ADD(KEYBOARD_TAG, keyboard_intf) |
| 370 | 375 | MACHINE_CONFIG_END |
| 371 | 376 | |
| 372 | 377 | /* ROM definition */ |