Table of contents目次

  1. Makefile
    1. Makefile.host
    2. Makefile.x68k
  2. Files to be used in making XEiJXEiJ を作るときに使うファイル
    1. adotr*.r
    2. drawingmode.pl
    3. efp.gp
    4. favicon.pl
    5. ftob.pl
    6. Graph.pm
    7. hermite.gp
    8. hu260pat.s
    9. hu260pat.x
    10. include/*
    11. itob.pl
    12. itob.pl
    13. keymap/*
    14. omusubifont.r
    15. omusubifont.s
    16. opcode.pl
    17. optdiv.pl
    18. pattobytes.pl
    19. rom16pat.s
    20. rom16pat.x
    21. scsi16.s
    22. scsi16ex.r
    23. scsi16in.r
    24. sjdump.pl
    25. two_pi.pl
  3. Test programsテストプログラム
    1. cir.s
    2. cir.x
    3. crtcmmtest.s
    4. crtcmmtest.x
    5. crtmodtest.s
    6. crtmodtest.x
    7. cylindertest.s
    8. cylindertest.x
    9. fefunctest.bas
    10. fputest.s
    11. fputest.x
    12. instructiontest.s
    13. instructiontest.x
    14. optime.s
    15. optime.x
    16. optitest.bat
    17. r00bit0test.s
    18. r00bit0test.x
    19. spr256test.s
    20. spr256test.x
    21. vcntest.s
    22. vcntest.x
    23. vcntest2.s
    24. vcntest2.x
    25. zkeytest.s
    26. zkeytest.x
  4. Other programs その他のプログラム
    1. 060tsys/*
    2. crtmod16.s
    3. crtmod16.x
    4. crtmrb16.x
    5. ppcon.s
    6. ppcon.x
    7. set232c.s
    8. set232c.x
    9. stupsnd.s
    10. stupsnd.x
    11. vperiod.s
    12. vperiod.x

1. Makefile

Execute "make" in both environments of the host machine and X68000 in the directory "misc" by using the host file system. ホストファイルシステム を使い、同じ misc ディレクトリでホストマシンと X68000 の両方で make します。

1.1. Makefile.host

Makefile to be used on the host machine. It generates fputest.s from efp.gp. ホストマシンで使う Makefile です。efp.gp を使って fputest.s を作ります。

$ make -f Makefile.host

1.2. Makefile.x68k

Makefile.x68k is used to create the following files on the X68000. Makefile.x68k は X68000 で以下のファイルを作るときに使います。

B:\>make -f Makefile.x68k

2. Files to be used in making XEiJ XEiJ を作るときに使うファイル

2.1. adotr*.r

Used for the "Send file" button under "Transfer" in the "RS232C and terminal" window. 「RS232C とターミナル」ウインドウの「転送」の「ファイル送信」ボタンで使います。

2.2. drawingmode.pl

A Perl script that generates DrawingMode.java automatically. It does everything from making Japanese comments to formatting the Java code. DrawingMode.java を自動生成する Perl スクリプトです。日本語の注釈を作るところから Java のコードを整形するところまで全部やっています。

2.3. efp.gp

A GP script that calculates constant data for the floating point arithmetic routines and generates fputest.s automatically. 浮動小数点演算ルーチンの定数データと fputest.s を自動生成する GP スクリプトです。

2.4. favicon.pl

A Perl script that generates favicon data of the Look and Feel automatically. ルックアンドフィールのファビコンのデータを自動生成する Perl スクリプトです。

2.5. ftob.pl

A Perl script that converts binary files into strings. バイナリファイルを文字列に変換する Perl スクリプトです。

2.6. Graph.pm

A Perl subroutine that draws graphs for comments of floating point arithmetic routines. 浮動小数点演算ルーチンの注釈の関数のグラフを描くライブラリです。

2.7. hermite.gp

A GP script that generates code of the Hermite interpolation for ADPCM automatically. ADPCM のエルミート補間のコードを自動生成する GP スクリプトです。

2.8. hu260pat.s

The source code of hu260pat.x. hu260pat.x のソースコードです。

2.9. hu260pat.x

This is a patch to change Human 3.02 to ROM Human 2.60. It is not an executable program. Human 3.02 を ROM Human 2.60 にするパッチです。実行プログラムではありません。

2.10. include/*

These include files are used in Makefile.x68k. これらのインクルードファイルは Makefile.x68k で使います。

2.11. itob.pl

This is a Perl script that converts an array of byte's into a string to avoid the initialization code from becoming too large to compile. 初期化コードが巨大化してコンパイルできなくなるのを避けるために byte の配列を文字列に変換する Perl スクリプトです。

2.12. itob.pl

This is a Perl script that converts an array of char's into a string to avoid the initialization code from becoming too large to compile. 初期化コードが巨大化してコンパイルできなくなるのを避けるために char の配列を文字列に変換する Perl スクリプトです。

2.13. keymap/*

This is a tool that collects KeyEvent data when a key assigned to an X68000 key is pressed. X68000 のキーに割り当てるキーを押したときの KeyEvent のデータを収集するツールです。

2.14. omusubifont.r

Omusubi font which was created to characterize screenshots of XEiJ. O, the first letter of Omusubi, is wrapped in seaweed to be distinguished from 0. XEiJ のスクリーンショットに特徴を付けるために作ったおむすびフォントです。Omusubi の O に海苔を巻いて 0 と見分けられるようにしました。

2.15. omusubifont.s

This is the source code for the Omusubi font. おむすびフォントのソースコードです。

2.16. opcode.pl

A Perl script that makes a list of instructions of M68000 family. It also outputs switch ~ case in the core and the disassembler. M68000 ファミリの命令の一覧表を作る Perl スクリプトです。コアや逆アセンブラの switch~case も出力します。

2.17. optdiv.pl

A Perl script that displays a method to replace an integer division with a multiplication and a shift operation. It is used to make the program faster. 整数除算を乗算とシフトに変換する方法を表示する Perl スクリプトです。高速化のために多用しています。

$ perl misc/optdiv.pl 99999999 10000
  x/10000==x*109951163>>>40 (0<=x<=494389998) [99999999*109951163==10995116190048837]

It means that x/10000 and x*109951163>>>40 are identical in the range of 0≤x≤494389998. You have to write the latter expression like (int)(x*109951163L>>>40) because 99999999*109951163 is not in the range of int in the Java language. これは 0≤x≤494389998 の範囲で整数除算の x/10000 と乗算とシフトの x*109951163>>>40 の結果が一致するという意味です。99999999/10000 は 32 ビット整数で計算できますが 99999999*109951163>>>40 は 64 ビット整数で計算する必要があるので Java のコードでは (int)(x*109951163L>>>40) のような書き方になります。

2.18. pattobytes.pl

Perl script to convert patch data for making ROM Human 2.60 and patch data for making IPL/BIOS 1.6 into character strings. ROM Human 2.60 を作るためのパッチデータと IPL/BIOS 1.6 を作るためのパッチデータを文字列に変換するための Perl スクリプトです。

2.19. rom16pat.s

This is the source code for the patch data to make IPL/BIOS 1.6. IPL/BIOS 1.6 を作るためのパッチデータのソースコードです。

2.20. rom16pat.x

This is the patch data for making IPL/BIOS 1.6. IPL/BIOS 1.6 を作るためのパッチデータです。

2.21. scsi16.s

Source code for SCSIEXROM 16 and SCSIINROM 16. SCSIEXROM 16 と SCSIINROM 16 のソースコードです。

2.22. scsi16ex.r

SCSIEXROM 16. SCSIEXROM 16 です。

2.23. scsi16in.r

SCSIINROM 16. SCSIINROM 16 です。

2.24. sjdump.pl

A Perl script that dumps contents of specified files. It can output data as a Java source code. It is used to insert binary data into codes. 指定されたファイルの内容をダンプする Perl スクリプトです。Java のソースの形で出力できます。コードにバイナリデータを埋め込むときに使います。

2.25. two_pi.pl

A Perl script that calculate multiple precision 2/ π automatically for using in floating point arithmetic routines. This script uses the GMP. 浮動小数点演算ルーチンで使う 2/ π のデータを自動生成する Perl スクリプトです。GMP を使います。sin 関数は実数全体で定義されます。sin(x) を計算するとき通常は x を π /2 で割った余りを - π /4~+ π /4 の範囲で求めて多項式近似を行います。2n を π /2 で割った余りを正確に求めるにはおよそ n ビットの π の値が必要です。浮動小数点数で指数部の範囲は限られているので必要な桁数の 2/ π の値を定数として抱えておきます。使うときは n ビットの多倍長計算を行う必要はなくて 2/ π のデータの一部分だけを使います。

3. Test programs テストプログラム

3.1. cir.s

The source code of cir.x. cir.x のソースです。

3.2. cir.x

A program that reads and writes the CIR of the mother board coprocessor in 060turbo mode. To check the emulator is working correctly or not, execute this program in both environment of a real machine and an emulator. There are some examples of this program as comments in the source code of the coprocessor. 060turbo モードのとき マザーボードコプロセッサ の CIR を読み書きするプログラムです。実機とエミュレータの両方で動かしてエミュレータのコプロセッサの動作を確認します。コプロセッサの注釈に実行例があります。

3.3. crtcmmtest.s

The source code of crtcmmtest.x. crtcmmtest.x のソースです。

3.4. crtcmmtest.x

A program that tests memory modes of CRTC (R20 bit10-8). Memory mode 2 (undocumented) and memory mode 5-7 (same as 4) are also tested. The extended graphic screen should be turned off before the test. CRTC のメモリモード (R20 のビット 10-8) の動作を確認するプログラムです。未公開のメモリモード 2 と、メモリモード 4 と同じ 5、6、7 もテストします。拡張グラフィック画面 が ON のときは OFF にしてリセットしてからテストしてください。

3.5. crtmodtest.s

The source code of crtmodtest.x. crtmodtest.x のソースコードです。

3.6. crtmodtest.x

crtmodtest.png

This program is used to test the screen mode of IOCS _CRTMOD in IPLROM 1.6. IPLROM 1.6 の IOCS _CRTMOD の画面モードをテストするためのプログラムです。

B:\>crtmodtest.x
CRTMODTEST for IPLROM 1.6 (2023-11-15)
オプション
  -l 0-1   0=CRT,1=LCD
  -m 0-39  画面モード
  -s       CRT/LCDをSRAMに保存する
  ┌───┬───────────┬───────────────────────────┐
  │CRTMOD│実画面サイズ 色 ページ│        水平同期  垂直同期  画面サイズ      備考      │
  ├───┼───────────┼───────────────────────────┤
  │   0  │ 1024x1024     16  1  │                                                      │
  │   4  │  512x512      16  4  │  CRT  31.500kHz  55.458Hz   512x512                  │
  │   8  │  512x512     256  2  │  LCD  35.341kHz  56.546Hz   512x512                  │
  │  12  │  512x512   65536  1  │                                                      │
  ├───┼───────────┼───────────────────────────┤
  │   1  │ 1024x1024     16  1  │                                                      │
  │   5  │  512x512      16  4  │  CRT  15.980kHz  61.463Hz   512x480   インターレース │
  │   9  │  512x512     256  2  │  LCD  35.341kHz  56.546Hz   512x480                  │
  │  13  │  512x512   65536  1  │                                                      │
  ├───┼───────────┼───────────────────────────┤
  │   2  │ 1024x1024     16  1  │                                                      │
  │   6  │  512x512      16  4  │  CRT  31.500kHz  55.458Hz   256x256   ラスタ二度読み │
  │  10  │  512x512     256  2  │  LCD  34.500kHz  55.200Hz   256x256   ラスタ二度読み │
  │  14  │  512x512   65536  1  │                                                      │
  ├───┼───────────┼───────────────────────────┤
  │   3  │ 1024x1024     16  1  │                                                      │
  │   7  │  512x512      16  4  │  CRT  15.980kHz  61.463Hz   256x240                  │
  │  11  │  512x512     256  2  │  LCD  34.500kHz  55.200Hz   256x240   ラスタ二度読み │
  │  15  │  512x512   65536  1  │                                                      │
  ├───┼───────────┼───────────────────────────┤
  │  16  │ 1024x1024     16  1  │  CRT  31.500kHz  55.458Hz   768x512                  │
  │  20  │  512x512     256  2  │  LCD  35.056kHz  56.090Hz   768x512                  │
  │  24  │  512x512   65536  1  │                                                      │
  ├───┼───────────┼───────────────────────────┤
  │  17  │ 1024x1024     16  1  │  CRT  24.699kHz  53.116Hz  1024x424                  │
  │  21  │  512x512     256  2  │  LCD  35.056kHz  56.090Hz   768x600                  │
  │  25  │  512x512   65536  1  │                               変形                   │
  ├───┼───────────┼───────────────────────────┤
  │  18  │ 1024x1024     16  1  │  CRT  24.699kHz  53.116Hz  1024x848   インターレース │
  │  22  │  512x512     256  2  │  LCD  35.056kHz  56.090Hz   768x1024  インターレース │
  │  26  │  512x512   65536  1  │                               変形                   │
  ├───┼───────────┼───────────────────────────┤
  │  19  │ 1024x1024     16  1  │  CRT  31.500kHz  55.458Hz   640x480   VGAではない    │
  │  23  │  512x512     256  2  │  LCD  31.469kHz  59.940Hz   640x480   VGA            │
  │  27  │  512x512   65536  1  │                                                      │
  ├───┼───────────┼───────────────────────────┤
  │  28  │ 1024x1024     16  1  │                                                      │
  │  29  │  512x512      16  4  │  CRT  31.963kHz  56.273Hz   384x256   ラスタ二度読み │
  │  30  │  512x512     256  2  │  LCD  31.963kHz  51.141Hz   384x256   ラスタ二度読み │
  │  31  │  512x512   65536  1  │                                                      │
  ├───┼───────────┼───────────────────────────┤
  │  32  │ 1024x1024     16  1  │                                                      │
  │  33  │  512x512      16  4  │  CRT  31.500kHz  55.458Hz   512x512                  │
  │  34  │  512x512     256  2  │  LCD  35.056kHz  56.090Hz   512x512                  │
  │  35  │  512x512   65536  1  │                              正方形                  │
  ├───┼───────────┼───────────────────────────┤
  │  36  │ 1024x1024     16  1  │                                                      │
  │  37  │  512x512      16  4  │  CRT  31.963kHz  56.273Hz   256x256   ラスタ二度読み │
  │  38  │  512x512     256  2  │  LCD  31.963kHz  51.141Hz   256x256   ラスタ二度読み │
  │  39  │  512x512   65536  1  │                              正方形                  │
  └───┴───────────┴───────────────────────────┘
B:\>

3.7. cylindertest.s

The source code of cylindertest.x. cylindertest.x のソースコードです。

3.8. cylindertest.x

cylindertest.png

Test the cylindrical scrolling of the text screen. Use the cursor keys to move, the CTRL key to move fast, and the ESC key to exit. テキスト画面の円筒スクロールをテストします。 カーソルキーで移動、CTRL キーで高速移動、ESC キーで終了します。

3.9. fefunctest.bas

A sample program of the FE function instruction. FE ファンクション命令 のサンプルプログラムです。

3.10. fputest.s

The source code of fputest.x that was automatically generated by efp.gp. efp.gp で自動生成された fputest.x のソースです。

$ make -f Makefile.host fputest.s

3.11. fputest.x

A program that tests operations of floating point instructions except privilege instructions. It compares the actual results with the expected results. The expected results are not equivalent to the results of real machines. 特権命令を除く浮動小数点命令の動作を確認するテストプログラムです。演算結果を期待された結果 (実機の結果ではない) と比較します。

Usage 使い方

About 10MB of free area is required. 実行するにはフリーエリアが 10MB くらい必要です。

Specify an empty command line to read how to use. コマンドラインに何も書かないと使い方が表示されます。

B:\>fputest.x
usage: fputest.x <mnemonic or option> ...
  FABS FACOS FADD ... -- Run tests selected by the first few letters of a mnemonic.
  all -- Run all tests.
  destination=0..[1] -- Check the destination operand.
  easy -- It's the same as margin=1 nans=0.
  failed=0..[1] -- Output the results of failed tests.
  fpsp=[0]..1 -- Test the instructions processed by the software package.
  hard -- It's the same as margin=0 nans=1.
  logging=0..[1] -- Output the results to "fputest.log".
  margin=0..[1]..11 -- The acceptable margin of error in transcendental functions.
  maximum=0..[100]..1000000 -- The maximum number of results outputted for each test.
  nans=[0]..1 -- Check the mantissa of NaNs.
  status=0..[1] -- Check the status register.
  stdout=0..[1] -- Output the results to the standard output.
  successful=[0]..1 -- Output the results of successful tests.

Specify all to run all tests. Results are outputted to both of the standard output and the log file fputest.log. すべてのテストを実行するときは all を指定します。結果は標準出力とログファイル fputest.log の両方に出力されます。

B:\>fputest.x all
begin: 2017-01-30T04:39:15+09:00
fpu: MC68882
option: destination easy failed fpsp=0 margin=1 maximum=100 nans=0 status successful=0
test: FABS.X FPm,FPn
score: tested=38136 failed=0(0.00%) successful=38136(100.00%)
―― Omission ――
―― 中略 ――
test: FTWOTOX.X FPm,FPn
score: tested=39576 failed=0(0.00%) successful=39576(100.00%)
total: tested=3028872 failed=0(0.00%) successful=3028872(100.00%)
end: 2017-01-30T04:40:11+09:00

For transcendental functions, differences from the expected results are allowed up to the least significant bit (1ulp). When you do not allow any errors, specify hard or margin=0. 超越関数は期待された結果と比較して末尾の 1 ビット (1ulp) までの誤差が許容されます。1 ビットの誤差も許さないときは hard または margin=0 を指定します。

B:\>fputest.x hard all
begin: 2017-01-30T04:40:12+09:00
fpu: MC68882
option: destination failed fpsp=0 hard margin=0 maximum=100 nans status successful=0
test: FABS.X FPm,FPn
score: tested=38136 failed=0(0.00%) successful=38136(100.00%)
―― Omission ――
―― 中略 ――
test: FTWOTOX.X FPm,FPn
score: tested=39576 failed=0(0.00%) successful=39576(100.00%)
total: tested=3028872 failed=368(0.02%) successful=3028504(99.98%)
end: 2017-01-30T04:41:13+09:00

If you want to test a certain instruction, write the first few letters of a mnemonic instead of 'all'. For example, FSIN, FSINCOS and FSINH will be tested if you specify 'fsin'. 特定の命令だけテストするときは all の代わりにニモニックの先頭の数文字を書きます。例えば fsin を指定すると FSIN、FSINCOS、FSINH がテストされます。

B:\>fputest.x fsin
begin: 2017-01-30T04:41:15+09:00
fpu: MC68882
option: destination easy failed fpsp=0 margin=1 maximum=100 nans=0 status successful=0
test: FSIN.X FPm,FPn
score: tested=46872 failed=0(0.00%) successful=46872(100.00%)
test: FSINCOS.X FPm,FPc:FPs
score: tested=46872 failed=0(0.00%) successful=46872(100.00%)
test: FSINH.X FPm,FPn
score: tested=39576 failed=0(0.00%) successful=39576(100.00%)
total: tested=133320 failed=0(0.00%) successful=133320(100.00%)
end: 2017-01-30T04:41:22+09:00

Write until the dot of the operation size to test FSIN only. FSIN だけテストしたいときはオペレーションサイズのドットまで書きます。

B:\>fputest.x fsin.
begin: 2017-01-30T04:41:24+09:00
fpu: MC68882
option: destination easy failed fpsp=0 margin=1 maximum=100 nans=0 status successful=0
test: FSIN.X FPm,FPn
score: tested=46872 failed=0(0.00%) successful=46872(100.00%)
total: tested=46872 failed=0(0.00%) successful=46872(100.00%)
end: 2017-01-30T04:41:30+09:00

Legends 凡例

備考

XEiJ の浮動小数点数の内部表現は MC68882 と異なり、拡張精度で言うところの「指数部が 0 でない非正規化数」や「小数部が 1 の並びでない NaN」をそのままの状態でレジスタに格納することができません。そのため、FMOVECR の一部がエラーになります。

MC68882 (実機) の FCOS、FSIN、FSINCOS、FTAN は引数の絶対値が大きくなるにつれて結果が意味をなさなくなります。このことはマニュアルに書かれていて開発当時の制約では諦めるしかなかったのだと思いますが、期待された結果ではないのでエラーになります。

MC68882 (実機) の FMOVECR で読み出される ROM の値はあちこち間違っているように見えますが、実機と同じ値を返さないとエラーになります。

MC68882 (実機) の FSGLDIV、FSGLMUL はアンダーフローしたとき、不正確な結果なのに FPSR の INEX2 と INEX をセットしなかったり、0 から遠ざかる方向に丸めなければならないのに切り捨てて 0 にしてしまうことがあります。これらは期待された結果ではないのでエラーになります。

3.12. instructiontest.s

instructiontest.x のソースです。HAS060.X version 3.09+89 以上でアセンブルできます。

3.13. instructiontest.x

A program that tests integer instructions except for privilege instructions. It compares operand registers, memories, condition codes and the presence of an exception occurrence with real X68030 and 060turbo, and outputs OK or ERROR according to the result. The comparison is performed not for every value of operands but for every format of operands. So this program does not show which value brings wrong results. OK does not mean the implementation of the instruction is always exact. Because not all combination of operands are tested. MPU の特権命令を除く整数命令の動作をテストします。オペランドに書かれたレジスタまたはメモリとコンディションコードの変化およびゼロ除算などの例外発生の有無が実機 (X68030 または 060turbo) と一致しているときは OK、異なるときは ERROR と表示されます。比較は引数の形式毎に行われます。内容毎ではないので、どの引数を与えたときに実機と異なる結果になったのかこのプログラムではわかりません。もちろん、あらゆる引数の組み合わせをテストしているわけではないので、OK と表示されたからといって命令の動作が間違っていないとは限りません。

Write the first few letters of a mnemonic to be tested on the command line. You can specify multiple instructions separated by commas. Write all to run all tests. Change the level of the test by inserting easy or hard before a mnemonic. Undefined bits in condition codes are ignored on easy and compared on hard. The default is easy. In addition, when a divide-by-zero occurs, Z and V are always ignored because these undefined condition codes are modified by causes other than operands in X68030. テストする命令のニモニックの先頭の文字をコマンドラインで指定します。命令は空白で区切って複数指定できます。all を指定するとすべてのテストが実行されます。ニモニックの手前に easy または hard と書くことでテストのレベルを選択できます。easy はコンディションコードの未定義のビットを無視します。hard はコンディションコードの未定義のビットまで一致していなければエラーになります。デフォルトは easy です。なお、ゼロ除算が発生したときの Z と V は MC68030 で引数以外の要因で変化することがあるので hard でも無視されます。

B:\>instructiontest easy all hard all
processor:MC68060, level:easy
           instruction               expected     actual
abcd.b Dr,Dq                        $59d7dfd3   $59d7dfd3   OK      1.72s
abcd.b -(Ar),-(Aq)                  $d4e484fa   $d4e484fa   OK      3.81s
add.b Dr,Dq                         $ba2388e4   $ba2388e4   OK      5.31s
add.w Dr,Dq                         $e7fbc8a3   $e7fbc8a3   OK      2.76s
―― Omission ――
―― 中略 ――
tst.l #<data>                       $80995333   $80995333   OK      0.00s
unlk Ar                             $0b6076c4   $0b6076c4   OK      0.35s
unpk Dr,Dq,#<data>                  $4359d714   $4359d714   OK      0.67s
unpk -(Ar),-(Aq),#<data>            $5316c1a7   $5316c1a7   OK      1.18s
processor:MC68060, level:hard
           instruction               expected     actual
abcd.b Dr,Dq                        $fddca661   $fddca661   OK      1.99s
abcd.b -(Ar),-(Aq)                  $116c5546   $116c5546   OK      3.49s
chk.w (Ar),Dq                       $18ad244c   $18ad244c   OK      3.17s
chk.l (Ar),Dq                       $10d41b6b   $10d41b6b   OK      3.50s
―― Omission ――
―― 中略 ――
nbcd.b Dr                           $60ea153e   $60ea153e   OK      0.06s
nbcd.b (Ar)                         $3d33357d   $3d33357d   OK      0.06s
sbcd.b Dr,Dq                        $acce4f74   $acce4f74   OK      1.83s
sbcd.b -(Ar),-(Aq)                  $d290f440   $d290f440   OK      3.55s
tested:542, passed:542(100.00%), failed:0(0.00%)
1005.15s
B:\>

3.14. optime.s

The source code of optime.x. optime.x のソースコードです。

3.15. optime.x

Measure the execution time of instructions. 命令の実行時間を計ります。

B:\>optime.x
optime.x (2023-09-17)
Measure the execution time of instructions
  -a has060  Assembler
  -f nop.s   File containing instructions
  -i "nop"   Semicolon-delimited instructions
  -s         Measure in SRAM. Ask when SRAM in use
  -sn        Same as -s but not measure when SRAM in use
  -sy        Same as -s but measure even when SRAM in use
  -t %temp%  Temporary directory
  -v         Output verbose messages
B:\>optime.x -i "nop"
"nop"	0.412 us
B:\>

3.16. optitest.bat

A batch file that measures instruction execution time using optime.x and outputs the results to optitest.log. It is recommended to copy HAS060.X, optime.x and optitest.bat to the RAM disk and run them on the RAM disk. optime.x を使って命令の実行時間を計測し、結果を optitest.log へ出力するバッチファイルです。HAS060.X と optime.x と optitest.bat を RAM ディスクにコピーして、RAM ディスクで実行することをお勧めします。

3.17. r00bit0test.s

The source code of r00bit0test.x. r00bit0test.xのソースコードです。

3.18. r00bit0test.x

Verify that bit 0 of CRTC R00 is fixed to 1. Create 384x256 screens with horizontal totals of 68, 69, and 70, and measure the vertical cycle for each. When measured on the actual X68030, the vertical period for a horizontal total of 69 is the same as the vertical period for a horizontal total of 70. On an emulator where bit 0 of CRTC R00 is not fixed to 1, the vertical period when the horizontal total is 69 is halfway between the vertical period when the horizontal total is 68 and the vertical period when the horizontal total is 70. CRTC R00 の bit0 が 1 に固定されていることを確認します。384x256 の画面を水平トータルが 68、69、70 の場合について作り、それぞれ垂直周期を計測します。X68030 実機で計測すると、水平トータルが 69 の場合の垂直周期が 70 の場合の垂直周期と同じになります。CRTC R00 の bit0 が 1 に固定されていないエミュレータでは、水平トータルが 69 の場合の垂直周期が 68 の場合の垂直周期と 70 の場合の垂直周期の中間になります。

B:\>r00bit0test.x
r00bit0test.x (2024-02-17)
TEST 1: HTin=68 exp_HTout=68 exp_VP=17770 obs_VP=17770 obs_HTout=68 OK
TEST 2: HTin=69 exp_HTout=70 exp_VP=18293 obs_VP=18291 obs_HTout=70 OK
TEST 3: HTin=69 exp_HTout=70 exp_VP=18293 obs_VP=18291 obs_HTout=70 OK
TEST 4: HTin=69 exp_HTout=70 exp_VP=18293 obs_VP=18291 obs_HTout=70 OK
TEST 5: HTin=69 exp_HTout=70 exp_VP=18293 obs_VP=18291 obs_HTout=70 OK
TEST 6: HTin=69 exp_HTout=70 exp_VP=18293 obs_VP=18291 obs_HTout=70 OK
TEST 7: HTin=69 exp_HTout=70 exp_VP=18293 obs_VP=18291 obs_HTout=70 OK
TEST 8: HTin=69 exp_HTout=70 exp_VP=18293 obs_VP=18291 obs_HTout=70 OK
TEST 9: HTin=69 exp_HTout=70 exp_VP=18293 obs_VP=18291 obs_HTout=70 OK
TEST 10: HTin=69 exp_HTout=70 exp_VP=18293 obs_VP=18291 obs_HTout=70 OK
TEST 11: HTin=69 exp_HTout=70 exp_VP=18293 obs_VP=18291 obs_HTout=70 OK
TEST 12: HTin=69 exp_HTout=70 exp_VP=18293 obs_VP=18293 obs_HTout=70 OK
TEST 13: HTin=69 exp_HTout=70 exp_VP=18293 obs_VP=18293 obs_HTout=70 OK
TEST 14: HTin=70 exp_HTout=70 exp_VP=18293 obs_VP=18293 obs_HTout=70 OK
B:\>

3.19. spr256test.s

The source code of spr256test.x. spr256test.xのソースコードです。

3.20. spr256test.x

spr256test.png

Test the simultaneous display of 256 sprites. スプライト 256 枚同時表示をテストします。

3.21. vcntest.s

The source code of vcntest.x. vcntest.x のソースです。

3.22. vcntest.x

vcntest.png

A tool to check the action of the video controller. Operate it with a mouse. ビデオコントローラの動作を確認するためのツールです。マウスで操作します。

Command コマンド

Priority of sprite, text and graphic スプライトとテキストとグラフィックの優先順位

Priority of graphic planes グラフィックプレーンの優先順位

Turn screens on and off 画面の ON/OFF

Memory mode メモリモード

Zero translucence ゼロ半透明

Special priority and trancelucence 特殊プライオリティと半透明

Region designation 領域指定

Translucence 半透明

Text pallet テキストのパレット

Pallet and priority of sprites スプライトのパレットと優先順位

Pallet of background planes バックグラウンドのパレット

Color of text pallets テキストパレットのカラー

Color of sprite pallets スプライトパレットのカラー

Turn background planes on and off バックグラウンドの ON/OFF

Pallet of graphic planes グラフィックプレーンのパレット

Color of graphic pallets グラフィックパレットのカラー

3.23. vcntest2.s

The source code of vcntest2.x vcntest2.x のソースコードです。

3.24. vcntest2.x

vcntest2.png

A program that actually tests examples written as comments in the source code of the video controller. The kanji " 黄 ", which means yellow, should be painted yellow. The kanji " 赤 ", which means red, should be painted red. All kanji should be painted by the color of its meaning. Hit a key to go to the next test. ビデオコントローラのソースコードの注釈に書いた例を実際に試すプログラムです。『黄』は黄色で、『赤』は赤で、すべての漢字はその意味の色で塗られなければなりません。キーを押すと次のテストに進みます。

Below, the verb "evenize" denotes "clear the least significant bit" and the verb "oddize" denotes "set the least significant bit". These bit operations are equivalent to x&-2 and x|1. 以下では、偶数化は最下位ビットをクリアすることを意味し、奇数化は最下位ビットをセットすることを意味します。これらのビット演算は x&-2 および x|1 と等価です。

SE1T

A1 黄 (yellow) A1 黄 (黄色)

Three screens are displayed. The order of screens from the near side are the sprite screen, the graphic screen and the text screen. The pallet code of the sprite screen is $10 and its color is yellow. The color of the graphic screen is red. The pallet code of the text screen is $0 and its color is black. Because all 4bit pallet code of the sprite screen and the text screen is zero and the 8bit pallet code of the sprite screen is not zero, the sprite screen is retained and the text screen is removed. The color of the nearest non-zero color code is yellow, which is the color of the sprite screen. 3 枚の画面が表示されます。画面の順序は手前からスプライト画面、グラフィック画面、テキスト画面です。スプライト画面のパレットコードは $10、色は黄色です。グラフィック画面の色は赤です。テキスト画面のパレットコードは $0、色は黒です。スプライト画面とテキスト画面の 4bit パレットコードがすべて 0 でスプライト画面の 8bit パレットコードが 0 ではないので、スプライト画面を残してテキスト画面を取り除きます。一番手前の 0 でないカラーコードの色はスプライト画面の黄色です。

A2 赤 (red) A2 赤 (赤)

Three screens are displayed. The order of screens from the near side are the sprite screen, the graphic screen and the text screen. The pallet code of the sprite screen is $10 and its color is yellow. The color of the graphic screen is red. The pallet code of the text screen is $1 and its color is gray. Because the 4bit pallet code of the sprite screen is zero and the 4bit pallet code of the text screen is not zero, the text screen is retained and the sprite screen is removed. The color of the nearest non-zero color code is red, which is the color of the graphic screen. 3 枚の画面が表示されます。画面の順序は手前からスプライト画面、グラフィック画面、テキスト画面です。スプライト画面のパレットコードは $10、色は黄色です。グラフィック画面の色は赤です。テキスト画面のパレットコードは $1、色は灰色です。スプライト画面の 4bit パレットコードが 0 でテキスト画面の 4bit パレットコードが 0 ではないので、テキスト画面を残してスプライト画面を取り除きます。一番手前の 0 でないカラーコードの色はグラフィック画面の赤です。

E2_XHPG

B1 赤 (red) B1 赤 (赤)

Two graphic planes are displayed. The pallet code of the first graphic plane is 2 and it is red. The pallet code of the second graphic plane is 2 and it is red. The first graphic plane and the second graphic plane are not blended because the pallet code of the first graphic plane is an even number. Red, which is the color of the first graphic plane, is outputted because the pallet code of the first graphic plane is not zero. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 2、色は赤です。2 番目のグラフィックプレーンのパレットコードは 2、色は赤です。1 番目のグラフィックプレーンのパレットコードが偶数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンは混ざりません。1 番目のグラフィックプレーンのパレットコードが 0 ではないので 1 番目のグラフィックプレーンの色の赤が出力されます。

B2 赤 (red) B2 赤 (赤)

Two graphic planes are displayed. The pallet code of the first graphic plane is 2 and it is red. The pallet code of the second graphic plane is 3 and it is blue. The first graphic plane and the second graphic plane are not blended because the pallet code of the first graphic plane is an even number. Red, which is the color of the first graphic plane, is outputted because the pallet code of the first graphic plane is not zero. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 2、色は赤です。2 番目のグラフィックプレーンのパレットコードは 3、色は青です。1 番目のグラフィックプレーンのパレットコードが偶数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンは混ざりません。1 番目のグラフィックプレーンのパレットコードが 0 ではないので 1 番目のグラフィックプレーンの色の赤が出力されます。

B3 紫 (fuchsia) B3 紫 (赤紫)

Two graphic planes are displayed. The pallet code of the first graphic plane is 3 and it is blue. The pallet code of the second graphic plane is 2 and it is red. The first graphic plane and the second graphic plane are blended because the pallet code of the first graphic plane is an odd number. The evenized pallet code of the first graphic plane is 2 and it is red. The oddized pallet code of the second graphic plane is 3 and it is blue. Red, which is the color of the evenized pallet code of the first graphic plane, and blue, which is the color of the oddized pallet code of the second graphic plane, are blended and become fuchsia. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 3、色は青です。2 番目のグラフィックプレーンのパレットコードは 2、色は赤です。1 番目のグラフィックプレーンのパレットコードが奇数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンが混ざります。1 番目のグラフィックプレーンの偶数化したパレットコードは 2、色は赤です。2 番目のグラフィックプレーンの奇数化したパレットコードは 3、色は青です。1 番目のグラフィックプレーンの偶数化したパレットコードの色の赤と 2 番目のグラフィックプレーンの奇数化したパレットコードの色の青が混ざって赤紫になります。

B4 紫 (fuchsia) B4 紫 (赤紫)

Two graphic planes are displayed. The pallet code of the first graphic plane is 3 and it is blue. The pallet code of the second graphic plane is 3 and it is blue. The first graphic plane and the second graphic plane are blended because the pallet code of the first graphic plane is an odd number. The evenized pallet code of the first graphic plane is 2 and it is red. The oddized pallet code of the second graphic plane is 3 and it is blue. Red, which is the color of the evenized pallet code of the first graphic plane, and blue, which is the color of the oddized pallet code of the second graphic plane, are blended and become fuchsia. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 3、色は青です。2 番目のグラフィックプレーンのパレットコードは 3、色は青です。1 番目のグラフィックプレーンのパレットコードが奇数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンが混ざります。1 番目のグラフィックプレーンの偶数化したパレットコードは 2、色は赤です。2 番目のグラフィックプレーンの奇数化したパレットコードは 3、色は青です。1 番目のグラフィックプレーンの偶数化したパレットコードの色の赤と 2 番目のグラフィックプレーンの奇数化したパレットコードの色の青が混ざって赤紫になります。

E2_XHCG

In the following tests, the color of the pallet code 2 is red, its color code is an even number, the color of the pallet code 3 is blue, the color of the pallet code 4 is fuchsia and the color of the pallet code 5 is aqua. 以下のテストでは、パレットコード 2 の色は赤、カラーコードは偶数、パレットコード 3 の色は青、パレットコード 4 の色は赤紫、パレットコード 5 の色は水色です。

C1 赤 (red) C1 赤 (赤)

Two graphic planes are displayed. The pallet code of the first graphic plane is 2, it is red and its color code is an even number. The pallet code of the second graphic plane is 2 and it is red. The evenized pallet code of the first graphic plane is 2, it is red and its color code is an even number. The first graphic plane and the second graphic plane are not blended because the color code of the evenized pallet code of the first graphic plane is an even number. Red, which is the color of the first graphic plane, is outputted because the pallet code of the first graphic plane is an even number. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 2、色は赤、カラーコードは偶数です。2 番目のグラフィックプレーンのパレットコードは 2、色は赤です。1 番目のグラフィックプレーンの偶数化したパレットコードは 2、色は赤、カラーコードは偶数です。1 番目のグラフィックプレーンの偶数化したパレットコードのカラーコードが偶数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンは混ざりません。1 番目のグラフィックプレーンのパレットコードが偶数なので 1 番目のグラフィックプレーンの色の赤が出力されます。

C2 赤 (red) C2 赤 (赤)

Two graphic planes are displayed. The pallet code of the first graphic plane is 2, it is red and its color code is an even number. The pallet code of the second graphic plane is 3 and it is blue. The evenized pallet code of the first graphic plane is 2, it is red and its color code is an even number. The first graphic plane and the second graphic plane are not blended because the color code of the evenized pallet code of the first graphic plane is an even number. Red, which is the color of the first graphic plane, is outputted because the pallet code of the first graphic plane is an even number. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 2、色は赤、カラーコードは偶数です。2 番目のグラフィックプレーンのパレットコードは 3、色は青です。1 番目のグラフィックプレーンの偶数化したパレットコードは 2、色は赤、カラーコードは偶数です。1 番目のグラフィックプレーンの偶数化したパレットコードのカラーコードが偶数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンは混ざりません。1 番目のグラフィックプレーンのパレットコードが偶数なので 1 番目のグラフィックプレーンの色の赤が出力されます。

C3 赤 (red) C3 赤 (赤)

Two graphic planes are displayed. The pallet code of the first graphic plane is 2, it is red and its color code is an even number. The pallet code of the second graphic plane is 4 and it is fuchsia. The evenized pallet code of the first graphic plane is 2, it is red and its color code is an even number. The first graphic plane and the second graphic plane are not blended because the color code of the evenized pallet code of the first graphic plane is an even number. Red, which is the color of the first graphic plane, is outputted because the pallet code of the first graphic plane is an even number. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 2、色は赤、カラーコードは偶数です。2 番目のグラフィックプレーンのパレットコードは 4、色は赤紫です。1 番目のグラフィックプレーンの偶数化したパレットコードは 2、色は赤、カラーコードは偶数です。1 番目のグラフィックプレーンの偶数化したパレットコードのカラーコードが偶数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンは混ざりません。1 番目のグラフィックプレーンのパレットコードが偶数なので 1 番目のグラフィックプレーンの色の赤が出力されます。

C4 赤 (red) C4 赤 (赤)

Two graphic planes are displayed. The pallet code of the first graphic plane is 2, it is red and its color code is an even number. The pallet code of the second graphic plane is 5 and it is aqua. The evenized pallet code of the first graphic plane is 2, it is red and its color code is an even number. The first graphic plane and the second graphic plane are not blended because the color code of the evenized pallet code of the first graphic plane is an even number. Red, which is the color of the first graphic plane, is outputted because the pallet code of the first graphic plane is an even number. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 2、色は赤、カラーコードは偶数です。2 番目のグラフィックプレーンのパレットコードは 5、色は水色です。1 番目のグラフィックプレーンの偶数化したパレットコードは 2、色は赤、カラーコードは偶数です。1 番目のグラフィックプレーンの偶数化したパレットコードのカラーコードが偶数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンは混ざりません。1 番目のグラフィックプレーンのパレットコードが偶数なので 1 番目のグラフィックプレーンの色の赤が出力されます。

C5 青 (blue) C5 青 (青)

Two graphic planes are displayed. The pallet code of the first graphic plane is 3 and it is blue. The pallet code of the second graphic plane is 2 and it is red. The evenized pallet code of the first graphic plane is 2, it is red and its color code is an even number. The first graphic plane and the second graphic plane are not blended because the color code of the evenized pallet code of the first graphic plane is an even number. The oddized pallet code of the second graphic plane is 3 and it is blue. Blue, which is the color of the oddized pallet code of the second graphic plane, is outputted because the pallet code of the first graphic plane is an odd number. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 3、色は青です。2 番目のグラフィックプレーンのパレットコードは 2、色は赤です。1 番目のグラフィックプレーンの偶数化したパレットコードは 2、色は赤、カラーコードは偶数です。1 番目のグラフィックプレーンの偶数化したパレットコードのカラーコードが偶数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンは混ざりません。2 番目のグラフィックプレーンの奇数化したパレットコードは 3、色は青です。1 番目のグラフィックプレーンのパレットコードが奇数なので 2 番目のグラフィックプレーンの奇数化したパレットコードの色の青が出力されます。

C6 青 (blue) C6 青 (青)

Two graphic planes are displayed. The pallet code of the first graphic plane is 3 and it is blue. The pallet code of the second graphic plane is 3 and it is blue. The evenized pallet code of the first graphic plane is 2, it is red and its color code is an even number. The first graphic plane and the second graphic plane are not blended because the color code of the evenized pallet code of the first graphic plane is an even number. The oddized pallet code of the second graphic plane is 3 and it is blue. Blue, which is the color of the oddized pallet code of the second graphic plane, is outputted because the pallet code of the first graphic plane is an odd number. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 3、色は青です。2 番目のグラフィックプレーンのパレットコードは 3、色は青です。1 番目のグラフィックプレーンの偶数化したパレットコードは 2、色は赤、カラーコードは偶数です。1 番目のグラフィックプレーンの偶数化したパレットコードのカラーコードが偶数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンは混ざりません。2 番目のグラフィックプレーンの奇数化したパレットコードは 3、色は青です。1 番目のグラフィックプレーンのパレットコードが奇数なので 2 番目のグラフィックプレーンの奇数化したパレットコードの色の青が出力されます。

C7 水 (aqua) C7 水 (水色)

Two graphic planes are displayed. The pallet code of the first graphic plane is 3 and it is blue. The pallet code of the second graphic plane is 4 and it is fuchsia. The evenized pallet code of the first graphic plane is 2, it is red and its color code is an even number. The first graphic plane and the second graphic plane are not blended because the color code of the evenized pallet code of the first graphic plane is an even number. The oddized pallet code of the second graphic plane is 5 and it is aqua. Aqua, which is the color of the oddized pallet code of the second graphic plane, is outputted because the pallet code of the first graphic plane is an odd number. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 3、色は青です。2 番目のグラフィックプレーンのパレットコードは 4、色は赤紫です。1 番目のグラフィックプレーンの偶数化したパレットコードは 2、色は赤、カラーコードは偶数です。1 番目のグラフィックプレーンの偶数化したパレットコードのカラーコードが偶数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンは混ざりません。2 番目のグラフィックプレーンの奇数化したパレットコードは 5、色は水色です。1 番目のグラフィックプレーンのパレットコードが奇数なので 2 番目のグラフィックプレーンの奇数化したパレットコードの色の水色が出力されます。

C8 水 (aqua) C8 水 (水色)

Two graphic planes are displayed. The pallet code of the first graphic plane is 3 and it is blue. The pallet code of the second graphic plane is 5 and it is aqua. The evenized pallet code of the first graphic plane is 2, it is red and its color code is an even number. The first graphic plane and the second graphic plane are not blended because the color code of the evenized pallet code of the first graphic plane is an even number. The oddized pallet code of the second graphic plane is 5 and it is aqua. Aqua, which is the color of the oddized pallet code of the second graphic plane, is outputted because the pallet code of the first graphic plane is an odd number. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 3、色は青です。2 番目のグラフィックプレーンのパレットコードは 5、色は水色です。1 番目のグラフィックプレーンの偶数化したパレットコードは 2、色は赤、カラーコードは偶数です。1 番目のグラフィックプレーンの偶数化したパレットコードのカラーコードが偶数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンは混ざりません。2 番目のグラフィックプレーンの奇数化したパレットコードは 5、色は水色です。1 番目のグラフィックプレーンのパレットコードが奇数なので 2 番目のグラフィックプレーンの奇数化したパレットコードの色の水色が出力されます。

In the following tests, the color of the pallet code 2 is red, its color code is an odd number, the color of the pallet code 3 is blue, the color of the pallet code 4 is fuchsia and the color of the pallet code 5 is aqua. 以下のテストでは、パレットコード 2 の色は赤、カラーコードは奇数、パレットコード 3 の色は青、パレットコード 4 の色は赤紫、パレットコード 5 の色は水色です。

D1 紫 (fuchsia) D1 紫 (赤紫)

Two graphic planes are displayed. The pallet code of the first graphic plane is 2, it is red and its color code is an odd number. The pallet code of the second graphic plane is 2 and it is red. The evenized pallet code of the first graphic plane is 2, it is red and its color code is an odd number. The first graphic plane and the second graphic plane are blended because the color code of the evenized pallet code of the first graphic plane is an odd number. The oddized pallet code of the second graphic plane is 3 and it is blue. Red, which is the color of the evenized pallet code of the first graphic plane, and blue, which is the color of the oddized pallet code of the second graphic plane, are blended and become fuchsia. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 2、色は赤、カラーコードは奇数です。2 番目のグラフィックプレーンのパレットコードは 2、色は赤です。1 番目のグラフィックプレーンの偶数化したパレットコードは 2、色は赤、カラーコードは奇数です。1 番目のグラフィックプレーンの偶数化したパレットコードのカラーコードが奇数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンが混ざります。2 番目のグラフィックプレーンの奇数化したパレットコードは 3、色は青です。1 番目のグラフィックプレーンの偶数化したパレットコードの色の赤と 2 番目のグラフィックプレーンの奇数化したパレットコードの色の青が混ざって赤紫になります。

D2 紫 (fuchsia) D2 紫 (赤紫)

Two graphic planes are displayed. The pallet code of the first graphic plane is 2, it is red and its color code is an odd number. The pallet code of the second graphic plane is 3 and it is blue. The evenized pallet code of the first graphic plane is 2, it is red and its color code is an odd number. The first graphic plane and the second graphic plane are blended because the color code of the evenized pallet code of the first graphic plane is an odd number. The oddized pallet code of the second graphic plane is 3 and it is blue. Red, which is the color of the evenized pallet code of the first graphic plane, and blue, which is the color of the oddized pallet code of the second graphic plane, are blended and become fuchsia. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 2、色は赤、カラーコードは奇数です。2 番目のグラフィックプレーンのパレットコードは 3、色は青です。1 番目のグラフィックプレーンの偶数化したパレットコードは 2、色は赤、カラーコードは奇数です。1 番目のグラフィックプレーンの偶数化したパレットコードのカラーコードが奇数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンが混ざります。2 番目のグラフィックプレーンの奇数化したパレットコードは 3、色は青です。1 番目のグラフィックプレーンの偶数化したパレットコードの色の赤と 2 番目のグラフィックプレーンの奇数化したパレットコードの色の青が混ざって赤紫になります。

D3 灰 (gray) D3 灰 (灰色)

Two graphic planes are displayed. The pallet code of the first graphic plane is 2, it is red and its color code is an odd number. The pallet code of the second graphic plane is 4 and it is fuchsia. The evenized pallet code of the first graphic plane is 2, it is red and its color code is an odd number. The first graphic plane and the second graphic plane are blended because the color code of the evenized pallet code of the first graphic plane is an odd number. The oddized pallet code of the second graphic plane is 5 and it is aqua. Red, which is the color of the evenized pallet code of the first graphic plane, and aqua, which is the color of the oddized pallet code of the second graphic plane, are blended and become gray. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 2、色は赤、カラーコードは奇数です。2 番目のグラフィックプレーンのパレットコードは 4、色は赤紫です。1 番目のグラフィックプレーンの偶数化したパレットコードは 2、色は赤、カラーコードは奇数です。1 番目のグラフィックプレーンの偶数化したパレットコードのカラーコードが奇数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンが混ざります。2 番目のグラフィックプレーンの奇数化したパレットコードは 5、色は水色です。1 番目のグラフィックプレーンの偶数化したパレットコードの色の赤と 2 番目のグラフィックプレーンの奇数化したパレットコードの色の水色が混ざって灰色になります。

D4 灰 (gray) D4 灰 (灰色)

Two graphic planes are displayed. The pallet code of the first graphic plane is 2, it is red and its color code is an odd number. The pallet code of the second graphic plane is 5 and it is aqua. The evenized pallet code of the first graphic plane is 2, it is red and its color code is an odd number. The first graphic plane and the second graphic plane are blended because the color code of the evenized pallet code of the first graphic plane is an odd number. The oddized pallet code of the second graphic plane is 5 and it is aqua. Red, which is the color of the evenized pallet code of the first graphic plane, and aqua, which is the color of the oddized pallet code of the second graphic plane, are blended and become gray. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 2、色は赤、カラーコードは奇数です。2 番目のグラフィックプレーンのパレットコードは 5、色は水色です。1 番目のグラフィックプレーンの偶数化したパレットコードは 2、色は赤、カラーコードは奇数です。1 番目のグラフィックプレーンの偶数化したパレットコードのカラーコードが奇数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンが混ざります。2 番目のグラフィックプレーンの奇数化したパレットコードは 5、色は水色です。1 番目のグラフィックプレーンの偶数化したパレットコードの色の赤と 2 番目のグラフィックプレーンの奇数化したパレットコードの色の水色が混ざって灰色になります。

D5 紫 (fuchsia) D5 紫 (赤紫)

Two graphic planes are displayed. The pallet code of the first graphic plane is 3 and it is blue. The pallet code of the second graphic plane is 2 and it is red. The evenized pallet code of the first graphic plane is 2, it is red and its color code is an odd number. The first graphic plane and the second graphic plane are blended because the color code of the evenized pallet code of the first graphic plane is an odd number. The oddized pallet code of the second graphic plane is 3 and it is blue. Red, which is the color of the evenized pallet code of the first graphic plane, and blue, which is the color of the oddized pallet code of the second graphic plane, are blended and become fuchsia. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 3、色は青です。2 番目のグラフィックプレーンのパレットコードは 2、色は赤です。1 番目のグラフィックプレーンの偶数化したパレットコードは 2、色は赤、カラーコードは奇数です。1 番目のグラフィックプレーンの偶数化したパレットコードのカラーコードが奇数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンが混ざります。2 番目のグラフィックプレーンの奇数化したパレットコードは 3、色は青です。1 番目のグラフィックプレーンの偶数化したパレットコードの色の赤と 2 番目のグラフィックプレーンの奇数化したパレットコードの色の青が混ざって赤紫になります。

D6 紫 (fuchsia) D6 紫 (赤紫)

Two graphic planes are displayed. The pallet code of the first graphic plane is 3 and it is blue. The pallet code of the second graphic plane is 3 and it is blue. The evenized pallet code of the first graphic plane is 2, it is red and its color code is an odd number. The first graphic plane and the second graphic plane are blended because the color code of the evenized pallet code of the first graphic plane is an odd number. The oddized pallet code of the second graphic plane is 3 and it is blue. Red, which is the color of the evenized pallet code of the first graphic plane, and blue, which is the color of the oddized pallet code of the second graphic plane, are blended and become fuchsia. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 3、色は青です。2 番目のグラフィックプレーンのパレットコードは 3、色は青です。1 番目のグラフィックプレーンの偶数化したパレットコードは 2、色は赤、カラーコードは奇数です。1 番目のグラフィックプレーンの偶数化したパレットコードのカラーコードが奇数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンが混ざります。2 番目のグラフィックプレーンの奇数化したパレットコードは 3、色は青です。1 番目のグラフィックプレーンの偶数化したパレットコードの色の赤と 2 番目のグラフィックプレーンの奇数化したパレットコードの色の青が混ざって赤紫になります。

D7 灰 (gray) D7 灰 (灰色)

Two graphic planes are displayed. The pallet code of the first graphic plane is 3 and it is blue. The pallet code of the second graphic plane is 4 and it is fuchsia. The evenized pallet code of the first graphic plane is 2, it is red and its color code is an odd number. The first graphic plane and the second graphic plane are blended because the color code of the evenized pallet code of the first graphic plane is an odd number. The oddized pallet code of the second graphic plane is 5 and it is aqua. Red, which is the color of the evenized pallet code of the first graphic plane, and aqua, which is the color of the oddized pallet code of the second graphic plane, are blended and become gray. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 3、色は青です。2 番目のグラフィックプレーンのパレットコードは 4、色は赤紫です。1 番目のグラフィックプレーンの偶数化したパレットコードは 2、色は赤、カラーコードは奇数です。1 番目のグラフィックプレーンの偶数化したパレットコードのカラーコードが奇数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンが混ざります。2 番目のグラフィックプレーンの奇数化したパレットコードは 5、色は水色です。1 番目のグラフィックプレーンの偶数化したパレットコードの色の赤と 2 番目のグラフィックプレーンの奇数化したパレットコードの色の水色が混ざって灰色になります。

D8 灰 (gray) D8 灰 (灰色)

Two graphic planes are displayed. The pallet code of the first graphic plane is 3 and it is blue. The pallet code of the second graphic plane is 5 and it is aqua. The evenized pallet code of the first graphic plane is 2, it is red and its color code is an odd number. The first graphic plane and the second graphic plane are blended because the color code of the evenized pallet code of the first graphic plane is an odd number. The oddized pallet code of the second graphic plane is 5 and it is aqua. Red, which is the color of the evenized pallet code of the first graphic plane, and aqua, which is the color of the oddized pallet code of the second graphic plane, are blended and become gray. 2 枚のグラフィックプレーンが表示されます。1 番目のグラフィックプレーンのパレットコードは 3、色は青です。2 番目のグラフィックプレーンのパレットコードは 5、色は水色です。1 番目のグラフィックプレーンの偶数化したパレットコードは 2、色は赤、カラーコードは奇数です。1 番目のグラフィックプレーンの偶数化したパレットコードのカラーコードが奇数なので 1 番目のグラフィックプレーンと 2 番目のグラフィックプレーンが混ざります。2 番目のグラフィックプレーンの奇数化したパレットコードは 5、色は水色です。1 番目のグラフィックプレーンの偶数化したパレットコードの色の赤と 2 番目のグラフィックプレーンの奇数化したパレットコードの色の水色が混ざって灰色になります。

3.25. zkeytest.s

zkeytest.s is the source code of zkeytest.x. zkeytest.s はzkeytest.xのソースコードです。

3.26. zkeytest.x

zkeytest.x tests the Z keyboard LED control. zkeytest.x は Z キーボード LED 制御をテストします。

4. Other programs その他のプログラム

4.1. 060tsys/*

The latest version of 060turbo.sys. 060turbo.sys の最新版です。

4.2. crtmod16.s

The source code of crtmod16.x and crtmrb16.x. crtmod16.xcrtmrb16.x のソースコードです。

4.3. crtmod16.x

This is a resident program of IOCS _CRTMOD and IOCS _G_CLR_ON included in IPLROM 1.6. IPLROM 1.6 に含まれる IOCS _CRTMOD と IOCS _G_CLR_ON を常駐プログラムにしたものです。

B:\>crtmod16
crtmod16.x (2024-03-13)
オプション
  -e       CRTMODを拡張する
  -l 0-1   0=CRT,1=LCD
  -m 0-39  画面モード
  -r       CRTMODの拡張を解除する
B:\>crtmod16 -e -m 16
crtmod16.x (2024-03-13)
CRTMODを拡張しました
B:\>db
X68k Debugger version 3.00 Copyright 1987-1993 SHARP/Hudson
Micro Processor Unit:16bit MC68000
Floating Point Co Processor:Softwere emulation.
-d e82000
00E82000  0000 5294 0020 003E 0400 07C0 0420 07FE           ..R[94]. .>...タ. ..
00E82010  8000 F800 8020 F83E 8400 FFC0 AD6A FFFE           [80]...[80] .>[84]..タュj..
00E82020  0000 0000 0000 0000 0000 0000 0000 0000           ................
00E82030  0000 0000 0000 0000 0000 0000 0000 0000           ................
00E82040  0000 0000 0000 0000 0000 0000 0000 0000           ................
00E82050  0000 0000 0000 0000 0000 0000 0000 0000           ................
00E82060  0000 0000 0000 0000 0000 0000 0000 0000           ................
00E82070  0000 0000 0000 0000 0000 0000 0000 0000           ................
-q
B:\>crtmod16 -r
CRTMODの拡張を解除しました
B:\>

4.4. crtmrb16.x

crtmrb16.x is a modification of crtmod16.x to reproduce the IPLROM 1.0 to 1.3 bug. crtmrb16.x は crtmod16.x に IPLROM 1.0~1.3 のバグを再現させる改造を施したものです。

IPLROM 1.0 to 1.3 has a bug in which IOCS _CRTMOD initializes the graphics palette with a different number of colors than the specified screen mode. Specifically, IOCS _CRTMOD ignores the number of colors specified by the screen mode specified in the _CRTMOD argument and initializes the graphics palette as 16 colors for 256x256, 256 colors for 512x512, and 65536 colors for 768x512, which is a nonsense behavior. If you call _G_CLR_ON after _CRTMOD according to the manner in which the graphics screen is displayed, there is no problem because _G_CLR_ON will re-initialize the graphics palette with the correct number of colors. If you display the graphics screen without calling _G_CLR_ON after _CRTMOD, the bug in _CRTMOD will be exposed. IPLROM 1.0~1.3 には、IOCS _CRTMOD がグラフィックパレットを指定された画面モードと異なる色数で初期化するというバグがあります。 具体的には、_CRTMOD の引数で指定された画面モードで定められた色数を無視して、256x256 は 16 色、512x512 は 256 色、768x512 は 65536 色とみなしてグラフィックパレットを初期化するという、ナンセンスな動きをします。 グラフィック画面を表示するときの作法に従って _CRTMOD の後に _G_CLR_ON を呼び出せば、_G_CLR_ON が正しい色数でグラフィックパレットを初期化し直すので問題ありません。_CRTMOD の後に _G_CLR_ON を呼び出さずにグラフィック画面を表示すると、_CRTMOD のバグが露見します。

Trouble is, it seems that some software is painting over the bug by initializing the graphics palette in a way that depends on this bug. Such software appears to work correctly with IPLROM 1.0 to 1.3, but when run under IPLROM 1.6/crtmod16.x, where the bug has been fixed, the bug is exposed and the display is corrupted. If you have software whose graphics palette is not correct only with IPLROM 1.6, you may be able to get the expected display by running it after "crtmrb16.x -e -m 16". 困ったことに、一部のソフトウェアがこのバグに依存した方法でグラフィックパレットを初期化するというバグの上塗りをしているようです。そのようなソフトウェアは IPLROM 1.0~1.3 では正しく動作しているように見えますが、バグが修正された IPLROM 1.6/crtmod16.x の環境で動かすとバグの上塗りが露見して表示が乱れます。IPLROM 1.6 のときだけグラフィックパレットがおかしくなるソフトウェアがあるとき、「crtmrb16.x -e -m 16」としてから動かすと期待通りの表示になるかも知れません。

When a bug is fixed and another bug is found that hides it, the correct course of action is not to restore the fixed bug, but to fix the newly found bug. Do not use crtmrb16.x on a regular basis, as it is intended to temporarily restore a bug that has been fixed when it is not possible to fix the newly found bug. あるバグを修正したらそれを隠していた別のバグが見つかったときの正しい対処方法は、修正したバグを復元することではなく、新たに見つかったバグを修正することです。crtmrb16.x は、新たに見つかったバグを修正できない場合に、一時的に、修正したバグを復元するためのものなので、常用しないでください。

B:\>crtmrb16
crtmrb16.x (2024-03-13)
オプション
  -e       CRTMODを拡張する
  -l 0-1   0=CRT,1=LCD
  -m 0-39  画面モード
  -r       CRTMODの拡張を解除する
B:\>crtmrb16 -e -m 16
crtmrb16.x (2024-03-13)
CRTMODを拡張しました
B:\>db
X68k Debugger version 3.00 Copyright 1987-1993 SHARP/Hudson
Micro Processor Unit:16bit MC68000
Floating Point Co Processor:Softwere emulation.
-d e82000
00E82000  0001 0001 0203 0203 0405 0405 0607 0607           ................
00E82010  0809 0809 0A0B 0A0B 0C0D 0C0D 0E0F 0E0F           ................
00E82020  1011 1011 1213 1213 1415 1415 1617 1617           ................
00E82030  1819 1819 1A1B 1A1B 1C1D 1C1D 1E1F 1E1F           ................
00E82040  2021 2021 2223 2223 2425 2425 2627 2627            ! !"#"#$%$%&'&'
00E82050  2829 2829 2A2B 2A2B 2C2D 2C2D 2E2F 2E2F           ()()*+*+,-,-././
00E82060  3031 3031 3233 3233 3435 3435 3637 3637           0101232345456767
00E82070  3839 3839 3A3B 3A3B 3C3D 3C3D 3E3F 3E3F           8989:;:;<=<=>?>?
-q
B:\>crtmrb16 -r
CRTMODの拡張を解除しました
B:\>

4.5. ppcon.s

The source code of ppcon.x. ppcon.x のソースコードです。

4.6. ppcon.x

A character display routine that supports proportional-pitch and right-justification used in the IPLROM 1.6 startup screen can be incorporated as a device driver or resident program. IPLROM 1.6 の起動画面で使われているプロポーショナルピッチや右寄せに対応した文字表示ルーチンをデバイスドライバまたは常駐プログラムとして組み込めるようにしたものです。

B:\>ppcon.x
Proportional-Pitch CONsole version 0.10

オプション
  -f        固定ピッチに切り替える
  -k        常駐する
  -p        プロポーショナルピッチに切り替える
  -q        表示を減らす
  -r        解除する
  -s        サンプルを表示する
  -v        表示を増やす

制御文字
  ^G        $07 BL ベルを鳴らす
  ^H        $08 BS カーソルを1桁左へ。左端では1行上の右端へ。上端では何もしない
  ^I        $09 HT カーソルを次のタブ桁へ。なければ1行下の左端へ。下端ではスクロールアップして左端へ
  ^J        $0A LF カーソルを1行下へ。下端ではスクロールアップ
  ^K        $0B VT カーソルを1行上へ。上端では何もしない
  ^L        $0C FF カーソルを1桁右へ。右端では1行下の左端へ。下端ではスクロールアップして左端へ
  ^M        $0D CR カーソルを左端へ
  ^Z        $1A SB 左上から右下まで消去。カーソルを左上へ
  ^[        $1B EC エスケープシーケンス開始
  ^^        $1E RS カーソルを左上へ

エスケープシーケンス
  ^[*       左上から右下まで消去。カーソルを左上へ
  ^[=rc     カーソルをr-$20行,c-$20桁へ。rとcは文字
  ^[D       カーソルを1行下へ。下端ではスクロールアップ
  ^[E       カーソルを1行下の左端へ。下端ではスクロールアップ
  ^[M       カーソルを1行上へ。上端ではスクロールダウン
  ^[[>5l    カーソルON
  ^[[>5h    カーソルOFF
  ^[[?4l    ジャンプスクロール
  ^[[?4h    8ドットスムーススクロール
  ^[[n@     カーソルから右にn桁挿入
  ^[[nA     カーソルをn行上へ。上端を超えるときは動かない
  ^[[nB     カーソルをn行下へ。下端で止まる
  ^[[nC     カーソルをn桁右へ。右端で止まる
  ^[[nD     カーソルをn桁左へ。左端で止まる
  ^[[r;cH   カーソルをr-1行,c-1桁へ。下端で止まる。右端で止まる
  ^[[r;cf   カーソルをr-1行,c-1桁へ。下端で止まる。右端で止まる
  ^[[0J     カーソルから右下まで消去する
  ^[[1J     左上からカーソルまで消去する
  ^[[2J     左上から右下まで消去する。カーソルを左上へ
  ^[[0K     カーソルから右端まで消去する
  ^[[1K     左端からカーソルまで消去する
  ^[[2K     左端から右端まで消去する
  ^[[nL     カーソルから下にn行挿入。カーソルを左端へ
  ^[[nM     カーソルから下をn行削除。カーソルを左端へ
  ^[[nP     カーソルから右をn桁削除
  ^[[nX     カーソルから右をn桁消去
  ^[[nc     中央寄せ
  ^[[nl     左寄せ
  ^[[0m     リセット
  ^[[1m     太字
  ^[[2m     細字
  ^[[3m     斜体
  ^[[4m     下線
  ^[[7m     反転
  ^[[9m     取り消し線
  ^[[21m    波線
  ^[[22m    太字、細字解除
  ^[[23m    斜体解除
  ^[[24m    下線、波線解除
  ^[[26m    プロポーショナル
  ^[[27m    反転解除
  ^[[29m    取り消し線解除
  ^[[30m    黒
  ^[[31m    水色
  ^[[32m    黄色
  ^[[33m    白
  ^[[34m    太字、黒
  ^[[35m    太字、水色
  ^[[36m    太字、黄色
  ^[[37m    太字、白
  ^[[40m    反転、黒
  ^[[41m    反転、水色
  ^[[42m    反転、黄色
  ^[[43m    反転、白
  ^[[44m    反転、太字、黒
  ^[[45m    反転、太字、水色
  ^[[46m    反転、太字、黄色
  ^[[47m    反転、太字、白
  ^[[50m    プロポーショナル解除
  ^[[51m    四角囲み
  ^[[52m    丸囲み
  ^[[53m    上線
  ^[[54m    四角囲み、丸囲み解除
  ^[[55m    上線解除
  ^[[73m    上付き
  ^[[74m    下付き
  ^[[75m    上付き、下付き解除
  ^[[6n     カーソル位置報告。^[[r;cRを入力
  ^[[nr     右寄せ
  ^[[s      カーソルの座標と文字属性を保存する
  ^[[u      カーソルの座標と文字属性を復元する
B:\>

4.7. set232c.s

The source code of set232c.x. set232c.x のソースコードです。

4.8. set232c.x

Change the current or startup RS-232C settings. 現在または起動時の RS-232C の設定を変更します。

B:\>set232c.x -h
set232c.x (2024-02-08)
Change current or startup RS-232C settings
    -5      Display baud rate at 5 MHz (default)
    -7      Display baud rate at 7.5 MHz
    -c      Change current RS-232C settings as in SPEED.X (default)
    -i      Use initial setting value $4E07 9600 b8 pn s1 xon
    -q      Do not display settings
    -s      Change startup RS-232C settings as in SWITCH.X
    $xxxx   Specify setting value by 4-digit hexadecimal number
  Baud rate at 5 MHz
    75
    150
    300
    600
    1200
    2400
    4800
    9600
    19200
    38400
    76800
  Baud rate at 7.5 MHz
    112.5
    225
    450
    900
    1800
    3600
    7200
    14400
    28800
    57600
    115200
  Data
    b5      5-bit
    b6      6-bit
    b7      7-bit
    b7s     7-bit with SI/SO
    b8      8-bit
  Parity
    pn      Non-parity
    po      Odd parity
    pe      Even parity
  Stop bit
    s1      Stop 1-bit
    s1.5    Stop 1.5-bit
    s2      Stop 2-bit
  Flow control
    none    No flow control
    xon     XON/XOFF flow control
    rts     RTS/CTS flow control
B:\>set232c.x 38400
Current RS-232C settings at 5 MHz are: $4C89 38400 b8 pn s1 rts
B:\>

4.9. stupsnd.s

The source code of stupsnd.x. stupsnd.xのソースコードです。

4.10. stupsnd.x

Turn on/off startup sound switch of X68030 or higher and IPLROM 1.6. X68030 以上と IPLROM 1.6 の起動音のスイッチを on/off します。

B:\>stupsnd.x -?
stupsnd.x (2024-03-04)
  turn on/off startup sound switch of X68030 or higher and IPLROM 1.6
options
  off
    turn off startup sound switch
  on
    turn on startup sound switch with key code 76 (o5c)
  2..127
  $02..$7F
  o5c etc.
    turn on startup sound switch with specified key code
  play
    play startup sound right now
    FM sound driver must be removed
tone parameters
  kc,kf,tm,va[0],...,va[54]
    specify tone parameters
    kc -- key code
    kf -- key fraction
    tm -- time from key-on to key-off (unit is 1/10,000 of a second)
    va -- tone parameters common to OPMDRV.X
  save
    save register data to stupsnd.dat
    to reflect in the startup sound, inserting data into IPLROM 1.6 is required
B:\>

4.11. vperiod.s

The source code of vperiod.x. vperiod.xのソースコードです。

4.12. vperiod.x

Measure the vertical period (vertical synchronous signal period). 垂直周期 (垂直同期信号の周期) を計測します。

B:\>vperiod.x
vperiod.x (2024-02-17)
obs_VP=18031
B:\>