Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- org 100h
- ; uruchamiamy tryb graficzny - obraz bmp 320x200x256
- mov ax, 13h
- int 10h
- ; otwieramy plik tylko do odczytu
- mov ax, 3d00h
- mov dx, nazwa_pliku
- int 21h
- jnc otw_ok
- ;wait 1s
- mov CX, 0FH
- mov DX, 4240H
- mov AH, 86H
- int 15H
- ;wait 1s
- mov CX, 0FH
- mov DX, 4240H
- mov AH, 86H
- int 15H
- ; otwieramy plik tylko do odczytu
- mov ax, 3d00h
- mov dx, nazwa_pliku2
- int 21h
- mov ah, 9
- mov dx, blad_plik ; wy�wietlane, gdy wyst�pi� b��d
- int 21h
- err:
- mov ax, 4c01h ; wyj�cie z kodem b��du=1
- int 21h
- otw_ok:
- mov bx, ax ; bx = uchwyt do pliku
- mov ah, 3fh ; czytanie z pliku
- mov cx, 54 ; wyrzucamy 54 bajty nag��wka
- mov dx, smieci
- int 21h
- jc err
- ; wczytywanie palety z pliku:
- xor si, si ; indeks do tablicy "paleta"
- czytaj_pal:
- mov ah, 3fh ; czytanie z pliku
- mov cx, 4 ; czytam po 4 bajty - do b,g,r i z.
- mov dx, b
- int 21h
- jc err
- mov al, [r]
- shr al, 2
- mov [paleta+si], al ; paleta[si] = [r] / 4
- mov al, [g]
- shr al, 2
- mov [paleta+si+1], al ; paleta[si] = [g] / 4
- mov al, [b]
- shr al, 2
- mov [paleta+si+2], al ; paleta[si] = [b] / 4
- add si, 3
- cmp si, 256*3 ; sprawd�, czy nie zapisali�my
- ; ju� wszystkich kolor�w
- jb czytaj_pal
- ; wysy�anie palety do karty graficznej:
- xor ax, ax
- xor si, si ; SI = indeks do palety
- mov dx, 3c8h ; port karty graficznej
- wyslij_palete:
- out dx, al ; wysy�amy numer rejestru,
- ; wszystkie od 0 do 255
- inc dx ; DX = port 3C9h
- push ax
- ; zapisujemy kolorki:
- ; czerwony, zielony, niebieski.
- mov al, [paleta+si] ; AL = czerwony
- out dx, al
- mov al, [paleta+si+1] ; AL = zielony
- out dx, al
- mov al, [paleta+si+2] ; AL = niebieski
- out dx, al
- pop ax
- add si, 3 ; przejd� do nast�pnych kolor�w
- dec dx ; DX z powrotem 3C8h
- inc ax ; wybierzemy kolejny rejestr koloru
- ; w karcie graficznej
- cmp ax, 256 ; sprawd�, czy ju� koniec pracy
- jb wyslij_palete
- ; wczytywanie obrazka:
- mov ax, 0a000h
- mov ds, ax ; czytaj bezpo�rednio do pami�ci ekranu
- mov dx, 64000-320 ; DX = adres ostatniego wiersza
- mov cx, 320 ; z pliku czytamy po 320 bajt�w
- obrazek:
- mov ah, 3fh
- int 21h ; czytaj 320 bajt�w prosto na ekran
- jc err
- sub dx, 320 ; przejd� do wcze�niejszego wiersza
- jnc obrazek ; dop�ki nie musimy po�ycza�
- ; do odejmowania. Po�yczymy dopiero
- ; wtedy, gdy DX < 320 - a to si�
- ; zdarzy dopiero, gdy DX = 0
- ; Wtedy ko�czymy prac�.
- ; koniec programu:
- mov ah, 3eh
- int 21h ; zamknij plik
- jc err
- xor ah, ah
- int 16h
- mov ax, 3
- int 10h
- mov ax, 4c00h
- int 21h
- ; dane:
- nazwa_pliku db "rysunek.bmp",0
- nazwa_pliku2 db "rysunek2.bmp",0
- blad_plik db "Blad operacji na pliku!$"
- smieci: times 54 db 0
- paleta: times 768 db 0
- b db 0
- g db 0
- r db 0
- z db 0
- kolor db 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement