Язык программирования PL/M-80 и его потомки. PL/M-286
Эдуард Пройдаков
1. Различия между языками PL/M-286 и PL/M-86
PL/M-286 отличается от PL/M-86 следующим[3]:
- Переменным типа POINTER и SELECTOR не могут быть присвоены абсолютные значения (т .е. константы).
- С переменной типа POINTER может использоваться только оператор проверки на равенство (=). С переменными типа SELECTOR могут использоваться как логические (AND, OR, NOT, XOR), так и операторы отношений ( < , > , <= , >= , <> , = ).
- Доступ к аппартному флагу регистров обеспечивается через встроенную переменную FLAGS.
- Добавлены четыре встроенных функции для поддержки ввода-вывода блока байтов или слов: BLOCKINPUT, BLOCKINWORD, BLOCKOUTPUT и BLOCKOUTWORD (доступны в PL/M-86 через управляющую директиву MOD 86| MOD 186). Тип переменной STACKBASE изменён с WORD на SELECTOR.
- Новые встроенные процедуры и функции добавлены для поддержки работы в защищённом режиме i286.
- Процедурам с атрибутом Interrupt больше нельзя присваивать номер в исходном тексте программы. Это делается построителем (286 system builder ). Этот тип процедур также не может быть вызван напрямую, поэтому встроенные SET$INTERRUPT и INTERRUPT$PTR удалены.
- Удалена структура, именуемая memory array .
2. Трансляция программ на PL/M-86 компилятором с языка PL/M-286
Программы на PL/M-86, которые корректно работают на микропроцессоре 8086 могут быть перекомпилированы компилятором для PL/M-286, чтобы получить объектный код для микропроцессора 80286.
Исходный текст программы на PL/M-86 должен быть отредактирован следующим образом:
- Назначения встроенной переменной STACKBASE должны быть изменены с WORD на SELECTOR.
- Все назначения абсолютных величин указателям и селекторам должны быть изменены. (Указателям может быть присвоены нулевые значения с помощью новой встроенной функции NIL.) Кроме того, операторы отношений над указателями и велекторами для всех операций, кроме проверки на равенство или неравенство, должны быть изменены.
- Номера прерываний во всех процедурах обработки прерываний должны быть удалены. Вектора прерываний будут этим процедурам назначаться построителем (286 system builder). Прямые вызовы процедур обработки прерываний должны быть изменены.
- Ссылка на переменные SET$INTERRUPT, INTERRUPT$PTR и MEMORY должны быть удалены.
Литература
- Р.Фаулджер. Программирование встроенных микропроцессоров. М .: Мир . 1985. –275 с .
- Intel Corporation 1976. PL/M-80 Programming Manual . Doc # 98-268B.
- PL/M 386 Programmer's Guide, RadiSys Corporation, 07-0710-01, December 1999. –422 pp.
- http://www.unix4fun.org/z80pack/doc_cpm_plm.html .
- PL/M-86 Programming Manual for 8080/85-Based Development Systems. Intel. 1980. Manual Order Number 4800466-03 Rev. C.
Статьи "Язык программирования PL/M-80 и его потомки"
Статья помещена в музей 08.06.2007 года.