Witam. Napisałem swój program rezydentny i działa, ale działa w dziwny, przynajmniej dla mnie sposób... być może wynika to z jakichś luk w wiedzy, jeżeli tak to prosiłbym o informacje gdzie/co źle pojmuję w tym temacie.
A więc... Napisałem obsługę przejęcia przerwania INT 8H (czyli zegara) i to działa jako program rezydentny. Ten program działa tak, że przejmuje przerwanie wypisuje znak dolara i skacze do oryginalnej funkcji przerwania, czyli obsługa przerwania przez program rezydentny wygląda tak:
mov ah, 2
mov dl, '$'
int 21h
jmp word far [cs:org_adres]
Gdzie zmienna org_adres, to zmienna 4 bajtowa przechowująca segment i offset oryginalnego wektora przerwania uzyskany za pomocą funkcji 35h (przerwania 21h). Reszta kodu to "instalacja", która wygląda, że została napisana poprawnie.
Napisałem też drugi program, który przejmuje przerwanie (które zostało już przejęte - najpierw uruchamiam instalator tsra a potem ten program. głupie, wiem. ale to dla testu żeby zobaczyć czy działa poprawnie! :) ). Program ten przejmuje przerwanie i wypisuje znak sharpa i przeskakuje dalej, czyli kod wygląda tak:
mov ah, 2
mov dl, '#'
int 21h
jmp word far [cs:org_adres]
Program kończy działanie po naciśnieniu klawisza klawiatury. Po uruchomieniu obydwu programów tak jak to zostało przedstawione powyżej uzyskam efekt wypisywania na ekran odpowiednio $# dla każdego przerwania od 8h, czyli wygląda na to, że programy zostały napisane poprawnie (tak?). Natomiast jeżeli instalator tsr'a uruchomię w jeden konsoli, a drugi program w drugiej konsoli to wypisuje mi już tylko płotek #, dlaczego ? Czy konsole / programy uruchamiane w konsolach posiadają jakieś specjalną nie współdzieloną pamięć ?
Proszę o pomoc, bo mam braki w wiedzy :)