reg-ios.spin & Byt/word/long lesen und schreiben im eRAM

Du hast ein Betriebssystem für den Hive geschrieben oder beschäftigst dich mit den grundlegenden Systemfunktionen, dann bist du hier richtig!
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

reg-ios.spin & Byt/word/long lesen und schreiben im eRAM

Beitrag von PIC18F2550 »

Ich habe mir gestern einen Wolf gesucht warum meine Adressen im U8830 Reassembler Programm nicht stimmen.
Ursache ist die Reihenfolge wie die Bytes im Speicher liegen.

Beispiel:
Adresse: 1 = $08
Adresse: 2 = $03

Bei einer word abfrage ist das Ergebnis $0308 es wird aber $0803 benötigt.

Die original Routinen sollen erhalten bleiben da diese die Wertigkeit richtig wiedergeben.

Es geht viel mehr um eine Erweiterung der Funktionen von reg-ios.spin.

Ich bitte um Erweiterung mit folgenden Routinen.

Code: Alles auswählen

PUB ram_rdlongLE(sys,eadr): wert                        'eram: liest long ab eadr
{{ram_rdlong - eram: liest long ab eadr}}
'sys = 0 - systemmodus, keine virtualisierung
'sys = 1 - usermodus, virtualisierte adresse

  wert := ram_rdbyte(sys,eadr + 3)
  wert += ram_rdbyte(sys,eadr + 2) << 8
  wert += ram_rdbyte(sys,eadr + 1) << 16
  wert += ram_rdbyte(sys,eadr    ) << 24

PUB ram_rdwordLE(sys,eadr): wert                        'eram: liest word ab eadr
{{ram_rdlong(eadr):wert - eram: liest word ab eadr}}
'sys = 0 - systemmodus, keine virtualisierung
'sys = 1 - usermodus, virtualisierte adresse

  wert := ram_rdbyte(sys,eadr + 1)
  wert += ram_rdbyte(sys,eadr    ) << 8

PUB ram_wrlongLE(sys,wert,eadr) | n                     'eram: schreibt long ab eadr
{{ram_wrlong(wert,eadr) - eram: schreibt long ab eadr}}
'sys = 0 - systemmodus, keine virtualisierung
'sys = 1 - usermodus, virtualisierte adresse

  n := wert & $FF
  ram_wrbyte(sys,n,eadr + 3)
  n := (wert >> 8) & $FF
  ram_wrbyte(sys,n,eadr + 2)
  n := (wert >> 16) & $FF
  ram_wrbyte(sys,n,eadr + 1)
  n := (wert >> 24) & $FF
  ram_wrbyte(sys,n,eadr)

PUB ram_wrwordLE(sys,wert,eadr) | n                     'eram: schreibt word ab eadr
{{wr_word(wert,eadr) - eram: schreibt word ab eadr}}
'sys = 0 - systemmodus, keine virtualisierung
'sys = 1 - usermodus, virtualisierte adresse

  n := wert & $FF
  ram_wrbyte(sys,n,eadr + 1)
  n := (wert >> 8) & $FF
  ram_wrbyte(sys,n,eadr)
 
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: reg-ios.spin & Byt/word/long lesen und schreiben im eRAM

Beitrag von drohne235 »

Notiert!
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
kuroneko
Beiträge: 202
Registriert: Sa 22. Okt 2011, 13:05
Wohnort: FN, Germany

Re: reg-ios.spin & Byt/word/long lesen und schreiben im eRAM

Beitrag von kuroneko »

PIC18F2550 hat geschrieben:Ich bitte um Erweiterung mit folgenden Routinen.

Code: Alles auswählen

PUB ram_rdlongLE(sys,eadr): wert                        'eram: liest long ab eadr
{{ram_rdlong - eram: liest long ab eadr}}
'sys = 0 - systemmodus, keine virtualisierung
'sys = 1 - usermodus, virtualisierte adresse

  wert := ram_rdbyte(sys,eadr + 3)
  wert += ram_rdbyte(sys,eadr + 2) << 8
  wert += ram_rdbyte(sys,eadr + 1) << 16
  wert += ram_rdbyte(sys,eadr    ) << 24

  ...
Sollte das nicht ram_rdlongBE etc heissen?
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: reg-ios.spin & Byt/word/long lesen und schreiben im eRAM

Beitrag von PIC18F2550 »

@kuroneko
der Name der Routine ist nur eine willkürliche Vergabe meinerseits.
Wie das nachher drohne235 benennt überlasse ich ihn.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: reg-ios.spin & Byt/word/long lesen und schreiben im eRAM

Beitrag von drohne235 »

Gerade darüber nachgedacht: Auch hier handelt es sich um ein recht spezielles Problem, welches auf dem Hive wohl recht selten vorkommen dürfte: Gbt ja nicht sooo viele Drohnen auf der Erde, und noch viel weniger Drohnen, welche auf dem Hive Code für einen U8830 schreiben... Wahrscheinlich handelt es sich letztlich auch nur um eine spezielle Drohnen. ;)

Also, wenn niemand sonst diese Erweiterung benötigt, würde ich diese Dinge nicht ins IOS einbauen, dann gehört sowas in das eigene Programm und ich streiche das mal von meiner Liste. :SCHRAUBEN
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: reg-ios.spin & Byt/word/long lesen und schreiben im eRAM

Beitrag von PIC18F2550 »

Das würde ich mir lieber Überlegen.

Füllst Du den eRAM z.B. mit der Long funktion so bekommst Du beim Byte lesen das Falsche Byte zurück.

z.B.

Kopiere die zeichenfolge 01020304 mit long in den eRam ab adresse 0

Ließ die Adresse 0 mit byte aus und du bekommst eine 04 zurück.


Es ist auch keine extra Routine vielmehr eine Korrektur.

Umstellung von Little-Endian in Big-Endian.
Nicht immer können Daten mit dem gleichen verfahren gelesen und geschrieben werden.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: reg-ios.spin & Byt/word/long lesen und schreiben im eRAM

Beitrag von drohne235 »

An sich sind die beiden Verfahren ja letztlich gleichwertig - das eine System will halt LE, das andere System will BE. Und wenn ich jetzt auf BE umstelle, kommt nexte Woche jemand der gern LE möchte... 8-)
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
unick59
Beiträge: 134
Registriert: Di 23. Jun 2009, 11:14
Wohnort: Heideblick

Re: reg-ios.spin & Byt/word/long lesen und schreiben im eRAM

Beitrag von unick59 »

Ich plädiere für sein lassen! Mache ja nun auch ne Menge mit 8830 und kenne und schätze die Ablageart von 16bit-Werten im Speicher des 8830. Aber die passende Verdrehung gehört doch eher in das Anwenderprogramm das die Daten für den 8830 erzeugt und nicht in das Betriebssystem des erzeugenden Systems, egal ob Hive, PC oder was auch immer.

Grüße Uwe
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: reg-ios.spin & Byt/word/long lesen und schreiben im eRAM

Beitrag von PIC18F2550 »

unick59 das hat nichts mit dem 8830 oder dem PC zu tun.

Ich will einfach nur Daten Lesen und Schreiben und das mit unterschiedlichen Formaten.
Es kann doch nicht sein das ich ein Word das nicht auf einer Ganzzahligen Wortadresse steht mir nur Müll liefert.

Einfaches Beispiel:

Ein Dateinahme ohne Typ Im DAT Feld steht :

"12345678"

Den lade ich mir z.B. in Zwei Long Werte in den COG

In der 1. Zelle steht dann "1234"
In der 2. Zelle steht dann "5678"

Schiebe ich diese mit Zwei Long routinen in den eRAM so kommt das raus

In der 1. Zelle steht dann "4321"
In der 2. Zelle steht dann "8765"

Wenn jetzt ein anderes Programm den Dateiname aus dem eRAM holt was aber mit einer String funktion realisiert ist so bekommt man Das Zurück.

"43218765" Das ist nicht mehr das was es sein sollte darum geht es.
Ich weis heute nicht wie morgen die Daten von einem Anderen USER ausgelesen werden.

Wenn die Daten von einem und dem Selben Programm in immer der gleichen weise geschrieben und gelesen werden ist es vollkommen wurscht ob LE oder BE das Funktioniert immer.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: reg-ios.spin & Byt/word/long lesen und schreiben im eRAM

Beitrag von drohne235 »

Warum nicht einfach die passenden IOS-Routinen verwenden, damit passt doch dann alles richtig. Dafür sind sie doch da,und damit funktioniert es. Wenn ich dann aber wirklich selbst auf die Daten eines fremden Programms am IOS vorbei zugreife will, muss ich natürlich immer schauen, ob LE oder BE und passende eigene Routinen schreibe. Aber warum sollte man das tun? Wenn ich eine Stringfunktion neu programmieren mit Zugriff auf den eRAM, dann lese ich die einzelnen Zeichen des Strings mit ios.ram_rdbyte(sys,adresse) und die Welt ist in Ordnung. Ich verstehe echt dein Problem nicht... :?
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Antworten