А.М. Надежин

SOS2 - программа спасения файлов с ошибками чтения

В четвёртом выпуске серии "Вычислительная техника и её применение" за этот год была опубликована статья Л.Н. Жарикова о работе БК с магнитофоном, в которой автор, в частности, обращался к читателям с предложением разработать простую программу в машинных кодах, блокирующую возникновение ошибки контрольной суммы файла. Однако при чтении почти всегда испорченным оказывается не только то место файла, где произошла ошибка (дефект магнитной ленты, помеха при записи), но и вся последующая часть файла. Поэтому программа, блокирующая ошибки контрольной суммы, смогла бы спасти только участок от начала файла до первой ошибки, и то лишь в случае успешного считывания заголовка. Поэтому в программе для спасения не читающихся файлов необходимо использовать другой алгоритм чтения, чем тот, который используется в драйвере магнитофона БК.

Первой такой программой была программа ЧИТМАГ, появившаяся в Москве в начале 1989 года. ЧИТМАГ позволяет считывать с магнитофона любой участок текстового файла длиной 2000 байт и тут же выводит на экран всю символьную информацию, находящуюся в этом участке. К недостаткам программы ЧИТМАГ можно отнести то, что она работает только с блоками по 2000 байт и не позволяет записывать на магнитофон считанные участки, поэтому единственный способ сохранить спасённую информацию - переписать текст с экрана на бумагу и ввести его с помощью текстового редактора.

Для того чтобы избавить пользователя от такой рутинной работы, в начале 1990 г. мной была написана программа SOS, использующая алгоритм чтения программы ЧИТМАГ и имеющая широкие сервисные возможности, устраняющие недостатки ЧИТМАГа. Вашему вниманию предлагается новая версия программы - SOS2. Она позволяет считывать любые участки файлов длиной до 35 000 байт, визуально контролировать ход чтения (файл считывается в экранную область ОЗУ), просматривать считанный текстовый файл на экране, записывать считанный файл на магнитофон под любым именем.

Программа SOS2 написана на языке ассемблера с помощью турбосистемы программирования на языке ассемблера TURBO2. Приведённый листинг в машинных кодах можно ввести в память БК, руководствуясь методикой, подробно описанной в статье Д.Ю. Усенкова (Вычислительная техника и её применение. - 1990 - № 2 - с. 35). Программу нужно вводить с адреса 1000. По окончании можно проверить правильность ввода программы, для этого, закончив ввод программы, нужно нажать клавишу «СТОП» и набрать следующие команды (то, что выводит на экран машина, подчёркнуто):

$1000АА=001000
$1470ДД=001470
$Х=063625
$

Второй раз символы А и Д вводятся, чтобы проконтролировать правильность ввода адреса и длины массива. Если после ввода символа X значение контрольной суммы отличается от 063625, программа была введена с ошибками. Для устранения ошибок повторить те же действия, что и при вводе программы, но если в текущей ячейке значение записано правильно, не переписывать его, а просто перейти к следующей ячейке, нажав «,». После исправления ошибок можно записать программу на магнитофон. Для этого набрать:

«СТОП»
$МЗ НАЖМИТЕ КЛАВИШИ МАГНИТОФОНА "ПУСК" И "ЗАПИСЬ"
АДРЕС = 1000
ДЛИНА = 1470
ИМЯ = «ЛАТ»SOS2
(файл записывается на магнитофон)

 

104014 012701 002034 005002 104020 104006 012701 002276 005002 104020
012737 001344 000004 004767 000314 012737 001336 000004 005701 100754
162701 040000 010167 001404 012702 040000 012703 003000 112223 077102
000425 012701 002445 005002 104020 012701 002466 012702 005020 104010
012700 000232 104016 005702 001404 005301 112721 000040 077203 012701
002460 104036 105737 000056 001003 112767 000232 001172 012701 002356
005002 104020 104006 042700 000240 020027 000122 001001 000673 020027
000105 001002 104014 000000 020027 000127 001001 000721 020027 000126
001355 012701 003000 010103 066703 001210 012702 002777 112700 000014
104016 020103 103022 121127 000040 103413 121127 000240 103003 121127
000177 101005 112100 104016 077216 104006 000753 005201 012700 000177
000770 012706 001000 000702 012706 001000 000632 005000 005001 012702
000200 012703 177716 012705 000040 005200 005301 030513 001374 000240
005200 005201 030513 001774 000240 005300 005201 030513 001374 000240
005300 005301 030513 001774 077224 005037 000300 005700 100001 005100
005701 100001 005101 020001 101402 005237 000300 004767 000234 012705
000040 012703 177716 005000 005001 012702 000140 005200 005200 030513
001375 005200 030513 001775 005201 030513 001375 005201 030513 001775
077216 020001 103401 010100 012702 000006 006200 077202 010037 000314
012737 000001 000304 012702 035000 012701 040000 012704 000010 012700
077760 012720 000777 077403 012700 077760 005004 005204 030513 001375
005204 030513 001775 023704 000314 101366 005004 005204 030513 001375
005204 030513 001775 160420 100411 042700 100000 052700 077760 030513
001376 030513 001776 000756 004737 117336 000207 012701 002010 012702
000005 005005 012704 000400 105737 000300 001003 005004 012705 000400
042771 000400 000000 050531 042771 000400 000000 050431 077211 000207
001524 001532 001540 001546 001642 001650 001666 001674 001714 001720
125232 115665 132665 132665 123665 047523 031123 132647 132665 132665
132633 012643 170267 147722 151307 146701 140715 157040 142724 144716
020321 140706 146312 153717 151440 147440 144733 145702 146701 133711
133425 067503 074560 064562 064147 020164 074542 160440 166456 167056
142301 153305 147311 030440 027061 027067 034461 030071 012667 132646
132633 132665 132665 132665 132665 132665 132665 132665 115665 134665
012425 146344 020321 140716 140736 140714 157040 142724 144716 020321
140716 146726 152311 020305 140314 152702 020300 146313 153701 155711
000325 015014 015032 146344 020321 145717 147317 140736 144716 020321
152336 147305 150711 147040 153301 144715 142724 145440 140714 144727
152733 036040 172363 170357 000076 011022 165634 166757 167341 174744
116072 053040 170055 147722 146723 152317 026322 053440 175055 150301
151711 026330 051040 171055 151705 140724 152322 020054 026505 154767
147710 114704 011000 146751 020321 020072 115231 000000 000002 003000
000000 001242 

Следует иметь в виду, что при запуске программа сама себя модифицирует, поэтому запускать программу можно только после подсчёта контрольной суммы и записи на магнитофон. Запуск программы осуществляется командой 1000G или S1000 из монитора. После запуска программа очищает экран и высвечивает заставку. Для того чтобы начать чтение, включите магнитофон, дождитесь конца настроечной последовательности (монотонный звук в начале файла) и нажмите любую клавишу на клавиатуре БК. При нормальном чтении экран должен в такт со звуком начать заполняться неравномерными полосами из цветных точек. По окончании звука читающегося файла нажмите клавишу «СТОП», при этом в верхней строке экрана появится меню следующего вида:

V-просмотр, W-запись, R-рестарт, Е-выход.

В режиме меню можно:

нажав клавишу «V» (на любом регистре) просмотреть на экране считанный текстовый файл (управляющие символы выводятся на экран в виде знаков забоя (закрашенное знакоместо) для просмотра следующего экрана текста нужно нажать любую клавишу, для выхода в меню - клавишу «СТОП».

Можно рекомендовать следующую последовательность работы с программой SOS2:

  1. Прочитать файл, визуально контролируя на экране отсутствие сбоев.
  2. Командой V просмотреть файл на экране, если файл не содержит осмысленного текста, попробовать прочитать его ещё раз, нажав «СТОП» и «R».
  3. Командой «W» записать файл на магнитофон.
  4. С помощью отладчика или текстового редактора откорректировать полученный файл.

 

Performed by © gid, 2012-2022.