User Tag List

Страница 6 из 7 ПерваяПервая ... 234567 ПоследняяПоследняя
Показано с 51 по 60 из 62

Тема: ZX MIDI player

  1. #51

    Регистрация
    18.05.2020
    Адрес
    г. Белгород
    Сообщений
    527
    Спасибо Благодарностей отдано 
    170
    Спасибо Благодарностей получено 
    637
    Поблагодарили
    201 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Chwe Посмотреть сообщение
    Но, мне кажется, детектирование +3 -- оно от лукавого. Просто сделать точку входа и её вызывать из зарузчика для +3 DOS. Тем более, там, похоже, без специального загрузчика не обойтись (см. ниже).
    Для детекта TR-DOS сейчас используется переменная, которая выставляется из TR-DOS загрузчика:
    https://github.com/UzixLS/zx-midipla.../build.asm#L71
    И затем она тут проверяется:
    https://github.com/UzixLS/zx-midipla.../disk.asm#L234
    https://github.com/UzixLS/zx-midipla...trdos.asm#L389

    Цитата Сообщение от Chwe Посмотреть сообщение
    Но, это усложнит процесс сборки, появятся новые зависимости.
    Сейчас упаковщик RLE выполнен в виде Lua-функции для sjasmplus, если вдруг есть на примете алгоритмы получше в таком же формате и с совместимой лицензией - вообще не вопрос внедрить В общем-то и отдельные тулзы можно прикрутить, это просто вопрос вкуса + необходимости.

  2. #52

    Регистрация
    28.08.2023
    Адрес
    г. Брест, Беларусь
    Сообщений
    142
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    33 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Uzix Посмотреть сообщение
    Так же при запуске/переконфигурации нужно, собственно, заполнить var_disks. Делает это disks_init - https://github.com/UzixLS/zx-midipla.../disk.asm#L229 - он же и должен детектировать +3DOS и занести количество найденных дисков в var_disks.count.
    Евгений, есть непринципиальный вопрос по disk.asm строка 327. Там, когда TRDOS нету, оно делает jr z, .scan_divmmc. В этом глубокий смысл или просто ошибка и должно быть логически напрашивающееся jr z, .scan_divide?

    P.S. с буквами +3e разобрался, а вот как этот произвольный набор объединять с другими дисками/разделами в плане UI, пока как-то не вырисовывается.

    +3e port


    Что-то я застрял на floppy unit 1, который обычно на «просто +3» на B: назначается. Такое ощущение, что +3e FLAGS3 не обновляет и bit 5 там всякую ересь содержит. Пока приходится дёргать DD ASK 1.

    Но, в целом, процесс идёт... Нажмите на изображение для увеличения. 

Название:	zx-midiplayer+3E.png 
Просмотров:	57 
Размер:	8.6 Кб 
ID:	80884
    [свернуть]

  3. #53

    Регистрация
    18.05.2020
    Адрес
    г. Белгород
    Сообщений
    527
    Спасибо Благодарностей отдано 
    170
    Спасибо Благодарностей получено 
    637
    Поблагодарили
    201 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Chwe Посмотреть сообщение
    В этом глубокий смысл или просто ошибка и должно быть логически напрашивающееся jr z, .scan_divide?
    Это ошибка, спасибо что заметили Первоначально был другой порядок инициализации

  4. #54

    Регистрация
    28.08.2023
    Адрес
    г. Брест, Беларусь
    Сообщений
    142
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    33 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Думал, как показывать устройства, в связи с появлением произвольного набора от +3. Пока придумал выводить тип носителя, вроде "DVMMC x", "+3 d", "TRDOS d".

    Примерный вид меню устройств


    Только, как это потестировать, ума не приложу. Xpeccy я завести не могу, не видит он моих образов дисков. В FUSE ничего, кроме DivMMC/DivIDE, да и те не работают.


    [свернуть]


    Если есть желающие попробовать, вот «самораспаковывающийся архив СТАРЫЙ», есть новее, в принципе, сделал всё, что хотел -- НОВАЯ ВЕРСИЯ от 06.14 УСТАРЕЛО release candidate. Просто загружаете с этой «ленты» и оно запишет всё, что надо, на текущий диск. Потом просто LOAD "MIDI".

    На примере FUSE


    1. Запускаем в режиме +3: fuse -m plus3 zx-midi+3.tap
    2. «Вставляем» чистую дискету: Media -> Disk -> +3 -> Drive A: -> Insert New...
    3. Форматируем её: (+3 BASIC) format "a:"
    4. Переключаемся на «ленту»: LOAD "T:"
    5. Загружаем всё: LOAD ""
    6. Переключаемся обратно на диск: LOAD "A:"
    7. Запускаем: LOAD "MIDI"
    Если у вас FUSE без моего патча, то это всё, если с моим, то можно закинуть на образ диска MIDI файлов и действительно их послушать
    [свернуть]
    Последний раз редактировалось Chwe; 16.06.2024 в 18:23.

    Эти 2 пользователя(ей) поблагодарили Chwe за это полезное сообщение:

    Djoni(16.06.2024), Uzix(13.06.2024)

  5. #55

    Регистрация
    28.08.2023
    Адрес
    г. Брест, Беларусь
    Сообщений
    142
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    33 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В принципе, наверное, я всё, о чём мог подумать, реализовал. Теперь можно сделать только две вещи:

    1) потестировать: если кто загружал УСТАРЕЛО release candidate. и запускал -- расскажите
    2) code review, если найдутся имеющие желание и возможность -- пишите, что-нибудь придумаем.

    Что сделано и что может быть улучшено AKA мои рабочие заметки


    Экраны «сжимаются» «штатным» RLE. Грузить теперь обязательно специальным загрузчиком, «распихать» все по нужным страницам памяти из BASIC невозможно.

    Устройства master/slave теперь показываются разными буквами: A, B, C, D для разделов на master, E, F, G, H для разделов на slave.

    BUG: фалы чуть менее 64k не грузятся, это связано с неправильным рассчетом Kb → b, это затрагивает файлы без PLUS3DOS заголовка (или которые будут точно 65536 байт и больше /8Mb предел-то/, в общем, где младшие два байта длины — 0). Workaround: всегда добавлять PLUS3DOS заголовки. В коде надо поправить а области «guesstimate file size into DE» (plus3dos.asm). Аналогичная проблема с показом, ноги оттуда же, +3 DOS округляет размер (в каталоге) вверх до ближайшего килобайта, поэтому всё, чуть меньше 64K будет иметь размер 65536 — OVERFLOW, 0 Кое-что подпёрто палочками и приклеено «Моментом», но, может сломаться опять.

    - Весь код надо «причесать».
    Q: Начало всего по адресу 0x76d1, это произвольно выбранное место или зачем-то надо именно такой адрес?
    - Есть проблема с двумя MMC/IDE устройствами с несколькими разделами, они оба будут отображены как ТИП X, и будет два таких ТИП X. Наверное, правильно добавить устройство перед X. В общем, те счастливчики, у которых есть два устройства на master/slave, пока видят двойной набор дисков с одинаковыми именами.
    - Вынести «трамплин» для +3 API в отдельный файл. Этот код нужен в загрузчике и в основной программе.
    - Нужен ли перехват фатальных ошибок, Retry/Abort/Cancel? Пока не совсем понятно, что с ними делать и есть ли место для обработки этого. Пока они игнорируются (считаются фатальными).

    Магия, объяснения которой я не помню, но оно есть в где-то в документации +3 DOS: стек должен быть ниже 0xbfe0. Иначе оно и правда не работает. Я проверял И, вообще, стек сейчас очень близко к концу кода в связи с ростом размера этого кода. Может быть, перенести TR-DOS «вниз», как и +3 DOS? Дисковым «драйверам» же не надо быть в быстрой памяти… Прямо сейчас у меня собирается либо TR-DOS, либо +3 DOS. Одновременно они, вообще, могут в дикой природе встречаться? Я FUSE и с тем и с тем запустить не могу.

    Временно используется zx0 сжатие для экранов, потому что это позволяет грузить всё из BASIC без переконфигурации кэша.

    Собственно +3 DOS:
    - код достаточно сложный, может, можно и упростить, особенно определение длины файла, я там оттянулся
    - компиляция «за» параметром DOS_PLUS3, надо добавить -DDOS_PLUS3 при компиляции
    - если компилируется вместе с TR-DOS (без правки кода сейчас это невозможно), то всё в страницу памяти не влезает и +3 код автоматически выносится в 0x7000
    - вроде, изменение размера кэша и RAM диска позволило хранить RLE экраны в странице 1 (в странице 7 нет для них места, там слишком много занимает +3 DOS)
    - для размещения всего в памяти требуется специальный загрузчик, так как обязательна коррекция конфигурации кэша, а после этого нельзя возвращаться в BASIC
    - +3 в DISK_DRIVER добавлен как специальный случай, как и TR-DOS

    Общие изменения:
    - TR-DOS тоже вынесен «за флаг» -- DOS_TRDOS
    - в ide.asm пришлось добавить процедуры из trdos.asm, чтобы компилировалось без TR-DOS
    - параметры загрузки экранов слегка подправлены для гибкости, используется 1-я страница (можно сделать IFDEF)

    Связанные с +3
    - в main.asm сделана отдельная точка входа для +3, которая и используется для установки флага «+3 DOS есть». Она вызывается из загрузчика, который работает только под +3 DOS. Таким образом решена проблема детектирования +3.
    - +3 DOS явно управляет страницей в 0xc000, но для этого надо знать, какая у нас там сейчас при вызове +3 API. Поэтому все записи в порт 0x7ffd копируются в BANKM, как и положено.
    - в disk_t убрано поле _reserv и добавлено поле label
    - disk_menu_generator использует label «as is», если там не 0
    - определение устройств +3 не в disk.asm а в plus3dos.asm
    - disks_menu_generator использует label, если есть, иначе -- номер unit’а
    - disks_menu_generator показывает тип устройства (DVMCC, ZXMMC, SMUC, и т. п.) и номер устройства (0, 1) если нет разделов, букву A..D, если раздел есть.
    - в settings.asm написан код для сохранения под +3. Magic выкинут, не думаю, что он критичен для +3. Сейчас у меня можно скомпилировать и без TR-DOS и без +3, но этот случай в settings.asm пока не предусмотрен.

    Напрямую не связанные с +3:
    - появился DISK_DRIVER_NOFS_MASK для упрощения показа типа устройства
    - соответственно, disk_scan_filesystems добавляет в label «-», если не удалось найти файловой системы

    Премия для самых пытливых


    Собственно патч, накатывать поверх f6b4a7c141796b3fe85f3bb36a7f29cc68239251.
    [свернуть]

    [свернуть]


    Upd: 2024-06-16 - https://dai.ly/x90fsgg

    Всё, финальная версия. Нужен code review и тестирование, добавлять что-либо я не больше не планирую. Так сказать, release candidate. Там всё разом DSK, TAP, который самораспаковывающийся, и patch. Быстро просмотреть — загрузить DSK в любом эмуляторе. Что думаю изменить после тестирования: сменить маску файлов для показа с *.* на *.mid. А, да, будете записывать свои файлы, категорически рекомендую добавлять к ним PLUS3DOS заголовки. Это сильно помогает, когда файл больше 63K.
    Последний раз редактировалось Chwe; 16.06.2024 в 21:16.

    Эти 2 пользователя(ей) поблагодарили Chwe за это полезное сообщение:

    Djoni(15.06.2024), Uzix(17.06.2024)

  6. #56

    Регистрация
    28.08.2023
    Адрес
    г. Брест, Беларусь
    Сообщений
    142
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    33 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Дошли до меня слухи из славного города Багдада, что запилили поддержку UART для ZX Spectrum Next. Я посидел пару вечеров и в ZEsarUX оно у меня стало запускаться. Говорят, даже и на настоящем Next работает. Я код ещё заполирую и, если получится, после выходных выложу.

    Это я к чему пишу, если у кого есть Next, возможность и желание всё это потестировать -- дайте знать. Да, нужен не просто Next, а Next и что-то, что может читать с его DB-9 порта (например, USB UART, amidicat и Qsynth -- у меня эта связка работает с Sizif, не вижу причин, почему бы оно не работало с Next).

  7. #57

    Регистрация
    28.08.2023
    Адрес
    г. Брест, Беларусь
    Сообщений
    142
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    33 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В связи с возникшим интересом к портированию кода на Next группой безответственных товарищей было принято решение организовать телеграм канал, тфу ты. В общем, на выходных сделали совместными усилиями две вещи:

    - +3(e) DOS код был допилен до совместимости с ZX Spectrum Next. Да, Next оказался не совсем обратно совместимым с классическим +3. Некоторые упрощения там не работают. В рамках спецификации всё чётко и совместимо, но была, оказывается, тонкость...
    - нашим юнгой был написан отдельный код для поддержки только Next, без полноценного +3(e), чтобы всё в 16k влезало. Ну, нам это не нужно

    Патч приложен, накатывать поверх текущего HEAD (2c7939a на момент написания, 2024-10-13). Проверено минимум на двух Next и у меня на Sizif и FUSE. Кто может/хочет ещё потестировать -- присоединяйтесь! А, да, Next поддержка в патче перепилена с учётом последнего слова науки и техники (у товарища Скотта был прямолинейный подход, а тут с фантазией).

    plus3+nxt.2c7939a.patch.zip УСТАРЕЛО, см gitflic ссылку ниже

    Upd: 2024-10-19

    В связи с появлением аж двух пользователей Next считаю успешно допиленной поддержку +3, так как она была протестирована вышеупомянутыми. Распоследний код доступен на gitflic и, говорят, даже кто-то его смог собрать. «У меня всё работает». Правда, Next у меня, конечно, нет. Наверное, поэтому и работает

    как собрать


    +3 DOS: make clean all 'OPTS=-DDOS_PLUS3'
    Next: make clean all 'OPTS=-DDOS_PLUS3 -DDOS_NEXTZXOS'
    [свернуть]


    Next-специфичные вопросы, которые было бы хорошо прояснить:


    1. Scott-Falk в своём «драйвере» UART для Next явно проверяет идентификатор модели «зашитый» в FPGA. Мне такой подход не нравится, а если у пользователя вообще не клон Next? Тогда считываться будет знаменитая плавающая шина данных и задетектировать можно что угодно. Или я ошибаюсь? Да и не нужна там проверка модели…
    2. Next требует отдельной сборки. Исторически всё собиралось в образ TR-DOS, потом добавили образ +3 (который уже не совсем то, что пользователи ждут). А вот для Next пользователи точно ждут ZIP с отдельными файлами внутри. Там есть ещё формат NEX, но, как я понимаю, это тупо «слепок» памяти, который НЕ совместим с использованием +3 DOS API. Или не так?

    Исходя из вышеперечисленного я предлагаю:
    1. Сделать отдельную сборку для Next — Сделано, другим способом и нельзя.
    2. Таки проверять Next (Z80N) это «вообще», а только потом смотреть на модель, если вообще нужно смотреть на модель.
    3. При возможности вынести из сборки Next всё, чего там быть не может.
    [свернуть]


    P.S. Кому интересно, попутно нашли багофичу в ZX Next OS. Читайте в ближайшем будущем на SC...
    Последний раз редактировалось Chwe; 19.10.2024 в 13:30.

    Эти 2 пользователя(ей) поблагодарили Chwe за это полезное сообщение:

    Djoni(14.10.2024), Uzix(14.10.2024)

  8. #58

    Регистрация
    28.08.2023
    Адрес
    г. Брест, Беларусь
    Сообщений
    142
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    33 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    После того, как я услышал, что «на Next всё работает», я попросил показать экран Help (это на Next KS2, VGA0):


    Вопрос: там это только эстетическая проблема или нет? Быстрый поиск по коду показывает, что в smf.asm используется us_per_int. Как его рассчитать, я, кажется, придумать могу, а вот как остальные параметры измерить/рассчитать, учитывая какую-то безумную сложность видео на этом Next… Я бы им рассказал, как что измерить, если бы сам понимал…

    Или «на скорость не влияет»?

    что мне удалось узнать на данный момент


    Если раскомментировать код после метки «debug» в device.asm, то оно выводит следующее: 4C660400. При этом 4c66 явно сильно меньше первой 28 МГц записи в таблице device_t (там первая 5ef5+10). Хотя Next заявлен как 128/+2A/+3.
    [свернуть]

  9. #59

    Регистрация
    18.05.2020
    Адрес
    г. Белгород
    Сообщений
    527
    Спасибо Благодарностей отдано 
    170
    Спасибо Благодарностей получено 
    637
    Поблагодарили
    201 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Chwe, судя по картинке - на 28 МГц процессор у некста работает с вейтами - вывод миди потока через AY работать не будет, в остальном проблем не вызовет.

  10. #60

    Регистрация
    28.08.2023
    Адрес
    г. Брест, Беларусь
    Сообщений
    142
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    33 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Uzix Посмотреть сообщение
    вывод миди потока через AY работать не будет, в остальном проблем не вызовет.
    Ну, у них там в Next аппаратный UART (тактовый сигнал которого, почему-то, зависит от частоты кадров, ну, им так проще, наверное), поэтому «на скорость не влияет» буквально

Страница 6 из 7 ПерваяПервая ... 234567 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Z-Player for GS v4.0 (+FAT32)
    от Evgeny Muchkin в разделе Софт
    Ответов: 82
    Последнее: 12.05.2025, 15:25
  2. AVR-AY player
    от Zloy в разделе Софт
    Ответов: 375
    Последнее: 04.12.2024, 00:03
  3. Z-PLAYER for GS v3.4
    от Evgeny Muchkin в разделе Софт
    Ответов: 27
    Последнее: 24.12.2020, 17:03
  4. AY Player
    от tiboh в разделе Софт
    Ответов: 24
    Последнее: 28.10.2011, 20:18

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •