User Tag List

Показано с 1 по 10 из 26

Тема: Старый-Новый Язык Noahsoft PL65

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    26.02.2011
    Адрес
    Москва
    Сообщений
    258
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    25
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Ещё о PL65

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

    Чтобы не быть голословным, предлагаю Вашему вниманию Сниппеты кода, где явно видно необычное применение 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
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    19.06.2014
    Адрес
    г. Харьков, Украина
    Сообщений
    731
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    15 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ezswift Посмотреть сообщение
    А вот этот код по поведению похож на форму Лиспа LAMBDA, где Лямбда это определение функции,
    которое может и существовать и вычисляться отдельно от объявления, даже без имени ...
    это обычное forward определение функции, лямба чуть другое

    var fn = (msg:string) => console.log(msg)
    или так
    arr.foreach(msg => confole.log(msg))
    или совсем так
    function getAdder (secondArg:number) { return (firstArg: number) => firstArg + secondArg };

    у них есть приколы с замыканием

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. ПК8000 - Софт: Старый и Новый
    от ivagor в разделе ПК8000
    Ответов: 344
    Последнее: 08.11.2025, 06:55
  2. Новый старый ZX-Next: сборка, тестирование, производство.
    от ZXFanat в разделе Несортированное железо
    Ответов: 51
    Последнее: 01.10.2011, 08:41
  3. про новый-старый спектрум
    от xailar в разделе ZX Концепции
    Ответов: 3
    Последнее: 06.12.2010, 10:42

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •