home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC Interdit
/
pc-interdit.iso
/
trainer
/
gif.asm
< prev
next >
Wrap
Assembly Source File
|
1994-10-31
|
6KB
|
379 lines
;
; Vision Factory
; Chargeur
;
; Basisversion
; (w) par Atan (Matthias Rasch)
; 13.11.93
;
; Charge image Gif 320*200 en Mode 13h
.286
clr=256
eof=257
w equ word ptr
b equ byte ptr
;codeg group code
code segment public
assume cs:code,ds:code
public loadgif
public setpal
public blackpal
public dealloc
extrn p13_2_modex:near
extrn picture:byte
GifRead proc pascal n:word
push ds
mov ax,cs
mov ds,ax
mov es,ax
lea di,puf
lea si,picture
add si,w picpos
mov cx,word ptr n
rep movsb
mov ax,n
add w picpos,ax
pop ds
ret
endp
GifSeekdelta proc pascal delta:dword
mov ax,04200h
mov bx,w handle
mov cx,word ptr delta + 2
mov dx,word ptr delta
int 21h
ret
Endp
ShiftPal proc pascal
push ds
mov ax,cs
mov es,ax
mov ds,ax
mov si,offset Puf
mov di,offset Palette
mov cx,768
@l1:
lodsb
shr al,2
stosb
loop @l1
pop ds
ret
Endp
FillPuf proc pascal
push 1
call gifread
mov al,b puf[0]
xor ah,ah
mov w restbyte,ax
push ax
call gifread
ret
Endp
GetPhysByte proc pascal
push bx
cmp w restbyte,0
ja @restda
pusha
push es
call fillpuf
pop es
popa
mov w pufind,0
@restda:
mov bx,w PufInd
mov al,b Puf[bx]
inc w pufind
pop bx
ret
Endp
GetLogByte proc pascal
push si
mov ax,w largeur
mov si,ax
mov dx,w restbits
mov cx,8
sub cx,dx
mov ax,w lByte
shr ax,cl
mov w akt_code,ax
sub si,dx
@nextbyte:
call getphysbyte
xor ah,ah
mov w lByte,ax
dec w restbyte
mov bx,1
mov cx,si
shl bx,cl
dec bx
and ax,bx
mov cx,dx
shl ax,cl
add w akt_code,ax
sbb dx,w largeur
add dx,8
jns @Positif
add dx,8
@Positif:
sub si,8
jle @Fini
add dx,w largeur
sub dx,8
jmp @nextbyte
@Fini:
mov w restbits,dx
mov ax,w akt_code
pop si
ret
Endp
err_mem db 'Pas assez de mémoire$'
getvmem proc pascal
mov ax,cs
mov es,ax
mov bx,20000d
mov ah,4ah
int 21h
mov ah,48h
mov bx,2001d
int 21h
jae ok
mov ax,3
int 10h
mov ax,cs
mov ds,ax
mov ah,9
mov dx,offset err_mem
int 21h
mov ah,4ch
mov al,1
int 21h
ok:
mov word ptr vscreen+2,ax
ret
getvmem endp
dealloc proc pascal
mov ah,49h
les di,cs:dword ptr vscreen
int 21h
ret
dealloc endp
LoadGif proc pascal
push ds
mov ax,cs
mov ds,ax
; call GifOpen
; push 0
; push 13
; call gifseekdelta
push 768
call gifread
call shiftpal
push 1
call gifread
@extloop:
cmp w puf[0],21h
jne @noext
push 2
call gifread
mov al,b puf[1]
inc al
xor ah,ah
push ax
call gifread
jmp @extloop
@noext:
push 10
call gifread
test b puf[8],128
je @nolok
push 768
call gifread
call shiftpal
@nolok:
mov w lbyte,0
call getvmem
les di,dword ptr vscreen
mov w free,258
mov w largeur,9
mov w max,511
mov w stackp,0
mov w restbits,0
mov w restbyte,0
@mainloop:
call getlogByte
cmp ax,eof
jne @no_Annul
jmp @Annul
@no_Annul:
cmp ax,clr
jne @no_clear
jmp @clear
@no_clear:
mov w readbyt,ax
cmp ax,w free
jb @code_in_ab
mov ax,w old_code
mov w akt_code,ax
mov bx,w stackp
mov cx,w sonderfall
mov w abstack[bx],cx
inc w stackp
@code_in_ab:
cmp ax,clr
jb @Concret
@fillstack_loop:
mov bx,w akt_code
shl bx,1
push bx
mov ax,w ab_tail[bx]
mov bx,w stackp
shl bx,1
mov w abstack[bx],ax
inc w stackp
pop bx
mov ax,w ab_prfx[bx]
mov w akt_code,ax
cmp ax,clr
ja @fillstack_loop
@Concret:
mov bx,w stackp
shl bx,1
mov w abstack[bx],ax
mov w sonderfall,ax
inc w stackp
mov bx,w stackp
dec bx
shl bx,1
@readstack_loop:
mov ax,w abstack[bx]
stosb
cmp di,32003
jbe @noovl1
call p13_2_modex pascal,0,8001
les di,dword ptr vscreen
@noovl1:
dec bx
dec bx
jns @readstack_loop
mov w stackp,0
mov bx,w free
shl bx,1
mov ax,w old_code
mov w ab_prfx[bx],ax
mov ax,w akt_code
mov w ab_tail[bx],ax
mov ax,w readbyt
mov w old_code,ax
inc w free
mov ax,w free
cmp ax,w max
ja @no_mainloop
jmp @mainloop
@no_mainloop:
cmp b largeur,12
jb @no_mainloop2
jmp @mainloop
@no_mainloop2:
inc w largeur
mov cl,b largeur
mov ax,1
shl ax,cl
dec ax
mov w max,ax
jmp @mainloop
@clear:
mov w largeur,9
mov w max,511
mov w free,258
call getlogbyte
mov w sonderfall,ax
mov w old_code,ax
stosb
cmp di,32003
jbe @noovl2
call p13_2_modex pascal,0,8001
les di,dword ptr vscreen
@noovl2:
jmp @mainloop
@Annul:
call dealloc
; call gifclose;
pop ds
ret
Endp
SetPal proc pascal
push ds
push si
mov ax,cs
mov ds,ax
mov si,offset palette
mov cx,256*3
xor al,al
mov dx,03c8h
out dx,al
inc dx
@lp:
rep outsb
pop si
pop ds
ret
Endp
blackpal proc pascal
mov ax,cs
mov es,ax
lea di,palette
mov cx,256*3/2
mov ax,0
rep stosw
ret
Endp
handle: dw 0
Puf: db 768 dup (0)
PufInd: dw 0
abStack: db 1281 dup (0)
ab_prfx: dw 2049 dup (0)
ab_tail: dw 2049 dup (0)
Byt: db 0
free: dw 0
largeur: dw 0
max: dw 0
stackp: dw 0
restbits: dw 0
restbyte: dw 0
sonderfall: dw 0
akt_code: dw 0
old_code: dw 0
readbyt: dw 0
bits: dw 0
bits2get: dw 0
lbyte: dw 0
GifName: db 'Logo_st.gif',0
Palette: db 768 dup (0)
extrn vscreen:dword
picpos: dw 13
code ends
end