home *** CD-ROM | disk | FTP | other *** search
/ The Party 1994: Try This At Home / disk_image.bin / source / bars / bar3.asm < prev    next >
Assembly Source File  |  1993-04-10  |  14KB  |  335 lines

  1. ; Copper bars by Patch (hamell@rigel.cs.pdx.edu)
  2. ; Uses "color each line differently and cycle colors" method
  3. ; 4-9-93
  4. ; Call Dead Man's Hand at 503.288.9264 - USR 16.8k DS
  5. ; Programming source only
  6.  
  7. .model tiny
  8. .286
  9. JUMPS
  10.  
  11. .code
  12.         org     100h
  13.  
  14. start:          mov     ax,0013h
  15.                 int     10h
  16.  
  17.                 in      al,21h                          ; get IRQ mask
  18.                 mov     [irqsave],al                    ; save it
  19.                 mov     al,11111101b                    ; all but kbd off
  20.                 out     21h,al                          ; set new IRQ mask
  21.                 in      al,0a1h                         ; get NMI mask
  22.                 mov     [nmisave],al                    ; save it
  23.                 mov     al,11111111b                    ; ?
  24.                 out     0a1h,al                         ; set new NMI mask
  25.  
  26.                 mov     dx,03c8h
  27.                 xor     al,al
  28.                 out     dx,al
  29.                 inc     dx
  30.                 mov     cx,256
  31. spoo:           out     dx,al
  32.                 out     dx,al
  33.                 out     dx,al
  34.                 loop    spoo
  35.  
  36.                 mov     bx,200
  37.                 mov     ax,0101h
  38.                 push    0a000h
  39.                 pop     es
  40.                 xor     di,di
  41.                 cld
  42. spank:          mov     cx,160
  43.                 rep     stosw
  44.                 inc     al
  45.                 inc     ah
  46.                 dec     bx
  47.                 jnz     spank
  48.  
  49.                 push    ds
  50.                 pop     es
  51.                 cld
  52.                 mov     bx,offset barline
  53. startbar:       cli                                     ; don't poll keyboard
  54.                 mov     si,offset palette               ; set up pointer
  55.                 mov     bp,01h                          ; bar num = 1
  56. palsetup:
  57.                 push    bp
  58.                 mov     di,[bx]
  59.                 mov     al,sintable[di]                 ; top bar line
  60.  
  61.                 mov     di,offset barpal
  62.                 dec     al                              ; dec for 0th index element
  63.                 xor     ah,ah                           ; clear high byte
  64.                 mov     cx,ax
  65.                 shl     ax,1
  66.                 add     ax,cx
  67.                 add     di,ax                           ; set to proper spot in bar palette
  68.                 mov     bp,offset barpriority           ;
  69.                 add     bp,cx                           ; set to proper spot in priority check
  70.                 mov     cx,[barheight]
  71. checkline:
  72.                 cmp     byte ptr [bp],00h               ; is the line empty?
  73.                 jne     nodrawline                      ; if not, jump
  74.                 mov     byte ptr [bp],01h               ; it's full now
  75.                 movsw
  76.                 movsb
  77.                 jmp     nextpriority
  78.  
  79. nodrawline:     add     si,3                            ; increment palette pointer
  80.                 add     di,3                            ; increment bar palette
  81. nextpriority:   inc     bp                              ; next priority line
  82.                 loop    checkline
  83.  
  84. barspot:        add     word ptr [bx],03h               ; increment table index
  85.                 cmp     word ptr [bx],359               ; end of table?
  86.                 jle     nextbar
  87. resetbarspot:   mov     word ptr [bx],00h               ; reset table index
  88.  
  89. nextbar:        pop     bp
  90.                 inc     bx                              ; next bar line address
  91.                 inc     bx                              ; word size = + 2
  92.                 inc     bp                              ; increment bar counter
  93.  
  94.                 cmp     bp,[barcount]                   ; bar count at max?
  95.                 jle     palsetup                        ; if <= , go back
  96.  
  97.                 mov     si,offset barpal
  98.                 mov     cx,200
  99.  
  100.                 mov     dx,03dah                ; Input Status 1 reg
  101. VRetrace:       in      al,dx
  102.                 test    al,00001000b            ; test bit 3, vert retrace
  103.                 jnz     VRetrace                ; if active, go back
  104. VNoRetrace:     in      al,dx
  105.                 test    al,00001000b            ; test bit 3, vert retrace
  106.                 jz      VNoRetrace              ; if active, go back
  107.  
  108.                 mov     al,01h                          ; start at color 1
  109.                 mov     dx,03c8h
  110.                 out     dx,al
  111.                 inc     dx
  112. paldump:        outsb                                   ; dump it out
  113.                 outsb
  114.  
  115. ;                mov     dx,03dah
  116. ;puck1:          in      al,dx
  117. ;                test    al,00000001b
  118. ;                jz      puck1
  119.  
  120. ;                mov     dx,03c9h
  121.                 outsb
  122.  
  123. ;                mov     dx,03dah                ; set up Input Status 1 reg
  124. ;HRetrace:       in      al,dx
  125. ;                test    al,00000001b            ; test bit 1, horiz retrace
  126. ;                jnz     HRetrace                ; if not active, go back
  127.  
  128. ;                mov     dx,03c9h
  129.                 loop    paldump
  130.  
  131.                 mov     di,offset barpriority
  132.                 mov     cx,100                          ; 100 of them WORD sized
  133.                 xor     ax,ax                           ; AH = 0, AL = 0
  134.                 rep     stosw                           ; zero them all out
  135.  
  136.                 mov     di,offset barpal
  137.                 mov     cx,300
  138.                 xor     ax,ax
  139.                 rep     stosw
  140.  
  141.                 sub     bx,[barcount]                   ; reset bar line address
  142.                 sub     bx,[barcount]                   ; twice for word size
  143.                 sti
  144.                 mov     ah,01h
  145.                 int     16h
  146.                 jz      startbar
  147.  
  148. exit:           mov     al,[irqsave]                    ; get old IRQ mask
  149.                 out     021h,al                         ; restore IRQ mask
  150.                 mov     al,[nmisave]                    ; get old NMI mask
  151.                 out     0a1h,al                         ; restore NMI mask
  152.                 mov     ax,0003h
  153.                 int     10h
  154.                 mov     ax,4c00h
  155.                 int     21h
  156.  
  157. sintable        db      1,1,1,1,1,1,1,1,1,2,2,2
  158.                 db      3,3,3,4,4,5,5,6,6,7,7,8
  159.                 db      8,9,10,11,11,12,13,14,14,15,16,17
  160.                 db      18,19,20,21,22,23,24,25,26,27,29,30
  161.                 db      31,32,33,35,36,37,38,40,41,42,44,45
  162.                 db      46,48,49,51,52,54,55,57,58,60,61,63
  163.                 db      64,66,67,69,70,72,73,75,77,78,80,81
  164.                 db      83,84,86,88,89,91,93,94,96,97,99,101
  165.                 db      102,104,105,107,108,110,112,113,115,116,118,119
  166.                 db      121,122,124,125,127,128,130,131,133,134,136,137
  167.                 db      138,140,141,143,144,145,147,148,149,150,152,153
  168.                 db      154,155,156,158,159,160,161,162,163,164,165,166
  169.                 db      167,168,169,170,171,171,172,173,174,174,175,176
  170.                 db      177,177,178,178,179,179,180,180,181,181,182,182
  171.                 db      182,183,183,183,184,184,184,184,184,184,184,184         ; top to bottom palette values
  172.                 db      184,184,184,184,184,184,184,184,184,183,183,183
  173.                 db      182,182,182,181,181,180,180,179,179,178,178,177
  174.                 db      177,176,175,174,174,173,172,171,171,170,169,168
  175.                 db      167,166,165,164,163,162,161,160,159,158,156,155
  176.                 db      154,153,152,150,149,148,147,145,144,143,141,140
  177.                 db      139,137,136,134,133,131,130,128,127,125,124,122
  178.                 db      121,119,118,116,115,113,112,110,108,107,105,104
  179.                 db      102,101,99,97,96,94,93,91,89,88,86,84
  180.                 db      83,81,80,78,77,75,73,72,70,69,67,66
  181.                 db      64,63,61,60,58,57,55,54,52,51,49,48
  182.                 db      47,45,44,42,41,40,38,37,36,35,33,32
  183.                 db      31,30,29,27,26,25,24,23,22,21,20,19
  184.                 db      18,17,16,15,14,14,13,12,11,11,10,9
  185.                 db      8,8,7,7,6,6,5,5,4,4,3,3
  186.                 db      3,2,2,2,1,1,1,1,1,1,1,1                                 ; bottom to top palette values
  187.  
  188. palette         db       7, 7, 7                        ; gray bar start
  189.                 db      10,10,10
  190.                 db      13,13,13
  191.                 db      16,16,16
  192.                 db      19,19,19
  193.                 db      22,22,22
  194.                 db      25,25,25
  195.                 db      28,28,28
  196.                 db      31,31,31                        ; middle
  197.                 db      28,28,28
  198.                 db      25,25,25
  199.                 db      22,22,22
  200.                 db      19,19,19
  201.                 db      16,16,16
  202.                 db      13,13,13
  203.                 db      10,10,10
  204.                 db       7, 7, 7                        ; gray bar end
  205.                 db       7, 0, 0                        ; red bar start
  206.                 db      10, 0, 0
  207.                 db      13, 0, 0
  208.                 db      16, 0, 0
  209.                 db      19, 0, 0
  210.                 db      22, 0, 0
  211.                 db      25, 0, 0
  212.                 db      28, 0, 0
  213.                 db      31, 0, 0                        ; middle
  214.                 db      28, 0, 0
  215.                 db      25, 0, 0
  216.                 db      22, 0, 0
  217.                 db      19, 0, 0
  218.                 db      16, 0, 0
  219.                 db      13, 0, 0
  220.                 db      10, 0, 0
  221.                 db       7, 0, 0                        ; red bar end
  222.                 db       0, 7, 0                        ; green bar start
  223.                 db       0,10, 0
  224.                 db       0,13, 0
  225.                 db       0,16, 0
  226.                 db       0,19, 0
  227.                 db       0,22, 0
  228.                 db       0,25, 0
  229.                 db       0,28, 0
  230.                 db       0,31, 0                        ; middle
  231.                 db       0,28, 0
  232.                 db       0,25, 0
  233.                 db       0,22, 0
  234.                 db       0,19, 0
  235.                 db       0,16, 0
  236.                 db       0,13, 0
  237.                 db       0,10, 0
  238.                 db       0, 7, 0                        ; green bar end
  239.                 db       0, 0, 7                        ; blue bar start
  240.                 db       0, 0,10
  241.                 db       0, 0,13
  242.                 db       0, 0,16
  243.                 db       0, 0,19
  244.                 db       0, 0,22
  245.                 db       0, 0,25
  246.                 db       0, 0,28
  247.                 db       0, 0,31                        ; middle
  248.                 db       0, 0,28
  249.                 db       0, 0,25
  250.                 db       0, 0,22
  251.                 db       0, 0,19
  252.                 db       0, 0,16
  253.                 db       0, 0,13
  254.                 db       0, 0,10
  255.                 db       0, 0, 7                        ; blue bar end
  256.                 db       7, 7, 0                        ; yellow bar start
  257.                 db      10,10, 0
  258.                 db      13,13, 0
  259.                 db      16,16, 0
  260.                 db      19,19, 0
  261.                 db      22,22, 0
  262.                 db      25,25, 0
  263.                 db      28,28, 0
  264.                 db      31,31, 0                        ; middle
  265.                 db      28,28, 0
  266.                 db      25,25, 0
  267.                 db      22,22, 0
  268.                 db      19,19, 0
  269.                 db      16,16, 0
  270.                 db      13,13, 0
  271.                 db      10,10, 0
  272.                 db       7, 7, 0                        ; yellow bar end
  273.                 db       7, 0, 7                        ; purple bar start
  274.                 db      10, 0,10
  275.                 db      13, 0,13
  276.                 db      16, 0,16
  277.                 db      19, 0,19
  278.                 db      22, 0,22
  279.                 db      25, 0,25
  280.                 db      28, 0,28
  281.                 db      31, 0,31                        ; middle
  282.                 db      28, 0,28
  283.                 db      25, 0,25
  284.                 db      22, 0,22
  285.                 db      19, 0,19
  286.                 db      16, 0,16
  287.                 db      13, 0,13
  288.                 db      10, 0,10
  289.                 db       7, 0, 7                        ; purple bar end
  290.                 db       0, 7, 7                        ; cyan bar start
  291.                 db       0,10,10
  292.                 db       0,13,13
  293.                 db       0,16,16
  294.                 db       0,19,19
  295.                 db       0,22,22
  296.                 db       0,25,25
  297.                 db       0,28,28
  298.                 db       0,31,31                        ; middle
  299.                 db       0,28,28
  300.                 db       0,25,25
  301.                 db       0,22,22
  302.                 db       0,19,19
  303.                 db       0,16,16
  304.                 db       0,13,13
  305.                 db       0,10,10
  306.                 db       0, 7, 7                        ; cyan bar end
  307.                 db      18, 8, 1                        ; copper bar start
  308.                 db      23,13, 5
  309.                 db      28,18, 9
  310.                 db      33,23,13
  311.                 db      38,28,17
  312.                 db      43,33,21
  313.                 db      48,38,25
  314.                 db      53,43,29
  315.                 db      58,48,33                        ; middle
  316.                 db      53,43,29
  317.                 db      48,38,25
  318.                 db      43,33,21
  319.                 db      38,28,17
  320.                 db      33,23,13
  321.                 db      28,18, 9
  322.                 db      23,13, 5
  323.                 db      18, 8, 1                        ; copper bar end
  324.  
  325. barline         dw      175,150,125,100,75,50,25,0
  326. barpriority     db      200 dup(0)
  327. barheight       dw      17
  328. barcount        dw      8
  329. bardelay        dw      10
  330. barpal          db      200*3 dup(0)
  331. irqsave         db      ?
  332. nmisave         db      ?
  333.  
  334.         end     start
  335.