Git Product home page Git Product logo

xpeccy's Introduction

How to compile
- install cmake
- open terminal emulator and make this:
	mkdir build
	cd build
	cmake [options] ..

Options are:

-DQTVERSION=5(default) or 6 - Qt5 or Qt6 build
-DSDL1BUILD=1 or 0(defailt) - use SDL1.2 (SDL2 otherwise)
-DUSEOPENGL=1(default) or 0 - use QtOpenGL widget to draw
-DUSEQTNETWORK=1 or 0(default) - use QtNetwork. experimental.

If something going wrong, fix it - install Qt and sdl libraries and headers
Optionally you can install zlib libs and headers for more functional
And...
	make
Result should be './build/xpeccy' executable file

Linux and MacOSX users can make a deb/rpm/dmg package:
	make package
...or install it in /usr/local/ (linux only):
	make install

By default there is only ZX Spectrum 48K romset w/o TRDOS.

PS: DON'T try to build it under Windows. I'm serious.

Documentation is available here:
russian:
https://docs.google.com/document/d/1fmDePHvjT6i1LM_Ex78GnX4j00tKSBrx-5p11tVWfKE
english:
https://docs.google.com/document/d/1vdFRntEj_dAUjEV_EsaZBP66kX4VIuxJPHR-gCQRnTc

xpeccy's People

Contributors

dotkoval avatar lasdesu avatar samstyle avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xpeccy's Issues

Вмещается только 8 символов от метки

В дебагере метки вписываются вместо адреса, места там патологически мало. Локальные метки, которые склеиваются с основными, просто не вмещаются:

05:376E edit_key.l1
05:377B edit_key.l2
05:3791 edit_key.l3
05:379A edit_key.j1
05:37A9 edit_key.j2

image

Можно действовать как в том же дебагере из emuzwin, который выводит метки на отдельных строках, и не затирает ими адреса (что тоже хорошо):
image
В нём, кстати, метки совмещаются с фактическим адресом, и места для ассемблерной инструкции там даётся с лихвой. В XSpeccy много пустот справа от колонки с кодом и от самой инструкции пикселей 50 просто пустоты. Очень много пустот и в окне дампа, но это другая история.

Плюс, решение этого issue сделает более возможным использование меток со сдвигом через EQU $+n. А если бы при ховере мышки над словом/меткой/адресом - можно было перепрыгнуть по этому адресу (в окне дебага, или в окне дампа), по выбору из контекстного меню, или зажав Ctrl превращать адрес в прыгабельную ссылку (с возможностью возвращения) - это было бы вообще прекрасно.

сборка под MacOS

Пожалуйста в app под MacOS добавь все необходимые либы для запуска, для этого там есть утилита macdeployqt:

~/Qt/5.8/clang_64/bin/macdeployqt Xpeccy.app -dmg

Без либ сборка сегфолтит.. Запускаю из dmg отсюда - http://zx-pk.ru/threads/9479-xpeccy.html

Перескакивание с "n" на "m" при нажатии на ","

После запуска и Sinclair research просто набиваешь на клавиатуре клавиши ",,,", затем ext (ss+cs), и снова ",,,", и в итоге то залипает то разлипает cs (то точки то запятые), выводится вот такое:
image
Вообще нажимая на клавишу ",<Б" получить символ "." в норме невозможно.

сборка под Qt

Собрал вчера под Qt и под SDL. Почему-то под SDL можно сменить букву виртуального драйва для пентевы, а под Qt пишет что нет виртуальных, но и не дает реальным воспользоваться. ЧЯДНТ? 8)
ps: Если что, я постоянно на conference.jabber.ru/8bit - присоединяйся, можем в реале обсуждать вопрос, пока форум йок.

Максимальный размер дампа памяти 65535 (а не 65536).

При попытке выгрузки памяти "Save dump", невозможно сохранить все 64*1024: указываешь начало 0000 конец ffff - автоматом заполняется в длину 1000 (а должно быть 10000, но не вмещается), и сохраняется 4096 байт.

Debugger - состояние портов и бордюра.

Хотелось бы чтобы в дебаггере, в том же табе, где экран, показывать цвет бордюра текущий (там виден только сам PAPER). Когда луч за кадром, или внутри папера - даже непонятно какой последний out 254 был сделан.

Также хотелось иметь возможность доступа к состоянию портов, тому же 254, на ввод и вывод (динамик/магнитофон, бордюр), всяким портам TR-DOS, кемпстону/мыши, с возможностью как-то влиять на те, которые завязаны на input.

По 254 порту, из которого считывается состояние клавиатуры, кстати, непонятно как поменять состояния нажатости кнопок. ZX Keyboard, похоже, не передаёт в дебаггер ничего (зафиксировать нажатые кнопки вроде можно по ПКМ, но их состояние считывается только когда дебаггер закрываешь), то есть нельзя сделать так, чтобы они во время действия сканера клавиатуры считывались такими, какие надо в ходе пошаговой отладки. Надо продебажить сканер клавиатуры, джойстик, а не получается.

WUTcha - вызов из дебаггера

Просьба сделать WUTcha вызываемым из дебаггера. А то приходится закрывать дебаггер (тем самым возобновлять выполнение), открывать WUTcha, набивать там кучу значений, и снова открывать дебаггер и искать нужное место, а то и изгаляться - перезапускать весь отлаживаемый процесс, если это допустим с самого запуска, и сработала автозагрузка.

Добавить можно в инструменты (туда же где Search / Fill / Sprite scanner / Keyboard)

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

В текущей версии окно вытягивается совсем некузяво.

image

То есть в первую очередь растягиваются регистры (которым растягиваться скорее всего нет смысла).
Растягивается самое правое поле с ASCII дампа (которому растягиваться точно нет смысла, и это поле, кстати и в "скукоженном" состоянии кучу пустоты слева имеет).
И в третью очередь, когда 1 и 2 уже растянулись достаточно, только тогда начинает растягиваться окно дизасма.

Просьба в первую очередь растягивать окно дизасма. С учётом длинных названий меток это в первую очередь необходимо.

Метки внутрь комманд, самомодификация кода

Очень часто код - самомодифицируемый. То есть вида:

onetime1: ld a,1
and a
jr z,label2
xor a
ld (onetime+1),a
label2: ....

Хотелось бы, чтобы отсылки внутрь инструкций также работали. Либо через смещение в адресации (если метка указывает ровно на саму инструкцию), либо через добавление строки типа:

ld a,1
onetime: equ $-1
...
ld (onetime),a

либо

onetime: equ $+1
ld a,1
...
ld (onetime),a

если метка указывает внутрь инструкции.

AY/YM renderer

Насколько видел из исходников, никакой передискретизации и КИХ фильтрации звуковых чипов нету. Нельзя ли добавить опциональный рендеринг звуков с КИХ фильтрами? На высоких тонах артефакты дифракционные очень заметны и не очень приятны. Есть вот такая тема с готовой либой: http://hypr.ru/blog/168.html
У Бульбы в zxemul с этим также все хорошо (помимо unreal и кучи других эмуляторов). А аюми вроде считается топом, кому это важно (типа меня) могли бы включать precise sound rendering.

[MacOS] клавиатура

Использую сборку 0.6.20190301, на предыдущих такое же поведение.

  1. После нажатия и удерживания любой клавиши до срабатывания автоповтора, автоповтор не остановится до тех пор, пока не убрать фокус ввода с окна. Во время бесконтрольного автоповтора можно нажать любую другую (но не ту же самую!) кнопку и удерживать до уже её автоповтора, и тогда всё останавливается вообще, ни на что больше не реагирует. Продолжают работать только хоткеи самого эмулятора. Выход из ступора – переключение фокуса ввода из окна и обратно, можно даже через вызов и закрытие окна настроек по горячей клавише.

  2. Нажатие любой клавиши в комбинации с command, даже быстрое, не дожидаясь автоповтора, приводит к тому же результату – начинается неконтролируемый автоповтор до перехватывания и возвращения обратно фокуса ввода.

UPD Через ZX Keyboard видно, что command (он же SS) отжимается, как и положено, а вот клавиша, нажатая в комбинации с ним, залипает.

Есть ли возможность?

Есть ли возможность когда окно хрессу активно, но маус не грабнутый - колёсиком мышки менять общую громкость эмулятора?

[MacOS] Keymap

Использую сборку 0.6.20190301, на предыдущих такое же поведение.

Включение KeyMap с использованием любого .map файла, даже с пустой секцией [Keymap file] приводит к стабильно одному и тому же результату. Клавиша с цифрой 1 перестаёт работать в любых комбинациях (shift, ctrl, command, alt), в том числе и на дополнительной клавиатуре. Только выбор в настройках KeyMap: none возвращает ожидаемое поведение.

Также не мапится ctrl, ни левый, ни правый. Такое ощущение, что эта клавиша вообще не обрабатывается.

UPD научили посмотреть, что там на самом деле происходит через ZX Keyboard. Выяснилось много интересного. Например, нажатие 1 при включенном кеймапе выглядит как одновременное нажатие 2 и 3:
image
Также обнаружено, что ctrl действительно вообще не участвует в процессе, а LC совершенно замечательно мапится, только вместо ctrl на command. А RC просто в никуда.

[Windows], Left/Right Shift/Ctrl отрабатывают вместе и залипают.

Наблюдается неприятные моменты:

  1. Не отрабатывает одновременное нажатие на левую и правую мод.клавишу, т.е. left ctrl одновременно с right ctrl не видится. То же самое и с shift.
  2. Зажав LS затем RS, и отпускаем LS, при этом залипшим остается RS. И в обратной последовательности так же. Если после залипания одной нажать на одну клавишу с другой стороны (например при залипшем LS нажать RS), то она также залипает. При выходе в дебаг залипы уходят.
  3. Даже если не перемапливать LS/RS/LC/RC, то залипы всё равно случаются с нажатиями на LS+LC. Причём, при зажатом LC, потыкивание на LS не даёт залипы, а при зажатом LS потыкивание на LC даёт залип, но не первый раз - со второго потыкивания с вероятностью где-то в 50%. Выход в дебагер этот "счётчик" сбрасывает. т.е. после выхода в дебагер одиночный LC+LS никогда не залипает. Сброс в дебагере работает ТОЛЬКО если ZX Keyboard не включен, а если он включен то залипания остаются после входа в дебаггер. И более того - все залипы прекрасно отображаются на ней.

Не сбрасывать экран дебага при F8 на CALL.

Постоянно при шаге через CALL (а также DJNZ) происходит сброс положения отладчика - следующая команда оказывается наверху, а не остаётся на месте. Желательно во время пошаговой отладки не сбрасывать положение скроллера, если точка возвращения находится в области видимости.

Геймпад начинает работать только после того как зайти в настройки.

При запуске можно просто обдавиться на джойстики и кнопки геймпада. Работать они будут только после того как зайти в настройки и выйти из них обратно. При последующем запуске хрессу опять болт до захода/выхода из настроек.

WUTcha - просмотр содержимого памяти по МЕТКЕ.

Просьба сделать возможность добавлять просмотр не только по фактическому шестнадцатеричному адресу и регистру, но и МЕТКЕ (если таблица меток загружена). Сейчас приходится каждый раз лезть в файл с метками и адреса оттуда брать и вбивать адреса.

Сделать можно также как и в строке дизасма - вбил метку, на неё и адресовался, вбил шестнадцаричную строку - перешёл по этому адресу. Метка теоретически может называться c000, но я даже не знаю как дебаггер отреагирует, и перейдёт ли он по адресу c000, или возмёт адрес метки. По логике приоритет за адресом, и нефиг так называть метки :)

Причём, если это значение по метке, то желательно выводить и название метки и её значение (в колонках слева). А колонки слева лучше склеить в такое же как и дебаггере, а не пилить их на отдельные type/page/addr.

Переход к caller function, история прыжков.

Бывает брекпоинт ставишь в функции которая вызывается из разных мест. Чтобы понять из какой - надо из стека адрес вбивать чтобы узнать. Когда это один раз или два это норм. Но бывает что надо интенсивно выявлять места откуда вызов шёл. Нельзя ли сделать чтобы по двойным щелчкам в адрес стековый, происходил прыжок Окном дебаггера к ней (только не так что адрес сверху, а лучше в центре, чтобы видеть предшествующие операции).

А также при вбивании нового адреса в дебаггере происходит прыжок в это место. А обратно - никак. Только так же вручную. Нельзя ли сделать что-то типа истории (как в ida, как в браузерах), чтобы можно было возвращаться к предыдущим точкам, и снова вперёд. Логика фиксирования таких позиций:

  1. Прямой прыжок по адресу (напрямую набором адреса, или щелчком по стеку).
  2. Во время трассировки, jr/jp/djnz(дальше какого-то значения, за пределы экрана), call/rst, ret, nmi/interrupt.
  3. Во время активного скроллинга, фиксировать точки только при остановках дольше 5 секунд, и если они достаточно далеко от предыдущей позиции.

Прыгая по истории "назад" история "вперёд" должна оставаться живой, пока не будет необходимость фиксировать новую позицию.

[DEBUG] Отображение страниц в дизасме/дампе

Когда переключаешься с CPU на RAM/ROM в дизасме - все время отображается RAM:00, вне зависимости от того, какая страница выбрана (RAM/ROM отображается, но номер страницы всегда 00). В дампе вообще никогда RAM:00 даже нет, всегда только 4х-циферный адрес.
image

Подсказка содержимого только однобайтовая

Когда трассируется код, и строка вида ld a,(#8054) справа содержит подсказку - содержимое байта. Беда в том, что команда ld hl,(#8054) также будет показывать только один байт (младший разряд), а не целиком слово. По-доброму должно быть полное слово - содержимое памяти.

Также битовая команда сверки (bit) по-доброму должна иметь подсказку не только в виде полного байта, но и запрашиваемого бита, а то не сразу очевидно - он 1 или 0.

Показывать несколько байт по адресам регистров (Watches)

Было бы неплохо, если бы по крайней мере содержимое по адресам IX,IY,HL,DE,BC (с текущего набора) было бы отображено, чтобы каждый раз не искать то, что там в соседних адресах. Содержимое в активной памяти, которую видит CPU. Возможно, в виде отдельной вкладки, там где DUMP (CPU/RAM/ROM), отображая пару байт слева и несколько байт справа от памяти, куда указывает регистр. Может где-то в другом месте. В US это очень удобное окошко, но у него там есть один недостаток - он показывает текущий и только следующие байты, но те же индексные часто берутся с отрицательным смещением. Поэтому было бы прекрасным наличие возможности выбирать смещение для отображения, относительно самого адреса регистров (выделяя как-то цветом байт со смещением 0).

В идеале - просто секция watches, в которой можно указывать конкретные адреса, а можно регистры, которые интересны.

Редактор шестнадцаричных значений

Редактор шестнадцатеричных значений в WUTcha какой-то странный, если поле пустое, начинаешь вбивать 4 цифры FFFF, в итоге он примет только крайнюю (000F), и каждый раз приходится бежать в начало и вбивать всё заново. То есть дефолтовое пустое значение интерпретируется как не пустое, а заполненное, и курсор установлен в 4й позиции.

В дампе памяти выделяешь поле, пытаешься целиком его вбить, и он заменяет последнее значение, а курсор ставить на ВТОРОЕ.
image

Редактор шестнадцатеричных значений ощущается кривым именно из-за валидации. Зачем вообще с ним мудрить и почему не брать поле как обычную строку, и использовать значение для калькуляций, не трогая исходной? А если там ошибочное значение - просто не вычислять значения, на него отсылающиеся, и писать там какой-нибудь "error".

image

Показывать стрелку место КУДА будет переход

Во время отладки показывать место куда будет переход - пока отображается просто красная стрелка вверх или вниз, но не видно куда именно - надо вручную ориентироваться по адресу. Желательно показывать также эту же красную стрелку, направленную влево, в той же правой части где стрелка вверх/вниз.
photo_2019-01-07_00-50-25

Autofire для геймпада

сделать чекбокс в настройках маппинга геймпада чтобы при длительном нажатии на какую либо кнопку включался автофайр - генерация быстрых нажатий этой клавиши.

Не сохраняет снапшот

если при записи мнапшота по F2 не указать расширение - то файло не записывается и никаких сообщений не выдаётся.

P.S. Возможно это касается и других типоов файлов - не проверял.

WUTcha - количество отображаемых ячеек

Просьба сделать настраиваемым количество отображаемых ячеек. А то приходится по несколько адресов подряд вбивать, хотя окошко можно растянуть так, чтобы влезало дофига (можно даже не сильно лимитировать сверху, и в случае переполнения самой правой колонки значений делать там перенос строки и увеличивать ячейку по-вертикали)

image

переходы между расширенными (двойными) клавишами - shift отпускается, и вообще клавиатура странно работает

Замечено, когда жмёшь например влево, а потом резко переходишь на клавишу вправо, на какое-то время shift исчезает (если смотреть на Zx keyboard), и начинают идти цифры 8.

Дело в том, что в этот небольшой промежуток перехода между нажатыми клавишами, когда они обе нажаты, капс считается зажатым один раз, и при отпускании одной из клавиш - пропадает. Хотя должен оставаться, т.к. вторая клавиша тоже с капсом. В реальности капс восстанавливается, но поздно, цифры уже во всю набираются. Более того, если не отпуская давить капс на клавиатуре и тыкать влево-вправо - капс будет всё равно пропадать!!!
То же самое с Symbol Shift (скобки тоже превращаются в цифры).

Больше дефлотных romset'ов

Может быть имеет смысл под каждую конфигурацию уже в дистрибутиве сделать дефолтный romset как это сделано в Fuse? А то что-то тыкаюсь-тыкаюсь, кроме 48к ничего толком не удается подключить... Не обязательно включать сами ROM, только настройки для них
2017-04-27 14 35 49

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.