Просмотр полной версии : PDP-11 на FPGA
Расширение функционала процессора для поддержки halt mode. И никаких новых команд для этого, как, скажем в 1801ВМ2 :)
PDP-11/44 (256KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B RK6
RT-11SB (S) V05.07
?KMON-F-File not found DK:STRTSB.COM
.
R0=123632 R1=137344 R2=137326 R3=040000 R4=000200 R5=137326
SP=157326 PC=153462 PS=000000
>>>B HX4
HX 2.2 RT-11 Cold boot..
HX DSK/TTY multiplexer v3.3 2016
RT-11SB (S) V05.07
.R MSCPCK
.
R0=000042 R1=136156 R2=136140 R3=040000 R4=000200 R5=136140
SP=156242 PC=152326 PS=000340
>>>B RK0
DOS/BATCH V9-20C
DATE:
R0=022320 R1=000022 R2=024170 R3=024526 R4=100331 R5=177564
SP=037236 PC=014372 PS=000344
>>>B HX0
HX 2.2 XXDP Cold boot..
BOOTING UP XXDP-XM EXTENDED MONITOR
XXDP-XM EXTENDED MONITOR - XXDP V2.5
REVISION: F0
BOOTED FROM HX0
124KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152000
TYPE "H" FOR HELP !
.
- - - Добавлено - - -
Добавил загрузчик для RL11, но после HX и RK05 уже чисто механически :)
- - - Добавлено - - -
В целом, остался для реализации функционал halt mode для процессоров без ДП (FPGA) и просмотр-изменение памяти и регистров (FullODT). Ну и некоторое количество задумок, которые надо в концепте сначала обкатать.
Основной функционал - е.
PDP-11/04 (256KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B HX4
HX 2.2 RT-11 Cold boot..
HX DSK/TTY multiplexer v3.3 2016
RT-11SB (S) V05.07
.R MSCPCK
.
R0=000042 R1=136156 R2=136140 R3=040000 R4=000200 R5=000000
SP=156242 PC=152460 PS=000344
>>>B RK6
RT-11SB (S) V05.07
?KMON-F-File not found DK:STRTSB.COM
.SHO CONF
RT-11SB (S) V05.07
Booted from RK6:RT11SB
USR is set SWAP
EXIT is set SWAP
KMON is set NOIND
MODE is set NOSJ
TT is set NOQUIET
ERROR is set ERROR
SL is set OFF
EDIT is set KED
FORTRAN is set FORTRA
KMON nesting depth is 3
Global .SCCA flag is disabled
CLI is set DCL, CCL, UCL, NO UCF
PDP 11/15,20 Processor
56KB of memory
50 Hertz System Clock
Device I/O time-out support
SB timer support
Global .SCCA support
Extended unit support
.
R0=000042 R1=137344 R2=137326 R3=040000 R4=000200 R5=137326
SP=157326 PC=153400 PS=000340
>>>B RK0
DOS/BATCH V9-20C
DATE:
R0=022320 R1=000022 R2=024170 R3=024526 R4=100331 R5=177564
SP=037236 PC=014366 PS=000344
>>>B HX0
HX 2.2 XXDP Cold boot..
CPU NOT SUPPORTED BY XXDP-XM
BOOTING UP XXDP-SM SMALL MONITOR
XXDP-SM SMALL MONITOR - XXDP V2.6
REVISION: E0
BOOTED FROM HX0
28KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152010
TYPE "H" FOR HELP
.
R0=000000 R1=000074 R2=154424 R3=151546 R4=150754 R5=155662
SP=154246 PC=150664 PS=000344
>>>B DL0
RT-11SB (S) V05.07
.R MSCPCK
.
R0=000042 R1=135570 R2=135552 R3=040000 R4=000200 R5=135552
SP=155654 PC=152102 PS=000010
>>>B DL1
?BOOT-U-No boot on volume
Ђ
R0=000067 R1=174400 R2=135552 R3=040000 R4=000200 R5=135552
SP=155652 PC=000104 PS=000350
>>>
Простенько и со вкусом :) Пока в значительной степени концепт (типа, ошибки возможны, код не оптимален и step не всегда отрабатывает - где то там собака порылась в прерываниях и возврате из оных :) )
PDP-11/94 (256KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>S
R0=000136 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
SP=000000 PC=165020 PS=000340
165020 CLR R3
R0=000136 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
SP=000000 PC=165022 PS=000344
>>>S
R0=000136 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
SP=000000 PC=165022 PS=000344
165022 INC R3
R0=000136 R1=000000 R2=000000 R3=000001 R4=000000 R5=000000
SP=000000 PC=165024 PS=000340
>>>S
R0=000136 R1=000000 R2=000000 R3=000001 R4=000000 R5=000000
SP=000000 PC=165024 PS=000340
165024 COM R3
R0=000136 R1=000000 R2=000000 R3=177776 R4=000000 R5=000000
SP=000000 PC=165026 PS=000351
>>>40S
R0=000136 R1=000000 R2=000000 R3=177776 R4=000000 R5=000000
SP=000000 PC=165026 PS=000351
165026 ASR R3
R0=000136 R1=000000 R2=000000 R3=177777 R4=000000 R5=000000
SP=000000 PC=165030 PS=000352
165030 ASL R3
R0=000136 R1=000000 R2=000000 R3=177776 R4=000000 R5=000000
SP=000000 PC=165032 PS=000351
165032 ROR R3
R0=000136 R1=000000 R2=000000 R3=177777 R4=000000 R5=000000
SP=000000 PC=165034 PS=000352
165034 TST R3
R0=000136 R1=000000 R2=000000 R3=177777 R4=000000 R5=000000
SP=000000 PC=165036 PS=000350
165036 NEG R3
R0=000136 R1=000000 R2=000000 R3=000001 R4=000000 R5=000000
SP=000000 PC=165040 PS=000341
165040 DEC R3
R0=000136 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
SP=000000 PC=165042 PS=000345
165042 SBC R3
R0=000136 R1=000000 R2=000000 R3=177777 R4=000000 R5=000000
SP=000000 PC=165044 PS=000351
165044 ROL R3
R0=000136 R1=000000 R2=000000 R3=177777 R4=000000 R5=000000
SP=000000 PC=165046 PS=000351
165046 ADC R3
R0=000136 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
SP=000000 PC=165050 PS=000345
165050 SWAB R3
R0=000136 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
SP=000000 PC=165052 PS=000344
165052 BNE .
R0=000136 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
SP=000000 PC=165054 PS=000344
165054 MOV #165000, R2
R0=000136 R1=000000 R2=165000 R3=000000 R4=000000 R5=000000
SP=000000 PC=165060 PS=000350
165060 MOV (R2), R3
R0=000136 R1=000000 R2=165000 R3=165000 R4=000000 R5=000000
SP=000000 PC=165062 PS=000350
165062 CMP (R2)+, R3
R0=000136 R1=000000 R2=165002 R3=165000 R4=000000 R5=000000
SP=000000 PC=165064 PS=000344
165064 BNE .
R0=000136 R1=000000 R2=165002 R3=165000 R4=000000 R5=000000
SP=000000 PC=165066 PS=000344
165066 ADD @(R2)+, R3
R0=000136 R1=000000 R2=165004 R3=152000 R4=000000 R5=000000
SP=000000 PC=165070 PS=000351
165070 ADD @-(R2), R3
R0=000136 R1=000000 R2=165002 R3=165000 R4=000000 R5=000000
SP=000000 PC=165072 PS=000351
165072 BIC -(R2), R3
R0=000136 R1=000000 R2=165000 R3=000000 R4=000000 R5=000000
SP=000000 PC=165074 PS=000345
165074 BIS 12(R2), R3
R0=000136 R1=000000 R2=165000 R3=165006 R4=000000 R5=000000
SP=000000 PC=165100 PS=000351
165100 BIT @12(R2), R3
R0=000136 R1=000000 R2=165000 R3=165006 R4=000000 R5=000000
SP=000000 PC=165104 PS=000351
165104 BEQ .
R0=000136 R1=000000 R2=165000 R3=165006 R4=000000 R5=000000
SP=000000 PC=165106 PS=000351
165106 MOV PC, R3
R0=000136 R1=000000 R2=165000 R3=165110 R4=000000 R5=000000
SP=000000 PC=165110 PS=000351
165110 JMP (R3)+
R0=000136 R1=000000 R2=165000 R3=165112 R4=000000 R5=000000
SP=000000 PC=165110 PS=000351
165110 JMP (R3)+
R0=000136 R1=000000 R2=165000 R3=165114 R4=000000 R5=000000
SP=000000 PC=165112 PS=000351
165112 MOV #165122, R3
R0=000136 R1=000000 R2=165000 R3=165122 R4=000000 R5=000000
SP=000000 PC=165116 PS=000351
165116 JMP @(R3)+
R0=000136 R1=000000 R2=165000 R3=165124 R4=000000 R5=000000
SP=000000 PC=165120 PS=000351
165120 JMP (R3)
R0=000136 R1=000000 R2=165000 R3=165124 R4=000000 R5=000000
SP=000000 PC=165124 PS=000351
165124 TSTB @#165004
R0=000136 R1=000000 R2=165000 R3=165124 R4=000000 R5=000000
SP=000000 PC=165130 PS=000344
165130 BNE .
R0=000136 R1=000000 R2=165000 R3=165124 R4=000000 R5=000000
SP=000000 PC=165132 PS=000344
165132 CMP (R2)+, (R2)+
R0=000136 R1=000000 R2=165004 R3=165124 R4=000000 R5=000000
SP=000000 PC=165134 PS=000344
165134 TSTB (R2)+
R0=000136 R1=000000 R2=165005 R3=165124 R4=000000 R5=000000
SP=000000 PC=165136 PS=000344
165136 BNE .
R0=000136 R1=000000 R2=165005 R3=165124 R4=000000 R5=000000
SP=000000 PC=165140 PS=000344
165140 TSTB (R2)
R0=000136 R1=000000 R2=165005 R3=165124 R4=000000 R5=000000
SP=000000 PC=165142 PS=000350
165142 BPL .
R0=000136 R1=000000 R2=165005 R3=165124 R4=000000 R5=000000
SP=000000 PC=165144 PS=000350
165144 MOV PC, R1
R0=000136 R1=165146 R2=165005 R3=165124 R4=000000 R5=000000
SP=000000 PC=165146 PS=000350
165146 BR 165500
R0=000136 R1=165146 R2=165005 R3=165124 R4=000000 R5=000000
SP=000000 PC=165500 PS=000350
165500 MOV #14012, R2
R0=000136 R1=165146 R2=014012 R3=165124 R4=000000 R5=000000
SP=000000 PC=165504 PS=000340
165504 MOV PC, R3
R0=000136 R1=165146 R2=014012 R3=165506 R4=000000 R5=000000
SP=000000 PC=165506 PS=000350
165506 BR 165540
R0=000136 R1=165146 R2=014012 R3=165506 R4=000000 R5=000000
SP=000000 PC=165540 PS=000350
165540 TSTB @#177564
R0=000136 R1=165146 R2=014012 R3=165506 R4=000000 R5=000000
SP=000000 PC=165544 PS=000344
>>>
>>>B DK0
DOS/BATCH V9-20C
DATE: 11-AUG-99
TIME: 1:46
DIALOGUE?
$LO 1,1
DATE:-11-AUG-99
TIME:-01:46:01
$RU PIP
PIP V10-02
#/DI
DIRECTORY DK0: [ 1,1 ]
11-AUG-99
BADB .SYS 1 11-DEC-72 <377>
MONLIB.CIL 175C 11-DEC-72 <377>
DTBLD .BAT 7 11-DEC-72 <233>
VERIFY.LDA 68C 11-DEC-72 <233>
CILUS .LDA 39 11-DEC-72 <233>
LINK .LDA 57C 11-DEC-72 <233>
PIP .LDA 35C 11-DEC-72 <233>
EDIT .LDA 13 11-DEC-72 <233>
FILDMP.LDA 7 11-DEC-72 <233>
LIBR .LDA 9 11-DEC-72 <233>
FILCOM.LDA 14 11-DEC-72 <233>
ODT .OBJ 10 11-DEC-72 <233>
MACRO .LDA 39C 11-DEC-72 <233>
CREF .LDA 10 11-DEC-72 <233>
SYSMAC.S
R0=133414 R1=133414 R2=153662 R3=001400 R4=104377 R5=177776
SP=133374 PC=001010 PS=000011
>>>S
R0=133414 R1=133414 R2=153662 R3=001400 R4=104377 R5=177776
SP=133374 PC=001010 PS=000011
001010 MOV SP, R1
R0=133414 R1=133414 R2=153662 R3=001400 R4=104377 R5=177776
SP=133370 PC=011166 PS=000300
>>>S
R0=133414 R1=133414 R2=153662 R3=001400 R4=104377 R5=177776
SP=133370 PC=011166 PS=000300
011166 CALL @11162
R0=133414 R1=133414 R2=153662 R3=001400 R4=104377 R5=177776
SP=133366 PC=011164 PS=000300
>>>S
R0=133414 R1=133414 R2=153662 R3=001400 R4=104377 R5=177776
SP=133366 PC=011164 PS=000300
011164 RETURN
R0=133414 R1=133414 R2=153662 R3=001400 R4=104377 R5=177776
SP=133370 PC=011172 PS=000300
>>>S
R0=133414 R1=133414 R2=153662 R3=001400 R4=104377 R5=177776
SP=133370 PC=011172 PS=000300
011172 INC @#6600
R0=133414 R1=133414 R2=153662 R3=001400 R4=104377 R5=177776
SP=133370 PC=011176 PS=000300
>>>S
R0=133414 R1=133414 R2=153662 R3=001400 R4=104377 R5=177776
SP=133370 PC=011176 PS=000300
011176 BVC 011210
R0=133414 R1=133414 R2=153662 R3=001400 R4=104377 R5=177776
SP=133370 PC=011210 PS=000300
>>>10S
R0=133414 R1=133414 R2=153662 R3=001400 R4=104377 R5=177776
SP=133370 PC=011210 PS=000300
011210 TST @#177546
R0=133414 R1=133414 R2=153662 R3=001400 R4=104377 R5=177776
SP=133370 PC=011214 PS=000300
ML 26 11-DEC-72 <233>
CL0 .SYS 1 11-DEC-72 <233>
CL1 .SYS 1 11-DEC-72 <233>
CL2 .SYS 1 11-DEC-72 <233>
CL3 .SYS 1 11-DEC-72 <233>
CL4 .SYS 1 11-DEC-72 <233>
CL5 .SYS 1 11-DEC-72 <233>
CL6 .SYS 1 11-DEC-72 <233>
CL7 .SYS 1 11-DEC-72 <233>
LDUMP .LDA 29 11-DEC-72 <233>
TEST .TXT 1 11-DEC-72 <233>
A .MAC 1 11-DEC-72 <233>
PIP .LIB 120 11-DEC-72 <233>
TOTL BLKS: 669
TOTL FILES: 27
#
Вроде решил проблему некорректной отработки Step с прерываниями.
И отрефакторил код декодирования инструкций. Надо будет его ещё подрихтовать под будущую команду - открыть ячейку памяти и показать как команду
PDP-11/94 (256KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B DL2
RSX-11M-PLUS V4.6 BL87 256.KW System:"DE10 "
>RED DL2:=SY:
>RED DL2:=LB:
>RED DL2:=SP:
>
R0=103741 R1=001410 R2=120000 R3=000000 R4=000001 R5=000000
SP=001310 PC=027244 PS=030010
>>>30S
R0=103741 R1=001410 R2=120000 R3=000000 R4=000001 R5=000000
SP=001310 PC=027244 PS=030010
027244 BR 027212
R0=103741 R1=001410 R2=120000 R3=000000 R4=000001 R5=000000
SP=001304 PC=065370 PS=000340
065370 MOV R5, -(SP)
R0=103741 R1=001410 R2=120000 R3=000000 R4=000001 R5=000000
SP=001302 PC=065372 PS=000344
065372 MOV R4, -(SP)
R0=103741 R1=001410 R2=120000 R3=000000 R4=000001 R5=000000
SP=001300 PC=065374 PS=000340
065374 DEC 1330
R0=103741 R1=001410 R2=120000 R3=000000 R4=000001 R5=000000
SP=001300 PC=065400 PS=000350
065400 BIC #40, @#177776
R0=103741 R1=001410 R2=120000 R3=000000 R4=000001 R5=000000
SP=001300 PC=065406 PS=000310
065406 MOV #23260, -(SP)
R0=103741 R1=001410 R2=120000 R3=000000 R4=000001 R5=000000
SP=001276 PC=065412 PS=000300
065412 MOV #20616, R4
R0=103741 R1=001410 R2=120000 R3=000000 R4=020616 R5=000000
SP=001276 PC=065416 PS=000300
065416 INC (R4)
R0=103741 R1=001410 R2=120000 R3=000000 R4=020616 R5=000000
SP=001276 PC=065420 PS=000304
065420 BEQ 065424
R0=103741 R1=001410 R2=120000 R3=000000 R4=020616 R5=000000
SP=001276 PC=065424 PS=000304
065424 CALL 22772
R0=103741 R1=001410 R2=120000 R3=000000 R4=020616 R5=000000
SP=001274 PC=022772 PS=000304
022772 MOV (SP)+, -(R4)
R0=103741 R1=001410 R2=120000 R3=000000 R4=020614 R5=000000
SP=001276 PC=022774 PS=000300
022774 CLR -(R4)
R0=103741 R1=001410 R2=120000 R3=000000 R4=020612 R5=000000
SP=001276 PC=022776 PS=000304
022776 MOVB @#177776, -(SP)
R0=103741 R1=001410 R2=120000 R3=000000 R4=020612 R5=000000
SP=001274 PC=023002 PS=000310
023002 MOVB #340, @#177776
R0=103741 R1=001410 R2=120000 R3=000000 R4=020612 R5=000000
SP=001274 PC=023010 PS=000340
023010 MOV R4, @PC
R0=103741 R1=001410 R2=120000 R3=000000 R4=020612 R5=000000
SP=001274 PC=023014 PS=000340
023014 MOV R4, 20622
R0=103741 R1=001410 R2=120000 R3=000000 R4=020612 R5=000000
SP=001274 PC=023020 PS=000340
023020 TSTB 1407
R0=103741 R1=001410 R2=120000 R3=000000 R4=020612 R5=000000
SP=001274 PC=023024 PS=000340
023024 BLE 023040
R0=103741 R1=001410 R2=120000 R3=000000 R4=020612 R5=000000
SP=001274 PC=023026 PS=000340
023026 CLRB @#1407
R0=103741 R1=001410 R2=120000 R3=000000 R4=020612 R5=000000
SP=001274 PC=023032 PS=000344
023032 MOV #23322, 1304
R0=103741 R1=001410 R2=120000 R3=000000 R4=020612 R5=000000
SP=001274 PC=023040 PS=000340
023040 MOVB (SP)+, @#177776
R0=103741 R1=001410 R2=120000 R3=000000 R4=020612 R5=000000
SP=001276 PC=023044 PS=000304
023044 SEC
R0=103741 R1=001410 R2=120000 R3=000000 R4=020612 R5=000000
SP=001276 PC=023046 PS=000305
023046 RETURN
R0=103741 R1=001410 R2=120000 R3=000000 R4=020612 R5=000000
SP=001300 PC=023260 PS=000305
023260 MOVB #340, @#177776
R0=103741 R1=001410 R2=120000 R3=000000 R4=020612 R5=000000
SP=001300 PC=023266 PS=000340
023266 TST 1330
R0=103741 R1=001410 R2=120000 R3=000000 R4=020612 R5=000000
SP=001300 PC=023272 PS=000350
023272 BEQ 023300
R0=103741 R1=001410 R2=120000 R3=000000 R4=020612 R5=000000
SP=001300 PC=023274 PS=000350
023274 JMP 23446
R0=103741 R1=001410 R2=120000 R3=000000 R4=020612 R5=000000
SP=001300 PC=023446 PS=000350
023446 INC @#1330
R0=103741 R1=001410 R2=120000 R3=000000 R4=020612 R5=000000
SP=001300 PC=023452 PS=000344
023452 MOV (SP)+, R4
R0=103741 R1=001410 R2=120000 R3=000000 R4=000001 R5=000000
SP=001302 PC=023454 PS=000340
023454 MOV (SP)+, R5
R0=103741 R1=001410 R2=120000 R3=000000 R4=000001 R5=000000
SP=001304 PC=023456 PS=000344
>>>PMOU DL2:"RSX11MPBL87"
>@DL2:[1,2]STARTUP
>; PLEASE NOTE
>;
>; If you have not yet read the system release notes, please do so
>; now before attempting to perform a SYSGEN or to utilize the new
>; features of this system.
>;
>;
TIM -- Syntax error
>* Please enter time and date (HH:MM DD-MMM-YYYY) [S]:
Добавление функционала
PDP-11/94 (256KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>1000\
001000 167
001001 000
001002 044
001003 000
001004 167
001005 000
001004 000167
001006 000214
001010 000167
001012 000616
001012 216
001013 001
001014 167
001015 000
001014 167
001013 001
001012 216
001011 000
001010 167
001007 000
>>>
001010 167
001011 000
001012 216
>>>^
001011 000
001010 167
001007 000
001006 214
>>>
ФперёТ :):)
PDP-11/94 (256KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>165020!
165020 005003 005203 005103 CLR R3
165022 005203 005103 006203 INC R3
165024 005103 006203 006303 COM R3
165026 006203 006303 006003 ASR R3
165030 006303 006003 005703 ASL R3
165032 006003 005703 005403 ROR R3
165034 005703 005403 005303 TST R3
165036 005403 005303 005603 NEG R3
165040 005303 005603 006103 DEC R3
165042 005603 006103 005503 SBC R3
165044 006103 005503 000303 ROL R3
165046 005503 000303 001377 ADC R3
165050 000303 001377 012702 SWAB R3
165052 001377 012702 165000 BNE .
165054 012702 165000 011203 MOV #165000, R2
165060 011203 022203 001377 MOV (R2), R3
165062 022203 001377 063203 CMP (R2)+, R3
>>>S
R0=000136 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
SP=000000 PC=165020 PS=000340
165020 005003 005203 005103 CLR R3
R0=000136 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
SP=000000 PC=165022 PS=000344
>>>S
R0=000136 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
SP=000000 PC=165022 PS=000344
165022 005203 005103 006203 INC R3
R0=000136 R1=000000 R2=000000 R3=000001 R4=000000 R5=000000
SP=000000 PC=165024 PS=000340
>>>165020!
165020 005003 005203 005103 CLR R3
165022 005203 005103 006203 INC R3
165024 005103 006203 006303 COM R3
165026 006203 006303 006003 ASR R3
165030 006303 006003 005703 ASL R3
165026 006203 006303 006003 ASR R3
165024 005103 006203 006303 COM R3
165022 005203 005103 006203 INC R3
165024 005103
165026 006203
165030 006303
165032 006003
165034 005703
165036 003
165037 013
165040 303
165041 012
165042 203
165043 013
165042 203
165041 012
165040 303
165040 005303
165042 005603
165044 006103
165046 A2C
165050 D5
165052 SG
165054 CSJ
165056 7QX
165060 011203
165062 022203
165064 001377
165066 063203
>>>
Наташа! зачем нам опять читать чего ты там вкурила или нет в чужом коде. Пиши своё с открытыми исходниками
Наташа!
В буфете опять халявная раздача алкоголя?
чего ты там вкурила или нет в чужом коде.
Аха, в чужом. У нас тут очень много писателей с использованием DSMAC
Пиши своё с открытыми исходниками
Перебьёшься. Да и не вкуришь написанное мной
- - - Добавлено - - -
Поскольку у нас тут опять появился любитель халявы и впаривания, примеров кода в сообщении больше не будет. Что сочту нужным - выложу у себя на файлохранилище. Со ссылкой в темах.
- - - Добавлено - - -
Хотя нет, последний кусок кода :) Две процедуры, реализующие команду S :)
PROCEDURE CSTEP
BEGIN
IF SCFLAG EQ #0 THEN
CALL NLINE
END
CALL SDCD
CALL NLINE
CALL SHRGS
IF $CMD EQ #RSTEP AND STPCNT HI #0 THEN
CALL NLINE
LET SCFLAG := #1
GOTO PSTEP
END
LET SCFLAG := #0
RETURN
END CSTEP
PROCEDURE PSTEP
BEGIN
IF SCFLAG EQ #0 THEN
LET STPCNT := IN1NM10
IF RESULT IS EQ THEN
LET STPCNT := STPCNT + #1
END
CALL SHRGS
END
LET CHMODE := #0
LET STPCNT := STPCNT - #1
LET R0 := #REGS
LET R1 := #BREGS
THRU R2 := #N.REGS
LET (R1)+ := (R0)+
END
CALL RSTRGS
STEP
END PSTEP
- - - Добавлено - - -
Забыл про команды _ и @. Добавил
PDP-11/94 (256KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B FK0
Unknown device
>>>B DK0
DOS/BATCH V9-20C
DATE:
R0=022320 R1=000022 R2=024170 R3=024526 R4=100331 R5=177564
SP=037236 PC=014372 PS=000344
>>>1000!
001000 004567 001502 012705 JSR R5, 2506
001004 012705 177776 010601 MOV #177776, R5
001010 010601 062701 000014 MOV SP, R1
001012 062701 000014 012102 ADD #14, R1
001016 012102 012146 042716 MOV (R1)+, R2 ; даванул /
001020 012146 ; даванул ^
001016 012102
001014 000014
001012 062701
001010 010601
001006 177776
001004 012705
001002 001502 ; даванул \
001004 305
001005 025
001006 376
001007 377
001010 201
001011 021
001012 301 ; даванул ^
001011 021
001010 201
001007 377
001006 376
001005 025
001004 305
001003 003
001002 102
001001 011
001000 167 ; даванул /
001000 004567
001002 001502
>>>_ ; _ по текущем адресу 1002
002506 010446
>>>1002/
001002 001502 ; даванул _
002506 010446
002510 010346 ; даванул @
010346 005067
>>>S
R0=022320 R1=000022 R2=024170 R3=024526 R4=100331 R5=177564
SP=037236 PC=014372 PS=000344
014372 100375 116500 177776 BPL 014366
R0=022320 R1=000022 R2=024170 R3=024526 R4=100331 R5=177564
SP=037236 PC=014366 PS=000344
>>>S
R0=022320 R1=000022 R2=024170 R3=024526 R4=100331 R5=177564
SP=037236 PC=014366 PS=000344
014366 105765 177774 100375 TSTB 177774(R5)
R0=022320 R1=000022 R2=024170 R3=024526 R4=100331 R5=177564
SP=037236 PC=014372 PS=000344
>>>S
R0=022320 R1=000022 R2=024170 R3=024526 R4=100331 R5=177564
SP=037236 PC=014372 PS=000344
014372 100375 116500 177776 BPL 014366
R0=022320 R1=000022 R2=024170 R3=024526 R4=100331 R5=177564
SP=037236 PC=014366 PS=000344
>>>165020G
022320 100331 037236 177564
@
Из пока не реализованного - ' и ". Думаю, как лучше выводит спец символы (0-37 и 200-237)
Цветочки и ягодки :) Пока примерно на две трети - концепт :)
PDP-11/04 (256KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>1050!
001050 000005 012737 000340 RESET
001052 012737 000340 177776 MOV #340, @#177776
001060 012706 001000 012737 MOV #1000, SP
001064 012737 000100 177546 MOV #100, @#177546
001072 012737 000100 177560 MOV #100, @#177560
001100 012737 000000 177776 MOV #0, @#177776
001106 000001 000776 004767 WAIT
001110 000776 004767 003026 BR 001106
001112 004767 003026 013737 CALL 4144
001116 013737 177562 177566 MOV @#177562, @#177566
001124 000002 005367 003130 RTI
001126 005367 003130 001010 DEC 4262
001132 001010 012767 000062 BNE 001154
001134 012767 000062 003120 MOV #62, 4262
001142 004767 002776 012737 CALL 4144
001146 012737 000053 177566 MOV #53, @#177566
001154 005367 003104 001020 DEC 4264
001160 001020 012767 000012 BNE 001222
001162 012767 000012 003074 MOV #12, 4264
001170 017767 003072 176372 MOV @PC, 177570
001176 062767 000002 003062 ADD #2, 4266
001204 026727 003056 004340 CMP 4266, #4340
001212 103403 012767 004270 BCS 001222
001214 012767 004270 003044 MOV #4270, 4266
>>>1214T
>>>1000G+++
Breakpoint!
R0=000004 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
SP=000774 PC=001214 PS=000344
>>>P++++
Breakpoint!
R0=000004 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
SP=000774 PC=001214 PS=000344
>>>P++++
Breakpoint!
R0=000004 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
SP=000774 PC=001214 PS=000344
>>>S
R0=000004 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
SP=000774 PC=001214 PS=000344
001214 012767 004270 003044 MOV #4270, 4266
R0=000004 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
SP=000774 PC=001222 PS=000340
>>>P++++
Breakpoint!
R0=000004 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
SP=000774 PC=001214 PS=000344
>>>
Уф... Умею я накосячить :) Причём в этот раз - как в vhdl, так и в mac :) На тестовых модулях (которые прям с прошивкой добавляются) всё ок, а попробовал операционки грузить - такой фейерверк получил :) Но - хорошо все - что хорошо заканчивается :) На проце без ПДП вроде всё ок.
На очереди процы с ПДП и 22-ух битный адрес останова. Собственно, он уже 22-ух, не теперь надо добавить какой никакой вариант работы с ним в mac файл
Теперь и на процессоре с ДП. Надо допиливать firmware :)
Официальное начало доработок PDP-2011 под проект PDP-2011/x :)
Которым, со временем, станет весь мой вариант проекта PDP-2011 :)
Hunta, было бы не плохо портировать под плату sipeed tang premier
было бы не плохо портировать под плату sipeed tang premier
Во-первых - у меня её нет.
Во-вторых - чего там портировать - только описать в top модуле нужные сигналы.
Когда у меня появилась DE-10 (и я ничего не знал про FPGA), мне понадобилось, ЕМНИП, пару-тройку недель, что бы запустить (авторский вариант) PDP-2011 на ней. Так что идём на https://pdp2011.sytse.net/wordpress/ , качаем исходники - и вперёд.
На всякий случай. Мой вариант переделок и доделок PDP-2011 пока, по крайне мере, с закрытыми исходниками. Ибо не всё ещё доделано и я много экспериментирую, так что завтрашний вариант исходников может сильно отличаться от вчерашнего, а через месяц (условно) много из изменений могут быть отменены - собственно, из-за последнего и не вижу пока смысла выкладывать
- - - Добавлено - - -
Посмотрел характеристики этой платы. LE маловато, старшие модели PDP могут не поместиться.
Примерно три с половиной года назад я психанул и начал глобальную переделку PDP-2011 :)
По прошествии такого большого срока (много чего за него было – и 1201.2018 и мультиконтроллер почти доделанный :) и уровень знаниев по FPGA-VHDL подрос) я вернулся таки к модулю, на котором нервы не выдержали :)
Как обычно - были и мои ошибки и не точное понимание работы sdram, но... Всё хорошо, что хорошо кончается :)
Точнее говоря - почти :) Так как функционал Unibus Mapping регистров в доках описан крайне скудно (или я ещё не налетел на нужное место) - его работу пришлось доводить до ума, основываясь на работе ОС и тестов. Но когда это делалось в последний раз - памяти было доступно только 512 кб и не все сценарии можно было проверить :) Теперь, когда памяти можно сделать до 4Мб-64кб - можно будет проверить и экстремальные сценарии :) Как руки дойдут :) Но операционки уже успешно проходят неформальный тест :) А вот в FullODT можно увидеть косяк - он показывает 2044 килослов памяти, хотя стенд сконфигурирован только на 1920 :)
PDP-11/70 (2044KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B DL0
RT-11SB (S) V05.07
.R MSCPCK
.@T
.RUN SPEED0
Тест быстродействия (кэш, если он есть, выключен)
BR .+2 4 225 007 оп./сек
R0(23456.)+R0(12345.) empty 1 056 251 оп./сек
R1(23456.)+R0(12345.) 844 999 оп./сек -> 4 224 959 оп./сек
.SHOW CONFIGURATION
RT-11SB (S) V05.07
Booted from DL0:RT11SB
USR is set SWAP
EXIT is set SWAP
KMON is set NOIND
MODE is set NOSJ
TT is set NOQUIET
ERROR is set ERROR
SL is set OFF
EDIT is set KED
FORTRAN is set FORTRA
KMON nesting depth is 3
Global .SCCA flag is disabled
CLI is set DCL, CCL, UCL, NO UCF
PDP 11/70 Processor
3840KB of memory
FP11 Hardware Floating Point Unit
Extended Instruction Set (EIS)
Memory Management Unit
Cache Memory
50 Hertz System Clock
Memory parity support
SB timer support
Global .SCCA support
FPU support
Extended unit support
.TIME
00:00:02
.COPY/DEVICE/VERIFY/NOQUERY RK7: RK6:
.TIME
00:00:41
.DIFF/BIN RK7:/END:4799. RK6:
BINCOM comparing/ RK7:*. -- RK6:*.
?BINCOM-I-No differences found
.TIME
00:00:52
.COPY/DEVICE/NOQUERY DL1: DL3:
.TIME
00:04:27
.DIFF/BIN DL1: DL3:
BINCOM comparing/ DL1:*. -- DL3:*.
?BINCOM-I-No differences found
.TIME
00:05:28
.COPY/DEVICE/VERIFY/NOQUERY DL: DL3:
.TIME
00:09:53
.BOO/FOR DL2:
RSX-11M-PLUS V4.6 BL87 1920.KW System:"DE10 "
>RED DL2:=SY:
>RED DL2:=LB:
>RED DL2:=SP:
>MOU DL2:"RSX11MPBL87"
>@DL2:[1,2]STARTUP
>; PLEASE NOTE
>;
>; If you have not yet read the system release notes, please do so
>; now before attempting to perform a SYSGEN or to utilize the new
>; features of this system.
>;
>;
>* Please enter time and date (HH:MM DD-MMM-YYYY) [S]: 16:18 13-SEP-2021
>TIME 16:18 13-SEP-2021
>ACS SY:/BLKS=1024.
>CON ONLINE ALL
>@ <EOF>
>@T
>CON DISPL ATTR FOR SYS
SYS
PDP-11/70, EIS,UNIBUS_Map,D-Space,SWR,Cache,FPP,
Clock=KW11-L, $TKPS=50., $TTPRM=000002, Cache_control=000001
>MOU DL3:/for
>INS $BRU
>TIM
16:18:06 13-SEP-2021
>BRU/INI/VER/MOU LB: DL3:
BRU - Starting verify pass
BRU - Completed
>TIM
16:22:06 13-SEP-2021
>RUN SHUTUP
>@ <EOF>
>
RSX-11M-PLUS Shut down program
Enter minutes to wait before shutdown:
Reason for shutdown (<CR> for none):
OK to shutdown? [Y/N]: Y
All further logins are disabled
13-SEP-2021 16:23 System is now shutting down -- DE10
@LB:[1,2]SHUTUP
>VCP DISCONNECT /ALL
>@ <EOF>
>
ACS DL2:/BLKS=0.
ACS -- Checkpoint file now inactive
>
DMO DL2:/DEV/LOCK=V
DMO -- System disk being dismounted
DMO -- SYSTEM dismounted from DL2: *** Final dismount initiated ***
16:23:50 *** DL2: -- Dismount complete
>
DMO DL3:/DEV/LOCK=V
16:23:55 *** DL3: -- Dismount complete
DMO -- TT0: dismounted from DL3: *** Final dismount initiated ***
>
SHUTUP operation complete
>>>
Ляпота :)
RSX-11M-PLUS V4.6 BL87 (DE10 ) 1920K UP 000:00:04 13-SEP-2021 20:52:11
TASK= *IDLE* FREE= SY0:2171. L1:DMO
ICBP=1596.:1654.:2. DL0:DMO L3:DMO PARS
POOL=11938.:13704.:7. SECPOOL=435.:512.:84%
11938.:13704.:7. 435.:512.:84% SECPOL:P
SYSPAR:D
IN: DMTV.FF H DRVPAR:D
5 ICTF.11 R GEN :D
34K RR::.11 C
OUT 1. AAA .
0 1. TCC .
0K M. .PP .
!!>))+>+ >
0*******120*****240*****360*****480*****600*****72 0*****840*****
EPPD-D-D--------------------------------------------------------
----------------------------------------------------------------
960*****1080****1200****1320****1440****1560****16 80****1800****
ERRSEQ
0.
Идея, как параметризовать модель процессора через командную строку - пока ничего в голову не приходит, а то, что приходит - не работает. Поэтому плюнул и сделал более простой вариант - каждая модель процессора - отдельный проект Квартуса. Пришлось, правда, малость топовым модулем пошаманить, но всё взлетело.
И поскольку работать из командной строки строки с программами Квартуса я научился (включаю закачку прошивки) - вариант - запускаем на ночь синтез прошивок для всех моделей PDP-11, а на следующий день проверяем косяки - практически реализован.
Теперь осталось наплодить проектов-вариантов :) Чем потихоньку и занимаюсь :)
192 варианта. И это ещё не все (нет, как минимум, PDP-11/23+ и SBC-11/21+). Хотя есть и братья-близнецы, который не различимы на уровне процессора, как минимум (скажем - PDP-11/05 и PDP-11/10). Ну и с учётом того, как некоторые процессоры различаются Resorc (скажем - PDP-11/23 и PDP-11/24), пока, несмотря на то, что описан один вариант, Resorc показывает другой (PDP-11/23 для неё - PDP-11/24)
Оставлю на ночь синтез - посмотрим, сколько займёт :)
Идея, как параметризовать модель процессора через командную строку - пока ничего в голову не приходит, а то, что приходит - не работает
А в чём проблема-то? В Верилоге есть `define, `ifdef, `ifndef; 'define можно делать из командной строки. В VHDL -- конфигурации и generate, это ещё проще. Задаём нужную конфигурацию как верний уровень проекта, и всё.
А в чём проблема-то?
Verilog не использую. А как задать generic параметр для top модуля из командной строки - пока не понял. Ну и пока проблема (до какой то степени) снята - так что пока голову ломать не буду
Нашёл причину вешанья RT-11 на PDP-11/35 и /40, теперь и эти две модели (по сути - одна, так как 35 - oem, 40 - retail, а проц у них один и тот же) можно синтезировать :)
- - - Добавлено - - -
Как происходит отладка процессора :)
PDP-11/35 (124KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>G
000043 000000 000000 000000
@ZZ
End Pass 000001
End Pass 000002
End Pass 000003
End Pass 000004
End Pass 000005
End Pass 000006
End Pass 000007
End Pass 000010
End Pass 000011
End Pass 000012
End Pass 000013
End Pass 000014
R0=000014 R1=173742 R2=165650 R3=016254 R4=173672 R5=157776
SP=000502 PC=165756 PS=000341
>>>B HX0
HX 2.2 XXDP Cold boot..
CPU NOT SUPPORTED BY XXDP-XM
BOOTING UP XXDP-SM SMALL MONITOR
XXDP-SM SMALL MONITOR - XXDP V2.6
REVISION: E0
BOOTED FROM HX0
28KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152010
TYPE "H" FOR HELP
.R BKDM??
BKDMD0.BIC
>>>R
R0=003144 R1=000000 R2=152357 R3=154426 R4=152754 R5=155662
SP=014224 PC=000014 PS=000000
>>>B HX0
HX 2.2 XXDP Cold boot..
CPU NOT SUPPORTED BY XXDP-XM
BOOTING UP XXDP-SM SMALL MONITOR
XXDP-SM SMALL MONITOR - XXDP V2.6
REVISION: E0
BOOTED FROM HX0
28KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152010
TYPE "H" FOR HELP
.R BKTA??
BKTAD0.BIC
KT11-D LOGIC TEST MAINDEC-11-DBKTA-D
>>>R
R0=000002 R1=000040 R2=100000 R3=154426 R4=152754 R5=155662
SP=000772 PC=000014 PS=000000
>>>B HX0
HX 2.2 XXDP Cold boot..
CPU NOT SUPPORTED BY XXDP-XM
BOOTING UP XXDP-SM SMALL MONITOR
XXDP-SM SMALL MONITOR - XXDP V2.6
REVISION: E0
BOOTED FROM HX0
28KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152010
TYPE "H" FOR HELP
.R BKTB??
BKTBB0.BIC
#KT11-D ACCESS KEYS TEST, MD-11-DBKTB-B
#
>>>R
R0=000010 R1=002032 R2=152357 R3=154426 R4=152754 R5=155662
SP=000766 PC=000014 PS=000000
>>>766/
000766 005526
000770 000000
000772 005546
>>>5520000005500!
005500 005077 174312 012701 CLR @PC
005504 012701 002030 012700 MOV #2030, R1
005510 012700 000010 005071 MOV #10, R0
005514 005071 000020 012731 CLR @20(R1)
005520 012731 077406 077005 MOV #77406, @(R1)+
005524 077005 062701 000020 SOB R0, 5514
005526 062701 000020 020127 ADD #20, R1
>>>B HX0
HX 2.2 XXDP Cold boot..
CPU NOT SUPPORTED BY XXDP-XM
BOOTING UP XXDP-SM SMALL MONITOR
XXDP-SM SMALL MONITOR - XXDP V2.6
REVISION: E0
BOOTED FROM HX0
28KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152010
TYPE "H" FOR HELP
.R BKDM??
BKDMD0.BIC
>>>R
R0=003144 R1=000000 R2=152357 R3=154426 R4=152754 R5=155662
SP=014224 PC=000014 PS=000000
>>>14224/
014224 003164
>>>3140!
003140 174654 010700 012706 DIVD @-(R4), SP
003142 010700 012706 014230 MOV PC, R0
003144 012706 014230 012767 MOV #14230, SP
003150 012767 003166 174626 MOV #3166, 4
003156 005067 174624 000100 CLR 6
003162 000100 000000 010700 JMP R0
003164 000000 010700 012706 HALT
PDP-11/35 (124KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B DL0
RT-11SB (S) V05.07
.R MSCPCK
.@T
.RUN SPEED0
Тест быстродействия (кэш, если он есть, выключен)
BR .+2 4 318 525 оп./сек
R0(23456.)+R0(12345.) empty 1 079 119 оп./сек
R1(23456.)+R0(12345.) 863 295 оп./сек -> 4 316 471 оп./сек
.SHOW CONFIGURATION
RT-11SB (S) V05.07
Booted from DL0:RT11SB
USR is set SWAP
EXIT is set SWAP
KMON is set NOIND
MODE is set NOSJ
TT is set NOQUIET
ERROR is set ERROR
SL is set OFF
EDIT is set KED
FORTRAN is set FORTRA
KMON nesting depth is 3
Global .SCCA flag is disabled
CLI is set DCL, CCL, UCL, NO UCF
PDP 11/15,20 Processor
248KB of memory
Extended Instruction Set (EIS)
Memory Management Unit
50 Hertz System Clock
Memory parity support
SB timer support
Global .SCCA support
FPU support
Extended unit support
.TIME
00:00:04
.COPY/DEVICE/VERIFY/NOQUERY RK7: RK6:
.TIME
00:00:43
.DIFF/BIN RK7:/END:4799. RK6:
BINCOM comparing/ RK7:*. -- RK6:*.
?BINCOM-I-No differences found
.TIME
00:00:53
.COPY/DEVICE/NOQUERY DL1: DL3:
.TIME
00:04:31
.DIFF/BIN DL1: DL3:
BINCOM comparing/ DL1:*. -- DL3:*.
?BINCOM-I-No differences found
.TIME
00:05:32
.COPY/DEVICE/VERIFY/NOQUERY DL: DL3:
.TIME
00:10:20
.
R0=000114 R1=135570 R2=135552 R3=040000 R4=000200 R5=135552
SP=155654 PC=151730 PS=000004
>>>B HX0
HX 2.2 XXDP Cold boot..
BOOTING UP XXDP-XM EXTENDED MONITOR
XXDP-XM EXTENDED MONITOR - XXDP V2.5
REVISION: F0
BOOTED FROM HX0
124KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152000
TYPE "H" FOR HELP !
.R BKDM??
BKDMD0.BIC
>>>T
177777
>>>R
R0=004502 R1=000000 R2=146050 R3=110436 R4=146000 R5=155662
SP=014224 PC=000014 PS=000000
>>>14224/
014224 004526
>>>4500!
004500 010700 012706 014230 MOV PC, R0
004502 012706 014230 012767 MOV #14230, SP
004506 012767 004532 173270 MOV #4532, 4
004514 012767 000001 173356 MOV #1, 100
004522 005001 006771 000100 CLR R1
004524 006771 000100 000000 SXT @100(R1)
004530 000000 010700 012706 HALT
004532 010700 012706 014230 MOV PC, R0
>>>4426!
004426 000000 010700 012706 HALT
004430 010700 012706 014230 MOV PC, R0
004432 012706 014230 012767 MOV #14230, SP
004436 012767 004456 173340 MOV #4456, 4
004444 012701 000001 074071 MOV #1, R1
004450 074071 000000 000000 XOR @0(R1), R0
004454 000000 010700 012706 HALT
004456 010700 012706 014230 MOV PC, R0
004460 012706 014230 012767 MOV #14230, SP
004464 012767 004500 173312 MOV #4500, 4
004472 005001 122131 000000 CLR R1
004474 122131 000000 010700 CMPB (R1)+, @(R1)+
004476 000000 010700 012706 HALT
004500 010700 012706 014230 MOV PC, R0
PDP-11/35 (124KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B HX0
HX 2.2 XXDP Cold boot..
BOOTING UP XXDP-XM EXTENDED MONITOR
XXDP-XM EXTENDED MONITOR - XXDP V2.5
REVISION: F0
BOOTED FROM HX0
124KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152000
TYPE "H" FOR HELP !
.R BKDM??
BKDMD0.BIC
>>>R
R0=005126 R1=000004 R2=146050 R3=110436 R4=146000 R5=155662
SP=000376 PC=005146 PS=000004
>>>5104!
005104 012767 005122 172672 MOV #5122, 4
005112 005067 172670 005716 CLR 6
005116 005716 000401 000000 TST (SP)
005120 000401 000000 010700 BR 5124
005122 000000 010700 012706 HALT
005124 010700 012706 000376 MOV PC, R0
005126 012706 000376 012767 MOV #376, SP
005132 012767 005146 172644 MOV #5146, 4
005140 005016 000240 000000 CLR (SP)
005142 000240 000000 010700 NOP
005144 000000 010700 012706 HALT
005146 010700 012706 000376 MOV PC, R0
>>>P
>>>R
R0=005150 R1=000004 R2=146050 R3=110436 R4=146000 R5=155662
SP=000376 PC=005170 PS=000010
>>>5130!
005130 000376 012767 005146 SWAB @12767(SP)
>>>5120!
005120 000401 000000 010700 BR 5124
005122 000000 010700 012706 HALT
005124 010700 012706 000376 MOV PC, R0
005126 012706 000376 012767 MOV #376, SP
005132 012767 005146 172644 MOV #5146, 4
005140 005016 000240 000000 CLR (SP)
005142 000240 000000 010700 NOP
005144 000000 010700 012706 HALT
005146 010700 012706 000376 MOV PC, R0
005150 012706 000376 012767 MOV #376, SP
005154 012767 005170 172622 MOV #5170, 4
005162 152716 177777 000000 BISB #177777, (SP)
005166 000000 010700 012705 HALT
005170 010700 012705 001000 MOV PC, R0
005172 012705 001000 012706 MOV #1000, R5
005176 012706 000376 012767 MOV #376, SP
005202 012767 005214 172574 MOV #5214, 4
005210 124645 000401 000000 CMPB -(SP), -(R5)
005212 000401 000000 010700 BR 5216
>>>P
>>>R
R0=005172 R1=000004 R2=146050 R3=110436 R4=146000 R5=000777
SP=000370 PC=005216 PS=000000
>>>5170!
005170 010700 012705 001000 MOV PC, R0
005172 012705 001000 012706 MOV #1000, R5
005176 012706 000376 012767 MOV #376, SP
005202 012767 005214 172574 MOV #5214, 4
005210 124645 000401 000000 CMPB -(SP), -(R5)
005212 000401 000000 010700 BR 5216
005214 000000 010700 012706 HALT
005216 010700 012706 000400 MOV PC, R0
005220 012706 000400 012767 MOV #400, SP
005224 012767 005236 172552 MOV #5236, 4
005232 134546 000401 000000 BITB -(R5), -(SP)
005234 000401 000000 010700 BR 5240
>>>P
>>>R
R0=005220 R1=000004 R2=146050 R3=110436 R4=146000 R5=000776
SP=000372 PC=005240 PS=000000
>>>P
>>>R
R0=006742 R1=000004 R2=146050 R3=110436 R4=146000 R5=000376
SP=001000 PC=006766 PS=000004
>>>6740!
006740 010700 012706 001000 MOV PC, R0
006742 012706 001000 012767 MOV #1000, SP
006746 012767 006766 171030 MOV #6766, 4
006754 005067 171026 005066 CLR 6
006760 005066 177340 000000 CLR 177340(SP)
006764 000000 010700 012706 HALT
006766 010700 012706 001000 MOV PC, R0
>>>P
>>>R
R0=006770 R1=000004 R2=146050 R3=110436 R4=146000 R5=000376
SP=001000 PC=007030 PS=000004
>>>6770!
006770 012706 001000 012767 MOV #1000, SP
006774 012767 007032 171002 MOV #7032, 4
007002 005067 171770 005067 CLR 776
007006 005067 171762 012767 CLR 774
007012 012767 000001 171356 MOV #1, 376
007020 012766 000000 177376 MOV #0, 177376(SP)
007026 000000 000422 026727 HALT
007030 000422 026727 171740 BR 7076
007032 026727 171740 000004 CMP 776, #4
PDP-11/35 (124KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B DL0
RT-11SB (S) V05.07
.R MSCPCK
.
R0=000042 R1=135570 R2=135552 R3=040000 R4=000200 R5=135552
SP=155654 PC=152124 PS=000004
>>>B HX0
HX 2.2 XXDP Cold boot..
BOOTING UP XXDP-XM EXTENDED MONITOR
XXDP-XM EXTENDED MONITOR - XXDP V2.5
REVISION: F0
BOOTED FROM HX0
124KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152000
TYPE "H" FOR HELP !
.R BKDM??
BKDMD0.BIC
>>>R
R0=005126 R1=000004 R2=146050 R3=110436 R4=146000 R5=155662
SP=000376 PC=005146 PS=000004
>>>
RT уже распознает (у автора всё таки эта пара неправильно описана)
PDP-11/35 (124KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B DL0
RT-11SB (S) V05.07
.R MSCPCK
.SHO CONF
RT-11SB (S) V05.07
Booted from DL0:RT11SB
USR is set SWAP
EXIT is set SWAP
KMON is set NOIND
MODE is set NOSJ
TT is set NOQUIET
ERROR is set ERROR
SL is set OFF
EDIT is set KED
FORTRAN is set FORTRA
KMON nesting depth is 3
Global .SCCA flag is disabled
CLI is set DCL, CCL, UCL, NO UCF
PDP 11/35,40 Processor
248KB of memory
Extended Instruction Set (EIS)
Memory Management Unit
50 Hertz System Clock
Memory parity support
SB timer support
Global .SCCA support
FPU support
Extended unit support
.
А вот тесты пока - фигВам, причём после исправлений трех неточностей в описании процессора (одна, правда, на прохождение тестов влияние не оказала) война идёт исключительно с защитой стека.
И вот тут у автора (по крайне мере для того варианта, который на этих двух процах) всё достаточно не точно - включая указание варианта защиты стека.
Вроде как у DEC два варианта защиты стека - простой и полный (плюс регистр защиты стека на некоторых моделях), но вот насколько они одинаковы для разных моделей - кто его знает... Для некоторых моделей (сейчас уже точно не скажу, но вроде только для простой модели) тесты на авторском варианте описания защиты проходили без проблем. А вот на этой паре - налетел конкретно на ошибки :)
там, вроде, "желтые страницы" есть.
там, вроде
Там, не вроде, и красные есть.
Жёлтую зону вроде удовлетворил, с красной бодаюсь. DisAsm сильно помогает - на предмет видеть "листинг" - для этого теста листинг что то не нашёлся..
И красную (по крайне мере для /35 /40) прошёл :) По тесту - есть ещё различия в работе процессора, но уже видна финальная лента :)
- - - Добавлено - - -
Ещё одна ошибка от автора PDP-2011 и первый тест /35 /40 моделей - есть! :)
PDP-11/35 (124KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>G
000043 000000 000000 000000
@ZZ
End Pass 000001
End Pass 000002
End Pass 000003
End Pass 000004
R0=000014 R1=173742 R2=165650 R3=003774 R4=173672 R5=157776
SP=000502 PC=165750 PS=000345
>>>B DL0
RT-11SB (S) V05.07
.R MSCPCK
.SHO CONF
RT-11SB (S) V05.07
Booted from DL0:RT11SB
USR is set SWAP
EXIT is set SWAP
KMON is set NOIND
MODE is set NOSJ
TT is set NOQUIET
ERROR is set ERROR
SL is set OFF
EDIT is set KED
FORTRAN is set FORTRA
KMON nesting depth is 3
Global .SCCA flag is disabled
CLI is set DCL, CCL, UCL, NO UCF
PDP 11/35,40 Processor
248KB of memory
Extended Instruction Set (EIS)
Memory Management Unit
50 Hertz System Clock
Memory parity support
SB timer support
Global .SCCA support
FPU support
Extended unit support
.BOO/FOR HX:
HX 2.2 XXDP Cold boot..
BOOTING UP XXDP-XM EXTENDED MONITOR
XXDP-XM EXTENDED MONITOR - XXDP V2.5
REVISION: F0
BOOTED FROM HX0
124KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152000
TYPE "H" FOR HELP !
.R BKDM??
BKDMD0.BIC
################################################## ###############
R0=022220 R1=000004 R2=014110 R3=110436 R4=000001 R5=010612
SP=014230 PC=012104 PS=000000
>>>
- - - Добавлено - - -
Поправил ещё одну авторскую ошибку (описание особенностей процессора) - и пошёл ещё один тест (по умолчанию он только пикает терминалом, так что лог не привожу) - BKTA??.BIC
- - - Добавлено - - -
Третий - сходу, без правок :)
XXDP-XM EXTENDED MONITOR - XXDP V2.5
REVISION: F0
BOOTED FROM HX0
124KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152000
TYPE "H" FOR HELP !
.R BKTB??
BKTBB0.BIC
#KT11-D ACCESS KEYS TEST, MD-11-DBKTB-B
#*
#*
#*
#*
#*
#
R0=000000 R1=002130 R2=100003 R3=000000 R4=022151 R5=077400
SP=001000 PC=003350 PS=000010
>>>
Рихтовка кода и проверка моделей на тестах.
Слегка поправил PDP-11/44 (особенности автоинкремента) и J11 (красный стек - у этого проца упрощённый вариант проверки на жёлтую-красную зоны)
PDP-11/34 прошёл тесты почти без замечаний. Не идёт FKKA?? (он пытается поиграться с кэшем, которого, по крайне мере сейчас, нет :) ) и как то странно ведёт себя FKTG?? (проходит загружка, на экран выдаётся ^C и - выход в XXDP)
Вожусь с прохождением тестов ДП, конкретно сейчас - с правильным заполнением SR1 при ошибке обращения со стороны процессора к шине. Попутно выяснилось, что нервно на правильность заполнения SR2 реагируют XM монитор XXDP и VM драйвер, по крайне мере, в варианте для SJ/FB мониторов RT-11. И как ни странно - RSX (по крайне мере + 4.6) на это дело фиолетово - грузится и работает.
Все ещё война с прохождением тестов ДП, если точнее - с правильным выставлением флагов в случает отказа или прерывания от ДП. По тестам не совсем понятна внутренняя логика, по описаниям (для тех процессоров, для которых есть) - тяжеловато понять и не факт, что описано без ошибок... В общем, медленно продвигаюсь вперёд. Заполнение SR1 вроде теперь тесты проходит (не факт плюс сценарии - типа операндов FPP в памяти, которые вообще пока не попадались описанными или в тестах), сейчас флаги в SR0
Как это ни странно, но PDP-2011 реализован в традициях... э... 1801ВМ2? - не помню, кто из наших процов читает ячейку памяти-destination в CLR и MOV :) Действительно, это позволяет использовать единую цепочку действий для этих команд и других, которым действительно надо прочитать её (типа ASL и BIS) перед записью нового значения. Но это не позволяет пройти тестам ДП от PDP-11/70. Пришлось исключить такое поведение :)
но PDP-2011 реализован в традициях... э... 1801ВМ2? - не помню, кто из наших процов читает ячейку памяти-destination в CLR и MOV
1801ВМ2 читает dest только в байтовых вариантах CLRB, MFPS. 1801ВМ1 читает dest при выполнении CLR(B), SXT, MFPS.
А вот T-11 (наш 1807ВМ1) вроде читает dest всегда.
MFPS
О, кстати, надо эту тоже вырубить, пока только CLR и MOV. Спасибо за наводку :)
SXT
Ну, эта и должна читать, вроде как... :)
А вот T-11 (наш 1807ВМ1) вроде читает dest всегда.
Этот проц весьма специфичен снаружи, процессорные платы с ним тоже, с ходу (под RT-11) не взлетел - надо смотреть особенности работы с ним.
Этот проц весьма специфичен снаружи
САМЫЕ распространенные универсальные процессоры(8085, 8086_8088,8031_8051,...) - такие же "снаружи".
САМЫЕ распространенные универсальные процессоры(8085, 8086_8088,8031_8051,...) - такие же "снаружи"
Какое мне дело до них?
А каким должен быть, на Ваш взгляд, процессор "снаружи", что бы не быть "специфичным" ?
Речь идёт не об абстрактном процессоре в вакууме, а процессорах семейства PDP-11. И они снаржи (микросхемы для микропроцессора, потому как платным процессора вообще только отличаются в плане Unibus и QBus) достаточно похожи. Больше того, с точки зрения ОС очень похожи. T11 и платы на его основе выбиваются из остального ряда. Ещё такие же выбивающиеся системы - семейство Pro (не не сам F11).
На этом вопрос закрыт.
а какое отношение платы процессора имеют к самому микропроцессору ? А интерфейс платы процессора к сигналам "на ножках микропроцессора" ? Это разные вещи, не связанные между собой. Если брать другие микропроцессоры DEC - F11 и J11, то они "по ножкам" - разные, выходит никакого внутреннего стандарта у DEC в этом плане - нет, а у T11, как раз - промстандарт, только делала DEC этот процессор не для того, что бы сделать на нем просто стандартные процессорные платы (хотя сделать - можно), а для других целей.
Захотелось почесать языком? Создавайте тему и вперёд. Эта тема - не для этого.
- - - Добавлено - - -
Борьба с Trap механизмом в ДП. С ним остались две ошибки в тестах.
Плюс одна ошибка - обработка недействительной моды процессора.
И что то там с с обработкой возврата из прерывания-переключения стека-ошибка при доступе в стек нового режима. Где тест наглухо виснет.
Вроде с Trap в ДП разобрался, тесты проходят. Так же поправил реакцию на mode 10 процессора - при включённом ДП тест ДП для PDP-11/70 настаивал на ошибке :)
Проверю, не сломалось ли что из за правок на PDP-11/34/35.
На очереди ошибка теста ДП PDP-11/70 с номером 67 - M.M. during an odd address abort sequence. В прошлом сообщении ошибку описал как "что то там с с обработкой возврата из прерывания-переключения стека-ошибка при доступе в стек нового режима" :)
Насколько я помню, ДП в PDP-11/44 сильно походит на ДП в PDP-11/70, его тоже постепенно включу в тестирование :)
- - - Добавлено - - -
Хм.. Ошибка на режим Supervisor PDP-11/34, скажем так, своя :) Ок, будем поправлять :)
PDP-11/34 снова проходит все тесты. Сдвинулся в тесте 67 для PDP-11/70 - тест не зависает, но от ДП неправильная инфа. Пока пойдут дальше - в последующих тестах насыпало ошибок...
- - - Добавлено - - -
Свою ошибку нашёл в отработке MFPI :) Специфический случай - видимо, в не тестовом софте не налетал :)
- - - Добавлено - - -
Ошибку посадил где то между 28.07 и 3.08 этого года :) Типчный ляпсус копи-паста :) Не займись тестами ДП для PDP-11/70 - кто её знает, сколько бы она ещё существовала :)
- - - Добавлено - - -
Атлычна, снесло сразу порядка шести ошибок :) Паяем дальше :)
- - - Добавлено - - -
Хе, некоторые тесты пропускаются, если PDP-11/70 забит памятью по полной :) Придётся сделать памяти меньше :)
- - - Добавлено - - -
В целом, я бы сказал, осталось забороть две ошибки :)
- Error during M.M. abort in trap sequence
- Одновременные red stack abort и abort от ДП.
- - - Добавлено - - -
Посмотрел на текст теста. Возможно, что то ещё вылезет - подозрение, что от неправильного "Одновременные red stack abort и abort от ДП" - наведёнка на следующий тест...
FKTH?? (тест ДП для PDP-11/34) частично ответил на вопрос - что будет c PS, если во время прерывания PS на стек удалось положить, а попытка положить PC на стек привела к прерывания от ДП - на стеке будут PC инструкции, с которой всё началось, но PS будет из вектор прерывания.
- - - Добавлено - - -
Одновременные ошибки по защите стека и от ДП - отдельная песТня, с которой ещё придётся повозиться... Попробую первой решить проблему - Error during M.M. abort in trap sequence, возможно, как раз из оперы предыдущего предложения...
В PDP-11/34 поправил, но на прохождении теста ДП PDP-11/70 это не повлияло... СМ дальше... :)
Уф.... :) Red Stack побеждён :)
Как сделать так, что бы при RedStackTrap и потенциальном MMUTrap возникал только RedStackTrap - я придумал сразу. И сделал. А вот дальше было весело. Ибо начал я ловить RedStackTrap где только не попадя :) И никак не мог въехать - ЧТО НЕ ТАК??? :) Оказалось - моя ошибка из разряда - хрен догадаешься, ибо всё вроде логично :) Теперь в паре RedStackTrap и MMUTrap выживает только сильнейший :)
Технически, осталась последняя ошибка. Из известных мне :) OddTrap и MMUTrap :) И там ситуация аналогична, то есть - пока не понятно - какого :)
Посмотрел конец теста. Жюткая проверка срабатывания yellow и red stack abort. И оно там где то циклиЦЦа... Похоже, не всё так просто с чем то из этого.. Сериал продолжается, серия примерно так четвёртая...
давно не следил за темой, потому вопрос, исходники текущие где? это как я понимаю уже не pdp2011 ниразу
потому вопрос, исходники текущие где? это как я понимаю уже не pdp2011 ниразу
У меня дома на компе :)
Нууу... Некоторые модули сильно переписаны, некоторые, скажем, процессор, ещё не так что бы сильно :)
А FPP вообще достаточно слабо :)
Уф... Вроде вычислил последнее проблемное место.
Это MMUTrap за которым (при обработке прерывания от MMU) возникает RedStackTrap :)
И была такая наведёнка, что я думал что это OddTrap с потенциальным MMUTrap - поэтому и не было понятно - что происходит.
Заблокировал проблемный код - и тест начал проходить с нулём ошибок - ну понятно, нуль пока фиктивный :) Думать и поправлять :)
Та-да-да-дам-дам-дам! Та-да-да-дам-дам-дам!
PDP-11/70 (1024KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B HX0
HX 2.2 XXDP Cold boot..
BOOTING UP XXDP-XM EXTENDED MONITOR
XXDP-XM EXTENDED MONITOR - XXDP V2.5
REVISION: F0
BOOTED FROM HX0
124KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152000
TYPE "H" FOR HELP !
.R EKBA??
EKBAD0.BIC
AA
CEKBAD0 11/70 CPU #1
END PASS
END PASS
END PASS
END PASS
END PASS
END PASS
END PASS
....
.R EKBE??
EKBEE1.BIC
CEKBEE0 11/70 MEM MGMT
CPU UNDER TEST FOUND TO BE A KB11-B/C
END PASS # 1 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 2 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 3 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 4 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 5 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 6 TOTAL ERRORS SINCE LAST REPORT 0
...
.R EMKA??
EMKAB0.BIC
CEMKAB0 1170 MAIN MEMORY DIAGNOSTIC <V14-00>
1024K WORDS OF MEMORY
1024K OF MJ11
0K OF MK11
К сожалению, пока ещё не айс:
.R EKBB??
EKBBF0.BIC
CEKBBF0 11/70 CPU #2
A
CC'S DIDN'T LOAD PROPERLY
ERRORPC PSW TST NUM
EXPECT ACTUAL
012110 000016 000012 000014
GRAJ E5(N(1)*SR15(1)) BAD OR ROM STATE BAD
ERRORPC R0 R1 TST NUM
EXPECT ACTUAL EXPECT ACTUAL
012202 000001 177776 000001 177777 000014
BAD CC'S ON DIV OVERFLOW, STATE DVD.10
ERRORPC PSW TST NUM
EXPECT ACTUAL
012546 000002 000012 000014
TMCC PRIORITY CLEAR DIDN'T GO LOW OR DIDN'T
GET THRU TMCA E43(2) ON ABORT CLEAR
ERRORPC TEST NUMBER
015750 000032
и (хочет кэш, которого, вестимо, нет)
.R EKBF??
EKBFD1.BIC
CEKBFD 11/70 UNIBUS MAP
CPU UNDER TEST FOUND TO BE A KB11-B/C
COULD NOT READ 177740 FROM CACHE LO ADDRESS REG (LOADRS)
POSSIBLE ERROR IN CACHE REGISTER DATA PATH
RECEIVD TESTNO ERRORPC
000000 000016 013024
COULD NOT READ 000003 FROM CACHE HI ADDRESS REG (HIADRS)
POSSIBLE ERROR IN CACHE REGISTER DATA PATH
RECEIVD TESTNO ERRORPC
000000 000016 013062
COUNT PATTERN FAILURES IN CACHE REGISTERS
REGISTR EXPECTD RECEIVD
ADDRESS DATA DATA TESTNO ERRORPC
177750 000020 000000 000017 005640
177750 000040 000000 000017 005644
177750 000060 000000 000017 005644
177750 000100 000000 000017 005644
Теперь посмотрю, что с PDP-11/34 и после этого, выставив опять полный объём памяти на PDP-11/70 - проверю как с полным объёмом памяти тесты ДП (некоторые тесты на полном объёмы отключаются)
Даже не знаю, считать ли это косяком :) Так как у PDP-11/34 простая модель защиты стека, а у PDP-11/70 - полная :) Соотвественно, (мой) код для простой модели был просто не дописан, а использовал вариант от автора PDP-2011. В которым была небольшая ошибка. И она теми тестами, которыя гонял, похоже не ловилась :) А после моей доработки под PDP-11/70 и (ещё на тот момент) не сделанной доарботки под PDP-11/34 - словилась :) Поправил.
На текущий момент для PDP-11/34 проходят тесты FKAA??, FKAB??, FKAC??, FFPA??, FFPB??, FFPC??, FKTHA0 и FKTHB0
Заканчивается синтез PDP-11/70 (с полным объёмом памяти), как прогоню EKBA?? и EKBE?? - отпишусь.
- - - Добавлено - - -
Блин :) Накосячил :) Поправил ошибку, перезапустил синтез :)
- - - Добавлено - - -
EKBA?? и EKBE?? - без ошибок
Синтез и последующее тестирование PDP-11/34
- - - Добавлено - - -
Ок, PDP-11/34 свою цепочку тестов тоже проходит :)
- - - Добавлено - - -
Поправил ошибку в заполнении SR1 на J11. Тест ДП заваливается в конце - для PDP-11/94 (unibus). Сейчас гляну - как с PDP-11/93 :)
- - - Добавлено - - -
А на PDP-11/93 идёт без проблем :) Харошая новость - значит, примерно догадываюсь, где бабёр порылся :)
ЖЖЖЖЖЖ.. Сохраненение в стек и ошибка по таймауту при выключенном ДП...
Уф.. очередное расхождение действительного и желаемого поправил. Количество тестируемых PDP-11 растёт :) Удобно всё таки синтез делать из командой строки - запустил синтезироваться на весь текущий набор, а потом, по мере готовности - тесты гоняю :)
Простенько и со вкусом :)
На SDRAM
PDP-11/04 (28KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B DL0
RT-11SB (S) V05.07
.R MSCPCK
.@T
.RUN SPEED0
Тест быстродействия (кэш, если он есть, выключен)
BR .+2 6 800 715 оп./сек
R0(23456.)+R0(12345.) empty 1 699 616 оп./сек
R1(23456.)+R0(12345.) 1 332 068 оп./сек -> 6 159 750 оп./сек
.SHOW CONFIGURATION
RT-11SB (S) V05.07
Booted from DL0:RT11SB
USR is set SWAP
EXIT is set SWAP
KMON is set NOIND
MODE is set NOSJ
TT is set NOQUIET
ERROR is set ERROR
SL is set OFF
EDIT is set KED
FORTRAN is set FORTRA
KMON nesting depth is 3
Global .SCCA flag is disabled
CLI is set DCL, CCL, UCL, NO UCF
PDP 11/15,20 Processor
56KB of memory
50 Hertz System Clock
Memory parity support
SB timer support
Global .SCCA support
FPU support
Extended unit support
.
На BRAM
PDP-11/04 (28KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B DL0
RT-11SB (S) V05.07
.R MSCPCK
.@T
.RUN SPEED0
Тест быстродействия (кэш, если он есть, выключен)
BR .+2 22 212 001 оп./сек
R0(23456.)+R0(12345.) empty 5 547 971 оп./сек
R1(23456.)+R0(12345.) 4 341 341 оп./сек -> 19 961 076 оп./сек
.SHOW CONFIGURATION
RT-11SB (S) V05.07
Booted from DL0:RT11SB
USR is set SWAP
EXIT is set SWAP
KMON is set NOIND
MODE is set NOSJ
TT is set NOQUIET
ERROR is set ERROR
SL is set OFF
EDIT is set KED
FORTRAN is set FORTRA
KMON nesting depth is 3
Global .SCCA flag is disabled
CLI is set DCL, CCL, UCL, NO UCF
PDP 11/15,20 Processor
56KB of memory
50 Hertz System Clock
Memory parity support
SB timer support
Global .SCCA support
FPU support
Extended unit support
.
В прошлый раз https://zx-pk.ru/threads/28952-pdp-11-na-fpga.html?p=1125042&viewfull=1#post1125042, что бы достичь того же (а именно - процессорное ядро на 200 МГц) - пришлось немного похакать код :) И подбирать хаки, которые позволили бы ему запуститься :) Правда - и результат повыше :)
Сегодня всё произошло банально просто - переключить вход тактовой в процессорном модуле на 200 МГц. И всё :)
Попробую-ка ради интереса собрать и проц с ДП (в прошлый раз нивкакую) - фдрук? :):)
- - - Добавлено - - -
Когда я только начинал возиться с PDP-2011 - оно у меня не всегда и на 25 МГц стартовало :)
- - - Добавлено - - -
Проц с ДП ожидаемо (внутри сложней, ещё доработки нужны) не завёлся :)
Шаловливые руки добрались до PDP-11/60 - весьма интересный экзеплярчик PDP :)
Аааа, кайф!
PDP-11/04 (28KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B HX0
HX 2.2 XXDP Cold boot..
CPU NOT SUPPORTED BY XXDP-XM
BOOTING UP XXDP-SM SMALL MONITOR
XXDP-SM SMALL MONITOR - XXDP V2.6
REVISION: E0
BOOTED FROM HX0
28KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152010
TYPE "H" FOR HELP
.R GKAA??
GKAAA0.BIC
END OF DGKAA
END OF DGKAA
END OF DGKAA
END OF DGKAA
R0=177777 R1=000000 R2=000304 R3=000000 R4=000000 R5=000000
SP=000500 PC=002060 PS=000340
>>>B HX0
HX 2.2 XXDP Cold boot..
CPU NOT SUPPORTED BY XXDP-XM
BOOTING UP XXDP-SM SMALL MONITOR
XXDP-SM SMALL MONITOR - XXDP V2.6
REVISION: E0
BOOTED FROM HX0
28KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152010
TYPE "H" FOR HELP
.R GKAB??
GKABC0.BIC
END OF DGKAB
END OF DGKAB
END OF DGKAB
END OF DGKAB
END OF DGKAB
END OF DGKAB
END OF DGKAB
R0=121725 R1=177777 R2=000300 R3=016260 R4=000001 R5=000776
SP=000500 PC=014316 PS=000004
>>>
Нашёл мелкую... э... даже не знаю - ошибку или неточность в ДП, которая проявлялась в процах без ДП (модуль общий) на SDRAM :) Пока понял, что ошибка вовсе не в модуле ДП... Поправил :) Контрольный прогон :) Отпишусь по окончанию :)
Захотелось мне тут, как обычно :D, странного :) Дней где то пять допиливания-битья головой апСтенку и...
Было (100 МГц тактовая)
PDP-11/04 (28KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B DL0
RT-11SB (S) V05.07
.R MSCPCK
.@t
.RUN SPEED0
Тест быстродействия (кэш, если он есть, выключен)
BR .+2 14 260 648 оп./сек
R0(23456.)+R0(12345.) empty 3 331 753 оп./сек
R1(23456.)+R0(12345.) 2 561 572 оп./сек -> 11 081 194 оп./сек
Стало (100 МГц тактовая)
PDP-11/04 (28KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B DL0
RT-11SB (S) V05.07
.R MSCPCK
.@T
.RUN SPEED0
Тест быстродействия (кэш, если он есть, выключен)
BR .+2 24 955 032 оп./сек
R0(23456.)+R0(12345.) empty 5 545 879 оп./сек
R1(23456.)+R0(12345.) 3 993 216 оп./сек -> 14 263 167 оп./сек
Изменение существенное, другие модели процов пока не проверял, возможно корректировка результатов :D
- - - Добавлено - - -
Получается - BR - четыре такта (такт - подготовка, 2 такта - чтение команды, такт - декодирование и выполнение), а ADD r,r - 7 тактов (такт - подготовка, 2 такта - чтение команды, такт - декодирование, такт - чтение исходного регистра, такт - сложение, такт - запись регистра). В/в - надо думать, а вот работу с регистрами точно надо оптимизировать :)
Немного баловства :)
PDP-11/04 (28KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B DL0
RT-11SB (S) V05.07
.R MSCPCK
.@T
.RUN SPEED0
Тест быстродействия (кэш, если он есть, выключен)
BR .+2 28 556 294 оп./сек
R0(23456.)+R0(12345.) empty 7 130 659 оп./сек
R1(23456.)+R0(12345.) 5 395 933 оп./сек -> 22 180 193 оп./сек
.SHOW CONFIGURATION
RT-11SB (S) V05.07
Booted from DL0:RT11SB
USR is set SWAP
EXIT is set SWAP
KMON is set NOIND
MODE is set NOSJ
TT is set NOQUIET
ERROR is set ERROR
SL is set OFF
EDIT is set KED
FORTRAN is set FORTRA
KMON nesting depth is 3
Global .SCCA flag is disabled
CLI is set DCL, CCL, UCL, NO UCF
PDP 11/15,20 Processor
56KB of memory
50 Hertz System Clock
Memory parity support
SB timer support
Global .SCCA support
FPU support
Extended unit support
Скоро я названия тестов процессоров PDP-11 буду наизусть помнить :) Закончил прогон тестов на текущих тестируемых PDP-11 после последних (весьма приличных) изменений. Нашёлся один косяк - последствия последних изменений, ну и некоторые тесты пока ещё не проходят - это было и раньше :)
Бум исправлять косяк :)
Ещё одно крупное вмешательство в процессор. State machine процессор стал ближе к микрокодированному варианту :)
Как обычно, не обошлось без косяков :) С одним боролся почти сутки (называется - замыленный глаз - ошибка прям перед глазами, а не видел..) Со вторым - часа четыре :) Завтра опять день тестов :)
Ещё пара косяков (один из них - в FPP - "обнаружила" RSX, но не тесты :) ) найдена и поправлена :)
- - - Добавлено - - -
В коде FullODT, пока возился с тестами, поправил несколько мелких косяков - все касались описаний для декодировщика команд - то мнемонику не так написал, то маски выделения операндов перепутал местами. Но когда решил таки добить тест EKBB для PDP-11/70, выяснилось, что не хватает существенного функционала :) Добавил, тестирую :)
- - - Добавлено - - -
Как известно, у некоторых процессоров PDP-11 (в частности, у PDP-11/70) есть альтернативный набор регистров R0-R5. Теперь показываются и они :)
>>>S
R0=166667 R1=000102 R2=000000 R3=000000 R4=000000 R5=000000
R0=100000 R1=000000 R2=000001 R3=052525 R4=052525 R5=006250
SP=001100 PC=012040 PS=034140
012040 000264 071002 013767 SEZ
R0=166667 R1=000102 R2=000000 R3=000000 R4=000000 R5=000000
R0=100000 R1=000000 R2=000001 R3=052525 R4=052525 R5=006250
SP=001100 PC=012042 PS=034144
>>>S
R0=166667 R1=000102 R2=000000 R3=000000 R4=000000 R5=000000
R0=100000 R1=000000 R2=000001 R3=052525 R4=052525 R5=006250
SP=001100 PC=012042 PS=034144
012042 071002 013767 177776 DIV R2, R0
R0=166667 R1=000102 R2=000000 R3=000000 R4=000000 R5=000000
R0=100000 R1=000000 R2=000001 R3=052525 R4=052525 R5=006250
SP=001100 PC=012044 PS=034152
>>>
- - - Добавлено - - -
Не понравился внешний вид :) Переделал. Теперь так:
PDP-11/70 (2044KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>R
R0=000106 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
aR0=000000 aR1=000000 aR2=000000 aR3=000000 aR4=000000 aR5=000000
SP=000000 PC=165020 PS=000340
>>>
PDP-11/34 (124KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>R
R0=000042 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
SP=000000 PC=165020 PS=000340
>>>
PDP-11/03 (28KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>R
R0=000003 R1=000000 R2=000000 R3=000000 R4=000000 R5=000000
SP=000000 PC=165020 PS=000340
>>>
PDP-11/70 - есть альтернативный набор, PDP-11/34 и PDP-11/03 - нету.
Обнаружилось ещё одно место "интересного" поведения PDP-2011 :) При выполнение команды типа JMP label автомат состояний прочитает слово по адресу label на этапе выполнения команды JMP, а потом ещё раз - после выполнения :) Ибо это же состояние используется в командах типа NEG label и BIS ..., label - в которых надо прочитать слово-операнд оттуда :) В опчем - чистить-оптимизировать есть ещё что :)
Сделан существенный шаг к возможности получения однотактовых команд :) Ну, при условии, что обмен с памятью будет успевать за этим делом :) Или, если сказать по другому - в state машине два state-а объединены в один.
Навскидку - все команды коротких переходов стали однотактовыми :)
К сожалению, сегодняшний день практически вылетел. Где то с месяц (точно не скажу, да и как бы без разницы) задурил рабочий комп. После долгих плясок
а) научился его включать так, что бы он начал работать
б) вытащил из кладовки один из серваков - всё равно сейчас, когда активно курсы не провожу - он только простаивает. А учитывая, что процы у него шустрее (3.33 против 2.3) - синтез на нём идёт повеселее. Собственно, я в виртуалку на нём давно с Квартусом переехал, но учитывая, что для подключения к нему нужен э.. другой комп... вытащил и сделал из него новый рабочий комп. Хрен с ним, что процессор постарее - работает всё равно шустрее :)
И вот где то с неделю назад начал он тоже... поддуривать. Сначала грешил на Windows, но, после просмотра логов, понял, что не она виновата, а что то из железа. Нашлось две потенциальные проблемы - периодическая корректируемая ошибка ECC памяти и приличный нагрев (при синтезе) одного из процов (как не плясал, не смог разбросать нагрузку на оба, может, потом повожусь). Поскольку давно не пылесосил и не менял термогриз, решил, что пора. И не знамо когда я бы это сделал, но с четверга вылет (причем не в голубой экран, а комп просто выключается и заново включается) сильно участился, а вечером в пятницы - максимум работы - где то 2-3 часа. Так что, когда в магазин привезли грязь, сходил за ней и выполнил обслуживание компа :) Температура процов сильно снизились (даже при синтезе), но.. 1-2 часа - и вылет. Давно Windows в логи писала странно-интересную ошибку от источника WHEA-Logger - типа, восстановимая ошибка hardware. Какого - не показывала, а если посмотреть в двоичном виде - можно было увидеть начало строки CPER. То есть подозрение пало на проц - но на какой из двух - фиг её знат... Процы покупал у китайцев по дешёвки, зная их нравы и учитывая стоимость - купил 4 одинаковых. Одна пара и работала. Подумав, что нагревался только один из двух (cpu1) и его (если он слегка был не в кондиции), излишний нагрев мог того-самого, решил первым заменить его.
Отаботал после замены примерно час, ошибки от WHEA пока нет. Смотрю дальше, что будет...
Может и на втором, который первый - тоже с процом (процами) что? Правда на нем процы я не у китайцев брал :)
А, да, ошибки ECC с некоторых пор исчезла - я частично пропылесосил память и её разъёмы - может это, а может то, что вытащил-воткнул память, но помогло...
дык как бы синтез идёт преимущественно в одно жало. Сам синтез/имплементация однопоточный алгоритм. современные сапр только начали/имеют поддержку нескольких процов и то фигово. При синтезе важна скорость проца и памяти. и да процы греются не слабо (тот на котором синтез идёт).
пс: после почти годовых извращений с BSOD (падало по причине hammer-bug ram) - купил xeon с ECC памятью. whem это как раз из/для контроля есс - ну или из этой области.
ps: verilog or vhdl исходники?
пс: в бытность был AMD-X5-133ADZ дык вентилятор на нём забился пылью, что не вращался совсем - "тупо" зависало до перезапуска.
пс мастхав https://www.memtest86.com если пройдёт полный цикл всех тестов - значит память+проц=ок
После очистки всего от пыли на материнки (нет, вентиляторы на процессоре вращались нормально и до почистки) температура выше 53 не поднималась (очень изредко), до смены термопасты могла уйти до 73 (из макс, что видел), но обычно плясала в районе 65.
Стоят xeon-ы, память с ecc, но в логах биоса сейчас нет инфы про ошибки. Выключается-включается именно блок питания, никаких bsod-ов (поставлено было на неавтоматический перезапуск).
Смена проца не помогла. Сейчас вообще перестал запускаться - жму кнопку включения, оно вроде включается, но светодиод загорается и тухнет (как будто КЗ, но какие то напряжения подаются - скажем, вентиляторы вращаются, винты стартуют) и комп не запускается. Попробую почистить и его и посмотрю, что дома есть из блоков питания.. Не знаю пока, на что грешить...
П.С. vhdl
- - - Добавлено - - -
если пройдёт полный цикл всех тестов
Скока она будет тестить 240 гигов? :)
Очень похоже на БП. Кондеры выходные вздуться могли.
Очень похоже на БП
Я тоже к этом склоняюсь. БП покупал вроде неплохие (Corsair AX850), но.. 10 лет - это 10 лет.. Поменял на другой, из загашника, где то с полчаса уже работает, посмотрю, что будет с этим...
- - - Добавлено - - -
Первое - опять появились ошибки ECC - за час с небольшим - пара штук. Регистрирует только процессор CPU1 (в какой то планке, которая к нему ближе?)
Второе - похоже, ошибки от WHEA - это как раз ошибки ECC - тоже две и примерно в тоже время.
- - - Добавлено - - -
Выключил, воткнул видюху, включил, пересел за него. Теперь более длительно включение - всё, что хотел - воткнул. Наблюдаю.
Ещё ошибки CRC - в логах bios-а и от WHEA (практически одновременно). Всё больше вероятность того, что сыпались ошибки не от проца, а ECC памяти.
Похоже, источник проблем найден, пять часов почти (начали сыпаться ECC) без проблем. Что то у меня впечатление, что это от БП (он менее мощный и хотя вроде тянет - но был у меня прецедент, когда память начинала сыпать ошибки на определённом блоке питания на штатной частоте, а при снижении частоты - работала без проблем, а на другом - и на штатной без проблем работала. Закажу блок питания, когда придёт - посмотрю на память
- - - Добавлено - - -
В корсар загляну - внешне (кондёры) вроде норм, но...
У меня тоже так бывало, когда сервак отпашет больше 5-ти лет, начинает сбоить, первым делом, менял БП. Но на новый, конечно. Обычно помогало. Но бывало, что менять приходилось почти всё. И процессоры деградировали из за диффузии, и память и scsi контроллеры и чипсеты. Как бы не было надёжно серверное железо, но и оно умирает. Его конечно и эксплуатируешь совсем с другими нагрузками. На мамках, раньше, тоже бывало, что улетали кондеры в цепях питания ядра. По внешнему виду, можно и не понять (хотя, как правило, видно) , и тестером не заметить изменений. Осциллографом ткнешь, сразу видно большие пульсации.
Сейчас, твердотельные кондеры, вроде как по надёжнее.
Нового под рукой не оказалось :) Но учитывая звоночки, начну покупать разное новое на замену. Вот только с мамкой-процами-памятью пока знаю - на что. В принципе, нагрузки у меня не такие уж сильные (всё таки домашнее хозяйство), но понятно, что стопятьсот лет служить не будет.. Кстати, как это не странно (ТТТ) но винты ещё держутся - на этом серваке им тоже за 3000 дней :)
Скока она будет тестить 240 гигов? :)
Хз. 64ГБ возможно что то около часа. первые две трети тестов (от общего числа) довольно быстро, а оставшиеся долго. давно это было - точно не помню (то что не 10 мин и не 3 часа - это точно). Наночь поставить ?
ПС: кстати про БП - это мысль. надо будет по попробовать поменять оный на сбоящем компе (там где память у меня "сыпалась").
hdd "принято" смотреть https://hdd.by/victoria/
Ну, возможный источник проблем вроде определён, в начале недели (когда начались первые сбои) комп гарантированно не переживал суток работы, оставлю включённым, посмотрим, что будет. Если это всё таки БП (а пока всё к этому идёт) - проблему с ECC буду уже смотреть на новом БП.
- - - Добавлено - - -
А пока продолжаю мучать PDP-2011 :) Ещё одна мысль пришла, как добавить микропрограммного подхода :) Сделал первый тестовый вариант - посмотрим, что будет после синтеза :) Но после предыдущего вмешательства остался ещё где то косяк с обработкой желтой и красной границы стека - есть некоторый шанс, что если придумка взлетит - решится и проблема границ.
Почти 30 часов - полёт норм... Ну почти нормальный - безбожно сыпет корректируемыми ECC ошибками - за примерно 11 часов - примерно 230 раз. В среду приедет новый БП, посмотрим, как с ним будет - если будет продолжаться - попробую вычислить DIMM(ы), который (которые) поддуривают :)
- - - Добавлено - - -
Ну, хоть есть возможность мучать PDP-2011 :)
2012 - 2013 года выпуска ?
https://en.wikipedia.org/wiki/Row_hammer
Фик её знает, проявляться так активно начало только на этом БП. На корсаре до того, как он начал дурить - чисто было. Я так думаю, что для этого БП (575 ватт) нагрузка приличная - или напряжение слишком просаживается (пусть и в пределах разброса) или шум по питанию сильный, а какая нибудь планка не справляется - как я писал - было у меня похожее с DDR2 (но там без ECC, так что сразу - кирдык). Вот придёт новый БП - тогда и будем поглядеть
- - - Добавлено - - -
Год не помню, но им где то 8-10 лет. Вот опять полезу БП менять - можно будет посмотреть, какой он
может всё вместе наложилось. и память и бп и чёрт в ступе...
- - - Добавлено - - -
есс исправляет в общем(в наипростейшей конфигурации) случае одинарные ошибки. обнаруживает двойные, остальное может и не обнаружить и не исправить.
есс исправляет
Я знаю, что делает ECC.
Пока на выходе мы имеем, что с другим БП система запустилась, отработала больше суток, регистрируются корректируемые ошибки ECC, но при этом пока ничего не вылетало. И с моей точки зрения - БП надо бы помощнее, всё таки и xeon-ы и видюха - жрущие. Приедет на 850 - посмотрим, что будет с ним :)
Пилим и перепиливаем :) Полный армаггедец в PDP-2011 устроил :) Пока в процессоре :)
Комп по прежнему работает - больше двух суток без ошибок (ну если не считать correctable ECC). Завтра во второй половине должне привезти БП, но когда буду менять - пока не знаю, очень может быть, что в выходые только доберусь...
Равлекался с тестом D0N?. Результат - поправлено описание PDP-11/20 и усправлена ошибка в работе модуля процессора :)
В процессе поиска и разборки с файлами тестов оказалось, что образы перфолент можно поместить в образ диска XXDP и они вполне себе запускаемые :) Ну и в этом же процессе наткнулся на некие файлы, один из которых привлёк моё внимание :)
Итак, встречаем
PDP-11/20 (28KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B HX0
HX 2.2 XXDP Cold boot..
CPU NOT SUPPORTED BY XXDP-XM
BOOTING UP XXDP-SM SMALL MONITOR
XXDP-SM SMALL MONITOR - XXDP V2.6
REVISION: E0
BOOTED FROM HX0
28KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152010
TYPE "H" FOR HELP
.R BASIC
BASIC .BIN
PDP-11 BASIC, VERSION 007A
*O
READY
10 LET A=10
20 LET B=21
30 PRINT A+B
RUN
31
STOP AT LINE 30
READY
из Punch Tape System или PTS-11 :) Собственно, откуда растут корни всех тестов PDP-11 :) Как и LDA формат :)
- - - Добавлено - - -
А, да, новый БП приехал, но как и думал - руки пока не доходят до него - только завтра вечером - самое раннее - поменяю, а скорее всего - с утра в субботу :) И комп успешно проработал четверо суток без проблем (не считая ошибок ECC), так что всё таки БП...
- - - Добавлено - - -
Есть задумка, как прицепить читалку-писалку "перфоленты" к PDP-2011, можно будет тогда поразвлекаться с программами из неё (жОсткий хардкор будет :) ), но.. тут опять всё упирается в свободное время....
В процессе поиска и разборки с файлами тестов оказалось, что образы перфолент можно поместить в образ диска XXDP и они вполне себе запускаемые :) Ну и в этом же процессе наткнулся на некие файлы, один из которых привлёк моё внимание :)
Итак, встречаем
PDP-11/20 (28KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B HX0
HX 2.2 XXDP Cold boot..
CPU NOT SUPPORTED BY XXDP-XM
BOOTING UP XXDP-SM SMALL MONITOR
XXDP-SM SMALL MONITOR - XXDP V2.6
REVISION: E0
BOOTED FROM HX0
28KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152010
TYPE "H" FOR HELP
.R BASIC
BASIC .BIN
PDP-11 BASIC, VERSION 007A
*O
READY
10 LET A=10
20 LET B=21
30 PRINT A+B
RUN
31
STOP AT LINE 30
READY
из Punch Tape System или PTS-11 :) Собственно, откуда растут корни всех тестов PDP-11 :) Как и LDA формат :)
- - - Добавлено - - -
А, да, новый БП приехал, но как и думал - руки пока не доходят до него - только завтра вечером - самое раннее - поменяю, а скорее всего - с утра в субботу :) И комп успешно проработал четверо суток без проблем (не считая ошибок ECC), так что всё таки БП...
- - - Добавлено - - -
Есть задумка, как прицепить читалку-писалку "перфоленты" к PDP-2011, можно будет тогда поразвлекаться с программами из неё (жОсткий хардкор будет :) ), но.. тут опять всё упирается в свободное время....
Спасибо тебе человечище я столько времени страдаю запуская программы через absloader посредством переписывания программы под адрес монитора, а тут сказывается вон как просто можно сейчас попробовал на тмос 2 работает
Спасибо тебе человечище
Не за что :) Я сам вот только что до такого додумался - и то, только потому, что был один тест только в виде образов перфоленты - а дальше начала думалка работать :) Единственнное, что ещё делаю - срезаю лидирующие нули до первого байта 001. Но не уверен - нужно ли это :)
Не за что :) Я сам вот только что до такого додумался - и то, только потому, что был один тест только в виде образов перфоленты - а дальше начала думалка работать :) Единственнное, что ещё делаю - срезаю лидирующие нули до первого байта 001. Но не уверен - нужно ли это :)
У меня есть программа превращения lda в образ памяти, но программы слепленные из 2-х трёх отдельных модулей или с кучей массивов тупых переменных она не берет. Могу портировать то что вам нужно.
У меня есть программа превращения lda в образ памяти
Могу портировать то что вам нужно
Спасибо, мне это не требуется
Первая "хирургическая операция" по разделению монолита процессора. "Вырезал" в отдельный process запись в регистры. Пока без особой оптимизации получившегося "органа". "Пациент" скорее жив, чем мёртв :D
Не всё тесты находят, не всё :) В процессе оптимизации неправильно описал запись в регистры для команд MTPI/MTPD. RT-11 XM-ZM подвисали, RSX-11M-Plus вылетало в отладчик, а три теста для J-11 (на нём искал причину) - ZKDJ??, ZKDK?? и ZKDL?? весело рапортовали - усё упорядку, шэф :)
Ещё один кусок кода (запись в psw) вырезал из монолита. Теперь проверка и оптимизация кода. На первый взгляд - пациент скорее жив (уже попробовал PDP-11/03 и 04), чем мертв (но не пробовал на компах с ДП)
Интересное прохождение у теста FKTH (PDP-11/34, ДП) - каждые два последовательных прохода (они чем то ешё друг от друга отличаются, но пока не понял) в PSW выставляется или снимается (на полные два прохода) бит T, а 14-ый вектор указывает на команду RTT - то есть на проходе с выставленным T битом после каждой команды (ну или почти каждый, ибо используются и команды типа IOT, EMT и TRAP - их обработчики обрабатываются без T бита) идет прерывание. Не особо вникал (если оно и есть) по документации - какую цель преследовали писатели такого экзотического поведения :) Но я посадил где то ошибку при занесении в текущий режим процессора значения 10 (недействительный режим), при этом обламывается обработка T-бита в определённых ситуациях и, судя по тому, что я наблюдаю похожее непрохождение тестf у каких то ещё процов (если память не изменяет - тест ДП для J-11 и где то ещё) - они работают по такому же сценарию :)
Похоже ошибся с тем, какие ещё тесты ДП ведут себя так же - не для J-11, а для F-11 (читай - PDP-11/23 - /24). Очередное большое тестирование, но J11 ещё не добрался, как доберусь - отпишусь :)
Тест ДП от PDP-11/70 использует прерывание по T биту, а от J-11 - нет :)
Ошибки, пока ещё имеющие место быть после разрезания ядра процессора на части.
Из существенных осталась ошибка прерывания по неправильному режиму в PSW и одновременному установленному T биту. Вроде как, если я правильно понял сценарий. Поскольку в тестах отследить этот момент тяжело, попробую воспроизвести на небольшом модуле, что бы понять, что происходят внутрях процессора.
Из несущественных - где то сидит ошибка во входе или выходе в или из режима пульта. Жить не мешает, но периодически действует на нервы. Попробую вычислить после устранения первой ошибки :)
- - - Добавлено - - -
Тестовый модуль вполне воспроизводить проблему - хорошо! Теперь можно посмотрять, что внутри проца творится, точнее, через какие state он проходит :)
BlaireCas
05.12.2021, 13:38
Глупый вопрос, но что в итоге получиться должно? Эмуляция некоей реальной машины семейства PDP-11 со всеми ее таймингами/прерываниями/портами/уж не знаю чем еще на современном железе?
То-есть в итоге получится какая-нибудь коробка к которой можно будет подключить клавиатуру/дисплей (уж как-нибудь) и запустить там RT-11?
Что бы можно было собрать любую модель PDP-11, которая проходила бы все существующие для данной модели в XXDP тесты и на которой можно было загрузить (на той, где это в принципе возможно) любую операционку от DEC.
Это в идеале.
Соотвествие таймингу исходной модели - не цель.
Создание готовой коробки - не цель.
И вообще - это просто хобби.
Все ещё пытаюсь понять причину ошибочного поведение проца при MMU trap на фоне T bit trap-а...
Попутно, сегодня, в очередной раз подпилил диагностический вывод разного на светодиодные индикаторы и цифирки. Теперь удобней настраивать - что будет показываться при разных положениях движка. Надо восстановить пошаговые режимы на уровне команд и на уровне микротактов - можно будет внимательно рассматривать разное внутри PDP :)
Всё дальше реализация топ-модуля от первоначального первобытного кошмара :)
АААА!!!! Долгое вычисление - где возникал сбой, попытка понять - почему и вот пазл сложился!
>>>B HX0
HX 2.2 XXDP Cold boot..
BOOTING UP XXDP-XM EXTENDED MONITOR
XXDP-XM EXTENDED MONITOR - XXDP V2.5
REVISION: F0
BOOTED FROM HX0
124KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152000
TYPE "H" FOR HELP !
.R EKBE??
EKBEE1.BIC
CEKBEE0 11/70 MEM MGMT
CPU UNDER TEST FOUND TO BE A KB11-B/C
END PASS # 1 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 2 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 3 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 4 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 5 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 6 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 7 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 8 TOTAL ERRORS SINCE LAST REPORT 0
PSW я давно разобрал на составные части, теперь под раздачу попал FPS :) Запускаю сборку всего, что попало под первичное тестирование, завтр (сегодня, сегодня :) ) очередной день тестирования :)
Всё с предыдущими изменениями более-менее, сегодня - очередной день выправления поведения процессоров на основе тестов.
маленький вопросик (не по теме) - какой ключ у PIP в RSX вместе с копированием файлов создает справочник куда копировать ?
какой ключ у PIP в RSX
/UF
Очередной, но не совсем полный распил монолитного процесса в процессоре, скорей - подготовка. И сильное изменение декодера команд. Раньше это был большой if - elsif - elsif - else - end if (на выходе - цепочка мультиплексоров), теперь это отдельные небольшие и относительно небольшие блоки if - end if. На выходе всё равно некоторая цепочка мультиплексоров (предположительно - поменьше), но такое будет легче распилить на отдельные процессы :) Ну и длительная борьба с ошибкой. Сначала вообще не понятно было, что творится (некоторые процы взлтелали, некоторые нет), но постепенно дошло - где, а потом - почему.
Ну а началось всё с того, что некоторые процессоры реагируют на запрос прерывания перед выполнением команды (точнее - большинство), а некоторые - после выполнения (на вскидку, так как с него и началось - PDP-11/35). Ловится в тестах последовательностью типа
10$:
TSTB @#177564
BPL 10$
CLR @#177776
BIS #100, @#177564
TRAP 0
Для первых первым отработает запрос на прерывание от консоли, для вторых - выполнится TRAP 0 и потом уже проц посмотрит на запрос прерывания от консоли
Эта цель пока ещё не достигнута, но шаг к ней сделан :)
Уф.... Подобрал такую работу с сигналами, что
а) rt-11 грузится и работает (SJ-XM мониторы)
б) тесты проходят до некоего известного неправильного сбоя в одном из них - не связанного с обработкой запроса на прерывание.
в пункет б - сбой, если я правильно понимаю, связан с прерыванием работы со стеком - предположительно - жёлтая граница. Но это место ещё надо разобрать - правильно ли я понимаю - чего он хочет.
- - - Добавлено - - -
Да, это сбой по жёлтой, а следующий подтест - по красной границе стека в MFPI. Желтую поправил (и тест пошёл дальше), а про красную как-то забыл... :) Через минут 10 можно будет глянуть, что дальше :)
- - - Добавлено - - -
Посмотрел (пока синтезируется), что в тесте дальше (FullODT в этом плане - крайне удобная вестчь на предмет отладки процессора в тестах :) ) - вроде как на достаточно большой кусок никакого криминала быть не должно. Ню будем посмотреть :)
- - - Добавлено - - -
Ну да, ну да - копипаст и ошибки приНём - это наше всё :) Жду нового синтеза :)
- - - Добавлено - - -
Ндя... случай посложней. MFPI извлекает слово по адресу из предыдущего режима, устанавливает флаги и только потом трапается по красной границе стека... А у автора PDP-2011 установка флагов делает по результату выполнения операции - всё гонится, даже простые операции типа пересылки слов, через АЛУ, котороё и выдаёт флажки..
- - - Добавлено - - -
Где то, ЕМНИП память, в PDP-11/70, я уже налетал на похожее отличие в поведении реального проца и подхода в PDP-2011...
- - - Добавлено - - -
Надо подумать...
Решил, что пока сделаю по принципу хака. Но потом надо подумать над тем подходом, который сделал автор - и поменять его. Но это, кстати, занимательный вопрос - что будет с флагами процессора, если команда (по каким то причинам) хряпнулась в середине :) Вот как в этот раз :)
В целом же это поднимает вопрос о том, что существующие команды описаны в доках половинчато. Полное описание должно включать - что будет, если команда не завершила свое выполнение.
Из похожих сценариев - если во время обработки прерывания первый push прошёл, а второй нет, что будет на стеке? И что будет в PSW :)
- - - Добавлено - - -
аХРИНЕТЬ :) я таки добил этот тест :)
.R BKTDC0
BKTDC0.BIC
PDP11/40 PROCESSOR STATES TEST, DBKTD-C
#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#* #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*
#*#*#*#*#*#*#*#*#*#
- - - Добавлено - - -
BKTF KT11-D abort test - останов по ошибке. Пока не понял, в чём проблема, разбираюсь...
Ну-с, понятно чего тесту не нравится. Опять граничный случай. RTS R5, а при попытке взять слово со стека - трапсссс :)
Бум смотреть - а что думает PDP-2011 по этому поводу :)
- - - Добавлено - - -
Вот даже не понятно, я накосячил или автор такой случай не учёл.. Я склоняюсь к тому, что я некосячил, но..
У автора есть сигнал-параметр have_mmuimmediateabort - когда произойдет отказ в выполнении инструкции - перед микрооперацией или после. И самое интересное, что вариант - ДО - относится только к моделям на основе J11, но этот вариант - ЗАКОММЕНТИРОВАН, то ест этот параметр ВСЕГДА - ПОСЛЕ. Но при этом, насколько я въехал в логику в этом случае - регистр БУДЕТ затронут, но вот что туда запишется - совсем не понятно. И я даже не уверен - а правильно ли я понял, как отработает микрооперации проц..
- - - Добавлено - - -
Вопчем, сделал для RTS вариант - отклонить микрооперацию восстановления регистра из стека, если что то пойдёт не так при попытке снять со стека слово. Посмотрим, что скажут другие тесты и для других моделей процов...
- - - Добавлено - - -
Вдогонку. Есть операции (в основном автодекремент, насколько мне не изменяет память), которые ИЗМЕНЯЮТ значение в регистре, если что то пойдёт не так - но этот сценарий автор принимает во внимение - пусть и не полностью и не для всех процов. На основе тестов я дополнил это поведение, но - это не данный случай - он не про RTS
- - - Добавлено - - -
Тест прошёл дальше :) И опять споткнулся :) Посмотрим на новый кейс :)
- - - Добавлено - - -
Новый кейс - это предыдущий, но вид сверху :) Не RTS с регистром-не-PC, а JSR с регистром-не-PC. Вроде по аналогии должно пройти :)
- - - Добавлено - - -
Кейс прошёл :) Очередной вылез :) Теперь тот же сценарий - но с IOT :)
- - - Добавлено - - -
Не, ошибся. Сценарий другой, но известный - что будет сохранено в стек как PSW, если при попытке прерывания что то пойдёт не так с положением PC и PSW на стек :) То есть что будет в принципе - понятно - новое прерывания а ля red stack (если грохнулись в kernel mode) или прерывания по V4 (если грохнулись НЕ в kernel mode) :)
Вроде поправил.
И очередной выверт. Причём такое, что проц улетает куда то вообще не пойми куда.... Придётся двигаться по шага... Тьфу, по подтестам :)
- - - Добавлено - - -
Ну, место вычислено, где проц дурит :) Теперь посмотрим - что делается - и какой вариант поведения, с точки зрения теста - правильный :)
Кстати :) Технически, я как бы знаю, откуда родилась идея FullODT, но вот то, насколько он окажется СУПЕР ПОЛЕЗНЫМ при отладке процессора - не думал, не догадывался и даже не снилось :) Да, листини тестов - весьма полезная вестчь, особенно из за комментов, но не для всех тестов они есть и самое главное - учитывая возможности того ПЗУ, которое сделал автор - тяжело было бы останавливать тесты в определённых местах, а уж о пошаговом режиме - даже не мечтай.
А с FullODT, несмотря на не весь реализованный функционал (писать он так и не умеет, скажем :) ), несмотря на некоторые огрехи в определённых сценриях.. Отладка процессора ускорилась даже не на порядок :) Да и хрен с ним, что на текущий тест листинга нет :)
- - - Добавлено - - -
Хм.. Странно.. Случай достаточно простой - превышение длины страницы при выборке очередной команды, а проц так клинит... Придётся в очередной раз по микрокомандам посмотреть :)
- - - Добавлено - - -
Вот чего стало сильно не хватать - не выход в FullODT при попытке выполнить команду по заданному адресу, а переход в slow режим при выборке команды по указанному адресу :) Надо будет попробовать сделать :)
- - - Добавлено - - -
Если вкратце, то опять эта хрень с have_mmuimmediateabort. К сожалению, я так и не понимаю - какого автор ввёл этот параметр, учитывая, что (видимо, начиная с какой то версии PDP-2011) он жёстко в одном значении.
Поправил, как мне кажется. И пока синтезируется, попробую посмотреть по другим версиям - чего там с ним и как было
- - - Добавлено - - -
Прошёл дальше :) И очередной затык :) Но хоть не с таким спецэффектами, как прошлый :) Традиционный HALT :)
- - - Добавлено - - -
Они, блин, издеваются :) Что будет в сохранённом в стеке PSW, при попытки записи результата командой ADC в ячейку, доступную только на чтение, когда в PSW в момент выполнения команды были флаги 0001 (то есть установленный бит С) :):) . Правильный ответ - 0001 :)
- - - Добавлено - - -
Повторюсь - Если вкратце, то опять эта хрень с have_mmuimmediateabort :)
- - - Добавлено - - -
Асссссаа :):):)
PDP-11/35 (124KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B HX0
HX 2.2 XXDP Cold boot..
BOOTING UP XXDP-XM EXTENDED MONITOR
XXDP-XM EXTENDED MONITOR - XXDP V2.5
REVISION: F0
BOOTED FROM HX0
124KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152000
TYPE "H" FOR HELP !
.R BKDMD0
BKDMD0.BIC
***********************
R0=014110 R1=177777 R2=171317 R3=110436 R4=000001 R5=012144
SP=014224 PC=013624 PS=000010
>>>165020G
014110 000001 014224 012144
@L 177544 ; Эмулируемый регистр переключателей - ячейка доступна на запись для задания положения переключателей
@D 10000 ; 12-ый бит - печтать '*' на экран при прохождении теста до конца
@
R0=010000 R1=165202 R2=000100 R3=165212 R4=042040 R5=177544
SP=165212 PC=165354 PS=000004
>>>B HX0
HX 2.2 XXDP Cold boot..
BOOTING UP XXDP-XM EXTENDED MONITOR
XXDP-XM EXTENDED MONITOR - XXDP V2.5
REVISION: F0
BOOTED FROM HX0
124KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152000
TYPE "H" FOR HELP !
.R BKTAD1
BKTAD1.BIC
######################
KT11-D LOGIC TEST MAINDEC-11-DBKTA-D
******
R0=000000 R1=006006 R2=006006 R3=034100 R4=014100 R5=100157
SP=000774 PC=013220 PS=000000
>>>165020G
000000 014100 000774 100157
@L 177544
@D 0
@
R0=000000 R1=165202 R2=000100 R3=165212 R4=042040 R5=177544
SP=165212 PC=165350 PS=000004
>>>B HX0
HX 2.2 XXDP Cold boot..
BOOTING UP XXDP-XM EXTENDED MONITOR
XXDP-XM EXTENDED MONITOR - XXDP V2.5
REVISION: F0
BOOTED FROM HX0
124KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152000
TYPE "H" FOR HELP !
.R BKTBB0
BKTBB0.BIC
KT11-D ACCESS KEYS TEST, MD-11-DBKTB-B
*
*
*
*
R0=000000 R1=022152 R2=000017 R3=022150 R4=022151 R5=077400
SP=000776 PC=006702 PS=000004
>>>B HX0
HX 2.2 XXDP Cold boot..
BOOTING UP XXDP-XM EXTENDED MONITOR
XXDP-XM EXTENDED MONITOR - XXDP V2.5
REVISION: F0
BOOTED FROM HX0
124KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152000
TYPE "H" FOR HELP !
.BOOTSM
BOOTING UP XXDP-SM SMALL MONITOR
XXDP-SM SMALL MONITOR - XXDP V2.6
REVISION: E0
BOOTED FROM HX0
28KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152010
TYPE "H" FOR HELP
.R BKTCB0
BKTCB0.BIC
MTPI/MFPI WITH MEM MAN, DBKTC-B
* * * * * * * * * * *
R0=001004 R1=004254 R2=001006 R3=030005 R4=120000 R5=155662
SP=001062 PC=004304 PS=030004
>>>B HX0
HX 2.2 XXDP Cold boot..
BOOTING UP XXDP-XM EXTENDED MONITOR
XXDP-XM EXTENDED MONITOR - XXDP V2.5
REVISION: F0
BOOTED FROM HX0
124KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152000
TYPE "H" FOR HELP !
.R BKTDC0
BKTDC0.BIC
PDP11/40 PROCESSOR STATES TEST, DBKTD-C
* * * * * * * * * * * * * * * * * * * * * * * * * * * * *
R0=040000 R1=006054 R2=000000 R3=030010 R4=177776 R5=170001
SP=000502 PC=006114 PS=000000
>>>B HX0
HX 2.2 XXDP Cold boot..
BOOTING UP XXDP-XM EXTENDED MONITOR
XXDP-XM EXTENDED MONITOR - XXDP V2.5
REVISION: F0
BOOTED FROM HX0
124KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152000
TYPE "H" FOR HELP !
.BOOTSM
BOOTING UP XXDP-SM SMALL MONITOR
XXDP-SM SMALL MONITOR - XXDP V2.6
REVISION: E0
BOOTED FROM HX0
28KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152010
TYPE "H" FOR HELP
.R BKTFD0
BKTFD0.BIC
###################
MEMORY MANAGEMENT ABORT TESTS, DBKTF-D
*******
R0=000205 R1=004760 R2=060002 R3=140102 R4=100100 R5=003116
SP=001100 PC=005006 PS=030010
>>>
Из известных мне на текущий момент тестов остались - BKEA (он тестирует FIS, которого, на текущий момент, в составе PDP-2011 нет) и BKTG - KT11-D exerciser - судя по выводу на экран - есть как минимум одна ошибка, но поскольку он тестирует не только процессор - я не знаю, к чему относится ошибка и поэтому пока не будут его гонять... :)
- - - Добавлено - - -
Теперь синтез всех тестируемых на текущий момент процов - и прогон, что бы понять, не сломал ли чего то, что работало :):)
Щас вот смортю на JKDC - один из тестов FPP для F11. Где то я там накосячил с одним мОментом
Ошибся с моментом :) Думал, прерывание по загрузке неопределённого значение не проходило (тогда бы точно моя ошибка была бы), оказалось, не загружались флаги FPP. Вроде как на первом этапе загрузки - прерывание, а тем не менее - предполагается, что флаги установятся. Теперь не могу сказать, что мой косяк, но автор этот тест вроде не гонял, а по исходнику выводов сделать не могу..
.R JKDCB0
JKDCB0.BIC
CJKDCB, KEF11-A FP DIAGNOSTIC PART 1
END PASS # 1##
END PASS # 2##
END PASS # 3##
END PASS # 4##
- - - Добавлено - - -
Надо делать программный loopback KL11, что позволит повозится с тестом для PDP-11/60, на котором предполагается такая фича :)
С loopback пока не всё получается. И найдён ещё один процессор, который обрабатывает прерывания после выполнения команды, в начале которой прилетел запрос - PDP-11/60
- - - Добавлено - - -
В целом, если не считать инструкцию MED, осталось разобраться с loopback режимом, особенностями red stack зоны для PDP-11/60 и всё.
Пока в доках не нашёл детального описания работы red stack на PDP-11/60, поэтому поставил затычку, которая позволит пройти два подтеста, заглушил проверку loopback и запустил тест. Результат - затык на MED. Попробовал заглушить тесты MED, кэш и некоторые тесты, которые используют MED - налетел на то, что в конфиге для PDP-11/60 не указано, что у него есть CPU Error register :) Поправил конфиг, запустил синтез. Но если нужно будет после загрузки опять править память (она SDRAM, возможно - выдержит загрузку FPGA, но кто её знает...)... На этот подвиг сейчас не готов :)
- - - Добавлено - - -
Посмотрел на то, что тесты делают в MED. Нуууу.. Возможно, будет интересно и её реализовать - с её помощью можно получать некоторую внутреннюю информацию о процессоре :) Хотя для реализации на FPGA это как бы не особо нужно - всё равно "микросхемы" не перепаяешь :):):)
Первое за долгое время добавления дизасма в FullODT новый инструкции :) MED :)
>>>56126!
056126 013737 056116 001100 MOV @#56116, @#1100
056134 012737 056120 001102 MOV #56120, @#1102
056142 010037 001104 104022 MOV R0, @#1104
056146 104022 023727 056116 EMT 22
056150 023727 056116 000047 CMP @#56116, #47
056156 001404 113737 064435 BEQ 56170
056160 113737 064435 056116 MOVB @#64435, @#56116
056166 000751 012700 000755 BR 56112
056170 012700 000755 000004 MOV #755, R0
056174 000004 000137 056256 IOT
056176 000137 056256 052700 JMP @#56256
056202 052700 004000 076600 BIS #4000, R0
056206 076600 000344 170000 MED
056210 000344 170000 012701 .WORD 000344
056212 170000 012701 064542 CFCC
056214 012701 064542 012167 MOV #64542, R1
056220 012167 000006 001414 MOV (R1)+, 56232
056224 001414 005000 076600 BEQ 56256
056226 005000 076600 000000 CLR R0
Занимательная инструкция. Аргумент - следующее слово. И никаких вариантов с методами адресации :) Пока не могу сказать точно, но вроде в нём играет роль только младший байт - код операции - чтение или запись внутренних регистров. Всё общение (куда читаем или что пишем) идёт через R0.
С учётом maintenance mode пришлось малость допилить FullODT - дабы он его сбрасывал при входу и, если надо, восстанавливал при выходе. А то QKDE переводит в него, при ошибке (есть в режиме, но никак не могу понять - в чём пробелма) делает HALT и всё :) Аля-улю :) Теперь можно отлаживаться, даже если программа задействует этот режим :) Но всё равно - лучше сделать для FullODT свою консоль - принцип Гейзенберга (в его расширенном виде) никто не отменял :)
Источник проблемы, не позволяющий пройти подтест, найден, но поправить пока не получается.. Думаю...
Занимательно :) Заработавшее решение - оказалось очень простым :) Но пару дней городил... хм... Странное :) А потом (сегодня) с утра опять начал возиться - и как то оно само сложилось :) Один оператор и одна правка - какой сигнал наружу пойдёт :) И всё - maintenance mode для KL11. Теперь осталось пошерстить доки и найти - в какой конкретно модели он был :)
PDP-11/60 (124KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B HX0
HX 2.2 XXDP Cold boot..
BOOTING UP XXDP-XM EXTENDED MONITOR
XXDP-XM EXTENDED MONITOR - XXDP V2.5
REVISION: F0
BOOTED FROM HX0
124KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152000
TYPE "H" FOR HELP !
.R QKDAE0
QKDAE0.BIN
CQKDAE KD11-K BASIC LOGIC TESTS
TRAPPED TO 10 PC = 055624
TRAPPED TO 10 PC = 055624
TRAPPED TO 10 PC = 055624
TRAPPED TO 10 PC = 055624
R0=000653 R1=052712 R2=177546 R3=000000 R4=161736 R5=001000
SP=001000 PC=045746 PS=000210
>>>
А не взятся ли нам за Вильяма нашего Шекспира... э... За команду MED :):):) TRAPPED TO 10 - это как раз она :) Точнее её отсутствие :)
- - - Добавлено - - -
Заготовка для MED сделана :)
Теперь RT-11 правильно опознаёт процессор :)
PDP-11/60 (124KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>B DL0
RT-11SB (S) V05.07
.R MSCPCK
.SHO CONF
RT-11SB (S) V05.07
Booted from DL0:RT11SB
USR is set SWAP
EXIT is set SWAP
KMON is set NOIND
MODE is set NOSJ
TT is set NOQUIET
ERROR is set ERROR
SL is set OFF
EDIT is set KED
FORTRAN is set FORTRA
KMON nesting depth is 3
Global .SCCA flag is disabled
CLI is set DCL, CCL, UCL, NO UCF
PDP 11/60 Processor
248KB of memory
FP11 Hardware Floating Point Unit
Extended Instruction Set (EIS)
Memory Management Unit
Cache Memory
50 Hertz System Clock
Memory parity support
SB timer support
Global .SCCA support
FPU support
Extended unit support
.
АЛУ PDP-11/60 построено на аналогах К155ИП3 :)
- - - Добавлено - - -
Чуйствую, ещё немного - и микрокод PDP-11/60 буду читать влёД :)
Первые два с половиной теста инструкции MED :)
- - - Добавлено - - -
Три теста MED :)
Подтесты 753-756 - тесты функционирования регистров MED
Подтест 757 - тест функционирования микроостанова
Подтест 760 - тест регистрации ошибок в регистрах MED
Подтесты 761-762 - тесты кэш-памяти (взаимодействуя с MED)
Подтесты 763-764 - тесты регистрации ошибок в регистрах MED
Подтест 765 - тест регистрации ошибок кэша в регистрах MED
Подтесты 766-767 - тесты регистрации ошибок в регистрах MED
Итого 13 подтестов. На текущий момент проходят 753-756.
Сегодня день начинается с тестирования :) Прогон на тестовом наборе процессоров всех тестов. Потом есть одна мысль по изменению реакции на прерывания и декодирование команды - попробую её реализовать. А потом опять MED :)
Пришлось отвлечься от PDP-2011 на холодильник :):)
Как ни странно, но задумка вроде прошла и заработала почти сразу (одну ошибку только поправил). Теперь тесты :)
Ещё один проц с отложенной обработкой прерываний. Итого, на текущий момент - PDP-11/35 (PDP-11/40), PDP-11/44 и PDP-60. В принципе - понятно, вроде как прародителем были PDP-11/40 (и его oem вариант - PDP-11/35), из которого родились PDP-11/60 (прямой потомок) и PDP-11/44 (на который оказал косвенное - через PDP-11/55 - влияние PDP-11/70)
- - - Добавлено - - -
Но у PDP-11/44 свой выпендрёж.
Кусок теста:
MOV #0, @#177776
MOV #100, @#177564
TRAP 0
Процессоры без отложенной обработки трапнут ДО TRAP 0, процессоры с отложенной обработкой выполнят TRAP 0 (что будет дальше - зависит от вектора TRAP)
Кусок другого теста
MOV #340, @#177776
MOV #17272, @#64
MOV #100, @#177564
MOV #17316, @#34
MOV #17304, @#64
MOV #340, @#36
CLR @#177776
TRAP 0
PDP-11/35(40) трапнутся после выполнения CLR @#177776, PDP-11/44 - выполнит TRAP 0
Выделение отдельного модуля - (полный) процессор - то есть ядро процессора, процессорные регистры, ДП (включая UMR), память halt режима. В него же будет добавлен модуль кэш-памяти (с прицелом на те процы, где это есть). Пока в процессе рас-по-пила и исправления ошибок
- - - Добавлено - - -
Вдогонку. Так же с прицелом на создание моделей процессоров отдельно, а моделей PDP-11 - отдельно :)
Распилил и переклеил :) Как обычно - правильное описание соединений потребовало исписание некоторой кучи бумажек :) Но вроде работает и соединения в "корзине" стали проще :)
Всё таки малость напортачил пре перепили и склейке - слетела работа UMap. Ну, с причиной разобрался, но сегодня точно не успею всё сделать и проверить... Завтра вечером досклеиваю :)
Переделал "корзину" процессорной "платы" :) Поправил работу модуля памяти (большинство Unibus процессоров могу адресовать только 2048-128 = 1920 kw памяти - 128 kw - это окно Unibus плюс за ней страница в/в). Теперь тест Unibus на PDP-11/44 начал проходить. Для PDP-11/44 осталось поправить работу SR1 (два теста ругаются, что туда заносится неправильное значение инкрементов)
- - - Добавлено - - -
А, да, забыл про эти тесты
- ещё надо сделать так, что бы можно было генерировать сигнал Power Fail. Проверка его работы на PDP-11/44 - тест KKAC??
- ещё надо сделать кэш память. Проверка его работы на PDP-11/44 - тест KKKA??
И как вишенки на торт
- Multi Function Module (своеобразная консоль) - тест KKFB
- ZKEE - тест CIS инструкций (но это даже не вишенка, это огромный торт сам по себе :) )
И не совсем понятный тест ZDLH - написано - тест MFU-SLU и DL11-W - про него ещё надо почиать, что это за модуль...
- - - Добавлено - - -
Ишо не проходной тест нашелся - KFPC?? - но там опять SR1 вылез :)
Очередной распил монолита. Теперь я из него выдрал всё управления переходами между микрооперациями. Вроде прошло боль-мень.
Но тут мне захотелось странного - отдельное подключение Halt Mode консоли :) Долго провозился с электрической частью - так как думал, что у адаптера COM порты в Windows расположились последовательно, но, похоже, при переименовании - накосячил и COM22 оказался COM24.. А я уж думал - переходник COM-TTL не работает.. Или даже два... Затем надо было vhd файлы (два) поправить, что бы загнать второй com порт в FPGA (заготовка была сделана ДАВНО, но.. не использовалась :) ) ну и прошивку Halt Mode поправить - что бы использовала не стандартный консольный порт :) Но в ней (в исходнике прошивке) я увидел нечто, что заставило меня задуматься :) Она умеет взаимодействовать и с HX сервером и вот как раз на эту тему я и почесал почесуемое. Но решил пока оставить взаимодействе с HX на стандартной консоли :)
Синтез запущен - будет поглядеть :)
- - - Добавлено - - -
Ну что могу сказать :)
Консоль номер 0
000004 000000 000000 000000
@
@
@
HX 2.2 XXDP Cold boot..
CPU NOT SUPPORTED BY XXDP-XM
BOOTING UP XXDP-SM SMALL MONITOR
XXDP-SM SMALL MONITOR - XXDP V2.6
REVISION: E0
BOOTED FROM HX0
28KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152010
TYPE "H" FOR HELP
.
Консоль Halt Mode
PDP-11/04 (28KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>165020G
R0=000000 R1=165202 R2=000100 R3=165212 R4=174000 R5=000000
SP=165212 PC=165354 PS=000344
>>>B HX0
R0=000000 R1=000074 R2=154424 R3=151546 R4=150754 R5=155662
SP=154246 PC=150664 PS=000344
>>>P
R0=000000 R1=000074 R2=154424 R3=151546 R4=150754 R5=155662
SP=154246 PC=150752 PS=000340
>>>
>>>
- - - Добавлено - - -
Есть некоторые нюансы в связи с таким разделением - но так, мелочь пузатая, сейчас можно забить, а потом поправлю в прошивке Halt Mode :) Главное, теперь Halt Mode не влияет на консольный терминал - так что даже тесты консоли можно отлаживать :)
Большой допил-распил :) Более менее успешно, хотя на тесте PDP-11 вылезла странная ошибка - типа ошибка при проверке регистра лимита стека, вот вам список, а в списке... пусто :) Бум думать :)
Прикупил перед НГ (на самом деле - задолго до) конвертер USB-COM порты :) Воткнул. Вроде настроил соответствие - порт на нём - COM порт. Даже первые два - оказалось - норм. А пару дней назад решил воткнуть в него и DE10 (когда на ней сделал второй комп - см выше) и выяснилось - что COM17 и COM18 - вовсе не порты 7 и 8 на нём.
Сегодня решил поправить. В общем - на настройку 16 портов ушло часа полтора, пара переделок заново, пару раз - uninstall всех портов, четыре перезагрузки и минут пять размышлений - как два порта с конвертера сели на один COM порт (при этом одновременно работать с ними не получалось)
Тем не менее - настойчивость победила глюки :) Надо бы ещё прикупить на ali конвертеров COM-TTL, а в переспективе (под одну задумку с PDP-2011) сделать плату с несколькими распаянными разъёмами и конвертерами :)
пару мыслей про сом порты:
1) в свойствах порта можно указать конкретный номер порта. "диспетчер устройств" "свойства порта" кнопка "дополнительно".
2) нужно быть внимательным с точки зрения земель между "pdp" и компом. и заранее заземлять их между собой. Был печальный опыт.
ну или как вариант "условно оптоизолированные порты" - дорого но безопасно. ну или самому спаять.
в свойствах порта можно указать конкретный номер порта. "диспетчер устройств" "свойства порта" кнопка "дополнительно".
Не. Там можно указать, по какому имени этот USB Serial Port будет виден в Windows (те самые COM11 COM12 и т.п.). Но какому порту на выходе из конвертера (то есть порт RS232 на конвертере) он будет соответствовать - не укажешь. Нет там такой настройки. Пришлось методом тыка подбирать.
нужно быть внимательным с точки зрения земель между "pdp" и компом. и заранее заземлять их между собой. Был печальный опыт.
ну или как вариант "условно оптоизолированные порты" - дорого но безопасно. ну или самому спаять.
Из доки - 15KV ESD Protection
1) ну значит специфика железа
2) ESD это статика, а я про разницу потенциалов земель в "pdp" и "компьютером", (не забываем про кондёр во входном фильтре БП компа). временами до 100 вольт разница бывает.
Ок, тогда такой вопрос - в usb разъёме есть провод земля. Он соединяет землю устройств с обеих сторон?
по опыту "волшебного дыма" да - это "земля". Есть (было) от 5 usb палёных устройств (jtag-usb) по 200уе. именно "корбочки" горели, изделие и компы выжили.
пс: проверить просто - прозвонить. От земли "Изделие" - "USB-COM" - земля "Компьютер".
Ок, тогда такой вопрос - в usb разъёме есть провод земля. Он соединяет землю устройств с обеих сторон?
Смотря про какую землю речь. Сам кабель 4-х жильный, для самих сигналов, один из них сигнальный и силовой "ноль", и в хороших кабелях обычно есть еще экранирующая оплетка, она идет на экран в разъеме. А дальше начинается магия конструирования устройств. Я в своих серийных устройствах соединял экран и "ноль" через параллельные резистор ~100кОм и конденсатор ~1000пФ/2kV, это позволяло проходить сертификацию на 7кВ искру в устройствах второго класса питания от сети (это когда полная изоляция и нет нейтрали в самом устройстве, например внешний блок питания, с которого приходить только низковольтный AC или DC). Потому что при сертификации лупят искрой во все что торчит наружу, включая корпус USB разъемов, если соединить ноль и экран напрямую - то устройство этот тест не переживает. Если экран просто болтается, то устройство при подключенном интерфейсном кабеле не проходит другой этап сертификации по ЭМС - тест на наносекундные помехи. А если питание по первому классу (есть нейтраль в устройстве), то экран USB/Ethernet выводится прямо на нейтральный вывод розетки питания, но часто это тоже не цифровая и не силовая земля. В-общем, если устройство нормально разрабатывалось и сертифицировалось по ЭМС, то даже тогда возможны вариант подключения экрана.
Щас мерить не буду, но в целом ситуация такая - и DE10 и конвертер постоянно подключены через usb кабель. Кабели те, которые шли с ними. Сами блоки питания у DE10 и конвертера простые - без земли.
Когда развлекаюсь с железным PDP - он питается от блока ATX, который, как и комп, станадртным кабелем (трехжильным), воткнут в (один и тот же) пилот, имеющий контакты заземления в розетках (между собой соединены и уходя в вилку), но вот сам пилот воткнут в обычную разетку, без заземления.
Уже как рефлекс - когда сажусь за комп - разряжаюсь об батарею отопления :) Зимой - актуально :)
оффтоп: "была земля в розетке" - спалил толи мать толи бп. По факту земляной контакт в розетке был замят - посему земля отсутствовала. Прошло 20 лет - стабильно "звоню" тестером земли между железяками и компьютерами.
ПС: не советую "разряжаться об батарею" держась за корпус компьютера - культурно выражаясь - долбанёт знатно.
сейчас на рабочем компе стоит нечто похожее
https://icp-das.ru/blogs/news/kommunikatsionnaya-plata-pcie-s112-s-shinoy-pci-express-i-2-portami-rs-232
Гальваническая изоляция 3000 В
не советую "разряжаться об батарею" держась за корпус компьютера - культурно выражаясь - долбанёт знатно.
Безусловно нет - просто снимаю статику с себя :) Зимой часто знатно стреляет :) И домашние тоже приучены - когда я за компом :)
- - - Добавлено - - -
https://icp-das.ru/blogs/news/kommun...portami-rs-232
Это, конечно, интересная игрушка (и даже больше скажу - что то похоже, только на четыре порта - у меня есть - осталось от времени проведения курсов по Cisco), но всё таки моя теперешняя 16-ти портовка более компактное и более мобильное решение :) На таки да - гальванической развязки нет... Сейчас уже не помню - то ли у фирмы моделей с галван-развязкой и таким количеством портов просто нет, то ли что то ещё
ну есть в природе и такое
https://cnc-specialty-store.com/rs232-cables/rs232-optical-isolation-transceiver-protect-pc-isolator
а можно и из пары оптронов и "ла3" кмоповских спаять (питание от компа и отдельно питание от изделия)
ПС: по слуха есть юсб хабы изолированные.
ну есть в природе и такое
Занимательная игрушка :) Спасибо за наводку :)
ну или как вариант (один из десяти)
https://datasheets.maximintegrated.com/en/ds/MAX250-MAX251.pdf
ну или как вариант (один из десяти)
Да, этот вариант я знаю. Но это если я только соберусь делать объединённую плату для com-портов под свою задумку (шанс есть, но когда... кто его знает :) ). Пока мне интересней предыдущий варинт - пусть вроде как более дорогой, зато более быстрый в реализации.
Неделя, а то малость больше прошла под лозунгом "Наведение порядка с памятью BRAM и SDRAM".
BRAM
Было
.RUN SPEED0
Тест быстродействия (кэш, если он есть, выключен)
BR .+2 19 988 908 оп./сек
R0(23456.)+R0(12345.) empty 4 997 746 оп./сек
R1(23456.)+R0(12345.) 3 702 200 оп./сек -> 14 281 743 оп./сек
Стало
.RUN SPEED0
Тест быстродействия (кэш, если он есть, выключен)
BR .+2 24 986 211 оп./сек
R0(23456.)+R0(12345.) empty 6 247 066 оп./сек
R1(23456.)+R0(12345.) 4 543 161 оп./сек -> 16 656 695 оп./сек
SDRAM
Было
.RUN SPEED0
Тест быстродействия (кэш, если он есть, выключен)
BR .+2 6 662 519 оп./сек
R0(23456.)+R0(12345.) empty 1 665 633 оп./сек
R1(23456.)+R0(12345.) 1 287 961 оп./сек -> 5 680 247 оп./сек
Стало
.RUN SPEED0
Тест быстродействия (кэш, если он есть, выключен)
BR .+2 7 121 400 оп./сек
R0(23456.)+R0(12345.) empty 1 780 357 оп./сек
R1(23456.)+R0(12345.) 1 383 493 оп./сек -> 6 206 437 оп./сек
Подкручивание кода продолжается (и задержек) продолжается :)
Из занимательного.
В .NET есть всё, что бы написать примерно в 60 строк эмулятор VT100 :) Не полный, конечно, но тем не менее :)
Было бы круто vt100 запустить под Андроид как я помню .net дружит с линукс
Для начала - у меня нет Android
Для начала - у меня нет Android
В смысле, ни телефона, ни планшета нет? Есть же бесплатный эмулятор BlueStacks.
В смысле, ни телефона, ни планшета нет?
Ни телефона, ни планшета на Android-е нет.
Есть же бесплатный эмулятор BlueStacks.
И? Как я написал выше - для начала. А если бы и был - интереса нет.
А у кого есть - всё в их руках. У меня ушло порядка 15 минут на то, что бы набросать программу-заготовку, которая всё что делает - тупо отправляет с клавы в порт, а из порта на экран. Оказалось, консоль Windows определяется как VT100.
Ну и есть некоторое подозрение, что терминальные программы для Android есть.
Из интересного, у консоли WIN скорее всего ANSI всё же...
Можно вспомнить драйвер от DOS коий обеспечивал эмуляцию терминала ANSI.
Но система команд терминалов ANSI сделана на базе системы команд терминалов от DEC.
И в многих местах пишут что-то вроде " ANSI/VT100 Terminal Control Escape Sequences ", хотя разница в деталях между ними есть ...
Например, на VT100 с цветом никак, только яркостью Он монохромный в оригинале.
у консоли WIN скорее всего ANSI всё же
Да, некоторые esc последовательности она обрабатывает. Интересно то, что ещё и откликается на запрос типа терминала. Но, насколько я в курсе, должны обрабатываться команды управления цветом - а это уже не VT100 :) Мне попадались описания того, что поддерживается, но тогда я писал программу, которая лезет непосредственно в буфер окна - так что меня тогда этот вопрос не сильно заинтересовал - при прямой работе с ним скорость вывода получается несколько :D выше, чем через что то типа Console.Write :)
- - - Добавлено - - -
Собственно, меня интересует обмен через com порт, а не написание терминалки, так что.. Да, интересно, но не пригодится :)
zoc.
поддержка ком-портов, телнет, ssh итд.
ansi, vt100, и др.
батнички/скрипты
очень удобный интерфейс
один минус - платный.
один минус - платный
Этот минус зависит от того, сколько хотят :)
А в плане ретро-компов вот это
телнет, ssh
лишнее. На PDP-11 даже telnet - редкость, а уж ssh...
зато там куча разных типов терминалов.
vt52, 100, 102, 220, 420, 520, и ещё десяток других
зато там куча разных типов терминалов
Это не плюс или не минус - всё равно эта куча не нужна - по идее достаточно будет vt52 и vt520. Была бы интересна поддержка VT105, но её вроде нет...
- - - Добавлено - - -
Посмотрел стоимость - 6 с половиной штук.. Дааа, весьма жирный минус...
ну так 105 может быть реализован как под модель другого ?. Оно работает и без лицензии (только грузится будет долго).
ну так 105 может быть реализован как под модель другого
У 105-ого есть поддержка графики и вроде как (не искал специально) в варианте, который поддерживается только ещё VT55
Так что - не факт.
Ну есть и софт, который эту графику может использовать.
Война с SDRAM продолжается. Увы, надо внимательно читать доку по SDRAM (эксперименты никто не отменял) и внимательно писать VHDL. Но, помимо этого, есть ещё и ошибки в других модулях :) С одной из которых долго воевал - и самое главное, так пока и не понял, где ошибка, но некоторый обходной манёвр всё таки сработал :)
Итак
SDRAM
Было
.RUN SPEED0
Тест быстродействия (кэш, если он есть, выключен)
BR .+2 6 662 519 оп./сек
R0(23456.)+R0(12345.) empty 1 665 633 оп./сек
R1(23456.)+R0(12345.) 1 287 961 оп./сек -> 5 680 247 оп./сек
Потом стало
.RUN SPEED0
Тест быстродействия (кэш, если он есть, выключен)
BR .+2 7 121 400 оп./сек
R0(23456.)+R0(12345.) empty 1 780 357 оп./сек
R1(23456.)+R0(12345.) 1 383 493 оп./сек -> 6 206 437 оп./сек
Теперь
.RUN HX7:SPEED0
Тест быстродействия (кэш, если он есть, выключен)
BR .+2 8 119 639 оп./сек
R0(23456.)+R0(12345.) empty 2 030 425 оп./сек
R1(23456.)+R0(12345.) 1 619 558 оп./сек -> 8 003 541 оп./сек
Из за войны с последней ошибкой - state-автомат и задержки - не оптимальные, так что, возможно, скорость ещё немного подрастёт :)
- - - Добавлено - - -
Без SignalTap-а :)
.RUN SPEED0
Тест быстродействия (кэш, если он есть, выключен)
BR .+2 9 067 852 оп./сек
R0(23456.)+R0(12345.) empty 2 266 959 оп./сек
R1(23456.)+R0(12345.) 1 763 854 оп./сек -> 7 947 813 оп./сек
Ещё немного быстрее.. :)
.RUN SPEED0
Тест быстродействия (кэш, если он есть, выключен)
BR .+2 9 725 535 оп./сек
R0(23456.)+R0(12345.) empty 2 431 679 оп./сек
R1(23456.)+R0(12345.) 1 872 279 оп./сек -> 8 138 687 оп./сек
- - - Добавлено - - -
И ещё :)
.RUN SPEED0
Тест быстродействия (кэш, если он есть, выключен)
BR .+2 10 036 017 оп./сек
R0(23456.)+R0(12345.) empty 2 509 000 оп./сек
R1(23456.)+R0(12345.) 1 911 201 оп./сек -> 8 021 430 оп./сек
- - - Добавлено - - -
Ну, пока вроде выжал всё, что смог :) Из идей, как дальше ускорить - задействовать активность всех четырёх банков :)
Но это точно не сейчас..
Собственно, в какой-то степени всё это затеяно с прицелом на реализацию кэш-памяти. Для тестов и ускорения :) Но не факт, что это будет следующее, что сделаю.
Коротко о состоянии - температура нормализовалась, вроде как никаких специфических симптомов нет, есть только ощущение, которое могу охарактеризовать только как - не в своей тарелке. Ну и тянет полежать. В субботу восстановился аппетит - теперь сильно хочется есть :)
Воспользовался моментом и тем, что на это дело сильно много сил не надо (запустил процесс и лежи, краем глаза смотри) - сделал-настроил новую виртуалку, куда перенёс все свои дела, связанные с DEC - PDP-2011 и проекты всякого разного софта - как родного для PDP-11, так и под PC. Операционка - Windows Server 2022, VS2015, VS2017, VS2019 и VS2022, Quartus 13 и Quartus 21.
Попробовал собрать и прошить DE10 - всё норм - скрипты отрабатывают нормально, всё собирается, связь есть, PDP-2011 запускается, операционка грузится.
Теперь буду потихоньку разгребать завал файлов.
Hunta, выздоравливай.
Идиотский вопрос можно?
Нигде не нашел даже проекта как подключить физический 80-дорожечный дисковод к ПЛИС.
Хотя предполагаю, что выписать код и скоммутировать не просто, а очень просто...
Было бы интересно свои старые дискеты не эмулятором считать, а железкой
Больничный закрыл, самочувствие более-менее.
Нигде не нашел даже проекта как подключить физический 80-дорожечный дисковод к ПЛИС.
Мне не попадался. На DE10 в планах нет - так как микруха FPGA на ней максимум 3.3 В, а значит для подключения нужен преобразователь уровней - но я не электронщик, так что пока связываться не хочу.
Нигде не нашел даже проекта как подключить физический 80-дорожечный дисковод к ПЛИС.
Не пойдёт https://zx-pk.ru/threads/33236 ?
Правда там у автора дела не очень идут. Да и на ПЛИС реализован только контроллер, а не вся машина целиком.
Было бы интересно свои старые дискеты не эмулятором считать, а железкой
У меня тоже интерес к подключению живых дисководов к ПЛИС есть - планирую сделать переходник от плат типа DE0/DE1/DE2 на FDD и MFM/RLL HDD, ну и контроллеры к ДВК-на-FPGA допилить чтобы они с этой платкой работали. Саму железку можно сделать быстро, вот код допилить - это надо больше времени, особенно полноценный MFM/RLL HDD.
Поменял операционку на физическом компе. Как импортирую все виртуалки - поставлю драйвера для связи с DE10, службу удалённой прошивки и проверю контакт.
Установка дров на USB Bluster II, если не требуется установка всего Quartus-а - то ещё развлечение. Самый простой вариант - поставить пакет программирования из состава Quartus-а. Но нужно ставить или 13-ую версию или версию 21.1. В промежуточных между данными версиях (возможно не во всех, но и я не все ставил) - есть проблемы с цифровой подписью драйверов (читай - на Windows x64 - не встанут). Технически, из данного пакета можно взять только каталог с драйверамми и две утилиты - jtagconfig и jtagserver - но к ним нужные какие то .dll библиотеки - и полный список у меня пока не получилось составить. В конце концов мне надоело экспериментировать и я установился на варианте с установленным программатором.
Если просто поставить дрова - будет светиться устройство с именем "Altera USB-Blaster II (unconfigured)" и ничего работать не будет. После (первой) установки драйверов надо запустить jtagconfig, которая (через) jtagserver как-то настроит бластер и вот тогда будут светится два устройства (возможно, придётся ещё раз установить драйвера - почему так - я пока тоже не понял) - Altera USB-Blaster II (JTAG interface) и Altera USB-Blaster II (System Console interface) - и программатор уже увидит девайс.
Но если (я так думаю) jtagserver-у не будет хватать каких-то dll библиотек (как было у меня - когда я скопировал (некий) минимум в отдельный каталог - для запуска JTAG Server-а и удалённой прошивки) - то бластер так и будет светиться как Altera USB-Blaster II (unconfigured).
Занимательно. Раньше, что бы скачать Quartus (с сайта Intel), оно просило зайти под своей учёткой (создать было можно без проблем). Сейчас ради интереса попробовал - никакой аутентификациии не требуется - только принять лиц соглашение....
Установка дров на USB Bluster II, если не требуется установка всего Quartus-а - то ещё развлечение
Насколько помню, были отдельные установщики только программатора на сайте Интел.
Насколько помню, были отдельные установщики только программатора на сайте Интел.
Да. Но изначальная цель была установить только драйвера плюс jtagconfig и jtagserver. Так как больше мне на ФИЗИЧЕСКОМ компе ничего не надо - разработка-прошивка-отладка идёт в виртуалки. И вот с таким сценарием пока проблемы. Но я попробую всё таки вытащить только действительно нужные файлы для этого сценария. Как опять соберусь поэкспериментировать
а если глянуть "внутрь" inf файлов (для драйвера jtag) там насколь помню указывается какие файлы нужны...
а если глянуть "внутрь" inf файлов (для драйвера jtag) там насколь помню указывается какие файлы нужны...
Речь не про драйвера. Учитывая, что они у них в отдельных каталогах лежат.
Устал программировать (да и работа опять, после отпуска, началась), вернулся к схемотехнике :) Пока ничего нового, но пару мыслей обдумываю и пробую :)
А потом опять вернулся к программированию, а потом устал от программирования и вернулся к схемотехнике :)
Была достаточно давняя идея переделать первоначальное декодирование команды, что бы избавится от некоторого количества AND-ов, OR-ов и NOT-ов. В ней что-то от ПЛМ и горизонтального микрокода. Вот ей и занялся. Как ни странно, идея достаточно быстро взлетела до получения рабочих прошивок в DE10, но учитывая количество сигналов, которые хотелось бы формировать по другому.. В общем - двигаюсь потихоньку - каждое изменение сразу проверяется.
Из занятного. Ошибся с командами MTPS/MFPS - но RT загрузилось, а вот на тестах проца вылезли ошибки :) Помнится, у меня была обратная ситуация - тесты MMU проходили, а VM валил систему :)
"ПЛМ"-ка по количеству сигналов постепенно растёт.
Как ни странно, количество используемых LE не сильно увеличилось (меньше процента) и по мере переноса сигналов вроде даже начало постепенно уменьшаться, хотя по сравнению с оригинальным подходм всё ещё немного больше.
Использование "ПЛМ" переделал так, что бы потом можно было менять внутреннюю структуру, не трогая потребителя - так что можно будет поэкспериментировать со структурой. Но это потом, когда все или почти все планируемые сигналы будут туда перенесены - а пока в процессе.
Формирование основных сигналов (те, которые были явно выделены) перетащил в "ПЛМ", теперь смотрю, какие ещё есть часто используемые, не выделенные, зависящие только от кода команды, что бы тоже туда-сюда :)
Использование ЛЕ опять подскочило, но пока по прежнему меньше процента..
Продолжаю развлекаться с переносом формирования сигналов в "ПЛМ". Как ни странно - помогло так же в понимании некоторых нюансов кода и в нахождении повторов в использованных комбинациях сигналов.
Развлечение продолжается :)
Продолжил распиливание монолита процессора. Ну и поскольку это дело монотонное.. А ещё и проверки идут и правки кода и таблицы "PLM"... Иногда отвлекаюсь :)
Сегодня вечером опять всплыла эта мысль (изначально зароненная одним тестом от PDP-11/44) и я решил попробовать её всё таки реализовать :) Нуу... Первый подход к снаряду, скорее как концепт, чем законченное решение. То есть это не полноценная кнопка - Выключить и Включить, а скорей - вызвать прерывание по вектору 24 :)
Упомянутый тест от PDP-11/44:
HX 2.2 XXDP Cold boot..
BOOTING UP XXDP-XM EXTENDED MONITOR
XXDP-XM EXTENDED MONITOR - XXDP V2.5
REVISION: F0
BOOTED FROM HX0
124KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152000
TYPE "H" FOR HELP !
.R KKAC??
KKACC0.BIC
CKKACC0 11/44 POWER FAIL
BOOT ENABLE SWITCH MUST BE OFF
256-K WORDS OF MEMORY EXIST
RANDOM CHARACTER(S) (INCLUDING FORM FEED) MAY PRINT ON POWER CYCLING.
MANUALLY INTERRUPT THE POWER AFTER EACH TEST #
1 ██2 ██3 ██4 ██5 ██6 ██7 ██10 ██11 ██
END PASS # 1██
1 ██2 ██3 ██4 ██5 ██6 ██7 ██10 ██11 ██
END PASS # 2██
1 ██2 ██
TESTNO ERRPC EXP.SP1 REC.SP1
2 002356██ 001074██ 001100██
TESTNO ERRPC EXP.PSW REC.PSW
2 002420██ 000341██ 000004██
TESTNO ERRPC EXP.ADD REC.ADD
2 002462██ 002322██ 002272██
3 ██4 ██5 ██6 ██7 ██10 ██11 ██
END PASS # 3██
1 ██2 ██3 ██4 ██5 ██6 ██7 ██
После вывода очередного числа с двумя квадратиками - тест ожидает выключения и включения питания. Что и было "проделано" :)
И (почти) произвольно взятый тест - у DEC частенько в тесты зашита обработка power fail
HX 2.2 XXDP Cold boot..
BOOTING UP XXDP-XM EXTENDED MONITOR
XXDP-XM EXTENDED MONITOR - XXDP V2.5
REVISION: F0
BOOTED FROM HX0
124KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152000
TYPE "H" FOR HELP !
.R GKAA??
GKAAA0.BIC
END OF DGKAA
END OF DGKAA
END OF DGKAA
END OF DGKAA
END OF DGKAA
POWER FAILURE
END OF DGKAA
END OF DGKAA
END OF DGKAA
END OF DGKAA
END OF DGKAA
Из недоработанного - power fail и halt mode. Поскольку halt mode - весьма специфический режим. Да, он похож на режим пульта в LSI-11, F-11 и J-11 (может, где то ещё), но есть и отличия. Ну и поскольку батарейного питания у DE-10 для памяти нет, да и не заливал я прошивку FPGA во флэш (то есть при включении всё равно ничего не заработает) - решил, что "отказ питания" - это тоже будет вылет в монитор halt mode. Ну а "восстановление питания" в halt mode - это выход в обычный режим через вектор 24 - то есть примерно так же, как и включение питания на реальном PDP-11. Тут нужна поддержка как со стороны "железа", так и прошивку halt mode доделать. Заодно реализую и возможность не только просмотра содержимого АП процессора, но и изменения. Если руки дойдут :) А ещё и работу с физическими и виртуальными адресами. Может быть :)
Ещё из недоработок - восстановление питания не делает "аппаратный" сброс.
А, да, где то на прошлой недели было официальное переименование - теперь мой проект - PDP-11X :) Хотя в нём ещё прилично кода от PDP-2011 :)
- - - Добавлено - - -
Вот реакция ещё одного теста :)
HX 2.2 XXDP Cold boot..
BOOTING UP XXDP-XM EXTENDED MONITOR
XXDP-XM EXTENDED MONITOR - XXDP V2.5
REVISION: F0
BOOTED FROM HX0
124KW OF MEMORY
UNIBUS SYSTEM
RESTART ADDRESS: 152000
TYPE "H" FOR HELP !
.R KFPA??
KFPAC0.BIC
CKFPAC0 FP11F FLTG PNT PRT A
END PASS # 1 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 2 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 3 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 4 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 5 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 6 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 7 TOTAL ERRORS SINCE LAST REPORT 0
POWER FAILURE. PROGRAM RESTARTING.
END PASS # 1 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 2 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 3 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 4 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 5 TOTAL ERRORS SINCE LAST REPORT 0
END PASS # 6 TOTAL ERRORS SINCE LAST REPORT 0
- - - Добавлено - - -
Поддержку со стороны Halt Mode допилил - теперь можно просто жать кнопку "Питание" - если в Halt Mode - возьмет содержимое 24-ого вектора обычного режима и перейдёт (с reset-ом) по нему в обычный режим, если не в HaltMode - прерывание по 24-ому вектору (но тут пока без reset-а). Так что из недороботок пока (может, чего ещё придумаю) только отсутствие reset-а при обработке выхода из power fail в обычном режиме. И тут надо подумать...
Пока ничего нового - продолжаю распил основного монолита. Он всё меньше. Попутно анализ и сокращение кода.
Завис на обработке неверного кода из диапазона FPP - там проблема в том, что 1) прерывание пойдёт не через вектор 4 и 2) прерывания от FPP можно запретить и это коснётся не только, в принципе понятных, прерываний типа деления на ноль, переполнения и т.п., но и прерываний по неверному коду. То есть в реальных PDP-11 основной проц отправляет заявку в FPP часть просто по маске 17xxxxx и ни сном ни духом - правильный код али нет..
Слегка поднадоело для запуска тестов сначала грузить XXDP, а потом уже тесты, появилась мысль (пока только мысль) добавить в HALT режим загрузку-запуск тестов непосредственно с дисков с ФС XXDP или RT-11.
Ещё из мыслей - упростить анализ-визуализацию микроопераций, а то не всегда с ходу понятно, где же оно брякнулось. Но тут пока нет определённости в подходе. Хочется примерно как кнопка S (step), но по микрошагам, но вот получится ли.. Или вариант с переключением на тактовую в 1 ГЦ на время выполнения одной команды по S (визуализация на дисплей сделана уже давнооооо).
В общем, как обычно - хотелки появляются, но скорость и порядок реализации..
- - - Добавлено - - -
Размер прошивки halt mode - чуть больше 5.5 кб. Интересно - уместится ли в 8 с поддержкой запуска тестов напрямую :)
Заметил интересный прикол.
Если накосячу в прошивке (сейчас уже не фатально, так что вообще ничего не заведётся, а обычно - какие-нибудь тесты на каком-нибудь варианте PDP-11 перестанут проходить) - то максимальная тактовая ползёт вниз.
Как только исправлю ошибку - ползёт вверх :)
Правило эмпирическое - то есть не железная подсказка, но срабатывает частенько :)
Вчера окончательно допилил основной монолит :) Теперь смотрю на сигналы и на возможность их упрощения :)
Так же крутится в голове мысль об одновременном считывании регистров для источника и приёмника (кроме PC, но там тоже есть.. своя возможность) для двухоперандных команд - пока для обычных, в перспективе для FPP :) Зацепило, когда читал про это у PDP-11/70 - это всё таки минус один, как минимум, такт :)
Новое добавление в "ПЛМ". Теперь она начала управлять и АЛУ. Пока не полностью, но... :)
Автор PDP-2011 добавил, а я успешно перенёс в свой PDP-11X
RT-11SB (S) V05.07
.R MSCPCK
.SHO CONF
RT-11SB (S) V05.07
Booted from DL0:RT11SB
USR is set SWAP
EXIT is set SWAP
KMON is set NOIND
MODE is set NOSJ
TT is set NOQUIET
ERROR is set ERROR
SL is set OFF
EDIT is set KED
FORTRAN is set FORTRA
KMON nesting depth is 3
Global .SCCA flag is disabled
CLI is set DCL, CCL, UCL, NO UCF
LSI 11 or PDP 11/03 Processor
56KB of memory
Extended Instruction Set (EIS)
Floating Instruction Set (FIS)
50 Hertz System Clock
Memory parity support
SB timer support
Global .SCCA support
FPU support
Extended unit support
.BOO/FOR HX:
HX 2.2 XXDP Cold boot..
MEMORY MANAGEMENT UNIT NOT FOUND
BOOTING UP XXDP-SM SMALL MONITOR
XXDP-SM SMALL MONITOR - XXDP V2.6
REVISION: E0
BOOTED FROM HX0
28KW OF MEMORY
NON-UNIBUS SYSTEM
RESTART ADDRESS: 152010
TYPE "H" FOR HELP
.R VKACC1
VKACC1.BIC
DVKACC - LSI-11 FIS INSTRUCTION TEST
END PASS██
END PASS██
END PASS██
END PASS██
END PASS██
END PASS██
END PASS██
END PASS██
END PASS██
END PASS██
END PASS██
END PASS██
END PASS██
Сам перенос занял примерно часа 2-4 (не сидел от и до, отвлекался на разное, поэтому точно сказать не могу), а исправление ошибок и уточнение переноса особенностей приоритета у PDP-11/03 - ещё часа 4
Определённое количество ошибок в тестах по двум причинам
- слишком быстрый PDP-11X
- некоторые долгоиграющие инструкции (типа EIS, FIS, FPP, DIS и CIS) на некоторых моделях PDP-11 прерываемые. Причём CIS продолжится с (внутреннего) места прерывания (насчёт DIS инфы не попадалось) и вроде для какой-то модели PDP-11 (70?) аналогично для FPP
Автор PDP-2011 добавил поддержку второго (для некоторых моделей) для EIS и FPP, но некоторые более старые версии тестов FIS всё равно хотят прерываемости, а её вроде нет (если я правильно понял).
Ну и вроде как нет поддержки красной и жёлтой границы стека для FIS.
И автор (вроде) схитрил - FIS работает по принципу стека (то есть берёт два операнда через (Rx)+, а результат кладёт по -(Rx)), но промежуточные значения регистра в регистровый файл не сохраняются.
Так что сейчас пытаюсь добавить прерываемость и в PDP-11X ну и пошаманить с красно-жёлтым :) Насчёт хитрости - не знаю - добавлю запись в регистры или нет - хотя есть у меня мысль вывести на цифровую панель показ и регистров, так что скорее всего да.
Красно-жёлтое (по крайне мере на PDP-11/35) вроде да.
Теперь прерывания во время FIS
Добавил прерывабельные EIS и FIS (параметр настраивается в описании конфигурации процессора) и для PDP-11/03 на текущий момент
- не проходят тесты DIS (и не будут - пока не будет DIS)
- в VKADB0 нужно указать, что есть EIS и FIS
- в тесте VKALA1 поправить максимальный адрес, а то он думает, что в диапазоне 160000-167777 или есть ОЗУ (PDP-11 с 30-ю кб ОЗУ) или вообще ничего нет (а у PDP-11X и PDP-2011 там ПЗУ)
- - - Добавлено - - -
Теперь пойду добавлять прерывабельный FPP (точно у F-11 ака 1811 ака PDP-11/23 PDP-11/24)
А потом домучаю PDP-11/35 - чего то там тоже некоторые тесты кочевряжатся
Как это не странно (вроде как FPP должен работать дольше, а поэтому шанс прилёта прерывания от консоли выше), но с прерывабельным FPP пришлось провозиться дольше. То есть решение в лоб по примеру EIS-FIS вообще не сработало. Пришлось смотреть, что же там тест такого делает. И оказалось, что разработчики DEC немного изменили подход.
В тестах 11/03 всё делалось без особых изысков - крутился бесконечный цикл выполнения команды MUL или FADD (если мне не изменяет память для FIS), в это время делался вывод CR на консоль и в обработчике прерывания от консоли смотрелось - адрес возврата указывает на команду EIS-FIS и если да - а-ля-у-лю - команды прерываемые и можно идти дальше. А если нет - тогда крутим.. до победного. Так что тест на этом месте зацикливаться без прерываемости EIS-FIS
А в тесте прерываемости FPP для 11/23-11/24 сначала программа прикидывала - сколько выполнится циклов-пустышок между прилётами прерываний от консоли. А потом счётчик слегка уменьшался. Типа за это уменьшение хоть одна команда MULF из двух, но не успеет выполниться.
В случае варианта решения от автора PDP-2011 (на его скорости процессора) так и получалось (правда, он ещё писал, что и скорость серийного порта повысил до 38400). А вот у меня скорострельность процессора такая, что даже скорость 115200 не помогает :)
В общем, мне свезло, что константа уменьшения зашита в тест. Так что я её слегка уменьшил и - тест начал проходить. Э.. Слегка - это я наверное погорячился - уменьшил я её почти в 2.5 раза - с 27(octal) до 10(octal). На 11 тест уже начинает периодически не успевать, на 12 гарантированно не успевает :)
PDP-11/35 и прерываемость FIS
Пока тест не проходит - то ли всё таки надо в большем количестве мест проверять - не прилетел ли запрос на прерываниебольше мест надо проверять, то ли не совсе удачную команду (FSUB 0, 1) на проверку в DEC выбрали...
Вдогонку (чего-то забыл сразу написать).
Да, основная проблема в команде - код PDP-2011 проверяет для FADD и FSUB - не является ли один из операндов нулём и если да... то время выполнения команды (именно выполнения) - один такт. То есть поймать прерывание...
Вроде как нащупал, почему не прерывается FIS на PDP-11/35/40, но.. было одно более раннее предположение о этих процах, так что.. надо проверять всеми тестами - после того, как синтезируется
- - - Добавлено - - -
В общем - что-то в этом есть.. Но до конца пока не уверен. Завтра ещё буду проверять :)
- - - Добавлено - - -
Всё, добил таки прерываемость FIS на PDP-11/35/40 :)
Более раннее предположение - правильное, но к нему нужно было добавить и FIS
Фиксация прерываний в конце выполнения команды, но - фиксация так же возможна почти в конце обработки прерывания, а так же (свежее добавление) в середине FIS. Подумав, добавил туда же EIS и FPP, но.. Не думаю, что такая комбинация встретится ещё у каких-то процов.
Итак, тесты для PDP-11/03 и PDP-11/35/40 проходят почти все.
Не проходящими для 03 остались тесты DIS (нету реализации команд) и ещё один тест пока не понял, как запускать - а документации нету..
Не проходящим для 35/40 остался один тест (точнее говоря - один подтест в нём) - но с ним я пока не разобрался - чего то там с line clock и возможно как то завязано на 60 Гц (врят ли) или скорострельность проца. Думаю над ним :)
В общем, как обычно, захотелось мне сегодня в районе обеда... Странного :)
О странном немного позже (не сделал ещё), но в процессе делания сделал, в том числе, давно хотимое :)
PDP-11/93 (128KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>100/
000100 000000 123
000102 000000
>>>100/
000100 000123 100
000102 000000
000100 000100
>>>101\
000101 000 123
000102 000
000101 123
>>>100/
000100 051500
>>>
То есть теперь непосредственно из FullODT можно не только читать, но и писать в АП :) Пока только восьмеричные слова и байты, но.. Есть мысли добавить и другие варианты (в идеале - команды PDP-11, но это в сильном идеале :) )
Нашел ошибку в коде сохранения и восстановления регистров в haltmode.
Аппаратных указателей стеков, однако, бывает больше одного :)
Щаз попробуем пофиксить...
- - - Добавлено - - -
А вот и хр... задумался.. Вроде как по тому, что написано - не должно. При уходе в halt mode переключается режим работы проца на кернел-кернел и дальше с режимами (по крайне мере в текущей версии) не играется... Думаю дальше..
Из хорошего - оказалось, в регистр прерывания я заложил полный адрес, а вот код halt mode старшую часть не загружает. Вот это первым под допил, а то на процах с ДП точку останова на странице ВВ не установишь :)
- - - Добавлено - - -
Как ни странно, но доделка оказалась несложной. Чего я раньше не сделал.. Могу только предположить, что когда всё это только начинало делаться - было непонятно - чего и как, а потом просто забыл.
- - - Добавлено - - -
А ещё сегодня пришла (купленные по наводке (спасибо!) Xolod-а) вот такая пара игрушек:
https://aliexpress.ru/item/1005004065727282.html
Скорее всего помучаю в выходные, но, поскольку это заготовка - первый подход будет не сильно интересный.
К тому же, надо будет поискать доков.
Очень может быть, что только проверю - ту ли FPGA припояли :D
На и если всё в порядке - разъёмы припаяю, что бы можно было к плате что то ещё цеплять. В принципе, на первый раз будет достаточно конвертера под серийник и разъём под SD. Хотя можно будет попробовать примастрячит и разъём под CF, если найду в хозяйстве :)
- - - Добавлено - - -
Блин! Теперь приходится смотреть - правильно ли адрес для останова написал - с учётом 22-ух разрядов :)
- - - Добавлено - - -
Однако... когда ДП включен - halt mode явно не допилен...
Э.. похоже про недопиленность halt mode я погорячился - впечатление, что очень тонко построено тестирование - то есть результаты после очередного теста используются дальше. А я тут влепил, не особо подумав, обход, что бы дальше посмотреть, что происходит - это было до допиливания работы с регистром прерывания, поэтому точку останова не мог (точнее сказать - не допёр - как) поставить :) Щас синтезируется прошивка - и можно будет уточнить - так как у меня и до этого падало тестирование, но не было понятно - почему.
- - - Добавлено - - -
Да, вывод правильный - проблемное место пройдено, так что - проблемы работы halt mode с включенным ДП есть, но не в этот раз :) Едем по тесту дальше...
С утра - сохранение (проверяется) и показ всех указателей стека.
- - - Добавлено - - -
С одной стороны - сохраняется и восстанавливается (хотя, с учётом то, что код halt mode их не трогает, вроде бы и не нужно - но в планах дописывание возможности менять и сохранённое содержимое регистров процессора, а не только памяти и регистров в/в), а с другой стороны - получается, что есть ошибка в команде Step - если она стоит на команде типа MOV SP, R1 - то берётся содержимое kernel SP независимо от того, какой режим в PSW. Но если поставить точку останова после такой команды, то всё норм. То есть получается, что не успевает переключиться режим работы проца. В процессе проверки этой гипотезы :)
- - - Добавлено - - -
Гипотеза подтвердилась, пока "обходная" задержка, подумаю потом, всё равно эта задержка на общую скорострельность не влияет.
И субтест начал проходить :) Но там дальше ещё одна игра с ДП, на которой тоже.. не всё в порядке в степовом режиме.
А потом субтест, который ни в каком виде не проходит..
Найдена ещё одна особенность J-11, которая стандартными тестами не ловится :)
Сдвинулся в тесте дальше, но тоже где-то там дальше падает.
Поскольку где-то значительно дальше - воспользовался возможностью типа 1000S - выполнить 1000(8) команд (с выводом на экран разного) и приостановиться. Уже порядка 4000(8) команд и всё ещё не слетело.
А, да, всё это дело ещё и в файл пишется - спасибо Патрону и эмулятору VT52 :)
Шо-то где-то не проходит - не складывается, но пока понять не могу... Больно хитро оно работает..
Нашёл ещё одну неточность в реализации J11, точнее говоря, в его (предполагаемом от DEC стандартном) окружении - для PDP-11/73/83 и скорее всего - в /84/93/94. В 84/94 пока не особо проверишь - там ещё Unibus приблуда со своими регистрами, а 93 - надо пошерстить файлопомойку на предмет доков - с ходу даже не помню - есть или нет (по 94-ой точно было) ...
Синтезируется. Посмотрим, что теперь тесты скажут.
- - - Добавлено - - -
Ну фто могу сказать... Тесты всё ещё не проходят, но - сдвинулся дальше :)
Будем посмотреть - иде я теперь облажался :)
- - - Добавлено - - -
Ситуация получше - тестовая программа уже начала выдавать на экран инфу - так что вычислить - иде сбойнуло - стало гораздо проще :) Разбираюсь с новой ошибкой...
- - - Добавлено - - -
Глупый косяк (КС надо было поправить) - надо было сразу догадаться :) Синтез, потом проверка...
- - - Добавлено - - -
Дальше прошёл по тестам, но опять что то не нравится... Будем посмотреть :)
С очередным непрохождение субтеста всё проще - нереализованный функционал (как-то был не особо нужен) в серийном порту - если прилетает ещё символ, а первый не прочитан - ошибка данных+переполнение.
Набросал. Синтезируется.
А ещё сегодня пришла (купленные по наводке (спасибо!) Xolod-а) вот такая пара игрушек:
https://aliexpress.ru/item/1005004065727282.html
Скорее всего помучаю в выходные, но, поскольку это заготовка - первый подход будет не сильно интересный.
К тому же, надо будет поискать доков.
Очень может быть, что только проверю - ту ли FPGA припояли
На и если всё в порядке - разъёмы припаяю, что бы можно было к плате что то ещё цеплять. В принципе, на первый раз будет достаточно конвертера под серийник и разъём под SD. Хотя можно будет попробовать примастрячит и разъём под CF, если найду в хозяйстве
Не надо ничего паять, есть же:https://aliexpress.ru/item/1005005094654777.html?spm=a2g2w.detail.seller_rcmd .0.1ec55bb1oPL61m&_evo_buckets=165609,165598,194275,299288&sku_id=12000031636060838&gps-id=pcDetailBottomMoreThisSeller&scm=1007.13339.291025.0&scm_id=1007.13339.291025.0&scm-url=1007.13339.291025.0&pvid=f6e9503a-a57c-48c3-b3e8-c5a4f4ddfb96&_t=gps-id:pcDetailBottomMoreThisSeller,scm-url:1007.13339.291025.0,pvid:f6e9503a-a57c-48c3-b3e8-c5a4f4ddfb96,tpp_buckets:21387%230%23233228%2310_2 1387%2314365%23455266%23834_21387%239507%23434558% 233
Вот тут доки: https://github.com/ChinaQMTECH
Да, спасибо, я видел эту плату (и доки, кстати, тоже потом уже нашёл), но к моим задумкам эта плата не подходит.
Хотя, возможно, я себе и её прикуплю - просто, что бы была - так что то по быстрому попробовать - да, можно будет до каких-то границ и не паять свое.
- - - Добавлено - - -
Пошли тесты кэша, на PDP-11X его нет (хотя периодически мысль возникает), так что пришлось грубо фиксить :) Пока правится зашивается в прошивку только содержимое ПЗУ, так что двигаюсь быстрее, но пока есть ещё матерящиеся тесты :)
Сначала блокировал сообщения об ошибках тестирования кэша, но быстро понял, что во первых их МНОГО, во вторых не всегда понятна логика, а разбираться - это можно закопаться надолго. Поэтому сделал обход аж четырёх модулей и... налетел на пятый :) Смотрю дальше
- - - Добавлено - - -
Тесты кэша заблокировал, теперь всё проходит - и можно приступать к странному :)
Посмотрим, насколько успешно - где то через полчаса :)
Итак, ПЗУ от KDJ11-B удалось успешно, хотя и не без грубого решения некотрых проблем, подцепить и заставить работать в PDP-11X :) Сегодня с утра прислали ПЗУ от KDJ11-E (ака PDP-11/93/94), так что в планах проделать этот фокус и для KDJ11E :) А так же с KDF11-B :)
Но пока занялся наведением порядка в модуле SDRAM - с одной стороны - что-то я в нем начинал делать перед перерывом и сломал его, а с другой стороны - всё равно оставились вопросы по функционированию SDRAM, так что продолжил его терроризировать, что бы добить :)
И да, в курсе, что в сети полно реализация для SDRAM и даже один из них был взят за основу.
- - - Добавлено - - -
Некоторые выводы из опыта подключения ПЗУ KDJ11-B к PDP-11X
- наличие FullODT позволило прояснить некоторые (непонятные) моменты в работе кода плюс добавить комментарии на ещё некоторое количество кусков кода. Работы по полному восстановлению исходника ещё много, но теперь можно не только поломать голову, но и просто посмотреть
- стала известна ещё одна особенность (возможно, в доках есть, но пока не натолкнулся) в работе J-11, которая НЕ проверяется тестами для J-11, которые я гонял, и которая ПРОВЕРЯЕТСЯ тестом из ПЗУ
- необходимо расширить функционал регистра прерывания (пока он один, в планах довести количество до 8) для работы с оконными ПЗУ :)
Потихоньку привожу в порядок модуль SDRAM (в соответствии с последними указаниями "ВЦСПС" :) ).
В принципе - работает, но иногда даёт сбой при работе по ПДП. При этом тест памяти со стороны процессора идёт норм, но увы - модуль ПДП и процессор опираются на разные реализации, так что - больше похоже на то, что это не ошибка в модуле SDRAM.
В целом, как я уже когда-то писал - это больше эксприментальная реализация PDP-11 :) Так что - продолжаю развлекаться дальше.
В планах - дизассемблировать прошивку от KDJ11-E и начать её прикручивать к PDP-11X.
Тоже самое сделать с прошивкой от KDF11-B.
Посмотрим, что ещё интересного о PDP-11 вылезит из этих прошивок :)
Ну и попробовать так реализовать задержку SOB, что бы проходили тесты из XXDP и прошивки от KDJ11-B. Возможно, что что-то похожее (зависимость тестов от скорости работы SOB) сделали и в прошивке от KDJ11-E..
ПЗУ-уха от KDJ11-E (PDP-11/93/94) проверяет предвыборку команд, причём делает это орррригинальным способом :v2_dizzy_facepalm: ...
173130 006202 010215 160407 ASR R2 ; теперь в R2 200
173132 010215 160407 006202 MOV R2, (R5) ; выключить ПЗУ 173000
173134 160407 006202 010215 SUB R4, PC ; и перескочить на ПЗУ 165000 (в R4 - 6000)
173136 006202 010215 060407 ASR R2 ; теперь в R2 100
173140 010215 060407 005015 MOV R2, (R5) ; выключить ПЗУ 165000, но включить ПЗУ 165000
173142 060407 005015 006303 ADD R4, PC ; но успеть перескочить на 173000
173144 005015 006303 005000 CLR (R5) ; включить оба ПЗУ
>>>
- - - Добавлено - - -
В общем, с наскоку не получилось - страшные дела там оно творит. Так что сначала какой-никакой дизасм, а потом уже пробы запуска с выпиливанием неправильного кода :)
Ещё можно попробовать записать в ПЗУ и попробовать поставить в KDJ11-B :)
- - - Добавлено - - -
По некоторому размышлению решил, что то, на что я опять налетел в KDJ11-E - это последствия пустоту в конфигурационном) EPROM плюс попытка стартовать по вектору 26 (восстановление питания). Попробовал заблокировать...
Война с KDJ11-E. Пока не сильно успешно:
Unexpected trap on page 026, address 173112
Несколько замороченная система работа с ПЗУ - часть страниц работают как в KDJ11-B, а в части содержится программа настройки, которую, судя по тому что успел заметить - копируется и запускается из ОЗУ. И немного непонятен размер ПЗУ - 32 кб или 64 кб. Плюс в документации неточность про регистр отображения страниц.
В общем, подкоп идёт с двух сторон - эксперименты на PDP-11X и дизасм ПЗУ
Какой никакой исходник ПЗУ KDJ11-E теперь есть (собирается в идентичный файл), так что теперь можно пойти по пути KDJ11-B - то есть блокирую несовместимые места. Пара мест - это использование предзагрузки J-11 (нету её пока :) ), ещё одно место - немного другой подход к вариантам запуска на KDJ11-E - там пока по коду не понятно, что так тоже - обход
Место сбоя найдено. Связано с тем, что памяти пока только 256 кб (SDRAM ещё дурит), поэтому пока обход - и посмотрим дальше
Прошёл дальше. Следующая проблема - отсутствие CSR модуля памяти - из-за этого очередной слёт. Собрал (псевдо)CSR, будем посмотреть дальше.
Псевдо - потому что читать-писать можно, но реально это не на что не оказывает влияение. В штатном - управление работой модуля контроля чётности. На тестах, конечно, слетит :) Но в ПЗУ, если есть - заблокирую :)
- - - Добавлено - - -
Сделал CSR для памяти.
Очередной затык. Пока не понятно, в чем дело, но судя по увиденному в коде - вроде как чего-то с line clock (который на KDJ11-B и KDJ11-E трехпрограммный :) )
Некоторая сложность в том, что теперь работает код, скопированный из ПЗУ в ОЗУ, то есть, что бы его хакнуть - надо понять - откель ноги растут.
Но в чём то ситуация проще, так как теперь можно более свободно ставить точку останова :)
- - - Добавлено - - -
Нет, не line clock, а блок SLU - на KDJ11-E можно задать один из двух базовых адресов для всего блока, естествнно, никто это не делал :) Да и консольный порт тоже может менять свой адрес со стандартного
Не считая того, что болел и занимался домашними делами, так же
- причёсывал код ПЗУ KDJ11-E
- реализовал поддержку трёхрежимности для line clock
Проверил. Да, на 800 Гц, часы в RT-11 резко идут вперёд :)
- - - Добавлено - - -
В способности начать работать в ПЗУ пока подвижек нет - надо доделат поддержку переключения блока SLU-ов между двумя вариантами адресов и векторов. А вот тогда может что-то и пойдёт так :)
- - - Добавлено - - -
Блоком SLU займусь завтра, сегодня уже сильно тянет полежать..
Сделал переключаемый по адресам, а так же отключаемый, блок SLU с программным переключением, как на KDJ11-E.
Если в кратце - не помогло :D - падает на том же месте :)
Ещё одна возможная причина (такое было и на KDJ11-B) - время выполнения SOB, но это надо анализировать код.
Продолжаю думать и анализировать :)
Реализован ещё один (вроде как) нужный регистр.. Синтез, потом новая проверка :)
- - - Добавлено - - -
Продолжаем исследование :)
Раскусил свой последний косяк - называется - надо внимательно читать документацию :D
KDJ11-E Monitor Version 2.01 18-Aug-1998
(C) Digital Equipment Corporation 1990-1998
Memory 0 KW Memory Intern ------
EEprom 4 KW Rom on 173000 Yes
Time 00:00:00 00-Jan-00 Rom on 165000 Yes
Power-up Mode Dialog
Nr Device Unit Address Restart Mode Dialog
1 Do Power-on Selftests No
2 Do Select Selftests Edit
3 Do User Boot Edit
4 Do Alternate Boot Block No
5 Do LTC Register Yes
6 Do Force Clock Interrupt No
Clock Frequency 50Hz
Lines Address/Vec Baud Data Stop Par Halt on Break Yes
Line 1 176500/300 300 8 2 Even Trap on Halt No
Line 2 176510/310 300 8 2 Even Ignore Battery Yes
Line 3 176520/320 300 8 2 Even Lines on 176500
Line 4 176530/330 300 8 2 Even
Line 5 176540/340 300 8 2 Even Map Do
Line 6 176550/350 300 8 2 Even Factory Setting Do
Line 7 176560/360 300 8 2 Even Save Do
Line 8 176570/370 300 8 2 Even
- - - Добавлено - - -
В целом - не всё ещё работает (скажем, не удалось загрузиться с DL ручном режиме и не сохранились настройки - где-то в работе с EEPROM ещё ошибки), но уже что-то :)
- - - Добавлено - - -
А, да, надо будет всё таки попробовать сделать и часы TOY - для начала внутри DE10, а потом можно будет попробовать и микруху прицепить с батарейкой :) Только пока проблемы с пониманием того, как с ними диалог (сам протокол) вести :)
- - - Добавлено - - -
В общем, пока, что бы оно не кочевряжилось и хоть как то запускалось - нужен хак в чётырёх местах. Два - это предвыборка (в PDP-11X нет и пока не предвидится), одно - вроде как завязано на минимальный размер (2 мб) памяти (то есть надо добить SDRAM), ещё с одним надо разбираться.
Ну и нужно параметризацию причесать - всё таки KDJ-11B и KDJ-11E отличаются и по набору (системных) регистров и максимальному доступному размеру ПЗУ (B - 32 кб, E - 64 кб). Хорошо, что KDJ11-B у меня есть - в натуре можно проверить, плохо, что KDJ11-E нет - тут придётся методом исключения :)
Всё, на сейчас всё - спать хочется :)
- - - Добавлено - - -
А, да, содержимое ПЗУ мне досталось вроде как из последних - с поддержкой 21-ого века :) Вроде :)
Приводил в порядок исходники после ночных бдений. Как вывод
- код из ПЗУ KDJ11-B гарантированно падает, если обвязка поддерживает ROM на 64 кб (то есть работает старший бит в расширении адреса окна) - только 32 кб. Ну или поправить код.
- код из ПЗУ KDJ11-T не уместился в 32 кб, так что требуется поддержка со стороны обвязки ПЗУ на 64 кб
- - - Добавлено - - -
Как всё в порядок приведу - буду разбираться дальше - чего KDJ11-E падает при попытки загрузки с DL
Война на два фронта - разборки с ПЗУ KDJ11-E и пытаюсь разобраться с моей реализацией SDRAM в связке с ПДП
Пока основное - это разборки с ПЗУ KDJ11-E, но в процессе налетел на то, что FullODT показывает не то содержимое ячеек при пошаговой трассировке, если (внезапно) включен ДП. Это называется - дозрел до анализа в нём настроек ДП. В процессе разборок с кодом (унификация) сделал всё таки и более интеллектуальный показ одно- двух- и трёхсловных команд. Раньше просто тупо показывалось три последовательные ячейки, независимо от длины команды, теперь более красиво:
PDP-11/03 (28KW) (PDP-2011 based) FullODT for halt mode (in development :))
>>>1000/
001000 016767
001002 000000 177776
001004 000000 177776
>>>1000!
001000 016767 177776 177776 MOV 1002, 1004
>>>173000!
173000 042114 BIC (R1)+, (R4)
173002 000176 000261 JMP @261(SP)
173006 012700 000000 MOV #0, R0
173012 012701 174400 MOV #174400, R1
173016 010704 MOV PC, R4
173020 103064 BCC 173172
173022 000402 BR 173030
173024 173000 SUBD R0, R0
173026 000340 SWAB -(R0)
173030 010003 MOV R0, R3
173032 000303 SWAB R3
173034 010311 MOV R3, (R1)
173036 012761 000013 000004 MOV #13, 4(R1)
173044 052703 000004 BIS #4, R3
173050 010311 MOV R3, (R1)
173052 105711 TSTB (R1)
>>>
Работа в FullODT с учётом ДП
PDP-11/93 (0KW) (PDP-2011 based) FullODT for halt mode (in development :)) ; 0kw из за особенностей KDJ11-E
>>>17765626T ; регистр точек останова работает с физическими адресам
>>>G
Breakpoint!
R0=000000 R1=000000 R2=177777 R3=000000 R4=172356 R5=000006
aR0=000000 aR1=000000 aR2=000000 aR3=000000 aR4=000000 aR5=000000
kSP=177674 sSP=000000 uSP=000000 PC=000126 PS=000340 ; для PC показывается виртуальный адрес
>>>S
R0=000000 R1=000000 R2=177777 R3=000000 R4=172356 R5=000006
aR0=000000 aR1=000000 aR2=000000 aR3=000000 aR4=000000 aR5=000000
kSP=177674 sSP=000000 uSP=000000 PC=000126 PS=000340
000126 005305 DEC R5 ; тоже - виртуальный адрес
R0=000000 R1=000000 R2=177777 R3=000000 R4=172356 R5=000005
aR0=000000 aR1=000000 aR2=000000 aR3=000000 aR4=000000 aR5=000000
kSP=177674 sSP=000000 uSP=000000 PC=000130 PS=000340
>>>126!
000126 005305 DEC R5 ; и снова виртуальный
>>>165626!
165626 005305 DEC R5 ; эта же ячейка в виртуальном АП ПЗУ
>>>177572/
177572 000001 ; ДП - включён
>>>172340/
172340 177655 ; регистры отображения адресов для режима ядра (см PSW)
172342 000200
172344 000400
172346 000600
172350 001000
172352 001200
172354 000000
172356 177600
- - - Добавлено - - -
В общем - первый подход к снаряду достаточно успешен. Дальше - проверка, а как это всё будет работать на процах с 18-ти битным ДП, работа не только в текущем режиме с возможностью динамически (на одну команду) и статически (на все последующие команды) выбирать режим работы - виртуальный, ядра, супервизора, пользователя, физический - ДП.
Но пока продолжаться разборки с ПЗУ, всё вышеперечисленное - если вдруг сильно понадобится, ну или - как руки дойдут :)
С командой step налетел на "интересную" проблему.
Если память "выключена" (есть такая "фича" у KDJ11-E), то команда step не фига не проходит - всё начинает трапаться при попытке выйти из halt mode - то есть выдаётся state - "выполнить запрос из halt mode" (в этом случае - запрос Step) и.. на нём всё виснет - как будт идёт какой то запрос в/в.
А если память "включить" - то - а-ля-у-лю, всё бест проблем. Разбираюсь - чего там такое вылезает... Технически, для разборок с кодом ПЗУ это не мешает, но.. "как-то не аккуратненько, дохтор" :)
Источник проблемы нашёл, первоисточник - пока нет. Но, по крайне мере, Step без памяти уже не виснет :)
Посетила меня тут "гениальная" мысль. И решил я собрать вариант PDP-11/93 с SDRAM, но не в варианте KDJ11-E. И, блин, работает, сволочь.
То есть проблема не моей реализации SDRAM (получается, с ней всё ок) - а чего-то не так в реализации KDJ11-E. Ну, собственно, поскольку ПЗУ не запускается - где-то действительно что-то не так. Так что моё изучение её кода под микроскопом - всё равно в тему :)
Продолжаю...
Уф.. Нашёл косяк. Технически - должен был быстро догадаться, а практически.. Такой фейрверк совсем в других местах.. :)
Ну-с, синтез запустил - посмотрим - иде ишо будут косяки :)
- - - Добавлено - - -
Вот што крест животворящий делает :)
KDJ11-E Monitor Version 2.01 18-Aug-1998
(C) Digital Equipment Corporation 1990-1998
Memory 2048 KW Mem mismatch Memory Intern ------
EEprom 4 KW Rom on 173000 No
Time 00:00:00 00-Jan-00 Rom on 165000 No
Power-up Mode Dialog
Nr Device Unit Address Restart Mode Dialog
1 DL ROM 0 Default Do Power-on Selftests No
2 Do Select Selftests Edit
3 Do User Boot Edit
4 Do Alternate Boot Block No
5 Do LTC Register No
6 Do Force Clock Interrupt No
Clock Frequency P/S
Lines Address/Vec Baud Data Stop Par Halt on Break No
Trap on Halt No
Ignore Battery No
Lines on DIS
Map Do
Factory Setting Do
Save Do
- - - Добавлено - - -
Но грузиться через ПЗУ пока не хочет, через FullODT - без проблем... разбираемся дальше..
Поправил небольшую неточность, а том тест ZKDJ?? на KDJ11-B считал, что есть проблема с платой процессора :)
Ещё одну загадку KDJ11-E разгадал, теперь в EEPROM правильно пишет и читает. Но пока остался один хак (непонятная проверка чего-то и вылет) и не загружаемость из ПЗУ. Колобки продолжают следствие :)
После пятого (шутка юмора) прочтения работы с TOY наконец въехал - как оно пишется-читается. Попробую реализовать :)
Разобрался ещё с одним хаком, остутствие которого не давало запуститься ПЗУ. В общем, проблема связана с попыткой автоматического запуска PDP в ситуации, когда EPROM нулевой. То есть, в отличии от KDJ11-B, что бы плата нормально запускалась - в EPROM должна быть какая-никакая инфа. После этого хака конфигурирование EPROM стало возможным, ну а потом - можно было и посмотреть - чего там - и сделать MIF файл.
Так что на текущий момент остался только один (формально - два) хак, связанный с тем, что у J11 есть предвыборка.
Но по прежнему загрузить из ПЗУ систему не получается (место нашёл, почему не проходит - пока не понятно).
И как выяснилось - если включить в ПЗУ автотестирование - то тоже.. Не всё в порядке :)
Ну круть за крутью.. Разобрался с причиной вылета по вектору 4 при попытке загрузиться. По порядку.
1. На PDP-11/9x память с паритетом.
2. После включения питания - понятно, что ни о каком паритете речь идти не может.
3. Что бы из-за этого не вылетать - система очищает память
4. Вариантов очистки - два - или в настройках стоит - при запуске ПЗУ проводить тестирование памяти или - если оного нет - то перед загрузчой, если ещё не очищалась память - очистить (в этом варианте - весьма своебразно).
5. Очистка памяти вызывается через EMT 21
6. Обработчики EMT в конце производят возврат
7. Возврат может быть на другую страницу ПЗУ
8. Что бы не вылететь, возврат делается кодом в конце страницы, который одинаков на всех страницах
9. Аха, щаз. На PDP-11/9x содержимое ПЗУ состоит из двух частей - в младщих адресах - типа стандартного (то есть со страничной организацией и кодом выхода в конце) (и их - 31 страница) и затем - код типа экранного меню - который перед запуском копируется в ОЗУ целиком - и работает оттуда и - внезапно - никакой страничной организации
10. Перед загрузкой этот код так же смотрит - была ли очистка ОЗУ (всего!) - и если нет - дергает EMT 21, обработчик которого - в ПЗУ на странице 22 и который по завершению пытается вернутся стандартным способом.
11. А это выглядит так:
MOV (SP)+, @#PCRB+1 ; восстановить отображение страницы, с которой был вызов
MOV (SP)+, PC ; типа RETURN
И вот первая команда ломает отображение страницы (она уводит на страницу, где хранится код экранного меню - и у этих страниц нет в конце страниц кода возврата - то есть там на месте команды MOV (SP)+, PC может быть что угодно
12. На реальном J11 перед выполнением восстановления отображения страницы успевает сработать предвыборка - то есть дальше проц выполнит MOV (SP)+, PC независимо от того, что там ТЕПЕРЬ реально в ПЗУ
13. А на PDP-11/X - опаньки, приплыли
Ок, эту проблему можно обойти, если поставить автотестирование ОЗУ при запуске ПЗУ. Правда - там следующая проблема (пока не знаю - в чем дело) - и всё равно нет загрузки :) Но по крайне мере теперь не вылетает незнамо где - надо просто под FullODT пройтись :)
И ещё одна проблема нарисовалась - у FullODT своя консоль - и случайно выяснилось, что я её засандалил на те же адреса, что и контроллер RH :) Ну, с этим проще :)
Как обойти эту проблему (неправильные хвосты на страницах ПЗУ) - придумал, но.. Это стоит 4 лишних слов в обработчике EMT. И старый-престарый вопрос - где добыть несколько слов на странице, где (вроде) всё занято.. Причём в принципе слова то свободные есть, но.. их как бы нет - ибо вектора и обработчики прерывания.
После часов трёх ломания головы - выцарапал три слова и (о щастье) нашлось ещё одно не занятое :)
Так что - ещё один хак, решающий проблему предвыборки на J11
Но пока всё равно не грузится..
Вот даже не знаю, чем это считать - небрежностью программирования автора кода ПЗУ или неучтенным вариантом автора PDP-2011 :) Но одно налетело на другое и..
Подумал, поправил, но до конца в правке не уверен - надо доки почитать и нарисовать тест..
Синтезируется...
Ну, как и ожидал, проблема именно в этом
KDJ11-E Monitor Version 2.01 18-Aug-1998
(C) Digital Equipment Corporation 1990-1998
Memory 2048 KW
EEprom 4 KW
Time 00:00:00 00-Jan-00
Nr Device Unit Address
1
2 DL ROM 0 Default Starting System
RT-11SB (S) V05.07
.R MSCPCK
.
Но некоторые непонятки (в коде RL модуля) ещё остались, так что - да, подвижки есть, но над чем думать - тоже ещё есть.
Ну и TOY хочется :)
- - - Добавлено - - -
Вроде с RL11 разобрался - по крайне мере теперь грузится. И с адресами для FullODT консоли тоже, RSX теперь грузится без проблем
KDJ11-E Monitor Version 2.01 18-Aug-1998
(C) Digital Equipment Corporation 1990-1998
Memory 2048 KW
EEprom 4 KW
Time 00:00:00 00-Jan-00
Nr Device Unit Address
1
2 DL ROM 2 Default Starting System
RSX-11M-PLUS V4.6 BL87 2044.KW System:"DE10 "
>RED DL2:=SY:
>RED DL2:=LB:
>RED DL2:=SP:
>MOU DL2:"RSX11MPBL87"
>
На очереди TOY и те тесты, которые должны проходить, но не проходят :)
Первая попытка. Реализовать просто чтение и запись из/в регистр(ы) TOY.
Там несколько замороченный протокол и пока наружу никакого фефекта фикции.
Думал уже нарисовать сигналтап, а потом подумал, что это несколько избыточно, так как в промежутках между чтениями-записями TOY (сейчас) статичен и его внутреннее состояние можно вывести на вспомогательный (отладочный) регистр.
Которые (просто сами регистры, без доп функционала) я уже рисую влёт по шаблону :)
Синтезируется.
После некоторой войны с ошибками и неточностями в реализации:
KDJ11-E Monitor Version 2.01 18-Aug-1998
(C) Digital Equipment Corporation 1990-1998
Memory 2048 KW Memory Intern 4MB
EEprom 4 KW Rom on 173000 Yes
Time 01:02:03 01-Mar-23 Wed Rom on 165000 Yes
Power-up Mode Dialog
Nr Device Unit Address Restart Mode Dialog
1 Do Power-on Selftests No
2 DL ROM 0 Default Do Select Selftests Edit
3 Do User Boot Edit
4 Do Alternate Boot Block No
5 Do LTC Register Yes
6 Do Force Clock Interrupt No
Clock Frequency P/S
Lines Address/Vec Baud Data Stop Par Halt on Break Yes
Line 1 176500/300 9600 8 1 Dis Trap on Halt No
Line 2 176510/310 9600 8 1 Dis Ignore Battery No
Line 3 176520/320 9600 8 1 Dis Lines on 176500
Line 4 176530/330 9600 8 1 Dis
Line 5 176540/340 9600 8 1 Dis Map Do
Line 6 176550/350 9600 8 1 Dis Factory Setting Do
Line 7 176560/360 9600 8 1 Dis Save Do
Line 8 176570/370 300 8 1 Dis
Но часики пока не тикают :) Это - следующий этап :)
- - - Добавлено - - -
Вдогонку
KDJ11-E Monitor Version 2.01 18-Aug-1998
(C) Digital Equipment Corporation 1990-1998
Memory 2048 KW
EEprom 4 KW
Time 01:02:03 01-Mar-23 Wed
Nr Device Unit Address
1
2 DL ROM 0 Default Starting System
RT-11SB (S) V05.07
.R MSCPCK
.tim
01:02:04
.dat
1-Mar-2023
.
RSX-11M-PLUS V4.6 BL87 2044.KW System:"DE10 "
>RED DL2:=SY:
>RED DL2:=LB:
>RED DL2:=SP:
>MOU DL2:"RSX11MPBL87"
>@DL2:[1,2]STARTUP
>; PLEASE NOTE
>;
>; If you have not yet read the system release notes, please do so
>; now before attempting to perform a SYSGEN or to utilize the new
>; features of this system.
>;
>;
>* Please enter time and date (Default:01-MAR-2023 01:02) [S]:
Тик-так, тик-так...
KDJ11-E Monitor Version 2.01 18-Aug-1998
(C) Digital Equipment Corporation 1990-1998
Memory 2048 KW Memory Intern 4MB
EEprom 4 KW Rom on 173000 Yes
Time 22:15:32 01-Mar-23 Wed Rom on 165000 Yes
Power-up Mode Dialog
Nr Device Unit Address Restart Mode Dialog
1 Do Power-on Selftests No
2 DL ROM 0 Default Do Select Selftests Edit
3 Do User Boot Edit
4 Do Alternate Boot Block No
5 Do LTC Register Yes
6 Do Force Clock Interrupt No
Clock Frequency P/S
Lines Address/Vec Baud Data Stop Par Halt on Break Yes
Line 1 176500/300 9600 8 1 Dis Trap on Halt No
Line 2 176510/310 9600 8 1 Dis Ignore Battery No
Line 3 176520/320 9600 8 1 Dis Lines on 176500
Line 4 176530/330 9600 8 1 Dis
Line 5 176540/340 9600 8 1 Dis Map Do
Line 6 176550/350 9600 8 1 Dis Factory Setting Do
Line 7 176560/360 9600 8 1 Dis Save Do
Line 8 176570/370 300 8 1 Dis
KDJ11-E Monitor Version 2.01 18-Aug-1998
(C) Digital Equipment Corporation 1990-1998
Memory 2048 KW Memory Intern 4MB
EEprom 4 KW Rom on 173000 Yes
Time 22:17:04 01-Mar-23 Wed Rom on 165000 Yes
Power-up Mode Dialog
Nr Device Unit Address Restart Mode Dialog
1 Do Power-on Selftests No
2 DL ROM 0 Default Do Select Selftests Edit
3 Do User Boot Edit
4 Do Alternate Boot Block No
5 Do LTC Register Yes
6 Do Force Clock Interrupt No
Clock Frequency P/S
Lines Address/Vec Baud Data Stop Par Halt on Break Yes
Line 1 176500/300 9600 8 1 Dis Trap on Halt No
Line 2 176510/310 9600 8 1 Dis Ignore Battery No
Line 3 176520/320 9600 8 1 Dis Lines on 176500
Line 4 176530/330 9600 8 1 Dis
Line 5 176540/340 9600 8 1 Dis Map Do
Line 6 176550/350 9600 8 1 Dis Factory Setting Do
Line 7 176560/360 9600 8 1 Dis Save Do
Line 8 176570/370 300 8 1 Dis
Из (пока) не сделанного
- часы в режиме 12 часов (AM/PM) - вроде как всё понятно, как сделать - но вот как проверить.. Попробую записать нужные данные и посмотреть, что скажет код из ПЗУ
- календарь - в том числе - переход времени через 12 ночи
Работы продолжаются :)
Поскольку, как выяснилось в ходе экспериментов (хотя и тут надо лезть в исходники) RT-11 при установке времени не выставляет его в TOY и поскольку я помнил, что RSX (по крайне мере Plus) это делать умеет - полез я в исходники, что бы посмотреть на код всего этого безобразия, а там...
>TIM /ROMAN
Martius II, Anno Domini MMXXIII X:XXXVI
The moon is waxing gibbous. Today is Thursday.
>
Так что сегодня у нас Martius II :D
Выпилил всё, относящееся именно к DS1215 (а именно эта микросхема скрывается под именем TOY) в отдельный модуль. Ну и попутно немного подумал над календарём.
- - - Добавлено - - -
Выпиливание завершил, проверки сделал, начинаю ваять дальше - календарь. Режим AM/PM позже.
Методом научного тыка выяснил, что RT-11 год, начиная с 72-ого (в TOY хранится 2 цифры года) до 99-ого воспринимает как 19xx, а с 00 по 71 - как 20xx.
У RSX+ 4.6 точка перехода - 90 год (то есть 90-99 - это 1990-1999)
- - - Добавлено - - -
Внезапно пришла в голову идея посмотреть на реализацию TOY в simh, но увы - ничем она не поможет - там при чтении тупо берут время из системы, а при записи - просто забивают на это дело..
BCD арифметика - это зло :)
Практически полностью реализован функционал DS1215, осталось сделать часы в формате АМ/ПМ и сделать два параметра настройки - запрет внешнего сброса и выключение тактового сигнала.
Из (покрайне мере пока) не предполагаемого к реализации - совместная работа с внешними ОЗУ/ПЗУ.
KDJ11-E Monitor Version 2.01 18-Aug-1998
(C) Digital Equipment Corporation 1990-1998
Memory 2048 KW Memory Intern 4MB
EEprom 4 KW Rom on 173000 Yes
Time 00:00:12 29-Feb-20 Sat Rom on 165000 Yes
Power-up Mode Dialog
Nr Device Unit Address Restart Mode Dialog
1 Do Power-on Selftests No
2 DL ROM 0 Default Do Select Selftests Edit
3 Do User Boot Edit
4 Do Alternate Boot Block No
5 Do LTC Register Yes
6 Do Force Clock Interrupt No
Clock Frequency P/S
Lines Address/Vec Baud Data Stop Par Halt on Break Yes
Line 1 176500/300 9600 8 1 Dis Trap on Halt No
Line 2 176510/310 9600 8 1 Dis Ignore Battery No
Line 3 176520/320 9600 8 1 Dis Lines on 176500
Line 4 176530/330 9600 8 1 Dis
Line 5 176540/340 9600 8 1 Dis Map Do
Line 6 176550/350 9600 8 1 Dis Factory Setting Do
Line 7 176560/360 9600 8 1 Dis Save Do
Line 8 176570/370 300 8 1 Dis
- - - Добавлено - - -
Вдогонку. Качество реализации - так себе (по моим меркам - сплошные мультиплексоры), но оно работает, а дальше будет видно - мысли, как можно попробовать оптимизировать - есть, осталось найти силы и время :)
Ради интереса посмотрел в RTL Viewer-е результат синтеза DS1215.. Ну как и ожидал - жудддддь.. Хорошо ещё, что работает на 100 Гц-ах (кстати - ещё одно отличие от реальной, которая на 32768 Гц-ах). Всё таки надо переделать :) Но пока цель - добить весь функционал.
- - - Добавлено - - -
Из (пока) отсутствующих вариантов - KDJ11-A и KDJ11-D. Первая - проще - там нет набортного ROM и кучки регистров, для второй надо дизассмеблировать ROM.
А ещё есть KDF11-A и KDF11B. А так же Pro 350 - но это самая сложная :)
А ещё есть Pro 380... :D
Навожу порядок в исходниках - а то, с экспериментами, что-то их много наплодилось.
Проходил мимо шкафа и на глаза попался VT220 - о, я его не пробовал давно подключить. Нашёл кабели, подключил и...
Скорость 115200 для VT220 как-то не очень.. :)
Поправил описание, запустил синтез..
- - - Добавлено - - -
Телефон, правда, испоганил цвет и оператора руки трясутся.. (http://www.kpxx.ru/PDP-11X(93)
Малость объединил исходники. Теперь KDJ11-B и KDJ11-E имеют один исходник (с заложенной возможностью добавления кода для KDJ11-A и KDJ11-D), так же как и PDP-11/83 с PDP-11/93. Код ПЗУ анализирует - а не на PDP ли 11/84 и 11/94 мы работает и если да - то делает ещё некоторые проверки-действия. С этим пока не ковырялся - как руки доберутся.
В планах опять вернутся к единому модулю для семейства KDJ-11 и остальных PDP-11 - если модуль не будет сильно замороченным.
В целом, всё сделано так, что можно "собирать" (в некоей стандартной конфигурации периферии) любую модель PDP, просто указав - "хочу" (например) PDP-11/70. Но KDJ11 пока выбиваются из этого подхода - вот и думаю - вернуть их на генеральную линию партии :)
Ну а если захочется свой вариант периферии - то отредактировать надо один модуль - и опять - собрать можно будет под любой процессор PDP-11 :)
Некоторая прическа кода для следующей хотелки :) Она не то что бы новая, но как то была заброшена :)
Прическа - опять некая стандартизация в реализации протокола обмена по внутренней шине. В процессе допиливания было исследовано несколько вариантов - какие-то взлетели (и остались), какие-то нет (и их никто не помнит), но в результате - чехарда. Вот её постепенно и ликвидирую. Ну, а новые модули, понятно, делаются уже по некоему текущему внутреннему стандарту.
Из новых задумок-хотелок - есть задумка реализовать КЦГД. Насколько я помню, в коде каких-то специфических особенностей ВМ2 он не использует, так что за основу можно взять проц от PDP-11/X. Ну и учитывая наличие суперОтладчика - процесс допиливания железа под код (примерно тоже я делал для KDJ11-B/E) сильно упрощается :)
В принципе КЦГД сэмулировать реально. даже ног много не очень надо, два последовательных порта, мышиный порт(только где такую мышку искать ???) да видеовыход. Шинные формирователи не особо нужны, если будет возможность вешать на произвольный последовательный порт. Получится довольно компактное изделие.
Ну, пока эту будет внутри DE10, но опыт переноса из модулей DE10 на QBus/МПИ был, так что технически ничего (кроме того, что и на DE 10 ещё нет) не мешает заделть потом самостоятельное устройство.
Кроме одного но.
Я не электронщик (я ещё только учусь - потихоньку начал двигаться в этом направлении) - так что пока изготовление самостоятельной платы КЦГД (на FPGA) под большим вопросом :)
У меня был коллега, который очень неплохо умел делать платы-заготовки с FPGA, но.. Я готов поставить кучу свечек только за то, что бы он был ещё живой
Тут смысла нет делать полную копию на шину. Достаточно чисто на последовательный порт. И в корзине места больше... :)
Да и возможностей для манёвра более. Например к машине на шине UNIBUS :)
В общем к любому компьютеру с последовательным портом...
Будем надеяться на лучшее.
Тут смысла нет делать полную копию на шину.
Да, это тоже возможный вариант. Но учитывая требуемый размер - можно сделать плату под QBus/МПИ плюс для нее - коробку с блоком питания и разъёмами под VGA/PS2 (и клаву и мышь).
Вобщем, сейчас воюю с модулем PS2 - модуль взят был от автора, но перепилен под мой подход (блин, часов 6 воевал в попытки найти забытую инвертацию сигнала - в упор не видел) плюс сейчас я делаю не только вход с PS2, но и выход - что бы можно было а) мигать светодиодами на клаве и б) мышь цеплять. На DE10, кстати, разъём один, но каналов в нём два - то есть, имея разветвитель - можно цепануть и клаву и мышь. Разветвителя нет, попробуй найти или сам спаять :)
л) плюс сейчас я делаю не только вход с PS2, но и выход - что бы можно было а) мигать светодиодами на клаве и б) мышь цеплять.
Я брал готовую реализацию от Интел/Альтерра которая есть в Квартусе, лежит в ..\20.1\ip\altera\university_program\input_output\ altera_up_avalon_ps2\hdl
Очень удобная реализация, полчаса хватит, чтобы все подключить.
Я брал готовую реализацию от Интел/Альтерра которая есть в Квартусе
В курсе
Очень удобная реализация
За исключением того, что она не на vhdl
Если сделать на последовательный порт - размер может быть любым :)
И количество устройств в системе ничем не ограниченно, кроме как последовательными портами в системе...
И количество устройств в системе ничем не ограниченно, кроме как
Скорстрельностью процессора - ибо прерывание и его обслуживание - это ОЧЕНЬ затратная операция. Недаром мультиплексоры придумали ;)
Но в случае PDP-11X всё немного лучше - он уже сейчас быстрее любого PDP-11 (ну, может J11 может с ним потягаться), но даже он в случае интенсивного обмена просаживается - я экспериментировал с портами на 115200, одновременной работой нескольких портов (копирование текстового файла в серийник) на RSX. Жаль нет реализации мултиплексоров - было бы интересно сравнить :)
Ну ещё можно добавить, что интерфейс - байтовый...
В реальности может быть ну 3 КЦГД на систему, больше в наших условиях очень врядли.
Мультиплексоры - ещё одно из направлений эмуляции на FPGA...
Словный не сильно поможет.
С PS/2 (пока) наигрался (нет, вывод не доделал, но задел есть). Заодно слегка поправил стандартную реализацию протокола обмена по шине со стороны slave устройств.
Решил пока двинуться дальше в своей хотелке - всё равно вывод в PS/2 там не особо (ну кроме включения светодиодов) там пока не особо. Как сделаю (хотелку или очередной модуль для неё) - тогда, может, вернусь к выводу :)
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot