DOSSEG
.MODEL SMALL
.CODE
 ORG 100h
inicio:         jmp  instalar

antint13        dd   ?
handle          dw   ?
nombre          db   'CARVALHO.GRF',00
error           db   ?
axt             dw   ?
bxt             dw   ?
cxt             dw   ?

;------------------------------------------------------------------------
;  Abrefich abre el fichero de gr ficos.
;
abrefich        PROC NEAR
                cmp  handle,0
                jne  ya_abierto
                push ds
                push ax
                push dx

                push cs
                pop  ds
                mov  dx,offset nombre
                mov  ax,3d00h
                int  21h
                jc   errora
                mov  handle,ax
                jmp  short no_error
errora:         mov  error,1
no_error:       pop  dx
                pop  ax
                pop  ds
ya_abierto:     ret
abrefich        ENDP


;----------------------------------------------------------------------------
; Leefich: Simula la INT 13h para leer de un fichero los gr ficos,
; que el programa original leia de sectores absolutos.
;

leefich         PROC NEAR
                cmp  handle,0
                jne  abierto
                call abrefich
abierto:        push ds
                push dx
                push cx
                push bx
                push ax
                xor  ah,ah
                mov  al,ch
                shl  ax,1
                mov  dl,dh
                xor  dh,dh
                add  ax,dx
                sub  ax,30
                mov  dx,9
                imul dx
                dec  cl
                xor  ch,ch
                add  ax,cx
                mov  dx,512
                imul dx
                mov  cx,dx
                mov  dx,ax
                push bx
                mov  bx,handle
                mov  ax,4200h
                int  21h
                pop  bx
                jc   errorl
                pop  ax
                push ax
                xor  ah,ah
                mov  dx,512
                imul dx
                mov  cx,ax
                push es
                pop  ds
                mov  dx,bx
                mov  bx,handle
                mov  ah,3fh
                int  21h
                jnc  salir
errorl:         mov  error,1
salir:          pop  ax
                pop  bx
                pop  cx
                pop  dx
                pop  ds
                ret
leefich         ENDP

gestor          PROC NEAR
                jmp  short iniciog

identif         db   'TSCLOAD'

iniciog:        mov  error,0
                cmp  ah,0f0h
                jne  cmd1
                call abrefich
                jmp  short fincmd
cmd1:           cmp  ah,0f2h
                jne  cmd2
                call leefich
                jmp  short fincmd

cmd2:           pushf
                call antint13
ajus_flag:      mov  axt,ax
                mov  bxt,bx
                mov  cxt,cx
                pop  ax
                pop  bx
                pop  cx
                pushf
                push bx
                push ax
                mov  ax,axt
                mov  bx,bxt
                mov  cx,cxt
                iret

fincmd:         cmp  error,1
                je   acumon
                clc
                xor  ah,ah
                jmp  ajus_flag
acumon:         stc
                mov  ah,80h
                jmp  ajus_flag
gestor          ENDP

instalar:       jmp  short instali

msg1            db   'Ya hay otro cargador instalado.$'
msg2            db   'Cargador gr ficos CARVALHO instalado correctamente.',0dh,0ah
                db   '(C) 1990 Turbado Soft Corporation.$'

instali:        mov  ax,3513h
                int  21h
                mov  di,bx
                add  di,2
                push cs
                pop  ds
                mov  si,offset identif
                mov  cx,7
                repe cmpsb
                cmp  cx,0
                jne  instal
                mov  dx,offset msg1
                mov  ah,9
                int  21h
                int  20h

instal:         mov  word ptr antint13,bx
                mov  ax,es
                mov  word ptr antint13[2],ax
                push cs
                pop  ds
                mov  dx,offset gestor
                mov  ax,2513h
                int  21h
                mov  dx,offset msg2
                mov  ah,9
                int  21h
                mov  dx,offset instalar
                int  27h
 END inicio
