Выкладываю свою текущую версию кросс-Паскаля на PC для ZX, а то уже пару людей попросило в личке.
Запуск - project1.exe, после запуска выбрать файл в формате PRG, в котором программа на Паскале. После компиляции образуется файл с ассемблером ASM, можно компилировать и запускать в эмуляторе. Если при компиляции будут ошибки, то отобразятся в файле error.prg.
Паскалевские примеры имеются в файлах PRG.
Оптимизации асмовского кода пока нет, но будет. Уже знаю, как делать.
На данный момент поддерживает:
++++++++++++++++++++++
Типы
----
byte
word
string[N]
Массивы для типов byte и word - одномерные и двумерные, для string - только одномерные:
ArrayByte [...]
ArrayWord [...]
ArrayString [...]
Стандартные операторы
---------------------
:=
Write
Writeln
Read
Readln
If ... then ... else ...
For ... to ... do
While ... do
Repeat ... until
Операторы экрана
----------------
Вывод текста шрифтом 4*8 пикселей, кириллица поддерживается
ClrScr - очистка экрана и установка в нем текущих цветов
GotoXY(Col,Row) - установка курсора в позицию экрана Col,Row (Col=0..63, Row=0..23)
Pause(N) - пауза N/50 секунды
Border(N) - бордюр цветом N
Color(N) - цвет текста и фона (N = байт атрибутов на Спектруме)
Window(Col,Row,Width,Heigth) - очистка окна знакомест и установка в нем текущих цветов
Процедуры
---------
Процедуры без параметров и локальных переменных
Выражения
---------
Целочисленные вычисления в диапазоне 0..65535
Приоритет операций учитывается
Для типа string только операция конкатенации +
Для типов byte и word:
+
-
*
div
mod
(
)
=
>
>=
<
<=
<>
Планируется:
+++++++++
Опции
-----
Текст с атрибутами
Окна с атрибутами
Спрайты с атрибутами
Спрайты карты с атрибутами
Проверка границ экрана при выводе спрайтов
Проверка максимальной длины строк
Данные
------
map
- width_map
- height_map
- size_cell_map
- value_elements_map
- sprites_map
- array_map[NN,NN]
sprite
- value_tile_sprite
- x_sprite
- y_sprite
- attr_sprite
- data_sprite
Типы
----
byte
word
char
string[SS]
array[NN,NN] of byte
array[NN,NN] of word
array[NN] of string[SS]
Стандартные операторы
---------------------
:=
Write
Writeln
Read
Readln
If ... then ... else ...
For ... to (downto) ... do
While ... do
Repeat ... until
Case ... of
Delay
Randomize
Процедуры
---------
Процедуры без параметров и локальных переменных
Функции
-------
Readkey
Random(max)
Экран
-----
ClrScr
GotoXY(x_tile,y_tile)
TextColor(attr)
TextBackGround(attr)
Border(color)
Color(attr)
ScrToVirt
VirtToScr
Окна
----
WindowSet(x_tile,y_tile,width_tile,height_tile)
WindowClear
WindowScrollUp
WindowScrollDown
WindowScrollLeft
WindowScrollRight
WindowThaw
Get(x_tile,y_tile,width_tile,heigth_tile)
Put(x_tile,y_tile)
Звук
----
Beep(note,time)
SoundEffect(n_loop,time,frequency)
Спрайты
-------
PutSprite(name_sprite,x_tile,y_tile)
PutSpriteMirrorX(name_sprite,x_tile,y_tile)
PutSpriteMirrorY(name_sprite,x_tile,y_tile)
PutSpriteMirrorXY(name_sprite,x_tile,y_tile)
Карта
-----
MapPut(x_map,y_map,width_map,height_map)
MapSearchElement(ID_element,x_map,y_map,distance_m ap)
MapArrayToMap(name_array_byte)
Выражения
---------
+
-
*
div
mod
(
)
=
>
>=
<
<=
<>
and
or
xor
not




Ответить с цитированием