.model small .586 .stack 100h .data MAXROW equ 480 MAXCOL equ 640 MAXPIX equ 16 VIDMOD equ 12h ; 640x480 16 color ; MAXROW equ 200 ; MAXCOL equ 320 ; MAXPIX equ 16 ; VIDMOD equ 0Dh ;320x200 16 color ; MAXROW equ 200 ; MAXCOL equ 320 ; MAXPIX equ 4 ; VIDMOD equ 04h ;320x200 4 color ; MAXROW equ 200 ; MAXCOL equ 320 ; MAXPIX equ 256 ; VIDMOD equ 13h ;320x200 256 color BANDSZE equ MAXROW/MAXPIX row dw 0 col dw 0 bandcnt db 0 pixel db 0 vmode db 0 ;; current video mode vpage db 0 ;; current video page .code main proc mov ax,@data mov ds,ax ;; read current video mode and save mov ah,0fh int 10h mov vmode,al mov vpage,bh ;; set new video mode mov ah,0 mov al,VIDMOD int 10h lp1: call wpixel inc col mov ax,col cmp ax,MAXCOL jne lp1 ;start new row xor ax,ax mov col,ax ;zero column value inc bandcnt mov al,bandcnt cmp al,bandsze jb nextrow inc pixel ;inc to next color value xor al,al mov bandcnt,al nextrow: inc row mov ax,row cmp ax,MAXROW jne lp1 doexit: mov ah,1 int 21h ; get a key mov ah,0 ;; restore old video mode mov bh,vpage mov al,vmode int 10h Mov ax, 4c00h ;exit Int 21h Main endp wpixel proc mov ah,0ch mov al, pixel mov bh,0 mov cx,col mov dx, row int 10h ret wpixel endp end main