163 lines
1.9 KiB
NASM
Executable File
163 lines
1.9 KiB
NASM
Executable File
.model tiny
|
|
.386c
|
|
.code
|
|
org 0100h
|
|
|
|
|
|
start:
|
|
mov si,offset logo
|
|
mov ah,4
|
|
xor di,di
|
|
mov bx,6000h
|
|
mov es,bx
|
|
int 48h
|
|
push es
|
|
pop ds
|
|
mov bx,5000h
|
|
mov es,bx
|
|
xor si,si
|
|
xor di,di
|
|
xor bx,bx
|
|
call DecompressRle
|
|
push es
|
|
pop ds
|
|
call loadbmp
|
|
xor ax,ax
|
|
xor bx,bx
|
|
call showbmp
|
|
mov ax,0
|
|
int 16h
|
|
db 0CBH
|
|
|
|
loadbmp:
|
|
push ax bx cx dx bp ds
|
|
mov ax,6
|
|
int 47h
|
|
mov ax,ds:[18]
|
|
mov si,ax
|
|
shr ax,2
|
|
and si,11b
|
|
cmp si,0
|
|
je is4x
|
|
add ax,1
|
|
is4x:
|
|
mov cs:sizeh,ax
|
|
mov ax,ds:[22]
|
|
mov cs:sizev,ax
|
|
mov di,0FFFFh-1024
|
|
mov si,54
|
|
mov cl, 0ffh
|
|
paletteload:
|
|
lodsb
|
|
shr al, 2
|
|
mov [di+2], al
|
|
lodsb
|
|
shr al, 2
|
|
mov [di+1], al
|
|
lodsb
|
|
shr al, 2
|
|
mov [di+0], al
|
|
inc si
|
|
add di, 3
|
|
dec cl
|
|
jnz paletteload
|
|
mov si,0FFFFh-1024
|
|
mov dx, 3c8h
|
|
cld
|
|
mov cl, 0ffh
|
|
xor bx, bx
|
|
palettemake:
|
|
mov al, bl
|
|
out dx, al
|
|
inc dx
|
|
lodsb
|
|
out dx, al
|
|
lodsb
|
|
out dx, al
|
|
lodsb
|
|
out dx, al
|
|
dec dx
|
|
inc bl
|
|
dec cl
|
|
jnz palettemake
|
|
pop ds bp dx cx bx ax
|
|
ret
|
|
sizeh dw 0
|
|
sizev dw 0
|
|
|
|
showbmp:
|
|
push ax bx cx dx si di ds es
|
|
mov cx,cs:sizeh
|
|
mov dx,cs:sizev
|
|
add bx,dx
|
|
mov di,ax
|
|
mov ax,bx
|
|
shl ax,6
|
|
shl bx,8
|
|
add di,bx
|
|
add di,ax
|
|
mov bx,di
|
|
mov ax,0A000H
|
|
mov es,ax
|
|
mov si,1024+54
|
|
mov ax,cx
|
|
bouclebmp:
|
|
cmp di,64000
|
|
jae nopp
|
|
cld
|
|
rep movsd
|
|
no:
|
|
mov cx,ax
|
|
sub bx,320
|
|
mov di,bx
|
|
dec dx
|
|
jnz bouclebmp
|
|
fin:
|
|
pop es ds di si dx cx bx ax
|
|
ret
|
|
nopp:
|
|
shl cx,2
|
|
add si,cx
|
|
jmp no
|
|
|
|
DecompressRle:
|
|
push cx dx si di
|
|
mov dx,cx
|
|
mov bp,di
|
|
decompression:
|
|
mov eax,[si]
|
|
cmp al,'/'
|
|
jne nocomp
|
|
cmp si,07FFFh-6
|
|
jae thenen
|
|
mov ecx,eax
|
|
ror ecx,16
|
|
cmp cl,'*'
|
|
jne nocomp
|
|
cmp byte ptr [si+4],'/'
|
|
jne nocomp
|
|
mov al,ch
|
|
mov cl,ah
|
|
xor ah,ah
|
|
xor ch,ch
|
|
rep stosb
|
|
add si,5
|
|
sub dx,5
|
|
jnz decompression
|
|
jmp thenen
|
|
nocomp:
|
|
mov es:[di],al
|
|
inc si
|
|
inc di
|
|
dec dx
|
|
jnz decompression
|
|
thenen:
|
|
mov ax,dx
|
|
sub bp,di
|
|
neg bp
|
|
pop di si dx cx
|
|
ret
|
|
|
|
logo db 'cos.rip',0
|
|
end start
|