	.include	t00iocs.equ
	.include	t01dos.equ
	.include	t02const.equ

	.cpu	68060

;----------------------------------------------------------------
;デバイスヘッダ
deviceHeader::
	.dc.l	-1
	.dc.w	$0000
	.dc.l	strategyRoutine
	.dc.l	interruptRoutine
	.dc.b	1,'RAMDISK'

requestHeader:
	.ds.l	1

deviceJumpTable::
	.dc.l	deviceInitialize	;初期化
	.dc.l	deviceCheck		;メディアチェック
	.dc.l	noError
	.dc.l	commandError
	.dc.l	deviceInput		;入力
	.dc.l	deviceSense		;状態取得
	.dc.l	noError
	.dc.l	noError
	.dc.l	deviceOutput		;出力
	.dc.l	deviceOutput		;出力
	.dc.l	noError
	.dc.l	noError
	.dc.l	commandError

;ストラテジルーチン
strategyRoutine:
	move.l	a5,requestHeader
	rts

;インタラプトルーチン
interruptRoutine:
	move.l	a5,-(sp)
	move.l	d0,-(sp)
	movea.l	requestHeader,a5
	moveq.l	#0,d0
	move.b	(2,a5),d0		;コマンドコード
	lsl.l	#2,d0
	pea.l	(@f,pc)
	move.l	(deviceJumpTable,pc,d0.l),-(sp)
	rts				;コマンドの処理を呼ぶ
@@:	move.b	d0,(3,a5)		;エラーコード(下位)
	lsr.w	#8,d0
	move.b	d0,(4,a5)		;エラーコード(上位)
	move.l	(sp)+,d0
	movea.l	(sp)+,a5
	rts

noError:
	moveq.l	#0,d0
	rts

commandError:
	move.w	#$5003,d0
	rts

;----------------------------------------------------------------
;ベクタテーブル
	.align	4,$2048
vectorTable::
vectorInfoAccessError::	.dc.l	ACCESS_ERROR
vectorOldAccessError::	.dc.l	0
vectorAccessError::	.dc.l	accessError

vectorInfoPRIVILEGE::	.dc.l	PRIVILEGE
vectorOldPRIVILEGE::	.dc.l	0
vectorPRIVILEGE::	.dc.l	_060_fpsp_fline		;privilegeViolation

vectorInfoFLINE::	.dc.l	FLINE
vectorOldFLINE::	.dc.l	0
vectorFLINE::		.dc.l	_060_fpsp_fline

vectorInfoBSUN::	.dc.l	BSUN
vectorOldBSUN::		.dc.l	0
vectorBSUN::		.dc.l	_060_real_bsun

vectorInfoINEX::	.dc.l	INEX
vectorOldINEX::		.dc.l	0
vectorINEX::		.dc.l	_fpsp_inex
				;_060FPSP_TABLE+$000019D4
				;_060FPSP_TABLE+$28
				;$80000000+_060FPSP_TABLE+$28+2

vectorInfoDZ::		.dc.l	DZ
vectorOldDZ::		.dc.l	0
vectorDZ::		.dc.l	_fpsp_dz
				;_060FPSP_TABLE+$00001B32
				;_060FPSP_TABLE+$20
				;$80000000+_060FPSP_TABLE+$20+2

vectorInfoUNFL::	.dc.l	UNFL
vectorOldUNFL::		.dc.l	0
vectorUNFL::		.dc.l	_fpsp_unfl
				;_060FPSP_TABLE+$0000048A
				;_060FPSP_TABLE+$18
				;$80000000+_060FPSP_TABLE+$18+2

vectorInfoOPERR::	.dc.l	OPERR
vectorOldOPERR::	.dc.l	0
vectorOPERR::		.dc.l	_fpsp_operr
				;_060FPSP_TABLE+$000015FE
				;_060FPSP_TABLE+$08
				;$80000000+_060FPSP_TABLE+$08+2

vectorInfoOVFL::	.dc.l	OVFL
vectorOldOVFL::		.dc.l	0
vectorOVFL::		.dc.l	_fpsp_ovfl
				;_060FPSP_TABLE+$000002C8
				;_060FPSP_TABLE+$10
				;$80000000+_060FPSP_TABLE+$10+2

vectorInfoSNAN::	.dc.l	SNAN
vectorOldSNAN::		.dc.l	0
vectorSNAN::		.dc.l	_fpsp_snan
				;_060FPSP_TABLE+$00001742
				;_060FPSP_TABLE+$00
				;$80000000+_060FPSP_TABLE+$00+2

vectorInfoUNSUPP::	.dc.l	UNSUPP
vectorOldUNSUPP::	.dc.l	0
vectorUNSUPP::		.dc.l	_fpsp_unsupp
				;_060FPSP_TABLE+$00000668
				;_060FPSP_TABLE+$38
				;$80000000+_060FPSP_TABLE+$38+2

vectorInfoEFFADD::	.dc.l	EFFADD
vectorOldEFFADD::	.dc.l	0
vectorEFFADD::		.dc.l	_fpsp_effadd
				;_060FPSP_TABLE+$0000106E
				;_060FPSP_TABLE+$40
				;$80000000+_060FPSP_TABLE+$40+2

vectorInfoUNINT::	.dc.l	UNINT
vectorOldUNINT::	.dc.l	0
vectorUNINT::		.dc.l	_060_isp_unint

vectorInfoIocsAdpcmout::	.dc.l	$0400+_ADPCMOUT*4
vectorOldIocsAdpcmout::	.dc.l	0
vectorIocsAdpcmout::	.dc.l	iocsAdpcmout

vectorInfoIocsAdpcminp::	.dc.l	$0400+_ADPCMINP*4
vectorOldIocsAdpcminp::	.dc.l	0
vectorIocsAdpcminp::	.dc.l	iocsAdpcminp

vectorInfoIocsAdpcmaot::	.dc.l	$0400+_ADPCMAOT*4
vectorOldIocsAdpcmaot::	.dc.l	0
vectorIocsAdpcmaot::	.dc.l	iocsAdpcmaot

vectorInfoIocsAdpcmain::	.dc.l	$0400+_ADPCMAIN*4
vectorOldIocsAdpcmain::	.dc.l	0
vectorIocsAdpcmain::	.dc.l	iocsAdpcmain

vectorInfoIocsAdpcmlot::	.dc.l	$0400+_ADPCMLOT*4
vectorOldIocsAdpcmlot::	.dc.l	0
vectorIocsAdpcmlot::	.dc.l	iocsAdpcmlot

vectorInfoIocsAdpcmlin::	.dc.l	$0400+_ADPCMLIN*4
vectorOldIocsAdpcmlin::	.dc.l	0
vectorIocsAdpcmlin::	.dc.l	iocsAdpcmlin

vectorInfoIocsAdpcmsns::	.dc.l	$0400+_ADPCMSNS*4
vectorOldIocsAdpcmsns::	.dc.l	0
vectorIocsAdpcmsns::	.dc.l	iocsAdpcmsns

vectorInfoIocsAdpcmmod::	.dc.l	$0400+_ADPCMMOD*4
vectorOldIocsAdpcmmod::	.dc.l	0
vectorIocsAdpcmmod::	.dc.l	iocsAdpcmmod

vectorInfoIocsDmamove::	.dc.l	$0400+_DMAMOVE*4
vectorOldIocsDmamove::	.dc.l	0
vectorIocsDmamove::	.dc.l	iocsDmamove

vectorInfoIocsDmamovA::	.dc.l	$0400+_DMAMOV_A*4
vectorOldIocsDmamovA::	.dc.l	0
vectorIocsDmamovA::	.dc.l	iocsDmamovA

vectorInfoIocsDmamovL::	.dc.l	$0400+_DMAMOV_L*4
vectorOldIocsDmamovL::	.dc.l	0
vectorIocsDmamovL::	.dc.l	iocsDmamovL

vectorInfoIocsDmamode::	.dc.l	$0400+_DMAMODE*4
vectorOldIocsDmamode::	.dc.l	0
vectorIocsDmamode::	.dc.l	iocsDmamode

vectorInfoIocsSysStat::	.dc.l	$0400+_SYS_STAT*4
vectorOldIocsSysStat::	.dc.l	0
vectorIocsSysStat::	.dc.l	iocsSysStat

vectorInfoIocsScsidrv::	.dc.l	$0400+_SCSIDRV*4
vectorOldIocsScsidrv::	.dc.l	0
vectorIocsScsidrv::	.dc.l	iocsScsidrv

vectorInfoIocsPrnintst::	.dc.l	$0400+_PRNINTST*4
vectorOldIocsPrnintst::	.dc.l	0
vectorIocsPrnintst::	.dc.l	iocsPrnintst

vectorInfoPrnint::	.dc.l	PRNINT
vectorOldPrnint::	.dc.l	0
vectorPrnint::		.dc.l	((PRNINT>>2)<<24)+defaultPrnint

vectorInfoIocsHimem::	.dc.l	$0400+_HIMEM*4
vectorOldIocsHimem::	.dc.l	0
vectorIocsHimem::	.dc.l	iocsHimem

vectorInfoDosExit::	.dc.l	$1800+(_EXIT-$FF00)*4
vectorOldDosExit::	.dc.l	0
vectorDosExit::		.dc.l	dosExit

vectorInfoDosKeeppr::	.dc.l	$1800+(_KEEPPR-$FF00)*4
vectorOldDosKeeppr::	.dc.l	0
vectorDosKeeppr::	.dc.l	dosKeeppr

vectorInfoDosMalloc::	.dc.l	$1800+(_MALLOC-$FF00)*4
vectorOldDosMalloc::	.dc.l	0
vectorDosMalloc::	.dc.l	dosMalloc

vectorInfoDosMfree::	.dc.l	$1800+(_MFREE-$FF00)*4
vectorOldDosMfree::	.dc.l	0
vectorDosMfree::	.dc.l	dosMfree

vectorInfoDosSetblock::	.dc.l	$1800+(_SETBLOCK-$FF00)*4
vectorOldDosSetblock::	.dc.l	0
vectorDosSetblock::	.dc.l	dosSetblock

vectorInfoDosExec::	.dc.l	$1800+(_EXEC-$FF00)*4
vectorOldDosExec::	.dc.l	0
vectorDosExec::		.dc.l	dosExec

vectorInfoDosExit2::	.dc.l	$1800+(_EXIT2-$FF00)*4
vectorOldDosExit2::	.dc.l	0
vectorDosExit2::	.dc.l	dosExit2

vectorInfoDos0Malloc2::	.dc.l	$1800+(~0~_MALLOC2-$FF00)*4
vectorOldDos0Malloc2::	.dc.l	0
vectorDos0Malloc2::	.dc.l	dosMalloc2

vectorInfoDos0Malloc3::	.dc.l	$1800+(~0~_MALLOC3-$FF00)*4
vectorOldDos0Malloc3::	.dc.l	0
vectorDos0Malloc3::	.dc.l	dosMalloc3

vectorInfoDos0Setblock2::	.dc.l	$1800+(~0~_SETBLOCK2-$FF00)*4
vectorOldDos0Setblock2::	.dc.l	0
vectorDos0SetBlock2::	.dc.l	dosSetblock2

vectorInfoDos0Malloc4::	.dc.l	$1800+(~0~_MALLOC4-$FF00)*4
vectorOldDos0Malloc4::	.dc.l	0
vectorDos0Malloc4::	.dc.l	dosMalloc4

vectorInfoDos0SMalloc2::	.dc.l	$1800+(~0~_S_MALLOC2-$FF00)*4
vectorOldDos0SMalloc2::	.dc.l	0
vectorDos0SMalloc2::	.dc.l	dosSMalloc2

vectorInfoDos0SMalloc::	.dc.l	$1800+(~0~_S_MALLOC-$FF00)*4
vectorOldDos0SMalloc::	.dc.l	0
vectorDos0SMalloc::	.dc.l	dosSMalloc

