Компилятор PL/M для Intel 8080

8-битные микроконтроллеры и микропроцессоры от Intel и их клоны, а также компьютеры на них построенные

Moderator: Shaos

begoon
Maniac
Posts: 204
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

Компилятор PL/M для Intel 8080

Post by begoon »

Язык С в целом хорош даже для самых простых процессоров, например PIC12. Но, увы, Intel 8080 крайне недружелюбен для работы с указателями, а в С это основа. PL/M-80 же создавался специально для этого случая, и семантика работы с памятью в нем удачно совпадает с тем, что умеет Intel 8080, что позволяет генерировать достаточно хороший код.

Поэтому, я написал компилятор по родным спекам Intel и IBM. Целевая платформа у меня Радио-86РК, но для других машин на i8080 должно тоже получаться.

Итак...

Имеем программу "test.plm":

Code: Select all

PUTS:  PROCEDURE (P)  REGS(HL) AT (0F818H); DECLARE P ADDRESS; END PUTS;
PUTC:  PROCEDURE (CH) REGS(C)  AT (0F809H); DECLARE CH BYTE;   END PUTC;
HEXB:  PROCEDURE (B)  REGS(A)  AT (0F815H); DECLARE B BYTE;    END HEXB;

DECLARE HELLO     BYTE(24) INITIAL('PL/M-80 COMPILER HERE', 0DH, 0AH, 0);
DECLARE SUM_LABEL BYTE(16) INITIAL('SUM (0..10) = ', 0);
DECLARE CRLF      BYTE(3)  INITIAL(0DH, 0AH, 0);

DECLARE I   BYTE;
DECLARE SUM BYTE;

CALL PUTS(.HELLO);

I   = 0;
SUM = 0;
DO WHILE I <= 10;
    CALL HEXB(I);
    CALL PUTC(20H);
    SUM = SUM + I;
    I = I + 1;
END;

CALL PUTS(.CRLF);
CALL PUTS(.SUM_LABEL);
CALL HEXB(SUM);
CALL PUTS(.CRLF);
Компилируем

Code: Select all

npx plm80 test.plm --org 0 --stack 76CFh -o test.asm
Получаем "test.asm":

Code: Select all

; generated by plm-80
puts equ 0F818h
putc equ 0F809h
hexb equ 0F815h

    org  0000h
start:
    lxi  sp, 76CFh
    lxi  h, hello
    call puts
    mvi  a, 00h
    sta  i
    mvi  a, 00h
    sta  sum
L1_while:
    mvi  a, 0Ah
    push psw
    lda  i
    mov  b, a
    pop  psw
    cmp  b
    jnc   L3_ctrue
    xra  a
    jmp  L4_cend
L3_ctrue:
    mvi  a, 0FFh
L4_cend:
    ora  a
    jz   L2_endw
    lda  i
    call hexb
    mvi  a, 20h
    mov  c, a
    call putc
    lda  sum
    push psw
    lda  i
    mov  b, a
    pop  psw
    add  b
    sta  sum
    lda  i
    push psw
    mvi  a, 01h
    mov  b, a
    pop  psw
    add  b
    sta  i
    jmp  L1_while
L2_endw:
    lxi  h, crlf
    call puts
    lxi  h, sum_label
    call puts
    lda  sum
    call hexb
    lxi  h, crlf
    call puts
    hlt

; --- data ---
hello: db "PL/M-80 COMPILER HERE", 0Dh, 0Ah, 00h
sum_label: db "SUM (0..10) = ", 00h
    ds 1
crlf: db 0Dh, 0Ah, 00h
i: ds 1
sum: ds 1
    end
Ассемблируем:

Code: Select all

npx asm8080 test.asm
и получаем "test.bin"

Запускаем в эмуляторе Радио-86РК

Code: Select all

npx rk86 test.bin --exit-halt
и получаем
plm.png
Репозиторий - https://github.com/begoon/plm80

Я поддержал практически все более менее официальныe возможности PL/M.
You do not have the required permissions to view the files attached to this post.
Last edited by begoon on 18 Apr 2026 10:04, edited 1 time in total.
newold86
Devil
Posts: 748
Joined: 30 Nov 2013 11:08
Location: WWW

Re: Компилятор PL/M для Intel 8080

Post by newold86 »

Обалдеть - всегда завидовал людям, которые между делом могут подобные вещи написать…
User avatar
Lavr
Supreme God
Posts: 16986
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Компилятор PL/M для Intel 8080

Post by Lavr »

begoon wrote: 17 Apr 2026 07:50Поэтому, я написал компилятор по родным спекам Intel и IBM. Целевая платформа у меня Радио-86РК, но для других машин на i8080 должно тоже получаться.
Вобще-то "Компилятор PL/M для Intel 8080" давным-давно официально существует, мы его на форуме обсуждали и пытались кодить на нём.

Image

http://www.nedopc.org/forum/viewtopic.php?p=152858#p152858

Я лично никаких преимуществ PL/M для Intel 8080 перед ассемблером тогда не ощутил... :-?


P.S. Если Вы собираетесь ещё и "компилятор С для Intel 8080" между делом написать, то на форуме здесь есть исходники "Best C"... :wink:
iLavr
imsushka
Doomed
Posts: 387
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: Компилятор PL/M для Intel 8080

Post by imsushka »

пришел лавр и все обосрал

не все люди могут держать в памяти большой асм проект
некоторым проше на яву
User avatar
Lavr
Supreme God
Posts: 16986
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Компилятор PL/M для Intel 8080

Post by Lavr »

imsushka wrote: 17 Apr 2026 23:38пришел лавр и все обосрал
Вообще говоря, в данный момент "обосрал" всю ветку ты, хамло трамвайное, своей хамской лексикой.
А я лишь указал на существование компилятора PL/M - не все люди, как я вижу, внимательно читают форум.

imsushka wrote: 17 Apr 2026 23:38не все люди могут держать в памяти большой асм проект
Ну если это проблемы с собственной памятью отдельных людей, то могу порекомендовать глицин и другие ноотропные препараты. :wink:

А если это неумение эффективно программировать на ассемблере, то могу посоветовать соответствующую литературу:
Элфринг Г. Программирование на языке ассемблера для микроЭВМ. Издательство: Радио и связь Год: 1987 Страниц: 170.
Л. Левенталь, У. Сэйвилл Программирование на языке ассемблера для микропроцессоров 8080 и 8085. Перевод с английского А.А. Батнера. Москва: Издательство «Радио и связь», 1987 Страниц: 448.

Модульное программирование, программирование сверху-вниз, не слышал? :roll:

imsushka wrote: 17 Apr 2026 23:38некоторым проше на яву
"проше" пани... :mrgreen: Читай и поработай над речью: хамство и безграмотность не украшает ни тебя, ни этот форум! :-?
iLavr
begoon
Maniac
Posts: 204
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

Re: Компилятор PL/M для Intel 8080

Post by begoon »

Если Вы собираетесь ещё и "компилятор С для Intel 8080" между делом написать, то на форуме здесь есть исходники "Best C"...
А я таки думал про С перед написанием PL/M, но компилятор С, чтобы там не говорили, раза в два будет сложнее, ибо уж если делать, то надо более менее поддержать:

- препроцессор (без этого С не С)
- как минимум типы char, short and int, а еще б нестандартные типа byte и bit
- структуры и union'ы
- массивы (а синтаксис и семантика многомерных массивов и указателей в С -- это непросто)
- и пр.

На тему Best-C и пр. Увы, многий софт из 80-90х, который портировали с CP/M или DOS -- это нереальный головняк в сборке хаченых-перехаченых исходников на С. Зачем, когда на Typescript все в 10 раз компактнее. А в общем масштабе софта i8080, где все, относительно нынешних понятий об объемах, имеет просто микроскопический размер, нет особой необходимости в СКОРОСТИ, чтобы писать компилятор на Go, Zig и пр. Можно, но ни разу не нужно.

Я поэтому и пишу именно на Javascript/Typescript, чтобы не возиться с памятью, файлами, сборкой и пр.

Когда-то я сомневался, стоит ли мне велосипедить еще один ассемблер для i8080, но сейчас я уверен, что это было одно из радикально стоящих решений, которое забустило мне новую волну продуктированого интереса в i8080 и РК.
Mondx
Doomed
Posts: 652
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: Компилятор PL/M для Intel 8080

Post by Mondx »

begoon wrote: 18 Apr 2026 10:02 На тему Best-C и пр. Увы, многий софт из 80-90х, который портировали с CP/M или DOS -- это нереальный головняк в сборке хаченых-перехаченых исходников на С.
А c8080 Морозова?
Всегда!
begoon
Maniac
Posts: 204
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

Re: Компилятор PL/M для Intel 8080

Post by begoon »

Да, выглядит современно - https://github.com/alemorf/c8080, но собирать его я сам не пробовал.

Мои тулзы собирать не надо :-)
User avatar
Lavr
Supreme God
Posts: 16986
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Компилятор PL/M для Intel 8080

Post by Lavr »

begoon wrote: 18 Apr 2026 10:02На тему Best-C и пр. Увы, многий софт из 80-90х, который портировали с CP/M или DOS -- это нереальный головняк в сборке хаченых-перехаченых исходников на С.
Не могу с вами согласиться, ибо в этом вопросе вы совершенно не правы!

Best-C - это оригинальный проект, написанный как раз под "Радио-86РК" и не является чем-то "хаченым-перехаченым".
Я присутствовал на презентации автором этого проекта, хотя он и помоложе меня зело.

Я так думаю, что и вы не на ровном месте программистом стали, а как раз на основе различных "хаченых-перехаченых исходников" начиная с того же самого "Радио-86РК".
iLavr
begoon
Maniac
Posts: 204
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

Re: Компилятор PL/M для Intel 8080

Post by begoon »

Документация по c8080, если кому интересно.
begoon
Maniac
Posts: 204
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

Re: Компилятор PL/M для Intel 8080

Post by begoon »

Снова на тему Best-C. По файлам, что я нашел тут на форуме -- это ж компилятор, который сам работает на РК?

По мне, кросс-компиляция для i8080 в наши дни (как и редактирование исходника, сборка и пр.) несравнимо удобнее.

Нет, конечно были времена, когда приходилось все делать на самом РК, но сейчас то зачем?

К тому же, как я понял, нет официальных исходников Best C. Разве что есть очень качественный реверс от Lavr, но все равно - это ж реверс. Да и компилятор С, написаный на i8080? Как его модифицировать-то?
Mondx
Doomed
Posts: 652
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: Компилятор PL/M для Intel 8080

Post by Mondx »

begoon wrote: 19 Apr 2026 01:56 Документация по c8080, если кому интересно.
Как я понимаю, благодаря С-- результирующий двоичный файл получается 1 в 1 с ассемблерным. См. micro80.с.
Класс конечно. Но это уже свой С(.
Всегда!
aviator
Doomed
Posts: 493
Joined: 10 Dec 2008 08:39
Location: Стокгольм, Швеция

Re: Компилятор PL/M для Intel 8080

Post by aviator »

Всегда считал, что компиляторы PL/M для 8080 и Z80 были написаны давным-давно, самим Гэри Килделлом. Он же ж вроде PL/M и придумал, как таковой. CP/M точно на этом языке и написана.
С уважением, Сергей.
begoon
Maniac
Posts: 204
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

Re: Компилятор PL/M для Intel 8080

Post by begoon »

Ну язык С тоже кто-то когда-то придумал. Это ж не означает, что сегодня все должны пользоваться ОРИГИНАЛОМ из 70-х.
Mondx
Doomed
Posts: 652
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: Компилятор PL/M для Intel 8080

Post by Mondx »

Да, понятно, кто то, когда то, придумал. А затем он получил развитие. И в итоге получилось его применение во всех отраслях.
И всем же понятна в чём фишка Си? В переносимости, в первую очередь. С одной архитектуры на другую.
А какая переносимость у PL/M? Насколько он развит? Какое у него кол-во стандартных библиотек? Кто на нём пишет? Какой комьюнити у него?
Ответ. Он же для старпёров только, которые тащатся на древности, не так ли?