mov si,0
mov di,0F600h
mov dh,20 ; 20 строк
row_loop:
cmp dh,0
je done
mov ch,22 ; 22 пикселя в строке
run_loop:
; конец массива данных
cmp si,69
jae done
mov bh,[bx+si]
inc si
; цвет = старшие 4 бита
mov ah,bh
shr ah,4
cmp ah,0
je color_white
cmp ah,1
je color_black
cmp ah,2
je color_red
mov dl,0Eh
jmp get_count
color_white:
mov dl,0Fh
jmp get_count
color_black:
mov dl,00h
jmp get_count
color_red:
mov dl,04h
get_count:
; количество = младшие 4 бита
mov bl,bh
and bl,0Fh
inc bl ; убрать если не k-1
draw_run:
mov al,20h
mov ah,dl
; рисуем пиксель два раза
mov [di],ax
add di,2
mov [di],ax
add di,2
dec ch ; осталось в строке
dec bl ; осталось в серии
cmp ch,0
je next_row
cmp bl,0
jne draw_run
jmp run_loop
next_row:
; пропуск до начала следующей строки
mov cx,18
blank_loop:
mov word ptr [di],0020h
add di,2
mov word ptr [di],0020h
add di,2
loop blank_loop
dec dh
jmp row_loop
done:
hlt