

.MODEL    SMALL
 
.CODE
 
.DATA
     EXTRN     SECTOR:BYTE
     EXTRN     SECTOR_OFFSET:WORD
     EXTRN     PHANTOM_CURSOR_X:BYTE
     EXTRN     PHANTOM_CURSOR_Y:BYTE
.CODE
;-----------------------------------------------------------------------;
; Este procedimiento escribe un byte en SECTOR, en la posici¢n de me-   ;
; moria a la que apunta el cursor fantasma.                             ;
;                                                                       ;
; A la entrada:   DL   Byte que se va a escribir en SECTOR.             ;
;                                                                       ;
; El desplazamiento (OFFSET) se calcula con la f¢rmula:                 ;
;   OFFSET = SECTOR_OFFSET + (16 * PHANTOM_CURSOR_Y) + PHANTOM_CURSOR_X ;
;                                                                       ;
; Lee:         PHANTOM_CURSOR_X, PHANTOM_CURSOR_Y, SECTOR_OFFSET        ;
; Escribe:     SECTOR                                                   ;
;-----------------------------------------------------------------------;
WRITE_TO_MEMORY        PROC
     PUSH AX
     PUSH BX
     PUSH CX
     MOV  BX,SECTOR_OFFSET
     MOV  AL,PHANTOM_CURSOR_Y
     XOR  AH,AH
     MOV  CL,4                ;Multiplica PHANTOM_CURSOR_Y por 16
     SHL  AX,CL
     ADD  BX,AX               ;BX = SECTOR_OFFSET + (16 * Y)
     MOV  AL,PHANTOM_CURSOR_X
     XOR  AH,AH
     ADD  BX,AX               ;Esta es la direcci¢n
     MOV  SECTOR[BX],DL       ;Ahora salva el byte
     POP  CX
     POP  BX
     POP  AX
     RET
WRITE_TO_MEMORY          ENDP
 
     PUBLIC    EDIT_BYTE
     EXTRN     SAVE_REAL_CURSOR:PROC, RESTORE_REAL_CURSOR:PROC
     EXTRN     MOV_TO_HEX_POSITION:PROC, MOV_TO_ASCII_POSITION:PROC
     EXTRN     WRITE_PHANTOM:PROC, WRITE_PROMPT_LINE:PROC
     EXTRN     CURSOR_RIGHT:PROC, WRITE_HEX:PROC, WRITE_CHAR:PROC
.DATA
     EXTRN     EDITOR_PROMPT:BYTE
.CODE
;-----------------------------------------------------------------------;
; Este procedimiento cambia un byte en la memoria y en la pantalla.     ;
;                                                                       ;
; A la entrada   DL    El byte que se va a escribir en SECTOR,          ;
;                      y que se va a cambiar en la pantalla.            ;
;                                                                       ;
; Usa:    SAVE_REAL_CURSOR, RESTORE_REAL_CURSOR                         ;
;         MOV_TO_HEX_POSITION, MOV_TO_ASCII_POSITION                    ;
;         WRITE_PHANTOM, WRITE_PROMPT_LINE, CURSOR_RIGHT                ;
;         WRITE_HEX, WRITE_CHAR, WRITE_TO_MEMORY                        ;
; Lee:    EDITOR_PROMPT                                                 ;
;-----------------------------------------------------------------------;
EDIT_BYTE PROC
     PUSH DX
     CALL SAVE_REAL_CURSOR
     CALL MOV_TO_HEX_POSITION      ;Pasa el n£mero hexadecimal de la
     CALL CURSOR_RIGHT             ; pantalla hexadecimal
     CALL WRITE_HEX                ;Imprime el nuevo n£mero
     CALL MOV_TO_ASCII_POSITION    ;Se mueve el car. de la ventana ASCII
     CALL WRITE_CHAR               ;Imprime el nuevo car cter
     CALL RESTORE_REAL_CURSOR      ;Mueve el cursor a donde estaba
     CALL WRITE_PHANTOM            ;Vuelve a imprimir el cursor fantasma
     CALL WRITE_TO_MEMORY          ;Salva este nuevo byte en SECTOR
     LEA  DX,EDITOR_PROMPT
     CALL WRITE_PROMPT_LINE
     POP  DX
     RET
EDIT_BYTE ENDP
 
 
     END

