Fragen zu A20



  • Hallo!
    Ich habe ein paar Fragen!
    Man kann ja im normal rmode bis zu FFFF16 addressieren was 11111111111111110000 entspricht, das wären aber 20 Leitungen! Warum kann ich dann nicht direkt alle 20 Leitungen auf 1 schalten und 2. wenn ich 20 leitungen habe wozu muss ich dann mit a20 die 20. freischalten ???
    Und nochwas:
    wenn ich 20 Leitungen habe, mittels a20, müsste ich ja bis zu
    11111111111111111111 addressieren können, das entspricht dann FFFFF - kann ich dann bis FFFFF addressieren mit a20? Also dann FFFFF
    16 oder wie? Blick da nich ganz durch - zeigt mir wer den Weg zum Licht? 😉

    Kevin



  • Original erstellt von Surkevin:
    **Man kann ja im normal rmode bis zu FFFF*16 addressieren
    **

    Na, wenn mans genau nimmt kann man sogar bis zu FFFF*16 + FFFF adressieren, was 0x10FFEF entspricht 🙂

    **
    was 11111111111111110000 entspricht, das wären aber 20 Leitungen! Warum kann ich dann nicht direkt alle 20 Leitungen auf 1 schalten
    **

    Wer sagt das?

    und 2. wenn ich 20 leitungen habe wozu muss ich dann mit a20 die 20. freischalten ???

    Kleine Tücke hier. Die erste Adressleitung heißt A0, die zweite A1 etc. damit heißt die 20te A19 und erst die 21te heißt A20.
    Und nochwas:

    **
    wenn ich 20 Leitungen habe, mittels a20, müsste ich ja bis zu
    11111111111111111111 addressieren können, das entspricht dann FFFFF - kann ich dann bis FFFFF addressieren mit a20? Also dann FFFFF*16 oder wie? Blick da nich ganz durch - zeigt mir wer den Weg zum Licht? 😉
    **

    Mit eingeschaltetem A20 kannst du alle 32 Adressleitungen nutzen, also theoretisch bis 0xFFFFFFFF adressieren. Dazu brauchst du dann aber den Protected Mode (minimal Unreal-Mode wozu man den PM aber ja auch braucht).



  • Hm warum brauch ich dann den Pmode? Ich will ja gerade a20 benutzen um im RMode mehr Speicher zu haben!



  • Original erstellt von Surkevin:
    Hm warum brauch ich dann den Pmode? Ich will ja gerade a20 benutzen um im RMode mehr Speicher zu haben!

    Du kannst im RMode durch das A20 lediglich knapp 64kiB rausschlagen. Nämlich an der Stelle wo das Ergebnis Segment*16+Offset über 0x100000 überläuft. Mehr kann der RM nicht, er ist ja auch nach wie vor nur noch ein Überbleibsel von Kompatibilität zu alten 8086-Zeiten. Andere Prozessorarchitekturen haben solche veralteten Konzepte schon längst in die Tonne getreten.
    Ein lustiger Bonus ist übrigens, dass man das A20 auch wenn man im PMode ist, anmachen muss. Denn sonst fehlt eine Adressleitung und man kann nur die MebiBytes mit den graden Nummern (0-1MiB, 2-3MiB, ...) ansprechen. Ein hoch auf Abwärtskompatibilität 🙄



  • Hm nur unser Problem ist, wir wollen im Rmode den Kernel laden, jedoch nach den ersten MB im Speicher - jedoch geht das nur im Pmode! Aber wie kriegen wir das hin ohne uns direkt nen eigenen Treiber zu programmieren?



  • Original erstellt von Surkevin:
    Hm nur unser Problem ist, wir wollen im Rmode den Kernel laden, jedoch nach den ersten MB im Speicher - jedoch geht das nur im Pmode! Aber wie kriegen wir das hin ohne uns direkt nen eigenen Treiber zu programmieren?

    Es gibt nen BIOS interrupt um datenblöcke zu verschieben, ist nur net ganz unkompliziert. Schau mal in einer beliebigen Interruptliste nach int 15h, ah=87h (move block).

    PS: Deswegen bevorzuge ich GRUB 😃 Der lädt mich in den Protected Mode, macht das A20 an und vor allem: Lädt meinen Kernel dahin wo ich will. Diskettencontroller suxx 😃



  • na wenn der kernel net größer als 64k-16byte ist, ist das kein problem. man könnte ja auch einen kernel realisieren, der in die ersten 64k oberhalb einem MB geladen wird, und der dann in dem PM schaltet und den "richtigen" kernel lädt. ich denk mal FS-Stuff (FAT12/16/32 sollte reichen) und PM-Stuff bekommt man locker in 64K

    cu todo



  • Original erstellt von todo:
    **na wenn der kernel net größer als 64k-16byte ist, ist das kein problem. man könnte ja auch einen kernel realisieren, der in die ersten 64k oberhalb einem MB geladen wird, und der dann in dem PM schaltet und den "richtigen" kernel lädt. ich denk mal FS-Stuff (FAT12/16/32 sollte reichen) und PM-Stuff bekommt man locker in 64K
    **

    Das Problem was ich mit der Methode hatte ist, dass es unglaublich hässlich wird. Denn 64k sind zu klein für den ausgewachsenen Kernel und wenn man in eine Art Starter den ganzen Diskettenkram im PM reinpackt, dann kann man später für eine vernünftige Treiberarchitektur den ganzen Kram nochmal schreiben.


Anmelden zum Antworten