Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2000年05月07日] [更新 2001年07月22日] PC-9801 目次
   
PC-9801
CRT画面制御ライブラリ Ver.4.0
動作確認等 掲載の図は, PC-9821 Np + MSDOS 6.2 での実行結果
Tgcont.zip [1,055 KB] (Ver 4.0 - ライブラリ説明書同梱 - PDF)







概要


PC-9801 の MS-DOS にはグラフィクス機能がありません.そこで,PC-9801 の BIOS と LIO を使用して,MS FORTRAN から使用可能なグラフィクスサブルーチン を作成しました.ほとんどアセンブラで作成してあります.内容は,
  • CRT 画面への文字列出力とキー入力操作
  • ディスク操作関係
  • I/O ポート,メモリ操作
  • 四角形,円,扇形などの図形描画
  • 画面のハードコピー
  • RS-232C の操作関係
  • マウスと実線,点線などの描画ルーチン
などで,各々のサブルーチン名は,当時使用されていたBASICのグラフィクスの図形描画コマンドに似せてあります.図形描画では,高速性を重視して,俗に言う「ハードを直接たたいて」いるものもあります.各々のサブルーチンに対して,FORTRAN のテストプログラム (ソースリストのみ) を用意してあります.ライブラリの開発には,
  • Microsoft (R) FORTRAN Optimizing Compiler Version 5.10
  • Micorsoft (R) Macro Assembler Version 6.00AD
を用いています.
ライブラリの説明文書は,今回 PDF 形式にしましたので別途ダウンロードして下さい.
なお,このライブラリは,元々科学技術計算の結果をプロットするためのプロッタ制御ライブラリ開発のために作成したもので,利用にあたっては,数値演算プロセッサ (FPU) が必要です (アセンブラのコードの一部に FPU のコマンドを使用しています).
以下に二つだけテストプログラムの実行結果を示します.




四角形内部の塗潰し


四角形を描画し,その内部を指定した色で塗りつぶす描画サブルーチン GBOXF の使用例です.塗りつぶす色は GPEN で指定します.


四角形の塗りつぶし


上の図を作成したプログラムのコード
      PROGRAM TEST004

      IMPLICIT INTEGER*4(I-N)

      CALL TGINIT(20)

      CALL GPEN(4)
      CALL GBOXF(250,500,100,350)
      CALL GPEN(5)
      CALL GBOXF(200,500,50,300)
      CALL GPEN(6)
      CALL GBOXF(400,600,200,300)

      CALL TDISPM(1,1,'四角形の塗りつぶし',7,0)
      CALL TESTEND(IRET)
      END




RGB による階調表現


色番号に対して RGB (赤・緑・青) の各色の値をセットしてモノクロの階調を表現した例です.ここでは 8 階調しか表現していませんが,実際には 15 階調までの表現が可能です.これが当時の PC-9801 のグラフィックスの限界です.四角形を描画する GBOXF と画面のライン毎に色をセットする GLPSETF の両方を使用しています.


RGB による階調表現


上の図を作成したプログラムのコード
        PROGRAM TEST017

        IMPLICIT INTEGER*4(I-N)
        INTEGER*1 IP(151)


        CALL TGINIT(20)
        CALL SCREEN(1,1)

        CALL GSETRGB(7,14,15,15)
        CALL GSETRGB(6,13,14,14)
        CALL GSETRGB(5,11,12,12)
        CALL GSETRGB(4, 9,10,10)
        CALL GSETRGB(3, 7, 8, 8)
        CALL GSETRGB(2, 6, 7, 7)
        CALL GSETRGB(1, 5, 6, 6)
        CALL GSETRGB(0, 0, 0, 0)

        IX1=240
        IX2=390

        IYU=237
        DO 100 IPEN=7,1,-1
          CALL GPEN(IPEN)
          CALL GBOXF(IX1-150,IX2+150,IYU,IYU-2)
          IYU=IYU-2
    100 CONTINUE

        IYU=300
        IYB=IYU-20

        DO 200 IPEN=7,1,-1
          DO 201 I=1,151
    201   IP(I)=IPEN
          DO 210 IY=IYU,IYB,-1
    210   CALL GLPSETF(IX1,IY,IP,151)
          IYU=IYU-20
          IYB=IYU-20
    200 CONTINUE

        CALL TESTEND(IRET)
        END