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
вобще куча странностей
Не работает, но уже лучше
add bx,02h
cmp bx,0FFFEh
jz e
cmp bx,0FFFFh
jz e
inc bx
я там ложу по два байта же когда счетчик будет FFFEh следующие два байта будут уже заполнени
add bx, 2
перед сравнением.люблю делать такие велики иначе неумею
#make_boot#
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,420
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:
cld
call e
mov ax,0013h
int 10h
call put_clear
cld
call put_sprite
cld
call draw
mov ah,0
int 16h
db 250
db 250
db 250
db 200
db 200
db 200
sprite db 150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,0
Но оно каким-то чудом весь єкран охвативает)
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
cmp bx,0FFFEh
jz e
add bx,02h
jmp put_clear0
put_sprite:
mov ax,cs
mov ds,ax
mov ax,8000h
mov es,ax
mov di,420
mov bx,sprite
put_sprite0:
mov al,[bx]
cmp al,00h
jz e
mov cl,al
push ds
mov ax,8000h
mov ds,ax
mov al,cl
mov [di],al
pop ds
inc bx
inc di
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]
mov cl,al
push ds
mov ax,0A000h
mov ds,ax
mov al,cl
mov [di],al
pop ds
cmp bx,0FFFFh
jz e
inc bx
inc di
jmp draw0
start:
cld
call e
mov ax,0013h
int 10h
call put_clear
cld
call put_sprite
cld
call draw
mov ah,0
int 16h
db 250
db 250
db 250
db 200
db 200
db 200
sprite db 50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,0
mov ax,0000h
mov sp,ax
mov ss, ax
mov ax,cs
mov ds,ax
mov ax,ds
mov [sg],ax
;; ...
mov ds,[sg]
#make_boot#
org 7c00h
use16
mov ax,ds
mov [cssegment],ax
jmp start
cssegment dw 0
e:
mov ax,[cssegment]
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
cmp bx,0FFFEh
jz e
add bx,02h
jmp put_clear0
put_sprite:
mov ax,[cssegment]
mov ds,ax
mov ax,8000h
mov es,ax
mov di,420
mov bx,sprite
put_sprite0:
mov al,[bx]
cmp al,00h
jz e
mov cl,al
push ds
mov ax,8000h
mov ds,ax
mov al,cl
mov [di],al
pop ds
inc bx
inc di
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]
mov cl,al
push ds
mov ax,0A000h
mov ds,ax
mov al,cl
mov [di],al
pop ds
cmp bx,0FFFFh
jz e
inc bx
inc di
jmp draw0
start:
cld
call e
mov ax,0013h
int 10h
call put_clear
cld
call put_sprite
cld
call draw
mov ah,0
int 16h
db 250
db 250
db 250
db 200
db 200
db 200
sprite db 50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,0