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

📄 pcplay.lst

📁 波形发生器
💻 LST
📖 第 1 页 / 共 4 页
字号:
0000000D 19 D3 0C 01        			[R_Lpt1TimeOutCnt1] = r1;
                            			
                            	L_NonPChaveData:
0000000F 11 93 0B 01        			r1 = [R_Lpt1TimeOutCnt];
00000011 41 22              			r1 -= 1;
00000012 19 D3 0B 01        			[R_Lpt1TimeOutCnt] = r1;
00000014 05 4E              			jnz	L_NoCarry;	
00000015 11 93 0C 01        			r1 = [R_Lpt1TimeOutCnt1];
00000017 41 22              			r1 -= 1;
00000018 19 D3 0C 01        			[R_Lpt1TimeOutCnt1] = r1;
                            	L_NoCarry:	
                            		
0000001A 11 93 0C 01        			r1 = [R_Lpt1TimeOutCnt1];
                            	
0000001C 11 93 0B 01        			r1 = [R_Lpt1TimeOutCnt];
0000001E 11 A3 0C 01        			r1 |= [R_Lpt1TimeOutCnt1];
00000020 02 4E              			jnz	L_Lpt1NotTimeOut;
00000021 80 FE 6D 00        			goto	L_Lpt1TimeOut
                            			
                            	L_Lpt1NotTimeOut:
00000023 41 92              			R1=0x0001;                      //clear watch dog
00000024 19 D3 12 70        	        [P_Watchdog_Clear]=R1;       //
00000026 11 93 05 70        	  		r1 = [P_IOB_Data];				//
00000028 01 95              		  	r2 = r1;
00000029 13 97 00 00        			r3 = [R_PCPlayFlag];
0000002B 03 83              	        r1 = r1 xor r3;
0000002C 09 B3 00 01        	        r1 = r1 and 0x0100;
0000002E 60 5E              	        jz  L_NonPChaveData;
                            	        
                            	
                            	                
                            			//.................................        
                            	        
                            	        
0000002F 0B 87 00 03        	        r3 = r3 xor 0x0300;
00000031 1B D7 00 00        	        [R_PCPlayFlag] = r3;
00000033 0B A7 FF 01        	        r3 = r3 or 0x01ff;
00000035 1B D7 05 70        	        [P_IOB_Data] = r3;
                            	
                            	
00000037 40 F0 04 01        			call F_CheckLPT1DataIn;
                            	//		cmp r4, 0xf001;						// 0xf001: SACM-A2000
                            	//		je		L_GoNextInit				// 0xf004: SACM-S480/S720
                            	//		PC = L_Reset;						// 0xf002: SACM-S240/S120
                            	//L_GoNextInit:								// 0xf008: FM4
                            												// 0xf009: FM6	
                            	
00000039 0C 49 01 F0        			cmp	r4, 0xf001;						//
0000003B 0B 5E              			je	L_DataIsSACM_A2000				//		
0000003C 0C 49 04 F0        			cmp	r4, 0xf004;						//
0000003E 0B 5E              			je	L_DataIsSACM_S480				//
0000003F 0C 49 02 F0        			cmp	r4, 0xf002;						//
00000041 0B 5E              			je	L_DataIsSACM_S240				//	
00000042 0C 49 08 F0        			cmp	r4, 0xf008;						//
00000044 0B 5E              			je	L_DataIsSACM_MS01				//
                            	
00000045 0F 9F 6E 00        			PC = L_WrongData;
                            	
                            	L_DataIsSACM_A2000:
00000047 0C 99 00 01        			r4 = 256;
00000049 08 EE              			jmp	L_PcPlayTypeSetReady;			//
                            	L_DataIsSACM_S480:
0000004A 0C 99 01 01        			r4 = 257;
0000004C 05 EE              			jmp	L_PcPlayTypeSetReady;			//
                            	L_DataIsSACM_S240:
0000004D 0C 99 02 01        			r4 = 258;
0000004F 02 EE              			jmp	L_PcPlayTypeSetReady;			//
                            	L_DataIsSACM_MS01:
00000050 0C 99 03 01        			r4 = 259;
                            		
                            	L_PcPlayTypeSetReady:
00000052 88 D8              			push	r4 to [sp];					// save return value
                            		
00000053 40 92              	        r1 = 0;
00000054 19 D3 05 00        	        [R_CommandTemp] = r1;
00000056 19 D3 09 01        	        [R_ByteCount] = r1;
00000058 19 D3 04 00        	        [R_DataTemp] = r1;
0000005A 19 D3 03 00        	        [R_ResetCount] = r1;
                            	
                            			
0000005C 40 92              			r1 = 0;							// reset R_EndCounter
0000005D 19 D3 0A 01        			[R_HeadCounter] = r1;			// (103)	
                            		
                            			//...... fill queue up ............		        
0000005F 40 9A              	        r5 = 0x00;
00000060 1D DB 06 00        	        [R_Temp] = r5;
                            	L_GetDataLoop0:
                            	        
00000062 40 F0 75 00        	        call F_PcPlay_ServiceLoop;			//F_CheckDataInAndSave;
                            	        
                            	        //r5 = R_BufferHead; // for test
                            	        	
00000064 15 9B 06 00        	        r5 = [R_Temp];
00000066 41 0A              	        r5 += 0x01;
00000067 1D DB 06 00        	        [R_Temp] = r5;
00000069 0D 4B 00 64        	        cmp r5, D_BufferTail*100; // use 10 because several times to fill one byte
                            	        //cmp	r5, D_BufferTail-1;
0000006B 4A 0E              	        jcc L_GetDataLoop0;
                            			//................................
                            	
                            			
                            			
                            			//r1 = R_BufferHead;			//for test
                            	
0000006C 88 90              			pop r1 from [sp];				// return value
                            			
                            	L_Lpt1TimeOut:		
0000006D 90 9A              			retf;	
                            			
                            	L_WrongData:
0000006E 41 92              			R1=0x0001;                      //clear watch dog
0000006F 19 D3 12 70        	        [P_Watchdog_Clear]=R1;       //
00000071 00 EE              			nop;
00000072 00 EE              			nop;
00000073 00 EE              			nop;
00000074 90 9A              			retf;	
                            	 		.ENDP;
                            			
                            	//****************************************************************
                            	// Function: Get data from printer port and put the data to the queue
                            	// Input: Port IOA
                            	// Output: Queue (see [R_QueueHead],[R_ReadIndex] and [R_WriteIndex] in detail
                            	//****************************************************************
                            	.public _PcPlay_ServiceLoop;				// original F_CheckDataInAndSave:
                            	.public F_PcPlay_ServiceLoop;
                            	_PcPlay_ServiceLoop: .PROC
                            	F_PcPlay_ServiceLoop:
                            			
00000075 41 92              			R1=0x0001;                      //clear watch dog
00000076 19 D3 12 70        	        [P_Watchdog_Clear]=R1;       //
                            	        
00000078 11 93 02 00        	        r1 = [R_WriteIndex];  			//check buffer Tail 
0000007A 12 95 01 00        	        r2 = [R_ReadIndex];  			//
0000007C 02 23              	        r1 = r1 - r2;
0000007D 04 6E              	        jpl L_QueueNonFullAndSave;
0000007E 09 43 FF FF        	        cmp  r1, 0xffff;
00000080 05 4E              	        jne  L_FillDataAndSave;
                            	L_QueueFullAndSave:
00000081 90 9A              	        retf;
                            	L_QueueNonFullAndSave:
00000082 09 43 FF 00        	        cmp r1, D_BufferTail-1;
00000084 01 4E              	        jne  L_FillDataAndSave;
00000085 90 9A              	        retf;							// queue full
                            	L_FillDataAndSave:
                            	//----------------------------------------
                            	                			
00000086 11 93 05 70        	        r1 = [P_IOB_Data];			//r2 = low byte, r3= high byte
00000088 01 95              	        r2 = r1;
00000089 13 97 00 00        	        r3 = [R_PCPlayFlag];
0000008B 03 83              	        r1 = r1 xor r3;
0000008C 09 B3 00 01        	        r1 = r1 and 0x0100;
0000008E 01 4E              	        jne L_PChaveData;
0000008F 90 9A              	        retf;
                            	L_PChaveData:
                            			
00000090 40 92              	        r1 = 0x00; //889
00000091 19 D3 03 00        	        [R_ResetCount] = r1;
                            	        
00000093 0B 87 00 03        	        r3 = r3 xor 0x0300;
00000095 1B D7 00 00        	        [R_PCPlayFlag] = r3;
00000097 0B A7 FF 01        	        r3 = r3 or 0x01ff;
                            	        
00000099 1B D7 05 70        	        [P_IOB_Data] = r3;
0000009B 5A 97              	        r3 = r2 lsl 4;
0000009C 5B 97              	        r3 = r3 lsl 4;
0000009D 0A B5 FF 00        	        r2 = r2 and 0x00ff;
0000009F 11 93 09 01        	        r1 = [R_ByteCount];
000000A1 09 09 01 00        	        r4 = r1 + 1;
000000A3 44 48              	        cmp     r4, 0x04;
000000A4 01 0E              	        jcc     L_UpDataCount;
000000A5 40 98              	        r4 = 0;
                            	L_UpDataCount:
                            			
000000A6 1C D9 09 01        	        [R_ByteCount] = r4;
000000A8 40 42              	        cmp r1, 0;
000000A9 1C 5E              	        je L_CommandCheck;
000000AA 41 42              	        cmp r1, 1;
000000AB 0A 5E              	        je L_DataCheck;
000000AC 42 42              	        cmp r1, 2;
000000AD 12 5E              	        je L_CommandCheck1;
000000AE 11 93 05 00        	        r1 = [R_CommandTemp];
000000B0 17 4E              	        jne L_IsCommand;
000000B1 14 99 04 00        	        r4 = [R_DataTemp];
000000B3 03 A9              	        r4 = r4 or r3;
000000B4 0F 9F DA 00        	        pc = F_SaveDataToBuffer;
                            	
                            	L_DataCheck:
000000B6 14 99 05 00        			r4 = [R_CommandTemp];
000000B8 04 4E              	        jne  L_IsCm2;
000000B9 1A D5 04 00        	        [R_DataTemp] = r2;
000000BB 0F 9F CF 00        	        pc = L_ZeroData;
                            	L_IsCm2:
000000BD 03 A9              	        r4 = r4 or r3;
000000BE 0F 9F D0 00        	        pc = F_CommandSet;
                            	
                            	L_CommandCheck1:
                            			
000000C0 40 46              	        cmp r3, 0;
000000C1 0D 5E              	        je   L_ZeroData;
000000C2 1B D7 05 00        	        [R_CommandTemp] = r3;
000000C4 0F 9F CF 00        	        pc = L_ZeroData;
                            	L_CommandCheck:
                            			
000000C6 40 46              	        cmp r3, 0;
000000C7 07 5E              	        je  L_ZeroData;
                            	L_IsCommand:
                            			
000000C8 13 97 05 00        	        r3 = [R_CommandTemp];
000000CA 02 A7              	        r3 = r3 or r2;
000000CB 1B D7 05 00        	        [R_CommandTemp] = r3;
000000CD 0F 9F D0 00        	        pc = F_CommandSet;
                            	L_ZeroData:
000000CF 90 9A              	        retf;
                            	
                            	F_CommandSet:
000000D0 40 92              	        r1 = 0;
000000D1 19 D3 05 00        	        [R_CommandTemp] = r1;

⌨️ 快捷键说明

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