Shinobi Library

1998/10/4


BootROMフォント関数

0. 概要

本関数はBootROM内に格納されているフォントデータをBIOSを通してアクセスするものです。
BootROM内には英数、日本語のフォントが格納されています。全角24×24pixel、半角12×24pixe、セガ特製外字、VMデフォルトラベルアイコンが用意されています。l
BIOSにはフォントデータの先頭アドレスを取得する関数、セマフォに関する関数が入っています。

0.1フォントの構造

フォントは、ドットイメージを0と1のビット列に変換し圧縮して、以下のような形態でBOOT ROM内に収められています。
= 0000 0110 0000 0000 1001 0000 0001 0000 1000 0010 0000 0100 0100 0000 0010 10000 0000 0001 1000 0000 0001 1000 0000 0001 1000 0000 0001 1000 0000 0001 1111 1111 1111 1000 0000 0001 10000 0000 0001 1000 0000 0001 1000 0000 0001 1000 0000 0001 1000 0000 0001 10000 0000 0001 1000 0000 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
= 0x06, 0x00, 0x90, 0x10, 0x82, 0x04, 0x40, 0x28, 0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0x1f, 0xff, 0x80, 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

1. データ仕様

1.1 定数

セクションの先頭データへのオフセット。実際にはsyBtFntGet()で取得したフォントデータの先頭アドレスをこれに加えます。

SYD_BT_FNT_ASCII_24_OFSASCII アスキー
SYD_BT_FNT_WEST_24_OFSISO 8859-1 海外用8ビットコード後半
SYD_BT_FNT_JISX_24_OFSJIS X 0201 日本用8ビットコード後半
SYD_BT_FNT_KANA_24_OFSShift JIS part1 全角日本語非漢字部分
SYD_BT_FNT_LVL1_24_OFSShift JIS part2 日本語漢字第一水準部分
SYD_BT_FNT_LVL2_24_OFSShift JIS part3 日本語漢字第二水準部分
SYD_BT_FNT_ASCII_12_OFSASCII アスキー12pixel×12pixel
SYD_BT_FNT_GAIJ_24_OFSGAIJI 特製外字
SYD_BT_FNT_VMSICON_OFSVMデフォルトラベルアイコン
JR5で、アナウンスしていました、12x12のアスキー文字の提供は無くなり、VMのデフォルトラベルアイコンに差し替えとなりました。
ご注意ください。

セクションのデータサイズ。

SYD_BT_FNT_ASCII_24_SIZEASCII アスキー
SYD_BT_FNT_WEST_24_SIZEISO 8859-1 海外用8ビットコード後半
SYD_BT_FNT_JISX_24_SIZEJIS X 0201 日本用8ビットコード後半
SYD_BT_FNT_KANA_24_SIZEShift JIS part1 全角日本語非漢字部分
SYD_BT_FNT_LVL1_24_SIZEShift JIS part2 日本語漢字第一水準部分
SYD_BT_FNT_LVL2_24_SIZEShift JIS part3 日本語漢字第二水準部分
SYD_BT_FNT_ASCII_12_SIZEASCII アスキー12pixel×12pixel
SYD_BT_FNT_GAIJ_24_SIZEGAIJI 特製外字
SYD_BT_FNT_VMSICON_SIZEVMデフォルトラベルアイコン
JR5で、アナウンスしていました、12x12のアスキー文字の提供は無くなり、VMSのデフォルトラベルアイコンに差し替えとなりました。
ご注意ください。

各セクションでの代表的な文字コード。2byte日本語に関してはシフトJISコードを明記してあります。

SYD_BT_FNT_CODE_ASCII_MINアスキーの初めのコード
SYD_BT_FNT_CODE_ASCII_MAXアスキーの最後のコード
SYD_BT_FNT_CODE_8BIT_MIN8ビットコードの初めのコード
SYD_BT_FNT_CODE_8BIT_MAX8ビットコードの最後のコード
SYD_BT_FNT_CODE_KANA_MIN2byteコードの最初のコード
SYD_BT_FNT_CODE_KANA_MAX日本語非漢字部分の最後のコード
SYD_BT_FNT_CODE_LVL1_MIN漢字第一水準の最初のコード
SYD_BT_FNT_CODE_LVL1_MAX漢字第一水準の最後のコード
SYD_BT_FNT_CODE_LVL2_MIN漢字第二水準の最初のコード
SYD_BT_FNT_CODE_LVL2_MAX漢字第二水準の最後のコード
SYD_BT_FNT_GAIJ_MIN外字の最初のコード
SYD_BT_FNT_GAIJ_MAX外字の最後のコード
SYD_BT_FNT_ICON_MINVMSアイコンの最初のコード
SYD_BT_FNT_ICON_MAXVMSアイコンの最後のコード

フォントセマフォの成功、失敗を示す。syBtFntChkSmph()の関数値として利用されます。

SYD_BT_FNT_SMPH_SUCCESSブートロムへのアクセス可能
SYD_BT_FNT_SMPH_FAILUREブートロムへのアクセス不許可

フォントセット一覧(syBtFntGetAddr(), syBtFntGetInfo()使用時に必要)
SYE_BT_FNT_FONTSET_WESTERN_24ISO 8859-1
SYE_BT_FNT_FONTSET_JP_JIS_24JIS X 0201
SYE_BT_FNT_FONTSET_JP_KANA_24Shift JIS ひらがなまで
SYE_BT_FNT_FONTSET_JP_LVL1_24Shift JIS 第一水準まで
SYE_BT_FNT_FONTSET_JP_LVL2_24Shift JIS 第二水準まで
SYE_BT_FNT_FONTSET_JP_GAIJ_24セガ特製外字
SYE_BT_FNT_FONTSET_VMSICONVMデフォルトラベルアイコン
ISO 8859-1とJIS X 0201の違いは、コード0x5c、0x7e、及び0xa0以降です。

1.2 構造体仕様

SYS_BT_FNT_INFO構造体
定義
typedef struct {
  Uint8  width;
  Uint8  height;
} SYS_BT_FNT_INFO;

説明
フォントに関する情報

メンバ
widthフォントの幅(単位:Pixel)
heightフォントの高さ(単位:Pixel)
参照
syBtFntGetInfo()

2. 関数仕様

2.1 関数一覧

関数 機能
syBtFntGetブートロム上のフォントデータの先頭アドレスの取得
syBtFntChkSmphフォントセマフォのチェック
syBtFntClrSmphフォントセマフォのクリア
syBtFntGetAddr<新規>Shift JISコードから対象フォントデータへのオフセット値を取得
syBtFntGetInfo<新規>Shift JISコードから対象フォントデータのサイズ情報を取得
syBtFntSjis2Jis<新規>Shift JISコードからJISコードへ変換

2.2 関数API

syBtFntGet

[関数]
void *syBtFntGet(Uint32 num)
[入力]
num
制御用番号
[出力]
なし
[戻り値]
BootROM内のフォントデータの先頭アドレス
[機能]
ブートロム内フォントデータの格納アドレスを取得します。
[注意]
制御用番号には現在SYD_BT_FNTINIを入れて置く事。
セマフォを獲得せずに、フォントデータの取得を行った場合には、不定の値が返る可能性があります。
本関数は、アドレスを取得するものであって、フォントデータをアプリケーション内に取り込むものではありません。フォントデータのアプリケ−ションへのコピーは、アプリケーション自身が行うようにしてください。
[使用例]
  #define SMD_WRK_ADDR  (0x0c020000)

  main()
  {
    void *smFntAddr, *smTheFntAddr;
    void *smWrkAddr;
    Uint8 smTheCode;
    
    smFntAddr = syBtFntGet();
    smWrkAddr = (void *)SMD_WRK_ADDR;
    smTheCode = '?';
    
    /* evaluate the font address in Boot ROM */
    smTheFntAddr = (void *)((Uint8)smFntAddr + SYD_BT_FNT_WORK_ASCII_24_OFS
      + (smTheCode - SYD_BT_FNT_CODE_ASCII_MIN) * SYD_BT_FNT_24_SIZE_HAN );
    
    /* font semaphore check */
    if( syBtFntChkSmph() == SYD_BT_FNT_SMPH_SUCCESS ) {
      /* copy 1 letter to work RAM from Boot ROM */
      memcpy( smTheFntAddr, smWrkAddr, SYD_BT_FNT_24_SIZE_HAN );
      /* font semaphore clear */
      syBtFntClrSmph();
    }
  }

syBtFntChkSmph

[関数]
Sint32 syBtFntChkSmph( void )
[入力]
なし
[出力]
なし
[戻り値]
フォントセマフォのチェック結果 SYD_BT_FNT_SMPH_***
[機能]
フォントセマフォをチェックし、立っていなければ立て、成功を返します。フォントセマフォか他のプロセス(GDドライバ)によるセマフォが立っていれば失敗を返します。
[注意]
セマフォを獲得せずに、フォントデータの取得を行った場合には、不定の値が返る可能性があります。

syBtFntClrSmph

[関数]
Sint32 syBtFntClrSmph( void )
[入力]
なし
[出力]
なし
[戻り値]
なし
[機能]
フォントセマフォをクリアします。

syBtFntGetAddr

[関数]
Uint32 syBtFntGetAddr( SYE_BT_FNT_FONTSET set, Sint16 code )
[入力]
set
フォントセット
code
Shift JISコード。8byteコードは上位8byteに0x00を付加する
[出力]
なし
[戻り値]
フォントデータ先頭アドレスからのオフセット(byte数)
[機能]
Shift JISコードからフォントデータ先頭アドレスからのオフセットを計算します。計算された値はbyte数です。
[注意]
なし

syBtFntGetInfo

[関数]
void syBtFntGetInfo( SYE_BT_FNT_FONTSET set, Sint16 code, SYS_BT_FNT_INFO *info )
[入力]
set
フォントセット
code
Shift JISコード。8byteコードは上位8byteに0x00を付加する
[出力]
info
フォントセットとcodeで指定されたフォントデータのサイズ情報
[戻り値]
なし
[機能]
フォントデータの縦、横のpixel数を取得します。
[注意]
なし

syBtFntSjis2Jis

[関数]
Sint16 syBtFntSjis2Jis( Sint16 sjis )
[入力]
sjis
Shift JISコード
[出力]
なし
[戻り値]
JIS コード
[機能]
Shift JISコードからJISコードへ変換
[注意]
なし


オーバービューに戻る

TOPに戻る
Copyright 1998 SEGA Enterprises, LTD.