Лакшери плеер

О громкости

Наблюдая за стримами прохождения игр заметил что стримерам в наушниках слушать 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.

Подготовительная часть, делается однократно

  1. Открываем сайт https://zx.remysharp.com/bas/
  2. Пишем туда такой код:
    10 CLEAR 24575
    20 BORDER 0: PAPER 0
    30 LOAD "CELL3326.bin" CODE 24576
    40 RANDOMIZE USR 24576
    
  3. Скачиваем как .TAP с именем disk_loader.tap
  4. открываем RVM в конфигурации ZxSpectum 3+
  5. создаем в эмуляторе пустой DSK
  6. кидаем в эмулятор tap-файл
  7. выбираем в меню пункт Loader и загружаем файл с магнитофонной ленты, получаем ошибку File not found но это нормально
  8. жмем “пробел”, переходим в +3 Basic и оказывается программа наша все-таки загружена
  9. самое время сохранить ее на диск с автозапуском на 10 строке - save "a:disk" line 10 (двоеточие пишется как ctrl+z на клавиатуре mac)
  10. проверяем содержимое диска a - cat a:
  11. и сохраняем сам диск в качестве заготовки для выпуска каждого билда

Придется повторять неоднократно с выпуском нового билда

  1. открываем RVM в конфигурации ZxSpectum 3+, выбираем в меню пункт +3 Basic
  2. делаем CLEAR 24575 чтобы хватило места для загрузки нашего бинарника
  3. кидем в эмулятор dsk-файл с готовым загрузчиком, который получили на предыдущем шаге
  4. кидаем в эмулятор tap-файл с новым билдом cell3326.tap, перематываем бейсик-загрузчик, чтобы следующим на ленте был бинарный блок
  5. выполняем команду load "t:" чтобы загрузка была с ленты
  6. загружаем бинарный файл с ленты load "" code
  7. сохраняем бинарный файл на диск 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

Written on November 20, 2025
[ rvm  ]