Здравствуйте, друзья!

Чтобы не быть голословным, предлагаю Вашему вниманию Сниппеты кода, где явно видно необычное применение PL65.

1) В PL65 существуют Абсолютные как в ассемблере целые переменные
Код:
BYTE NMIEN=$D40E ! Определение Абсолютного целого
...
NMIEN=$C0         ! Присваивание этому абсолютному адресу значения
2) А вот, следующий код демонстрирует поведение PL65 очень похожее на стэковый язык Форт.
Код:
PROC POS(INT col=$55 BYTE row=$54)
BEGIN END
Я имею ввиду, что данные на стэке, полученные из формальных параметров,
которые типизируются прямо в списке формальных параметров как абсолютные целые,
как в форте сразу же из стэка поступают в необходимые ячейки памяти.
Больше ничего делать программе не нужно.

3) А вот этот код по поведению похож на форму Лиспа LAMBDA, где Лямбда это определение функции,
которое может и существовать и вычисляться отдельно от объявления, даже без имени ...
Код:
PROC WRTSTR(INT addr,len) FORWARD ! Это объявление процедуры
...
BODY WRTSTR                          ! А это её определение (что, собственно, она делает) ...
BEGIN                                 ! Как видите, не заданы ранее описанные параметры
  PCHAR(0,addr,len)                 ! Вызов библиотечной процедуры
END
4) ... и даже быть аргументом другой функции ...
Я имею ввиду здесь, что арументы из ранее описанной процедуры POS, при таком её вызове,
не стягиваются со стэка, а напрямую передаются в процедуру PLOT, что экономит машинное время,
затрачиваемое обычно на подготовку стэка для любой процедуры.
Код:
PROC PLOT(PROC POS) ! Earlier defined...
BEGIN PUT(6,color) END
5) А это ПРИМАТИВНАЯ(со звёздочкой), от слова Примат, то есть ПРЕДПОЧИТАЕМАЯ,
процедура на встроенном ассемблере.
Это означает, что PL65, убирает прочь свои руки от ассемблирования.
Это просто библиотечная процедура CIO.
Разница с ассемблером в том, что PL65 использует свой собственный программный стэк,
в отличие от аппаратного стэка процессора, применяя свою собственную
внутреннюю переменную STACK и что регистр процессора X используется в PL65 только
для обслуживания программного стэка, а значит до его использования должен быть сохранён
во встроенной переменной XSAVE и после его использования, восстановлен из этой переменной.
Код:
PROC CIO*(BYTE iocb BYTE com INT addr,len)
BEGIN
 LDA STACK+6,X
 ASLA ASLA ASLA ASLA
 TAY 
 LDA STACK+4,X STA ICCOM,Y
 LDA STACK+2,X STA ICBAL,Y
 LDA STACK+3,X STA ICBAH,Y
 LDA STACK,X   STA ICBLL,Y
 LDA STACK+1,X STA ICBLH,Y
 TXA CLC
 ADC #8 STA XSAVE
 TYA TAX 
 LDA OCHAR
 JSR $E456 BMI ioerr
 LDX XSAVE RETURN
:ioerr LDX XSAVE
 DEX DEX TYA
 STA STACK,X
 LDA #0 STA STACK+1,X
 ERROR*()
 WRTSTR("Error ")
 WRITE(ERRNUM)
END
6) Из Бейсика в PL65 сохранены операторы DATA, TRAP NOTRAP ON GOTO.
Как Вы понимаете, я например могу использовать DATA задаваемые в Бейсике
как инлайн код в PL65, задавая таким образом, например шрифт
или сассемблированный код Бейсика, применив лишь незначительные изменения.
заменяя лишь PLA на PULL и PHA на PUSH.

Ну, что? Нравится ?..
ez

PS Я, кстати, добавил ещё видео
https://www.youtube.com/watch?v=NlBwBybF9Us