SEFA08
Program\LTVtoArray\LTVtoArray.dpr
Створена програма, яка створює масив Prg:array[0.. ..] of byte=( ..., ..., ... ...); з файлу LTV, який можна використовувати в коді для завантаження програм в емулятор.
Для роботи програми, необхідно в перших строках програми, вказати LTV-файл та файл для збереження результату. Звісно LTV-файл повинен бути в тому ж каталозі, що й програма LTVtoArray, файл результату створюється теж в тому ж каталозі.
NameFromFile='1.LVT';
NameToFile='Res.txt';
Приклад результату роботи програми дів. Program\Emulator\uEmulator_Game_Aerocobra_LVT.pas.
Над даною програмою я сильно не заморочувся.
Все просто та зрозуміло.
В файлах Stub.pas, які для "згладжування" різниць між різними середовищами. Cтворені функції по обробці клавіш keypressed, readkey.
Delphi7\Stub.pas:
{unit Crt;}
function keypressed:boolean;begin end;
function readkey : char;begin end;
FPC\Stub.pas:
{unit Crt;}
function keypressed:boolean;begin keypressed:=WinCrt.keypressed;end;
function readkey:char;begin readkey:=WinCrt.readkey;end;
PascalGUI\Stub.pas:
{unit Crt;}
function keypressed:boolean;begin keypressed:=Crt.keypressed;end;
function readkey:char;begin readkey:=Crt.readkey;end;
Як видно, вище написаного, для того, щоб працювала клавіатура в FPC, потрібно підключати модуль WinCrt, а в PascalGUI, - Crt. Для Дельфі-форми поки “заглушка”. Обробка клавіш в Дельфі-форма поки не реалізована. Відповідно в Delphi7.dpr, компіляція для режиму Дельфі-форми закоментована ось так:
//{Компіляція та запуск в формі-Delphi}begin ModeStartDE:=4;{4- DELPHI (7) (Форма)} INITuFORM;StartProgram; end;
Увага!
TestForMOB.bat тепер можна використовуватись лише для перевірки компіляції та запуску програми. Клавіатура працювати не буде, так як TestForMOB.bat компілює для мобільного та для функцій keypressed та readkey використовує модуль Crt, а не WinCrt. Якщо виправити “Crt” на “WinCrt” то PascalGUI компілювати не буде!
Гра “Аерокобра” та управління клавішами в грі.
Нда.
З приводу управління клавіатурою все гірше ніж я думав. Обробку подвійних та потрійних і.д. натиснень на клавіші обробляти в FPC та PascalGUI не можливо. В усякому разі, використовуючи функції keypressed та readkey. Інші способи, я просто не знаю. Можу повірити, що в FPC(для комп'ютера) є такі способи, а от в PascalGUI (для мобільного), - складно повірити! А саме для мене, особлива важливість, все таки, якби було для PascalGUI (для мобільного).
Простою мовою кажучи, більшість іграшок для ПК-01, особливо, ті, які динамічні, де не можна обійтись без подвійних та потрійних і.д. натиснень на клавіші, не варто пробувати для PascalGUI (для мобільного).
Моя ця проба, іграшки “Аерокобра” для PascalGUI (для мобільного), це явно доводить!
Ще, окрім, проблеми обробки подвійних та потрійних і.д. натиснень на клавіші, є обробка натиснень на клавішу з явною затримкою! Довге натиснення на одну клавішу, (на віртуальній клавіатурі) обробляється як разове, “короткочасне”. На заміну довгого натиснення, потрібно клацати декілька раз, натискую та відпускаючи клавішу (на віртуальній клавіатурі). На фізичній клавіатурі, не на багато й краще, хоча довге натискання на клавішу, й обробляється, але з запізненням.
Як працює програма.
Після запуску програми, запускається процедура StartEmulator; модуля Program\Emulator\uEmulator_Main.pas.
Далі відбувається запуск процедури InitCompLV, де ініціалізується графіка, встановлюється необхідний Zoom-екрану, в залежності від середовища запуску (FPC чи PascalGUI). До речі, в FPC запускається ZoomX:=1; ZoomY:=1; на відміну від PascalGUI, в якому ZoomY:=2; ZoomX:=2;, бо в FPC “двійний” режим відео, наче щось якось торможено працює.
Далі ResetComp, - ініціалізація самого ПК-01.
8080_do_opcodes(11000000), - швидка прокрутка заставки “ПК-01”.
Далі в процедурі StartEmulator;, після InitCompLV, запускається CopyGameToMemLV;, яка робить копіювання гри “Аерокобра” з масиву Prg, модуля Program\Emulator\uEmulator_Game_Aerocobra_LVT.pas, в пам'ять ПК-01 та запускає гру“Аерокобра”.
Далі, i8080_do_opcodes(3000000); - прокрутка заставки “Аерокобра”.
Далі, в залежності від середовища встановлюється затримка DelayLV, в FPC, дорівнює 20, в PascalGUI, чомусь треба встановлювати, - 50. Затримка регулювалась “на око”, тобто майже взагалі не регулювалась, тим паче не тестувалась.
Ну й далі запуск самого ядра емулятора WorkEmulator;, - опис в вихідному модулю, в процедурі.
Також, опис KeyboardProcessing;, в вихідному модулю, в процедурі.
В FPC, - управління, клавішами “стрілки”, стріляти, - будь-яка інша клавіша.
PascalGUI, - на фізичній клавіатурі, клавішами “стрілки”, стріляти, - будь-яка інша клавіша,
в віртуальній клавіатурі (рекомендується вибрати клавіатуру таку як на скрині):
“9” - праворуч, “5”- угору, “7” —ліворуч, “8”- униз, будь-яка інша, - стріляти.
При бажанні не складно переробити на інші клавіші, немало кодів клавіш, відповідає, кодам клавіш TurboPascal. Та й я думаю, опис кодів клавіш й для FPC існує, але поки так глибоко це питання не вивчав.
Ще раз підкреслю, нічого толком не регулювалась, зроблене “на око”, тому при бажанні експериментуйте та перевіряйте.
Плани та перспективи.
Ну по-перше, клавіатуру треба усю та усюди, тобто в усіх режимах, реалізувати. Це робота досить кропітка. Тому, найближчий час, нових версій “SEFA”, не очікуйте. Я думаю, вже не мало чого зроблено, для того, щоб можна було цим усім “забавлятись”, експериментувати з цим усім і т.д.
Attachment:
_SEFA08.7z [53.31 KiB]
Downloaded 542 times