openMSX
Public Types | Public Member Functions | Static Public Attributes | List of all members
openmsx::DisplayMode Class Reference

Represents a VDP display mode. More...

#include <DisplayMode.hh>

Public Types

enum  {
  GRAPHIC1 = 0x00 , TEXT1 = 0x01 , MULTICOLOR = 0x02 , GRAPHIC2 = 0x04 ,
  TEXT1Q = 0x05 , MULTIQ = 0x06 , GRAPHIC3 = 0x08 , TEXT2 = 0x09 ,
  GRAPHIC4 = 0x0C , GRAPHIC5 = 0x10 , GRAPHIC6 = 0x14 , GRAPHIC7 = 0x1C
}
 

Public Member Functions

constexpr DisplayMode ()=default
 Create the initial display mode.
 
constexpr DisplayMode (byte reg0, byte reg1, byte reg25)
 Create a specific display mode.
 
constexpr DisplayMode updateReg25 (byte reg25) const
 
constexpr void reset ()
 Bring the display mode to its initial state.
 
constexpr bool operator== (const DisplayMode &) const =default
 Equals operator.
 
constexpr byte getByte () const
 Get the display mode as a byte: YAE YJK M5..M1 combined.
 
constexpr void setByte (byte mode_)
 Used for de-serialization.
 
constexpr byte getBase () const
 Get the base display mode as an integer: M5..M1 combined.
 
constexpr bool isV9938Mode () const
 Was this mode introduced by the V9938?
 
constexpr bool isTextMode () const
 Is the current mode a text mode? Text1 and Text2 are text modes.
 
constexpr bool isBitmapMode () const
 Is the current mode a bitmap mode? Graphic4 and higher are bitmap modes.
 
constexpr bool isPlanar () const
 Is VRAM "planar" in the current display mode? Graphic 6 and 7 spread their bytes over two VRAM ICs, such that the even bytes go to the first half of the address space and the odd bytes to the second half.
 
constexpr bool isSpriteNarrow () const
 Are sprite pixels narrow?
 
constexpr int getSpriteMode (bool isMSX1) const
 Get the sprite mode of this display mode.
 
constexpr unsigned getLineWidth () const
 Get number of pixels on a display line in this mode.
 

Static Public Attributes

static constexpr byte REG0_MASK = 0x0E
 Bits of VDP register 0 that encode part of the display mode.
 
static constexpr byte REG1_MASK = 0x18
 Bits of VDP register 1 that encode part of the display mode.
 
static constexpr byte REG25_MASK = 0x18
 Bits of VDP register 25 that encode part of the display mode.
 
static constexpr byte YJK = 0x20
 Encoding of YJK flag.
 
static constexpr byte YAE = 0x40
 Encoding of YAE flag.
 

Detailed Description

Represents a VDP display mode.

A display mode determines how bytes in the VRAM are converted to pixel colors. A display mode consists of a base mode with YJK filters on top. Only the V9958 supports YJK filters.

Definition at line 15 of file DisplayMode.hh.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
GRAPHIC1 
TEXT1 
MULTICOLOR 
GRAPHIC2 
TEXT1Q 
MULTIQ 
GRAPHIC3 
TEXT2 
GRAPHIC4 
GRAPHIC5 
GRAPHIC6 
GRAPHIC7 

Definition at line 26 of file DisplayMode.hh.

Constructor & Destructor Documentation

◆ DisplayMode() [1/2]

constexpr openmsx::DisplayMode::DisplayMode ( )
constexprdefault

Create the initial display mode.

Referenced by reset(), and updateReg25().

◆ DisplayMode() [2/2]

constexpr openmsx::DisplayMode::DisplayMode ( byte  reg0,
byte  reg1,
byte  reg25 
)
inlineconstexpr

Create a specific display mode.

Parameters
reg0The contents of VDP register 0.
reg1The contents of VDP register 1.
reg25The contents of VDP register 25; on non-V9958 chips, pass 0.

Definition at line 66 of file DisplayMode.hh.

Member Function Documentation

◆ getBase()

constexpr byte openmsx::DisplayMode::getBase ( ) const
inlineconstexpr

Get the base display mode as an integer: M5..M1 combined.

If YJK is active, the base mode is the underlying display mode.

Returns
The integer representation of the base of this display mode, in the range [0..0x1F].

Definition at line 108 of file DisplayMode.hh.

Referenced by getSpriteMode(), isBitmapMode(), isTextMode(), openmsx::CharacterConverter::setDisplayMode(), openmsx::VDPCmdEngine::updateDisplayMode(), openmsx::PixelRenderer::updatePalette(), and updateReg25().

◆ getByte()

constexpr byte openmsx::DisplayMode::getByte ( ) const
inlineconstexpr

◆ getLineWidth()

constexpr unsigned openmsx::DisplayMode::getLineWidth ( ) const
inlineconstexpr

Get number of pixels on a display line in this mode.

Returns
512 for Text 2, Graphic 5 and 6, 256 for all other modes. TODO: Would it make more sense to treat Text 2 as 480 pixels?

Definition at line 181 of file DisplayMode.hh.

References GRAPHIC5, GRAPHIC6, and TEXT2.

Referenced by openmsx::SDLRasterizer::drawBorder(), openmsx::SDLRasterizer::drawDisplay(), and openmsx::SDLRasterizer::drawSprites().

◆ getSpriteMode()

constexpr int openmsx::DisplayMode::getSpriteMode ( bool  isMSX1) const
inlineconstexpr

Get the sprite mode of this display mode.

Returns
The current sprite mode: 0 means no sprites, 1 means sprite mode 1 (MSX1 display modes), 2 means sprite mode 2 (MSX2 display modes).

Definition at line 159 of file DisplayMode.hh.

References getBase(), GRAPHIC1, GRAPHIC2, GRAPHIC3, GRAPHIC4, GRAPHIC5, GRAPHIC6, GRAPHIC7, MULTICOLOR, MULTIQ, TEXT1, TEXT1Q, and TEXT2.

Referenced by openmsx::SDLRasterizer::drawSprites(), openmsx::VDP::spritesEnabled(), and openmsx::VDP::spritesEnabledFast().

◆ isBitmapMode()

constexpr bool openmsx::DisplayMode::isBitmapMode ( ) const
inlineconstexpr

Is the current mode a bitmap mode? Graphic4 and higher are bitmap modes.

Returns
True iff the current mode is a bitmap mode.

Definition at line 131 of file DisplayMode.hh.

References getBase().

Referenced by openmsx::SDLRasterizer::drawDisplay(), and openmsx::SDLRasterizer::setDisplayMode().

◆ isPlanar()

constexpr bool openmsx::DisplayMode::isPlanar ( ) const
inlineconstexpr

Is VRAM "planar" in the current display mode? Graphic 6 and 7 spread their bytes over two VRAM ICs, such that the even bytes go to the first half of the address space and the odd bytes to the second half.

Returns
True iff the current display mode has planar VRAM.

Definition at line 141 of file DisplayMode.hh.

Referenced by openmsx::SDLRasterizer::drawDisplay().

◆ isSpriteNarrow()

constexpr bool openmsx::DisplayMode::isSpriteNarrow ( ) const
inlineconstexpr

Are sprite pixels narrow?

Definition at line 148 of file DisplayMode.hh.

References GRAPHIC5.

◆ isTextMode()

constexpr bool openmsx::DisplayMode::isTextMode ( ) const
inlineconstexpr

Is the current mode a text mode? Text1 and Text2 are text modes.

Returns
True iff the current mode is a text mode.

Definition at line 123 of file DisplayMode.hh.

References getBase(), TEXT1, TEXT1Q, and TEXT2.

Referenced by openmsx::SDLRasterizer::drawDisplay(), openmsx::VDP::getLeftSprites(), openmsx::VDP::getRightBorder(), and openmsx::VDP::peekStatusReg().

◆ isV9938Mode()

constexpr bool openmsx::DisplayMode::isV9938Mode ( ) const
inlineconstexpr

Was this mode introduced by the V9938?

Returns
True iff the base of this mode only is available on V9938/58.

Definition at line 115 of file DisplayMode.hh.

◆ operator==()

constexpr bool openmsx::DisplayMode::operator== ( const DisplayMode ) const
constexprdefault

Equals operator.

◆ reset()

constexpr void openmsx::DisplayMode::reset ( )
inlineconstexpr

Bring the display mode to its initial state.

Definition at line 82 of file DisplayMode.hh.

References DisplayMode().

◆ setByte()

constexpr void openmsx::DisplayMode::setByte ( byte  mode_)
inlineconstexpr

Used for de-serialization.

Definition at line 99 of file DisplayMode.hh.

Referenced by openmsx::VDP::serialize().

◆ updateReg25()

constexpr DisplayMode openmsx::DisplayMode::updateReg25 ( byte  reg25) const
inlineconstexpr

Definition at line 75 of file DisplayMode.hh.

References DisplayMode(), and getBase().

Member Data Documentation

◆ REG0_MASK

constexpr byte openmsx::DisplayMode::REG0_MASK = 0x0E
staticconstexpr

Bits of VDP register 0 that encode part of the display mode.

Definition at line 42 of file DisplayMode.hh.

Referenced by openmsx::VDP::changeRegister().

◆ REG1_MASK

constexpr byte openmsx::DisplayMode::REG1_MASK = 0x18
staticconstexpr

Bits of VDP register 1 that encode part of the display mode.

Definition at line 45 of file DisplayMode.hh.

Referenced by openmsx::VDP::changeRegister().

◆ REG25_MASK

constexpr byte openmsx::DisplayMode::REG25_MASK = 0x18
staticconstexpr

Bits of VDP register 25 that encode part of the display mode.

Definition at line 48 of file DisplayMode.hh.

Referenced by openmsx::VDP::changeRegister().

◆ YAE

constexpr byte openmsx::DisplayMode::YAE = 0x40
staticconstexpr

◆ YJK

constexpr byte openmsx::DisplayMode::YJK = 0x20
staticconstexpr

The documentation for this class was generated from the following file: