User:RHansen: Difference between revisions

From NDWiki
Jump to navigation Jump to search
No edit summary
(Added section around ND-100 Satellite)
 
(30 intermediate revisions by the same user not shown)
Line 16: Line 16:
| 
| 
|}
|}
A long time a go, in another universe it seems, I was using SINTRAN on an ND-100 at our electronics/computer school.
A long time ago, in another universe it seems, I was using SINTRAN on an ND-100 at our electronics/computer school.
We configured and ran the machine after we inherited it.
We configured and ran the machine after we inherited it.


These days I am a Cloud Architect, Developer and Geek - and the last years I have been spending an unhealthy amount of time writing emulators. You can read how this crazy journey started here [https://www.linkedin.com/pulse/wow-i-didnt-expect-so-much-fun-ronny-hansen/]
These days I am a Cloud Architect, Developer and Geek - and the last years I have been spending an unhealthy amount of time writing emulators. You can read how this crazy journey started here [https://www.linkedin.com/pulse/wow-i-didnt-expect-so-much-fun-ronny-hansen/]


I have successfully (with some help) created an ND-100 emulator in .NET/C# with peripherals such as TeleType, Floppy and HardDrive.
== ND-100 Emulator ==
(I have to admit I have ''borrowed'' some of the complex opcodes from the existing nd100em emulator )
I have successfully (with some help) created an ND-100 emulator in .NET/C# with peripherals such as TeleType, Serial Ports,  Floppy and HardDrive.


The emulator contains a debugger, dissasembler and code tracer in addition to logic to mount different floppy-image, read/write hardddrive, loading BPUN and PROG files directly into memory.
The emulator contains a debugger, disassembler and code tracer in addition to logic to mount different floppy-image, read/write hardddrive, loading BPUN and PROG files directly into memory.


I have successfully dumped and booted SINTRAN version H in ND-100 mode, although there are still some bugs to iron out.
I have successfully dumped and booted SINTRAN versions H, K, L and M in ND-100 mode.
 
This YouTube video shows a boot of SINTRAN L in the emulator [https://www.youtube.com/watch?v=HdVbfdQeWOk&ab_channel=RonnyHansen]




Line 32: Line 34:


[[File:Disk-choice-m.png|200px|thumb|right|Possible disk choices to install SIII M on]]
[[File:Disk-choice-m.png|200px|thumb|right|Possible disk choices to install SIII M on]]
I have tried booting SINTRAN K and M.  Dumping to HDD works great, but I haven't successfully managed to boot SINTRAN from HD with 22!
Both ends up in ERRFATAL, K does it very quiet - while M actually dumps something on the console:
System malfunction: Sintran halt in ERRFATAL. L-reg: 042471
Current page index tables (NPIT/APIT): 000000 / 0000000
Level: 000020
> After consulting "SINTRAN III/VSX Fatal Error Routine Addresses ND-820059EN2" it turns out its actually "Wrong disk type. Error returned from disk driver". It also tells me I have SINTRAN M, Std C version.
I am suspecting that SIII M is wanting something else than my DISC-38MB-1 (SMD-15MHZ). Or I have a bug in the driver.. It does stop after just ~100 opcodes.
Update 05.10.2022 : Changing from DISC-38MB-1 to DISC-75MB-1 makes SIII H continue booting after 22! It does execute around 600 Floating Point operations (FMU/FAD/FSB/) before looping on writing 0 to 177653/177654. No jump to ERRFATAL.
I am guessing I must focus on my implementation of the Floating Point logic, which is VERY buggy at the moment.




[[File:Cpu-revision.png|200px|thumb|right|SIII M ERROR]]


[[File:Paging-test.png|200px|thumb|right|Results from PAGING:TEST]]
[[File:Paging-test.png|200px|thumb|right|Results from PAGING:TEST]]


== What's working in the emulator ==
=== What's working in the ND-100 emulator ===
* SINTRAN H boots and runs (with a minor hardcode in the emulator to fix ABSTR bug (?))
* SINTRAN K,L and M boots and runs. XMSG starts in L and M
* Test programs that validates the opcodes so far
* Test programs that validates the opcodes so far
** ONE—CHECK, TWO—CHECK, THREE—CHECK
** ONE—CHECK, TWO—CHECK, THREE—CHECK
Line 59: Line 51:
** Test programs on floppy "210523E00-XX-01D"
** Test programs on floppy "210523E00-XX-01D"
*** INSTRUCTION - Version: C00 - 1986-10-30
*** INSTRUCTION - Version: C00 - 1986-10-30
**** "32 BITS FLOATING INSTRUCTIONS" - Failing on  (NLZ, FMU,FDV, FAD,FSB)
**** "48 BITS FLOATING INSTRUCTIONS" - not working as I am only emulating 32 bits FPU
**** "INTERNAL INTERRUPTS" Failing (dies) - Earlier I had a more descriptive fail, but I guess I fixed that bug (Expected IIC value:5, Found IIC value: 2)
****  
***  PAGING - Version: C00 - 1986-10-16
***  PAGING - Version: C00 - 1986-10-16
**** All tests report success MMS-1 and MMS-2 mode.
**** All tests report success in MMS-1 and MMS-2 mode.
[[File:fpp32.png|200px|thumb|right|INSTRUCTIONS FPP test]]


[[File:Conf.png|200px|thumb|right|CONFIGURATION test tool]]
[[File:Conf.png|200px|thumb|right|CONFIGURATION test tool]]


== What's NOT working in the emulator ==
=== What's NOT working in the ND-100 emulator ===
* SINTRAN K and M doesnt boot
* <s>SINTRAN K,L and M triggers a "Memory protection" after a "Page-not-in-memory". This happens to just one specific page, so at the moment "Memory protection" is disabled while I am trying to identify the reason.</s>
** Found the bug after 18 months debugging, and many hundred-thousands of log-lines read... It was related to reading Indirect Data in memory with READ_FETCH properties, and the indirect data was on a page that was "NOT IN MEMORY" (ie it had to be paged in to be able to be read).
* MON 131 ABSTR behaves "buggy" in SINTRAN H
* MON 131 ABSTR behaves "buggy" in SINTRAN H
** Because of "bugs" in ABSTR (or in floppy drivers) I am not able to enter-directory on FLOPPY-DISC-1 (both PIO and DMA floppy drivers)
** Something odd happens with zero-pointers for some logical devices sending the CPU into a loop at P=0
* Odd behaviour in CONFIGURATION on interrupt detection (see picture on the right)
** Guessing there is an opcode not working 100% that failed some initialisation.
* Copying file from papertape driver to SINTRAN disk with "COPY 'FILE:BPUN' PT1' fails after 129 bytes. It just stops, and I have to cancel the copy with ESC key.
 
* Since I cannot "enter-directory floppy-disc-1", I am unable to run NEW-SYSTEM. I dont know how critical this is to get SINTRAN to work.
* Copying file from papertape driver to SINTRAN H disk with "COPY 'FILE:BPUN' PT1' fails after 129 bytes. It just stops, and I have to cancel the copy with ESC key.


==I am looking for the following==
===I am looking for the following===
* '''Images of SINTRAN J floppies. The source code that has been scanned is SINTRAN J - And it would help immensely in debugging the emulator if I could boot and debug version J.'''
* SINTRAN N (the newest version of SINTRAN) and patch files for Y2K.
* Documentation on ST-506 Winchester, SMB 10 MHZ and SCSI HDD controllers.
* All SINTRAN III versions are of interrest. And PATCH files. Did i mention PATCH files?
* Documentation on the ND-100 register ACTL (Active Level). It looks like it's 3 bits, and its not PIL.
* Other binary images (Tape, PaperTape, HDD, Floppy,+++)  
* Information on what REALLY happens in the register IIC as documentation says its "locked" when there is an error, and "unlocked" during an TRA IIC
* Other binary images (Tape, PaperTape, HDD, Floppy,+++) All SINTRAN III versions are of interrest.
* ROM's with Microcode for ND-10, ND-100, ND-110
* Documentation on device and register usage for all peripherals, especially Ethernet
* Access to a REAL ND-100/ND-110 to run som test programs to compare with my emulator.
* Source Code. Any source code. Especially test programs and IO drivers.
* Source Code. Any source code. Especially test programs and IO drivers.
* Documentation on Date/Time format/calculation for file/timestamps
* Hard Disk boot sector information - currently I must boot from via "boot floppies" and I would like to be able to boot directly from the HDD.
* A better understanding on what SIII really does during boot. Is the (few) boot floppies that are found on the internet bound to some specific HW configuration ?


==Things I am working on==
===Things I am working on===
* Getting the I/O devices to work flawlessly. I especially want to finish all details in the HDD driver (and emulating different disk sizes and versions of the controller hw)
* Finding the bugs that forces me to have workaround for ABSTR and Memory Management (Guessing: opcodes and/or ALU flags)
* I am focusing on getting the ND-10/ND-100 opcodes working 100%. (I do believe that the ones that are implemented are "almost" bugfree)
* Validate CE (Commercial Extended) opcodes. They are confirmed working using "INSTRUCTION" test program, but it doesn't test all variants.
* Implementing the missing opcodes
** BCD
** Floating point 48 bits (doing 32 bits "buggy" now)
** Stack (INIT, ENTR, LEAV, ELEAV) - for PLANC programs.
** «Commercial Extended» (CE) option
** ND-110 Specific opcodes
** ND-110 Specific opcodes (Stack, Segment,)
*** Since I now have the ND-110 emulator working, I should be able do decode how the missing opcodes work and get them working. But in reality I dont think I need the ND-110 specific opcodes, as they are mostly added for performance reasons.
* Focusing on getting SINTRAN H work 100% flawlessly (could be opcodes, but at the moment all my trouble is inside ''MON 131 ABSTR'')
*** CX opcodes (Segment)
 
* Implementing more controllers
** HDLC/MEGALINK
*** IO interface is finished. Implementation of the HDLC controller "COM 5025" from SMC is somewhat working. Now I am ironing out the details using the "HDLC test program"
*** The goal is to have "simulated" serial communication over TCP to be able to communicate with other emulated ND machines using COSMOS.
*** '''Looking for network software (especially TCP-IP) for SINTRAN. So far this software is not on any floppy I know about.
** Ethernet'''
*** Ethernet II controller has an onboard 68000 CPU and a LANCE controller. Work is in progress to emulate the chips and map the devices together.
*** Controller has no EPROM, but shared memory with the ND-100 machine. The program on the controller is loaded from ND-100 and the 68K cpu is restarted after code is loaded to RAM.
** SCSI Controller
*** IO interface is finished, implementation of the SCSI is complete. The SCSI Chip is an NCR 5386.
*** Emulated SCSI Bus and "generic" SCSI HDD is complete.
*** Emulated 135MB SCSI HD "Micropolis 1375 SCSI Drive" works quite good with DISK-MM, SCSI-TV and Filesystem Investigator
**** Video of me testing can be seen here https://youtu.be/EqF9FhFZj2g
**** Using a IMG file that is dumped from a real Micropolis 1375 drive!
***** I believe the image is from this machine [[ND-110_Satellite_9883.21238]]
*** SINTRAN boot or "ENTER-DIRECTORY" for DISC-SCSI-1 fails, so there are still some details that need to be fixed.
*** The goal is to have a working SCSI interface so ND-100 can boot directly from images dumped from SCSI drives.
** ND-500 controller
*** Added skeleton for PCB 3022 [https://www.ndwiki.org/wiki/3022], the ND-500 interface
*** CONFIGURE detects the new controller, but I have not implemented any logic inside
*** '''Looking for documentation details on this controller as I am unable to find any.'''


==Open Source==
===ND-100 Running in the browser===
** Working on making the emulator(s) working in the browser by compiling C# to WebAssembly
** CPU is running nicely, working on giving access to IO devices
** You can test by going to [https://retrocore.hackercorp.no/ https://retrocore.hackercorp.no/] and selecting machine=ND100 then powering on the Emulator.
** Feedback, comments, and help is much appreciated
*** I am able to mount HDD for code running in the browser, but booting and running SINTRAN is painfully slow. So maybe not so good idea to do that..
 
===Open Source===
* When I have a stable working version, I am planning to put the source code on GitHub under a BSD License. Then everyone can look at the code, modify it or just run it.
* When I have a stable working version, I am planning to put the source code on GitHub under a BSD License. Then everyone can look at the code, modify it or just run it.
* I have been playing with the idea on porting my C# code to C - when its stable. And integrate it in the SIMH projects [https://github.com/open-simh/simh]. For this I may need help :)
* I have been playing with the idea on porting my C# code to C - when its stable. And integrate it in the SIMH projects [https://github.com/open-simh/simh]. For this I may need help :)
** I just found out that there exists and ND-100 emulator in OPEN-SIMH written in C by "Ragge". It is not 100% complete, lacking some opcodes, complete MMU and some devices - so you cannot boot Sintran (yet..) - https://github.com/open-simh/simh/tree/master/ND100
==ND-110 Emulator==
[[File:ND-110-UC.png|200px|thumb|right|MicroCode with syntax highlighting]]
* ND-110 MicroCode CPU
** Creating a new CPU emulator at the MicroCode level to teach me more about the internals of the opcodes, but also to (hopefully) help me identify "features" in my ND-100 Emulator
*** Everything is written in C#/.NET7
*** MicroCode compiler works.
*** MicroCode retrieved from PDF document using OCR techniques mixed with some "text washing" gives me a file with 16600 lines of microcode I manually have validate against the PDF. After retriving a copy of a ROM for a ND-110 cpu board, I could compare the compiled result with the ROM and found 150+ errors in the source file. Now that is fixed, and the compiled microcode is identical to the ROM.
***
*** MicroCode CPU working. I have implemented registers, ALU (actually its 4x Am2901 chips) and interrupts (Am2914 chip)
*** Macro code execution work.
*** Interrupts and traps "somewhat" works. Still need improvement
*** Memory management is "copied" from ND-100 emulator, but needs to be re-written to match ND-110/ND-120 hw
*** This CPU is definitively slower than the ND-100 emulator, but hopefully behave 100% like the original. This way I can verify behavior differences between the ND-100 opcodes and the ND-110 opcodes.
*** If you want to test the emulator/debugger, its available at [https://nd110.hackercorp.no/ https://nd110.hackercorp.no/]
* ND-120 MicroCode CPU
** Extended the ND-110 MicroCode CPU to work with ND-120 microcode.
*** Microcode almost identical, there are a few bits that has been negated and needs to be handled when reading the PROM
*** Different UART than ND-100 and ND-110, so support for this has been implemented
*** OpCom works, so I can communicate via console.
*** There are other differences, I am guessing in the interrupt subsystem. Consequence is that I cant start programs like INSTRUCTION verify, it just hangs.
==ND-120 Emulator==
* ND-120 FPGA CPU
** Creating a new CPU emulator at hardware level using the original design documents from 1988
*** Draw the digital logic using Logisim Evolution.
**** Finished : CGA (CPU Gate Array). Verilator test code generated, more testcases needed.
**** Finished : DGA (Decoder Gate Array). Verilator test code generated, more testcases needed.
**** Finished : CPU BOARD PCB 3202D - Does require some manual work directly in the generated Verilog files as Logisim doesn't handle pins that are both IN and OUT.
**** Work in progress : PAL's and some special chips (like RAM and UART).
**** I have secured a dump of the microcode from EPROM on a real ND-120 CPU.
*** Convert the schematics to Verilog (Built in functionality in Logisim).
*** Make test programs using Verilator to test the logic, then program that into an FPGA HW Device to test.
*** Development is done in the open, check out [https://github.com/RonnyA/nd-120 https://github.com/RonnyA/nd-120]
*** Help is much appreciated as I am new to Verilog and FPGA programming
*** When the complete CPU PCB (with CGA and DGA) is finished in Verilog, with serial port access to OPCOM the next step is to implement support for IO devices like floppy and harddrive.
== ND Controller card Emulator==
* Controller card for HDD emulated in hardware FPGA
** Today you need an real working HDD or an MFM emulator with MFM controller card in an ND machine to boot.
*** I bought this [https://www.pdp8online.com/mfm/mfm.shtml MFM Emulator] and worked with the person that made the device, and he was very helpful to extend the code it so the MFM emulator is now able to read and write ND Micropolis MFM disks.
** If you have an SCSI controller you need a working SCSI HDD or an SCSI HDD emulator.
*** I just received an [https://store.rabbitholecomputing.com/ZuluSCSI-RP2040-p/zuluscsi-rp2040.htm Zulu SCSI emulator] I am about to test.
** This project aims to solve this by emulating a real controller using FPGA, and having the "HDD DISK" as an image on a SD card.
** Emulation of floppy controller is also planned.
** This way we will be able to run test programs and boot ND hardware that doesn't have working disk/disk-controllers.
==TDV 2215 Emulator==
[[File:Tdv-2215-boot-emul-err.png|200px|thumb|right|TDV2215 booting with error]]
* Creating an emulator of the TDV2215 terminal.
** Using the original schematics, an emulated 8085 CPU and ROM dumps from an original TDV.
** The ROM code does some HW validation and fails with "ERROR NO.: qt" -There are multiple areas it can fail: Z80SIO UART emulation, Interrupt handling and memory mapping.
** I am still working on mapping the original HW to my emulator.
** Using Ghidra to reverse engineer the ROM code, but its hard to understand what the ROM code really tries to do, and why it fails.  Having had the source code with comments would have been helpful :)
** YouTube video showing boot here: [https://youtu.be/-MwsB6Yzs94]
* Added TD2200 support directly in the emulators "graphic" mode
** Decoding ESC sequences and sending ESQ sequences based on TDV manuals describing some of them. Adding in som VT100 emulation to make the rest work. Mapping special keys (arrow keys) to send ESC codes.
** YouTube video showing TDV emulation running S3-CONF program under SINTRAN [https://youtu.be/-DP_Q-nxQQw]
==ND-110 Compact==
I have beeen so lucky that I have gotten a real ND-110/CX Compact with the following HW configuration
{| class="wikitable"
|+ PCB Description Print
|-
! SLOT !! ID !! PCB !! Description !! Print and ECO
|-
| 12 || 324113 || PCB 3042 || 1 MB Memory || Print A ECO D
|-
| 11 || 322623 || PCB 3023 || ND100 MEGALINK IF || Print D ECO K
|-
| 10 || 324534 || PCB 3094 || ETHERNET IF. II || Print C
|-
| 9 || 324011 || PCB 3111 || 8 TERM IF W/FIFO || Print C
|-
| 8 || 324012 || PCB 3112 || 8" + 5 1/4 FLOPPY || Print B
|-
| 7 || 322671 || PCB 3041 || N-100 ST 506 DISK CONTR. || Print E ECO K
|-
| 6 || 322623 || PCB 3023 || ND100 MEGALINK IF || Print D ECO K
|-
| 5 || 322623 || PCB 3023 || ND100 MEGALINK IF || Print D ECO G
|-
| 4 || 322615 || PCB 3015 || ND100 HDLC W/A.LO || Print <unknown>
|-
| 3 || 322615 || PCB 3015 || ND100 HDLC W/A.LO. || Print S ECO V
|-
| 2 || 324137 || PCB 3090 || ND110 - CPU&MM 32B || Print K ECO R
|-
| 1 || 322672 || PCB 3042 || N100 2MB RAM || Print A ECO D
|}
The machine also has a Micropolis 1325 ST506 74MB drive. Sadly there is some issues with reading data from it.
* Reading head 0-3 works on all tracks
* Reading head 4-7 fails on all tracks with error "Address mismatch"
After buying an MFM emulator from [https://www.pdp8online.com/mfm/] and getting help and support, including firmware extension to identify and read ND disk format I have been able to partially dump the contents of the disk.
The challenge is that the heads 4-7 is reading the "next" track because they are misaligned - and I need to add some HW to try to make the disk adjust how it reads it heads - as described here [http://www.pdp8online.com/mfm/head_servo/]
Using the MFM emulator I am now able to boot the ND-100/CX machine from an disk image I have prepared in my emulator.
I also got a TDV 1200 terminal, which upon startup had a capacitor in the powersupply to burn. I have replaced the capacitors in the powersupply, but there is some unstability that I believe is related to heat (read:old chips - or more capacitors that needs to be replaced)
Short YouTube video showing the problem: [https://youtube.com/shorts/uek6hpqzYvE]
To connect to the ND machine I use a serial-to-current loop adapter i bought from Mouser. [https://no.mouser.com/ProductDetail/Advantech/BB-232CL9R?qs=zW32dvEIR3vYFmSSVfM7ig%3D%3D&countryCode=NO&currencyCode=NOK]
==ND-100 Satellite==
I recently inherited a ND-100 Satellite [https://www.ndwiki.org/wiki/ND-100_Satellite_14.16796] that I am trying to get into working condition.
The MFM HDD seems to be completely filled with bad sectors, so I am unsure if I can recover that - I will try to get it to boot from an MFM emulator
==Sources==
<references/>

Latest revision as of 10:55, 5 September 2024

Ronny
 
Real name: Ronny Hansen
Role: Developer, Architect, Geek
Interrested in: Everything between Embedded and Cloud
 

A long time ago, in another universe it seems, I was using SINTRAN on an ND-100 at our electronics/computer school. We configured and ran the machine after we inherited it.

These days I am a Cloud Architect, Developer and Geek - and the last years I have been spending an unhealthy amount of time writing emulators. You can read how this crazy journey started here [1]

ND-100 Emulator

I have successfully (with some help) created an ND-100 emulator in .NET/C# with peripherals such as TeleType, Serial Ports, Floppy and HardDrive.

The emulator contains a debugger, disassembler and code tracer in addition to logic to mount different floppy-image, read/write hardddrive, loading BPUN and PROG files directly into memory.

I have successfully dumped and booted SINTRAN versions H, K, L and M in ND-100 mode.

This YouTube video shows a boot of SINTRAN L in the emulator [2]


Booting SINTRAN H in the emulator

Possible disk choices to install SIII M on


SIII M ERROR
Results from PAGING:TEST

What's working in the ND-100 emulator

  • SINTRAN H boots and runs (with a minor hardcode in the emulator to fix ABSTR bug (?))
  • SINTRAN K,L and M boots and runs. XMSG starts in L and M
  • Test programs that validates the opcodes so far
    • ONE—CHECK, TWO—CHECK, THREE—CHECK
    • FOUR—CHECK (a few bugs still)
    • INSTRUCTION-B.BPUN (PROGRAM NUMBER: 204384B DATE ISSUED  : 83.11.01)
    • PAGING-B.BPUN (PROGRAM NUMBER: 203098B 1982)
    • FLOPPY-FU-1986F (All tests work except Test 2 "Format Decoder Test" on my PIO floppy driver)
    • Test programs on floppy "210523E00-XX-01D"
      • INSTRUCTION - Version: C00 - 1986-10-30
        • "48 BITS FLOATING INSTRUCTIONS" - not working as I am only emulating 32 bits FPU
      • PAGING - Version: C00 - 1986-10-16
        • All tests report success in MMS-1 and MMS-2 mode.
INSTRUCTIONS FPP test
CONFIGURATION test tool

What's NOT working in the ND-100 emulator

  • SINTRAN K,L and M triggers a "Memory protection" after a "Page-not-in-memory". This happens to just one specific page, so at the moment "Memory protection" is disabled while I am trying to identify the reason.
    • Found the bug after 18 months debugging, and many hundred-thousands of log-lines read... It was related to reading Indirect Data in memory with READ_FETCH properties, and the indirect data was on a page that was "NOT IN MEMORY" (ie it had to be paged in to be able to be read).
  • MON 131 ABSTR behaves "buggy" in SINTRAN H
    • Something odd happens with zero-pointers for some logical devices sending the CPU into a loop at P=0
    • Guessing there is an opcode not working 100% that failed some initialisation.
  • Copying file from papertape driver to SINTRAN H disk with "COPY 'FILE:BPUN' PT1' fails after 129 bytes. It just stops, and I have to cancel the copy with ESC key.

I am looking for the following

  • SINTRAN N (the newest version of SINTRAN) and patch files for Y2K.
  • All SINTRAN III versions are of interrest. And PATCH files. Did i mention PATCH files?
  • Other binary images (Tape, PaperTape, HDD, Floppy,+++)
  • Source Code. Any source code. Especially test programs and IO drivers.

Things I am working on

  • Finding the bugs that forces me to have workaround for ABSTR and Memory Management (Guessing: opcodes and/or ALU flags)
  • Validate CE (Commercial Extended) opcodes. They are confirmed working using "INSTRUCTION" test program, but it doesn't test all variants.
    • BCD
    • Stack (INIT, ENTR, LEAV, ELEAV) - for PLANC programs.
    • ND-110 Specific opcodes
      • Since I now have the ND-110 emulator working, I should be able do decode how the missing opcodes work and get them working. But in reality I dont think I need the ND-110 specific opcodes, as they are mostly added for performance reasons.
      • CX opcodes (Segment)
  • Implementing more controllers
    • HDLC/MEGALINK
      • IO interface is finished. Implementation of the HDLC controller "COM 5025" from SMC is somewhat working. Now I am ironing out the details using the "HDLC test program"
      • The goal is to have "simulated" serial communication over TCP to be able to communicate with other emulated ND machines using COSMOS.
      • Looking for network software (especially TCP-IP) for SINTRAN. So far this software is not on any floppy I know about.
    • Ethernet
      • Ethernet II controller has an onboard 68000 CPU and a LANCE controller. Work is in progress to emulate the chips and map the devices together.
      • Controller has no EPROM, but shared memory with the ND-100 machine. The program on the controller is loaded from ND-100 and the 68K cpu is restarted after code is loaded to RAM.
    • SCSI Controller
      • IO interface is finished, implementation of the SCSI is complete. The SCSI Chip is an NCR 5386.
      • Emulated SCSI Bus and "generic" SCSI HDD is complete.
      • Emulated 135MB SCSI HD "Micropolis 1375 SCSI Drive" works quite good with DISK-MM, SCSI-TV and Filesystem Investigator
      • SINTRAN boot or "ENTER-DIRECTORY" for DISC-SCSI-1 fails, so there are still some details that need to be fixed.
      • The goal is to have a working SCSI interface so ND-100 can boot directly from images dumped from SCSI drives.
    • ND-500 controller
      • Added skeleton for PCB 3022 [3], the ND-500 interface
      • CONFIGURE detects the new controller, but I have not implemented any logic inside
      • Looking for documentation details on this controller as I am unable to find any.

ND-100 Running in the browser

    • Working on making the emulator(s) working in the browser by compiling C# to WebAssembly
    • CPU is running nicely, working on giving access to IO devices
    • You can test by going to https://retrocore.hackercorp.no/ and selecting machine=ND100 then powering on the Emulator.
    • Feedback, comments, and help is much appreciated
      • I am able to mount HDD for code running in the browser, but booting and running SINTRAN is painfully slow. So maybe not so good idea to do that..

Open Source

  • When I have a stable working version, I am planning to put the source code on GitHub under a BSD License. Then everyone can look at the code, modify it or just run it.
  • I have been playing with the idea on porting my C# code to C - when its stable. And integrate it in the SIMH projects [4]. For this I may need help :)
    • I just found out that there exists and ND-100 emulator in OPEN-SIMH written in C by "Ragge". It is not 100% complete, lacking some opcodes, complete MMU and some devices - so you cannot boot Sintran (yet..) - https://github.com/open-simh/simh/tree/master/ND100

ND-110 Emulator

MicroCode with syntax highlighting
  • ND-110 MicroCode CPU
    • Creating a new CPU emulator at the MicroCode level to teach me more about the internals of the opcodes, but also to (hopefully) help me identify "features" in my ND-100 Emulator
      • Everything is written in C#/.NET7
      • MicroCode compiler works.
      • MicroCode retrieved from PDF document using OCR techniques mixed with some "text washing" gives me a file with 16600 lines of microcode I manually have validate against the PDF. After retriving a copy of a ROM for a ND-110 cpu board, I could compare the compiled result with the ROM and found 150+ errors in the source file. Now that is fixed, and the compiled microcode is identical to the ROM.
      • MicroCode CPU working. I have implemented registers, ALU (actually its 4x Am2901 chips) and interrupts (Am2914 chip)
      • Macro code execution work.
      • Interrupts and traps "somewhat" works. Still need improvement
      • Memory management is "copied" from ND-100 emulator, but needs to be re-written to match ND-110/ND-120 hw
      • This CPU is definitively slower than the ND-100 emulator, but hopefully behave 100% like the original. This way I can verify behavior differences between the ND-100 opcodes and the ND-110 opcodes.
      • If you want to test the emulator/debugger, its available at https://nd110.hackercorp.no/
  • ND-120 MicroCode CPU
    • Extended the ND-110 MicroCode CPU to work with ND-120 microcode.
      • Microcode almost identical, there are a few bits that has been negated and needs to be handled when reading the PROM
      • Different UART than ND-100 and ND-110, so support for this has been implemented
      • OpCom works, so I can communicate via console.
      • There are other differences, I am guessing in the interrupt subsystem. Consequence is that I cant start programs like INSTRUCTION verify, it just hangs.

ND-120 Emulator

  • ND-120 FPGA CPU
    • Creating a new CPU emulator at hardware level using the original design documents from 1988
      • Draw the digital logic using Logisim Evolution.
        • Finished : CGA (CPU Gate Array). Verilator test code generated, more testcases needed.
        • Finished : DGA (Decoder Gate Array). Verilator test code generated, more testcases needed.
        • Finished : CPU BOARD PCB 3202D - Does require some manual work directly in the generated Verilog files as Logisim doesn't handle pins that are both IN and OUT.
        • Work in progress : PAL's and some special chips (like RAM and UART).
        • I have secured a dump of the microcode from EPROM on a real ND-120 CPU.
      • Convert the schematics to Verilog (Built in functionality in Logisim).
      • Make test programs using Verilator to test the logic, then program that into an FPGA HW Device to test.
      • Development is done in the open, check out https://github.com/RonnyA/nd-120
      • Help is much appreciated as I am new to Verilog and FPGA programming
      • When the complete CPU PCB (with CGA and DGA) is finished in Verilog, with serial port access to OPCOM the next step is to implement support for IO devices like floppy and harddrive.

ND Controller card Emulator

  • Controller card for HDD emulated in hardware FPGA
    • Today you need an real working HDD or an MFM emulator with MFM controller card in an ND machine to boot.
      • I bought this MFM Emulator and worked with the person that made the device, and he was very helpful to extend the code it so the MFM emulator is now able to read and write ND Micropolis MFM disks.
    • If you have an SCSI controller you need a working SCSI HDD or an SCSI HDD emulator.
    • This project aims to solve this by emulating a real controller using FPGA, and having the "HDD DISK" as an image on a SD card.
    • Emulation of floppy controller is also planned.
    • This way we will be able to run test programs and boot ND hardware that doesn't have working disk/disk-controllers.

TDV 2215 Emulator

TDV2215 booting with error
  • Creating an emulator of the TDV2215 terminal.
    • Using the original schematics, an emulated 8085 CPU and ROM dumps from an original TDV.
    • The ROM code does some HW validation and fails with "ERROR NO.: qt" -There are multiple areas it can fail: Z80SIO UART emulation, Interrupt handling and memory mapping.
    • I am still working on mapping the original HW to my emulator.
    • Using Ghidra to reverse engineer the ROM code, but its hard to understand what the ROM code really tries to do, and why it fails. Having had the source code with comments would have been helpful :)
    • YouTube video showing boot here: [5]


  • Added TD2200 support directly in the emulators "graphic" mode
    • Decoding ESC sequences and sending ESQ sequences based on TDV manuals describing some of them. Adding in som VT100 emulation to make the rest work. Mapping special keys (arrow keys) to send ESC codes.
    • YouTube video showing TDV emulation running S3-CONF program under SINTRAN [6]


ND-110 Compact

I have beeen so lucky that I have gotten a real ND-110/CX Compact with the following HW configuration

PCB Description Print
SLOT ID PCB Description Print and ECO
12 324113 PCB 3042 1 MB Memory Print A ECO D
11 322623 PCB 3023 ND100 MEGALINK IF Print D ECO K
10 324534 PCB 3094 ETHERNET IF. II Print C
9 324011 PCB 3111 8 TERM IF W/FIFO Print C
8 324012 PCB 3112 8" + 5 1/4 FLOPPY Print B
7 322671 PCB 3041 N-100 ST 506 DISK CONTR. Print E ECO K
6 322623 PCB 3023 ND100 MEGALINK IF Print D ECO K
5 322623 PCB 3023 ND100 MEGALINK IF Print D ECO G
4 322615 PCB 3015 ND100 HDLC W/A.LO Print <unknown>
3 322615 PCB 3015 ND100 HDLC W/A.LO. Print S ECO V
2 324137 PCB 3090 ND110 - CPU&MM 32B Print K ECO R
1 322672 PCB 3042 N100 2MB RAM Print A ECO D

The machine also has a Micropolis 1325 ST506 74MB drive. Sadly there is some issues with reading data from it.

  • Reading head 0-3 works on all tracks
  • Reading head 4-7 fails on all tracks with error "Address mismatch"

After buying an MFM emulator from [7] and getting help and support, including firmware extension to identify and read ND disk format I have been able to partially dump the contents of the disk. The challenge is that the heads 4-7 is reading the "next" track because they are misaligned - and I need to add some HW to try to make the disk adjust how it reads it heads - as described here [8]

Using the MFM emulator I am now able to boot the ND-100/CX machine from an disk image I have prepared in my emulator.

I also got a TDV 1200 terminal, which upon startup had a capacitor in the powersupply to burn. I have replaced the capacitors in the powersupply, but there is some unstability that I believe is related to heat (read:old chips - or more capacitors that needs to be replaced) Short YouTube video showing the problem: [9]

To connect to the ND machine I use a serial-to-current loop adapter i bought from Mouser. [10]


ND-100 Satellite

I recently inherited a ND-100 Satellite [11] that I am trying to get into working condition. The MFM HDD seems to be completely filled with bad sectors, so I am unsure if I can recover that - I will try to get it to boot from an MFM emulator


Sources