Skip to content

Conversation

@larsbrinkhoff
Copy link
Contributor

@larsbrinkhoff larsbrinkhoff commented Oct 11, 2025

This emulates the classic LINC from 1965. Out of scope: earlier models e.g. with only 1024 words of memory, or newer models such as micro-LINC 300, LINC-8, or PDP-12. The emulator passes diagnostics provided by the System Source Museum. It can run Mary Allen Wilke's LAP6 "LINC assembly program" which provides text editing, assembling, and tape filing.

I didn't dare mess with the Visual Studio projects. Someone, help? Fixed, Mark P sent me the files.

The first commit adds support for the "left backslash" key between left shift and Z. It's useful because the LINC keyboard had a key there. It's also mapped from the regular left bracket key.
image

Typing is a bit quirky. I haven't decided on the kep mapping yet. For now, host keys are mapped to the closest corresponding LINC key. But some LINC keys require pressing CASE first to get the upper case symbol. E.g. to get comma, press and release CASE (mapped from shift), and type comma. Plain comma generates minus, since that is the unshifted (or un-CASE'ed) key. Typing minus also generates minus. Zero is mapped from both 0 and backtick, because the LINC keyboard had 0 to the left of 1. LAP6 uses CASE-0 and CASE-Q to move text by the page, and CASE-1 and CASE-W to move by the line; this arrangement is more apparent with the original key placement. F1 is mapped to the p/u key; I can think of no other suitable key. The LINC has three lower case letters: i, p, and u, but they are used as special assembly language symbols, not text.

Adds support for the ISO/European "left backslash" or "less than" key.
It's found between left shift and Z.
@larsbrinkhoff larsbrinkhoff changed the title LINC: New emulator for the LINC computer. LINC: New emulator for the classic LINC computer. Oct 11, 2025
@LegalizeAdulthood
Copy link

I didn't dare mess with the Visual Studio projects. Someone, help?

We'll also want to add it to the CMake build.

@larsbrinkhoff
Copy link
Contributor Author

Oh right. I added the CMake stuff.

@larsbrinkhoff larsbrinkhoff force-pushed the lars/linc branch 2 times, most recently from 5421f2b to 30cace1 Compare October 12, 2025 05:52
@larsbrinkhoff
Copy link
Contributor Author

@markpizz sent me the Visual Studio files and I added them here.

@larsbrinkhoff larsbrinkhoff force-pushed the lars/linc branch 5 times, most recently from 1f8d1f1 to feb44a0 Compare October 12, 2025 11:39
@markpizz
Copy link
Contributor

@LegalizeAdulthood said:

Visual Studio .user project files shouldn't be added to source control

Well, the .vcxproj, .vcxproj.filters and .vcxproj.user files for all the simulators were added back in February of 2023 by @tlhackque. None of them actually needs to be in source control, since they will be autogenerated when a newer Visual Studio version opens the simh.sln file. This takes several minutes, so it seems reasonable as to why they were added, The .user files have nothing special or concerning in them except for 4 lines of XML.

The new linc.vcxproj file has been provided the same way all the other existing .vcxproj files were including the .vcxproj.user files.

@LegalizeAdulthood
Copy link

They aren't intended to be shared among developers; they are per-user settings. They don't belong in source control. It doesn't matter if they were added previously because a previous mistake doesn't make for a correct action now.

@larsbrinkhoff
Copy link
Contributor Author

I'm happy to remove the .user file, and will probably do so given the information above. I'll raise the more general issue on the mailing list.

@larsbrinkhoff larsbrinkhoff force-pushed the lars/linc branch 9 times, most recently from 38e271e to d5cbfa6 Compare October 14, 2025 07:04
@larsbrinkhoff
Copy link
Contributor Author

This documentation should make it easier to use the emulator:

https://github.com/larsbrinkhoff/open-simh/blob/lars/linc/linc/README.md

@larsbrinkhoff
Copy link
Contributor Author

This has still not been merged, so I added a TTY device. This is a teletype connected to relay output 0. LAP6 will bit bang this output to send text for printing. (So the teletype can't be used for input.) The emulator samples the output to find the start bit edge, and then decodes bits at 110 baud (relative to CPU speed). Tested with PM (print manuscript) and PX (print index) from LAP6.

@larsbrinkhoff larsbrinkhoff force-pushed the lars/linc branch 2 times, most recently from 36bc036 to 4d013a3 Compare October 18, 2025 14:11
@vrs42
Copy link

vrs42 commented Oct 18, 2025 via email

@larsbrinkhoff
Copy link
Contributor Author

Updated again to add a modified DO command. Without arguments, it will act like the DO button which executes a command from the switches. (With an argument, run a script like usual.)

BOOT TAPE now accepts RCG=, RDC=, and START= to say how to boot. It works like toggling in a tape read command, pushing DO, and then starting at the specified address. The default is RCG 7300 and starting from 20; this is the conventional way to start LAP6.

@larsbrinkhoff larsbrinkhoff force-pushed the lars/linc branch 2 times, most recently from 4b105e5 to f3199c3 Compare October 20, 2025 08:42
@larsbrinkhoff
Copy link
Contributor Author

Added symbolic input.

@larsbrinkhoff larsbrinkhoff force-pushed the lars/linc branch 4 times, most recently from c7aba05 to a5b3391 Compare October 21, 2025 07:16
@larsbrinkhoff
Copy link
Contributor Author

There's a companion repository with a LAP6 compatible assembler and filing tool.

https://github.com/PDP-12/lap6-tools

This emulates the classic LINC.  The design was settled in 1965,
increasing memory to 2048 words, and adding a Z register, an overflow
flag, and an interrupt facility.
@larsbrinkhoff
Copy link
Contributor Author

Steering committee @pkoning2 et al, feel free to merge this at any time. It's ready to go. I may push minor tweaks in the meanwhile, but that doesn't mean the emulator is unstable.

@larsbrinkhoff
Copy link
Contributor Author

Future directions: I might add support for the Spear, Inc micro-LINC 300 if software and documentation becomes available. There are LINCtapes with tests for the 300, but I would also like to see some more useful software.

I'm unlikely to make additions to support the LINC-8 or PDP-12. Please refer to @vrs42's https://github.com/vrs42/simh for PDP-12 emulation.

@pkoning2
Copy link
Member

Thanks Lars. I would hope that other work will get merged here at some point. Having Open SIMH forks is perfectly valid of course, but it's more desirable to have new emulators merged. Otherwise things can diverge painfully far, as we can see with the unfortunate case of XHomer.

@pkoning2
Copy link
Member

Using your current code, "make linc" works fine and the self-test passes quickly. But "cmake/cmake-builder.sh --target linc" does the build without problem but the selftest hangs and eventually times out.

larsbrinkhoff and others added 3 commits October 23, 2025 16:10
These are tests for the classic LINC, including the features new in
1965: 2048 words of memory, a Z register, an overflow flag, and an
interrupt facility.
Block 45 held damaged data, and block 51 was identical to block 52.
@pkoning2 pkoning2 merged commit 4d38373 into open-simh:master Oct 23, 2025
14 of 19 checks passed
@pkoning2
Copy link
Member

By the way: I try to avoid force-push and amended commits after the original push, but if you must, in the future at least please include --date=now in the commit command. It's strange to see new commits with old dates.

@larsbrinkhoff larsbrinkhoff deleted the lars/linc branch October 23, 2025 16:07
@larsbrinkhoff
Copy link
Contributor Author

I would recommend you do revise commits in an open pull request. If well done, it makes pull requests easier to review, and the history more useful in the future if it's necessary to go back and check what happened. I can very well use --date=now.

I tested cmake and the tests passed for me. Is this something that happens consistently?

@pkoning2
Copy link
Member

It was consistently broken before your last commit, and worked after that, which is why I did the merge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants