Forum: Mikrocontroller und Digitale Elektronik Frage zu Assemblercode TLCS-90, Fehler im Datenblatt


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Flo G. (flolix)


Lesenswert?

Guten Abend,

ich habe folgendes Assemblerlisting für einen TMP90C141 Mikrocontroller, 
der gehört zur Toshiba TLCS-90 Familie.
1
 ROM 00102: 37 ef 00     LD  (0xef), 0x00 ;;  ROM ZP IO ADMOD
2
 ROM 00105: b4 ef        RES 4, (0xef) ;;  ROM ZP IO ADMOD
3
 ROM 00107: 3a 0f ff     LD  HL, 0xff0f
4
 ROM 0010a: 39 17 ff     LD  DE, 0xff17
5
 ROM 0010d: 38 04 00     LD  BC, 0x0004
6
 ROM 00110: fe 59        LDIR
7
 ROM 00112: 1c 48 28     CALL 0x02848
8
 ROM 00115: 1c cb 02     CALL 0x002cb
9
 ROM 00118: ef 17 6f ff  CP  (0x17), 0xff ;;  ROM iRam ZP
10
 ROM 0011c: ce 08        JR  NZ, pc+08 (126)
11
 ROM 0011e: ef 19 6f cf  CP  (0x19), 0xcf ;;  ROM iRam ZP
12
 ROM 00122: eb 99 4d d6  CALL EQ, 0x4d99
13
 ROM 00126: e7 17 2c     ???
14
 ROM 00129: fc 6f ea     CP  H, 0xea
15
 ROM 0012c: eb 62 08 c6  JP  EQ, 0x0862
16
 ROM 00130: fc 6f ca     CP  H, 0xca
17
 ROM 00133: ce 05        JR  NZ, pc+05 (13a)
18
 ROM 00135: bf 01        SET 7, (0x01) ;;  ROM iRam ZP
19
 ROM 00137: 1a 62 08     JP  0x00862
20
 ROM 0013a: fc 6f e8     CP  H, 0xe8
21
 ROM 0013d: eb 33 0c c6  JP  EQ, 0x0c33
22
 ROM 00141: 37 e6 18     LD  (0xe6), 0x18 ;;  ROM ZP IO
23
 ROM 00144: 1c 44 04     CALL 0x00444
24
 ROM 00147: a9 00        BIT 1 (0x00) ;;  ROM iRam ZP
25
 ROM 00149: ce 1c        JR  NZ, pc+1c (167)
26
 ROM 0014b: 27 66        LD A,(0x66)
27
 ROM 0014d: 28           LD  B, A
28
 ROM 0014e: 27 65        LD A,(0x65)
29
 ROM 00150: f8 af        BIT 7, B
30
 ROM 00152: ce 0a        JR  NZ, pc+0a (15e)
31
 ROM 00154: fe af        BIT 7, A
32
 ROM 00156: c6 04        JR  EQ, pc+04 (15c)
33
 ROM 00158: 87 2a        INC (0x2a)
34
 ROM 0015a: c8 02        JR  TT, pc+02 (15e)
35
 ROM 0015c: 8f 2a        DEC (0x2a)
36
 ROM 0015e: b9 00        SET 1, (0x00) ;;  ROM iRam ZP
37
 ROM 00160: bc e6        SET 4, (0xe6) ;;  ROM ZP IO
38
 ROM 00162: 1c 44 04     CALL 0x00444
39
 ROM 00165: c8 e0        JR TT, pc- 20 (147)
40
 ROM 00167: 37 e9 28     LD  (0xe9), 0x28 ;;  ROM ZP IO
41
 ROM 0016a: 37 eb fe     LD  (0xeb), 0xfe ;;  ROM ZP IO
42
 ROM 0016d: b9 e6        SET 1, (0xe6) ;;  ROM ZP IO
43
 ROM 0016f: b8 e7        SET 0, (0xe7) ;;  ROM ZP IO INTEH
44
 ROM 00171: 37 d2 e0     LD  (0xd2), 0xe0 ;;  ROM ZP IO WDMOD
