X68k/PM

From Data Crystal
Revision as of 05:02, 17 October 2012 by Eien Ni Hen (talk | contribs)
Jump to navigation Jump to search
	- PROGRAMMER'S MANUAL (incomplete version) -

==============================================================================

・ユーザープログラム起動後の状態

レジスタ

a0	メモリ管理ポインタのアドレス
a1	プログラムの終わり+1 のアドレス
a2	コマンドラインのアドレス
a3	環境のアドレス
a4	プログラムの実行開始アドレス
sr	ユーザーモード
usp	親のスタック
ssp	システムのスタック
その他	不定

-Conditions after user program startup

Register

a0 Memory control pointer address
a1 Program end+1 address
a2 Command line address
a3 Environment address
a4 Program execution start address
sr User mode
usp New stack
ssp system stack
Other Undefined

メモリ
	  確保できる最大のメモリが割り当てられている.

コマンドラインの構造
	  LASCII 形式. 先頭 1 バイトに文字列の長さが、文字列の終端には 0 が付
	けられる.

環境
	  親の環境そのもので、DOS _SETENV によって環境の内容を変更した場合、親
	の環境も変更されることになる. 子プロセスを異なる環境の下で実行する場合
	は、別にメモリを確保し新しい環境を用意する.

環境の構造
	  先頭 4 バイトに環境変数領域の大きさが示される.
	  各環境変数は 1 バイトの 0 によって区切られ、環境変数の終端には更にも
	う 1 バイトの 0 が付けられる.

Memory
	Allocated the largest amount of memory possible.

Command line structure
	LASCII format. Length of character string is assigned in the first byte, and end of character
string by 0.

Environment
	Being a parent environment, when the details of the environment are changed by DOS _SETENV,
it changes the parent environment as well. When run in an environment that changes the child processes,
all memory is retained and a new environment prepared.

Environment structure
	The size of the environment variable range is indicated in the first 4 bytes.
	Each environment variable is ended by 1 byte of 0, and another 0 is contained in
the variable termination.


==============================================================================

・メモリ管理ポインタ

offset	size
0	1.l	前のメモリ管理ポインタ(0 なら先頭)
4	1.l	このメモリを確保したプロセスのメモリ管理ポインタ(0 なら親はない)
8	1.l	このメモリブロックの終わり+1 のアドレス
12	1.l	次のメモリ管理ポインタ(0 なら終わり)

	  メモリ管理ポインタは必ず下位 4 ビットが 0 のアドレス(16 バイト境界)
	から始まり、先頭は OS 本体のスーパバイザ領域内に存在する.

	  4 バイト目(メモリを確保したプロセス)の最上位バイトで、そのメモリブロ
	ックの属性を表わす.

	$ff	常駐プロセス(KEEP)
	$fe	不明(MEMDRV)
	$fd	サブメモリブロック

-Memory management pointers

offset	size
0	1.l Previous memory management pointer (If 0 then first)
4	1.l Management pointer that processes memory retention (If 0 no parent)
8	1.l End of memory block+1 address
12      1.l Next memory management pointer (If 0 then end)

The low 4 bits of memory management pointers start from the 0 address (16 byte boundary).
The first exists in the supervisor domain of the OS.

Byte #4--the highest byte, and the one with the memory retention process--displays
the properties of its memory block.

$ff Permanent process (KEEP)
$fe Unknown (MEMDRV)
$fd Sub-memory block

==============================================================================

・プロセス管理ポインタ(256 バイト)

offset	size
$0000	 1.l	前のメモリ管理ポインタ(0 なら先頭)		┐
$0004	 1.l	親プロセスのプロセス管理ポインタ(0 なら親はない)│メモリ管理
$0008	 1.l	このメモリブロックの終わり+1 のアドレス		│    ポインタ
$000c	 1.l	次のメモリ管理ポインタ(0 なら終わり)		┘

$0010	 1.l	環境のアドレス(-1 なら確保されていない)
$0014	 1.l	終了時の戻りアドレス
$0018	 1.l	CTRL+C により中断された際の戻りアドレス
$001c	 1.l	エラーにより中断された際の戻りアドレス
$0020	 1.l	コマンドラインのアドレス
$0024	12.b	プロセスのファイルハンドラの使用状況
		($24~$2f の bit 0~7 の順で使用中 = 1 となる)
$0030	 1.l	BSS の先頭アドレス
$0034	 1.l	ヒープの先頭アドレス(BSS と同じ)
$0038	 1.l	初期スタックアドレス(ヒープの終わり+1)
$003c	 1.l	親プロセスの USP
$0040	 1.l	親プロセスの SSP
$0044	 1.w	親プロセスの SR
$0046	 1.w	アボート時の SR
$0048	 1.l	アボート時の SSP
$004c	 1.l	trap #10 のベクタ
$0050	 1.l	trap #11 のベクタ
$0054	 1.l	trap #12 のベクタ
$0058	 1.l	trap #13 のベクタ
$005c	 1.l	trap #14 のベクタ
$0060	 1.l	shell 起動フラグ(0:通常の起動 -1:shell として起動)
$0064	 1.b	モジュール番号
$0065	 3.b	(未使用)
$0068	 1.l	ロードした子プロセスのメモリ管理ポインタ
$006a	 5.l	(未使用)
$0080	 2.b	実行ファイルのドライブ名
$0082	66.b	実行ファイルのパス名
$00c4	24.b	実行ファイルのファイル名
$00dc	 9.l	(未使用)

$0100		(プログラム先頭)

-Process control pointers (256 bytes)

offset	size
$0000	1.l		Previous memory management pointer (If 0 then head) [Memory
$0004	1.l		Parent process management pointer (If 0 no parent)   management
$0008	1.l		End of memory block+1 address			     pointers
$000c	1.l		Next memory management pointer (If 0 then end)      ]
$0010	1.l		Environment address (If -1 then not secured)
$0014	1.l		End time return address
$0018	1.l		Return address when interrupted by pressing CTRL+C
$001c	1.l		Return address when interrupted by error
$020	1.l		Command line address
$0024	12.b	        Process file handler usage
		        (When in use, $24~$2f bits 0-7 = 1)
$0030	1.l		BSS head address
$0034	1.l		Heap head address (same as BSS)
$0038	1.l		Initial stack address (End of heap +1)
$003c	1.l		Parent process USP
$0040	1.l		Parent process SSP
$0044	1.w	        Parent process SR
$0046	1.w	        Abort time SR
$0048	1.l		Abort time SSP
$004c	1.l		trap #10 vector
$0050	1.l		trap #11 vector
$0054	1.l		trap #12 vector
$0058	1.l		trap #13 vector
$005c	1.l		trap #14 vector
$0060	1.l		Shell start flag (0: Normal start, -1: Start as shell)
$0064	1.b	        Module number
$0065	3.b	        (Unused)
$0068	1.l		Loaded child process memory management pointer
$006a	5.l		(Unused)
$0080	2.b	        Executable file drive name
$0082	66.b      	Executable file path name
$00c4	24.b     	Executable file drive name
$00dc	9.l		(Unused)

$0100			(Program head)

==============================================================================

Memory map:

Exception/Interrupt Vector(Reserved by maker:$00~3f)
address	vector
$000000	  $00	SSP after reset
$000004	  $01	PC after reset
$000008	  $02	Bus error
$00000c	  $03	Address error
$000010	  $04	Unknown instruction
$000014	  $05	Division by 0
$000018	  $06	CHK instruction
$00001c	  $07	TRAPV instruction, FTRAPcc instruction
$000020	  $08	Privilege violation
$000024	  $09	Trace exception
$000028	  $0a	Unsupported instruction line 1010 emulator (SX call)
$00002c	  $0b	 〃 line 1111 emulator (DOS call, floating point operation)
$000030	  $0c	Unused
$000034	  $0d	FPU プロトコルバイオレーション例外処理
$000038	  $0e	 〃 フォーマットエラー例外処理

$000034	$0dFPU	Protocol violation exception handling
$000038	$0e ''	Formatting error exception handling

$00003c	  $0f	Uninitialized Interrupt
$000040	  $10	Unused
$000044	  $11	〃
$000048	  $12	〃
$00004c	  $13	〃
$000050	  $14	〃
$000054	  $15	〃
$000058	  $16	〃
$00005c	  $17	〃
$000060	  $18	Spurious Interrupt
$000064	  $19	Level  1 Interrupt (auto vector)
$000068	  $1a	〃	2 〃
$00006c	  $1b	〃	3 〃
$000070	  $1c	〃	4 〃
$000074	  $1d	〃	5 〃
$000078	  $1e	〃	6 〃
$00007c	  $1f	〃	7 〃(NMI)
$000080	  $20	trap #0
$000084	  $21	 〃  #1
$000088	  $22	 〃  #2
$00008c	  $23	 〃  #3
$000090	  $24	 〃  #4
$000094	  $25	 〃  #5
$000098	  $26	 〃  #6
$00009c	  $27	 〃  #7
$0000a0	  $28	 〃  #8  (reserved for system)
$0000a4	  $29	 〃  #9  (OS debugger)
$0000a8	  $2a	 〃  #10 (reset & power off)
$0000ac	  $2b	 〃  #11 (BREAK key)
$0000b0	  $2c	 〃  #12 (COPY key)
$0000b4	  $2d	 〃  #13 (CTRL+C)
$0000b8	  $2e	 〃  #14 (error processing)
$0000bc	  $2f	 〃  #15 (IOCS call)
$0000c0	  $30	FPU BSUN	(Branch/Set on Unordered) 例外処理

$0000c0	  $30	FPU BSUN	(Branch/Set on Unordered) Exception handling

$0000c4	  $31	 〃 INEX1,INEX2	(Inexact Decimal Input,Inexact Operation)
$0000c8	  $32	 〃 DZ		(Divide by Zero)
$0000cc	  $33	 〃 UNFL	(Underflow)
$0000d0	  $34	 〃 OPERR	(Operand Error)
$0000d4	  $35	 〃 OVFL	(Overflow)
$0000d8	  $36	 〃 SNAN	(Signalling Not A Number)
$0000dc	  $37	未使用

$0000dc	  $37   Unused

$0000e0	  $38	MMU
$0000e4	  $39	〃
$0000e8	  $3a	〃
$0000ec	  $3b	Unused
 …	   …	…
$0000fc	  $3f	Unused

例外ベクタ(ユーザ割り込み:$40~$ff)
address	vector
$000100	  $40	MFP	RTCアラーム/1Hz
$000104	  $41	MFP	外部パワー OFF
$000108	  $42	MFP	フロントスイッチ OFF
$00010c	  $43	MFP	FM 音源
$000110	  $44	MFP	Timer-D (BG 処理で使用)
$000114	  $45	MFP	Timer-C (マウス/カーソル/FDD 制御等)
$000118	  $46	MFP	V-DISP
$00011c	  $47	MFP	RTC クロック
$000120	  $48	MFP	Timer-B
$000124	  $49	MFP	キーシリアル出力エラー
$000128	  $4a	MFP	キーシリアル出力空
$00012c	  $4b	MFP	キーシリアル入力エラー
$000130	  $4c	MFP	キーシリアル入力あり
$000134	  $4d	MFP	Timer-A
$000138	  $4e	MFP	CRTC・IRQ
$00013c	  $4f	MFP	H-SYNC
$000140	  $50	SCC(B)	送信バッファ空
$000144	  $51	SCC(B)	〃
$000148	  $52	SCC(B)	外部/ステータス変化
$00014c	  $53	SCC(B)	〃
$000150	  $54	SCC(B)	受信キャラクタ有効(マウス 1 バイト入力)
$000154	  $55	SCC(B)	〃
$000158	  $56	SCC(B)	スペシャル Rx コンディション
$00015c	  $57	SCC(B)	〃
$000160	  $58	SCC(A)	送信バッファ空
$000164	  $59	SCC(A)	〃
$000168	  $5a	SCC(A)	外部ステータス変化
$00016c	  $5b	SCC(A)	〃
$000170	  $5c	SCC(A)	受信キャラクタ有効(RS-232C 1 バイト入力)
$000174	  $5d	SCC(A)	〃
$000178	  $5e	SCC(A)	スペシャル Rx コンディション
$00017c	  $5f	SCC(A)	〃
$000180	  $60	I/O	FDC ステータス割り込み
$000184	  $61	I/O	FDC 挿入/排出割り込み
$000188	  $62	I/O	HDC ステータス割り込み
$00018c	  $63	I/O	プリンタレディー割り込み
$000190	  $64	DMAC	#0 終了  (FDD)
$000194	  $65	DMAC	#0 エラー(〃 )
$000198	  $66	DMAC	#1 終了  (SASI)
$00019c	  $67	DMAC	#1 エラー(〃  )
$0001a0	  $68	DMAC	#2 終了  (IOCS _DMAMOVE,_DMAMOV_A,_DMAMOV_L)
$0001a4	  $69	DMAC	#2 エラー(〃				   )
$0001a8	  $6a	DMAC	#3 終了  (ADPCM)
$0001ac	  $6b	DMAC	#3 エラー(〃   )
$000200	  $6c	SPC	SCSI 割り込み(内蔵 SCSI)
$000204	  $6d	未使用
…	  …	…
$0003d4	  $f5	未使用
$0003d8	  $f6	SPC	SCSI 割り込み(SCSI ボード)
$0003dc	  $f7	未使用
…	  …	…
$0003fc	  $ff	未使用

