KallistiOS git master
Independent SDK for the Sega Dreamcast
Loading...
Searching...
No Matches
biosfont.h File Reference

BIOS font drawing functions. More...

#include <kos/cdefs.h>
#include <stdint.h>
#include <stdbool.h>
#include <stdarg.h>
#include <arch/types.h>

Go to the source code of this file.

Macros

#define BFONT_THIN_WIDTH   12
 Width of Thin Font (ISO8859_1, half-JP)
 
#define BFONT_WIDE_WIDTH   (BFONT_THIN_WIDTH * 2)
 Width of Wide Font (full-JP)
 
#define BFONT_HEIGHT   24
 Height of All Fonts.
 
#define BFONT_BYTES_PER_CHAR   (BFONT_THIN_WIDTH * BFONT_HEIGHT / 8)
 Number of bytes to represent a single character within the BIOS font.
 
#define BFONT_NARROW_START   0
 Start of Narrow Characters in Font Block.
 
#define BFONT_OVERBAR   BFONT_NARROW_START
 
#define BFONT_ISO_8859_1_33_126   (BFONT_NARROW_START + ( 1 * BFONT_BYTES_PER_CHAR))
 
#define BFONT_YEN   (BFONT_NARROW_START + (95 * BFONT_BYTES_PER_CHAR))
 
#define BFONT_ISO_8859_1_160_255   (BFONT_NARROW_START + (96 * BFONT_BYTES_PER_CHAR))
 
#define JISX_0208_ROW_SIZE   94
 Size of a row for JISX-0208 characters.
 
#define BFONT_WIDE_START   (288 * BFONT_BYTES_PER_CHAR)
 Start of Wide Characters in Font Block.
 
#define BFONT_JISX_0208_ROW1   BFONT_WIDE_START
 Start of JISX-0208 Rows 1-7 in Font Block.
 
#define BFONT_JISX_0208_ROW16   (BFONT_WIDE_START + (658 * BFONT_BYTES_PER_CHAR))
 Start of JISX-0208 Row 16-47 (Start of Level 1) in Font Block.
 
#define BFONT_JISX_0208_ROW48   (BFONT_JISX_0208_ROW16 + ((32 * JISX_0208_ROW_SIZE) * BFONT_BYTES_PER_CHAR))
 JISX-0208 Row 48-84 (Start of Level 2) in Font Block.
 
#define BFONT_DREAMCAST_SPECIFIC   (BFONT_WIDE_START + (7056 * BFONT_BYTES_PER_CHAR))
 Start of DC Specific Characters in Font Block.
 
#define BFONT_DC_ICON(offset)
 Takes a DC-specific icon index and returns a character offset.
 
#define BFONT_CIRCLECOPYRIGHT   BFONT_DC_ICON(0)
 Circle copyright.
 
#define BFONT_CIRCLER   BFONT_DC_ICON(1)
 Circle restricted.
 
#define BFONT_TRADEMARK   BFONT_DC_ICON(2)
 Trademark.
 
#define BFONT_UPARROW   BFONT_DC_ICON(3)
 Up arrow.
 
#define BFONT_DOWNARROW   BFONT_DC_ICON(4)
 Down arrow.
 
#define BFONT_LEFTARROW   BFONT_DC_ICON(5)
 Left arrow.
 
#define BFONT_RIGHTARROW   BFONT_DC_ICON(6)
 Right arrow.
 
#define BFONT_UPRIGHTARROW   BFONT_DC_ICON(7)
 Up right arrow.
 
#define BFONT_DOWNRIGHTARROW   BFONT_DC_ICON(8)
 Down right arrow.
 
#define BFONT_DOWNLEFTARROW   BFONT_DC_ICON(9)
 Down left arrow.
 
#define BFONT_UPLEFTARROW   BFONT_DC_ICON(10)
 Up left arrow.
 
#define BFONT_ABUTTON   BFONT_DC_ICON(11)
 A button.
 
#define BFONT_BBUTTON   BFONT_DC_ICON(12)
 B button.
 
#define BFONT_CBUTTON   BFONT_DC_ICON(13)
 C button.
 
#define BFONT_DBUTTON   BFONT_DC_ICON(14)
 D button.
 
#define BFONT_XBUTTON   BFONT_DC_ICON(15)
 X button.
 
#define BFONT_YBUTTON   BFONT_DC_ICON(16)
 Y button.
 
#define BFONT_ZBUTTON   BFONT_DC_ICON(17)
 Z button.
 
#define BFONT_LTRIGGER   BFONT_DC_ICON(18)
 L trigger.
 
#define BFONT_RTRIGGER   BFONT_DC_ICON(19)
 R trigger.
 
#define BFONT_STARTBUTTON   BFONT_DC_ICON(20)
 Start button.
 
#define BFONT_VMUICON   BFONT_DC_ICON(21)
 VMU icon.
 
#define BFONT_ICON_DIMEN   32
 Dimension of vmu icons.
 
#define BFONT_VMU_DREAMCAST_SPECIFIC   (BFONT_DREAMCAST_SPECIFIC+(22 * BFONT_BYTES_PER_CHAR))
 

Enumerations

enum  bfont_vmu_icon_t {
  BFONT_ICON_INVALID_VMU = 0x00 , BFONT_ICON_HOURGLASS_ONE = 0x01 , BFONT_ICON_HOURGLASS_TWO = 0x02 , BFONT_ICON_HOURGLASS_THREE = 0x03 ,
  BFONT_ICON_HOURGLASS_FOUR = 0x04 , BFONT_ICON_VMUICON = 0x05 , BFONT_ICON_EARTH = 0x06 , BFONT_ICON_SATURN = 0x07 ,
  BFONT_ICON_QUARTER_MOON = 0x08 , BFONT_ICON_LAUGHING_FACE = 0x09 , BFONT_ICON_SMILING_FACE = 0x0A , BFONT_ICON_CASUAL_FACE = 0x0B ,
  BFONT_ICON_ANGRY_FACE = 0x0C , BFONT_ICON_COW = 0x0D , BFONT_ICON_HORSE = 0x0E , BFONT_ICON_RABBIT = 0x0F ,
  BFONT_ICON_CAT = 0x10 , BFONT_ICON_CHICK = 0x11 , BFONT_ICON_LION = 0x12 , BFONT_ICON_MONKEY = 0x13 ,
  BFONT_ICON_PANDA = 0x14 , BFONT_ICON_BEAR = 0x15 , BFONT_ICON_PIG = 0x16 , BFONT_ICON_DOG = 0x17 ,
  BFONT_ICON_FISH = 0x18 , BFONT_ICON_OCTOPUS = 0x19 , BFONT_ICON_SQUID = 0x1A , BFONT_ICON_WHALE = 0x1B ,
  BFONT_ICON_CRAB = 0x1C , BFONT_ICON_BUTTERFLY = 0x1D , BFONT_ICON_LADYBUG = 0x1E , BFONT_ICON_ANGLER_FISH = 0x1F ,
  BFONT_ICON_PENGUIN = 0x20 , BFONT_ICON_CHERRIES = 0x21 , BFONT_ICON_TULIP = 0x22 , BFONT_ICON_LEAF = 0x23 ,
  BFONT_ICON_SAKURA = 0x24 , BFONT_ICON_APPLE = 0x25 , BFONT_ICON_ICECREAM = 0x26 , BFONT_ICON_CACTUS = 0x27 ,
  BFONT_ICON_PIANO = 0x28 , BFONT_ICON_GUITAR = 0x29 , BFONT_ICON_EIGHTH_NOTE = 0x2A , BFONT_ICON_TREBLE_CLEF = 0x2B ,
  BFONT_ICON_BOAT = 0x2C , BFONT_ICON_CAR = 0x2D , BFONT_ICON_HELMET = 0x2E , BFONT_ICON_MOTORCYCLE = 0x2F ,
  BFONT_ICON_VAN = 0x30 , BFONT_ICON_TRUCK = 0x31 , BFONT_ICON_CLOCK = 0x32 , BFONT_ICON_TELEPHONE = 0x33 ,
  BFONT_ICON_PENCIL = 0x34 , BFONT_ICON_CUP = 0x35 , BFONT_ICON_SILVERWARE = 0x36 , BFONT_ICON_HOUSE = 0x37 ,
  BFONT_ICON_BELL = 0x38 , BFONT_ICON_CROWN = 0x39 , BFONT_ICON_SOCK = 0x3A , BFONT_ICON_CAKE = 0x3B ,
  BFONT_ICON_KEY = 0x3C , BFONT_ICON_BOOK = 0x3D , BFONT_ICON_BASEBALL = 0x3E , BFONT_ICON_SOCCER = 0x3F ,
  BFONT_ICON_BULB = 0x40 , BFONT_ICON_TEDDY_BEAR = 0x41 , BFONT_ICON_BOW_TIE = 0x42 , BFONT_ICON_BOW_ARROW = 0x43 ,
  BFONT_ICON_SNOWMAN = 0x44 , BFONT_ICON_LIGHTNING = 0x45 , BFONT_ICON_SUN = 0x46 , BFONT_ICON_CLOUD = 0x47 ,
  BFONT_ICON_UMBRELLA = 0x48 , BFONT_ICON_ONE_STAR = 0x49 , BFONT_ICON_TWO_STARS = 0x4A , BFONT_ICON_THREE_STARS = 0x4B ,
  BFONT_ICON_FOUR_STARS = 0x4C , BFONT_ICON_HEART = 0x4D , BFONT_ICON_DIAMOND = 0x4E , BFONT_ICON_SPADE = 0x4F ,
  BFONT_ICON_CLUB = 0x50 , BFONT_ICON_JACK = 0x51 , BFONT_ICON_QUEEN = 0x52 , BFONT_ICON_KING = 0x53 ,
  BFONT_ICON_JOKER = 0x54 , BFONT_ICON_ISLAND = 0x55 , BFONT_ICON_0 = 0x56 , BFONT_ICON_1 = 0x57 ,
  BFONT_ICON_2 = 0x58 , BFONT_ICON_3 = 0x59 , BFONT_ICON_4 = 0x5A , BFONT_ICON_5 = 0x5B ,
  BFONT_ICON_6 = 0x5C , BFONT_ICON_7 = 0x5D , BFONT_ICON_8 = 0x5E , BFONT_ICON_9 = 0x5F ,
  BFONT_ICON_A = 0x60 , BFONT_ICON_B = 0x61 , BFONT_ICON_C = 0x62 , BFONT_ICON_D = 0x63 ,
  BFONT_ICON_E = 0x64 , BFONT_ICON_F = 0x65 , BFONT_ICON_G = 0x66 , BFONT_ICON_H = 0x67 ,
  BFONT_ICON_I = 0x68 , BFONT_ICON_J = 0x69 , BFONT_ICON_K = 0x6A , BFONT_ICON_L = 0x6B ,
  BFONT_ICON_M = 0x6C , BFONT_ICON_N = 0x6D , BFONT_ICON_O = 0x6E , BFONT_ICON_P = 0x6F ,
  BFONT_ICON_Q = 0x70 , BFONT_ICON_R = 0x71 , BFONT_ICON_S = 0x72 , BFONT_ICON_T = 0x73 ,
  BFONT_ICON_U = 0x74 , BFONT_ICON_V = 0x75 , BFONT_ICON_W = 0x76 , BFONT_ICON_X = 0x77 ,
  BFONT_ICON_Y = 0x78 , BFONT_ICON_Z = 0x79 , BFONT_ICON_CHECKER_BOARD = 0x7A , BFONT_ICON_GRID = 0x7B ,
  BFONT_ICON_LIGHT_GRAY = 0x7C , BFONT_ICON_DIAG_GRID = 0x7D , BFONT_ICON_PACMAN_GRID = 0x7E , BFONT_ICON_DARK_GRAY = 0x7F ,
  BFONT_ICON_EMBROIDERY = 0x80
}
 Builtin VMU Icons. More...
 
enum  bfont_code_t { BFONT_CODE_ISO8859_1 = 0 , BFONT_CODE_EUC = 1 , BFONT_CODE_SJIS = 2 , BFONT_CODE_RAW = 3 }
 

Functions

void bfont_set_encoding (bfont_code_t enc)
 Set the font encoding.
 
Coloring

Methods for modifying the text color.

uint32_t bfont_set_foreground_color (uint32_t c)
 Set the font foreground color.
 
uint32_t bfont_set_background_color (uint32_t c)
 Set the font background color.
 
bool bfont_set_32bit_mode (bool on) __depr("Please use the bpp function of the the bfont_draw_ex functions")
 Set the font to draw 32-bit color.
 
Character Lookups

Methods for finding various font characters and icons.

uint8_t * bfont_find_char (uint32_t ch)
 Find an ISO-8859-1 character in the font.
 
uint8_t * bfont_find_char_jp (uint32_t ch)
 Find an full-width Japanese character in the font.
 
uint8_t * bfont_find_char_jp_half (uint32_t ch)
 Find an half-width Japanese character in the font.
 
uint8_t * bfont_find_icon (bfont_vmu_icon_t icon)
 Find a VMU icon.
 
Character Drawing

Methods for rendering characters.

size_t bfont_draw_ex (void *buffer, uint32_t bufwidth, uint32_t fg, uint32_t bg, uint8_t bpp, bool opaque, uint32_t c, bool wide, bool iskana)
 Draw a single character of any sort to the buffer.
 
size_t bfont_draw (void *buffer, uint32_t bufwidth, bool opaque, uint32_t c)
 Draw a single character to a buffer.
 
size_t bfont_draw_thin (void *buffer, uint32_t bufwidth, bool opaque, uint32_t c, bool iskana)
 Draw a single thin character to a buffer.
 
size_t bfont_draw_wide (void *buffer, uint32_t bufwidth, bool opaque, uint32_t c)
 Draw a single wide character to a buffer.
 
String Drawing

Methods for rendering formatted text.

void bfont_draw_str_ex (void *b, uint32_t width, uint32_t fg, uint32_t bg, uint8_t bpp, bool opaque, const char *str)
 Draw a full string of any sort to any sort of buffer.
 
void bfont_draw_str_ex_fmt (void *b, uint32_t width, uint32_t fg, uint32_t bg, uint8_t bpp, bool opaque, const char *fmt,...) __printflike(7
 Draw a full formatted string of any sort to any sort of buffer.
 
void void bfont_draw_str_ex_vfmt (void *b, uint32_t width, uint32_t fg, uint32_t bg, uint8_t bpp, bool opaque, const char *fmt, va_list *var_args)
 Draw formatted string of any sort to buffer (with va_args).
 
void bfont_draw_str (void *b, uint32_t width, bool opaque, const char *str)
 Draw a full string to a buffer.
 
void bfont_draw_str_fmt (void *b, uint32_t width, bool opaque, const char *fmt,...) __printflike(4
 Draw a full formatted string to a buffer.
 

Detailed Description

BIOS font drawing functions.

This file provides support for utilizing the font built into the Dreamcast's BIOS. These functions allow access to both the western character set and Japanese characters.

Author
Megan Potter
Kazuaki Matsumoto
Donald Haase
Falco Girgis
Todo
  • More user-friendly way to fetch/print DC-specific icons.

Enumeration Type Documentation

◆ bfont_code_t

Enumerator
BFONT_CODE_ISO8859_1 

ISO-8859-1 (western) charset.

BFONT_CODE_EUC 

EUC-JP charset.

BFONT_CODE_SJIS 

Shift-JIS charset.

BFONT_CODE_RAW 

Raw indexing to the BFONT.

Function Documentation

◆ bfont_draw()

size_t bfont_draw ( void * buffer,
uint32_t bufwidth,
bool opaque,
uint32_t c )

Draw a single character to a buffer.

This function draws a single character in the set encoding to the given buffer. Calling this is equivalent to calling bfont_draw_thin() with 0 for the final parameter.

Parameters
bufferThe buffer to draw to (at least 12 x 24 pixels)
bufwidthThe width of the buffer in pixels
opaqueIf non-zero, overwrite blank areas with black, otherwise do not change them from what they are
cThe character to draw
Returns
Amount of width covered in bytes.

◆ bfont_draw_ex()

size_t bfont_draw_ex ( void * buffer,
uint32_t bufwidth,
uint32_t fg,
uint32_t bg,
uint8_t bpp,
bool opaque,
uint32_t c,
bool wide,
bool iskana )

Draw a single character of any sort to the buffer.

This function draws a single character in the set encoding to the given buffer. This function sits under draw, draw_thin, and draw_wide, while exposing the colors and bitdepths desired. This will allow the writing of bfont characters to paletted textures.

Parameters
bufferThe buffer to draw to.
bufwidthThe width of the buffer in pixels.
fgThe foreground color to use.
bgThe background color to use.
bppThe number of bits per pixel in the buffer.
opaqueIf non-zero, overwrite background areas with black, otherwise do not change them from what they are.
cThe character to draw.
wideDraw a wide character.
iskanaDraw a half-width kana character.
Returns
Amount of width covered in bytes.

◆ bfont_draw_str()

void bfont_draw_str ( void * b,
uint32_t width,
bool opaque,
const char * str )

Draw a full string to a buffer.

This function draws a NUL-terminated string in the set encoding to the given buffer. This will automatically handle mixed half and full-width characters if the encoding is set to one of the Japanese encodings. Draws pre-set 16-bit colors.

Parameters
bThe buffer to draw to.
widthThe width of the buffer in pixels.
opaqueIf one, overwrite blank areas with bfont_bgcolor, otherwise do not change them from what they are.
strThe string to draw.

◆ bfont_draw_str_ex()

void bfont_draw_str_ex ( void * b,
uint32_t width,
uint32_t fg,
uint32_t bg,
uint8_t bpp,
bool opaque,
const char * str )

Draw a full string of any sort to any sort of buffer.

This function draws a NUL-terminated string in the set encoding to the given buffer. This will automatically handle mixed half and full-width characters if the encoding is set to one of the Japanese encodings. Colors and bitdepth can be set.

Parameters
bThe buffer to draw to.
widthThe width of the buffer in pixels.
fgThe foreground color to use.
bgThe background color to use.
bppThe number of bits per pixel in the buffer.
opaqueIf non-zero, overwrite background areas with black, otherwise do not change them from what they are.
strThe string to draw.
See also
bfont_draw_str_ex_fmt(), bfont_draw_str_ex_va()

◆ bfont_draw_str_ex_fmt()

void bfont_draw_str_ex_fmt ( void * b,
uint32_t width,
uint32_t fg,
uint32_t bg,
uint8_t bpp,
bool opaque,
const char * fmt,
... )

Draw a full formatted string of any sort to any sort of buffer.

This function is equivalent to bfont_draw_str_ex(), except that the string is formatted as with the printf() function.

Parameters
bThe buffer to draw to.
widthThe width of the buffer in pixels.
fgThe foreground color to use.
bgThe background color to use.
bppThe number of bits per pixel in the buffer.
opaqueIf non-zero, overwrite background areas with black, otherwise do not change them from what they are.
fmtThe printf-style format string to draw.
...Additional printf-style variadic arguments
See also
bfont_draw_str_ex_vfmt()

◆ bfont_draw_str_ex_vfmt()

void void bfont_draw_str_ex_vfmt ( void * b,
uint32_t width,
uint32_t fg,
uint32_t bg,
uint8_t bpp,
bool opaque,
const char * fmt,
va_list * var_args )

Draw formatted string of any sort to buffer (with va_args).

This function is equivalent to bfont_draw_str_ex_fmt(), except that the variadic argument list is passed via a pointer to a va_list.

Parameters
bThe buffer to draw to.
widthThe width of the buffer in pixels.
fgThe foreground color to use.
bgThe background color to use.
bppThe number of bits per pixel in the buffer.
opaqueIf non-zero, overwrite background areas with black, otherwise do not change them from what they are.
fmtThe printf-style format string to draw.
var_argsAdditional printf-style variadic arguments
See also
bfont_draw_str_ex_fmt()

◆ bfont_draw_str_fmt()

void bfont_draw_str_fmt ( void * b,
uint32_t width,
bool opaque,
const char * fmt,
... )

Draw a full formatted string to a buffer.

This function is equvalent to bfont_draw_str(), except that the string is formatted as with the printf() function.

Parameters
bThe buffer to draw to.
widthThe width of the buffer in pixels.
opaqueIf one, overwrite blank areas with bfont_bgcolor, otherwise do not change them from what they are.
fmtThe printf-style format string to draw.
...Additional printf-style variadic arguments.

◆ bfont_draw_thin()

size_t bfont_draw_thin ( void * buffer,
uint32_t bufwidth,
bool opaque,
uint32_t c,
bool iskana )

Draw a single thin character to a buffer.

This function draws a single character in the set encoding to the given buffer. This only works with ISO-8859-1 characters and half-width kana.

Parameters
bufferThe buffer to draw to (at least 12 x 24 pixels)
bufwidthThe width of the buffer in pixels
opaqueIf non-zero, overwrite blank areas with black, otherwise do not change them from what they are
cThe character to draw
iskanaSet to 1 if the character is a kana, 0 if ISO-8859-1
Returns
Amount of width covered in bytes.

◆ bfont_draw_wide()

size_t bfont_draw_wide ( void * buffer,
uint32_t bufwidth,
bool opaque,
uint32_t c )

Draw a single wide character to a buffer.

This function draws a single character in the set encoding to the given buffer. This only works with full-width kana and kanji.

Parameters
bufferThe buffer to draw to (at least 24 x 24 pixels)
bufwidthThe width of the buffer in pixels
opaqueIf non-zero, overwrite blank areas with black, otherwise do not change them from what they are
cThe character to draw
Returns
Amount of width covered in bytes.

◆ bfont_find_char()

uint8_t * bfont_find_char ( uint32_t ch)

Find an ISO-8859-1 character in the font.

This function retrieves a pointer to the font data for the specified character in the font, if its available. Generally, you will not have to use this function, use one of the bfont_draw_* functions instead.

Parameters
chThe character to look up
Returns
A pointer to the raw character data

◆ bfont_find_char_jp()

uint8_t * bfont_find_char_jp ( uint32_t ch)

Find an full-width Japanese character in the font.

This function retrieves a pointer to the font data for the specified character in the font, if its available. Generally, you will not have to use this function, use one of the bfont_draw_* functions instead.

This function deals with full-width kana and kanji.

Parameters
chThe character to look up
Returns
A pointer to the raw character data

◆ bfont_find_char_jp_half()

uint8_t * bfont_find_char_jp_half ( uint32_t ch)

Find an half-width Japanese character in the font.

This function retrieves a pointer to the font data for the specified character in the font, if its available. Generally, you will not have to use this function, use one of the bfont_draw_* functions instead.

This function deals with half-width kana only.

Parameters
chThe character to look up
Returns
A pointer to the raw character data

◆ bfont_find_icon()

uint8_t * bfont_find_icon ( bfont_vmu_icon_t icon)

Find a VMU icon.

This function retrieves a pointer to the icon data for the specified VMU icon in the bios, if its available. The icon data is flipped both vertically and horizontally. Each vmu icon has dimensions 32x32 pixels and is 128 bytes long.

Parameters
iconThe VMU icon index to look up.
Returns
A pointer to the raw icon data or NULL if icon value is incorrect.

◆ bfont_set_32bit_mode()

bool bfont_set_32bit_mode ( bool on)

Set the font to draw 32-bit color.

Deprecated
Use the bpp parameter of the bfont_draw_ex() functions.

This function changes whether the font draws colors as 32-bit or 16-bit. The default is to use 16-bit.

Parameters
onSet to 0 to use 16-bit color, 32-bit otherwise.
Returns
The old state (1 = 32-bit, 0 = 16-bit).

◆ bfont_set_background_color()

uint32_t bfont_set_background_color ( uint32_t c)

Set the font background color.

This function selects the background color to draw when a pixel is drawn in the font. This color is only used for pixels not covered by the font when you have selected to have the font be opaque.

Parameters
cThe color to use.
Returns
The old background color.
See also
bfont_set_foreground_color()

◆ bfont_set_encoding()

void bfont_set_encoding ( bfont_code_t enc)

Set the font encoding.

This function selects the font encoding that is used for the font. This allows you to select between the various character sets available.

Parameters
encThe character encoding in use

◆ bfont_set_foreground_color()

uint32_t bfont_set_foreground_color ( uint32_t c)

Set the font foreground color.

This function selects the foreground color to draw when a pixel is opaque in the font. The value passed in for the color should be in whatever pixel format that you intend to use for the image produced.

Parameters
cThe color to use.
Returns
The old foreground color.
See also
bfont_set_background_color()