📄 dspmem(bitmap).s
字号:
!!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
!!;;;测试流程如下:
!!;;; 程序先在IPM中运行,检测IDM和IPM(1000H以后的部分),测试完后将一部分测试代码搬移到IPM(2000H)以后,检测IPM(1000H)以前的部分。
!!;;;采用标准的MARCH_C+改进算法测试IPM&IDM
!!;;;MARCH_C+改进算法:
!!//检测算法说明:
!!// 测0: 全写0---地址递增;
!!// 逐个读回0再回写1---地址递增;不是0的认为错
!!// 全写0---地址递增;
!!// 逐个读回0再回写1---地址递减;不是0的认为错
!!// 全写0---地址递减;
!!// 读回0---地址递增;不是0的认为错
!!// 测1: 全写1---地址递增;
!!// 逐个读回1再回写0---地址递增;不是1的认为错
!!// 全写1---地址递增;
!!// 逐个读回1再回写0---地址递减;不是1的认为错
!!// 全写1---地址递减;
!!// 读回1---地址递增;不是1的认为错
!!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
!!HDR0 IS STORED THE ERROR INDEX NUMBER
!! if HDR0=1 ,IT MEANS THERE IS ERROR IN IDM
!! if HDR0=2 ,WHICH MEANS ERROR OCCURED IN IPM
!! if HDR0=3 ,WHICH MEANS PASS
!!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.module dsp_main;
.CONST HMASK=0x3FE8;
.CONST HDR0=0x3FE0;
.CONST HDR1=0x3FE1;
.CONST HDR2=0x3FE2;
.CONST HDR3=0x3FE3;
.CONST HDR4=0x3FE4;
.CONST HDR5=0x3FE5;
.CONST HSR6=0x3FE6;
.CONST HSR7=0x3FE7;
.CONST WaitStates=0x3FF3;
.CONST SystemControlRegister=0x3FFF;
IPMIDMTest1: PX=0;
AX0=0;
DM(SystemControlRegister)=AX0;
DM(WaitStates)=AX0;
IMASK=0;
MSTAT=0;
DM(HDR0)=AX0;
AX0=0x55;
AF=AX0+0;
AX0=0;
CALL IDMTest;
CALL IPMHiTest;
testing_ipm_low:
PX=0;
I4=^IPMHiTest;I1=^endflag;
AX0=I4;AY0=I1;AR=AY0-AX0;AR=AR+1;
I5=0X2000;M5=1;L5=0;
CNTR=AR;
DO MOVE_PM UNTIL CE;
AX0=pm(I4,M5);
MOVE_PM: PM(I5,M5)=AX0;
!!CHANGE_LABEL:
!! PX=0X38;
!! AX0=0X0;
!! I4=0X2002;
!! PM(I4,M4)=AX0;
!! I4=0X2016;
!! PM(I4,M4)=AX0;
!! I4=0X2009;
!! PM(I4,M4)=AX0;
!!
!! PX=0X1A;
!! AX0=0X0491;
!! I4=0X2011;
!! PM(I4,M4)=AX0;
!! I4=0X201E;
!! PM(I4,M4)=AX0;
!! I4=0X202B;
!! PM(I4,M4)=AX0;
!! I4=0X2038;
!! PM(I4,M4)=AX0;
!! I4=0X2045;
!! PM(I4,M4)=AX0;
!!
!! PX=0X38;
!! AX0=0XFFF0;
!! I4=0X2023;
!! PM(I4,M4)=AX0;
!! I4=0X2030;
!! PM(I4,M4)=AX0;
!! I4=0X203D;
!! PM(I4,M4)=AX0;
!!
!!
!!
!! PX=0X3D;
!! AX0=0X0005;
!! I4=0X2006;
!! PM(I4,M4)=AX0;
!! I4=0X200B;
!! PM(I4,M4)=AX0;
!! I4=0X2018;
!! PM(I4,M4)=AX0;
!! I4=0X2025;
!! PM(I4,M4)=AX0;
!! I4=0X2032;
!! PM(I4,M4)=AX0;
!! I4=0X2041;
!! PM(I4,M4)=AX0;
!!
!! PX=0X16;
!! AX0=0X008E;
!! I4=0X2007;
!! PM(I4,M4)=AX0;
!! AX0=0X022E;
!! I4=0X2019;
!! PM(I4,M4)=AX0;
!! AX0=0X015E;
!! I4=0X200C;
!! PM(I4,M4)=AX0;
!! AX0=0X02FE;
!! I4=0X2026;
!! PM(I4,M4)=AX0;
!! AX0=0X03CE;
!! I4=0X2033;
!! PM(I4,M4)=AX0;
!! AX0=0X045E;
!! I4=0X2042;
!! PM(I4,M4)=AX0;
!!
!! PX=0X40;
!! AX0=0X0030; !flag
!! I4=0X2046;
!! PM(I4,M4)=AX0;
!! PX=0X1a;
!! AX0=0X048f;
!! I4=0X2048;
!! PM(I4,M4)=AX0;
!! PX=0X40;
!! AX0=0X0021;
!! I4=0X204b;
!! PM(I4,M4)=AX0;
!! PX=0X1A;
!! AX0=0X04DF;
!! I4=0X204D;
!! PM(I4,M4)=AX0;
!!
!!
PX=0X16;
AX0=0XCE;
I4=0X200b;
PM(I4,M4)=AX0;
PX=0X16;
AX0=0X1DE;
I4=0X2014;
PM(I4,M4)=AX0;
PX=0X16;
AX0=0X28E;
I4=0X2027;
PM(I4,M4)=AX0;
PX=0X16;
AX0=0X39E;
I4=0X2030;
PM(I4,M4)=AX0;
PX=0X16;
AX0=0X44E;
I4=0X2043;
PM(I4,M4)=AX0;
PX=0X16;
AX0=0X52E;
I4=0X204C;
PM(I4,M4)=AX0;
PX=0X16;
AX0=0X5FE;
I4=0X205E;
PM(I4,M4)=AX0;
PX=0X16;
AX0=0X70E;
I4=0X2067;
PM(I4,M4)=AX0;
PX=0X16;
AX0=0X7BE;
I4=0X207A;
PM(I4,M4)=AX0;
PX=0X16;
AX0=0X8CE;
I4=0X2083;
PM(I4,M4)=AX0;
PX=0X16;
AX0=0X97E;
I4=0X2096;
PM(I4,M4)=AX0;
PX=0X16;
AX0=0XA5E;
I4=0X209F;
PM(I4,M4)=AX0;
PX=0X1A;
AX0=0X0AAF;
I4=0X20AA;
PM(I4,M4)=AX0;
I6=0X2000;
CALL (I6);
AX0=0x3;
dm(HDR0)=AX0;
DEADLOOP:
JUMP DEADLOOP;
IDLE;
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IDMTest: L4=0;
M4=0;
!================
!W0 <==>up
!================
I4=0;
M5=1;
PX=0;
AX0=0;
CNTR=0x3F00;
DO TEST0_IDMTestLoop1 UNTIL CE;
TEST0_IDMTestLoop1: DM(I4,M5)=AX0;
!================
!R0,W1 ==>up
!================
I4=0;
M5=1;
CNTR=0x3F00;
DO TEST0_IDMTestLoop2 UNTIL CE;
AX0=DM(I4,M4);
PX=0;
AY0=0;
NONE=AX0-AY0;
IF NE JUMP IDMTestError;
PX=0xFF;
SR0=0xFFFF;
DM(I4,M4)=SR0;
TEST0_IDMTestLoop2: MODIFY(I4,M5);
PX=0;
AX0=2;
DM(HDR0)=AX0;
!================
!W0 ==>up
!================
I4=0;
M5=1;
PX=0;
AX0=0;
CNTR=0x3F00;
DO TEST0_IDMTestLoop3 UNTIL CE;
TEST0_IDMTestLoop3: DM(I4,M5)=AX0;
!================
!R0,W1 <==down
!================
I4=0x3EFF;
M5=-1;
CNTR=0x3F00;
DO TEST0_IDMTestLoop4 UNTIL CE;
AX0=DM(I4,M4);
PX=0x00;
AY0=0x0000;
NONE=AX0-AY0;
IF NE JUMP IDMTestError;
PX=0xFF;
SR0=0xFFFF;
DM(I4,M4)=SR0;
TEST0_IDMTestLoop4: MODIFY(I4,M5);
!================
!W0 <==down
!================
I4=0x3EFF;
M5=-1;
PX=0;
AX0=0;
CNTR=0x3F00;
DO TEST0_IDMTestLoop5 UNTIL CE;
TEST0_IDMTestLoop5: DM(I4,M5)=AX0;
!================
!R0 <==up
!================
I4=0;
M5=1;
CNTR=0x3F00;
DO TEST0_IDMTestLoop6 UNTIL CE;
AX0=DM(I4,M4);
PX=0;
AY0=0;
NONE=AX0-AY0;
IF NE JUMP IDMTestError;
TEST0_IDMTestLoop6: MODIFY(I4,M5);
TEST1_BEGIN:
L4=0;
M4=0;
!================
!W1 <==>up
!================
I4=0;
M5=1;
PX=0xFF;
AX0=0xFFFF;
CNTR=0x3F00;
DO TEST1_IDMTestLoop1 UNTIL CE;
TEST1_IDMTestLoop1: DM(I4,M5)=AX0;
!================
!R1,W0 ==>up
!================
I4=0;
M5=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -