интересно было бы на реальных лентах погонять...
Вид для печати
проверил код, для 16 бит ошибка вкралась :)
каждый сэмпл вначале преобразовывается к 32 битному знаковому значению. См. файл WavSerializer, класс WavStreamReader:
8 bit:
16 bit:Цитата:
Int32 sample = bufferRaw[offset];
return sample - 127;
т.е. 16 битное значение интерпретировалось как 32 битное. Исправил. Нужен примерчик 16 битного WAV файла с какимнить basic блоком для проверки, кто-то может выложить? У меня на компе никакого софта для преобразования к сожалению нет...Цитата:
Int32 sample = BitConverter.ToInt32(bufferRaw, offset);
return sample;
fuse, судя по коду, только 8 бит понимает и использует аналогичный подход.
Залил исправленную версию: ZXMAK2620.ZIP
- исправлено чтение WAV PCM 16 bit
- улучшено чтение нестандартных WAV файлов
- добавлена поддержка аудиоформата IEEE FLOAT 32 bit (проверить пока не на чем).
- исправлена ошибка обработки исключений при загрузке/сохранении
---------- Post added at 17:16 ---------- Previous post was at 17:14 ----------
а что за ветка, можно линк? :v2_dizzy_fisher:
да, прикольно с турбозагрузкой, там чистый WAV PCM, так что все грузится окей, прямо из зипа :v2_dizzy_roll:
вот WAV-ы с еще более быстрой загрузкой: https://sites.google.com/site/zximmo...-audio-tapes-1
тоже работает :)
скайп на работе, а я дома :)
PS: помню кто-то говорил что заказал плату NEMO-FDC для изучения на анализаторе, собирались изучать работу ВГ93, есть какая-то информация?
протестил на записи с реальной кассеты 44100 16 бит - работает :)
---------- Post added at 22:44 ---------- Previous post was at 22:41 ----------
а ты ВГ-шку не изучал? Нужно план какой-то составить как все проверить и по полочкам разложить. Без точной информации по ВГ сделать хорошую эмуляцию не выйдет - очень много деталей, которые нигде не описаны.
Т.к. ULA уже более-менее отлажена, задумал провести полномасштабное широкое тестирование ULA для Spectrum 48/128 на тайминговых тестах и разложить по полочкам где какая ULA (есть несколько модификаций).
К сожалению не смог найти как выглядят на оригинальных машинах следующие тесты:
1) ulatest3.tap
2) ulatest3-modified
интересуют скрины именно настоящих спектрумов, с подписью что это за модель. Инет пестрит снимками клонов которые "очень похожи", вроде Harlequin и т.п. Но скрины оригинального спеки найти не удалось. Может кто-то может помочь?
Заранее спасибо :)
Зарелизил версию 2621 :)
- переработан код ULA для оригинального спектрума 48/128, испрвлены ошибки таймингов
- испрвлены тайминги для некоторых инструкций #CBXX
Теперь ULA 48/128 работает как часы :)
Все известные мне тесты/демы по мультиколору/таймингам/contended memory для оригинального спека успешно пройдены!
http://s019.radikal.ru/i629/1205/4e/e3cc7ea2dc57.jpghttp://s019.radikal.ru/i600/1205/0d/246375794158.jpg
А можете выложить эти тесты одним архивом?Цитата:
Все известные мне тесты....таймингам/contended memory
они у меня в не очень удобоваримом виде, я лучше перичислю названия часто используемых, если что не найдешь, скажи - я поищу оригинал в закромах:
- ulatest3 - хорошо проверять смещение contended тактов (по черным знакоместам) + проверка FF порта (по значениям);
- rotatix4 - если чтото не так скролл на бордюре начинает дрожать
- BBG48 и BBG128 - весьма привередливые к точности contended IO
- BorderTrix - требует точной эмуляции ula 48 early model
- Timing_Tests-48k_v1.0.tap - тест conteded таймингов на различных инструкциях
- Sidewise48 - при неточной эмуляции порта #FF зависает или мерцает спрайт
- DarkStar48 - корабль на бордюре
- Defenders of The Earth - надпись DOE на верхнем и нижнем бордюре
- MDA Demo - скролы и индикаторы на бордюре, мултиколор
- NMI2, NMI3 - мультиколор на бордюре и экранной области
- shiny48,shiny128 - мультиколорные волны (немного некорректна т.к. разрабатывалась не на железе)
- SHOCK MEGADEMO - мультиколорные полоски по всему экрану включая бордюр
- Aquaplane - продолжение горизонта на бордюре
- Blacklamp - мультиколорный текст
- MQM - мультиколорные полосы по всему экрану (ula 48)
- Overscan - мультиколорные полосы по всему экрану
- sixth_kaz - мультиколорные полосы и индикаторы по всему экрану
- THERE - вертикальный скрол с большими мультиколорными буквами
- Vectron - продолжение заставки на бордюре
- Action Force 2 - мультиколорный вертолет и текст перед игрой
- fusetest - тест contended IO и некоторых инструкций
ulatest3 - Вложение 35727
rotatix4 - ....
BBG48 и BBG128
BorderTrix - ftp://ftp.worldofspectrum.org/pub/si...erTrix.tap.zip ftp://ftp.worldofspectrum.org/pub/si...SourceCode.zip
Timing_Tests-48k_v1.0.tap - ....
Sidewise48 - ....
DarkStar48 - ftp://ftp.worldofspectrum.org/pub/si...rkStar.tap.zip (В меню жмем на SPACE)
Defenders of The Earth - ....
MDA Demo - ftp://ftp.worldofspectrum.org/pub/si...DADemo.tap.zip (для SP128)
NMI2, NMI3 - ....
shiny48 - http://zxspectrum48.i-demo.pl/zxdemo...ay/shiny48.tap
проверьте игрушку Sentinel, там после старта идёт подсчёт системных часов (23672) и если совпадёт с одной из трёх моделей то идёт скролл по бордюру
да, есть такое дело :)
http://s019.radikal.ru/i613/1205/92/619fcb158765.jpg
ещё вспомнил про игрушку Pippo, там сначала проверяется модель спектрума (по байту из ПЗУ, кажется нужна 128ая модель) а потом после старта игры печатаются цифры 3,2,1,GO на весь экран
Обновил до версии 2622:
- добавлен глитч чтения порта #7FFD для Spectrum 128 (теперь проходит все тесты fuse);
- исправлена обработка ошибки при открытии файла эксклюзивно занятого другим процессом;
- исправлена загрузка Z80 снэпшотов, теперь поддерживаются снэпшоты с 55 байтовыми блоками и 128 снэпшоты без компрессии
---------- Post added at 01:23 ---------- Previous post was at 01:03 ----------
да, работает на ULA 48, интересно на оригинале тоже такие буквы кривые или где-то косяк с таймингами?
http://s017.radikal.ru/i437/1205/1a/741f070c74a9.jpghttp://s017.radikal.ru/i419/1205/a3/7ce87dc027bb.jpg
На WOS подтвердили что на оригинальном спектруме буквы точно также кривые :)
Может кто-то подскажет оптимальный алгоритм детекции загрузки с магнитофона?
Сделал в лоб проверку по частоте опроса #FE - были ложные срабатывания в мультиколорных демах.
Усложнил условие - при разрешенных прерываниях запретил стартовать ленту.
Есть проблема - если стандартному загрузчику не нравится блок, то он перемигивает бордюром, в это время делая небольшую паузу, которая ошибочно распознается как стоп чтения приводит к остановке ленты и соответственно к сбросу позиции текущего блока на 0... Таким образом пропуск ненужного блока не срабатывает - блок тут-же запускается сначала...
Думаю еще какие-то грабли будут, может у когото есть уже готовые условия надежной детекции? :)
pc=в районе 0564h - автостарт ленты
опрос того самого бита порта FE с частотой в районе 3500000/2168=1614 Гц (пилот тон) - тоже автостарт ленты
Определять, опрашивается ли именно бит D6 порта FEh с помощью несложного анализа кода, следующего за чтением из порта.
Ну и плюс, как я уже писал, если регистровая пара PC в диапазоне адресов пзу-шной процедуры чтения с ленты и включено пзу sos48, то однозначно требуется автостарт и/или чтение с ленты. Покинули это адресное пространство - стоп лента.
со стандартным загрузчиком вроде и без проверки адреса работает.
Проблема в следующем - для детекции стандартного загрузчика требуется определять наличие хотя-бы 8 чтений за фрейм. И все вроде работает но...
Загружаем NMI3 и после загрузки меню магинтофон не останавливается, т.к. производится 14 чтений за фрейм с интервалом менее 96 тактов. Ставлю проверку на прерывания, т.е. если во время чтения порта включены прерывания - не включать магнитофон. Все совсем супер - вся NMI3 на полном автомате грузится. Однако далее пробуем загрузить игрушку со Speedlock 6 и загрузка падает, т.к. во время бипов внезапно останавливается магнитофон, оказывается в это время порт опрашивается при включенных прерываниях...
Ну какая же это загрузка с ленты? Это совсем не загрузка с ленты. Я же писал, пилоттон идет с частотой 2168T, так для чтения нужно минимум 30 чтений за фрейм, реально - на порядок больше.
Обновил эмулятор до версии 2623 - ссылка на загрузку
Что нового:
- добавлена поддержка ZIP файлов созданных в UNIX системах (тут иногда такие выкладывают);
- улучшена поддержка WAV (исправлен PCM24 и FLOAT32, добавлена поддержка PCM32 и FLOAT64);
- исправлен драг-н-дроп при открытых модальных диалогах;
- основная фишка этой верси - AutoPlay для магнитофона (спасибо Woody за алгоритм)
алгоритм простой - магнитофон запускается на 1 сек если выполняются все следующие условия:
1) порт опрашивается чаще чем 96 тактов
2) значение PC соответствует предыдущему опкоду IN
3) изменился только один регистр из следующих: A,B,C,D,E,H,L
4) изменение регистра было на ±1
5) условия 1-4 выполнились 8 раз подряд
В оригинале у Woody есть еще одно условие, но я это условие добавлять не стал, т.к. это негативно скажется на скрости эмуляции:
6) над прочитанным значением производится операция AND 32 или AND 64
Написал эмуляцию SMUC и HDD, но не могу найти чем можно ее проверить. Эмуляции ATAPI пока нет - только HDD.
Запускаю CDWALK и вижу в логе такие операции со SMUC (Это весь лог от запуска эмулятора, нет даже ни одной записи в SMUC порт SYS):
на этом и зацикливается, насколько я понял CDWALK ждет прерывания от винчестера, но прерывания нет и он висит...Цитата:
Debug 20:12:29.289 AtaPort.reset
Debug 20:12:40.606 AtaPort.write(6, 0xB0)
Debug 20:12:40.607 AtaPort.read(7) = 0xFF
Debug 20:12:40.607 AtaPort.write(4, 0x00)
Debug 20:12:40.607 AtaPort.write(5, 0x00)
Debug 20:12:40.607 AtaPort.write(6, 0xB0)
Debug 20:12:40.607 AtaPort.read(7) = 0xFF
Debug 20:12:40.607 AtaPort.read(7) = 0xFF
Debug 20:12:40.607 AtaPort.read(7) = 0xFF
Debug 20:12:40.607 AtaPort.read(7) = 0xFF
Может кто-то поможет понять как это все работает?
Хотел попробовать в Unreal, но не могу понять - как создать образ винчестера?
Alexander Makeev, CDWALK насколько знаю только с сидюком работает.
Есть тест от Breeze, если не ошибаюсь, он сканит порты контроллера и выдает, что там подключено. Постараюсь поискать.
UPD: Нашел - HDST
Unreal c подключёнными образами ZC SDCARD NEMO и NGS ;)
создавал с реальных cf и sd утилитой WinHex и Winimage.
http://webfile.ru/5984844
спасибо, попробовал заюзать на unreal, почему-то почему-то во время теста сбрасывается.
Но у меня работает :) Нашел в чем дело - SMUC конфликтовал с магнитофоном и клавиатурой, которые висели эксклюзивно на порте #FE. Добавил проверку заработало, возникли новые вопросы :)
правильно ли HDST отображает название устройства и версию?
У меня это выглядит так:
http://s55.radikal.ru/i148/1206/17/79240178c941.jpg
Не могу понять, толи в коде ошибка, толи в HDST...
И еще вопрос - HDST показывает почему-то что у винта #0404 головки, а должно быть 4, по логу обмена вроде все правильно:
Не могу понять, толи в HDST ошибка, толи где-то в коде косяк...Цитата:
Debug 23:04:29.730 AtaPort.read_data() = 0x0004
Debug 23:04:29.730 SMUC: read IDE=0x04
Debug 23:04:29.730 SMUC: read IDE-HI=0x00
Могут быть нюансы, конечно, но у меня название винтов на смуке показывало правильно. А тут явно пары букв местами перемешаны.
Прикрути ProfROM, там и потестишь :)
бывает на некоторых винтах такой глюк - четные и нечетные знакоместа перепутаны. видимо связано с прошивкой firmware винчестеров.
upd: допустим с CF SanDisk 512Mb всё показывает корректно, хотя были у меня случаи и таких вот переворотов. насчет головок - да, есть такое дублирование...
по стандарту, пары байт в строке должны быть перевернуты, толи HDST об этом не знает, толи ошибка в коде :o
а есть описание как оно работает - какие порты куда/какие страницы пзу мапятся?
И еще такой вопрос - из профрома можно отформатить неразмеченый винт? Какими командами это делать? :v2_conf2:
обновил до версии 2624 (download link) - добавил поддержку PROF-ROM :biggrin:
RTC и HDD пункты в теневом мониторе почему-то задизаблены, как со смуком так и без. Хотя по логам видно что со смуком что-то делает. Буду разбираться дальше...
http://s019.radikal.ru/i644/1206/36/102317aa8843.png
Смотрю уже не актуально...
Можно. Тут было описано - http://witchcraft.org.ua/downloads/z..._doc_scorp.zip
---------- Post added at 20:43 ---------- Previous post was at 20:39 ----------
Значит что-то не так работает, как должно быть. ЕМНИП, если нет NVRAM и/или RTC, то смук считается неопознанным и соответственно недоступны пункты меню работы с ним (с часами, винтом и пр.)