home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / mslang / as / clr.asm < prev    next >
Assembly Source File  |  1984-05-30  |  4KB  |  121 lines

  1.     PAGE   60,132
  2. ;  CLR.ASM   05/29/84
  3. ;  Subroutine called by a basic program to scroll a window.
  4. ;
  5. ;
  6. DGROUP    GROUP    DATASEG
  7. DATASEG SEGMENT PARA PUBLIC 'DATA'
  8. FUNCT    DW    0        ;function 1=6,0=7
  9. FG_COLR DW    0        ;forground color
  10. BG_COLR DW    0        ;backround color
  11. LINES    DW    0        ;number of lines to scroll or 0 for clear
  12. ULROW    DW    0        ;upper left row
  13. ULCOL    DW    0        ;upper left column
  14. LRROW    DW    0        ;lower right row
  15. LRCOL    DW    0        ;lower left column
  16. ATTRIB    DB    0        ;temp hold for attribute byte
  17. CALNU    DB    0        ;temp hold for call function 6 or 7
  18. DATASEG ENDS
  19. ;
  20. CSEG    SEGMENT 'CODE'
  21.     ASSUME    CS:CSEG
  22.     PUBLIC CLR
  23. CLR    PROC    FAR
  24.     PUSH    BP        ;BP unknown (don't care)
  25.     MOV    BP,SP        ;set base for parm list
  26.     PUSH    DS        ;DS -> basic work area
  27.     PUSH    ES        ;ES -> basic work area
  28.     MOV    AX,DATASEG    ;establish data addressability
  29.     MOV    DS,AX        ;now DS -> my data
  30.     ASSUME    DS:DATASEG
  31. ;
  32. ;
  33.     MOV    SI,SS:[BP+6]   ;get addr of parameter
  34.     MOV    AX,ES:[SI]    ;get value of parm
  35.     MOV    FUNCT,AX
  36.     MOV    SI,SS:[BP+8]   ;get addr of parameter
  37.     MOV    AX,ES:[SI]    ;get value of parm
  38.     MOV    BG_COLR,AX
  39.     MOV    SI,SS:[BP+10]    ;get addr of parameter
  40.     MOV    AX,ES:[SI]    ;get value of parm
  41.     MOV    FG_COLR,AX
  42.     MOV    SI,SS:[BP+12]    ;get addr of parameter
  43.     MOV    AX,ES:[SI]    ;get value of parm
  44.     MOV    LINES,AX
  45.     MOV    SI,SS:[BP+14]    ;get addr of parameter
  46.     MOV    AX,ES:[SI]    ;get value of parm
  47.     MOV    ULROW,AX
  48.     MOV    SI,SS:[BP+16]    ;get addr of parameter
  49.     MOV    AX,ES:[SI]    ;get value of parm
  50.     MOV    ULCOL,AX
  51.     MOV    SI,SS:[BP+18]     ;get addr of parameter
  52.     MOV    AX,ES:[SI]    ;get value of parm
  53.     MOV    LRROW,AX
  54.     MOV    SI,SS:[BP+20]     ;get addr of parameter
  55.     MOV    AX,ES:[SI]    ;get value of parm
  56.     MOV    LRCOL,AX
  57. ;
  58.     MOV    AX,1
  59.     SUB    LRROW,AX    ;convert 1-80 cols
  60.     SUB    LRCOL,AX    ; and 1-25 rows into
  61.     SUB    ULROW,AX    ; 0-79 cols and
  62.     SUB    ULCOL,AX    ; 0-24 rows
  63. ;
  64. ;  change forground & backround colors into single attribute byte
  65. ;
  66.     MOV    BX,FG_COLR    ;move foreground color to bx
  67.     MOV    AL,BL        ;move lower byte to al
  68.     MOV    BX,BG_COLR    ;move backround color to bx
  69.     MOV    AH,BL        ;move lower byte to ah
  70.     CMP    AL,15        ;check for color > 15 ie blinking
  71.     JG    BLNK        ;if > 15 then set blink bit
  72.     AND    AL,15        ;set normal fg color
  73.     JMP    N_BLNK        ;
  74. BLNK:    OR    AL,128        ;set blink bit 7
  75.     AND    AL,143        ;zero out bit 6,5,4 used for backround
  76. N_BLNK: AND    AH,7        ;zero out bit 7,6,5,4,3 used for forground
  77.     MOV    CL,4        ;4 bit shift count
  78.     SHL    AH,CL        ;shift right 3 bits to pos 6,5,4
  79.     OR    AL,AH        ;combine for & back to form attribute byte
  80.     MOV    ATTRIB,AL    ;move it to STORAGE
  81.  
  82. ;
  83. ;   convert 1 and 0 to 6 and 7 for routine call
  84. ;
  85.     MOV    BX,FUNCT    ;move function into bx
  86.     CMP    BL,0        ;compare to one
  87.     JG    F6        ;if 1 then function is 6
  88.     MOV    AH,7H        ;set function 7
  89.     JMP    OUT1        ;jump around
  90. F6:    MOV    AH,6H        ;set function 6
  91. OUT1:    MOV    CALNU,AH    ;move it to storage
  92. ;
  93. ;
  94. ;  set up for bios rom call 10 function 6 (scroll up )
  95. ;
  96.     PUSH    BX
  97.     MOV    BX,LINES    ;set # of lines to scroll or 0 to clear
  98.     MOV    AL,BL        ;put in pass register
  99.     MOV    BX,ULROW    ;set upper left row of block 0-24
  100.     MOV    CH,BL        ;put in pass register
  101.     MOV    BX,ULCOL    ;set upper left column of block 0-79
  102.     MOV    CL,BL        ;put in pass register
  103.     MOV    BX,LRROW    ;set lower right row of block 0-24
  104.     MOV    DH,BL        ;put in pass register
  105.     MOV    BX,LRCOL    ;set lower right column of block 0-79
  106.     MOV    DL,BL        ;put in pass register
  107.     MOV    BL,CALNU    ;set call number 6 to scroll up 7 down
  108.     MOV    AH,BL        ;put in pass register
  109.     MOV    BL,ATTRIB    ;set color attribute byte
  110.     MOV    BH,BL        ;put in pass register
  111.     INT    10H        ; make bios call
  112.     POP    BX
  113. ;
  114. FINISH: POP    ES
  115.     POP    DS
  116.     POP    BP
  117.     RET    16        ;return to basic
  118. CLR    ENDP
  119. CSEG    ENDS
  120.     END
  121.