OB240, Step 5

mariob

Level-3
Beiträge
2.052
Reaktionspunkte
276
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
mal eine grundlegende Frage zu Schieberegistern (OB 240/241/242). Die Parametrierung und Initialisierung derselben erfolgt laut Handbuch durch den Aufruf des OB 240 mit vorheriger Angabe des Parametrierungs FB. Nun habe ich in der Software zwei DBs, den 192 und 193. Zunächst der DB 192:
0: KF = +00000;
1: KF = +00015;
2: KF = +00224;
3: KF = +00014;
4: KF = +00000;
5: KF = +00000;
6: KF = +00000;
7: KF = +00000;
8: KF = +00000;
Wenn ich das richtig interpretiere ist mein Schieberegister 15 Bytes lang, der Basiszeiger ist das MB 224 und der nächste Zeiger relativ zum Basiszeiger 14 Bytes darüber, sollte also MB238 sein? Habe ich da falsch gedacht? Scheint erstmal logisch, unklar wird es beim DB 193:
0: KF = +00000;
1: KF = +00150;
2: KF = +00226;
3: KF = +00001;
4: KF = +00148;
5: KF = +00149;
6: KF = +00000;
7: KF = +00000;
8: KF = +00000;
Hier verstehe ich bei den zwei letzten relativen Zeigern die Welt nicht mehr - wo sollen die liegen? Wird hier ein Überlauf provoziert? Basiszeiger ist MB 226, plus 148 - soviele Merkerbytes hat die Kiste duch gar nicht:confused:?!

Gruß
Mario
 
Welche CPU?
Es gab doch welche, die indirekt die doppelte Speichergröße adressieren konnten, wenn ich mich nicht ganz irre.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
CPU 922, ich habe aber nur das Handbuch zur 228, scheint aber auch für die 922 gültig zu sein. Vielleicht unterliege ich auch einem Irrtum, ich lese nochmal nach, ist es möglich das im Falle von FB 192 MB226 der Basiszeiger ist, dann MB227 der zweite und die 14 Bytes die Anzahl der Zellen dazwischen? Das würde 1. den Abstand der zwei Merkerbytes 224 / 226 erklären - 225 wäre dann der erste Zeiger erstes Schieberegister. Und 2.beim zweiten Schieberegister, welches eine Länge von 150 Bytes hat wären dann 3 relative Zeiger die dann die aufeinanderfolgenden Merkerbytes 227 / 228 / 229 belegen. Und die Zeiger liegen dann ja in den 150 Bytes mit 148 / 149 Zellen dazwischen.

Gruß
Mario
 
Danke,
ist im Programmierhandbuch für die CPU 928 auch so beschrieben, ich denke das ich das schon irgendwie verstanden habe, lasse das ganze nochmal über Nacht einwirken (vielleicht mit einem Single Malt verdünnt) und lese morgen nochmal. Auf jeden Fall ist auch der Programmtext nach meiner letzten Interpretation plausibel. Auf alle Fälle danke für die Mühe.

Gruß
Mario
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich verstehe es folgendermaßen:

0: KF = +00000; immer 0
1: KF = +00150; SR 150 Byte lang
2: KF = +00226; Merker-Byte-Adresse Basiszeiger hier MB 226,
3: KF = +00001; Zusatzzeiger 2. SR-Byte(abgebildet auf MB 227)
4: KF = +00148; Zusatzzeiger 149. SR-Byte(abgebildet auf MB 228 )
5: KF = +00149; Zusatzzeiger 150. SR-Byte(abgebildet auf MB 229)
6: KF = +00000; Reserve für Zeiger
7: KF = +00000; Reserve für Zeiger
8: KF = +00000; immer 0

Davor liegt dann demgemäß in deinem Beispiel auf MB 224 der Basiszeiger, also das erste Byte, des anderen SR und auf MB 225 das letzte Byte (= Nr.14).
Es können maximal 6 (hier 4 bzw. 2 ) Zeiger vergeben werden, in diesem Fall müsste man sich 6 hintereinanderliegende Merkerbytes reservieren, um beliebige, mit einem Offset adressierte SR-Ausschnitte direkt auf Merker abzubilden und evtl. auch beschreiben zu können.

Es müssten also die MB 224 bis 229. in irgendeiner Form in deinem Programm verwurstet sein. Ich hasse S5.
 
Zuletzt bearbeitet:
Danke Ludwig,
ich komme eigentlich aus der Assemblerecke, von daher hätte ich jetzt mit Step 5 und hassen einen gewissen Gewissenskonflikt:D. Sicher kann man vieles eleganter lösen oder hätte es können und von daher ist hassen schon in Ordnung. Überholt ist das ganze allemal. OT aus.
In dem meinen von Dir kommentierten Beispiel sieht die Verwurstung im Quelltext so aus, das da eine Adresse durchgeschoben wird, also ein Wort. Deswegen der erste Zeiger Basisadresse +1 und die zwei letzten Zeiger (irgendwie habe ich mit der Begrifflichkeit ein Problem) sind auch direkt aufeinanderfolgend. Sie werden mit Wortbefehlen (MW 226, MW228) bearbeitet und dann als Adressen verwendet. Deswegen auch die Plausibilität meiner Interpretation. Danke für die Bestätigung. Mein größeres Problem sind derzeit die direkten Speicherzugriffe in der Büchse, dazu habe ich hier aber einen eigenen Beitrag.

Gruß
Mario
 
Zurück
Oben