Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу old.sannata.org.

Полигон-2

Форум о старых компьютерах

Объявление форума

Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС.

Полигон-2 »   IBM PC-совместимое. До 2000 года включительно »   Кассетный интерфейс
RSS

Кассетный интерфейс

Принцип работы, реализация кассетного интерфейса на современном пк

<<Назад  Вперед>> Страницы: 1 2 3 4 5 6 7 8 * 9 10
Печать
 
uav1606
Advanced Member


Откуда: Енакиево
Всего сообщений: 4373
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
16 янв. 2008
Так... Продолжаем эксперименты. Сохранил файл с ключом "A" после SAVE, скормил wav2cas, получился CAS-файл с текстом:

$10 PRINT "Hello

Всё. А должно быть ещё "..., world" и вторая строчка "20 goto 10".

WAV во вложении.

Прикрепленный файл (hellowld3.wav, 373780 байт, скачан: 42 раза)
Tronix
Advanced Member


Откуда: Москва
Всего сообщений: 1749
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
15 янв. 2008
Ну у меня там в проге какой-то глюк вроде на тему размера был, щаз уже не помню точно, ибо год назад писал. Возможно проявляется только на таких маленьких файлах (> 512 байт) и возможно только на васике. Можно конечно пофиксить, но честно говоря смысла особого не вижу. Видно и так, что все работает и эксперемент с LPT-портом прошел успешно. ЧТД.
Kurill_GANJOU
Newbie


Всего сообщений: 19
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
19 апр. 2014
uav1606 написал:
[q]
К сожалению, ни один из них получившийся CAS-файл не смог преобразовать. Или я что-то не так делаю?
[/q]
Сегодня утром разобрался, в чем дело с Бейсиком. Записал hellowld2.wav от uav1606 на кассету и пробовал загрузить в Бейсик. Моей программой считался только заголовок, после загрузки блока данных Бейсик выдал «Out of memory». А вот записанный вечером hellowld3.wav считался без проблем. Длина блока, что ли, у меня неверно вычисляется, причем именно для сжатого формата?.. Зато hellowld2.wav успешно загрузился с ленты драйвером Лампочкина. Там оказались две строки:
[q]
10 PRINT "Hello, world"
20 GOTO 10
[/q]
Результат сохранил на диск командой SAVE. Потом в hex-редакторе сравнил созданное SAVE’ом и wav2cas’ом. Тут вот, оказывается, в чем дело:

При конвертации wav --> cas теряется тип данных в заголовке (тип 80H для сжатой бейсик-программы). Значит, Бейсик (или конвертер) такой *.cas загрузит с диска как простой текст, но не сможет разобрать, что там написано. В программе, сохраненной на диск лично Бейсиком, признак сжатого формата находится в самом начале файла и имеет значение FFH. В исходнике READBAS нашел строки:
[q]
100 OPEN FI$ AS 1 LEN=1: FIELD 1, 1 AS X$
110 OPEN F2$ FOR OUTPUT AS #2: GET 1
120 IF ASC(X$) >>255 THEN PRINT "NOT A BASIC PROGRAM SAVED IN BINARY":END
[/q]
Думаю, понятно, что это такое.
Значит, если в начало cas-файла со сжатой бейсик-прогой дописать FFH, то в таком виде (на один байт длиннее) *.cas уже может быть преобразован конвертером типа RB58 или загружен прямо в Бейсик.

Tronix написал:
[q]
Ну у меня там в проге какой-то глюк вроде на тему размера был, щаз уже не помню точно, ибо год назад писал. Возможно проявляется только на таких маленьких файлах (> 512 байт)...
[/q]
Вот Tronix как раз здесь не виноват!!! Это у мелкомягких-айбиэмовцев, по ходу, стандарт такой. Блок данных на кассете не соответствует аналогичному файлу на диске. Ну, как бинарь на кассете и ДОСовский com-файл – это не одно и то же...
Вот у меня при чтении упакованных данных точно глюк! Кому не лень, посмотрите исходник, пожалуйста.

uav1606 написал:
[q]
Так... Продолжаем эксперименты. Сохранил файл с ключом "A" после SAVE, скормил wav2cas, получился CAS-файл с текстом:

$10 PRINT "Hello

Всё. А должно быть ещё "..., world" и вторая строчка "20 goto 10".
[/q]
Моей прогой hellowld3.wav с ленты загрузился успешно (см. выше). Программой Лампочкина, впрочем, тоже. A вот wav2cas в данном случае действительно дивно глюкнул, неверно определив длину.

Tronix написал:
[q]
Видно и так, что все работает и эксперимент с LPT-портом прошел успешно.
[/q]
Пока у меня успешно заработала только запись. И то со второй попытки. Чтение же у меня пока отлажено наполовину. Что-то у нас с Tronix'ом взаимно обратные ошибки - у него неверно обрабатываются тексты на Бейсике в открытом виде, а у меня - в упакованном...

Во вложении:
HELLOWLD.BAS - файл, сохраненный командой SAVE после загрузки в Бейсик hellowld2.wav с ленты;
HELLO.CAS - после обработки hellowld2.wav wav2cas’ом. Не преобразовывается в текст и не грузится в Бейсик (аналогичен hellowld2.cas у uav1606 во вложении);
HELLOWLD.CAS - получился из HELLO.CAS дописыванием FFH в начало.

Хотя HELLOWLD.BAS и HELLOWLD.CAS отличаются концовкой (SAVE добавил еще два байта в конец), конвертируются и грузятся они совершенно одинаково.

Прикрепленный файл (HELLOWLD.ZIP, 419 байт, скачан: 37 раз)
Kurill_GANJOU
Newbie


Всего сообщений: 19
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
19 апр. 2014
ВНИМАНИЕ!
Исправлен баг с неверной длиной блока при чтении. Желающим протестировать просьба скачать обновлённый вариант.

Прикрепленный файл (I15_0426.ZIP, 24401 байт, скачан: 46 раз)
SoftCat
Newbie


Всего сообщений: 54
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
26 нояб. 2010
Kurill_GANJOU написал:
[q]
Результат сохранил на диск командой SAVE. Потом в hex-редакторе сравнил созданное SAVE’ом и wav2cas’ом. Тут вот, оказывается, в чем дело:

При конвертации wav --> cas теряется тип данных в заголовке (тип 80H для сжатой бейсик-программы). Значит, Бейсик (или конвертер) такой *.cas загрузит с диска как простой текст, но не сможет разобрать, что там написано. В программе, сохраненной на диск лично Бейсиком, признак сжатого формата находится в самом начале файла и имеет значение FFH. В исходнике READBAS нашел строки:
[q]
100 OPEN FI$ AS 1 LEN=1: FIELD 1, 1 AS X$
110 OPEN F2$ FOR OUTPUT AS #2: GET 1
120 IF ASC(X$) >>255 THEN PRINT "NOT A BASIC PROGRAM SAVED IN BINARY":END
[/q]
Думаю, понятно, что это такое.
Значит, если в начало cas-файла со сжатой бейсик-прогой дописать FFH, то в таком виде (на один байт длиннее) *.cas уже может быть преобразован конвертером типа RB58 или загружен прямо в Бейсик.
[/q]
Например, для кассетного Бейсика Электроники МС1502 вовсе не нужно, чтобы в начале бинарного файла на Бейсике был байт FFh, он анализирует тип файла. И при записи этот байт в начало не пишет. Это FFh нужно для GW-BASIC'а (и ему подобных) или разных конвертеров, когда файл читается с диска и, естественно, при этом отсутствует кассетный заголовок с типом файла.
Kurill_GANJOU
Newbie


Всего сообщений: 19
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
19 апр. 2014
SoftCat написал:
[q]
Например, для кассетного Бейсика Электроники МС1502 вовсе не нужно, чтобы в начале бинарного файла на Бейсике был байт FFh, он анализирует тип файла. И при записи этот байт в начало не пишет.
[/q]
Простите, куда не пишет? На кассету или на диск?

В блоке данных на кассете он и не нужен. Его функции выполняет байт 80H в кассетном заголовке. Дисковые версии Бейсика (BASIC-A/GW-BASIC) на кассету FF тоже не пишут за ненадобностью. А вот если FF не записать в дисковый файл, то как Бейсик потом поймет, что перед ним упакованный формат, а не простой текст программы? Кассетный Бейсик Электроники МС1502 вообще может выполнять дисковые операции? Оригинальный кассетный Бейсик IBM не мог в принципе.

Проблема у uav1606 была в том, что он пытался открыть кассетный блок данных (сохраненный на диск wav2cas’ом) как "родной" дисковый файл Бейсика. А это, как оказалось, не совсем одно и то же. И wav2cas здесь не при чем. Это просто форматы бинарников разные.
SoftCat
Newbie


Всего сообщений: 54
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
26 нояб. 2010
Kurill_GANJOU написал:
[q]
Кассетный Бейсик Электроники МС1502 вообще может выполнять дисковые операции?
[/q]
Нет, не может. Он только работает с кассетой.
SoftCat
Newbie


Всего сообщений: 54
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
26 нояб. 2010
uav1606 написал:
[q]
Так... Продолжаем эксперименты. Сохранил файл с ключом "A" после SAVE, скормил wav2cas, получился CAS-файл с текстом:

$10 PRINT "Hello

Всё. А должно быть ещё "..., world" и вторая строчка "20 goto 10".

WAV во вложении.
[/q]
Я считал заголовок файла hellowld3.wav. Оказывается длина файла равна 10h = 16 байт (это меньше фактической длины). Может быть для текстовых файлов на Бейсике длину надо как-то корректировать?

Kurill_GANJOU написал:
[q]
А вот записанный вечером hellowld3.wav считался без проблем.
[/q]
А Вы как учитываете длину файла, указанную в заголовке?

Во вложении Кассетный Бейсик МС1502.

Прикрепленный файл (basic.zip, 25926 байт, скачан: 41 раз)
Kurill_GANJOU
Newbie


Всего сообщений: 19
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
19 апр. 2014
SoftCat написал:
[q]
Может быть для текстовых файлов на Бейсике длину надо как-то корректировать?
[/q]
Во вложении – процедуры чтения/записи файлов на кассету от «Поиска-1». Там, помимо всего прочего, есть описание кассетного заголовка. Особо хотел бы обратить внимание на примечание:
[q]
«Длина записанной в файл информации, значения сегмента и смещения адреса (поля заголовка A-F) запоминаются в заголовке только для файлов типов 01, 80 и А0
[/q]
01 – это исполнимый бинарник; 80 – сжатая Бейсик-прога; A0 – защищенная Бейсик-прога. А прога в виде ASCII текста имеет тип 40. То есть, по идее, для него длина должна браться не из заголовка, а каким-то другим образом. Теперь понятно, почему wav2cas глючит, причем именно на этом типе данных.

Кстати, неплохо бы узнать, как в этом случае находится длина. Первое, что мне пришло в голову – это следующий алгоритм: считывается с ленты 256-байтный блок, в нем ищется какой-то маркер конца файла (рискну предположить, что это четыре идущие подряд нулевых байта). Если маркер найден, значит, файл считан до конца. Если нет – загрузить с ленты следующие 256 байт и повторить поиск, и т. д.
Хотя об этом Бейсик было бы хорошо спросить: можно попробовать выловить и дизассемблировать процедуры работы с кассетными файлами. Ловить можно, например, по обращению к INT 15.


SoftCat написал:
[q]
А Вы как учитываете длину файла, указанную в заголовке?
[/q]
Я – никак. Назначение моего обработчика кассетного прерывания – это тупо считать или записать блок данных с ленты или на ленту. А уж сколько именно байтов в этом блоке использовать, решает вызывающая этот обработчик прога. В данном случае – Бейсик, т. к. других прог для работы с кассетами IBM PC (именно PC/PCjr, а не «Поиск-1») я что-то не видел.

Прикрепленный файл (RWCAS.ASM, 5093 байт, скачан: 57 раз)
SoftCat
Newbie


Всего сообщений: 54
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
26 нояб. 2010
Kurill_GANJOU написал:
[q]
Я – никак. Назначение моего обработчика кассетного прерывания – это тупо считать или записать блок данных с ленты или на ленту. А уж сколько именно байтов в этом блоке использовать, решает вызывающая этот обработчик прога. В данном случае – Бейсик, т. к. других прог для работы с кассетами IBM PC (именно PC/PCjr, а не «Поиск-1») я что-то не видел.
[/q]
Тогда поясните, пожалуйста, поподробнее, зачем Вам потребовался байт FFh в начале бинарного файла на Бейсике? Чем именно (при чтении бинарного файла на Бейсике) Ваш драйвер отличается от драйвера Профессора Лампочкина?
<<Назад  Вперед>> Страницы: 1 2 3 4 5 6 7 8 * 9 10
Печать
Полигон-2 »   IBM PC-совместимое. До 2000 года включительно »   Кассетный интерфейс
RSS

0 посетителей просмотрели эту тему за последние 15 минут
В том числе: 0 гостей, 0 скрытых пользователей

Последние RSS
[Москва] LIQUID-Акция. Сливаются разъемы CF
МС7004 и 7004А на AT и XT
Пайка термотрубок
Проммать s478 PEAK 715VL2-HT ( Full-Size SBC)
Подскажите по 386 материке по джамперам.

Самые активные 5 тем RSS