Перехватываю нажатие, ставлю флаг "fileflag", потом по таймеру создаю файл.
Файл не создается. В обработчик таймера входит.
Не могу понять в чем дело. Подскажите, пожалуйста
Код: Выделить всё
.model tiny
CSEG segment para
assume cs:CSEG
.386
org 100h
.startup
jmp setup
int09old dd ?
int28old dd ?
fileflag db 0h
addr db 'c:\file.dat' , 0
MES db 2000 dup(?)
;TIMER!
int28new proc
push ds ax dx bx
cmp fileflag, 0h
jz int28ret
mov fileflag, 0h
mov dx, offset addr ;Create file
mov cx, 0
mov ah, 3dh
mov al, 2h
int 21h
mov bx, ax
mov ah, 3eh ;Close file
int 21h
int28ret:
pushf
call cs:[int28old]
pop bx dx ax ds
iret
int28new endp
;INT09H
int09new proc
push ds ax dx bx
mov ax, 0040h
mov ds, ax
test byte ptr ds:[0017h], 00000100b
jz no_ctrl
in al, 60h
cmp al, 1fh
je ctrl_s
cmp al, 2dh
je ctrl_x
;NO ctrl
no_ctrl:
pop bx dx ax ds
jmp cs:[int09old]
ctrl_s:
mov fileflag, 01h
int09ret:
mov ah, 2
mov dl, fileflag
add dl, 30h
int 21h
pushf
call cs:[int09old]
mov ah, 0
int 16h
pop bx dx ax ds
iret
;EXIT
ctrl_x:
mov ax, 2509h
mov dx, word ptr int09old
mov ds, word ptr int09old+2
int 21h
mov ax, 2528h
mov dx, word ptr int28old
mov ds, word ptr int28old+2
int 21h
mov ah, 2
mov dl, 34h
int 21h
mov es, cs:[2Ch]
mov ah, 49h
int 21h
push cs
pop es
mov ah, 49h
int 21h
jmp int09ret
int09new endp
end_resident label BYTE
;SETUP
setup:
mov ax, 3563h
int 21h
cmp bx, 0AEh
jne gosetup
mov ah, 2
mov dl, 39h
int 21h
mov ax, 4c00h
int 21h
gosetup:
mov ah, 2
mov dl, 30h
int 21h
mov ax, 2563h
mov dx, 0aeh
int 21h
mov ah, 2
mov dl, 31h
int 21h
mov ax, 3509h
int 21h
;SAVE OLD 09H
mov word ptr int09old, bx
mov word ptr int09old+2, es
mov ah, 2
mov dl, 32h
int 21h
mov ax, 2509h ;NEW 09H
lea dx, int09new
int 21h
;SAVE OLD 28H
mov ax, 3528h
mov word ptr int28old, bx
mov word ptr int28old+2, es
;NEW 28H
mov ax, 2528h
lea dx, int28new
int 21h
mov ah, 2
mov dl, 33h
int 21h
mov ax, 3100h
lea dx, end_resident + 15
mov cx, 4
shr dx, cl
int 21h
CSEG ends
end