

DOSSEG
.MODEL    SMALL
 
.STACK
 
.DATA
 
     PUBLIC    SECTOR_OFFSET
;-----------------------------------------------;
; SECTOR_OFFSET es el desplazamiento de la mi-  ;
; tad del sector, dentro del sector completo.   ;
; Tiene que ser un m£ltiplo de 16, y no puede   ;
; ser mayor de 256.                             ;
;-----------------------------------------------;
SECTOR_OFFSET  DW      0
 
     PUBLIC    CURRENT_SECTOR_NO, DISK_DRIVE_NO
CURRENT_SECTOR_NO      DW     0         ;Inicialmente sector 0
DISK_DRIVE_NO          DB     0         ;Inicialmente unidad A:
 
     PUBLIC    LINES_BEFORE_SECTOR, HEADER_LINE_NO
     PUBLIC    HEADER_PART_1, HEADER_PART_2
;-----------------------------------------------;
; LINES_BEFORE_SECTOR es el n£mero de l¡neas al ;
; principio de la pantalla despu‚s de presentar ;
; la mitad del sector.                          ;
;-----------------------------------------------;
LINES_BEFORE_SECTOR    DB     2
HEADER_LINE_NO         DB     0
HEADER_PART_1          DB     'Disco ',0
HEADER_PART_2          DB     '         Sector ',0
     PUBLIC    PROMPT_LINE_NO, EDITOR_PROMPT
PROMPT_LINE_NO         DB     21
EDITOR_PROMPT          DB     'Pulse tecla de funci¢n o Intro'
                       DB      ' car cter o byte hex:   ',0
 
.DATA?
 
     PUBLIC    SECTOR
;-----------------------------------------------;
; El sector de entrada (sobre 8192 bytes) es    ;
; almacenado en esta parte de la memoria.       ;
;-----------------------------------------------;
SECTOR    DB   8192 DUP (?)
 
.CODE
 
     EXTRN     CLEAR_SCREEN:PROC, READ_SECTOR:PROC
     EXTRN     INIT_SEC_DISP:PROC, WRITE_HEADER:PROC
     EXTRN     WRITE_PROMPT_LINE:PROC, DISPATCHER:PROC
     EXTRN     INIT_WRITE_CHAR:PROC
DISK_PATCH     PROC
     MOV  AX,DGROUP           ;Pone el segmento de datos en AX
     MOV  DS,AX               ;Pone DS para que apunte a los datos
     CALL INIT_WRITE_CHAR
     CALL CLEAR_SCREEN
     CALL WRITE_HEADER
     CALL READ_SECTOR
     CALL INIT_SEC_DISP
     LEA  DX,EDITOR_PROMPT
     CALL WRITE_PROMPT_LINE
     CALL DISPATCHER
 
     MOV  AH,4Ch              ;Regresa al DOS
     INT  21h
DISK_PATCH     ENDP
 
 
     END  DISK_PATCH


