Лакшери плеер
О громкости
Наблюдая за стримами прохождения игр заметил что стримерам в наушниках слушать 8-битные звуки и музыку довольно неприятно - они воспринимаются грубее и следовательно громче чем обычно. В Unreal Speccy Portable ручек громкости не нашел, зато регулировка громкости есть в Retro Virtual Player. Значит пора сделать и такой лакшери-вариант…
Retro Virtual Player
Давно посматривал в сторону rvmplayer, но он к сожалению поддерживает только ZxSpectum 3+ с расширениями dsk, dsk же в моей сборке не поддерживается никак.
Погуглил что придумало прогрессивное человечество, думал что давно уже все проблемы решены, есть несколько утилит, какая-нибудь tape2dsk, которая с легкостью запилит мне dsk с обычным бейсик-загрузчиком и бинарным файлом, но внезапно ничего из найденого не работало. Испробовал множество разных утилит, но в итоге пришлось сделать вручную.
Что пробовал
- https://github.com/ClaireCheshireCat/dsk-lua - итог работы в RVM результат basic-файла загружает с глюками, подгрузить в имеющийся dsk бинарник не получилось - ошибка lua
- https://github.com/simonowen/samdisk - конвернул из trd что-то совсем не то.
- https://github.com/windenntw/taptools (tap2dsk) - выдает то что не грузится ни в xpeccy ни в rvm
- https://github.com/TomDDG/Z80to - юморист, в гитхаб выложил набор zip с бинарниками, пробовать нет желания
- https://github.com/Loxrie/fuse-emulator-utils - не поддерживает dsk
Как сделал в итоге
Что ж.. Попробуем вручную. Очень помогла вот эта статья. Из нее узнал рабочее решение как можно через бейсик скачать :
10 CLEAR 24500
20 LOAD “t:”
30 LOAD “” CODE XXXXX,NNNNN
40 SAVE “a:name.aaa” CODE XXXXX,NNNNN
и как сделать автостарт диска:
При желании того, чтобы файл грузился по опции loader в основном меню, необходимо присвоить ему имя DISK по аналогии с boot для TR-DOS.
Подготовительная часть, делается однократно
- Открываем сайт https://zx.remysharp.com/bas/
- Пишем туда такой код:
10 CLEAR 24575 20 BORDER 0: PAPER 0 30 LOAD "CELL3326.bin" CODE 24576 40 RANDOMIZE USR 24576 - Скачиваем как .TAP с именем
disk_loader.tap - открываем RVM в конфигурации ZxSpectum 3+
- создаем в эмуляторе пустой DSK
- кидаем в эмулятор tap-файл
- выбираем в меню пункт
Loaderи загружаем файл с магнитофонной ленты, получаем ошибкуFile not foundно это нормально - жмем “пробел”, переходим в
+3 Basicи оказывается программа наша все-таки загружена - самое время сохранить ее на диск с автозапуском на 10 строке -
save "a:disk" line 10(двоеточие пишется как ctrl+z на клавиатуре mac) - проверяем содержимое диска a -
cat a: - и сохраняем сам диск в качестве заготовки для выпуска каждого билда
Придется повторять неоднократно с выпуском нового билда
- открываем RVM в конфигурации ZxSpectum 3+, выбираем в меню пункт
+3 Basic - делаем
CLEAR 24575чтобы хватило места для загрузки нашего бинарника - кидем в эмулятор dsk-файл с готовым загрузчиком, который получили на предыдущем шаге
- кидаем в эмулятор tap-файл с новым билдом
cell3326.tap, перематываем бейсик-загрузчик, чтобы следующим на ленте был бинарный блок - выполняем команду
load "t:"чтобы загрузка была с ленты - загружаем бинарный файл с ленты
load "" code - сохраняем бинарный файл на диск
save "a:CELL3326.bin" code 24576, 32360Где 24576 - адрес загрузки нашего бинарника (0x6000), а 32360 - его длина. Эта информация выводится в консоль при сборкеmake make_tape> BINARY SIZE: 32360 0x7E68 > BINARY BEGIN: 0x6000 (24576) > BINARY END: 0xDE68 (56936)
После нажатия на кнопку сброс в эмуляторе и выбре пункта Loader в меню должна произойти автозагрузка диска с игрой…
Бонус
Открыл для себя интересный способ формирования tap-файла - через псевдокоманды бейсика, минуя утилиту txt2bas.
ZXB_CLEAR EQU $FD
ZXB_VAL EQU $B0
ZXB_OUT EQU $DF
ZXB_POKE EQU $F4
ZXB_LOAD EQU $EF
ZXB_CODE EQU $AF
ZXB_RANDOMIZE EQU $F9
ZXB_USR EQU $C0
ORG #5C00
BASIC_START
db 0,0
dw LINE_LEN
BASIC_LINE db ZXB_CLEAR,ZXB_VAL,'"24575":'
db ZXB_POKE,ZXB_VAL,'"23388",',ZXB_VAL,'"17":'
db ZXB_OUT,ZXB_VAL,'"32765",',ZXB_VAL,'"17":'
db ZXB_LOAD,'"CELL3326.bin"',ZXB_CODE,':'
db ZXB_RANDOMIZE,ZXB_USR,ZXB_VAL,'"24576"'
db 13
BASIC_END
LINE_LEN EQU BASIC_END-BASIC_LINE
BASIC_LEN EQU BASIC_END-BASIC_START
LOAD_ADDR equ static
EMPTYTAP "cell3326.tap"
SAVETAP "cell3326.tap",BASIC,"boot",BASIC_START,BASIC_LEN,0
rvm
]