trunk/src/mess/drivers/mbee.c
r244753 | r244754 | |
731 | 731 | MCFG_CPU_IO_MAP(mbeepc_io) |
732 | 732 | MACHINE_CONFIG_END |
733 | 733 | |
734 | | static MACHINE_CONFIG_DERIVED( mbeepc85b, mbeepc ) |
735 | | MCFG_PALETTE_MODIFY("palette") |
736 | | MCFG_PALETTE_INIT_OWNER(mbee_state, mbeepc85b) |
737 | | MACHINE_CONFIG_END |
738 | | |
739 | 734 | static MACHINE_CONFIG_DERIVED( mbeeppc, mbeeic ) |
740 | 735 | MCFG_CPU_MODIFY( "maincpu" ) |
741 | 736 | MCFG_CPU_PROGRAM_MAP(mbeeppc_mem) |
r244753 | r244754 | |
1138 | 1133 | COMP( 1982, mbeeic, mbee, 0, mbeeic, mbee, mbee_state, mbeeic, "Applied Technology", "Microbee 32 IC" , 0 ) |
1139 | 1134 | COMP( 1982, mbeepc, mbee, 0, mbeepc, mbee, mbee_state, mbeepc, "Applied Technology", "Microbee Personal Communicator" , 0 ) |
1140 | 1135 | COMP( 1985, mbeepc85, mbee, 0, mbeepc, mbee, mbee_state, mbeepc85, "Applied Technology", "Microbee PC85" , 0 ) |
1141 | | COMP( 1985, mbeepc85b,mbee, 0, mbeepc85b,mbee, mbee_state, mbeepc85, "Applied Technology", "Microbee PC85 (New version)" , 0 ) |
| 1136 | COMP( 1985, mbeepc85b,mbee, 0, mbeepc, mbee, mbee_state, mbeepc85, "Applied Technology", "Microbee PC85 (New version)" , 0 ) |
1142 | 1137 | COMP( 1985, mbeepc85s,mbee, 0, mbeepc, mbee, mbee_state, mbeepc85, "Applied Technology", "Microbee PC85 (Swedish)" , 0 ) |
1143 | 1138 | COMP( 1986, mbeeppc, mbee, 0, mbeeppc, mbee, mbee_state, mbeeppc, "Applied Technology", "Microbee Premium PC85" , 0 ) |
1144 | 1139 | COMP( 1986, mbeett, mbee, 0, mbeett, mbee256, mbee_state, mbeett, "Applied Technology", "Microbee Teleterm" , GAME_NOT_WORKING ) |
trunk/src/mess/video/mbee.c
r244753 | r244754 | |
74 | 74 | if (m_is_premium && ((m_1c & 0x9f) == 0x90)) |
75 | 75 | return m_p_attribram[offset]; |
76 | 76 | else |
77 | | if BIT(m_0b, 0) |
| 77 | if (m_0b) |
78 | 78 | return m_p_gfxram[offset]; |
79 | 79 | else |
80 | 80 | return m_p_videoram[offset]; |
r244753 | r244754 | |
120 | 120 | |
121 | 121 | WRITE8_MEMBER( mbee_state::port08_w ) |
122 | 122 | { |
123 | | m_08 = data; |
| 123 | m_08 = data & 0x4e; |
124 | 124 | } |
125 | 125 | |
126 | 126 | READ8_MEMBER( mbee_state::port1c_r ) |
r244753 | r244754 | |
362 | 362 | MC6845_UPDATE_ROW( mbee_state::colour_update_row ) |
363 | 363 | { |
364 | 364 | const rgb_t *palette = m_palette->palette()->entry_list_raw(); |
365 | | UINT8 inv,attr,gfx,fg,bg; |
366 | | UINT16 mem,x,col,chr; |
367 | | UINT16 colourm = (m_08 & 0x0e) << 7; |
| 365 | UINT8 inv,attr,gfx,fg,bg,col; |
| 366 | UINT16 mem,x,chr; |
| 367 | UINT8 colourm = (m_08 & 0x0e) >> 1; |
368 | 368 | UINT32 *p = &bitmap.pix32(y); |
369 | 369 | |
370 | 370 | for (x = 0; x < x_count; x++) // for each character |
r244753 | r244754 | |
387 | 387 | if (BIT(attr, 7) & BIT(m_framecnt, 4)) // flashing attribute |
388 | 388 | chr = 0x20; |
389 | 389 | } |
390 | | else |
391 | | col |= colourm; |
392 | 390 | |
393 | 391 | oldkb_scan(x+ma); |
394 | 392 | |
r244753 | r244754 | |
403 | 401 | if (m_is_premium) |
404 | 402 | { |
405 | 403 | fg = col & 15; |
406 | | bg = (col & 0xf0) >> 4; |
| 404 | bg = col >> 4; |
407 | 405 | } |
408 | 406 | else |
409 | 407 | { |
410 | | fg = (col & 0x001f) | 64; |
411 | | bg = (col & 0x07e0) >> 5; |
| 408 | fg = (col & 0x1f) | 64; |
| 409 | bg = ((col & 0xe0) >> 2) | colourm; |
412 | 410 | } |
413 | 411 | |
414 | 412 | /* Display a scanline of a character (8 pixels) */ |
r244753 | r244754 | |
424 | 422 | } |
425 | 423 | |
426 | 424 | |
427 | | /*********************************************************** |
| 425 | /***************************************************************************************************** |
428 | 426 | |
429 | 427 | Palette |
430 | 428 | |
431 | | ************************************************************/ |
| 429 | Standard Palette: The 8 bits from the colour RAM are divided into 5 bits for foreground, and 3 |
| 430 | bits for background. The 5 foreground bits pass through a PAL, which has 6 outputs. A write to |
| 431 | port 8 produces 3 more background lines, giving 6 in total. These 12 lines travel to a pair of |
| 432 | 74LS157 switching chips, where the foreground or background lines are selected by the absence or |
| 433 | or presence of a pixel. The 6 chosen lines pass through a 7407 then are merged to the final 3 RGB |
| 434 | lines. Each pair is merged like this: |
| 435 | VCC --- 330 ohm --- primary colour line + out to monitor ---- 120 ohm --- secondary colour line |
432 | 436 | |
| 437 | *****************************************************************************************************/ |
| 438 | |
433 | 439 | PALETTE_INIT_MEMBER( mbee_state, standard ) |
434 | 440 | { |
435 | 441 | const UINT8 *color_prom = memregion("proms")->base(); |
436 | | UINT16 i; |
437 | | UINT8 r, b, g, k; |
438 | | UINT8 level[] = { 0, 0x80, 0xff, 0xff }; /* off, half, full intensity */ |
| 442 | UINT8 i=0, r, b, g, k, r1, g1, b1; |
| 443 | UINT8 bglevel[] = { 0, 0x54, 0xa0, 0xff }; |
| 444 | UINT8 fglevel[] = { 0, 0xa0, 0xff, 0xff }; |
439 | 445 | |
440 | | /* set up background palette (00-63) */ |
441 | | for (i = 0; i < 64; i++) |
| 446 | // set up background colours (00-63) |
| 447 | for (b1 = 0; b1 < 4; b1++) |
442 | 448 | { |
443 | | r = level[((i>>0)&1)|((i>>2)&2)]; |
444 | | g = level[((i>>1)&1)|((i>>3)&2)]; |
445 | | b = level[((i>>2)&1)|((i>>4)&2)]; |
446 | | palette.set_pen_color(i, rgb_t(r, g, b)); |
| 449 | b = bglevel[b1]; |
| 450 | for (g1 = 0; g1 < 4; g1++) |
| 451 | { |
| 452 | g = bglevel[g1]; |
| 453 | for (r1 = 0; r1 < 4; r1++) |
| 454 | { |
| 455 | r = bglevel[r1]; |
| 456 | k = BITSWAP8(i, 7, 6, 5, 3, 1, 4, 2, 0); |
| 457 | palette.set_pen_color(k, rgb_t(r, g, b)); |
| 458 | i++; |
| 459 | } |
| 460 | } |
447 | 461 | } |
448 | 462 | |
449 | | /* set up foreground palette (64-95) by reading the prom */ |
| 463 | // set up foreground palette (64-95) by reading the prom |
450 | 464 | for (i = 0; i < 32; i++) |
451 | 465 | { |
452 | 466 | k = color_prom[i]; |
453 | | r = level[((k>>2)&1)|((k>>4)&2)]; |
454 | | g = level[((k>>1)&1)|((k>>3)&2)]; |
455 | | b = level[((k>>0)&1)|((k>>2)&2)]; |
| 467 | r = fglevel[(BIT(k, 2))|(BIT(k, 5)<<1)]; |
| 468 | g = fglevel[(BIT(k, 1))|(BIT(k, 4)<<1)]; |
| 469 | b = fglevel[(BIT(k, 0))|(BIT(k, 3)<<1)]; |
456 | 470 | palette.set_pen_color(i|64, rgb_t(r, g, b)); |
457 | 471 | } |
458 | 472 | } |
459 | 473 | |
460 | 474 | |
461 | | PALETTE_INIT_MEMBER( mbee_state, mbeepc85b ) |
462 | | { |
463 | | const UINT8 *color_prom = memregion("proms")->base(); |
464 | | UINT16 i; |
465 | | UINT8 r, b, g, k; |
466 | | UINT8 level[] = { 0, 0x80, 0x80, 0xff }; /* off, half, full intensity */ |
467 | | |
468 | | /* set up background palette (00-63) */ |
469 | | for (i = 0; i < 64; i++) |
470 | | { |
471 | | r = level[((i>>0)&1)|((i>>2)&2)]; |
472 | | g = level[((i>>1)&1)|((i>>3)&2)]; |
473 | | b = level[((i>>2)&1)|((i>>4)&2)]; |
474 | | palette.set_pen_color(i, rgb_t(r, g, b)); |
475 | | } |
476 | | |
477 | | level[2] = 0xff; |
478 | | |
479 | | /* set up foreground palette (64-95) by reading the prom */ |
480 | | for (i = 0; i < 32; i++) |
481 | | { |
482 | | k = color_prom[i]; |
483 | | r = level[((k>>2)&1)|((k>>4)&2)]; |
484 | | g = level[((k>>1)&1)|((k>>3)&2)]; |
485 | | b = level[((k>>0)&1)|((k>>2)&2)]; |
486 | | palette.set_pen_color(i|64, rgb_t(r, g, b)); |
487 | | } |
488 | | } |
489 | | |
490 | | |
491 | 475 | PALETTE_INIT_MEMBER( mbee_state, premium ) |
492 | 476 | { |
493 | | UINT16 i; |
494 | | UINT8 r, b, g; |
| 477 | UINT8 i, r, b, g; |
495 | 478 | |
496 | 479 | /* set up 8 low intensity colours */ |
497 | 480 | for (i = 0; i < 8; i++) |
498 | 481 | { |
499 | | r = (i & 1) ? 0xc0 : 0; |
500 | | g = (i & 2) ? 0xc0 : 0; |
501 | | b = (i & 4) ? 0xc0 : 0; |
| 482 | r = BIT(i, 0) ? 0xa0 : 0; |
| 483 | g = BIT(i, 1) ? 0xa0 : 0; |
| 484 | b = BIT(i, 2) ? 0xa0 : 0; |
502 | 485 | palette.set_pen_color(i, rgb_t(r, g, b)); |
503 | 486 | } |
504 | 487 | |
505 | 488 | /* set up 8 high intensity colours */ |
506 | 489 | for (i = 9; i < 16; i++) |
507 | 490 | { |
508 | | r = (i & 1) ? 0xff : 0; |
509 | | g = (i & 2) ? 0xff : 0; |
510 | | b = (i & 4) ? 0xff : 0; |
| 491 | r = BIT(i, 0) ? 0xff : 0; |
| 492 | g = BIT(i, 1) ? 0xff : 0; |
| 493 | b = BIT(i, 2) ? 0xff : 0; |
511 | 494 | palette.set_pen_color(i, rgb_t(r, g, b)); |
512 | 495 | } |
513 | 496 | } |