Pixel setzen in VESA-Modi - PART II Ich hab mir das mit der vorherigen Routine noch einmal berlegt, und bin dabei zu dem Entschlu gekommen, da es sinnvoller ist, die beiden Routinen in eine Unit zu packen. Dann braucht man nicht immer die Variablen innerhalb des Hauptprogramms zu de- klarieren, sondern dieses geschieht schon in der Unit selber. Man braucht einfach nur noch 'USES ...,VesaPix;' im Hauptpro- gramm einfgen (wobei '...,' natrlich fr eventuelle andere Units steht und nicht eingegeben werden soll!), InitSetVesaPixPas aufzurufen und danach SetVesaPixPas(x,y,Farbe), um einen Punkt zu setzen. Ich glaube, einfacher geht es nicht. Wenn doch: Immer her damit! Nun die UNIT: UNIT VesaPix; INTERFACE PROCEDURE InitSetVESAPixPas; PROCEDURE SetVESAPixPas(x,y : LONGINT; Farbe : BYTE); IMPLEMENTATION USES DOS; TYPE Zeiger = RECORD Offset,Segment : WORD; END; VAR Regs : Registers; xAufloesung : WORD; Granu : LONGINT; Puffer : ARRAY[0..255] OF BYTE; FensterProc : Zeiger; PROCEDURE InitSetVESAPixPas; BEGIN WITH Regs DO BEGIN AX := $4F03; INTR($10,Regs); {Liefert VESAModus in BX zurck} CX := BX; {Vesa-Modus nach CX} ES := Seg(Puffer); {Segment von Puffer nach ES} DI := Ofs(Puffer); {Offset von Puffer nach DI} AX := $4F01; {Vesa-Infos holen} INTR($10,Regs); {und in ES:DI/Puffer ablegen} xAufloesung := Puffer[$13] * 256 + Puffer[$12]; Granu := (Puffer[$05] * 256 + Puffer[$04]) SHL 10; {Granu = Granu * 1024} FensterProc.Offset := Puffer[$0D] * 256 + Puffer[$0C]; FensterProc.Segment := Puffer[$0F] * 256 + Puffer[$0E]; {Offset+Segment der Routine zum Fensterverschieben} END; END; PROCEDURE SetVESAPixPas(x,y : LONGINT; Farbe : BYTE); VAR Anzahl : WORD; Offset : LONGINT; BEGIN Offset := y * xAufloesung + x; {Offset berechnen} Anzahl := Offset DIV Granu; {Wie oft mu Fenster verschoben werden?} Offset := Offset MOD Granu; {Neuer Offset im verschobenen Fenster} ASM XOR BX,BX MOV DX,Anzahl CALL DWORD PTR FensterProc; {Fenster verschieben} END; MEM[$A000:Offset] := Farbe; END; BEGIN END. Ich habe darauf verzichtet, die Pascal-Routine fr's Fensterver- schieben zu benutzen. Eigentlich knnte ich jetzt auch noch die anderen, in Pascal geschriebenen 'Assembleranweisungen' direkt in Assembler bersetzen. Dafr bin ich aber zum einen zu faul und zum anderen ist dies die Pascal Rubrik, oder? Andererseits... Was soll's? Wenn Ihr ein wenig Phanatasie habt, wobei das eigent- lich gar nichts mit Phantasie zu tun hat, wenn Ihr also eigent- lich keine Phantasie habt, dann bekommt Ihr das auch alleine hin, oder? Na also! Kemil