Quantcast
Channel: Active questions tagged kernel - Stack Overflow
Viewing all articles
Browse latest Browse all 6334

How to load image from disk to vmem

$
0
0

I am writing an OS in fasm assembly and I faced with problem. I was trying to draw font pixel-by-pixel, but it is too hard and strange. I want to make bitmap pixel-by-pixel font and save it on hdd, and in kernel code make function, that can load it to video memory. I tried to google it, but without success. Help, please

Code of kernel:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  Macrosesmacro rect c, x, y, w, h {    pusha    mov bx, c    mov cx, x    mov dx, y    mov si, w    mov di, h    call __rect    popa}macro pixel c, x, y {rect c, x, y, 1, 1}macro __video__init {    pusha    ;mov ax, 0x4F02    ;mov bx, 0x101    ;int 0x10    mov   ah,     0x00    mov   al,     0x13    int   0x10    rect  0x00,   0,      0,     640*2,   480*2    popa}macro sym c, x, y, s {    pusha    xor bx, bx    mov bx, c    mov cx, x    mov dx, y    mov al, s    call __sym    popa}macro image x, y, w, h, addr {    pusha    mov si, x    mov di, y    mov [reg0], w    mov [reg8], h    mov bp, addr    popa};;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  Cosmeticsmacro return value {    mov eax, valueret}macro far a {    mov ax, a/16    mov ds, ax    mov es, ax    mul ax, 16    mov sp, ax    div ax, 16    jmp ax:0x0000}macro rint trr {    pusha    mov bp, trr    cmp bp, 0x10    popa    je __r10h}macro retn {ret};;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  Testsmacro __video__test {    sym 0x0F, 0x00, 0x00, '!'    sym 0x0F, 0x0F, 0x00, '"'    sym 0x0F, 0x20, 0x00, '#'    sym 0x0F, 0x30, 0x00, '$'    sym 0x0F, 0x40, 0x00, '%'    sym 0x0F, 0x50, 0x00, '&'    sym 0x0F, 0x60, 0x00, "'"    sym 0x0F, 0x70, 0x00, '('    sym 0x0F, 0x80, 0x00, ')'    sym 0x0F, 0x90, 0x00, '*'    sym 0x0F, 0xA0, 0x00, '+'    sym 0x0F, 0xB0, 0x00, ','    sym 0x0F, 0xC0, 0x00, '-'    sym 0x0F, 0xD0, 0x00, '.'    sym 0x0F, 0xE0, 0x00, '/'    sym 0x0F, 0xF0, 0x00, '0'    sym 0x0F, 0x100,0x00, '1'    image 0, 0, 320, 200, 0    call __frame};;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  Kernel__kernel:    org 0x7E00    mov [bootdev], dl;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  Grafic Core    __video__init    ;rect 0x01, 0x00, 0x00, 0x280, 0x190    __video__test    jmp $;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  Bss    buffer     db 1024 dup (?)    bootdev    db 0x00    reg0       db 0x0000    reg1       db 0x0000    hexstr     db '0x0000', 0x00    rstr       db "Talisman's R-OS 0.0.1a", 0x00;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  Funcs;;;;;;;;;;;;;;;;;;;;;;  Bitmap font func__sym:    cmp al, '!'    je .!    cmp al, '"'    je ."    cmp al, '#'    je .sharp    cmp al, '$'    je .dollar    cmp al, '%'    je .%    cmp al, '&'    je .et    cmp al, "'"    je .'    cmp al, '('    je .brt    cmp al, ')'    je .brt2    cmp al, '*'    je .star    cmp al, '+'    je .plus    cmp al, ','    je .comma    cmp al, '-'    je .menos    cmp al, '.'    je .point    cmp al, '/'    je .slash    cmp al, '0'    je .0    cmp al, '1'    je .1    retn.!:    add cx, 3    add dx, 4    rect bx, cx, dx, 2, 5    add dx, 7    rect bx, cx, dx, 2, 2    retn.":    add cx, 2    add dx, 3    rect bx, cx, dx, 2, 3    add cx, 3    rect bx, cx, dx, 2, 3    retn.sharp:    add cx, 2    add dx, 4    rect bx, cx, dx, 2, 8    add cx, 3    rect bx, cx, dx, 2, 8    sub cx, 4    inc dx    rect bx, cx, dx, 7, 1    add dx, 4    rect bx, cx, dx, 7, 1    retn.dollar:    add cx, 3    add dx, 2    rect bx, cx, dx, 2, 2    dec cx    add dx, 2    rect bx, cx, dx, 4, 1    dec cx    inc dx    rect bx, cx, dx, 2, 2    add cx, 4    rect bx, cx, dx, 2, 2    sub cx, 3    add dx, 2    rect bx, cx, dx, 2, 1    add cx, 2    add dx, 1    rect bx, cx, dx, 2, 1    inc cx    inc dx    rect bx, cx, dx, 2, 2    sub cx, 4    rect bx, cx, dx, 2, 2    inc cx    add dx, 2    rect bx, cx, dx, 4, 1    inc cx    inc dx    rect bx, cx, dx, 2, 2    retn.%:    inc cx    inc dx    rect bx, cx, dx, 2, 1    dec cx    inc dx    rect bx, cx, dx, 1, 2    add cx, 3    rect bx, cx, dx, 1, 2    sub cx, 2    add dx, 2    rect bx, cx, dx, 2, 1    dec cx    add dx, 5    rect bx, cx, dx, 1, 3    inc cx    dec dx    rect bx, cx, dx, 1, 3    inc cx    dec dx    rect bx, cx, dx, 1, 3    inc cx    dec dx    rect bx, cx, dx, 1, 3    inc cx    dec dx    rect bx, cx, dx, 1, 3    inc cx    dec dx    rect bx, cx, dx, 1, 3    inc cx    dec dx    rect bx, cx, dx, 1, 3    inc cx    dec dx    rect bx, cx, dx, 1, 3    sub cx, 2    add dx, 7    rect bx, cx, dx, 2, 1    dec cx    inc dx    rect bx, cx, dx, 1, 2    add cx, 3    rect bx, cx, dx, 1, 2    sub cx, 2    add dx, 2    rect bx, cx, dx, 2, 1    retn.et:    add cx, 2    add dx, 3    rect bx, cx, dx, 3, 1    dec cx    inc dx    rect bx, cx, dx, 2 ,2    add cx, 3    rect bx, cx, dx, 2, 2    sub cx, 2    add dx, 2    rect bx, cx, dx, 3, 1    dec cx    inc dx    rect bx, cx, dx, 2, 4    add cx, 3    inc dx    rect bx, cx, dx, 4, 1    inc cx    inc dx    rect bx, cx, dx, 2, 2    sub cx, 3    add dx, 2    rect bx, cx, dx, 3, 1    add cx, 4    rect bx, cx, dx, 2, 1    retn.':    add cx, 3    add dx, 2    rect bx, cx, dx, 2, 3    retn.brt:    add cx, 5    add dx, 2    pixel bx, cx, dx    dec cx    inc dx    rect bx, cx, dx, 2, 1    dec cx    inc dx    rect bx, cx, dx, 2, 1    inc dx    rect bx, cx, dx, 2, 1    dec cx    inc dx    rect bx, cx, dx, 2, 1    inc dx    rect bx, cx, dx, 2, 1    inc cx    inc dx    rect bx, cx, dx, 2, 1    inc dx    rect bx, cx, dx, 2, 1    inc cx    inc dx    rect bx, cx, dx, 2, 1    inc cx    inc dx    pixel bx, cx, dx    retn.brt2:    add cx, 3    add dx, 2    rect bx, cx, dx, 1, 2    ;inc cx    ;inc dx    ;rect bx, cx, dx, 1, 2    inc cx    inc dx    pixel bx, cx, dx    inc dx    rect bx, cx, dx, 2, 2    inc cx    add dx, 2    rect bx, cx, dx, 2, 2    dec cx    add dx, 2    rect bx, cx, dx, 2, 2    ;dec cx    inc dx    ;rect bx, cx, dx, 2, 1    dec cx    inc dx    rect bx, cx, dx, 2, 1    inc dx    pixel bx, cx, dx    retn.star:    add cx, 3    add dx, 3    pixel bx, cx, dx    sub cx, 2    inc dx    rect bx, cx, dx, 5, 1    inc cx    inc dx    rect bx, cx, dx, 3, 1    inc dx    pixel bx, cx, dx    add cx, 2    pixel bx, cx, dx    retn.plus:    add cx, 3    add dx, 5    rect bx, cx, dx, 2, 5    sub cx, 2    add dx, 2    rect bx, cx, dx, 6, 1    retn.comma:    add cx, 3    add dx, 10    rect bx, cx, dx, 2, 2    inc cx    add dx, 2    pixel bx, cx, dx    retn.menos:    inc cx    add dx, 7    rect bx, cx, dx, 6, 1    retn.point:    add cx, 3    add dx, 10    rect bx, cx, dx, 2, 2    retn.slash:    add dx, 9    rect bx, cx, dx, 1, 3    inc cx    dec dx    rect bx, cx, dx, 1, 3    inc cx    dec dx    rect bx, cx, dx, 1, 3    inc cx    dec dx    rect bx, cx, dx, 1, 3    inc cx    dec dx    rect bx, cx, dx, 1, 3    inc cx    dec dx    rect bx, cx, dx, 1, 3    inc cx    dec dx    rect bx, cx, dx, 1, 3    inc cx    dec dx    rect bx, cx, dx, 1, 3    retn.0:    inc cx    add dx, 3    rect bx, cx, dx, 2, 10    add cx, 4    rect bx, cx, dx, 2, 10    dec cx    inc dx    rect bx, cx, dx, 1, 3    dec cx    add dx, 5    rect bx, cx, dx, 1, 3    dec cx    sub dx, 7    rect bx, cx, dx, 4, 1    add dx, 11    rect bx, cx, dx, 4, 1    retn.1:    add cx, 4    add dx, 2    rect bx, cx, dx, 2, 10    sub cx, 2    add dx, 2    rect bx, cx, dx, 3, 2    add dx, 6    rect bx, cx, dx, 6, 2    retn;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  fast putpix func__rect:    push    ds    dx       di    imul    dx,   320    add dx,   cx    mov ax,   0xA000    mov ds,   ax    jmp ._o._o:    push    si    jmp ._i._i:    dec si    mov byte  [edx+esi],       bl;bx    jnz ._i    pop si    add dx,   320    dec di    jnz ._o    pop di    dx       ds    ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  Image func__image:    mov ah, 0x00    int 0x13    mov ah, 0x02    mov al, [reg8]    imul al, 320    add al, 0x8700    add al, [reg0]    idiv al, 512    mov bx, 0x8700+si+320*di    mov es, 0x00    mov ch, 0x00    mov cl, (bp+512+0x7FFF-64000)/512    mov dh, 0x00    mov dl, [bootdev]    int 0x13    ret__frame:    mov ebx, 0x00000000._l:    mov byte [ebx+0xA000], [ebx+0x8700]    cmp ebx, 6400    je ._r    jmp ._l._r:    ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  R interrupts__r10h:    sym bx, cx, dx, al;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  Footer__footer:    cli    hlt    jmp $-2    times 0x7FFF-64000-$+$$ db 0x00

I hope my code will be more optimized in the future.


Viewing all articles
Browse latest Browse all 6334

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>