From 62dc8188a3c1d0705e93f85a5e48239d9b556f13 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Sat, 8 Feb 2025 21:08:08 +0100 Subject: [PATCH 1/7] Add a "macro10" TCP procedure. And use it in the build scripts to invoke MACRO-10. --- build/build.tcl | 8 ++++++ build/kl10/processor.tcl | 6 +---- build/misc.tcl | 55 ++++++++-------------------------------- 3 files changed, 19 insertions(+), 50 deletions(-) diff --git a/build/build.tcl b/build/build.tcl index c0702c7b1..20f7555ef 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -173,6 +173,14 @@ proc arpanet {rfc file} { } } +proc macro10 {target sources} { + respond "*" ":macro\r" + respond "*" "$target=$sources\r" + expect "CORE USED" + respond "*" "\003" + respond "*" ":kill\r" +} + set ip [ip_address [lindex $argv 0]] set gw [ip_address [lindex $argv 1]] diff --git a/build/kl10/processor.tcl b/build/kl10/processor.tcl index f0a04e368..9586b68be 100644 --- a/build/kl10/processor.tcl +++ b/build/kl10/processor.tcl @@ -46,11 +46,7 @@ copy_to_klfe "ucode;u1 ram" # KLDDT respond "*" ":cwd kldcp\r" -respond "*" ":macro\r" -respond "*" "klddt=klddt\r" -expect "CORE USED" -respond "*" "\003" -respond "*" ":kill\r" +macro10 "klddt" "klddt" respond "*" ":dec sys:link\r" respond "*" "klddt/go\r" respond "EXIT" ":start 45\r" diff --git a/build/misc.tcl b/build/misc.tcl index 445494c80..23a88c265 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -631,11 +631,7 @@ respond "*" ":pdump sys2; ts macro\r" respond "*" ":kill\r" respond "*" ":delete decsys; macro shr\r" # Assemble with itself, now no errors -respond "*" ":macro\r" -respond "*" "macro=macro\r" -expect "CORE USED" -respond "*" "\003" -respond "*" ":kill\r" +macro10 "macro" "macro" respond "*" ":dec sys:link\r" respond "*" "macro/go\r" expect "%LNKNED" @@ -647,35 +643,15 @@ respond "*" ":kill\r" # MACSYM and MONSYM universal files. respond "*" ":cwd decsys\r" -respond "*" ":macro\r" -respond "*" "macsym.unv=macsym.mac\r" -expect "CORE USED" -respond "*" "\003" -respond "*" ":kill\r" -respond "*" ":macro\r" -respond "*" "monsym.unv=monsym.mac\r" -expect "CORE USED" -respond "*" "\003" -respond "*" ":kill\r" +macro10 "macsym.unv" "macsym.mac" +macro10 "monsym.unv" "monsym.mac" # MACTEN and UUOSYM universal files. -respond "*" ":macro\r" -respond "*" "macten.unv=macten.mac\r" -expect "CORE USED" -respond "*" "\003" -respond "*" ":kill\r" -respond "*" ":macro\r" -respond "*" "uuosym.unv=uuosym.mac\r" -expect "CORE USED" -respond "*" "\003" -respond "*" ":kill\r" +macro10 "macten.unv" "macten.mac" +macro10 "uuosym.unv" "uuosym.mac" # CROSS, assembler -respond "*" ":macro\r" -respond "*" "cross=cross\r" -expect "CORE USED" -respond "*" "\003" -respond "*" ":kill\r" +macro10 "cross" "cross" respond "*" ":dec sys:loader\r" respond "*" "cross/g\r" respond "*" ":start 45\r" @@ -1648,19 +1624,12 @@ expect ":KILL" # ITS universal file. respond "*" ":cwd decsys\r" -respond "*" ":macro\r" -respond "*" "sits.unv=sits.mac\r" -expect "CORE USED" -respond "*" "\003" -respond "*" ":kill\r" +macro10 "sits.unv" "sits.mac" # Datacomputer file transfer. respond "*" ":cwd mrc\r" -respond "*" ":macro\r" -respond "*" "dftp=dftp\r" -expect "CORE USED" -respond "*" "\003" -respond "*" ":kill\r" +macro10 "dftp" "dftp" + respond "*" ":dec sys:link\r" respond "*" "dftp/go\r" expect "EXIT" @@ -1751,11 +1720,7 @@ expect ":KILL" # BBN Logo respond "*" ":cwd bbn\r" -respond "*" ":macro\r" -respond "*" "logo=logo\r" -expect "CORE USED" -respond "*" "\003" -respond "*" ":kill\r" +macro10 "logo" "logo" respond "*" ":dec sys:loader\r" respond "*" "logo/g\r" respond "EXIT" ":start 45\r" From 575dca007619b7ede50ef55f192f5a7f9442e206 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Sat, 8 Feb 2025 18:09:44 +0100 Subject: [PATCH 2/7] MACN11 - PDP-11 cross assembler. --- build/misc.tcl | 11 ++ build/timestamps.txt | 3 + doc/info/macn11.doc | 358 ++++++++++++++++++++++++++++++++++++++++++ doc/programs.md | 1 + src/decsys/macn11.hdr | Bin 0 -> 631 bytes src/decsys/macn11.mac | Bin 0 -> 261018 bytes 6 files changed, 373 insertions(+) create mode 100644 doc/info/macn11.doc create mode 100644 src/decsys/macn11.hdr create mode 100644 src/decsys/macn11.mac diff --git a/build/misc.tcl b/build/misc.tcl index 23a88c265..8f30bdf5a 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -667,6 +667,17 @@ expect ":KILL" respond "*" ":cwd budd\r" respond "*" ":palx live palx\r" +# MACN11, pdp-11 cross assembler +respond "*" ":cwd decsys\r" +macro10 "macn11" "macn11.hdr,macn11.mac" +respond "*" ":dec sys:loader\r" +respond "*" "macn11/g\r" +expect "EXIT" +respond "*" ":start 45\r" +respond "Command:" "d" +respond "*" ":pdump sys3; ts macn11\r" +respond "*" ":kill\r" + # Cookie Bear respond "*" ":midas gls; ts check_gls; check\r" respond "DEBUGP==" "0\r" diff --git a/build/timestamps.txt b/build/timestamps.txt index 0a62fce41..316565dba 100644 --- a/build/timestamps.txt +++ b/build/timestamps.txt @@ -283,6 +283,8 @@ decsys/lnklod.shr 197811110602.40 decsys/lnkscn.shr 197811110609.48 decsys/lnkxit.shr 197811110601.58 decsys/loader.shr 197603142216.18 +decsys/macn11.hdr 197411160000.00 +decsys/macn11.mac 197501140000.00 decsys/macro.shr 197603142216.26 decsys/macten.mac 197501040000.00 decsys/sits.mac 197609010303.16 @@ -887,6 +889,7 @@ info/lispt.22 197803112120.26 _info_/lisp.trace 197501181143.25 _info_/lisp.whovar 198102200255.12 _info_/lmodem.help 198106051040.17 +info/macn11.doc 197411060000.00 info/macsym.12 198303130147.18 info/mail.12 198201140231.54 info/meter.1 197707100346.21 diff --git a/doc/info/macn11.doc b/doc/info/macn11.doc new file mode 100644 index 000000000..507866caa --- /dev/null +++ b/doc/info/macn11.doc @@ -0,0 +1,358 @@ + + + + + + MACN11 is a PDP-11 MACRO language assembler which operates + on the PDP-10. This document describes version 3 of MACN11; with + the exception of differences listed in the following pages, it is + compatible with the language accepted by MACRO-11 under DOS + Version 9, as described in DEC's DOS/BATCH assembler manual + (order no. DEC-11-LASMA-A-D). + + Bug reports, comments, and suggestions concerning either + version of MACN11 are welcome via net mail to Raveling@ISIB. + + Notes on MACN11 Version 3 Page 2 + + + + -------- Language Variations from MACRO-11 --------- + + + + << Features not yet supported >> + + + .PSECT -- Not recognized at present. + .DSABL REG -- Parsed properly but ignored; + Register definitions are always enabled + at present. + + + Both of these features will be supported in version 4. + + + + + + << Differences in defaults >> + + + Default modes for the .LIST/.NLIST and .ENABL/.DSABL + directives can be changed by assembly parameters in MACN11. + In the configuration maintained by ISI these defaults match + MACRO-11's except for the following: + + .NLIST TTM ; [format listings for lpt output] + .ENABL LC ; [don't fold lower case] + + + + + Notes on MACN11 Version 3 Page 3 + + + + << Language extensions >> + + + .ASCII & .ASCIZ + + MACN11 allows multiple expressions, rather than just one, + within brackets. Expressions are delimited by commas. + E.g., "" can be written as "". + + + .ENABL & .DSABL + + These verbs recognize two nonstandard operands: + + NSF (Nonstandard features): Enabled by default. + Enabling NSF allows use of MACN11's extended features. + Disabling limits the acceptable source language to + being strictly compatible with MACRO-11. + + ISD (Internal Symbol Definitions): Disabled by default + Enabling ISD includes definitions of internal symbols, + as well as global symbols, in the object module output. + These definitions allow generation of a symbol table + for debuggers such as DDT-11. + + HOV (Hexadecimal override): Disabled by default. If the + current radix is 16 and HOV is enabled, then terms of + expressions which begin with A-F are assumed to be hex + numbers, rather than symbols. E.g., + + .ENABL HOV ; Enabling hex override causes + MOV A,R0 ; this instruction to load 10. into + ; R0, rather than the address of a + ; word labelled A. + + + .ENDM + + Interior macro definitions within a nest can be terminated + by a .ENDM whose operand is the name of an exterior + definition. + + + Hexadecimal numbers + + Hex numbers, using the digits 0-9 and A-F, may be used via + extensions of the existing radix control functions. .RADIX + accepts 16 as a valid operand to set the current default + radix, and temporary radix control includes "H" in addition + to the standard "D", "O", and "B". + + When using hexadecimal as the default radix it is normally + necessary to prefix numbers beginning with A-F by a 0; + + Notes on MACN11 Version 3 Page 4 + + + + otherwise they would be parsed as symbols. Use of .ENABL + HOV eliminates this need at the cost of making symbols + beginning with A-F inaccessible. + + + Logical shift operator ("_") + + An additional binary operator is recognized in expression + evaluation. "a_b" is evaluated as "the value of a shifted + left b bits". If b is negative, the term is shifted right. + Both a and b may be any valid term, including a bracketed + expression. + + A common use for this operator is in defining symbolic + values for bit masks. For example, "INTENA = 1_6" defines + an interrupt enable mask as a 1 in bit 6. + + + .PDP10 + + The ".PDP10" directive is recognized, but is ignored. This + is for the sake of assembling Bliss-11 compiler output. + + + + Predefined symbols + + Symbols can be predefined by assembling their symbol table + entries into MACN11. At present register names (R0-R7, SP, + and PC) and ".MACN." are defined in this way. .MACN. is + equated to the assembler's version number. + + + Radix 50 terms in expressions: ^R + + "^R" is recognized as a unary operator in expressions, + indicating that the next three characters are to be + converted to radix 50 format for use as a 16-bit value. Any + character without a radix 50 equivalent is treated as a + delimiter, and is taken as equivalent to trailing blanks in + evaluating the term. + + + .SBHED + + A new directive, .SBHED, specifies a subheading; it + functions as a conditional .PAGE followed by a .SBTTL. It + skips to a new page unless the most recent listing output + was a page skip, then outputs a standard page heading. + .SBHED's operand field is included in the table of contents + and in all page subheadings until another .SBHED or a .SBTTL + is issued. The .SBHED directive itself is the first line + listed below the new page heading. + + Notes on MACN11 Version 3 Page 5 + + + + ---------------- Operating Procedures ----------------- + + + + Operating procedures for MACN11 version 3 are nearly + identical to MACRO-11's. The only differences are the following: + + "=" and "_" are accepted as synonyms for "<". + The /PA switch is accepted but is ignored. + An additional switch, /FO, is available to specify + the PDP-10 file format for object output. + Cross references are pretty disgusting. + + Details of these differences are included in the description + below. + + + + + MACN11 assembles one or more source files, normally + producing two files: a relocatable object module and an assembly + listing. Command string syntax is similar to MACRO-11's. + + Object files normally are generated in packed format, with + each PDP-11 word right-adjusted in a PDP-10 halfword. This + format is standard for other utilities which may deal with these + files (LNKX11, LINK11, FILEX, etc.). + + + Command Input String + + + When MACN11 is ready for a command it lists its name and + version number on the user's terminal, then outputs a "*" on a + new line. In return it expects the following sort of string: + + + object,listing Generate CCL support + + CMUSW 0 1 => Handle CMU PPNs + in file names + + STANSW 0 1 => Handle Stanford PPNs + + PAGSIZ D54 Number of lines per page + on listing output + + ENDEF LCFLG+PNCFLG+REGFLG Default .ENABL modes; bit names + are "xxxFLG", where "xxx" is an + operand of .ENABL/.DSABL. + + LDEF 777777-LLD-LME-LMEB-LTTM Default .LIST modes; bit names + are "Lxxx", where "xxx" is an + operand of .LIST/.NLIST. + + + + Additional symbols can be predefined by assembling their + definitions into the prototype symbol table which begins at + location PERMST, near the end of the assembly. This table is + kept in ascending order by the .RAD50 (mod 40) value of the + symbol, which is equivalent to alphabetic order except for "." + and "$". Entry format is . . . + + XWD ; type-flags,value + GENM40 N,A,M,E ; 1-6 characters + + Type flags may be . . . + + DEFSYM -- Symbol is defined + REGSYM -- Symbol identifies a register + GLBSYM -- Symbol is global (external if DEFSYM not set) + + Notes on MACN11 Version 3 Page 8 + + + + --------- Internal Symbol Definitions ---------- + + + + When ISD is enabled, internal symbol definition entries + When .ENABL ISD is in effect, internal symbol definition entries + are included in the generated object module's global symbol + dictionary. These are type 2 GSD entries, which are identified + in appendix B (B.1.3) of the DOS/Batch Linker manual. Their + format is: + + + --------------------------------- + ! Symbol ! + ! Name ! + --------------------------------- + ! 2 ! Flags ! + --------------------------------- + ! Value ! + --------------------------------- + + + The symbol name is two words in .RAD50 format. + + The flag byte currently has only one bit defined: Bit 0 is set if + the symbol is a register name. All undefined bits are set to 0. + + The value is identical to that field in global symbol name (type + 4) entries: It is the symbol's offset from the start of the csect + identified by the most recent type 1 (csect name) entry. ISD + values are absolute if they follow the absolute csect's type 1 + entry.î \ No newline at end of file diff --git a/doc/programs.md b/doc/programs.md index b05e8d2e2..885782bb3 100644 --- a/doc/programs.md +++ b/doc/programs.md @@ -210,6 +210,7 @@ - LUSER, request help from registered list of logged-in users. - MBXLOC, lock a mailbox. - MACDMP, standalone program loader/dumper for DECtape. +- MACN11, PDP-11 cross assembler. - MACN80, Z80 cross assembler. - MACRO-10, DEC assembler. - MACSYMA, symbolic manipulation system. diff --git a/src/decsys/macn11.hdr b/src/decsys/macn11.hdr new file mode 100644 index 0000000000000000000000000000000000000000..aa092f612648706dd51828665a444d0b8ec17531 GIT binary patch literal 631 vcmd-K4srAg4!5;6RX^s)PUl%4P}v literal 0 HcmV?d00001 diff --git a/src/decsys/macn11.mac b/src/decsys/macn11.mac new file mode 100644 index 0000000000000000000000000000000000000000..d9bbb0972a98f153e5da7c9317648d4a0cdf98e8 GIT binary patch literal 261018 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 z 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 G2L6A`wH3Jl literal 0 HcmV?d00001 From b2bdaedbc383c82a9ae087bc0b0af26b78ae02da Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Sat, 8 Feb 2025 18:35:59 +0100 Subject: [PATCH 3/7] Put PALX 143 binary in 11LOGO. It's only needed for 11LOGO, so we don't need the PLX143 eyesore available to everyone. --- build/misc.tcl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/misc.tcl b/build/misc.tcl index 8f30bdf5a..956056a73 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -660,7 +660,7 @@ respond "*" ":pdump sys1; ts cross\r" respond "*" ":kill\r" # Old PALX -respond "*" ":midas sys3;ts plx143_rms;palx 143\r" +respond "*" ":midas 11logo;ts palx_rms;palx 143\r" expect ":KILL" # Phil Budne's PALX Game of Life. @@ -1789,7 +1789,7 @@ expect ":KILL" # 11LOGO respond "*" ":cwd 11logo\r" -respond "*" ":plx143 /H/M/CL BIN,N CREF_SYSTEM,TYI,READ,EVAL,TURTLE,ZEND\r" +respond "*" ":palx /H/M/CL BIN,N CREF_SYSTEM,TYI,READ,EVAL,TURTLE,ZEND\r" respond "ASSSW=" "0\r" expect ":KILL" From d1d671e1a9064717b9d00b15a0894d7abd1ef30f Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Sat, 8 Feb 2025 21:07:19 +0100 Subject: [PATCH 4/7] Add a "cwd" TCL procedure. And use it in the build scripts. --- build/build.tcl | 4 +++ build/emacs.tcl | 2 +- build/haunt.tcl | 2 +- build/ka10/processor.tcl | 4 +-- build/kl10/processor.tcl | 4 +-- build/ks10/processor.tcl | 2 +- build/lisp.tcl | 4 +-- build/misc.tcl | 62 ++++++++++++++++++++-------------------- build/muddle.tcl | 2 +- build/sail.tcl | 8 +++--- build/shrdlu.tcl | 2 +- build/typeset.tcl | 2 +- 12 files changed, 51 insertions(+), 47 deletions(-) diff --git a/build/build.tcl b/build/build.tcl index 20f7555ef..9685a46c6 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -181,6 +181,10 @@ proc macro10 {target sources} { respond "*" ":kill\r" } +proc cwd {directory} { + respond "*" ":cwd $directory\r" +} + set ip [ip_address [lindex $argv 0]] set gw [ip_address [lindex $argv 1]] diff --git a/build/emacs.tcl b/build/emacs.tcl index 5dbff6f1a..e72ffb700 100644 --- a/build/emacs.tcl +++ b/build/emacs.tcl @@ -148,7 +148,7 @@ respond "\n" "\033x& compress file\033turnip; view >\r" respond "Compressing file" "\030\003" respond "*" ":kill\r" respond "*" ":tctyp aaa\r" -respond "*" ":cwd kmp\r" +cwd "kmp" respond "*" "kmp\033\023" respond "*" ":dumpt \033turnip;view\r" expect "Dumped to" diff --git a/build/haunt.tcl b/build/haunt.tcl index c28d92ea7..8b80bc80b 100644 --- a/build/haunt.tcl +++ b/build/haunt.tcl @@ -1,6 +1,6 @@ log_progress "ENTERING BUILD SCRIPT: HAUNT" -respond "*" ":cwd haunt\r" +cwd "haunt" # build ops4 respond "*" "complr\013" diff --git a/build/ka10/processor.tcl b/build/ka10/processor.tcl index d6b1553aa..6787ff823 100644 --- a/build/ka10/processor.tcl +++ b/build/ka10/processor.tcl @@ -58,7 +58,7 @@ respond "*" ":palx cons;_lmcons;ccons\r" expect ":KILL" # Old Spacewar -respond "*" ":cwd spcwar\r" +cwd "spcwar" respond "*" ":midas;324 spcwar; war\r" expect ":KILL" respond "*" ":midas spcwar; stars\r" @@ -267,7 +267,7 @@ respond "*" ":midas ptp:_maint;hhtest\r" expect ":KILL" # NTS TECO-6 -respond "*" ":cwd .teco.\r" +cwd ".teco." respond "*" ":midas;73\r" expect "MIDAS" respond "\n" "TECODM REL_TECO DUMMY\r" diff --git a/build/kl10/processor.tcl b/build/kl10/processor.tcl index 9586b68be..04bff984f 100644 --- a/build/kl10/processor.tcl +++ b/build/kl10/processor.tcl @@ -45,7 +45,7 @@ expect ":KILL" copy_to_klfe "ucode;u1 ram" # KLDDT -respond "*" ":cwd kldcp\r" +cwd "kldcp" macro10 "klddt" "klddt" respond "*" ":dec sys:link\r" respond "*" "klddt/go\r" @@ -143,7 +143,7 @@ respond "*" ":midas;324 sys3;ts 11boot_syseng;11boot\r" expect ":KILL" # Note, must be run with symbols loaded. # Takes IOELEV BIN and KLRUG BIN from the current directory. -respond "*" ":cwd sysbin\r" +cwd "sysbin" respond "*" "11boot\033\013" expect ":KILL" respond "*" ":move sysbin;@ boot11, .;\r" diff --git a/build/ks10/processor.tcl b/build/ks10/processor.tcl index 971b8145b..07a293e1b 100644 --- a/build/ks10/processor.tcl +++ b/build/ks10/processor.tcl @@ -3,7 +3,7 @@ log_progress "ENTERING BUILD SCRIPT: PROCESSOR" # Programs particular to the KS10 processor. # KNS10, KS10 console -respond "*" ":cwd kshack\r" +cwd "kshack" respond "*" ":cross\r" respond "*" "FOR21.DAT/PTP,KNS10.PNT/M80/OCT/CRF/EQ:PASS2:SCECOD=CONDEF.M80,HCORE.M80,CMDS.M80,SUBRTN.M80,DR.M80,MSG.M80,STORE.M80\r" expect "Core used" diff --git a/build/lisp.tcl b/build/lisp.tcl index 8a7edf6aa..8b02622f0 100644 --- a/build/lisp.tcl +++ b/build/lisp.tcl @@ -787,7 +787,7 @@ respond "UKBD" "(quit)" expect ":KILL" # Lisp Logo -respond "*" ":cwd llogo\r" +cwd "llogo" respond "*" ":complr\r" respond "_" "germ\r" respond "_" "ioc\r" @@ -835,7 +835,7 @@ respond "_" "\032" type ":kill\r" # 2500 microcode -respond "*" ":cwd minsky\r" +cwd "minsky" respond "*" "lisp\013" respond "Alloc?" "n\r" respond "*" "(setq gc-overflow '(lambda (x) t))" diff --git a/build/misc.tcl b/build/misc.tcl index 956056a73..610478dcb 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -466,7 +466,7 @@ respond "*" ":midas sys3; ts mmodem_gz; mmodem\r" expect ":KILL" # Compile ADVENT and dump it out with DECUUO. -respond "*" ":cwd games\r" +cwd "games" respond "*" ":dec sys:f40\r" respond "*" "advent=advent\r" expect "CORE USED" @@ -482,7 +482,7 @@ respond "*" ":pdump sys3; ts advent\r" respond "*" ":kill\r" # 350-point ADVENT -respond "*" ":cwd games\r" +cwd "games" respond "*" ":dec sys:f40\r" respond "*" "adv3sr=adv3sr\r" respond "*" "adv3sb=adv3sb\r" @@ -502,7 +502,7 @@ respond "*" ":pdump games; ts adv350\r" respond "*" ":kill\r" # 448-point ADVENT -respond "*" ":cwd games\r" +cwd "games" respond "*" ":dec sys:f40\r" respond "*" "adv4ma=adv4ma\r" respond "*" "adv4su=adv4su\r" @@ -522,7 +522,7 @@ respond "*" ":pdump games; ts adv448\r" respond "*" ":kill\r" # TREK -respond "*" ":cwd games\r" +cwd "games" respond "*" ":dec sys:f40\r" respond "*" "trek=trek\r" expect "CORE USED" @@ -574,7 +574,7 @@ respond "*" ":midas sys1;ts wumpus_games; wumpus\r" expect ":KILL" # Jotto -respond "*" ":cwd games\r" +cwd "games" respond "*" ":midas jotto\r" expect ":KILL" respond "*" ":job jotto\r" @@ -614,7 +614,7 @@ expect ":KILL" respond "*" ":link sys1;ts %,sys1;ts who%\r" # MACRO-10 -respond "*" ":cwd decsys\r" +cwd "decsys" respond "*" ":dec sys:macro\r" respond "*" "macro=macro\r" expect "CORE USED" @@ -642,7 +642,7 @@ respond "*" ":pdump sys2; ts macro\r" respond "*" ":kill\r" # MACSYM and MONSYM universal files. -respond "*" ":cwd decsys\r" +cwd "decsys" macro10 "macsym.unv" "macsym.mac" macro10 "monsym.unv" "monsym.mac" @@ -664,11 +664,11 @@ respond "*" ":midas 11logo;ts palx_rms;palx 143\r" expect ":KILL" # Phil Budne's PALX Game of Life. -respond "*" ":cwd budd\r" +cwd "budd" respond "*" ":palx live palx\r" # MACN11, pdp-11 cross assembler -respond "*" ":cwd decsys\r" +cwd "decsys" macro10 "macn11" "macn11.hdr,macn11.mac" respond "*" ":dec sys:loader\r" respond "*" "macn11/g\r" @@ -984,7 +984,7 @@ respond "*" ":midas kcc;ts 20xcsv_20xcsv\r" expect ":KILL" # Run GETSYM to get all monitor symbols. -respond "*" ":cwd kcc\r" +cwd "kcc" respond "*" ":getsym\r" expect ":KILL" @@ -1356,7 +1356,7 @@ respond "*" ":pdump c; ts cc\r" respond "*" ":kill\r" # CLIB -respond "*" ":cwd clib\r" +cwd "clib" respond "*" ":midas c10cor cmid\r" respond "*" ":midas c10fo cmid\r" respond "*" ":midas c10int cmid\r" @@ -1401,7 +1401,7 @@ expect ":KILL" respond "*" ":delete c; \[crel\] 16\r" # CC -respond "*" ":cwd c\r" +cwd "c" respond "*" ":copy ts cc, ts occ\r" respond "*" ":cc cc.>\r" expect ":KILL" @@ -1472,7 +1472,7 @@ expect "Done." patch_clib_16 # C library for drawing on a TV display. -respond "*" ":cwd clib\r" +cwd "clib" respond "*" ":cc tv.>\r" expect ":KILL" @@ -1491,7 +1491,7 @@ respond "*" ":midas sys2; ts otj6_tj6; otj6\r" expect ":KILL" # Alan Snyder's R typesetting language. -respond "*" ":cwd r\r" +cwd "r" respond "*" ":cc rcntrl rdev rexpr rfile rfonts richar ridn rin rin1 rin2\r" respond "*" ":cc rits rline rlpt rmain rmisc rout rreadr rreg rreq1 rreq2\r" respond "*" ":cc rreq3 rtext rtoken rtrap rvaria rxgp\r" @@ -1534,7 +1534,7 @@ proc build_c_program {input output {libs {}}} { } # OINIT -respond "*" ":cwd c\r" +cwd "c" build_c_program "sysen2/oinit" "sys3/ts.oinit" # RALP @@ -1596,7 +1596,7 @@ respond "*" ":midas sys1; ts gtload_syseng; gtload\r" expect ":KILL" # RUG, PDP-11 debugger. -respond "*" ":cwd pdp11\r" +cwd "pdp11" respond "*" ":palx rug\r" respond "?" "2\r" respond "?" "100000\r" @@ -1615,13 +1615,13 @@ respond "*" ":palx gt40;_gt40;gtlem\r" expect ":KILL" # MINITS -respond "*" ":cwd mits.s\r" +cwd "mits.s" respond "*" ":palx test_config\r" respond ":::" "777\r" expect ":KILL" # MINITS boot ROM for an Interlan network interface. -respond "*" ":cwd mits.b\r" +cwd "mits.b" respond "*" ":palx bootil\r" respond "Interlan CSR?" "0\r" respond "Chaos address of Interlan board?" "0\r" @@ -1634,11 +1634,11 @@ respond "Start of temporary data storage?" "150000\r" expect ":KILL" # ITS universal file. -respond "*" ":cwd decsys\r" +cwd "decsys" macro10 "sits.unv" "sits.mac" # Datacomputer file transfer. -respond "*" ":cwd mrc\r" +cwd "mrc" macro10 "dftp" "dftp" respond "*" ":dec sys:link\r" @@ -1673,7 +1673,7 @@ respond "*" ":link sys1; ts mloder, rug; loder bin\r" type ":vk\r" # SITS. -respond "*" ":cwd sits\r" +cwd "sits" respond "*" ":palx sits\r" expect ":KILL" @@ -1702,12 +1702,12 @@ respond "*" ":palx dired\r" expect ":KILL" # TECO for SITS. -respond "*" ":cwd rjl\r" +cwd "rjl" respond "*" ":palx teco\r" expect ":KILL" # SLOGO, 11LOGO for SITS. -respond "*" ":cwd nlogo\r" +cwd "nlogo" respond "*" ":palx slogo_@slogo\r" expect ":KILL" @@ -1716,12 +1716,12 @@ respond "*" ":palx hlogo_@hlogo\r" expect ":KILL" # ITSCOM, ITS-SITS communication. -respond "*" ":cwd bee\r" +cwd "bee" respond "*" ":palx itscom\r" expect ":KILL" # ITS, SITS file transfer. -respond "*" ":cwd gld\r" +cwd "gld" respond "*" ":palx its\r" expect ":KILL" @@ -1730,7 +1730,7 @@ respond "*" ":midas;324 radia;_tortis\r" expect ":KILL" # BBN Logo -respond "*" ":cwd bbn\r" +cwd "bbn" macro10 "logo" "logo" respond "*" ":dec sys:loader\r" respond "*" "logo/g\r" @@ -1751,7 +1751,7 @@ respond "DFLAG=" "1\r" expect ":KILL" # NVMIDS, Nova assembler -respond "*" ":cwd nova\r" +cwd "nova" respond "*" ":midas;73\r" expect "MIDAS" respond "\n" "TS NVMIDS_NVMIDS >\r" @@ -1788,13 +1788,13 @@ respond "\n" "TIME MACHIN\r" expect ":KILL" # 11LOGO -respond "*" ":cwd 11logo\r" +cwd "11logo" respond "*" ":palx /H/M/CL BIN,N CREF_SYSTEM,TYI,READ,EVAL,TURTLE,ZEND\r" respond "ASSSW=" "0\r" expect ":KILL" # Apple II Logo -respond "*" ":cwd aplogo\r" +cwd "aplogo" respond "*" ":cross\r" respond "*" "logo/ptp,logo=logo\r" expect "Core used" @@ -1802,7 +1802,7 @@ respond "*" "\003" respond "*" ":kill\r" # Atari 800 terminal emulator Chameleon by Jack Palevich. -respond "*" ":cwd atlogo\r" +cwd "atlogo" respond "*" ":cross\r" respond "*" "supdup,supdup=supdup/m65\r" expect "Core used" @@ -1855,7 +1855,7 @@ respond "*" ":midas mudsys;ts stink_sysen2;stink 121t\r" expect ":KILL" # Move hello world xfiles into an archive. -respond "*" ":cwd hello\r" +cwd "hello" respond "*" ":move dsk:c xfile, ar:\r" respond "*" ":move dsk:clu xfile, ar:\r" respond "*" ":move dsk:clu xxfile, ar:\r" diff --git a/build/muddle.tcl b/build/muddle.tcl index 591282f7e..e4482ec6e 100644 --- a/build/muddle.tcl +++ b/build/muddle.tcl @@ -3,7 +3,7 @@ log_progress "ENTERING BUILD SCRIPT: MUDDLE" mkdir "mudsav" proc build_muddle {dir version} { - respond "*" ":cwd $dir\r" + cwd "$dir" respond "*" ":xfile mud$version assem\r" expect -timeout 300 "Assembly done!" diff --git a/build/sail.tcl b/build/sail.tcl index 5866c07d9..990a22362 100644 --- a/build/sail.tcl +++ b/build/sail.tcl @@ -1,7 +1,7 @@ log_progress "ENTERING BUILD SCRIPT: SAIL" # stktrn -respond "*" ":cwd sail\r" +cwd "sail" respond "*" ":fail stktrn\r" # jobdat @@ -39,7 +39,7 @@ respond "*" ":link sys1; ts pc, datdrw; pc bin\r" respond "*" ":link sys1; ts scnv, datdrw; scnv bin\r" # The drawing program needs WL; BOARDS REL -respond "*" ":cwd wl\r" +cwd "wl" respond "*" ":fail boards\r" respond ";^C" ";\003" @@ -50,7 +50,7 @@ respond "SELECTED" ";\003" respond "*" "\032:kill\r" # SUDS drawing program -respond "*" ":cwd draw\r" +cwd "draw" respond "*" ":fail d\r" respond ";^C" ";\003" respond "*" "\032:kill\r" @@ -94,7 +94,7 @@ respond "\n" ":pdump datdrw; lay bin\r" respond "*" ":kill\r" # SUDS wirelist program. -respond "*" ":cwd wl\r" +cwd "wl" respond "*" ":fail wl\r" respond "*" "wboard\r" respond "*" "\032:kill\r" diff --git a/build/shrdlu.tcl b/build/shrdlu.tcl index e0ef4f470..b204225c6 100644 --- a/build/shrdlu.tcl +++ b/build/shrdlu.tcl @@ -1,6 +1,6 @@ log_progress "ENTERING BUILD SCRIPT: SHRDLU" -respond "*" ":cwd shrdlu\r" +cwd "shrdlu" # first, compile all the sources that should be compiled diff --git a/build/typeset.tcl b/build/typeset.tcl index e1b601dc5..1fec1c2fb 100644 --- a/build/typeset.tcl +++ b/build/typeset.tcl @@ -16,5 +16,5 @@ respond "_" "lmdoc;paper_lmdoc;paper\r" expect ":KILL" # R manual. -respond "*" ":cwd r\r" +cwd "r" respond "*" ":r rman.r\r" From 93f234df0cdcb2020af895cd28810ba41c173d14 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Sat, 8 Feb 2025 21:55:54 +0100 Subject: [PATCH 5/7] Add "loader", "linker", and "decuuo" TCL procedures. --- build/build.tcl | 25 ++++++++++ build/kl10/processor.tcl | 9 +--- build/misc.tcl | 102 ++++++++++----------------------------- 3 files changed, 53 insertions(+), 83 deletions(-) diff --git a/build/build.tcl b/build/build.tcl index 9685a46c6..8c5061eba 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -181,6 +181,31 @@ proc macro10 {target sources} { respond "*" ":kill\r" } +proc loader {files} { + respond "*" ":dec sys:loader\r" + respond "*" "$files/g\r" + expect "EXIT" +} + +proc linker {files} { + respond "*" ":dec sys:link\r" + respond "*" "$files/go\r" + expect "EXIT" { + return + } "%LNKNED" { + # Sometimes there is this error; workaround is to retry. + respond "*" "$files/go\r" + expect "EXIT" + } +} + +proc decuuo {file {dump ":pdump"}} { + respond "*" ":start 45\r" + respond "Command:" "d" + respond "*" "$dump $file\r" + respond "*" ":kill\r" +} + proc cwd {directory} { respond "*" ":cwd $directory\r" } diff --git a/build/kl10/processor.tcl b/build/kl10/processor.tcl index 04bff984f..0be841685 100644 --- a/build/kl10/processor.tcl +++ b/build/kl10/processor.tcl @@ -47,13 +47,8 @@ copy_to_klfe "ucode;u1 ram" # KLDDT cwd "kldcp" macro10 "klddt" "klddt" -respond "*" ":dec sys:link\r" -respond "*" "klddt/go\r" -respond "EXIT" ":start 45\r" -respond "Command:" "d" -respond "*" "\033y" -respond " " "kldcp; klddt bin\r" -respond "*" ":kill\r" +linker "klddt" +decuuo "kldcp; klddt bin" "\033y" respond "*" ":mcnvrt kldcp; klddt bin\r" expect ":KILL" move_to_klfe "kldcp; klddt a10" diff --git a/build/misc.tcl b/build/misc.tcl index 610478dcb..eb39d1410 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -472,14 +472,11 @@ respond "*" "advent=advent\r" expect "CORE USED" respond "*" "\032" type ":kill\r" -respond "*" ":dec sys:loader\r" -respond "*" "advent/g\r" -respond "EXIT" ":start\r" +loader "advent" +respond "*" ":start\r" respond "*" "\032" -type ":start 45\r" -respond "Command:" "d" -respond "*" ":pdump sys3; ts advent\r" -respond "*" ":kill\r" +type ":vk\r" +decuuo "sys3; ts advent" # 350-point ADVENT cwd "games" @@ -489,17 +486,12 @@ respond "*" "adv3sb=adv3sb\r" expect "CORE USED" respond "*" "\032" type ":kill\r" -respond "*" ":dec sys:loader\r" -respond "*" "adv3sb\r" -respond "*" "adv3sr\r" -respond "*" "/g\r" -respond "EXIT" ":start\r" +loader "adv3sb,adv3sr" +respond "*" ":start\r" respond "*" "adv3db.1" respond "*" "\032" -type ":start 45\r" -respond "Command:" "d" -respond "*" ":pdump games; ts adv350\r" -respond "*" ":kill\r" +type ":vk\r" +decuuo "games; ts adv350" # 448-point ADVENT cwd "games" @@ -509,17 +501,12 @@ respond "*" "adv4su=adv4su\r" expect "CORE USED" respond "*" "\032" type ":kill\r" -respond "*" ":dec sys:loader\r" -respond "*" "adv4ma\r" -respond "*" "adv4su\r" -respond "*" "/g\r" -respond "EXIT" ":start\r" +loader "adv4ma,adv4su" +respond "*" ":start\r" respond "*" "adv4db.2" respond "Are you a wizard?" "\032" -type ":start 45\r" -respond "Command:" "d" -respond "*" ":pdump games; ts adv448\r" -respond "*" ":kill\r" +type ":vk\r" +decuuo "games; ts adv448" # TREK cwd "games" @@ -528,13 +515,8 @@ respond "*" "trek=trek\r" expect "CORE USED" respond "*" "\032" type ":kill\r" -respond "*" ":dec sys:loader\r" -respond "*" "trek\r" -respond "*" "/g\r" -respond "EXIT" ":start 45\r" -respond "Command:" "d" -respond "*" ":pdump games; ts trek\r" -respond "*" ":kill\r" +loader "trek" +decuuo "games; ts trek" # Tech II chess: timesharing, using TV display respond "*" ":midas games;ts chess2_rg;chess2\r" @@ -620,26 +602,13 @@ respond "*" "macro=macro\r" expect "CORE USED" respond "*" "\003" respond "*" ":kill\r" -respond "*" ":dec sys:link\r" -respond "*" "macro/go\r" -# Strange error here. Workaround is to retry. -expect "%LNKNED" -respond "*" "macro/go\r" -respond "*" ":start 45\r" -respond "Command" "d" -respond "*" ":pdump sys2; ts macro\r" -respond "*" ":kill\r" +linker "macro" +decuuo "sys2; ts macro" respond "*" ":delete decsys; macro shr\r" # Assemble with itself, now no errors macro10 "macro" "macro" -respond "*" ":dec sys:link\r" -respond "*" "macro/go\r" -expect "%LNKNED" -respond "*" "macro/go\r" -respond "*" ":start 45\r" -respond "Command" "d" -respond "*" ":pdump sys2; ts macro\r" -respond "*" ":kill\r" +linker "macro" +decuuo "sys2; ts macro" # MACSYM and MONSYM universal files. cwd "decsys" @@ -652,12 +621,8 @@ macro10 "uuosym.unv" "uuosym.mac" # CROSS, assembler macro10 "cross" "cross" -respond "*" ":dec sys:loader\r" -respond "*" "cross/g\r" -respond "*" ":start 45\r" -respond "Command:" "d" -respond "*" ":pdump sys1; ts cross\r" -respond "*" ":kill\r" +loader "cross" +decuuo "sys1; ts cross" # Old PALX respond "*" ":midas 11logo;ts palx_rms;palx 143\r" @@ -670,13 +635,8 @@ respond "*" ":palx live palx\r" # MACN11, pdp-11 cross assembler cwd "decsys" macro10 "macn11" "macn11.hdr,macn11.mac" -respond "*" ":dec sys:loader\r" -respond "*" "macn11/g\r" -expect "EXIT" -respond "*" ":start 45\r" -respond "Command:" "d" -respond "*" ":pdump sys3; ts macn11\r" -respond "*" ":kill\r" +loader "macn11" +decuuo "sys3; ts macn11" # Cookie Bear respond "*" ":midas gls; ts check_gls; check\r" @@ -1640,14 +1600,8 @@ macro10 "sits.unv" "sits.mac" # Datacomputer file transfer. cwd "mrc" macro10 "dftp" "dftp" - -respond "*" ":dec sys:link\r" -respond "*" "dftp/go\r" -expect "EXIT" -respond "*" ":start 45\r" -respond "Command" "d" -respond "*" ":pdump sys1; ts dftp\r" -respond "*" ":kill\r" +linker "dftp" +decuuo "sys1; ts dftp" # PDP-11 Lisp. respond "*" ":palx rms;_lisp11\r" @@ -1732,12 +1686,8 @@ expect ":KILL" # BBN Logo cwd "bbn" macro10 "logo" "logo" -respond "*" ":dec sys:loader\r" -respond "*" "logo/g\r" -respond "EXIT" ":start 45\r" -respond "Command:" "d" -respond "*" ":pdump bbn; ts logo\r" -respond "*" ":kill\r" +loader "logo" +decuuo "bbn; ts logo" # CLOGO respond "*" ":midas sys; ts clogo_rjl; logo\r" From 2c833d0faf0ba47ee4a88bed9595245375d06a36 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Sun, 9 Feb 2025 07:46:43 +0100 Subject: [PATCH 6/7] Add :VK where needed, remove where not needed. Replace a few instances of sleep with :VK to get a * prompt. Running :VK after making a link is no longer needed. --- build/basics.tcl | 9 ++------- build/dm.tcl | 5 ----- build/ka10/include.tcl | 3 ++- build/ka10/processor.tcl | 3 --- build/ks10/include.tcl | 1 - build/ks10/processor.tcl | 2 +- build/mark.tcl | 4 ++-- build/misc.tcl | 12 ------------ 8 files changed, 7 insertions(+), 32 deletions(-) diff --git a/build/basics.tcl b/build/basics.tcl index 7fac2ce08..7839cd227 100644 --- a/build/basics.tcl +++ b/build/basics.tcl @@ -4,15 +4,14 @@ patch_its_and_go pdset respond "*" ":login db\r" -sleep 1 +type ":vk\r" # Normally we'd save the old ITS as OITS, but since it was used for # bootstrapping with another configuration, it's no longer any use. -type ":delete .;@ its\r" +respond "*" ":delete .;@ its\r" # The new ITS is now canonical. respond "*" ":rename .;@ nits, .;@ its\r" -sleep 1 respond "*" ":midas sysbin;_syseng;dump\r" dump_switches @@ -117,13 +116,9 @@ expect ":KILL" respond "*" ":midas sysbin;_sysen2;find\r" expect ":KILL" respond "*" ":link sys;ts find,sysbin;find bin\r" -type ":vk\r" respond "*" ":link sys;ts fi,sys;ts find\r" -type ":vk\r" respond "*" ":link sys;ts comb,sys;ts find\r" -type ":vk\r" respond "*" ":link sys2;ts lf,sys;ts find\r" -type ":vk\r" respond "*" ":midas sys;ts dskuse_syseng;dskuse\r" expect ":KILL" diff --git a/build/dm.tcl b/build/dm.tcl index fdef5f90a..8c6f32961 100644 --- a/build/dm.tcl +++ b/build/dm.tcl @@ -13,11 +13,9 @@ expect ":KILL" # Gun down dead demons. respond "*" ":link taa; pwfile 999999, sysen1; pwfile >\r" -type ":vk\r" respond "*" ":midas sysbin;_sysen2; gunner\r" expect ":KILL" respond "*" ":link sys; atsign gunner, sysbin; gunner bin\r" -type ":vk\r" # Line printer unspooler demon. respond "*" ":midas sys; atsign unspoo_sysen1; unspoo\r" @@ -41,11 +39,9 @@ expect ":KILL" respond "*" ":midas survey; atsign surgiv_surgiv\r" expect ":KILL" respond "*" ":link sys; atsign surgiv, survey;\r" -type ":vk\r" # Survey sender demon. respond "*" ":link sys; atsign sursnd, survey;\r" -type ":vk\r" # Login program. respond "*" ":midas sysbin;_syseng; booter\r" @@ -72,4 +68,3 @@ respond "*" ":kill\r" respond "*" ":kill\r" mkdir "(init)" respond "*" ":link (init); as hactrn, sys2; ts shell\r" -type ":vk\r" diff --git a/build/ka10/include.tcl b/build/ka10/include.tcl index 0086ca831..a6cd5baea 100644 --- a/build/ka10/include.tcl +++ b/build/ka10/include.tcl @@ -117,7 +117,8 @@ proc make_dskdmp {} { # Paper tape DSKDMP. This is used for booting ITS. respond "*" $emulator_escape punch_tape "$out/dskdmp.rim" - type ":midas ptp:_system;dskdmp\r" + type ":vk\r" + respond "*" ":midas ptp:_system;dskdmp\r" dskdmp_switches "Y" expect ":KILL" } diff --git a/build/ka10/processor.tcl b/build/ka10/processor.tcl index 6787ff823..ea6f8af86 100644 --- a/build/ka10/processor.tcl +++ b/build/ka10/processor.tcl @@ -25,17 +25,14 @@ expect ":KILL" # Name Dragon respond "*" ":link syseng;tvkbd rooms, sysen2;\r" -type ":vk\r" respond "*" ":midas sysbin;_sysen2;namdrg\r" expect ":KILL" respond "*" ":link channa;rakash namdrg, sysbin; namdrg bin\r" -type ":vk\r" # STUFF respond "*" ":midas sys1;ts stuff_sysen2;stuff\r" expect ":KILL" respond "*" ":link channa;rakash tvfix, sys1; ts stuff\r" -type ":vk\r" # IOELEV, PDP-11 doing I/O for the PDP-10 host. # The "AI" IOELEV, also known as CHAOS-11. diff --git a/build/ks10/include.tcl b/build/ks10/include.tcl index de52590f8..0377ff2b8 100644 --- a/build/ks10/include.tcl +++ b/build/ks10/include.tcl @@ -81,7 +81,6 @@ proc prepare_frontend {} { pdset respond "*" ":login db\r" - sleep 1 type ":vk\r" respond "*" ":midas sysbin;_kshack;ksfedr\r" diff --git a/build/ks10/processor.tcl b/build/ks10/processor.tcl index 07a293e1b..fc5337a64 100644 --- a/build/ks10/processor.tcl +++ b/build/ks10/processor.tcl @@ -21,7 +21,7 @@ expect ":KILL" respond "*" ":copy kshack; mcr ram, .; ram ram\r" # Update microcode on frontend filesystem. -type ":ksfedr\r" +respond "*" ":ksfedr\r" respond "!" "write\r" respond "Are you sure" "yes\r" respond "Which file" "ram\r" diff --git a/build/mark.tcl b/build/mark.tcl index b29b11382..0806d8b49 100644 --- a/build/mark.tcl +++ b/build/mark.tcl @@ -15,9 +15,9 @@ start_dskdmp_its pdset respond "*" ":login db\r" -sleep 1 +type ":vk\r" -type $emulator_escape +respond "*" $emulator_escape mount_tape "$out/minsrc.tape" type ":dump\r" diff --git a/build/misc.tcl b/build/misc.tcl index eb39d1410..ccd7c0801 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -52,12 +52,10 @@ respond "*" ":pdump .teco.; ts 335\r" respond "*" ":kill\r" respond "*" ":link teach;teach emacs,emacs;teach emacs\r" -type ":vk\r" respond "*" "teach\033\023" respond "*" ":emacs\r" expect ":KILL" respond "*" ":link sys2;ts teachemacs,emacs;tstch >\r" -type ":vk\r" # nsalv, timesharing version respond "*" ":midas sys1;ts nsalv_kshack;nsalv\r" @@ -86,19 +84,12 @@ expect ":KILL" respond "*" ":midas sysbin;_sysen3;whoj\r" expect ":KILL" respond "*" ":link sys1;ts talk,sysbin;whoj bin\r" -type ":vk\r" respond "*" ":link sys1;ts who,sysbin;whoj bin\r" -type ":vk\r" respond "*" ":link sys1;ts whoj,sysbin;whoj bin\r" -type ":vk\r" respond "*" ":link sys1;ts whom,sysbin;whoj bin\r" -type ":vk\r" respond "*" ":link sys2;ts users,sysbin;whoj bin\r" -type ":vk\r" respond "*" ":link sys1;ts w,sys1;ts who\r" -type ":vk\r" respond "*" ":link sys2;ts u,sys2;ts users\r" -type ":vk\r" #Inter-Entity Communication respond "*" ":midas sysbin;_sysen2; iec\r" @@ -1240,7 +1231,6 @@ respond "@" "imlac; ssv22 iml_sysbin; ssv22 bin\r" respond "@" "\021" expect ":KILL" respond "*" ":link imlac; .prgm. normal, imlac; ssv22 iml\r" -type ":vk\r" # Assemble SSV4. respond "*" ":midas imlac; ts assv4_assv4\r" @@ -1622,9 +1612,7 @@ expect ":KILL" respond "*" ":midas rug;_loder\r" expect ":KILL" respond "*" ":link sys; ts nloder, rug; loder bin\r" -type ":vk\r" respond "*" ":link sys1; ts mloder, rug; loder bin\r" -type ":vk\r" # SITS. cwd "sits" From 99fb4d9e0c87b0b5c2bbb41f35e2137a08c7bcbe Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Sun, 9 Feb 2025 15:19:33 +0100 Subject: [PATCH 7/7] Add "palx" and "macn11" TCL procedures. --- build/basics.tcl | 3 +- build/build.tcl | 15 ++++++ build/ka10/processor.tcl | 13 ++--- build/kl10/processor.tcl | 53 ++++++++----------- build/misc.tcl | 110 +++++++++++++++++---------------------- 5 files changed, 91 insertions(+), 103 deletions(-) diff --git a/build/basics.tcl b/build/basics.tcl index 7839cd227..fce4f17d7 100644 --- a/build/basics.tcl +++ b/build/basics.tcl @@ -400,8 +400,7 @@ respond "*" ":midas sys;ts palx_sysen1;palx\r" expect ":KILL" # GT40 boot ROM. -respond "*" ":palx gt40;_gt40;bootvt\r" -expect ":KILL" +palx "gt40;" "gt40;bootvt" # PLAN/CREATE respond "*" ":midas sys3;ts create_syseng;create\r" diff --git a/build/build.tcl b/build/build.tcl index 8c5061eba..c617f65e0 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -181,6 +181,21 @@ proc macro10 {target sources} { respond "*" ":kill\r" } +proc palx {target sources {actions ""}} { + respond "*" ":palx ${target}_$sources\r" + eval $actions + expect ":KILL" +} + +proc macn11 {target sources {actions ""}} { + respond "*" ":macn11\r" + respond "*" "${target}_$sources\r" + eval $actions + expect "CORE USED" + respond "*" "\003" + respond "*" ":kill\r" +} + proc loader {files} { respond "*" ":dec sys:loader\r" respond "*" "$files/g\r" diff --git a/build/ka10/processor.tcl b/build/ka10/processor.tcl index ea6f8af86..e34ed2ebe 100644 --- a/build/ka10/processor.tcl +++ b/build/ka10/processor.tcl @@ -37,22 +37,17 @@ respond "*" ":link channa;rakash tvfix, sys1; ts stuff\r" # IOELEV, PDP-11 doing I/O for the PDP-10 host. # The "AI" IOELEV, also known as CHAOS-11. # STUFF prefers to have it in the "." directory. -respond "*" ":palx dsk0:.;_system;ioelev\r" -respond "MACHINE NAME =" "AI\r" -expect ":KILL" +palx "dsk0:.;" "system;ioelev" { respond "MACHINE NAME =" "AI\r" } # TV-11. STUFF prefers it to be in the "." directory. -respond "*" ":palx dsk0:.;_system;tv\r" -expect ":KILL" +palx "dsk0:.;" "system;tv" # XGP-11. STUFF prefers it to be SYSBIN; VXGP BIN. -respond "*" ":palx sysbin;vxgp bin_sysen2;xgp\r" -expect ":KILL" +palx "sysbin;vxgp bin" "sysen2;xgp" # CCONS. STUFF prefers it to be in the CONS directory. mkdir "cons" -respond "*" ":palx cons;_lmcons;ccons\r" -expect ":KILL" +palx "cons;" "lmcons;ccons" # Old Spacewar cwd "spcwar" diff --git a/build/kl10/processor.tcl b/build/kl10/processor.tcl index 0be841685..87637be8e 100644 --- a/build/kl10/processor.tcl +++ b/build/kl10/processor.tcl @@ -59,8 +59,7 @@ expect ":KILL" # KL10 front end debugger. Put it in the same directory as the # "MC" IOELEV. -respond "*" ":palx sysbin;_syseng; klrug\r" -expect ":KILL" +palx "sysbin;" "syseng; klrug" # 11STNK expects a copy in the . directory. respond "*" ":copy sysbin; klrug bin, .;\r" @@ -70,8 +69,7 @@ expect ":KILL" respond "*" ":link .; ts boot11, sys1; ts 11stnk\r" # KL10 diagnostics console program. -respond "*" ":palx kldcp;_kldcp\r" -expect ":KILL" +palx "kldcp;" "kldcp" respond "*" ":11stnk\r" respond "*" "R" respond "FILENAME" "\r" @@ -83,37 +81,34 @@ expect ":KILL" move_to_klfe ".temp.; kldcp bin" # KL10 diagnostic console utility -respond "*" ":palx kldcp;_kldcpu\r" -expect ":KILL" +palx "kldcp;" "kldcpu\r" respond "*" ":pcnvrt kldcp; kldcpu bin\r" move_to_klfe "kldcp; kldcpu a11" # PDP-11 debugger. # 16K is used with the DL10 IOELEV. -respond "*" ":palx .; 11ddt 16k_kldcp; 11ddt\r" -respond "PDP11=" "40\r" -respond "EISSW=" "0\r" -respond "MAPSW=" "0\r" -respond "HCOR=" "100000\r" -respond "TT10SW=" "0\r" -respond "VT05SW=" "0\r" -respond "DEBSW=" "0\r" -expect ":KILL" +palx ".; 11ddt 16k" "kldcp; 11ddt" { + respond "PDP11=" "40\r" + respond "EISSW=" "0\r" + respond "MAPSW=" "0\r" + respond "HCOR=" "100000\r" + respond "TT10SW=" "0\r" + respond "VT05SW=" "0\r" + respond "DEBSW=" "0\r" +} # 14K is used with the console IOELEV. -respond "*" ":palx dsk0:.;11ddt 14k_kldcp; 11ddt\r" -respond "PDP11=" "40\r" -respond "EISSW=" "0\r" -respond "MAPSW=" "0\r" -respond "HCOR=" "70000\r" -respond "TT10SW=" "0\r" -respond "VT05SW=" "0\r" -respond "DEBSW=" "0\r" -expect ":KILL" +palx "dsk0:.;11ddt 14k" "kldcp; 11ddt" { + respond "PDP11=" "40\r" + respond "EISSW=" "0\r" + respond "MAPSW=" "0\r" + respond "HCOR=" "70000\r" + respond "TT10SW=" "0\r" + respond "VT05SW=" "0\r" + respond "DEBSW=" "0\r" +} # The KL10 console "MC" IOELEV. -respond "*" ":palx .; cons11_system;ioelev\r" -respond "MACHINE NAME =" "MC\r" -expect ":KILL" +palx ".; cons11" "system;ioelev" { respond "MACHINE NAME =" "MC\r" } respond "*" ":11stnk\r" respond "*" "D" respond "FILENAME" ".; 11ddt 14k\r" @@ -129,9 +124,7 @@ move_to_klfe ".temp.; ioelev a11" # The KL10 "MC-DL" IOELEV. Put in same directory as KLRUG BIN. # TS BOOT11 stuffs it over DL10 in timesharing. TS 11BOOT makes a # @ BOOT11 to stuff out of timesharing. -respond "*" ":palx sysbin;_system;ioelev\r" -respond "MACHINE NAME =" "MC\r" -expect ":KILL" +palx "sysbin;" "system;ioelev" { respond "MACHINE NAME =" "MC\r" } # 11BOOT respond "*" ":midas;324 sys3;ts 11boot_syseng;11boot\r" diff --git a/build/misc.tcl b/build/misc.tcl index ccd7c0801..2720eef4a 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -531,8 +531,7 @@ respond "*" ":midas games;ts ckr_agb;ckr\r" expect ":KILL" # Dazzle Dart, video game for the Logo group PDP-11/45 -respond "*" ":palx bs;_dazzle\r" -expect ":KILL" +palx "bs;" "dazzle" # TOSBLK, convert from PALX binary to SBLK. respond "*" ":midas pdp11;ts tosblk_tosblk\r" @@ -621,7 +620,7 @@ expect ":KILL" # Phil Budne's PALX Game of Life. cwd "budd" -respond "*" ":palx live palx\r" +palx "budd;" "live palx" # MACN11, pdp-11 cross assembler cwd "decsys" @@ -1547,41 +1546,40 @@ expect ":KILL" # RUG, PDP-11 debugger. cwd "pdp11" -respond "*" ":palx rug\r" -respond "?" "2\r" -respond "?" "100000\r" -respond "?" "1\r" -respond "?" "1\r" -expect ":KILL" +palx "pdp11;" "rug" { + respond "?" "2\r" + respond "?" "100000\r" + respond "?" "1\r" + respond "?" "1\r" +} # URUG, GT40 debugger. -respond "*" ":palx sysbin;_sysen2;urug\r" -respond "=YES" "1\r" -respond "37000" "37000\r" -expect ":KILL" +palx "sysbin;" "sysen2;urug" { + respond "=YES" "1\r" + respond "37000" "37000\r" +} # GT40 Lunar Lander. -respond "*" ":palx gt40;_gt40;gtlem\r" -expect ":KILL" +palx "gt40;" "gt40;gtlem" # MINITS cwd "mits.s" -respond "*" ":palx test_config\r" -respond ":::" "777\r" -expect ":KILL" +palx "test" "config" { + respond ":::" "777\r" +} # MINITS boot ROM for an Interlan network interface. cwd "mits.b" -respond "*" ":palx bootil\r" -respond "Interlan CSR?" "0\r" -respond "Chaos address of Interlan board?" "0\r" -expect "Which set of downloading hosts?" -respond ")" "0\r" -respond "Start address?" "0\r" -respond "Do you want a power up/boot support" "0\r" -respond "Boot PROM mapping kludge?" "0\r" -respond "Start of temporary data storage?" "150000\r" -expect ":KILL" +palx "mits.b;" "bootil" { + respond "Interlan CSR?" "0\r" + respond "Chaos address of Interlan board?" "0\r" + expect "Which set of downloading hosts?" + respond ")" "0\r" + respond "Start address?" "0\r" + respond "Do you want a power up/boot support" "0\r" + respond "Boot PROM mapping kludge?" "0\r" + respond "Start of temporary data storage?" "150000\r" +} # ITS universal file. cwd "decsys" @@ -1594,15 +1592,15 @@ linker "dftp" decuuo "sys1; ts dftp" # PDP-11 Lisp. -respond "*" ":palx rms;_lisp11\r" -respond "System (RANDOM, SIMULATOR, LOGO, MATH, or STANFORD)?" "SIMULATOR\r" -expect ":KILL" +palx "rms;" "lisp11" { + respond "System (RANDOM, SIMULATOR, LOGO, MATH, or STANFORD)?" "SIMULATOR\r" +} # Logo RUG. STUFF prefers it to be RUG; AR BIN. -respond "*" ":palx rug;_ar\r" -# We'll just do the Logo PDP-11/45. -respond "COMPUTER=" "1\r" -expect ":KILL" +palx "rug;" "ar" { + # We'll just do the Logo PDP-11/45. + respond "COMPUTER=" "1\r" +} # PUNCH, punch out paper tapes in the Logo RUG format. respond "*" ":midas rug; ts punch_punch\r" @@ -1616,56 +1614,44 @@ respond "*" ":link sys1; ts mloder, rug; loder bin\r" # SITS. cwd "sits" -respond "*" ":palx sits\r" -expect ":KILL" +palx "sits;" "sits" # Salvager for the SITS file system. -respond "*" ":palx salv\r" -expect ":KILL" +palx "sits;" "salv" # System Sphere for SITS. -respond "*" ":palx sysspr\r" -expect ":KILL" +palx "sits;" "sysspr" # DDT for SITS. -respond "*" ":palx ddt\r" -expect ":KILL" +palx "sits;" "ddt" # Font loader daemon for SITS. -respond "*" ":palx fnt\r" -expect ":KILL" +palx "sits;" "fnt" # INQUIR for SITS. -respond "*" ":palx inquir\r" -expect ":KILL" +palx "sits;" "inquir" # DIRED for SITS. -respond "*" ":palx dired\r" -expect ":KILL" +palx "sits;" "dired" # TECO for SITS. cwd "rjl" -respond "*" ":palx teco\r" -expect ":KILL" +palx "rjl;" "teco" # SLOGO, 11LOGO for SITS. cwd "nlogo" -respond "*" ":palx slogo_@slogo\r" -expect ":KILL" +palx "slogo" "@slogo" # HLOGO, "Hal hack" 11LOGO. -respond "*" ":palx hlogo_@hlogo\r" -expect ":KILL" +palx "hlogo" "@hlogo" # ITSCOM, ITS-SITS communication. cwd "bee" -respond "*" ":palx itscom\r" -expect ":KILL" +palx "bee;" "itscom" # ITS, SITS file transfer. cwd "gld" -respond "*" ":palx its\r" -expect ":KILL" +palx "gld;" "its" # TORTIS respond "*" ":midas;324 radia;_tortis\r" @@ -1727,9 +1713,9 @@ expect ":KILL" # 11LOGO cwd "11logo" -respond "*" ":palx /H/M/CL BIN,N CREF_SYSTEM,TYI,READ,EVAL,TURTLE,ZEND\r" -respond "ASSSW=" "0\r" -expect ":KILL" +palx "/H/M/CL BIN,N CREF" "SYSTEM,TYI,READ,EVAL,TURTLE,ZEND" { + respond "ASSSW=" "0\r" +} # Apple II Logo cwd "aplogo"