Skip to content

Latest commit

 

History

History
569 lines (507 loc) · 58 KB

File metadata and controls

569 lines (507 loc) · 58 KB

2022-01-18

2022-01-21

Эксперименты с эмулятором продолжаются. На сегодня он умеет:

  • Загружать ROM и RKS из файла (пока что в ручном режиме в сырцах true на false надо сменить).
  • При этом можно загружать ПЗУ Лика или Специалиста.
  • Игра Клад уже работает без ошибков. Бейсик все еще глючит.
  • Появился программный ассемблер/дизассемблер. Он сейчас еще работает не полноценно, т.к. не все команды реализованы (пока что 30% готовности).
  • Появились юнит тесты - тестирующие команды процессора.
  • Появились интеграционные тесты, тестирующие что будет в результате выполнения 10M тиков на определенной ROM/игре c CPU/экраном (в формате png).
  • Постепенно переношу полезные материалы (мануалы, игры) в ресурсы проекта. Этот репозиторий планируется как единое место для всех наработок и контента.
  • Код сильно отрефакторен. Удален старый код ZX Spectrum, расширенные команды Z80, фичи, которые пока что не сильно нужны (после переноса на новый модерновый UI фреймворк часть из них верну). Сильно упрощал везде, где только можно. Разделил все GodObjects на компоненты.

2022-01-29

Обновления в эмуляторе:

  • Все команды мигрированы из старого процедурного стиля в новый OOP.
  • Попутно устранены проблемы с флагом P и командой DAA (в этом
    как оказалось, крылись отличия Z80 и i8080).
  • Спасибо Автору статьи про различия i8080 и Z80.
  • Спасибо Viktor Pykhonin за исходники и emu80-дебаггер они очень помогли разобраться в отличиях.
  • Спасибо Авторам тестов команд i8080 и Begoon за то, что выложил их на своем GitHub вместе с исходниками.
  • Спасибо Svofski за чудный assembler редактор благодаря ему я смог адаптировать нерабочие тесты к работе на ЛИКе. Речь про test.asm и test.rks.
  • Итого игра Клад работает до самого последнего призового уровня (раньше не работала), а так же бейсик завелся и предварительно работает.
  • Уверен есть еще много косяков связанных с флагами. У меня в очереди жду еще три обширных теста команд i8080. В ближайшем будущем поправим. Тесты лежат тут.
  • Так как разработка ведется через тесты - улучшен фреймворк для написания тестов. Можно ассемблировать-дизассемблировать команды. Можно останаваливать cpu по какому-то указанному в тесте критерию. Можно трейсить выполнение программы. Можно запускать тесты с записанными сценариями нажатых клавиш.
  • Исправлена раскладка клавиатуры. Были ошибки.
  • Для удобства есть возможность переключаться QWERTY/JCUKENG по переключению раскладки на хостовой машине, или по временно зажатому Ctrl.
  • Модификаторы Ctrl, Alt, Shift (и их комбинации) так же обрабатываются - на некоторые клавиши 2, 4, 6, 7 (и другие) с модификаторами "повешаны" дополнительные символы, которые ждешь глядя на современную калавиатуру.
  • По хоткеям NUM_PAD(* + -) можно влиять на скорость эмуляции: максимально ускорять, ускорять на 15% и замедлять на 15% соответственно.
  • При работе эмулятора в корне создается файлик keys.rec в нем записано когда (тик) какая клавиша была нажата и когда отпущена. Это позволяет записать вручную сценарий, а потом детерминированно его воспроизводить в тестах или как replay.
  • По хоткею NUM_PAD(.) можно загружать любой такой replay.
  • По хоткею NUM_PAD(/) можно загружать rks/bin/com файлы. При этом эмулятор заботливо вобьет в мониторе JXXYY и нажмет Enter.
  • Выпилены старые Апплеты, запуск приложения заменен на Swing.
  • Добавлены скрипты build/build-client.sh для запуска десктопной версии, и build/build-server.sh чтобы поднять jetty и раздавать это же приложение в сети.
  • Добавлены найденные на просторах сети игры ЛИКа и тексты.

2023-09-09

  • В JNLP формате не работают хоткеи так же как в обычной версии.
  • Разделены тесты CpuTest, CpuPerformanceTest, CpuSmokeTest.
  • Выделена документация по командам процессора.

2023-09-10

  • Добавлены тесты на команды процессора 8080.
  • Добавлен более удобный тестовый метод для тестирования изменений в памяти.
  • Добавлен GPT generated dirty класс, который позволяет быстро по отчету о сваленных тестах jUnit (из Intellij Idea) выкусить actual блок и заменить expected по всему исходнику java класса теста. Очень удобно. Давно пора это в IDE добавить как фичу.

...

2024-12-06

  • (033e1d34) Теперь тест js версии ассемблера генерируют контент для всех тестов процессора.
  • (7009ba58) Теперь тест java версии ассемблера использует тот же контент, что и js версия для всех тестов процессора.
  • (5262f92f) Исправление ошибки в java ассемблере связанной с неправильной обработкой чисел в формате 0b_1111_1111. в методе resolveNumber.
  • (cd2a4802) Исправление в js/java версиях ассемблера в области парсинга разных форматов чисел resolveNumber. Это отступление от оригинальной вресии js ассемблера было необходимо, так как java версия evalInvoke не работает с некоторыми форматами чисел, так как это делает js версия.
  • (27b3fae7) Тест ассемблера AssemblerTest.assemble() теперь генерирует mem файлы тестов процессора из исходников. Все они соответсвуют оригинальным версиям, о чем можно сделать вывод, что ассемблер работает.
  • (c51579d2) В Bites появился метод byteArray позволяющий получить память в виде массива байтов, что
    используется теперь в асемблере для удобства.
  • (c7d0080a) Bites теперь может печатать содержимое памяти в виде таблицы.
  • (c7d0080a) Для нового ассемблера добавлена документация по использованию, тест и Assembler.main() ззапускатор.
  • (ec138614) Обновил в шапке релизы ассемблера. Rev.K2: Ported to Java by Oleksandr Baglai Rev.K3: Fixed resolveNumber for processing numbers with '_' in them. Fixed corner cases with '0b' prefix in combination with 'h' suffix.
  • (8818a6d1) Реализован функционал генерации wave файлов на основе нового ассемблера.
  • (8818a6d1) Добавлены тесты на генерацию wave файлов для всех тестов процессора.
  • (1914f442) Исправлена частота дискретизации wave чтобы было близко к тому, как оно в оригинале должно звучать.
  • (1914f442) Добавлены тесты на генерацию wave файлов для игры клад, исправлены wave файлы всех тестов процессора.
  • (c072c39e) Так как в играх появляются дополнительные артефакты кроме самой скопилированной версии, было разделение - каждая игра имеет свою папку с файлами.
  • (15f2c737) Добавлена в тесте testLik_generateWave генерация всех wave файлов для всех игр ЛИКа.
  • (ce6bfe72) В FileAssert если файл уже существует, и его хеша нет в кеше, то он пересчитывается. Так как не все тесты подчищают за собой перед своим запуском, это позволяет не падать на тестах,

2024-12-07

  • (c77afbdf) Каждый интеграционный тест теперь пишет approvals контент в папку, которая берется из имени теста. Каждый прочерк заменяется на слеш. Сделано для удобства отладки растущего количества тестов.
  • (c77afbdf) В TrackUpdatedMemorу добавлена возможность отслеживать изменения только тех даных, что реально поменялись, или всех записываемых.
  • (bfad2f98) В прошлых коммитах потерялись другие тесты. Докоммитил.
  • (883a4221) Добавлены тесты для ассемблирования и дизассемблирования (были уже) игры после того как в нее поиграли, с проследующей проверкой как именно изменилась игра (где ее блоки данных в памяти).
  • (883a4221) В TrackUpdatedMemorу так же скипаются строчки для 16 байтовых блоков, которые не поменялись.
  • (20b019c0) Исправлено расширение файла на log, так как diff зарезервировано в IDE.
  • (6f466ad5) Исправлена информация про изменения в проекте, а так же в бклоге.
  • (972082dc) Рефакторинг. Устранено дублирование в Bites.
  • (7fa9bac0) PngVideo работает в любом диапазоне дат, это необходимо для того, чтобы иметь возможность распечатать как бы выглядела любая область памяти, будь она video memory. Эта возможность пригодится в тестах дальше, чтобы быстро визуально понимать - что поменялось.
  • (684e580c) Уточнена связь между диапазоном видео памяти и шириной и высотой экрана.
  • (25ddecc9) Реализован метод печатающий в png заданной высота Range из памяти - это полезно для отладки. При этом пришлось переработать логику отрисовки видеопамяти.
  • (c99ef89f) Исправил ошибку с загрузкой игры через диалог загрузки. Из за недавних исправлений в (925298d1) появилась ошибка.
  • (3e1c25cc) Добавлена информация о том, как работать с клавишами для упраления эмулятором.
  • (8ebfbb6f) Добавлено логгирование разных важных этапов, для удобства отладки.
  • (b352cd13) Добавлена возможность останавливать recording скрипт командой stop(); или по нажатию Pause/Break.
  • (e95ab927) Нажатие на клавишу NumPad 3 - создает скринотшот в папке screenshots с именем содержащим текущую дату.
  • (f4a49761) Нажатие на клавишу NumPad 4 - останавливает воспроизведение/запись replay.
  • (91a7ae56) Поиграл еще в игру Клад и кажется нашел еще один баг.

2024-12-08

  • (c9ca6d77) Реализовал функциональность сохранения NumPad 6 и загрузки NumPad 5 snapshot по хоткеям. При этом сохраняются все регистры CPU, IO порты и состояния клавиатуры, а так же вся память.
  • (078e2e08) Инкапсулировал логику работы с Graphic и ioDrawMode в GraphicControl внутри Hardware.
  • (9144ed04) В загрузку/сохранение snapshot так же включен ioDrawMode
  • (9abcc545) Полностью переделана загрузка/сохранение snapshot. Теперь каждый объект, который имеет стейт должен реализовать StateProvider и может быть сохранен в унифицированном подходе - теперь новое свойство добавлять просто.
  • (9abcc545) Все данные которые отностятся к подсчету таймингов вынесены из Application в Timings.
  • (9abcc545) Во всех тестах исправлено использование SmartAssert.setup().

2024-12-09

  • (5f05384f) В загрузку/сохранение snapshot так же включен Cpu.tick, Cpu.tact, Cpu.interrupt.
  • (a814b732) Выделил из Application в RomSwitcher логику переключения ROM.
  • (3b59136f) В загрузку/сохранение snapshot так же включен RomSwitcher.lik.
  • (a78bdb27) Рефакторинг в тестовом фреймворке. Больше полезных методов появилось у него из IntegrationTest.
  • (16e02921) Добавил тест для декомплияции игры Клад и проверки, что она не изменилась после компиляции.
  • (c07e8646) Сделал работу с платформой в ООП стиле.
  • (c07e8646) Выделил в отдельный класс тест для генерации Wave из rks, сделал его рабочим для всех платформ.
  • (507d0fc4) Улучшена валидация в StateProvider.
  • (01cb07a2) Новый тест DizAssemblerTest теперь пытается генерировать asm файлы для всех игр. Ряд игр не декомпилируются, или компилируются после с ошибками - их мы пока пропустили с TODO.
  • (c6f84cce) Добавил архивы из https://emu80.org/files/?tags=spmx для дальнейшей обработки всех полезных артефактов.
  • (8d7b70e3) Переработан формат работы с base. Теперь за base взят корень проекта, а не src/main/resources. Пришлось исправить все относительные пути, но зато теперь оно работает в едином стиле.
  • (8d7b70e3) Расширен интерфейс Platform теперь он заботится о поиске игры в папке apps.
  • (5b694b34) Исправлена ошибка с расширением файла RKS то же самое что и rks.
  • (e7a17f3a) Распаковал все игры и программы, их придется доработать перед тем, как использовать. Формат rks отличается от оригинального.
  • (6862f461) Распарсил новый подвид формата rks.
  • (dda3b5fa) Нашел оригинальную игру тетрис от Черновицкого Электронмаша из подборки emu80.org.

2024-12-10

  • (14087daa) Сделал labels такими, что не содержат чисел, а состоят из 4х-буквенных символов, первый из которого l, за которым идут три другие из набора [a-z]. Лейблы генерятся максимально уникальными. Так чтобы два соседних индекса не были похожими.
  • (5d6701f9) Добавил все GPT запросы, которые использовались, чтобы реализовать несколько последних фич.
  • (df358a87) Несколько тестов исправлено после коммита (14087daa).
  • (6068480a) Улучшил производительность путем исправления логики работы с модами в Modifiable. Операция заключенная в модах выполняется для каждого тика, а то и по несколько раз - логика там должна быть молниеносная.
  • (032d06b4) Еще несколько улучшений с целью, которая преследовалась в (6068480a).
  • (a41d2ea8) Пытался улучшить производительность еще, но пока что не получилось. Некоторые улучшения в коде оставил.
  • (b0cbe80a) Еще немного оптимизации по памяти. Нет необходиомости записывать для каждого изменения новый UpdatedBite - все изменения можно хранить в одном.
  • (d8c6ef0d) Нашел описание одногно из тестов на просторах web archive и продублировал тут.
  • (f555516e) Добавил еще архив с файлами. Одного только не нашел.
  • (6ed45fd4) Попробовал запустить тест cputest\cputest.com но пока не очень получилось. Оставил TODO.

2024-12-11

  • (bfc10dce) Дизассемблировал Загрузчик Лик в DizAssemblerTest.testDecompileTest_lik_romZagruzchik.
  • (bfc10dce) Исправлено несколько ошибок в декомплияции ассемберных программ со смещением.
  • (78ca0036) Теперь во всех автогенерируемых asm файлах в шапке указано каким декомпилятором оно дизассемблировано и в каком тесте, и где брать исодную версию бинарного файла.
  • (a05e0e3e) Дизассемблировал Монитор-1М Лик в DizAssemblerTest.testDecompileTest_lik_romMonitor.
  • (449706cc) Добавил функциональность, в которой я могу указать какие области памяти при дизассемблировании так же стоит рассматривать как вероятные облаасти памяти с кодом.
  • (3e0147d7) Продолжаю уточнять возможные участки кода.
  • (bfe630df) Посортировал все ссылки за пределами программы в порядке возрастания их адресов.
  • (1bc7822d) Лейбл при дизассемблировании генерируется из адреса, а не длинны массива списка существующих лейблов. Это по какой-то причине поломало много игрушек. Надо разобраться что не так там. Оставил TODO пока.
  • (1bc7822d) Удалил из дизассемблирования команды за пределами области памяти игры.
  • (1bc7822d) Исправил форматирование лейблов дизассемблированного кода.
  • (1bc7822d) Ссылки на вшение области памяти в начале программы через EQU больше не ссылаются на области внутри
    программы - это приводило к конфликту, поскольку для этого существуют метки в коде label:.
  • (8fb54751) Нашел ошибку. Дело было в методе, который генерил лейблы. 3х сиволов [a-z] не достаточно для упаковки 16 бит. Надо 4. Но метод еще предстоит поискать. А пока вот GPT поздсказал решение.
  • (f850340c) Поправил алгоритм, и сделал умное размешивание битов, для больше рандомификации.
  • (197e2482) Последний коммит (f850340c) исправил некоторые игрушки.
  • (40cc0d2b) Уточнил еще точку входа в загрузчик Лика.
  • (6b6f4043) Уточнил еще точку входа в загрузчик Лика.
  • (ea4e618d) Уточнил еще точку входа в монитор Лика.
  • (01981f87) Уточнил еще много точек входа в монитор Лика.
  • (01981f87) Реализовал сохранение так же и лога дизассемблирования с адресами памяти и байтами. Так удобнее исследовать закрытые зоны.
  • (f855d5ce) Запустил все тесты и прогенерировал логи для всех игр.
  • (c071cd5a) Исправил тест монитора. Там не та ПЗУшка грузилась и я сделал дурную работу.
  • (56ef720d) Начал с тестом Бейсика. Но пока только начал...

2024-12-12

  • (5c97f715) Сделал тест на выполнение команды B монитора, и там проверил ПЗУ и адресс 0000... на идентичность. Бейсик копируется и копируется as is.
  • (5c97f715) Порефакторил Memory и Bites устранил дублирование.
  • (e588333e) Реализовал распознавалку экрана. На вход передаешь ей png со скриншотом экрана, а она возвращает текст что на нем написано. Есть коллизии с русским/английским текстом, и надо еще хорошо отлаживать.

2024-12-13

  • (793d3bc2) Исправил распознавание png в текст. Инвертированные сиволы тоже распознаются.
  • (da1101d3) Реализовал иной метод проверки текстового распознавания экрана. Теперь контент по методу approvals записывается в ресурсы теста.
  • (28c5711b) Добавил описание про новую функциональность.
  • (ca03e46e) Исправил логику определения коллизий в распознавании текста с учетом того, что некоторые символы могут выглядеть одинаково в латинице и кириллице.
  • (e4a4fe78) Еще улучшил, чтобы замена была в словах и распостранялось от символа в кириллице влево и вправо.
  • (655aa883) Реализовал обратный алгоритм, который позволяет получать png изображение экрана печатающего заданный текст.
  • (fd370b44) Написал тесты на проверку всех символов, что есть в системе.
  • (2b929129) Порефакторил внутри Layout и Keyboard выделил поясняющие константы.
  • (5e223429) Добавил знак апострофа и знак пробела.

2024-12-14

  • (4422e6b5) Переместил часть полей из IOPorts в Keyboard поскольку хотелось сильнее отвязать IOPorts от логики нажатия кнопок.
  • (77c6320c) Несколько реорганизовал код вокруг Keyboard. Разюираюсь с тем, как отделить shift нажатый на хостовой машине от shift нажатого в эмулируемой машине.
  • (8b1547c6) Разделил шифт на хост машине и шифт на эмулируемой машине - теперь можно передавать shift отжатый на эумулируемую машину, при условии что он нажат на хостовой - реньше этого нельзя было сделать.
  • (13ef528c) Небольшой рефакторинг, чтобы все блоки были в одном стиле. Это самый магический код во всем проекте.

2024-12-15

  • (d27a02fe) Сделал полную эмуляцию shift. Теперь нажатия на хостовой машине любых клавиш с любыми модицикаторами связаны с нажатия клавиш на эмулируемой машине только через Layout который указывает что реально будет происходить в эмулируемой среде. Пока что не уверен, что работает record логика и все клавиши надо проверить. Но уже получилось избавиться от alt+shift костыля.
  • (7d1fea7d) Исправил после последних коммитов Layout так, чтобы работали нормально символы и буквы с модификаторами.
  • (a6e6858f) Еще подправил Layout чтобы было похоже на реальную клавиатуру.
  • (2e1bf41a) Порефакторил способ, которым отрабатывает Layout. Теперь в нем содержится метод, который динамически рассчитывает код клавиши для эмулируемой машины, на основе кода клавиши на хостовой машине и флага rusLat, который пока что не имеет никакого влияния.
  • (11530f72) Пересмотрел все клавиши в Layout. Много исправил. Остальное в TODO.

2024-12-16

  • (16e0d47a) Во время записи record надо записывать все клавиши, иначе не работает риплей.
  • (416753f6) Добавил состояние cyrLat и shiftEmu в метод сохранения snapshot.
  • (0ababd63) Сделал так, чтобы переключение cyrLat проводилось 1 раз при нажатии кнопки. Была ошибка.
  • (81951f60) Отремонтировал record/replay теперь в файл так же пишутся модификаторы (alt, shift, ctrl) если они есть. Реализована поддержка старой и новой версий рекординга (с модификаторами и без).
  • (23982ac6) Добавил подробный тест на первую линию клавиш со всеми мобификаторами. Он не работает правильно - надо разобраться почему.
  • (fbad53cc) Закоммитил тест зафиксировав текущее нерабочее состояни риплея клавиш с модификаторами (alt, shift, ctrl) Оставил TODO разобраться позже.

2025-01-11

  • (a2827261) Сделал возможным по рисайзу скейлить при прорисовке окно с содержимым.
  • (e6277460) Вынес все TODO в readme.md и пронумеровал их. Всего 28 типов проблем.
  • (9ab6559b) Добавил из архива новую игру chess написал для нее несложный тест в до первого ответа компьютера. Она пока деззасмеблируется с ошибками - надо будет потом это все поправить.
  • (4b87cb79) Сделал возможным после остановки риплей-сценария в тесте, дописывать этот сценарий и снова запускать тест.
  • (2a103430) По какой-то причине результаты выполнения старого теста удалились - вернул!
  • (e1c91dcc) В игре chess реализовал первых несколько шагов. Так же попаршен ход компьютера - я его далее буду использовать как генератор ходов для другой сессии игры.
  • (42fa47f6) Рефакторинг. Упрощаю код перед выделением общей логики.
  • (e0d813aa) Рефакторинг. Применил Extract method - устранил дублирование.
  • (8f8d3eb5) Реализовал игру одного эмулятора против другого.
  • (3cfef530) Добавил wave файл игры chess
  • (a6d77d85) Перевел все текстовые файлы в utf8
  • (51e2d9c3) Добавил еше две программы basic для Специалист и Монтитор-1М с тестами, wave и другими артефактами.
  • (7533a8c8) Дополнил тесты в прошлом коммите.
  • (f6beae77) Сделал загрузку BSS файлов для бейсика. На примере программы на бейсике president написал тест. Программа пока не работает, о чем оставил упоминание TODO. Так же реализована загрузка bss файла из open dialog.

2025-01-12

  • (c6f860b8) Сделал парсилку basic команд в машинном коде в текст. То есть теперь можно брать bss файл за исключением первых 3х символов и запускать в BasicCompiler.getSource и получить исходный текст программы. Не все коды команд сейчас обработаны, а так же вероятно не все символы. Надо проверить. Исправил так же ошибку в машинном коде программы president.
  • (c6774ee5) Создал тест в котором генерятся все возможные команды. Провериол все 256 символов. Часть из которых ничего не дают, и потому пока закомментированы. Надо будет потом проверить их один за другим.
  • (6f6f850e) Поправил тесты к прошлому ккомиту.
  • (ec88b00d) Удалил программу president из архива. Она уже обработана.
  • (65471237) Запустил из архива другую версию basic для Специалист и Монтитор-1М. Так же обработал 1 программу dialog, которая запускается в этой версии бейсика (со смещением 0x2000). Для чего ввел новый формат файлов bs1.
  • (644d8fea) Докоммитил некоторые изменения к предыдущему коммиту: wave файлы, документацию.
  • (53166913) Разобрался с новой программой dialog для basic Монтитор-1М. Поправил документацию. Сделал возможным пустые строки в программе.

