[Back to SCREEN SWAG index] [Back to Main SWAG index] [Original]
(*
IL> Use the memw array to read one word. The low byte is the attribute
IL> (color) and the other is the character.
IL>
IL> var ch:word; x,y:byte;
IL> begin
IL> {get x,y then read}
IL> ch:=MEMW[$b800:y*25+x-1];
IL> end.
IL>
IL> The numbers might be off, but that's the idea.
Ouch. You screwed up there... This should do it:
(and I DON'T want some optimizations as 'shl ax,5' is faster than 'mov cl,5;
shl ax,cl'. It is coded in this way to ensure downward compatiblity. Replace
TextVidMem with either 0b000h or 0b800h, depending on your screen.)
*)
Function ReadCharThingy(x, y : Word) : Word; Assembler;
Asm
dec x
dec y
mov ax,y
mov cl,5
shl ax,cl
mov si,ax
mov cl,2
shl ax,cl
add si,ax
shl x,1
add si,x
mov ax,TextVideoMem
push ds
mov ds,ax
lodsw
pop ds
End;
[Back to SCREEN SWAG index] [Back to Main SWAG index] [Original]