45
 ROM 00174: ef 17 6f ff  CP  (0x17), 0xff ;;  ROM iRam ZP
46
 ROM 00178: ce 08        JR  NZ, pc+08 (182)
47
 ROM 0017a: ef 19 6f f8  CP  (0x19), 0xf8 ;;  ROM iRam ZP
48
 ROM 0017e: ce 02        JR  NZ, pc+02 (182)
49
 ROM 00180: b4 00        RES 4, (0x00) ;;  ROM iRam ZP
50
 ROM 00182: e7 17 2c     ???
51
 ROM 00185: fc 6f 8b     CP  H, 0x8b
52
 ROM 00188: c6 69        JR  EQ, pc+69 (1f3)
53
 ROM 0018a: e7 19 2c     ???
54
 ROM 0018d: fc 6f fe     CP  H, 0xfe
55
 ROM 00190: ce 05        JR  NZ, pc+05 (197)
56
 ROM 00192: 1c 1e 0a     CALL 0x00a1e
57
 ROM 00195: c8 06        JR  TT, pc+06 (19d)

Der Code stammt aus einem selbstgeschriebenen Disassembler.. an ein paar 
Stellen taucht "e7 17 2c" oder "e7 19 2c" auf. Den Code kann ich aber 
laut Datenblatt zur TLCS-90 Familie nicht decodieren. Ich bin der 
Meinung, da ist ein Fehler im Datenblatt (auf Seite 341 oben). Statt 
EF:n:28+r müsste da stehen E7:n:28+r. Dann würde sich der Code schön und 
sinnvoll zu LD H, (n) übersetzen lassen. Hier findet sich das 
Datenblatt:
 https://usermanual.wiki/Document/1988ToshibaTLCS48908BitMicrocontroller.1499259318/help

Ich wäre dankbar, wenn sich das jemand mal kurz anschauen könnte, ich 
habe viele Stunden damit verbracht, bis ich langsam einsehe, daß der 
Fehler vielleicht ausnahmsweise im Datenblatt zu finden ist..

schöne Grüße
Flo

von Erich (Gast)


Lesenswert?

Das Ding ist ca. 30 Jahre alt,
war damals schon recht exotisch.
Wirst schon recht haben mit deiner Vermutung.
Gruss

von Olaf (Gast)


Lesenswert?

Ist das nicht Z80? ICh meine die Teilen hatten doch auch bergeweise
"geheime" Befehle. Gab damals jedenfalls mal Tabellen mit diesen 
Befehlen.

Olaf

von Patrick L. (Firma: S-C-I DATA GbR) (pali64)


Lesenswert?

Warum versuchst du es nicht mal mit der Tabelle ab Seite 352 zu 
verifizieren?

Ja ich weis lausiges PDF schwer zu lesen, :-(

Aber der Code E7 ist ja schon belegt? dann wäre der ja auch falsch?

Habe es nur überflogen, den mit dem Handy ist das PDF nicht gut zu lesen 
weil es Grafik und nicht Text ist ;-)

von Dieter (Gast)


Lesenswert?

Flo G. schrieb:
>
> Ich bin der
> Meinung, da ist ein Fehler im Datenblatt (auf Seite 341 oben). Statt
> EF:n:28+r müsste da stehen E7:n:28+r. Dann würde sich der Code schön und
> sinnvoll zu LD H, (n) übersetzen lassen.

Der Assembler "AS" unterstützt den TLCS-90:

http://john.ccac.rwth-aachen.de:8000/as/index.html

Wenn man in code90c141.c reinschaut scheint es so zu
sein wie Du vermutest.

Laut der "AS" Doku war die Referenz:

Toshiba Corp.: 8-Bit Microcontroller TLCS-90 Development System Manual 
1990

von Flo G. (flolix)


Lesenswert?

Olaf schrieb:
> Ist das nicht Z80? ICh meine die Teilen hatten doch auch bergeweise
> "geheime" Befehle. Gab damals jedenfalls mal Tabellen mit diesen
> Befehlen.

Ja es ist eine Z80 Architektur. Der Befehlssatz ist aber wesentlich 
komplexer und mächtiger.. und hat nicht sehr viel mit Z80 zu tun.. es 
bleibt auch wenig Platz für illegale Opcodes..

Patrick L. schrieb:
> Warum versuchst du es nicht mal mit der Tabelle ab Seite 352 zu
> verifizieren?
>
> Ja ich weis lausiges PDF schwer zu lesen, :-(
>
> Aber der Code E7 ist ja schon belegt? dann wäre der ja auch falsch?
>
> Habe es nur überflogen, den mit dem Handy ist das PDF nicht gut zu lesen
> weil es Grafik und nicht Text ist ;-)
Ich habe die Tabellen alle schon 57 mal durchgearbeitet.. leider nicht 
sehr übersichtlich.

Letztlich will ich ausschließen, daß der EPROM irgendwie korrupt ist. 
Ich repariere da ein altes E-Piano. Der Controller hängt an einer 
Stelle, die ist auch schon längst identifiziert. Aber der Code macht 
einfach nur Sinn mit dem Fehler im Datenblatt.

Danke schon mal für die Antworten.

vg Flo

von Flo G. (flolix)


Lesenswert?

Dieter schrieb:
> Der Assembler "AS" unterstützt den TLCS-90:
>
> http://john.ccac.rwth-aachen.de:8000/as/index.html
>
> Wenn man in code90c141.c reinschaut scheint es so zu
> sein wie Du vermutest.
>
> Laut der "AS" Doku war die Referenz:
>
> Toshiba Corp.: 8-Bit Microcontroller TLCS-90 Development System Manual
> 1990

Ahhh! Danke! Das hilft mir! den Assembler hatte ich nicht gefunden!

von Flo G. (flolix)


Lesenswert?

Flo G. schrieb:
> Dieter schrieb:
>> Der Assembler "AS" unterstützt den TLCS-90:
>>
>> http://john.ccac.rwth-aachen.de:8000/as/index.html
>>
>> Wenn man in code90c141.c reinschaut scheint es so zu
>> sein wie Du vermutest.
>>
>> Laut der "AS" Doku war die Referenz:
>>
>> Toshiba Corp.: 8-Bit Microcontroller TLCS-90 Development System Manual
>> 1990
>
> Ahhh! Danke! Das hilft mir! den Assembler hatte ich nicht gefunden!

Ja, der AS Assembler übersetzt das tatsächlich zu e7:n:28+r
Auch wenn ich das Toshiba Corp.: 8-Bit Microcontroller TLCS-90 
Development System Manual 1990 nicht gefunden habe.

Vielen Dank für die Hilfe!

von Patrick L. (Firma: S-C-I DATA GbR) (pali64)


Lesenswert?

Na dann viel Glück bei der Rep;-)

Sonnst falls du es nicht mitbekommen hättest, ich Baue solche Dinger 
Prof.
Also wenn du Fragen hast nur zu, versuche dir gerne zu helfen. ;.)

von Dieter (Gast)


Lesenswert?

Flo G. schrieb:
>
> Letztlich will ich ausschließen, daß der EPROM irgendwie korrupt ist.

Die besseren EEPROM Programmiergeräte lesen einen EEPROM zusätzlich
bei etwas höherer und niedriger Betriebsspannung. Wenn es dabei
Unterschiede gibt weiss man dass etwas nicht stimmt. Allerdings
hilft das nicht immer, manche Fehler erkennt man so nicht.

von Flo G. (flolix)


Lesenswert?

Patrick L. schrieb:
> Na dann viel Glück bei der Rep;-)
>
> Sonnst falls du es nicht mitbekommen hättest, ich Baue solche Dinger
> Prof.
> Also wenn du Fragen hast nur zu, versuche dir gerne zu helfen. ;.)

Na einer der 160-pinnigen Kawai K015 Tone Generator ICs läßt sich nicht 
korrekt initialisieren bzw. meldet nicht zurück, daß er initialisiert 
wurde. Und der Controller wartet in einer Schleife darauf. Ich nehme die 
Abfrage jetzt einfach raus aus dem EPROM.. mal schauen ob das was 
hilft..

Dieter schrieb:
> Die besseren EEPROM Programmiergeräte lesen einen EEPROM zusätzlich
> bei etwas höherer und niedriger Betriebsspannung. Wenn es dabei
> Unterschiede gibt weiss man dass etwas nicht stimmt. Allerdings
> hilft das nicht immer, manche Fehler erkennt man so nicht.
Ja, ich habe so ein Gerät.. aber erstmal nur bei Nennspannung 
ausgelesen. Das mach ich noch. Allerdings ist der Code so schön und 
konsistent, daß ich daran im Moment nicht glaube..

von Patrick L. (Firma: S-C-I DATA GbR) (pali64)


Lesenswert?

Flo G. schrieb:
> Na einer der 160-pinnigen Kawai K015 Tone Generator ICs läßt sich nicht
> korrekt initialisieren bzw. meldet nicht zurück, daß er initialisiert
> wurde. Und der Controller wartet in einer Schleife darauf. Ich nehme die
> Abfrage jetzt einfach raus aus dem EPROM.. mal schauen ob das was
> hilft..

Kontrolliere die Stabilität der Versorgungsspannung!

Das ist ein sehr häufiges Problem bei den Kawai Tongeneratoren.
Passiert in der regel so ab 5 Jahren Gebrauchszeit.
Oft sind dann ausgetrocknete ELKOS im Netzteil schuld.

von Flo G. (flolix)


Lesenswert?

Patrick L. schrieb:
> Kontrolliere die Stabilität der Versorgungsspannung!

Ja ok danke. Ich habe natürlich das Netzteil als erstes geprüft, aber 
direkt auf dem Controllerboard (da sind auch noch ein paar Elkos) habe 
ich das nicht getan. Werde ich nachholen..

von Philipp Klaus K. (pkk)


Lesenswert?

Dieter schrieb:
> Flo G. schrieb:
>>
>> Ich bin der
>> Meinung, da ist ein Fehler im Datenblatt (auf Seite 341 oben). Statt
>> EF:n:28+r müsste da stehen E7:n:28+r. Dann würde sich der Code schön und
>> sinnvoll zu LD H, (n) übersetzen lassen.
>
> Der Assembler "AS" unterstützt den TLCS-90:

Und der sdas (asxxxx-fork von SDCC), da SDCC selbst ebenfalls den 
TLCS-90 unterstützt.

von Philipp Klaus K. (pkk)


Lesenswert?

Wo verwendest du den TLCS-90? Das ist, besonders heutzutage, ja ein 
recht exotischer Microcontroller.
SDCC hat zwar den tlcs90-Port für den TLCS-90, aber getestet wird dieser 
nur mittels des Emulators uCsim. Daher wäre es interessant zu wissen, ob 
es da eine geeignete Hardwareplattform zum Test gibt.

Z.B. hatte vor Jahren der tlcs90-Port einen Bug, durch den ein pop af 
generiert wurde, ohne vorheriges push af. Bei nahezu allen Z80-Derivaten 
ist solcher Code korrekt, aber der TLCS-90 hat das Interrupt-enable flag 
in Register F, so dass damit unbeabsichtigt Interrupts ein- oder 
ausgeschaltet wurden.
Das wurde dann von einem Nutzer bemerkt, aber meines Wissens hat der 
tlcs90-Port nur sehr wenige Nutzer, so dass das Risiko besteht, dass 
SDCC bei Bugs im tlcs90-Port nicht zeitnah Bugreports erhält.

von Rbx (rcx)


Lesenswert?

Philipp Klaus K. schrieb:
> ein
> recht exotischer M..
Es gibt sogar ein exotisches 5-einhalb stündiges 
Disassemblerprogrammierung-Video dazu:
T: Hjalfi writes a disassembler for the TLCS90
https://www.youtube.com/watch?v=4-0I2NpqS9c

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.