Interrupt-Aufruf in C funktioniert nicht richtig
Verfasst: Sa 19. Aug 2017, 16:14
Hallo,
steh hier gerade vor einem Problem und finde die Ursache nicht. Ich hab dasselbe Programm in Turbo Pascal, Assembler und Turbo C geschrieben, aber es funktioniert nur in den ersten beiden Sprachen, in Turbo C will es einfach nicht.
Assembler-Version:
.model small
.stack 100h
.code
START:
mov ax,1130h
mov bx,0600h
int 10h
mov ax,1110h
mov bx,1000h
mov cx,256;
mov dx,0;
int 10h
mov ah,4ch
int 21h
END START
Turbo C Version:
#include <stdio.h>
#include <dos.h>
struct REGPACK cpu;
unsigned int es;
unsigned int bp;
int main () {
clrscr();
cpu.r_ax=0x1130;
cpu.r_bx=0x0600;
intr(0x10,&cpu);
es=cpu.r_es;
bp=cpu.r_bp;
cpu.r_ax=0x1110;
cpu.r_bx=0x1000;
cpu.r_cx=256;
cpu.r_dx=0;
cpu.r_es=es;
cpu.r_bp=bp;
intr(0x10,&cpu);
return 0;
}
Sollte eigentlich dasselbe bewirken oder?
Der erste Interrupt-Aufruf holt sich die Adresse des 8x16 VGA Fonts und der zweite installiert denselben Font dann gleich wieder als User defined Font. Ist zwar unsinnig ich weiß, aber warum funktioniert die C Version nicht? Die installiert nämlich nicht dieselben Zeichen sondern es sieht so aus als ob alle Zeichenmatrizen leer sind.
lg, Markus
steh hier gerade vor einem Problem und finde die Ursache nicht. Ich hab dasselbe Programm in Turbo Pascal, Assembler und Turbo C geschrieben, aber es funktioniert nur in den ersten beiden Sprachen, in Turbo C will es einfach nicht.
Assembler-Version:
.model small
.stack 100h
.code
START:
mov ax,1130h
mov bx,0600h
int 10h
mov ax,1110h
mov bx,1000h
mov cx,256;
mov dx,0;
int 10h
mov ah,4ch
int 21h
END START
Turbo C Version:
#include <stdio.h>
#include <dos.h>
struct REGPACK cpu;
unsigned int es;
unsigned int bp;
int main () {
clrscr();
cpu.r_ax=0x1130;
cpu.r_bx=0x0600;
intr(0x10,&cpu);
es=cpu.r_es;
bp=cpu.r_bp;
cpu.r_ax=0x1110;
cpu.r_bx=0x1000;
cpu.r_cx=256;
cpu.r_dx=0;
cpu.r_es=es;
cpu.r_bp=bp;
intr(0x10,&cpu);
return 0;
}
Sollte eigentlich dasselbe bewirken oder?
Der erste Interrupt-Aufruf holt sich die Adresse des 8x16 VGA Fonts und der zweite installiert denselben Font dann gleich wieder als User defined Font. Ist zwar unsinnig ich weiß, aber warum funktioniert die C Version nicht? Die installiert nämlich nicht dieselben Zeichen sondern es sieht so aus als ob alle Zeichenmatrizen leer sind.
lg, Markus