2025-01-16

  • (2d93b24a) Поменял расширение в соответствии с типом файла для некоторых basic программ.
  • (dacc2d6d) Достал еще некоторые архивы из старой версии emu80.org сайта. Возможно они не для моей платформы, позже разберемся.
  • (dbb1de78) Почти все, что было найдено в вебархивах описанное в статье http://www.apofig.com/2018/08/blog-post.html сохранил тут. Позже буду разбираться что из этого останется в проекте как часть специалиста, а что нет.
  • (bbd987aa) Поправил названия папки, чтобы в ней было видо полное имя ахива
  • (8d2c1819) Распаковал архив Alex_B. Поправил кодировки текстовых файлов.
  • (702f7371) Часть описания компьютера из Alex_B уже распакована. Сделал линки.
  • (30a10209) Убрал мертвый код.
  • (f2cf9bd4) Разобрал образы пзу ЛИКа из архива Alex_B. Поправил описание. Сделал линки.
  • (09dd4924) Распаковал архивы pk-info.ru.
  • (b70bd6b4) Скопилировал хорошее описание игры Клад.
  • (5dd6772f) Обновил описание игры Клад.
  • (10658ef5) Еще раз обновил описание игры Клад.
  • (b75a7b73) Добавил описание игры Буран.
  • (bfba6088) Добавил описание игры BUDI.
  • (34129a70) Обновил описание игры Клад и Буран.
  • (35ffa264) Еще немного обновил описания.

2025-01-17

  • (ba7f49dd) Отладил и починил все варианты запуска эмулятора: maven, ide, jar, bash, batch. Ни один из них не работал. Сейчас все работает кроме jetty/jnlp. Обновил документацию. Полностью переработал способ работы с параметрами spec.Main. Так же пришлось переделать тестовый фреймворк. В общем большой рефакторинг, но зато теперь все классно ранается.
  • (5855bb29) Добавил GPT запросы к прошлым коммитам.
  • (0c23863f) Я мега крутой! Полностью доделал возможность запускать приложение из jetty сервера. Старый jnlp подход не работает уже. Пришлось искать что-то новое. Я нашел cheerpj который позволяет запускать java приложения в браузере. Очень круто! Для опенсорс некомерческих проектов свободный. Пришлось полностью переделать загрузки и сохранения файлов. Избавился от злощастного URL который сильно глючил. Добавил скриптов для запуска. Обновил документацию. Короче круто! :)

2025-01-18

  • (ef3b2216) Поправил пару тестов к прошлому коммиту. Не такой уж я и крутой :) Добавил GPT запросы к прошлому коммиту.
  • (c0bbedf4) Поревьювал вчерашнее решение. Сделал несколько улучшений скриптов. Разукрасил один batch скрипт. Исправил ошибки.
  • (c0bbedf4) Добавил пояснений в хоткеи. Буду их чуть реорганизовать чтобы UI/UX.
  • (920cf9f5) Переделал расположение и назначение кнопок на NumPad. Теперь все интуитивнее :)
  • (a37c7eb8) Сделал возможность копировать распознанное содержимое экрана в буфер обмена при нажатии Ctrl _ NumPad 8.
  • (a425687a) Долил GPT запрос.
  • (248f7f55) Сделал по клику в windows на файл определенного типа загрузку его в эмулятор jar неважно какого он типа. Отдельно пришлось поиграться с snp файлом. А так как тестировать надо так же и в веб версии то пришлось поменять много где. Так же поправлен билд, теперь jar создается в двух местах build/out и src/main/webapp. Убрал лишний контент из jar сократил его размер. Для регистрации файлов в windows надо запустить /build/open-file.reg предварительно поменяв пути.

2025-01-19

  • (a6e68ada) При загрузке bss и bs1 файлов, подгружается так же соответсвующий вариант basic. Run config запуска jetty зависит теперь напрямую от сборрки jar-with-dependencies.
  • (5a39a8eb) Создал скрипт автоматически генерирующий файл реестра build/open-file.reg для управления
    ассоциациями файлов эмулятора в Windows. Запустив этот скрипт, можно легко ассоциировать расширения файлов rks, bss, bs1 и другие с эмулятором. Сгенерированные записи реестра создаются скриптом build/open-file.bat, что упрощает настройку для пользователей.

2025-02-14

  • (fd1fdb21) Какие-то исправления, я ХЗ какие :)

2025-02-15

  • (a8019f27) Добавлен новый способ воспроизведения звука записи на магнитофон, происхдящий в отдельно потоке что улучшает звучание.
  • (0f23b0bf) Улучшил звучание, сделав его более синхронным с тиканием процессора. Теперь оно не задерживается.
  • (05affaad) Удалил старый класс OldAudio в пользу нового ContinuousAudio.
  • (2b7a0e2b) Хорошо звучит BUDI но другого не слышно совсем.
  • (877f663e) При таком же хорошем звучании BUDI теперь слышно со скрежетом и звук основной. Так же присутствует эхо из буффера.
  • (720b259f) Попытка избавиться от эха.
  • (0eca8fb6) Удалось добиться звучания клавиш чисто, но тональность при
    переключении rus/lat не меняется. Похоже это связано с тем, что нули должны вставляться не в момент записи в регистр если не пишется туда 0x0B, а постоянно с определенной скоростью.
  • (c300c954) Избавился от кликов во время озвучиваия.
  • (6f9cb443) Почистил OldAudio.

2025-02-16

  • (b91662d8) Добавил возможность запускать конкретную команду на мониторе из окружения при старте эмулятора. Например spec.Main ./src/main/resources/ lik lik/apps/budi/budi.rks O=QWE,0000,6DFF
  • (187d43a0) Вывод на магнитофон звучит теперь чисто и по таймингам соответствует генератору wave портированному из js ранее. Хоть в генераторе используется 1 битный звук, тут используется 8 битный с частотой 44100 Гц. Проверил на audacity вывод wave и того что пишется на магнитофон - одинаково.
  • (a1d699b4) Добавил хоткей NumPad 9 для переключения режима работы вывода звука: спикер или линеный вывод на магнитофон.
  • (1821e2f8) Выделил логику переключения аудио режима, синхронизацию потоков в отдельный класс AudioDriver.
  • (47304d77) Добавил дат в этот файл.
  • (7f45fd01) Небольшие уточнения в OldAudio. Переименовал его в LineOutAudio.
  • (7bd645b6) Еще улучшил звучание спикера. Эскперименты продолжаются.
  • (8aa2650c) Перевел все задержки на наносекунды - так проще настроить скорость. Выставил скорость по игре BUDY с эталонным эмулятором emu80.
  • (7af0c2c4) Максимально выверил тайминги. Есть погрешность но не критичная.
  • (068c79cb) Еще ближе к оригиналу звук игры BUDY и мониора.
  • (612d8ed1) Уже совсем близко к оригиналу звук игры BUDY и мониора.
  • (b6da698b) Выделил меджик намберс. Улучшил тайминги для звука. Удалил лишние переменные.
  • (277f0a99) Переименовал NewAudio в SpeakerAudio. Пофиксил TODO.
  • (98ad8edf) Выделил константу

2025-02-17

  • (d091605e) Небольшой рефакторинг, изменение названия переменных и иформация о тиках.
  • (11437022) Замедление каждого interrupt новым способом заметно улучшило звучание, так как теперь все происходит равномерно. Раньше щелчки были из за того, что только каждый n interrupt замедлялся. А делали мы это потому что небыло возможности сделать sleep меньше чем 1 ms. Теперь с nano все проще.
  • (7dd7efc3) Синхронизировал константы задержек с emu80
  • (c764a873) Увеличение размера буффера сказывается на устранении щелчков, но при этом заметнее подвисает сама эмуляция по время воспроизведения.
  • (20b33a98) Реализована двойная буфферизация.
  • (1ecf1b31) Реализован кольцевой буффер. Убрал 90% щелчков при воспроизведении. Некоторые артефакты звучания остались, но они минорные.
  • (f7a7b647) Добавлен новый флаг, для сохранения состояния AudioDriver - какой режим воспроизведения сейчас происходит.
  • (b21b5518) Рамка бордюр теперь подсвечивает красным, если режим воспроизведления звука из LineOutAudio и зеленым, если как обычно SpeakedAudio.
  • (f3d92370) Исправлены тесты.
  • (64cbf340) Начал переписывать логику сохранения snapshot. В формате json будет приятнее для человека. Пока что перенесены Cpu и Keyboard. Попутно делаю небольшие рефакторинги.
  • (5d4a4aa0) Исправил ошибку с прошлым коммитом.
  • (0a17a2ec) Исправил тесты после прошлых коммитов.
  • (51890880) Продолжаю переписывать логику сохранения snapshot. На этот раз GraphicControl.
  • (5ceee173) Продолжаю переписывать логику сохранения snapshot. На этот раз AudioDriver.
  • (50cf54e7) Продолжаю переписывать логику сохранения snapshot. На этот раз IOPorts.
  • (0bbfd11a) Продолжаю переписывать логику сохранения snapshot. Поправил имена в Cpu.
  • (d0df24fd) Продолжаю переписывать логику сохранения snapshot. На этот раз Memory.
  • (15d9a26d) Продолжаю переписывать логику сохранения snapshot. На этот раз RomSwitcher.
  • (8b5b1fd9) Последнее в логике snapshot. На этот раз Timings.
  • (1a1131f1) Проверил новую логику на старых тестах.
  • (f1215359) Удалил всю старую логику сохранения snapshot. Поправил документацию.
  • (c6ec3552) Рефакторинг. Теперь Hardware так же имеет стейт. В него пошла часть логики из RomLoader
  • (b14bd6fd) Добавлена TODO #44 - почему-то тесты висят.
  • (c86aac31) Оптимизировал производительность тестов.

2025-02-18

  • (741caef7) Добавил QA с GPT для прошлых коммитов.
  • (853cccac) Увелиличл размер буффера для LineOutAudio потому что были запинки.
  • (e4a2bd32) Использовал единый подход в LineOutAudio и SpeakerAudio для управления звуком, но привнеслись в LineOutAudio некоторые артефакты звучания, которые я планирую устранить дальше.
  • (d8fee6fc) Наконец-то звучание идеальное! никаких артефактов. Кроме конечно поблемы, которая приводит к невозможности запускать эмулятор на большей скорости, чем необходимо для воспроизведения.
  • (b543b943) При включении максимальной скорости отключается звук вообще. Так же при переключении режима воспроизведения линейного вывода на магнитофон скорость будет такой, которая необходима для нормального звучания так как в этом случае критично не пропускать аудиоданные (так кстати можно опытыным путем определить оптимальные задержки). Но если мы слушаем динамик, то ускоренние эмулятора сказывается на пропуске данных, что позволяет терять в качестве, но проджолжать ускорять эмуляцию.
  • (11abf08a) Навел порядки с константами вокруг аудио.
  • (e9513f22) Добавил возможность менять allowDataSkip через Ctrl + Num-9. Так что теперь можно найти идеальный тайминг для эмуляции, что по умолчанию выключено и при ускорении как в режиме Speaker так и в режиме LineOut звуковые данные теряются и ускорение происходит.
  • (740e3da7) Навел чуть порядок в константах
  • (aaf0a92c) Добавил GPT QA к прошлым коммитам
  • (2ededb6a) Улучшил readme.md
  • (a64df215) Добавил туду, исправил чтобы зву все же был но только не в браузерной версии. Которая кстати висит.
  • (c7393c0c) Добавил рамку при копировании распознаного текста с экрана.
  • (d8a1dab9) Переделал загрузку snapshots теперь они грузят так же стейт Hardware. В Hardware так же появились знания о: lastRom, lastRecord и lastSnapshot чтобы работа была более безшовной. Во время загрузки replay запись в тот же файл продолжается, пока не будет остановлена. А если запись была остановлена, то это не мешает загрузке нового риплея.
  • (2a3018b7) Добавил стейтов во все классы, которые соедржат хоть что-нибудьт сохранябельное. Пришлось повозиться с логикой, но теперь все работает очень консистентно: сохранение/загрузка snapshot во время/после record и наоборот.

2025-02-19

  • (22d2b03a) Звук не теряется при ускорении DO_NOT_SKIP_DATA - поставил его по умолчанию. Это атуально и критично для AUDIO_MODE_LINE_OUT, а так же странным образом стабилизирует тайминги во время ускорения эмуляции не давая выполняться быстрее, чем положено для воспроизведения. Это еще предстоит разобрать, но так как это максимально точно передает оригинальный компьютер - я оставил по умолчанию эту опцию и поставил задержку CPU_INTERRUPT_DELAY, которая чуть меньше чем надо.

2025-07-11

  • (509e868a) Fixed test.
  • (25e92a5c) Added startup configuration files so you can run them from markdown.
  • (e88f7799) Added a test for building a game from an assembler file. This allows you to reverse engineer levels.
  • (f1314312) Added the ability to load an ‘asm’ file. This will assemble it and then load it into memory. The option is added to the file upload dialog and through launching the application in jar format. Updated the readme file with this description.
  • (d6433584) Added information about building the levels of the klad game.

2025-07-12

  • (e3461f79) First attempt to retrieve a level from memory.
  • (8ff0551a) Extracted all levels like the previous commit from memory.
  • (9304c45b) Extracted all Klad constants to separate class.
  • (84c28749) Implemented the logic of drawing maps from memory.
  • (60e6a060) I drew heroes and hunters on the maps by parsing the system 16 bytes in front of the map. Changed the legend to make it display better. Printed out the memory area of the map as well.

2025-07-13

  • (66b2ba4b) Added a method to reverse level conversion.
  • (85b36645) Fixed the past test so it reads the value from the game. Fixed TODO indexes
  • (3a78e374) Preparatory refactoring in the test to isolate the method for level checking on the index from the test.
  • (cf222293) Implemented a check for all levels. One corner case appeared when the hunter appears under the bridge.
  • (e4a2b03f) Implemented the ability to change levels and run the emulator with the updated game.

2025-07-14

  • (--------) Updated klad level.
  • (--------)

Продолжение следует!