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 | } |