. 256- . (x,y) 640*y+x 640 . , , - , , , x=255, y=102, 65535. 64K .
, . , . , 0 65536 "" (granularity) 64 KB.
(x,y) 640*y+x-B*WG B - WG - "". AX=4F05h 10h , VESA.
. AX BX, CX . , "" 64 KB, , , S3.
SVGA_bank dw 0;
S_rivi dw 640;
VGA_seg dw 0A000h; VGA
CBpxl$ proc; x=AX, y=BX, =CX
xchg AX,BX; x=BX, y=AX
mul S_rivi
add AX,BX
adc DX,0; DX
mov DI,AX;
cmp DX,SVGA_bank; ?
je Cxl256_OK
mov SVGA_bank,DX;
mov AX,4F05h
xor BX,BX;: DX, A
int 10h
Cxl256_OK:
mov BX,ES;
mov AL,CL;
mov ES,VGA_seg
stosb;
mov ES,BX
ret
CBpxl$ endp
; COM-
codeseg segment
assume cs:codeseg, ds:codeseg, es:codeseg
org 100h
Code: jmp Start
x dw 50; x
y dw 20; y
Text db 'string to be printed',0; 0
Start:
mov AX,80;
mul y
add AX,x
shl AX,1; AX=160*y+2*x
mov DI,AX
mov SI,offset Text
push ES; ES
mov AX,0B800h;
mov ES,AX
Print:
lodsb; AL DS:[SI]
or AL,AL; ?
jz Ready;, AL=0
mov ES:[DI],AL;
add DI,2;
jmp Print
Ready: pop ES; ES
;---------------------------------------
int 20H
codeseg ends
end Code