…Если кому интересно вот вид примеров-программ адаптированных под мою среду. Эти примеры из уроков к LvivStudio. Спасибо автору за то, что он есть! И примеры к LvivStudio тоже…
Думаю, что компилятор создать для подобных (по сложности структуры) программ, сложностей особых не будет представлять, тем более Дельфи своей проверкой перед компилированием моим компилятором, мне поможет..
Да и структура Паскаля, я думаю такая, что ее проще компилировать, чем асм…
Команды переходов процссесора КР580 я думаю реализовывать не стоит, а постепенно переходить на вид типа «If FlagZ=False then goto m32788; // JNZ ADR | Переход при Z=0», т.е. переходить на аналоги JNZ и т.п. ,все приближая среду к языку высокого уровня… компилятор я думаю, кодить такое научим…
Вот первые три примера работают правильно, «застрял» на «//Урок 5. Стек. Сравнения. Стартовое поле.» которая работает неправильно по сравнению с другими эмуляторами.
Code:
// Урок ??1 или ???2
Label m32788,m32798;
BEGIN
MVIA(0);
out_($c2);
//MVIA(35);
//STA 0BE38h ;32774
//CALL 0EBBCh – не реализовано
LXIH($5010);
LXID(63);
MVIA(8);
m32788: MVIM(255);
INXH;
MVIM(255);
DADD;
DCRA;
If FlagZ=False then goto m32788; // JNZ ADR | ! Переход при Z=0
m32798: goto m32798;
END.
Code:
//Урок 3. Метки. Переменные. Процедуры. (PCStudio)
Procedure draw;
Label draw_cycle;
begin
LXID(63);
MVIA(8);
draw_cycle:
MOVMB;
INXH;
MOVMB;
DADD;
DCRA;
If FlagZ=False then goto draw_cycle; // JNZ ADR | ! Переход при Z=0
end;
Label main_cycle;
Var BORDER:Word;
BEGIN
//SetRegisterWiew(false); // вывод регистров после каждой команды
BORDER:=$0BE38;
MVIA(0);
out_($c2);
MVIA(0);
STA(BORDER);
//CALL 0EBBCh ; Clear screen - не реализовано
MVIB(255);
LXIH($5001);
draw;
MVIB(15);
LXIH($5007);
draw;
MVIB(240);
LXIH($500D);
draw;
main_cycle: goto main_cycle;
END.
Code:
//Урок 4. Игровое поле. Математические операции.
Procedure draw;
Label draw_cycle;
begin
MOVAL;
RLC;
MOVLA;
MOVAH;
RLC;
MOVHA;
MVIA(64);
ADDH;
MOVHA;
LXID(63);
MVIA(8);
draw_cycle:
MOVMB;
INXH;
MOVMB;
DADD;
DCRA;
If FlagZ=False then goto draw_cycle; // JNZ ADR | ! Переход при Z=0
end;
Label main_cycle;
Var BORDER:Word;
BEGIN
//SetRegisterWiew(false); // вывод регистров после каждой команды
BORDER:=$0BE38;
MVIA(0);
out_($c2);
MVIA(0);
STA(BORDER);
//CALL 0EBBCh ; Clear screen - не реализовано
MVIB(255);
LXIH($5001);
MVIH(0);
MVIL(0);
draw;
MVIB(15);
MVIH(1);
MVIL(1);
draw;
MVIB(240);
MVIH(2);
MVIL(2);
draw;
main_cycle: goto main_cycle;
END.
Вот эта прога-пример работает неправильно!( см.ниже)
Code:
//Урок 5. Стек. Сравнения. Стартовое поле.
Procedure draw;
Label draw_cycle;
begin
MVIA(0);
OUT_($C2);
DCRL;
DCRH;
MOVAL;
RLC;
MOVLA;
MOVAH;
RLC;
MOVHA;
MVIA(64);
ADDH;
MOVHA;
LXID(63);
MVIA(8);
draw_cycle:
MOVMB;
INXH;
MOVMB;
DADD;
DCRA;
If FlagZ=False then goto draw_cycle; // JNZ ADR | ! Переход при Z=0
MVIA(2);//
OUT_($C2);
end;
/// НАЧАЛО ОСНОВНОЙ ПРОГРАММЫ
Label init1,init2,init_put127,init3,init5,init4,main_cycle;
BEGIN
//SetRegisterWiew(false); // вывод регистров после каждой команды
MVIH(33);
init1:
MVIL(33);
init2: PUSHH;
MOVAL;
CPI(0);
If FlagZ=True then goto init_put127;
CPI(33);
If FlagZ=True then goto init_put127;
MOVAH;
CPI(0);
If FlagZ=True then goto init_put127;
CPI(33);
If FlagZ=True then goto init_put127;
goto init3;
init_put127:
MVIM(127);
goto init4;
init3:
MVIB(15);
MOVAL;
CPI(3);
If FlagS=True then goto init5; // JM ADR | ! Переход при S=1
CPI(31);
If FlagS=False then goto init5; // JP ADR | ! Переход при S=0
MOVAH;
CPI(3);
If FlagS=True then goto init5; // JM ADR | ! Переход при S=1
CPI(31);
If FlagS=False then goto init5; // JP ADR | ! Переход при S=0
MVIB(0);
init5:
MOVMB;
draw;
init4: POPH;
DCRL;
If FlagS=False then goto init2; // JP ADR | ! Переход при S=0
DCRH;
If FlagS=False then goto init1; // JP ADR | ! Переход при S=0
main_cycle: goto main_cycle;
END.
Все примеры с форума
http://www.old-games.ru/forum/showthrea ... d4&t=50209
Для некоторых:не шаришь ты
liberation, весь смак работы в такой среде, даже мнемо командами асм КР580...
... раз ты "котил бочку" на мою еще не выпущенную среду, то я видимо, в нее впишу так :
If детект liberation
then выход и самоуничтожение и без разговоров