MegaCraZy6
@MegaCraZy6
Юзерь

Не выводит пару пикселей, через двойную буферизацию, в чем дело ( в дебагере и в виртуалке работает)?

Пишу программу в виде загрузчика работающую в реальном времени. Пытаюсь разобраться с графикой, а именно 320х200 пикселей, при работе с спрайтами вознкает моргание, нашел что нужно второй буффер сделал вроде все как надо, и уже 100 раз перепроверял в емуляторе, виртуалке, работает, а когда запускаю у себя на железе все время что-то не так то только залитый экран каким-то цветом, то если без заливки, вобше куча странностей.

org 7c00h 
use16
jmp start

e:
mov ax,cs
mov ds,ax
mov es,ax
ret

put_clear:
mov ax,8000h
mov ds,ax
mov al,200
mov ah,al  
mov bx,0000h
put_clear0:
mov [bx],ax
add bx,02h 
cmp bx,0FFFEh
jz e
jmp put_clear0      

put_sprite:
mov ax,8000h
mov es,ax
mov di,0
mov bx,sprite
put_sprite0:
mov al,[bx]
cmp al,00h
jz e
stosb
inc bx
jmp put_sprite0

draw:
mov ax,8000h
mov ds,ax
mov ax,0A000h
mov es,ax
mov bx,0000h
mov di,0000h
draw0:   
mov al,[bx]
stosb
cmp bx,0FFFFh
jz e   
inc bx
jmp draw0

start:
call e   
mov ax,0013h
int 10h  
call put_clear  ;; Заливка каким-то цветом, в буффер
call put_sprite  ;; ложу "спрайт" в буффер
call draw ;; отображаю буффер на экран
mov ah,0
int 16h

db 250
db 250
db 250
db 200
db 200
db 200 ;; Это я так проверял баг, сделал растояние между кодом и спрайтом :D 
sprite db 50,150,50,0


Код укоротил насколько смог. Чтоб было проще понять что да как но по сути все тот-же код, заливка в буффер, спрайт в буффер ( тут очень упростил ), и перенос с буффер в А000:0000.

PS: Не особо крутой кодер, тоесть совсем нет, только учусь!
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
вобще куча странностей

В put_sprite и draw забыл сделать cld перед началом цикла, чтобы stosb увеличивал di. Ну и если уж решил использовать строковые инструкции, то почему не lodsb/stosb, или не movsb, или не rep movsb, или даже не rep movsw?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы