.286
.model small
.code
ORG 100h
start:
		call ggg
		db 'cool3.bmp',0
ggg:	pop dx
		mov ax, 3d00h
		int 21h
		mov bx, ax

		mov ah, 3fh
		mov cx, bmphdr_len
		mov dx, offset cs:bmphdr
		int 21h

		mov ah, 3fh
		mov cx, bmpinfohdr_len
		mov dx, offset cs:bmpinfohdr
		int 21h

		mov ax, 13h
		int 10h

		mov cx, 256

loadpal:
		push cx
		mov ah, 3fh
		mov dx, offset cs:colortable
		mov cx, clrtab_len
		int 21h
		mov dx, 3c8h
		mov al, col
		out dx, al
		inc col
		mov dx, 3c9h
		mov al, rgbRed
		shr al, 2
		out dx, al
		mov al, rgbGreen
		shr al, 2
		out dx, al
		mov al, rgbBlue
		shr al, 2
		out dx, al	
		pop cx
		loop loadpal
        mov cx, 200
        mov ax, 0a000h
		mov ds, ax
		mov di, 320*199

loadimage:
		push cx
		mov ah, 3fh
		mov cx, 320
		mov dx, di
		int 21h 
		sub di, 320
		pop cx
		loop loadimage

		mov ah, 3eh
		int 21h	

        mov ah, 08h
        int 21h

		mov ax,3
		int 10h
		int 20h

; End of main proc
;-------------------------------
;-------------------
; Bitmap Header!!!
;-------------------
bmphdr:
	bfType		dw 0		;		//тип файла (для битового образа - BM)
	bfSize 		dd 0        ;		//размер файла в dword
				dw 0,0		
	bfOffbits 	dd 0		;	//смещение данных битового образа от начала файла
bmphdr_len EQU $-bfType
;-------------------
; Bitmap Info Header!!!
;-------------------
bmpinfohdr:
	biSize 		dd	0	;		//число байт, занимаемых структурой
 	biWidth 	dd  0	;	//ширина битового образа в пикселах
 	biHeight 	dd  0	;	//высота битового образа в пикселах 
				dw  0	;	//число битовых плоскостей устройства
	biBitCount	dw 	0	;	//число битов на пиксель
				dd	0	; biCompression;	//тип сжатия
	biSizeImage dd  0   ;	//размер картинки в байтах
				dd	0,0	; biXPelsPerMeter;//горизонтальное разрешение устройства,
						; biYPelPerMeter;	//вертикальное разрешение устройства,
				dd 	0	; biClrUsed;	//число используемых цветов
				dd	0	; biClrImportant; //число "важных" цветов
bmpinfohdr_len EQU $-biSize
;-------------------
; Color table
;-------------------
colortable:
	rgbBlue		db 0;	//интенсивность красного
	rgbGreen	db 0;	//интенсивность зеленого
	rgbRed 		db 0;	//интенсивность голубого
	       db 0;	//не используется
clrtab_len  EQU $-rgbBlue
col 	db	0
end start