Exception vector (User interrupt: $40~$ff)
address			vector
$000100		$40 MFP RTC Alarm/1Hz
$000104		$41 MFP External power OFF
$000118		$42 MFP Front switch OFF
$00010c		$43 MFP FM Audio source
$000110		$44 MFP Timer-D (Used with BG processing)
$000114		$45 MFP Timer-C (Mouse/cursor/FDD control, etc.)

その他
address
$000400		IOCS コールのベクタテーブル
$000800		IOCS ワーク
$001000		ROM モニタ ワーク
$001800		DOS コールのベクタテーブル
$001c00		Human68k ワーク
$002000		FD IPL / HD IPL MENU
$002400		HD IPL
$006800		Human68k / SSP

$c00000		GV-RAM(2MB)
$e00000		TV-RAM(512KB)
$e80000		CRTC
$e82000		VC
$e84000		DMAC
$e86000		エリアセット
$e88000		MFP
$e8a000		RTC
$e8c000		プリンタ
$e8e000		システムポート
$e90000		OPM
$e92000		ADPCM
$e94000		FDC
$e96000		SPC(SCSI 機種) / HDC(SASI 機種)
$e98000		SCC
$e9a000		i8255(ジョイスティック)
$e9c000		I/O コントローラ
$e9e000		コプロセッサ I/O 0
$e9e080		〃		 1
$ea0000		SCSI ボード(SPC ポート及び SCSI ROM,8KB)
$eaff80		拡張エリアセット(X68030)
$ec0000		ユーザー I/O(拡張ボードで使用可,64KB)
$ed0000		SRAM(16KB)
$ed4000		予備(64KB)
$ee0000		未使用(128KB)
$f00000		CGROM(768KB)

(X68000 SASI)
$fc0000		$fe0000~$ffffff と同じ内容が読み出される.
$fe0000		ROM Debugger
$ff0000		IPL / ROM IOCS

(X68000 SCSI)
$fc0000		SCSI IOCS / IPL(8KB)
$fe0000		ROM Debugger
$ff0000		IPL / ROM IOCS

(X68030)
$fc0000		SCSI IPL ヘッダ部(512byte)
$fc0200		Human68k version 2.15
$fce000		FLOAT2.X version 2.02
$fd3800		ROM Debugger
$ff0000		IPL / ROM IOCS

注意	リセット直後のみ $0000~$ffff は $ff0000~$ffffff と同じ内容が読める.

==============================================================================

・CRTC

address	size
$e80000	1.w	R00	水平トータル		┐
$e80002	1.w	R01	水平同期終了位置	│水平タイミング制御
$e80004	1.w	R02	水平表示開始位置	│
$e80006	1.w	R03	水平表示終了位置	┘
$e80008	1.w	R04	垂直トータル		┐
$e8000a	1.w	R05	垂直同期終了位置	│垂直タイミング制御
$e8000c	1.w	R06	垂直表示開始位置	│
$e8000e	1.w	R07	垂直表示終了位置	┘
$e80010	1.w	R08	外部同期水平アジャスト	: 水平位置微調整
$e80012	1.w	R09	ラスタ番号		: ラスタ割り込み用
$e80014	1.w	R10	X 位置			┐テキスト画面スクロール
$e80016	1.w	R11	Y 位置			┘
$e80018	1.w	R12	X0			┐
$e8001a	1.w	R13	Y0			│
$e8001c	1.w	R14	X1			│
$e8001e	1.w	R15	Y1			│グラフィック画面スクロール
$e80020	1.w	R16	X2			│
$e80022	1.w	R17	Y2			│
$e80024	1.w	R18	X3			│
$e80026	1.w	R19	Y3			┘
$e80028	1.w	R20	メモリモード/表示モード制御
$e8002a	1.w	R21	同時アクセス/ラスタコピー/高速クリアプレーン撰択
$e8002c	1.w	R22	ラスタコピー動作用	: ラスタ番号
$e8002e	1.w	R23	テキスト画面アクセスマスクパターン
$e80481	1.b	動作	画像取り込み/高速クリア/ラスタコピー制御

==============================================================================

・ビデオコントローラ

address	size
$e82000	 256.w	グラフィックパレット
$e82200	  16.w	テキストパレット   (パレットブロック 0)
$e82220	 240.w	スプライトパレット ( 〃 1~15)
$e82400	   1.w	R0 (画面モード設定)
$e82500	   1.w	R1 (プライオリティ制御)
$e82600	   1.w	R2 (特殊プライオリティ/画面表示)

==============================================================================

・システムポート

address
$e8e001	#1	コントラスト
		bit 3~0	CONTRAST	0:暗い~$f:明るい
$e8e003	#2	ディスプレイ/3D スコープ
		bit 3		TV CTRL	   Read	0:ディスプレイの電源 ON	1:OFF
					  Write	0:Display 制御信号 0	1:制御信号 1
		bit 1		3D-L		0:3Dスコ-プ左シャッタ- CLOSE	1:OPEN
		bit 0		3D-R		0:〃	 右〃	 CLOSE	1:OPEN
$e8e005	#3	カラーイメージユニット(bit 4~0)
$e8e007	#4	キーボード/NMI/ドットクロック
		bit 3		KEY CTRL   Read	0:キーボード非接続	1:接続
					  Write	0:キーデータ送信不可	1:送信可
		bit 2		NMI RESET	0:NMI リセットしない	1:する
		bit 1		HRL		0:分周比 1/2,1/3,1/6	1:1/2,1/4,1/8
$e8e009	#5	ROM/DRAM ウェイト
		bit 7~4	ROM  Wait Control
		bit 3~0	DRAM Wait Control
				ウェイト数は設定値+2. ただし DRAM アクセスは
				スタティックカラム動作中 0、ページ間をまたぐ時は 4.
$e8e00b	#6	MPU 種別/動作クロック
		bit 7~4	MPU Type	$f:68000 $e:68020 $d:68030 $c:68040
		bit 3~0	MPU Clock(MHz)	$f:10 $e:16 $d:20 $c:25 $b:33 $a:40 $9:50
$e8e00d	#7	SRAM 書き込み
		bit 7~0	SRAM Write Enable Control
				$31 で SRAM 書き込み可能.
$e8e00f	#8	本体電源 OFF
		bit 3~0	Power Off Control
				$00,$0f,$0f の順に書き込むと電源 OFF.

==============================================================================

・SRAM

address	size	初期値
$ed0000	8.b	'X68000',$57	メモリチェックデータ
$ed0008	1.l	$0020_0000	実装メインメモリ容量(SASI:$100000,030:$400000)
$ed000c	1.l	$00fc_0000	ROM 起動アドレス(1.l)へのポインタ
				($fc???? の場合 ID=????/4 の SCSI から起動)
$ed0010	1.l	$00ed_0100	SRAM 起動アドレス
$ed0014	1.l	-1		アラームで起動後、電原 OFF までの時間(分単位)
				(IOCS _ALARMSET の d2.l -1)
$ed0018	1.w	0		最優先ブートデバイス(? はドライブ番号)
				$0000	STD(2HD→HD→ROM→RAM)
				$8?00	 HD?→ HD→STD
				$9?70	2HD?→2HD→STD
				$a000	ROM →ROM→STD
				$b000	RAM →RAM→STD
$ed001a	1.w	$4e07		RS-232C の設定(IOCS _SET232C の引数と同じ)
				bit 15~14 : ストップビット(0,3:2bit 1:1bit 2:1.5bit)
				bit 13~12 : パリティ(0,2:なし 1:奇数 3:偶数)
				bit 11~10 : ビット長(0:5bit 1:6bit 2:7bit 3:8bit)
				bit	 9 : XON/XOFF 処理(0:OFF 1:ON)
				bit	 8 :  SI/SO   処理(0:OFF 1:ON) 使用禁止
				bit  3~ 0 : 転送速度(0:  75 1: 150 2: 300 3: 600
						      4:1200 5:2400 6:4800 7:9600)
					     (X68030 のみ 8:17361BPS も指定可能)
$ed001c	1.b	0		起動時のキー LED の状態(電原 OFF 時の状態が待避されている)
				bit 7	未使用
				bit 6	全角
				bit 5	ひらがな
				bit 4	INS
				bit 3	CAPS
				bit 2	コード入力
				bit 1	ローマ字
				bit 0	かな
				bit = 0 で消灯、1 で点灯
$ed001d	1.b	16		起動時の画面モード(IOCS CRTMOD の d1)
				ROM IOCS 内のエラー表示ルーチンは 16 のモードにのみ対応
				しているので、できるだけ 16 以外の値は設定しない.
				Human68k は常に 16 のモードで起動する.
$ed001e	1.l	0		アラームで起動した時の動作(IOCS _ALARMSET の a1)
				       0:普通に立ち上がる(指定のメディアからブート).
					 OFF するまでの時間が -1 以外なら、指定時間後本体を OFF.
				$01~$3f:テレビをコントロールする.
					 OFF するまでの時間が -1 なら 1 分後本体のみ OFF.
					 それ以外なら指定時間後本体とテレビを OFF.
				$40~	:$000040~$ffffff までのアドレス指定.
					 先頭バイトが $60 ならスーパーバイザのままそのアドレス
					 をコールし、そのサブルーチンから戻ると本体を OFF.
				      -1:普通に立ち上がる(指定のメディアからブート).
					 テレビの制御はしない.
					 OFF するまでの時間が -1 以外なら、指定時間後本体を OFF.
$ed0022	1.l	$ffff_0000	アラームで起動する時間(IOCS _ALARMSET の d1)
				bit 31~28	未使用(0)
				bit 27~24	曜日(0~6)
				bit 23~16	日(01~31:BCD2桁)
				bit 15~ 8	時(00~23:BCD2桁)
				bit  7~ 0	分(00~59:BCD2桁)
				それぞれ $f は無視を表す.
$ed0026	1.b	7		アラームの禁止/許可(0:許可 7:禁止)
$ed0027	1.b	0		OPT.2 キーをテレビコントロールに使用するか(0:使用する 1:しない)
$ed0028	1.b	14		コントラストのシステム既定値(0~15)
$ed0029	1.b	0		本体 OFF 時に FD をイジェクトするか(0:イジェクトしない 1:する)
$ed002a	1.b	$0d		本体 OFF 時に行うテレビコントロールのコード
$ed002b	1.b	0		キーボードの配列	0:JIS配列 1:あいうえお配列
$ed002c	1.b	0		電卓の文字フォント	0:LCD	  1:通常のフォント
$ed002d	1.b	0		SRAM 使用状態		0:未使用  1:SRAMDISK  2:プログラム
$ed002e	1.w	$0000		テキストパレット 0 のシステム規定値
$ed0030	1.w	$f83e			〃	 1 〃
$ed0032	1.w	$ffc0			〃	 2 〃
$ed0034	1.w	$fffe			〃	 3 〃
$ed0036	1.w	$de6c			〃	 4~ 7 〃
$ed0038	1.w	$4022			〃	 8~15 〃
$ed003a	1.b	3		キーのオートリピートが始まるまでの時間(0~15) 200+100N[ms]
$ed003b	1.b	2		キーのリピート間隔(0~15)			30+5N・[ms]
$ed003c	1.l	$0008_0000	プリンタタイムアウト時間
$ed0040	1.l	0		SRAM が初期化されてから前回までの積算稼働時間(分)
				本体 OFF 及びソフトウェアリセットごとに積算される.
$ed0044	1.l	0		SRAM が初期化されてから本体が OFF された回数
				本体 OFF ごとに加算される.
$ed0048	1.l	$00ff_dc00	ROMDISK FAT 開始番地(030:$00ff_f400)
(ROM DISK's BPB)
$ed004c	1.w	1024		1 セクタ当りのバイト数
$ed004e	1.b	1		1 クラスタ当りのセクタ数
$ed004f	1.b	1		FAT 領域の個数
$ed0050	1.w	0		予約領域の個数
$ed0052	1.w	32		ルートディレクトリのエントリ数
$ed0054	1.w	9		全領域のセクタ数(030:3)
$ed0056	1.b	$f9		メディアバイト
$ed0057	1.b	1		FAT 領域 1 個当りのセクタ数

$ed0058	1.b	0		ROM デバッガの使用(0:OFF 1:ON)
$ed0059	1.b	0		$7c,$7e,$5c(\~|) の文字変換フラグ
				bit 2	0:| 1:|(破線)
				bit 1	0: ̄ 1:~
				bit 0	0:¥ 1:\
$ed005a	1.b	0		SASI-HD 接続台数(0~15)
				指定台数以上は IOCS コールのレベルでエラーになる.
$ed005b	20.b	0		システム予約
(SCSI)
$ed006f	1.b	0		SCSI 適用フラグ(0:無効 $56='V':有効)
$ed0070	1.b	0		SCSI 関係(bit 7~4 は X68030 以降で有効)
				bit 7	 転送ブロックサイズ(0:256 1:512;$cc0で可変)
				bit 6	 ブート時のデバイスチェック(0:する 1:しない)
				bit 5	 DMA動作モード(0:オートリクエスト最大速度
					 1:初回オートリクエスト、以後は外部要求転送)
				bit 4	 転送モード(0:DMA転送 1:MPU転送)
				bit 3	 SCSIの種類(0:内蔵 1:オプションボード)
				bit 2~0 本体の ID 番号
$ed0071	1.b	0		SASI フラグ
				SCSI に SASI ディスクを接続した時に SASI の ID
				に対応するビットを 1 にする.
(SX-Window)
$ed0072	2.b	0('SX')		SX-Window 環境フラグ('SX'で使用中)
$ed0074	1.b	0(6)		ダブルクリック基準時間÷10
$ed0075	1.b	0(6)		マウススピード÷2
$ed0076	1.b	0(96)		テキストパレット色相(HSV)
$ed0077	1.b	0(2)			〃	彩度
$ed0078	1.b	0($fe2000)		〃	明度 palette 0~3 5bit???
$ed007b	1.b	0		プリンタドライバ(PRTD)ID
$ed007c	1.b	0		SRAM 情報版数,画面状態保存,開始画面保存
$ed007d	1.b	0		デスクトップ背景(PICT)ID
$ed007e	1.b	0		画面モード

$ed007f	17.b	0		システム予約
(X68030)
$ed0090	1.b	0		標準キャッシュ状態(bit=0:off 1:on)
				bit 1	データキャッシュ
				bit 0	命令キャッシュ
$ed0091	1.b	0		起動時 OPM 演奏(0:OFF -1:ON)
$ed0092	1.b	0		10MHz 相当のウェイト値
$ed0093	1.b	0		16MHz 〃

$ed0094	108.b			システム予約
$ed0100	768.b	0		SRAM プログラムの先頭アドレス
$ed0400	15KB	0		SRAMDISK の先頭アドレス
$ed3fff				SRAM の終わり

備考	  SRAM 初期化時 $ed0000~$ed005a には ROM 中の初期値が書き込まれ、
	$ed005b~$ed00101(X68030 では ~$ed3fff)は 0 が書き込まれる.

==============================================================================

・CGROM

address	  font size	type	 count	code(JIS)
$f00000	  全角 16x16	非漢字	  752	High:$21~$78,Low:$21~$7e
$f05e00	   〃  16x16	第一水準 3008	     $30~$4f
$f1d600	   〃  16x16	第二水準 3478	     $50~$74
$f388c0			(未使用)
$f3a000	 1/4角  8x8	ANK	  256	$00~$ff
$f3a800	  半角  8x16	〃	  256	〃
$f3b800	 1/4角 12x12	〃	  256	〃
$f3d000	  半角 12x24	〃	  256	〃
$f40000	  全角 24x24	非漢字	  752	High:$21~$78,Low:$21~$7e
$f4d380	   〃  24x24	第一水準 3008	     $30~$4f
$f82180	   〃  24x24	第二水準 3478	     $50~$74
$fbf3b0			(未使用)
$fbf400	 1/4角  6x12	ANK	  256	$00~$ff(X68030 only)
$ffd018	 1/4角  6x12	ANK	  256	$00~$ff(XVI only)

==============================================================================

・割り込み

level	device	level2	vector	factor
7	NMI	---	$1f	INTERRUPT スイッチ(オートベクタ)
6	MFP	15	$4f	CRTC H-SYNC(水平同期信号)
	│	14	$4e	CRTC 指定ラスタ走査
	│	13	$4d	Timer-A(V-DISP を入力とするタイマ)
	│	12	$4c	キーデータ受信
	│	11	$4b	〃	  受信エラー
	│	10	$4a	〃	  送信
	│	 9	$49	〃	  送信エラー
	│	 8	---	USART シリアルクロック発生
	│	 7	$47	RTC 1Hz クロック
	│	 6	$46	CRTC V-DISP(垂直表示信号)
	│	 5	$45	Timer-C(8bit 汎用タイマ)
	│	 4	$44	Timer-D(〃)
	│	 3	$43	OPM
	│	 2	$42	本体全面スイッチ  ON/OFF 検出
	│	 1	$41	拡張 I/O スロット 〃
	└	 0	$40	RTC アラーム      〃
5	SCC	---	$50-$5f	RS-232C/マウスデータ受信
4	---	---	---	拡張 I/O スロット用
3	DMAC	---	$64-$6b	DMA 転送終了/エラー
2	---	---	---	拡張 I/O スロット用
1	IOC	 3	$60	FDC
	│	 3	$61	FD
	│	 1	$62	HD
	└	 0	$63	プリンタ(BUSY 信号)

==============================================================================

・Xファイルヘッダの構造

offset	size
$00	2.b	識別子 'HU'(0x48 0x55)
$02	1.b	予約(0)
$03	1.b	ロードモード(0:通常 1:最小ブロック 2:高位アドレス)
$04	1.l	ベースアドレス
$08	1.l	実行開始アドレス
$0c	1.l	テキストセクションサイズ
$10	1.l	データセクションサイズ
$14	1.l	ブロックストレージセクションサイズ(.comm .stack を含む)
$18	1.l	再配置情報サイズ
$1c	1.l	シンボルテーブルサイズ
$20	1.l	SCD 行番号テーブルサイズ
$24	1.l	SCD シンボルテーブルサイズ
$28	1.l	SCD 文字列テーブルサイズ
$2c	4.l	予約(0)
$3c	1.l	バインドされたモジュールリストのファイル先頭からの位置

計 64($40)バイト

  実行ファイルは、ベースアドレスにロードして再配置処理が行われた状態で格納され
ている. よって、実際のロードアドレスがベースアドレスと等しければ再配置は行わな
くて良い. また両者が等しくない場合は、その差を足す.

・再配置処理

  再配置は以下の手続きを再配置情報のサイズ分繰り返す事によって行われる.

1) プログラム先頭アドレスを A、ベースアドレスを B とする.
2) A から B を引き、これを C とする.
3) 再配置情報から 1 ワード収得し、D とする.
4) D が 1 の場合、再配置情報から 1 ロングワード収得し、新しい D とする.
5) D の最下位ビットが 0(偶数)の場合は、A に D を加算し、A のアドレスからの
   1 ロングワードに C を足す.
6) D の最下位ビットが 1(奇数)の場合は、A に D-1 を加算し、A のアドレスからの
   1 ワードに C を足す(ワードサイズの再配置は通常使われる事はない.).

・Zファイルヘッダの構造

offset	size
$00	1.w	第一識別子 $601a
$02	1.l	テキストセクションサイズ
$06	1.l	データセクションサイズ
$0a	1.l	ブロックストレージセクションサイズ(.comm .stack を含む)
$0e	8.b	予約(0)
$16	1.l	実行開始アドレス
$1a	1.w	第二識別子 $ffff

計 28($1c)バイト

・バインドリストの構造

offset	size
$00	8.b	ファイル名($e5 で始まるファイル名は $05 とする. 残りはスペース
		で埋める.)
$08	3.b	拡張子(残りはスペースで埋める)
$0b	1.b	属性(%XLAD_VSHR. ただし ASHR 以外を指定しても当然エラーになる)
$0c	10.b	8 バイト以上のファイル名の残り(残りは $00 で埋める)
$16	1.w	最終変更時刻
		%mmmS_SSSS_HHHH_HMMM(H:時 Mm:分 S:秒)
$18	1.w	最終変更年月日
		%mmmD_DDDD_YYYY_YYYM(Y:年 Mm:月 D:日)
$1a	1.b	特殊属性の変更禁止フラグ┐BIND.X で使用
$1b	1.b	特殊属性(%00A0_0SHR)	┘
$1c	1.l	バインドファイル先頭からのオフセット

計 32($20)バイト

  ディレクトリエントリとほぼ同じだが、最終変更時間の上下バイトは逆転しているの
で注意すること.
  リストの終了条件はファイルの残りが 0 byte で終わり、32bytes以上で続きがあり、
それ以外(1~31bytes)は異常な構造となる.

==============================================================================

・ディスクマップ

	2HD

sector
     0		IPL
 1~ 2		第一 FAT
 3~ 4		第二 FAT(未使用)
 5~10		ルートディレクトリ(6 セクタ)
11~1231	データエリア

	ハードディスク

sector
     0		HD IPL メニュープログラム
     4		管理情報用システム領域
 5~20		空き
21~24		HD IPL
25~??		第一 FAT
??~??		第二 FAT(未使用)
??~??		ルートディレクトリ(16 セクタ)
??~??		データエリア
??~??		管理外エリア(代替トラック用)

2HD IPL
	  $2000 から動くプログラムで、起動したドライブの 5 レコード目(ルートデ
	ィレクトリの先頭 32 個分)から HUMAN.SYS を探し、それが X 形式の $6800
	から動く実行ファイルであれば、それをロードして実行する.
	  この IPL はディスクフォーマット時に書き込まれる.
	  18~20 バイト目に全セクタ数(下位から上位の順)、21 バイト目にメディア
	タイプが書き込まれている.

第一 FAT
	  FAT(File Allocation Table)とは、ファイルのディスク上のつながりを管理
	するもので、ファイル 1024 バイトに対し一個のファイルが使われる. ただし、
	FAT が先に確保される関係で、0 バイトのファイルでも一個の FAT が使われ
	る. 以後 1024 バイト単位で一個ずつ増える.
	  FAT 領域の先頭二個分はシステムで決められており、2HD の場合は $feffff
	の 3 バイト、ハードディスクの場合は領域確保の容量により 4MB までは
	$f8ffff の 3 バイト、5MB 以上は $f8ffffff の 4 バイトになる.
	FAT には 1.5byteFAT と 2byteFAT があり、4MB までは 1.5byteFAT、5MB か
	ら 2byteFAT となる.

	1.5byteFAT	fe ff ff ML lH hm ・・・・		HML hml の順に読む
	  2byteFAT	f8 ff ff ff AB CD ab cd ・・・・	ABCD abcd 〃

┌─────┬──────┬──────────┐
│1.5byteFAT│	2byteFAT  │	内	容	│
├─────┼──────┼──────────┤
│	$000│	     $0000│未使用エリア	│
│$002~$ff6│$0002~$fff6│次の FAT 番号	│
│	$ff7│	     $fff7│使用不能クラスタ	│
│$ff8~$fff│$fff8~$ffff│このクラスタで終わり│
└─────┴──────┴──────────┘

	FAT 終端は通常 $fff、$ffff を使用する(それ以外は対応していない).

ディレクトリエントリ

offset	size
$00	8.b	ファイル名(先頭一文字が $e5 なら消されたファイル、$00 ならディ
		レクトリの終わり. $e5 で始まるファイル名は $05 とする. 残りは
		スペースで埋める.)
$08	3.b	拡張子(残りはスペースで埋める)
$0b	1.b	属性(%XLAD_VSHR)
$0c	10.b	8 バイト以上のファイル名の残り(残りは $00 で埋める)
$16	1.w	最終変更時刻
		%mmmS_SSSS_HHHH_HMMM(H:時 Mm:分 S:秒)
$18	1.w	最終変更年月日
		%mmmD_DDDD_YYYY_YYYM(Y:年 Mm:月 D:日)
$1a	1.w	最初の FAT 番号
$1c	1.l	ファイルサイズ

注意	16~$1c のワード/ロングワードデータのバイトの並びは little-endian.

HD IPL メニュープログラム
	  $2000 から動作し、HD を複数のシステムで使用する場合どのシステムを起
	動するかを選択するプログラム.
	  単体のシステムで全ての領域を確保している場合は、単に HD IPL を $2400
	にロードして実行するだけ.
	  この IPL はディスクフォーマット時に書き込まれる.

管理情報用システム領域
	  HD 上に複数のシステムを確保する場合の情報を書き込む.
	管理情報は 16 バイトずつ 16 のブロックに分けられ、先頭の 1 ブロックに
	はドライブの情報、残りの 15 ブロックにはシステムの情報が書かれる.

	(1)先頭のドライブ情報ブロック
	4.b	'X68K'
	1.l	最大レコード番号
	1.l	代替トラックの先頭のレコード番号
	1.l	シッピングゾーンのレコード番号
	(2)その他の 15 ブロック
	8.b	システム名
	1.l	先頭レコード番号
	1.l	レコード長

	  先頭レコードの最上位 8 ビットが 0 でない場合は、現在無効な領域となる.
	データは FORMAT の初期化で書き込まれる.
	  先頭の 16 バイト以外は、FORMAT の領域確保/選択/解放で書き換えられる.

(参考)ドライブ情報ブロックの値
容量	最大レコード	代替レコード	HD OFF レコード
10MB	$09f54		$09f54		$0af50
20MB	$139c8		$139c8		$15660
40MB	$27930		$27930		$2acc0

HD IPL
	  $2400 から動作し、起動したドライブのルートディレクトリの先頭 32 個の
	中から HUMAN.SYS を探し、それが X 形式の $6800 から動く実行ファイルで
	あれば、それをロードして実行する. ただしこのファイルは連続セクタにコピ
	ーされていなければならない.

管理外エリア(代替トラック用)
	  通常は使用されない. 不良トラックの代替用である.

==============================================================================

・システムファイル

タイトル表示ファイル
	  Human68k は起動時に TITLE.SYS というファイルがあると、標準のタイトル
	を出さずに、TITLE.SYS に従ったタイトルを表示する.
	  TITLE.SYS は $10044 バイト以下のファイルで、テキストタイトルとビット
	イメージタイトルの二種類がある.
	  テキストタイトルはコマンドモード用に用意されたもので、タイトル表示フ
	ァイルの文字列を表示する. 制御コード、エスケープシーケンスも使用可能で
	あるが、先頭 1 バイトが 0 であってはいけない.
	  ビットイメージタイトルはビジュアル用で、ビットイメージデータを表示す
	る. 先頭 1 バイトが 0 でなければならない. 文字属性が 0 の場合はカーソ
	ル及びファンクションキーが消去される.

offset	size
 0	1.b	0(固定)
 1	1.b	文字属性
 2	1.b	塗りつぶすテキスト画面の指定(0:塗りつぶす面はない
		1:テキスト 2:テキスト1 4:テキスト2 8:テキスト3)
 3	1.b	表示するテキスト画面の指定(1,2,4,8:同上)
 4	1.w	テキストカラー 4~ 7 のパレット
 6	1.w	〃	       8~15 〃
 8	52.b	シェルの指定("SHELL ="の右辺),0
60	1.w	表示開始X座標
62	1.w	〃	Y座標
64	1.w	ビットイメージデータのX方向のドット数
66	1.w	〃		      Y〃
68	???	ビットイメージデータ

外字ファイル
	  Human68k は起動時に USKCG.SYS というファイルがあると、外字ファイルと
	して OS 内の外字エリアに読み込む.
	  USKCG.SYS は $10000 バイト以下のファイルで、その作成/修正は USKCGM.X
	で行なう.
	  全角の漢字コードは JIS,S-JIS のどちらでもかまわないが、JIS 漢字コー
	ドは low/high が逆になっているので注意すること.

offset	size
0	34.b	未使用
34	 1.w	漢字コード
36	16.w	フォントデータ
	 1.w	半角外字 S-JIS コード
	16.b	フォントデータ
	…
	 1.w	16x16 から 24x24 への切り換えコード($ffff)
	 1.w	漢字コード
	72.b	フォントデータ
	 1.w	半角外字 S-JIS コード
	48.b	フォントデータ

キー定義ファイル
	  Human68k は起動時に KEY.SYS というファイルがあると、ファンクションキ
	ーのデータとして定義する.
	  KEY.SYS は 712 バイトのファイルで、KEY.X によって作成/変更する.
	  先頭が $fe で始まるキーは、$fe 以降 8 文字は表示用として使われ、9 文
	字目からが本当のキーコードとなる. 文字列は必ず 0 で終わらなければなら
	ない.

offset	size
  0	32.b*10	F0~F9
320	32.b*10	Shift+F0~F9
640	6.b	ROLL UP
646	6.b	ROLL DOWN
652	6.b	INS
658	6.b	DEL
664	6.b	上向きカーソルキー
670	6.b	左〃
676	6.b	右〃
682	6.b	下〃
688	6.b	CLR
694	6.b	HELP
700	6.b	HOME
706	6.b	UNDO

ビープ音声ファイル
	  Human68k は CONFIG.SYS で "BELL = BEEP.SYS" と指定すると、BEEP.SYS
	を ADPCM のデータファイルとして、OS 内に読み込む.
	  データはサンプリング周波数 15.6KHz で $ffff バイト以内の、ADPCM から
	読み込んだもの.

==============================================================================

・ASCII 制御コード

$00	NUL	空白		    :Null
$01	SOH	ヘディング開始	TC 1:Start of Heading
$02	STX	テキスト開始	TC 2:Start of Text
$03	ETX	テキスト終結	TC 3:End of Text
$04	EOT	伝送終了	TC 4:End of Transmission
$05	ENQ	問い合わせ	TC 5:Enquiry
$06	ACK	肯定応答	TC 6:Acknowledge
$07	BEL	警告ベル	    :Bell
$08	BS	後退		FE 0:Back Space
$09	HT	水平タブ	FE 1:Horizontal Tabulation
$0a	LF	改行		FE 2:Line Feed
$0b	VT	垂直タブ	FE 3:Vertical   Tabulation
$0c	FF	書式送り	FE 4:From Feed
$0d	CR	復帰		FE 5:Carriage Return
$0e	SO	シフトアウト	    :Shift Out
$0f	SI	シフトイン	    :Shift In
$10	DLE	伝送制御拡張	TC 7:Data Link Escape
$11	DC1	装置制御 1	DC 1:Device Control 1
$12	DC2	装置制御 2	DC 2:〃		    2
$13	DC3	装置制御 3	DC 3:〃		    3
$14	DC4	装置制御 4	DC 4:〃		    4
$15	NAK	否定応答	TC 8:Negative Acknowledge
$16	SYN	同期信号	TC 9:Synchronous idle
$17	ETB	伝送ブロック終結	TC10:End of Transmission Bock
$18	CAN	取り消し	    :Cancel
$19	EM	媒体終端	    :End of Medium
$1a	SUB	置換キャラクタ	    :Substitute Character
$1b	ESC	拡張		    :Escape
$1c	FS(→)	ファイル  分離キャラクタ	IS 4:File Separator
$1d	GS(←)	グル-プ分離キャラクタ	IS 3:Group	〃
$1e	RS(↑)	レコ-ド 分離キャラクタ	IS 2:Record	〃
$1f	US(↓)	ユニット  分離キャラクタ	IS 1:Unit	〃
$20	SPC	間隔		    :Space
$7f	DEL	削除		    :Delete

TC = 伝送制御キャラクタ		Transmission Control Characters
FE = 書式制御キャラクタ		Format Effectors
DC = 装置制御キャラクタ		Device Control Characters
IS = 情報分離キャラクタ		Infomation Separators

・IOCS で有効な ASCII 制御コード

$07	BEL	ベルを鳴らす
$08	BS	1 文字左に移動
$09	HT	次のタブ位置に移動(最大タブ位置より右側で 1 行下の 1 桁目に移動)
$0a	LF	1 行下に移動(最終行で 1 行繰り上がる)
$0b	VT	1 行上に移動(先頭行の時は無効)
$0c	FF	1 文字右に移動
$0d	CR	左端に移動
$1a	SUB	画面消去後先頭行左端に移動
$1b	ESC	エスケープシーケンスの開始
$1e	RS	先頭行左端に移動

==============================================================================

・エスケープシーケンス

[pl;pcH	移動(pl=0 または省略時 pl=1、pl>最終行の時 pl=最終行)
		    (pc=0 または省略時 pc=1、pc>最終桁の時 pc=最終桁)
[pl;pcf	同上
=lc		同上(l,c は行・桁位置に $20 を加算した文字で、省略不可)
[pnA		pn   行上に移動(pn=0 または省略時 pn=1)
[pnB		pn   行下〃
[pnC		pn 文字右〃
[pnD		pn 文字左〃
[0J		カーソル位置から最終行最終桁まで消去(0 は省略可能)
[1J		先頭行左端からカーソル位置まで消去
[2J		画面消去後先頭行左端に移動
*		同上
[0K		カーソル位置から最終桁まで消去(0 は省略可能)
[1K		左端からカーソル位置まで消去
[2K		カーソル行消去
[pnM		カーソル行から下に pn 行削除(pn=0 または省略時 pn=1)
		削除した行より後の行が繰り上がり、繰り上がった行の先頭行左端に移動
[pnL		カーソル行から下に pn 行空行を挿入(pn=0 または省略時 pn=1)
		カーソル行より下の行が繰り下がり、挿入された行の先頭行左端に移動
D		1 行下      に移動(最終行で 1 行繰り上がる)
E		1 行下の左端〃
M		1 行上に移動(先頭行で 1 行繰り下がる)
[s		カーソル位置と文字表示属性を保存する
[u		保存したカーソル位置と文字表示属性に戻す
[6n		実行後コンソール入力の度にカーソル位置を ESC[pl;pcR の形で通知する
[>5l	カーソルを表示する
[>5h	カーソルを消去する
[>1l	ファンクションキー行を消去・解放し、先頭行左端に移動
[>1h	〃		      表示・占有し、〃
[psm		文字表示属性を設定する(ps は ; で区切って複数指定可能、省略時 ps=0)
		ps	機能
		0	初期設定に戻す
		1	強調トグル(30~33,40~43 と 34~37,44~47 を交互に変更する)
		7	逆転トグル(30~33,34~37 と 40~43,44~47 〃)
		30~33	黒,水色,黄色,白
		34~37	〃		    強調
		40~43	〃		逆転
		44~47	〃		逆転強調

ROM IOCS version 1.3 / IOCS.X・HIOCS.X 組み込み時:
[?4h	スムーススクロールにする
[?4l	ジャンプ〃
[pnP		カーソル位置から pn 文字削除
[pnX		カーソル位置から pn 文字属性オフにして消去
[pn@		カーソル位置に pn 個の空白文字を属性オフの状態で挿入

CONDRV.SYS 組み込み時:
0		バックスクロールバッファへの取り込みを中断する
1		〃				      再開する

CONDRV.SYS + HIOCS PLUS 組み込み時:
0		上記参照
1		〃
2		システムステータスの表示を禁止する
3		〃			  許可する

注意	カーソル移動シーケンスで、移動できない位置を指定した場合は移動しない.

==============================================================================