PDA

Просмотр полной версии : Эмулятор 'Etalon Korvet Emulator' - разработка



esl
30.05.2014, 18:23
всем привет,

с подачи уважаемого forht32, возобновились работы по эмулятору

залил исходники в репозиторий, теперь оно будет жить там

https://bitbucket.org/esl/korvet-pk8020-emulator

итого состояние на 2014-06-01

проект собирается под Linux (моя рабочая платформа сейчас, и пока останется на ближайшее время)
под винду должен собраться, раньше собирал mingw.

сразу пофиксил несколько старовисящих багов ;)
(типа del<->ins перепутаны)
mute при турбо и в отладчике
новый режим экрана 2x (пока полосатый, иначе тормозит)

теперь есть что пилить

forth32 пилит поддержку "сети", пока работу с реальным компортом

в планах - основное рефакторинг исходников
возможно переезд на sdl
замена на новое 8080core
ну и всякое разное

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


желающие - велкам

marinovsoft
30.05.2014, 18:28
Соберу под винду, скажите чем :)

esl
30.05.2014, 18:59
Соберу под винду, скажите чем :)

раньше собирал mingw
нужна еще либа allegro (сейчас с 4.4 собирал)

в макефайле даже строка осталась от виндовой
LIBS = -mwindows -lalleg -liberty

ну и
all: kdbg.exe
#all: kdbg

сейчас понять как, а там уж нормальный мейк сделаем

SaintTurnip
30.05.2014, 20:01
Raspberry PK 8020

esl
30.05.2014, 20:44
вай нот, дома pi есть, не знаю есть ли под нее allegro console
может как и попробую, спасибо за мысль ;)

Serebriakov
31.05.2014, 04:24
возможно переезд на sdl
Если переезд совершится, то можно попробовать собрать под Android. Порт самого Allegro на Android, как я понял, в далеких планах и на стадии прототипа.
Время от времени играю с телефона (Xperia Play) в Клад по дороге домой на эмуляторе Вадима (SPC) (http://soviet-pc.narod.ru/sandbox_ru.html), но порт очень не доделан, после релиза почти не обновлялся.
Да и хотелось бы добавить туда пару хотелок, чисто косметических. Но там оно closed source, а автору явно некогда заниматься такой ерундой.

svofski
31.05.2014, 14:46
Вопросы:
- что за тип PALLETE (sic), который нигде не определен? Похож на PALETTE из Allegro 4, но с опечаткой. Или просто какой-то файл недовыложен?

- Правда ли, что это Allegro 4 и планируется ли Allegro 5 ?

esl
31.05.2014, 16:21
Вопросы:
- что за тип PALLETE (sic), который нигде не определен? Похож на PALETTE из Allegro 4, но с опечаткой. Или просто какой-то файл недовыложен?



- Правда ли, что это Allegro 4 и планируется ли Allegro 5 ?

файлы всё, это рабочий фолдер.

по идее это
http://alleg.sourceforge.net/stabledocs/en/alleg001.html#PALETTE




The type PALETTE is defined to be an array of PAL_SIZE RGB structures,
where PAL_SIZE is a preprocessor constant equal to 256.

You may notice that a lot of the code in Allegro spells 'palette' as 'pallete'.
This is because the headers from my old Mark Williams compiler on the Atari spelt it with two l's,
so that is what I'm used to. Allegro will happily accept either spelling,
due to some #defines in allegro/alcompat.h (which can be turned off by
defining the ALLEGRO_NO_COMPATIBILITY symbol before including Allegro headers).


в винде DLL - Allegro 4.1.3
под убунтой просто поставил liballegro, поставило 4.4
хотя есть в и 5й там, почему так - не знаю ;)

а стоит смотреть на 5ю ?
я скорее в сторону SDL думал

но это всё далёкие планы ...

этим исходникам уже лет 10, и они уже лет 8 лежат доступные ...

svofski
31.05.2014, 16:54
esl, забавно, я не нашел про PALLETE. Все-таки это опечатка, даже если ей уже и 30 лет =)

Про 5-ю Аллегру я спрашиваю, потому что под OSX 4-ю больше не собрать. Но 5-я какая-то странная: они выкинули фичи, а взамен ничего не предложили. Как быть с той же палитрой, например, я не нашел.

ILoveSpeccy
01.06.2014, 05:00
Собрал под виндусом 7 с аллегрой 4.4. Всё работает вроде, только звук на полсекунды запаздывает. И зумм вообще не юзабильный. Остальное вроде норм.
Единственное исправление с моей стороны, в файле "gui.c" поменял
#include <korvet.h> на
#include "korvet.h" так как компайлер не мог хидер найти.

---------- Post added at 03:00 ---------- Previous post was at 02:53 ----------

Кстати, мой эмуль корвета, родителем которого является эмулятор Сергея, работает с SDL. Вывод видео через OpenGL с правильным зумом на весь экран. Могу выложить исходники. Эмуль сырой, никаких оптимизаций так как целью было понять как и что устроено. Но клава, видео и звук работают. Могу выложить сырки если кому нужно.

svofski
01.06.2014, 15:57
ILoveSpeccy, конечно выкладывай. Лучше сразу на github или bitbucket, чтобы можно было форчить и бомбить тебя пулл реквестами :)

SaintTurnip
01.06.2014, 16:29
Сергей, а вы можете добавить эмуляцию звука дисководов?

esl
01.06.2014, 18:59
Сергей, а вы можете добавить эмуляцию звука дисководов?

ой, в теории можно, но я видел только один эмулятор "TRS-80" где такое было
было забавно первые 10 минут, потом - отключалось.

---------- Post added at 17:59 ---------- Previous post was at 17:57 ----------


Собрал под виндусом 7 с аллегрой 4.4. Всё работает вроде, только звук на полсекунды запаздывает. И зумм вообще не юзабильный. Остальное вроде норм.
Единственное исправление с моей стороны, в файле "gui.c" поменял
#include <korvet.h> на
#include "korvet.h" так как компайлер не мог хидер найти.

---------- Post added at 03:00 ---------- Previous post was at 02:53 ----------

Кстати, мой эмуль корвета, родителем которого является эмулятор Сергея, работает с SDL. Вывод видео через OpenGL с правильным зумом на весь экран. Могу выложить исходники. Эмуль сырой, никаких оптимизаций так как целью было понять как и что устроено. Но клава, видео и звук работают. Могу выложить сырки если кому нужно.

Можно инструкцию ;)
типа
1. скачать mingw из ...
2. скачать allegro из ...
3. распаковать в
взять make file ...

и на SDL было бы очень полезно глянуть !

forth32
02.06.2014, 06:55
Все, я возвращаюсь к работе над эмулятором сети. Собственно, доделать оказалось не так уж и много, и посидев с утра пару часов в отладчике, я все доделал. Что я реализовал:

1. Перешел от программного опроса потока (что так портило тебе FPS) к полностью асинхронному вводу данных, по сигналу от ОС. Теперь FPS в твоем любимом турборежиме при пассивной сети не снижается вообще. При активном обмене с сетью немного проседает, но это естественно для однопоточной задачи.

2. Полностью реализовал поддержку псевдотерминалов. Теперь можно соединять эмулятор с железным корветом через компорт, а также другой копией эмулятора и моей сетевой программой KL через виртуальный терминал.

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

Теперь в эмуляторе без всяких сбоев работают сетевые программы типа STS, Postman итд. С сетевыми ОС несколько сложнее, тут обсудить надо, но вначале тебе самому стоит попробовать.

Собственно, я готов внести свои изменения в твой исходный текст. Только вот вопрос - где этот исходный текст последней версии брать? Ты мне 2 варианта присылал, и в этой теме выложил ссылку на репозиторий. Может, у тебя в загашнике еще поновее что-то есть, чтобы мне мартышкиной работой больше не заниматься...

esl
02.06.2014, 08:52
Собственно, я готов внести свои изменения в твой исходный текст.

Только репозиторий :)

forth32
02.06.2014, 15:06
Все, я закончил перенос своего кода в вариант эмулятора из репозитория. Пришлось понабивать шишек на ровном месте, но в коце концов все вроде заработало.

Поскольку своего репозитория у меня нет, прикладываю те файлы, которые я изменил. Их всего 4.

_main.c - добавлен разбор конфига, ключей, а также стартовый код и опрос сети.
serial.c - тут, собственно, всеь мой код и лежит.
korvet.h - добавлены заголовки сетевых подпрограмм и общих переменных.
korvet.cfg - добавлены параметры конфигурации сети.

Теперь о важных изменениях.

1. В конфиг-файл добавлена новая секция [lan], чтобы не путалось с остальными переменными. В секции пока только 3 параметра - ADDR, DEVICE и LOG, потом может быть еще добавим.

2. Добавлены ключи командной строки:


-s - имя устройства последовательного порта для эмуляции локальной сети
-n - адрес РМУ в сети (0 для РМП)
-l - имя файла сетевого протокола, в случае "-l-" (параметр знак минуса) отказ от создания файла протокола

Это позволяет запускать несколько копий эмулятора, РМУ и РМП, из одного места, не изменяя файл конфигурации.

3. Сделан полностью асинхронный ввод-вывод, теперь в турборежиме при пассивной сети FPS держится около 3500. Если сетевое устройство в конфиге не описано, то вызов LAN_poll() вообще не занимает процессорного времени - сразу возвращает управление.

4. Сделана полная поддержка псевдотерминалов для эмуляции последовательного порта. Теперь можно не только общаться с железным корветом, но и соединить 2 эмулятора между собой. Привожу пример такого запуска.

Стартуем первый эмулятор.


./kdbg -n0 -s/dev/ptmx -l server.log -a disk/unsort18.kdi -b disk/MIKRDOS3.KDI
Последовательный порт /dev/ptmx открыт
Подчиненный псевдотерминал - /dev/pts/2
Открыт файл сетевого протокола server.log
Адрес эмулятора в сети - 0
Driver: ALSA

Это у нас будет РМП. В качестве последовательного устройства указываем мультиплексор виртуальных терминалов /dev/ptmx. Будет сформирован лог server.log.
При старте эмулятор указал, что сформирован подчиненный последовательный порт /dev/pts/2. Эта информация нам нужна для запуска второй копии эмулятора.

Теперь стартуем второй эмулятор


./kdbg -n2 -s/dev/pts/2 -l client.log
Открыт файл сетевого протокола client.log
Адрес эмулятора в сети - 2
Driver: ALSA

Это будет РМУ с адресом 2, сетевой лог сохраняется в client.log. В качестве последовательного порта указываем имя подчиненного виртуального терминала, выданное нам первой копией эмулятора.

Все, сеть из 2 корветов готова. Можно начинать развлекаться. Я потестировал сеть в программах STS и YP - работает вроде без сбоев в обе стороны.

Для разбора файлов сетевых логов я написал программку, но ее надо немного облагородить, мне ее стыдно выкладывать в первозданном виде. Как доведу до ума - выложу. А вообще формат лога описан в serial.c.

Моя программа KL также может взаимодействовать с эмулятором по сети через порт подчиненного виртуального терминала. Но требуется некоторая ее доработка. После доработки выложу в соответствующей теме.

А, и вот еще. Что это за оптимизацию -O7 ты там придумал? :) Вообще-то официально такой вообще не существует, а неофициально она эквивалентна -O3. Но даже -O3 использовать не рекомендуется - это экспериментальная оптимизация, можно нарваться на совершенно необъяснимые глюки. Хотя оно и дает примерно +500 к FPS.

Пока вроде все. Прикладываю архив с измененными файлами.

esl
08.06.2014, 22:04
обновил версию в репозитории
исправление ЧБ палитры (первый набросок)
и обновил вывод на экран, теперь в режиме 2X вывод не черезстрочный а нормальный
черезстрочный был по причине быстрого фикса и того что вывод 2x жутко тормозил при обновлении всего экрана.
это тоже в общем то быстрый фикс, но он будет до переделки всего кода ;)

и пару мелких фиксов в сбросе дампов, но это косметика для отладки.

forth32, пока твою сеть не включал, не успел с ней поиграть сильно
и похоже надо будет сделать только в версии для линукса.

Serebriakov
09.06.2014, 01:50
forth32, пока твою сеть не включал, не успел с ней поиграть сильно и похоже надо будет сделать только в версии для линукса.
Это да, как поглядел, там в работе с com сильно линуксозависимый код, но forth32 сделал самое сложное дело - раскопал протокол и логику, так что переписать все под winapi не сложно - кода там не много.
Если когда-нибудь дойдут руки и этого не сделает кто-то другой раньше, перепишу. Плюс давно есть мысли прикрутить чисто косметические вещи к эмулятору, вроде зеленой и других произвольных палитр, а так же алгоритмы масштабирования пиксельной графики вроде hqx, scale2x и прочие, но это уже после SDL, наверное =)

esl
09.06.2014, 02:15
Плюс давно есть мысли прикрутить чисто косметические вещи к эмулятору, вроде зеленой и других произвольных палитр, а так же алгоритмы масштабирования пиксельной графики вроде hqx, scale2x и прочие, но это уже после SDL, наверное =)

Кстати зелёную палитру сделать Совсем просто,
А вот про всякие hqx - я как-то ими не проникся
Для игровых платформ - ещё понимаю
А для компании -как то нет.

---------- Post added at 01:15 ---------- Previous post was at 01:10 ----------



А, и вот еще. Что это за оптимизацию -O7 ты там придумал? :) Вообще-то официально такой вообще не существует, а неофициально она эквивалентна -O3. Но даже -O3 использовать не рекомендуется - это экспериментальная оптимизация, можно нарваться на совершенно необъяснимые глюки. Хотя оно и дает примерно +500 к FPS.


Ой, та это осталось ещё со времён pentium3 ;-)
Вроде было O3 плюс ещё чуть чуть ;)

Я запускал профайлер, в основном там жрет кривая эмуляция звука/таймера
Надо совсем переписывать
И похоже почти все
Кроме диспетчера памяти и всяких WriteXxx/ReadXxx

SaintTurnip
09.06.2014, 02:24
Сергей, можно вас попросить - сделайте пожалуйста поддержку образов нетипичных размеров. Как я помню, в cp/m есть возможность определить геометрию диска, но при моих попытках эмулятор отказывался работать с образами большими, чем стандартный.

(я все еще лелею мечту собрать весь интересный софт на четырех образах :)

forth32
09.06.2014, 05:56
Вообще-то все системные вызовы, которые я использовал, полностью соответствуют стандарту POSIX, а совсем не линуксозависимы. Вроде как микрософт утверждает, что их винда posix-совместима. Хотя с этих придурков станется извратить стандарт до неузнаваемости.
Ну если не нравится работа через компорт, можно через TCP stream сделать, тогда соединение можно будет пробрасывать через существующую TCP/IP сеть. Это позволит собирать сеть из 16 эмуляторов, можно на разных компах.

А, вообщем, мне пока вполне хватает и того что есть для исследования сетевых программ. То есть поставленную перед собой задачу - сделать заменитель вторго корвета - я выполнил полностью.

ILoveSpeccy
10.06.2014, 10:58
ILoveSpeccy, конечно выкладывай. Лучше сразу на github или bitbucket, чтобы можно было форчить и бомбить тебя пулл реквестами :)
Наконец-то я добрался до исходников своего недоэмулятора корвета.
Выкладывать на гитхаб проект не буду, так как поддерживать и развивать его в планах нет. Поэтому просто выложу актуальное состояние тут:
исходники: 48338
бинарник: 48339
Прошу строго не судить, код не имеет абсолютно никакой оптимизации и почти всё очень поверхностно и недоделано. Есть только минимум. Цель написания была именно понять как и что у корвета работает.
Звук иногда хрепит, но нажав на F10 можно от хрипа извавиться.
Кнопки:

Ф12 - выход
Ф11 - сброс
Ф10 - ускоренная работа
Ф9 - выбрать образ диска
Ф8 - фуллскрин
Ф2 - сдампить память в файл

Фуллскрин работает через OpenGL с аппаратным "растягиванием" на весь экран. Звук, графика и таймер используют SDL. Писалось и тестировалось под 64-битной виндой 7. Но как-то раз я собирал эмуль в убунте и всё работало.
На днях может собиру в линуксе (я теперь на арч пересел).

ILoveSpeccy
10.06.2014, 15:01
Собрал в ArchLinux x64.
В файле wd1793.c заменил "#include <conio>" на "#include <string.h>" и в emulator.c закомментировал "freopen".
Картинка и звук в норме, работает тоже вроде как надо.
Скачать бинарник под линукс: 48341

esl
10.06.2014, 15:56
собрал под убунтой 14.04
сделал маке для линуха

Serebriakov
10.06.2014, 16:57
Вот бы теперь взять да и пособирать все наработки из обоих веток эмулятора до кучи =)
Кстати. Раз форк ILoveSpeccy на SDL, можно попробовать собрать под Android.

P.S. По палитрам, как-то делал вот такую табличку на основе утилиты конфигурирования палитр из эмулятора emulator.zip (http://pk8020.narod.ru/s2-download-emother.html) (тот, что написан неким Вадимом в 1999 году на 386 асме под ДОС):
(картинка кликабельна)
https://dl.dropboxusercontent.com/u/32466567/Korvet/Pals.png (https://docs.google.com/file/d/0B5ean8qOQAUhVmJzUVF4NjVSREk/edit)
Отправлял ее другому Вадиму из Беларуси (тому, что пишет SPC), но он ее так и не использовал. Может пригодится здесь.

P.P.S. По алгоритмам масштабирования пиксельной графики, вот довольно интересная страничка (http://research.microsoft.com/en-us/um/people/kopf/pixelart/supplementary/multi_comparison.html) сравнения всех основных алгоритмов. У автора статьи вообще очень интересная домашняя страничка (http://johanneskopf.de/), если кто интересуется алгоритмами обработки изображений.

esl
10.06.2014, 19:41
P.P.S. По алгоритмам масштабирования пиксельной графики, вот довольно интересная страничка (http://research.microsoft.com/en-us/um/people/kopf/pixelart/supplementary/multi_comparison.html) сравнения всех основных алгоритмов. У автора статьи вообще очень интересная домашняя страничка (http://johanneskopf.de/), если кто интересуется алгоритмами обработки изображений.

автор то research.microsoft ;P

---------- Post added at 18:41 ---------- Previous post was at 18:11 ----------

я вытянул цвета со скриншота DDp



{14 ,14 ,14},
{13 ,13 ,165},
{3 ,161 ,3},
{2 ,159 ,156},
{164 ,10 ,7},
{162 ,7 ,160},
{155 ,155 ,0},
{154 ,154 ,154},
{59 ,59 ,59},
{59 ,59 ,214},
{50 ,210 ,50},
{49 ,209 ,205},
{215 ,55 ,52},
{213 ,55 ,209},
{205 ,206 ,44},
{204 ,205 ,200}


ну и дефолтные у меня сейчас
обычная RGB - 168, яркая 252



BW ESL - 00,20,28,34,40,4c,58,64,74,84,94,a8,b8,cc,e0,f0
BW DDp - 04,14,22,32,3e,4e,5d,6c,7b,8c,9b,ab,b8,c7,d7,e7


поделись своей табличкой, чтоб не перенабирать ....

DDp
10.06.2014, 21:27
я вытянул цвета со скриншота DDp
:mad:esl, призываю не брать абсолютные значения со сграбленного через тюнер. Я давал эти изображения для оценки яркостей цветов друг относительно друга. (Какие к чёрту 04 для самого тёмного и e7 для самого светлого в эмуляторе.)

---

Считаю, что надо использовать или близкие к реальному отношения яркостей или идеальные.

Идеальные отношения для монохромного выхода Корвета:

00,11,22,33,44,55,66,77,88,99,AA,BB,CC,DD,EE,FF

Для цветного выхода - я давал вместе с изображением схему смешивания с номиналами резисторов и она (по моему мнению) не идеальна, просто так получилось (такие резисторы попались под руку).
Цветной выход Корвета цифровой - яркость I-компоненты относительно RGB зависит исключительно от схемы смешивания в мониторе. Какая она в конкретном мониторе?... X3.
Но цоколёвка разъёма подсказывает про стандарт CGA. Тогда...
Идеальные цвета для цветного выхода Корвета: (RRGGBB)

000000,0000AA,00AA00,00AAAA,AA0000,AA00AA,AAAA00,A AAAAA,
555555,5555FF,55FF55,55FFFF,FF5555,FF55FF,FFFF55,F FFFFF
Но, ещё одно "НО" к идеалу - в CGA мониторах цвет №6 не жёлтый, а коричневый (AA5500).

---

После того как "стандарт" будет выбран, плюсом(поверх) можно добавить опциональные искажения RRGGBB, что бы юзер мог выбрать изображение "как на моём подсевшем мониторе". Т.е крутить усиление (*k) или смещение (+k) для отдельно для каждой RR, GG и BB. (может быть ещё и гамму)

Serebriakov
10.06.2014, 22:05
esl, призываю не брать абсолютные значения со сграбленного через тюнер.
Так пускай в эмуляторе для разнообразия остаются и старые пресеты (BW ESL, RGB ESL; BW DDp, RGB DDp или как там их). А для точности добавить тогда новые (BW REAL, RGB REAL). Ну и для пущей красоты RGB CGA =)


поделись своей табличкой, чтоб не перенабирать ....
Картинка ссылается на GoogleDocs, там можно качать (на что я и рассчитывал). На всякий случай вот прямая ссылка (https://dl.dropboxusercontent.com/u/32466567/Korvet/Colors.doc).


автор то research.microsoft ;P
Автор, судя по всему, работает в Microsoft Research. Но авторство везде указано его - Johannes Kopf + люди, которые помогали.


А вот про всякие hqx - я как-то ими не проникся Для игровых платформ - ещё понимаю. А для компании - как то нет.
Кому как, а мне на большом экране нравится как выглядит. Вот галерея с примерами (https://www.dropbox.com/sh/nxourluyx1gs1x2/AAABSxITz2G1HUv8rNbXUzIza).
Порядок масштабирования в примерах:
- Оригинал (512x256);
- 2x по соседним пикселям, Scale 2x, HQ2X;
- 3x по соседним пикселям, Scale 3x, HQ3X;
- 4x по соседним пикселям, Scale 4x, HQ4X.
И так для всех картинок-примеров по кругу.

DDp
10.06.2014, 22:07
в CGA мониторах цвет №6 не жёлтый, а коричневый (AA5500).
В "Орионе-128" выход такой же цифровой - RGBI. В журнале "Радио"№2 1990 утверждается, что цвет №6 - коричневый. Видимо, авторы сидели с CGA мониторами :)
Но №8 - чёрный :v2_conf3:
В описании бейсика-орион цвет№6 всё-таки тёмно-жёлтый (№5 1991)

esl
10.06.2014, 23:56
:mad:esl, призываю не брать абсолютные значения со сграбленного через тюнер. Я давал эти изображения для оценки яркостей цветов друг относительно друга. (Какие к чёрту 04 для самого тёмного и e7 для самого светлого в эмуляторе.)


я эт понимая ;)

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

в общем "теплый ламповый цвет"

я же написал, что это эксперименты.
можно сделать в конфиге параметры, но по опыту 99.9% их трогать не будут.

esl
11.06.2014, 00:06
Но, ещё одно "НО" к идеалу - в CGA мониторах цвет №6 не жёлтый, а коричневый (AA5500).


в КТДП - явно указано жёлтый
48356

esl
23.06.2014, 00:13
версия из репозитория теперь собирается mingw под виндой,

вот тестовая сборка (правда там вместо чернобелого - чернозеленый режим) ;)
https://yadi.sk/d/fFBDqJ_EUQyVY

аллегро - на редкость забавная либа оказалась
опять пришлось чинить клавиатуру
и это при том что оригинал для винды и писался
а тут еще пару багов вылезло
самый приятный, у клавиши ':' под виндой оказлся другой код, не KEY_COLON а KEY_SEMICOLON
спасло наличие алиасов ;)
а то бы пришлось ifdef писать.

и еще, на вид у виндового кода задержка аудио выше, оно становится заметным
под линухом вроде заметно ниже
правда винда у меня в виртуалке, так что возможно это наложение эмуляций.

p.s. собирал mingw (с сайта) и аллегрой с сайта же бинарной.
p.p.s. инструкцию набросаю, я для этого виртуалку сделал - красота.

Serebriakov
23.06.2014, 17:46
Очень во-время. На прошедших выходных хотел попробовать кое-чего всунуть в эмулятор (свои палитры, scale2x, посмотреть куда делись скриншоты по F8 + поправить, чтобы новые не пытались поверх старых записываться), но только зря потратил время на сборку. Собрать как положено не получилось. В конечном итого то, что собралось пишет, что нет внешнего ПЗУ =(. Пробовал разные версии minigw-msys, но тщетно. Allegro использовал: allegro-4.4.2-mingw-3.4.5. В конечном итоге более-менее нормально собралось без makefile только в CodeBlocks (для меня там проще указать что и где искать-линковать, с мэикфайлами у меня туговато пока).
Так что инструкция была бы очень кстати.
Где у меня были проблемы при сборке:

Код брался вчера с BitBucket, ревизия dc3353428737.

1) gui.c, строка 22 (ILoveSpeccy писал об этом выше):


заменить:
#include <korvet.h>
на
#include "korvet.h"


2) i8080dis.c, строка 163:


.....
162 offset&=0xffff;
163 cmd=mem[offset];
.....

F:\MiniGW\Korvet\i8080dis.c|163|error: 'mem' undeclared (first use in this function)

Поискал по файлам, больше вообще нигде не объявлен и не упоминается такой массив как mem[]. Не знаю что это такое, закомментировал =)

3) i8080inc.c, строка 31 (самое начало кода в файле):



31 switch(op) {
32 case 0x00: /* nop */
33 case 0x08: /* undocumented nop */
.....
}

F:\MiniGW\Korvet\i8080inc.c|31|error: expected identifier or '(' before 'switch'|

Заглянул в i8080.c, там в 184 строке функцию разрывает включение:


int CPU_Exec1step (void)
{
unsigned char op;
int i,j;

Tstates = 0;
op=RD_BYTE((int)PC++);

#include "i8080inc.c"
.....
}

Я, конечно, пока не опытный кодер, но такой фичи как разрывающий инклюд, до селе не встречал =) Не уверен, что стандарт такое позволяет.
Думал вынести в функцию, но для экономии времени просто перенес все из i8080inc.c в i8080.c вместо разрывающего инклюда.

4) Снова i8080dis.c, начиная со строки 118 и еще в нескольких местах далее:


.....
117 offset&=0xffff;
118: cmd=GET_BYTE(offset);
119: nextbyte=GET_BYTE(offset+1);
120 nextword=GET_WORD(offset+1);
.....
129 sprintf( text+j*2+6, "%02X", GET_BYTE(offset+j));
.....

obj\Release\i8080dis.o:i8080dis.c|| undefined reference to `GET_BYTE'|
obj\Release\i8080dis.o:i8080dis.c|| undefined reference to `GET_WORD'|
и т.п.

Где-то я встречал такой метод как GET_BYTE, в каком-то классе работы со строками в другом проекте, в коде эмулятора больше нигде не встретил ни декларации ни самой функции.
Короче, опять комментирую непонятные пока строки с ошибками =)

После этого, собирается без ошибок, но эмулятор настоятельно требует какое-то внешнее ПЗУ, хотя все нужное ему для работы есть в каталоге =)

esl
23.06.2014, 18:35
чудеса,
я просто make собирал 8)
эти файлы точно не менял, баги были внутри ;)

---------- Post added at 17:35 ---------- Previous post was at 17:33 ----------


посмотреть куда делись скриншоты по F8 + поправить, чтобы новые не пытались поверх старых записываться

скриншоты на месте, точно
есть мысль, просто создавать новую папку (DMPYYMMDDHHMMSS) и в нее сваливать всё.

Serebriakov
23.06.2014, 19:00
А комментарии по этим неизвестным массивами-функциям будут (те, что в спойлере) ? =)

Насчет скриншотов. По F8 теперь ведь зум, а не сброс дампа со скриншотом. Вообще, нужно было бы сделать просто сброс скриншота (например, shift+s) без дампа. Ну и хотелось бы отдельную возможность сброса-восстановления (ctrl+s, ctrl+r) дампа памяти на диск (сохранение в играх). Вроде в этом эмуляторе не было реализовано. С каталогам я бы не мудрил, есть простенький алгоритм нахождения последнего файла в папке:

// Возвращает имя первого свободного файла
// параметр - начало файла например "screenshot"
AnsiString __fastcall TForm1::FileName(const char *fname)
{
int i=0,j=0;
//Станадартное имя задаваемое в параметре ф-и
AnsiString DEF=AnsiString(fname);
//Возвращаемое имя
AnsiString NAME="";

do
{
i++;
NAME=DEF;

for (j=0;j<(3-AnsiString(i).Length());j++)
{
NAME+="0";
}
NAME+=AnsiString(i);
NAME+=".kdi";
} while (FileExists(NAME.c_str()));

return NAME;
}

Код немого замусорен и надо бы перевести на чистый C, но идея, думаю, будет ясна. Это кусок из кода дампера, который писал много времени назад, но не дописал. Нужно было для непрерывного режима дампа.

P.S. А, да. Забыл. Надо бы пройтись по исходникам и пособирать все changelog'и в один файл. Когда изучал код, насчитал их 3 штуки в разных местах. Для истории надо бы подрихтовать и сделать один полный.

esl
23.06.2014, 19:14
пробуйте

вот инструкция


1. DOWNLOAD
tortoise HG
http://tortoisehg.bitbucket.org/download/

http://bitbucket.org/tortoisehg/files/downloads/tortoisehg-3.0.1-x86.msi
http://bitbucket.org/tortoisehg/files/downloads/tortoisehg-3.0.1-x64.msi

mingw installer
http://sourceforge.net/projects/mingw/files/Installer/

http://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download

allegro
https://www.allegro.cc/files/?v=4.4

http://cdn.allegro.cc/file/library/allegro/4.4.2/allegro-4.4.2-mingw-4.5.2.zip

2. Install

Install tortoise HG
Install MINGW
launch installer and select
mingw-developer-toolkit
mingw32-base
msys-base
Installation -> Apply changes
(wait while download and installing)

mingw installed in C:\MinGW

extract allegro-4.4.2-mingw-4.5.2.zip into C:\MinGW


3. update $PATH
set MINGDIR=c:\mingw
set PATH=%MINGDIR%\bin;%MINGDIR%\msys\1.0\bin;%path%;
"c:\FAR_\Far\Far"

4. checkout sources from bitbucket

create some folder (c:\dev\ as sample)
in c:\dev
hg clone https://bitbucket.org/esl/korvet-pk8020-emulator

for updating files from repository
hg ci
hg update

5. edit Makefile (switch to windows) (will fixed late)

#LIBS = -mwindows -lallegro-4.4.2-mt
LIBS = -lalleg
replace to
LIBS = -mwindows -lallegro-4.4.2-mt
#LIBS = -lalleg

6. compile
cd c:\dev\korvet-pk8020-emulator
make clean
make





---------- Post added at 18:08 ---------- Previous post was at 18:04 ----------



Я, конечно, пока не опытный кодер, но такой фичи как разрывающий инклюд, до селе не встречал =) Не уверен, что стандарт такое позволяет.
Думал вынести в функцию, но для экономии времени просто перенес все из i8080inc.c в i8080.c вместо разрывающего инклюда.


я буду этот кусок менять на более новую версию ;)

а по поводу инклуда
инклуды же выполнются до компиляции, просто модифицирую исходник
на то он и ПРЕПРОЦЕССОР

это абсолютно по снандарту

---------- Post added at 18:09 ---------- Previous post was at 18:08 ----------


А комментарии по этим неизвестным массивами-функциям будут (те, что в спойлере) ? =)


что-то видимо с конфигами компилера
у меня ТАКОГО нет вообще ;)

---------- Post added at 18:13 ---------- Previous post was at 18:09 ----------

а, вроде ясно
i8080inc.c - он автономно не компилится, а инклудится,
вообще - собирай маке ;)

---------- Post added at 18:14 ---------- Previous post was at 18:13 ----------


Насчет скриншотов. По F8 теперь ведь зум, а не сброс дампа со скриншотом.

а, так дампы и скриншоты всю жизнь и были на Alt+F8
а на F8 раньше был FullScreen а теперь ZOOM

Serebriakov
23.06.2014, 19:16
Да, в IDE, видимо, нужно еще полазить по настройкам компилера. Да и прагмы подобавлять, т.к. там еще и варнингов много.
По вашему ману - вроде все так и делал, разве что не делал make clean перед make. Попробую сова пособирать через msys.

Однако, что это за такой нигде не объявленный массив mem[offset] (п.2 спойлера) и функции GET_BYTE(), GET_WORD (п.4 спойлера)?

Насчет F8 всегда ориентировался на DOC/read.me:

Клавиши управления.

f6 - пока нажата - максимальная скорость
f7 - пока нажата - палитра на экране устанавливается стандартную (дебаг)
f8 - записывает образ памяти (64к) в файл. (дебаг)
f9 - пока нажата - Simple User Menu
f10 - Переключатель между цветным и чернобелым режимом
f11 - Reset
f12 - Выход

Про Alt+F8 вообще не знал, думал выкинули функцию.
Проверил, в старых версиях дампы происходят и по F8 и по ALT+F8. Чудеса =)

Опять же, повторюсь, нужно подрихтовать все changelog'и readme, todo и т.п. и сложить в одну папку.
Ну и хотелось бы отдельные бранчи с экспериментальными функциями вроде сети от forth32 и SDL от ILoveSpeccy, чтобы не потерялись и потом было легче внедрить в основную ветку =) А так же makefile, которым можно собрать любую конфигурацию из любой ветки.

esl
23.06.2014, 19:43
о, полезно
эти два файла были неиспользуемые, выкинул ;)
инклуд исправил
репозиторий обновил

---------- Post added at 18:41 ---------- Previous post was at 18:41 ----------

если бы собиралось через make - собралось бы

---------- Post added at 18:43 ---------- Previous post was at 18:41 ----------

а про варнинги, это идея, но пока можно собирать без -Wall

esl
25.06.2014, 22:03
FORTH32 реализовал поддержку внешнего ПЗУ
я впилил его код сюда

в комманд лайне -x file.rom - подключить внешнее пзу

заодно сделал что можно указать файл основного ПЗУ в комманд лайне -r
-r data\korvet11.rom

как сайдэффект, если подключено EXTROM то отключается поддержка джойстка

собственно в эмуляторе давно есть поддержка джойстика на порту EXT ;)
настоящий PC джойстик эмулирует джойстик поключенный к порту EXT Корвета.

она работает в


ANTON

ITA EXPRESS
ERIC BOMBER
FIRE RESCUE
NINJA CAGE
XYZON
PAC-MAN

DEFLECTOR
DANDARE
DANDARE2



правда работает только с внешним джойстиком 0
в теории можно было бы сделать маппинг джойстика на кнопки, может и сделаю ...
в свое время делалось ради исследования, да так и осталось ;)

p.s. огромное спасибо FORTH32
p.p.s поддержку сети допилю ;)

Serebriakov
26.06.2014, 00:41
p.p.s поддержку сети допилю ;)
Прошу не забыть про ифдефы для виндузятников, пока код сети не будет портирован на win ;)

Задался вопросом, скажите, а нельзя сделать в эмуляторе абсолютное позиционирование курсора мыши, а не относительное?
Т.е., чтобы курсор эмулятора совпадал с реальным курсором, а не убегал от него?
Поглядел бегло исходники, вроде значение координат и должно быть абсолютным.
Берутся смещения курсора через Allegro и отправляются в эмулятор.
Пожалуй, перепишу себе на листок и разберу все поразрядные операции по шагам,
какой бит куда пихается :), т.к. никак не пойму откуда появляется это паразитное смещение курсора.

И еще, планируется ли GUI и если планируется какого плана - рисованный или оконный, например на QT?
Можно было бы тогда отладчик серьезно доработать по удобству.

Сам GUI, как по мне, очень удачно был реализован в каноничной версии VitrualKorvet 0.12(9):

https://dl.dropboxusercontent.com/u/32466567/Korvet/VirtualKorvet.png
http://soviet-pc.narod.ru/VKorvet0129.zip

Особенно радовала клавиатура, когда не получалось найти бинды к реальной.
А вообще, бинды надо-бы сделать аля DOSBOX, жмем CTRL+F1 и выскакивает:

https://dl.dropboxusercontent.com/u/32466567/Korvet/DosBox.png

Только лучше не рисованный, а с VirtualKorvet GUI. Ну или фотку реальной клавиатуры подставить.

P.S. И еще вопрос: косметические патчи со своими свистелками-гуделками в эмулятор принимаются? :)

esl
26.06.2014, 01:21
Задался вопросом, скажите, а нельзя сделать в эмуляторе абсолютное позиционирование курсора мыши, а не относительное?
Т.е., чтобы курсор эмулятора совпадал с реальным курсором, а не убегал от него?
Поглядел бегло исходники, вроде значение координат и должно быть абсолютным.


нет. я не знаю такого способа :(
т.к. перемешение мышки - относительное, на сколько она сдвинулась.

еще варианты
- лочить мышку внутри окна, но мне он тоже не ахти как
- в теории можно сделать поддержку всех 3х? программ где есть поддержка
Абрис, Акварель и еще кто-то
прямо в них патчить координату, но надо ли этот гиморой кому ....

я по этому курсор в виде вопроса и включил, чтобы хоть как-то орентироваться
вообще копать в эту сторону - мало интересно, софта то нет ...

врядли кто в трезвом уме будет рисовать в Абрисе ;)

---------- Post added at 00:17 ---------- Previous post was at 00:15 ----------


т.к. никак не пойму откуда появляется это паразитное смещение курсора.


не совпадают "кривые ускорения" и имхо врядли это легко исправить.

---------- Post added at 00:21 ---------- Previous post was at 00:17 ----------


И еще, планируется ли GUI и если планируется какого плана - рисованный или оконный, например на QT?
Можно было бы тогда отладчик серьезно доработать по удобству.

Особенно радовала клавиатура, когда не получалось найти бинды к реальной.
А вообще, бинды надо-бы сделать аля DOSBOX, жмем CTRL+F1 и выскакивает:


гуй когда либо - конечно ;)

хелп по клаве - реально спасибо за идею, надо подумать, на досбокс - пристально посмотрю.




P.S. И еще вопрос: косметические патчи со своими свистелками-гуделками в эмулятор принимаются? :)

присылай ;)
или пуш реквест ...., так правильнее

Serebriakov
26.06.2014, 01:41
вообще копать в эту сторону - мало интересно, софта то нет ... врядли кто в трезвом уме будет рисовать в Абрисе ;)
Ну, у меня в очень-очень далеких планах идея попробовать прикрутить к эмулятору DosLine NetCP/M и попытаться запустить Win 3.11 в терминальном режиме =) Прошивки Линтеховских плат я считаю, как дойдут руки. Схемотехнику перерисую (вроде там не многослойные платы).
Вообще, сейчас ближайшая убер-мечта - выйти в интернет с реального Корвета в терминальном режиме =) Почти все для этого у меня уже есть.
Нужна только материнка с ISA-слотом (едет из Китая) и самое главное - починить свои Корветы. Недавно вышел из строя единственный, который работал =( Судя по тому как сломался, виноват блок питания, который я использовал. Вообще, человек, на которого я возлагал надежды помощи в ремонте категорически отказался, мотивировав тем, что Корветы его в своё время так достали (он работал в сервисе), что в жизни больше не возьмется =)
Так что, буду копаться сам. Осциллограф уже приехал, планирую эпическую тему по ремонту, т.к. проблема у меня стандартная, которую описывали уже много раз (ПИЩАТ!), но пошаговых инструкций лечения для не электронщиков не было =) Будем делать рецепт =)
Заодно, глядишь, много нового и интересного для себя узнаю =)

esl
26.06.2014, 19:00
dosLine сама по себе очень интересна .....

Serebriakov
26.06.2014, 20:40
Очень повезло, что я всю жизнь был запасливым хомячком :), насчет файлов и тому подобного (вспомним исходники xkorvet ;) ). В далеком 2007, когда я еще не сильно соображал зачем мне оно может понадобиться, в одной школе (как раз в ней я сделал на телефон фотку Корвета, что теперь висит в Википедии), мне вручили пачку старых 3,5 дискет (драйвера и прочая ерунда), и попросили поглядеть, может есть рабочие (тогда флеш-память еще не сильно была распространена и дискеты были в ходу). Совершенно случайно там обнаружились две инсталляционные дискеты NET-CP\M - DOSLINE 3.0, и я решил их скопировать (очень жалею, что не сделал тогда именно образы, а только вытащил файлы). Дальнейшая судьба этих дискет неизвестна. Но, за то, теперь для истории сохранилась инсталляция (я ее выкладывал на своем старом почившем oldkorvet.narod.ru, перезалью позже в навигатор).
Более того, так получилось, что в начале 2000-х мне довелось поработать на первом в моей жизни IBM PC, который тогда был сервером в классе с Корветами. Спустя много времени, когда Корветов там уже не было, тот компьютер модернизировали (поменяли там жесткий диск, систему и другое по мелочи) и ко мне в руки на время попал его старый жесткий диск (кажется на 2 ГБ всего :) ). Я на память (там были кое-какие мои детские программы =) сделал себе копию всех его файлов на CD-болванку, которую недавно обнаружил в своих архивах. А там! Проинсталлированный и настроенный NET-CP\M 3.0, бывавший в работе (даже различные файлы ученических Корветов сохранились!). Так что теперь, для истории, есть и пример живой установки (так же поделюсь позже). Что дает надежду, запустить все это счастье в живую, даже если с тех копий дискет ничего не установится. А еще недавно удалось выпросить ЛинТеховскую сетевую (ISA) с того самого IBM-компьютера (люди вообще были не в курсе что это за такая хрень у них валяется, обрадовали, что не выбросили).
Жаль, конечно, что почти никто из тех, кто был раньше в сервисе Корветов, либо принимал участие в разработке того софта, более темой не интересуются - они могли бы поделиться более интересными вещами, а так приходится собирать все по крупицам.
P.S. Сорри за оффтоп ;)

esl
26.06.2014, 20:57
круто, ждем !

esl
29.06.2014, 18:54
опять мелочи всякие
добавлен HELP -h
добавлен выбор типа мышки -m (0 - disable, 1 - MS Mouse (default), 2 - MouseSystem)
код MouseSystem был давно (KWASTI давно прислал софт который его использует UFO,WAR) приделал возможность его выбрать,
-j - включить эмуляцию реальным джойстиком корветовского джойстика на порту расширения.

esl
30.06.2014, 20:30
слил (в экстазе) поддержку сети от forth32
правда переименовав опции и ввел удобности
-l rmp - стартовать копию эмулятора как Рабочее Место Преподавателя
-l rmu - стартовать копию эмулятора как Рабочее Место Ученика

или использоавать реальный ком
-l /dev/ttyS0

-q logfile - логировать сетевой обмен
-n rmunum (0..15)

-l rmp & -l rmu - это syntax sugar над PTX (rmp кладет в файл имя ptx, -l rmu читает из него)

вроде оно ifdef LAN_SUPPORT
но под виндой надо просто этот выключить его
не собирал
еще раз огромное спасибо forth32 !!!

осталось понять как поченить всё кроме бейсика ;)

Serebriakov
07.07.2014, 14:28
Кстати, а в эмуляторе поддерживается загрузка с внешних ПЗУ (про b2m знаю, но сейчас интересует именно ваш)?
Пока пилите новый внешний интерфейс захотелось собрать оригинальный ПЗУ по схеме, может в ремонте поможет. А потому еще один вопрос:

В аттаче ромы для загрузки из внешней ПЗУ тест КТДП и кучка игрушек
41843 : тест железa
41844 : игрушки
Как вы получили эти ромы? Сами нарезали в hex-редакторе или дебаггере из тех же bin?

esl
07.07.2014, 14:39
Кстати, а в эмуляторе поддерживается загрузка с внешних ПЗУ?

есть, но только из комманд лайна -x filename.rom
там теперь есть -h ;)

и есть поддержка в эмуляторе b2m


Пока пилите новый внешний интерфейс захотелось собрать оригинальный ПЗУ по схеме, может в ремонте поможет. А потому еще один вопрос:

интерфейс пока совсем не пилю, мне пока хватает (и удобнее) комманд лайн
интерфейс пока сильно отложен, пока там и без него есть что делать
пока вон наш EXTENDER прикрутил,



Как вы получили эти ромы? Сами нарезали в hex-редакторе или дебаггере из тех же bin?
написал пару скриптиков конверторов, там СОВСЕМ просто ;)
если надо - выложу. ну том оно достаточно ручное и далеко не всё заработает.

в ПЗУ можно зашить KTDP, оно может помочь - это да.
а игрушки - на них память жалко тратить
вот как сделаем екстендер, тогда уж ;)
тем более там сейчас схема, одна 40ногая бис (~2$), sd разъем и кучка резисторов.

Serebriakov
07.07.2014, 14:53
интерфейс пока совсем не пилю, мне пока хватает (и удобнее) комманд лайн
интерфейс пока сильно отложен, пока там и без него есть что делать
пока вон наш EXTENDER прикрутил

Под "внешним интерфейсом" я и имел в виду интерфейс расширения "ExtROM Open Source extender", а не GUI =)

esl
08.07.2014, 00:52
новая опция -f font_name

добавил новую ПЗУ от квант-8 (от tigriss)
./kdbg -r data/kvant8-tigriss.rom -f data/kvant8-tigriss.fnt

переименовал term.rom -> kvant8-terminal.rom

и главное, поддержка ExtROM_EMU
-E foldername
папака в которое содержимое "SDCARD" в комплекте папка extrom\

в ней же должены быть stage1.rom (256 байт) и stage2.rom
сейчас эмулируется в объеме который forth32 реализовал в железе ;)
если удерживать 0-7 грузит не stage2.rom а extrom из файлов ext0.rom .. ext7.rom
там есть примеры ;)
stage2 уже работает с ext.kdi

это все будет много раз меняться, разработка однако.

forth32
08.07.2014, 09:00
О, отлично. Попробовал твой вариант эмуляции - все более-менее работает.
Несколько замечаний, ты уж извини старого зануду...

1. В списке ключей getopt ты забыл в конце двоеточие после большой буквы Е. В результате, если запустить программу, как ты написал выше (-E floder), то эмулятор сегфолтится сразу после запуска :) Пришлось лезть в GDB, чтобы это отловить...

2. У тебя даже в режиме extrom к эмулятору подключаются физические дисководы. В результате после загрузки система начинает полноценно функционировать. Я чуть со стула не упал... Для отладки эмулируемых биосов такое поведение системы очень вредно, поскольку непонятно, откуда взялся очередной сектор - из интерфейса или с реальной дискеты.
Самое неприятное, что отказаться от подключения реальных дисков вообще нельзя - если убрать из конфига соответствующие строки, то монтируются файлы disk/disk%.kdi. Помог только грязный хак в виде указания ключа -A с заведомо несуществующим именем файла. Вот тогда после загрузки вполне предсказуемо полезло сообщение "диск не читается".

3. Обязательно сделай лог-файл всех операций чтения-записи секторов через интерфейс. Это совершенно необходимый инструмент для отладки. Себе-то я его, естественно, уже сделал, но и тебе рекомендую. Поверь, вчера при возне с биосами этот лог мне оказал неоценимую помощь.

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

Чтобы ты мог полноценно поиграть с эмуляцией интерфейса, прикладываю образ диска с биосом, который работает уже через API. Для полноты ощущений отключи от эмулятора все физические диски, тогда гарантированно будешь знать, что весь обмен данными идет только через интерфейс.

Биос там еще недоделанный и требует отладки, которую я запланировал на сегодня. Но уже вполне полноценно работает с интерфейсом. Физичесике дискеты A и B в этом биосе отображаются на буквы C и D, но это еще не совсем доделано.

esl
08.07.2014, 12:06
О, отлично. Попробовал твой вариант эмуляции - все более-менее работает.
Несколько замечаний, ты уж извини старого зануду...

это очень полезно ! ;)

---------- Post added at 10:58 ---------- Previous post was at 10:57 ----------



1. В списке ключей getopt ты забыл в конце двоеточие после большой буквы Е. В результате, если запустить программу, как ты написал выше (-E floder), то эмулятор сегфолтится сразу после запуска :) Пришлось лезть в GDB, чтобы это отловить...

мда, написал в доку и не проверил :(

---------- Post added at 11:00 ---------- Previous post was at 10:58 ----------


2. У тебя даже в режиме extrom к эмулятору подключаются физические дисководы. В результате после загрузки система начинает полноценно функционировать. Я чуть со стула не упал...

сделал -z - запретить эмуляцию ВГ93
с ней - сразу виснет, как и положено ;)
а что из портов VG читается когда ее нет ?

---------- Post added at 11:01 ---------- Previous post was at 11:00 ----------



3. Обязательно сделай лог-файл всех операций чтения-записи секторов через интерфейс. Это совершенно необходимый инструмент для отладки. Себе-то я его, естественно, уже сделал, но и тебе рекомендую. Поверь, вчера при возне с биосами этот лог мне оказал неоценимую помощь.

эт понятно ;)
просто пока было безсмысленно.

---------- Post added at 11:04 ---------- Previous post was at 11:01 ----------


Чтобы ты мог полноценно поиграть с эмуляцией интерфейса, прикладываю образ диска с биосом, который работает уже через API. Для полноты ощущений отключи от эмулятора все физические диски, тогда гарантированно будешь знать, что весь обмен данными идет только через интерфейс.

Биос там еще недоделанный и требует отладки, которую я запланировал на сегодня. Но уже вполне полноценно работает с интерфейсом. Физичесике дискеты A и B в этом биосе отображаются на буквы C и D, но это еще не совсем доделано.

сегодня посмотрю/прикручу !
ты бы сразу выкладывал и исходники emu, чтоб не гадать с апи ;)

---------- Post added at 11:06 ---------- Previous post was at 11:04 ----------

я вчера со спидтестом игрался, кое что получается

forth32
08.07.2014, 12:27
сделал -z - запретить эмуляцию ВГ93
с ней - сразу виснет, как и положено ;)
а что из портов VG читается когда ее нет ?[COLOR="Silver"]


При отсутствии вг93 из портов читается FF, поскольку вся шина подтянута к +5v.

Еще правильнее - при наличии ключа -z надо выдавать ссобщение в лог при попытке обращения к этим портам. Это надо, чтобы отловить в биосе неиcправленные места обращений к диску. Ну, тут ты можешь не заморачиваться, если не хочешь - себе я и сам это сделаю :) Только потом и ты в это упрешься, как будешь заниматься биосами...



эт понятно ;)
просто пока было безсмысленно.

Ну, для меня это вещь номер 1. Без такого лога отладка биоса превращается в АД. Собственно, у меня и сам железный контроллер опционально формирует такой лог на треминал. Это сильно замедляет работу, когда включено, но очень помогает в отладке.


ты бы сразу выкладывал и исходники emu, чтоб не гадать с апи

Так исходники прошивки я еще неделю назад выложил - апи как раз там и описано. Другого ничего не реализовано.

А исходники CP/M и BIOS я выложу несколько позже - вначале отладить их надо, чтобы перед народом не позориться сырым кодом.


сегодня посмотрю/прикручу !

Да там прикручивать особо нечего, просто положи этот KDI в каталог эмулируемой карты, переименуй, как там ты придумал, да загрузись.



я вчера со спидтестом игрался, кое что получается

Выкладывай, как доделаешь - надо на реальной железке померить, а не на эмуляторе :) На эмуле все будет пулей летать, а на железе упрется в скорость меги.

esl
08.07.2014, 13:30
реализовал запись
твой образ - заработал
репу обновил


---------- Post added at 12:30 ---------- Previous post was at 12:28 ----------


Так исходники прошивки я еще неделю назад выложил - апи как раз там и описано. Другого ничего не реализовано.


я просто решил что там новые функции ;)

forth32
08.07.2014, 13:48
Я смотрю, ты для измерения скорости добавил в апи команду F0, после которой можно передать в интерфейс 32К мусора и замерить время. Так?

А клиентская часть уже имеется?

esl
08.07.2014, 14:22
Я смотрю, ты для измерения скорости добавил в апи команду F0, после которой можно передать в интерфейс 32К мусора и замерить время. Так?

А клиентская часть уже имеется?

ага, после нее корвет тупо читает 0x8000 байт
по идее будет F1 пишет

in progress

forth32
08.07.2014, 14:32
Отлично. Я добавил в прошивку меги обе команды - и F0, и F1. По-быстрому написал программку для корвета - все отлично пишет и читает. Теперь буду ждать, когда ты измерялку времени напишешь.

esl
08.07.2014, 15:18
вот для пробы, попробуй запустить
ext5.rom (соответсвенно 5 при запуске)

но пока что-то не очень понятно
там 2 теста
каждый печатает 3 числа, это 3 разных продцедуры чтения, чуть поигрался в оптимизатора.

1й, меряет сколько байт передалось за один VBL
2й, считает сколько полных VBL прошло за время передачи 0x8000 байт

получается что-то странное


Bytes in one int
b1H 177 8850
c1H 193 9650
24cH 588 29400
frames when transfer 0x8000
4bH 75 436.9 21845.3
48H 72 455.1 22755.6
26H 38 862.3 43115.8


что-то меня смущает что скорость ТАК отличается
надо переделывать, таки переносить данные в память и проверять что там приехало
заодно и ближе к реальности будет.

forth32
08.07.2014, 16:26
Ну, что ж, запустил я тест на реальном железе. Правда, получилось, что мы с тобой перепутали: у тебя F0 - передача из контроллера в корвет, у меня получилось наоборот :) Ну, это мы просто с противоположных сторон смотрели на процесс передачи данных, ты из корвета, я из контроллера. Вообщем, заработал твой тест.

Вполне предсказуемо, он выдает стабильные повторяющиеся результаты. То есть каждый проход ( а у тебя проходы повторяются бесконечно) получается один и тот же результат. К сожалению, скриншот АЦЗУ корвета мы не предусмотрели (а можно было бы - перекидать его в контроллер через тот же интерфейс), поэтому придется набить руками:

1: 4c 49 28
2: 00AD 00BC 022F

Первые 2 результата предсказуемо почти одинаковы - ты только поменял вычисление адреса порта (2 dec L) на прямое обращение к нему. Пожалуй, ты прав - так быстрее.

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

Ну, вот примерно так. Откуда у тебя взялась колонка 4 во втором тесте? У меня он только 3 числа выдает, по количеству вариантов GETBYTE.

esl
08.07.2014, 17:38
1: 4c 49 28
2: 00AD 00BC 022F

круто, почти как в эмуляторе, чуть чуть меньше !
т.е ожидания почти нет!



Но в реальной жизни так не получится - данные ведь не просто так забирают с порта, с ними что-то сделать надо. Например, записать в буфер. А это еще пара-тройка тяжелых команд, что, скорее всего, практически съест твое преимущество.

это и так понятно, я другое имел в виду
почему скорость за "один фрейм" не совпадает со скоростью "32к блока"

про оптимизацию - надо просто сделать функцию чтения/записи 128байт не черзе getbyte а таким блоком
остаить и getbyte и сделать чтение 128байт.
приросту будет заметен.
но это всё про оптимизацию,а пока это рано делать ;)

кстати, а по ощущениям оно сопоставимо с дискетой или нет ?

---------- Post added at 16:17 ---------- Previous post was at 16:13 ----------


Откуда у тебя взялась колонка 4 во втором тесте? У меня он только 3 числа выдает, по количеству вариантов GETBYTE.

в табличке там
HEX DEC 32768/frames_counter CPS

cps=char_in_frame*50
там в архиве - табличка.

---------- Post added at 16:38 ---------- Previous post was at 16:17 ----------

твои замеры


Bytes in one int
ad 173 8650
bc 188 9400
22f 559 27950
frames when transfer 0x8000
4c 76 431.2 21557.9
49 73 448.9 22443.8
28 40 819.2 40960.0

forth32
08.07.2014, 17:44
это и так понятно, я другое имел в виду
почему скорость за "один фрейм" не совпадает со скоростью "32к блока"


А, вот ты о чем... Тут надо подумать. Есть подозрение, что ты малость ошибся с методикой измерения. Например, VBL - это всего-то 50 Гц, довольно грубый таймер. Между последним переданным байтом и очередным фронтом VBL может пройти довольно приличный промежуток времени. Лучше бы взять прерывание IRQ5 - от канала таймера, его можно и более высокочастотным сделать, и недосчитанный до прерывания хвост прямо из регистра таймера прочитать.
Но это я так, к примеру, что навскидку в голову пришло. На самом деле может быть дело совсем в другом. Придется поглубже поразбираться в твоих исходниках.



кстати, а по ощущениям оно сопоставимо с дискетой или нет ?

На коротких файлах - без разницы. Оно и понятно - и там и там используется программный обмен через порт данных. А ВГ93 умеет данные буферировать, так что задержек при чтении сектора практически нет. А вот на больших файлах - прилично побыстрее. Не требуется время на позиционирование. Когда доделаем проект до рабочего вида - надо будет написать пару сравнительных тестов чтения данных через биос - в последовательном и случайном порядке секторов. Будет хорошо видно. Хотя уже и сейчас все достаточно работает для таких тестов.



в табличке там
HEX DEC 32768/frames_counter CPS
cps=char_in_frame*50
там в архиве - табличка.

Блин, точно. А я и не заметил как-то, по привычке сразу в исходники полез.
Подставил свои цифры в таблицу - теперь все стало понятно.

esl
08.07.2014, 17:58
А вот на больших файлах - прилично побыстрее. Не требуется время на позиционирование.

на всякий случай уточню, эмулятор быстрее реального флопа ? ;)
а там много что надо будет мерять
давно хотел померять влияние интерлива на скорость чтения
(в своё время писал xformat которые форматирует с интерливом
было быстрее, но померять надо ;)
есть на дисках esl00.kdi & esl02.kdi)
там правда эпик фейл в интерфейсе
YES на формат текущего диска по умолчанию ;)

---------- Post added at 16:58 ---------- Previous post was at 16:52 ----------


А, вот ты о чем... Тут надо подумать. Есть подозрение, что ты малость ошибся с методикой измерения. Например, VBL - это всего-то 50 Гц, довольно грубый таймер. Между последним переданным байтом и очередным фронтом VBL может пройти довольно приличный промежуток времени.



ну в первом тест мы меряем сколько байт прокачало за время VBL
(в обработчике прерывания сохраняю значение счетчик прочитаных байт)
на тут в общем то не важен период, главное что мы его знаем

когда же меряем 32к - тут да, проблемма с хвостом
после того как обновили счётчик возможно передалось еще сколь-ко то байт
<1frame
т.е. реальная скорость чуть чуть отличается, ну по идее не важно

а по факту цифры разные :(
надо на трезвую голову подумать.

[/COLOR]
Лучше бы взять прерывание IRQ5 - от канала таймера, его можно и более высокочастотным сделать, и недосчитанный до прерывания хвост прямо из регистра таймера прочитать.

с ним есть сложности ;)
в эмуляторе он не сильно реализован
это раз
а второе, канало- тот что от таймера, на него приходит то запрос от таймера, но
на вход таймера подаётся или VBL или ~HBL ;)
есть в теории и те и те железки
более новые c ~HBL

forth32
08.07.2014, 18:25
Во как, а я и не знал, что они разные бывают. У меня строчные синхроипульсы идут на этот канал, а это все же 16 кгц, побыстрее чем 50 гц будет. Какой смысл подавать туда кадровые - не понимаю. Если только часы на нем делать, время считать. 50 импульсов - секунда...

Попробовал скопировать длинный файл с дискеты на ту же дискету, на эмулируемом диске и на реальном. Разница поразительна - extrom быстрее раза в 3, наверное. Это на глаз, время я не замерял. Была бы в cp/m команда time, как в линуксе... :)

Но это на реальном железе. В эмуляторе, думаю, разницы не будет никакой.

esl
08.07.2014, 18:31
вечером сделаю тест на чтение секторов

forth32
08.07.2014, 19:15
Я там в соседней теме выложил доделанный BIOS. Ты обязательно возьми его для экспериментов. По сравнению с тем, что я давал утром - в этом исправлены некоторые серьезные ошибки.

Кстати, я туда уже встроил новые процедуры чтения-записи сектора, с учетом твоиз оптимизаций. Стало заметно быстрее даже на глаз. Вот что значит совместная разработка open source!

esl
08.07.2014, 19:39
Я там в соседней теме выложил доделанный BIOS. Ты обязательно возьми его для экспериментов. По сравнению с тем, что я давал утром - в этом исправлены некоторые серьезные ошибки.

Кстати, я туда уже встроил новые процедуры чтения-записи сектора, с учетом твоиз оптимизаций. Стало заметно быстрее даже на глаз. Вот что значит совместная разработка open source!

круто!

тогда уж дальше оптимизировать ;)

EXR_GETSEC:
PUSH BC
PUSH DE
LD C,128 ; счетчик байтов сектора, всего 128 байт
EX DE,HL ; адрес буфера -> DE
LD HL,PORTC
GSL:
LD A,(HL) ; слово состояния ВВ55 - берется из порта С
AND 20h ; выделяем сигнал IBF
JP Z,GSL ; IBF=0 - данных еще нет
LD A,(PORTA) ; данные поступили - выбираем их из порта А
LD (DE),A ; принимаем и размещаем очередной байт
INC DE ; указатель буфера ++
DEC C ; принимаем остальные байты
JP NZ,GSL
POP DE
POP BC
RET



EXR_GETSEC:
PUSH BC
PUSH DE
LD BC,0x8080 ; счетчик байтов сектора, всего 128 байт
EX DE,HL ; адрес буфера -> DE
LD HL,PORTC
GSL:
LD A,(HL) ; слово состояния ВВ55 - берется из порта С
AND B ; выделяем сигнал IBF
JP Z,GSL ; IBF=0 - данных еще нет
LD A,(PORTA) ; данные поступили - выбираем их из порта А
LD (DE),A ; принимаем и размещаем очередной байт
INC DE ; указатель буфера ++
DEC C ; принимаем остальные байты
JP NZ,GSL
POP DE
POP BC
RET

ну и дальше ;)
экономия целого байта !
в идеальном случае (когда сразу прошли) ращницы нет
а в худшем экономия целых 3х тактов на каждый цикл ;)

