mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 8086 Problem mit Segment Adresse


Autor: Benedikt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Ingo Henze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Ingo Henze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Ingo Henze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: buz11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Benedikt

Wollte auch mal mitm 80x86 rumspielen .
Macht Du was "ernstes" , oder nur so zum Spass ?

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"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.. :)

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.