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