vectorInfoDos0SMfree::	.dc.l	$1800+(~0~_S_MFREE-$FF00)*4
vectorOldDos0SMfree::	.dc.l	0
vectorDos0SMfree::	.dc.l	dosSMfree

vectorInfoDos0SProcess::	.dc.l	$1800+(~0~_S_PROCESS-$FF00)*4
vectorOldDos0SProcess::	.dc.l	0
vectorDos0SProcess::	.dc.l	dosSProcess

vectorInfoDosMalloc2::	.dc.l	$1800+(_MALLOC2-$FF00)*4
vectorOldDosMalloc2::	.dc.l	0
vectorDosMalloc2::	.dc.l	dosMalloc2

vectorInfoDosMalloc3::	.dc.l	$1800+(_MALLOC3-$FF00)*4
vectorOldDosMalloc3::	.dc.l	0
vectorDosMalloc3::	.dc.l	dosMalloc3

vectorInfoDosSetblock2::	.dc.l	$1800+(_SETBLOCK2-$FF00)*4
vectorOldDosSetblock2::	.dc.l	0
vectorDosSetBlock2::	.dc.l	dosSetblock2

vectorInfoDosMalloc4::	.dc.l	$1800+(_MALLOC4-$FF00)*4
vectorOldDosMalloc4::	.dc.l	0
vectorDosMalloc4::	.dc.l	dosMalloc4

vectorInfoDosSMalloc2::	.dc.l	$1800+(_S_MALLOC2-$FF00)*4
vectorOldDosSMalloc2::	.dc.l	0
vectorDosSMalloc2::	.dc.l	dosSMalloc2

vectorInfoDosSMalloc::	.dc.l	$1800+(_S_MALLOC-$FF00)*4
vectorOldDosSMalloc::	.dc.l	0
vectorDosSMalloc::	.dc.l	dosSMalloc

vectorInfoDosSMfree::	.dc.l	$1800+(_S_MFREE-$FF00)*4
vectorOldDosSMfree::	.dc.l	0
vectorDosSMfree::	.dc.l	dosSMfree

vectorInfoDosSProcess::	.dc.l	$1800+(_S_PROCESS-$FF00)*4
vectorOldDosSProcess::	.dc.l	0
vectorDosSProcess::	.dc.l	dosSProcess

vectorInfoDosOpenPr::	.dc.l	$1800+(_OPEN_PR-$FF00)*4
vectorOldDosOpenPr::	.dc.l	0
vectorDosOpenPr::	.dc.l	dosOpenPr

vectorInfoDosKillPr::	.dc.l	$1800+(_KILL_PR-$FF00)*4
vectorOldDosKillPr::	.dc.l	0
vectorDosKillPr::	.dc.l	dosKillPr

vectorInfoDosChangePr::	.dc.l	$1800+(_CHANGE_PR-$FF00)*4
vectorOldDosChangePr::	.dc.l	0
vectorDosChangePr::	.dc.l	dosChangePr

vectorInfoHumanTrap10::	.dc.l	$1C6A
vectorOldHumanTrap10::	.dc.l	0
vectorHumanTrap10::	.dc.l	humanTrap10

			.dc.l	0


;----------------------------------------------------------------
;
;	管理領域の範囲
;
;----------------------------------------------------------------
	.align	4,$2048
mainLowerStart::
	.dc.l	0
mainLowerEnd::
	.dc.l	0
mainUpperStart::
	.dc.l	0
mainUpperEnd::
	.dc.l	0
localLowerStart::
	.dc.l	0
localLowerEnd::
	.dc.l	0
localUpperStart::
	.dc.l	0
localUpperEnd::
	.dc.l	0

;----------------------------------------------------------------
;
;	バスエラーチェックルーチンのワーク
;
;----------------------------------------------------------------
	.align	4,$2048
dosBusErrVbr::
	.dc.l	0			;バスエラーチェック用の仮のベクタテーブルのアドレス
dosBusErrSsp::
	.dc.l	0			;バスエラーチェック用の仮のスーパーバイザスタック

;----------------------------------------------------------------
;
;	各種フラグ,カウンタ
;
;----------------------------------------------------------------
localRomArea::
	.dc.b	0			;-1=ROMをローカルメモリにコピーして使う
localSystemArea::
	.dc.b	0			;-1=ベクタからHumanまでとドライバ本体を,
					;ローカルメモリにコピーして使う
localAreaDescriptor::
	.dc.b	0			;-1=デスクリプタの領域をローカルメモリに配置する
patchIocsScsi::
	.dc.b	0			;-1=_SCSIDRVにパッチをあてる
forceSoftScsi::
	.dc.b	0			;-1=SCSIを強制的にソフト転送にする
patchDevice::
	.dc.b	0			;-1=デバイスドライバのアクセスにパッチをあてる
deviceCacheNoPush::
	.dc.b	0			;-1=初期化以外のデバイス呼び出しでキャッシュプッシュしない
useIocsHimem::
	.dc.b	-1			;-1=_HIMEMを使う
unitCounter::
	.dc.b	0			;RAMDISKのユニット数
useExtendedMode::
	.dc.b	0			;-1=拡張モードを使う
extendedMode::
	.dc.b	0			;-1=現在拡張モードになっている
useJointMode::
	.dc.b	0			;-1=結合モードを使う
jointMode::
	.dc.b	0			;-1=現在結合モードになっている
mainMemoryCacheMode::
	.dc.b	0			;メインメモリのキャッシュモード
localMemoryCacheMode::
	.dc.b	0			;ローカルメモリのキャッシュモード
softwareIocsDma::
	.dc.b	0			;-1=IOCSによるDMA転送をソフト転送にする
patchIocsAdpcm::
	.dc.b	0			;-1=ADPCM関係のIOCSコールにパッチをあてる
forceNoSimm::
	.dc.b	0			;-1=SIMMが装着されていても使わないことにする
noTranslation::
	.dc.b	0			;-1=アドレス変換を行わない

	.even
scsiRevisionCode::
	.dc.w	0			;SCSI _S_REVISIONの結果
					;$000A以上はSRAMのソフト転送フラグに対応している

;----------------------------------------------------------------
;
;	ローカルメモリ上に置くROM領域
;
;----------------------------------------------------------------
	.align	4,$2048
localRomStart::
	.dc.l	0
localRomEnd::
	.dc.l	0

;----------------------------------------------------------------
;
;	ローカルメモリ上に置くシステム領域
;
;----------------------------------------------------------------
	.align	4,$2048
localSystemStart::
	.dc.l	0
localSystemEnd::
	.dc.l	0

;----------------------------------------------------------------
;
;	デスクリプタの領域
;
;----------------------------------------------------------------
	.align	4,$2048
;ページインデックスフィールドのビット数に応じて変化する値
pageIndexWidth::			;ページインデックスフィールドのビット数(5〜6)
	.dc.l	PAGE_INDEX_WIDTH	;	5
pageIndexSize::				;ページテーブル1個に含まれるページデスクリプタの個数
	.dc.l	PAGE_INDEX_SIZE		;	32
pageIndexMask::				;ページインデックスフィールドのマスク
	.dc.l	PAGE_INDEX_MASK		;	31

pageOffsetWidth::			;ページ内オフセットのビット数(12〜13)
	.dc.l	PAGE_OFFSET_WIDTH	;	13=8KB/page
pageOffsetSize::			;1ページのサイズ
	.dc.l	PAGE_OFFSET_SIZE	;	$00002000=8KB/page
pageOffsetMask::			;ページ内オフセットのマスク
	.dc.l	PAGE_OFFSET_MASK	;	$00001FFF

pageMask::				;ページの先頭アドレスのマスク
	.dc.l	PAGE_MASK		;	$3FFFE000

pageDescSize::				;ページテーブル1個のサイズ
	.dc.l	PAGE_DESC_SIZE		;	$00000080
pageDescMask::				;ページテーブルの先頭のアドレスのマスク
	.dc.l	PAGE_DESC_MASK		;	$3FFFFF80

;デスクリプタの領域は常にmovesでアクセスされるので普段は見えなくてよい
descAreaStart::
	.dc.l	0			;デスクリプタの領域の先頭(ページの先頭)
descAreaEnd::
	.dc.l	0			;デスクリプタの領域の末尾+1(ページの末尾+1)
descAreaSize::
	.dc.l	0			;デスクリプタの領域のサイズ(ページサイズの倍数とは限らない)

;デスクリプタの領域
descHead::				;ルートデスクリプタの先頭
rootDescHead::				;デスクリプタの領域の先頭
	.dc.l	0
rootDescTail::				;ルートデスクリプタの末尾
pointerDescHead::			;ポインタデスクリプタの先頭
	.dc.l	0
pointerDescTail::			;ポインタデスクリプタの末尾（使用している部分の末尾,可変）
	.dc.l	0
pageDescHead::				;ページデスクリプタの先頭（使用している部分の先頭,可変）
	.dc.l	0
pageDescTail::				;ページデスクリプタの末尾
pointerCounterHead::			;ポインタデスクリプタテーブルの参照数カウンタテーブルの先頭
	.dc.l	0
pageCounterTail::			;ページデスクリプタテーブルの参照数カウンタテーブルの末尾
descTail::				;デスクリプタの領域の末尾
	.dc.l	0

;----------------------------------------------------------------
;
;	デバイスドライバの転送バッファ
;
;----------------------------------------------------------------
	.align	4,$2048
tempBufferStart::
	.dc.l	0			;転送バッファの先頭
tempBufferEnd::
	.dc.l	0			;転送バッファの末尾+1
tempBufferSize::
	.dc.l	0			;転送バッファのバイト数(1024の倍数)


;----------------------------------------------------------------
;
;	ADPCM関係のワーク
;
;----------------------------------------------------------------
	.align	4,$2048
adpcmBufferStart::
	.dc.l	0			;ADPCM転送バッファの先頭
adpcmBufferEnd::
	.dc.l	0			;ADPCM転送バッファの末尾
adpcmBufferSize::
	.dc.l	ADPCM_SPLIT_SIZE	;分割サイズ
adpcmLeftSize::
	.dc.l	0			;まだバッファにコピーしていないサイズ
adpcmDataPtr::
	.dc.l	0			;まだバッファにコピーしていないデータ
adpcmBufferPtr0::
	.dc.l	0			;バッファ0へのポインタ
adpcmBufferPtr1::
	.dc.l	0			;バッファ1へのポインタ

;----------------------------------------------------------------
;
;	ローカルメモリ
;
;----------------------------------------------------------------
	.align	4,$2048
localMemoryStart::
	.dc.l	0			;ローカルメモリの先頭
localMemoryEnd::
	.dc.l	0			;ローカルメモリの末尾+1
localMemorySize::
	.dc.l	0			;ローカルメモリのサイズ(0=存在しない)

himemAreaStart::
	.dc.l	0			;_HIMEMでアクセスする範囲の先頭
himemAreaEnd::
	.dc.l	0			;_HIMEMでアクセスする範囲の末尾+1
himemAreaSize::
	.dc.l	0			;_HIMEMでアクセスする範囲のサイズ

;----------------------------------------------------------------
;
;	拡張モード
;
;----------------------------------------------------------------
	.align	4,$2048
mainMemorySize::
	.dc.l	-1			;メインメモリのサイズ

;----------------------------------------------------------------
;
;	結合モード
;
;----------------------------------------------------------------
	.align	4,$2048
jointBlockHeader::
	.dc.l	0			;結合ブロックのヘッダ(0=拡張モード禁止)
jointBlockSize::
	.dc.l	DEFAULT_JOIN_SIZE	;結合ブロックのサイズ(ヘッダを含まない)

;----------------------------------------------------------------
;
;	スレッドの排他制御関係のワーク
;
;----------------------------------------------------------------
backgroundFlag::
	.ds.b	1		;-1=スレッド間の排他制御を行う

	.align	4,$2048
exclusiveStart::
	.ds.l	1		;メインスレッド以外の排他制御情報の先頭
				;メインスレッド以外の排他制御情報は,
				;1個xSize2バイトで($1C58.w).w個必要
exclusiveEnd::
	.ds.l	1		;メインスレッド以外の排他制御情報の末尾+1

;排他制御情報へのポインタのテーブル
;-1は排他制御情報が存在しない(初期化されていない)ことを示す
	.align	4,$2048
xTable::
	.dc.l	mainExclusive
	.dcb.l	32-1,-1

;メインスレッドの排他制御情報
mainExclusive::
	.ds.b	xSize		;ドライブ管理テーブルは既に存在するので不要

	.even
currentThreadId::
	.dc.w	0		;現在のスレッド番号

;----------------------------------------------------------------
;
;	ファイル情報
;
;----------------------------------------------------------------
	.align	4
fileInfoHeapStart::
	.ds.l	1		;ファイル情報の領域(ヒープ管理)の先頭
fileInfoHeapEnd::
	.ds.l	1		;ファイル情報の領域(ヒープ管理)の末尾
fileInfoHashTablePtr::
	.ds.l	1		;ハッシュテーブルへのポインタ(4*256バイト)
				;内容はファイル情報へのハンドル

;----------------------------------------------------------------
;
;	loadhigh関連のワーク
;
;----------------------------------------------------------------
	.align	4,$2048
userAreaWork::
	.dc.l	0			;ユーザモードのワークエリア
					;(コマンドラインなどを渡すとき使用する)
execLoadHigh::
	.dc.b	0			;_EXECから_MALLOCしたときloadhighするか(-1=yes)

defaultLoadArea::
	.dc.b	0			;ロード領域の条件
					;	0	下位のみ
					;	1	上位のみ
					;	2	親と同じ側のみ
					;	3	親と反対側のみ
					;	4	制限なし,下位優先
					;	5	制限なし,上位優先
					;	6	制限なし,親と同じ側優先
					;	7	制限なし,親と反対側優先
					;	8	制限なし,優先なし
defaultAllocArea::
	.dc.b	0			;アロケート領域の条件
					;	0	下位のみ
					;	1	上位のみ
					;	2	親と同じ側のみ
					;	3	親と反対側のみ
					;	4	制限なし,下位優先
					;	5	制限なし,上位優先
					;	6	制限なし,親と同じ側優先
					;	7	制限なし,親と反対側優先
					;	8	制限なし,優先なし

;----------------------------------------------------------------
;
;	Humanのバージョンに依存する定数のワーク
;
;----------------------------------------------------------------
	.align	4,$2048
killPrEntry::
	.dc.l	$0000E60C		;_KILL_PRの開始位置
stdHdlDup0::
	.dc.l	$00013D1A		;標準ハンドラ変換テーブル
stdHdlToFcb::
	.dc.l	$00013D24		;ハンドラ番号=0〜5のハンドラFCB変換テーブル
stdFcbTable::
	.dc.l	$00013D30		;FCB番号=0〜5のFCBテーブル

;----------------------------------------------------------------
;
;	RAMDISK関係のワーク
;
;----------------------------------------------------------------
;----------------------------------------------------------------
;ローカルメモリ上でRAMDISKの存在する範囲
;	RAMDISKの領域に該当するページはスーパーバイザ保護される
	.align	4,$2048
localRamdiskAreaStart::
	.dc.l	0			;先頭
localRamdiskAreaEnd::
	.dc.l	0			;末尾+1
localRamdiskAreaSize::
	.dc.l	0			;サイズ(ページサイズの倍数)

;----------------------------------------------------------------
;メインメモリ上でRAMDISKの存在する範囲
;	RAMDISKの領域に該当するページはスーパーバイザ保護される
	.align	4,$2048
mainRamdiskAreaStart::
	.dc.l	0			;先頭
mainRamdiskAreaEnd::
	.dc.l	0			;末尾+1
mainRamdiskAreaSize::
	.dc.l	0			;サイズ(ページサイズの倍数)

;----------------------------------------------------------------
;BPBテーブルのアドレス
	.align	4,$2048
bpbTablePointer::
d = 0
  .rept MAXIMUM_UNIT
	.dc.l	bpbTable+d
d = d+28
  .endm

;----------------------------------------------------------------
;BPBテーブル
	.align	4,$2048
bpbTable::
  .rept MAXIMUM_UNIT
	.dc.w	1024		;+0	1セクタあたりのバイト数
	.dc.b	1		;+2	1クラスタあたりのセクタ数
	.dc.b	1		;+3	FAT領域の個数
				;	bit7=1のとき2バイトFATの上下のバイトを入れ換える
	.dc.w	0		;+4	FATの先頭セクタ番号
	.dc.w	ROOT_ENTRY	;+6	ルートディレクトリに入るエントリ数
	.dc.w	0		;+8	(全領域のセクタ数)
	.dc.b	$F9		;+10	メディアバイト
	.dc.b	1		;+11	1個のFAT領域に使用するセクタ数
	.dc.l	DEFAULT_SIZE	;+12	全領域のセクタ数
	.dc.l	0		;+16	先頭アドレス(0=このユニットは存在しない)
	.dc.l	0		;+20	末尾アドレス+1
	.dc.b	0		;+24	アクセスランプを使うかどうか
	.ds.b	3		;+25
				;+28
  .endm

;----------------------------------------------------------------
;
;	デバッグ用サブルーチン
;
;----------------------------------------------------------------
;数値を16進数8桁で表示
;<d0.l:数値
	.align	4,$2048
debugHex8::
	move.w	ccr,-(sp)
	swap.w	d0
	bsr	debugHex4
	swap.w	d0
	bsr	debugHex4
	move.w	(sp)+,ccr
	rts

;数値を16進数4桁で表示
;<d0.w:数値
	.align	4,$2048
debugHex4::
	move.w	ccr,-(sp)
	rol.w	#8,d0
	bsr	debugHex2
	rol.w	#8,d0
	bsr	debugHex2
	move.w	(sp)+,ccr
	rts

;数値を16進数2桁で表示
;<d0.b:数値
	.align	4,$2048
debugHex2::
	move.w	ccr,-(sp)
	movem.l	d1-d2,-(sp)
	moveq.l	#2-1,d2
@@:	rol.b	#4,d0
	moveq.l	#$0F,d1
	and.l	d0,d1
	move.b	(hexchar,pc,d1.l),d1
	bsr	debugPutc
	dbra	d2,@b
	movem.l	(sp)+,d1-d2
	move.w	(sp)+,ccr
	rts

hexchar:
	.dc.b	'0123456789ABCDEF'

;文字列表示
;<a1.l:文字列のアドレス
	.align	4,$2048
debugPrint::
	move.w	ccr,-(sp)
  .if 1
	movem.l	d0/a1,-(sp)
	IOCS	_B_PRINT
	movem.l	(sp)+,d0/a1
  .else
	movem.l	d0-d1/a1,-(sp)
	bra	1001f
1000:	IOCS	_OUT232C
1001:	moveq.l	#0,d1
	move.b	(a1)+,d1
	bne	1000b
	movem.l	(sp)+,d0-d1/a1
  .endif
	move.w	(sp)+,ccr
	rts

;1文字表示
;<d1.w:文字コード
	.align	4,$2048
debugPutc::
	move.w	ccr,-(sp)
  .if 1
	movem.l	d0-d1,-(sp)
	IOCS	_B_PUTC
	movem.l	(sp)+,d0-d1
  .else
	movem.l	d0-d1,-(sp)
	moveq.l	#0,d1
	move.b	4+2(sp),d1
	beq	1000f
	IOCS	_OUT232C
1000:	moveq.l	#0,d1
	move.b	4+3(sp),d1
	IOCS	_OUT232C
	movem.l	(sp)+,d0-d1
  .endif
	move.w	(sp)+,ccr
	rts

;1キー入力待ち
	.align	4,$2048
debugKeyinp::
	move.w	ccr,-(sp)
	move.l	d0,-(sp)
	bra	2f
1:	IOCS	_B_KEYINP
2:	IOCS	_B_KEYSNS
	tst.b	d0
	bne	1b
3:	IOCS	_B_KEYINP
	tst.b	d0
	beq	3b
	move.l	(sp)+,d0
	move.w	(sp)+,ccr
	rts
