📄 pcplay.lst
字号:
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 + -