;--------------------------------------------------------------------------- 
; MED_READ_BYTE 
;  Эта программа берет 2 байта из буфера регенерации, сличает с текущим цветом 
;  (передним) и помещает соответствующий 1/0 бит образца в текущую позицию 
;  области сохранения. 
; Вход: 
;  SI,DS - указатель области буфера регенерации 
;     BX - расширенный цвет символа (передний цвет) 
;     BP - указатель области сохранения 
; Выход: 
;     BP перемещен за область сохранения 
;-------------------------------------------------------------------------- 
S23     PROC    NEAR 
        MOV     AH,[SI]       ;Получить первый байт 
        MOV     AL,[SI+1]     ;Получить второй байт 
        MOV     CX,0C000H     ;2 бита маски для проверки входов 
        MOV     DL,0          ;Регистр результата 
S24: 
        TEST    AX,CX         ;Это поле фона (атрибут)? 
        CLC                   ;Очистить перенос, надеясь что да 
        JZ      S25           ;Если 0, это фон 
        STC                   ;Нет, установить перенос 
S25:    RCL     DL,1          ;Задвинуть бит в результат 
        SHR     CX,1 
        SHR     CX,1          ;Сдвинуть маску вправо на 2 бита 
        JNC     S24           ;Выполнять это снова, пока маска существует 
        MOV     [BP],DL       ;Запомнить результат в области сохранения 
        INC     BP            ;Привести в соответствие указатель 
        RET                   ;Все сделано 
S23     ENDP 
 
 
;--------------------------------------------------------------------------- 
; V4_POSITION 
;  Эта программа преобразует позицию курсора, содержащуюся в ячейке памяти 
;  в смещение в области буфера регенерации, выделяя байт на символ. 
;  Для графики среднего разрешения число должно быть удвоено. 
; Вход - ячейка CURSOR_POSN 
; 
; Выход - AX содержит смещение в буфере регенерации 
;-------------------------------------------------------------------------- 
S26     PROC    NEAR 
        PUSH    SI 
        MOV     AL,ACTIVE_PAGE 
        XOR     AH,AH 
        SAL     AX,1 
        MOV     SI,AX 
        MOV     AX,DS:[SI+OFFSET CURSOR_POSN] ;Получить позицию курсора для 
        MOV     T_CURSOR,AL 
        MOV     K_CICL,0 
        POP     SI 
GRAPH_POSN      LABEL  NEAR 
        PUSH    BX                   ;Сохранить регистр 
        MOV     BX,AX                ;Сохранить копию текущего курсора 
        MOV     AL,AH                ;Получить строку в AL 
        MUL     BYTE PTR CRT_COLS    ;Умножить на байт/колонку 
        SHL     AX,1                 ;Умножить на 4, т.к. требуется 
        SHL     AX,1                 ; 4 байта на строку 
        SUB     BH,BH                ;Выделить значение колонки 
        ADD     AX,BX                ;Определить смещение 
        POP     BX                   ;Восстановить указатель 
        RET                          ;Все сделано 
S26     ENDP 
 
        ORG     0F841H 
 
