Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » U880 / Z80 Assembler für Dumy » Themenansicht

Autor Thread - Seiten: -1-
000
02.10.2013, 12:04 Uhr
sas



Hallo

ich Dis-Assembliere gerade den BR02 Z80 Code der F2000.
Dabei ist mir folgendes Codefragment aufgefallen:
Hinweis M entspricht (HL).

2215: 3E FF LD A, 0xff
2217: BE CP M
2218: C8 RET Z // M == 0xff springe zurück
2219: 7A AND A // Flags Z, S, PC; Lösche N und C
221a: AE XOR M // A = A XOR M
221b: E6 7F AND 0x7f // Maske 0111 1111
221d: 20 F5 JR NZ, 0xf5 // nach 0x2214
221f: CB 7E BIT 7, M // Prüfe Bit 7 von M
2221: 37 SCF // Set Carry Flag
2222: C0 RET NZ // Bit 7 war 0
2223: 3A 65 78 LD A, (0x7865) // weiter ?? wie? nach dem AND 0x7f??
2226: E6 04 AND 0x04 // Maske 0000 0100
2228: C0 RET NZ
2229: 37 SCF // Set Carry Flag
222a: C9 RET

in M steht entweder 0xff oder 0x29; 0x29 bedeutet das die Abfrage des Namensgebers nicht ausgedruckt bzw. in Lochstreifen gestanzt wird. Eine Echo-Unterdrückung.
In der F2000 Dokumentation auch als Zeichenunterdrückung bezeichnet.

Interesasnt ist die Frage ab Zeile 2222 geht es genau genommen weiter mit dem RET NZ
denn die AND 0x7f Maskierung bewirkt das Bit 7, M immer 0 ist und der Code ab 2223 nie ausgeführt wird.

Kann sich nicht mal ein F2000 Programmierer äußern?

Ich bin auf der Suche nach allen in den Varianten ROM gespeicherten Varianten Betriebsarten. Denn viele sind nicht Dokumentiert wie GTX (Kodetransparenz) und das
Abschalten der Meldungen bei CRC Fehler die nicht schwerwiegend für die weitere Ausführung des Codes sind.

Jörg
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
02.10.2013, 12:34 Uhr
jmueller



Du verwechselst "RET NZ" mit "RET P".
NZ heiß NOT ZERO und nicht Minus.

Jens
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
02.10.2013, 14:10 Uhr
PIC18F2550

Avatar von PIC18F2550

Gibt es von wo anderst einen Einsprung auf 2223?

Oder gibt der ominöse rücksprung einen sinn wenn 221b und 221d durch NOP ersetzt werden.

Ich kann leider nicht sehen wohin 221d Springt könnte auch eine Unterdrückung von 8Bit Zeichen sein(überlesen)bzw wird es als Steuersequenz missbraucht.
--
42 ist die Antwort auf die "Frage nach dem Leben, dem Universum und dem ganzen Rest"
Aktuelle Projektdokumentationen
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
02.10.2013, 18:08 Uhr
Wusel_1




Zitat:
sas schrieb

Interesasnt ist die Frage ab Zeile 2222 geht es genau genommen weiter mit dem RET NZ
denn die AND 0x7f Maskierung bewirkt das Bit 7, M immer 0 ist und der Code ab 2223 nie ausgeführt wird.

Du irrst. Bit 7 wird abgefrag - da dort "0" steht wird das Z-Flag gesetzt, also geht es bei 2223 weiter. (NZ - Bit ist nicht 0!)
--
Beste Grüße Andreas
______________________________________
DL9UNF ex Y22MF es Y35ZF
JO42VP - DOK: Y43 - LDK: CE

*** wer glaubt, hört auf zu denken ***

Dieser Beitrag wurde am 02.10.2013 um 19:43 Uhr von Wusel_1 editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
02.10.2013, 19:35 Uhr
sas



Gute Nacht,

C0 ist immer noch RET NZ
Wer schreibt was von Minus?

Jörg


Zitat:
jmueller schrieb
Du verwechselst "RET NZ" mit "RET P".
NZ heiß NOT ZERO und nicht Minus.

Jens

Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
02.10.2013, 19:39 Uhr
sas



Hallo PIC

der Aufruf lautet CALL 0x2115
davor steht zwar INC HL, das ist aber nur für JR NZ schleife interessant

also:
2114: 23 INC HL
2215: 3E FF LD A, 0xff
Es wird nicht in diese Prozedur weiter eingesprungen.


Zitat:
PIC18F2550 schrieb
Gibt es von wo anderst einen Einsprung auf 2223?

Oder gibt der ominöse rücksprung einen sinn wenn 221b und 221d durch NOP ersetzt werden.

Ich kann leider nicht sehen wohin 221d Springt könnte auch eine Unterdrückung von 8Bit Zeichen sein(überlesen)bzw wird es als Steuersequenz missbraucht.

Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
02.10.2013, 19:41 Uhr
sas



Hallo Wusel,

Bit 7, M frag ab ob er 1 ist dann wird Z-Flag = 1!
Da er nie 1 wird und die Abfrage NZ sagt nichts weiter als
das auf Z-Flag = 0 abgefragt und gesprungen wird.

Das habe ich schon mit einem Z80 Simulator durchgespielt um
auch alle Flags zu beobachten.

Jörg


Zitat:
Wusel_1 schrieb

Zitat:
sas schrieb

Interesasnt ist die Frage ab Zeile 2222 geht es genau genommen weiter mit dem RET NZ
denn die AND 0x7f Maskierung bewirkt das Bit 7, M immer 0 ist und der Code ab 2223 nie ausgeführt wird.

Du irrst. Bit 7 wird abgefrag - da dort "0" steht wird das Z-Flag gesetzt, also geht es bei 2223 weiter. (NZ - Bit ist nicht 0!)

Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
02.10.2013, 21:09 Uhr
jmueller




Zitat:
Wer schreibt was von Minus?

Oh, ich muss zugeben, mir den Code nicht gründlich genug angesehen
und somit den Beitrag 001 etwas zu hastig geschrieben zu haben
Ich hatte den BIT-Befehl übersehen und nur Bit7 und RET NZ gesehen....
Sorry!



Zitat:
...die AND 0x7f Maskierung bewirkt das Bit 7, M immer 0 ist...

Nein, das "AND 0x7F" setzt das Bit 7 im Register A zurück, nicht in M.
In dem Code-Schnipsel in 000 wird nirgends M beschrieben.
Demzufolge kann in M das Bit 0 jeden Wert haben
und somit auch die Zeile 2223 erreicht werden.

Jens
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
03.10.2013, 10:01 Uhr
sas



Hallo Jens,

Danke, aber da die Fernschreibzeichen in der F2000 eine Codierung
von 0x01, 0x00 kyrillisch wird als 0x40 codiert, bis max 0x5f geht ist die
Abfrage nach bit 7 in M hinfällig.

Deswegen mehr meine Frage an die Entwickler woran man bei
dieser Abfrage gedacht hat?
Arabisch?

Jörg


Zitat:
...die AND 0x7f Maskierung bewirkt das Bit 7, M immer 0 ist...
Nein, das "AND 0x7F" setzt das Bit 7 im Register A zurück, nicht in M.
In dem Code-Schnipsel in 000 wird nirgends M beschrieben.
Demzufolge kann in M das Bit 0 jeden Wert haben
und somit auch die Zeile 2223 erreicht werden.

Jens


Dieser Beitrag wurde am 03.10.2013 um 10:02 Uhr von sas editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
03.10.2013, 22:01 Uhr
FL



Hallo Jörg,

welcher Wert steht auf Adresse 2219 ?

7A = LD A,D
oder A7 = AND A

Frank.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
04.10.2013, 06:26 Uhr
sas



2215: 3E FF LD A, 0xff
2217: BE CP M
2218: C8 RET Z
2219: 7A AND A

natürlich 0xff


Zitat:
FL schrieb
Hallo Jörg,

welcher Wert steht auf Adresse 2219 ?

7A = LD A,D
oder A7 = AND A

Frank.

Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
011
04.10.2013, 07:47 Uhr
FL



Ich meine nicht was im Register A steht.

Du hast dich vertippt.


Zitat:
sas schrieb
2219: 7A AND A

7A ist der Code von LD A,D .

Ein LD A,D macht in meinen Augen mehr Sinn. Register D enthält einen zusätzlichen Parameter, der im folgenden XOR mit M verglichen wird.

Wenn AND A richtig ist, wird M immer bitweise mit FF verglichen.
Der Code ab Adresse 221F wird dann nur ausgeführt, wenn M den Wert 7F hat.

Frank.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
012
04.10.2013, 17:59 Uhr
sas



Hallo,

danke endlich gute Hilfe,

ja so ist das wenn man als Nerd alles alleine machen muß ;-

Da muß ich jetzt richtig in die Tiefe, denn aus den Aufrufen der Funktion
ist nicht ersichtlich wo D bzw. DE werte erhält.

Jörg


Zitat:
FL schrieb
Ich meine nicht was im Register A steht.

Du hast dich vertippt.


Zitat:
sas schrieb
2219: 7A AND A

7A ist der Code von LD A,D .

Ein LD A,D macht in meinen Augen mehr Sinn. Register D enthält einen zusätzlichen Parameter, der im folgenden XOR mit M verglichen wird.

Wenn AND A richtig ist, wird M immer bitweise mit FF verglichen.
Der Code ab Adresse 221F wird dann nur ausgeführt, wenn M den Wert 7F hat.

Frank.

Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
013
04.10.2013, 18:56 Uhr
u.nickel



Ich würde es so interpretieren:

2214: 23 INC HL --nächste Speicheradresse
2215: 3E FF LD A, ffh --lade A mit FFh
2217: BE CP <HL> --vergl. Inhalt Speicheradresse mit FFh
2218: C8 RETZ --zurück wenn ja, sonst
2219: 7A LD A,D --A mit Inhalt von D laden
221a: AE XOR <HL> --A exor mit Inhalt Speicheradresse
221b: E6 7F AND 7fh --testen auf Zero
221d: 20 F5 JR NZ, f5h --wenn ja, dann nach 2214, sonst weiter
221f: CB 7E BIT 7, <HL> --Prüfe Bit 7 der Speicheradresse
2221: 37 SCF --Carry Flag schon mal als Zeigerflag setzen
2222: C0 RET NZ --zurück, wenn Bit 7 == 0
2223: 3A 65 78 LD A, (7865h) --Inhalt Speicheradresse 7865 nach A
2226: E6 04 AND 04h --vgl. A mit 04h, setze/rücksetze Z-Flag, rücksetzen C-Flag
2228: C0 RET NZ --zurück, wenn ja, sonst
2229: 37 SCF --setze Carry
222a: C9 RET --und zurück

....eigentlich ein ziemlicher logischer Code.
Nehme mal an, das für die Nutzung dieser Subroutine H,L mit ner Adresse im Speicher zu belegen ist und ein Byte (Zeichen...) nach Register D zu übergeben ist. C und Z liefern dann augenscheinlich die "Statusinformationen zurück.

Dieser Beitrag wurde am 04.10.2013 um 19:19 Uhr von u.nickel editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
014
04.10.2013, 22:14 Uhr
FL



Ich sehe das genauso.

HL zeigt vermutlich auf eine Liste mit Zeichen (Codetabelle?). FF dient dabei als Endebyte.
In D wird das zu suchende Zeichen übergeben. Bit7 hat eine besondere Bedeutung und wird bei der Suche ausgeschlossen.

In CY wird vermutlich angezeigt ob das Zeichen gefunden wurde. HL zeigt dann auf den Fundort.

Gruß
Frank.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek