misc/include/dmac.equ
	.nlist
  .ifndef __dmac_equ__
__dmac_equ__	equ	1

;----------------------------------------------------------------
;
;	HD63450 DMAC
;
;----------------------------------------------------------------

;ベースアドレス
DMAC_0_BASE		equ	$00E84000	;DMACチャンネル0ベースアドレス。フロッピーディスク
DMAC_1_BASE		equ	$00E84040	;DMACチャンネル1ベースアドレス。ハードディスク
DMAC_2_BASE		equ	$00E84080	;DMACチャンネル2ベースアドレス。ユーザ
DMAC_3_BASE		equ	$00E840C0	;DMACチャンネル3ベースアドレス。ADPCM

;Channel Status Register (R/W)
;	チャンネルステータスレジスタ
;	CSRに$FFを書き込むとクリアされる
DMAC_CSR		equ	$00
;	COC|BLC|NDT|ERR|ACT|DIT|PCT|PCS
DMAC_CSR_COC_BIT	equ	 7
DMAC_CSR_COC		equ	%10000000	;Channel Operation Complete。1=チャンネル動作完了。正常終了または異常終了
DMAC_CSR_BLC_BIT	equ	  6
DMAC_CSR_BLC		equ	%01000000	;BLock transfer Complete。1=ブロック転送完了。MTCが0になったがCNTで継続した
DMAC_CSR_NDT_BIT	equ	   5
DMAC_CSR_NDT		equ	%00100000	;Normal Device Termination。1=デバイス終了。~DONEがアサートされた
DMAC_CSR_ERR_BIT	equ	    4
DMAC_CSR_ERR		equ	%00010000	;ERRor。1=エラーあり
DMAC_CSR_ACT_BIT	equ	     3
DMAC_CSR_ACT		equ	%00001000	;channel ACTive。1=チャンネル動作中
DMAC_CSR_DIT_BIT	equ	      2
DMAC_CSR_DIT		equ	%00000100	;~DONE Input Transition。1=~DONE入力があった
DMAC_CSR_PCT_BIT	equ	       1
DMAC_CSR_PCT		equ	%00000010	;~PCL Transition。1=~PCLの立下りがあった
DMAC_CSR_PCS_BIT	equ	        0
DMAC_CSR_PCS		equ	%00000001	;~PCL Status。~PCLの状態

;Channel Error Register (R)
;	チャンネルエラーレジスタ
;	CERはread-only
DMAC_CER		equ	$01
;	---|EC#####
DMAC_CER_EC		equ	%00011111	;Error Code
DMAC_NO_ERROR		equ	%00000000	;  0=エラーなし
DMAC_CONFIGURATION	equ	%00000001	;  1=コンフィギュレーションエラー
DMAC_TIMING_ERROR	equ	%00000010	;  2=動作タイミングエラー
DMAC_ADDRESS_MEMORY	equ	%00000101	;  5=アドレスエラー(メモリアドレス)
DMAC_ADDRESS_DEVICE	equ	%00000110	;  6=アドレスエラー(デバイスアドレス)
DMAC_ADDRESS_BASE	equ	%00000111	;  7=アドレスエラー(ベースアドレス)
DMAC_BUS_ERROR_MEMORY	equ	%00001001	;  9=バスエラー(メモリアドレス)
DMAC_BUS_ERROR_DEVICE	equ	%00001010	;  10=バスエラー(デバイスアドレス)
DMAC_BUS_ERROR_BASE	equ	%00001011	;  11=バスエラー(ベースアドレス)
DMAC_COUNT_ERROR_MEMORY	equ	%00001101	;  13=カウントエラー(メモリカウンタ)
DMAC_COUNT_ERROR_BASE	equ	%00001111	;  15=カウントエラー(ベースカウンタ)
DMAC_EXTERNAL_ABORT	equ	%00010000	;  16=外部強制停止
DMAC_SOFTWARE_ABORT	equ	%00010001	;  17=ソフトウェア強制停止

;Device Control Register (R/W)
;	デバイスコントロールレジスタ
;	DCRに動作中(ACT!=0)に書き込むと動作タイミングエラーになる
DMAC_DCR		equ	$04
;	XRM##|DTYP##|DPS|-|PCL##
DMAC_DCR_XRM		equ	%11000000	;eXternal Request Mode
DMAC_BURST_TRANSFER	equ	%00000000	;  0=バースト転送モード
DMAC_NO_HOLD_CYCLE	equ	%10000000	;  2=ホールドなしサイクルスチールモード
DMAC_HOLD_CYCLE		equ	%11000000	;  3=ホールドありサイクルスチールモード
DMAC_DCR_DTYP		equ	%00110000	;Device TYPe
DMAC_HD68000_COMPATIBLE	equ	%00000000	;  0=HD68000コンパチブル(デュアルアドレスモード)
DMAC_HD6800_COMPATIBLE	equ	%00010000	;  1=HD6800コンパチブル(デュアルアドレスモード)
DMAC_ACK_DEVICE		equ	%00100000	;  2=~ACK付きデバイス(シングルアドレスモード)
DMAC_READY_ACK_DEVICE	equ	%00110000	;  3=~ACK,~READY付きデバイス(シングルアドレスモード)
DMAC_DCR_DPS_BIT	equ	     3
DMAC_DCR_DPS		equ	%00001000	;Device Port Size
DMAC_8_BIT_PORT		equ	%00000000	;  0=8ビットポート
DMAC_16_BIT_PORT	equ	%00001000	;  1=16ビットポート
DMAC_DCR_PCL		equ	%00000011	;Peripheral Control Line
DMAC_STATUS_INPUT	equ	%00000000	;  0=STATUS入力
DMAC_INTERRUPT_INPUT	equ	%00000001	;  1=割り込みありSTATUS入力
DMAC_1_8_START_PULSE	equ	%00000010	;  2=1/8スタートパルス
DMAC_ABORT_INPUT	equ	%00000011	;  3=ABORT入力

;Operation Control Register (R/W)
;	オペレーションコントロールレジスタ
DMAC_OCR		equ	$05
;	DIR|BTD|SIZE##|CHAIN##|REQG##
DMAC_OCR_DIR_BIT	equ	 7
DMAC_OCR_DIR		equ	%10000000	;DIRection
DMAC_MEMORY_TO_DEVICE	equ	%00000000	;  0=メモリ→デバイス。DMAC_MAR→DMAC_DAR
DMAC_DEVICE_TO_MEMORY	equ	%10000000	;  1=デバイス→メモリ。DMAC_DAR→DMAC_MAR
DMAC_OCR_BTD_BIT	equ	  6
DMAC_OCR_BTD		equ	%01000000	;multi Block Transfer with ~DONE mode
DMAC_OCR_SIZE		equ	%00110000	;operand SIZE
DMAC_8_BIT_OPERAND	equ	%00000000	;  0=8ビットオペランド
DMAC_16_BIT_OPERAND	equ	%00010000	;  1=16ビットオペランド
DMAC_32_BIT_OPERAND	equ	%00100000	;  2=32ビットオペランド
DMAC_UNPACKED_OPERAND	equ	%00110000	;  3=パックなし8ビットオペランド
DMAC_OCR_CHAIN		equ	%00001100	;CHAINing operation
DMAC_NO_CHAINING	equ	%00000000	;  0=チェインなし
DMAC_ARRAY_CHAIN	equ	%00001000	;  2=アレイチェイン
DMAC_LINK_ARRAY_CHAIN	equ	%00001100	;  3=リンクアレイチェイン
DMAC_OCR_REQG		equ	%00000011	;DMA REQuest Generation method
DMAC_AUTO_REQUEST	equ	%00000000	;  0=オートリクエスト限定速度。転送中にバスを開放する
DMAC_AUTO_REQUEST_MAX	equ	%00000001	;  1=オートリクエスト最大速度。転送中にバスを開放しない
DMAC_EXTERNAL_REQUEST	equ	%00000010	;  2=外部転送要求
DMAC_DUAL_REQUEST	equ	%00000011	;  3=最初はオートリクエスト、2番目から外部転送要求

;Sequence Control Register (R/W)
;	シーケンスコントロールレジスタ
;	SCRに動作中(ACT!=0)に書き込むと動作タイミングエラーになる
DMAC_SCR		equ	$06
;	----|MAC##|DAC##
DMAC_SCR_MAC		equ	%00001100	;Memory Address register Count
DMAC_FIXED_MEMORY	equ	%00000000	;  0=メモリアドレス固定
DMAC_INCREMENT_MEMORY	equ	%00000100	;  1=メモリアドレスインクリメント
DMAC_DECREMENT_MEMORY	equ	%00001000	;  2=メモリアドレスデクリメント
DMAC_SCR_DAC		equ	%00000011	;Device Address register Count
DMAC_FIXED_DEVICE	equ	%00000000	;  0=デバイスアドレス固定
DMAC_INCREMENT_DEVICE	equ	%00000001	;  1=デバイスアドレスインクリメント
DMAC_DECREMENT_DEVICE	equ	%00000010	;  2=デバイスアドレスデクリメント

;Channel Control Register (R/W)
;	チャンネルコントロールレジスタ
DMAC_CCR		equ	$07
;	STR|CNT|HLT|SAB|ITE|---
DMAC_CCR_STR_BIT	equ	 7
DMAC_CCR_STR		equ	%10000000	;STaRt operation。1=動作開始
DMAC_CCR_CNT_BIT	equ	  6
DMAC_CCR_CNT		equ	%01000000	;CoNTinue operation。1=コンティニューあり
DMAC_CCR_HLT_BIT	equ	   5
DMAC_CCR_HLT		equ	%00100000	;HaLT operation。1=動作一時停止
DMAC_CCR_SAB_BIT	equ	    4
DMAC_CCR_SAB		equ	%00010000	;Software ABort。1=動作中止
DMAC_CCR_ITE_BIT	equ	     3
DMAC_CCR_ITE		equ	%00001000	;InTerrupt Enable。1=割り込み許可

;Memory Transfer Counter (R/W)
;	メモリトランスファカウンタ
;	MTCに動作中(ACT!=0)に書き込むと動作タイミングエラーになる
DMAC_MTC		equ	$0A

;Memory Address Register (R/W)
;	メモリアドレスレジスタ
;	MARに動作中(ACT!=0)に書き込むと動作タイミングエラーになる
DMAC_MAR		equ	$0C

;Device Address Register (R/W)
;	デバイスアドレスレジスタ
;	DARに動作中(ACT!=0)に書き込むと動作タイミングエラーになる
DMAC_DAR		equ	$14

;Base Transfer Counter (R/W)
;	ベーストランスファカウンタ
DMAC_BTC		equ	$1A

;Base Address Register (R/W)
;	ベースアドレスレジスタ
DMAC_BAR		equ	$1C

;Normal Interrupt Vector (R/W)
;	ノーマルインタラプトベクタ
DMAC_NIV		equ	$25

;Error Interrupt Vector (R/W)
;	エラーインタラプトベクタ
DMAC_EIV		equ	$27

;Memory Function Code (R/W)
;	メモリファンクションコード
;	MFCに動作中(ACT!=0)に書き込むと動作タイミングエラーになる
DMAC_MFC		equ	$29
;	-----|FC###
DMAC_USER_DATA		equ	%00000001	;  1=ユーザデータ
DMAC_USER_CODE		equ	%00000010	;  2=ユーザコード
DMAC_SUPERVISOR_DATA	equ	%00000101	;  5=スーパーバイザデータ
DMAC_SUPERFISOR_CODE	equ	%00000110	;  6=スーパーバイザコード

;Channel Priority Register (R/W)
;	チャンネルプライオリティレジスタ
;	0=高,1,2,3=低
DMAC_CPR		equ	$2D
;	------|CP##
DMAC_HIGHEST_PRIORITY	equ	0
DMAC_HIGHER_PRIORITY	equ	1
DMAC_LOWER_PRIORITY	equ	2
DMAC_LOWEST_PRIORITY	equ	3

;Device Function Code (R/W)
;	デバイスファンクションコード
;	DFCに動作中(ACT!=0)に書き込むと動作タイミングエラーになる
DMAC_DFC		equ	$31
;	-----|FC###

;Base Function Code (R/W)
;	ベースファンクションコード
DMAC_BFC		equ	$39
;	-----|FC###

;General Control Register (R/W)
;	ジェネラルコントロールレジスタ
DMAC_GCR		equ	$FF
;	----|BT##|BR##
DMAC_GCR_BT		equ	%00001100	;Burst Time
DMAC_BURST_16_CLK	equ	%00000000	;  0=16clk
DMAC_BUTST_32_CLK	equ	%00000100	;  1=32clk
DMAC_BURST_64_CLK	equ	%00001000	;  2=64clk
DMAC_BUTST_128_CLK	equ	%00001100	;  3=128clk
DMAC_GCR_BR		equ	%00000011	;Bandwidth Ratio
DMAC_RATIO_1_2		equ	%00000000	;  0=1/2
DMAC_RATIO_1_4		equ	%00000001	;  1=1/4
DMAC_RATIO_1_8		equ	%00000010	;  2=1/8
DMAC_RATIO_1_16		equ	%00000011	;  3=1/16

  .endif  ;__dmac_equ__
	.list