в КТДП - явно указано жёлтый
Вложение 48356
Вид для печати
в КТДП - явно указано жёлтый
Вложение 48356
версия из репозитория теперь собирается 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, в каком-то классе работы со строками в другом проекте, в коде эмулятора больше нигде не встретил ни декларации ни самой функции.
Короче, опять комментирую непонятные пока строки с ошибками =)
После этого, собирается без ошибок, но эмулятор настоятельно требует какое-то внешнее ПЗУ, хотя все нужное ему для работы есть в каталоге =)
[свернуть]
А комментарии по этим неизвестным массивами-функциям будут (те, что в спойлере) ? =)
Насчет скриншотов. По 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 штуки в разных местах. Для истории надо бы подрихтовать и сделать один полный.
пробуйте
вот инструкция
Скрытый текст
Код: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, которым можно собрать любую конфигурацию из любой ветки.
о, полезно
эти два файла были неиспользуемые, выкинул ;)
инклуд исправил
репозиторий обновил
---------- 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):
https://dl.dropboxusercontent.com/u/...tualKorvet.png
http://soviet-pc.narod.ru/VKorvet0129.zip
Особенно радовала клавиатура, когда не получалось найти бинды к реальной.
А вообще, бинды надо-бы сделать аля DOSBOX, жмем CTRL+F1 и выскакивает:
https://dl.dropboxusercontent.com/u/...vet/DosBox.png
Только лучше не рисованный, а с VirtualKorvet GUI. Ну или фотку реальной клавиатуры подставить.
P.S. И еще вопрос: косметические патчи со своими свистелками-гуделками в эмулятор принимаются? :)