home *** CD-ROM | disk | FTP | other *** search
/ Assembly 1994 - The 3rd Phase / ASMROM94.mdf / fc / utils / stmik / misc.asm < prev    next >
Assembly Source File  |  1991-07-03  |  3KB  |  240 lines

  1. ; miscellaneous routines
  2.  
  3. seed1    dw    1234
  4. seed2    dw    5678
  5. seed3    dw    1234h
  6. seed4    dw    5678h
  7.  
  8. rand    PROC    NEAR
  9.     push    bx
  10.     push    cx
  11.     push    dx
  12.     mov    ax,ds:seed1
  13.     mov    bx,ds:seed2
  14.     mov    cx,ds:seed3
  15.     mov    dx,ds:seed4
  16.     add    ax,bx
  17.     rol    ax,cl
  18.     xor    ax,dx
  19.     xchg    cl,ch
  20.     add    bx,cx
  21.     add    dx,bx
  22.     add    cx,ax
  23.     ror    bx,1
  24.     sbb    ax,dx
  25.     mov    ds:seed4,dx
  26.     mov    ds:seed3,dx
  27.     mov    ds:seed2,dx
  28.     mov    ds:seed1,ax
  29.     pop    dx
  30.     pop    cx
  31.     pop    bx
  32.     ret
  33. rand    ENDP
  34.  
  35. waitborder PROC NEAR
  36.     push    ax
  37.     push    dx
  38.     mov    dx,3dah
  39. wbr1:    in    al,dx
  40.     test    al,8
  41.     jnz    wbr1
  42. wbr2:    in    al,dx
  43.     test    al,8
  44.     jz    wbr2
  45.     pop    dx
  46.     pop    ax
  47.     ret
  48. waitborder ENDP
  49.  
  50. tmppal    db    768 dup(0)
  51.  
  52. fadeoffpalette PROC NEAR
  53.     mov    bh,2
  54.     mov    ah,0
  55.     jmp    fadepalette
  56. fadeoffpalette ENDP
  57.  
  58. fadeonpalette PROC NEAR
  59.     mov    bh,-2
  60.     mov    ah,64
  61. fadepalette:
  62.     mov    dx,cs
  63.     mov    ds,dx
  64.     mov    es,dx
  65.  
  66.     mov    cx,32
  67. fonp2:    push    ax
  68.     push    cx
  69.     push    si
  70.     mov    di,OFFSET tmppal
  71.     mov    cx,768
  72. fonp1:    lodsb
  73.     sub    al,ah
  74.     jnc    fonp3
  75.     xor    al,al
  76. fonp3:    stosb
  77.     loop    fonp1
  78.     mov    si,OFFSET tmppal
  79.     mov    cx,768/6/2
  80.     sti
  81.     call    waitborder
  82.     cli
  83.     mov    dx,3c8h
  84.     xor    al,al
  85.     out    dx,al
  86.     inc    dx
  87.     cli
  88. fonp4:    lodsb
  89.     out    dx,al
  90.     lodsb
  91.     out    dx,al
  92.     lodsb
  93.     out    dx,al
  94.     lodsb
  95.     out    dx,al
  96.     lodsb
  97.     out    dx,al
  98.     lodsb
  99.     out    dx,al
  100.     loop    fonp4
  101.     sti
  102.     mov    cx,768/6/2
  103.     call    waitborder
  104.     cli
  105. fonp5:    lodsb
  106.     out    dx,al
  107.     lodsb
  108.     out    dx,al
  109.     lodsb
  110.     out    dx,al
  111.     lodsb
  112.     out    dx,al
  113.     lodsb
  114.     out    dx,al
  115.     lodsb
  116.     out    dx,al
  117.     loop    fonp5
  118.     sti
  119.     pop    si
  120.     pop    cx
  121.     pop    ax
  122.     add    ah,bh
  123.     loop    fonp2
  124.     ret
  125. fadeonpalette ENDP
  126.  
  127. sine    MACRO ;ax=sin(ax)*32768
  128.     push    bx
  129.     and    ax,255
  130.     shl    ax,1
  131.     mov    bx,ax
  132.     mov    ax,cs:sintable[bx]
  133.     pop    bx
  134.     ENDM
  135.  
  136. cosine    MACRO ;ax=cos(ax)*32768
  137.     push    bx
  138.     add    ax,64
  139.     and    ax,255
  140.     shl    ax,1
  141.     mov    bx,ax
  142.     mov    ax,cs:sintable[bx]
  143.     pop    bx
  144.     ENDM
  145.  
  146. getrasterline PROC NEAR
  147.     ;AX=scan line the VGA is in (requires ints set)
  148.     cli
  149.     xor    al,al
  150.     out    43h,al
  151.     in    al,40h
  152.     mov    dl,al
  153.     in    al,40h
  154.     mov    dh,al
  155.     shr    dx,1
  156.     mov    ax,cs:frametime
  157.     sub    ax,dx
  158.     mov    cx,400
  159.     mul    cx
  160.     mov    cx,cs:frametime
  161.     div    cx
  162.     sti
  163.     ret
  164. getrasterline ENDP
  165.  
  166. tmpseg    dw    0
  167. filerquit db    1
  168. loadfile    PROC    NEAR
  169.         ;set: DX=offset to filename
  170.         ;set: AX=minimum paragraphs reserved
  171.         ;return: DX=segment of file
  172.         mov    bp,ax
  173.         mov    ax,cs
  174.         mov    ds,ax ;set ds=cs
  175.         mov    ah,3dh ;open file
  176.         mov    al,0 ;read only
  177.         int    21h
  178.         jc    ferror
  179.         mov    bx,ax ;store filehandle to bx
  180.         ;get length of file (seek to end)
  181.         mov    ah,42h
  182.         mov    al,2
  183.         mov    cx,0
  184.         mov    dx,0
  185.         int    21h
  186.         jc    ferror
  187.         ;get memory
  188.         push    bx
  189.         shr    dx,1
  190.         rcr    ax,1
  191.         shr    dx,1
  192.         rcr    ax,1
  193.         shr    dx,1
  194.         rcr    ax,1
  195.         shr    dx,1
  196.         rcr    ax,1
  197.         mov    bx,ax
  198.         inc    bx ;one extra, just in case :-)
  199.         cmp    bx,bp
  200.         ja    loff1
  201.         mov    bx,bp
  202. loff1:        mov    ah,48h
  203.         int    21h
  204.         jc    ferror
  205.         mov    cs:tmpseg,ax
  206.         pop    bx
  207.         ;Seek file back to the beginning
  208.         mov    ah,42h
  209.         mov    al,0
  210.         mov    cx,0
  211.         mov    dx,0
  212.         int    21h
  213.         jc    ferror
  214.         ;read file
  215.         mov    ds,cs:tmpseg
  216. faga:        mov    ah,3fh
  217.         mov    cx,32768
  218.         mov    dx,0
  219.         int    21h
  220.         jc    ferror
  221.         mov    dx,ds
  222.         add    dx,800h
  223.         mov    ds,dx
  224.         cmp    ax,32768
  225.         je    faga
  226.         ;close file
  227.         mov    ah,3eh
  228.         int    21h
  229.         mov    dx,cs:tmpseg ;segment
  230.         xor    ax,ax
  231.         ret
  232. ferror2:    mov    ax,1
  233.         ret
  234. ferror:        cmp    cs:filerquit,0
  235.         je    ferror2
  236.         mov    ax,4c01h
  237.         int    21h
  238. loadfile    ENDP
  239.  
  240.