All Projects → aap → pdp6

aap / pdp6

Licence: MIT license
PDP-6 Emulator

Programming Languages

c
50402 projects - #5 most used programming language
Verilog
626 projects
SourcePawn
201 projects
pascal
1382 projects
assembly
5116 projects
Makefile
30231 projects

Projects that are alternatives of or similar to pdp6

EDSAC
FPGA Verilog implementation of 1949 EDSAC Computer with animated tape reader, panel, teleprinter and CRT scope
Stars: ✭ 28 (-40.43%)
Mutual labels:  fpga, emulation, verilog, retrocomputing
Higan Verilog
This is a higan/Verilator co-simulation example/framework
Stars: ✭ 35 (-25.53%)
Mutual labels:  fpga, emulation, verilog
clash-compucolor2
Clash implementation of the Compucolor II home computer
Stars: ✭ 25 (-46.81%)
Mutual labels:  fpga, retrocomputing
drec-fpga-intro
Materials for "Introduction to FPGA and Verilog" at MIPT DREC
Stars: ✭ 66 (+40.43%)
Mutual labels:  fpga, verilog
gateware-ts
Hardware definition library and environment for designing and building digital hardware for FPGAs, using only open source tools
Stars: ✭ 83 (+76.6%)
Mutual labels:  fpga, verilog
ics-adpcm
Programmable multichannel ADPCM decoder for FPGA
Stars: ✭ 18 (-61.7%)
Mutual labels:  fpga, verilog
Hard-JPEG-LS
FPGA-based JPEG-LS image compressor.
Stars: ✭ 52 (+10.64%)
Mutual labels:  fpga, verilog
cnn open
A hardware implementation of CNN, written by Verilog and synthesized on FPGA
Stars: ✭ 157 (+234.04%)
Mutual labels:  fpga, verilog
FPGA ThreeLevelStorage
【原创,已被编入官方教材】Three-level storage subsystem(SD+DDR2 SDRAM+Cache), based on Nexys4 FPGA board. 同济大学计算机系统结构课程设计,FPGA三级存储子系统。
Stars: ✭ 86 (+82.98%)
Mutual labels:  fpga, verilog
sphinxcontrib-hdl-diagrams
Sphinx Extension which generates various types of diagrams from Verilog code.
Stars: ✭ 37 (-21.28%)
Mutual labels:  fpga, verilog
spu32
Small Processing Unit 32: A compact RV32I CPU written in Verilog
Stars: ✭ 51 (+8.51%)
Mutual labels:  fpga, verilog
verilog-sid-mos6581
MOS6581 SID chip emulator in SystemVerilog
Stars: ✭ 22 (-53.19%)
Mutual labels:  fpga, verilog
yahdl
A programming language for FPGAs.
Stars: ✭ 20 (-57.45%)
Mutual labels:  fpga, verilog
xeda
Cross EDA Abstraction and Automation
Stars: ✭ 25 (-46.81%)
Mutual labels:  fpga, verilog
SpinalCrypto
SpinalHDL - Cryptography libraries
Stars: ✭ 36 (-23.4%)
Mutual labels:  fpga, verilog
yafpgatetris
Yet Another Tetris on FPGA Implementation
Stars: ✭ 29 (-38.3%)
Mutual labels:  fpga, verilog
platform-lattice ice40
Lattice iCE40: development platform for PlatformIO
Stars: ✭ 34 (-27.66%)
Mutual labels:  fpga, verilog
async fifo
A dual clock asynchronous FIFO written in verilog, tested with Icarus Verilog
Stars: ✭ 117 (+148.94%)
Mutual labels:  fpga, verilog
vga-clock
Show the time on a VGA monitor. Submitted for the Google MPW1 ASIC shuttle.
Stars: ✭ 48 (+2.13%)
Mutual labels:  fpga, verilog
vscode-terosHDL
VHDL and Verilog/SV IDE: state machine viewer, linter, documentation, snippets... and more!
Stars: ✭ 325 (+591.49%)
Mutual labels:  fpga, verilog

PDP-6 Emulator and Verilog Simulation

This project aims to revive the PDP-6 (and later PDP-10) computers by DEC.

I started by writing a very low level emulator in C based on the schematics. Later I also wrote an accurate verilog simulation that also works on an FPGA.

Both are driven by a virtual front panel but the plan is to create a replica of the original panel.

The maintenance manual has flow charts, schematics and explanations: Volume1 Volume2

Screenshot of the front panel

C Emulator

The code is more or less a transcription of the schematics into C. This means you will not understand it unless you're familiar with the maintenance manual. Pulses are represented as functions, when a pulse triggers another pulse it does so by the pulse function which queues a pulse in a list of pulses that are to happen, sorted chronologically. Between pulses that happen at different times various things are done like checking external pulses and advancing the simulation state. The timing is not yet 100% accurate but it's pretty close.

Building

The supplied makefile assumes gcc (there are flags to silence some stupid warnings). Otherwise you need SDL and pthread.

Running

The cpu (apr), console tty, paper tape and punch, the data control and DECtape are implemented. 340 display is also sort of working. The panel is missing the repeat delay knobs, but the functionality is implemented.

Verilog Simulation

The verilog code is a very accurate transcription of the schematics as well. Since the real machine is asynchronous I had to pull some tricks to make it work on an FPGA. The real machine uses delays that are triggered by pulses and output another pulse after some time. Instead of pulses I use clock enables, and delays are implemented by a counter synchronized to the 50MHz system clock.

FPGA

I'm using a DE0-Nano-SoC with has an ARM hps connected to the Cyclone V FPGA. On the ARM side runs fe6 (a DDT-like interface) which communicates with the FPGA through memory mapped IO registers. The quartus project is not yet part of this repo but the important modules are in the verilog directory.

File tree

NB: not up to date

emu	the C emulator
emu/main_panel.c	main file for emulator with panel simulation
emu/main_serial.c	main file for emulator with panel over serial line
emu/emu.c	top level emulator code
emu/cmd.c	command line interface
emu/apr.c	Arithmetic Processor 166 emulation
emu/mem.c	core and fast memory emulation
emu/tty.c	Teleprinter 626 emulator
emu/pt.c	Paper tape reader 760 and punch 761 emulation
emu/dc.c	Data Control 136 emulation
emu/dt.c	DECtape 551 and 555 emulation
emu/netmem.c	network protocol for shared memory
emu/util.c	various utility functions
emu/util.h
emu/test_*.c	test code, not too important anymore
emu/pdp6.h	main header
emu/args.h	argument parsing
emu/elements.inc	panel definition
emu/cmds.txt	command line interface documentation
emu/init.ini	emulator init file
emu/mem_*	core memory backing store

tools
tools/dtr2dta.c	convert between raw (dtr) and simh (dta) DECtape format
tools/mkpty.c	make a pty and connect to the controlling tty
tools/mkpty33.c	as above but try to pretend an ASR33
tools/as6.c	an assembler, roughly modeled on MACRO
tools/ld6.c	a loader or relocatable files
tools/pdp6bin.h
tools/pdp6common.c	useful functions for PDP-6 code
tools/pdp6common.h
tools/rel.c	I have no recollection of this code
tools/reltest.c	old test code to create a REL file
tools/test.s	old test code for the assembler/linker
tools/test2.s
tools/ptdump.c	print a paper tape file in octal
tools/dtdump.c	print dtr DECtape

verilog
verilog/...	fpga stuff

code	random code for the PDP-6, mostly testing
code/bootstrap.txt	a list of boot loaders
code/dtboot.s		loads the first block from a DECtape
code/main.s		random entry
code/tty.s		tty character IO

panel	stand alone panel with lots of duplicate code

art	image files for the panel

misc	nothing important

To do

  • repeat and maint. switches on panel
  • improve timing
  • do more tests
  • ...
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].