home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l350 / 3.ddi / EXAMPLES / ASM / SCRTEST.ASM < prev    next >
Encoding:
Assembly Source File  |  1988-05-29  |  4.9 KB  |  176 lines

  1. ;************************************************************************/
  2. ;*    Copyright (C) 1986-1988 Phar Lap Software, Inc.            */
  3. ;*    Unpublished - rights reserved under the Copyright Laws of the    */
  4. ;*    United States.  Use, duplication, or disclosure by the         */
  5. ;*    Government is subject to restrictions as set forth in         */
  6. ;*    subparagraph (c)(1)(ii) of the Rights in Technical Data and     */
  7. ;*    Computer Software clause at 252.227-7013.            */
  8. ;*    Phar Lap Software, Inc., 60 Aberdeen Ave., Cambridge, MA 02138    */
  9. ;************************************************************************/
  10. ;
  11. ; SCRTEST - Screen test program
  12. ;
  13. ; This program illustrates directly accessing screen memory when
  14. ; running in 386 protected mode.  Selector # 1C points to the
  15. ; screen memory.  
  16. ;
  17.  
  18.  
  19. ;    Screen defines
  20.  
  21. scr_height    equ    24        ; Screen height
  22. scr_width    equ    80        ; Screen width
  23. normal        equ    00700H        ; Normal attribute byte
  24. SS_USCREEN     equ    01CH        ; Screen memory selector
  25.  
  26.  
  27. ;    Special characters
  28.  
  29. ulcorner    equ    0C9H        ; Double upper left corner
  30. urcorner    equ    0BBH        ; Double upper right corner
  31. llcorner    equ    0C8H        ; Double lower left corner
  32. lrcorner    equ    0BCH        ; Double lower right corner
  33. dvline        equ    0BAH        ; Double vertical line
  34. dhline        equ    0CDH        ; Double horizontal line
  35.  
  36. ;
  37. ;    Start of the program
  38. ;
  39.  
  40. _text    segment    byte public use32 'code'
  41.  
  42.     assume    cs:_text,ds:_data
  43.  
  44.     public    _start_
  45.  
  46. _start_    proc    near
  47.  
  48.     mov    ax,SS_USCREEN        ; Move the screen memory selector
  49.     mov    es,ax            ;    to ES.
  50.  
  51.     mov    ax,normal+' '        ; Clear the screen.
  52.     mov    ecx,scr_height*scr_width ;
  53.     mov    edi,0            ;
  54.     rep stosw            ;
  55.  
  56.     mov    ax,normal        ; Load the normal attribute into AH,
  57.     mov    dx,line_cnt        ;    the line count in DX, a pointer
  58.     mov    esi,offset line_tab    ;    to the first text line into SI.
  59.  
  60.     mov    edi,scr_width-line_width ; Set up DI to address screen mem.
  61.     add    edi,((scr_height-line_cnt)/2)*(scr_width*2) ;
  62.  
  63. #loop1:    mov    cx,line_width        ; Load the line width into CX.
  64.  
  65. #loop2:    mov    al,[esi]        ; Move the next text character to the
  66.     mov    es:[edi],ax        ;    screen with a normal attribute.
  67.  
  68.     add    esi,1            ; Increment the text and screen 
  69.     add    edi,2            ;    pointers.
  70.  
  71.     dec    cx            ; Decrement the character count and
  72.     jne    #loop2            ;    loop if not zero.
  73.  
  74.     add    edi,(scr_width-line_width) * 2 ; Dump up DI to the next
  75.                               ;    line.
  76.  
  77.     dec    dx            ; Decrement the line count and loop
  78.     jne    #loop1            ;    if not zero.
  79.  
  80.     mov    ax,04C00H        ; Exit the program.
  81.     int    21h            ;
  82.  
  83.  
  84. _start_    endp
  85.  
  86. _text    ends
  87.  
  88. _data    segment    public byte use32 'data'
  89.  
  90. ;     The line table
  91.  
  92. line_width    equ    50
  93. line_cnt    equ    14
  94.  
  95. line_tab    label    byte
  96.  
  97. line1    db    ulcorner,(line_width - 2) dup (dhline),urcorner
  98.  
  99. line2    db    dvline,(line_width - 2) dup (' '),dvline
  100.  
  101. line3    db    dvline
  102.     db    '   Screen test program for 386 protected mode   '
  103.     db    dvline
  104.  
  105. line4    db    dvline,(line_width - 2) dup (' '),dvline
  106.  
  107. line5    db    dvline,8 dup (' ')
  108.     db    000H,001H,002H,003H,004H,005H,006H,007H
  109.     db    008H,009H,00AH,00BH,00CH,00DH,00EH,00FH
  110.     db    010H,011H,012H,013H,014H,015H,016H,017H
  111.     db    018H,019H,01AH,01BH,01CH,01DH,01EH,01FH
  112.     db    8 dup (' '),dvline
  113.  
  114. line6    db    dvline,8 dup (' ')
  115.     db    020H,021H,022H,023H,024H,025H,026H,027H
  116.     db    028H,029H,02AH,02BH,02CH,02DH,02EH,02FH
  117.     db    030H,031H,032H,033H,034H,035H,036H,037H
  118.     db    038H,039H,03AH,03BH,03CH,03DH,03EH,03FH
  119.     db    8 dup (' '),dvline
  120.  
  121. line7    db    dvline,8 dup (' ')
  122.     db    040H,041H,042H,043H,044H,045H,046H,047H
  123.     db    048H,049H,04AH,04BH,04CH,04DH,04EH,04FH
  124.     db    050H,051H,052H,053H,054H,055H,056H,057H
  125.     db    058H,059H,05AH,05BH,05CH,05DH,05EH,05FH
  126.     db    8 dup (' '),dvline
  127.  
  128. line8    db    dvline,8 dup (' ')
  129.     db    060H,061H,062H,063H,064H,065H,066H,067H
  130.     db    068H,069H,06AH,06BH,06CH,06DH,06EH,06FH
  131.     db    070H,071H,072H,073H,074H,075H,076H,077H
  132.     db    078H,079H,07AH,07BH,07CH,07DH,07EH,07FH
  133.     db    8 dup (' '),dvline
  134.  
  135. line9    db    dvline,8 dup (' ')
  136.     db    080H,081H,082H,083H,084H,085H,086H,087H
  137.     db    088H,089H,08AH,08BH,08CH,08DH,08EH,08FH
  138.     db    090H,091H,092H,093H,094H,095H,096H,097H
  139.     db    098H,099H,09AH,09BH,09CH,09DH,09EH,09FH
  140.     db    8 dup (' '),dvline
  141.  
  142. line10    db    dvline,8 dup (' ')
  143.     db    0A0H,0A1H,0A2H,0A3H,0A4H,0A5H,0A6H,0A7H
  144.     db    0A8H,0A9H,0AAH,0ABH,0ACH,0ADH,0AEH,0AFH
  145.     db    0B0H,0B1H,0B2H,0B3H,0B4H,0B5H,0B6H,0B7H
  146.     db    0B8H,0B9H,0BAH,0BBH,0BCH,0BDH,0BEH,0BFH
  147.     db    8 dup (' '),dvline
  148.  
  149. line11    db    dvline,8 dup (' ')
  150.     db    0C0H,0C1H,0C2H,0C3H,0C4H,0C5H,0C6H,0C7H
  151.     db    0C8H,0C9H,0CAH,0CBH,0CCH,0CDH,0CEH,0CFH
  152.     db    0D0H,0D1H,0D2H,0D3H,0D4H,0D5H,0D6H,0D7H
  153.     db    0D8H,0D9H,0DAH,0DBH,0DCH,0DDH,0DEH,0DFH
  154.     db    8 dup (' '),dvline
  155.  
  156. line12    db    dvline,8 dup (' ')
  157.     db    0E0H,0E1H,0E2H,0E3H,0E4H,0E5H,0E6H,0E7H
  158.     db    0E8H,0E9H,0EAH,0EBH,0ECH,0EDH,0EEH,0EFH
  159.     db    0F0H,0F1H,0F2H,0F3H,0F4H,0F5H,0F6H,0F7H
  160.     db    0F8H,0F9H,0FAH,0FBH,0FCH,0FDH,0FEH,0FFH
  161.     db    8 dup (' '),dvline
  162.  
  163. line13    db    dvline,(line_width - 2) dup (' '),dvline
  164.  
  165. line14    db    llcorner,(line_width - 2) dup (dhline),lrcorner
  166.  
  167. _data    ends
  168.  
  169. _stack    segment    byte stack use32 'stack'
  170.  
  171.     db    8192 dup (?)        ; An 8K stack
  172.  
  173. _stack    ends
  174.  
  175.     end _start_
  176.