
Сообщение от
Manwe
если добавятся макросы и obj
Кроме того, что на PDP-11 ассемблер в большим количеством возможностей, у него, особенно в случае RSX, и линкер с большим количеством возможностей, в частности - с поддержкой оверлеев двух типов (это есть и в RT, но не так гибко). Я не думаю, что это (скоро) появится PDPy11 + Sublime Text. Кстати, мне вполне хватает подсветки синтаксиса для .MAC файлов в FAR-е.
Условная компиляция мне - НУЖНА, если её не будет - даже задумываться не буду.
Пример кода - условной компиляции тут нет, только макросы, но вот в макросах её овердохрена (и она вовсе не для поддержки компиляции под разные ОС).
Код:
.NLIST
.INCLUDE /KXX:DSMAC.MAC/
.INCLUDE /KXX:MYMAC.MAC/
.INCLUDE /KXX:ASCII.MAC/
.INCLUDE /KXX:HWDF.MAC/
.INCLUDE /MACRO.MAC/
.LIST
MODULE NAME=<SPEED>, REL=<SP>, VER=<02>, COMM=<SPEED program>
FROM SYSMAC IMPORT .EXIT
BLK.SZ =: 16000.
$CODE
PROCEDURE START
BEGIN
LET TCURR := #0
LET TMAX := #4
LET R5 := @#V.TR10
LET @#V.TR10 := #CHKEIS
LET R0 := R0 / R0
LET @#V.TR10 := R5
MTPS #PR4
LET SV100 := @#V.LTC,
LET SV102 := @#V.LTC+2
$SSHOW #MSPEED
$GOTO PREP
END START
PROCEDURE PREP
BEGIN
LET R0 := TCURR + R0
LET R1 := R0
LET R0 := R0 + #CMDTBL
LET @#TCMD := (R0)
LET R1 := R1 + #CPTBLE
LET R1 := (R1)
LET R2 := #3000
LET L02106 := R2
LET L02104 := R2
LET L02106 := L02106 + #BLK.SZ*2
REPEAT
LET (R2)+ := TCMD
UNTIL L02106 EQ R2
LET (R2) := CRET
LET R2 := #100.
LET R3 := #0
$SSHOW
CALL DELAY
LET @#V.LTC+2 := #0
LET @#V.LTC := #TICTAK
MTPS #PR0
;WAIT
$GOTO TEST
END PREP
PROCEDURE TEST
BEGIN
LOOP
CALL @L02104
LET R3 := R3 + #1
END
END TEST
PROCEDURE TICTAK
BEGIN
LET R2 := R2 - #1
IF RESULT IS NE
ENTRY TEMPTY
RTI
END
$GOTO SHOW
END TICTAK
PROCEDURE SHOW
BEGIN
LET R0 := TOP
LET @#V.LTC := #TEMPTY
IF #<3000/3+BLK.SZ> LOS R0 THEN
LET R3 := R3 + #1
END
LET R3 := R3 L.SHIFT 3
CALL CALC
$SSHOW #CSPEED
$SSHOW #BUF
CALL DELAY
LET TCURR := TCURR + #1
IF TCURR NE TMAX GOTO PREP
MTPS #200
LET @#V.LTC := SV100
LET @#V.LTC+2 := SV102
.EXIT
END SHOW
PROCEDURE CHKEIS
BEGIN
LET TMAX := #2
RTI
END CHKEIS
PROCEDURE DELAY
BEGIN
LET R0 := #-4000
REPEAT
LET R0 := R0 + #1
UNTIL RESULT IS EQ
RETURN
END DELAY
;
; R3 count multiply 8
;
PROCEDURE CALC
BEGIN
LET R0 := #BUF
THRU R4 := #EBUF-BUF
LET (R0)+ :B= #SPACE
END
LET R1 := #10.
LOOP
LOOP
LET R5 := R3
IF RESULT IS EQ GOTO L01450
CALL L01452
IF R2 EQ #0 LEAVE LOOP
LET -(R0) :B= R2
LET (R0) :B= (R0) SET.BY #'0
END
IF R3 EQ #0 LEAVE LOOP
LET -(R0) :B= R2
LET (R0) :B= (R0) SET.BY #'0
END
L01450:
RETURN
END CALC
PROCEDURE L01452
BEGIN
LET R3 := #0
LET R2 := #0
IF R5 NE #0 THEN
LET R3 := NOT R3
REPEAT
LET R5 := R5 L.ROTATE
UNTIL RESULT IS CS
REPEAT
ROL R2
IF R2 HIS R1 THEN
LET R2 := R2 - R1
END
ROL R3
ASL R5
UNTIL RESULT IS EQ
LET R3 := NOT R3
END
RETURN
END L01452
PROCEDURE SSHOW
BEGIN
LOOP
LET R0 :B= (R1)+
IF RESULT IS EQ THEN
RETURN
END
REPEAT
UNTILB @TVCSR MI #0
LET @TVBUF :B= R0
END
END SSHOW
$IDATA
; $PDATA
TVCSR: .WORD TPS
TVBUF: .WORD TPB
; $ASCII
MSPEED:
.ASCIZ <LF><CR><RUS>/test bystrodejstwiq /<LAT>
ADDRR:
.ASCIZ <LF><CR><LF><RUS>/komanda sloveniq registr-registr/<LAT>
ADDRM:
.ASCIZ <CR><LF><LF><RUS>/komanda sloveniq registr-pamqtx/<LAT>
MULRR:
.ASCIZ <LF><CR><LF><RUS>/komanda umnoveniq registr-registr/<LAT>
DIVRR:
.ASCIZ <LF><CR><LF><RUS>/komanda deleniq registr-registr/<LAT>
CSPEED:
.ASCIZ <CR><LF><RUS>\bystrodejstwie (tys.op./sek) \<LAT>
.EVEN
; $IDATA
BUF: .BYTE 0, 0, 0, 0, 0, 0, 0, 0
EBUF:
.BYTE 0
.EVEN
CPTBLE:
.WORD ADDRR
.WORD ADDRM
.WORD MULRR
.WORD DIVRR
L02104: .WORD 0
L02106: .WORD 0
TCURR: .WORD 0
TMAX: .WORD 2
TCMD: .WORD 0
SV100: .WORD 0
SV102: .WORD 0
CRET: RETURN
CMDTBL:
LET R1 := R1 + R0
LET R1 := R1 + @R0
LET R0 := R0 * R0
LET R2 := R2 / R0
END SPEED
.END START
- - - Добавлено - - -

Сообщение от
Manwe
и с тех пор определяю модель компьютера и операционную систему в самой программе.
Собрать единый вариант запускаемого файла для RT и RSX будет крайне проблематично.