home *** CD-ROM | disk | FTP | other *** search
/ BBS 1 / BBS#1.iso / grafika / video.ha / EGA64.ASM next >
Assembly Source File  |  1993-04-28  |  3KB  |  214 lines

  1. ;    EGA-64.asm
  2. ;    Displays 64 colors on EGA display in text mode!!!
  3. ;
  4. ;    Written by Alex Yakovlev. (alex@asp.tixm.tambov.su)
  5. ;
  6.  
  7.     Ideal
  8.     Model    Tiny
  9.     CodeSeg
  10.  
  11.     Org    100h
  12.  
  13. Start:
  14.     Mov    ah,12h
  15.     Mov    bl,10h
  16.     Int    10h
  17.     Cmp    bl,10h
  18.     Jne    @@Ok
  19.  
  20.     Mov    ah,9
  21.     Mov    dx,OffSet NoEGA
  22.     Int    21h
  23.  
  24.     Ret
  25.  
  26. NoEGA    Db    'Sorry, EGA needed.', 13,10, '$'
  27.  
  28. @@Ok:
  29. ;                Draw a picture
  30.     Mov    ax,0B800h
  31.     Mov    es,ax
  32.     Xor    di,di
  33.  
  34.     Cld
  35.     Mov    cx,23
  36. Lp1:    Push    cx
  37.     Mov    al,'█'
  38.     Mov    ah,08h
  39. Lp2:
  40.     Mov    cx,10
  41.     Rep    StoSw
  42.     Inc    ah
  43.     Cmp    ah,10h
  44.     Jb    Lp2
  45.  
  46.     Pop    cx
  47.     Loop    Lp1
  48.  
  49.     Mov    si,OffSet Msg
  50.     Mov    ah,07h
  51. Lf1:
  52.     LodSb
  53.     Or    al,al
  54.     Jz    Lf2
  55.     StoSw
  56.     Jmp    Lf1
  57. Lf2:
  58.  
  59. ;                Show all colors
  60.     Cli
  61.  
  62.     Xor    ax,ax
  63.     Mov    ds,ax
  64. ;                Store old Int09 vector
  65.     Mov    ax,[ds: 4*9+0]
  66.     Mov    [cs:OldOfs],ax
  67.     Mov    ax,[ds: 4*9+2]
  68.     Mov    [cs:OldSeg],ax
  69. ;                Set my Int09
  70.     Mov    [ds: 4*9+2],cs
  71.     Mov    ax,OffSet Int09
  72.     Mov    [ds: 4*9+0],ax
  73. ;                Mask all IRQs except Keyboard
  74.     Mov    al,11111101b
  75.     Out    21h,al
  76.  
  77.     Sti
  78.     Jmp    Loc3
  79.  
  80. Msg    Db    "A Great program, isn't it ?...            "
  81.     Db    "Copyright (c) by Alex Yakovlev.       ", 0
  82.  
  83. Loc1:
  84. ;                Wait for retrace
  85. Lc7:    In    al,dx
  86.     Test    al,1
  87.     Jz    Lc7
  88. ;                Set palette register
  89.     Mov    bl,8
  90. Ll1:    Mov    dx,3C0h
  91.     Mov    al,bl
  92.     Out    dx,al
  93.     Mov    al,bh
  94.     Out    dx,al
  95. ;                Increase color number
  96.     Inc    bl
  97.     Inc    bh
  98.     Cmp    bl,16
  99.     Jb    Ll1
  100. ;                Skip line
  101.     Mov    dx,3DAh
  102. Lc4:    In    al,dx
  103.     Test    al,1
  104.     Jnz    Lc4
  105. ;                Wait for retrace end
  106. Lc5:    In    al,dx
  107.     Test    al,1
  108.     Jz    Lc5
  109. ;                If all colors are already displayed
  110.     Cmp    bh,64
  111.     Ja    Loc3
  112. ;                Enable display
  113.     Mov    dx,3C0h
  114.     Mov    al,20h
  115.     Out    dx,al
  116.  
  117.     Mov    ah,38            ; ... Lines per color
  118.     Mov    dx,3DAh
  119.  
  120. Lc1:    In    al,dx
  121.     Test    al,1
  122.     Jnz    Lc1            ; Wait for retrace end
  123.  
  124.     Dec    ah
  125.     Jz    Loc1
  126.  
  127. Lc2:    In    al,dx
  128.     Test    al,1
  129.     Jz    Lc2            ; Wait for retrace
  130.  
  131.     Jmp    Lc1
  132.  
  133. Loc3:
  134. ;                Blank palette
  135.     Mov    bl,8
  136.     Mov    dx,3C0h
  137. Ll3:
  138.     Mov    al,bl
  139.     Out    dx,al
  140.     Mov    al,0
  141.     Out    dx,al
  142.     Inc    bl
  143.     Cmp    bl,16
  144.     Jb    Ll3
  145. ;                Enable display
  146.     Mov    dx,3C0h
  147.     Mov    al,20h
  148.     Out    dx,al
  149. ;                Wait for vert retrace
  150.     Mov    dx,3DAh
  151. Lc3:    In    al,dx
  152.     Test    al,1000b
  153.     Jz    Lc3
  154.  
  155.     Mov    bh,0
  156.     Jmp    Loc1
  157.  
  158. Int09:
  159.     Add    sp,6
  160. ;                Restore old Int09 vector
  161.     Mov    ax,[cs:OldOfs]
  162.     Mov    [ds: 4*9+0],ax
  163.     Mov    ax,[cs:OldSeg]
  164.     Mov    [ds: 4*9+2],ax
  165.  
  166.     Push    cs
  167.     Pop    ds
  168. ;                Initialize 3C0 port
  169.     Mov    dx,3DAh
  170.     In    al,dx
  171. ;                Set standard palette
  172.     Mov    bl,8
  173.     Mov    dx,3C0h
  174. Ll4:
  175.     Mov    al,bl
  176.     Out    dx,al
  177.     Mov    al,bl
  178.     Add    al,38h-8
  179.     Out    dx,al
  180.     Inc    bl
  181.     Cmp    bl,16
  182.     Jb    Ll4
  183. ;                Enable display
  184.     Mov    al,20h
  185.     Out    dx,al
  186. ;                Enable all IRQs
  187.     Mov    al,0
  188.     Out    21h,al
  189.     Sti
  190. ;                Call Old Int09 handler
  191.     Int    09
  192. ;                Cls
  193.     Mov    ax,0B800h
  194.     Mov    es,ax
  195.     Mov    ax,0720h
  196.     Xor    di,di
  197.     Mov    cx,2000
  198.     Rep Stosw
  199. ;                Get key, if any are entered
  200. Loc7:    Mov    ah,1
  201.     Int    16h
  202.     Jz    Loc8
  203.     Mov    ah,0
  204.     Int    16h
  205.     Jmp    Loc7
  206. Loc8:
  207. ;                Leave ...
  208.     Ret
  209.  
  210. OldOfs    Dw    ?
  211. OldSeg    Dw    ?
  212.  
  213.     End    Start
  214.