📄 bus_driver.asm
字号:
//****************************************************************************************************//
// SYSTEM BASIC DRIVER TO CONNECT WITH CPLD //
// DESIGNED BY PHEONIX //
// ALE: IOB4 //
// DATA/ADDR: IOA8--IOA15 //
// WR: IOB11 //
// RD: IOB6 //
//****************************************************************************************************//
.PUBLIC _SET_ADDR
.PUBLIC _WRITE_DATA
.PUBLIC _READ_DATA
.DEFINE P_IOA_Data 0x7000; // Write Data into data register and read from IOA pad
.DEFINE P_IOA_Buffer 0x7001; // Write Data into buffer register and read from buffer register
.DEFINE P_IOA_Dir 0x7002; // Direction vector for IOA
.DEFINE P_IOA_Attrib 0x7003; // Attribute vector for IOA
.DEFINE P_IOA_Latch 0x7004; // Latch PortA data for key change wake-up
.DEFINE P_IOB_Data 0x7005; // Write Data into the data register and read from IOB pad
.DEFINE P_IOB_Buffer 0x7006; // Write Data into buffer register and read from buffer register
.DEFINE P_IOB_Dir 0x7007; // Direction vector for IOB
.DEFINE P_IOB_Attrib 0x7008; // Attribute vector for IOB
.CODE
_SET_ADDR: .PROC
PUSH R1,R2 TO [SP];
PUSH BP TO [SP];
BP=SP;
//GET ADDRESS FROM PARAMENT;
R1=[BP+6];
//GENERATE DATA TO FEED IOA;
R2=[P_IOA_Buffer];
R1=R1 LSL 4;
R1=R1 LSL 4;
R2&=0x00FF;
R1|=R2;
[P_IOA_Data]=R1;
NOP;
NOP;
//SEND ALE SIGNAL;
R1=[P_IOB_Buffer];
R1|=0x0010;
[P_IOB_Data]=R1;
NOP;
NOP;
R1&=0xFFEF;
[P_IOB_Data]=R1;
//PROGRAM RETURN;
POP BP FROM [SP];
POP R1,R2 FROM [SP];
RETF;
.ENDP;
_WRITE_DATA:.PROC
PUSH R1,R2 TO [SP];
PUSH BP TO [SP];
BP=SP;
R1=[BP+6];
//GET PARAMENT AND FEED IOA;
R2=[P_IOA_Buffer];
R1=R1 LSL 4;
R1=R1 LSL 4;
R2&=0x00FF;
R1|=R2;
[P_IOA_Data]=R1;
NOP;
NOP;
//SEND WRITE SIGNAL;
R1=[P_IOB_Buffer];
R1&=0xF7FF;
[P_IOB_Data]=R1;
NOP;
NOP;
NOP;
NOP;
NOP;
R1|=0x0800;
[P_IOB_Data]=R1;
//PROGRAM RETURN;
POP BP FROM [SP];
POP R1,R2 FROM [SP];
RETF;
.ENDP
_READ_DATA:.PROC
PUSH R2 TO [SP];
R2=[P_IOB_Buffer];
R2&=0xFFBF;
[P_IOB_Data]=R2;
//SEND READ SIGNAL;
NOP;
NOP;
//READ DATA;
R2=0x0000;
[P_IOA_Dir]=R2;
R1=[P_IOA_Data];
R1=R1 LSR 4;
R1=R1 LSR 4;
R2=0xFF00;
[P_IOA_Dir]=R2;
//RESET READ SIGNAL;
R2=[P_IOB_Buffer];
R2|=0x0040;
[P_IOB_Data]=R2;
POP R2 FROM [SP];
RETF;
.ENDP;
.END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -