⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcplay.lst

📁 波形发生器
💻 LST
📖 第 1 页 / 共 4 页
字号:
000000D3 19 D3 09 01        	        [R_ByteCount] = r1;
000000D5 19 D3 04 00        	        [R_DataTemp] = r1;
000000D7 19 D3 03 00        	        [R_ResetCount] = r1;
000000D9 90 9A              	        retf;
                            	//--------------------------------  
                            	F_SaveDataToBuffer:				// Save data to buffer
                            	
                            			//... Check File Head ....(103)
                            	.ifdef CutFileHead;	
                            	        push r1 to [sp];
                            	        
                            	        r1 = [R_HeadCounter];	// 
                            	        cmp	r1, 24;				//
                            	        jcs	L_NotFileHead;		//
                            	        
                            	        r1 = [R_HeadCounter];	//
                            	        r1 += 1;				// counter ++
                            	        [R_HeadCounter] = r1;	//
                            	        
                            	    	pop	r1 from [sp];		//    
                            			retf;					//
                            	    
                            	L_NotFileHead:        
                            	    	pop	r1 from [sp];    	//	
                            	.endif	    
                            	        //........................
                            			
                            		
                            	
                            	
000000DA 11 93 02 00        			r1 = [R_WriteIndex];  
000000DC 09 07 09 00        	        r3 = r1 + R_BufferHead;
000000DE C3 D8              	        [r3] = r4;
000000DF 41 02              	        r1 += 0x01;
000000E0 09 43 00 01        	        cmp  r1, D_BufferTail;
000000E2 01 0E              	        jcc L_NonOverTail;
000000E3 40 92              	        r1 = 0x00;
                            	L_NonOverTail:
000000E4 19 D3 02 00        	        [R_WriteIndex] = r1;
                            	        
                            	        
                            	        
000000E6 40 92              	        r1 = 0;
000000E7 19 D3 05 00        	        [R_CommandTemp] = r1;
000000E9 19 D3 09 01        	        [R_ByteCount] = r1;
000000EB 19 D3 04 00        	        [R_DataTemp] = r1;
000000ED 19 D3 03 00        	        [R_ResetCount] = r1;
                            	        
000000EF 90 9A              	        retf;
                            			.ENDP
                            		
                            	
                            	
                            	/////////////////////////////////////////////////////////
                            	// Function: Get data from queue 
                            	// Input: queue
                            	// Output: R4
                            	/////////////////////////////////////////////////////////
                            	.public	_PcPlay_GetQueue;        
                            	.public F_PcPlay_GetQueue;
                            	_PcPlay_GetQueue:
                            	F_PcPlay_GetQueue:
000000F0 13 97 01 00        	        r3 = [R_ReadIndex];
000000F2 14 99 02 00        	        r4 = [R_WriteIndex];  		//check buffer Tail
000000F4 04 47              	        cmp r3, r4;
000000F5 03 4E              	        jne L_Bufferhasdata_;
                            	        
000000F6 0C 99 FF FF        	        r4 = 0xffff;				// output 0xffff for speech end if queue is no data
                            	        
000000F8 90 9A              	        retf;
                            	L_Bufferhasdata_:
000000F9 0B 09 09 00        	        r4 = r3 + R_BufferHead;
000000FB C4 98              	        r4 = [r4];
000000FC 41 06              	        r3 += 0x01;
000000FD 0B 47 00 01        	        cmp  r3, D_BufferTail;
000000FF 01 0E              	        jcc L_RNonOverTail_;
00000100 40 96              	        r3 = 0x00;
                            	L_RNonOverTail_:
00000101 1B D7 01 00        	        [R_ReadIndex] = r3;
00000103 90 9A              	        retf;        
                            	        
                            	
                            	//============================================================================
                            	// Function: 
                            	// Input:
                            	// Output:
                            	// using: 
                            	//  call F_CheckLPT1DataIn;
                            	//  if z=0 data not comming yet, if z=1 data comming.
                            	//============================================================================
                            	F_CheckLPT1DataIn:
00000104 11 93 02 00        	        r1 = [R_WriteIndex];  			//check buffer Tail 
00000106 12 95 01 00        	        r2 = [R_ReadIndex];  			//
00000108 02 23              	        r1 = r1 - r2;
00000109 04 6E              	        jpl L_QueueNonFull;
0000010A 09 43 FF FF        	        cmp  r1, 0xffff;
0000010C 04 4E              	        jne  L_FillData;
                            	L_QueueFull:
0000010D 90 9A              	        retf;
                            	L_QueueNonFull:
0000010E 09 43 FF 00        	        cmp r1, D_BufferTail-1;
00000110 44 5E              	        je  L_QueueFull;
                            	L_FillData:
00000111 40 F0 18 01        	        call F_DataGet0;       //get one byte data from PC
00000113 03 99              	        r4 = r3;
00000114 40 F0 18 01        	        call F_DataGet0;
00000116 02 A9              	        r4 = r4 or r2;
                            	               
                            	//        cmp	r4, 0xf001;
                            	//        jne	L_DataNotComming;
                            	//        sr |= 0x0010;			// set z flag
                            	//L_DataNotComming:
                            	//		sr &= 0xFFEF;			// clear z flag        
00000117 90 9A              	       	retf;
                            		   
                            	
                            	///////////////////////////////////////////////////////
                            	// get one byte data from LPT1
                            	///////////////////////////////////////////////////////
                            	F_DataGet0:                				//r2 = low byte, r3= high byte
00000118 40 9A              	        r5 = 0x00;						// clear time out counter
00000119 1D DB 03 00        	        [R_ResetCount] = r5;			//889
                            	L_GetDataLoop1:
0000011B 41 92              			R1=0x0001;                      //clear watch dog
0000011C 19 D3 12 70        	        [P_Watchdog_Clear]=R1;       //
                            	
0000011E 11 93 05 70        	        r1 = [P_IOB_Data];
                            	        //call F_STD_GetIOA;
00000120 01 95              	        r2 = r1;
00000121 13 97 00 00        	        r3 = [R_PCPlayFlag];
00000123 03 83              	        r1 = r1 xor r3;
00000124 09 B3 00 01        	        r1 = r1 and 0x0100;
00000126 0C 4E              	        jne L_PChaveData1;
                            	        
00000127 11 93 03 00        	        r1 = [R_ResetCount];			// time out counter++
00000129 41 02              	        r1 += 0x01;						//889	
0000012A 19 D3 03 00        	        [R_ResetCount] = r1;			//
0000012C 52 4E              	        jne  L_GetDataLoop1;
0000012D 41 0A              	        r5 += 0x01;
0000012E 4F 4A              	        cmp     r5, 0x0f;
0000012F 55 0E              	        jcc  L_GetDataLoop1;
                            	        
                            	        //jmp	L_GetDataLoop1;
00000130 0F 9F 6E 00        	      	PC = L_WrongData;
00000132 90 9A              	        retf;
                            	        
                            	L_PChaveData1:
00000133 0B 87 00 03        	        r3 = r3 xor 0x0300;
00000135 1B D7 00 00        	        [R_PCPlayFlag] = r3;
00000137 0B A7 FF 01        	        r3 = r3 or 0x01ff;
00000139 1B D7 05 70        	        [P_IOB_Data] = r3;
                            	    
                            	    	//push r1,r1 to [sp];	
                            	        //r1 = r3;
                            	        //call F_STD_PutIOA;	
                            			//pop	r1,r1 from [sp];
                            	        
0000013B 5A 97              	        r3 = r2 lsl 4;
0000013C 5B 97              	        r3 = r3 lsl 4;
0000013D 0A B5 FF 00        	        r2 = r2 and 0x00ff;
0000013F 90 9A              			retf;
                            	
                            	
                            			//... For MS01 only .........................
                            	.public F_GetQueueNoChangeAddr;		
                            	F_GetQueueNoChangeAddr:
00000140 13 97 01 00        	        r3 = [R_ReadIndex];
00000142 14 99 02 00        	        r4 = [R_WriteIndex];  		//check buffer Tail
00000144 04 47              	        cmp r3, r4;
00000145 01 4E              	        jne L_Bufferhasdata_1;
00000146 90 9A              	        retf;
                            	L_Bufferhasdata_1:
00000147 0B 09 09 00        	        r4 = r3 + R_BufferHead;
00000149 C4 98              	        r4 = [r4];
0000014A 90 9A              	        retf;
                            	        
                            	.public	F_QueueAddrAdd1;        
                            	F_QueueAddrAdd1:
0000014B 13 97 01 00        			r3 = [R_ReadIndex];        
0000014D 41 06              	        r3 += 0x01;
0000014E 0B 47 00 01        	        cmp  r3, D_BufferTail;
00000150 01 0E              	        jcc L_RNonOverTail_1;
00000151 40 96              	        r3 = 0x00;
                            	L_RNonOverTail_1:
00000152 1B D7 01 00        	        [R_ReadIndex] = r3;
00000154 90 9A              	        retf;               
                            	        //.............................................
                            	        
                            	
                            	//============================================================================
                            	// Function: 3 Byte R_Lpt1TimeOutCnt ++
                            	// Input: None
                            	// Output: None
                            	// Used variable: R3
                            	//============================================================================
                            	F_Lpt1TimeOutCntAdd1:
00000155 13 97 0B 01        	        R3=[R_Lpt1TimeOutCnt];
00000157 41 06              	        R3 +=1;
00000158 1B D7 0B 01        	        [R_Lpt1TimeOutCnt]=R3;
0000015A 01 5E              	        jz      L_LT_Carry1;
0000015B 90 9A              	        retf;
                            	L_LT_Carry1:
0000015C 13 97 0C 01        	        R3=[R_Lpt1TimeOutCnt+1];
0000015E 41 06              	        R3 +=1;
0000015F 1B D7 0C 01        	        [R_Lpt1TimeOutCnt+1]=R3;
00000161 01 5E              	        jz      L_LT_Carry2;
00000162 90 9A              	        retf;
                            	L_LT_Carry2:
00000163 13 97 0D 01        	        R3=[R_Lpt1TimeOutCnt+2];
00000165 41 06              	        R3 +=1;
00000166 1B D7 0D 01        	        [R_Lpt1TimeOutCnt+2]=R3;
00000168 90 9A              	        retf;
                            	//============================================================================        
0 error(s), 0 warning(s).

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -