trunk/src/mess/drivers/ticalc1x.c
| r244939 | r244940 | |
| 66 | 66 | |
| 67 | 67 | TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); |
| 68 | 68 | void display_update(); |
| 69 | | void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety); |
| 69 | void display_matrix_7seg(int maxx, int maxy, UINT32 setx, UINT32 sety, UINT16 _7segmask); |
| 70 | 70 | |
| 71 | 71 | // calculator-specific handlers |
| 72 | 72 | DECLARE_READ8_MEMBER(tisr16_read_k); |
| r244939 | r244940 | |
| 96 | 96 | memset(m_display_state, 0, sizeof(m_display_state)); |
| 97 | 97 | memset(m_display_cache, 0, sizeof(m_display_cache)); |
| 98 | 98 | memset(m_display_decay, 0, sizeof(m_display_decay)); |
| 99 | | memset(m_7seg_mask, 0, sizeof(m_7seg_mask)); |
| 99 | memset(m_7seg_mask, ~0, sizeof(m_7seg_mask)); // ! |
| 100 | 100 | |
| 101 | 101 | m_o = 0; |
| 102 | 102 | m_r = 0; |
| r244939 | r244940 | |
| 181 | 181 | display_update(); |
| 182 | 182 | } |
| 183 | 183 | |
| 184 | | void ticalc1x_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety) |
| 184 | void ticalc1x_state::display_matrix_7seg(int maxx, int maxy, UINT32 setx, UINT32 sety, UINT16 _7segmask) |
| 185 | 185 | { |
| 186 | 186 | m_display_maxx = maxx; |
| 187 | 187 | m_display_maxy = maxy; |
| 188 | 188 | |
| 189 | 189 | // update current state |
| 190 | | UINT32 mask = (1 << maxx) - 1; |
| 190 | UINT32 colmask = (1 << maxx) - 1; |
| 191 | 191 | for (int y = 0; y < maxy; y++) |
| 192 | | m_display_state[y] = (sety >> y & 1) ? (setx & mask) : 0; |
| 192 | { |
| 193 | m_7seg_mask[y] &= _7segmask; |
| 194 | m_display_state[y] = (sety >> y & 1) ? (setx & colmask) : 0; |
| 195 | } |
| 193 | 196 | |
| 194 | 197 | display_update(); |
| 195 | 198 | } |
| r244939 | r244940 | |
| 238 | 241 | void ticalc1x_state::tisr16_display_update() |
| 239 | 242 | { |
| 240 | 243 | // update leds state |
| 241 | | for (int i = 0; i < 11; i++) |
| 242 | | if (m_r >> i & 1) |
| 243 | | m_display_state[i] = m_o; |
| 244 | for (int y = 0; y < 11; y++) |
| 245 | m_display_state[y] = (m_r >> y & 1) ? m_o : 0; |
| 244 | 246 | |
| 245 | 247 | // exponent sign (not 100% sure this is correct) |
| 246 | | m_display_state[11] = (m_display_state[0] | m_display_state[1]) ? 0x40 : 0; |
| 248 | m_display_state[11] = (m_display_state[0] || m_display_state[1]) ? 0x40 : 0; |
| 247 | 249 | |
| 248 | | // send to output |
| 249 | | for (int i = 0; i < 12; i++) |
| 250 | | output_set_digit_value(i, m_display_state[i]); |
| 250 | m_display_maxx = 8; |
| 251 | m_display_maxy = 12; |
| 252 | display_update(); |
| 251 | 253 | } |
| 252 | 254 | |
| 253 | 255 | READ8_MEMBER(ticalc1x_state::tisr16_read_k) |
| 254 | 256 | { |
| 255 | | UINT8 k = 0; |
| 256 | | |
| 257 | | // read selected button rows |
| 258 | | for (int i = 0; i < 11; i++) |
| 259 | | if (m_r >> i & 1) |
| 260 | | k |= m_inp_matrix[i]->read(); |
| 261 | | |
| 262 | | return k; |
| 257 | return read_inputs(11); |
| 263 | 258 | } |
| 264 | 259 | |
| 265 | 260 | WRITE16_MEMBER(ticalc1x_state::tisr16_write_r) |
| 266 | 261 | { |
| 267 | 262 | // R0-R10: input mux |
| 268 | 263 | // R0-R10: select digit (right-to-left) |
| 269 | | m_r = data; |
| 270 | | |
| 264 | m_r = m_inp_mux = data; |
| 271 | 265 | tisr16_display_update(); |
| 272 | 266 | } |
| 273 | 267 | |
| r244939 | r244940 | |
| 275 | 269 | { |
| 276 | 270 | // O0-O7: digit segments |
| 277 | 271 | m_o = data; |
| 278 | | |
| 279 | 272 | tisr16_display_update(); |
| 280 | 273 | } |
| 281 | 274 | |
| r244939 | r244940 | |
| 284 | 277 | |
| 285 | 278 | READ8_MEMBER(ticalc1x_state::ti1270_read_k) |
| 286 | 279 | { |
| 287 | | UINT8 k = 0; |
| 288 | | |
| 289 | | // read selected button rows |
| 290 | | for (int i = 0; i < 7; i++) |
| 291 | | if (m_o >> (i+1) & 1) |
| 292 | | k |= m_inp_matrix[i]->read(); |
| 293 | | |
| 294 | | return k; |
| 280 | return read_inputs(6); |
| 295 | 281 | } |
| 296 | 282 | |
| 297 | 283 | WRITE16_MEMBER(ticalc1x_state::ti1270_write_r) |
| 298 | 284 | { |
| 299 | | m_display_maxx = 8; |
| 300 | | m_display_maxy = 8; |
| 301 | | |
| 302 | 285 | // R0-R7: select digit (right-to-left) |
| 303 | | for (int i = 0; i < 8; i++) |
| 304 | | { |
| 305 | | m_7seg_mask[i] = 0xff; |
| 306 | | m_display_state[i] = (data >> i & 1) ? m_o : 0; |
| 307 | | } |
| 308 | | |
| 309 | | display_update(); |
| 286 | display_matrix_7seg(8, 8, m_o, data, 0xff); |
| 310 | 287 | } |
| 311 | 288 | |
| 312 | 289 | WRITE16_MEMBER(ticalc1x_state::ti1270_write_o) |
| 313 | 290 | { |
| 314 | 291 | // O1-O5,O7: input mux |
| 315 | 292 | // O0-O7: digit segments |
| 293 | m_inp_mux = (data >> 1 & 0x1f) | (data >> 2 & 0x20); |
| 316 | 294 | m_o = data; |
| 317 | 295 | } |
| 318 | 296 | |
| r244939 | r244940 | |
| 321 | 299 | |
| 322 | 300 | READ8_MEMBER(ticalc1x_state::wizatron_read_k) |
| 323 | 301 | { |
| 324 | | UINT8 k = 0; |
| 325 | | |
| 326 | | // read selected button rows |
| 327 | | for (int i = 0; i < 4; i++) |
| 328 | | if (m_o >> (i+1) & 1) |
| 329 | | k |= m_inp_matrix[i]->read(); |
| 330 | | |
| 331 | | return k; |
| 302 | return read_inputs(4); |
| 332 | 303 | } |
| 333 | 304 | |
| 334 | 305 | WRITE16_MEMBER(ticalc1x_state::wizatron_write_r) |
| 335 | 306 | { |
| 336 | | m_display_maxx = 8; |
| 337 | | m_display_maxy = 9; |
| 338 | | |
| 307 | // note: 3rd digit is custom(not 7seg), for math symbols, and 6th digit |
| 308 | // only has A and G for =, though some newer revisions use a custom digit too. |
| 309 | m_7seg_mask[3] = 0x41; |
| 310 | |
| 339 | 311 | // R0-R8: select digit (right-to-left) |
| 340 | | // note: 3rd digit is custom(not 7seg), for math symbols |
| 341 | | for (int i = 0; i < 9; i++) |
| 342 | | { |
| 343 | | m_7seg_mask[i] = 0x7f; |
| 344 | | m_display_state[i] = (data >> i & 1) ? m_o : 0; |
| 345 | | } |
| 346 | | |
| 347 | | // 6th digit only has A and G for = |
| 348 | | m_display_state[3] &= 0x41; |
| 349 | | |
| 350 | | display_update(); |
| 312 | display_matrix_7seg(8, 9, m_o, data, 0x7f); |
| 351 | 313 | } |
| 352 | 314 | |
| 353 | 315 | WRITE16_MEMBER(ticalc1x_state::wizatron_write_o) |
| r244939 | r244940 | |
| 355 | 317 | // O1-O4: input mux |
| 356 | 318 | // O0-O6: digit segments A-G |
| 357 | 319 | // O7: N/C |
| 320 | m_inp_mux = data >> 1 & 0xf; |
| 358 | 321 | m_o = data & 0x7f; |
| 359 | 322 | } |
| 360 | 323 | |
| r244939 | r244940 | |
| 365 | 328 | |
| 366 | 329 | READ8_MEMBER(ticalc1x_state::ti30_read_k) |
| 367 | 330 | { |
| 368 | | // the Vss row is always on |
| 369 | | UINT8 k = m_inp_matrix[8]->read(); |
| 370 | | |
| 371 | | // read selected button rows |
| 372 | | for (int i = 0; i < 8; i++) |
| 373 | | if (m_o >> i & 1) |
| 374 | | k |= m_inp_matrix[i]->read(); |
| 375 | | |
| 376 | | return k; |
| 331 | // note: the Vss row is always on |
| 332 | return m_inp_matrix[7]->read() | read_inputs(7); |
| 377 | 333 | } |
| 378 | 334 | |
| 379 | 335 | WRITE16_MEMBER(ticalc1x_state::ti30_write_r) |
| 380 | 336 | { |
| 381 | | m_display_maxx = 8; |
| 382 | | m_display_maxy = 9; |
| 337 | // note: 1st digit only has segments B,F,G,DP |
| 338 | m_7seg_mask[0] = 0xe2; |
| 383 | 339 | |
| 384 | 340 | // R0-R8: select digit |
| 385 | | UINT8 o = BITSWAP8(m_o,7,5,2,1,4,0,6,3); |
| 386 | | for (int i = 0; i < 9; i++) |
| 387 | | { |
| 388 | | m_7seg_mask[i] = 0xff; |
| 389 | | m_display_state[i] = (data >> i & 1) ? o : 0; |
| 390 | | } |
| 391 | | |
| 392 | | // 1st digit only has segments B,F,G,DP |
| 393 | | m_display_state[0] &= 0xe2; |
| 394 | | |
| 395 | | display_update(); |
| 341 | display_matrix_7seg(8, 9, BITSWAP8(m_o,7,5,2,1,4,0,6,3), data, 0xff); |
| 396 | 342 | } |
| 397 | 343 | |
| 398 | 344 | WRITE16_MEMBER(ticalc1x_state::ti30_write_o) |
| 399 | 345 | { |
| 400 | | // O1-O5,O7: input mux |
| 346 | // O0-O2,O4-O7: input mux |
| 401 | 347 | // O0-O7: digit segments |
| 348 | m_inp_mux = (data & 7) | (data >> 1 & 0x78); |
| 402 | 349 | m_o = data; |
| 403 | 350 | } |
| 404 | 351 | |
| r244939 | r244940 | |
| 510 | 457 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CODE(KEYCODE_I) PORT_NAME(UTF8_SMALL_PI) |
| 511 | 458 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE) |
| 512 | 459 | |
| 513 | | PORT_START("IN.5") // O6 |
| 514 | | PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 515 | | |
| 516 | | PORT_START("IN.6") // O7 |
| 460 | PORT_START("IN.5") // O7 |
| 517 | 461 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("1/x") |
| 518 | 462 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_NAME("x" UTF8_POW_2) |
| 519 | 463 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_NAME(UTF8_SQUAREROOT"x") |
| r244939 | r244940 | |
| 573 | 517 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4") |
| 574 | 518 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6") |
| 575 | 519 | |
| 576 | | PORT_START("IN.3") // O3 |
| 577 | | PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 578 | | |
| 579 | | PORT_START("IN.4") // O4 |
| 520 | PORT_START("IN.3") // O4 |
| 580 | 521 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE) |
| 581 | 522 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_NAME(UTF8_SMALL_PI) |
| 582 | 523 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("(") |
| 583 | 524 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_NAME("%") |
| 584 | 525 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME(")") |
| 585 | 526 | |
| 586 | | PORT_START("IN.5") // O5 |
| 527 | PORT_START("IN.4") // O5 |
| 587 | 528 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+") |
| 588 | 529 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("SUM") |
| 589 | 530 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2") |
| 590 | 531 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1") |
| 591 | 532 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3") |
| 592 | 533 | |
| 593 | | PORT_START("IN.6") // O6 |
| 534 | PORT_START("IN.5") // O6 |
| 594 | 535 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_NAME("DRG") |
| 595 | 536 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_NAME("INV") |
| 596 | 537 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_NAME("cos") |
| 597 | 538 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_NAME("sin") |
| 598 | 539 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_NAME("tan") |
| 599 | 540 | |
| 600 | | PORT_START("IN.7") // O7 |
| 541 | PORT_START("IN.6") // O7 |
| 601 | 542 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=") |
| 602 | 543 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_NAME("EXC") |
| 603 | 544 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME(".") |
| r244939 | r244940 | |
| 605 | 546 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("+/-") |
| 606 | 547 | |
| 607 | 548 | // note: even though power buttons are on the matrix, they are not CPU-controlled |
| 608 | | PORT_START("IN.8") // Vss! |
| 549 | PORT_START("IN.7") // Vss! |
| 609 | 550 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_CODE(KEYCODE_DEL) PORT_NAME("ON/C") PORT_CHANGED_MEMBER(DEVICE_SELF, ticalc1x_state, tms0980_power_button, (void *)true) |
| 610 | 551 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("1/x") |
| 611 | 552 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_NAME(UTF8_SQUAREROOT"x") |
| r244939 | r244940 | |
| 636 | 577 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4") |
| 637 | 578 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6") |
| 638 | 579 | |
| 639 | | PORT_START("IN.3") // O3 |
| 640 | | PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 641 | | |
| 642 | | PORT_START("IN.4") // O4 |
| 580 | PORT_START("IN.3") // O4 |
| 643 | 581 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE) |
| 644 | 582 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_NAME("1'sC") |
| 645 | 583 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_NAME("b") |
| 646 | 584 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_NAME("A") |
| 647 | 585 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_NAME("C") |
| 648 | 586 | |
| 649 | | PORT_START("IN.5") // O5 |
| 587 | PORT_START("IN.4") // O5 |
| 650 | 588 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+") |
| 651 | 589 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("XOR") |
| 652 | 590 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2") |
| 653 | 591 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1") |
| 654 | 592 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3") |
| 655 | 593 | |
| 656 | | PORT_START("IN.6") // O6 |
| 594 | PORT_START("IN.5") // O6 |
| 657 | 595 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME(")") |
| 658 | 596 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_NAME("STO") |
| 659 | 597 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("SUM") |
| 660 | 598 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_NAME("RCL") |
| 661 | 599 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("(") |
| 662 | 600 | |
| 663 | | PORT_START("IN.7") // O7 |
| 601 | PORT_START("IN.6") // O7 |
| 664 | 602 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=") |
| 665 | 603 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("CE") |
| 666 | 604 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME(".") |
| r244939 | r244940 | |
| 668 | 606 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("+/-") |
| 669 | 607 | |
| 670 | 608 | // note: even though power buttons are on the matrix, they are not CPU-controlled |
| 671 | | PORT_START("IN.8") // Vss! |
| 609 | PORT_START("IN.7") // Vss! |
| 672 | 610 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_PGUP) PORT_NAME("C/ON") PORT_CHANGED_MEMBER(DEVICE_SELF, ticalc1x_state, tms0980_power_button, (void *)true) |
| 673 | 611 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_NAME("DEC") |
| 674 | 612 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_NAME("OCT") |
| r244939 | r244940 | |
| 700 | 638 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4") |
| 701 | 639 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6") |
| 702 | 640 | |
| 703 | | PORT_START("IN.3") // O3 |
| 704 | | PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 705 | | |
| 706 | | PORT_START("IN.4") // O4 |
| 641 | PORT_START("IN.3") // O4 |
| 707 | 642 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE) |
| 708 | 643 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME(UTF8_CAPITAL_SIGMA"+ " UTF8_CAPITAL_SIGMA"-") |
| 709 | 644 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("( AN-CI\"") |
| 710 | 645 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_NAME("x<>y L.R.") |
| 711 | 646 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME(") 1/x") |
| 712 | 647 | |
| 713 | | PORT_START("IN.5") // O5 |
| 648 | PORT_START("IN.4") // O5 |
| 714 | 649 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+") |
| 715 | 650 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("SUM x" UTF8_PRIME) |
| 716 | 651 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2") |
| 717 | 652 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1") |
| 718 | 653 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3") |
| 719 | 654 | |
| 720 | | PORT_START("IN.6") // O6 |
| 655 | PORT_START("IN.5") // O6 |
| 721 | 656 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_NAME("FV") |
| 722 | 657 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_NAME("N") |
| 723 | 658 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_NAME("PMT") |
| 724 | 659 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_NAME("%i") |
| 725 | 660 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_NAME("PV") |
| 726 | 661 | |
| 727 | | PORT_START("IN.7") // O7 |
| 662 | PORT_START("IN.6") // O7 |
| 728 | 663 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=") |
| 729 | 664 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_NAME("EXC x" UTF8_PRIME) |
| 730 | 665 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME(".") |
| r244939 | r244940 | |
| 732 | 667 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("+/-") |
| 733 | 668 | |
| 734 | 669 | // note: even though power buttons are on the matrix, they are not CPU-controlled |
| 735 | | PORT_START("IN.8") // Vss! |
| 670 | PORT_START("IN.7") // Vss! |
| 736 | 671 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_CODE(KEYCODE_DEL) PORT_NAME("ON/C") PORT_CHANGED_MEMBER(DEVICE_SELF, ticalc1x_state, tms0980_power_button, (void *)true) |
| 737 | 672 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("2nd") |
| 738 | 673 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_NAME("x" UTF8_POW_2" " UTF8_SQUAREROOT"x") |
| r244939 | r244940 | |
| 756 | 691 | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ticalc1x_state, tisr16_write_o)) |
| 757 | 692 | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ticalc1x_state, tisr16_write_r)) |
| 758 | 693 | |
| 694 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", ticalc1x_state, display_decay_tick, attotime::from_msec(1)) |
| 695 | |
| 759 | 696 | MCFG_DEFAULT_LAYOUT(layout_tisr16) |
| 760 | 697 | MACHINE_CONFIG_END |
| 761 | 698 | |