home *** CD-ROM | disk | FTP | other *** search
- ; miscellaneous routines
-
- seed1 dw 1234
- seed2 dw 5678
- seed3 dw 1234h
- seed4 dw 5678h
-
- rand PROC NEAR
- push bx
- push cx
- push dx
- mov ax,ds:seed1
- mov bx,ds:seed2
- mov cx,ds:seed3
- mov dx,ds:seed4
- add ax,bx
- rol ax,cl
- xor ax,dx
- xchg cl,ch
- add bx,cx
- add dx,bx
- add cx,ax
- ror bx,1
- sbb ax,dx
- mov ds:seed4,dx
- mov ds:seed3,dx
- mov ds:seed2,dx
- mov ds:seed1,ax
- pop dx
- pop cx
- pop bx
- ret
- rand ENDP
-
- waitborder PROC NEAR
- push ax
- push dx
- mov dx,3dah
- wbr1: in al,dx
- test al,8
- jnz wbr1
- wbr2: in al,dx
- test al,8
- jz wbr2
- pop dx
- pop ax
- ret
- waitborder ENDP
-
- tmppal db 768 dup(0)
-
- fadeoffpalette PROC NEAR
- mov bh,2
- mov ah,0
- jmp fadepalette
- fadeoffpalette ENDP
-
- fadeonpalette PROC NEAR
- mov bh,-2
- mov ah,64
- fadepalette:
- mov dx,cs
- mov ds,dx
- mov es,dx
-
- mov cx,32
- fonp2: push ax
- push cx
- push si
- mov di,OFFSET tmppal
- mov cx,768
- fonp1: lodsb
- sub al,ah
- jnc fonp3
- xor al,al
- fonp3: stosb
- loop fonp1
- mov si,OFFSET tmppal
- mov cx,768/6/2
- sti
- call waitborder
- cli
- mov dx,3c8h
- xor al,al
- out dx,al
- inc dx
- cli
- fonp4: lodsb
- out dx,al
- lodsb
- out dx,al
- lodsb
- out dx,al
- lodsb
- out dx,al
- lodsb
- out dx,al
- lodsb
- out dx,al
- loop fonp4
- sti
- mov cx,768/6/2
- call waitborder
- cli
- fonp5: lodsb
- out dx,al
- lodsb
- out dx,al
- lodsb
- out dx,al
- lodsb
- out dx,al
- lodsb
- out dx,al
- lodsb
- out dx,al
- loop fonp5
- sti
- pop si
- pop cx
- pop ax
- add ah,bh
- loop fonp2
- ret
- fadeonpalette ENDP
-
- sine MACRO ;ax=sin(ax)*32768
- push bx
- and ax,255
- shl ax,1
- mov bx,ax
- mov ax,cs:sintable[bx]
- pop bx
- ENDM
-
- cosine MACRO ;ax=cos(ax)*32768
- push bx
- add ax,64
- and ax,255
- shl ax,1
- mov bx,ax
- mov ax,cs:sintable[bx]
- pop bx
- ENDM
-
- getrasterline PROC NEAR
- ;AX=scan line the VGA is in (requires ints set)
- cli
- xor al,al
- out 43h,al
- in al,40h
- mov dl,al
- in al,40h
- mov dh,al
- shr dx,1
- mov ax,cs:frametime
- sub ax,dx
- mov cx,400
- mul cx
- mov cx,cs:frametime
- div cx
- sti
- ret
- getrasterline ENDP
-
- tmpseg dw 0
- filerquit db 1
- loadfile PROC NEAR
- ;set: DX=offset to filename
- ;set: AX=minimum paragraphs reserved
- ;return: DX=segment of file
- mov bp,ax
- mov ax,cs
- mov ds,ax ;set ds=cs
- mov ah,3dh ;open file
- mov al,0 ;read only
- int 21h
- jc ferror
- mov bx,ax ;store filehandle to bx
- ;get length of file (seek to end)
- mov ah,42h
- mov al,2
- mov cx,0
- mov dx,0
- int 21h
- jc ferror
- ;get memory
- push bx
- shr dx,1
- rcr ax,1
- shr dx,1
- rcr ax,1
- shr dx,1
- rcr ax,1
- shr dx,1
- rcr ax,1
- mov bx,ax
- inc bx ;one extra, just in case :-)
- cmp bx,bp
- ja loff1
- mov bx,bp
- loff1: mov ah,48h
- int 21h
- jc ferror
- mov cs:tmpseg,ax
- pop bx
- ;Seek file back to the beginning
- mov ah,42h
- mov al,0
- mov cx,0
- mov dx,0
- int 21h
- jc ferror
- ;read file
- mov ds,cs:tmpseg
- faga: mov ah,3fh
- mov cx,32768
- mov dx,0
- int 21h
- jc ferror
- mov dx,ds
- add dx,800h
- mov ds,dx
- cmp ax,32768
- je faga
- ;close file
- mov ah,3eh
- int 21h
- mov dx,cs:tmpseg ;segment
- xor ax,ax
- ret
- ferror2: mov ax,1
- ret
- ferror: cmp cs:filerquit,0
- je ferror2
- mov ax,4c01h
- int 21h
- loadfile ENDP
-
-