vak: (Default)
[personal profile] vak
Собрал компилятор 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 бит хуже?

Date: 2025-03-19 21:54 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
У них байты были 9-битные и была команда ldb. Но раз работает, то идея интересная; может, и взлетит.

Date: 2025-03-19 22:36 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Вроде писали, что тесты идут. Я буду действовать по плану; потом будет видно, что получилось.

Date: 2025-03-21 00:28 (UTC)
sab123: (Default)
From: [personal profile] sab123
Согласно литературе, когда-то давно Юникс билдился на кросс-системе Interdata с 36-битным словом и 9-битными байтами.

PDP-10, кстати, есть в относительно современной версии в виде маленькой коробочки (1-u или 2-u rackmount). В когдатошнем музее Аллена, который нынче продан в Атланту, были и работающие старые PDP-10 и вот такие коробочки.

Date: 2025-03-20 06:30 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Какая интересная зверушка. Никогда с pdp в реале дела не имел. Это безо всяких прерываний что-то складываем по адресу 444 - еt voila ?

Date: 2025-03-20 23:58 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Раньше шины были такие. Попытка обратиться к I/O адресу "зависала" до появления сигнала типа IORDY на соответствующем интерфейсе внешнего устройства. Если этого не происходило в течение какого-то количества тактов (например, если никакое устройство к тому адресу не было подключено), происходило прерывание BUS ERROR.

Date: 2025-03-21 10:27 (UTC)
dmarck: (Default)
From: [personal profile] dmarck
ну, собственно, "труба сломалась" и "автобус не приехал", да, восходят именну в туду ;-)