📄 ata_commands.asm
字号:
/************************************************************************************************/
/* The following routines check for status information from the Compact Flash such as CF */
/* insertion, busy, ready, error, and data ready. */
/* Last Modified 02-26-03. H. Desai */
/************************************************************************************************/
#include <def21535.h>
#define Mem_Mapped_Registers 0x24000800
.GLOBAL Check_CF_Inserted;
.GLOBAL Check_CF_Busy;
.GLOBAL Check_CF_RDY_Status;
.GLOBAL Check_CF_ERR_Status;
.GLOBAL Check_CF_DRQ_Status;
.EXTERN Save_IMASK;
.SECTION program;
/******************************************/
Check_CF_Inserted:
P5.L = FIO_FLAG_S & 0xFFFF;
P5.H = FIO_FLAG_S >> 16;
Wait_CF_Detected:
R0 = W[P5];
cc = bittst(R0,8);
IF cc JUMP Wait_CF_Detected; //Check if PF8 (/CD1) is asserted low
RTS;
/******************************************/
Check_CF_Busy:
P0.H = Mem_Mapped_Registers >> 16;
P0.L = Mem_Mapped_Registers & 0xFFFF;
Wait_CF_Busy:
R0 = W[P0+0xE]; //Alt Status Register in Common Memory (A11 = 0)
cc = bittst(R0,7);
IF cc JUMP Wait_CF_Busy; //Check if CF is busy
RTS;
/******************************************/
Check_CF_RDY_Status:
P0.H = Mem_Mapped_Registers >> 16;
P0.L = Mem_Mapped_Registers & 0xFFFF;
Wait_CF_RDY:
R0 = W[P0+0xE]; //Alt Status Register in Common Memory (A11 = 0)
cc = bittst(R0,6);
IF !cc JUMP Wait_CF_RDY; //Check if CF is RDY (i.e. set to 1)
RTS;
/******************************************/
Check_CF_ERR_Status:
P0.H = Mem_Mapped_Registers >> 16;
P0.L = Mem_Mapped_Registers & 0xFFFF;
R0 = W[P0+0xE]; //Alt Status Register in Common Memory (A11 = 0)
cc = bittst(R0,0);
IF cc JUMP CF_ERR_DETECTED; //Check if CF detected an error (i.e. set to 1)
RTS;
CF_ERR_DETECTED:
R0 = W[P0+0xC]; //Read Error Register (bits 15:8 of R0)
JUMP CF_ERR_DETECTED;
/******************************************/
Check_CF_DRQ_Status:
P0.H = Mem_Mapped_Registers >> 16;
P0.L = Mem_Mapped_Registers & 0xFFFF;
I2.H = Save_IMASK;
I2.L = Save_IMASK;
CLI R0;
[I2] = R0;
Wait_CF_DRQ:
R0 = [I2];
STI R0;
NOP; NOP; NOP; NOP; NOP; NOP; NOP;
NOP; NOP; NOP; NOP; NOP; NOP; NOP;
CLI R0;
[I2] = R0;
R0 = W[P0+0xE]; //Alt Status Register in Common Memory (A11 = 0)
cc = bittst(R0,3);
IF !cc JUMP Wait_CF_DRQ; //Check if CF has data ready to be transfered
R0 = [I2];
STI R0;
RTS;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -