С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
версия из репозитория теперь собирается mingw под виндой,
вот тестовая сборка (правда там вместо чернобелого - чернозеленый режим)
https://yadi.sk/d/fFBDqJ_EUQyVY
аллегро - на редкость забавная либа оказалась
опять пришлось чинить клавиатуру
и это при том что оригинал для винды и писался
а тут еще пару багов вылезло
самый приятный, у клавиши ':' под виндой оказлся другой код, не KEY_COLON а KEY_SEMICOLON
спасло наличие алиасов
а то бы пришлось ifdef писать.
и еще, на вид у виндового кода задержка аудио выше, оно становится заметным
под линухом вроде заметно ниже
правда винда у меня в виртуалке, так что возможно это наложение эмуляций.
p.s. собирал mingw (с сайта) и аллегрой с сайта же бинарной.
p.p.s. инструкцию набросаю, я для этого виртуалку сделал - красота.
Очень во-время. На прошедших выходных хотел попробовать кое-чего всунуть в эмулятор (свои палитры, scale2x, посмотреть куда делись скриншоты по F8 + поправить, чтобы новые не пытались поверх старых записываться), но только зря потратил время на сборку. Собрать как положено не получилось. В конечном итого то, что собралось пишет, что нет внешнего ПЗУ =(. Пробовал разные версии minigw-msys, но тщетно. Allegro использовал: allegro-4.4.2-mingw-3.4.5. В конечном итоге более-менее нормально собралось без makefile только в CodeBlocks (для меня там проще указать что и где искать-линковать, с мэикфайлами у меня туговато пока).
Так что инструкция была бы очень кстати.
Где у меня были проблемы при сборке:
Скрытый текст
Код брался вчера с BitBucket, ревизия dc3353428737.
1) gui.c, строка 22 (ILoveSpeccy писал об этом выше):
2) i8080dis.c, строка 163:Код:заменить: #include <korvet.h> на #include "korvet.h"
F:\MiniGW\Korvet\i8080dis.c|163|error: 'mem' undeclared (first use in this function)Код:..... 162 offset&=0xffff; 163 cmd=mem[offset]; .....
Поискал по файлам, больше вообще нигде не объявлен и не упоминается такой массив как mem[]. Не знаю что это такое, закомментировал =)
3) i8080inc.c, строка 31 (самое начало кода в файле):
F:\MiniGW\Korvet\i8080inc.c|31|error: expected identifier or '(' before 'switch'|Код:31 switch(op) { 32 case 0x00: /* nop */ 33 case 0x08: /* undocumented nop */ ..... }
Заглянул в 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 и еще в нескольких местах далее:
obj\Release\i8080dis.o:i8080dis.c|| undefined reference to `GET_BYTE'|Код:..... 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_WORD'|
и т.п.
Где-то я встречал такой метод как GET_BYTE, в каком-то классе работы со строками в другом проекте, в коде эмулятора больше нигде не встретил ни декларации ни самой функции.
Короче, опять комментирую непонятные пока строки с ошибками =)
После этого, собирается без ошибок, но эмулятор настоятельно требует какое-то внешнее ПЗУ, хотя все нужное ему для работы есть в каталоге =)
[свернуть]
Последний раз редактировалось Serebriakov; 23.06.2014 в 17:57.
А комментарии по этим неизвестным массивами-функциям будут (те, что в спойлере) ? =)
Насчет скриншотов. По F8 теперь ведь зум, а не сброс дампа со скриншотом. Вообще, нужно было бы сделать просто сброс скриншота (например, shift+s) без дампа. Ну и хотелось бы отдельную возможность сброса-восстановления (ctrl+s, ctrl+r) дампа памяти на диск (сохранение в играх). Вроде в этом эмуляторе не было реализовано. С каталогам я бы не мудрил, есть простенький алгоритм нахождения последнего файла в папке:
Код немого замусорен и надо бы перевести на чистый C, но идея, думаю, будет ясна. Это кусок из кода дампера, который писал много времени назад, но не дописал. Нужно было для непрерывного режима дампа.Код:// Возвращает имя первого свободного файла // параметр - начало файла например "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; }
P.S. А, да. Забыл. Надо бы пройтись по исходникам и пособирать все changelog'и в один файл. Когда изучал код, насчитал их 3 штуки в разных местах. Для истории надо бы подрихтовать и сделать один полный.
Последний раз редактировалось Serebriakov; 23.06.2014 в 19:09.
пробуйте
вот инструкция
Скрытый текст
Код: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 ----------
я буду этот кусок менять на более новую версию
а по поводу инклуда
инклуды же выполнются до компиляции, просто модифицирую исходник
на то он и ПРЕПРОЦЕССОР
это абсолютно по снандарту
---------- 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 ----------
а, так дампы и скриншоты всю жизнь и были на Alt+F8
а на F8 раньше был FullScreen а теперь ZOOM
Да, в IDE, видимо, нужно еще полазить по настройкам компилера. Да и прагмы подобавлять, т.к. там еще и варнингов много.
По вашему ману - вроде все так и делал, разве что не делал make clean перед make. Попробую сова пособирать через msys.
Однако, что это за такой нигде не объявленный массив mem[offset] (п.2 спойлера) и функции GET_BYTE(), GET_WORD (п.4 спойлера)?
Насчет F8 всегда ориентировался на DOC/read.me:
Про Alt+F8 вообще не знал, думал выкинули функцию.Клавиши управления.
f6 - пока нажата - максимальная скорость
f7 - пока нажата - палитра на экране устанавливается стандартную (дебаг)
f8 - записывает образ памяти (64к) в файл. (дебаг)
f9 - пока нажата - Simple User Menu
f10 - Переключатель между цветным и чернобелым режимом
f11 - Reset
f12 - Выход
Проверил, в старых версиях дампы происходят и по F8 и по ALT+F8. Чудеса =)
Опять же, повторюсь, нужно подрихтовать все changelog'и readme, todo и т.п. и сложить в одну папку.
Ну и хотелось бы отдельные бранчи с экспериментальными функциями вроде сети от forth32 и SDL от ILoveSpeccy, чтобы не потерялись и потом было легче внедрить в основную ветку =) А так же makefile, которым можно собрать любую конфигурацию из любой ветки.
Последний раз редактировалось Serebriakov; 23.06.2014 в 19:42.
о, полезно
эти два файла были неиспользуемые, выкинул
инклуд исправил
репозиторий обновил
---------- Post added at 18:41 ---------- Previous post was at 18:41 ----------
если бы собиралось через make - собралось бы
---------- Post added at 18:43 ---------- Previous post was at 18:41 ----------
а про варнинги, это идея, но пока можно собирать без -Wall
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 поддержку сети допилю
Прошу не забыть про ифдефы для виндузятников, пока код сети не будет портирован на win
Задался вопросом, скажите, а нельзя сделать в эмуляторе абсолютное позиционирование курсора мыши, а не относительное?
Т.е., чтобы курсор эмулятора совпадал с реальным курсором, а не убегал от него?
Поглядел бегло исходники, вроде значение координат и должно быть абсолютным.
Берутся смещения курсора через Allegro и отправляются в эмулятор.
Пожалуй, перепишу себе на листок и разберу все поразрядные операции по шагам,
какой бит куда пихается , т.к. никак не пойму откуда появляется это паразитное смещение курсора.
И еще, планируется ли GUI и если планируется какого плана - рисованный или оконный, например на QT?
Можно было бы тогда отладчик серьезно доработать по удобству.
Сам GUI, как по мне, очень удачно был реализован в каноничной версии VitrualKorvet 0.12(9):
http://soviet-pc.narod.ru/VKorvet0129.zip
Особенно радовала клавиатура, когда не получалось найти бинды к реальной.
А вообще, бинды надо-бы сделать аля DOSBOX, жмем CTRL+F1 и выскакивает:
Только лучше не рисованный, а с VirtualKorvet GUI. Ну или фотку реальной клавиатуры подставить.
P.S. И еще вопрос: косметические патчи со своими свистелками-гуделками в эмулятор принимаются?
Последний раз редактировалось Serebriakov; 26.06.2014 в 01:19.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)