home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / grafik / tp6vga / showdp.asm < prev    next >
Encoding:
Assembly Source File  |  1994-01-01  |  6.3 KB  |  487 lines

  1. .model    small
  2. datarea1    segment
  3.  
  4. palette        db 800    dup (0)
  5. palette2    db 800    dup (0)
  6. picture        db 61440 dup(0)
  7. note1        db 0ah,0dh,'SHOWDP version 2.01',0ah,0dh,'Written by Paytin Whitaker.',0ah,0dh,0ah,'Shows a DannyPaint picture.',0ah,0dh,' Usage:',0dh,0ah,'  SHOWDP filename [/h][/f]',0ah,0dh
  8.         db '   /f Fades picture in and out.',0ah,0dh,24h
  9. note2        db 'File not Found: $'
  10. note3        db 'Unknown option',0ah,0dh,24h
  11. filename    db 64 dup(0),24h
  12. mode        db ?
  13. dl2        db 63
  14. fading        db 0
  15. mode2        db 13h
  16. savin        dw 320
  17. dap        dw 150
  18. dap2        dw 100
  19.  
  20. datarea1    ends
  21.  
  22.     open_file    equ 3dh
  23.     read_file    equ 3fh
  24.     close_file    equ 3eh
  25.     create_file    equ 3ch
  26.     write_file    equ 40h
  27. .code
  28.     org    100h
  29. start:    jumps
  30.     assume    ds:datarea1
  31.     mov    ax,datarea1
  32.     mov    ds,ax
  33. main    proc
  34.  
  35. ;get da parameters...............
  36.     mov    ah,0fh
  37.     int    10h
  38.     mov    ah,0
  39.     mov    mode,al
  40.  
  41.     mov    ah,62h
  42.     int    21h
  43.     lea    di,filename
  44.     mov    ds,bx
  45.     mov    si,offset 80h
  46.     mov    al,[si]
  47.     cmp    al,0
  48.     je    notenough1a
  49.     mov    ch,0
  50.     mov    cl,al
  51.     mov    bp,0
  52.  
  53. wat2:    inc    si
  54.     mov    bl,[si]
  55.     cmp    bp,1
  56.     je    wat3
  57.     cmp    bl,20h
  58.     je    wat0
  59.     cmp    bl,0
  60.     je    wat0
  61.     mov    bp,1
  62.  
  63. wat3:    cmp    bl,'/'
  64.     jne    notsl
  65.  
  66. compare:inc    si
  67.     dec    cx
  68.     jz    loadit
  69.     mov    bl,[si]
  70.     cmp    bl,'h'
  71.     je    notsmh
  72.     cmp    bl,'H'
  73.     jne    notcaph
  74. notsmh:    push    ds
  75.     mov    ax,datarea1
  76.     mov    ds,ax
  77.     mov    mode2,5ch;***************************;
  78.     mov    fading,0
  79.     pop    ds
  80.     jmp    compare
  81. notcaph:cmp    bl,'f'
  82.     je    notsmf
  83.     cmp    bl,'F'
  84.     jne    compare
  85. notsmf:    push    ds
  86.     mov    ax,datarea1
  87.     mov    ds,ax
  88.     mov    fading,1
  89.     pop    ds
  90.     jmp    compare
  91.     
  92. u2nknown:jmp    unknown2
  93. notsl:    push    ds
  94.     mov    ax,datarea1
  95.     mov    ds,ax
  96.     mov    [di],bl
  97.     inc    di
  98.     pop    ds
  99.  
  100.     loop    wat2
  101.     mov    ax,datarea1
  102.     mov    ds,ax
  103.     mov    bl,0
  104.     mov    [di],bl
  105.     jmp    loadit    
  106. notenough1a:jmp    notenough1
  107. wat0:    loop    wat2
  108.     jmp    notenough
  109.  
  110. ;load da file....................
  111.  
  112. loadit:    mov    ax,datarea1
  113.     mov    ds,ax
  114.  
  115.     lea    di,filename
  116. deeeee:    mov    al,[di]
  117.     cmp    al,'.'
  118.     je    seee
  119.     cmp    al,0
  120.     je    seeee
  121.     inc    di
  122.     jmp    deeeee
  123. notenough1:jmp    notenough
  124. seeee:    mov    al,'.'
  125.     mov    [di],al
  126.     inc    di
  127.     mov    al,'d'
  128.     mov    [di],al
  129.     inc    di
  130.     mov    al,'n'
  131.     mov    [di],al
  132.     mov    al,'y'
  133.     inc    di
  134.     mov    [di],al
  135.     mov    al,0
  136.     inc    di
  137.     mov    [di],al
  138.  
  139. seee:    lea    dx,filename
  140.     mov    ah,open_file
  141.     mov    al,0
  142.     int    21h
  143.     jc    notenough2
  144.     mov    bx,ax
  145.  
  146.     cmp    fading,1
  147.     jne    nobfadin
  148.  
  149.     push    ax bx cx dx di si bp
  150. ;read    palette
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157. qbno_retrace:mov dx,3dah
  158.     in    al,dx
  159.     test    al,1000b
  160.     jnz    qbno_retrace
  161.  
  162. qbn_retrace:in    al,dx
  163.     test    al,1000b
  164.     jz    qbn_retrace
  165.  
  166. ;now to set the palette
  167.     lea    di,palette
  168.  
  169.     mov    dx,3c7h
  170.     mov    al,0
  171.     out    dx,al
  172.  
  173.     mov    cx,768
  174.     mov    dx,3c9h
  175. qbmo_set:in    al,dx
  176.     mov    [di],al
  177.     inc    di
  178.     loop    qbmo_set
  179.  
  180.  
  181.  
  182.  
  183. bxfade1:
  184.     cli
  185. ;wait for vertical retrace
  186.  
  187. bno_retrace:mov    dx,3dah;3bah
  188.     in    al,dx
  189.     test    al,1000b
  190.     jnz    bno_retrace
  191.  
  192. bn_retrace:in    al,dx
  193.     test    al,1000b
  194.     jz    bn_retrace
  195.  
  196. ;now to set the palette
  197.     lea    di,palette
  198.  
  199.     mov    dx,3c8h
  200.     mov    al,0
  201.     out    dx,al
  202.  
  203.     mov    cx,768
  204.     mov    dx,3c9h
  205. bmo_set:mov    al,[di]
  206.     out    dx,al
  207.     inc    di
  208.     loop    bmo_set
  209.  
  210.     sti
  211. ;alter palette buffer
  212.     mov    cx,768
  213.     mov    bp,0
  214.     lea    si,palette
  215. bxmoinc:mov    al,[si]
  216.     cmp    al,0
  217.     je    bxnoinc
  218.     dec    al
  219.     mov    [si],al
  220.     mov    bp,1
  221. bxnoinc:inc    si
  222.     loop    bxmoinc
  223.     cmp    bp,0
  224.     jne    bxfade1
  225.  
  226.     pop    bp si di dx cx bx ax
  227. nobfadin:
  228.     xor    ah,ah
  229.     mov    al,mode2
  230.     int    10h
  231.  
  232.     mov    ah,read_file
  233.     mov    cx,61440
  234.     lea    dx,picture
  235.     int    21h
  236.     mov    ah,read_file
  237.     mov    cx,768
  238.     lea    dx,palette
  239.     int    21h
  240.     mov    ah,close_file
  241.     int    21h
  242.     call    getit
  243.  
  244.     mov    al,mode
  245.     mov    ah,0
  246.     int    10h
  247.     jmp    okk
  248. notenough:mov    ax,datarea1
  249.     mov    ds,ax
  250.     mov    ah,9
  251.     lea    dx,note1
  252.     int    21h
  253.     jmp    okk
  254. notenough2:mov    ax,datarea1
  255.     mov    ds,ax
  256.     mov    ah,9
  257.     lea    dx,note2
  258.     int    21h
  259.     lea    dx,filename
  260.     int    21h
  261.     jmp    okk
  262. unknown2:mov    ax,datarea1
  263.     mov    ds,ax
  264.     mov    ah,9
  265.     lea    dx,note3
  266.     int    21h
  267.     lea    dx,note1
  268.     int    21h
  269. okk:    mov    ah,4ch
  270.     mov    al,-1
  271.     int    21h
  272.  
  273. main    endp
  274.  
  275. getit    proc
  276.     push    ax bx cx dx di si
  277.     mov     ax,1012h    ;set block of palette registers
  278.     mov     bx,0        ;start at register 0
  279.     mov     cx,256        ;set 256 registers
  280.     mov     dx,seg palette2    ;use ES:DX to define buffer for colors
  281.     mov     es,dx
  282.     mov     dx,offset palette2
  283.     int     10h
  284.     cmp    mode2,13h
  285.     je    norml
  286.     
  287.     lea    di,picture
  288.     mov    bx,0
  289.     mov    cx,dap
  290.     mov    dx,dap2
  291.     mov    si,61440
  292. aget1:    mov    al,[di]
  293.     mov    ah,0ch
  294.     int    10h
  295.     inc    di
  296.     dec    savin
  297.     jnz    agett
  298.     inc    dx
  299.     mov    savin,320
  300.     mov    cx,dap
  301.     jmp    awatf
  302. agett:    inc    cx
  303. awatf:    dec    si
  304.     jnz    aget1
  305.  
  306.     jmp    xf
  307.  
  308. norml:    mov     ax,0a000h    ;mov ES back to video buffer
  309.     mov     es,ax
  310.     lea    di,picture
  311.     mov    bx,0
  312.     mov    cx,61440
  313. get1:    mov    al,[di]
  314.     mov    es:[bx],al
  315.     inc    di
  316.     inc    bx
  317.     loop    get1
  318. xf:    cmp    fading,1
  319.     jne    wara
  320.  
  321. fade1:
  322.  
  323. wara3:    cli
  324.     lea    di,palette2
  325.  
  326. ;wait for vertical retrace
  327.  
  328. cno_retrace:mov    dx,3dah;3bah
  329.     in    al,dx
  330.     test    al,1000b
  331.     jnz    cno_retrace
  332.  
  333. cn_retrace:in    al,dx
  334.     test    al,1000b
  335.     jz    cn_retrace
  336.  
  337. ;now to set the palette
  338.  
  339.     mov    dx,3c8h
  340.     mov    al,0
  341.     out    dx,al
  342.  
  343.     mov    cx,768
  344.     mov    dx,3c9h
  345. cmo_set:;nop
  346.     ;nop
  347.  
  348.     mov    al,[di]
  349.     out    dx,al
  350.     inc    di
  351.     loop    cmo_set
  352.     sti
  353.  
  354.  
  355.     dec    dl2
  356.  
  357.     mov    cx,768
  358.     xor    bp,bp
  359.     lea    di,palette
  360.     lea    si,palette2
  361. moinc:    mov    al,[si]
  362.     mov    ah,[di]
  363.     cmp    al,ah
  364.     jge    noinc
  365.     sub    ah,al
  366.     cmp    ah,dl2
  367.     jl    noinc
  368.     inc    al
  369.     mov    [si],al
  370.     mov    bp,1
  371. noinc:    dec    dl
  372.     inc    si
  373.     inc    di
  374.     loop    moinc
  375.     cmp    bp,0
  376.     jne    fade1
  377.     jmp    wara2
  378.  
  379.  
  380. wara:
  381.     lea    di,palette
  382.     cli
  383. ;wait for vertical retrace
  384.  
  385. xno_retrace:mov    dx,3dah;3bah
  386.     in    al,dx
  387.     test    al,1000b
  388.     jnz    xno_retrace
  389.  
  390. xn_retrace:in    al,dx
  391.     test    al,1000b
  392.     jz    xn_retrace
  393. ;it is now in vertical retrace, test for read mode
  394.  
  395.     lea    di,palette
  396.  
  397. ;now to set the palette
  398.  
  399.     mov    dx,3c8h
  400.     mov    al,0
  401.     out    dx,al
  402.  
  403.     mov    cx,768
  404.     mov    dx,3c9h
  405. xmo_set:;nop
  406.     ;nop
  407.     mov    al,[di]
  408.     out    dx,al
  409.     inc    di
  410.     loop    xmo_set
  411.  
  412.  
  413.     sti
  414.  
  415.  
  416.  
  417.  
  418.  
  419. wara2:    mov    ah,0
  420.     int    16h
  421.     cmp    ah,1
  422.     je    okk
  423.     cmp    fading,1
  424.     je    xfade1
  425.     pop    si di dx cx bx ax
  426.     ret
  427.  
  428. xfade1:    
  429. ;--------------------;
  430. ;fade the palette out;
  431. ;--------------------;
  432.  
  433.     lea    di,palette2
  434.  
  435.  
  436.     cli
  437.  
  438.  
  439. ;wait for vertical retrace
  440.  
  441. no_retrace:mov    dx,3dah;3bah
  442.     in    al,dx
  443.     test    al,1000b
  444.     jnz    no_retrace
  445.  
  446. n_retrace:in    al,dx
  447.     test    al,1000b
  448.     jz    n_retrace
  449. ;now to set the palette
  450.  
  451.     mov    dx,3c8h
  452.     mov    al,0
  453.     out    dx,al
  454.  
  455.     mov    cx,768
  456.     mov    dx,3c9h
  457. mo_set:    mov    al,[di]
  458.     out    dx,al
  459.     inc    di
  460.     loop    mo_set
  461.  
  462.  
  463.     sti
  464.  
  465.  
  466.  
  467.  
  468. ;alter palette buffer
  469.     mov    cx,768
  470.     mov    bp,0
  471.     lea    si,palette2
  472. xmoinc:    mov    al,[si]
  473.     cmp    al,0
  474.     je    xnoinc
  475.     dec    al
  476.     mov    [si],al
  477.     mov    bp,1
  478. xnoinc:    inc    si
  479.     loop    xmoinc
  480.     cmp    bp,0
  481.     jne    xfade1
  482.     pop    si di dx cx bx ax
  483.  
  484.     ret
  485. getit    endp
  486.  
  487. end    start