8086 Problem mit Segment Adresse

Gast #111137
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...
Angehängte Dateien:
Gast #111138
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
Gast #111139
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.
Gast #111140
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
Gast #111142
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
Gast #111143
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...
Gast #111145
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren