Код брался вчера с 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, в каком-то классе работы со строками в другом проекте, в коде эмулятора больше нигде не встретил ни декларации ни самой функции.
Короче, опять комментирую непонятные пока строки с ошибками =)
После этого, собирается без ошибок, но эмулятор настоятельно требует какое-то внешнее ПЗУ, хотя все нужное ему для работы есть в каталоге =)
[свернуть]