Важная информация

User Tag List

Страница 6 из 6 ПерваяПервая ... 23456
Показано с 51 по 55 из 55

Тема: ZX MIDI player

  1. #51
    Activist Аватар для Uzix
    Регистрация
    18.05.2020
    Адрес
    г. Белгород
    Сообщений
    486
    Спасибо Благодарностей отдано 
    153
    Спасибо Благодарностей получено 
    559
    Поблагодарили
    183 сообщений
    Mentioned
    7 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
    Member
    Регистрация
    28.08.2023
    Адрес
    г. Брест, Беларусь
    Сообщений
    68
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    32
    Поблагодарили
    16 сообщений
    Mentioned
    0 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 
Просмотров:	23 
Размер:	8.6 Кб 
ID:	80884
    [свернуть]

  3. #53
    Activist Аватар для Uzix
    Регистрация
    18.05.2020
    Адрес
    г. Белгород
    Сообщений
    486
    Спасибо Благодарностей отдано 
    153
    Спасибо Благодарностей получено 
    559
    Поблагодарили
    183 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  4. #54
    Member
    Регистрация
    28.08.2023
    Адрес
    г. Брест, Беларусь
    Сообщений
    68
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    32
    Поблагодарили
    16 сообщений
    Mentioned
    0 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.

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

    Djoni (16.06.2024), Uzix (13.06.2024)

  6. #55
    Member
    Регистрация
    28.08.2023
    Адрес
    г. Брест, Беларусь
    Сообщений
    68
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    32
    Поблагодарили
    16 сообщений
    Mentioned
    0 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.

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

    Djoni (15.06.2024), Uzix (17.06.2024)

Страница 6 из 6 ПерваяПервая ... 23456

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

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

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

Похожие темы

  1. Z-Player for GS v4.0 (+FAT32)
    от Evgeny Muchkin в разделе Софт
    Ответов: 62
    Последнее: 03.03.2024, 20:19
  2. AVR-AY player
    от Zloy в разделе Софт
    Ответов: 372
    Последнее: 29.09.2021, 20:00
  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

Ваши права

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