Важная информация

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 16

Тема: 3Д13 без ретри-аборт-игноре - как?

  1. #1

    По умолчанию 3Д13 без ретри-аборт-игноре - как?

    Как сделать сабж? Хочется, чтобы 1 - не выдавалась дурацкая надпись ретри-аборт-игноре и иже с ними, 2 - чтобы таки я смог узнать, что была-не была ошибка. Тип ошибки узнать не требуется.

    Плиз подскажите куда идти (по какому урлю) или так скажите. =)
    --- Кто съел всю уху?

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Activist
    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    352
    Благодарностей: 0
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от lvd
    Плиз подскажите куда идти (по какому урлю) или так скажите. =)
    Может быть есть определенные статьи по этому делу
    Но я самостоятельно еще в 94м году этот вопрос разгребал когда пытался сделать дсковое меню к PSM.
    Во-первых нужно перехватывать вызов BASIC функций через подмену переменной по адресу #5cc2 (в которой #c9 = ret). Трейсить стек. Через него вызываются разные функции, типа - отчистка экрана, сканирование клавиатуры, вывода символа. Подменять эти функции, собирать строки которые идут на вывод, игнорировать всякие отчистки, сканирования на break и т.д.
    Примерно так

    P.S.: Самому интересно было бы по этому поводу почитать более "научный" материал или посмотреть даже наработки, поскольку механизм универсален.
    Последний раз редактировалось Dexus; 24.09.2005 в 18:36.

  4. #3
    Master
    Регистрация
    04.03.2005
    Адрес
    Ukraine, Kiev
    Сообщений
    792
    Благодарностей: 295
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Talking

    Цитата Сообщение от lvd
    Как сделать сабж? Хочется, чтобы 1 - не выдавалась дурацкая надпись ретри-аборт-игноре и иже с ними, 2 - чтобы таки я смог узнать, что была-не была ошибка. Тип ошибки узнать не требуется.

    Плиз подскажите куда идти (по какому урлю) или так скажите. =)
    Это просто:

    DI
    LD A,63
    LD I,A
    XOR A
    LD (23613),A
    LD HL,51697
    LD (23746),HL
    IM 1
    EI

    Безусловно, переменные ВАСИКА должны быть установленны ... =) После вше-указанных АСМ-строчек ни брейк ни игноры не будут действовать, единственное, при ошибке чтения он будет пытаться читать вечно =)
    AAA

  5. #4
    Master
    Регистрация
    04.03.2005
    Адрес
    Ukraine, Kiev
    Сообщений
    792
    Благодарностей: 295
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Talking

    Цитата Сообщение от Robus
    Это просто:
    единственное, при ошибке чтения он будет пытаться читать вечно =)
    Это я ошибся, он будет читать несколько раз, в зависимости от переменных, а о том была-ли ошибка, нужно почитать описания процедур 3Д13...
    AAA

  6. #5
    Member
    Регистрация
    22.01.2005
    Адрес
    Брест, Беларусь
    Сообщений
    49
    Благодарностей: 0
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Смотри статью "Обработка дисковых ошибок TR-DOS" на нашем сайте.

  7. #6
    Activist
    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    352
    Благодарностей: 0
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Pawel
    Смотри статью "Обработка дисковых ошибок TR-DOS" на нашем сайте.
    Ну это в общем примерно то, о чем я говорил, но ведь это не совсем полное кроме RIA/ReadOnly еще бываю ошибки типа кривого формата, или отсутствие его, которое можно уже _уточнить_ через порт состояния.

  8. #7
    Ilya Razyev (500:3432/13)
    Гость

    По умолчанию 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) Евгений Варнавский

  9. #8
    Kirill Frolov (500:812/1.507)
    Гость

    По умолчанию 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

  10. #9
    Kirill Frolov (500:812/1.507)
    Гость

    По умолчанию 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

  11. #10
    Kirill Frolov (500:812/1.507)
    Гость

    По умолчанию 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 может вообще умереть.
    И тут ничего не поделать.

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •