home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / QBAS / WNDTOOL5.ZIP / SAVEWIND.ASM < prev    next >
Assembly Source File  |  1989-05-24  |  6KB  |  119 lines

  1. ;Title:Savewind
  2.  
  3. BASIC_SETUP MACRO
  4.                PUSH    BP
  5.                MOV     BP,SP
  6.  
  7.                PUSH    AX
  8.                PUSH    BX
  9.                PUSH    CX
  10.                PUSH    DX
  11.  
  12.                PUSH    SI
  13.                PUSH    DI
  14.                PUSH    DS
  15.                PUSH    ES
  16.                ENDM
  17.  
  18. BASIC_CLEANUP MACRO
  19.                CLD
  20.                POP     ES
  21.                POP     DS
  22.                POP     DI
  23.                POP     SI
  24.                POP     DX
  25.                POP     CX
  26.                POP     BX
  27.                POP     AX
  28.                POP     BP
  29.                ENDM
  30.  
  31. Stack          STRUC
  32. Bpsav          DW       ?                                       ;saved by us
  33. Retoff         DW       ?                                       ;from callf
  34. Retseg         DW       ?                                       ;from basic
  35. Array          DW       ?                                       ;pointer to array in ds
  36. Col2           DW       ?                                       ;get characters from row1,col1
  37. Row2           DW       ?                                       ;to row2,col2
  38. Col1           DW       ?                                       ;
  39. Row1           DW       ?                                       ;
  40. Stack          ENDS
  41.  
  42. Code           SEGMENT  PUBLIC 'CODE'
  43.                ASSUME   CS:Code,DS:Code
  44.  
  45.                PUBLIC   Savewind
  46.  
  47. ;
  48. Savewind       PROC     FAR
  49.                Basic_setup
  50.  
  51.                MOV      SI,[BP].ROW2                            ;si -> row2
  52.                MOV      AX,[SI]                                 ;ax has last row
  53.                MOV      SI,[BP].ROW1                            ;si -> row1
  54.                MOV      BX,[SI]                                 ;form # of rows in ax
  55.                SUB      AX,BX                                   ;ax=rows-1
  56.                INC      AX                                      ;ax=rows
  57.                MOV      SI,[BP].COL2                            ;si -> col2
  58.                MOV      CX,[SI]                                 ;now form # of cols in cx
  59.                MOV      SI,[BP].COL1                            ;si -> col1
  60.                MOV      BX,[SI]                                 ;bx=col1
  61.                SUB      CX,BX                                   ;cx has # of cols-1
  62.                INC      CX                                      ;cx has # of cols
  63.                MOV      BX,AX                                   ;bx=# of rows
  64.  
  65.                PUSH     DS                                      ;save ds
  66.                POP      ES                                      ;es points to basic's ds
  67. ;              PUSH     ES                                      ;restore on stack
  68.                MOV      SI,[BP].ROW1                            ;si -> row1
  69.                MOV      DX,[SI]                                 ;si will -> regen buffer
  70.                DEC      DX                                      ;make zero-rel
  71.                MOV      AX,160                                  ;multiplier
  72.                MUL      DL                                      ;ax=offset to row
  73.                MOV      SI,[BP].COL1                            ;si -> col1
  74.                MOV      SI,[SI]
  75.                DEC      SI                                      ;make col zero-rel
  76.                SHL      SI,1                                    ;si=offset in row to col
  77.                ADD      SI,AX                                   ;total offset in si
  78.  
  79.                MOV      DI,[BP].ARRAY                           ;di points to array element 0
  80.  
  81.                CALL     Getvid                                  ;get video address
  82.  
  83.                MOV      DS,AX                                   ;
  84. loop_back:
  85.                PUSH     CX                                      ;save col count
  86.                REP      MOVS WORD PTR ES:[DI],WORD PTR [SI]
  87.                ADD      SI,160                                  ;new row
  88.                POP      CX                                      ;cx=col count
  89.                SUB      SI,CX                                   ;move back to right place
  90.                SUB      SI,CX                                   ;twice because 2 bytes per char
  91.                DEC      BX                                      ;row count
  92.                JNZ      Loop_back
  93.  
  94.                Basic_cleanup
  95.  
  96.                RET      10                                      ;get rid of 5 parms
  97. Savewind       ENDP
  98.  
  99. ;
  100. Getvid         PROC     NEAR
  101.                PUSH     BX                                      ;save bx register
  102.                MOV      AX,0                                    ;clear ax
  103.                MOV      AH,15                                   ;video mode bios call
  104.                INT      010H                                    ;do the bios call
  105.                CMP      AL,07H                                  ;see if it's monochrome
  106.                JZ       Ismono                                  ;yes
  107.  
  108.                MOV      AX,0B800H                               ;set it up for graphics
  109.                JMP      Endvid                                  ;exit
  110. ismono:
  111.                MOV      AX,0B000H                               ;set it up for monochrome
  112. endvid:
  113.                POP      BX                                      ;restore bx register
  114.                RET
  115. Getvid         ENDP
  116.  
  117. Code           ENDS
  118.                END
  119.