home *** CD-ROM | disk | FTP | other *** search
/ The Party 1994: Try This At Home / disk_image.bin / source / credits / credits.asm next >
Assembly Source File  |  1995-02-11  |  13KB  |  764 lines

  1. ;    credits
  2. ;
  3. ;    (C)94 xToto/Valhalla
  4. ;
  5. ;    first presented at the xmas-party in herning/denmark
  6.  
  7.     .model    small
  8.  
  9.      stack    100h
  10.  
  11. ZEOT        = 1
  12. ZHEIGHT        = 2
  13. ZSKIP        = 3
  14. ZSLEEP        = 4
  15. ZSPEED        = 5
  16. ZTOP        = 6
  17. ZBOTTOM        = 7
  18. ZBORDER        = 8
  19. ZEOL        = 10
  20.         .data
  21.  
  22. ZNICE        EQU    ZTOP,ZBLUE,1,ZBOTTOM,ZBROWN,1
  23. ZDARK        EQU    ZTOP,ZGREY,1,ZBOTTOM,ZGREY+7,-1
  24.  
  25. Zstring = $
  26.         db    ZEOL
  27.         db    ZBORDER,ZGREY
  28.         db    ZNICE
  29.         db    ZSPEED,7
  30.         db    ZHEIGHT,16h
  31.         db    '-V-A-L-H-A-L-L-A-',ZEOL
  32.         db    ZSKIP,10h
  33.         db    'PRESENTED',ZEOL
  34.         db    ZSKIP,10h
  35.         db    'PERIPHERAL VISION',ZEOL
  36.         db    ZSKIP,30
  37.         db    ZEOL
  38.         db    ZSLEEP,210,ZEOL
  39.         db    ZEOL
  40.         db    'THE CREDITS',ZEOL
  41.         db    '------------',ZEOL
  42.         db    ZSKIP,30
  43.  
  44.         db    ZEOL
  45.         db    'SANDMAN',ZEOL
  46.         db    '-----------------',ZEOL
  47.         db    'FRACTAL-MORPHER',ZEOL
  48.         db    'CUBE',ZEOL
  49.         db    'F15-FLIGHT',ZEOL
  50.         db    'CANYON-FLIGHT',ZEOL
  51.         db    'MISC.STUFF',ZEOL
  52.         db    ZSKIP,1,ZEOL
  53.         db    ZSLEEP,105,ZEOL
  54.         db    ZEOL
  55.  
  56.         db    ZEOL
  57.         db    'XTOTO',ZEOL
  58.         db    '-----------------',ZEOL
  59.         db    'CLOAKER',ZEOL
  60.         db    'LANDSCAPE',ZEOL
  61.         db    'CREDITS',ZEOL
  62.         db    'MISC.STUFF',ZEOL
  63.         db    ZSKIP,10,ZEOL
  64.         db    ZSLEEP,105,ZEOL
  65.         db    ZEOL
  66.  
  67.         db    ZEOL
  68.         db    'OXIDE',ZEOL
  69.         db    '-----------------',ZEOL
  70.         db    'MUSIC',ZEOL
  71.         db    ZSKIP,40,ZEOL
  72.         db    ZSLEEP,105,ZEOL
  73.         db    ZEOL
  74.  
  75.         db    ZEOL
  76.         db    'HSI',ZEOL
  77.         db    '-----------------',ZEOL
  78.         db    'VALHALLA LOGO',ZEOL
  79.         db    'CANYON GRAPHICS',ZEOL
  80.         db    'THIS FONT',ZEOL
  81.         db    ZSKIP,30,ZEOL
  82.         db    ZSLEEP,105,ZEOL
  83.         db    ZEOL
  84.  
  85.         db    ZEOL
  86.         db    ZNICE
  87.         db    'THE GREETINGS',ZEOL
  88.         db    '--------------',ZEOL
  89.         db    ZDARK
  90.         db    ZEOL
  91.         db    'B-WARE',ZEOL
  92.         db    'BRITISH KNIGHTS',ZEOL
  93.         db    'CAPACALA',ZEOL
  94.         db    'COMPLEX',ZEOL
  95.         db    'EMF',ZEOL
  96.         db    'FUTURE CREW',ZEOL
  97.         db    'GOLLUM',ZEOL
  98.         db    'GRIF',ZEOL
  99.         db    'HYSTERIA',ZEOL
  100.         db    'IGUANA',ZEOL
  101.         db    'IMPHOBIA-CASCADA',ZEOL
  102.         db    'JAMM',ZEOL
  103.         db    'KEFRENS',ZEOL
  104.         db    'LEGEND DESIGN',ZEOL
  105.         db    'LSD',ZEOL
  106.         db    'PHANTOM DEZIGN',ZEOL
  107.         db    'PRIME',ZEOL
  108.         db    'SURPRISE PRODUCTIONS',ZEOL
  109.         db    'SCOOPEX',ZEOL
  110.         db    'SPACEBALLS',ZEOL
  111.         db    'TET',ZEOL
  112.         db    'THE COEXISTANCE',ZEOL
  113.         db    'TRITON',ZEOL
  114.         db    'VIRTUAL DREAMS',ZEOL
  115.         db    'VLA',ZEOL
  116.         db    'XOGRAPHY',ZEOL
  117.  
  118.         db    ZSKIP,80
  119.         db    ZNICE
  120.         db    'SANDMAN SENDS',ZEOL
  121.         db    'SPECIAL GREETINGS TO',ZEOL
  122.         db    ZDARK
  123.         db    ZEOL
  124.         db    'DARKSHADE',ZEOL
  125.         db    'FEAR',ZEOL
  126.         db    'JMAGIC',ZEOL
  127.         db    'MARTIST',ZEOL
  128.         db    'OC',ZEOL
  129.         db    'OPTICS',ZEOL
  130.         db    'PIT BULL',ZEOL
  131.         db    'TRUG',ZEOL
  132.         db    'YAKA',ZEOL
  133.         db    'ZOOMBAPUP',ZEOL
  134.  
  135.         db    ZSKIP,50
  136.         db    ZNICE
  137.         db    'SANDMAN SENDS',ZEOL
  138.         db    'NORMAL GREETINGS TO',ZEOL
  139.         db    ZDARK
  140.         db    ZEOL
  141.         db    'ABYSS',ZEOL
  142.         db    'AVATAR',ZEOL
  143.         db    'BRAD CRAIG',ZEOL
  144.         db    'BRI_ACID',ZEOL
  145.         db    'BRIAN',ZEOL
  146.         db    'DENTIST',ZEOL
  147.         db    'DOOM',ZEOL
  148.         db    'ERIK',ZEOL
  149.         db    'FLAME',ZEOL
  150.         db    'GTG',ZEOL
  151.         db    'HENCHMAN',ZEOL
  152.         db    'INTER',ZEOL
  153.         db    'JARE',ZEOL
  154.         db    'JAYKE',ZEOL
  155.         db    'JCAB',ZEOL
  156.         db    'LEV',ZEOL
  157.         db    'LIKET',ZEOL
  158.         db    'LITHIUM',ZEOL
  159.         db    'LIZARDKING',ZEOL
  160.         db    'MATRIX', ZEOL
  161.         db    'MIKIE',ZEOL
  162.         db    'PLASTIC SWIMMER',ZEOL
  163.         db    'ROB BARTH',ZEOL
  164.         db    'ROYAL SAM',ZEOL
  165.         db    'SARACEN',ZEOL
  166.         db    'STELIOS',ZEOL
  167.         db    'THE FAKER',ZEOL
  168.         db    'THE WIZARD',ZEOL
  169.         db    'THUMPER',ZEOL
  170.         db    'WELTI',ZEOL
  171.         db    'WILDFIRE',ZEOL
  172.         db    'WIZARD',ZEOL
  173.  
  174.         db    ZSKIP,80
  175.         db    ZNICE
  176.         db    'XTOTO GREETS',ZEOL
  177.         db    ZDARK
  178.         db    ZEOL
  179.         db    '3R',ZEOL
  180.         db    'ANTIBYTE',ZEOL
  181.         db    'CASSIOPEIA',ZEOL
  182.         db    'CHICKEN',ZEOL
  183.         db    'CHRISTOPH',ZEOL
  184.         db    'CHRISTIAN H',ZEOL
  185.         db    'CHRISTIAN T',ZEOL
  186.         db    'CORWIN',ZEOL
  187.         db    'DAD',ZEOL
  188.         db    'EDDIE',ZEOL
  189.         db    'EINIE',ZEOL
  190.         db    'GABI',ZEOL
  191.         db    'GIDEON',ZEOL
  192.         db    'HOLLE',ZEOL
  193.         db    'JOHANNES',ZEOL
  194.         db    'KARIN',ZEOL
  195.         db    'MADMAX',ZEOL
  196.         db    'MARC',ZEOL
  197.         db    'MARTIST',ZEOL
  198.         db    'MIKA',ZEOL
  199.         db    'MOM',ZEOL
  200.         db    'M_REX',ZEOL
  201.         db    'MUSASHI',ZEOL
  202.         db    'NEUROTICA',ZEOL
  203.         db    'NOCTURNUS',ZEOL
  204.         db    'OC',ZEOL
  205.         db    'PIT BULL',ZEOL
  206.         db    'PRE',ZEOL
  207.         db    'PREMIERE',ZEOL
  208.         db    'PSYCHED',ZEOL
  209.         db    'RALF',ZEOL
  210.         db    'SARACEN',ZEOL
  211.         db    'SASCHA',ZEOL
  212.         db    'SIMM',ZEOL
  213.         db    'STEFAN E',ZEOL
  214.         db    'STEFAN H',ZEOL
  215.         db    'STRFX',ZEOL
  216.         db    'TCMAN',ZEOL
  217.         db    'THOMAS',ZEOL
  218.         db    'WELTI',ZEOL
  219.         db    'WERNER',ZEOL
  220.         db    'WHITE WIZARD',ZEOL
  221.         db    'WOLFGANG M',ZEOL
  222.         db    'WOLFGANG S',ZEOL
  223.         db    'YAKA',ZEOL
  224.         db    'ZDEN',ZEOL
  225.  
  226.         db    ZSKIP,80
  227.         db    ZNICE
  228.         db    'OXIDE GREETS',ZEOL
  229.         db    ZDARK
  230.         db    ZEOL
  231.         db    'XPEKTRUM SYSTEMS',ZEOL
  232.         db    'ICH INC.',ZEOL
  233.         db    'ASTRA/ADRAR DESIGN',ZEOL
  234.         db    'M3/ISPANIA',ZEOL
  235.         db    'AUDIN',ZEOL
  236.         db    'SNOWMAN',ZEOL
  237.         db    ZSKIP,10
  238.         db    'ALL PPL I MEET IN',ZEOL
  239.         db    'FIDONET AND INTERNET',ZEOL
  240.         
  241.         db    ZSKIP,80
  242.         db    ZNICE
  243.         db    'HSI GREETS',ZEOL
  244.         db    ZDARK
  245.         db    ZEOL
  246.         db    'EVERYONE AT',ZEOL
  247.         db    'WOLVERHAMPTON UNI',ZEOL
  248.         db    ZSKIP,10
  249.         db    'EVERYONE AT',ZEOL
  250.         db    'DUDLEY COLLEGE',ZEOL
  251.         db    ZSKIP,10
  252.         db    'JIMBO',ZEOL
  253.  
  254.         db    ZSKIP,120
  255.         db    ZNICE
  256.         db    'THE END',ZEOL
  257.         db    ZDARK
  258.         db    ZSKIP,60,ZEOL
  259.         db    ZSLEEP,140
  260.         db    ZSKIP,200
  261.         db    ZEOT
  262.  
  263. Zpstring    dw    offset Zstring
  264. Zpstart        dw    0
  265. Zostart        dw    0
  266. Zcharln        dw    0
  267. Zcharhgt    dw    14h
  268. Zdelta        dw    100h
  269. Zy        dw    0
  270. Zy2        dw    0
  271. ZSLEEPer    db    0
  272. ZSKIPper    db    0
  273.  
  274. Zshadow        db    2,1,3,2
  275.         db    1,1,3,1
  276.         db    3,1,3,3
  277.         db    2,1,3,2
  278.         db    0
  279.  
  280. Zpattern    db    0
  281.  
  282. Zfade        =    $
  283. Zfade_top    db    5,6,7,8,9,10,11,12
  284. Zfade_bottom    db    13,14,15,16,17,18,19,20
  285.  
  286. Zleft        db    1
  287. Zright        db    3
  288.  
  289. Zcolormap    db    000h, 000h, 000h ; ##
  290. ZSTAR = 1
  291.         db    017h, 017h, 017h
  292. ZGREEN = 2
  293. ;        db    000h, 000h, 000h ; green
  294. ;        db    007h, 00fh, 007h
  295. ;        db    00dh, 01bh, 00dh
  296. ;        db    013h, 027h, 013h
  297. ;        db    019h, 033h, 019h
  298. ;        db    01fh, 03fh, 01fh
  299. ;        db    02ah, 03fh, 02ah
  300. ;        db    035h, 03fh, 035h
  301. ZRED = 10
  302. ;        db    000h, 000h, 000h ; red
  303. ;        db    00fh, 007h, 007h
  304. ;        db    01bh, 00dh, 00dh
  305. ;        db    027h, 013h, 013h
  306. ;        db    033h, 019h, 019h
  307. ;        db    03fh, 01fh, 01fh
  308. ;        db    03fh, 02ah, 02ah
  309. ;        db    03fh, 035h, 035h
  310. ZGREY = (offset $ - offset Zcolormap) / 3
  311.         db    000h, 000h, 000h ; grey
  312.         db    007h, 007h, 007h
  313.         db    00fh, 00fh, 00fh
  314.         db    017h, 017h, 017h
  315.         db    01fh, 01fh, 01fh
  316.         db    027h, 027h, 027h
  317.         db    02fh, 02fh, 02fh
  318.         db    037h, 037h, 037h
  319. ZBLUE = (offset $ - offset Zcolormap) / 3
  320.         db    000h, 000h, 000h ; blue
  321.         db    006h, 008h, 00fh
  322.         db    00ch, 00eh, 01bh
  323.         db    012h, 014h, 027h
  324.         db    018h, 01ah, 033h
  325.         db    01eh, 020h, 03fh
  326.         db    027h, 029h, 03fh
  327.         db    02fh, 031h, 03fh
  328. ZBROWN = (offset $ - offset Zcolormap) / 3
  329.         db    000h, 000h, 000h ; brown
  330.         db    00ch, 00ah, 007h
  331.         db    016h, 012h, 00dh
  332.         db    020h, 01ah, 013h
  333.         db    02ah, 022h, 019h
  334.         db    032h, 02ch, 01fh
  335.         db    037h, 033h, 02ah
  336.         db    03bh, 039h, 035h
  337. Zcolors        = offset $ - offset Zcolormap
  338.  
  339. Zbuffer        db    12h*12h dup (0)
  340.  
  341. include    font.inc
  342.  
  343. Zfont    db    chars*16*16 dup (?)
  344.  
  345. Zstarsx    dw    2*200 dup (?)
  346.  
  347.     .code
  348.     .286
  349. Zclean_up:
  350.     mov    ax, 03h
  351.     int    10h
  352.     mov    ax, 4c00h
  353.     int    21h
  354.  
  355. Zclear_line:
  356.     mov    di, Zpstart
  357.     xor    ax, ax
  358.     mov    cx, 320/2
  359. Zclear_line1:
  360.     mov    es:[di], ax
  361.     add    di, 2
  362.     dec    cx
  363.     jnz    Zclear_line1
  364.     ret
  365.  
  366. Zdraw_line:
  367.     mov    si, Zpstring
  368.     xor    bx, bx
  369. Zdraw_line1:
  370.     mov    al, ds:[si+bx]
  371.     inc    bx
  372.     cmp    al, ZEOL
  373.     jne    Zdraw_line1
  374.     dec    bx
  375.     jz    Zdraw_line7
  376.     mov    cx, bx
  377.     mov    di, cx
  378.     shl    di, 3
  379.     sub    di, 160
  380.     neg    di
  381.     add    di, Zpstart
  382. Zdraw_line2:
  383.     push    cx
  384.     xor    bh, bh
  385.     mov    bl, [si]
  386.     sub    bx, 020h
  387.     add    bx, bx
  388.     mov    bx, ds:chardata[bx]
  389.     mov    dx, Zcharln
  390.     shl    dx, 4
  391.     add    bx, dx
  392.     mov    cx, 16
  393. Zdraw_line3:
  394.     mov    al, ds:[bx]
  395.     cmp    al, 2
  396.     jnz    Zdraw_line4
  397.     mov    al, Zpattern
  398. Zdraw_line4:
  399.     cmp    al, 1
  400.     jnz    Zdraw_line5
  401.     mov    al, Zleft
  402. Zdraw_line5:
  403.     cmp    al, 3
  404.     jnz    Zdraw_line6
  405.     mov    al, Zright
  406. Zdraw_line6:
  407.     mov    byte ptr es:[di], al
  408.     inc    di
  409.     inc    bx
  410.     add    dx, dx
  411.     dec    cx
  412.     jnz    Zdraw_line3
  413.     inc    si
  414.     pop    cx
  415.     dec    cx
  416.     jnz    Zdraw_line2
  417. Zdraw_line7:
  418.     ret
  419.  
  420. Zinit:
  421.     mov    ax, seg _DATA
  422.     mov    ds, ax
  423.     mov    ax, 0a000h
  424.     mov    es, ax
  425.     call    Zinit_font
  426.     call    Zinit_gfx
  427.     call    Zinit_stars
  428.     ret
  429.  
  430. Zinit_gfx:
  431.     mov    ax, 013h
  432.     int    10h
  433.     mov    dx, 03c8h
  434.     xor    al, al
  435.     out    dx, al
  436.     inc    dx
  437.     mov    si, offset Zcolormap
  438.     mov    cx, Zcolors
  439.     rep    outsb
  440.     ret
  441.  
  442. Zinit_stars:
  443.     mov    bp, 7111h
  444.     mov    cx, 200
  445.     mov    di, offset Zstarsx
  446. Zinit_stars1:
  447.     mul    bp
  448.     xor    ax, 5908h
  449.     mov    ds:[di], ax
  450.     rol    ax, 7
  451.     mul    bp
  452.     xor    ax, 0588h
  453.     mov    ds:[di+2], ax
  454.     and    word ptr ds:[di+2], 00f8h
  455.     add    word ptr ds:[di+2], 20h
  456.     rol    ax, 5
  457.     add    di, 4
  458.     dec    cx
  459.     jnz    Zinit_stars1
  460.     ret
  461.  
  462. Zkey_pressed:
  463.     mov    ah, 01h
  464.     int    16h
  465.     ret
  466.  
  467. Zmain:
  468.     call    Zinit
  469. Zmain1:
  470.     call    Zrun
  471.     call    Zkey_pressed
  472.     jz    Zmain1
  473.     call    Zclean_up
  474.  
  475. Zmove_stars:
  476.     mov    cx, 200
  477.     mov    bp, offset Zstarsx
  478.     mov    di, Zpstart
  479.     add    di, 576
  480.     mov    si, Zostart
  481.     add    si, 576
  482. Zmove_stars1:
  483.     mov    bx, ds:[bp]
  484.     mov    ax, bx
  485.     shr    bx, 7
  486.     cmp    bx, 319
  487.     ja    Zmove_stars2
  488.     cmp    byte ptr es:[si+bx], ZSTAR ; ##
  489.     jne    Zmove_stars2
  490.     mov    byte ptr es:[si+bx], 0
  491. Zmove_stars2:
  492.     add    ax, ds:[bp+2]
  493.     mov    ds:[bp], ax
  494.     shr    ax, 7
  495.     cmp    ax, 319
  496.     ja    Zmove_stars3
  497.     mov    bx, ax
  498.     cmp    byte ptr es:[di+bx], 0
  499.     jne    Zmove_stars3
  500.     mov    byte ptr es:[di+bx], ZSTAR
  501. Zmove_stars3:
  502.     add    bp, 4
  503.     add    di, 320
  504.     add    si, 320
  505.     dec    cx
  506.     jnz    Zmove_stars1
  507.     ret
  508.  
  509. Znext_line:
  510.     mov    si, Zpstring
  511. Znext_line1:
  512.     lodsb
  513.     cmp    al, ZEOL
  514.     jne    Znext_line1
  515. Znext_line2:
  516.     lodsb
  517.     cmp    al, ' '
  518.     jae    Znext_line_end
  519.  
  520.     cmp    al, ZSLEEP
  521.     jne    Znext_line_nosleep
  522.     lodsb
  523.     mov    Zsleeper, al
  524.     jmp    Znext_line2
  525. Znext_line_nosleep:
  526.  
  527.     cmp    al, ZSPEED
  528.     jne    Znext_line_nospeed
  529.     lodsb
  530.     mov    cl, al
  531.     mov    ax, 0001h
  532.     shl    ax, cl
  533.     mov    Zdelta, ax
  534.     jmp    Znext_line2
  535. Znext_line_nospeed:
  536.  
  537.     cmp    al, ZTOP
  538.     jne    Znext_line_notop
  539.     lodsw
  540.     mov    cx, 8
  541.     mov    bx, offset Zfade_top
  542. Znext_line_top:
  543.     mov    ds:[bx], al
  544.     inc    bx
  545.     add    al, ah
  546.     dec    cx
  547.     jnz    Znext_line_top
  548.     jmp    Znext_line2
  549. Znext_line_notop:
  550.  
  551.     cmp    al, ZBOTTOM
  552.     jne    Znext_line_nobottom
  553.     lodsw
  554.     mov    cx, 8
  555.     mov    bx, offset Zfade_bottom
  556. Znext_line_bottom:
  557.     mov    ds:[bx], al
  558.     inc    bx
  559.     add    al, ah
  560.     dec    cx
  561.     jnz    Znext_line_bottom
  562.     jmp    Znext_line2
  563. Znext_line_nobottom:
  564.  
  565.     cmp    al, ZBORDER
  566.     jne    Znext_line_noborder
  567.     lodsb
  568.     add    al, 2
  569.     mov    Zright, al
  570.     add    al, 3
  571.     mov    Zleft, al
  572.     jmp    Znext_line2
  573. Znext_line_noborder:
  574.     cmp    al, ZHEIGHT
  575.     jne    Znext_line_noheight
  576.     lodsb
  577.     xor    ah, ah
  578.     mov    Zcharhgt, ax
  579.     jmp    Znext_line2
  580.  
  581. Znext_line_noheight:
  582.     cmp    al, ZSKIP
  583.     jne    Znext_line_noskip
  584.     lodsb
  585.     mov    Zskipper, al
  586.     jmp    Znext_line2
  587.  
  588. Znext_line_noskip:
  589.     cmp    al, ZEOT
  590.     jne    Znext_line_noeot
  591.     mov    si, offset Zstring+1
  592.  
  593. Znext_line_noeot:
  594. Znext_line_end:
  595.     dec    si
  596.     mov    Zpstring, si
  597.     ret
  598.  
  599. Zinit_font:
  600.     mov    di, offset Zfont
  601.     mov    si, offset char00
  602.     mov    cx, chars
  603. Zinit_font1:
  604.     push    cx
  605.     mov    bp, offset Zbuffer + 11h
  606.     mov    cx, 10h
  607. Zinit_font2:
  608.     push    cx
  609.     mov    dx, [si]
  610. ;    add    dl, dl
  611.     inc    si
  612.     inc    si
  613.     mov    cx, 10h
  614. Zinit_font3:
  615.     xor    al, al
  616.     add    dx, dx
  617.     adc    al, 0
  618.     mov    ds:[bp], al
  619.     inc    bp
  620.     dec    cx
  621.     jnz    Zinit_font3
  622.     inc    bp
  623.     inc    bp
  624.     pop    cx
  625.     dec    cx
  626.     jnz    Zinit_font2
  627.  
  628.     mov    cx, 10h
  629.     mov    bp, offset Zbuffer + 11h
  630. Zinit_font4:
  631.     push    cx
  632.     mov    cx, 10h
  633. Zinit_font5:
  634.     xor    bx, bx
  635.     cmp    byte ptr ds:[bp], 0
  636.     jne    Zinit_font_do
  637.     mov    bl, 10h
  638.     jmp    Zinit_font_s4
  639. Zinit_font_do:
  640.     cmp    byte ptr ds:[bp-1], 0
  641.     jz    Zinit_font_s1
  642.     or    bl, 1
  643. Zinit_font_s1:
  644.     cmp    byte ptr ds:[bp+1], 0
  645.     jz    Zinit_font_s2
  646.     or    bl, 2
  647. Zinit_font_s2:
  648.     cmp    byte ptr ds:[bp-12h], 0
  649.     jz    Zinit_font_s3
  650.     or    bl, 4
  651. Zinit_font_s3:
  652.     cmp    byte ptr ds:[bp+12h], 0
  653.     jz    Zinit_font_s4
  654.     or    bl, 8
  655. Zinit_font_s4:
  656.     mov    al, Zshadow[bx]
  657.     mov    ds:[di], al
  658.     inc    di
  659.     inc    bp
  660.     dec    cx
  661.     jnz    Zinit_font5
  662.     inc    bp
  663.     inc    bp
  664.     pop    cx
  665.     dec    cx
  666.     jnz    Zinit_font4
  667.  
  668.     pop    cx
  669.     dec    cx
  670.     jnz    Zinit_font1
  671.  
  672.     mov    si, offset chardata
  673.     mov    cx, 64
  674. Zinit_font6:
  675.     mov    bx, [si]
  676.     sub    bx, offset char00
  677.     shl    bx, 3
  678.     add    bx, offset Zfont
  679.     mov    [si], bx
  680.     inc    si
  681.     inc    si
  682.     dec    cx
  683.     jnz    Zinit_font6
  684.     ret
  685.  
  686. Zproceed:
  687.     add    Zpstart, 320
  688.     mov    cx, Zpstart
  689.     add    cx, 576
  690.     shr    cx, 2
  691.     mov    dx, 03d4h
  692.     mov    ah, ch
  693.     mov    al, 00ch
  694.     out    dx, ax
  695.     mov    ah, cl
  696.     mov    al, 00dh
  697.     out    dx, ax
  698.     mov    ax, Zcharln
  699.     cmp    Zcharhgt, ax        ; check for new line
  700.     jne    Zproceed1
  701.     mov    Zcharln, 0
  702.     call    Znext_line
  703. Zproceed1:
  704.     mov    bx, Zcharln
  705.     add    bx, offset Zfade
  706.     mov    al, ds:[bx]
  707.     mov    Zpattern, al
  708.     ret
  709.  
  710. Zrun:
  711.     cmp    Zsleeper, 0        ; sleep on demand
  712.     je    Zrun1
  713.     dec    Zsleeper
  714.     jmp    Zrun_end
  715. Zrun1:
  716.     mov    ax, Zy
  717.     mov    Zy2, ax
  718.     mov    cx, ax
  719.     add    cx, Zdelta
  720.     mov    Zy, cx
  721.     shr    ax, 8
  722.     shr    cx, 8
  723.     sub    cx, ax
  724.     and    cx, 00ffh
  725.     jz    Zrun_end
  726. Zrun_loop:
  727.     push    cx
  728.     call    Zclear_line
  729.     cmp    Zskipper, 0
  730.     je    Zrun_no_skip
  731.     dec    ZSkipper
  732.     jmp    Zrun_was_skip
  733. Zrun_no_skip:
  734.     cmp    Zcharln, 10h
  735.     jae    Zrun_no_char
  736.     call    Zdraw_line
  737. Zrun_no_char:
  738.     inc    Zcharln
  739. Zrun_was_skip:
  740.     call    Zproceed
  741.     pop    cx
  742.     dec    cx
  743.     jnz    Zrun_loop
  744. Zrun_end:
  745.     call    Zsync
  746.     call    Zmove_stars
  747.     mov    ax, Zpstart
  748.     mov    Zostart, ax
  749.     ret
  750.  
  751. Zsync:
  752.     mov    dx, 03dah
  753. Zsync1:
  754.     in    al, dx
  755.     test    al, 8
  756.     jz    Zsync1
  757. Zsync2:
  758.     in    al, dx
  759.     test    al, 8
  760. ;    jnz    Zsync2
  761.     ret
  762.  
  763.     end Zmain
  764.