home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / DEMOS / SCLASM.ZIP / SCROLL.ASM < prev    next >
Encoding:
Assembly Source File  |  1995-07-29  |  6.9 KB  |  212 lines

  1. ;█████████████████████████████████████████████████████████████████████████████
  2.                 DOSSEG
  3.                 IDEAL
  4.                 P386
  5.                 MODEL   SMALL
  6.                 STACK   512
  7.                 ASSUME  CS:_TEXT,DS:_DATA
  8. ;█████████████████████████████████████████████████████████████████████████████
  9. _BACKGROUND     EQU     1
  10. _FOREGROUND     EQU     7
  11.  
  12. _SCROLLSTART    EQU     96
  13. _SCROLLHEIGHT   EQU     8
  14.  
  15. _SCREENWIDTH    EQU     320
  16. ;█████████████████████████████████████████████████████████████████████████████
  17.         CODESEG
  18. PROC            Main
  19.  
  20.                 MOV     AX,013h                 ;; Set 320x200x256 VideoMode
  21.                 INT     010h
  22.  
  23.                 MOV     [Counter],0
  24.                 MOV     [ScrollerPixPos],0
  25.                 MOV     [ScrollerPos],0
  26.  
  27.                 CLI
  28. @@VBLFirst:     CALL    Retrace                 ;; Wait for Vertical Retrace
  29.                 MOV     DX,_BACKGROUND
  30.                 CALL    FillScreen
  31.                 CALL    FillScreen
  32.                 CALL    FillScreen
  33.                 CALL    FillScreen
  34.                 CMP     [Counter],199
  35.                 JB      @@VBLFirst
  36.  
  37. @@VBLMiddle:    CALL    Retrace                 ;; Wait for Vertical Retrace
  38.                 CALL    Scroller
  39.                 MOV     AH,01h                  ;; Check For KeyPress
  40.                 INT     016h
  41.                 JZ      @@VBLMiddle
  42.  
  43.                 MOV     [Counter],0
  44. @@VBLEnd:       CALL    Retrace                 ;; Wait for Vertical Retrace
  45.                 MOV     DX,0
  46.                 CALL    FillScreen
  47.                 CALL    FillScreen
  48.                 CALL    FillScreen
  49.                 CALL    FillScreen
  50.                 CMP     [Counter],199
  51.                 JB      @@VBLEnd
  52.  
  53.                 STI
  54.                 MOV     AX,03h                  ;; TextMode
  55.                 INT     010H
  56.                 MOV     AH,00h                  ;; Read Pressed Key
  57.                 INT     016h
  58.                 MOV     AX,04C00h               ;; Return To DOS
  59.                 INT     021h
  60.                 RET
  61. ENDP
  62. ;█████████████████████████████████████████████████████████████████████████████
  63. PROC            Retrace
  64.  
  65.                 PUSH    DX
  66.                 PUSH    AX
  67.  
  68.                 MOV     DX,03DAh                ;; Wait For End of Retrace
  69. @@LPWaitStart:  IN      AL,DX
  70.                 AND     AL,08h
  71.                 JNZ     @@LPWaitStart
  72.  
  73.                 MOV     DX,03DAh                ;; Wait For Start of Retrace
  74. @@LPWaitEnd:    IN      AL,DX
  75.                 AND     AL,08h
  76.                 JZ      @@LPWaitEnd
  77.  
  78.                 POP     AX
  79.                 POP     DX
  80.                 RET
  81. ENDP
  82. ;█████████████████████████████████████████████████████████████████████████████
  83. PROC            FillScreen
  84.  
  85.                 PUSH    AX                      ;; Save Registers
  86.                 PUSH    ES
  87.                 PUSH    CX
  88.                 PUSH    BX
  89.                 PUSH    DX
  90.  
  91.                 MOV     AX,0A000h               ;; Init Line to Draw
  92.                 MOV     ES,AX
  93.                 MOV     AX,[Counter]
  94.                 MOV     BX,320
  95.                 MUL     BX
  96.                 MOV     BX,AX
  97.                 POP     AX
  98.                 PUSH    AX
  99.  
  100.                 MOV     CX,320                  ;; Draw One Line
  101. @@Vul:          MOV     [ES:BX],AX
  102.                 INC     BX
  103.                 LOOP    @@Vul
  104.  
  105.                 CMP     [Counter],199           ;; Handle Counter
  106.                 JAE     @@NoVul
  107.                 INC     [Counter]
  108.  
  109. @@NoVul:        POP     DX
  110.                 POP     BX                      ;; Restore Registers
  111.                 POP     CX
  112.                 POP     ES
  113.                 POP     AX
  114.                 RET
  115. ENDP
  116. ;█████████████████████████████████████████████████████████████████████████████
  117. PROC            Scroller
  118.  
  119.                 PUSH    AX                      ;; Save Registers
  120.                 PUSH    ES
  121.                 PUSH    CX
  122.                 PUSH    BX
  123.                 PUSH    DX
  124.  
  125.                 MOV     AX,0A000h               ;; Init Line To Draw
  126.                 MOV     ES,AX
  127.                 MOV     AX,_SCROLLSTART
  128.                 MOV     CX,_SCREENWIDTH
  129.                 MUL     CX
  130.                 MOV     DI,AX
  131.                 MOV     AX,ES
  132.                 MOV     DS,AX
  133.                 MOV     SI,DI
  134.                 ADD     SI,1
  135.                 MOV     CX,((_SCREENWIDTH*_SCROLLHEIGHT-1)+318)/4
  136.                 CLD
  137.                 REP     MOVSD
  138.  
  139.                 MOV     DX,SEG Font             ;; Init Data Segment
  140.                 MOV     DS,DX
  141.                 MOV     [LineCount],0           ;; Init Font Offset
  142.                 
  143.                 MOV     AX,_SCROLLSTART+1       ;; Init Screen Address
  144.                 MOV     CX,_SCREENWIDTH
  145.                 MUL     CX
  146.                 MOV     DI,AX
  147.                 DEC     DI
  148.                 
  149.                 INC     [ScrollerPixPos]        ;; Look for New Char
  150.                 CMP     [ScrollerPixPos],8
  151.                 JNE     @@NoNewChar
  152.                 MOV     [ScrollerPixPos],0
  153.                 INC     [ScrollerPos]
  154.                 
  155. @@NoNewChar:    MOV     CX,_SCROLLHEIGHT
  156. @@NextLineScrl: PUSH    CX
  157.                 
  158. @@ReadAgain:    MOV     BX,OFFSET ScrollerText  ;; Get Character
  159.                 ADD     BX,[ScrollerPos]
  160.                 XOR     AX,AX
  161.                 MOV     AL,[DS:BX]
  162.                 CMP     AL,0
  163.                 JNE     @@NotEndScroll
  164.                 MOV     [ScrollerPos],0
  165.                 MOV     [ScrollerPixPos],0
  166.                 JMP     @@ReadAgain
  167.                 
  168. @@NotEndScroll: SUB     AL,020h
  169.                 MOV     BX,OFFSET Font
  170.                 ADD     BX,[LineCount]
  171.                 ADD     BX,AX
  172.                 MOV     AL,[DS:BX]
  173.                 MOV     CX,[ScrollerPixPos]
  174.                 SHL     AX,CL
  175.  
  176.                 TEST    AL,080h
  177.                 JE      @@NoPixel
  178.                 MOV     AL,_FOREGROUND
  179.                 MOV     [ES:DI],AL
  180.                 JMP     @@NextLine
  181. @@NoPixel:      MOV     AL,_BACKGROUND
  182.                 MOV     [ES:DI],AL
  183.  
  184. @@NextLine:     ADD     [LineCount],96
  185.                 ADD     DI,_SCREENWIDTH
  186.                 POP     CX
  187.                 LOOP    @@NextLineScrl
  188.  
  189.                 POP     DX
  190.                 POP     BX                      ;; Restore Registers
  191.                 POP     CX
  192.                 POP     ES
  193.                 POP     AX
  194.                 RET
  195. ENDP
  196.         ENDS
  197. ;█████████████████████████████████████████████████████████████████████████████
  198.         DATASEG
  199.  
  200. Counter         DW      0
  201.  
  202. LineCount       DW      0
  203. ScrollerPixPos  DW      0
  204. ScrollerPos     DW      0
  205. ScrollerText    DB      "  Blue Nose Productions...   ",0
  206.  
  207. LABEL           Font
  208. INCLUDE         "768_8_HI.INC"
  209.         ENDS
  210. ;█████████████████████████████████████████████████████████████████████████████
  211. END
  212.