nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 16 Apr 2024 11:57



Reply to topic  [ 5 posts ] 
PL/M 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Попробовал я тут немного взглянуть, какой код делает этот самый PL/M для i8080,
и был я несколько обескуражен, если не сказать разочарован... :-?

Простой код на PL/M был вот такой:
Code:
declare houk address; /* двухбайтовая переменная */
declare aat based houk byte;  /* однобайтовая переменная по адресу houk */

/* очистка области */
/* от 4000h ... 5000h*/
do houk=16384 to 20480;
 aat=0;
end;

Если писать вручную на ассемблере, я бы, пожалуй, сделал это вот так:
Code:
    LXI  H,4000h
    LXI  B,5000h-4000h-1
MT:
    MVI  M,00H
    INX  H
    DCX  B
    MOV  A,B
    ORA  C
    JNZ  MT
    HLT

Ну или проверял бы достижение HL адреса 5000h...

Но PL/M сгенерировал код весьма задумчивый... :-?
Code:
0000 JMP  0003

0003 LXI  SP,00FC

0006 LXI  H,00FC
0009 MVI  M,00H
000B INX  H ; FD
000C MVI  M,40H

000E XRA  A
000F MVI  B,50H
0011 LXI  H,00FC
0014 SUB  M
0015 INR  L
0016 MOV  C,A
0017 MOV  A,B
0018 SBB  M
0019 JC   0031
001C LHLD 00FC
001F MVI  M,00H
0021 LXI  H,00FC
0024 MOV  C,M
0025 INR  L
0026 MOV  B,M
0027 LXI  H,0001
002A DAD  B
002B SHLD 00FC
002E JMP  000E

0031 EI
0032 HLT

_________________
iLavr


29 Nov 2019 09:37
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Lavr wrote:
Если писать вручную на ассемблере, я бы, пожалуй, сделал это вот так:
Code:
LXI  B,5000h-4000h-1
Отнимать 1 не надо.
Lavr wrote:
PL/M сгенерировал код весьма задумчивый
А у меня получилось, с учётом, что код от ЯВУ, вполне прилично.
Code:
        EXTRN   LIBSUB, EXIT

        LD      HL,4000H
        LD      (ADDR),HL
       
LOOP:   LD      A,0
        LD      HL,(ADDR)
        LD      (HL),A
       
        LD      HL,(ADDR)
        INC     HL
        LD      (ADDR),HL
       
        EX      DE,HL
        LD      HL,5000H
        CALL    LIBSUB          ; возвр A=255 если HL>DE или 0
        RRC
        JP      NC,EXIT
       
        JP      LOOP

ADDR:   DS      2


29 Nov 2019 11:50
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post Re:
barsik wrote:
А у меня получилось, с учётом, что код от ЯВУ, вполне прилично.

Это радует.
А теперь было бы неплохо, если бы вы скомпилировали пример, аналогичный исходному, на своём супер-Паскале,
а я попробую сделать то же самое на Best_C.

_________________
iLavr


30 Nov 2019 04:51
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
В общем поскольку PL/M язык древний, синтаксической подсветки для него я не нашел.
Есть одна подсказка с дружественного форума:
svofski wrote:
Подсветка синтаксиса PL/M есть в vim/gvim в стандартной комплектации.
Но у меня такого не водится...
В Professional Notepad от A Tech Group, которым я пользуюсь, приблизительно подходит подсветка синтаксиса от Sql.

Поэтому я сделал свой вариант подсветки для текстового редактора из Folder Manager, которым я сам
также пользуюсь при программировании.
Его делали программисты для программистов как приложение DOS, и как консольное приложение Windows,
поэтому он под виндами весьма неплохо работает, и в нём достаточно удобных фич именно для написания
программ на многих языках.

 Подсветка синтаксиса PL/M
Code:
; ----------------------------------------
;    0 - black          8 - gray
;    1 - blue dark      9 - blue light
;    2 - green dark    10 - green light
;    3 - cyan          11 - cyan light
;    4 - red           12 - red light
;    5 - magneta       13 - magneta light
;    6 - brown         14 - yellow light
;    7 - white         15 - white light
; ----------------------------------------
; PL/M files (by Lavr)
FILES *.PLM
;  Run = plm81.exe, plm82.exe
  Macro = ~P~LM file
    Print 'PROGRAM: DO'^M
    Home
    Print ^M^M^M
    Print 'END PROGRAM'^M
  EndMacro
  CommentStart = /*
  CommentEnd = */
; Assembler_Highlight = 2
; Declarations keywords - blue light
  Words = 9,declare,based,initial,data,literally,label,address,word,byte,structure,text,external,public,reentrant,use

; statement grouping & cycles 10 - green light
  Words = 10,do,end,to,by,case,while,if,then,else,procedure,asm,endasm,eof

; branching and flow control keywords - magneta light
  Words = 13,goto,go to,call,return,halt

; In/Out operations keywords
  Words = 15,input,output

; Built-in procedures and functions
  Words = 15,length,last,low,high,double

; boolean operators - red light
  Words = 12,not,and,or,xor

; math operators - red light
  Words = 12,plus,minus,mod,+,-,*,/,<,<=,=,>=,>,<>

; Shift functions - red light
  Words = 12,call time,rol,ror,scl,scr,shl,shr

; predefined variable
  Words = 15,carry,zero,sign,parity,memory,stackptr

; Misc keywords
  Words = 15,interrupt,disable,enable

; i8080 ASM Mnemonics
; Registers (16 & 8 bit)
  Words = 10,h,l,d,e,b,c,psw,sp,a,m
; Assembler directives
  Words = 10,org
  Words = 9,equ,dw,db,dt,ds
; Data transfer instructions
  Words = 15,mov,mvi,lda,sta,ldax,stax,lxi,lhld,shld,xchg,sphl,xthl,push,pop
; Arithmetic instructions
  Words = 12,add,adc,sub,sbb,adi,aci,sui,sbi,inr,dcr,inx,dcx,dad
; Binary logic instructions
  Words = 12,ana,ora,xra,cmp,ani,ori,xri,cpi
; Rotate instructions
  Words = 12,ral,rar,rrc,rlc
; System & special instructions
  Words = 15,nop,hlt,cma,in,out,stc,cmc,ei,di,daa
; Execution control instructions
  Words = 13,jmp,rst,pchl
  Words = 13,jnz,jz,jnc,jc,jpo,jpe,jp,jm
  Words = 13,cnz,cz,cnc,cc,cpo,cpe,cp,cm
  Words = 13,ret,rnz,rz,rnc,rc,rpo,rpe,rp,rm
END

Подсвечивает синтаксис и ассемблерных вставок в синтаксисе i8080.
Выглядит это примерно вот так:
Attachment:
plm0.gif
plm0.gif [ 10.06 KiB | Viewed 3737 times ]

Я думаю, у кого свои любимые Notepad-ы программиста, адаптировать подсветку синтаксиса
PL/M по образцу будет нетрудно...

Сам компилятор PL/M я брал вот здесь: Разработка для i8080 на языке PL/M
И насколько там пишут - этот вариант скомпилирован из древних исходников на Фортране той версии PL/M,
которой, возможно, пользовался ещё Гэрри Килдол.

Адаптировал это Александр Завгородний (aka Kakos_Nonos) и расточил под компьютера "Апогей БК-01",
но это легко правится в библиотеке системных вызовов все эти наши 0F803H, 0F809H и т.д.
Александр Завгородний приделал несколько приятных фич в свой пакет, о которых прочитать можно здесь.
В частности, не надо заканчивать строки символом ' ; ' - это делается на лету при компиляции.

Результирующая программа в кодах i8080 не требует никакой CP/M и нормально работает даже под
"Специалистом", если заведомо не делать никаких некорректных вещей.

_________________
iLavr


02 Dec 2019 10:40
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Простой код на PL/M был вот такой:
Code:
declare houk address; /* двухбайтовая переменная */
declare aat based houk byte;  /* однобайтовая переменная по адресу houk */

/* очистка области */
/* от 4000h ... 5000h*/
do houk=16384 to 20480;
 aat=0;
end;

...
я попробую сделать то же самое на Best_C.

В общем попробовал я заполнить область 9000Н...0BFFFН экрана "Специалиста" байтом 0FFH на этом самом Best_C.

Код на Си был следующий:
Code:
MAIN()
[[
CHAR *VAL;
VAL=36863; /*9000H - 1*/
/* FILL SCREEN AREA WITH 0FFH */
   WHILE ( VAL++<49152 ) /*0C000H*/
   [[
     *VAL=255;
   ]]
]]

Компилятор Best_C развернул его вот в такую "простыню":
Attachment:
C-CODE.gif
C-CODE.gif [ 8.33 KiB | Viewed 3620 times ]

Так что по краткости - сестре таланта - компилятор PL/M пока лидирует! :D

_________________
iLavr


15 Dec 2019 16:52
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 5 posts ] 

Who is online

Users browsing this forum: No registered users and 15 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.