示例#1
0
  private static void XGA_DrawPoint(/*Bitu*/ int x, /*Bitu*/ int y, /*Bitu*/ int c) {
    if ((xga.curcommand & 0x1) == 0) return;
    if ((xga.curcommand & 0x10) == 0) return;

    if (x < xga.scissors.x1) return;
    if (x > xga.scissors.x2) return;
    if (y < xga.scissors.y1) return;
    if (y > xga.scissors.y2) return;

    /*Bit32u*/ int memaddr = (y * XGA_SCREEN_WIDTH()) + x;
    /* Need to zero out all unused bits in modes that have any (15-bit or "32"-bit -- the last
    one is actually 24-bit. Without this step there may be some graphics corruption (mainly,
    during windows dragging. */
    switch (XGA_COLOR_MODE()) {
      case VGA.M_LIN8:
        if ((memaddr >= VGA.vga.vmemsize)) break;
        RAM.writeb(VGA.vga.mem.linear + memaddr, (short) c);
        break;
      case VGA.M_LIN15:
        if ((memaddr * 2 >= VGA.vga.vmemsize)) break;
        RAM.writew(VGA.vga.mem.linear + memaddr * 2, c & 0x7fff);
        break;
      case VGA.M_LIN16:
        if ((memaddr * 2 >= VGA.vga.vmemsize)) break;
        RAM.writew(VGA.vga.mem.linear + memaddr * 2, c & 0xffff);
        break;
      case VGA.M_LIN32:
        if ((memaddr * 4 >= VGA.vga.vmemsize)) break;
        RAM.writed(VGA.vga.mem.linear + memaddr * 4, c);
        break;
      default:
        break;
    }
  }