Cypress PSoC: Denksport: Unbekannter Code

Gast #1996850
Lesenswert?

Hallo zusammen,

vielleicht kann mir jemand helfen: Ich habe hier einen Cypress PSoC auf 
dem Tisch dessen Firmware einen etwas doofen Bug hat und der Hersteller 
hat kein Interesse ihn zu beheben. Ich habe den Code ausgelesen und 
desassembliert. Nun bin ich ca. 50% durch den Code und habe dessen 
Funktion kommentiert. Die Anwendung ist wohl in C geschrieben und ruft 
eine Funktion auf deren Funktion ich nicht begreife:
==== Schnipp ====
func_364C:
; SP-4 : b
; SP-5 : a
; Globals
; 0.0x9B global1
; 0.0x9C global2
; Looks handwritten... And wierd, WTF???
364C  55 9C 00  MOV     [0x9C],0x00   ;  LCALL @ 35D9
364F  55 9B 08  MOV     [0x9B],0x08  ;  [0x9B] = 0x08 -> Loop eight 
times, see
;                                                        below
3652  66 FC     ASL     [X+0xFC];\JNZ @ 3662 <----------------------|
3654  6B 9C     RLC     [0x9C];/Shift bit from [SP-4] into [0x9C]   |
3656  51 9C     MOV     A,[0x9C];\\-----------v-------------/       |
3658  1B FB     SBB     A,[X+0xFB];/[0x9C] - Carry - [SP-5]   < 0   |
365A  C0 05     JC      0x3660;--If ( ^^^^^^^^^^ ) skip---|         |
365C  53 9C     MOV     [0x9C],A;[0x9C]=Result from above |         |
365E  77 FC     INC     [X+0xFC];[SP-4]++;                |         |
3660  7A 9B     DEC     [0x9B];JC @ 365A <----------------|         |
3662  BF EF     JNZ     0x3652;-------------------------------------|
3664  7F        RET
=== Schnappp ===

In C transkribiert sieht das Ganze etwa so aus:
=== Schnipp ===
char global1;
char global2;

func_364C(a,b)
{
 char tmp; // Fuer Carry-Emulation
 char i;
 for (global1=8; global1>0; global1--)
  {
   tmp= b & 0x80;
   global2=global2<<1 | tmp;
   tmp= global2 - tmp - a;
   if (tmp>0) {
       global2=tmp;
       b++;
     }
  }
}
=== Schnapp ===

Aus der PSoC-Standardbibliothek kommt es wohl nicht, die hab' ich schon 
durchsucht. Nur die Mathebibliothek für Modulo/Multiplikation von 
größeren (>8 bit) Zahlen hab' ich noch nicht durchforstet/gefunden.

Hat jemand von Euch soetwas schon einmal gesehen oder eine Idee was das 
tun soll? Wenn ja wäre ich um jeden Tip dankbar.

Danke,
  ein Suchender

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren