Old-DOS.ru

ERROR 200

Утилиты >> Инструменты >> Turbo Pascal Pentium II DIV BUG fixing
Главная страница Файлы Игры Поиск Форум Wiki Библиотека Галерея Гостевая Ссылки О проекте

Логин:
Пароль:


Регистрация
Восстановление пароля




+ ОПЕРАЦИОННЫЕ СИСТЕМЫ
   + DOS
      • IBM PC DOS
      + MS-DOS
         • SDK
      • DR-DOS
      • FreeDOS
      • Сборки на базе DOS
      • Расширители DOS
      • Другие платформы
   + OS/2
      • SDK
   + Windows
      + Windows 1.x-3.x
         • Патчи и дополнения к Win1.x-3.x
      + Windows 9x
         • Патчи и дополнения к Win9x
      + Windows NT
         • Патчи и дополнения к WinNT+
      • Сборки на базе Windows
      • SDK
   • Linux/Unix
   • СР/М
   • Другие операционные системы
   • Загрузочные диски
   • Готовые образы операционных систем
   • Многозадачные оболочки
   + Системные программы
      • Твикеры
      • Русификаторы
      + Утилиты
         • Оборудование
         • Работа с CD/DVD
         • Инсталляторы
         • Автоматизация, скрипты, BAT-файлы
         • Системные
         + Инструменты
            • Turbo Pascal Pentium II DIV BUG fixing
         • Прочее
      • Замедлители
      • Тесты оборудования и системы
      • Обновления
   + Драйверы
      • Звук
      • Видео
      • Мыши
      • CD/DVD
      • Клавиатура
      • Принтеры
      • USB
      • Сеть
      • Память
      • Материнские платы
      • Периферия
      • Другое
   • OS BuildList
+ ЭМУЛЯТОРЫ И СИМУЛЯТОРЫ
   • Консоли
   • Эмуляторы компьютеров
   • Инструменты для эмуляторов
+ ПРОГРАММИРОВАНИЕ
   + Assembler
      • Disassembler
   • Pascal/Delphi
   • C/C++
   • Basic/Visual Basic
   • Фортран
   • SDK & DDK, etc.
   • Декомпиляторы
   • Форт
   • Генераторы блок-схем
   • Лисп
   • Пролог
   • Java
   + Отладчики программ (DEBUGGERs)
      • Трассировщики
   • Другие языки программирования
   • Справочники и учебники
+ BIOS, прошивки
   • Прошивки
   • Редакторы BIOS
   • Прошивальщики
+ ДИСКИ И ФАЙЛЫ
   • Файловые менеджеры
   • Каталогизаторы
   • Копировщики
   • Поиск файлов, текста, байтов
   • Сканирование каталогов
   • Архиваторы
   • EXE-упаковщики
   • EXE-распаковщики
   • Восстановление информации и резервное копирование (бэкап)
   • HDD-утилиты
   • Дискеты
   • Разное
• СУБД
+ ОФИС
   • Интегрированные программные пакеты
   • Издательские системы
   • Электронные таблицы
   • Редакторы текста
   • Редакторы HTML
   + Утилиты для работы с текстом
      • OCR - распознавание текста
      • Просмотр документов
      • Печать
      • Перекодировка
      • Сравнение текстов
      • Шрифты
      • Работа со шрифтами
   • Словари и переводчики
   • Правописание
   • Органайзеры
   • Создание презентаций
   • Бизнес
   • Разное
+ ОБРАЗОВАНИЕ И НАУКА
   + Информатика
      • Программирование
   + Инженерное ПО
      + Расчётные задачи
         • Пар и вода
      + ЧПУ
         • ЧПУ Редакторы
         • DNC
      + САПР
         + Механика - моделирование 2D/3D
            • AutoCAD и утилиты для AutoCAD'а
         • Строительство
         • Электроника, радио- и электротехника
   • Тестирование знаний и навыков
   + Обучающие программы
      • Музыка
   + Математика
      • Калькуляторы
      • Эмуляторы калькуляторов
   • Физика
   • Химия
   + Электроника и электротехника
      • ПЛИС, PAL
      • Справочники по электронике
      • Расчётные утилиты
      • Программаторы
      • Микроконтроллеры
   • Астрономия
   • Астрология
   • География и картография
   + Биология и медицина
      • Психология
   • История и политология
   • Лингвистика
   • Гаданье на кофейной гуще
   • Справочники разные
+ БЕЗОПАСНОСТЬ
   • Антивирусы
   • Шифры и пароли
+ ИНТЕРНЕТ И СЕТИ
   • Эмуляторы терминала
   • Браузеры
   • Почтовые клиенты
   • IM-меседжеры
   • Звонилки
   • Кодеры/декодеры UUE
   • Пейджеры
   • FTP
   • BBS и FIDO
   • Работа с СОM/LPT
   • LAN
   • Удалённое управление
   • Факсы
   • Работа с мобильными телефонами
   • Разное
+ МУЛЬТИМЕДИА
   + Графика
      • Просмотр графики
      • Редакторы графики
      • Грабберы графики
      • Конвертеры
   + Звук и видео
      • Проигрыватели (плееры) аудио и видео
      • Редакторы аудио и видео
      • Грабберы (захват) аудио и видео
      • Синтез речи
      • Конвертеры
      • Кодеки
   • Разное
+ РАБОЧИЙ СТОЛ
   • Календари
   • Часы
   • Напоминалки
   • Скринсейверы
   • DEMO
   • Программы-шутки
   • Разное
+ АНДЕРГРАУНД
   + Hack tools
      • Крякеры
      • CRK-утилиты
      • Генераторы лоадеров (Loader generators)
      • Патчи, коды
      • Детекторы
   • Стеганография
   • Шестнадцатеричные редакторы
   • Вирусы
• РАЗНОЕ
• ФЕЙКИ, ПОДДЕЛКИ, ХИМЕРЫ
• --НА УДАЛЕНИЕ
• КАК ЗАГРУЖАТЬ ФАЙЛЫ НА Old-DOS




ERROR 200
ОписаниеИнформация
Маленькая резидентная программа
(размер кода - 38 байтов, резидент - 14 байтов)
- для борьбы с "runtime error 200" без перекомпиляции или применения патчей.

Подлинно крутая программа. Высший пилотаж, непобоюсь.
Однозначно - маст хэв.

Пояснение алгоритма её работы:

- При запуске эта утилита перехватывает <int 21h/2500h> (DOS SET VECTOR 0) и в дальнейшем запрещает таким образом перехват <int0> другими программами, если они используют для этого <int 21h/2500h> (DOS SET VECTOR 0). А глючная паскалевская библиотека CRT в TP7 именно этой функцией и пользуется. Следовательно, программа, в которой эта "Ошибка 200", при запуске не перехватит прерывание <int 0> (divide by zero error). Зато его перехватывает при запуске эта резидентная утиль. По приходе прерывания "divide by zerro" (int 0) эта программа увеличивает на единичку значение CX, (в котором при ошибке было изначально 37h ), и делает <iret> на адрес инструкции, которая вызвала прерывание <int 0> - это инструкция <div cx> в паскалевской библиотеке CRT. Если это увеличенное на 1 значение делителя в CX снова вызовет переполнение результата (int 0), то делитель (CX) в обработчике этой резидентной утилиты снова увеличивается на 1 и снова выполняется <iret> на инструкцию <div cx>, которая вызвала это прерывание.Так и будет это прерывание генерироваться на инструкции <div cx> в коде CRT, пока деление не пройдёт без ошибки, и тогда выполнение инициализации TP CRT пойдёт дальше уже без ошибок.
-
Очень элегантное решение проблемы "Error 200" в программах на TP7.
.
Раздел: Turbo Pascal Pentium II DIV BUG fixing
Скриншоты
Операционная система: DOS
Требования: -
Автор: -
Издатель: -

Добавил: OldCompUser (2016.10.02)
Доступные файлы - сортировка по имени и версии, времени добавления
Файлов: 2.
ФайлРазмерВыпускВерсияЯзыкКачествоЗагрузил
Ссылка ERROR200
ArcСкачать652
0.2 Кб   [Не подделка]OldCompUser
2016.10.02
Ссылка ERROR200
ArcСкачать944
0.9 Кб2016(fixed) [Не подделка]Nika
2016.10.04
Пришлось добавить 2 байта кода, чтобы не выделялась лишняя память для резидента. Старый вариант тоже включён в этот архив.
Итого - 40 байтов, резидент 15 байтов.

Пожаловаться

Комментарии
#1 Автор: SokilOff (2016.10.04 21:24)
>Очень элегантное решение проблемы "Error 200"

А если переполнение пройзойдёт в другой программе, использующей int 21h/2500h ? На выходе получим непредсказуемое поведение ?

#2 Автор: Nika (2016.10.04 23:31, изменений: 2, 2016.10.07 01:12)
Программы перехватывают <int0> практически всегда только для того, чтобы в случае ошибки при делении сообщить "ERROR - division by zero" и завершиться.
При работе рассматриваемой резидентной программы те другие программы в случае ошибок деления да, будут вести себя странно.

Поэтому в рассматриваемую резидентную программу, по-хорошему, надо было бы включить сигнатурную проверку участка кода, вызвавшего <int0>, и выполнение инкремента делителя выполнять только для фрагментов кода инициализации CRT.TPU TP7.
А для остальных программ передавать управление в их обработчик <int0>.
Но тогда нужно отслеживать состояние собственного обработчика <int0>, чтобы он был первым в цепочке обработчиков.
Это бы сильно усложнило программу, а она специально сделана в минималистичном стиле.

Решение, как в этой программе,безусловно, не является 100% корректным, хотя и имеет право на существование в принципе.
Вот что следовало бы сделать для улучшения этого алгоритма - это добавить возможность выгрузки резидента при повторном запуске.
Тогда для запуска программы на TP7 с "ошибкой 200" можно было бы написать BAT-файл - для запуска резидента, запуска проблемной программы и по её завершении повторного запуска резидента для выгрузки ранее запущенного.

Примерно так.

Имя:
E-mail:
 =
Ваш комментарий:
Тенор, альт, делет.

For abuses about copyright: srzone@mail.ru
Для жалоб на авторские права: srzone@mail.ru
Float 1.0.3 Copyright © 2008-2023 StrannikRiddler. All rights reserved.
18+. Находясь на этом сайте, вы соглашаетесь с его правилами
13 queries, db time 0.004081, memory 1472.09 Kb, total time 0.06 sec