home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / sampler0 / animate.asm < prev    next >
Assembly Source File  |  1989-04-27  |  8KB  |  286 lines

  1. SLOWDOWN            equ       0h
  2. RED       equ       05h
  3. GREEN     equ       02h
  4. BLUE      equ       04h
  5. WHITE     equ       08h
  6. VGA_SEGMENT         equ       0a000h
  7. SC_INDEX            equ       3c4h
  8. MAP_MASK            equ       2
  9. SCREEN_WIDTH        equ       80
  10. SCREEN_HEIGHT       equ       350       ;???????????
  11. WORD_OUTS_OK        equ       1
  12. stack     segment   para stack 'STACK'
  13.              db        512 dup (?)
  14. stack     ends
  15. ObjectStructure     struc
  16. Delay               dw        ?
  17. BaseDelay           dw        ?
  18. Image               dw        ?
  19. XCoord              dw        ?
  20. XInc                dw        ?
  21. XLeftLimit          dw        ?
  22. XRightLimit         dw        ?
  23. YCoord              dw        ?
  24. YInc                dw        ?
  25. YTopLimit           dw        ?
  26. YBottomLimit        dw        ?
  27. PlaneSelect         db        ?
  28.                     db        ?
  29. ObjectStructure     ends
  30. Data    segment word 'DATA'
  31. Colors  db        000h
  32.     db        03ch
  33.     db        03ah
  34.     db        03ch
  35.     db        039h
  36.     db        03ch
  37.     db        03ah
  38.     db        03ch
  39.     db        03fh
  40.     db        03ch
  41.     db        03ah
  42.     db        03ch
  43.     db        039h
  44.     db        03ch
  45.     db        03ah
  46.     db        03ch
  47.     db        000h
  48. Square  label     byte
  49.     dw        48,6
  50.     rept      8
  51.     db        0,0,0,0,0,0
  52.     endm
  53.     .radix    2
  54.     db        0,11111111,11111111,11111111,11111111,0
  55.     db        0,11111111,11111111,11111111,11111111,0
  56.     db        0,11111111,11111111,11111111,11111111,0
  57.     db        0,11111111,11111111,11111111,11111111,0
  58.     db        0,11111111,11111111,11111111,11111111,0
  59.     db        0,11111111,11111111,11111111,11111111,0
  60.     db        0,11111111,11111111,11111111,11111111,0
  61.     db        0,11111111,11111111,11111111,11111111,0
  62.     db        0,11111111,00000000,00000000,11111111,0
  63.     db        0,11111111,00000000,00000000,11111111,0
  64.     db        0,11111111,00000000,00000000,11111111,0
  65.     db        0,11111111,00000000,00000000,11111111,0
  66.     db        0,11111111,00000000,00000000,11111111,0
  67.     db        0,11111111,00000000,00000000,11111111,0
  68.     db        0,11111111,00000000,00000000,11111111,0
  69.     db        0,11111111,00000000,00000000,11111111,0
  70.     db        0,11111111,00000000,00000000,11111111,0
  71.     db        0,11111111,00000000,00000000,11111111,0
  72.     db        0,11111111,00000000,00000000,11111111,0
  73.     db        0,11111111,00000000,00000000,11111111,0
  74.     db        0,11111111,00000000,00000000,11111111,0
  75.     db        0,11111111,00000000,00000000,11111111,0
  76.     db        0,11111111,00000000,00000000,11111111,0
  77.     db        0,11111111,00000000,00000000,11111111,0
  78.     db        0,11111111,11111111,11111111,11111111,0
  79.     db        0,11111111,11111111,11111111,11111111,0
  80.     db        0,11111111,11111111,11111111,11111111,0
  81.     db        0,11111111,11111111,11111111,11111111,0
  82.     db        0,11111111,11111111,11111111,11111111,0
  83.     db        0,11111111,11111111,11111111,11111111,0
  84.     db        0,11111111,11111111,11111111,11111111,0
  85.     db        0,11111111,11111111,11111111,11111111,0
  86.     .radix    10
  87.     rept        8
  88.     db        0,0,0,0,0,0
  89.     endm
  90. Diamond    label    byte
  91.     dw    48,6
  92.     rept    8
  93.     db    0,0,0,0,0,0
  94.     endm
  95.     .radix    2
  96.     db        0,00000000,00000001,10000000,00000000,0
  97.     db        0,00000000,00000011,11000000,00000000,0
  98.     db        0,00000000,00000111,11100000,00000000,0
  99.     db        0,00000000,00001111,11110000,00000000,0
  100.     db        0,00000000,00011111,11111000,00000000,0
  101.     db        0,00000000,00111110,01111100,00000000,0
  102.     db        0,00000000,01111100,00111110,00000000,0
  103.     db        0,00000000,11111000,00011111,00000000,0
  104.     db        0,00000001,11110000,00001111,10000000,0
  105.     db        0,00000011,11100000,00000111,11000000,0
  106.     db        0,00000111,11000000,00000011,11100000,0
  107.     db        0,00001111,10000001,10000001,11110000,0
  108.     db        0,00011111,00000011,11000000,11111000,0
  109.     db        0,00111110,00000111,11100000,01111100,0
  110.     db        0,01111100,00001111,11110000,00111110,0
  111.     db        0,11111000,00011111,11111000,00011111,0
  112.     db        0,11111000,00011111,11111000,00011111,0
  113.     db        0,01111100,00001111,11110000,00111110,0
  114.     db        0,00111110,00000111,11100000,01111100,0
  115.     db        0,00011111,00000011,11000000,11111000,0
  116.     db        0,00001111,10000001,10000001,11110000,0
  117.     db        0,00000111,11000000,00000011,11100000,0
  118.     db        0,00000011,11100000,00000111,11000000,0
  119.     db        0,00000001,11110000,00001111,10000000,0
  120.     db        0,00000000,11111000,00011111,00000000,0
  121.     db        0,00000000,01111100,00111110,00000000,0
  122.     db        0,00000000,00111110,01111100,00000000,0
  123.     db        0,00000000,00011111,11111000,00000000,0
  124.     db        0,00000000,00001111,11110000,00000000,0
  125.     db        0,00000000,00000111,11100000,00000000,0
  126.     db        0,00000000,00000011,11000000,00000000,0
  127.     db        0,00000000,00000001,10000000,00000000,0
  128.     .radix    10
  129.     rept    8
  130.     db    0,0,0,0,0,0
  131.     endm
  132.     even
  133. ObjectList    label    ObjectStructure
  134.  ObjectStructure <1,21,Diamond,88,8,80,512,016,0,0,350,RED>
  135.  ObjectStructure <1,15,Square ,296,8,112,480,144,0,0,350,RED>
  136.  ObjectStructure <1,23,Diamond,88,8,80,512,256,0,0,350,RED>
  137.  ObjectStructure <1,13,Square ,120,0,0,640,144,4,0,280,BLUE>
  138.  ObjectStructure <1,11,Diamond,208,0,0,512,144,4,0,280,BLUE>
  139.  ObjectStructure <1,08,Square ,296,0,0,512,144,4,0,288,BLUE>
  140.  ObjectStructure <1,09,Diamond,384,0,0,512,144,4,0,288,BLUE>
  141.  ObjectStructure <1,14,Square ,472,0,0,512,144,4,0,280,BLUE>
  142.  ObjectStructure <1,08,Diamond,200,8,0,576,048,6,0,280,GREEN>
  143.  ObjectStructure <1,08,Square ,248,8,0,576,096,6,0,280,GREEN>
  144.  ObjectStructure <1,08,Diamond,296,8,0,576,144,6,0,280,GREEN>
  145.  ObjectStructure <1,08,Square ,344,8,0,576,192,6,0,280,GREEN>
  146.  ObjectStructure <1,08,Diamond,392,8,0,576,240,6,0,280,GREEN>
  147. ObjectListEnd    label    ObjectStructure
  148. Data    ends
  149. OUT_WORD    macro
  150. if WORD_OUTS_OK
  151.     out    dx,ax
  152. else
  153.     out    dx,al
  154.     inc    dx
  155.     xchg    ah,al
  156.     out    dx,al
  157.     dec    dx
  158.     xchg    ah,al
  159. endif
  160.     endm
  161. CONSTANT_TO_INDEXED_REGISTER    macro ADDRESS,    INDEX,    VALUE
  162.     mov    dx,ADDRESS
  163.     mov    ax,(VALUE shl 8) + INDEX
  164.     OUT_WORD
  165.     endm
  166. Code    segment
  167.     assume    cs:Code, ds:Data
  168. Start    proc    near
  169.     cld
  170.     mov     ax,Data
  171.     mov    ds,ax
  172.     mov    ax,0010h
  173.     int    10h
  174.     mov    ax,(10h shl 8) + 2
  175.     push    ds
  176.     pop    es
  177.     mov    dx,offset Colors
  178.     int    10h
  179.     CONSTANT_TO_INDEXED_REGISTER SC_INDEX, MAP_MASK, 08H
  180.     mov    ax,VGA_SEGMENT
  181.     mov     es,ax
  182.     sub    di,di
  183.     mov    bp,SCREEN_HEIGHT/16
  184. BackdropBlockLoop:
  185.  ;   call    DrawGridCross
  186.  ;   call    DrawGridVert
  187.     dec    bp
  188.     jnz    BackdropBlockLoop
  189.  ;   call    DrawGridCross
  190. AnimationLoop:
  191.     mov bx,offset ObjectList
  192. ObjectLoop:
  193.     dec    [bx+Delay]
  194.     jnz    DoNextObject
  195.     mov    ax,[bx+BaseDelay]
  196.     mov    [bx+Delay],ax
  197.     mov    dx,SC_INDEX
  198.     mov    ah,[bx+PlaneSelect]
  199.     mov    al,MAP_MASK
  200.     OUT_WORD
  201.     mov    cx,[bx+XCoord]
  202.     cmp    cx,[bx+XLeftLimit]
  203.     ja    CheckXRightLimit
  204.     neg    [bx+XInc]
  205. CheckXRightLimit:
  206.     cmp    cx,[bx+XRightLimit]
  207.     jb    SetNewX
  208.     neg    [bx+XInc]
  209. SetNewX:
  210.     add    cx,[bx+XInc]
  211.     mov    [bx+XCoord],cx
  212.     mov    dx,[bx+YCoord]
  213.     cmp    dx,[bx+YTopLimit]
  214.     ja    CheckYBottomLimit
  215.     neg    [bx+YInc]
  216. CheckYBottomLimit:
  217.     cmp    dx,[bx+YBottomLimit]
  218.     jb    SetNewY
  219.     neg    [bx+YInc]
  220. SetNewY:
  221.     add    dx,[bx+YInc]
  222.     mov    [bx+YCoord],dx
  223.     mov    si,[bx+Image]
  224.     call    DrawObject
  225. DoNextObject:
  226.     add    bx,size ObjectStructure
  227.     cmp    bx,offset ObjectListEnd
  228.     jb    ObjectLoop
  229. if SLOWDOWN
  230.     mov    cx,SLOWDOWN
  231. DelayLoop:
  232.     loop    DelayLoop
  233. endif
  234. CheckKey:
  235.     mov    ah,1
  236.     int    16h
  237.     jz    AnimationLoop
  238.     sub    ah,ah
  239.     int    16h
  240.     mov    ax,0003h
  241.     int    10h
  242.     mov    ah,4ch
  243.     int    21h
  244. Start    endp
  245. DrawGridCross    proc    near
  246.     mov    ax,0ffffh
  247.     mov    cx,SCREEN_WIDTH/2-1
  248.     rep    stosw
  249.     mov    ax,0080h
  250.     stosw
  251.     ret
  252. DrawGridCross    endp
  253. DrawGridVert    proc    near
  254.     mov    ax,0080h
  255.     mov    dx,15
  256. BackdropRowLoop:
  257.     mov    cx,SCREEN_WIDTH/2
  258.     rep    stosw
  259.     dec    dx
  260.     jnz    BackdropRowLoop
  261.     ret
  262. DrawGridVert    endp
  263. DrawObject    proc    near
  264.     mov    ax,SCREEN_WIDTH
  265.     mul    dx
  266.     shr    cx,1
  267.     shr    cx,1
  268.     shr    cx,1
  269.     add    ax,cx
  270.     mov    di,ax
  271.     lodsw
  272.     mov    dx,ax
  273.     lodsw
  274.     mov    bp,SCREEN_WIDTH
  275.     sub    bp,ax
  276. DrawLoop:
  277.     mov    cx,ax
  278.     rep    movsb
  279.     add    di,bp
  280.     dec    dx
  281.     jnz    DrawLoop
  282.     ret
  283. DrawObject    endp
  284. Code    ends
  285.     end    Start
  286.