vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2025-03-19 10:10 pm

GCC для PDP-10

Собрал компилятор GCC для PDP-10 по инструкции: http://pdp10.nocrew.org/netbsd/build-gcc.txt

Исходник скачивается по ссылке: http://pdp10.nocrew.org/gcc/download/gcc-pdp10-20030606.tar.bz2

Пришлось маленько подрихтовать, чтобы собиралось на современном линуксе. Пропущен третий параметр (mode) в вызове open(). Есть пример автономной программы на Си: http://pdp10.nocrew.org/netbsd/boot.c

При её компиляции получается ассемблерный код:
        TITLE	boot
	.DIRECTIVE	KL10

DEFINE OWGBP (PS,Y)<<ps>B5+<y>*%ONE>	; one-word global byte pointer
DEFINE GIW (Y)<<y>*%ONE>	; global indirect word
DEFINE %EXIND (I,X,Y)<<i>B1+<x>B5+<<y>*%ONE>>	; extended format indirect word
	.PSECT .text/ronly
	SEARCH MONSYM
	.ENDPS
	.PSECT .text/ronly
dte.talk:
	xmovei 17,2(17)
	movem 16,-1(17)
	xmovei 16,-1(17)
	movem 1,1(16)
	move 6,1(16)
	movem 6,@[GIW 451]
	aos @[GIW 452]
	CONO DTE,20000
%2:!
	move 6,@[GIW 444]
	jumpe 6,%2
	setzm @[GIW 444]
	move 6,@[GIW 450]
	move 1,6
	move 16,-1(17)
	xmovei 17,-2(17)
	popj 17,

dte.init:
	xmovei 17,1(17)
	movem 16,(17)
	xmovei 16,(17)
	setzm @[GIW 444]
	setzm @[GIW 445]
	setzm @[GIW 446]
	move 16,(17)
	xmovei 17,-1(17)
	popj 17,

getchar:
	xmovei 17,2(17)
	movem 16,-1(17)
	xmovei 16,-1(17)
	jfcl	; nop
%7:!
	movei 1,3400
	pushj 17,dte.talk
	move 6,1
	andi 6,177
	movem 6,1(16)
	move 6,1(16)
	jumpe 6,%7
	move 6,1(16)
	move 1,6
	move 16,-1(17)
	xmovei 17,-2(17)
	popj 17,

putchar:
	xmovei 17,2(17)
	movem 16,-1(17)
	xmovei 16,-1(17)
	movem 1,1(16)
	move 6,1(16)
	andi 6,177
	move 1,6
	pushj 17,dte.talk
	move 16,-1(17)
	xmovei 17,-2(17)
	popj 17,

puts:
	xmovei 17,3(17)
	movem 16,-2(17)
	xmovei 16,-2(17)
	movem 1,1(16)
	ldb 6,1(16)
	movem 6,2(16)
	move 6,2(16)
	jumpn 6,%13
	jrst %12
%13:!
	jfcl	; nop
%14:!
	move 1,2(16)
	pushj 17,putchar
	ibp 1(16)
	ldb 6,1(16)
	movem 6,2(16)
	move 6,2(16)
	jumpn 6,%14
%12:!
	move 16,-2(17)
	xmovei 17,-3(17)
	popj 17,

	.ENDPS
	.PSECT .rodata/ronly
%LC0:!
	BYTE (9)103,145,143,151
	BYTE (9)040,156,047,145
	BYTE (9)163,164,040,160
	BYTE (9)141,163,040,165
	BYTE (9)156,040,160,157
	BYTE (9)162,164,040,144
	BYTE (9)145,040,125,156
	BYTE (9)151,170,056,015
	BYTE (9)012,000
%LC1:!
	BYTE (9)015,012,131,157
	BYTE (9)165,040,164,171
	BYTE (9)160,145,144,072
	BYTE (9)040,000
%LC2:!
	BYTE (9)015,012,000
	.ENDPS
	.PSECT .text/ronly
	ENTRY	main
main:
	xmovei 17,4(17)
	movem 16,-3(17)
	xmovei 16,-3(17)
	movem 1,1(16)
	movem 2,2(16)
	pushj 17,..main
	pushj 17,dte.init
	skipa 1,.+1
	OWGBP 70,%LC0
	pushj 17,puts
	pushj 17,getchar
	move 6,1
	movem 6,3(16)
	skipa 1,.+1
	OWGBP 70,%LC1
	pushj 17,puts
	move 1,3(16)
	pushj 17,putchar
	skipa 1,.+1
	OWGBP 70,%LC2
	pushj 17,puts
	movei 6,0
	move 1,6
	move 16,-3(17)
	xmovei 17,-4(17)
	popj 17,

	.ENDPS

	EXTERN	%ONE
	EXTERN	..main

; expanded load unsigned 16  left:    0
; output   load unsigned 16  left:    0
; expanded load unsigned 16 right:    0
; output   load unsigned 16 right:    0
; expanded load unsigned 32:          0
; output   load unsigned 32:          0
; output   load   signed  9:          0
; expanded load   signed 16  left:    0
; output   load   signed 16  left:    0
; expanded load   signed 16 right:    0
; output   load   signed 16 right:    0
; expanded load   signed 32:          0
; output   load   signed 32:          0
; expanded load   signed:             0
; output   load   signed:             0
; expanded ffs:                       0
        END
Не так интересна сама PDP-10, как факт наличия компилятора Си для словной архитектуры (без байтовой адресации) с размером слова 36 бит. Значит и для БЭСМ-6 можно переделать. Чем слово 48 бит хуже?

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org