Aufbau von TSR Programmen



  • Hallo,

    ich versuche mich gerade an TSR Programmen. Mittlerweile bin ich soweit, dass ich schon mal den Krams mit der Interrupt Verbiegung hinbekomme 😃
    Nun hab ich aber Probleme mit der ISR (Funktion newint()).

    #include "dos.h"
    void interrupt(*old)();
    void interrupt newint();
    char far *scr=(char far*)0xb8000000;
    char*a={"CAN YOU DELETE ME ! .... YOU CAN'T "};
    void main()
    {old=getvect(0x08);
    setvect(0x08,newint);
    keep(0,1000);
    }
    void interrupt newint()
    {int i=0;
    while(*(a+i)!='\0')
    {
    *(scr+80*12*2+42+i*2)=*(a+i);
    *(scr+80*12*2+43+i*2)=31;
    i++;
    }
    (*old)();
    }
    

    Sobald es halt mit den ganzen Speicherbereichen los geht, weiß ich nimmer weiter.
    Wenn mir also einer erklären könnte, warum scr mit 0xb8000000 deklariert wird und warum in der ISR so komische Rechnungen drin stehen, wäre ich sehr dankbar 🙂
    Des weiteren interessiert mich, ob man irgendwie stdio.h funktionen in der ISR benutzen kann (printf).

    p.s.: Den Code habe ich von ner HP runtergeladen, wo aber keine Doku dabei war.
    Und vernünftige Tutorials für C hab ich beim googlen auch nicht gefunden. Meißtens war nur Quellcode oder eine kleine Einführung vorhanden 😞

    mfg



  • mB schrieb:

    Wenn mir also einer erklären könnte, warum scr mit 0xb8000000 deklariert wird und warum in der ISR so komische Rechnungen drin stehen, wäre ich sehr dankbar 🙂

    B800:0000 ist im Realmode die Startadresse des Textbildschirmspeichers. Dieser kann als 2D-Array aufgefasst werden, wobei jeder Eintrag aus 2 Bytes besteht. Das erste Byte ist dabei das Zeichen an der entsprechenden Stelle, das zweite Byte ist der Farbwert. Hier wiederum steht das Bit 7 für Blinken, Bits 4 bis 6 für die Hintergrundfarbe und Bits 0 bis 3 für die Vordergrundfarbe (es gibt auch die Möglichkeit, es so einzustellen, dass Bit 7 für hellen Hintergrund statt Blinken steht). Jetzt solltest du dir die Bedeutung der "komischen Rechnungen" erschließen können.

    Des weiteren interessiert mich, ob man irgendwie stdio.h funktionen in der ISR benutzen kann (printf).

    Würd ich im Allgemeinen nicht tun.

    p.s.: Den Code habe ich von ner HP runtergeladen, wo aber keine Doku dabei war.
    Und vernünftige Tutorials für C hab ich beim googlen auch nicht gefunden. Meißtens war nur Quellcode oder eine kleine Einführung vorhanden 😞

    C hat damit nicht viel zu tun 🙂 Wenn du dich für DOS-Systemprogrammierung interessierst, kann ich dir "PC Intern" von Michael Tischer empfehlen. Das sollte man gebraucht schon recht billig kriegen, vielleicht gibts das auch in Bibliotheken.

    achja, mit ANSI-C hat das nichts zun tun ... 🙂


Anmelden zum Antworten