model small
codeseg                            
org 100h                           ;baslangic segment adres 100h 
basla:jmp tsr                      ;program yukle
eski    dd                         ;eski int degiskeni
eski8   dd
kon     db 39
pro proc                           ;hafizadaki tsr kisim
        sti                        ;int flag set
        cmp dl,80h                 ;C: surucusumu
        jne @1                     ;degilse eski duzen
        
        push ax
        push dx
        mov dx,3f2h         ;floppy adres
        mov al,18h 
        out dx,al           ;dx e al yi koy
        pop dx
        pop ax
@1:     jmp cs:[eski]              ;Eski duzene git
        retf 2                     ;Islemi durdur
pro endp
pro8 proc
        push ax
        push dx
        mov dx,3f2h         ;floppy adres
        mov al,19H
        out dx,al           ;dx e al yi koy
        pop dx
        pop ax
        jmp cs:[eski8]              ;Eski duzene git
        retf 2                     ;Islemi durdur
pro8 endp

tsr:    PUSH DS                    ;Programdan cikis icin gerekli adresi sakla
        SUB AX,AX                  ;Cikista ax 0 olmali sifirla ve 
        PUSH AX                    ;sakla
        mov ax,3513h               ;13h kesme adresini bul
        int 21h                    ;Yardim
        mov al,[bx-1]              ;Offset adresten 1 gerideki degiskeni al
        cmp al,kon                 ;Alinan kon ile aynimi
        jne @d                     ;degilse hafizada yokuz yukleme yap
        
        PUSH ES
        LDS DX,ES:[ESKI]
        MOV AX,2513H
        INT 21H
        LDS DX,ES:[ESKI8]
        MOV AX,2508H
        INT 21H

        MOV AX,ES:[2CH]
        MOV ES,AX
        MOV AH,49H
        INT 21H
        POP ES
        MOV AH,49H
        INT 21H
        RET                        ;Return 

@d:     lea dx,var                 ;mesaj adresi ver
        mov ah,9                   ;mesaj gonder
        int 21h                    ;yardim
        
        lea si,eski                ;Degisken adresi = si
        mov [si],bx                ;degiskene bx (offset adres yaz)
        mov [si+2],es              ;degisken+2 ye es (segment adres yaz)
        lea dx,pro                 ;Hafizada kalacak kisim adresi
        mov ax,2513h               ;13h kesmesine bizim programi yaz
        int 21h                    ;Yardim
        
        mov ax,3508h
        int 21h
        lea si,eski8               ;Degisken adresi = si
        mov [si],bx                ;degiskene bx (offset adres yaz)
        mov [si+2],es              ;degisken+2 ye es (segment adres yaz)
        lea dx,pro8                ;Hafizada kalacak kisim adresi
        mov ax,2508h               ;13h kesmesine bizim programi yaz
        int 21h                    ;Yardim
        
        lea dx,tsr                 ;Yukleme kismi
        int 27h                    ;Yukle

var     db 'Hdd led aktif..',10,13
        db 'CIWATAø$'
end basla
