diff --git a/.circleci/config.yml b/.circleci/config.yml index 5169ac8a..7182a0b2 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,6 +15,21 @@ jobs: timeout: 120m - store_artifacts: path: out + build_kl10: + docker: + - image: debian + environment: + EMULATOR: "pdp10-kl" + steps: + - checkout + - run: sh -ex build/dependencies.sh install_linux + - run: + name: build + command: "make check-dirs all EMULATOR=$EMULATOR" + no_output_timeout: 30m + timeout: 120m + - store_artifacts: + path: out build_klh10: docker: - image: debian diff --git a/.travis.yml b/.travis.yml index df210b87..8826e8e0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,12 +8,15 @@ env: - EMULATOR=simh BASICS=yes - EMULATOR=klh10 BASICS=yes - EMULATOR=pdp10-ka BASICS=yes + - EMULATOR=pdp10-kl BASICS=yes matrix: exclude: - os: osx env: EMULATOR=klh10 BASICS=yes - os: osx env: EMULATOR=pdp10-ka BASICS=yes + - os: osx + env: EMULATOR=pdp10-kl BASICS=yes install: sh -ex build/dependencies.sh install_${TRAVIS_OS_NAME:-linux} script: make check-dirs all deploy: diff --git a/Makefile b/Makefile index ee70ad68..1bd35bfc 100644 --- a/Makefile +++ b/Makefile @@ -43,7 +43,7 @@ MINSRC = midas system $(DDT) $(SALV) $(KSFEDR) $(DUMP) # These are not included on the tape. DOCIGNORE=-e '\.(jpeg|pdf|info|md)$$' -e '^(dcg|github)$$' # These are on the minsys tape. -BINIGNORE=-e '^(ka10|ks10|minsys)$$' +BINIGNORE=-e '^(ka10|kl10|ks10|minsys)$$' # These are on the minsrc tape. SRCIGNORE=-e '^(system|midas)$$' @@ -57,6 +57,7 @@ DSKDMP = bin/ks10/boot/dskdmp.rp06 KLH10=tools/klh10/tmp/bld-ks-its/kn10-ks-its SIMH=tools/simh/BIN/pdp10 KA10=tools/sims/BIN/pdp10-ka +KL10=tools/sims/BIN/pdp10-ka ITSTAR=tools/itstar/itstar WRITETAPE=tools/tapeutils/tapewrite MAGFRM=tools/dasm/magfrm @@ -85,15 +86,24 @@ out/simh/stamp: $(OUT)/rp0.dsk $(GT40) out/pdp10-ka/stamp: $(OUT)/rp03.2 $(OUT)/rp03.3 $(GT40) $(TV11) $(PDP6) $(TOUCH) $@ +out/pdp10-kl/stamp: $(OUT)/rp04.1 + $(TOUCH) $@ + $(OUT)/rp0.dsk: build/simh/init $(OUT)/minsys.tape $(OUT)/minsrc.tape $(OUT)/salv.tape $(OUT)/dskdmp.tape build/build.tcl $(OUT)/sources.tape build/$(EMULATOR)/stamp PATH="$(CURDIR)/tools/simh/BIN:$$PATH" expect -f build/$(EMULATOR)/build.tcl $(IP) $(GW) $(OUT)/rp03.2 $(OUT)/rp03.3: $(OUT)/ka-minsys.tape $(OUT)/minsrc.tape $(OUT)/magdmp.tap $(OUT)/sources.tape $(EXPECT) -f build/$(EMULATOR)/build.tcl $(IP) $(GW) +$(OUT)/rp04.1: $(OUT)/kl-minsys.tape $(OUT)/minsrc.tape $(OUT)/kl-magdmp.tap $(OUT)/sources.tape + $(EXPECT) -f build/$(EMULATOR)/build.tcl $(IP) $(GW) + $(OUT)/magdmp.tap: $(MAGFRM) cd bin/ka10/boot; ../../../$(MAGFRM) magdmp.bin @.ddt @.salv > ../../../$@ +$(OUT)/kl-magdmp.tap: $(MAGFRM) + cd bin/kl10/boot; ../../../$(MAGFRM) magdmp.bin @.ddt salv.bin > ../../../$@ + $(OUT)/minsrc.tape: $(ITSTAR) $(MKDIR) $(OUT) $(ITSTAR) -cf $@ -C src $(MINSRC) @@ -109,6 +119,11 @@ $(OUT)/ka-minsys.tape: $(ITSTAR) $(OUT)/system $(ITSTAR) -cf $@ -C bin/ka10 _ sys $(ITSTAR) -rf $@ -C bin/minsys sys +$(OUT)/kl-minsys.tape: $(ITSTAR) $(OUT)/system + $(MKDIR) $(OUT) + $(ITSTAR) -cf $@ -C bin/kl10 _ sys + $(ITSTAR) -rf $@ -C bin/minsys sys + $(OUT)/sources.tape: $(ITSTAR) build/$(EMULATOR)/stamp $(OUT)/syshst/$(H3TEXT) $(MKDIR) $(OUT) $(RM) -f src/*/*~ @@ -156,6 +171,9 @@ build/simh/stamp: $(SIMH) start build/pdp10-ka/stamp: $(KA10) start $(TOUCH) $@ +build/pdp10-kl/stamp: $(KL10) start + $(TOUCH) $@ + out/klh10/system: $(MKDIR) $(OUT)/system cp=0; ca=0; \ @@ -174,6 +192,10 @@ out/pdp10-ka/system: $(MKDIR) $(OUT)/system cp build/pdp10-ka/config.* $(OUT)/system +out/pdp10-kl/system: + $(MKDIR) $(OUT)/system + cp build/pdp10-kl/config.* $(OUT)/system + build/klh10/dskdmp.ini: build/klh10/dskdmp.txt Makefile cp=';'; ca=''; \ $(TEST) $(CHAOS) != no && cp='' && ca='myaddr=$(CHAOS) $(CHAFRIENDS)'; \ @@ -207,6 +229,9 @@ $(SIMH): $(KA10): $(MAKE) -C tools/sims pdp10-ka TYPE340=y +$(KL10): + $(MAKE) -C tools/sims pdp10-ka + $(ITSTAR): $(MAKE) -C tools/itstar diff --git a/build/kl10/include.tcl b/build/kl10/include.tcl index eaebbe4e..834d2b2a 100644 --- a/build/kl10/include.tcl +++ b/build/kl10/include.tcl @@ -1,9 +1,161 @@ -make_ntsddt {} { +proc start_dskdmp_its {} { + start_dskdmp build/pdp10-kl/boot + + respond "DSKDMP" "ddt\r" + respond "\n" "\033l" + respond " " "its bin\r" + respond "\n" "\033\033l" + respond " " "salv bin\r" + respond "\n" "\033y" + respond " " "its\r" + patch_its_and_go +} + +proc mark_packs {} { + respond "\n" "mark\033g" + respond "UNIT #" "0" + respond "#0?" "y" + respond "NO =" "0\r" + respond "ALLOC =" "3000\r" + respond "PACK ID =" "0\r" +} + +proc prepare_frontend {} { +} + +proc frontend_bootstrap {} { +} + +proc its_switches {} { + respond "MACHINE NAME =" "KL\r" +} + +proc make_ntsddt {} { # KL10 NTSDDT. - respond "*" ":midas dsk0:.;@ ntsddt_system;ddt\r" - respond "cpusw=" "2\r" + respond "*" ":midas dsk0:.;@ ddt_system;ddt\r" + respond "cpusw=" "0\r" respond "ndsk=" "1\r" respond "dsksw=" "3\r" - respond "1PRSW=" "1\r" + respond "1PRSW=" "0\r" expect ":KILL" } + +proc make_salv {} { + respond "*" ":midas dsk0:.;_system;salv\r" + respond "time-sharing?" "n\r" + respond "machine?" "KL\r" + expect ":KILL" +} + +proc make_dskdmp {} { + respond "*" ":midas dsk0:.;@ dskdmp_system;dskdmp\r" + expect "Configuration" + respond "?" "ASK\r" + respond "HRIFLG=" "N\r" + respond "BOOTSW=" "N\r" + respond "RP06P=" "N\r" + respond "RP07P=" "N\r" + respond "RM03P=" "N\r" + respond "RM80P=" "N\r" + respond "RH10P=" "Y\r" + respond "NUDSL=" "500.\r" + respond "KS10P=" "N\r" + respond "KL10P=" "N\r" + expect ":KILL" +} + +proc dump_switches {} { + respond "WHICH MACHINE?" "KL\r" +} + +proc peek_switches {} { + respond "with ^C" "\003" +} + +proc dump_nits {} { + # Run the new DSKDMP from disk here, to check that it works. + respond "DSKDMP" "dskdmp\r" + + respond "DSKDMP" "l\033ddt\r" + + # Dump an executable @ SALV. + respond "\n" "t\033salv bin\r" + respond "\n" "\033y" + respond " " "salv\r" + + # Now dump the new ITS. + respond "\n" "\033l" + respond " " "its bin\r" + respond "\n" "\033\033l" + respond " " "salv bin\r" + respond "\n" "\033y" + respond " " "nits\r" +} + +proc magdmp_switches {} { + respond "KL10P=" "n\r" + respond "TM10BP=" "y\r" + respond "340P=" "n\r" +} + +proc bootable_tapes {} { + global emulator_escape + global out + + respond "*" ":midas .;magdmp bin.kl_syseng;magdmp\r" + respond "PTRHRI=" "n\r" + magdmp_switches + expect ":KILL" + + respond "*" $emulator_escape + create_tape "$out/magdmp.tape" + + type ":magfrm\r" + respond "?" "KL\r" + respond "?" "Y" + respond "_" "W" + respond "FROM" ".; @ DDT\r" + respond "FILE" "@ DDT\r" + respond "_" "W" + respond "FROM" ".; @ SALV\r" + respond "FILE" "@ SALV\r" + respond "_" "W" + respond "FROM" ".; @ DSKDMP\r" + respond "FILE" "@ DSKDMP\r" + respond "_" "Q" + expect ":KILL" +} + +proc update_microcode {} { +} + +proc clib_switches {} { + ### UFA or FIX?!? Probably the latter. + respond "with ^C" "\003" +} + +proc patch_lisp {} { + respond "*" ":job lisp\r" + respond "*" ":load .; @ lisp\r" + respond "*" "33777//\031" + respond "*" "\033q\033,777777\033\033z" + respond "*" "pitele+13/" + respond "FSC" "push p,b\n" + respond "FSC" "jrst patch\r" + respond "\n" "patch/" + respond "0" "move b,echocc\n" + respond "0" "add b,ticc\n" + respond "0" "dpb b,.+3\n" + respond "0" "pop p,b\n" + respond "0" "jrst pitele+15\n" + respond "0" "331000,,a\r" + respond "\n" "\033y" + respond " " "dsk0:.;@ lisp\r" + respond "*" ":kill\r" +} + +proc translate_diagnostics {} { +} + +proc patch_clib_16 {} { +} diff --git a/build/pdp10-ka/boot b/build/pdp10-ka/boot index 9e27cf22..9ffc2aa0 100644 --- a/build/pdp10-ka/boot +++ b/build/pdp10-ka/boot @@ -1,7 +1,11 @@ set console wru=034 set cpu its set cpu 512k -set pd off +dis rpa +dis rpb +dis tua +dis fha +dis dpb at ptr bin/ka10/boot/dskdmp.rim at mta0 out/pdp10-ka/minsrc.tape at dpa0 out/pdp10-ka/rp03.2 diff --git a/build/pdp10-ka/boot2 b/build/pdp10-ka/boot2 index bfe254d8..1475a3f3 100644 --- a/build/pdp10-ka/boot2 +++ b/build/pdp10-ka/boot2 @@ -3,7 +3,11 @@ set cpu its set cpu 1024k set cpu mpx set cpu ten11 -set pd off +dis rpa +dis rpb +dis tua +dis fha +dis dpb at ptr bin/ka10/boot/dskdmp.rim at mta0 out/pdp10-ka/sources.tape set mta mpx=7 diff --git a/build/pdp10-ka/init b/build/pdp10-ka/init index f0d0fa1d..6912bedd 100644 --- a/build/pdp10-ka/init +++ b/build/pdp10-ka/init @@ -1,6 +1,11 @@ set console wru=034 set cpu its set cpu 512k +dis rpa +dis rpb +dis tua +dis fha +dis dpb at mta0 out/pdp10-ka/magdmp.tap at mta5 out/pdp10-ka/ka-minsys.tape at dpa0 out/pdp10-ka/rp03.2 diff --git a/build/pdp10-ka/run b/build/pdp10-ka/run index 37f664c2..1e1707d6 100644 --- a/build/pdp10-ka/run +++ b/build/pdp10-ka/run @@ -3,6 +3,11 @@ set cpu its set cpu 1024k set cpu idle set cpu mpx +dis rpa +dis rpb +dis tua +dis fha +dis dpb set pd enabled set pd on set dpy enabled diff --git a/build/pdp10-kl/boot b/build/pdp10-kl/boot new file mode 100644 index 00000000..7806c85c --- /dev/null +++ b/build/pdp10-kl/boot @@ -0,0 +1,8 @@ +set console wru=034 +set cpu its +set cpu 512k +set pd off +at ptr bin/kl10/boot/dskdmp.rim +at mta0 out/pdp10-kl/minsrc.tape +at rpa0 out/pdp10-kl/rp04.1 +b ptr diff --git a/build/pdp10-kl/boot2 b/build/pdp10-kl/boot2 new file mode 100644 index 00000000..71866099 --- /dev/null +++ b/build/pdp10-kl/boot2 @@ -0,0 +1,8 @@ +set console wru=034 +set cpu its +set cpu 512k +set pd off +at ptr bin/kl10/boot/dskdmp.rim +at mta0 out/pdp10-kl/sources.tape +at rpa0 out/pdp10-kl/rp04.1 +b ptr diff --git a/build/pdp10-kl/build.tcl b/build/pdp10-kl/build.tcl new file mode 100644 index 00000000..f035e4db --- /dev/null +++ b/build/pdp10-kl/build.tcl @@ -0,0 +1,60 @@ +set build [pwd]/build +set out "out/$env(EMULATOR)" +set emulator_escape "\034" + +proc start_salv {} { + uplevel #0 {spawn ./tools/sims/BIN/pdp10-ka build/pdp10-kl/init} + setup_timeout + respond "MAGDMP\r\n" "l\033ddt\r" + respond "\n" "t\033salv bin\r" +} + +proc start_dskdmp args { + quit_emulator + set ini "" + if {[llength $args] == 1} { + set ini [lindex $args 0] + } { + set ini "build/pdp10-kl/boot2" + } + set foo "spawn ./tools/sims/BIN/pdp10-ka $ini" + uplevel #0 $foo + setup_timeout +} + +proc mount_tape {file} { + respond "sim>" "at mta0 $file\r" + respond "sim>" "c\r" + expect -timeout 2 "BUGPC/" { + type "\033P" + } timeout { + ; + } +} + +proc create_tape {file} { + respond "sim>" "at mta0 $file\r" + respond "sim>" "c\r" + expect -timeout 2 "BUGPC/" { + type "\033P" + } timeout { + ; + } +} + +proc quit_emulator {} { + respond "sim>" "q\r" + expect eof +} + +proc initialize_comsat {} { + # commented out because you cannot run COMSAT initialization without network + # support + #respond "*" ":job comsat\r" + #respond "*" ":load .mail.;comsat launch\r" + #respond "*" "debug/-1\r" + #type "mfinit\033g" +} + +source build/kl10/include.tcl +source build/build.tcl diff --git a/build/pdp10-kl/init b/build/pdp10-kl/init new file mode 100644 index 00000000..f02a73a8 --- /dev/null +++ b/build/pdp10-kl/init @@ -0,0 +1,8 @@ +set console wru=034 +set cpu its +set cpu 512k +at mta0 out/pdp10-kl/kl-magdmp.tap +at mta5 out/pdp10-kl/kl-minsys.tape +set rpa rp04 +at rpa0 out/pdp10-kl/rp04.1 +b mta0 diff --git a/build/pdp10-kl/run b/build/pdp10-kl/run new file mode 100644 index 00000000..500b9e85 --- /dev/null +++ b/build/pdp10-kl/run @@ -0,0 +1,9 @@ +set console wru=034 +set cpu its +set cpu 512k +at ptr bin/kl10/boot/dskdmp.rim +set rpa rp04 +at rpa0 out/pdp10-kl/rp04.0 +at rpa1 out/pdp10-kl/rp04.1 +at rpa2 out/pdp10-kl/rp04.2 +b ptr diff --git a/build/pdp10-kl/start b/build/pdp10-kl/start new file mode 100755 index 00000000..1760196e --- /dev/null +++ b/build/pdp10-kl/start @@ -0,0 +1,43 @@ +#!/bin/sh + +TVCON=${TVCON:--2} + +EXIT=: +trap "" QUIT INT TERM + +started() { + EXIT="$EXIT;stop $1 $2" + trap "$EXIT" EXIT + echo "$1 started, pid $2" +} + +stop() { + echo -n "Stopping $1... " + kill "$2" 2> /dev/null + sleep 2 + kill -9 "$2" 2> /dev/null + echo "OK" +} + +gt40() { + (sleep 3; tools/simh/BIN/pdp11 build/pdp10-ka/gt40 >gt40.log 2>&1) & + started GT40 "$!" +} + +tv11() { + (sleep 3; tools/tv11/tv11 -p 10011 localhost >tv11.log 2>&1) & + started TV-11 "$!" +} + +tvcon() { + (sleep 4; tools/tv11/tvcon/tvcon $TVCON localhost >tvcon.log 2>&1) & + started "TV-console" "$!" +} + +while test -n "$1"; do + "$1" + shift +done + +tools/sims/BIN/pdp10-ka build/pdp10-ka/run +exit 0