Forum: Mikrocontroller und Digitale Elektronik Cypress PSoC: Denksport: Unbekannter Code


von suchender (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.