а вообще имхо ты маньяк ;)
зачем CP/M компилить, я бы только сам биос трогал
и имхо для надёжности я бы оставил оригинальные ДОС, а только биос менял
и может патчил дос
предсталяеш что будет если на измененном досе кто-то запустит тот-же дос,
получим креш

Serebriakov
08.07.2014, 20:12
Вот что значит совместная разработка open source!
Оффтоп: "Два танкиста, два веселых друга ..." :v2_dizzy_army:

esl
18.07.2014, 11:37
"о сколько нам открытий чудных ..."

задышала плата разработки forth32 !

позапускал разное на своем корвете
мой USB TV tuner конечно отображает чертиче

но
STRIP POKER оказыватеся с музыкой
и в DEFLECTOR - музыка плавно затихает

т.е. таймер несколько хуже чем я думал ;)
в эмуляторе B2M музыка есть.
поле деятельности - огромно.

p.s. посмотрел свой порт Athletic Land на реальной железке - работает ;)
плавнентко, за что и боролись.

Krautsov
25.07.2014, 01:15
Подскажите, а случайно нету Корветовского эмулятора под iOS ?

esl
25.07.2014, 01:44
под iOS - нет
есть под андроид

Krautsov
25.07.2014, 13:53
Я пробовал под андроид, :) Для начала сойдёт более чем.
Скажите, а Etalon Korvet Emulator - это будет некий новый эмулятор PK8020 ?

ZEman
08.10.2014, 06:10
esl, а можете выложить последнюю на данный момент сборку под win ?
очень хочется посмотреть на новый эмулятор.

esl
08.10.2014, 10:18
esl, а можете выложить последнюю на данный момент сборку под win ?
очень хочется посмотреть на новый эмулятор.
Там нет изменений сильных
В основном исправлены мелкие баги
И приделано пару фич
Загрузка из extrom
Поддержка работы с реальным корветом через ком порт (только линукс)
Виртуальная сеть

И реалищация extroom boot

Все изменения конфигурятся только через коммандлайн

esl
08.10.2014, 14:59
p.s. я постараюсь собрать последнюю версию под венду
но нет у меня под рукой винду, буду опять настраивать ;)
инструкция тут (http://zx-pk.ru/showpost.php?p=719494&postcount=36)

еще вспомнил что из видимого - правильная ЧБ палитра и клавиатура пофикшена.

---------- Post added at 13:59 ---------- Previous post was at 12:43 ----------

https://yadi.sk/d/ioZBSGB3bsxGK
собрал то что в битбакете
но это тупая сборка, с отрубанием хвостов, ибо сейчас там надо ifdef наставить ...

вспомнил главное!! изменение, теперь окно главное не фулскрин а 2x - т.е. нормального размера

сразу, новы фич - сети нет
есть поддержка загрузки из extrom -e extrom/park.rom
extrom extender - не рабтает

сейчас новые фичи все в коммандлайне, ибо линукс наше фсё

вот текущий -h (в винде вообще нет консоли, надо бует это решать)

esl@esl-hp:~/Dropbox/Emulator/Korvet/korvet-pk8020-emulator$ ./kdbg -h
Korvet Emulator by Sergey Erokhin & Korvet Team|[email protected]|2012-05-30|V1.?.1

Available keys

Disk Images
-a <KDI.FILE> KDI disk image mounted in drive A
-b <KDI.FILE> KDI disk image mounted in drive B
-c <KDI.FILE> KDI disk image mounted in drive C
-d <KDI.FILE> KDI disk image mounted in drive D
-z disable floppy disk controller emulation

ROM
-r <ROM.FILE> Path to MAIN ROM file
-f <FONTROM.FILE> Path to FONT ROM file
-x <ROM.FILE> ROM attached to EXT connector (and turn on ext rom support)
disable joystick support
-E <foldername> - turn on ExtROMExtender, point to folder that emulate SD card

Mouse and Joystick
-m <mouse type> select attached mouse type
0 - turn support off
1 - emualte Microsoft mouse (default)
2 - emualte MouseSystem mouse
-j <joystick num> emulate physical joystick <joystick num> to korvet joystick (attached to EXT port)
try -j 9 to show all available joysticks in system
LAN support
-l - emulate corver network
-l <path to port> /dev/ttyS0 - use real ttyS0 (aka COM1: ) for connect to real PK8010
-l RMP - run as RMP
-l RMU - run as RMU (and attach to the emulator started with -l RMP)
sample
-l /dev/ttyS0 - use real ttyS0 (aka COM1: ) for connect to real PK8010

-n - (0..15) RMU network address
-q - file name for logging network traffic


и тормозит оно знатно ;(
звук в сравнении с линуксом - отстает заметно.

ZEman
08.10.2014, 18:38
esl, большое спасибо.
хорошо что ещё есть те кто не забрасывает такие вещи :)

правда до virtual korvet 0.12(9) ещё далеко.
а нельзя сделать в эмуляторе так чтоб не менялась цветовая схема в win7 при включении эмулятора, и при перемещении окна эмулятора за ним не оставался след ?

esl
08.10.2014, 18:58
без малейшего понятия,
у меня сейчас рабочая машина - Ubuntu, у forth32 тоже ;)

эмулятор использует allegro, а как она себя ведёт - это уже я не в курсе, тем более что под рукой win7 нет ;)

есть в планах перейти на SDL (iLoveSpeccy уже такое делал), он более допилен вроде как.

а сравнивать с virtualkorvet - это разные эмуляторы, я B2M использую если надо более точную эмуляцию проверить (я про тайминги)

просто сейчас совсем завал на работе был, даже небыло возможности допилить extrom наш.
сейчас освободился, допилю.

мне комманд лайн и отладчик важнее чем GUI

да и открытые исходники позволяют делать забавные вещи
вон код сети написал FORTH32, и мы с ним совместно extrom сделали.

esl
12.11.2014, 16:06
небольшой апдейт эмулятора
new keys in DBG
ALT+H,B,D,P,S -> set DUMP window to value from reg
CTRL+P -> set DASM windows to addr from PC

И наконец прикрутил HELP в отладчик

кнопки подсмотренны в xpeccy
пришлось лезть в исходники чтобы посмотреть какие там в отладчике есть

что и и сподвигло сделат HELP
ибо и сам не помню какие кнопки используются

ZEman
14.11.2014, 18:06
а посмотреть на новую сборку можно ? :)

esl
14.11.2014, 19:02
а посмотреть на новую сборку можно ? :)

та там кроме хелпа нет изменений ;)
но соберу виндовую версию попозже.

а так вот скриншоты ;)
оно страшно как смертный грех, но делал прежде всего для напоминания себе.

esl
04.01.2015, 03:03
развлекаюсь тут ;)

добавил OSD для клавиатуры (идея украдена у UNREAL)
соответственно новый параметр в конфиге.

теперь левее дисководов полосочки - если было чтение из строки клавиатуры
если читали из комбинированной - то отображаются все выбранные

на экране - два столбца 0xf800,0xf900

строчка горит после обращения 6 обновлений экрана ;)
пользы мало, но прикольно.

вроде дополнительно не тормозит.

esl
20.03.2015, 12:21
прогнал эмулятор через cppcheck
исправил всего 4 error
причем 3 из них - мелочи
а один - приводил к краху эмулятор если ext_emu.c был скомпилирова с оптимизацией
это круто ибо приходилось его отдельно собирать без оптимизации

- out_buffer_size=fread(out_buffer+2,1,EXT_BUF_SIZE, f_emu);
+ out_buffer_size=fread(out_buffer+2,1,EXT_BUF_SIZE-2,f_emu);
выход за пределы буфера.

и GCC выдал полезный варнинг про оптимизацию, тоже баг поправил при записи.

добавил cppcheck как цель в make на будующее
там куча варнингов по не используемые переменные, надо поправит ;)
и вообще собрать с -wALL

приятно удивлен тем что так мало ERROR он нашел
и приятно что нашел креш !

esl
07.04.2015, 11:36
Добавил новый ключ -T
он включает turboBOOT

а по простому - включает TURBO на первые 10 виртуальных секунд.

Корвет в холодном режиме загружается порядка 8 секунд
(тесты ОПТС и загрузка CP/M)
таким образом если пускаем с -T получаем сразу промпт системы.

причина - надоело ждать при отладке софтины эти секунды (и нажимать F6).

в общем удобство для себя.

и еще ключ -t <time in second>
оказалось удобно, например компиляция занимает 30 секунд, и стартует по страту
запускаем -t 30 и быстро компилимся.
нажатие F6 (turbo) если активен turboBOOT - отключает turboBOOT

идея опять же.
Запускаем компиляцию с -t 1000, и как увидели что компиляция закончилась нажимаем F6, turboBOOT отключается.

esl
07.04.2015, 15:50
а удобно стало, надо было давно такое сделать!

ZEman
02.03.2017, 22:35
esl, можно попросить последнюю сборку вашего эмулятора под Windows ?

marinovsoft
10.04.2017, 19:06
Собрал без поддержки сети.
http://rgho.st/8HKnWCmG5
Остальные файлы брать в репозитарии из стартового поста.