CGA-Textmodus Cursor



  • Hallo Community,
    ich hoffe ich hab das richtige Forum getroffen bzgl. des Threads. In unsere Veranstaltung "Betriebssysteme" haben wir die tolle Aufgabe bekomm unser eigenes OS programmieren zu dürfen, step-by-step. In der ersten Aufgabe geht es unter anderem darum den Video-RAM zu beschreiben und auszulesen.
    Es geht darum die Steuerregister 14 und 15 anzusprechen.
    Die Cursor-Position neu zu setzen hab ich hinbekomm, aber wie kann ich die aktuelle auslesen? Bzw. die x und y Position ermitteln?

    Hoffe hier kann mir wer helfen.

    Lg Tobi



  • Hallo,

    ich verstehe die Frage nicht ganz, wenn du "Anweisungen" zum Schreiben hast, warum hast du dann keine Lese-Möglichkeiten? Gibt's da nicht in und out? Und das Schreiben/Lesen wird ja über ein Index-/Datenregister erledigt:

    http://www4.informatik.uni-erlangen.de/Lehre/WS07/V_BS//Uebungen/oostubs/web/aufgaben/aufgabe1/cga.shtml

    MfG,

    Probe-Nutzer



  • Das exakt die Aufgabe die wir haben 🙂 Ja sicher haben wir die inb() Funktion und das auslesen ist nicht das Problem, allerdings wenn ich jetzt das hier mache:

    IO_Port io_ind( 0x03D4 );
    IO_Port io_dat( 0x03D5 );
    int iPos = 0;
    
    io_ind.outb( 14 );
    iPos = io_dat.inb( );
    
    io_ind.outb( 15 );
    iPos = (iPos << 8) + io_dat.inb();
    

    Dann hat iPos den Wert 80*y+x, doch wie komm ich nun an x und y ran? Da ich ja hier eine Gleichung mit zwei unbekannten hab.

    Lg Tobi



  • Okay ich bin selbst drauf gekomm:

    IO_Port io_ind( 0x03D4 );
    IO_Port io_adr( 0x03D5 );
    int iPos = 0;
    
    io_ind.outb( 14 );
    iPos = io_ind.inb();
    
    io_ind.outb( 15 );
    iPos =  (iPos << 8 ) += io_adr.inb( );
    
    int y = (int)iPos / 80;
    int x = iPos % 80;
    

Anmelden zum Antworten