trunk/src/mess/video/nick.c
| r23590 | r23591 | |
| 67 | 67 | /* "clocks" per line */ |
| 68 | 68 | #define NICK_TOTAL_CLOCKS_PER_LINE 64 |
| 69 | 69 | |
| 70 | | /* Enterprise has 256 colours, all may be on the screen at once! |
| 71 | | the NICK_GET_RED8, NICK_GET_GREEN8, NICK_GET_BLUE8 macros |
| 72 | | return a 8-bit colour value for the index specified. */ |
| 73 | 70 | |
| 74 | | /* given a colour index in range 0..255 gives the Red component */ |
| 75 | | #define NICK_GET_RED8(x) \ |
| 76 | | (( \ |
| 77 | | (BIT(x, 0) << 2) | \ |
| 78 | | (BIT(x, 3) << 1) | \ |
| 79 | | (BIT(x, 6) << 0) \ |
| 80 | | ) << 5) |
| 81 | 71 | |
| 82 | | /* given a colour index in range 0..255 gives the Red component */ |
| 83 | | #define NICK_GET_GREEN8(x) \ |
| 84 | | (( \ |
| 85 | | (BIT(x, 1) << 2) | \ |
| 86 | | (BIT(x, 4) << 1) | \ |
| 87 | | (BIT(x, 7) << 0) \ |
| 88 | | ) << 5) |
| 89 | | |
| 90 | | /* given a colour index in range 0..255 gives the Red component */ |
| 91 | | #define NICK_GET_BLUE8(x) \ |
| 92 | | (( \ |
| 93 | | (BIT(x, 2) << 1) | \ |
| 94 | | (BIT(x, 5) << 0) \ |
| 95 | | ) << 6) |
| 96 | | |
| 97 | | |
| 98 | | |
| 99 | 72 | //************************************************************************** |
| 100 | 73 | // DEVICE DEFINITIONS |
| 101 | 74 | //************************************************************************** |
| r23590 | r23591 | |
| 114 | 87 | AM_RANGE(0x03, 0x03) AM_WRITE(lph_w) |
| 115 | 88 | ADDRESS_MAP_END |
| 116 | 89 | |
| 90 | |
| 117 | 91 | static ADDRESS_MAP_START( nick_map, AS_0, 8, nick_device ) |
| 118 | 92 | AM_RANGE(0x0000, 0xffff) AM_RAM |
| 119 | 93 | ADDRESS_MAP_END |
| r23590 | r23591 | |
| 129 | 103 | //------------------------------------------------- |
| 130 | 104 | |
| 131 | 105 | nick_device::nick_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 132 | | : device_t(mconfig, NICK, "NICK", tag, owner, clock), |
| 106 | : device_t(mconfig, NICK, "NICK", tag, owner, clock, "nick", __FILE__), |
| 133 | 107 | device_memory_interface(mconfig, *this), |
| 134 | 108 | m_space_config("vram", ENDIANNESS_LITTLE, 8, 16, 0, *ADDRESS_MAP_NAME(nick_map)), |
| 135 | | m_write_virq(*this) |
| 109 | m_write_virq(*this), |
| 110 | horizontal_clock(0), |
| 111 | m_scanline_count(0), |
| 112 | m_FIXBIAS(0), |
| 113 | m_BORDER(0), |
| 114 | m_LPL(0), |
| 115 | m_LPH(0), |
| 116 | m_LD1(0), |
| 117 | m_LD2(0), |
| 118 | m_virq(CLEAR_LINE) |
| 136 | 119 | { |
| 137 | 120 | } |
| 138 | 121 | |
| r23590 | r23591 | |
| 143 | 126 | |
| 144 | 127 | void nick_device::device_start() |
| 145 | 128 | { |
| 146 | | screen_device *screen = machine().first_screen(); |
| 147 | | |
| 148 | | screen->register_screen_bitmap(m_bitmap); |
| 129 | m_screen = machine().device<screen_device>(m_screen_tag); |
| 130 | m_screen->register_screen_bitmap(m_bitmap); |
| 149 | 131 | calc_visible_clocks(ENTERPRISE_SCREEN_WIDTH); |
| 150 | 132 | |
| 151 | 133 | // initialize palette |
| 152 | | for (int i = 0; i < 256; i++) |
| 153 | | palette_set_color_rgb(machine(), i, NICK_GET_RED8(i), NICK_GET_GREEN8(i), NICK_GET_BLUE8(i)); |
| 134 | initialize_palette(); |
| 154 | 135 | |
| 155 | 136 | // resolve callbacks |
| 156 | 137 | m_write_virq.resolve_safe(); |
| 157 | 138 | |
| 158 | 139 | // allocate timers |
| 159 | 140 | m_timer_scanline = timer_alloc(); |
| 160 | | m_timer_scanline->adjust(screen->time_until_pos(0, 0), 0, screen->scan_period()); |
| 141 | m_timer_scanline->adjust(m_screen->time_until_pos(0, 0), 0, m_screen->scan_period()); |
| 161 | 142 | |
| 162 | 143 | // state saving |
| 163 | 144 | save_item(NAME(m_scanline_count)); |
| r23590 | r23591 | |
| 193 | 174 | m_write_virq(CLEAR_LINE); |
| 194 | 175 | m_virq = 0; |
| 195 | 176 | |
| 196 | | for (int i = 0; i < 256; i++) |
| 197 | | { |
| 198 | | int pen_index; |
| 199 | | |
| 200 | | pen_index = (BIT(i, 7) << 0) | (BIT(i, 3) << 1); |
| 201 | | m_pen_idx_4col[i] = pen_index; |
| 202 | | |
| 203 | | pen_index = (BIT(i, 7) << 0) | (BIT(i, 3) << 1) | (BIT(i, 5) << 2) | (BIT(i, 1) << 3); |
| 204 | | m_pen_idx_16col[i] = pen_index; |
| 205 | | } |
| 206 | | |
| 207 | 177 | m_scanline_count = 0; |
| 208 | 178 | } |
| 209 | 179 | |
| r23590 | r23591 | |
| 214 | 184 | |
| 215 | 185 | void nick_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) |
| 216 | 186 | { |
| 217 | | int scanline = machine().first_screen()->vpos(); |
| 187 | int scanline = m_screen->vpos(); |
| 218 | 188 | |
| 219 | 189 | if (scanline < ENTERPRISE_SCREEN_HEIGHT) |
| 220 | 190 | { |
| 221 | 191 | /* set write address for line */ |
| 222 | | m_dest = &m_bitmap.pix16(scanline); |
| 192 | m_dest = &m_bitmap.pix32(scanline); |
| 223 | 193 | m_dest_pos = 0; |
| 224 | 194 | m_dest_max_pos = m_bitmap.width(); |
| 225 | 195 | |
| r23590 | r23591 | |
| 244 | 214 | // update_screen - update screen |
| 245 | 215 | //------------------------------------------------- |
| 246 | 216 | |
| 247 | | UINT32 nick_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 217 | UINT32 nick_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) |
| 248 | 218 | { |
| 249 | 219 | copybitmap(bitmap, m_bitmap, 0, 0, 0, 0, cliprect); |
| 250 | 220 | |
| r23590 | r23591 | |
| 258 | 228 | |
| 259 | 229 | READ8_MEMBER( nick_device::vram_r ) |
| 260 | 230 | { |
| 261 | | return m_addrspace[0]->read_byte(offset); |
| 231 | return this->space().read_byte(offset); |
| 262 | 232 | } |
| 263 | 233 | |
| 264 | 234 | |
| r23590 | r23591 | |
| 268 | 238 | |
| 269 | 239 | WRITE8_MEMBER( nick_device::vram_w ) |
| 270 | 240 | { |
| 271 | | m_addrspace[0]->write_byte(offset, data); |
| 241 | this->space().write_byte(offset, data); |
| 272 | 242 | } |
| 273 | 243 | |
| 274 | 244 | |
| r23590 | r23591 | |
| 316 | 286 | } |
| 317 | 287 | |
| 318 | 288 | |
| 289 | //------------------------------------------------- |
| 290 | // initialize_palette - |
| 291 | //------------------------------------------------- |
| 292 | |
| 293 | void nick_device::initialize_palette() |
| 294 | { |
| 295 | const int resistances_rg[] = { RES_R(470), RES_R(220), RES_R(100) }; |
| 296 | const int resistances_b[] = { RES_R(220), RES_R(82) }; |
| 297 | |
| 298 | double color_weights_rg[3], color_weights_b[2]; |
| 299 | |
| 300 | compute_resistor_weights(0, 0xff, -1.0, |
| 301 | 3, resistances_rg, color_weights_rg, 0, 0, |
| 302 | 2, resistances_b, color_weights_b, 0, 0, |
| 303 | 0, 0, 0, 0, 0); |
| 304 | |
| 305 | for (int i = 0; i < 256; i++) |
| 306 | { |
| 307 | /* |
| 308 | |
| 309 | bit description |
| 310 | |
| 311 | PC0 100R -- RED |
| 312 | PC1 100R -- GREEN |
| 313 | PC2 82R -- BLUE |
| 314 | PC3 220R -- RED |
| 315 | PC4 220R -- GREEN |
| 316 | PC5 220R -- BLUE |
| 317 | PC6 470R -- RED |
| 318 | PC7 470R -- GREEN |
| 319 | |
| 320 | */ |
| 321 | |
| 322 | int ra = BIT(i, 0); |
| 323 | int rb = BIT(i, 3); |
| 324 | int rc = BIT(i, 6); |
| 325 | |
| 326 | int ga = BIT(i, 1); |
| 327 | int gb = BIT(i, 4); |
| 328 | int gc = BIT(i, 7); |
| 329 | |
| 330 | int ba = BIT(i, 2); |
| 331 | int bb = BIT(i, 5); |
| 332 | |
| 333 | UINT8 r = combine_3_weights(color_weights_rg, rc, rb, ra); |
| 334 | UINT8 g = combine_3_weights(color_weights_rg, gc, gb, ga); |
| 335 | UINT8 b = combine_2_weights(color_weights_b, bb, ba); |
| 336 | |
| 337 | m_palette[i] = MAKE_RGB(r, g, b); |
| 338 | } |
| 339 | |
| 340 | for (int i = 0; i < 256; i++) |
| 341 | { |
| 342 | int pen_index; |
| 343 | |
| 344 | pen_index = (BIT(i, 7) << 0) | (BIT(i, 3) << 1); |
| 345 | m_pen_idx_4col[i] = pen_index; |
| 346 | |
| 347 | pen_index = (BIT(i, 7) << 0) | (BIT(i, 3) << 1) | (BIT(i, 5) << 2) | (BIT(i, 1) << 3); |
| 348 | m_pen_idx_16col[i] = pen_index; |
| 349 | } |
| 350 | } |
| 351 | |
| 319 | 352 | // MESS specific |
| 320 | 353 | /* 8-bit pixel write! */ |
| 321 | 354 | void nick_device::write_pixel(int ci) |
| 322 | 355 | { |
| 323 | 356 | if (m_dest_pos < m_dest_max_pos) |
| 324 | 357 | { |
| 325 | | m_dest[m_dest_pos++] = ci; |
| 358 | m_dest[m_dest_pos++] = m_palette[ci]; |
| 326 | 359 | } |
| 327 | 360 | } |
| 328 | 361 | |
| r23590 | r23591 | |
| 745 | 778 | |
| 746 | 779 | for (int i = 0; i < clocks_visible; i++) |
| 747 | 780 | { |
| 748 | | buf1 = m_addrspace[0]->read_byte(m_LD1); |
| 781 | buf1 = space().read_byte(m_LD1); |
| 749 | 782 | m_LD1++; |
| 750 | 783 | |
| 751 | | buf2 = m_addrspace[0]->read_byte(m_LD1); |
| 784 | buf2 = space().read_byte(m_LD1); |
| 752 | 785 | m_LD1++; |
| 753 | 786 | |
| 754 | 787 | write_pixels(buf1, buf1); |
| r23590 | r23591 | |
| 763 | 796 | |
| 764 | 797 | for (int i = 0; i < clocks_visible; i++) |
| 765 | 798 | { |
| 766 | | buf1 = m_addrspace[0]->read_byte(m_LD1); |
| 799 | buf1 = space().read_byte(m_LD1); |
| 767 | 800 | m_LD1++; |
| 768 | 801 | |
| 769 | 802 | write_pixels_lpixel(buf1, buf1); |
| r23590 | r23591 | |
| 776 | 809 | |
| 777 | 810 | for (int i = 0; i < clocks_visible; i++) |
| 778 | 811 | { |
| 779 | | buf1 = m_addrspace[0]->read_byte(m_LD1); |
| 812 | buf1 = space().read_byte(m_LD1); |
| 780 | 813 | m_LD1++; |
| 781 | 814 | |
| 782 | | buf2 = m_addrspace[0]->read_byte(m_LD2); |
| 815 | buf2 = space().read_byte(m_LD2); |
| 783 | 816 | m_LD2++; |
| 784 | 817 | |
| 785 | 818 | { |
| r23590 | r23591 | |
| 797 | 830 | |
| 798 | 831 | for (int i = 0; i < clocks_visible; i++) |
| 799 | 832 | { |
| 800 | | buf1 = m_addrspace[0]->read_byte(m_LD1); |
| 833 | buf1 = space().read_byte(m_LD1); |
| 801 | 834 | m_LD1++; |
| 802 | | buf2 = m_addrspace[0]->read_byte(ADDR_CH256(m_LD2, buf1)); |
| 835 | buf2 = space().read_byte(ADDR_CH256(m_LD2, buf1)); |
| 803 | 836 | |
| 804 | 837 | write_pixels_lpixel(buf2, buf1); |
| 805 | 838 | } |
| r23590 | r23591 | |
| 811 | 844 | |
| 812 | 845 | for (int i = 0; i < clocks_visible; i++) |
| 813 | 846 | { |
| 814 | | buf1 = m_addrspace[0]->read_byte(m_LD1); |
| 847 | buf1 = space().read_byte(m_LD1); |
| 815 | 848 | m_LD1++; |
| 816 | | buf2 = m_addrspace[0]->read_byte(ADDR_CH128(m_LD2, buf1)); |
| 849 | buf2 = space().read_byte(ADDR_CH128(m_LD2, buf1)); |
| 817 | 850 | |
| 818 | 851 | write_pixels_lpixel(buf2, buf1); |
| 819 | 852 | } |
| r23590 | r23591 | |
| 825 | 858 | |
| 826 | 859 | for (int i = 0; i < clocks_visible; i++) |
| 827 | 860 | { |
| 828 | | buf1 = m_addrspace[0]->read_byte(m_LD1); |
| 861 | buf1 = space().read_byte(m_LD1); |
| 829 | 862 | m_LD1++; |
| 830 | | buf2 = m_addrspace[0]->read_byte(ADDR_CH64(m_LD2, buf1)); |
| 863 | buf2 = space().read_byte(ADDR_CH64(m_LD2, buf1)); |
| 831 | 864 | |
| 832 | 865 | write_pixels_lpixel(buf2, buf1); |
| 833 | 866 | } |
| r23590 | r23591 | |
| 950 | 983 | UINT32 LPT_Addr = ((m_LPL & 0x0ff) << 4) | ((m_LPH & 0x0f) << (8+4)); |
| 951 | 984 | |
| 952 | 985 | /* update internal LPT state */ |
| 953 | | m_LPT.SC = m_addrspace[0]->read_byte(LPT_Addr); |
| 954 | | m_LPT.MB = m_addrspace[0]->read_byte(LPT_Addr + 1); |
| 955 | | m_LPT.LM = m_addrspace[0]->read_byte(LPT_Addr + 2); |
| 956 | | m_LPT.RM = m_addrspace[0]->read_byte(LPT_Addr + 3); |
| 957 | | m_LPT.LD1L = m_addrspace[0]->read_byte(LPT_Addr + 4); |
| 958 | | m_LPT.LD1H = m_addrspace[0]->read_byte(LPT_Addr + 5); |
| 959 | | m_LPT.LD2L = m_addrspace[0]->read_byte(LPT_Addr + 6); |
| 960 | | m_LPT.LD2H = m_addrspace[0]->read_byte(LPT_Addr + 7); |
| 961 | | m_LPT.COL[0] = m_addrspace[0]->read_byte(LPT_Addr + 8); |
| 962 | | m_LPT.COL[1] = m_addrspace[0]->read_byte(LPT_Addr + 9); |
| 963 | | m_LPT.COL[2] = m_addrspace[0]->read_byte(LPT_Addr + 10); |
| 964 | | m_LPT.COL[3] = m_addrspace[0]->read_byte(LPT_Addr + 11); |
| 965 | | m_LPT.COL[4] = m_addrspace[0]->read_byte(LPT_Addr + 12); |
| 966 | | m_LPT.COL[5] = m_addrspace[0]->read_byte(LPT_Addr + 13); |
| 967 | | m_LPT.COL[6] = m_addrspace[0]->read_byte(LPT_Addr + 14); |
| 968 | | m_LPT.COL[7] = m_addrspace[0]->read_byte(LPT_Addr + 15); |
| 986 | m_LPT.SC = space().read_byte(LPT_Addr); |
| 987 | m_LPT.MB = space().read_byte(LPT_Addr + 1); |
| 988 | m_LPT.LM = space().read_byte(LPT_Addr + 2); |
| 989 | m_LPT.RM = space().read_byte(LPT_Addr + 3); |
| 990 | m_LPT.LD1L = space().read_byte(LPT_Addr + 4); |
| 991 | m_LPT.LD1H = space().read_byte(LPT_Addr + 5); |
| 992 | m_LPT.LD2L = space().read_byte(LPT_Addr + 6); |
| 993 | m_LPT.LD2H = space().read_byte(LPT_Addr + 7); |
| 994 | m_LPT.COL[0] = space().read_byte(LPT_Addr + 8); |
| 995 | m_LPT.COL[1] = space().read_byte(LPT_Addr + 9); |
| 996 | m_LPT.COL[2] = space().read_byte(LPT_Addr + 10); |
| 997 | m_LPT.COL[3] = space().read_byte(LPT_Addr + 11); |
| 998 | m_LPT.COL[4] = space().read_byte(LPT_Addr + 12); |
| 999 | m_LPT.COL[5] = space().read_byte(LPT_Addr + 13); |
| 1000 | m_LPT.COL[6] = space().read_byte(LPT_Addr + 14); |
| 1001 | m_LPT.COL[7] = space().read_byte(LPT_Addr + 15); |
| 969 | 1002 | } |
| 970 | 1003 | |
| 971 | 1004 | /* call here to render a line of graphics */ |
| r23590 | r23591 | |
| 977 | 1010 | |
| 978 | 1011 | if (m_virq && !(m_LPT.MB & NICK_MB_VIRQ)) |
| 979 | 1012 | { |
| 980 | | screen_device *screen = machine().first_screen(); |
| 981 | | m_timer_scanline->adjust(screen->time_until_pos(0, 0), 0, screen->scan_period()); |
| 1013 | m_timer_scanline->adjust(m_screen->time_until_pos(0, 0), 0, m_screen->scan_period()); |
| 982 | 1014 | } |
| 983 | 1015 | |
| 984 | 1016 | m_virq = (m_LPT.MB & NICK_MB_VIRQ) ? 1 : 0; |
trunk/src/mess/drivers/ep64.c
| r23590 | r23591 | |
| 312 | 312 | // ADDRESS_MAP( dave_64k_mem ) |
| 313 | 313 | //------------------------------------------------- |
| 314 | 314 | |
| 315 | | static ADDRESS_MAP_START( dave_64k_mem, DAVE_AS_PROGRAM, 8, ep64_state ) |
| 315 | static ADDRESS_MAP_START( dave_64k_mem, AS_PROGRAM, 8, ep64_state ) |
| 316 | 316 | AM_RANGE(0x000000, 0x007fff) AM_ROM AM_REGION(Z80_TAG, 0) |
| 317 | 317 | AM_RANGE(0x010000, 0x01ffff) AM_ROM AM_REGION("cart", 0) |
| 318 | 318 | AM_RANGE(0x3f0000, 0x3fffff) AM_DEVICE(NICK_TAG, nick_device, vram_map) |
| r23590 | r23591 | |
| 323 | 323 | // ADDRESS_MAP( dave_128k_mem ) |
| 324 | 324 | //------------------------------------------------- |
| 325 | 325 | |
| 326 | | static ADDRESS_MAP_START( dave_128k_mem, DAVE_AS_PROGRAM, 8, ep64_state ) |
| 326 | static ADDRESS_MAP_START( dave_128k_mem, AS_PROGRAM, 8, ep64_state ) |
| 327 | 327 | AM_IMPORT_FROM(dave_64k_mem) |
| 328 | 328 | AM_RANGE(0x3e0000, 0x3effff) AM_RAM |
| 329 | 329 | ADDRESS_MAP_END |
| r23590 | r23591 | |
| 333 | 333 | // ADDRESS_MAP( dave_io ) |
| 334 | 334 | //------------------------------------------------- |
| 335 | 335 | |
| 336 | | static ADDRESS_MAP_START( dave_io, DAVE_AS_IO, 8, ep64_state ) |
| 336 | static ADDRESS_MAP_START( dave_io, AS_IO, 8, ep64_state ) |
| 337 | 337 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 338 | 338 | AM_RANGE(0x80, 0x8f) AM_DEVICE(NICK_TAG, nick_device, vio_map) |
| 339 | 339 | AM_RANGE(0xb5, 0xb5) AM_READWRITE(rd0_r, wr0_w) |
| r23590 | r23591 | |
| 353 | 353 | |
| 354 | 354 | static INPUT_PORTS_START( ep64 ) |
| 355 | 355 | PORT_START("Y0") |
| 356 | | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') |
| 357 | | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('\\') PORT_CHAR('|') |
| 358 | | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') |
| 359 | | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') |
| 360 | | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') |
| 361 | | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') |
| 362 | | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') |
| 363 | | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) |
| 356 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') |
| 357 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('\\') PORT_CHAR('|') |
| 358 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') |
| 359 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') |
| 360 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') |
| 361 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') |
| 362 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') |
| 363 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Left SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) |
| 364 | 364 | |
| 365 | 365 | PORT_START("Y1") |
| 366 | | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') |
| 367 | | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("LOCK") PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9)) |
| 368 | | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') |
| 369 | | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') |
| 370 | | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') |
| 371 | | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') |
| 372 | | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') |
| 373 | | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2) |
| 366 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') |
| 367 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) |
| 368 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') |
| 369 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') |
| 370 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') |
| 371 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') |
| 372 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') |
| 373 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) |
| 374 | 374 | |
| 375 | 375 | PORT_START("Y2") |
| 376 | | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') |
| 377 | | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') |
| 378 | | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') |
| 379 | | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') |
| 380 | | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') |
| 381 | | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') |
| 382 | | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') |
| 383 | | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t') |
| 376 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') |
| 377 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') |
| 378 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') |
| 379 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') |
| 380 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') |
| 381 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') |
| 382 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') |
| 383 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("TAB") PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t') |
| 384 | 384 | |
| 385 | 385 | PORT_START("Y3") |
| 386 | | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'') |
| 387 | | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') |
| 388 | | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&') |
| 389 | | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') |
| 390 | | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') |
| 391 | | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3 \xC2\xA3") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('\xA3') |
| 392 | | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"') |
| 393 | | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) |
| 386 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'') |
| 387 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') |
| 388 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&') |
| 389 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') |
| 390 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') |
| 391 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("3 \xC2\xA3") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR(0x00a3) |
| 392 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"') |
| 393 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ESC") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) |
| 394 | 394 | |
| 395 | 395 | PORT_START("Y4") |
| 396 | | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) |
| 397 | | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8)) |
| 398 | | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) |
| 399 | | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6)) |
| 400 | | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) |
| 401 | | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7)) |
| 402 | | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) |
| 403 | | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) |
| 396 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 4") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) |
| 397 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 8") PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8)) |
| 398 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 3") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) |
| 399 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 6") PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6)) |
| 400 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 5") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) |
| 401 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 7") PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7)) |
| 402 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) |
| 403 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("FUNCTION 1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) |
| 404 | 404 | |
| 405 | 405 | PORT_START("Y5") |
| 406 | | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') |
| 407 | | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) |
| 408 | | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')') |
| 409 | | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=') |
| 410 | | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('_') |
| 411 | | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('^') PORT_CHAR('~') |
| 412 | | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("ERASE") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) |
| 413 | | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) |
| 406 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') |
| 407 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 408 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')') |
| 409 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=') |
| 410 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('_') |
| 411 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('^') PORT_CHAR('~') |
| 412 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ERASE") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) |
| 413 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 414 | 414 | |
| 415 | 415 | PORT_START("Y6") |
| 416 | | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') |
| 417 | | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) |
| 418 | | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') |
| 419 | | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+') |
| 420 | | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') |
| 421 | | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*') |
| 422 | | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR(']') PORT_CHAR('}') |
| 423 | | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) |
| 416 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') |
| 417 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 418 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') |
| 419 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+') |
| 420 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') |
| 421 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*') |
| 422 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR(']') PORT_CHAR('}') |
| 423 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 424 | 424 | |
| 425 | | /* Notice that, in fact, ep128 only had the built-in joystick and no cursor arrow keys on the keyboard */ |
| 426 | 425 | PORT_START("Y7") |
| 427 | | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("STOP") PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(F10)) |
| 428 | | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_CODE(JOYCODE_Y_DOWN_SWITCH) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) |
| 429 | | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_CODE(JOYCODE_X_RIGHT_SWITCH) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) |
| 430 | | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_CODE(JOYCODE_Y_UP_SWITCH) PORT_CHAR(UCHAR_MAMEKEY(UP)) |
| 431 | | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("HOLD") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(F11)) |
| 432 | | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_CODE(JOYCODE_X_LEFT_SWITCH) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) |
| 433 | | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) |
| 434 | | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("ALT") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT)) |
| 426 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("STOP") PORT_CODE(KEYCODE_END) |
| 427 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY |
| 428 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY |
| 429 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY |
| 430 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("HOLD") PORT_CODE(KEYCODE_HOME) |
| 431 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY |
| 432 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ENTER") PORT_CODE(KEYCODE_ENTER) PORT_CHAR('\r') |
| 433 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ALT") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT)) |
| 435 | 434 | |
| 436 | 435 | PORT_START("Y8") |
| 437 | | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') |
| 438 | | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL)) |
| 439 | | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') |
| 440 | | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') |
| 441 | | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') |
| 442 | | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SHIFT (right)") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) |
| 443 | | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') |
| 444 | | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT)) |
| 436 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') |
| 437 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("DEL") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL)) |
| 438 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') |
| 439 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') |
| 440 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') |
| 441 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Right SHIFT") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) |
| 442 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') |
| 443 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("INS") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT)) |
| 445 | 444 | |
| 446 | 445 | PORT_START("Y9") |
| 447 | | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') |
| 448 | | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) |
| 449 | | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') |
| 450 | | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@') PORT_CHAR('`') |
| 451 | | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') |
| 452 | | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('[') PORT_CHAR('{') |
| 453 | | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) |
| 454 | | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) |
| 446 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') |
| 447 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 448 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') |
| 449 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@') PORT_CHAR('`') |
| 450 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') |
| 451 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('[') PORT_CHAR('{') |
| 452 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 453 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 455 | 454 | INPUT_PORTS_END |
| 456 | 455 | |
| 457 | 456 | |
| r23590 | r23591 | |
| 572 | 571 | |
| 573 | 572 | static MACHINE_CONFIG_DERIVED( ep128, ep64 ) |
| 574 | 573 | MCFG_DEVICE_MODIFY(DAVE_TAG) |
| 575 | | MCFG_DEVICE_ADDRESS_MAP(AS_0, dave_128k_mem) |
| 574 | MCFG_DEVICE_ADDRESS_MAP(AS_PROGRAM, dave_128k_mem) |
| 576 | 575 | |
| 577 | 576 | // internal RAM |
| 578 | 577 | MCFG_RAM_MODIFY(RAM_TAG) |
trunk/src/mess/audio/dave.c
| r23590 | r23591 | |
| 36 | 36 | AM_RANGE(0x0000, 0xffff) AM_READWRITE(io_r, io_w) |
| 37 | 37 | ADDRESS_MAP_END |
| 38 | 38 | |
| 39 | | static ADDRESS_MAP_START( program_map, DAVE_AS_PROGRAM, 8, dave_device ) |
| 39 | |
| 40 | static ADDRESS_MAP_START( program_map, AS_PROGRAM, 8, dave_device ) |
| 40 | 41 | ADDRESS_MAP_END |
| 41 | 42 | |
| 42 | | static ADDRESS_MAP_START( io_map, DAVE_AS_IO, 8, dave_device ) |
| 43 | static ADDRESS_MAP_START( io_map, AS_IO, 8, dave_device ) |
| 43 | 44 | ADDRESS_MAP_END |
| 44 | 45 | |
| 45 | 46 | |
| r23590 | r23591 | |
| 53 | 54 | //------------------------------------------------- |
| 54 | 55 | |
| 55 | 56 | dave_device::dave_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 56 | | : device_t(mconfig, DAVE, "DAVE", tag, owner, clock), |
| 57 | : device_t(mconfig, DAVE, "DAVE", tag, owner, clock, "dave", __FILE__), |
| 57 | 58 | device_memory_interface(mconfig, *this), |
| 58 | 59 | device_sound_interface(mconfig, *this), |
| 59 | 60 | m_program_space_config("program", ENDIANNESS_LITTLE, 8, 22, 0, *ADDRESS_MAP_NAME(program_map)), |
| 60 | | m_io_space_config("I/O", ENDIANNESS_LITTLE, 8, 16, 0, *ADDRESS_MAP_NAME(io_map)), |
| 61 | m_io_space_config("i/o", ENDIANNESS_LITTLE, 8, 16, 0, *ADDRESS_MAP_NAME(io_map)), |
| 61 | 62 | m_write_irq(*this), |
| 62 | 63 | m_write_lh(*this), |
| 63 | 64 | m_write_rh(*this) |
| r23590 | r23591 | |
| 164 | 165 | { |
| 165 | 166 | switch (spacenum) |
| 166 | 167 | { |
| 167 | | case DAVE_AS_PROGRAM: return &m_program_space_config; |
| 168 | | case DAVE_AS_IO: return &m_io_space_config; |
| 168 | case AS_PROGRAM: return &m_program_space_config; |
| 169 | case AS_IO: return &m_io_space_config; |
| 169 | 170 | default: return NULL; |
| 170 | 171 | } |
| 171 | 172 | } |
| r23590 | r23591 | |
| 302 | 303 | UINT8 segment = m_segment[offset >> 14]; |
| 303 | 304 | offset = (segment << 14) | (offset & 0x3fff); |
| 304 | 305 | |
| 305 | | return m_addrspace[0]->read_byte(offset); |
| 306 | return this->space(AS_PROGRAM).read_byte(offset); |
| 306 | 307 | } |
| 307 | 308 | |
| 308 | 309 | |
| r23590 | r23591 | |
| 315 | 316 | UINT8 segment = m_segment[offset >> 14]; |
| 316 | 317 | offset = (segment << 14) | (offset & 0x3fff); |
| 317 | 318 | |
| 318 | | m_addrspace[0]->write_byte(offset, data); |
| 319 | this->space(AS_PROGRAM).write_byte(offset, data); |
| 319 | 320 | } |
| 320 | 321 | |
| 321 | 322 | |
| r23590 | r23591 | |
| 365 | 366 | break; |
| 366 | 367 | |
| 367 | 368 | default: |
| 368 | | data = m_addrspace[1]->read_byte(offset); |
| 369 | data = this->space(AS_IO).read_byte(offset); |
| 369 | 370 | } |
| 370 | 371 | |
| 371 | 372 | return data; |
| r23590 | r23591 | |
| 403 | 404 | { |
| 404 | 405 | case 0: |
| 405 | 406 | { |
| 406 | | count = (data & 0x0ff) | ((m_regs[offset + 1] & 0x0f)<<8); |
| 407 | count = (data & 0x0ff) | ((m_regs[(offset & 0x1f) + 1] & 0x0f)<<8); |
| 407 | 408 | } |
| 408 | 409 | break; |
| 409 | 410 | |
| 410 | 411 | case 1: |
| 411 | 412 | { |
| 412 | | count = (m_regs[offset - 1] & 0x0ff) | ((data & 0x0f)<<8); |
| 413 | count = (m_regs[(offset & 0x1f) - 1] & 0x0ff) | ((data & 0x0f)<<8); |
| 413 | 414 | |
| 414 | 415 | } |
| 415 | 416 | break; |
| r23590 | r23591 | |
| 420 | 421 | |
| 421 | 422 | m_period[channel_index] = ((STEP * machine().sample_rate())/125000) * count; |
| 422 | 423 | |
| 423 | | m_regs[offset & 0x01f] = data; |
| 424 | m_regs[offset & 0x1f] = data; |
| 424 | 425 | } |
| 425 | 426 | break; |
| 426 | 427 | |
| r23590 | r23591 | |
| 444 | 445 | /* update mame version of volume from data written */ |
| 445 | 446 | /* 0x03f->0x07e00. Max is 0x07fff */ |
| 446 | 447 | /* I believe the volume is linear - to be checked! */ |
| 447 | | m_mame_volumes[offset - 8] = (data & 0x03f) << 9; |
| 448 | m_mame_volumes[(offset & 0x1f) - 8] = (data & 0x03f) << 9; |
| 448 | 449 | |
| 449 | | m_regs[offset & 0x01f] = data; |
| 450 | m_regs[offset & 0x1f] = data; |
| 450 | 451 | } |
| 451 | 452 | break; |
| 452 | 453 | |
| r23590 | r23591 | |
| 570 | 571 | m_level_and[7] = 0xffff; |
| 571 | 572 | } |
| 572 | 573 | |
| 573 | | m_regs[offset & 0x01f] = data; |
| 574 | m_regs[offset & 0x1f] = data; |
| 574 | 575 | } |
| 575 | 576 | break; |
| 576 | 577 | |
| 577 | 578 | case 0xb0: case 0xb1: case 0xb2: case 0xb3: |
| 578 | 579 | m_segment[offset & 0x03] = data; |
| 579 | 580 | |
| 580 | | m_regs[offset & 0x01f] = data; |
| 581 | m_regs[offset & 0x1f] = data; |
| 581 | 582 | break; |
| 582 | 583 | |
| 583 | 584 | case 0xb4: |
| r23590 | r23591 | |
| 585 | 586 | m_irq_status &= ~(m_irq_enable & IRQ_LATCH); |
| 586 | 587 | update_interrupt(); |
| 587 | 588 | |
| 588 | | m_regs[offset & 0x01f] = data; |
| 589 | m_regs[offset & 0x1f] = data; |
| 589 | 590 | break; |
| 590 | 591 | |
| 591 | 592 | case 0xbf: |
| 592 | | m_regs[offset & 0x01f] = data; |
| 593 | m_regs[offset & 0x1f] = data; |
| 593 | 594 | break; |
| 594 | 595 | |
| 595 | 596 | default: |
| 596 | | m_addrspace[1]->write_byte(offset, data); |
| 597 | this->space(AS_IO).write_byte(offset, data); |
| 597 | 598 | } |
| 598 | 599 | } |
| 599 | 600 | |