Страница 24 из 27
7.3.1 Чтение/запись с кассетного магнитофона. Только очень немногие IBM PC и PCjr используют кассетный маг- нитофон, а XT и AT не поддерживают его вообще. Помимо того, что он очень ненадежен, обмен с кассетным магнитофоном возможен толь- ко последовательный, но не с прямым доступом. Тем не менее, могут быть причины для программирования кассетного магнитофона на PCjr. Имейте ввиду, что кассетные операции используют канал 2 микросхе- мы таймера 8253 [2.1.1], поэтому не пытайтесь одновременно ис- пользовать этот канал для других целей. Отметим также, что при операции чтения с кассеты, запрещено прерывание времени суток, поэтому счетчик времени суток BIOS будет давать неверное значе- ние.
Высокий уровень. Хотя кассетные файлы обрабатываются совершенно по-другому чем дисковые файлы, однако команды доступа к ним совершенно аналогич-
ны. На кассету могут записываться только программные файлы и пос- ледовательные файлы данных. Последние могут включать файлы изоб- ражения памяти. Отметим, что данные не могут добавляться к после- довательным файлам. При создании, именам файлов даются следующие однобайтные расширения:
.B программа на Бейсике .P защищенная программа на Бейсике .A программа на Бейсике в формате ASCII .M файл изображения памяти .D последовательный файл данных
Для сохранения файла на кассете напишите SAVE "CAS1:имяфайла". Для загрузки программы - LOAD "CAS1:имяфайла". В последнем случае лента прогоняется до тех пор, пока нужный файл не будет найден, при этом имя каждого встреченного файла будет выводиться на экран (кассеты не используют каталоги). Если запросить несуществующий файл, то будет выведен полный список файлов на кассете.
Средний уровень. BIOS работает с кассетной лентой порциями в 256-байтные блоки. Набору блоков предшествует "лидер", который состоит из 256 байтов ASCII 1. Лидер завершается нулевым битом синхронизации. Затем следует байт синхронизации со значением 16H, а затем 256 байтов данных. После этого идут 2 байта контроля ошибок, а затем новый блок данных, сопровождающийся парой байт проверки ошибок и т.д. Вся последовательность завершается четырехбайтным "хвостом", содержащим коды ASCII 1. Для чтения данных с кассеты на до использовать функцию 2 пре- рывания 15H. Нет необходимости открывать файл, как это делается при дисковых операциях. ES:BX указывают на буфер в памяти, куда будут посылаться данные, а CX - число байтов, которые надо счи- тать. При возврате DX сообщит сколько байтов прочитано на самом деле, а ES:BX будут указывать на последний считанный байт плюс 1. Флаг переноса будет равен 0, если чтение прошло успешно, а в противном случае AH будет содержать 1, если проблема с контролем ошибки, 2 - при ошибке чтения данных и 3 - при отсутствии данных на ленте. Функция 3 прерывания 15H записывает данные на кассету. ES:BX указывают на первый байт данных, а CX содержит число байтов, которое надо записать. При возврате ES:BX указывают на байт, следующий за последним записанным. Мотор управляется функциями 0 (включение) и 1 (выключение) прерывания 15H. Для этих функций нет выходных регистров.
|