Вывод на экран работает не полностью
Недавно начал писать ос на асемблере и си, уже сделал графику, но она выводи изображение не полностью:
Но я заметил что если в си коде писать uint16_t вместо uint32_t и в асемблере всемто dd 32, dd 16, то пикселей становится не как раньше 16383, а 32767
boot.asm:
bits 32 ; 32 bin
section .text ;
; Multiboot spec
align 4 ;
dd 0x1BADB002 ; MAGIC
dd 7 ; FLAGS
dd - (0x1BADB002 + 7) ; CHECKSUM (MAGIC + FLAGS)
dd 0 ; HEADER_ADDR
dd 0 ; LOAD_ADDR
dd 0 ; LOAD_END_ADDR
dd 0 ; BSS_END_ADDR
dd 0 ; ENTRY_ADDR
dd 0 ; MODE_TYPE
dd 320 ; WIDTH
dd 200 ; HEIGHT
dd 32 ; DEPTH
;
global _start ;
extern kmain ; Function kmain from C-code
;
_start: ;
cli ;
mov esp, stack_space ; Set stack
call kmain ; Call main function
hlt ; Stop system
;
section .bbs ;
resb 8192 ; 8 Kb
stack_space: ;
;
kernel.c:
#include <stdint.h>
#include <unistd.h>
uint32_t *vidptr = (uint32_t *)0xA0000;
int WIDTH = 320;
int HEIGHT = 200;
void set_pixel(int x, int y, uint32_t color) {
vidptr[y * WIDTH + x] = color;
}
void fill_screen(uint32_t color) {
for (int y = 0; y < HEIGHT; ++y) {
for (int x = 0; x < WIDTH; ++x) {
set_pixel(x, y, color);
}
}
}
void kmain(void) {
fill_screen(0xFF9900);
// vidptr[16383] = 0xFFFFFF;
// vidptr[32767] = 0xFFFFFF;
while (1) {}
}