Seite 1 von 2

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

Verfasst: Mi 23. Mär 2016, 09:12
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)
 

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

Verfasst: Mi 23. Mär 2016, 12:55
von drohne235
Notiert!

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

Verfasst: Fr 25. Mär 2016, 22:07
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?

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

Verfasst: Fr 25. Mär 2016, 22:39
von PIC18F2550
@kuroneko
der Name der Routine ist nur eine willkürliche Vergabe meinerseits.
Wie das nachher drohne235 benennt überlasse ich ihn.

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

Verfasst: Do 4. Mai 2017, 22:05
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

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

Verfasst: Fr 5. Mai 2017, 08:56
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.

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

Verfasst: Fr 5. Mai 2017, 13:36
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-)

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

Verfasst: Fr 5. Mai 2017, 19:16
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

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

Verfasst: Fr 5. Mai 2017, 20:03
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.

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

Verfasst: Fr 5. Mai 2017, 20:45
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... :?