Adressraum CPU 922

mariob

Level-3
Beiträge
2.052
Reaktionspunkte
276
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich verzweifle langsam über diesem Mist - zunächst die selbst kommentierten Quellen:
Netzwerk 1 von 1 Bib =
:L KF 1 franzoesisch
:L MB 49
:><F
:SPB =M001
:A DB 55
:SPA =M002
M001 :L KF 2 englisch
:><F
:SPB =M003
:A DB 56
:SPA =M002
M003 :L KF 3 deutsch
:L MB 49
:><F
:SPB =M004
:A DB 58
:SPA =M002
M004 :L KF 4 italienisch
:><F :SPB =M005
:A DB 59 spanisch
:SPA =M002
M005 :A DB 57
M002 :B MW 220
:L DL 0
:L KH DF00
:+F
:LIR 1
:B MW 220
:L DR 0
:+F
:L KH DF32
:ENT
:LIR 1
:L KH 0014
:+F
:TNW 16
:BE
Also, bitte korrigieren, wenn ich da was falsch sehe: Letzte Sprungmarke (M002) MW220 trägt eine Adresse, deren Inhalt aus DL0 nach Akku 1 transferiert wird (niederwertiges Byte). Hinzuaddiert wird DF00. Der LIR Befehl benutzt das wiederum als Adresse (steht in Akku 1) für einen Zugriff auf den Lokaldatenspeicher der CPU. Nach dem Handbuch sind das Adressen im DB Bereich. Nur welche? Die sollten ja entsprechend der angelegten DBs nicht ohne weiteres zu ermitteln sein, wenn ich einen bestimmten DB und dessen Inhalt brauche. Und wohin zum Geier schreibt dann TNW? Ich könnte diese Lumpen:sw12:.

Gruß
Mario
 
Zuletzt bearbeitet:
Ich reime mir das so zusammen:
In den DBs 55-59 gibt es ein DW (die Nummer dieses DW steht im MW220) mit Inhalt : DL=DB-Nummer, DR=DW-Nummer, dies ist die Quelladresse der TNW-Operation, als Ziel dient m.E. der DB50 ab DW20.
Die Adressen DF00 und DF32 liegen innerhalb der Bausteinadressliste (DB0) und geben, wenn meine Vermutung zutrifft, die Anfangsadresse von DB0 und DB50 an. Zu DF00 wird der Inhalt von DL[MW220] addiert, damit wird dann der gewünschte DB adressiert, das DW aus DR[MW220] kommt noch hinzu.
Ziel ist der DB50 (Speicheradresse steht in DF32), dazu kommen noch KH0014. Die Quelladresse der TNW-Operation steht im Akku2 und die Zieladresse im Akku1.

Grüße von HaDi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke Hadi,
ich lese dazu nochmal nach, meinst Du, das diese absoluten Werte tatsächlich die DB Nummern adressieren? Nach Handbuch sollte man das doch mit BS Nummern tun, die einem das Betriebssystem bietet. Leserlicher ist es sowieso. Ich bin davon ausgegangen, das je nach Länge und Anzahl der DBs der Adreßraum verschieden belegt sein kann. Mit anderen Worten man müßte nach Erstellung aller DBs erproben wo die Anfangsadressen liegen und dann fest in das Programm eintragen. Anfangsadresse + Versatz ergeben dann die interesssierende Adresse, wie es ja hier gemacht ist.

Gruß
Mario
 
BS wäre besser gewesen ...

Hallo,

mariob schrieb:
Nach Handbuch sollte man das doch mit BS Nummern tun,


Hadi hat schon recht mit seiner Behauptung.
Leider hat der Ersteller des Bausteines sich nicht an die Programmieranleitung gehalten. Anstatt im BS34 die Anfangsadresse zu ermitteln und die DB-Nummer aufzuaddieren, sind hier leider absolute Adressen verwendet worden. Da je nach CPU-Typ der DB 0 aber an unterschiedlichen Speicheradresse liegen kann, ist der Programmcode leider dann zB. nicht auf einer 150U, 928A nicht verwendbar. Also ein gutes Beispiel, wie man es nicht machen sollte.

Gruß

Question_mark
 
Mit anderen Worten man müßte nach Erstellung aller DBs erproben wo die Anfangsadressen liegen und dann fest in das Programm eintragen.
Nein, das muss man nicht, denn die Anfangsadressen aller Bausteine stehen in der Bausteinadressliste, auch DB0 genannt. Das ist quasi dein Inhaltsverzeichnis des Speichers. Wenn ein Baustein geladen oder gelöscht oder geändert wird, ändert sich auch der Eintrag im DB0. Diese Adressliste belegt einen festen Speicherbereich, der aber dummerweise von CPU zu CPU unterschiedlich ist. Bei deiner CPU922 steht z.B. die Anfangsadresse des DB50 im Wort, das mit DF32 adressiert wird, steht in DF32 eine 0, so ist der Baustein nicht vorhanden. Dies kann man sich zu Nutze machen, wenn man z.B. einen Baustein im Eprom deaktivieren will, denn der DB0 steht immer im RAM.
Wenn man der Empfehlung von Question_mark folgt und anstatt den absoluten Adressen L BS34 benutzt, liefert deine CPU DF00, eine 115U hat dann E400 und eine 95U hat dann 7E00 im Akku1 stehen und immer ist es die Anfangsadresse des DB0 und damit kommt man durch draufaddieren der DB-Nummer zur Speicherstelle, an der die Anfangsadresse des gewünschten DBs steht. Ein so progammierter Baustein könnte dann auch ohne Änderung auf einer anderen CPU funktionieren und verständlicher und besser nachvollziehbar ist es allemal.

Bevor nun der erste Einspruch kommt: Ja, ich weiß, dass man bei dieser Berechnung zwischen Wort- und Byte-S5en unterscheiden muss, die Bausteinnummer also einfach oder doppelt addieren muss.

Grüße von HaDi
 
Zurück
Oben