Forum: Compiler & IDEs Unbekannter Assembler erzeugt große Änderungen bei kleinem Programm


von Max M. (maxmicr)


Lesenswert?

Ein mir unbekannter Assembler (integriert in einer IDE) erzeugt in der 
Ausgabedatei große Änderungen obwohl im Programm selber nur eine 
einzelne Ziffer geändert wurde. Zum Testen hab ich folgendes Programm 
verwendet:
1
main:   
2
  mov a,0x01
3
  goto main

0x01 wird jeweils um 1 erhöht und die Ausgabe des Assemblers in 12 
einzelnen Dateien abgespeichert (also mov a,0x01 bis mov a,0x12).

Ich hätte vermutet, dass sich eventuell die Instruktionen im Klartext 
(bzw. Hexformat) wiederfinden lassen, allerdings ändern sich 2050 Byte 
(die Ausgabedatei ist immer 2303 Byte groß).

Der einzige Grund, der mir spontan einfällt, warum sich aus einer 
minimalen Änderung im Code große Änderungen in der Datei ergeben, wäre 
der Einsatz von Verschlüsselung.

Ich weiß, dass ist so ziemlich im Nebel stochern aber vielleicht hat 
jemand Kenntnisse darüber, in welcher Form Assembler üblicherweise das 
Programm abspeichern.

Die IDE mit Assembler: http://www.padauk.com.tw/products.php?item=14 
(IDE v0.81)

: Bearbeitet durch User
von Horst (Gast)


Lesenswert?

Max M. schrieb:
> Der einzige Grund, der mir spontan einfällt, warum sich aus einer
> minimalen Änderung im Code große Änderungen in der Datei ergeben, wäre
> der Einsatz von Verschlüsselung.

Auch Assembler können unterschiedlich optimieren.

von Roland P. (pram)


Lesenswert?

Kompression könnte auch schuld sein.
https://en.m.wikipedia.org/wiki/Executable_compression

von Max M. (maxmicr)


Lesenswert?

Horst schrieb:
> Auch Assembler können unterschiedlich optimieren.

Aber was gibt es denn aufgrund einer Zahl zu optimieren?

Roland P. schrieb:
> Kompression könnte auch schuld sein.

Gute Idee, allerdings macht das meine Idee zunichte, etwas über die 
Instruktionen rauszufinden bzw. in welchem Format das Programm in den µC 
geladen werden muss, damit es korrekt funktioniert.

: Bearbeitet durch User
von Roland P. (pram)


Lesenswert?

Kannst du das selbe Programm 2x assemblieren? Kommt dann das gleiche 
raus?

von Max M. (maxmicr)


Lesenswert?

Roland P. schrieb:
> Kannst du das selbe Programm 2x assemblieren? Kommt dann das gleiche
> raus?

Ja, wenn das Programm das gleiche ist wird auch exakt die gleiche Datei 
erzeugt.

Edit: Wenn man weiß, welches Kompressionsverfahren eingesetzt wird, kann 
man die Datei auch wieder dekomprimieren - oder? Vorausgesetzt es ist 
kein proprietäres Verfahren, das nicht öffentlich verfügbar ist.

Edit_2:

"Executable compression is also frequently used to deter reverse 
engineering or to obfuscate the contents of the executable (for example, 
to hide the presence of malware from antivirus scanners) by proprietary 
methods of compression and/or added encryption. Executable compression 
can be used to prevent direct disassembly, mask string literals and 
modify signatures. Although this does not eliminate the chance of 
reverse engineering, it can make the process more costly."

Na vielen Dank auch :D

: Bearbeitet durch User
von Max M. (maxmicr)


Lesenswert?

Die ersten 12 Byte sind allerdings immer gleich:
1
0x12, 0x66, 0xAA, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00

Könnte das eventuell ein Header für eine Kompressionsart sein?

von 🍅🍅 🍅. (tomate)


Lesenswert?


von Max M. (maxmicr)


Angehängte Dateien:

Lesenswert?

"Not a valid PE file".

Gibt es überhaupt eine Möglichkeit zu erkennen, ob die Datei 
verschlüsselt oder komprimiert ist?
Wie wahrscheinlich ist es, dass der Hersteller ein komplett eigenes 
Verschlüsselungs- bzw. Kompressionsverfahren einsetzt?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Max M. schrieb:
> Ein mir unbekannter Assembler (integriert in einer IDE)

Das Ziel dieses Assemblers scheint kein herkömmlicher µC zu sein, 
sondern ein "programmierbares Prozessor-Array", das aus 8 Prozessoren zu 
bestehen scheint.

Die Ausgabedatei enthält daher vermutlich auch noch ganz andere 
Informationen als das eigentliche Programm.

von Max M. (maxmicr)


Lesenswert?

Rufus Τ. F. schrieb:
> Das Ziel dieses Assemblers scheint kein herkömmlicher µC zu sein

Doch, das Ziel ist ein µC, das Unternehmen stellt nicht nur diese Arrays 
her, kann man auch im Assembler-File definieren:
1
.CHIP  PMS150C
2
//{{PADAUK_CODE_OPTION
3
  .Code_Option  Bootup_Time  Slow
4
  .Code_Option  Drive    Normal
5
  .Code_Option  Security  Disable    // Security Disable
6
  .Code_Option  LVR    3.5V
7
//}}PADAUK_CODE_OPTION
8
9
.ADJUST_IC DISABLE
10
11
main:   
12
  mov a,0x12
13
  goto main

Das die Ausgabedatei noch andere Informationen neben dem Programm 
enthält, ist damit natürlich nicht auszuschließen.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was ist an diesen OTP-Controllern so interessant?
Spartanisch sind sie ja, 1 kB Code und 64 Bytes RAM.

Was möchtest Du damit machen?

von Max M. (maxmicr)


Lesenswert?

Rufus Τ. F. schrieb:
> Was möchtest Du damit machen?

Naja, ganz normal damit basteln und gleichzeitig versuchen, das Vorgehen 
des Programmiergeräts bzw. die Toolchain zu "reverse engineeren" damit 
man sie einfacher benutzen kann.

Mein Ziel wäre es, die vom Assembler generierte Datei über eine 
UART-Brücke an einen µC zu senden, der wiederum per Bit-Banging das 
Programmiergerät simuliert und den OTP-Speicher des eigentlichen 
Controllers damit beschreibt.
So ähnlich wie avrdude, nur dass Atmel (glaube ich) das Vorgehen, wie 
sie ihre Controller programmieren, offen gelegt hat.

Ich finde, solche µC haben auch für Bastler ihren Sinn und werden hier 
gar nicht verwendet, weil es kaum Doku gibt bzw. die Hardware nur schwer 
zu beschaffen ist.
Irgendwie bin ich aber jetzt erstmal an einem Punkt, an dem es nicht 
weiter geht.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Max M. schrieb:
> Ich finde, solche µC haben auch für Bastler ihren Sinn

Das mit dem OTP hast Du verstanden? Dann hat so etwas für Bastler nur 
dann einen Sinn, wenn die Dinger unglaublich billig zu bekommen sind, 
denn jeder Programmiervorgang braucht einen neuen Controller.

Da ist ein ATtiny schon deutlich komfortabler, weil der wiederholt 
beschrieben werden kann. Spartanisch können ATtinies auch, der ATtiny13 
beispielsweise hat auch nur 1 kB Programmspeicher und 64 Bytes RAM.

von Christian M. (Gast)


Lesenswert?

Du meinst aber nicht etwa das HEX-File! Das hat noch Checksummen und so.

Hatten wir kürzlich erst schon...

Gruss Chregu

von Max M. (maxmicr)


Lesenswert?

Christian M. schrieb:
> Du meinst aber nicht etwa das HEX-File!

Ich verstehe nicht, was du meinst? Die IDE bzw. der Assembler erzeugt 
kein HEX-File, die Dateien tragen die Endung ".PDK" (wahrscheinlich ein 
Kürzel für den Hersteller).

Christian M. schrieb:
> Das hat noch Checksummen und so.

Guter Hinweis, der Assembler zeigt nach dem Assemblieren eine Checksumme 
an. Danach suche ich mal in der Datei.

von Christian M. (Gast)


Lesenswert?

Kann jetzt mobil die Datei nicht anschauen, aber ist der Inhalt Text 
1:1? wie zitiert:

0x12, 0x66, 0xAA, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00

Gruss Chregu

von Max M. (maxmicr)


Lesenswert?

Christian M. schrieb:
> Kann jetzt mobil die Datei nicht anschauen, aber ist der Inhalt Text
> 1:1?

Nein, das ist die binäre Darstellung der Datei. Wenn ich die Datei mit 
dem Texteditor öffne, sieht das ungefähr so aus wie Chinesisch :D

: Bearbeitet durch User
von PittyJ (Gast)


Lesenswert?

Pack doch einfach einen ASCII-String mit in das Program.
Den sollte man im Binärfile doch finden können.

von Thorsten (Gast)


Lesenswert?

Eine Konstante zu ändern kann dazu führen, dass eine längere Instruktion 
gebraucht wird.
Wenn man einen Befehl einfügt ist es das gleiche. Da Programm wird 
größer. Damit ändern sich die relativen und absoluten Adressen und damit 
das ganze Programm.

von Max M. (maxmicr)


Lesenswert?

Thorsten schrieb:
> Damit ändern sich die relativen und absoluten Adressen und damit
> das ganze Programm.

Ich seh das ehrlich gesagt nicht so. Für 0x02 braucht man binär genauso 
viele Bits wie für 0x03. Wo sich Adressen ändern erschließt sich mir 
auch nicht ganz. Wie genau meinst du das?

PittyJ schrieb:
> Pack doch einfach einen ASCII-String mit in das Program.

Ich weiß ehrlich gesagt nicht, wie ich das in Assembler machen soll :(

So?
1
main:   
2
  mov a,'H'
3
  mov a,'A'
4
  mov a,'L'
5
  mov a,'L'
6
  mov a,'O'
7
  goto main

(assembliert sogar)

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

@Max MMM (maxmicr)

>> Pack doch einfach einen ASCII-String mit in das Program.

Eben.

>Ich weiß ehrlich gesagt nicht, wie ich das in Assembler machen soll :(

RTFM?

>So?

Nö, das sind mov-Befehle, da findet man HALLO niemals als String wieder. 
Eher sowas hier, keine Ahnung wie der Syntax von deinem Assembler dazu 
aussieht.

.db "Hallo Welt"

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Max M. schrieb:
> Ich seh das ehrlich gesagt nicht so. Für 0x02 braucht man binär genauso
> viele Bits wie für 0x03.

Wenn das als separate Konstante im Programmcode steht, ja. Wenn das aber 
RISC-Code ist, dann können unterschiedliche Konstanten unterschiedliche 
Codegrößen und Laufzeiten zur Folge haben, da Konstanten gegebenenfalls 
aus mehreren Opcodes zusammengesetzt werden. So ist's beim ARM, so 
könnte es theoretisch auch hier sein.

Ich wiederhole nochmal meine Frage an Dich:

Bist Du Dir im klaren darüber, was OTP bedeutet, und welche Konsequenzen 
das beim Programmieren eines µC hat?

von Max M. (maxmicr)


Lesenswert?

Falk B. schrieb:
> keine Ahnung wie der Syntax von deinem Assembler dazu
> aussieht.

Ich leider auch nicht so recht :(
Das:
1
.CHIP  PMS150C
2
//{{PADAUK_CODE_OPTION
3
  .Code_Option  Bootup_Time  Slow
4
  .Code_Option  Drive    Normal
5
  .Code_Option  Security  Disable
6
  .Code_Option  LVR    3.5V
7
//}}PADAUK_CODE_OPTION
8
9
.ADJUST_IC DISABLE
10
11
abcd db "A"
12
main:
13
  goto main
erzeugt
1
main.ASM(9): Loss following code at here
2
main.ASM(13): The code is never used. 0x5 to 0x5

Das:
1
.CHIP  PMS150C
2
//{{PADAUK_CODE_OPTION
3
  .Code_Option  Bootup_Time  Slow
4
  .Code_Option  Drive    Normal
5
  .Code_Option  Security  Disable
6
  .Code_Option  LVR    3.5V
7
//}}PADAUK_CODE_OPTION
8
9
.ADJUST_IC DISABLE
10
11
abcd db "AB"
12
main:
13
  goto main

erzeugt:
1
main.ASM(11): The value over range !!!

Sagt das jemandem was?

Ich gucke mal nach einer Beschreibung zum Assembler, wenn die Homepage 
vom Hersteller wieder online ist.

Rufus Τ. F. schrieb:
> Bist Du Dir im klaren darüber, was OTP bedeutet, und welche Konsequenzen
> das beim Programmieren eines µC hat?

Man kann den µC wegwerfen, wenn man sein Programm ändern möchte.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Max M. schrieb:
> Die IDE mit Assembler: http://www.padauk.com.tw/products.php?item=14
> (IDE v0.81)

Ich krieg da nur Error 404.
Bist Du Dir sicher, daß der Chip überhaupt noch hergestellt wird?

Ich verwende etwa seit 1993 keine OTPs mehr, da kamen von Atmel die 
ersten Flash AT89C51 raus.

von Max M. (maxmicr)


Lesenswert?

Peter D. schrieb:
> Bist Du Dir sicher, daß der Chip überhaupt noch hergestellt wird?

Das Datenblatt ist von 2018: 
https://datasheet.lcsc.com/szlcsc/PMS150C-U06_C168658.pdf

Peter D. schrieb:
> Ich krieg da nur Error 404.

Die Website ist aktuell komplett offline. Anscheinend Wartungsarbeiten.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Und wo kann man diesen Wegwerf-Exoten für welchen Preis bekommen?

von Max M. (maxmicr)


Angehängte Dateien:

Lesenswert?

Rufus Τ. F. schrieb:
> Und wo kann man diesen Wegwerf-Exoten für welchen Preis bekommen?

0.02$ auf Taobao.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Ich hatte mir auch mal von 2 Exoten Samples schicken lassen:
- Fairchild ACE1202
- Scenix SX18
Glücklicher Weise habe ich sie nicht eingesetzt, sind nämlich beide 
wieder von der Bildfläche verschwunden.
Der SX18 war extrem hart zu programmieren, da PIC12 Architektur. Davon 
kriegte man Knoten im Gehirn.
Für den ACE1202 hatte ich mir selbst nen Programmer gebastelt. Hab dann 
aber gemerkt, daß er bei langsamen Anstieg der VCC kein Reset machte, 
also unzuverlässig anlief.

von Max M. (maxmicr)


Lesenswert?

Peter D. schrieb:
> Für den ACE1202 hatte ich mir selbst nen Programmer gebastelt.

Wie bist du da vorgegangen? Die Programmier-Pins mit einem 
Logic-Analyzer bzw. Oszilloskop gemessen?

Eventuell löst die "OTP-Writer"-Software, die Teil der IDE ist, die 
Verschlüsselung / Komprimierung und überträgt das Programm "in Klartext" 
an den µC.

von Peter D. (peda)


Lesenswert?

Max M. schrieb:
> Wie bist du da vorgegangen? Die Programmier-Pins mit einem
> Logic-Analyzer bzw. Oszilloskop gemessen?

Es gab von Fairchild die AN-8005:
How to In-Circuit Program the ACEx™ Family of Microcontrollers

von Max M. (maxmicr)


Lesenswert?

Die IDE erlaubt Programme in "Mini-C" zu schreiben, ich hab sowas 
probiert:
1
#include  "extern.h"
2
3
void  FPPA0 (void)
4
{
5
  .ADJUST_IC  SYSCLK=IHRC/2    //  SYSCLK=IHRC/2
6
7
  WORD TEST[5];
8
  TEST[0] = 'H';
9
  TEST[1] = 'A';
10
  TEST[2] = 'L';
11
  TEST[3] = 'L';
12
  TEST[4] = 'O';
13
14
  while (1)
15
  {
16
17
  }
18
}

und nach den Hexzahlen 0x48414C4C4F und 0x4F4C4C4148 gesucht - 
leider keine Ergebnisse.

Die Ausgabedateien mit "HALLE" anstatt "HALLO" unterscheiden sich erneut 
zu großen Teilen.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Max M. schrieb:
> und nach den Hexzahlen 0x48414C4C4F und 0x4F4C4C4148 gesucht - leider
> keine Ergebnisse.

Das überrascht nicht unbedingt. Dein Array ist vom Typ WORD (was recht 
wahrscheinlich ein 16-Bit-Typ ist) und Du befüllst es mit einzelnen 
Operationen, statt es zu initialisieren.

Was passiert bei

char test[] = "HALLO"?

Gegebenenfalls musst Du nur noch den Optimierer überlisten, indem Du 
irgendwo noch lesend auf das Array zugreifst.

von ~Mercedes~ (Gast)


Lesenswert?

niedlich! ;-)

Meine Tutorin hat sich das mal angesehen, und
meint, das da Dein Code in ein kleines "RTOS"
eingebunden und abgearbeitet wird.

Dieses "RTOS" ist zumindest in der IDE gepackt, und da bis jetzt
nur ein kleiner Code programmiert ist, fällt dieser
in den verhältnismäßig großen "Overheadcode" nicht auf.

In den Controller wird dann alles, entpackt, geladen.

mfg
.

von Max M. (maxmicr)


Lesenswert?

Danke für deine Antwort! Magst du das mit dem RTOS genauer ausführen? 
Eigentlich müsste sich doch mein ASM Code immer noch in der generierten 
Datei befinden? Das widerlegt imho nicht den Einsatz eines 
Kompressionsalgorithmus.
Außerdem bezweifle ich, dass ein RTOS auf 1KB und 64 Byte RAM Platz 
findet. Ich denke weiterhin, dass das Writer-Tool den Inhalt der 
generierten Datei in Klartext übersetzt, wenn das Ding (hoffentlich) bei 
mir heil ankommt, werde ich genaueres wissen (oder auch nicht).

von ~Mercedes~ (Gast)


Lesenswert?

Das RTOS ist die Programmsaasammlung um deine "Main"
herum.
Dein Programm ist die "Main" und kommt zusammen mit den
Biblitheksroutinen in den Flash.
Die IDE linkt quasi das "RTOS" mit den assemblierten Routinen
von Dir zusammen und schreibt alles ins Flash.
Ist ähnlich wie beim Kopierschutz - Dongle!
Da sind Teile in Deiner EXE verschlüsselt und werden dann während
des Programmlaufes "on the fly" entpackt und mit der EXE verlinkt.
Das Packen oder die Verschlüsselung in der IDE ist nur
dafür da, das Du nicht mitbekommst, wies funktioniert. ;-P

Der Lader dürfte als unverschlüsselt / ungepackt ins Flash schreiben.

Nur die Daten kommen ins RAM!

Du willst wirklich Chips bestellen?

mfg

von Max M. (maxmicr)


Lesenswert?

Das liest sich etwas verrückt für mich - so eine Firma verdient doch 
nichts an ihren Programmiergeräten bzw. ihrer Software sondern an dem 
Verkauf ihrer Controller in sehr hohen Stückzahlen. Wieso dieser Aufwand 
alles geheim zu halten?

Aber hab ich dich richtig verstanden: Mit dem Writer vor Ort könnte ich 
es hinbekommen, den Opcode herauszufinden?

von ~Mercedes~ (Gast)


Lesenswert?

Max meinte:

> Aber hab ich dich richtig verstanden: Mit dem Writer vor Ort könnte ich
> es hinbekommen, den Opcode herauszufinden?

Wenn du den Lader oder die Verbindung
Lader ---> Chipprogrammer anzapfst, ja.
Wenn erst der Programmer entschlüsselt und
eine härtere Gangart eingelegt wird, ja. ;-D

Ich glaub nicht, das der Chip entschlüsselt.

mfg

von Max M. (maxmicr)


Lesenswert?

Aber falls der Weg von der IDE bis zum Writer verschlüsselt ist würde 
das bedeuten, dass ich einen neuen Assembler schreiben müsste, der die 
Mnemonics in den richtigen Opcode des uCs übersetzt den auch der Writer 
erzeugen würde. Dann müsste ich diesen Satz an Infos per UART vom PC zu 
einem uC senden, der den Writer simuliert und dann schlussendlich den 
Chip programmiert?

von ~Mercedes~ (Gast)


Lesenswert?

Max meinte:

> Aber falls der Weg von der IDE bis zum Writer verschlüsselt ist würde
> das bedeuten, dass ich einen neuen Assembler schreiben müsste, der die
> Mnemonics in den richtigen Opcode des uCs übersetzt den auch der Writer
> erzeugen würde. Dann müsste ich diesen Satz an Infos per UART vom PC zu
> einem uC senden, der den Writer simuliert und dann schlussendlich den
> Chip programmiert?

Was wissen wir Beide jetzt?

Ist das Demoprogramm vollständig / lauffähig?
Ist jetzt ein anderes Osterei drinne als im entgültigen Programm?

Der Writer muß entschlüssen.
Dazu muß er eventuell mit dem Chip kommunizieren.
Wie funktioniert die Kommunikation? Wie bei ner
Chipkarte <---> Terminal?
Ist jeder Chip personalisiert oder nur der Writer?
Ist dann der "Private Key" im Writer gespeichert?
Oder wird er durch eine Lizenzmimik erst vom Lader geladen?

Fakt ist, die Hardware ist nur "Pfennigartikel",
das einzige Hindernis zum Opcode ist die Verschlüsselung.
Wenn diese verwuschelt wurde, kommt der Opcode aus dem Writer.

mfg

von ~Mercedes~ (Gast)


Lesenswert?

Ja, noch was:

Ein Osterei könnte sein, das ihre Chips nur
umgelabelte AVR mit firmeneigenem Bootloader sind,
das also der verschlüsselte Programmierstrom
AVR - Opcode ist, der mit dem Assembler generiert wird?

Wenn man so bedenkt, das die IDE ja einen Assembler
und einen kleinen Tiny C - Compiler enthält, und die Vollversion
einen Debugger zum Testen / Simulieren braucht, da ja Fehler
im Vorfeld gefunden werden müssen...

Ist der Opcode der Schatz der Firma, der verschlüsselt gehört.

mfg

von Max M. (maxmicr)


Lesenswert?

~Mercedes~ schrieb:
> Meine Tutorin hat sich das mal angesehen, und
> meint, das da Dein Code in ein kleines "RTOS"
> eingebunden und abgearbeitet wird.

Wie genau erkennt man sowas anhand einer Binärdatei?

~Mercedes~ schrieb:
> Ist der Opcode der Schatz der Firma, der verschlüsselt gehört.

Ich kann mir ehrlich gesagt nicht vorstellen, dass sie die 8-Bit 
Architektur neu erfunden haben. Nachbauen wird die bei dem Preis denke 
ich auch keiner, wer sollte es billiger machen als die Chinesen?

~Mercedes~ schrieb:
> Du willst wirklich Chips bestellen?

Ja

Rufus Τ. F. schrieb:
> Was passiert bei
>
> char test[] = "HALLO"?

Das kann das "Mini-C" leider nicht :(

Rufus Τ. F. schrieb:
> Gegebenenfalls musst Du nur noch den Optimierer überlisten, indem Du
> irgendwo noch lesend auf das Array zugreifst.

Habs mal so probiert:
1
#include  "extern.h"
2
3
void  FPPA0 (void)
4
{
5
  .ADJUST_IC  SYSCLK=IHRC/2    //  SYSCLK=IHRC/2
6
7
  WORD TEST[5];
8
  TEST[0] = 'H';
9
  TEST[1] = 'A';
10
  TEST[2] = 'L';
11
  TEST[3] = 'L';
12
  TEST[4] = 'E';
13
14
  while (1)
15
  {
16
    if(TEST[0] == 'H')
17
      continue;
18
  }
19
}

leider auch ohne Ergebnis.

~Mercedes~ schrieb:
> Ein Osterei könnte sein, das ihre Chips nur
> umgelabelte AVR mit firmeneigenem Bootloader sind,
> das also der verschlüsselte Programmierstrom
> AVR - Opcode ist, der mit dem Assembler generiert wird?

Denke ich eher nicht, der µC hat 79 Instruktionen. Gibt es einen AVR der 
die gleiche Anzahl an Instruktionen hat?

Die PICs wurden recht häufig kopiert, von AVR weiß ich nichts.
(selbst die OTP-PIC-Klone sind noch teurer)

: Bearbeitet durch User
von ~Mercedes~ (Gast)


Lesenswert?

Max meinte:

> Wie genau erkennt man sowas anhand einer Binärdatei?

Das macht man mittels Faktorenanalyse - Schätzverfahren
mit der  Maximum - Likelihood - Methode nach R.A. Fisher. ;-)))

Na, Spaß beiseite, dazu benötigt man viel Erfahrung.
Und Gefühl!
Ich denk, ich lern das nie fließend hexadezimal zu lesen
aber meine Tutorin meint, jeden Tag 2 Stunden "Klavierunterricht"
werden mich in 3 Jahren dahin führen.  Naja, :-O

> Ich kann mir ehrlich gesagt nicht vorstellen, dass sie die 8-Bit
> Architektur neu erfunden haben. Nachbauen wird die bei dem Preis denke
> ich auch keiner, wer sollte es billiger machen als die Chinesen?

Warum schützen die ihren Opcode so abenteuerlich?
Weil vielleicht nur Geld verdient wird, wenn der Opcode geheim bleibt?
Weil man diese Firma sonst nicht brauchen würde?

> Denke ich eher nicht, der µC hat 79 Instruktionen. Gibt es einen AVR der
> die gleiche Anzahl an Instruktionen hat?

Vielleicht ists ein umgelabelter Z180? ;--P
Es gibt ja noch so viele Möglichkeiten...
Irgendwas ist da faul und der Opcode ist der Schlüssel.
Und der Bankrott der Firma. ;-D

mfg

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

~Mercedes~ schrieb:
> Meine Tutorin hat sich das mal angesehen, und
> meint, das da Dein Code in ein kleines "RTOS"
> eingebunden und abgearbeitet wird.

Ich glaube, daß sich Deine Tutorin da vertut. Dieser Controller hat nur 
1 kByte OTP-ROM, da wird abgesehen vom normalen C-Startup-Code (der nur 
eine Handvoll Bytes groß sein wird) ganz sicher nichts zu einem 
C-Programm dazugepackt. Ein RTOS ist das ganz sicher nicht, und da ist 
auch nichts da, was verschlüsselten Programmcode irgendwie auspackt -- 
wohin denn auch, dieser Controller hat gerade mal 64 Bytes RAM.

von ~Mercedes~ (Gast)


Lesenswert?

@Rufus:

Deshalb hab ich ja auch RTOS  in Anführungsstrichelchen
geschrieben. ;-P

> Ich glaube, daß sich Deine Tutorin da vertut.
Die hat ein absolutes Gespür für sowas. Natürlich sind
das bis jetzt Vermutungen.
Versuche an den vorhandenen Dateien sind "verlorende Liebesmüh"
da nicht alles da ist.

Irgend eine Bibliothek muß ja dabei sein, der Startcode
initialisiert ja "nur".
Vielleicht stellt Max dann mal die Vollversion zur Verfügung,
Ich würd' sie dann gern mal fleddern ;--P

Wie sind die EXEn gegen Debugging gesichert?
Fehlen noch DLLs?
Wie kommuniziert der Lader mit dem Prommer?


mfg

von ~Mercedes~ (Gast)


Lesenswert?

@Max,

Was mich interessiert:
Warum willst Du dich nun auf das Abenteuer einlassen,
Dich an diese Firma zu binden?
Warum benutzt Du nicht gängige Chips, wo es dann auch
gängige IDEs und andere Unterstützung gibt?

Wenn man ein größeres Projekt vor hat,
ist es dann nicht schlecht, sich von dieser Firma
mit ihrem properitären Konzept abhängig zu machen?

Ist es wirklich nur der Preis des einzelnen Chips?

mfg

von Max M. (maxmicr)


Lesenswert?

~Mercedes~ schrieb:
> Vielleicht stellt Max dann mal die Vollversion zur Verfügung,
> Ich würd' sie dann gern mal fleddern ;--P

Was genau meinst du? Die IDE inklusive Writer-Software gibt es auf der 
Homepage zum runterladen: www.padauk.com.tw (geht allerdings bei mir 
gerade nicht).

~Mercedes~ schrieb:
> Weil man diese Firma sonst nicht brauchen würde?

Ich denke eher, die Firma "braucht" man, weil sie so gnadenlos günstig 
ist.

~Mercedes~ schrieb:
> Wie sind die EXEn gegen Debugging gesichert?

Ich habs mit einem gängigen Tool geschafft, die Writer-Software zu 
de-assemblieren. Mit x86-Assembler kenne ich mich allerdings nicht aus 
:(

~Mercedes~ schrieb:
> Warum willst Du dich nun auf das Abenteuer einlassen,
> Dich an diese Firma zu binden?

Ich finde die µCs alleine deswegen interessant, weil sie so extrem 
günstig sind. Das ist alles. Und meine Idee war es, einen eigenen 
Programmieradapter zu entwickeln, damit man die Dinger auch ohne die 
Programmiergeräte der Firma flashen kann.

~Mercedes~ schrieb:
> Deshalb hab ich ja auch RTOS  in Anführungsstrichelchen
> geschrieben.

Ja gut, du schreibst etwas in Anführungszeichen, meinst es aber gar 
nicht so?

von ~Mercedes~ (Gast)


Lesenswert?

Max meinte:

> Ja gut, du schreibst etwas in Anführungszeichen, meinst es aber gar
> nicht so?

Ich weiß.
Vater meint auch, das meine Denke viel zu verschlungen ist.
Aber seit dem Zuzug von meiner Tutorin, die bei der
vorherigen Firma wegen Hacking rausgeflogen ist, ist er
eines Besseren belehrt. Es geht noch schlimmer, viel schlimmer. ;-D
Die hat in einer Nacht mit Delphi nach seiner Vorgabe ein Progamm 
geschrieben, wozu ein Anderer Wochen brauchte! ;-O

> Ich finde die µCs alleine deswegen interessant, weil sie so extrem
> günstig sind. Das ist alles. Und meine Idee war es, einen eigenen
> Programmieradapter zu entwickeln, damit man die Dinger auch ohne die
> Programmiergeräte der Firma flashen kann.

Schon klar.
Hast Du schon Ideeen, was Du dann damit machen wirst?

Interressant.
Ich werd am Wochenende mal auf die Seite www.padauk.com.tw
( liest sich wie eine Hackersite ;-P ) gehen und mich da mal
umsehen.

mfg

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Der günstige Preis wird hier durch drei Dinge negiert:

- miese Dokumentation
- OTP, d.h. nach jedem Programmierversuch wegwerfen und neuen Controller 
verwenden
- obskures Entwicklungssystem

von Max M. (maxmicr)


Lesenswert?

~Mercedes~ schrieb:
> Ich weiß.

Was meinst du denn dann?

~Mercedes~ schrieb:
> Hast Du schon Ideeen, was Du dann damit machen wirst?

Erstmal versuchen, mit dem Assembler klar zu kommen :)
Dann typische erste Gehversuche: Serielle Übertragung, dann vllt. 
Display über SPI ansteuern etc.

~Mercedes~ schrieb:
> Ich werd am Wochenende mal auf die Seite www.padauk.com.tw
> ( liest sich wie eine Hackersite ;-P ) gehen und mich da mal
> umsehen.

Freut mich! 4 Augen sehen mehr als 2 :)

Rufus Τ. F. schrieb:
> miese Dokumentation

Da gebe ich dir im Grunde recht, allerdings hat das bisher noch keinen 
davon abgehalten, Hardware einzusetzen (siehe ESP8266, Raspi 
Bare-Metal).

Das Datenblatt ist brauchbar, finde ich.

Rufus Τ. F. schrieb:
> OTP, d.h. nach jedem Programmierversuch wegwerfen und neuen Controller
> verwenden

Dafür gibt es einen ICE, der den µC zu 99% abbildet.

Der µC ist dafür auch einfach sehr günstig.

Rufus Τ. F. schrieb:
> obskures Entwicklungssystem

100% Zustimmung.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Max M. schrieb:
> Dafür gibt es einen ICE, der den µC zu 99% abbildet.

Verfügbar? Bezahlbar?

Wenn ich mir ansehe, zu welchen Preisen man einen Attiny13 bekommen 
kann, nämlich für unter 30 Cent, vermag ich die Begeisterung nicht so 
recht nachzuvollziehen.

Willst Du das Ding in irgendeinem Massenprodukt einsetzen? Für einfache 
Basteleien erscheint es mir ... überaus umständlich.

von ~Mercedes~ (Gast)


Lesenswert?

@Max:
Hab mir die Seite mal angesehen:
Obskur, obskur!

Eine Firma, die die Chips nicht selber herstellt
sondern quasi ein Standard "FPGA" hat und darauf
offenbar verschiedene Cores programmiert, die
sie dann anbietet.

Das heißt, auf dem Chip könnte mehr als der
gewünschte Prozessor sein. ;-P

Welchen Core (also welchen Chip) willst Du versuchen?


mfg

von Dumdi D. (dumdidum)


Lesenswert?

Gibt es nur 8bit Datentypen? Hast Du Dir im hex alle Stellen an denen 3 
(bei mov a,0x03) steht (ca 10 Stueck) gemerkt und verglichen wenn Du 
0x04 schreibst?

von Max M. (maxmicr)


Lesenswert?

~Mercedes~ schrieb:
> Das heißt, auf dem Chip könnte mehr als der
> gewünschte Prozessor sein. ;-P

Wie soll das bei 2 Cent wirtschaftlich funktionieren? Für fremde 
Verschlüsselung müsste man eventuell auch noch Lizenzgebühren zahlen, 
geschweige denn, dass ganze in Hardware zu gießen.

Dumdi D. schrieb:
> Hast Du Dir im hex alle Stellen an denen 3
> (bei mov a,0x03) steht (ca 10 Stueck) gemerkt und verglichen wenn Du
> 0x04 schreibst?
1
0x03 in main.PDK_03 at: [37, 91, 290, 304, 596, 1097, 1335, 2243]
2
0x03 in main.PDK_04 at: [37, 91, 831, 1450, 1961, 1993, 2149, 2285]

Was auch immer das nun bedeutet :(

Dumdi D. schrieb:
> Gibt es nur 8bit Datentypen?

Es gibt einen ldt16 Befehl, der den 16-Bit Zähler eines Timers im RAM 
speichert.
1
word T16val; //delcare RAM word
2
set1 t16m.5; //enable Timer
3
set0 t16m.5; //disable Timer
4
ldt16 T16val; //save T16 counting value to T16val

~Mercedes~ schrieb:
> Welchen Core (also welchen Chip) willst Du versuchen?

PMS150C

: Bearbeitet durch User
von Dumdi D. (dumdidum)


Lesenswert?

Max M. schrieb:
> umdi D. schrieb:
>> Hast Du Dir im hex alle Stellen an denen 3
>> (bei mov a,0x03) steht (ca 10 Stueck) gemerkt und verglichen wenn Du
>> 0x04 schreibst?
>
> 0x03 in main.PDK_03 at: [37, 91, 290, 304, 596, 1097, 1335, 2243]
> 0x03 in main.PDK_04 at: [37, 91, 831, 1450, 1961, 1993, 2149, 2285]
>
> Was auch immer

Mit Vergleich meinte ich, such die Positionrn wo 4 steht bei mov a, 0x04

Dann Vergleichen, dann weisst Du u.U. wo der Code steht.

von Max M. (maxmicr)


Lesenswert?

Dumdi D. schrieb:
> Dann Vergleichen, dann weisst Du u.U. wo der Code steht.
1
Found 0x3 in main.PDK_03 at: [37, 91, 290, 304, 596, 1097, 1335, 2243]
2
Found 0x4 in main.PDK_04 at: [33, 63, 836, 1509]

Leider nicht, zumindest sehe ich da keinen Zusammenhang.

Wenn die Instruktionen z.B. 16-Bit lang sind, kann die 0x04 auch erst im 
nächsten Byte stehen, da ich mir das ganze byteweise anschaue. Wenn aber 
im Byte, in dem 0x04 steht, noch Teile vom Opcode mit dabei sind, finde 
ich das auch nicht.

: Bearbeitet durch User
von ~Mercdes~ (Gast)


Lesenswert?

Max meinte:

> Wie soll das bei 2 Cent wirtschaftlich funktionieren? Für fremde
> Verschlüsselung müsste man eventuell auch noch Lizenzgebühren zahlen,
> geschweige denn, dass ganze in Hardware zu gießen.

Spinnen wir mal absolut:
Ein Geschäftsmodell wäre, ein "Rockefeller - Chip" zu konstruieren.
Der wird wie die berühmten Petroleumlampen ( fast ) verschenkt und breit
gestreut.

Wenn jetzt ein Anwender das absolute Ding,
den absoluten Hit hat, etwa ein kleines Spielzeug
oder Ähnliches kopiert die Firma dies und
macht den Reibach. ;-D
Einfach ein Gerät kaufen, den Chip auslesen und ein
eigenes "entwickeln".

mfg

von ~Mercedes~ (Gast)


Lesenswert?

> PMS150C

Zu welcher Gruppe gehört der dazu, ich
hab nur PFS154 gefunden

mfg

von ~Mercedes~ (Gast)


Lesenswert?

Ich meine natürlich PMS154C ;-O

mfg

von Max M. (maxmicr)


Lesenswert?

~Mercedes~ schrieb:
> Zu welcher Gruppe gehört der dazu

Der ist hier zu finden: http://www.padauk.com.tw/products.php?item=42

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?


von ~Mercedes~ (Gast)


Lesenswert?

ich danke euch beiden!

@Max, hast Du mit dem IAR - Compiler, wo sich da die Beiden streiten ;-P
schon ein anderes Projekt erstellt, das lief?

ich hatte nämlich ähnliches beim 8052 Prozessor,
da hat die IDE das Startup und das Linker - File jeweils
von einem andren Device genommen, Neuinstallation der IAR
ide hat da geholfen.

mfg

von Peter D. (peda)


Lesenswert?

Max M. schrieb:
> 0.02$ auf Taobao.

Der Preis wird nur für große Stückzahlen (10.000) möglich sein.

Ab 11 Stück sind es 0,21$:
https://www.yoycart.com/Product/544765213336/

: Bearbeitet durch User
von Max M. (maxmicr)


Lesenswert?

Auf Taobao kann man die Anzahl flexibel einstellen und der Preis bleibt 
der gleiche. Ich behaupte daher mal, dass die 2 Cent auch für 1 Stück 
gelten, ansonsten wäre das verwirrend für alle Käufer.
Eventuell kauft Yoycart die Dinger direkt beim Hersteller und auf Taobao 
steht ein Lager mit 100.000 Stück dahinter, die die Teile für 1 Cent 
bekommen haben (ähnlich STM32F103 & STM8S aus China).

Sich nur ein Stück zu kaufen wäre hinsichtlich der Versandkosten wenig 
sinnvoll. 100 Stück sollten es dann schon sein.

: Bearbeitet durch User
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Max M. schrieb:
> Auf Taobao kann man die Anzahl flexibel einstellen und der Preis bleibt
> der gleiche.

Zeig mal den Link bitte.

> 100 Stück sollten es dann schon sein.

Du unterschätzt die Anzahl der nötigen Versuche, bis Du Dein erstes 
lauffähiges Programm hast, mit dem Du dann auch zufrieden bist und es so 
auch in Deiner Anwendung nutzen willst.

Bis dahin hast Du die 100 Stück schon in der Tonne versenkt...

Merke: OTP lohnt sich wirklich nur bei großen Stückzahlen und ist für 
den Hobbybereich unbrauchbar.

von Max M. (maxmicr)


Lesenswert?

Frank M. schrieb:
> Zeig mal den Link bitte.

Um ehrlich zu sein fällt mir gerade auf, dass in der Beschreibung 
darunter wohl so etwas steht wie, dass der Preis ab 20.000 Stück bei 
0.13RMB und ab 40.000 bei 0.12RMB liegt:

https://item.taobao.com/item.htm?spm=a230r.1.14.13.1edd4394aWnHE2&id=543284539006&ns=1&abbucket=2#detail

Warum man dann die Anzahl variabel einstellen kann ist mir ein Rätsel. 
Ich bin gespannt was passiert, wenn man da nur 100 Stück bestellt.

Frank M. schrieb:
> OTP lohnt sich wirklich nur bei großen Stückzahlen und ist für
> den Hobbybereich unbrauchbar.

Du musst mich von nichts überzeugen, genauso wenig werde ich dich von 
irgendwas überzeugen. Außerdem hab ich schon begründet, warum man auch 
bereits mit einem einzigen OTP uC ein lauffähiges Programm hinbekommen 
kann (siehe ICE).

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Max M. schrieb:
> Um ehrlich zu sein fällt mir gerade auf, dass in der Beschreibung
> darunter wohl so etwas steht wie, dass der Preis ab 20.000 Stück bei
> 0.13RMB und ab 40.000 bei 0.12RMB liegt:

Du siehst das ziemlich blauäugig.

Wenn ich unter https://www.yoycart.com/Product/544765213336/ mit der 
Anzahl spiele (Menge eingeben, dann TAB-Taste), sieht man, dass man erst 
ab mehreren hundert Stück 3 Cent bezahlt. So ähnlich wird das auch 
woanders sein - egal wo.

> Außerdem hab ich schon begründet, warum man auch bereits mit einem
> einzigen OTP uC ein lauffähiges Programm hinbekommen kann (siehe ICE).

Leider hast Du auch auf Nachfrage verschwiegen, was so ein ICE u.a. 
kostet:

Rufus Τ. F. schrieb:
> Verfügbar? Bezahlbar?

Das einzige was Du zum ICE geschrieben hast, ist das:

> Dafür gibt es einen ICE, der den µC zu 99% abbildet.

Was zur Hölle ist das? Ein Simulator? Der könnte Dir helfen, klar. Aber 
es ersetzt nicht den Echttest mit real existierender Hardware.

> warum man auch bereits mit einem einzigen OTP uC ein lauffähiges
> Programm hinbekommen kann

Ein Blinkprogramm vielleicht. Aber eine ernstzunehmende Anwendung: Nein, 
das glaube ich nicht. Deine Blauäugigkeit ist offenbar nicht nur auf 
Deine Preisvorstellungen beschränkt.

> Du musst mich von nichts überzeugen

Will ich auch gar nicht.

Nicht schwätzen, sondern machen. Wieso musst Du noch lange über einen 
Chip diskutieren, der Dich lediglich 2 Cent kostet? Kauf Dir EINEN und 
MACH es vor.

: Bearbeitet durch Moderator
von Win DJ Ammer (Gast)


Lesenswert?

Der Versuch wird sicher sehr lehrreich sein. Und nachher wird der Poster 
auch begriffen haben, dass bei einem vernuenftigen Projekt, mit etwas 
mehr als einer LED, ein Controller auch fuer eine 100er Stueckzahl 5 
Euro kosten kann wenn man sich ein paar (Stunden)Tage spart.
Und dass man sich Sparuebungen mit Tiny oder so gar nicht erst antun 
sollte.

von ~Mercedes~ (Gast)


Lesenswert?

@Max,
Du willst das Experiment wirklich wagen? ;-P

Hast Du schon Verbindung zur Firma aufgenommen?
Mich würden jetzt die Bedingungen und der Preis des
Programmierequipments interessieren, vor allen Dingen:

Bekommst Du dann eine Vollversion des Writers und der IDE?
Ist diese anders / vollständiger als die Version auf der Site?
Was ist an der Hardware dranne?
Wie funktioniert die Lizenzierung?

ich setz am Wochenende dann mal eine VM auf und würde das
Ganze dann anschauen.

mfg

von Michael Engel (Gast)


Lesenswert?

Schau mal auf S. 79 im chinesischen Handbuch zur IDE - da sind einige 
wenige Assembler-Befehle mit den zugehörigen Opcodes angegeben (im 
Kontext der Optimierung durch den C-Compiler, wenn google translate 
nicht lügt):

5E0A MOV A BB1
1B21 COMP A #0x21
2040 T0SN CF
5C0B MOV BB2 A

Weiter vorne finden sich noch (S. 73):

C028 GOTO 0x28
0030 WDRESET
1F00 MOV A #0x0
0082 MOV SP A

Vielleicht finden sich einige davon im Binary wieder, wenn du versuchst, 
diese Instruktionen zu assemblieren. Es sieht auch so aus, also ob es 
eine Option geben könnte, ein Listing-File mit Mnemonics und Opcodes vom 
Compiler zu erhalten, das könnte helfen. S. 38 könnte einen Hinweis 
darauf geben, da steht "Drücken Sie im Fenster Inverted Decode die 
rechte Maustaste, um die LIST-Datei zu speichern."

Ansonsten evtl. auch mal bei 
https://reverseengineering.stackexchange.com posten, vielleicht hat da 
noch jemand Ideen.

-- Michael

von Max M. (maxmicr)


Lesenswert?

Michael Engel schrieb:
> Schau mal auf S. 79 im chinesischen Handbuch zur IDE

Wo findet man das Handbuch?

von Le X. (lex_91)


Lesenswert?

Ich finde das was der TE macht eigentlich recht interessant.
Es ist sehr lehrreich, so ein Thema mal durchzukauen.

Dass es ökonomisch sinnfrei ist ist ja offensichtlich, erst recht als 
Privatmann ohne 7-stelligen Stückzahlen.
Aber ist halt Hobby.

von Philipp Klaus K. (pkk)


Lesenswert?

Warum wird dieser Thread eigentlich bei der Suche nach "Padauk" nicht 
gefunden?

Philipp

P.S.: Seit diesem Post wird er gefunden.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Spätestens jetzt wird er es.

von Christopher J. (christopher_j23)


Lesenswert?

In wie weit handelt es sich denn bei den Padauk um exakte Klone der PIC 
(abgesehen von OTP statt Flash)? Im EEVBlog Forum war zu lesen, dass der 
PMS150C Bit-kompatibel zum PIC10F200 sei.

von Philipp Klaus K. (pkk)


Lesenswert?

Christopher J. schrieb:
> In wie weit handelt es sich denn bei den Padauk um exakte Klone der PIC
> (abgesehen von OTP statt Flash)? Im EEVBlog Forum war zu lesen, dass der
> PMS150C Bit-kompatibel zum PIC10F200 sei.

Der Padauk ist viel besser als ein einfacher PIC, wie ein kurzer Blick 
ins Datenblatt zeigt.
Ein Beispiel: Der PIC10F200 hat einen Hardware-Kellerspeicher, nur zwei 
Einträge tief. Der PMS150C hat einen 8-bit-Stapelzeiger, und kann damit 
den gesamten RAM als Kellerspeicher verwenden.

Der Padauk sieht im Vergleich zu den kleinen PIC nach einer deutlich 
besseren Zielarchitektur für C-Compiler aus. Aber bei Padauk fehlt es an 
Dokumentation.

Philipp

P.S.: Die Padauk-µC haben anscheinend alle grob die gleiche Architektur. 
Interessante Unterschiede der Varianten sind: OTP vs. MTP, Single- vs. 
Dual-Core, RAM von 60B bis 256B. Manche Varianten haben auch einen 
Hardwaremultiplizierer (8x8->16, Ausführung in 1 Takt).
Wenn die Dokumentation etwas besser wäre, und jemand ein freies 
Flashprogramm schreiben und asxxxx und ucsim portieren würde, könnte man 
wohl auch ein SDCC-backend für die Padauk schreiben.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Philipp Klaus K. schrieb:
> Kellerspeicher

Ich hätte nicht gedacht, diesem Begriffsfossil nach 1990 noch mal 
irgendwo in freier Wildbahn zu begegnen. Holla!

von Philipp Klaus K. (pkk)


Lesenswert?

Michael Engel schrieb:
> Schau mal auf S. 79 im chinesischen Handbuch zur IDE - da sind einige
> wenige Assembler-Befehle mit den zugehörigen Opcodes angegeben (im
> Kontext der Optimierung durch den C-Compiler, wenn google translate
> nicht lügt):
>
> 5E0A MOV A BB1
> 1B21 COMP A #0x21

Was aber auch etwas verwirrend ist, denn ein comp finde ich im 
Datenblatt nicht. Es wäre naheliegend, auch von der Verwendung im 
Beispiel her, dass es eine Variante von sub, die nur Flags setzt, ist. 
Aber ein undokumentierter Befehl im Beispiel?

Philipp

von Olaf (Gast)


Lesenswert?

> Du unterschätzt die Anzahl der nötigen Versuche, bis Du Dein erstes
> lauffähiges Programm hast, mit dem Du dann auch zufrieden bist und es so
> auch in Deiner Anwendung nutzen willst.

Also ich finde das ja super. Dann bekommen wir endlich wieder 
Programmierer die echte MaennerInnen sind und nicht solche 
Versuch&Irrtum-Coder. :-)

In der Anfangszeit mussten wir ja auch mit externem Eprom coden. Da sah 
das so aus.

1. Sehr gruendlich nachdenken ob der Code fehlerfrei ist.
2. 1min Eprom brennen. (50ms pro Byte Programmcode)
3. Ausprobieren.
4. Fluchen.
5. Fehler finden.
6. 10-15min Eprom loeschen.
7. zurueck auf 1.

Hier nochmal ein Tip aus der Vergangenheit: Am besten den Code so 
schreiben das er weiter oben im Programmspeicher anfaengt. Und dann 
jeder neue Versuch etwas tiefer im Speicher. Dann hab habt ihr immerhin 
mehrere versuche pro OTP bis ihr unten angekommen seid.

Olaf

von Philipp Klaus K. (pkk)


Lesenswert?

Olaf schrieb:
>> Du unterschätzt die Anzahl der nötigen Versuche, bis Du Dein erstes
>> lauffähiges Programm hast, mit dem Du dann auch zufrieden bist und es so
>> auch in Deiner Anwendung nutzen willst.
>
> Also ich finde das ja super. Dann bekommen wir endlich wieder
> Programmierer die echte MaennerInnen sind und nicht solche
> Versuch&Irrtum-Coder. :-)

Oder eine Quelle für die Varianten mit mehrfach beschreibbarem Speicher 
finden.

Philipp

P.S.: https://detail.1688.com/offer/562502806054.html, eine Variante mit 
doppelt so viel RAM und Programmspeicher (diesmal nicht OTP). Aber ob 
die nach Europa liefern weiß ich nicht.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Olaf schrieb:
> Hier nochmal ein Tip aus der Vergangenheit: Am besten den Code so
> schreiben das er weiter oben im Programmspeicher anfaengt.

Und hinter jeder Funktion etwas Luft lassen. Dann kann man bei Fehlern 
die Funktion aus-NOP-en (mit 0x00 überschreiben) und dahinter den Sprung 
zur korrigierten Funktion schreiben.

Ach nee, darauf kann ich dankend verzichten. Ein heutiges Gerät muß per 
Bootloader umprogrammierbar sein, ohne es zu öffnen.

von olaf (Gast)


Lesenswert?

> dahinter den Sprung zur korrigierten Funktion schreiben.

Und die relativen Sprungziele im Kopf berechnen. Jep, so fangen die 
kleinen Hacker an. :-D

Olaf

von Markus F. (mfro)


Lesenswert?

Olaf schrieb:
> Hier nochmal ein Tip aus der Vergangenheit: Am besten den Code so
> schreiben das er weiter oben im Programmspeicher anfaengt. Und dann
> jeder neue Versuch etwas tiefer im Speicher. Dann hab habt ihr immerhin
> mehrere versuche pro OTP bis ihr unten angekommen seid.

Wenn der Prozessor einen fixen Einsprungpunkt hat, funktioniert das nur 
dort, wo 0xffff (das "leere" EPROM) ein NOP (oder ein anderer, 
"unschädlicher" Opcode) ist (das Programm also die "leeren" 
Speicherstellen ohne Stolperer überlaufen kann).

Bei m68k z.B. löst Du damit nur eine Line-F Exception aus, bei ARM einen 
UsageFault (illegal instruction) und selbst beim Z80 bewirkt 0xff einen 
RST 38H und nicht das gewünschte Verhalten.

Für mich bleibt die Frage, bei welchem Prozessor das funktioniert hat?

von Frank B. (foobar)


Lesenswert?

Das Programmierverfahren wird gerade bei EEVblog entschlüsselt:

http://www.eevblog.com/forum/blog/eevblog-1144-padauk-programmer-reverse-engineering/

Der Grund für die Änderung vieler Bytes wenn man nur einen Befehl 
ändert, ist eine krude Verschlüsselung per laufender 
XOR-Verschlüsselung, wie jemand am Ende herausgefunden hat.

von Philipp Klaus K. (pkk)


Lesenswert?

Frank B. schrieb:
> Das Programmierverfahren wird gerade bei EEVblog entschlüsselt:
>
> http://www.eevblog.com/forum/blog/eevblog-1144-pad...
>
> Der Grund für die Änderung vieler Bytes wenn man nur einen Befehl
> ändert, ist eine krude Verschlüsselung per laufender
> XOR-Verschlüsselung, wie jemand am Ende herausgefunden hat.

Und das ergab ein Programm, um aus dem, was die Padauk IDE erzeugt 
"normale" Binärdateien zu erhalten:

http://www.eevblog.com/forum/blog/eevblog-1144-padauk-programmer-reverse-engineering/msg1946371/#msg1946371

Philipp

von Olaf (Gast)


Lesenswert?

> Für mich bleibt die Frage, bei welchem Prozessor das funktioniert hat?

MCS48 und MCS51. Die hatte ich zu der Zeit am Wickel. Koennte auch noch 
ST6 gewesen sein.

Olaf

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.