3Д13 без ретри-аборт-игноре - как?
Как сделать сабж? Хочется, чтобы 1 - не выдавалась дурацкая надпись ретри-аборт-игноре и иже с ними, 2 - чтобы таки я смог узнать, что была-не была ошибка. Тип ошибки узнать не требуется.
Плиз подскажите куда идти (по какому урлю) или так скажите. =)
3Д13 без ретри-аборт-игноре - как?
Привет lvd!
Отвечаю на ваше письмо от 24.09.2005, тогда писал(а) lvd
к All, а было тогда на часах 22:44:14.
Цитата:
l> Как сделать сабж? Хочется, чтобы 1 - не выдавалась дурацкая надпись
l> ретри-аборт-игноре и иже с ними, 2 - чтобы таки я смог узнать, что была-не
l> была ошибка. Тип ошибки узнать не требуется.
l> Плиз подскажите куда идти (по какому урлю) или так скажите. =)
zx.pk.ru программирование!!!
Всего хорошего,
Ilya.
\Boundless\Jack Ketch\Di\Life Screen\Beep\Girl\
Таймыр 2.00 (c) Евгений Варнавский
Re: 3Д13 без ретри-аборт-игноре - как?
Hемедленно нажми на RESET, lvd!
On Sat, 24 Sep 05 21:44:14 +0400, lvd wrote:
Цитата:
l> Как сделать сабж? Хочется, чтобы 1 - не выдавалась дурацкая надпись
l> ретри-аборт-игноре и иже с ними, 2 - чтобы таки я смог узнать, что была-не была
l> ошибка. Тип ошибки узнать не требуется.
В регистрах всё как при вызове #3D13. Внешние переменные:
int_mode -- режим прерываний: 0, 1, 2.
in_trdos -- не равно 0 при вызове функций tr-dos.
Hа выходе: флаг C установлен если произошла ошибка (была перехвачена),
в противном случае флаг C сброшен. Тип ошибки не возвращается, но
там вариантов-то по моему и не особо много: ошибка чтения/записи,
защита записи. Можно посмотреть в переменные TR-DOS. Да, разумеется
сами функции #3D13 могут возвращать признак ошибки без дурацкой надписи
и проверять всё равно надо (поиск файла, например), для чтения-записи
секторов не актуально конечно.
EXPORT global trdos
; call 0x3d13 in safe way
; CF=1 признак фатального завершения
trdos:
ex af, af'
exx
ld hl, 0x5cc2
ld a, (hl)
push af
ld (hl), 0xc3
ld hl, (0x5cc3)
push hl
ld hl, trdos_catch
ld (0x5cc3), hl
ld hl, (0x5c3d)
push hl
ld hl, trdos_fail
push hl
ld hl, 0
ld (0x5d0f), hl
add hl, sp
ld (trdos_sp), hl
ld (0x5c3d), hl
ld hl, in_trdos
ld (hl), 1 ; for im 2
; DOES NOT WORK!
im 1
ld hl, 0x2758
ld iy, 0x5c3a
exa
exx
call 0x3d13
exa
xor a
ld (in_trdos), a
ld a, (int_mode)
cp 2
jr c,trdos_im0
im 2
trdos_im0:
exx
pop hl
pop hl
ld (0x5c3d), hl
pop hl
ld (0x5cc3), hl
pop af
ld (0x5cc2), a
ld hl, 0x2758
exx
exa
or a
ret
trdos_catch:
ex (sp), hl
push af
push de
push hl
ld a, l
or 0x05
ld l, a
ld de, 0-0x0d6f ; 0d6e, 0d6b
adc hl, de
jr z, trdos_fail0
pop hl
pop de
pop af
ex (sp), hl
ret
trdos_fail0:
ld sp, 0
trdos_sp equ $-2
ret
trdos_fail:
xor a
ld (in_trdos), a
ld a, (int_mode)
cp 2
jr c,trdos_im1
im 2
trdos_im1:
pop hl
ld (0x5c3d), hl
pop hl
ld (0x5cc3), hl
pop af
ld (0x5cc2), a
scf
ret
ENDEXP
Re: 3Д13 без ретри-аборт-игноре - как?
Hемедленно нажми на RESET, Ilya Razyev!
On Mon, 26 Sep 05 08:42:10 +0400, Ilya Razyev wrote:
Цитата:
l>> Плиз подскажите куда идти (по какому урлю) или так скажите. =)
IR> zx.pk.ru программирование!!!
zxnet://code.zx
Re: 3Д13 без ретри-аборт-игноре - как?
Hемедленно нажми на RESET, Dratov Denis!
On Sun, 25 Sep 05 17:41:08 +0400, Dratov Denis wrote:
Цитата:
Paw>> Смотри статью "Обработка дисковых ошибок TR-DOS" на нашем сайте.
DD> Hу это в общем примерно то, о чем я говорил, но ведь это не совсем полное кроме
DD> RIA/ReadOnly еще бываю ошибки типа кривого формата, или отсутствие его, которое
DD> можно уже _уточнить_ через порт состояния.
От кривого (например MS-DOS) формата TR-DOS может вообще умереть.
И тут ничего не поделать.