www.pudn.com > dspmem(bitmap).rar > 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; 
                        CNTR=0x3F00; 
                        DO TEST1_IDMTestLoop2 UNTIL CE; 
                                           
                        AX0=DM(I4,M4); 
                        PX=0XFF; 
                        AY0=0XFFFF; 
                        NONE=AX0-AY0; 
                        IF NE JUMP IDMTestError; 
                         
                        PX=0; 
                        SR0=0; 
                        DM(I4,M4)=SR0; 
TEST1_IDMTestLoop2:     MODIFY(I4,M5); 
                         
                        PX=0; 
                        AX0=2; 
                        DM(HDR0)=AX0; 
!================               
!W1 ==>up                       
!================               
                        I4=0; 
                        M5=1; 
                        PX=0XFF; 
			AX0=0XFFFF; 
                        CNTR=0x3F00; 
                        DO TEST1_IDMTestLoop3 UNTIL CE; 
TEST1_IDMTestLoop3:   	DM(I4,M5)=AX0; 
  
!================ 
!R1,W0 <==down 
!================ 
                        I4=0x3EFF; 
                        M5=-1; 
                        CNTR=0x3F00; 
                        DO TEST1_IDMTestLoop4 UNTIL CE; 
                                           
                        AX0=DM(I4,M4); 
                        PX=0xFF; 
                        AY0=0xFFFF; 
                        NONE=AX0-AY0; 
                        IF NE JUMP IDMTestError; 
                         
                        PX=0; 
                        SR0=0; 
                        DM(I4,M4)=SR0; 
TEST1_IDMTestLoop4:           MODIFY(I4,M5); 
!================                          
!W1 <==down        
!================ 
                        I4=0x3EFF; 
                        M5=-1; 
                        PX=0XFF; 
			AX0=0XFFFF; 
                        CNTR=0x3F00; 
                        DO TEST1_IDMTestLoop5 UNTIL CE;                                          
TEST1_IDMTestLoop5:     DM(I4,M5)=AX0; 
!================                          
!R1 <==up        
!================                        
                        I4=0; 
                        M5=1; 
                        CNTR=0x3F00; 
                        DO TEST1_IDMTestLoop6 UNTIL CE; 
                                           
                        AX0=DM(I4,M4); 
                        PX=0XFF; 
                        AY0=0XFFFF; 
                        NONE=AX0-AY0; 
                        IF NE JUMP IDMTestError; 
TEST1_IDMTestLoop6:     MODIFY(I4,M5); 
 
			RTS; 
 
 
                                     
IDMTestError:            
			AX0=I4; 
			PX=0X0; 
			AX1=0X01; 
			AY1=DM(I4,M4); 
			DM(HDR0)=AX0; 
			JUMP		IDMTestError; 
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
IPMHiTest:              L4=0; 
			M4=0; 
!================ 
!W0 <==>up 
!================ 
			I4=0x1000; 
			M5=1; 
			PX=0; 
			AX0=0; 
			CNTR=0x3000; 
			AR =PASS AF; 
			IF NE JUMP TEST0_NEXT1;		 
			I4=0; 
			CNTR=0X1000; 
						 
TEST0_NEXT1:		DO TEST0_IPMHiTestLoop1 UNTIL CE; 
TEST0_IPMHiTestLoop1:	PM(I4,M5)=AX0; 
                         
!================               
!R0,W1==> up                     
!================               
                        I4=0x1000; 
                        M5=1; 
                        CNTR=0x3000; 
                        AR =PASS AF; 
			IF NE JUMP TEST0_NEXT2;		 
			I4=0; 
			CNTR=0X1000; 
TEST0_NEXT2: 
	                DO TEST0_IPMHiTestLoop2 UNTIL CE; 
                                           
                        AX0=PM(I4,M4); 
                        PX=0; 
                        AY0=0; 
                        NONE=AX0-AY0; 
                        IF NE JUMP IPMHiTestError; 
                        PX=0xFF; 
                        SR0=0xFFFF; 
                        PM(I4,M4)=SR0; 
TEST0_IPMHiTestLoop2:         MODIFY(I4,M5); 
!================ 
!W0 <==>up 
!================ 
			I4=0x1000; 
			M5=1; 
			PX=0; 
			AX0=0; 
			CNTR=0x3000; 
			AR =PASS AF; 
			IF NE JUMP TEST0_NEXT3;		 
			I4=0; 
			CNTR=0X1000;						 
TEST0_NEXT3:		DO TEST0_IPMHiTestLoop3 UNTIL CE; 
TEST0_IPMHiTestLoop3:	PM(I4,M5)=AX0;    
!================ 
!R0,W1 <==down 
!================ 
                        I4=0x3FFF; 
                        M5=-1; 
                        CNTR=0x3000; 
                        AR =PASS AF; 
			IF NE JUMP TEST0_NEXT4;		 
			I4=0xFFF; 
			CNTR=0X1000; 
TEST0_NEXT4:			 
                        DO TEST0_IPMHiTestLoop4 UNTIL CE; 
                                           
                        AX0=PM(I4,M4); 
                        PX=0x00; 
                        AY0=0x0000; 
                        NONE=AX0-AY0; 
                        IF NE JUMP IPMHiTestError; 
                         
                        PX=0xFF; 
                        SR0=0xFFFF;                         
                        PM(I4,M4)=SR0; 
TEST0_IPMHiTestLoop4:   MODIFY(I4,M5); 
!================ 
!W0 <==>down 
!================ 
                        I4=0x3FFF; 
                        M5=-1; 
                        PX=0; 
                        AX0=0; 
                        CNTR=0x3000; 
                        AR =PASS AF; 
			IF NE JUMP TEST0_NEXT5;		 
			I4=0xFFF; 
			CNTR=0X1000; 
TEST0_NEXT5:			 
                        DO TEST0_IPMHiTestLoop5 UNTIL CE; 
TEST0_IPMHiTestLoop5:         PM(I4,M5)=AX0;       
!================                          
!R0 <==up        
!================ 
                        I4=0x3FFF; 
                        M5=-1; 
                        CNTR=0x3000; 
                        AR =PASS AF; 
			IF NE JUMP TEST0_NEXT6;		 
			I4=0xFFF; 
			CNTR=0X1000; 
TEST0_NEXT6:			 
                        DO TEST0_IPMHiTestLoop6 UNTIL CE; 
                                           
                        AX0=PM(I4,M4); 
                        PX=0; 
                        AY0=0; 
                        NONE=AX0-AY0; 
                        IF NE JUMP IPMHiTestError; 
TEST0_IPMHiTestLoop6:   MODIFY(I4,M5); 
 
TEST1_IPM_BEGIN: 
			L4=0; 
			M4=0; 
!================ 
!W1 <==>up 
!================ 
			I4=0x1000; 
			M5=1; 
			PX=0XFF; 
			AX0=0XFFFF; 
			CNTR=0x3000; 
			AR =PASS AF; 
			IF NE JUMP TEST1_NEXT1;		 
			I4=0; 
			CNTR=0X1000; 
						 
TEST1_NEXT1:		DO TEST1_IPMHiTestLoop1 UNTIL CE; 
TEST1_IPMHiTestLoop1:	PM(I4,M5)=AX0; 
                         
!================               
!R1,W0==> up                     
!================               
                        I4=0x1000; 
                        M5=1; 
                        CNTR=0x3000; 
                        AR =PASS AF; 
			IF NE JUMP TEST1_NEXT2;		 
			I4=0; 
			CNTR=0X1000; 
TEST1_NEXT2: 
	                DO TEST1_IPMHiTestLoop2 UNTIL CE; 
                                           
                        AX0=PM(I4,M4); 
                        PX=0XFF; 
                        AY0=0XFFFF; 
                        NONE=AX0-AY0; 
                        IF NE JUMP IPMHiTestError; 
                        PX=0; 
                        SR0=0; 
                        PM(I4,M4)=SR0; 
TEST1_IPMHiTestLoop2:         MODIFY(I4,M5); 
!================ 
!W1 <==>up 
!================ 
			I4=0x1000; 
			M5=1; 
			PX=0XFF; 
			AX0=0XFFFF; 
			CNTR=0x3000; 
			AR =PASS AF; 
			IF NE JUMP TEST1_NEXT3;		 
			I4=0; 
			CNTR=0X1000;						 
TEST1_NEXT3:		DO TEST1_IPMHiTestLoop3 UNTIL CE; 
TEST1_IPMHiTestLoop3:	PM(I4,M5)=AX0;    
!================ 
!R1,W0 <==down 
!================ 
                        I4=0x3FFF; 
                        M5=-1; 
                        CNTR=0x3000; 
                        AR =PASS AF; 
			IF NE JUMP TEST1_NEXT4;		 
			I4=0xFFF; 
			CNTR=0X1000; 
TEST1_NEXT4:			 
                        DO TEST1_IPMHiTestLoop4 UNTIL CE; 
                                           
                        AX0=PM(I4,M4); 
                        PX=0xFF; 
                        AY0=0xFFFF; 
                        NONE=AX0-AY0; 
                        IF NE JUMP IPMHiTestError; 
                         
                        PX=0; 
                        SR0=0;                         
                        PM(I4,M4)=SR0; 
TEST1_IPMHiTestLoop4:   MODIFY(I4,M5); 
!================ 
!W1 <==>down 
!================ 
                        I4=0x3FFF; 
                        M5=-1; 
                        PX=0XFF; 
                        AX0=0XFFFF; 
                        CNTR=0x3000; 
                        AR =PASS AF; 
			IF NE JUMP TEST1_NEXT5;		 
			I4=0xFFF; 
			CNTR=0X1000; 
TEST1_NEXT5:			 
                        DO TEST1_IPMHiTestLoop5 UNTIL CE; 
TEST1_IPMHiTestLoop5:         PM(I4,M5)=AX0;       
!================                          
!R1 <==up        
!================ 
                        I4=0x3FFF; 
                        M5=-1; 
                        CNTR=0x3000; 
                        AR =PASS AF; 
			IF NE JUMP TEST1_NEXT6;		 
			I4=0xFFF; 
			CNTR=0X1000; 
TEST1_NEXT6:			 
                        DO TEST1_IPMHiTestLoop6 UNTIL CE; 
                                           
                        AX0=PM(I4,M4); 
                        PX=0XFF; 
                        AY0=0XFFFF; 
                        NONE=AX0-AY0; 
                        IF NE JUMP IPMHiTestError; 
TEST1_IPMHiTestLoop6:   MODIFY(I4,M5); 
 
 
!write flag 
			ax0=0x03; 
			dm(HDR0)=ax0; 
			PX=0;	 
			AX0=0; 
			AF=AX0+0;									 
!55h means ipmhi test pass 
RTS; 
 
IPMHiTestError: 
			AX0=I4; 
			PX=0X00; 
			AX1=0X02; 
			AY1=PM(I4,M4); 
			DM(HDR0)=AX0; 
ipmer: 
			jump ipmer; 
endflag:		AY0=0;			 
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@