【BA4988】SysReadCom函数
反汇编:
U8 SysReadCom(U8 *str, U8 *size) { AutoPowerOffCount = AutoPowerOffValue Read_buf = str Write_buf = size Read_size = *Write_buf if (_2278 != 0) { *Write_buf = 0 _2021 &= 0xFD EndOffSet = 0 StartOffSet = 0 tmp = _2278 _2278 = 0 return tmp } Read_len = 0 while (StartOffSet != EndOffSet) { *(Read_buf+Read_len) = *(ReadBuf_Point+StartOffSet) StartOffSet += 1 StartOffSet &= 0x7F Read_len += 1 if (Read_len >= Read_size) { *Write_buf = Read_len return 0 } } while (_URCON1 & 0x01 == 0) { *(Read_buf+Read_len) = _SBUF Read_len +=1 } _2021 &= 0xFD *Write_buf = Read_len return 0 }
汇编:
E910 [4C D8 F9]: JMP $F9D8 @ 转移
F9D8 [AD 27 20]: LDA $2027 = #$04 @ 送累加器
F9DB [8D 28 20]: STA $2028 = #$04 @ 存累加器
F9DE [A0 00 B1]: LDY #$00 @ 送变址寄存器Y
F9E0 [B1 28 85]: LDA ($28),Y @ $17AF = #$A0 @ 送累加器
F9E2 [85 40 C8]: STA $40 = #$A0 @ 存累加器
F9E4 [C8 B1 28]: INY @ 变址寄存器Y加1
F9E5 [B1 28 85]: LDA ($28),Y @ $17B0 = #$17 @ 送累加器
F9E7 [85 41 C8]: STA $41 = #$17 @ 存累加器
F9E9 [C8 B1 28]: INY @ 变址寄存器Y加1
F9EA [B1 28 85]: LDA ($28),Y @ $17B1 = #$00 @ 送累加器
F9EC [85 3C C8]: STA $3C = #$00 @ 存累加器
F9EE [C8 B1 28]: INY @ 变址寄存器Y加1
F9EF [B1 28 85]: LDA ($28),Y @ $17B2 = #$D4 @ 送累加器
F9F1 [85 3D A0]: STA $3D = #$D4 @ 存累加器
F9F3 [A0 00 B1]: LDY #$00 @ 送变址寄存器Y
F9F5 [B1 3C 8D]: LDA ($3C),Y @ $D400 = #$A6 @ 送累加器
F9F7 [8D 30 20]: STA $2030 = #$A6 @ 存累加器
F9FA [AD 78 22]: LDA $2278 = #$00 @ 送累加器
F9FD [C9 00 F0]: CMP #$00 @ 累加器与存储器比较
F9FF [F0 21 A9]: BEQ $FA22 @ 结果为0分支
FA01 [A9 00 A0]: LDA #$00 @ 送累加器
FA03 [A0 00 91]: LDY #$00 @ 送变址寄存器Y
FA05 [91 3C A9]: STA ($3C),Y @ $0030 = #$00 @ 存累加器
FA07 [A9 FD 2D]: LDA #$FD @ 送累加器
FA09 [2D 21 20]: AND $2021 = #$05 @ 逻辑与
FA0C [8D 21 20]: STA $2021 = #$05 @ 存累加器
FA0F [A9 00 8D]: LDA #$00 @ 送累加器
FA11 [8D 2F 20]: STA $202F = #$00 @ 存累加器
FA14 [8D 2E 20]: STA $202E = #$00 @ 存累加器
FA17 [AD 78 22]: LDA $2278 = #$00 @ 送累加器
FA1A [48 A9 00]: PHA @ 累加器压入堆栈
FA1B [A9 00 8D]: LDA #$00 @ 送累加器
FA1D [8D 78 22]: STA $2278 = #$00 @ 存累加器
FA20 [68 60 A9]: PLA @ 堆栈弹回累加器
FA21 [60 A9 00]: RTS @ 子程序返回
FA22 [A9 00 8D]: LDA #$00 @ 送累加器
FA24 [8D 31 20]: STA $2031 = #$00 @ 存累加器
FA27 [08 78 AD]: PHP @ 处理器状态压入堆栈
FA28 [78 AD 2E]: SEI @ 置中断禁止位
FA29 [AD 2E 20]: LDA $202E = #$00 @ 送累加器
FA2C [CD 2F 20]: CMP $202F = #$00 @ 累加器与存储器比较
FA2F [F0 23 AC]: BEQ $FA54 @ 结果为0分支
FA31 [AC 2E 20]: LDY $202E = #$00 @ 送变址寄存器Y
FA34 [B1 3E AC]: LDA ($3E),Y @ $2279 = #$00 @ 送累加器
FA36 [AC 31 20]: LDY $2031 = #$04 @ 送变址寄存器Y
FA39 [91 40 EE]: STA ($40),Y @ $1B3B = #$00 @ 存累加器
FA3B [EE 2E 20]: INC $202E = #$01 @ 存储器加1
FA3E [AD 2E 20]: LDA $202E = #$01 @ 送累加器
FA41 [29 7F 8D]: AND #$7F @ 逻辑与
FA43 [8D 2E 20]: STA $202E = #$01 @ 存累加器
FA46 [EE 31 20]: INC $2031 = #$05 @ 存储器加1
FA49 [AD 31 20]: LDA $2031 = #$05 @ 送累加器
FA4C [CD 30 20]: CMP $2030 = #$04 @ 累加器与存储器比较
FA4F [90 D8 4C]: BCC $FA29 @ 进位为0分支
FA51 [4C 70 FA]: JMP $FA70 @ 转移
FA54 [AD 44 02]: LDA $0244 = #$5F @ 送累加器
FA57 [29 01 D0]: AND #$01 @ 逻辑与
FA59 [D0 0D A5]: BNE $FA68 @ 结果不为0分支
FA5B [A5 08 AC]: LDA $08 = #$FC @ 送累加器
FA5D [AC 31 20]: LDY $2031 = #$04 @ 送变址寄存器Y
FA60 [91 40 EE]: STA ($40),Y @ $1B3B = #$FC @ 存累加器
FA62 [EE 31 20]: INC $2031 = #$05 @ 存储器加1
FA65 [4C 54 FA]: JMP $FA54 @ 转移
FA68 [A9 FD 2D]: LDA #$FD @ 送累加器
FA6A [2D 21 20]: AND $2021 = #$05 @ 逻辑与
FA6D [8D 21 20]: STA $2021 = #$05 @ 存累加器
FA70 [28 AD 31]: PLP @ 堆栈弹回处理器状态
FA71 [AD 31 20]: LDA $2031 = #$00 @ 送累加器
FA74 [A0 00 91]: LDY #$00 @ 送变址寄存器Y
FA76 [91 3C A9]: STA ($3C),Y @ $D400 = #$00 @ 存累加器
FA78 [A9 00 60]: LDA #$00 @ 送累加器
FA7A [60 08 78]: RTS @ 子程序返回