Наконец, дописал некоторые функции и немного намарафетил свой модуль. Написан по описанию компилятора ZX Like Pascal версии 0.908. zxpas-v0.908.rar
Модуль сделан на Delphi 4.
Имеющиеся несоответствия описаны в самом начале модуля.
- Не реализованы функции write, writeln, read, readln. При их использовании происходит ввод-вывод через консоль и необходима директива компилятора {$APPTYPE CONSOLE}.
- Плохо реализована функция очистки массива. Скорее всего, будет нормально очищать одномерный массив и первую строку двумерного массива.
- Функция SoundEffect выдаёт немного более быстрый звук, чем получается на эмуляторе. Возможно, это связано с тем, что я не учитываю остановки процессора (wait). Так же, продолжительность одного эффекта ограничивается 10 секундами. По алгоритму максимальная длительность звукового эффекта может превышать 10 минут.
Реализованы дополнительные функции, отсутствующие в ZX Like Pascal:
-function ZXInitialized:boolean; // Возвращает true, если графическое окно создано и можно выводить графику.
-procedure TextOut(x,y:word;text:string); // Вывод текста по указанным координатам знакоместа.
-procedure PutPixel(x,y,e:word); // Установка точки по координатам X,Y. E=0 бит сбрасывается, E=1 бит устанавливается.
-procedure Line(x1,y1,x2,y2:word); // Рисование линии от X1,Y1 до X2,Y2. Биты всегда устанавливаются.
-procedure ReadMouse(var x,y,b:word); // Возвращает координаты мыши 0<=X<=255, 0<=Y<=191 и нажатые кнопки в виде 00000MRL.
Так же, в архиве программа, использующая данный модуль и скомпилированный исполняемый файл для windows.
Коротко принцип работы.
Для работы используются 2 массива по 6912 байт, соответствующие экрану настоящего Spectrum. Один является аналогом реального экрана, второй аналог виртуального экрана и все графические функции работают в соответствии с принципами Spectrum.
При инициализации модуля запоминаются режимы работы, которые должны соответствовать установленным галкам компилятора ZX Like Pascal. Так же, запускается вспомогательный поток, в котором создаётся окно и таймер, срабатывающий каждые 32 мс.
По сообщению от таймера происходит преобразование массива с реальным экраном spectrum в windows bitmap, который, затем, отображается на экране.




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 

Работает, правда, всё это очень медленно, но мы и над этим когда-нибудь поработаем 
