Просмотр полной версии : Emu80 v.4
Pyk, попробовал собрать под macos, лог во вложении. Я пока довольно неопытный под маком, до конца не дошёл, сорри.
Сначала не нашло SDL, но он есть собранный, скачать и один файл перетащить.
А вот wxWidgets похоже нужно собирать из исходников, это я пока отложу.
Посмотрите лог -- собрались файлы зависимые только от SDL, может варнинги будут вам полезны, их там много.
Особенно подозрительно выглядят выражения вида ((symbol && 0xC0) != 0xC0) -- по-моему, тут просто ошибка, должно быть побитовое & вместо логического &&.
nzeemin,
brew install wxmac --devel
Но запустить я все равно не смог, выкидывает адский эксепшн при старте:
2018-01-10 03:31:45.148 Emu80[55913:802511] -[SDLApplication transformToForegroundApplication]: unrecognized selector sent to instance 0x7fdead704090
2018-01-10 03:31:45.149 Emu80[55913:802511] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SDLApplication transformToForegroundApplication]: unrecognized selector sent to instance 0x7fdead704090'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff31f0a53b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x00007fff58919942 objc_exception_throw + 48
2 CoreFoundation 0x00007fff31fa1824 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
3 CoreFoundation 0x00007fff31e81f13 ___forwarding___ + 1443
4 CoreFoundation 0x00007fff31e818e8 _CF_forwarding_prep_0 + 120
5 libwx_osx_cocoau_core-3.1.dylib 0x00000001075a906c _ZN5wxApp9DoInitGuiEv + 262
6 libwx_osx_cocoau_core-3.1.dylib 0x00000001075e71e4 _ZN5wxApp10InitializeERiPPw + 184
7 libwx_baseu-3.1.dylib 0x0000000107b19717 _Z12wxEntryStartRiPPw + 233
8 libwx_baseu-3.1.dylib 0x0000000107b19ca9 _Z12wxEntryStartRiPPc + 30
9 Emu80 0x000000010710831f _Z9palWxInitiPPc + 31
10 Emu80 0x00000001070c4ce1 _Z7palInitiPPc + 49
11 Emu80 0x00000001070bd232 main + 34
12 libdyld.dylib 0x00007fff59506145 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
Abort trap: 6
Пока не разобрался в чем дело.
nzeemin, спасибо, предупреждения насчет битовых операций - действительно ошибки (возможно, как раз с этим связаны известные проблемы с эмуляцией ВГ75), остальное подробнее посмотрю вечером. Не совсем понял только, почему у меня эти предупреждения с этим же Makefile не выдаются, может дело в ключах sdl2 либо в версии gcc, либо просто в особенности его поведения на macos? Можно узнать версию gcc и что выдает sdl2-config --cflags?
nzeemin, svofski, можно попробовать собрать только lite-версию, не требующую wx. Потребуется наверное только немного подредактировать Makefile, чтобы не пытался собирать зависимые от wx файлы (хотел сделать CMakeLists.txt для cmake для упрощения сборки, но руки пока не дошли).
Вообще, не очень мне нравится одновременное использование SDL и WX. Особенности реализации этих библиотек под Windows и Linux разные, приходилось экспериментировать, чтобы заставить их более-менее нормально работать вместе. Для windows и linux подружить их удалось, а вот для macos я этим пока не занимался. Может быть скоро основной вообще станет qt-версия: собственно эмуляция уже работает, осталась некоторая рутинная работа по реализации пользовательского интерфейса и т.п.
Pyk, в Qt-версии как выводите экран?
У меня экран это класс от QWidget, имеющий внутри QImage.
В paintEvent() эмулятор рисует экран в QImage, затем выводит его на реальный экран через QPainter::drawImage().
https://github.com/nzeemin/ukncbtl-qt/blob/master/qscreen.h
https://github.com/nzeemin/ukncbtl-qt/blob/master/qscreen.cpp
Ну и со звуком тоже интересно как вы поступили. У меня так:
https://github.com/nzeemin/ukncbtl-qt/blob/master/qsoundout.h
https://github.com/nzeemin/ukncbtl-qt/blob/master/qsoundout.cpp
nzeemin, вывожу на экран практически так же. Единственное - QImage готовится не в paintEvent, а заранее, в момент эмуляции обратного хода луча, асинхронно с отрисовкой его в paintEvent.
А звук мне пришлось хитрее делать, я создавал собственное устройство - потомок от QIODevice.
Исходники Qt-версии все еще еще слишком сырые, опубликую на github чуть позже. Можно обсудить детали реализации по эл. почте, здесь наверное это будет не совсем уместно.
Потребуется наверное только немного подредактировать Makefile,
Я сделал такой Makefile.lite (отдельный, чтобы не возиться с разными CFLAGS и LDFLAGS - это правда уже легче будет CMake разруливать)
#!/usr/bin/make -f
SRCDIR = src
INSTALLDIR= ~/emu80
CC = c++
CFLAGS = -c -Wall -std=c++11 `sdl2-config --cflags` -DPAL_SDL -DPAL_LITE
LDFLAGS = `sdl2-config --libs`
SRC = $(SRCDIR)/*.cpp
SRCSDL = $(SRCDIR)/sdl/*.cpp
SRCLITE = $(SRCDIR)/lite/*.cpp
SOURCES_LITE = $(shell echo $(SRC)) $(shell echo $(SRCSDL)) $(shell echo $(SRCLITE))
OBJECTS_LITE = $(SOURCES_LITE:.cpp=.o)
all: Emu80lite
Emu80lite: $(OBJECTS_LITE)
$(CC) $(LDFLAGS) $(OBJECTS_LITE) -o $@
.cpp.o:
$(CC) $(CFLAGS) $< -o $@
clean:
rm -f $(OBJECTS)
rm -f $(OBJECTS_LITE)
rm -f Emu80
rm -f Emu80lite
install: Emu80 Emu80lite
mkdir -p $(INSTALLDIR)
cp Emu80 $(INSTALLDIR)
cp Emu80lite $(INSTALLDIR)
cp -r dist/* $(INSTALLDIR)
cp COPYING.txt $(INSTALLDIR)
cp whatsnew.txt $(INSTALLDIR)
cp doc/* $(INSTALLDIR)
make -f Makefile.lite
Все собирается, но Emu80lite сразу после старта выходит, ничегошеньки не говоря вообще. Видно, что успевает моргнуть его меню, что-то он начинает делать, но решает, что не стоит задерживаться. Может быть надо какие-то параметры в командной строке указать?
- - - Добавлено - - -
Можно узнать версию gcc
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin17.2.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
Это не совсем gcc ;) Кланг бывает гораздо более строг в варнингами.
svofski, скорее всего эмулятор не знает, какую платформу эмулировать. Полная версия при первом запуске показывает форму выбора типа эмулируемого ПК а lite-версия этого не умеет. Нужно либо файл emu80.run скопировать с другой системы, либо явно указать тип ПК в командной строке ("Emu80 -a" и т. д. - варианты можно подсмотреть в emu80.conf: последний параметр в config.addPlatform (при наличии)).
- - - Добавлено - - -
Это не совсем gcc
У nzeemin именно gcc, судя по логам...
У nzeemin именно gcc, судя по логам...
Очень навряд ли. На маке clang собой заменяет g++, так что запускать-то его можно как g++ и он виду не подает.
- - - Добавлено - - -
По поводу конфига, я с этим эмулятором к сожалению совершенно пока не знаком и мне было бы удобно, если б он печатал, чего именно ему не хватает при старте.
svofski, насчет подмены g++ не знал, буду иметь в виду.
Lite-версия, к сожалению, ничего не печатает, да и вообще использовать ее имеет смысл разве что из командной строки. Некий такой урезанный вариант, зато не требующий wxWidgets... Смысла большого в ее существовании нет, зато можно попробовать собрать хоть что-то в отсутствии wxWidgets ;)
Ну как же, вот очень даже смысл. Интерфейс полезная характеристика, но все же не основная.
Я только не вижу, где делается Emulation::setProperty("commandline"...), и в дебаггере я туда не попадаю (отошел от компа, пишу по памяти). И без этого он правда не может найти платформу и закачивает сам себе SDL_QUIT.
svofski, так указание типа ПК в командной строке или копирование emu80.run не помогает?
Остальная вся структура папок сохранена? Установка (копирование файлов в ~/emu80) прошла без ошибок?
Я не учел, что надо обязательно сделать make install. Теперь получилось запустить, с -a запустился Апогей.
Makefile.lite поправленный для make install
#!/usr/bin/make -f
SRCDIR = src
INSTALLDIR= ~/emu80
CC = c++
CFLAGS = -g -O0 -c -Wall -std=c++11 `sdl2-config --cflags` -DPAL_SDL -DPAL_LITE
LDFLAGS = `sdl2-config --libs`
SRC = $(SRCDIR)/*.cpp
SRCSDL = $(SRCDIR)/sdl/*.cpp
SRCLITE = $(SRCDIR)/lite/*.cpp
SOURCES_LITE = $(shell echo $(SRC)) $(shell echo $(SRCSDL)) $(shell echo $(SRCLITE))
OBJECTS_LITE = $(SOURCES_LITE:.cpp=.o)
all: Emu80lite
Emu80lite: $(OBJECTS_LITE)
$(CC) $(LDFLAGS) $(OBJECTS_LITE) -o $@
.cpp.o:
$(CC) $(CFLAGS) $< -o $@
clean:
rm -f $(OBJECTS)
rm -f $(OBJECTS_LITE)
rm -f Emu80
rm -f Emu80lite
install: Emu80lite
mkdir -p $(INSTALLDIR)
cp Emu80lite $(INSTALLDIR)
cp -r dist/* $(INSTALLDIR)
cp COPYING.txt $(INSTALLDIR)
cp whatsnew.txt $(INSTALLDIR)
cp doc/* $(INSTALLDIR)
Ну что ж, радует, что lite-версия запустилась и работает :)
Значит, дело все-таки в wxWidgets или его совместной работе с SDL...
Как работает, кстати? Проблем с картинкой, звуком нет? (На Апогее можно сделать R,C <ВК>, G <ВК> и позапускать что-нибудь с ROM-диска).
С музыкой на первый вслух все отлично.
Гигаскрин ожидаемо: фуллскрин очень хорошо, если нет эпилепсии и учитывая обстоятельства, смыргивает изредка, но в целом отлично. В окне ой. Наверное есть параметр не использовать vsync, когда в окне?
Когда камера настроена на 25 fps, выглядит вообще как будто много цветов:
https://youtu.be/MGtcHpClMFs
Но на самом деле все мерцает. И когда в видео видно смыргивание, на экране смыргивает совсем сильно. В общем я думаю это точно так же, как и на 100% лцд мониторов на 60Гц на любой системе.
Пойду-ка соберу на расбери-пи, она у меня к ЭЛТ 50 Гц подключена, правда чб.
смыргивает изредка, но в целом отлично
Ну да, это из-за небольшого несовпадения 60 Гц в Апогее и 60 Гц на мониторе.
В окне ой. Наверное есть параметр не использовать vsync, когда в окне?
Есть параметр emulation.frameRate в emu80.conf, там можно выставить принудительно частоту обновления экрана вместо привязки к vsync. Но параметр общий, будет работать как в оконном, так и в полноэкранном режимах. Под Windows и под Linux проблем в окне нет, vsync работает точно так же - видимо, есть какие-то нюансы с SDL под macos? Либо это специфика самой macos?
Когда камера настроена на 25 fps, выглядит вообще как будто много цветов
Для того же эффекта можно еще window.fieldsMixing = mix в apogey.conf раскомментировать. Будет так же, как в эмуляторе uart.
Пойду-ка соберу на расбери-пи
Подозреваю, что быстродействия может не хватить :( Но попробовать можно :)
- - - Добавлено - - -
на расбери-пи, она у меня к ЭЛТ 50 Гц подключена
На 50 Гц хуже будет - в этих режимах Апогей на частоту 60 Гц программируется...
- - - Добавлено - - -
А видео в предыдущем сообщении сделано в 30 fps...
видимо, есть какие-то нюансы с SDL под macos? Либо это специфика самой macos?
Видимо это специфика макоса или SDL под нее. По крайней мере у меня получается все то же самое.
Подозреваю, что быстродействия может не хватить
Для Raspberry Pi 3:
CFLAGS += -mcpu=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard
Где-то на грани. Мельтешение то частое, то быстрое, звук то еще как-то, то совсем хрипит. Видно, что ему _очень_ тяжело. При этом загрузка всего 100% одного ядра и температура 58 градусов.
Понятно, что под рпи3 надо оптимизировать. Есть Neon, есть 4 ядра.
- - - Добавлено - - -
А видео в предыдущем сообщении сделано в 30 fps...
25, но ютуба знает лучше, как нам надо.
УФ!
Pyk, вот! https://github.com/vpyk/emu80v4/pull/1
Для распи главное, чтобы 64-битных делений было поменьше. Одно вот это изменение и теперь все влезает в 50% одного ядра.
Пойду попробую запущу ЭЛТ на 60 Гц, раз так.
- - - Добавлено - - -
Да, на 60 Гц Гигаскрин хорошо, хотя не могу сказать, что это как-то принципиально лучше, чем на LCD. И все равно он смыргивает где-то раз в секунду.
Одно вот это изменение и теперь загрузка CPU одного ядра сократилась до 50%
Хорошо бы это изменение по ускорению EMU80 внести и в базовую версию EMU80 для IBM PC.
Потому, что, уж извините за правду, эмулятор EMU80 тормозит на одноядерном PC с тактом 2.4 ГГЦ (загрузка CPU 100%). Тормозит не по экрану, с этим всё нормально. А имеет неприятный дефект, - пропускает нажатия на клавиши. Если при эмуляции ОРИОНА и СПЕЦИАЛИСТА это ещё терпимо (хотя при быстром вводе символы пропускаются, чего никогда не бывает на реале), то при эмуляции РК86 вводить с клавиатуры просто неудобно, надо нажать и удерживать клавишу нажатой примерно пол секунды. Пользоваться таким эмулятором РК86 неудобно, хотя и приходится, если надо прогнать ПО для дисковода. В играх отсутствие реакции на короткие нажатия клавиш, тоже вероятно ухудшит качество игры.
Нельзя ли сделать упрощённую версию именно для РК86, где не будут эмулироваться всякие ненужные для большинства программ свойства ВГ75. Скорее всего, что именно эмуляция этих свойств тормозит, ведь в РК86 текстовый экран, т.е заведомо более быстрый, чем экран у СПЕЦИАЛИСТА и ОРИОНА. Вообще бы не было проблем, если бы из Windows, как и в MSDOS можно было бы установить текстовый режим VGA (загрузив фонт как в РК86), что ускорило бы визуализацию в 50 раз.
Заметим, что все даже самые современные иностранные эмуляторы прекрасно работают даже на самых первых ПЕНТИУМ-ах, что имеют в 50 раз меньшее быстродействие. Для сравнения эмулятор EMU от b2m загружает процессор всего на ~10% и ввод с клавиатуры там беp потерь.
Недавно пока делал CP/M для СПЕЦИАЛИСТА, чтобы сберечь нервы, приходилось использовать EMU, эмулируя дисковод в RAM-диске, и только для проверки работы дисковода требовался именно EMU80, т.к в EMU нужный контроллер дисковода не эмулируется.
Очередная версия 4.0.277 от 30.12.2017: http://emu80.org/v4beta/Emu80_40277.zip
Вылет в отладчик по встрече Z80 команды при эмуляции КР580 - полезная вещь. Это позволило за 15 минут очистить от Z80-команд программу, в то время как при трассировке вручную эта работа заняла бы несколько недель.
Сброс по АЛЬТ+F11 должен работать и в окне отладчика. Иначе трассируя программу и останавливаясь в точках контроля, где для останова поставлена команда HALT, никак не выйти из отладчика, чтобы сделать сброс в основном окне программы. Закрываешь окно отладчика, и снова вылетаешь в отладчик по очередному HALT в программе, т.е никак не вернуться в окно программы, чтобы нажать там АЛЬТ-F11.
nzeemin, предупреждения clang отработаю. К счастью, среди них не оказалось ничего критического, даже ошибка с битовой операцией, вероятно, не проявляется ни в одной реальной программе.
svofski, спасибо, pull request посмотрю вечером. Насчет гигаскрин-режима: можно посмотреть режим, на который программируется там ВГ-75. Если получится подстроить его на частоту, более близкую к 60 Гц, то "смыргивать" будет реже (кстати, гигаскрин-режим есть еще в заставке к игре lines).
barsik, не факт, что этот патч поможет на процессорах x86. Эмулятор, конечно, не самый быстрый, простор для оптимизации есть, но все-таки он обычно нормально работает и на процессорах с меньшей тактовой частотой, чем 2,4 ГГц. В очередной раз прошу информацию о вашем ПК, чтобы попробовать понять причину тормозов.
А для сброса пока можно переключиться из отладчика в основное окно, нажать Alt-F11 и опять вернуться в окно отладчика. Информация в окне отладчика обновится при следующем шаге.
при эмуляции РК86 вводить с клавиатуры просто неудобно, надо нажать и удерживать клавишу нажатой примерно пол секунды
Это симптом загрузки 100%.
Я построил было Emu80lite для винды со своим патчем. Но в последний момент вспомнил, что у вас XP. Просите Pyk-a сделать тестовый 32-битный билд.
- - - Добавлено - - -
Pyk, профайлер еще намекает на то, что еще есть 64-битные деления и что Crt8275Renderer::primaryRenderFrame() можно было бы улучшить. Типа там можно const Symbol & вместо копирования Symbol, инкременты умножить заранее итд. Но на фоне ВИ53 я не смог даже разглядеть непосредственных эффектов от этих изменений, и не факт, что локальная копия объекта не работает быстрее из-за кеша итд, поэтому я не стал копать в ту сторону.
Потому недавно пока делал CP/M для СПЕЦИАЛИСТА сделали? под какой контроллер?
barsik, я нашел у себя XP.
Попробуйте вот эту сборку:
http://sensi.org/~svo/b/emu80v4-patched.zip
Это версия lite без интерфейса. Надо распаковать себе в userhome, то есть например c:\Documents and Settings\barsik\emu80
Там из командной строки запустить em80v4-svofski -a (Апогей) или -r (РК)
У меня в затюканной виртуализованной в VirtualBox-е XP на лаптопе 8 летней давности эмулятор съедает около 20% своего виртуального проца:
https://www.dropbox.com/s/5uvsrq9q3bp7e8t/Capture%20d%E2%80%99%C3%A9cran%202018-01-11%20%C3%A0%2017.18.54.png?dl=0
Версия из официальной сборки редко переваливает 30%.
Попробуйте вот эту сборку: http://sensi.org/~svo/b/emu80v4-patched.zip
Попробовал, не работает. Ничего не происходит при запуске, видимо для иной Windows. Пробовал в разных каталогах в т.числе и в каталоге \Documents and Settings\, хотя у меня системный диск D:, а не C:. Кстати "лайт" и полная версия жрут, кажется, одинаковый ресурс.
Зато по Вашей картинке понял, где смотреть загрузку процессора. На русскоязычной Win XP этот столбец вместо CPU называется ЦП. Я не знал, что это загрузка процессора конкретным процессом и смотрел общую загрузку "Загрузка ЦП" в вкладке "Быстродействие". У меня при эмуляции СПЕЦИАЛИСТА загрузка 30...35%, а при эмуляции РК86 почти вдвое выше. А если загружены и другие ресурсо-жрущие программы, то и получается 100% загрузка и торможение. Кстати загрузка EMU от b2m тоже не 5%, а 9...12%, но зато она одинаковая при эмуляции СПЕЦИАЛИСТА и РК86.
Вообще-то, если не использовать одновременно другие программы и запустить EMU80 и никогда не выходить из него, то быстродействия более-менее хватает. Но если выходить и затем снова перезагружать EMU80, то быстродействие падает. Сейчас в этом разобрался. К тому же поднял быстродействие за счёт оверклока. Когда снимал радиатор с CPU, удалил теплопроводящую пасту, т.к она высохла. Из-за этого процессор перегревался и понижал себе частоту. Хотя радиатор не был горячим. Решил смазать вентилятор и одновременно нанёс новую теплопроводную пасту. Оказалось паста очень полезна. Температура процессора упала и процессор без перегрева работает даже на оверклоке.
barsik, шутки шутками, но похоже, что вы можете получить ощутимый прирост в общей производительности, проапгрейдив свой компьютер на Raspberry Pi 3.
Если у вас есть установленный Emu80 и вы умеете запускать в нем Emu80lite, положите мой туда же, где лежит Emu80lite.exe: вот и ответ на вопрос куда именно его класть. И наверное SDL2.dll тоже положите рядом. Я не разобрался сходу как в Code::Blocks прописать статическую линковку для SDL, поэтому dll должен лежать рядом.
Но если вообще получается, что загрузка 70%, то не должны пропускаться клавиши в эмуляции и хрюканья тоже быть не должно. От моего патча, может быть, получится сбросить еще процентов на 10,*но такое трудно прогнозировать.
- - - Добавлено - - -
P.S. уговорил Code::Blocks на статическую линковку, exe: http://sensi.org/~svo/b/emu80v4-svofski-static.exe
При копировании в каталог с EMU80 файл стал запускаться. Но всё-равно отдельные нажатия при быстром наборе пропадают, а загрузка процессора осталась той же самой. Тут дело в принципе работы эмулятора и это не исправить ускорением отдельной подпрограммы. Пропадание нажатий на клавиши происходит потому, что использован неудачный алгоритм выравнивания скорости эмуляции.
Есть три алгоритма эмуляции. Полноценная покомандная эмуляция и покадровая визуализация. Во-времена медленных ЭВМ использовалась покомандная эмуляция. Но она сложна и поэтому сейчас, когда скорости ЭВМ стали это позволять, используется визуализация, т.к это на порядок проще.
Для экранной визуализации также имеется два алгоритма. В грамотных эмуляторах это делается добавление паузы после КАЖДОЙ (!) команды. Это даёт возможность не только подогнать длительность исполнения каждой команды к числу её маш.тактов в реале. Важнее то, что эмулируемая программа прогоняется с той же равномерностью как в реале.
Визуализация делается как раз в эти паузы между командами и никак не тормозит прогон. Даже на медленной машине не возникает торможения, т.к в каждой паузе визуализируется лишь маленькая часть экрана. Достаточно скоростей 486-той. В эмуляторах сделанных на таком принципе реакция на клавиши абсолютно полностью соответствует оригиналу.
А в данном эмуляторе используется покадровая визуализация и применён следующий алгоритм выравнивания скорости. Весь прогон разбивается на фрагменты дискретизации. В 20...50 мсек. Известно сколько маш.тактов выполнит реальный процессор за это время. Эмуляция команд эмулируемого CPU производится на максимальной скорости PC. При этом эмулируемая программа прогоняется на эмулируемом такте 200 МГЦ, и нужное число машинных тактов прогонит всего за 1 МСЕК. Чтобы уровнять скорость прогона, надо остановить эмуляцию на оставшиеся 49 МСЕК. И как раз в это время и делается визулизация - копирование экрана 8-ми разрядки в реальный экран SVGA. Если быстродействия не хватает, чтобы процедурой написанной на ЯВУ вывести весь кадр за 49 МСЕК, то FPS падает (хотя это визуально не вредит), а время вывода кадра подпрограммой написанной на ЯВУ может увеличиться до долей секунды.
Ясно, что в такой концепции прогон происходит рывками, т.е прогнали фрагмент, остановились, затем после паузы - следующий фрагмент. И вот как раз в эту паузу программа не чувствует клавиатуру. Если коротко нажать как раз в момент такой паузы (длиной в доли секунды), то нажатие пропадает.
Исправить такой алгоритм можно 2-мя способами. Во-первых, не допускать потери нажатий клавиш. Т.е фиксировать нажатия. А не только проверять клавиатуру тогда, когда к ней обращается программа. Надо искусственно удлинять нажатия на период больший чем время паузы, чтобы программа 8-ми разрядки могла это обнаружить.
Когда нажатие случается и заканчивается во время, когда происходит визуализация, то оно пропадает для прогоняемой программы. Если эмулятор отнял у программы 8-ми разрядки время, то он должен брать на себя функции обслуживания клавиатуры. Т.е по окончании визуализации, он должен проверить было ли или нет нажатие на клавиши во время визуализации и если оно было, то надо сэмулировать нажатие той же или лучше большей длительности на время когда прогоняется программа 8-ми разрядки. Вот тогда никаких пропаданий нажатий не будет.
Второй способ избавиться от потери нажатий - это сократить период дискретизации. Похоже сейчас пауза равна времени копирования всего экрана 8-ми разрядки в экран SVGA, написанной на ЯВУ. А чтобы сократить период дискретизации лучше в каждой паузе выводить не весь экран, а лишь его часть, например четверть экрана, что в 4 раза сократит время пауз в прогоне и требования к скорости PC.
Если визуализацию сделать на ассемблере, то период дискретизации получится маленьким. Тогда программа также прогоняется фрагментами с паузами между ними, но эти паузы малы и не приводят к плохой реакции на клавиши. Но увы, в данном случае всё сделано не на ассемблере, а на очень тормозном ЯВУ и у автора нет желания менять алгоритм.
Вывод простой. Надо писать критичные процедуры на ассемблере, а не на ЯВУ. Так было для 8-ми разрядки и так это осталось и для PC со скоростями в тысячи раз выше.
svofski, сегодня, к сожалению, был занят, успел только потестировать готовые сборки с патчем.
На Intel, похоже, деление 64-разрядных чисел не дает мало-мальски заметного прироста производительности. Пробовал запускать в XP на Core2Duo 6420 2,13 ГГц 10-летней давности. Загрузка процессора на gigascreen demo колеблется в районе 35-41%10-16% как с патчем, так и без. Возможно, с патчем процента на 2 меньше - понять сложно. Завтра могу попробовать еще на Atom'е 1,6 ГГц.
barsik же от патча эффект тем более не почувствует, поскольку он работает в конфигурации "Специалиста", в которой не используется ВИ53.
А код я еще посмотрю в плане производительности. Меня пока несколько удивляет, почему именно эта процедура вызывается так часто, что затмевает все другие места, где встречается 64-битное деление. Возможно, просто специфика апогеевской программы, которая очень часто читает значения счетчиков (на какой программе проверялось, кстати?)
barsik, после прочтения последних ваших сообщений возникла одна идея. Не запущены ли у вас случайно параллельно с эмулятором какие-то DOS-программы (они запросто могут отбирать 100% процессорного времени)? Или про какие ресурсо-жрущие программы вы говорите? Просто загрузка порядка 30% на Специалисте - это довольно большой запас производительности...
Pyk, да мы никуда не опаздываем. Я проверял все на Апогее. Не знаю, почему, просто наугад. И первая попавшаяся там демка с гигаскрином меня заинтересовала тем, как она будет выглядеть на ЭЛТ.
Между вызовами updateState() по-моему 17500 циклов времени, а делитель 945. Это важный момент, потому что одно на другое не делится и, если неправильно считать количество тиков, выходит свист. В вычислении тиков до моего вмешательства уже прослеживаются какие-то следы борьбы ;) Вызывается я думаю он в обычных количествах, это же таймер. Еще подумал, что даже сохраняя 64-битное время, незачем там вычислять количество тиков в каждом счетчике. Достаточно сделать это в головном модуле один раз за троих.
Я сначала разбирал gperftools, но они не показывали причину вызовов __udivmoddi4(). Тогда я прибег к дедовскому способу: ctrl+c в отладчике, это всегда работает. Вообще я и сам удивлен, что на rpi3 это такая тяжкая операция, возможно я недожал какие-то архитектурно-специфические опции. Но, глядя правде в глаза, незачем там 64 бита иметь. При вот этих значениях, 17500/945, хватило бы на самом деле и 16.
svofski, смутила меня все-таки относительно высокая загрузка процессора, попробовал сейчас еще раз на том же Core2Duo - неизменно получаются уже другие цифры: 13-16% без патча и 10-13% с патчем на том же гигаскрине. Откуда я взял лишние 30% при тестировании час назад, не понял :confused:
Откуда я взял лишние 30% при тестировании час назад, не понял
Не знаю ;) На rpi3 Специалист съедает ~25%.
Вопрос к авторам эмуляторов с поддержкой КНГМД на ВГ93. Формат DD (Double Density), т.е 720 или 800 кб на диск поддерживается, а формат с одинарной плотностью, т.е SD (Single Density) 360 или 400 кб на диск поддерживается?
Предполагаю, что эмулятору, в котором эмуляция ВГ93 сделана не в реальном времени, а на отлове CPU-команд записывающих в регистры ВГ93, совершенно до лампочки низкоуровневый формат - частота импульсов записи и сам низкоуровневый формат (FM или MFM), т.к эмулятор просто отлавливает команду (например, читать сектор) и выдаёт соответствующие данные при чтении из регистра данных.
Если низкоуровневый формат до лампочки, то должна работать самая первая примитивная дискетная защита от копирования дискет ОРИОНА из начала 90-тых, которая была основана на том, что защищающие треки писались в формате SD (MFM), тогда как остальные треки были в обычном формате DD (FM). Программами копирования ОРИОНА эти дискеты не копировались, но к сожалению, специальными программами на IBM PC это копировалось. Потому пришлось усложнять защиту и все мои последующие дискеты нельзя было скопировать.
Проблема только как перенести такие дискеты в формат ODI. В формате ODI все сектора одного размера по 1 кб и идут впритык, без межсекторной информации. На дорожке отформатированной в DD 5 секторов по 1 кб, а на дорожке отформатированной в SD 5 секторов с размером всего по 512 байт.
Если считать дорожки и записать в файл ODI, то вся адресация секторов после дорожки записанной в SD сдвинется. Нужен такой формат, в котором у каждого сектора есть информация о номере дорожки, номере сектора на этой дорожке и размер этого сектора. Порядок секторов не обязан быть такой же как на реальной дискете, т.к всё-равно нет всей межсекторной информации и команда чтение дорожки не сработает.
Но это хотя бы позволит использовать дискеты ОРИОНА защищённые от копирования программой CERBERUS.COM от С.Коровкина из Ижевска. Там защита основана на том, что на дорожку пишется дополнительный 6-той ключевой сектор с размером всего в 256 байт. Такие дискеты тоже не могут копировать программы ОРИОНА для посекторного копирования дискет, но специальные программы IBM PC и это копируют.
Чтобы работали более грамотные защиты дискет ОРИОНА, что я применял начиная с 1993, надо хранить в образе диска полные копии дорожек со всей межсекторной информацией. Это увеличит объём образа диска от 800 кб до 1.5 мб.
Вопрос по эмуляции РК86. В реальном РК86, если повысить такт ВТ57 с 1.77 МГЦ до 2.66 МГЦ или даже до 3.2 МГЦ (16:5=3.2), то увеличивается быстродействие РК86 (короче становятся периоды захвата шины). В эмуляторе это так или влияние ПДП вообще не учитывается?
Как изменить такт в РК-КНГМД в эмуляторе?
Сейчас в эмуляторе в РК-КНГМД как бы применён такт 8 МГЦ (16 МГЦ на входе), что и даёт 5 секторов по 512 байт на трек. Но если поставить кварц 10.5 МГЦ, то на ту же DD-дискету на каждый трек влезает уже 7 секторов по 512 байт, что даёт емкость дискеты в 560 кб (574 кб при 82 треках). РК86 для такого формата д.быть немного турбированным. Т.е или иметь повышенный такт ВТ57 или же такт самого КР580 должен быть чуть повыше.
Для турбирования РК86 меняют кварц у ГФ24 на кварц 20...27 МГЦ. Это повышает такт у ВТ57 и у КР580. А чтобы видео-сигнал остался в норме, надо откуда-то брать такт 16 МГЦ для ВГ75. Для этого ставится отдельный генератор на 531ЛН1 с кварцем 16 МГЦ. При кварце 27 МГЦ для ГФ24 реальное быстродействие увеличивается вдвое против ~1.3 МГЦ эффективного такта базового РК86.
Можно ли в эмуляторе, чтобы не макетировать в реале, подставлять свои частоты для КР580 и для ВТ57 и замерять получившееся быстродействие РК86 ?
Пробовал запускать в XP на Core2Duo 6420 2,13 ГГц 10-летней давности. Загрузка процессора на gigascreen demo колеблется в районе 35-41%10-16% как с патчем, так и без.
Уточненные сведения: загрузка одного ядра порядка 25-35%, соответственно общая загрузка в 2 раза меньше.
barsik, для изменения формата образа диска нужно поменять его параметры к конфиге: FdImage diskA = 80, 2, 5, 1024 (дорожки, стороны, сектора, размер сектора)
Более продвинутые форматы emu80 не поддерживает. Поддержка дисковода также сделана не в реальном времени (в отличие от контроллера РК). Так что если нужна поддержка защищенных дискет, нужно разрабатывать новый формат (либо использовать какой-то готовый). А пока имеем только базовую поддержку ВГ93 и дисковода.
Влияние ПДП в эмуляторе учитывается, такт повысить можно, изменив тактовую частоту в конфиге: dma.frequency = 2666666 и т.п. Аналогично для процессора: cpu.frequency = 2000000... Влияние ПДП учитывается не на 100% точно, но на практике скорость не отличается от реала больше чем на 2-3%.
Такт РК-КНГМД в эмуляторе изменить пока нельзя (да, обещал сделать, но пока этого нет).
Pyk, насколько я понимаю (сам пока не пробовал, собираюсь), на GitHub можно прикрутить к своему проекту CI (непрерывную интеграцию).
То есть, по коммиту робот берёт ваш код и собирает под несколько платформ.
Это может помочь в плане борьбы с варнингами и убеждаться что оно как минимум собирается.
Кроме того, можно собирать command-line версию эмулятора под каждой из платформ и прогонять его, получая скриншоты в контрольных точках и сравнивая с эталоном. Это даст некоторую уверенность что при очередном изменении не произошло регрессии.
nzeemin, спасибо за идею, continuous integration штука на первый взгляд интересная, но тоже пока еще не пробовал.
Можешь попробовать собрать на маке текущую версию из репозитория?
Изменений там немного, интересует в основном, остались ли варнинги clang'а. Я пытался настроить clang под Windows, но задача оказалась не совсем тривиальной, и я пока отложил эту затею...
Pyk,
In file included from src/wx/wxConfigWnd.cpp:19:
src/wx/wxConfigWnd.h:78:16: warning: private field 'm_pfnSetPropValueCallBackFunc' is not used [-Wunused-private-field]
bool (*m_pfnSetPropValueCallBackFunc)(const std::string&, const std::string&, const std::string&);
^
src/wx/wxConfigWnd.h:79:23: warning: private field 'm_pfnGetPropValueCallBackFunc' is not used [-Wunused-private-field]
std::string (*m_pfnGetPropValueCallBackFunc)(const std::string&, const std::string&);
^
2 warnings generated.
все остальное чисто.
- - - Добавлено - - -
P.S. кстати, gcc-6 позанудней кланга будет.
svofski, спасибо, поправил. И Makefile разделил пока на два, а то там действительно ерунда получалась с lite-версией...
Pyk, к сожалению, составленный Вами конфиг для многобанкового СПЕЦИАЛИСТА немного не соответствует реалу. А именно, коммутация банок сделана только на основное ОЗУ в 48 кб (0...BFFF), а открытое верхнее ОЗУ не коммутируется, всегда оставаясь банкой 0, хотя физически банка переключается целиком во всей области от 0 до FFFF. Это не только сокращает объём эл.диска с 174 кб до 144 кб, но и не позволяет отлаживать программы для реала это использующие.
Для реала мне вряд-ли удастся расширить ОЗУ выше 4-х банок, т.к 565 РУ7 (или 41256) нынче трудно достать и придётся ограничиться одной банкой РУ7. Но в эмуляторе простейшим изменением конфига можно "наколдовать" себе в СПЕЦИАЛИСТЕ хоть гигабайт памяти. Например, при эмуляции РК86 в эмуляторе EMU от b2m простым изменением пары цифр я делал банковое ОЗУ РК86 в 4 мб.
Потому я и решил прибавить себе ОЗУ в СПЕЦИАЛИСТЕ в эмуляторе EMU80. Для этого я отредактировал конфиг-файл следующим образом:
Было:
Ram ram0lo = 0x9000
Ram ram1 = 0xC000
Ram ram2 = 0xC000
Ram ram3 = 0xC000
ram.page = 0,&ram0
ram.page = 1,&ram1
ram.page = 2,&ram2
ram.page = 3,&ram3
ramSelectorTranslator.writeAndMask = 0x3
Сделал:
Ram ram0lo = 0x9000
Ram ram1 = 0xC000
Ram ram2 = 0xC000
Ram ram3 = 0xC000
Ram ram4 = 0xC000
Ram ram5 = 0xC000
Ram ram6 = 0xC000
Ram ram7 = 0xC000
ram.page = 0,&ram0
ram.page = 1,&ram1
ram.page = 2,&ram2
ram.page = 3,&ram3
ram.page = 4,&ram4
ram.page = 5,&ram5
ram.page = 6,&ram6
ram.page = 7,&ram7
ramSelectorTranslator.writeAndMask = 0x7
Но увы, что-то не получилось. Банки не добавились. Вместо записи в 4-тую банку происходит запись в нулевую банку и происходит улёт. Что надо ещё отредактировать в конфиге, чтобы поиметь хотя-бы 512 кб памяти в СПЕЦИАЛИСТЕ ?
И ещё вопрос по эмулятору. Эмулируете ли Вы сигнал INDEX в РК-КНГМД ? Потому что с этим возникли проблемы. Использую проверенные подпрограммы, что точно работали на реале, но в эмуляторе они не работают. Работают только подпрограммы RK-DOS в неизменном виде.
Также нужна эмуляция КНГМД на ВГ93 от ОРИОНА в СПЕЦИАЛИСТЕ. В конфиге есть какие-то намётки на эту тему, но они закомментированы. Если откомментировать эти строки, это даст КНГМД на базе ВГ93 в СПЕЦИАЛИСТЕ ?
Как я понимаю с ВГ93 работа идёт не в реальном времени и без разницы ставить такт в эмулируемом СПЕЦИАЛИСТЕ в 0.5 МГЦ или в 5 МГЦ, на работе контроллера дисковода это не отразится.
Поясню, речь тут идет о конфиге, который я делал индивидуально для barsik'а под его специфическую конфмигурацию Специалиста и не публиковал на форуме. Если кому-то будет интересно, выложу.
По общим вопросам:
Эмулируете ли Вы сигнал INDEX в РК-КНГМД ?
Да, эмулируется сигнал длительностью 3 мс.
Как я понимаю с ВГ93 работа идёт не в реальном времени и без разницы ставить такт в эмулируемом СПЕЦИАЛИСТЕ в 0.5 МГЦ или в 5 МГЦ, на работе контроллера дисковода это не отразится.
Совершенно верно.
barsik, насчет остального ответил на почту.
Pyk, спасибо за инструкции по увеличению ОЗУ и ПЗУ СПЕЦИАЛИСТА в эмуляторе EMU80. Сделал себе пока 1 мб ОЗУ, для RAM-диска этого хватит. Также увеличил ПЗУ до 256 кб, хотя в реале пока использую ПЗУ размером всего в 8 кб. Но это тоже пригодится, т.к в это ПЗУ (не для реала, а для эмулятора) смогу "засунуть" постоянно нужные программы, например, можно избавиться от загрузки RAM-диска с МГ-ленты или вообще из резидентного ПЗУ сделать CP/M-диск с атрибутом R/O.
Недавно попробовал отлаживать программы для СПЕЦИАЛИСТА, отчего возникли некоторые пожелания по улучшению отладчика, встроенного в эмулятор EMU80.
Чтобы изменить ячейку памяти, я выхожу в окно дампа и в окне дампа набираю A, затем, когда адрес подсветится, ввожу адрес, например 8FFC. Надо, чтобы указатель по байтам (подсветка байта) установилась именно на байт в адресе 8FFC, а не на 8FF0, как сделано сейчас. Приходится тратить время вручную перегоняя курсор на нужный байт.
По директиве U пропускаться должна только единственная команда HALT, а не любая команда, т.к пропускать осмысленные команды не надо, это приводит к зависам. А иногда случайно нажимаешь на U и полезная для программы команда пропускается и происходит завис.
И специально для команды HALT нужна команда по её забитию в коде программы, когда с данным куском программы уже разобрались и остановка в данной точке больше не нужна. Сейчас это приходится делать вручную. Т.е нужна команда N, которая работает только, если остановка на команде HALT. Тогда по этому адресу вместо кода 76 должен подставляться код 00, что является командой NOP.
И ещё желательно ввести директиву T (от слова TEXT). В окне мини-дизассемблера тексты отображаются какими-то случайными командами ассемблера. Подведя подсветку (указатель текущей строки) к началу предполагаемого текстового фрагмента и нажав T, данный фрагмент должен дизассемблироваться как оператор (или несколько операторов) 'DEFB' или оператор 'DC', т.е текстОвой ASCIIZ-строкой или строкой в которой в последнем символе установлен старший бит в качестве признака конца строки.
Это нужно мне при отладке (т.к использую RST), а также при просмотре кодов программ ОРИОНА от ОРИОНСОФТ, а также многих программ CP/M, где используется тот же способ размещения текста.
Я вывожу текст по RST 18, и даже когда RST недопустимы, то всё-равно текст вставляю непосредственно в программу. Т.е вместо RST 18, ставлю CALL TXTOUT, а сам текст ставится сразу-же после этого CALL. А продолжение программы начинается только после стоп-байта 00 или выставленного старшего бита символа. Потому на экране вашего отладчика вместо программы я вижу мусор. И проблема найти конец текста, чтобы поставить стоп точку именно в этом месте.
Проблема даже не найти, а именно поставить стоп точку, т.к предыдущий перед стоп-байтом символ дизассемблируется как 2-х или трёхбайтовая команда и поставить стоп-точку на продолжении программы сразу за стоп-байтом текста невозможно, т.к этого адреса просто нет в дизассемблированном куске программы, а вся последующая программа искажена. Т.о не имея директивы T не только отлаживать, но даже просто просматривать такую программу невозможно.
Вот смотрите как выводят текст CP/M-программы. Естественно грамотные программисты на ассемблере всегда используют макро-команды. И для вывода текста обычно вот такие:
.
fmssg EQU 9
CPM MACRO PARAM
LD C,PARAM
CALL 5
ENDM
MSSG MACRO PARAM
LOCAL M1
CALL M1
defb PARAM
defb '$'
M1: POP DE
CPM fmssg
ENDM
CRMSSG MACRO PARAM
LOCAL M1
CALL M1
defb 13,10
defb PARAM
defb '$'
M1: POP DE
CPM fmssg
ENDM
Тогда программист чтобы вывести текст пишет строку
.
MSSG 'Drive specifier out of range'
что выглядит почти как строка в языке высокого уровня.
А когда я пытаюсь просматривать фирменные программы написанные на макроассемблере в отладчике эмулятора EMU80, возникают вышеописанные проблемы. В своём эмуляторе (для MSDOS) я, естественно, в встроенном мини-дизассемблере дизассемблирую байты после RST 18, как текст.
Это только программисты для РК86 лишённые макроассемблера для вывода текста вынужденно использовали вот такую конструкцию:
.
MSSG EQU 0F818H
LD HL,TXT
CALL MSSG
.....
TXT: DB 'HELLO !',0
Причём текст обычно размещали в конце программы, оттого трудно уловить логику программы просматривая её в мини-дизассемблере, тогда как, когда текст встроен прямо в код, разобраться в программе проще.
А ещё возмущает, почему мнемоника Z80 в мини-дизассемблере так обижена. Мнемоника КР580 выводится нормальными буквами, а мнемоника Z80 выводися ущербными маленькими буковками. Большинство программистов на ассемблере ценят своё зрение и пишут программы большими буквами, тем более что легко перепутать маленькую L и 1. Для меня программа в мнемонике Z80 выглядит непривычно, это неудобно и раздражает.
PS. В новых версиях, Вы забыли сделать ALT-F11 работающим в отладчике (причём с автозакрытием окна отладчика по ALT-F11 в любом из окон).
- - - Добавлено - - -
И не надо в дампе показывать показывать псевдографику РК86.
В СПЕЦИАЛИСТЕ и в ОРИОНЕ нет такой псевдографики в фонте. А символы выше 80H тоже стоит отображать. Или в виде КОИ-8 или сбрасывать старший бит, делать XOR 20H и отображать инверсно. Тогда в дампе легко находить тексты КОИ-8. А лучше просто выводить символы (по крайней мере с весами C0...FF) в КОИ-8. А ещё лучше выводить в дампе и псевдографику (т.е коды 80...BF), но не от балды, а по книге В.Фигурнова "IBM PC для пользователя" (ISBN 5-279-00900-8).
barsik, принято. Постараюсь учесть, но по срокам ничего пока обещать не буду.
Хотя есть несколько вопросов:
иногда случайно нажимаешь на U и полезная для программы команда пропускается
Честно говоря, плохо представляю, как можно случайно нажать на клавишу, расположенную довольно далеко от остальных используемых в эмуляторе клавиш. В принципе, пропуск любой команды тоже может быть иногда полезен, может быть его повесить на какую-нибудь F-клавишу?
Проблема даже не найти, а именно поставить стоп точку, т.к предыдущий перед стоп-байтом символ дизассемблируется как 2-х или трёхбайтовая команда и поставить стоп-точку на продолжении программы сразу за стоп-байтом текста невозможно, т.к этого адреса просто нет в дизассемблированном куске программы, а вся последующая программа искажена.
Пока я этого не сделал, могу посоветовать нажать "A" и ввести адрес, на котором нужно поставить точку останова. При этом команда, начинающаяся с этого адреса, гарантированно будет дизассемблирована.
В новых версиях, Вы забыли сделать ALT-F11 работающим в отладчике (причём с автозакрытием окна отладчика по ALT-F11 в любом из окон)
Ничего вроде бы не менял. Alt-F11 работает только в основном окне. Для сброса нужно переключиться в основное окно из окна отладчика, а потом можно опять вернуться в отладчик. Автозакрытия окна отладчика по Alt-F11 тоже никогда не было. В общем, прошу пояснить.
Мнемоника КР580 выводится нормальными буквами, а мнемоника Z80 выводися ущербными маленькими буковками.
Сделал так, как привык я - мнемоникой Intel 8080 я пользовался на РК-подобных, где не было строчных букв, а мнемоникой Z80 - на машинах со строчными буквами (так же, как и Intel 8086 я тоже набираю строчными). Кому как привычнее видеть мнемоники Z80? (Можно, в принципе, и опцию сделать...)
Pyk, я насроил автосборку своих Qt-проектов под Linux и MacOS, заняло это несколько часов.
Шаг первый -- регистрируемся на travis-ci.org, коннектим свой аккаунт с GitHub. Затем "включаем" там свой проект.
Шаг второй -- создаём и коммитим конфиг .travis.yml, пример тут: https://github.com/nzeemin/ukncbtl-qt/blob/master/.travis.yml
По коммиту сразу начинается сборка, логи сбори все доступны и приходят нотификации на имейл.
Очень советую, мне понравилось.
nzeemin, спасибо за подсказку, думаю, что это сэкономит мне время, когда тоже буду настраивать CI.
А почему, кстати, именно Travis-CI? Какие-нибудь альтернативы рассматривались?
А почему, кстати, именно Travis-CI? Какие-нибудь альтернативы рассматривались?
Travis даёт образы с Linux и macOS.
Ещё использую AppVeyor для сборки под Windows.
Видел что люди используют CircleCI, но похоже там только Linux.
https://github.com/marketplace/category/continuous-integration -- все здесь
Monolit5495
15.02.2018, 10:43
Вопрос по РК86: Какими клавишами ввести код "AR2" . Она нужна при работе ED ?
Какими клавишами ввести код "AR2"?
Клавиша <ESC>.
Не знаю, что за ED имеется ввиду, но если это первый МИКРОН, то он очень неудобен. МИКРОН-2 гораздо лучше. Но вообще зачем редактировать в редакторе РК86, если Вы на IBM PC, где есть более удобные редакторы текста?
Получается быстрее отредактировать файл на PC (не выходя из эмулятора), а затем загрузить его в эмулятор. Естественно, надо учесть отличие форматов и если файл для пакета МИКРОН, то нормальный текст надо конвертировать в формат МИКРОНА, т.е разделитель только 0D, никаких табуляций и в конце файла обязательно д.быть стоп-байт FF. А ассемблер МИКРОН не любит пустых строк, потому на пустых строках надо ставить точку с запятой.
Жаль, что в эмуляторе не выводится картинка клавиатуры по нажатию какой-либо клавиши, как сделано в некоторых эмуляторах ZX-Spectrum. Я как-то полчаса искал клавишу для ввода двоеточия.
Monolit5495
15.02.2018, 13:54
Спасибо! Все верно, но я, почему то не мог найти, теперь все работает.
Использую EDMASM.RKR который есть. А где его можна взять?
Да и у меня не IBM PC, а SAMSUNG NP900X3A - ноутбук.
С клавиатурой немного повозился, нашел какие клавиши
овечают клавишам РК86. Ну и как то так работаю.
На днях сделаю новый релиз - там как раз в плане раскладки клавиатуры кое-что улучшено :)
Очередная версия 4.0.289 от 17.02.2018:
Windows-сборка:
http://emu80.org/v4beta/Emu80_40289.zip
Исходники:
https://github.com/vpyk/emu80v4
Изменения в версии 4.0.289:
Легенда:
+ Нововведение
* Изменение / улучшение
- Исправлен баг
! Известная проблема
+ Новый режим раскладки клавиатуры ("умная" раскладка). В этом режиме нет однозначного соответствия клавиш.
Просто набирайте текст, в том числе и на русском языке, переключаясь привычным способом - все необходимые
нажатия клавиш будут эмулироваться автоматически. Переключиться в этот режим можно с помощью комбинации клавиш Alt-K.
По умолчанию режим установлен для РК-86, Апогея, Партнера и Микроши. В других ПК в корректности работы не уверен,
но можете попробовать.
* Убран запрос rk-файла при попытке ввода с магнитофона, если уже воспроизводится wav-файл
* Реализована возможность чтения конфигурационных файлов с BOM UTF-8, во все конфигурационные файлы добавлен BOM
* Улучшена точность поддержки заданной частоты кадров
* Улучшено поведение эмулятора при запуске на медленных ПК, не обеспечивающих эмуляцию в реальном времени,
в частности улучшена реакция на ввод с клавиатуры
* Выход звука с таймера сейчас инвертируется, чтобы избежать в большинстве случаев постоянной составляющей при отсутствии звука
* Отдельный Makefile для lite-версии в исходниках
- Устранено появление в памяти процесса без окна при проблемах в конфигурационных файлах
- Устранены проблемы с отображением текущего значения альтернативного шрифта в меню конфигурации
- Исправлены небольшие ошибки в эмуляции
К сожалению, многое из уже начатого закончить пока не успел (в том числе Qt-версию), поэтому на данный момент это просто промежуточная сборка без значительных нововведений.
Pyk, "Version number updated" -- чтобы не делать такие коммиты, под SVN я использовал номер ревизии. Но в git номер ревизии это просто хеш, поэтому пришлось найти другой способ -- считается номер коммита в мастере от самого начала, этот командник автоматически вызывается перед компиляцией каждой Release-версии:
https://github.com/nzeemin/ukncbtl/blob/master/!version.bat
nzeemin, интересный вариант. Есть и альтернативы вроде встроенного средства Autoversioning в Code::Blocks, и я ими пользуюсь, но конкретно для этого проекта идеального решения не нашел. Можно генерировать version.h "на лету" и не включать его в репозиторий. Но проект у меня мультиплатформенный, может быть собран из Code::Blocks, Qt Creator или командной строки, может из Windows или из unix-like, может из репозитория или из скачанного с github архива, так что этот вариант не для меня: хочется, чтобы номер версии всегда присутствовал. Если же хранить version.txt в репозитории, то опять-таки есть два варианта - обновлять его до релиза или после. Второй вариант какой-то некрасивый, а в первом, как у меня сейчас, неизбежно будет возникать иногда необходимость подобных коммитов, в которых меняется только номер версии...
Есть еще экзотические варианты вроде включения в репозиторий файла version.txt только для коммитов, соответствующих релизам, но это уже извращение какое-то IMHO...
Может быть, есть какие-нибудь полезные статьи на эту тему?
Изменения в версии 4.0.289:
* Улучшено поведение эмулятора при запуске на медленных ПК, не обеспечивающих эмуляцию в реальном времени, в частности улучшена реакция на ввод с клавиатуры
Да, стало заметно лучше. Если раньше в эмуляции РК было почти невозможно набирать текст в обычном быстром темпе, то сейчас это проходит, - т.е даже стараясь набирать текст максимально быстро, мне не удалось добиться пропадания нажатий. Чтобы, дефект вернулся, пришлось запустить две копии. Кстати, это значит, что алгоритм не изменён. Да и загрузка процессора не уменьшилась, а возможно, даже увеличилась.
Но я ещё не пытался активно использовать РК-эмулятор. Ранее, проблемы возникали в основном из-за того, что часть эмулятора не выгружалась и по ходу работы, постепенно эмулятор становился всё тормознее и тормознее.
Очередная версия 4.0.292 от 11.03.2018:
Windows-сборка:
http://emu80.org/v4beta/Emu80_40292.zip
Исходники:
https://github.com/vpyk/emu80v4
Изменения в версии 4.0.292:
Легенда:
+ Нововведение
* Изменение / улучшение
- Исправлен баг
! Известная проблема
+ Поддержка ПК Eureka (спасибо Tomas Šimkevičius aka Protom за информацию по данному ПК,
считанные с ленты программы и тестирование)
+ Опция в настроках: подавление запроса файла после сброса для ПК Специалист и Eureka
+ Поддержка загрузки мультиблочных файлов по Alt-F3 или из командной строки
+ Поддержка чтения/записи формата CSW наряду с WAV
* Редактирование флагов в отладчике
* Автоматический переход к редактированию следующего байта в редакторе дампа в отладчике
- Устранены возможные искажения звука на частотах 44100 и 22050 Гц
- Исправлено сохранение файлов под Linux, добавлен запрос на замену существующего файла
(спасибо Tomas Šimkevičius)
- Исправлено чтение wav-файлов в режиме MSX
Программы для ПК Eureka можно взять на странице сайта Tomas Šimkevičius:
http://www.8bit.lt/ru/specialist/eureka
Там же есть краткое описание этого компьютера.
Тема на форуме Специалиста, посвященная Эврике:
http://zx-pk.ru/threads/28935-eshche-odin-klon-spetsialista-eureka.html
Pyk, большое спасибо за отличный эмулятор.
можно поинтересоваться, до QT-версии ещё далеко ?
ZEman, в Qt-версии много еще недоделок, но по крайней мере она уже нормально работает и не вылетает.
Так что полнофункциональную версию совсем скоро не обещаю, но некую тестовую не полнофункциональную сборку постараюсь сделать.
Приходится брать паузы в работе над Qt-версией: хочется ведь и новые фичи добавлять к эмулятору и новые компьютеры поддерживать ;)
Pyk, а вот такой компьютер ещё можете добавить в эмулятор.
http://www.nedopc.org/forum/viewtopic.php?f=93&t=8382
ZEman, даже не смотрел, что это за комп такой.
Судя по всему, очень похож на РК-86?
Возможно, получится быстро сделать просто изменением конфига...
да это клон РК-86.
там прошивка другая и может ещё что-то по мелочи из отличий.
где-то здесь на zx.pk.ru была тема про этот компьютер, найти что-то не могу.
В эмуляторе ОЙРИКИ из-за попытки объединить её со СПЕЦИАЛИСТОМ, когда режим СПЕЦИАЛИСТА включается нажатием <F3> при надписи "ВВОД?", невозможно использовать программы использующие ОЗУ выше 8000.
Опытным путём удалось установить, что дефект легко исправляется удалением из файла EUREKA.CONF следующих строк.
@F806_ADDR = 0x8AC7
@F80C_ADDR = 0x8558
@F803_ADDR = 0x8760
Если же вдруг понадобится использовать ойриковские бейсик или текстов редактор (из пакета ассемблера), то в них не будет работать ввод с магнитофона. Чтобы ввод с МГ заработал, эти строки придётся вернуть. Так что пока лучше иметь два конфига ОЙРИКИ, один для ойриковского ROM-BIOS, второй для специалистовского.
barsik, так не совсем корректно будет работать, нужно убрать либо закомментировать следующие строки:
cpu.addHook = &tapeOutHook2
cpu.addHook = &tapeInHook2
cpu.addHook = &closeFileHook2
Просто родной софт не использует эти адреса, точнее в них всегда Монитор. Надо будет сделать проверку или хотя бы опцию в конфиге...
Можно, кстати, поинтересоваться, на каком языке "Eureka" читается как "Ойрика"? Вообще компьютер литовского происхождения, насколько я понимаю...
Можно, кстати, поинтересоваться, на каком языке "Eureka" читается как "Ойрика"? Вообще компьютер литовского происхождения, насколько я понимаю...
На немецком, а литовский это, думаю, тот же немецкий, но чуть под другим соусом. А как по вашему это читается по английски?
Я считаю, что Ойрика не только красивее звучит, чем Эврика, но к тому же забавнее.
TomaTLAB
11.03.2018, 19:35
Какой то у Вас гибрид немецкого с английским получился :) По немецки будет ближе к "ойръека", а по английски "эу'рика"
OrionExt
11.03.2018, 19:53
Бедный Йорик!:D
Pyk, удобнее было бы, если бы окно "Открыть файл", помнило бы последний тип файла который пользователь загружал при открытии предыдущего окна "Открыть файл" в данной сессии эмулятора. А то, постоянно при каждом очередном открытии окна для загрузки файлов WAV или RKS надо в вкладке "тип файла" выбирать "все расширения", т.к иначе в списке файлов выводятся только *.RKE.
По АЛЬ+W в окне выводятся естественно WAV-файлы, а при вводе по I или по R всегда открывается окно только для файлов RKS или RKE. Если я постоянно "типом файла" выбираю WAV, эмулятор должен сообразить, что именно с такими файлами я сейчас и работаю. И если в ЭУРЕКЕ я уже ранее грузил файлы RKS, то зачем мне снова предлагать загрузку только RKE-файлов.
По-прежнему актульно пожелание выводить какой-то значок, чтобы знать хотя бы о том, что магнитофон крутится, а не запись давно закончилась, а компьютер завис ожидая байты. В общем-то понятно, что это появится токмо когдысь в эмульгатор будет введена "верхняя балка с кнопками", т.е когда будет работать мышь. Тогда не забудьте, сделать скромно, как в импортных эмуляторах, вывод двух цифр с номером трека и сектора дисковода (который сейчас читается) и счётчика времени, сколько секунд прошло с начала МГ-записи.
Далее в качестве флейма, опишу как можно реализовать в эмуляторе полноценный ввод многоблочных программ.
"Слеплять" многоблочные МГ программы в один файл при их хранении на винчестере уже в кодах неудобно. И многоблочные программы имеющие собственный загрузчик в эмулятор не вводятся, т.к эмулятор перехватывает не те точки. Может быть можно ввести новый формат для многоблочных программ. Обозвав их, например, BRKS или BRKE или как-то иначе. Такой файл д.быть не блоком кодов, а списком имён файлов. Например:
PACMAN.000
PACMAN.001 /hhhh, hh...
PACMAN.002
Здесь первый блок первичный загрузчик, использующий при вводе стандартный вход LDBYTE, а второй и третий блок вводятся уже с использованием собственного загрузчика и к LDBYTE не лезет, используя собственную подпрограмму ввода байта на адресе hhhh. Т.е при необходимости параметрами в строках в эмулятор можно передавать новые точки перехвата, оперативно модифицируя механизм ввода байтов из открытого файла.
Второй параметр в строке задаёт паузу или темп ввода, чтобы, например, можно было разглядеть заставку или инструкцию, что выводится на экран во время ввода данного блока. Иначе, т.к в эмуляторе ввод блоков сделан мгновенным, даже заставки не увидеть, не говоря уже трюках при вводе.
Это позволит многоблочные программы не только удобно транслировать ассемблером, но и хранить и вводить многоблочные программы и в кодах, а не только в виде много-мегабайтных WAV. Можно оставить и старый формат, но добавить в него доп.информацию, т.е основной формат RKS-файла сохраняется, а сразу после байтов контрольной суммы, вставляется какой-то флаг, например байты E7,E7,E7, а далее тот же список файлов многоблочной программы из которых надо продолжить чтение. Тогда каждый блок многоблочной программы будет на ленте в виде отдельного файла, который создаётся при трансляции ассемблером.
Байты флага (например E7,E7,E7) можно ввести и в тот "слипшийся" формат, что Вы применили в RKE, где в один файл слеплено несколько блоков разделенных своим пилотоном и синхробайтом (вот где нелогичность отказа от первого E6 стала фатальной). Тогда формат RKS и подобные сохранится, т.е совместимость формата останется.
Но если в конце блока, после байтов КС вставить байты флага (например E7,E7,E7), то далее можно вставить параметры загрузки этого блока. Например задать темп ввода байтов. Тогда блок многоблочной программы будет вводиться не мгновенно, а позволяя пользователю увидеть экран во время МГ-ввода. Да и вообще можно ввести параметр в конфиге задающий скорость ввода байтов с ленты.
Флага прерывания не выводится (и не меняется). При изучении чужой программы надо листать исходник быстро, а в окне дизассемблера сдвиг медленный, только курсором вниз, клавиша PgDown не работает. Для ускорения просмотра ассемблерного исходника (раз уж мышь не работает), возможно, удобно было бы подвести балку подсветки на строку с переходом (CALL, JMP, RST) и нажав какую-то клавишу переместить окно ассемблера туда.
многоблочные программы имеющие собственный загрузчик в эмулятор не вводятся
В мой вводятся.
многоблочные программы имеющие собственный загрузчик в эмулятор не вводятсяВ мой вводятся.
Да в EMU вводятся многоблочные программы в кодах даже с собственным загрузчиком.
Для этого надо в конфиге удалить строки задающие точки перехвата. Это позволяет грузить многоблочные программы в стандартном формате. При этом, похоже, эмулятор берёт байты из файла и эмулирует в реальном времени сигналы на МГ-входе.
Но с нестандартными форматами облом. Во-первых, их не получить в виде кодов. WAV-запись конвертировать в коды можно только, если вся запись идёт в двухфазке. А если там есть фрагменты в другой кодировке, то как?
Остаётся только загрузка в WAV. Теоретически WAV-записью можно загрузить любую МГ-защиту. Но практически не получилось. Точнее всё грузится, если защита не меняет формат записи. Но если первый блок грузит остальные блоки в ином формате, то не вводится.
Очередная версия 4.0.298 от 14.04.2018:
Windows-сборка:
http://emu80.org/v4beta/Emu80_40298.zip
Исходники:
https://github.com/vpyk/emu80v4
Изменения в версии 4.0.298:
Легенда:
+ Нововведение
* Изменение / улучшение
- Исправлен баг
! Известная проблема
- Исправлен звук в Микроше
- Устранены проблемы чтения с ленты в Микро-80
* Уточнен aspect ratio для всех платформ
* Режим реального aspect ratio сейчас работает также с альтернативным шрифтом
* Клавиша переключения языка Рус/Лат продублирована также на Ins
* Параметр frameRate разбит на два: maxFps и vsync
* Горячая клавиша скриншота заменена на Alt-H
* Wav-файлы из windows-дистрибутива эмулятора заменены на CSW
В основном занимался будущей qt-версией, поэтому никаких значительных нововведений в этом релизе нет.
(Сделал релиз, поскольку со времени предыдущего прошел уже месяц; текущие изменения, как всегда, - на github.)
Qt-версия также почти готова: выловлю пару неприятных багов и сделаю тестовую сборку.
Qt-версия также почти готова: выловлю пару неприятных багов и сделаю тестовую сборку.
Хотелось бы взглянуть на код для Qt-версии.
nzeemin, напиши мне в ЛС или на e-mail (адрес в шапке любого файла исходников).
На github исходники будут чуть позже.
Предлагаю потестировать windows-сборку qt-версии эмулятора:
http://emu80.org/v4beta/Emu80qt_40300.zip
Исходники надеюсь на днях разместить в репозитории.
Основные отличия от SDL/wx-версии:
- Более дружественный интерфейс (меню, панель инструментов, статусная строка, иконки...)
- Автосохранение настроек
- Уменьшенная задержка между картинкой и звуком
- Запоминание последних путей к файлам
- Мультиязычный интерфейс
- Работа в одном окне
Так же как SDL/wx-версия, это portable-версия программы, может быть распакована в любую папку,
доступную для записи.
Основной запускаемый файл Emu80qt.exe
Системные требования: минимум Windows XP, желательны сравнительно свежие драйвера для
видеокарты.
Кроме основного exe-файла в составе эмулятора для целей тестирования включены еще несколько
cmd-файлов:
emu80qt-opengl.cmd
emu80qt-soft.cmd
emu80qt-angle.cmd
emu80qt-dx9.cmd
emu80qt-dx11.cmd
emu80qt-warp.cmd
Они служат для запуска эмулятора с явным указанием используемого API видео. Можете
попробовать разные варианты, сравнив работу эмулятора в этих режимах (fps, работу vsync,
загрузку процессора). Отпишитесь, пожалуйста, какой вариант на вашей системе работает лучше
с указанием ОС, процессора и видеокарты. Также интересует, нормально ли работает вариант по
умолчанию (просто Emu80qt.exe) либо какой-то конкретный cmd работает лучше.
Если 4 последних режима не работают, попробуйте установить vc_redist.x86.exe
(Visual C++ Redistributable for Visual Studio 2015 x86). Также 4 последних режима
не будут работать на Windows XP
Также желательно потестировать разные варианты максимального значения fps и частоты
дискретизации звука.
Более подробной документации пока нет, надеюсь, что интерфейс эмулятора интуитивно понятен.
Хорошо знающих английский язык прошу переключить интерфейс на английский и посмотреть,
какие есть погрешности в английском интерфейсе (в том числе во всплывающих подсказках).
Настройки эмулятора сохраняются в файле _settings\emu80.ini
Если вдруг по какой-то причине при изменении настроек эмулятор перестанет запускаться,
удалите этот файл. Если удалить всю папку _settings, то настройки будут сохраняться в профиле
пользователя в %USERPROFILE%\AppData\Roaming\Emu80
у меня лучше всего работает в emu80qt-soft.cmd - 65 fps выдаёт.
в остальных режимах 59 - 60 fps.
всё работает, скриншоты сохраняются.
загрузка процессора везде около 7% (хотя у меня фоном запущены firefox и skype).
мой компьютер:
проц - intel core i5 7600k 3.80 Ghz
видеокарта - Asus Nvidia Gefoce GTX 1060 3Gb.
память - 32 gb.
ос - Windows 10 professional.
ZEman, больше fps - не значит лучше.
В данном случае это просто означает, что не срабатывает настройка vsync, ограничивающая fps кадровой частотой монитора (в твоем случае 60 Гц).
Спасибо за тестирование!
Pyk, а можно объяснить смысл этого vsync? Вот закончил ВГ75 кадр и что дальше?
uart, ВГ75 тут ни при чем, это имеет отношение к обновлению экрана на PC. Позволяет избежать tearing (как это по-русски?) и избыточных обновлений экрана.
А для gigascreen-программ, работающих на частоте, совпадающей с частотой монитора ПК, позволяет увидеть gigascreen-эффект (хотя и нестабильный из-за неточного совпадения частоты - см., например, заставку Lines от vinxru: если кадровая частота монитора 60 Гц, то эффект будет заметен).
Ну и внутренняя продолжительность фрейма эмуляции совпадает также с периодом обновления экрана. А ВГ75 работает асинхронно.
Pyk, вот это и не понятно. В играх, которые сами генерят картинку, 24P в телевизоре и в подобном - понятно. Либо генератор контента подстраивается под возможности изображения, либо наоборот.
А в эмуляторе что? ВГ75 даёт 50 кадров, на мониторе 60.
Или это просто настройка OpenGL и эмулятор ничего больше и не делает?
uart, постараюсь объяснить.
На платформах, которые не содержат ВГ75 и не имеют программного опроса КСИ, экран отрисовывается упрощенно, без привязки к реальной частоте кадров эмулируемого компьютера. В этом случае эмулятор работает как генератор контента - тут должно быть понятно.
Этот же механизм был оставлен и для ВГ75. В этом случае контент генерится дискретно, отдельными кадрами ВГ75, но тем не менее смысл некоторый в таком отображении есть: если частота монитора ПК и частота ВГ75 совпадут (реально это может быть 50 или 60 Гц), то это автоматически даст более плавную картинку и эффект gigascreen. И другое соображение: просто отрисовываем каждый кадр на мониторе ПК - чаще нет смысла, а реже приведет к более "дерганому" изображению... Более того, без vsync, чтобы увидеть полноценный gigascreen, частота должна быть как минимум в 2 раза больше частоты монитора.
А у тебя как сделано?
Pyk, да я как то и не задумывался об этом. Просто как ВГ75 заканчивает кадр вызываю вывод, в конце вывода вызывается glFlush, который по идее должен отработать во время смены кадров. Без ВГ75 тоже самое, но вызывается 50 раз в секунду.
Наверное стоит отвязаться от константы и посадить на callback от синхронизации монитора, хуже не будет.
Да и с подергиваниями в lines наверное можно побороться, хотя у меня и TV с реальным Апогеем дергается :)
callback от синхронизации монитора
А что, на Маке такое есть? :)
с подергиваниями в lines наверное можно побороться
Была тоже мысль сделать режим, в котором при близкой частоте эмулятор синхронизировался бы от монитора. Но это и звук затронет и еще много чего, так что решил пока не заморачиваться...
Была тоже мысль сделать режим, в котором при близкой частоте эмулятор синхронизировался бы от монитора. Но это и звук затронет и еще много чего, так что решил пока не заморачиваться...
Некоторым (например, мне) важен режим, когда кадровая эмулятора полностью синхронна с кадровой моника. И пусть при этом звук будет чуть быстрее или медленнее.
Но это, разумеется, актуально при эмуляции машинок, где софт активно использует one-frame эффекты. Например, Спектрум, или игровые консоли.
А что, на Маке такое есть?
Да. Сейчас попробовал засинхронизировал только вывод с ней. lines - получились идеальными, но если привязываться еще и к готовности кадра ВГ75, то чуть ли не хуже, чем раньше...
Что-то затишье... Для тех, кто пропустил: тестируем Qt-версию эмулятора:
http://zx-pk.ru/threads/27488-emu80-v-4.html?p=961498&viewfull=1#post961498
У всех все работает? Проблем нет? ;)
вроде ошибок не заметно, но если какие-то найду - сообщу обязательно.
заметил в эмуляторе "emu" от b2m ошибку в игре descent для радио 86 - не отображаются предметы замедляющие экран.
в emu80 работает как надо.
нашёл кое-что.
1 - игрушка FORMULA.RK - при запуске экран искажается свернувшись в узкую полосу.
2 - игра GLASS1.GAM - игра запускается, могу двигать фигуры влево и вправо, но эмулятор отказывается реагировать на клавиши F1, F2 (поворот фигуры).
обе игры для радио 86.
ZEman, спасибо за тестирование!
GLASS1.GAM - увы, не смог смоделировать ситуацию, фигуры вращаются и влево, и вправо
FORMULA.RK - а вот с этим все сложнее. Во-первых, эта игра для "Партнера", а не для РК. Но и на Партнере она зависает во время игры - посмотрю, видимо какие-то проблемы с эмуляцией ВГ75.
насчёт игры GLASS1.GAM - я уже понял, это оказывается из-за клавиатуры.
у меня клавиатура Asus cerberus, почему-то в некоторых играх или программах она блокирует функциональные клавиши F1 - F12 и что с этим делать я так и не понял.
на другой клавиатуре фигуры вертятся.
- - - Добавлено - - -
ещё 2 игры загадки.
1- marsiane - загружается, видно текст, просит нажать Y или N и всё висит.
2- press - смутила титульная картинка, так и должно быть сдвинуто ?
ZEman, PRESS - опять-таки для Партнера.
MARSIANE - не работает и в других эмуляторах, возможно, поврежденный файл? Впервые вижу эту игру, откуда он вообще?
скачивал откуда-то, не помню точно.
ещё 4 игрушки которые выдают ошибки в эмуляторе:
1- 2048 - не запускается. работает в emu от b2m
2- aliaz1 - не запускается, возможно для другого типа компьютера.
3- attack - запускается и работает, но экран сдвинут вправо.
4 - flower - эмулятор не запускает игру, экран искажается. работает в emu от b2m
Aliaz1 точно для Партнера, с остальными завтра попробую разобраться...
2048 - возьми исправленную версию от автора здесь:
http://zx-pk.ru/threads/10161-radio-86rk-igry.html?p=695856&viewfull=1#post695856
(первоначальная версия не учитывала возможности наличия в РК контроллера дисковода)
FLOWER - это какая-то неудачная попытка адаптации программы для Микроши на РК. Очень сомневаюсь, что она будет работать на реале, хотя и работает в некоторых эмуляторах. У кого есть возможность - потестируйте.
Оказалось проще переделать обратно для Микроши:
65182
ATTACK - странная какая-то игра, думаю, что и на реале она точно так же смещена. Не понял, чего хотели добиться авторы. А может быть, это просто результат некой "адаптации"...
а что насчёт FORMULA.RK и marsiane.rk ?
было бы хорошо еслиб сюда ещё b2m заглянул.
вот такая есть странность:
игра запущенна в режиме микроши на обоих эмуляторах.
- - - Добавлено - - -
есть пара пожеланий к эмулятору.
добавьте пожалуйста автоматическое скрывание указателя мышки (стрелочка) с экрана.
и если можно добавьте кнопку звук на меню, чтобы можно было отключать звук.
было бы хорошо еслиб сюда ещё b2m заглянул.
Да тут я, тут.
есть пара пожеланий к эмулятору.
добавьте пожалуйста автоматическое скрывание указателя мышки (стрелочка) с экрана.
Это уже есть - в меню View / Hide mouse pointer
b2m, да пра ваш эмулятор то я знаю :)
то были пожелания к emu80.
интересно ваше мнение по поводу этих вложений.
интересно ваше мнение по поводу этих вложений.
Да вроде Pyk уже всё сказал.
ZEman, FORMULA - похоже, что проблема именно в эмуляторе. Не разбирался еще, но надеюсь, что в следующих версиях исправлю.
MARSIANE - не смотрел еще толком.
Кнопка Mute и автоскрытие указателя мыши есть в планах, сделаю рано или поздно (скорее рано, чем поздно ;).
Разместил исходники Qt-версии на github (https://github.com/vpyk/emu80v4)
Работа под Windows и Linux протестирована, желающие могут попробовать собрать и под другие ОС ;)
MARSIANE - не работает и в других эмуляторах, возможно, поврежденный файл? Впервые вижу эту игру, откуда он вообще?
скачивал откуда-то, не помню точно.
ZEman, вы специально троллите разработчика(-ов) эмулятора(-ов) битыми игрушками? :v2_dizzy_facepalm:
---
marsiane.rk - возможно выдрана из пакета O1.GAM (ссылка (http://rk86.ru/catalog/index.html))
В составе пакета она работает.
Александр Дëмин тоже "шутник" - как играть в игрушку "ПРОГРАММАТОР ПЗУ" в онлайн-эмуляторе (http://rk86.ru/) ? :v2_crazy:
Ну, и стоит упомянуть, что в каталоге с его эмулятором много полубитых игрушек и/или игрушек не с Радио-86РК (много с Партнёра)
Эх, занялся бы кто-нибудь созданием единого репозитория всех известных игр (или не только игр) для РК и клонов...
А то такой зоопарк уже развелся... Причем самое неприятное, что многие даже не работают на реале: только в некоторых эмуляторах :(
Сам бы взялся, но времени на это жалко.
- - - Добавлено - - -
вот такая есть странность:
игра запущенна в режиме микроши на обоих эмуляторах.
Вопрос про "Ъ"? Ну да, знакогенератор Микроши слегка отличается от знакогенератора РК, в том числе и символом с кодом 7F. На РК это почти полностью закрашенный прямоугольник, а на Микроше - твердый знак.
- - - Добавлено - - -
В помощь тем, кто будет собирать из исходников Qt-версию под Linux: мне в Debian 9 пришлось дополнительно установить следующие пакеты:
qtbase5-dev
qtmultimedia5-dev
libqt5multimedia5-plugins (если не установить, не будет звука)
qt5-default (как обойтись без него, пока не разбирался)
Если не сложно, напишите, какие пакеты понадобилось установить в используемом вами дистрибутиве.
MARSIANE - не работает и в других эмуляторах, возможно, поврежденный файл? Впервые вижу эту игру, откуда он вообще?
скачивал откуда-то, не помню точно.
ZEman, вы специально...
:v2_dizzy_botan:
Вот, оттуда (http://home.onego.ru/~bav9/94.html) (kas17.zip прямая ссылка (http://lehavika.narod.ru/8/microsha/kas17.zip)) он взял marsiane.rk . Но...
1) кроме этой, все остальные программы там для Микроши...
2) имеется интересный файл zagr_rk86.rkm
Это загружаемый монитор 86РК для Микроши.
1. загружаем в Микрошу zagr_rk86
2. запускаем G5800
3. загружаем marsiane
4. запускаем G100
:v2_dizzy_punk: Резюме: файл не битый, но не для Радио-86РК ! ( гемплей оценивать не буду )
Вопрос про "Ъ"? Ну да, знакогенератор Микроши слегка отличается от знакогенератора РК, в том числе и символом с кодом 7F. На РК это почти полностью закрашенный прямоугольник, а на Микроше - твердый знак.
ага именно это и имел ввиду.
в одном полоски в другом "Ъ".
скачивал я файлы давно и из разных источников, извините если что-то напутал.
особенно когда в файле указано расширение rk без последней буквы указывающей на тип компьютера.
Попробовал компилировать под Windows в Qt Creator 4.6.0.
Конфигурация Desktop Qt 5.6.3 MinGW 32bit.
Собралось без ошибок и варнингов (и это отлично).
При запуске пустое окно со списком платформ -- тут было бы здорово писать сообщение о том что нужно положить/настроить emu80.conf, также стоит это написать в README.md в исходниках.
Затем, после того как я положил emu80.conf и запустил конфигурацию rk86 -- видимо программа не нашла папки rk86, программа работает в фоне, ошибок не показывает -- тут надо показать окно-алерт и завершиться или вернуться в окно выбора платформы.
При выборе команды Debug -- segmentation fault в DebugWindow::draw() строка 257.
Эта проблема решилась тем что подложил файл dbgfont.bin. Но тут нужно проверять что шрифт не загрузился.
Ну и отладчик лучше было переделать в графический конечно, выделить в отдельные окна просмотр памяти и всё остальное.
- - - Updated - - -
Несколько подозрительных мест в коде:
1. Debugger.cpp:130
memset(&m_states, sizeof(m_states), 1);
Похоже на то что перепутаны местами значение и количество байт.
2. Debugger.cpp:1035
if (useInitialNumber) {
m_inputCurPos = nDigits - 1;
m_inputCurValue = int2Hex(initialNumber, nDigits);
} else {
m_inputCurPos = 0;
m_inputCurValue = "";
}
m_inputCurPos = 0;
Странно что m_inputCurPos сначала вычисляется в зависимости от условия, а потом обнуляется.
3. ConfigReader.cpp
В функции ConfigReader::createObject() два раза одна проверка:
else if (typeName == "Ut88MemPageSelector")
obj = new Ut88MemPageSelector();
4. CpuZ80.cpp:377
cbits = (IXY ^ IXY ^ sum) >> 8;
IXY ^ IXY -- странно что одно и то же значение, по идее это даёт 0.
5. CpuZ80.cpp:841
case 0x08: /* EX AF,AF' */
af[af_sel] = AF;
af_sel = 1 - af_sel;
AF = af[af_sel];
break;
Что-то тут не так, AF это af[af_sel], то есть первая и третья строчки делают присваивание в себя.
И вот тут ниже подобный код, думаю та же проблема:
case 0xD9: /* EXX */
regs[regs_sel].bc = BC;
regs[regs_sel].de = DE;
regs[regs_sel].hl = HL;
regs_sel = 1 - regs_sel;
BC = regs[regs_sel].bc;
DE = regs[regs_sel].de;
HL = regs[regs_sel].hl;
break;
6. Eureka.cpp:70
m_useRomDisk = value && 0x80;
Логический AND между bool и константой -- непонятно что это значит.
nzeemin, спасибо за внимание к эмулятору!
Собралось без ошибок и варнингов (и это отлично).
Какой компилятор? clang? У меня gcc6 выдавал кажется один варнинг где-то - не успел избавиться...
memset(&m_states, sizeof(m_states), 1);
Ошибка, хотя и не очень критичная. Должно быть memset(&m_states, 0, sizeof(m_states));
Странно что m_inputCurPos сначала вычисляется в зависимости от условия, а потом обнуляется.
Пробовал разные варианты, забыл убрать лишнюю строку.
В функции ConfigReader::createObject() два раза одна проверка:
fixed
cbits = (IXY ^ IXY ^ sum) >> 8;
Так в оригинале у Frank D. Cringle (на его коде основан исходник), надо разбираться.
Что-то тут не так, AF это af[af_sel], то есть первая и третья строчки делают присваивание в себя.
Не, не, см. 2-ю строчку, индекс-то меняется!
И вот тут ниже подобный код, думаю та же проблема:
Аналогично
m_useRomDisk = value && 0x80;
Логический AND между bool и константой
Баг, но по стечению обстоятельств не проявивший себя. Довольно часто такие ошибки делаю - пишу логические операции вместо битовых и наоборот :(
Еще раз спасибо за тестирование, исправленные исходники в репозитории (кроме вопроса насчет IXY).
- - - Добавлено - - -
При запуске пустое окно со списком платформ -- тут было бы здорово писать сообщение о том что нужно положить/настроить emu80.conf
Согласен, сделаю.
также стоит это написать в README.md в исходниках
Там процедура установки описана, которая сама все положит куда нужно...
Pyk, компилятор -- g++ из MinGW.
Вообще было бы здорово и MSVC поддерживать, VS2013 или VS2015.
Не, не, см. 2-ю строчку, индекс-то меняется!
Ну давай раскроем шаблон AF и вот так запишем:
case 0x08: /* EX AF,AF' */
af[af_sel] = af[af_sel];
af_sel = 1 - af_sel;
af[af_sel] = af[af_sel];
break;
Получается что меняется только af_sel, может оно и правильно, но зачем тогда лишние присваивания.
- - - Updated - - -
7. Ut88.cpp:65, Micro80.cpp:69
memset два раза, странный размер m_bufSize, а выделяется до этого 512 * 512, совсем не факт что эти две величины равны.
8. CpuZ80.cpp:281
cbshflg1:
AF = (AF & ~0xff) | (temp & 0xa8) |
(((temp & 0xff) == 0) << 6) |
parity(temp) | !!cbits;
Тут что-то странное, два оператора логического NOT дают тип bool, с которым делают побитовую операцию -- в общем, тут надо копать.
Вообще было бы здорово и MSVC поддерживать, VS2013 или VS2015
Так MSVC поддерживается, хотя я нигде явно это не афишировал. По крайней мере, я периодически собираю в MSVC 2015 x32 и x64. Для того, чтобы официально объявить о поддержке, не хватает некоторых мелочей: есть проблемы с отображением статусной строки в последних версиях (что-то с интерпретацией unicode-констант в исходниках) и нечитаемые варнинги при сборке из-за русской локали установленного у меня MSVC. Думаю, что и с тем, и с другим вполне можно разобраться, но опять-таки - руки не дошли...
Ну давай раскроем шаблон AF и вот так запишем:
Так в данном контексте AF вроде бы переменная и ее нельзя так раскрыть!
Ut88.cpp:65, Micro80.cpp:69
memset два раза, странный размер m_bufSize, а выделяется до этого 512 * 512, совсем не факт что эти две величины равны
Да, похоже, что лишняя память выделяется, а в memset размер правильный. Завтра внимательно проверю.
Тут что-то странное, два оператора логического NOT дают тип bool, с которым делают побитовую операцию
Опять-таки не мой код, сильно подозреваю, что !!cbits эквивалентно чему-то вроде (cbsts == 0 ? 0 : 1);
> Так MSVC поддерживается
Тогда нужно файл проекта положить в исходники.
Я попробовал сделать проект VS2013 со сборкой через nmake, были проблемы с типами данных, такими как int32_t.
В целом мои рекомендации:
1. Использовать бьютифаер кода, который по заданным правилам форматирует код автоматически. Применять сразу после изменений. Я использую AStyle, ещё есть clang-format.
2. Настроить CI для автоматической сборки всех вариантов по коммиту, под всеми системами. На это нужно несколько часов, окупается это время быстро.
3. Сделать тестовый стенд -- консольное приложение на основе той же самой кодовой базы, выполняющее загрузку и запуск наиболее часто используемых программ, с контролем совпадения "скриншотов" в контрольных точках. Прогонять их после существенных изменений. Это даёт проверку на то что нет регрессии -- что не упало то что раньше уже работало.
4. Найти программные тесты (в частности, процессора), включить их в набор тестового стенда.
nzeemin, я имел в виду, что успешно собирается из Qt Creator и использованием компилятора командной строки MSVC. Собирать из IDE Visual Studio я никогда не пробовал. Согласен, что неплохо бы поэкспериментировать с этим - для многих будет актуально... Кстати, избавился от имевшейся проблемы с MSVC - см. последний коммит. Сейчас все работает после сборки с помощью MSVC, хотя при сборке и выдается большое количество варнингов.
За рекомендации спасибо: настройка CI есть в ближайших планах, остальное по возможности.
Думаю еще, что делать с установкой в linux-системах для тех, кто не хочет либо не может заниматься сборкой. Надо бы наверное сделать deb/rpm-пакеты. Как быть только с библиотеками Qt? Пакеты с актуальной версией Qt есть только в репозиториях самых последних версияй дистрибутивов. Наверное статически слинковать? Нет опыта в подобных вещах?
nzeemin, я имел в виду, что успешно собирается из Qt Creator и использованием компилятора командной строки MSVC.
Под Qt Creator в конфигурации Desktop Qt 5.6.3 MSVC2013 32bit -- НЕ собирается, ошибки на типы, такие как uint32_t.
Под Qt Creator в конфигурации Desktop Qt 5.6.3 MSVC2015 32bit -- собралось, 87 варнингов, работает.
- - - Updated - - -
В Qt версии команда сохранения скриншота предлагает только .BMP, но Qt позволяет много других форматов, хотя бы .PNG стоит добавить.
- - - Updated - - -
Нет опыта в подобных вещах?
Нет.
nzeemin, да, все так. От варнингов MSVC 2015 постараюсь со временем избавиться, не уверен, есть ли смысл добиваться сборки с помощью MSVC 2013?
Кстати, MSCV 2013 и 2015 одновременно установлены? Qt без проблем их различает? У меня не получилось так просто завести одновременно MSVC 2015 и 2010: Qt не видит установленный MSVC 2010 (Express).
Насчет форматов сохранения в курсе, но отложил пока этот вопрос, поскольку требуется небольшой рефакторинг в SDL-части, чтобы не городить условную компиляцию... В общем, в ближайших планах...
- - - Добавлено - - -
P.S. Да, в конфигурации MSVC2015 64bit также собирается и работает.
Под macOS в Qt Creator 4.6.0 собралось, конфигурация Desktop Qt 5.9.4 clang 64bit, 3 warnings.
Особенность в том что конфиг и прочее нужно положить в "папку" /Users/nzeemin/MyProjects/emu80v4/src/Emu80qt.app/Contents/MacOS, то есть по сути внутрь "приложения".
Радио-86РК запустился, отладчик тоже, кстати это очень забавно видеть такой терминал на маке.
- - - Updated - - -
/Users/nzeemin/MyProjects/emu80v4/src/Debugger.cpp:24: In file included from Debugger.cpp:24:
/Users/nzeemin/MyProjects/emu80v4/src/Debugger.h:99: warning: 'init' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
void init() {EmuWindow::init();};
^
/Users/nzeemin/MyProjects/emu80v4/src/EmuWindow.h:68: overridden virtual function is here
void init() override;
^
/Users/nzeemin/MyProjects/emu80v4/src/Platform.cpp:34: In file included from Platform.cpp:34:
/Users/nzeemin/MyProjects/emu80v4/src/Debugger.h:99: warning: 'init' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
void init() {EmuWindow::init();};
^
/Users/nzeemin/MyProjects/emu80v4/src/EmuWindow.h:68: overridden virtual function is here
void init() override;
^
/Users/nzeemin/MyProjects/emu80v4/src/qt/qtPaintWidget.cpp:180: warning: unused parameter 'event' [-Wunused-parameter]
void PaintWidget::mouseMoveEvent(QMouseEvent *event)
^
Скриншот: https://yadi.sk/i/pphicPgx3VhJCz
nzeemin, спасибо за хорошие новости.
Куда на маке обычно нужно класть конфиг и прочее?
На unix-like это обычно usr/share или usr/local/share, но насчет MacOS совершенно не уверен...
Кстати, если из "прочего" убрать папку "_settings", то текущие настройки должны сохраняться в $HOME/.config/Emu80, при этом директория установки может быть закрыта для записи.
А насчет отладчика - сам не знаю, почему мне захотелось сделать такой old-school-отладчик ;) Может быть, когда-нибудь переделаю... Ну или как минимум управление мышкой добавлю...
Pyk, я по маку мало что знаю, почти не пишу там, проще нагуглить.
Про отладчик -- по опыту скажу что хороший отладчик это очень важно, в свой я вложил очень много, и это окупается.
И ещё один вариант с отладчиком -- сделать стаб для gdb, и отлаживать снаружи через gdb или любой другой отладчик, работающий по этому протоколу.
больше месяца затишье, продолжение следует ?
больше месяца затишье ... и последний коммит 2 недели назад. Некогда было заниматься эмулятором, сорри. Надеюсь всё-таки доделать кое-что начатое и сделать в этом месяце ещё один релиз. А вообще летом мало времени на активную разработку, так что до осени больших изменений не обещаю...
спасибо за информацию.
просто видел коммиты в которых написано что добавлен scanline, скрытие мыши и громкости - думал что скоро новый билд будет.
ZEman, выложил пока обновленный exe-файл для qt-версии из этого поста: http://zx-pk.ru/threads/27488-emu80-v-4.html?p=961498&viewfull=1#post961498 :
http://emu80.org/v4beta/Emu80qt_40301_exe.zip
Прошу потестировать новые фичи:
- автоскрытие указателя мыши
- кнопка "Mute"
- режим сканлиний
Более-менее тщательно не тестировал, так что проблемы вполне возможны. Полноценный релиз сделаю позже.
Вечером, с работы приду - посмотрю.
Спасибо за новую сборку.
всё прекрасно работает, ошибок не нашёл.
Очередная версия 4.0.302 от 07.07.2018:
Portable Qt-версия, windows-сборка (рекомендуется):
http://emu80.org/v4beta/Emu80qt_40302.zip
Portable SWL/wx-версия, windows-сборка:
http://emu80.org/v4beta/Emu80_40302.zip
Исходники:
https://github.com/vpyk/emu80v4
Изменения в версии 4.0.302:
Легенда:
+ Нововведение
* Изменение / улучшение
- Исправлен баг
! Известная проблема
+ Две сборки: новая Qt-версия и старая SQL/wx
+ Режим имитации линий растра
+ Сохраниние в файл и загрузка из файла RAM-диска (Орион, Специалист-MX, ЮТ-88)
+ Поддержка контроллера НГМД в Микроше
* Новый пользовательский интерфейс (qt-версия)
* Автоматическое скрытие указателя мыши (qt-версия)
* Автосохранение настроек (qt-версия)
* Запоминание последних путей к файлам (qt-версия)
* Мультиязычный интерфейс (qt-версия)
* Работа в одном окне (qt-версия)
- Исправлена ошибка при редактировании флагов в отладчике
- Мелкие исправления
Замечания по Qt-версии:
Системные требования: минимум Windows XP, желательны сравнительно свежие драйвера для
видеокарты.
Кроме основного exe-файла в составе эмулятора для целей тестирования включены еще несколько
cmd-файлов:
emu80qt-opengl.cmd
emu80qt-soft.cmd
emu80qt-angle.cmd
emu80qt-dx9.cmd
emu80qt-dx11.cmd
emu80qt-warp.cmd
Они служат для запуска эмулятора с явным указанием используемого API видео. Можете
попробовать разные варианты, сравнив работу эмулятора в этих режимах (fps, работу vsync,
загрузку процессора).
Настройки эмулятора сохраняются в файле _settings\emu80.ini
Если вдруг по какой-то причине при изменении настроек эмулятор перестанет запускаться,
удалите этот файл. Если удалить всю папку _settings, то настройки будут сохраняться в профиле
пользователя в %USERPROFILE%\AppData\Roaming\Emu80
MacBuster
07.07.2018, 08:37
Отлично, спасибо! Нет ли настройки изменения масштаба окна отладчика? На высоких разрешениях мелковато выходит.
Pyk, Вот сразу и вопросы:
Как добавить в конфигурацию ЮТ88 РОМ диск или СД диск?
Не нашел как выгрузить и загрузить образ РАМ диска.
Формат записи для РАМ диска?
Нет ли настройки изменения масштаба окна отладчика?
Небольшая хитрость: в окне отладчика работают те же самые горячие клавиши для управления параметрами окна. Так что можно менять масштаб с помощью Alt-1, Alt-2, Alt-3 либо нажать Alt-0 и менять размер мышкой.
Как добавить в конфигурацию ЮТ88 РОМ диск или СД диск?
Могу сделать конфиг, только как должен быть подключен РОМ-диск? Как и в РК-86, через ВВ55? По каким адресам он должен располагаться?
Поддержки SD пока нет ни в каком виде, увы. :( Сделаю со временем, в планах-то есть...
Не нашел как выгрузить и загрузить образ РАМ диска.
Формат записи для РАМ диска?
Меню "Файл" - "Сохранить RAM-диск", "Загрузить RAM-диск" (только в Qt-версии, для SDL/wx нет горячих клавиш).
Формат - тупо подряд все страницы в файл.
Pyk, ROM диск через ВВ55 по адресам F8-FB.
Нету таких пунктов. Скачивал сегодня. версия 4.0.302/qt.
Нашел. В домашнюю папку я переписывал только исполняемые файлы.
Заменил все на новые и появились пункты меню.
L Juriy, сорри, накосячил немного, не все файлы обновил в архиве. Увы, пока нет возможности исправить, замените пока папки с платформами аналогичными из архива SDL-версии.
Завтра постараюсь обновить архив.
Исправленный архив с Qt-версией:
http://emu80.org/v4beta/Emu80qt_40302.zip
MacBuster
08.07.2018, 14:51
Не планируете «Русич» реализовать? Вроде это почти 1:1 «Специалист», только на i8085.
MacBuster, до сих пор не планировал. Если честно, даже не следил за обсуждением "Русича". Надо посмотреть, что он из себя представляет, есть где-то обобщенная информация по нему?
MacBuster
09.07.2018, 21:03
Надо посмотреть, что он из себя представляет, есть где-то обобщенная информация по нему?
К сожалению, есть только обсуждение в теме раздела Разное (http://zx-pk.ru/threads/13476-quot-rusich-quot.html), оторванной от Специалиста. Что очень странно.
MacBuster
17.08.2018, 01:35
Случайно ткнул в пункт "Шрифт", после чего во всех меню надписи пропали (пустые строки с пиктограммами) и эмулятор больше не работает, сразу после запуска падает.
MacBuster, не удалось смоделировать. Попробуй убрать файл emu80.ini из директории _settings для сброса настроек. Если поможет, высылай проблемный файл emu80.ini мне - посмотрю, что не так.
MacBuster
17.08.2018, 21:26
Если поможет, высылай проблемный файл emu80.ini мне - посмотрю, что не так.
Помогло.
MacBuster, спасибо, выловил баг в последней сборке, который проявлялся на ЮТ-88 и Микро-80.
В следующей версии будет исправлено, в репозитории сейчас уже исправленные исходники.
Накопилось довольно много изменений, поэтому новый релиз.
Версия 4.0.307 от 19.11.2018:
Portable Qt-версия, windows-сборка (рекомендуется):
http://emu80.org/v4beta/Emu80qt_40307.zip
Portable SWL/wx-версия, windows-сборка:
http://emu80.org/v4beta/Emu80_40307.zip
Исходники:
https://github.com/vpyk/emu80v4
Изменения в версии 4.0.307:
Легенда:
+ Нововведение
* Изменение / улучшение
- Исправлен баг
! Известная проблема
+ Добавлена поддержка RK-SD-контроллера для РК-86 и Апогея (пока только в режиме read only)
+ Новая опция: "показывать только видимую область", скрывает область гашения луча на ТВ (пока только для ВГ75)
+ Новая опция: "широкоэкранный режим (16:9)", рассчитывает aspect ratio для ТВ формата 16:9
+ Опция копирования графического экрана в буфер обмена (Alt-Ins) (qt)
+ Добавлено отображение размеров экрана в строке состояния (qt)
+ Добавлен скрипт AssociateFiles.cmd для ассоциирования эмулятора с файлами программ, добавлены иконки типов файлов
(ассоциирование производится для текущего пользователя, отменить ассоциации - DeassociateFiles.cmd) (qt)
+ Добавлен скрипт RestoreSettings.cmd для восстановления настроек эмулятора по умолчанию в случае проблем (qt)
- Исправлена загрузка некоторых типов файлов из командной строки
- Устранено падение эмулятора в режиме альтернативного шрифта для ЮТ-88 и Микро-80
- Не работала комбинация клавиш Alt-S в полноэкранном режиме (qt)
- Исправлено сохранение скриншотов в wx/SDL-версии
- Другие мелкие исправления
Протестируйте новый режим "показывать только видимую область", переключается по Alt-V или кнопкой на тулбаре.
Сделана попытка скрыть неотображаемые поля экрана в соответствиями с параметрами развертки и ТВ-стандартами.
Можно также включить режим учета Aspect ratio (Alt-R) и сглаживания (Alt-S), чтобы получить картинку, максимально
соответствующую изображению на экране ТВ,
Путь к папке SD-карты пока жестко указывается в конфиге. Все имена файлов на SD-карте должны быть в верхнем регистре.
что-то не хочет у меня запускаться новый QT-билд эмулятора - выдаётся ошибка.
прошлая 4.0.302qt работает без проблем, обычная sdl тоже работает как надо а qt307 не хочет.
windows 10 x64 professional.
http://i106.fastpic.ru/thumb/2018/1119/0b/_7801d1346526b1baca7d27cd2af7760b.jpeg (http://fastpic.ru/view/106/2018/1119/_7801d1346526b1baca7d27cd2af7760b.jpg.html)
Точно, потерялся один файлик в архиве :(
Обновил, перекачай архив заново.
большой спасиба.
теперь всё отлично работает :)
Прошел месяц, пора сделать новый релиз.
Версия 4.0.313 от 20.12.2018:
Portable Qt-версия, windows-сборка (рекомендуется):
http://emu80.org/v4beta/Emu80qt_40313.zip
Portable SDL/wx-версия, windows-сборка:
http://emu80.org/v4beta/Emu80_40313.zip
Исходники:
https://github.com/vpyk/emu80v4
Изменения в версии 4.0.313:
Легенда:
+ Нововведение
* Изменение / улучшение
- Исправлен баг
! Известная проблема
+ Поддержка ПК 8000 (Сура, Хобби, Веста)
+ Опция отображения реального бордюра на Орионе, Специалисте и Эврике
+ Скорость эмуляции в случае несоответствия нормальной сейчас отображается в строке состояния (Qt)
* Поддержка вложенных if(n)def в конфигурационных файлах
* Сообщения об ошибках сейчас выводятся в консоль (Qt)
* Переработана и исправлена раскладка клавиатуры, мог насажать новых багов ;)
* Добавлена опция условной компиляции с оптимизацией под RPi (thanks to svofski)
- Исправлено сохранение .opt-файлов (wx)
- Исправлены мелкие ошибки в эмуляции контроллера НГМД и контроллера SD-карты
- Устранены утечки памяти
- Добавлен отсутствующий файл ПЗУ контроллера НГМД для Микроши
Замечания по эмуляции ПК8000 ("Сура", "Хобби", "Веста"):
- В эмуляторе используется средняя тактовая частота 1,8 МГц, вейты не реализованы.
- Встроенный загрузчик поддерживает двоичные файлы (в том числе многие с автозапуском) и токенизированные файлы бейсика.
- Джойстик на данный момент не поддерживается.
- Чтобы увидеть бордюр, нажмите Alt-V либо соответствующую кнопку на тулбаре
P.S. Большая подборка софта для ПК8000 здесь:
https://zx-pk.ru/threads/8378-pk8000-soft-staryj-i-novyj.html?p=891630&viewfull=1#post891630
MacBuster
20.12.2018, 23:14
Можно по древней предновогодней традиции пожелать странного? Во-первых добавить кнопки для быстрого вызова отладчика, во-вторых - поправить ширину строк в справке к отладчику (у меня они все переносятся из-за чего не понять что к чему), в третьих - добавить в отладчик возможность переключить синтаксис с интеловского на зайлоговский (для Z80).
MacBuster, не совсем понял, вроде бы все это давно сделано:
Вызов отладчика - Alt-D (либо Win-D)
Отдельная справка к отладчику как таковая отсутствует, краткая подсказка только в нижней строке окна отладчика
Синтаксис меняется по кнопке Z
P.S. С эмулятором emu от b2m не путаете?
MacBuster
21.12.2018, 10:56
P.S. С эмулятором emu от b2m не путаете?
Елки-палки, в самом деле - обновил одно, а запустил другое! Прошу прощения. Я ещё удивился откуда взялась версия с Qt...
Pyk, такой вопрос.
запускаю QT-версию эмулятора, выбрал конфиг ПК8000, загружаю игрушку DRILL.cas (driller tanks - адаптация от ivagor).
а звука в игре нет, вообще.
загружаю игрушку DRILL.cas (driller tanks - адаптация от ivagor).
а звука в игре нет, вообще.
В этой игрушке звук через AY по версии Micka, штатно у ПК8000 AY нет, и, как я понимаю, у Pyk он не поддерживается.
вот блин, там такая клёвая музычка. :(
тогда через emu буду и дальше pk8000 использовать.
Да, все верно, AY пока не поддерживается, но есть уже в ближайших планах :)
Багфикс-релиз, версия 4.0.314 от 21.12.2018:
Portable Qt-версия, windows-сборка (рекомендуется):
http://emu80.org/v4beta/Emu80qt_40314.zip
Portable SWL/wx-версия, windows-сборка:
http://emu80.org/v4beta/Emu80_40314.zip
Исходники:
https://github.com/vpyk/emu80v4
Изменения в версии 4.0.314:
Легенда:
+ Нововведение
* Изменение / улучшение
- Исправлен баг
! Известная проблема
+ ПК8000: добавлена поддержка джойстика
- Исправлена работа клавиш дополнительной цифровой клавиатуры (Qt)
- ПК8000: исправлена загрузка файлов в wx/SDL-версии
- ПК8000: исправления в работе прерываний и портов 92 и 93
Управление джойстиком назначено на клавиши со стрелками, 1-я и 2-я клавиши - на пробел и Enter соответственно.
Pyk, есть ли в планах сделать вывод изображения привязанным к лучу (особенно интересует ПК8000)?
ivagor, привязку к лучу я делал с той или иной точностью исходя из реально существующего софта и возможностей эмулируемых компьютеров. Так, для систем на базе ВГ75 сделана привязка к лучу с точностью до строки символов; для, скажем, Специалиста, на котором в принципе невозможно программно отслеживать состояние луча - не сделана вообще. Для ПК8000 я пока ограничился покадровой синхронизацией: то, что отрисовано между двумя прерываниями, гарантированно будет отображено в одном кадре. Необходимости в более точной привязке я не увидел, так как возможности привязаться к строчной синхронизации нет, а вейты не реализованы. Но при необходимости сделать привязку к лучу в ПК8000 с точностью хотя бы до строки растра мне не очень сложно.
Насчет задержек ПК8000 у меня появилась идея. Точно для всех случаев без потактовой или хотя бы поцикловой эмуляции 8080 не получится. Но можно сделать точно для выполнения кода из внутреннего озу в режимах SCR1/2, что собственно больше всего и нужно, т.к. игрушки и гипотетические демки расчитаны именно на эти режимы. По хорошему надо сделать набор таблиц растактовок - 1) без вейтов; и несколько для ПК8000: 2) для выполнения из ПЗУ, 3) SCR0, 4) SCR1/2. Переключать таблицы в зависимости от места исполнения и режима. Неточности будут двух сортов:
1) Когда например команда из пзу читает/пишет озу или наоборот. Тут нужна поцикловая точность эмуляции проца.
2) В scr0 точно даже при исполении только из озу не получится, т.к. в строке два участка с разными задержками. Можно взять среднее по больнице.
А я сам хотел попробовать просто заменить растактовки на вариант для SCR1/2. Скачал, откомпилировал и уже потом посмотрел исходник и увидел, что экран ПК8000 обновляется одномоментно.
ivagor, вообще интересно, можно попробовать. Вейты я делать планирую, обдумывал этот вопрос, но к реализации пока не приступал (сделано только для ПДП). С потактовой/поцикловой синхронизацией все хуже и сложнее - в ближайшее время вряд ли доберусь. Хотя сделать разное количество тактов задержки при обращении к ОЗУ/ПЗУ в разных циклах одной команды может оказаться и реально, надо будет повнимательнее изучить этот вопрос. Напомни, пожалуйста, где посмотреть итоговый результат твоего исследования скорости выполнения на ПК8000?
Что же касается привязки к ходу луча - попробую сделать. После очередного релиза, который планирую выпустить на этой неделе. Так как близятся выходные, думаю, что не должен затянуть из-за отсутствия времени.
1) Растактовки (https://zx-pk.ru/threads/9431-pk8000-bystrodejstvie-arkhitektury-issledovanie.html?p=581691&viewfull=1#post581691)
2) Еще желательно поправить число строк. Судя по тестам их не 312, а 308 (да, странная цифра). Причем не могу дать ссылку на один пост, в котором все доказательства. Есть 1 (https://zx-pk.ru/threads/9431-pk8000-bystrodejstvie-arkhitektury-issledovanie.html?p=253899&viewfull=1#post253899), 2 (https://zx-pk.ru/threads/9431-pk8000-bystrodejstvie-arkhitektury-issledovanie.html?p=254662&viewfull=1#post254662), 3 (https://zx-pk.ru/threads/9431-pk8000-bystrodejstvie-arkhitektury-issledovanie.html?p=259356&viewfull=1#post259356).
3) Мелкий момент - в SCR0 реал показывает (https://zx-pk.ru/threads/9431-pk8000-bystrodejstvie-arkhitektury-issledovanie.html?p=580513&viewfull=1#post580513) 241 точку, не 240.
ivagor, растактовки поизучаю. Кстати, сделать в эмуляторе разные вейты для бордюра и активной части мне на первый взгляд кажется вполне возможным.
Те посты со скринами тестов я, конечно, видел, но сами тесты уже недоступны, поэтому понять, как интерпретировать скрин выполнения теста, скажем, testborder или tb115, было проблематично. Так что поверю на слово ;)
Вообще, если бы у меня был реал, я бы, пожалуй, смог выяснить все нюансы насчет видеосигнала. Можно, например, подать на ТВ-тюнер видеосигнал от ПК8000, а синхронизацию - от другого источника (спасибо DDp за идею), чтобы точно увидеть все синхроимпульсы, бордюры и разобраться с тем, сколько там на самом деле точек в режиме 0 - 241 или 242. Интересно, какое оборудование у DemonId7, может ли он сделать что-то подобное?
сами тесты уже недоступны, поэтому понять, как интерпретировать скрин выполнения теста, скажем, testborder или tb115, было проблематично.
TB115 и 117 я перевыложу. Для их соответствия реалу нужно: тактовая 2.5+точные вейты для SCR1/2, поцикловая точность отображения, точный момент прерывания. Если это все будет реализовано - будет очень круто, но думаю это дело неблизкого будущего.
Версия 4.0.316 от 27.12.2018:
Portable Qt-версия, windows-сборка (рекомендуется):
http://emu80.org/v4beta/Emu80qt_40316.zip
Portable SWL/wx-версия, windows-сборка:
http://emu80.org/v4beta/Emu80_40316.zip
Исходники:
https://github.com/vpyk/emu80v4
Изменения в версии 4.0.316:
Легенда:
+ Нововведение
* Изменение / улучшение
- Исправлен баг
! Известная проблема
+ Поддержка звукового синтезатора AY-3-3910 (на данный момент в ПК8000 по схеме Mick)
+ Опция для джойстика: совмещать с клавишами клавиатуры либо назначать джойстик
на отдельные клавиши доп. цифровой клавиатуры (пока для ПК8000)
+ Отображение флага IFF для ВМ80 в отладчике
+ Отображение состояния паузы в строке состояния
+ В Windows-дистрибудив Qt-версии добавлены cmd-файлы для принудительного запуска эмулятора
в режимах OpenGL, DirectX 9, Direct 11
* ПК8000: привязка к лучу с точностью до скан-линии, исправлено отображение бордюра
- ПК8000: Исправления в работе прерываний
- Устранено наблюдавшееся иногда залипание клавиш после сброса (обычно в Qt-версии)
- Исправления в звуковой подсистеме, снижение загрузки процессора
Сделал обещанный AY, сейчас можно поиграть в Driller Tanks с музыкой :)
Неплохо бы сравнить звучание с реалом. Делал собственную реализацию, не использовал готовый код,
так что вполне могут быть ошибки в его эмуляции.
В режиме совмещения клавиш джойстик совмещен с клавишами управления курсором, пробелом
и Enter. В раздельном режиме джойстик управляется стрелками на доп. цифровой клавиатуре,
а также клавишами 5 и 0 на ней же.
Привязка к лучу в настоящее время, пока не реализованы вейты, достаточно бесполезна,
это скорее задел на будущее. Единственная программа, где можно увидеть какой-то
эффект от этого - демка NYAN, в которой раскрашивается бордюр в процессе загрузки
(_stuff\pk8000\nyan.csw)
Вернул в Windows-дистрибутив 3 cmd-файла для принудительного запуска эмулятора в режимах OpenGL,
DirectX 9 и 11. Обычно оптимальный драйвер выбирается автоматически, но на конкретной вашей
системе может лучше работать какой-то другой - смотрите по загрузке процессора, FPS и т.д.
Pyk, спасибо за AY.
правда хочу заметить, что до звучания как в эмуляторе emu не дотягивает.
сравнивал на той-же игрушке для пк8000 driller tanks.
некоторые звуки как-бы проглатываются не проигрываются правильно.
и ещё у меня почему-то сложилось такое впечатление что мелодия играет медленней чем в emu.
AY в конфиге PK8000+нгмд можно послушать с использованием проигрывателя (https://zx-pk.ru/threads/8378-pk8000-soft-staryj-i-novyj.html?p=938887&viewfull=1#post938887) DemonId7.
А я адаптировал проигрыватель rmp от вектора, он лежал на сайте Tim0xи, можно в принципе перевыложить. В бурильщике как раз rmp играет.
Вспомнил, что Mick тоже адаптировал какой-то проигрыватель AY, думаю он сам подскажет ссылку.
ZEman, эта музыка есть на диске rmp.fdd для Вектора, кажется под именем "E_TYPE", можно еще с другими эмуляторами сравнить...
- - - Добавлено - - -
ivagor, ух ты, я даже не знал, что RMP Player был портирован на ПК8000. Неплохо бы посмотреть.
Много всего с тем сайтом исчезло из доступа...
ух ты, я даже не знал, что RMP Player был портирован на ПК8000.
Не, ну все не настолько хорошо :) Я адаптировал только собственно проигрывающую часть, без интерфейса. С интерфейсом вроде только DemonId7 сделал. У меня там можно собирать casы из проигрывателя + произвольной rmp. Плюс такого подхода - не нужен нгмд, достаточно голого ПК8000+AY Micka.
ivagor, ага, вижу только ссылки на RMPLinker, сам архив найти не удалось.
На зеркале сайта Tim0x'и этого архива нет :(
только ссылки на RMPLinker, сам архив найти не удалось.
Еще интереснее то, что у себя я тоже не смог найти архив с финальным RMPLinkerом. Есть некая версия, без readme, без примера, надо смотреть, что там.
Надо клич бросить, наверняка многие скачали, хотя и не все наверное пробовали...
- - - Добавлено - - -
Образ диска с проигрывателем STCPLAY от DemonId7 здесь:
https://zx-pk.ru/threads/8378-pk8000-soft-staryj-i-novyj.html?p=939159&viewfull=1#post939159
Надо клич бросить
Оно RMPLinker.rar (http://bashkiria-2m.narod.ru/files/prog/RMPLinker.rar) ?
Это он (или оно), спасибо!
CityAceE
29.01.2019, 10:50
@Pyk, обнаружил, что моя программа (https://zx-pk.ru/threads/30021-konvertor-zx-kartinok-dlya-spetsialista.html), запущенная под последней версией эмулятора Emu80, перестаёт реагировать на клавиатуру после того, как через эмулятор был сохранён скриншот (Alt + H).
CityAceE, смоделировал, посмотрю вечером.
Похоже, что проявляется только в qt-версии, кстати.
@Pyk, обнаружил возможно фокус просто с нужного объекта сбивается,
пробовали кликнуть по экрану эмулятора мышкой - возможно фокус на какой-то там минюшке застревает,
у некоторых оконных программ встречал подобное.
CityAceE
29.01.2019, 11:57
возможно фокус просто с нужного объекта сбивается,
Конечно, это было первое, о чём я подумал. Но это не тот случай.
Я уже посмотрел исходники и увидел причину бага.
Но пересобрать смогу только вечером.
CityAceE, хотфикс для версии 4.0.316 (только exe):
http://emu80.org/v4beta/Emu80qt_403161_hotfix.7z
Патч также уже в master на github.
Изменений накопилось уже довольно много, на днях планирую сделать новый релиз.
Версия 4.0.323 от 01.02.2019:
Portable Qt-версия, windows-сборка (рекомендуется):
http://emu80.org/v4beta/Emu80qt_40323.zip
Portable SDL/wx-версия, windows-сборка:
http://emu80.org/v4beta/Emu80_40323.zip
Исходники:
https://github.com/vpyk/emu80v4
Изменения в версии 4.0.323:
Легенда:
+ Нововведение
* Изменение / улучшение
- Исправлен баг
! Известная проблема
+ Вейты на ПК8000 (с ограничениями), реальная скорость работы в большинстве случаев
+ Привязка к лучу и бордюрные эффекты на ПК8000
+ Опции отладчика, отвечающие за регистр, в котором отображается дизассемблированный текст 8080 и Z80
* В отладчике изменены действия по умолчанию клавиш F5 (Run) и F9 (Set breakpoint).
Добавлена опция для возврата старого назначения этих клавиш.
+ Базовая поддержка ATA-интерфейса, поддержка CF-карты в ПК8000.
* Дополнительные проверки на наличие корректных конфигурационных файлов.
Устранено (недеюсь) появление запущенных процессов эмулятора без окон в случае проблем с конфигурационными файлами.
* Поддержка сброса ВГ93 на ПК8000
* Изменения в системе перехватов процессора, небольшое повышение производительности
* Улучшен алгоритм распознавания необходимости закрытия файла образа ленты
* СMD-файлы для запуска Qt-версии в режимах OpenGl и DirectX сейчас не ждут завершения программы. Оставлен только один файл для режима DirectX (автовыбор).
- Исправления в работе команд HLT и EI.
- Исправлено отображение информации о режиме дисплея на ПК8000
- Исправления в работа клавиатуры на Специалисте (в некоторых случаях было возможно отсутствие реакции на клавиши)
В комплект эмулятора включен образ CF-карты для PK8000 на 2 Mb, содержащий большую часть системных и игровых
программ в кодах для этого ПК (программ на бейсике в образе нет).
Pyk, предполагается ли компиляция эмулятора для Raspberry Pi?
Вопрос очень насущный. Давно слежу за проектом (с 3 версии).
Явного указания на такую реализацию не вижу, только намеки.
Думаю что 4 версия уже готова к переносу.
Полгода назад попытался перенести на малинку Qt версию.
Не получилось. Уперся в реализацию OpenGL на малинке, имеющую отличия от PC версии.
kovdry, ситуация такая:
SDL/wx-версию пробовал запускать на малинке, она даже запустилась, но дико тормозила из-за ущербности ее десктопа.
Так что Qt-версию для RPi даже не пробовал собирать.
svofski сообщал, что он успешно запустил Lite-версию в режиме командной строки с использованием драйвера rpi SDL.
Ключи компиляции были аналогичны использованным для сборки vector06sdl:
https://github.com/svofski/vector06sdl/blob/master/README.md
Там же есть и рекомендации по сборке самой SDL.
Именно для этого варианта нужно раскомментировать #define LESS_64BIT_DIVS в файле Piе8253.h (вообще, подход к реализации таймера я выбрал не совсем удачный - наверное со временем перепишу, и необходимость в условной компиляции отпадет).
К сожалению, я сам так и не удосужился проверить работу этого варианта на RPi, поэтому никаких рекомендаций по компиляции под эту платформу и не привел.
Я не уверен, что в ближайшее время смогу вернуться к этой теме, так что можете попробовать запустить на малинке, используя приведенную в этом сообщении информацию, и поделиться результатами.
Уточню, что версия, которую я собирал и которая описана в инструкции к vector06sdl, получается для драйвера "rpi", не для оконной системы.
Обнаружил вдруг, что сегодня у Emu80 своеобразный юбилей: ровно 3 года назад, 15 февраля 2016 года, я написал первую строчку кода 4-й версии эмулятора :)
Ввиду неожиданности этого открытия не получилось подготовить к этой дате что-нибудь новенькое. Так что предлагаю просто высказаться: чего вам не хватает в эмуляторе?
Какие новые платформы стоит реализовать, поддержку каких устройств добавить, какие фичи добавить?
Какие новые платформы стоит реализовать
Вектор и клоны, ПК8002.
векторы, корветы, агаты, бк - думаю это очень серьёзные компы и их эмуляцией занимаются другие люди.
а вот например океан 240 вполне может подойти для emu80 - он похож на пк8000.
серьёзные компы и их эмуляцией занимаются другие люди
Ну почему же только другие люди? "Вектор" как раз будет. Быстро только не обещаю: свободного времени пока маловато...
68108
Pyk, а смысл ?
лучший эмулятор вектора VV версия 6.94, там уже можно сказать всё сделано.
если хотите что-то реально новое добавить в эмулятор тогда попробовали бы сделать эмуляцию агата (агат-эмулятор существующий сделан через...хм...одну точку).
или эмуляцию двк (двк эмулятор уже 2 года тишины).
(агат-эмулятор существующий сделан через...хм...одну точку).
или эмуляцию двк (двк эмулятор уже 2 года тишины).
Речь про emu b2ma или про другие эмуляторы?
нет, про агат эмулятор http://agatemulator.sourceforge.net/
ну а двк эмулятор здесь https://zx-pk.ru/threads/18351-emulyator-dvk.html
просто я считаю что итак есть уже 2 великолепных эмулятора вектора - b2m emu и vv.
ещё один просто пустая трата времени автора.
Надеюсь Pyk извинит немного оффтопа или потом можно потереть.
Эмуляцию двк совсем не пробовал, а эмуляцию агата пробовал в emu, запускал несколько игрушек, вроде все было нормально. Какие есть проблемы с эмуляцией агата?
он очень неудобный, для каждого диска нужно создавать новый конфиг компьютера.
некоторые игры не работают, например lode runner в котором не действует управление.
эмулятор двк очень хороший, но что-то его совсем забросили :(
LODE RUNNER в emu запустить не смог, но это в основном говорит о том, что я не в теме, может потом еще попробую. Заканчиваю оффтопить.
DemonId7
28.03.2019, 18:01
В целом впечатления хорошие, по скорости действительно похоже на оригинал (ПК8000). Но есть и вопросы.
1) Не понял как подогнать раскладку клавиатуры под себя. К примеру, на что отображаются такие клавиши, как "АЛФ", "ГРФ", "ИЗ", "ВЗ", "СЕЛ", "СТРН"?
2) В отладчике не помешала бы справка по клавишам.
3) В отладчике почему-то правый край обрезан и никак не отрегулируешь:
68601
DemonId7, спасибо за тестирование, отвечаю по-порядку:
1. Увы, пока возможности подогнать раскладку "Под себя" нет. Зато есть Smart-раскладка, при которой регистр и язык переключаются средствами ОС.
Соответствия клавиш следующие:
АЛФ = Ins
ГРФ = F10
СЕЛ = F11
СТРН = PgUp
ИЗ, ВЗ - предполагалось, что это должны быть / и * на доп. клавиатуре, но похоже, что это работает только в sdl-версии, но не в qt. Посмотрю, в чем дело.
Кстати, подсказка по клавишам практически готова, будет в следующей версии эмулятора.
2,3. Краткая справка по отладчику есть, но она снизу, а низ тоже обрезан :( Это я уже исправил, в след. сборке должно быть все нормально. Опять-таки, в SDL-версии с этим все в порядке.
Вообще, новая версия почти готова, планировал сделать релиз на этой неделе, но всю неделю буду занят, так что вероятнее все-таки уже в начале следующей. Нового за 2 месяца накопилось довольно много.
- - - Добавлено - - -
DemonId7, вообще, если есть предложения, как лучше сделать раскладку клавиатуры, то я с удовольствием их рассмотрю.
Я же никогда не работал на реальном ПК8000, так что могу плохо представлять себе для чего и насколько часто используются те или иные клавиши.
Ну а со временем может быть и редактор раскладки появится...
DemonId7
29.03.2019, 10:44
Спасибо, значит ждем следующего релиза. Не зря у меня еще с прошлого десятилетия неприязнь к Qt :) Хотя, ради справедливости, к SDL тоже :D
Что касается клавиш. На цифровой оставить как есть (только верхний ряд смещен вправо из-за num-lock'a), ведь это интуитивно напоминает доп. клавиатуру оригинала.
"ИЗ" и "ВЗ" - это по сути "DELETE" и "INSERT", их бы неплохо продублировать на Ins и Del на дополнительной клавиатуре.
"ПРФ" - это по сути ESC, на ней пусть и остается.
"СТРН" аналогов не имеет, по ней происходит очистка экрана. Пусть остается на "-" цифровой клавиатуры.
Клавиши, которые сейчас на "7" и "9" цифровой клавиатуры, немного напоминают "PageUp" и "PageDown", и было бы неплохо иметь их дубль на PgUp и PgDn дополнительной клавиатуры.
Клавиши, которые сейчас на "1" и "3" цифровой клавиатуры, напоминают "Home" и "End", тоже можно продублировать на доп. клавиатуру, хотя это по желанию.
"УПР" - это управляющая, то есть "Control", следовательно так и просится на левый Ctrl.
"АЛФ" - по идее должна быть рядом с "УПР", то есть левый Alt.
"ГРФ", "СЕЛ" - наверное правые Alt и Ctrl.
"O" (кружочек рядом с "АЛФ") фиксирует (переключает) нажатия "АЛФ", "ГРФ" (напоминает Caps Lock). Тут моя клавиатура закончилась, оставляю эту проблему автору :D Я бы завел на Caps Lock. Или на кнопку "Window", либо кнопку контекстного меню, благо они уже давно на всех клавиатурах прописались.
Только тут одна проблема - как минимум Alt уже используется эмулятором для горячих клавиш.
====================================
Кстати, похоже есть таки проблема с эмулятором. Вчера попробовал запустить игрушку FIRE. Обратил внимание, что после отжатия кнопки пожарник продолжает движение. Небольшая такая инертность. В эмуле товарища b2m такого не наблюдается. Вечером еще на реале посмотрю, но мне кажется там такой проблемы не было, несмотря на то, что уже к 3-му уровню начинались заметные тормоза игрушки. В общем, вечером отпишусь, может мне вчера привидилось.
DemonId7, спасибо за советы по клавиатуре, постараюсь учесть.
Дело еще в том, что на ПК8000 намного больше клавиш, чем на других поддерживаемых компьютерах.
Если, например, для других ПК традиционно СТРН отображается на PgUp, а АЛФ - на Ins, то здесь эти клавиши оказались востребованными сами по себе.
В принципе, ничего страшного тут нет, нужно просто переопределить для ПК8000 назначения, общие для других платформ.
А вот с клавишей End все сложнее, так как в эмуляторе на него повешена функция ускорения.
С кнопкой ФИКС также непростой вопрос. Qt не позволяет кроссплатформенными средствами разделить левые и правые Alt, Ctrl и Shift, так что вариант использовать одну половину из пар этих клавиш проблематичен. Клавиша Windows используется как альтернатива Alt для горячих клавиш из-за того, что многие Alt-комбинации зарезервированы в оконных менеджерах Linux и недоступны для использования. Остается клавиша контекстного меню, может быть на нее и повешу, а пока ФИКС на F8.
Инертности в Fire не заметил. Или скорее минимальная инертность есть, но вроде бы и в emu проявляется, мне показалось, что это особенность самой игры.
DemonId7
29.03.2019, 21:11
Жаль, не очень удобно когда клавиши разбросаны по всяким Fx, нужно запоминать где какая. Надо подумать. Если не изменяет память, то в винде можно хуки на клавиатуру ставить, где и подменять коды клавиш на нужные (например при нажатии правого Alt выдать код F11). Правда это касалось GDI, а вот как поведёт себя DirectInput - память ничего не говорит.
По Fire показалось. Просто на первых уровнях пожарник бегает настолько шустро, что малейшее нажатие нередко приводит к двум "нажатиям". В момент отпускания клавиши уже произошло опознание второго нажатия и пожарник продолжает движение еще на позицию. Отсюда и кажущаяся инертность. На ПК8000 клавиша наверное отжимается быстрее и двойных нажатий поменьше. Но после тренировки и в эмуляторе приловчился не хуже чем на реале.
Пока сделал так:
- Исправил ИЗ и ВЗ на / и * на доп. клавиатуре, продублировал на Ins и Del.
- АЛФ перенес с Ins на PgUp.
- СТРН перенес с PgUp на - на доп. клавиатуре
- ФИКС продублировал на Menu.
В принципе, если пользоваться smart-раскладкой, то АЛФ и ФИКС не особо нужны, так как язык переключаются системными средствами, а также можно пользоваться клавишей CapsLock.
Правки уже в репозитории, релиз будет на днях.
Версия 4.0.333 от 03.04.2019:
Portable Qt-версия, windows-сборка (рекомендуется):
http://emu80.org/v4beta/Emu80qt_40333.zip
Portable SWL/wx-версия, windows-сборка:
http://emu80.org/v4beta/Emu80_40333.zip
Исходники:
https://github.com/vpyk/emu80v4
Изменения в версии 4.0.333:
Легенда:
+ Нововведение
* Изменение / улучшение
- Исправлен баг
! Известная проблема
+ поддержка ПК "Вектор-06Ц"
+ краткая справка по основным платформам
+ отображение в отладчике информации о тактах процессора, состоянии контроллера НГМД,
позиции луча (пока только для "Вектора")
+ горячая клавиша и кнопка на панели инструментов для загрузки RAM-диска
+ поддержка мыши в отладчике
+ обновление экрана в реальном времени в отладчике (пока только для "Вектора")
* уточнения в эмуляции процессоров 8080 и Z80
* уточнено время исполнения некоторых команд Z80
* улучшения в эмуляции контроллера НГМД FDC 1793
* изменения в раскладке клавиатуры на ПК8000
* небольшие изменения управления с клавиатуры в отладчике: "Run" работает из любой секции, можно использовать Enter на доп. цифровой клавиатуре
- исправлены проблемы в эмуляции AY-3-3910, звучание сейчас должно соответствовать оригиналу
- устранено падение при попытке чтения некорректного WAV-файла
- исправлена ошибка в эмуляции клавиатуры на "Специалисте", в некоторых случаях эмулятор мог не реагировать на нажатия клавиш
- исправлена ошибка: невозможно было изменить тип клавиатуры "Специалиста-MX" в настройках (Qt)
- исправлен файл emu80qt-dx.cmd, предназначенный для запуска emu80 в режиме DirectX
- устранено падение эмулятора при попытке изменения размера окна отладчика (Qt)
- устранено падение при выходе из эмулятора с активными точками останова
- устранены проблемы в работе эмулятора, собранного с помощью MSVC
Для "Вектора" на данный момент поддерживаются: квазидиск 256К с модификацией Баркаря, НГМД, AY; пока нет HDD, RTC, ROM-диска, Covox.
В отладчике работает управление мышью:
- одиночный щелчок для переключения секций
- двойной щелчок на значении для его изменения (в том числе на адресе)
- колесо прокрутки для прокрутки и перемещения по спискам
Изменений довольно много, так что вполне мог и сломать что-нибудь ;)
Багфикс-релиз. Версия 4.0.334 от 04.04.2019:
Portable Qt-версия, windows-сборка (рекомендуется):
http://emu80.org/v4beta/Emu80qt_40334.zip
Portable SWL/wx-версия, windows-сборка:
http://emu80.org/v4beta/Emu80_40334.zip
Исходники:
https://github.com/vpyk/emu80v4
Изменения в версии 4.0.334:
Легенда:
+ Нововведение
* Изменение / улучшение
- Исправлен баг
! Известная проблема
- исправлена ошибка: в отладчике невозможно было установить точку останова с помощью F9/F5.
* F4 (Here) в отладчике сейчас сбрасывает счетчик тактов процессора
предполагается ли компиляция эмулятора для Raspberry Pi?
Дошли руки немного поэкспериментировать с Emu80 на Raspberri Pi.
Увы, даже с рекомендациями svofski и минимальными настройками эмулятор притормаживает, пользоваться некомфортно.
Затрудняюсь сказать, почему у svofski все было хорошо - возможно, другая версия SDL, либо с тех пор появился новый "тяжелый" код в самом эмуляторе, либо еще что-то...
В общем, не могу пока дать готовые рекомендации по запуску на "малинке", буду дополнительно исследовать этот вопрос.
Pyk, ты ведь не под оконный интерфейс собираешь? Мои успехи были с драйвером SDL rpi, без оконной системы.
svofski, да, именно с драйвером SDL rpi. SDL перед компиляцией конфигурировал в соответствии с твоим readme к vector06sdl.
(Под оконный интерфейс я тоже пробовал - там тормоза вообще дикие.)
Чуть позже попробую еще твой форк собрать и запустить.
- - - Добавлено - - -
Чуть позже попробую еще твой форк собрать и запустить.
Попробовал. Тормоза еще сильнее, чем на текущей версии (в принципе, это не удивительно - все-таки я кое-что за последний год оптимизировал ;).
Завтра продолжу эксперименты, сегодня уже нет времени.
Интересно, что бы еще такое могло мешать. BTW, я тогда проверял только Апогей. Может быть ты гоняешь на чем-то, что и у меня бы шустро не работало? К сожалению вот прямо сейчас у меня рпя не в форме, так что быстро проверить не могу.
svofski, похоже, что причина найдена - блок питания.
Обратил внимание, что при запущенном эмуляторе стал иногда появляться индикатор просадки напряжения, раньше никогда его не видел.
Сообразил, что в этот раз подключил монитор не напрямую, а через адаптер HDMI-VGA. Подключил напрямую через HDMI к другому монитору - индикатор пропал, текущая версия на минимальных настройках наконец пошла без тормозов, годичной давности по-прежнему притормаживает. Видимо, БП работает на пределе, от дополнительной нагрузки в виде адаптера ему совсем поплохело. И видимо даже без появляющейся "молнии" малинка все равно работает не на максимальной частоте. Надо будет попробовать отладочный вывод частоты процессора сделать, ну и буду искать более надежный БП...
P.S. Проверяю тоже на апогеевских демках.
Pyk, я подключал через композит с отключенным HDMI. Думаю, что это может быть существенно. Что же до блока питания, то он сам по себе скорее всего не так и плох, плохи обычно бывают провода. Из личного опыта проще добиться стабильной работы с коротким проводком 10-15см, чем пытаться найти взаправдашне годный длинный.
svofski, кабелей несколько штук перепробовал, в том числе и хорошо зарекомендовавших себя в других применениях под приличным током, - разницы не заметил. А БП у меня не родной - китайский какой-то на 2,5 A. Полноценно заменить пока не чем, кабелей короче 60 см тоже не нашел. Пробовал с другим БП на 2 A - эффекта нет...
Пожелание - добавить холодный рестарт (с очисткой озу), как минимум в конфиг ПК8000.
Pyk, насколько я помню, сами рписты рекомендуют использовать свой блок питания, который дает 5.2В. (Вот почему они сами себе не могли порекомендовать сделать человеческий разъем питания я никак не могу понять. Бубубу бубубу бубубу!) В любом случае недопит у меня тоже мыргает иногда и с emu80, и в v06x - кстати, попробуй его, что получится? - ты теперь в Векторе тоже не чужой ;) - и ничего, если это не постоянная проблема, то все работает нормально.
ivagor, ты имеешь в виду сделать отдельную кнопку и отдельную горячую клавишу?
Сейчас для холодного рестарта можно нажать Alt-F9, Enter, то есть повторно выбрать текущую платформу.
svofski, взял трехамперный БП и короткий кабель - индикация просадок напряжения исчезла, но все равно тормозит, хотя и меньше... Через композит попробовать пока не удалось - почему-то отсутствует синхронизация, изменение режимов sdtv_mode не помогает...
Сейчас для холодного рестарта можно нажать Alt-F9, Enter, то есть повторно выбрать текущую платформу.
Не сообразил, тогда конечно ничего добавлять не надо.
DemonId7
08.04.2019, 07:59
Проблема с отладчиком все ещё актуальна. При его вызове окно все ещё обрезает правый и нижний края. Их конечно можно расширить мышкой, но при следующем входе (по F4, по бряку, или просто выйти и зайти снова) края опять окажутся обрезанными.
DemonId7, честно говоря, очень странно. Пришли, пожалуйста, полноразмерный скриншот (чтобы окно было целиком и можно было посчитать, на сколько пикселей обрезано; предыдущий скрин был нещадно пожат движком форума), а также напиши сведения об ОС (версия windows, service pack, установлены ли обновления). Можно в ЛС или на e-mail.
Кто-нибудь вообще с такой проблемой еще сталкивался?
У меня с окном отладчика нормально, а вот подсчет тактов все же не нравится. Было бы гораздо удобнее, если по F4 и бряку сначала выводилось накопленное значение тактов и только потом счетчик обнулялся.
Было бы гораздо удобнее, если по F4 и бряку сначала выводилось накопленное значение тактов и только потом счетчик обнулялся
Хорошая идея, согласен. Не додумался сразу так сделать.
Поскольку кое-какие баги начинают всплывать, скорее всего в ближайшей перспективе еще один багфикс будет. Постараюсь в нем это учесть.
Версия 4.0.340 от 20.05.2019:
Portable Qt-версия, windows-сборка (рекомендуется):
http://emu80.org/v4beta/Emu80qt_40340.zip
Portable SWL/wx-версия, windows-сборка:
http://emu80.org/v4beta/Emu80_40340.zip
Исходники:
https://github.com/vpyk/emu80v4
Изменения в версии 4.0.340:
Легенда:
+ Нововведение
* Изменение / улучшение
- Исправлен баг
! Известная проблема
+ Возможность настройки символьной страницы для отображения текстовой информации в отладчике
+ Возможность задания в настройках произвольного целевого формата экрана наряду с 4:3 и 16:9
* При обнулении счетчика тактов в отладчике сейчас также отображается его текущее значение (обнуление происходит по точке останова либо F4 (Here))
* Оптимизировано расположение окон отладчика на экране после запуска (Qt)
* Скорректирована палитра цветов ПК8000, немного понижена яркость темных цветов
- Устранена проблема с размером окна отладчика в Windows XP (Qt)
- Исправлена несовместимость с Qt версии более 5.10 или 5.11 под Linux/GTK: отображалось пустое окно выбора файла
- Исправлена ошибка: ESC переставал работать после его использования для выхода из меню (Qt)
- Устранены проблемы в работе прерываний на Векторе. "Filer" сейчас работает.
- Исправлена работа клавиш ПК8000 "ВЗ" и "ИЗ" на клавишах "/" и "*" дополнительной цифровой клавиатуры (SDL)
- Исправлены другие небольшие ошибки
NEO SPECTRUMAN
20.05.2019, 22:57
этот долбанный Qt5 добрался и сюда...
а Portable SWL/wx-версия, windows-сборка
функционально сильно отличается от Qt версии?
кроме все на горячих клавишах
- - - Добавлено - - -
- Устранена проблема с размером окна отладчика в Windows XP (Qt)
о_О
тоесть оно должно работать?
ладно попробуем еще как то запустить
NEO SPECTRUMAN, практически не отличается. Некоторые не самые важные настройки правда отсутствуют в интерфейсе, их придется менять непосредственно в конфиге. И еще кажется так и не назначил горячую клавишу на сохранение RAM-диска (на загрузку есть). Также в этой версии чуть больше лаг звука. Я эту ветку не забрасываю и поддерживаю наравне с Qt.
А Qt5 до эмулятора добрался (эли эмулятор до Qt5) еще больше года назад... Qt может нравиться или нет, но сравнимых по функциональности альтернатив среди кроссплатформенных фреймворков ему практически нет...
NEO SPECTRUMAN
20.05.2019, 23:19
Qt может нравиться или нет
последние версии уже не работают в XP
как он можот нравится после этого?
- - - Добавлено - - -
qt5.4? точно работал
5.7 уже все
последние рабочие
Qt 5.5
Qt 5.6 (LTS) - так же подписана как последняя для висты
NEO SPECTRUMAN, Emu80 требует Qt не ниже 5.6. То есть на XP работать будет. Выкладываемые сборки собираю с Qt 5.7: хотя для него и не заявлена работа под XP, на самом деле Emu80 работает под XP без нареканий. Единственное ограничение - только в режиме OpenGL, то есть видеокарта должна быть как минимум не очень древняя и слабая (DirectX на XP не поддерживается из-за ограничений используемой в Qt сторонней библиотеки Angle от Google).
А что, какие-то версии Emu80/qt не работали под XP?
NEO SPECTRUMAN
21.05.2019, 00:33
А что, какие-то версии Emu80/qt не работали под XP?
ну дык как они могут работать если уже идут с 5.7 в комплекте
- - - Добавлено - - -
5.6 щас у себя ищу...
за одно похерил у себя другую прогу на qt
которая уже перешла на 5.11
...
ну дык как они могут работать если уже идут с 5.7 в комплекте
А какую ошибку выдает?
Просто я проверял под XP разные версии и на разных системах - все работало (видимо, в той части, которая требуется Emu80, Qt 5.7 достаточно XP).
Но могу для теста и с 5.6 собрать (просто подменить dll от другой версии Qt не выйдет).
NEO SPECTRUMAN
21.05.2019, 00:46
Нашел проблему на своей стороне
Венда не вышла из 16 бит на точку
при смене схемы питания
- - - Добавлено - - -
щас попробую подсунуть эти библиотеки другим софтварям
ок значет пока не заюзаны новые фичесы
5.7 тоже может работать
если подсунуть emu80 qt по новей
то уже традиционная ошибка
про отсутвстие cancelioex в кернел32 который добавили не то в висте не то в 7-ке
DemonId7
21.05.2019, 06:58
А нельзя в отладчик ввести новую команду, по которой программа могла бы проверять состояние флага разрешения прерываний? Уже пару недель не могу найти ошибку, из-за которой в программе, время от времени, самопроизвольно запрещаются прерывания. Весь проект встал.
Ну или возможность постановки бряка на этот флаг, но там нужно как то отсеивать изменения по rst 7, а то задолбает всплытиями.
DemonId7, придумаем что-нибудь. Проще всего прямо в код добавить проверку и сделать специальную сборку, могу попробовать вечером.
Для очистки совести спрошу только: проблема воспроизводится на реале? У меня в эмуляторе была ошибка, которая как раз проявлялась в том, что в редких случаях самопроизвольно запрещались прерывания. Вроде бы я ее исправлял уже, но мало ли...
- - - Добавлено - - -
Еще один вариант проверки, кстати: поменять процессор в конфиге на z80 и проверять командой ld a, i.
DemonId7
21.05.2019, 20:35
Проблема есть и на реале, "зависание" в любой момент времени, непредсказуемое и непонятное (точнее бесконечный опрос буфера клавиатуры, который без прерываний никогда не заполнится). Если в отладчике ручками добавить в буфер клавиатуры что-то, то программа без проблем работает дальше и даже могут опять появиться прерывания. То есть, это не порча кода, не джампинг в неизвестность, а "просто" исчезают прерывания, скорее всего где-то в недрах BIOS "Суры". Понятно, что это как-то связано с моим кодом, но вот как - пока даже представить не могу. Чертовщина какая-то :)
Еще один вариант проверки, кстати: поменять процессор в конфиге на z80 и проверять командой ld a, i.Просто заменить процессор не получится, там нужно BIOS патчить. Кажется товарищ ivagor этим когда-то занимался. Меня это не устраивает, поскольку проблемы скорее всего как раз во взаимодействии с биосом "Суры" - в моем коде нет ни одного байта с кодом 0xF3.
Извините, вклинюсь, раз речь зашла о совместимости пзу ПК8000 с z80. Раньше патчил основное пзу, но его вряд ли кто будет менять, а в этом году переделал под внешнее. Только такой вариант не совместим с другими внешними пзу, например досами, что весьма печально. Собирался подумать на эту тему, но так и не собрался, выкладываю как есть. Кроме совместимости с z80 здесь поправлена маленькая математическая неточность/особенность. В комплекте конфиг для emu, но думаю легко переделать и под emu80 по аналогии.
DemonId7, см. почту.
Слепил наспех отображение в отладчике адреса последней
выполненной команды DI и состояние стека при этом.
На случай, если еще кому-то вдруг понадобится:
http://emu80.org/v4beta/Emu80qt_40341_test.exe.zip
в моем коде нет ни одного байта с кодом 0xF3.
Чисто теоретически можно представить вариант запрета прерываний и без DI. Вход в обработчик по прерыванию и нештатный выход из него без EI.
DemonId7
22.05.2019, 22:00
Слепил наспех отображение в отладчике адреса последней
выполненной команды DI и состояние стека при этом.
Указывает на подпрограмму чтения состояния жесткого диска из ПЗУ контроллера, в стеке тоже сплошь адреса из того же ПЗУ (видимо команды на чтение сектора). Бряк на этот адрес результата не дает, прерывания исчезают, а всплытия по бряку нет.
Остается вариант аварийного завершения RST 7. Интересно, чего же я такого слепил, что даже прошитый в ПЗУ обработчик прерывания вылетает :)
Чисто теоретически можно представить вариант запрета прерываний и без DI. Вход в обработчик по прерыванию и нештатный выход из него без EI.Да, только это и остается.
DemonId7, завтра попробую сотворить что-нибудь для отлавливания такого случая...
Например можно запоминать адрес, где произошел последний запрет прерывания и "тип" запрета - DI или вход в обработчик. Когда зависли - смотрим, кто запретил.
Ну да. А если это был вход в обработчик, то на входе запоминать адрес стека, ждать выход и в случае выхода с запрещенными прерываниями вываливаться в отладчик.
DemonId7
23.05.2019, 10:38
Нашёл ошибку. В модуле CP/M BIOS обработчик rst 7. Я его практически полностью срисовал с оригинального МДОС (что на дискетах). Там на входе проверяется последний байт, откуда был вызван обработчик, и если он равен 0xFF, то происходил выход из обработчика, без вызова обработчика в ПЗУ и без разрешения прерываний. Когда приходило прерывание на команде mvi L,0xFF, то и исчезали прерывания.
Никогда не знал для чего эта проверка. Теперь знаю - чтобы мозги пудрить :D
Походу будет очередной релиз CP/M.
Pyk, спасибо за помощь.
проверяется последний байт, откуда был вызван обработчик, и если он равен 0xFF, то происходил выход из обработчика, без вызова обработчика в ПЗУ и без разрешения прерываний
Похоже на "пропуск" команды rst 7, но на следующий вопрос - "а зачем?" нужно разбираться (в чем вряд ли есть смысл).
Скорее всего, кем-то задумывалась проверка на явный вызов обработчика по команде RST 7. Но зачем это было нужно и почему автор был уверен, что такая проверка будет всегда корректно работать - не понимаю...
- - - Добавлено - - -
Упс, ivagor меня опередил ;)
DemonId7
24.05.2019, 09:12
В оригинальном коде видны следы другого кода, в частности попытка останавливать мотор дисковода по таймеру. Рискну предположить, что и этот непонятный код из той же серии.
Еще раз спасибо, без этого отладчика я бы ни в жизь не нашел источник проблемы :) Теперь можно заканчивать софтину, осталась немного.
Возможно это традиция для разработчиков ПК8000. В основном пзу в обработчике прерывания тоже есть фрагмент-рудимент (c 2600h) который не используется (по крайней мере я не нашел, кто и как мог бы его вызвать).
Pyk, кстати на заметку -- недавно столкнулся с этим, вдруг пригодится для RPi. Запускал v06x на андроиде. И вот на одном телефоне все хорошо, а на другом, более древнем, при включенном аудио-фильтре хрюкает и тормозит. Фильтр мудреный, 100 отводов, с simd инструкциями завернутыми в страшный темплейтный код, кто его знает.. Убираю вычислительную часть фильтра, ничего не улучшается. И тут я заметил, что смещение входного буфера, в который семплы складываются по 1.5e6 штук в секунду, увеличивается выражением вроде i = (i + 1) % sizeof buffer.
На современных x86/amd64 этого вообще не заметишь. А на ARM %, в зависимости от тыщи параметров, может компилироваться в библиотечный вызов даже с -O3. И тогда один целочисленный % 1500000 раз в секунду легко перевешивает умножитель-сумматор с плавающей точкой с сотней отводов, но 48000 раз в секунду. Переделал на обычную проверку на переполнение и все стало быстро, а вычислительная часть фильтра выполняется практически незаметно.
svofski, спасибо за полезные наблюдения, буду иметь в виду. Я правильно понял, что там было даже не 64-битное деление?
А с телефонами на android/ARM тоже недавно немного поэкспериментировал - тормозит со звуком, скорее всего по аналогичной причине. Считаю, что нормальная работа на ARM важна, обязательно вернусь к этому вопросу, в том числе попробую выловить % в критичных участках. Но это все скорее уже ближе к осени, летом руки нечасто доходят до эмулятора... А вообще emu80 сам по себе более тормозной из-за того, что ради унифицированности зачастую приходилось жертвовать эффективностью...
Pyk, нет, обычный unsigned int. Транслируется в __aeabi_uidivmod, это фишка арма. Собственно можно скомпилировать с -save-temps и пошукать по .s файлам.
Исходники (GPL v.3):
https://github.com/vpyk/emu80v4Жаль, что нет сборки под MacOS :(
Жаль, что нет сборки под MacOS
Действительно...
Кто поможет сделать сборку? :)
Ну, раз желающих помочь нет, пришлось самому ;)
Протестируйте, плиз, сборку под MacOS, у кого есть возможность:
http://emu80.org/v4beta/Emu80qt_40344_macos_test.zip
У меня в виртуальной машине иногда падает при запуске или переключении компьютеров, пока не разбирался, в чем дело. Неплохо бы проверить на реальном маке.
Буду рад также любым замечаниям по работе эмулятора и по построению сборки.
Протестируйте, плиз, сборку под MacOS, у кого есть возможностьЗапускается. Переключается в "Специалист" нормально. Только не могу ничего загрузить (он хочет файлы .cpu, а у меня есть только .rom).
Manwe, rom - это скорее всего Файлы Вектора, а не Специалиста. С другой стороны и cpu - тоже не Специалист, а Специалист-MX...
а у меня есть только .rom
Поздравляю. Правда rom - это образ ПЗУ компьютера, а не программа для загрузки.
rom - это образ ПЗУ компьютера, а не программа для загрузки.
Для вектора это формат программы для загрузки.
Pyk, зовем , зовем вас !)
https://zx-pk.ru/threads/29363-vozrozhdenie-quot-erika-quot.html?p=1053248&viewfull=1#post1053248
CityAceE
02.05.2020, 10:44
Крайне удивлён, что в эмуляторе emu80 я не могу сделать снэпшот игры. В эмуляторах ZX Spectrum и консолей это сделать можно, почему здесь нельзя? Хочу аналог .sna для ПК Специалист! ;)
CityAceE, увы, снэпшоты - это одна из давно запланированных, но до сих пор не реализованных фич :(
Сделаю, но, боюсь, не очень быстро, со свободным временем стало хуже. Сейчас надо бы хотя бы текущие изменения влить, да новый релиз выпустить наконец, а там можно и про снэпшоты подумать...
Чуваки =)
вы круты =)
впервые воспользовался эмулятором и вообще недавно узнал, что был такой РК-86,
в реальности достался мне Апогей =) хочется с ним немного поиграться)
Собственно такой, вопрос, как эмулируется звук Апогея в эмуляторе?
Он в самом Апогее трех канальный, каждый канал эмулируется независимо =)
хочется подробностей, или скажите где почитать =)
ps: собственно вопрос возник, так как при эмуляции обнаружил, при расчетных 440Гц, эмулируется 410.
а потом, при увеличении частоты в два раза получаю не 880, а другую частоту, но опять же может быть
ошибка в моих расчетах, хочется понять.
В эмуляторе эмулируется остановка процессора на обновление памяти? а как часто?
И торможение проца на ПДП не должно же сказываться на таймере (реального железа?).
спасибо! )
при расчетных 440Гц, эмулируется 410
Делитель 1.(7)e6/440=4040 ?
а потом, при увеличении частоты в два раза получаю не 880, а другую частоту
Делитель 1.(7)e6/880=2020 ?
Режим 3?
- - - Добавлено - - -
Проверил в Emu80qt_40344_test - вышеприведенные делители дают именно те частоты, которые должны. Делитель 4040 - частота 440, делитель 2020 - частота 880. Проверял в Audacity.
- - - Добавлено - - -
Проверял в двоичном режиме, а вот BCD оказывается не поддерживается (при установке бита BCD делители продолжают считаться двоичными).
- - - Добавлено - - -
Это уже оффтоп, но для полноты картины - ВИ53 с BCD поддерживается в emu (http://bashkiria-2m.narod.ru/index/files/0-11)
попробовал вот такой код, захватил звук в самом компе с 44100
LXI H,0EC03h
MVI M, 36h
MVI M, 76h
MVI M, 0B6h
LXI H, 0EC00h
MVI M, 0C8h
MVI M, 00Fh
LXI H, 0EC01h
MVI M, 0E4h
MVI M, 007h
LXI H, 0EC02h
MVI M, 043h
MVI M, 005h
lplp:
jz lplp
получил три частоты с небольшим масштабом (ниже процентов на 10), но что очень важно с пропорциональным
у меня ночью получилось как-то вообще очень разные маcштабы...
ps: это как бы мелочи и может быть чем-то на моем компе обусловлено....
в частности дискретизацией захвата звука (тк чуть ниже смещение не подтвердилось)...
сейчас попробую, если будет не пустой цикл, а что-то посложнее..
72568
перепроверил не с пустым циклом, паника ложная, видимо что-то у меня не сложилось ночью,
очень точно работает емул со звуком... это отдельные пачки по всем трем каналам
спасибо всем кто отозвался...
72570
это, то что удалось накодить под апогеем, но, если что, я без слуха от слова вообще, чисто математически конвертнул
72572
Pyhesty, ivagor уже почти на все успел ответить ;)
Да, BCD на данный момент в таймере не поддерживается, увы :(
Остановка процессора на обновление памяти эмулируется, причем с периодичностью, довольно точно соответствующей реальному Апогею и зависящей от настроек контроллера ЭЛТ.
Торможение проца на ПДП действительно не сказывается на таймере.
Дмитрий77
29.05.2020, 12:07
Подскажите пожалуйста, как при эмуляции РАДИО-86 подцепить свой собственный знакогенератор?
P.S. ОК кажется разобрарлся. Отрезать первые 4 байта от сохраненного rkr, отрезать хвост и записать в файл sgr.bin
Дмитрий77
30.05.2020, 19:04
(уделено, т.к. не подтвердилось при дальнейшем изучении)
Дмитрий77
06.06.2020, 17:13
Подскажите пожалуйста формат файла rkr
начало, конец, участок памяти, ????
зачем еще 5 байт?
CityAceE
06.06.2020, 18:32
Подскажите пожалуйста формат файла rkr
http://mk90.org/wiki/index.php/TapeFormatRK86
Спасибо CityAceE за ответ, могу только добавить, что нулевых байтов в конце может быть как два, так и один (с одним байтом записывает, например, Партнер), читаться файлы должны в любом случае.
CityAceE
12.08.2020, 08:45
Pyk, а есть где-то список ключей запуска эмулятора? Какая-либо справка по ключам запуска отсутствует. Методом тыка нашёл следующие рабочие ключи по которым эмулятор запускается в режиме эмуляции определённой платформы:
-a - Апогей
-m - Микроша
-o - Орион
-p - Партнёр
-r - Радио-86РК
-s - Специалист
-u - ЮТ-88
-v - Вектор
Также определил, что при передаче в качестве аргумента имени файла, он будет загружен и запущен. Собственно, именно это мне и нужно было прежде всего.
CityAceE, ключи запуска описаны в п. 1.6 документации (Emu80 v4 Manual.rtf).
Если кратко, то ищем в emu80.conf строки вида "config.addPlatform = ...", и последним четвертым параметром в каждой строке будет ключ запуска определенной платформы, перед которым нужно поставить "-". Если четвертый параметр отсутствует, то и запуск соответствующей конфигурации из командной строки невозможен. При желании можно и подредактировать конфиг под конкретные цели.
Если указать имя файла, то он будет по возможности загружен и запущен, но есть также еще один недокументированный ключ "-l", подавляющий автозапуск. Если его указать, файл будет просто загружен, без запуска. В следующем релизе добавлю в документацию.
Также прошу прощения за задержку с обещанным следующим релизом - к эмулятору время от времени возвращаюсь, но все изменения пока только в репозитории, руки не доходят сделать полноценный релиз...
CityAceE
14.08.2020, 01:54
Pyk, спасибо! Что-то я подробный мануал и не заметил :)
А есть какой-нибудь способ (например, через файл конфигурации) зафиксировать в отладчике Специалиста мнемонику Z80? А то мнемоника i8080 мне уже ни о чём не говорит, и поэтому каждый божий раз при запуске отладчика приходится жать Z, чтобы переключить мнемонику на мне знакомую.
Так же, как и ivagor в Exolon'е, я в Batty (https://zx-pk.ru/threads/32119-batty-dlya-pk-spetsialist.html) столкнулся с треском в динамиках при использовании цвета. Так что ждём фикса. И ещё, что касается звука. Звук, во всяком случае в Специалисте, почему-то существенно тише, чем в том же EMU.
CityAceE, сейчас способа зафиксировать мнемонику нет, но на первый взгляд сделать недолго. Добавлю в планы на предстоящий релиз.
Треск также сделаю отключаемым.
Насчет звука: во-первых, можно увеличить в настройках громкость со значения 4 по умолчанию до 5. Но все равно будет тише и вот почему: сейчас в эмуляторе амплитуда одного источника звука равна 1/8 от максимальной, что позволяет использовать без искажений до 8 источников звука (например, 3 канала таймера, 3 канала AY, магнитофон, ковокс и т.п). Конечно, маловероятно, что все они будут использоваться одновременно, но а вдруг? Экспериментировал с этим, в частности пробовал вариант, когда громкость источника зависела от количества источников - не понравилось то, что на разных платформах громкость стала довольно сильно отличаться. К тому же лично мне текущая громкость кажется комфортной, громкость многих других эмуляторов мне кажется излишней, слишком выделяющейся среди разных системных звуков, фоновой музыки и т.п... В общем, не придумал, что с этим делать, с удовольствием выслушаю предложения.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot