Благодарю за поддержку, буду реализовывать для STM32 в среде ARM Keil. Там язык C.
- - - Добавлено - - -
Пока разбираюсь с таймерами и прерываниями.
- - - Добавлено - - -
Нужно реализовать пилот тон и синхо.
- - - Добавлено - - -
- - - Добавлено - - -
http://www.zx-info.ru/?rc=12&id=9
Последний раз редактировалось san010101; 17.09.2017 в 09:58.
Всем добра.
Подскажите правильно я делаю или нет.
Алгоритм чтения tap файла
1. Сначала пилот для заголовка длительность 5 сек. частота 807 Гц
2. Синхроимпульс ~ 171,4 мксек
3. Синхроимпульс 200 мксек
4. Читаем 17 байт заголовка
где
00...01 это длина заголовка (обычно 0х13)
02 флаг 00 для заголовка FF для блока данных
04...0D имя файла
15..16 длина блока данных
17 флаг FF
5. Пилот тон данных 2 сек. 807Гц
6. Синхроимпульс ~ 171,4 мксек
7. Синхроимпульс 200 мксек
8. Чтение блока данных
- - - Добавлено - - -
Ссылка на код обработчика прерываний, где происходит чтение файла
http://zx-pk.ru/threads/28153-proigr...l=1#post929795
Нет, не правильно. Заголовок это флаговый байт 00 + 17 байт заголовка + байт контрольной суммы, итого 19 байт. (Но при загрузке заголовка мы задаем загрузчику длину 17, потому что флаговый байт и байт контрольной суммы служебные, и не учитываются.)
Длина заголовка в заголовке не хранится, потому что она фиксирована. Она хранится только в TAP файле, потому что он ничего не знает о содержимом блоков, он хранит только их длины+содержимое.
Так что:
пилот
синхро1
синхро2
флаговый байт 00
байт типа даннных (03 - для кодового блока)
10 байт имени
2 байта длины блока кодов
2 байта ещё один параметр (стартовый адрес для кодового блока)
2 байта ещё один параметр (незначим для кодового блока)
1 байт контрольной суммы
пауза
пилот
синхро1
синхро2
флаговый байт FF
содержимое блока кодов длиной, указанной в заголовке
байт контрольной суммы
пауза
длина паузы?
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Так как я делаю плеер на STM32 файлов tap то сколько байт мне нужно считать????
с
00..0х12
или
00..0х17
- - - Добавлено - - -
Если я считаю до 0х12 байта то следующая очередь пойдет чтение блока данных
это 0х13 и далее...
но блок данных начнется с 0х18 байта/
- - - Добавлено - - -
что бы не было путаницы можно написать какие байты мне после первого пилот тона прочитать и какие после второго пилота
Все нашел. Пауза 1 секунда.
Читаем заголовок до 0х14 байта
с 0х18 идет блок кода
где 0х17 флаг
и последний байт контрольная сумма
Получается:
Пилот заголовок
синхро 1,2
Данные заголовоек
0х00...0х14
пауза 1 сек
Пилот блок кода
синхро 1,2
Блок кода с 0х15......
где
0х15, 0х16 длина кода с флагом + контр сумма
0х17 флаг
0х18...........контр сумма
пауза 1 сек
san010101, Не нужно тебе различать заголовки и данные. Просто нужно пропищать все блоки из TAP по порядку. В них уже есть и тип блока и контрольная сумма.
- - - Добавлено - - -
Двух секунд по началу хватит на все пилоты.
Потом, для аутентичности, можно сделать длинный пилот для блоков-заголовков, для работы это не важно, это-же не лента, у которой самое начало наивероятно поджована/загрязнена/осыпана.
Алгоритм примерно такой:
1. Открываем нужный TAP и ставим позицию чтения на нулевой байт.
2. Если файл уже кончился, то передача завершена.
3. Читаем двухбайтовую длину блока.
4. Пищим пилот, синхро.
5. Читаем нужное число байт и пищим их.
6. Завершаем с паузой.
7. Идём выполнять пункт 2.
Последний раз редактировалось Reobne; 01.10.2017 в 11:05.
Всем спасибо за помощь в разборе формата tap.
Мне удалось воплотить эту информацию в устройстве проигрыватель tap файлов на STM32. Информация на форуме в соседей ветке.
Сейчас для дальнейшего творчества интересен формат tzx.
Прежде всего описание формата и его программная реализация чтения файлов.
Отправлено с моего A0001 через Tapatalk
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)