8086 Problem mit Segment Adresse

Gast #111137
Bei einem 386er Mainboard habe ich den BIOS Chip entfernt und einen
EPROM Simulator angeschlossen.
Nun habe ich ein LCD an den ISA Bus angeschlossen, was auch einwandfrei
funktioniert. Das LCD wird initialisiert und ich kann auch Zeichen
senden. Nur um einen String zu senden muss ich das Data Segment (DS)
anpassen. Sobald ich das mache, initialisiert das LCD aber nicht
mehr...
Angehängte Dateien:
Gast #111138
Ich weiß jetzt zwar nicht, woran das konkret liegt, aber Du kannst ja
erstmal für den Text das Extra-Segment ES verwenden.
Also oben steht dann:
  mov AX, 61440
  mov ES, AX

und dann in DispText:
  mov AL, ES:Text[SI]

Damit sagst Du dem Assembler, das sich die Indexierung nicht auf DS
(default) sondern auf ES bezieht.

Gruß
Ingo
Gast #111139
Danke !
Das geht einwandfrei !
Mich würde aber trotzdem interessieren, wiso es mit DS nicht
funktioniert. Im Simulator läuft es einwandfrei...
Immerhin habe ich jetzt ein Display, auf dem ich die Register ausgeben
kann.
Gast #111140
Was für einen Assembler verwendest Du denn.
Beim MASM oder TASM mußte man immer noch Segmente definieren und
zuweisen. z.B.

CODE SEGMENT
     ASSUME CS:CODE,DS:CODE
     mov  AX, CS
     mov  DS, AX
     ...

     Text db   'Das ist ein Test!'
ENDS

Wieso willst Du in DS eine absolute Adresse laden?


Gruß
Ingo
Gast #111141
Ich verwende Emu8086.
DS braucht doch eine absolute Adresse, sonst funktioniert SI usw. nicht
?
Sobald ich DS beschreibe (damit SI im aktuellen Segment liest) läuft
das Programm nichtmehr.
Gast #111142
Wenn ich das richtig verstanden hab, hast Du dem Board das BIOS geklaut,
und läßt es per EPROM-Simulator Deinen Code ausführen. Das heißt, Du
bist jatzt das BIOS, richtig?
Und genau das ist das Problem. Im Gegensatz zu normalen Programmen, bei
denen auch Konstanten, wie Texte u.ä. immer im RAM landen, sieht das
beim Dir natürlich etwas anders aus.

Nach dem Starten initialisiert die CPU die Register DS, ES und SS mit
0, und CS mit 0ffff0h.
Da ab Adresse 0 beim PC normalerweise RAM liegt, funktioniert der
Schreibzugriff auf Deine Variable "Wert", die auch relativ zu DS
adressiert wird. Setzt Du nun aber DS so, das Deine Textkonstante
verwendet werden kann, zeigt DS ins ROM, was damit natürlich alle
Schreibzugriffe auf Deine Variablen (Zeile, Spalet, Wert, Tester)
unmöglich macht.

Es bleibt Dir also nichts weiter übrig, als für die Adressiereung
Deiner Konstanten eben ein extra Segment-Register (z.B. ES :-) zu
verwenden.

Gruß
Ingo
Gast #111143
Stimmt !
Daran hatte ich nicht gedacht (bin 8051 gewöhnt, wo es getrennte
Daten/Programmspeicher gibt.)

Solange die Software nicht zu komplex wird, kann ich ja DS für RAM und
ES fürs ROM verwenden. Oder ich bastel mir einen Bootloader, der ein
Programm aus dem ROM in den RAM läd. Daran mangelt es ja zum Glück beim
PC nicht...
Gast #111145
Das kann ich noch nicht sagen, ich will halt mal alles durchprobieren,
was so rumliegt. Da meine Anfangsschaltung mit einem SAB8088 nicht
funktioniert hat, wollte ich die Idee bereits wieder aufgeben, da ab
286er 16bit Speicher gebraucht wird. Aber dank des BIOS Speichers ist
das ja kein Problem. Auch eine Erweiterung mit Daten ist kein Problem,
da man ja einen Bootloader schreiben kann, der Daten aus einem 8bit
EPROM liest (bzw. aus dem EPROM Simulator) und diese in den RAM
schreibt.
Ich werde auf jedenfall mal versuchen DOS auf meiner eigenen BIOS mit
einem LCD zum laufen zu bekommen...
Gast #111146
"Ich werde auf jedenfall mal versuchen DOS auf meiner eigenen BIOS mit
einem LCD zum laufen zu bekommen..."

du wisst das dos die bios interrupts braucht... viel spass beim
nachbilden.. :)
Gast #111147
Wo ist das Problem ?
Es gibt feste Adressen die bei einem Interrupt aufgerufen werden.
An diese muss ich nur die entsprechenden Routinen schreiben.
Mal schauen ob es geht...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.