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

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