【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 @ 子程序返回