Package screens

Class Screen16

All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable, Accessible

public class Screen16 extends Screen
An 8-bit Aurora compatible screen for SMSQmulator. It sets up video memory (vram) as an array of bytes.
See Also:
  • Constructor Details

    • Screen16

      public Screen16(int xsize, int ysize, int vramBase, boolean vibrantColours, Monitor monitor, boolean isMac, boolean ddouble, int windowMode, boolean pctype)
      This sets up the entire screen object, including the BufferedImage.
      Parameters:
      xsize - the xsize of the screen, in pixels.
      ysize - the ysize of the screen, in pixels.
      vramBase - the start of the screen ram as the CPU sees it. For the CPU, this will generally be above the ROM.
      vibrantColours - if true, use full 8 bits per colour, else only the upper 5 (6 for green).
      monitor - the monitor.
      isMac - true if screen is on a mac.
      ddouble - true if double sized pixels
      windowMode - mode of window 0 = window , 1 = full size, 2 = special fullsize
      pctype - true if statndard home etc keys
  • Method Details

    • writeByteToScreen

      public void writeByteToScreen(int addr, int value, int wordValue)
      Paints the corresponding pixel.
      Specified by:
      writeByteToScreen in class Screen
      Parameters:
      addr - where to write to. This is the SMSQE address, where it thinks video memory lies.
      value - the aurora colour value to write.
      wordValue - the value to write into the word this byte is part of
    • writeWordToScreen

      public void writeWordToScreen(int addr, int value)
      Paints the corresponding pixels on the screen.
      Specified by:
      writeWordToScreen in class Screen
      Parameters:
      addr - the address where to write to.
      value - the aurota colour values (for 2 pixels)to write to screen.
    • writeLongToScreen

      public void writeLongToScreen(int addr, int value)
      Writes a long word to the java screen, and paints the corresponding pixel on the screen.
      Specified by:
      writeLongToScreen in class Screen
      Parameters:
      addr - the address where to write to.
      value - the aurota colour values (for 4 pixels) to write to screen.
    • fillBlock

      public void fillBlock(MC68000Cpu cpu, boolean resolveStipple)
      Fills a block with colour : this updates the "screen memory" AND the underlying image.
      Specified by:
      fillBlock in class Screen
      Parameters:
      cpu - the CPu used.
      resolveStipple - true if we need to convert a stipple number in d6 into colours in d6/d7 The block size and origin are assumed to have been adjusted for correct position within the area to be set. Registers: Entry Exit D0 smashed D1 block size smashed D2 block origin smashed D3-D5 smashed D6 stipple Nbr (cn_block) OR long word colour for even row (bm_block) D7 colour mask in long word (cn_block) or long word colour for odd row (bm_block) smashed A1 area base address smashed A2 area row increment smashed
    • xorBlock

      public void xorBlock(MC68000Cpu cpu, boolean resolveStipple)
      XORs a block with colour : this updates the "screen memory" AND the underlying image.
      Specified by:
      xorBlock in class Screen
      Parameters:
      cpu - the CPu used. xo x origin of the block yo y origin of the block xs x size of the block ys y size of the block stipple how we stipple the colour (0xffff - solid colour, 0= 1 of 4 , 2 =vertical, 3 horiz., 3 checkerboard colour1x the stipple colour (in SMSQE format, mode 16). colour2x the main colour (in SMSQE format, mode 16).
      resolveStipple - true if we need to convert a stipple number in d6 into colours in d6/d7
    • moveBlock

      public void moveBlock(MC68000Cpu cpu, boolean copyFromScreen)
      A block is to be blitted; either within the image, or from normal mem to image.
      Specified by:
      moveBlock in class Screen
      Parameters:
      cpu - the CPU used.
      copyFromScreen - = true if the source is also the screen.
    • combineBlocks

      public void combineBlocks(MC68000Cpu cpu)
      This combines two rectangular blocks (source 1, source2) with alpha blending and puts the result into the BufferedImage data and the CPU's videoram. If destination is not the screen, or source 1 or 2 are not in main memory, this returns to SMSQE with an error.
      Specified by:
      combineBlocks in class Screen
      Parameters:
      cpu - the CPU used.
    • displayRegion

      public void displayRegion(MC68000Cpu cpu, int start, int nbrOfBytes)
      Displays a region if bytes were loaded directly to the screen memory. Used from CPU.
      Specified by:
      displayRegion in class Screen
      Parameters:
      cpu - .
      start - where the bytes were loaded to.
      nbrOfBytes - how many bytes were loaded.
    • setVramBase

      public void setVramBase(int vrambase)
      Sets the new Vrambase and adjust vramtop and vrambase accordingly.
      Specified by:
      setVramBase in class Screen
      Parameters:
      vrambase - the new vrambase.
    • setVibrantColours

      public void setVibrantColours(boolean b, char[] vramBuffer)
      Sets whether brighter colours should be used.
      Specified by:
      setVibrantColours in class Screen
      Parameters:
      b - true if brighter colours should be used.
      vramBuffer - the video ram buffer.
    • getScreenSizeInBytes

      public final int getScreenSizeInBytes()
      Gets size, in bytes, of the video ram.
      Specified by:
      getScreenSizeInBytes in class Screen
      Returns:
      screen size, in number of bytes.
    • isQLScreen

      public boolean isQLScreen()
      Checks whether this is a QL type screen
      Specified by:
      isQLScreen in class Screen
      Returns:
      true if this is a QL screen (512*256 i mode 4, 256*256 in mode 8), else false