Получение бесконечного цикла или зависание в 8086 asm с использованием эмулятора tasm 1.0 и mame mc1502 (полусовместимость с XT)
Я пытаюсь написать программу на 8086 asm для эмулятора XT, которая рисует случайные пиксели на экране (пока 1 ось координат).
Рисуются 10 пикселей (x=random(),y=100), затем запускается задержка. У меня зависание или бесконечный цикл.
Я пробовал нажимать и открывать регистр cx для цикла. Также я пробовал запустить встроенный файл.com в dos 3.3 debug.com, но как только программа переходит в графический режим, на экране ничего не видно. Я понимаю, что когда я масштабирую случайное число на 5, это может привести к выходу пиксельной координаты за пределы экрана. Но проблема в зависании или бесконечном цикле. Часть задержки тестировалась отдельно и работает нормально, на моем эмуляторе задержка составляет около 3 секунд.
Дополнительная информация: машина mc1502 8086 для эмулятора mame, среда ОС - sigma dos для mc1502 (клон msdos 3.3), asm - turbo asm 1.0.
;configure for com file
.model tiny
.code
org 100h
start:
;set graphics mode
mov ax, 0004h ;cga 320*200 color on mc1502
int 10h
;put pixel line by coords (rnd)
;start random gen
mov dx, 0abbah ;init
mov cx, 000ah ;10 times
rnd:
mov ax, dx
mov bx, 001fh
mul bx
add ax, 000dh
mov bx, 4ce3h
div bx ;dx now has a random number
;draw pixel
push cx ;save counter
mov cx, 0064h ;x 2-byte
push dx ;save dx
mov ax, dx ; scaling dx
mov bl, 5
div bl
mov dx, 0 ;scaled y
mov dl, al ;dl is y
mov ax, 0c02h ;0c drawfunc, 02 color
int 10h ;video int
pop dx
pop cx
loop rnd
;delay
mov cx, 0ffffh
delay:
push cx
mov cx, 000ah
indelay:
nop
loop indelay
pop cx
loop delay
;set text mode 80x25 bw
mov ax, 0000h
int 10h
;exit to dos
mov ax, 4c00h
int 21h
end start