| 
          
            
              | 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 から使用可能なグラフィクスサブルーチン を作成しました.ほとんどアセンブラで作成してあります.内容は, 
                  などで,各々のサブルーチン名は,当時使用されていたBASICのグラフィクスの図形描画コマンドに似せてあります.図形描画では,高速性を重視して,俗に言う「ハードを直接たたいて」いるものもあります.各々のサブルーチンに対して,FORTRAN のテストプログラム (ソースリストのみ) を用意してあります.ライブラリの開発には,CRT 画面への文字列出力とキー入力操作ディスク操作関係I/O ポート,メモリ操作四角形,円,扇形などの図形描画 画面のハードコピーRS-232C の操作関係マウスと実線,点線などの描画ルーチン  
                  を用いています.Microsoft (R) FORTRAN Optimizing Compiler Version 5.10Micorsoft (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 (赤・緑・青) の各色の値をセットしてモノクロの階調を表現した例です.ここでは 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 
 
 
 
 
 
 
 
 |