Autor Thema: Übergang ins nächste Segment, aber wie und wann?  (Gelesen 6723 mal)

RedEagle

  • Beiträge: 244
    • Profil anzeigen
    • RedEagle-OperatingSystem - Projekt
Gespeichert
« am: 15. April 2006, 22:53 »
Hi
Wenn ich per Interrupt daten von einer Diskette lade, muss ich die Zieladresse in es:bx angeben.

Ich möchte jetzt eine Ganze Diskette in den Arbeitsspeicher laden (0x168000 Byte)
Wie mache ich das jetzt mit dem Errechnen der Neuen adresse in "bx" und "es"??

denn 0xFFFF (Offsetadresse) / 512 = 127,998 also kann ich 127 Sektoren laden, befor ich "es" erhöhen muss, allerdings bleiben dann 511 Byte pro Segment  über...


ps.: Wenn ich mich einlogge bekomme ich immer ein 404.

scales of justice

  • Beiträge: 228
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 16. April 2006, 00:45 »
die Links beim einloggen sind falsch gesetzt
das "www." müsste mal jemand weg machen

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 16. April 2006, 10:01 »
Um genau zu sein, du kannst im rm nur 640 KiB Speicher benutzen der Rest des Speicherraumes ist für Roms reserviert. http://www.mega-tokyo.com/osfaq2/index.php/How%20do%20I%20determine%20the%20amount%20of%20RAM%3F
Aber wenn du etwas über die 64 KiB Grenze laden möchtest, gibt es eine einfachte Methode:
Wie gewohnt bei jedem Byte das Offset um 1 erhöhen, sobald das Offset 16 erreicht hat, wird es auf 0 gesetzt und die Segmentadresse um eins erhöht.

0x0000:0x0000
0x0000:0x0001
0x0000:0x0002
...
0x0000:0x000F
0x0001:0x0000   <-- anstelle von 0x0000:0x0010
0x0001:0x0001
...
db 0x55AA

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #3 am: 17. April 2006, 11:54 »
Ich bin jetzt mal gemein und behaubte was anderes. Man kann im RM volle 4 GByte ansprechen. Dazu benötigt man mindestens ein 386er. Mann schaltet im PM, setzt alle Segmentregister auf Deskriptoren, die die Basisadresse Null haben und als Limit 4 GByte. Dann springt mann zurück in den RM und kann volle 4 GByte adressieren. Man darf die Segmentregister aber nicht mehr verändern. Das brauch man aber auch nicht, weil die auf Null stehen und man mit dem Offset jedes beliebige Byte von 0 bis 4 GByte ansprechen kann. Aber damit funktioniert der int 13h nicht mehr. Da der nur es:bx und nicht es:ebx anspricht. Und somit könntest du nur die ersten 64 KByte damit ansprechen. Aber man kann sich ja eine Funktion bauen die einen Sektor immer unter den 64 KByte mit dem int 13h kopiert, und dann manuell zur gewunschten position kopiert. Also gut möglich wäre das damit schon. Guck man unter www.msn.de/suche und gib da unrealmode oder flat-realmode ein. Habe ich auch erst vor einiger Zeit erfahren. Ich glaube joachim neu hat sogar ein OS im Unrealmode. Du kannst ihn ja genaueres fragen, wenn er zeit und lust hat. (spekulation)

bitmaster
In the Future everyone will need OS-64!!!

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 17. April 2006, 15:42 »
Also, ok kann sein, dass man die 32Bit Segmente drin lassen kann, aber da im RM nur mit 16 Bit adressiert wird nützt dich das doch nichts.

Weil wenn du eine Speicherstelle mit z.B. [bx] adressierst kommst du nie bis 4GB und ebx kannst du ja nicht nehmen, weil RM ja 16Bit ist.


Seh ich da was falsch oder wie geht das???
Nooooooooooooooooos

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #5 am: 17. April 2006, 15:45 »
Zitat von: nooooooooos
Also, ok kann sein, dass man die 32Bit Segmente drin lassen kann, aber da im RM nur mit 16 Bit adressiert wird nützt dich das doch nichts.

Weil wenn du eine Speicherstelle mit z.B. [bx] adressierst kommst du nie bis 4GB und ebx kannst du ja nicht nehmen, weil RM ja 16Bit ist.


Seh ich da was falsch oder wie geht das???
Nooooooooooooooooos
Man kann im RM die 32 Bit Register eax-edx, esi, edi, usw. ansprechen. Und deswegen funktioniert das auch. Frag doch mal joachim neu, der hat glaube ich ein OS in diesem Modus laufen.
In the Future everyone will need OS-64!!!

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 17. April 2006, 15:58 »
Ja benutzen kann man die schon, allerdings kann man mit ihnen glaub ich keine Adressen ansprechen.

nore

  • Beiträge: 76
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 18. April 2006, 11:06 »
wieso nicht? der 386er hat doch nen 32bit adressbus. und wenn oben gesagt wird, dass es geht, wirds wohl auch stimmen.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 19. April 2006, 15:06 »
Die Segmentregister haben ja Limits. Im Real Mode sind sie auf 64 KByte (genauer: 0xFFFF) gesetzt. Deswegen kann man mit den 32 Bit Registern auch keine Daten > 64 KByte ansprechen, sonst gibt es eine Exception. Man kann aber Daten bis 4 GByte ansprechen, wenn man die Limits ändert, z.B. indem man in den Unreal Mode geht. Oder besser: Im Protected Mode bleibt ;)
Dieser Text wird unter jedem Beitrag angezeigt.

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #9 am: 19. April 2006, 16:34 »
Zitat von: PorkChicken
Die Segmentregister haben ja Limits. Im Real Mode sind sie auf 64 KByte (genauer: 0xFFFF) gesetzt. Deswegen kann man mit den 32 Bit Registern auch keine Daten > 64 KByte ansprechen, sonst gibt es eine Exception. Man kann aber Daten bis 4 GByte ansprechen, wenn man die Limits ändert, z.B. indem man in den Unreal Mode geht. Oder besser: Im Protected Mode bleibt ;)
sag ich doch
In the Future everyone will need OS-64!!!

 

Einloggen