Спасибо!
Прочитал описание формата ay. Сверился с файлами которые у меня есть. Чет не соответствует. Понял что ничего не понял. Lha это формат хранения word , типа low, hi? Есть ли у тебя описание формата?
Вид для печати
Спасибо!
Прочитал описание формата ay. Сверился с файлами которые у меня есть. Чет не соответствует. Понял что ничего не понял. Lha это формат хранения word , типа low, hi? Есть ли у тебя описание формата?
lha это архиватор древний, популярен на атари, откуда формат ym родом.Внутри архива будет один файл формата ym6. Там сколько-то заголовков (LeOnArD! итд) из которых важно только количество записей, допустим их 100. Дальше идет 100 байт регистр 0, затем 100 байт регистр 1 итд до регистра 15 (регистры 14 и 15 не используются, но пишутся).
Да, тяжело с мертвыми форматами работать ...
Скрипт твой заработал. Спасибо!
- - - Добавлено - - -
svofski, ты этот формат по памяти знаешь или есть описание?
- - - Добавлено - - -
svofski, ещё вопрос про модель звукового чипа
Я ковертнул вот эту песенку
https://zxart.ee/eng/authors/m/mmcm/...bit-pops-acid/
И она нормально играет. Но в странице с описанием написано что тип чипа YA-2149f. Но в твоём примере на базыре написано что чип AY 8910. Они аналоги, можно музыку для любого из них конвертить?
есть описание, поищи ym6 leonard. я сейчас далеко от компа.
ay-3-8910 и ym-2149 логически вроде эквивалентны, но в деталях там есть отличия и звучат они, говорят, по-разному.
А если буфера и стеки вынести на квазидиск в подэкранные области? Кстати сжатые стримы с окном 256 прилично сжимаются zx0 без окна.
То есть можно музыку держать дважды сжатой в игре. Потом распоковывать на квазидиск в подэкранные области и оттуда проигрывать в теории. По крайней мере у меня такой план. Или тут есть какие подводные камни?
Камней особых вроде нет.
Если не так критичен каждый такт, а память в цене, то может быть все же один из stc плееров, или плеер pt2 могут лучше подойти. Там степень сжатия будет самая высокая.
память как раз не в цене так как квазидиск есть. Нужно кстати сравнить pt2, stc и zx0 по памяти.
- - - Добавлено - - -
Кстати музон который я конвертировал для тестов
В pt3 занимает 5.4kB, дважды пожатый в zx0 4kB.
svofski, ещё хочу сказать большое спасибо за гига Чад плеер. Очень классно написан!
Я так понимаю, что дважды пожатый zx0 -- это регистровые дампы сжатые для гигачада закатанные потом вместе со всем остальным без ограничения окна. pt3 тогда тоже надо сравнивать аналогично -- в замаринованном виде.
Спасибо, мне и самому понравилось. Забавно получилось, я думал чисто ржаки ради сделать акробатический трюк, а получилось вполне практично.
Но все равно было бы здорово как-нибудь сочинить полноценный плеер для 8080 без портов и рекомпиляций.
ivagor, я попытался обновить zx0 чтобы он мог распаковывать в квазидиск, но что-то пошло не так и он портит данные. Совсем чуть чуть. Не могу понять в чем беда. Помоги найти баг пожалуйста.
Код:; unpack to the ram-disk $8000-$FFFF
; in:
; de - compressed data addr
; bc - uncompressed data addr
; a - ram-disk activation command
dzx0RD:
sta @ramDiskCmd1+1
sta @ramDiskCmd2+1
lxi h, $ffff
push h
inx h
mvi a,$80
@literals:
call @Elias
call @ldir
jc @newOffset
call @Elias
@copy:
xchg
xthl
push h
dad b
xchg
call @ldirUnpacked
xchg
pop h
xthl
xchg
jnc @literals
@newOffset:
call @Elias
mov h, a
pop psw
xra a
sub l
rz
push h
rar
mov h, a
ldax d
rar
mov l, a
inx d
xthl
mov a, h
lxi h, 1
cnc @EliasBacktrack
inx h
jmp @copy
@Elias:
inr l
@EliasLoop:
add a
jnz @EliasSkip
ldax d
inx d
ral
@EliasSkip:
rc
@EliasBacktrack:
dad h
add a
jnc @EliasLoop
jmp @Elias
@ldir:
push psw
@ldirLoop:
ldax d
push psw
; turn on the ram-disk
@ramDiskCmd1:
mvi a, TEMP_BYTE
out $10
pop psw
stax b
; turn off the ram-disk
xra a
out $10
inx d
inx b
dcx h
mov a, h
ora l
jnz @ldirLoop
pop psw
add a
ret
@ldirUnpacked:
push psw
; turn on the ram-disk
@ramDiskCmd2:
mvi a, TEMP_BYTE
out $10
@ldirUnpackedLoop:
ldax d
stax b
inx d
inx b
dcx h
mov a, h
ora l
jnz @ldirUnpackedLoop
; turn off the ram-disk
xra a
out $10
pop psw
add a
ret
Мне не хватает данных об условиях применения. Если упакованные данные и распакованный блок не пересекаются, то просто включаем кваз в нужное состояние перед распаковкой и используем обычный распаковщик. Специальный распаковщик нужен если пересекаются.