{ NV> Could somebody tell me how to use mode 640x480x16? I NV> don't mean using it with int 10, 'cause it's too slow, NV> but writing directly to VGA memory. So how do I draw a NV> pixel and how do I read a pixel? well, you set the mode with: ASM MOV AX, 12h; INT 10h; END; and then draw a pixel with: } PROCEDURE plot_640x480x16(x, y : WORD; c : BYTE); ASSEMBLER; ASM {$IFDEF DPMI} MOV ES, SEGA000 {$ELSE} MOV AX, $A000 MOV ES, AX {$ENDIF} MOV DI, x MOV CX, DI SHR DI, 3 MOV AX, 80 MUL y ADD DI, AX AND CL, $07 MOV AH, $80 SHR AH, CL MOV AL, $08 MOV DX, $03CE OUT DX, AX MOV AL, c MOV AH, [ES:DI] MOV [ES:DI], AL END; { and read a pixel with: } FUNCTION point_640x480x16(x, y : WORD) : BYTE; ASSEMBLER; ASM MOV AX, 80 MUL y MOV SI, x MOV CX, SI SHR SI, 3 ADD SI, AX AND CL, $07 XOR CL, $07 MOV CH, 1 SHL CH, CL {$IFDEF DPMI} MOV ES, SEGA000 {$ELSE} MOV AX, $A000 MOV ES, AX {$ENDIF} MOV DX, $03CE MOV AX, 772 XOR BL, BL @gp1: OUT DX, AX MOV BH, ES:[SI] AND BH, CH NEG BH ROL BX, $0001 DEC AH JGE @gp1 MOV AL, BL END;