この資料は、X680x0 のメーカー純正のハードウェアとソフトウェアの未公開機能(マニュアルなどのメーカー公開資料に記載されていない機能)をまとめたものです。一部、未公開ではない機能も含まれています。
BIND.X に未公開オプション /A+R または /A+S を指定してバインドすると、「BIND.X /U」でバインドファイルの内容を更新することができなくなります。R は Readonly 属性、S は System 属性。
BIND.X に未公開オプション /A+H または /A+S を指定してバインドすると、「BIND.X /L」でバインドしたファイル名を表示することができなくなります。「BIND.X /L」でファイル名を見ると「system reserved file」と表示されます。COMMAND.X はこの方法でバインドされています。H は Hide 属性。
CONFIG.SYS に
ROMDB=ON
と書いておくと、Human が起動するときに ROM デバッガ が組み込まれます。
CONFIG.SYS に
CTTY
と書いておくと、標準入出力とエラー出力が AUX に切り替わります。これは COMMAND.X の CTTY AUX に相当します。
CONFIG.SYS に
DEVICE=[ROM$xxxxxxxx]
または
DEVICE=[ROM?]
と書いておくと、指定したアドレスをデバイスドライバとみなして組み込みます。DEVICE=[ROM?] のときは ? で指定された数字によってアドレスが決まっています。
DEVICE=[ROM?] | 組み込まれるデバイスドライバのアドレス |
---|---|
DEVICE=[ROM0] | $00BFFFFC |
DEVICE=[ROM1] | $00FE4FFC |
DEVICE=[ROM2] | $00EE0000 |
DEVICE=[ROM3] | $00EE4000 |
DEVICE=[ROM4] | $00EE8000 |
DEVICE=[ROM5] | $00EEC000 |
DEVICE=[ROM6] | $00EF0000 |
DEVICE=[ROM7] | $00EF4000 |
DEVICE=[ROM8] | $00EF8000 |
DEVICE=[ROM9] | $00EFC000 |
CONFIG.SYS に
OFF=CNPQS
と書いておくと、DOS コールレベルで CTRL+C、CTRL+N、CTRL+P、CTRL+Q、CTRL+S の入力が無効になります。CNPQS は、無効化したいコントロールの文字だけ記述します。
-A を指定すると CONFIG.SYS と CONFIG.TMP をすべてのドライブから検索するようになります。
-B を指定すると編集画面から選択画面へ戻ることができるようになります。
-I< ファイル名 > として入力ファイル名を指定することができます。
-T を指定すると入力を待たずに CONFIG.TMP から起動するようになります。
コマンドラインから
>CONFIGED -?
と入力すると使用法が表示されます。
confexp.x を使用すると、CONFIG.SYS の文法が拡張されて、MPU に応じてデバイスドライバを自動的に選択させるといったことが可能になります。
FORMAT.X に /5 を指定することで、フロッピーディスクを 2HC (1200KB) モード(512 バイト / セクタ、15 セクタ / トラック、2 トラック / シリンダ、80 シリンダ / ディスク)でフォーマットすることができます。
>FORMAT /5 [ドライブ名:]
2HC モードでフォーマットしたフロッピーディスクは AT 互換機とデータを交換するときに便利。
FORMAT.X に /4 を指定することで、3.5 インチフロッピーディスクを 2HQ (1440KB) モード(512 バイト / セクタ、18 セクタ / トラック、2 トラック / シリンダ、80 シリンダ / ディスク)でフォーマットすることができます。
>FORMAT /4 [ドライブ名:]
内蔵ドライブの場合は改造が必要です。
FDDEVICE.X を組み込んでおく必要があります。
FORMAT.X に /8 を指定することで、3.5 インチフロッピーディスクを 2DD (640KB) モード(512 バイト / セクタ、8 セクタ / トラック、2 トラック / シリンダ、80 シリンダ / ディスク)でフォーマットすることができます。
>FORMAT /8 [ドライブ名:]
内蔵ドライブの場合は改造が必要です。
FDDEVICE.X を組み込んでおく必要があります。
FORMAT.X に /9 を指定することで、3.5 インチフロッピーディスクを 2DD (720KB) モード(512 バイト / セクタ、9 セクタ / トラック、2 トラック / シリンダ、80 シリンダ / ディスク)でフォーマットすることができます。
>FORMAT /9 [ドライブ名:]
内蔵ドライブの場合は改造が必要です。
FDDEVICE.X を組み込んでおく必要があります。
FORAMT.X に /4 を指定して 2HQ (1440KB) モードでフロッピーディスクをフォーマットすると IPL の先頭 3 バイトが $EB,$FE,$90 になりますが、/4 と一緒に /I も指定すると $60,$3C,$90 になります。
>FORMAT /4 /I [ドライブ名:]
BIND.X を使って HUMAN.SYS にデバイスドライバをバインドしておくと、そのデバイスドライバが最初に組み込まれます。CONFIG.SYS の EXCONFIG= を解釈するよりも前に組み込まれるので、EXCONFIG の影響を受けません。
.X 形式の実行ファイルの先頭から 4 バイト目を 2 にすると、その実行ファイルを実行したときに text+data+bss に必要な分だけのメモリが上位アドレスから確保されてそこにプログラムがロードされます。
X68030(ROM 1.3)では、BEEP(コントロールコード $07)の処理を変更することができます。IOCS のワーク [$0978.W].L に -1 を設定し、[$0D12.W].L に処理ルーチンのアドレスを格納します。ビジュアルベルなどに変更することができるでしょう。
IOCS _B_PUTC で d1.w に $0100+ コントロールコードを指定すると、コントロールコードを実行せずに半角サイズの制御文字を画面に表示することができます。
IOCS コール $05 は、実際には押されていないキーが押されたように処理させることができます。SX-WINDOW などで使用されています。
;IOCS _SKEYSET ;$05 キー入力エミュレーション ;<d1.b:スキャンコード ;>d0.b:スキャンコード
IOCS コール $06 は、キーボードの LED の状態をまとめて設定します。入力モードには影響せず、LED の状態だけが変更されます。
;IOCS _LEDCTRL ;$06 キーボードのLEDの状態をまとめて設定 ;<d1.b:LEDの状態(0=消灯,1=点灯) ; bit0 かな ; bit1 ローマ字 ; bit2 コード入力 ; bit3 CAPS ; bit4 INS ; bit5 ひらがな ; bit6 全角
IOCS コール $07 は、IOCS のワーク([$0810.W].B)が保持している現在の LED の状態をキーボードに再設定します。
;IOCS _LEDSET ;$07 キーのLEDを再設定する ;パラメータなし
IOCS コール $08 は、キーボードのリピート開始までの時間を設定します。リピート開始までの時間は (200+100* 設定値)ms になります。
;IOCS _KEYDLY ;$08 キーリピートのディレイタイム設定 ;<d1.b:ディレイタイム(0~15)
IOCS コール $09 は、キーボードのリピートの間隔を設定します。リピートの間隔は (30+5* 設定値 ^2)ms になります。
;IOCS _KEYREP ;$09 キーリピートのインターバル設定 ;<d1.b:インターバル(0~15)
IOCS コール $0A は、OPT.2 キーによるテレビコントロール機能を有効にします。
;IOCS _OPT2TVON ;$0A OPT.2キーによるテレビコントロールを許可 ;パラメータなし
IOCS コール $0B は、OPT.2 キーによるテレビコントロール機能を無効にします。
;IOCS _OPT2TVOFF ;$0B OPT.2キーによるテレビコントロールを禁止 ;パラメータなし
IOCS コール $14 は、テキストパレットを設定します。IOCS コール $13 の TPALET との違いは、16 色すべてに異なるカラーコードを設定できるという点です。通常、テキストパレットの 4~7 および 8~15 にそれぞれ共通のカラーコードを設定することでマウスカーソル、電卓、ソフトキーボードがテキストよりも手前にあるように見える仕組みになっていますが、TPALET2 はその制約を受けません。
;IOCS _TPALET2 ;$14 テキストパレットの取得と設定(全色独立) ;<d1.b:パレットコード(0~15) ;<d2.l:カラーコード ; カラーコード(0~65535) ; >d0.l: ; 0 正常終了 ; -1 エラー(パレットコードの指定がおかしい) ; -1 取得のみ ; >d0.l:現在のカラーコード ; -1 エラー(パレットコードの指定がおかしい) ; その他 カラーコード
IOCS コール $36 は、SCC チャンネル B の割り込みルーチンでマウスデータの 3 バイト目の受信が完了すると呼び出されるマウス受信データ処理ルーチンの先頭アドレス [$0938.w].l を設定します。マウス受信データ処理ルーチンは、3 バイトのマウスデータが格納されているワークエリアの先頭アドレスが a1 レジスタに設定された状態で呼び出されます。通常はマウスデータから IOCS のワークエリアを更新するルーチンが設定されています。むやみに変更してはいけません。
;IOCS _MS_VCS ;$36 マウス受信データ処理の設定 ;_MS_INITでもシステム規定の処理ルーチンが設定されるので_MS_INITの後に指定すること ;<d1.l:マウス受信データ処理アドレス(マウスカーソル) ; 0 システム規定の処理ルーチンに戻す ;<d2.w:マウスデータ受信タイマー初期値 ; システム規定の処理ルーチンのときは無効
IOCS コール $37 は、拡張エスケープシーケンス処理ルーチンの先頭アドレス [$097E.w].l を設定します。拡張エスケープシーケンス処理ルーチンは、ESC シーケンスの先頭('[' の位置)のアドレスが a0 レジスタに設定された状態で呼び出されます。通常は Human68k がカーソル位置のコンソール入力へのエコーバックとファンクション表示行の ON/OFF を行うエスケープシーケンスを拡張するために使用しています。
;IOCS _EXESC ;$37 拡張ESCシーケンス処理ルーチンの設定 ;<d1.l:拡張ESCシーケンス処理ルーチンのアドレス(0=解除)
IOCS コール $38 は、外字フォント領域の先頭アドレスを設定します。Human68k が CONFIG.SYS の uskcg の指定に従って読み込んだ外字フォントを登録するときに使用しています。なお、IOCS.X がこの IOCS コールを拡張しており、外字だけでなく通常のフォントのアドレスや IOCS コール $16(FNTADR)で 9~11 区および 14~15 区の文字コードが指定された場合の処理ルーチンも設定できるようになっています。
;IOCS _CHR_ADR ;$38 外字フォントアドレスの設定 ;<d1.l:外字フォントアドレス ;<d2.l:外字グループ ; 0 16×16 $2C21~$2D7E ; 1 16×16 $7621~$777E ; 2 8×16 $F400~$F5FF ; 3 24×24 $2C21~$2D7E ; 4 24×24 $7621~$777E ; 5 12×24 $F400~$F5FF ;>d0.l:設定前の外字フォントアドレス ; -1 エラー
IOCS コール $39 は、BEEP(コントロールコード $07)の ADPCM データの先頭アドレスとバイト数を設定します。Human68k が CONFIG.SYS の bell の指定に従って読み込んだ ADPCM データを BEEP に登録するときに使用しています。なお、X68030(ROM 1.3)では、BEEP の処理そのものを差し替えることができます。→ BEEP の処理を変更する
;IOCS _SETBEEP ;$39 BEEP処理の設定 ;<d1.l:BEEP音のADPCMデータのアドレス(-1=差し換えルーチン[$0D12.w].lを呼ぶ) ;<d2.w:BEEP音のADPCMデータのバイト数(0=鳴らさない) ;>d0.l:0
IOCS コール $3A は、プリンタ環境([$0A16.w]~[$0A79.w])をまとめて設定します。設定されるデータには、漢字モードの ON/OFF、ハードコピーのときに使用するビットイメージ出力モードの ON/OFF、改行幅の変更などの制御コードが含まれています。
;IOCS _SETPRN ;$3A プリンタ環境の設定 ;<a1.l:環境のアドレス(0=標準環境を設定) ; 標準値 内容 ; 0000 .l $00E00000 ハードコピーの先頭アドレス ; 0004 .w $0029 (SHIFT+COPYのハードコピー範囲のY方向ドット数/24)-1 ; 0006 .l $00FFFF00 ; 000A .w $0014 (COPYのハードコピー範囲のY方向ドット数/24)-1 ; 000C .l $00FF0000 ; 0010 .w $005F ハードコピー範囲のX方向ドット数-1 ; 0012 .b[8] $06,$1B,'K',$1C,'S',$06,$06,$00 ; 漢字モードにして漢字左右スペースをそれぞれ6にする ; 001A .b[4] $02,$1B,'H',$00 漢字モードの解除 ; 001E .b[4] $00,$00,$00,$00 ; 0022 .b[4] $02,$0D,$0A,$00 改行 ; 0026 .b[6] $04,$1B,'%','9',$0F,$00 ; 改行幅を1/8インチに設定 ; 002C .b[6] $04,$1B,'%','9',$00,$00 ; 改行幅を元に戻す ; 0032 .b[6] $04,$1B,'%','9',$0A,$00 ; 改行幅を1/12インチに設定 ; 0038 .b[6] $04,$1B,'%','9',$05,$00 ; 改行幅を1/24インチに設定 ; 003E .b[8] $04,$1B,'J',$06,$00,$00,$00,$00 ; 24ドットビットイメージ1536*3データ ; 0046 .b[8] $04,$1B,'J',$03,$00,$00,$00,$00 ; 24ドットビットイメージ768*3データ ; 004E .b[8] $04,$1B,'J',$00,$12,$00,$00,$00 ; 24ドットビットイメージ18*3データ ; 0056 .b[8] $04,$1B,$4A,$00,$24,$00,$00,$00 ; 24ドットビットイメージ36*3データ ; 005E .b $00 ビットイメージの出力方向($00=ノーマル,$FF=リバース) ; 005F .b $03 ; 0060 .b $06 ; 0061 .b $01 文字コード/ビットイメージ出力フラグ ; bit0 $7600~(外字) ; bit1 $2C00~$2DFF(外字) ; bit2 $5000~$75FF(第2水準) ; bit3 $2E00~$4FFF(第1水準) ; bit4 $20~$7F,$A0~$DF(半角) ; 0 コード出力 ; 1 ビットイメージ出力 ; (98バイト)
IOCS コール $91 は、IOCS コール $10(CRTMOD)の設定に関係なく CRTC とビデオコントローラを直接操作してグラフィック画面のモード(色数と実画面サイズ)を設定します。
;IOCS _G_MOD ;$91 グラフィック画面モードの設定 ;<d1.b:グラフィック画面モード ; -1 取得のみ ; bit0~1 グラフィック色数 ; 0 16色 ; 1 256色 ; 2 65536色 ; 3 禁止 ; bit2 グラフィック実画面サイズ ; 0 512×512ドット ; 1 1024×1024ドット ;>d0.l:変更前のグラフィック画面モード
IOCS コール $92 は、ビデオコントローラを直接操作して画面間のプライオリティを設定します。グラフィックが 256 色モードのときは、グラフィックページ間のプライオリティは 0>1>2>3 または 2>3>0>1 のいずれかに設定します。65536 色モードのときは 0>1>2>3 に設定します。
;IOCS _PRIORITY ;$92 画面間およびグラフィックページ間のプライオリティの設定 ;<d1.w:プライオリティの指定 ; -1 取得のみ ; 下位バイト グラフィックページ間のプライオリティ ; bit0~1 SC0:最も優先順位の高いグラフィックページ番号(0~3) ; bit2~3 SC1:2番目に優先順位の高いグラフィックページ番号(0~3) ; bit4~5 SC2:3番目に優先順位の高いグラフィックページ番号(0~3) ; bit6~7 SC3:4番目に優先順位の高いグラフィックページ番号(0~3) ; 上位バイト グラフィック,テキスト,スプライト間のプライオリティ(0が一番手前) ; bit8~9 GR:グラフィック画面の優先順位(0~2) ; bit10~11 TX:テキスト画面の優先順位(0~2) ; bit12~13 SP:スプライト画面の優先順位(0~2) ;>d0.w:変更前のプライオリティ
IOCS コール $93 は、ビデオコントローラを直接操作して特殊モードと画面毎の表示の ON/OFF を設定します。
;IOCS _CRTMOD2 ;$93 画面表示のON/OFFと特殊モードの設定 ;<d1.w:画面表示のON/OFFと特殊モードの設定 ; -1 取得のみ ; 下位バイト 画面表示のON/OFF(0=OFF,1=ON) ; bit0~3 グラフィック画面(512×512) ; bit0 GS0:最も優先順位の高いグラフィックページ ; bit1 GS1:2番目に優先順位の高いグラフィックページ ; bit2 GS2:3番目に優先順位の高いグラフィックページ ; bit3 GS3:4番目に優先順位の高いグラフィックページ ; bit4 GS4:グラフィック画面(1024×1024) ; bit5 TON:テキスト画面 ; bit6 SON:スプライト画面 ; 上位バイト 特殊モード(0=無効,1=有効) ; bit8 G/T:グラフィック,テキスト間で半透明 ; bit9 G/G:手前の2枚のグラフィックページ間で半透明 ; bit10 B/P:GRAMのbit0で特殊モード領域指定 ; bit11 H/P:0=特殊プライオリティ,1=半透明 ; bit12 EX特殊プライオリティまたは半透明 ; bit13 VHT:グラフィック,ビデオ間 ; bit14 AH:グラフィック,テキスト間で半透明 ; bit15 Ys:CMPCUT(Ys)信号を強制的にHにする ;>d0.w:変更前の画面表示のON/OFFと特殊モードの設定
IOCS コール $95 は、グラフィック画面にビットパターンを書き込む IOCS コール $9A、IOCS コール $9B、IOCS コール $9C で使用するペンカラーを設定します。
;IOCS _PENCOLOR ;$95 ペンカラーの設定 ;<d1.w:ペンカラー
IOCS コール $96 は、グラフィック描画ページを設定します。IOCS コール $B1 との違いは、描画ページを取得する機能がないこととエラーチェックを行わないこと。
;IOCS _SET_PAGE ;$96 グラフィック描画ページの設定 ;<d1.w:グラフィック描画ページ(0~3)
IOCS コール $97 は、グラフィック画面からパターンを読み出します。パターンデータはパレットコードを詰めて並べます。
;IOCS _GGET ;$97 グラフィック画面からパターン読み出し ;<d1.w:X座標 ;<d2.w:Y座標 ;<a1.l:バッファアドレス ;< 0000 .w X方向のドット数 ;< 0002 .w Y方向のドット数 ;> 0004 .w 色モード($000F=16色,$00FF=256色,$FFFF=65536色) ;> 0006 パターン(16色のときは1バイトに2ドット分格納される)
IOCS コール $98 は、グラフィック画面にパターンを書き込みます。パターンデータはパレットコードを詰めて並べます。スルーカラーは書き込みません。
;IOCS _MASK_GPUT ;$98 グラフィック画面にパターン書き込み(スルーカラー指定) ;スルーカラーは書き込まない ;<d1.w:X座標 ;<d2.w:Y座標 ;<d3.w:スルーカラー ;<a1.l:バッファアドレス ;< 0000 .w X方向のドット数 ;< 0002 .w Y方向のドット数 ;< 0004 .w 色モード($000F=16色,$00FF=256色,$FFFF=65536色) ; 現在のグラフィック画面モードと一致していなければ書き込まない ;< 0006 パターン(16色のときは1バイトに2ドット分格納する) ;>d0.l:エラーコード ; 0 正常終了 ; -1 色モードが違う
IOCS コール $99 は、グラフィック画面にパターンを書き込みます。パターンデータはパレットコードを詰めて並べます。
;IOCS _GPUT ;$99 グラフィック画面にパターン書き込み ;<d1.w:X座標 ;<d2.w:Y座標 ;<a1.l:バッファアドレス ;< 0000 .w X方向のドット数 ;< 0002 .w Y方向のドット数 ;< 0004 .w 色モード($000F=16色,$00FF=256色,$FFFF=65536色) ; 現在のグラフィック画面モードと一致していなければ書き込まない ;< 0006 パターン(16色のときは1バイトに2ドット分格納する) ;>d0.l:エラーコード ; 0 正常終了 ; -1 色モードが違う
IOCS コール $9A は、グラフィック画面にビットパターンを書き込みます。ビットが 0 のピクセルは変更せす、1 のピクセルに IOCS コール $95 で設定したペンカラーを書き込みます。
;IOCS _GPTRN ;$9A グラフィック画面にビットパターン書き込み ;<d1.w:X座標 ;<d2.w:Y座標 ;<a1.l:バッファアドレス ;< 0000 .w X方向のドット数 ;< 0002 .w Y方向のドット数 ;< 0004 ビットパターン(0=変化しない,1=ペンカラーで描画) ; X方向の余ったビットはバイト単位で切り捨てる
IOCS コール $9B は、グラフィック画面にビットパターンを書き込みます。ビットが 0 のピクセルにバックカラーを書き込み、1 のピクセルに IOCS コール $95 で設定したペンカラーを書き込みます。
;IOCS _BK_GPTRN ;$9B グラフィック画面にビットパターン書き込み(バックカラー指定) ;<d1.w:X座標 ;<d2.w:Y座標 ;<d3.w:バックカラー ;<a1.l:バッファアドレス ;< 0000 .w X方向のドット数 ;< 0002 .w Y方向のドット数 ;< 0004 ビットパターン(0=バックカラーで描画,1=ペンカラーで描画) ; X方向の余ったビットはバイト単位で切り捨てる
IOCS コール $9C は、グラフィック画面にビットパターンを整数倍に拡大して書き込みます。ビットが 0 のピクセルは変更せす、1 のピクセルに IOCS コール $95 で設定したペンカラーを書き込みます。
;IOCS _X_GPTRN ;$9C グラフィック画面にビットパターン書き込み(拡大指定) ;<d1.w:X座標 ;<d2.w:Y座標 ;<d3.w:X方向拡大率(1~1023) ;<d4.w:Y方向拡大率(1~1023) ;<a1.l:バッファアドレス ;< 0000 .w X方向のドット数 ;< 0002 .w Y方向のドット数 ;< 0004 ビットパターン(0=変化しない,1=ペンカラーで描画) ; X方向の余ったビットはバイト単位で切り捨てる
X68030 の ROM に Human68k v2.15 が入っていることは知られていますが、X68000 の ROM に Human68k v1.00 が入っていることはあまり知られていないようです。
X68030 よりも前の機種では、次のコマンドを実行してリセットすると ROM Human が起動します。
> SWITCH.X BOOT=ROM$FE4FFC
この設定をおこなってからリセットすると、ROM に入っている Human68k version 1.00 が起動します。X68000 XVI よりも前の機種(ROM 1.0)には ROM ディスク が入っていてターミナルモードになります。
X68000 XVI よりも前の機種(ROM 1.0)には ROM ディスクが入っています。
X68000 XVI よりも前の機種で ROM Human を起動すると、CONFIG.SYS が読み込まれて PRNDRV.SYS 1.00 が組み込まれてから TERM.X V1.0 が起動してターミナルモードになります。ターミナルモードで F9 キーを押して SPEED と入力すると SPEED.X Version 1.00 が起動してシリアルポートの設定ができます。うまくいかないときは、SRAM の初期化 をおこなってからやりなおすとうまくいくことがあります。
上記の CONFIG.SYS と PRNDRV.SYS と TERM.X と SPEED.X が入っている場所が ROM ディスクです。ROM ディスクの中のソフトウェアはバージョンが古く機能も乏しいので、実用性を求めるならば普通に起動したほうがよいと思います。
アドレス | サイズ | 初期値 | 内容 |
---|---|---|---|
$00ED0048 | .l | $00FFDC00 | ROM ディスクの先頭アドレス |
$00ED004C | .w | $0400 | 1 セクタあたりのバイト数 |
$00ED004E | .b | $01 | 1 クラスタあたりのセクタ数 |
$00ED004F | .b | $01 | FAT 領域の個数 |
$00ED0050 | .w | $0000 | 予約領域のセクタ数 |
$00ED0052 | .w | $0020 | ルートディレクトリに入るエントリ数 |
$00ED0054 | .w | $0009 | 全領域のセクタ数 |
$00ED0056 | .b | $F9 | メディアバイト |
$00ED0057 | .b | $01 | 1 個の FAT 領域に使用するセクタ数 |
X68000 初代機から X68030 までのすべての機種に ROM デバッガが内蔵されています。DB.X の機能を縮小してリモート専用にしたようなもので、RS-232C ケーブルで他のマシンと接続することで使用できます。バスエラーや INTERRUPT スイッチなどでデバッガが起動し、g コマンドで復帰します。q コマンドはありません。デバイスドライバなどのデバッグで威力を発揮します。
ROM デバッガはいくつかの方法で組み込むことができます。
ROM のバージョンによって ROM デバッガの組み込み方が異なるので注意する必要があります。スーパーバイザモードで下記のコードを実行すれば確実でしょう。
ROM デバッガを組み込むコード(Human68k v3.02 より抜粋)
IOCS _ROMVER cmp.l #$12920101,d0 bcc 1f jsr $00FE0000 bra 2f 1: movea.l $00FF0008,a0 cmpa.l #$01000000,a0 bcc 2f movea.l #$00001000,a6 jsr (a0) 2:
SWITCH.X を使ってコマンドラインで次のように指定すると、ROM デバッガ を ON/OFF できます。
>switch debug=on
>switch debug=off
スタートアップメンテ .X に未公開オプション「-E」を指定するとエンドファイルメンテとして動作します。
TIMER.X に未公開オプション /KILL を指定すると、TIMER.X の常駐を完全に解除することができます。
TIMER.X に未公開オプション「/X 時刻 実行ファイル名 コマンドライン」を指定すると、指定した時刻に指定したプログラムを実行することができます。指定した時刻にカレントパスがどこになっているかわからない場合は、実行ファイル名をフルパスで書く必要があります。指定したプログラムを TIMER.X のスレッドで起動するだけなので、特に標準入出力を使ったり変更したりするプログラムを指定してはいけません。また、自力で終了できるプログラムでなければなりません。メインのスレッドがメモリをすべて使っているとプログラムを起動できません。
a_cont() は a_stop() で中断した ADPCM の再生を再開します。
a_end() は ADPCM の再生を中止します。
a_stat() は ADPCM の再生中ならば 2 を、さもなくば 0 を返します。
a_stop() は ADPCM の再生を中断します。a_cont() で再開できます。
inkey$(0) はキーボードから入力された 1 文字を返します。inkey$ と違い、入力がないときは待たずに "" を返します。返した文字はキー入力バッファから取り除かれます。
keysns() はキー入力バッファが空のとき 0 を、空ではないとき -1 を返します。キー入力バッファは変化しません。
m_atoi(t) はトラック t のトラックバッファの先頭アドレスを返します。
拡張メモリボード CZ-6BEn は、増設したメモリ領域を 256KB 単位でスーパーバイザ保護するかどうか指定することができます。
スーパーバイザ保護する範囲を設定するための I/O ポートアドレスは $00EAFF81, $00EAFF83,… となっており、下位のポートの下位のビットから順に $00200000~$0023FFFF, $00240000~$0027FFFF,… の範囲に対応し、ビットに 1 を書き込むとその領域がスーパーバイザ保護されてユーザモードではアクセスできなくなります。なお、このポートは書き込み専用です。読み出そうとするとバスエラーになりますので注意して下さい。
ポートアドレス | ビット | スーパーバイザ保護される範囲 |
---|---|---|
$00EAFF81 | 0 | $00200000~$0023FFFF |
1 | $00240000~$0027FFFF | |
2 | $00280000~$002BFFFF | |
3 | $002C0000~$002FFFFF | |
4 | $00300000~$0033FFFF | |
5 | $00340000~$0037FFFF | |
6 | $00380000~$003BFFFF | |
7 | $003C0000~$003FFFFF | |
$00EAFF83 | 0 | $00400000~$0043FFFF |
1 | $00440000~$0047FFFF | |
2 | $00480000~$004BFFFF | |
3 | $004C0000~$004FFFFF | |
4 | $00500000~$0053FFFF | |
5 | $00540000~$0057FFFF | |
6 | $00580000~$005BFFFF | |
7 | $005C0000~$005FFFFF | |
$00EAFF85 | 0 | $00600000~$0063FFFF |
1 | $00640000~$0067FFFF | |
2 | $00680000~$006BFFFF | |
3 | $006C0000~$006FFFFF | |
4 | $00700000~$0073FFFF | |
5 | $00740000~$0077FFFF | |
6 | $00780000~$007BFFFF | |
7 | $007C0000~$007FFFFF | |
$00EAFF87 | 0 | $00800000~$0083FFFF |
1 | $00840000~$0087FFFF | |
2 | $00880000~$008BFFFF | |
3 | $008C0000~$008FFFFF | |
4 | $00900000~$0093FFFF | |
5 | $00940000~$0097FFFF | |
6 | $00980000~$009BFFFF | |
7 | $009C0000~$009FFFFF | |
$00EAFF89 | 0 | $00A00000~$00A3FFFF |
1 | $00A40000~$00A7FFFF | |
2 | $00A80000~$00ABFFFF | |
3 | $00AC0000~$00AFFFFF | |
4 | $00B00000~$00B3FFFF | |
5 | $00B40000~$00B7FFFF | |
6 | $00B80000~$00BBFFFF | |
7 | $00BC0000~$00BFFFFF |
X68000 に拡張メモリボード CZ-6BEn を装着した環境で使用できます。X68030 は本体内にこの機能を持っています。なお、I/O データ機器の PIO-6BEn も同様の機能を持っていますが、Xsimm10 はコスト削減と Human68k が対応していないためにこの機能を持っていません。
RAM ディスクドライバの KRAMD.SYS は、このスーパーバイザ保護機能を活用して RAM ディスク領域をスーパーバイザ保護することができます。RAM ディスク領域をスーパーバイザ保護しておくと、暴走したときなどに RAM ディスクの内容が壊れにくくなります。
「F1」「F2」「F3」の 3 つのキーを押しながらキーボードを X68k 本体に接続すると、キーボードの LED がランダム(に見えるよう)な順序で点滅します。
コネクタを繋ぎなおさなければ普通に入力できません。
X68k の全機種のキーボードで動作します。
この機能はキーボードの中に入っているプロセッサで処理されています。キーボードの中のプロセッサがリセットされたとき、すなわちキーボードに電源が供給され始めたときに、「F1」「F2」「F3」の 3 つのキーが押されていることが条件です。X68k 本体の電源が入っていなくても、X68k 本体の電源コードがコンセントに繋がっていて X68k 本体の背面スイッチが ON になっていれば、キーボードを X68k 本体に接続したときに動作します。
「記号入力」「登録」「HELP」の 3 つのキーを押しながらキーボードを X68k 本体に接続すると、キーボードのすべての LED が 5 回点滅してから、「ひらがな」→「全角」→「かな」→「ローマ字」→「コード入力」→「CAPS」→「INS」→「ひらがな」の順序で LED が繰り返し点滅します。
BREAK キーを押すと普通に入力できる状態になります。
X68k の全機種のキーボードで動作します。
この機能はキーボードの中に入っているプロセッサで処理されています。キーボードの中のプロセッサがリセットされたとき、すなわちキーボードに電源が供給され始めたときに、「記号入力」「登録」「HELP」の 3 つのキーが押されていることが条件です。X68k 本体の電源が入っていなくても、X68k 本体の電源コードがコンセントに繋がっていて X68k 本体の背面スイッチが ON になっていれば、キーボードを X68k 本体に接続したときに動作します。
「かな」「ローマ字」「コード入力」の 3 つのキーを押しながらキーボードを X68k 本体に接続すると、押したキーのスキャンコードを 2 進数でキーボードの LED にエコーバックするようになります。
コネクタを繋ぎなおさなければ普通に入力できません。
キー | スキャンコード | ビット番号 点灯する LED | ||||||
---|---|---|---|---|---|---|---|---|
6 全角 | 5 ひらがな | 4 INS | 3 CAPS | 2 コード入力 | 1 ローマ字 | 0 かな | ||
ESC | $01 | - | - | - | - | - | - | ● |
1 ! | $02 | - | - | - | - | - | ● | - |
2 " | $03 | - | - | - | - | - | ● | ● |
3 # | $04 | - | - | - | - | ● | - | - |
4 $ | $05 | - | - | - | - | ● | - | ● |
5 % | $06 | - | - | - | - | ● | ● | - |
6 & | $07 | - | - | - | - | ● | ● | ● |
7 ' | $08 | - | - | - | ● | - | - | - |
8 ( | $09 | - | - | - | ● | - | - | ● |
9 ) | $0A | - | - | - | ● | - | ● | - |
0 | $0B | - | - | - | ● | - | ● | ● |
- = | $0C | - | - | - | ● | ● | - | - |
^ ~ | $0D | - | - | - | ● | ● | - | ● |
\ | | $0E | - | - | - | ● | ● | ● | - |
BS | $0F | - | - | - | ● | ● | ● | ● |
TAB | $10 | - | - | ● | - | - | - | - |
Q | $11 | - | - | ● | - | - | - | ● |
W | $12 | - | - | ● | - | - | ● | - |
E | $13 | - | - | ● | - | - | ● | ● |
R | $14 | - | - | ● | - | ● | - | - |
T | $15 | - | - | ● | - | ● | - | ● |
Y | $16 | - | - | ● | - | ● | ● | - |
U | $17 | - | - | ● | - | ● | ● | ● |
I | $18 | - | - | ● | ● | - | - | - |
O | $19 | - | - | ● | ● | - | - | ● |
P | $1A | - | - | ● | ● | - | ● | - |
@ ` | $1B | - | - | ● | ● | - | ● | ● |
[ { | $1C | - | - | ● | ● | ● | - | - |
リターン | $1D | - | - | ● | ● | ● | - | ● |
A | $1E | - | - | ● | ● | ● | ● | - |
S | $1F | - | - | ● | ● | ● | ● | ● |
D | $20 | - | ● | - | - | - | - | - |
F | $21 | - | ● | - | - | - | - | ● |
G | $22 | - | ● | - | - | - | ● | - |
H | $23 | - | ● | - | - | - | ● | ● |
J | $24 | - | ● | - | - | ● | - | - |
K | $25 | - | ● | - | - | ● | - | ● |
L | $26 | - | ● | - | - | ● | ● | - |
; + | $27 | - | ● | - | - | ● | ● | ● |
: * | $28 | - | ● | - | ● | - | - | - |
] } | $29 | - | ● | - | ● | - | - | ● |
Z | $2A | - | ● | - | ● | - | ● | - |
X | $2B | - | ● | - | ● | - | ● | ● |
C | $2C | - | ● | - | ● | ● | - | - |
V | $2D | - | ● | - | ● | ● | - | ● |
B | $2E | - | ● | - | ● | ● | ● | - |
N | $2F | - | ● | - | ● | ● | ● | ● |
M | $30 | - | ● | ● | - | - | - | - |
, < | $31 | - | ● | ● | - | - | - | ● |
. > | $32 | - | ● | ● | - | - | ● | - |
/ ? | $33 | - | ● | ● | - | - | ● | ● |
_ | $34 | - | ● | ● | - | ● | - | - |
スペース | $35 | - | ● | ● | - | ● | - | ● |
HOME | $36 | - | ● | ● | - | ● | ● | - |
DEL | $37 | - | ● | ● | - | ● | ● | ● |
ROLLUP | $38 | - | ● | ● | ● | - | - | - |
ROLLDOWN | $39 | - | ● | ● | ● | - | - | ● |
UNDO | $3A | - | ● | ● | ● | - | ● | - |
← | $3B | - | ● | ● | ● | - | ● | ● |
↑ | $3C | - | ● | ● | ● | ● | - | - |
→ | $3D | - | ● | ● | ● | ● | - | ● |
↓ | $3E | - | ● | ● | ● | ● | ● | - |
CLR | $3F | - | ● | ● | ● | ● | ● | ● |
/ | $40 | ● | - | - | - | - | - | - |
* | $41 | ● | - | - | - | - | - | ● |
- | $42 | ● | - | - | - | - | ● | - |
7 | $43 | ● | - | - | - | - | ● | ● |
8 | $44 | ● | - | - | - | ● | - | - |
9 | $45 | ● | - | - | - | ● | - | ● |
+ | $46 | ● | - | - | - | ● | ● | - |
4 | $47 | ● | - | - | - | ● | ● | ● |
5 | $48 | ● | - | - | ● | - | - | - |
6 | $49 | ● | - | - | ● | - | - | ● |
= | $4A | ● | - | - | ● | - | ● | - |
1 | $4B | ● | - | - | ● | - | ● | ● |
2 | $4C | ● | - | - | ● | ● | - | - |
3 | $4D | ● | - | - | ● | ● | - | ● |
ENTER | $4E | ● | - | - | ● | ● | ● | - |
0 | $4F | ● | - | - | ● | ● | ● | ● |
, | $50 | ● | - | ● | - | - | - | - |
. | $51 | ● | - | ● | - | - | - | ● |
記号入力 | $52 | ● | - | ● | - | - | ● | - |
登録 | $53 | ● | - | ● | - | - | ● | ● |
HELP | $54 | ● | - | ● | - | ● | - | - |
XF1 | $55 | ● | - | ● | - | ● | - | ● |
XF2 | $56 | ● | - | ● | - | ● | ● | - |
XF3 | $57 | ● | - | ● | - | ● | ● | ● |
XF4 | $58 | ● | - | ● | ● | - | - | - |
XF5 | $59 | ● | - | ● | ● | - | - | ● |
かな | $5A | ● | - | ● | ● | - | ● | - |
ローマ字 | $5B | ● | - | ● | ● | - | ● | ● |
コード入力 | $5C | ● | - | ● | ● | ● | - | - |
CAPS | $5D | ● | - | ● | ● | ● | - | ● |
INS | $5E | ● | - | ● | ● | ● | ● | - |
ひらがな | $5F | ● | - | ● | ● | ● | ● | ● |
全角 | $60 | ● | ● | - | - | - | - | - |
BREAK | $61 | ● | ● | - | - | - | - | ● |
COPY | $62 | ● | ● | - | - | - | ● | - |
F1 | $63 | ● | ● | - | - | - | ● | ● |
F2 | $64 | ● | ● | - | - | ● | - | - |
F3 | $65 | ● | ● | - | - | ● | - | ● |
F4 | $66 | ● | ● | - | - | ● | ● | - |
F5 | $67 | ● | ● | - | - | ● | ● | ● |
F6 | $68 | ● | ● | - | ● | - | - | - |
F7 | $69 | ● | ● | - | ● | - | - | ● |
F8 | $6A | ● | ● | - | ● | - | ● | - |
F9 | $6B | ● | ● | - | ● | - | ● | ● |
F10 | $6C | ● | ● | - | ● | ● | - | - |
SHIFT | $70 | ● | ● | ● | - | - | - | - |
CTRL | $71 | ● | ● | ● | - | - | - | ● |
OPT.1 | $72 | ● | ● | ● | - | - | ● | - |
OPT.2 | $73 | ● | ● | ● | - | - | ● | ● |
NUM | $74 | ● | ● | ● | - | ● | - | - |
X68k の全機種のキーボードで動作します。
この機能はキーボードの中に入っているプロセッサで処理されています。キーボードの中のプロセッサがリセットされたとき、すなわちキーボードに電源が供給され始めたときに、「かな」「ローマ字」「コード入力」の 3 つのキーが押されていることが条件です。X68k 本体の電源が入っていなくても、X68k 本体の電源コードがコンセントに繋がっていて X68k 本体の背面スイッチが ON になっていれば、キーボードを X68k 本体に接続したときに動作します。
Compact のキーボード(X68000 Compact または X68030 Compact のキーボード)には、未公開の制御コードがあります。これらの制御コードを使用することで、Compact のキーボードに特有の機能を制御することができます。
NUM キーの LED を消灯します。
NUM キーの LED を点灯します。
スキャンコードとして $FE を返します。Compact 以外のキーボードは $47 を送出しても何も返さないので、この制御コードを使うことで接続されているキーボードが Compact のキーボードかどうかをソフトウェアで判別することができます。
KeyWitch.X は、ハード的な誤入力を回避するために必要なキーボードマトリクスを決定するために、この制御コードを使ってキーボードの種類を見分けています。
キー入力禁止モードにします。$49 を送出するか、SHIFT+CTRL+OPT.2 を押すか、コネクタを繋ぎなおすまで、キーボードが使えなくなります。
キー入力禁止モードを解除します。
Compact のキーボードであること。
X68000 XVI 以降の機種(ROM 1.1 以降)では、CLR キーを押しながら電源 ON またはリセットすると画面に
S-RAMを初期化します。 よろしいですか?(Y/N)
と表示され、Y キーで答えると SRAM の全体が初期化(ゼロクリア)されます。
X68000 XVI よりも前の機種(ROM 1.0)でコンピュータウイルスの疑いがあるなどの理由でどうしても SRAM を初期化したい場合は、次のような手順を試みてください。
ぺけ -BASIC が使える場合。次の 3 行を適当な名前でテキストファイルにセーブして ぺけ -BASIC で実行してからリセットすると、SRAM のシステムで使用する部分(SRAM の先頭から 91 バイト)だけが初期化されます。
bpoke(&HE8E00D,49) bpoke(&HED0000,0) bpoke(&HE8E00D,0)
無償公開されたシャープのソフトウェア に含まれている C コンパイラ(XC)にはデバッガ(DB.X)が含まれています。デバッガがインストールされている場合は、上の ぺけ -BASIC のコードと同じことを次の手順で実行できます。
>db -mes e8e00d 31 -mes ed0000 00 -mes e8e00d 00 -q >
この後リセットすると、SRAM のシステムで使用する部分(SRAM の先頭から 91 バイト)だけが初期化されます。
ぺけ -BASIC もデバッガも持ってこれない場合は、COMMAND.X が動いていて書き込めるディスクがあれば、次のコマンドを実行することで SRAM の全体をゼロクリアできます。
>echo ケD2Dp~F@NO(@CヤH{@\(_PワQワ${@T&{@T`V`&`F01(JユハユフRJ(KラヒラヒラフSK6シ110;@62;@2ミ@ミABZS@dメ6シ22p~F@NOBCRCニ;2ナgタBAVApャNONuU、UU3aニiオU`ョ>a.r >a
中古の X680x0 で以前に誰が使っていたかわからないものを入手したときは、まず最初に SRAM を初期化することをお勧めします。
SRAM を初期化すると Human68k で使用するメモリ容量の設定なども初期化されてしまいます。継続して使用している過程で単にブートデバイスを変更したいだけならば、SWITCH.X のメニューでブートデバイスを変更すれば十分です。ブートデバイスの問題で SWITCH.X を起動できないときは、Human68k のシステムディスクをセットして OPT.1 キーを押しながら起動 することで SWITCH.X が使える環境になります。
X68000 Compact(ROM 1.2)以降では、V キーを押しながら電源 ON またはリセットすると、画面モードが VGA モード(モード $13)になります。純正の液晶ディスプレイなどで使用します。
X68000 Compact(ROM 1.2)以降では、N キーを押しながら電源 ON またはリセットすると、画面モードが標準モード(モード $10)になります。VGA モードを解除するときに使います。
SRAM の ROM デバッガ起動フラグ([$00ED0058].B)が OFF のとき、OPT.2 キーを押しながら電源 ON またはリセットすると ROM デバッガ が組み込まれます。SRAM の ROM デバッガ起動フラグが ON のときは逆の動作になります(OPT.2 キーが押されていないときだけ ROM デバッガが組み込まれる)。SRAM の ROM デバッガ起動フラグは SWITCH.X で操作できます。
X68030(ROM 1.3)では、XF1 キーを押しながら電源 ON またはリセットすると、強制的にキャッシュ OFF(命令キャッシュ、データキャッシュともに OFF)になり、10MHz の X68000 相当のメモリウェイトが設定されて起動します。
X68030(ROM 1.3)では、XF2 キーを押しながら電源 ON またはリセットすると、強制的にキャッシュ OFF(命令キャッシュ、データキャッシュともに OFF)になり、16MHz の X68000 相当のメモリウェイトが設定されて起動します。
X68030(ROM 1.3)では、XF3 キーを押しながら電源 ON またはリセットすると、強制的にキャッシュ OFF(命令キャッシュ、データキャッシュともに OFF)になり、10MHz の X68000 相当のメモリウェイトが設定され、ROM に入っている Human68k v2.15 が起動します。
X68030(ROM 1.3)では、XF4 キーを押しながら電源 ON またはリセットすると、強制的にキャッシュ OFF(命令キャッシュ、データキャッシュともに OFF)になり、16MHz の X68000 相当のメモリウェイトが設定され、ROM に入っている Human68k v2.15 が起動します。
X68030(ROM 1.3)では、XF5 キーを押しながら電源 ON またはリセットすると、ROM に入っている Human68k v2.15 が起動します。キャッシュの状態は SRAM のキャッシュの設定に従います(CACHE.X で設定できます)。メモリウェイトは操作しないので、電源 ON またはリセットボタンを押して起動した場合はノーウェイトになります。
CTRL キーを押しながら電源 ON またはリセットすると、フロッピーディスクがセットされていても読まずにイジェクトされます。
ブートデバイスを標準(STD)に設定している場合は、電源 ON またはリセットしたときにフロッピーディスクがセットされていると最初にフロッピーディスクの IPL を読みに行きますが、CTRL キーが押されているとフロッピーディスクの IPL を読む前にディスクがイジェクトされます。
OPT.1 キーを押しながら電源 ON またはリセットすると、SRAM に保存されているブートデバイスの設定を無視して強制的に標準(STD)の順序でブートデバイスが検索されます。普段は SCSI ハードディスクから起動しているが一時的にフロッピーディスクから起動したい場合などに使います。コンピュータウイルスなどの影響で正常に起動できなくなってしまった場合にも有効です。
標準(STD)のブートデバイスの検索順序は以下の通り
FORMAT.X でハードディスクをフォーマットするときに自動起動のパーティションを指定しますが、HELP キーを押しながら電源 ON またはリセットすることで自動起動のパーティションを選択することもできます。
指定したアドレスを呼び出してデバイスドライバを組み込む(DEVICE=[ROM~]) の DEVICE= が抜けていました。
X-BASIC の未公開機能 を追加しました。
SRAM の初期化(CLR キー) の補足に COMMAND.X で SRAM の全体をゼロクリアする方法を追記しました。
ROM デバッガ。CONFIG.SYS は ROMDB=ON で SWITCH.X は DEBUG=ON。
── 続きを読む ──── 続きを隠す ──
https://stdkmd.net/udcx68k/ に引っ越しました。
http://stdkmd.com/udcx68k/ に引っ越し。IOCS コール $95~$9C を追加。FORMAT.X /4 /I を追加。
V キーと N キーは X68000 Compact から。
IOCS $09~$93 を追加。
更新。
更新。
更新。
更新。
更新。
更新。
公開。