I've setup the PDP11 emulator (built make pdp11 from commit a1f57fa) with 2.11 BSD. I'm running on a pi5 with Raspberry Pi OS trixie.
When downloading files via sz (2.11 BSD) -> zmodem + minicom (pi5), I get the full expected speeds:
Bytes received: 7168/ 54407 BPS:945 ETA 00:49
When uploading files via zmodem + minicom (pi5) -> rz (2.11 BSD), I get around 120 bytes/s. It's hard to show the text of this because these files are small enough to fit entirely in simh's TCP receive queue, but here's a quick shell script to watch simh consume the TCP data:
$ while :; do netstat -nt; sleep 1; done | awk '($4 == "127.0.0.1:4001") { print $2, last-$2; last=$2 }'
18635 -18635
17912 723
17912 0
17912 0
17671 241
17671 0
17671 0
17671 0
17430 241
17430 0
17430 0
17430 0
17189 241
17189 0
17189 0
17189 0
16707 482
15984 723
15984 0
15984 0
15984 0
15743 241
15743 0
15743 0
15743 0
15502 241
15502 0
15502 0
15502 0
15261 241
15261 0
15261 0
14538 723
14297 241
14056 241
14056 0
14056 0
14056 0
13815 241
13815 0
13815 0
13815 0
13574 241
13574 0
13574 0
13574 0
13333 241
13333 0
12610 723
12369 241
12369 0
12128 241
12128 0
12128 0
12128 0
11887 241
11887 0
11887 0
11887 0
11646 241
11646 0
11646 0
11646 0
11405 241
socat command to connect minicom to the emulator:
socat -d -d pty,raw,echo=0,link=/tmp/ttyV0 tcp:localhost:4001
minicom command:
full build output:
lib paths are: /lib/ /lib/aarch64-linux-gnu/ /usr/lib/aarch64-linux-gnu/libfakeroot/ /usr/local/lib/ /usr/lib/
include paths are: /usr/lib/gcc/aarch64-linux-gnu/14/include /usr/local/include /usr/include/aarch64-linux-gnu /usr/include
using libm: /lib/aarch64-linux-gnu/libm.so
using librt: /lib/aarch64-linux-gnu/librt.a
using libpthread: /lib/aarch64-linux-gnu/libpthread.a /usr/include/pthread.h
using libpcre2-8: /lib/aarch64-linux-gnu/libpcre2-8.so /usr/include/pcre2.h
using semaphore: /usr/include/semaphore.h
using libdl: /lib/aarch64-linux-gnu/libdl.a /usr/include/dlfcn.h
using libedit: /usr/include/editline/readline.h
using libpng: /lib/aarch64-linux-gnu/libpng.so /usr/include/png.h
using zlib: /lib/aarch64-linux-gnu/libz.so /usr/include/zlib.h
using mman: /usr/include/aarch64-linux-gnu/sys/mman.h
using libSDL2: /usr/include/SDL2/SDL.h
*** No SDL ttf support available. BESM-6 video panel disabled.
***
*** Info *** Install the development components of libSDL2-ttf
*** Info *** packaged for your Linux operating system distribution:
*** Info *** $ sudo apt-get install libsdl2-ttf-dev
using libpcap: /usr/include/pcap.h
using libvdeplug: /lib/aarch64-linux-gnu/libvdeplug.so /usr/include/libvdeplug.h
***
*** pdp11 Simulator being built with:
*** - compiler optimizations and no debugging support. GCC Version: 14.2.0.
*** - dynamic networking support using Linux provided libpcap components.
*** - Local LAN packet transports: PCAP VDE TAP NAT(SLiRP)
*** - video capabilities provided by libSDL2 (Simple Directmedia Layer).
*** - Per simulator tests will be run.
***
*** git commit id is a1f57fa3738ed31148d31126ba1a7278ff845c6d.
*** git commit time is 2026-07-03T13:48:11+0200.
***
gcc -std=gnu99 -U__STRICT_ANSI__ -O2 -DNDEBUG=1 -finline-functions -fgcse-after-reload -fpredictive-commoning -fipa-cp-clone -fno-unsafe-loop-optimizations -fno-strict-overflow -DSIM_GIT_COMMIT_ID=a1f57fa3738ed31148d31126ba1a7278ff845c6d -DSIM_GIT_COMMIT_TIME=2026-07-03T13:48:11+0200 -DSIM_COMPILER="GCC Version: 14.2.0" -DSIM_BUILD_TOOL=simh-makefile -I . -Werror -D_GNU_SOURCE -DHAVE_PCRE2_H -DHAVE_SEMAPHORE -DHAVE_SYS_IOCTL -DHAVE_LINUX_CDROM -DSIM_HAVE_DLOPEN=so -DHAVE_EDITLINE -DHAVE_UTIME -DHAVE_LIBPNG -DHAVE_ZLIB -DHAVE_GLOB -DHAVE_SHM_OPEN ./PDP11/pdp11_fp.c ./PDP11/pdp11_cpu.c ./PDP11/pdp11_dz.c ./PDP11/pdp11_cis.c ./PDP11/pdp11_lp.c ./PDP11/pdp11_rk.c ./PDP11/pdp11_rl.c ./PDP11/pdp11_rp.c ./PDP11/pdp11_rx.c ./PDP11/pdp11_stddev.c ./PDP11/pdp11_sys.c ./PDP11/pdp11_tc.c ./PDP11/pdp11_tm.c ./PDP11/pdp11_ts.c ./PDP11/pdp11_io.c ./PDP11/pdp11_rq.c ./PDP11/pdp11_tq.c ./PDP11/pdp11_pclk.c ./PDP11/pdp11_ry.c ./PDP11/pdp11_pt.c ./PDP11/pdp11_hk.c ./PDP11/pdp11_xq.c ./PDP11/pdp11_xu.c ./PDP11/pdp11_vh.c ./PDP11/pdp11_rh.c ./PDP11/pdp11_tu.c ./PDP11/pdp11_cpumod.c ./PDP11/pdp11_cr.c ./PDP11/pdp11_rf.c ./PDP11/pdp11_dl.c ./PDP11/pdp11_ta.c ./PDP11/pdp11_rc.c ./PDP11/pdp11_kg.c ./PDP11/pdp11_ke.c ./PDP11/pdp11_dc.c ./PDP11/pdp11_dmc.c ./PDP11/pdp11_kmc.c ./PDP11/pdp11_dup.c ./PDP11/pdp11_rs.c ./PDP11/pdp11_vt.c ./PDP11/pdp11_td.c ./PDP11/pdp11_io_lib.c ./PDP11/pdp11_rom.c ./PDP11/pdp11_ch.c ./PDP11/pdp11_dh.c ./PDP11/pdp11_ng.c ./PDP11/pdp11_daz.c ./PDP11/pdp11_tv.c ./PDP11/pdp11_mb.c ./PDP11/pdp11_rr.c ./display/display.c ./display/sim_ws.c ./display/ng.c ./display/vt11.c ./scp.c ./sim_console.c ./sim_fio.c ./sim_timer.c ./sim_sock.c ./sim_tmxr.c ./sim_ether.c ./sim_tape.c ./sim_disk.c ./sim_serial.c ./sim_video.c ./sim_imd.c ./sim_card.c -DVM_PDP11 -I ./PDP11 -DHAVE_PCAP_NETWORK -I/usr/include/ -DBPF_CONST_STRING -DUSE_SHARED -DHAVE_VDE_NETWORK -DHAVE_TAP_NETWORK -Islirp -Islirp_glue -Islirp_glue/qemu -DHAVE_SLIRP_NETWORK -DUSE_SIMH_SLIRP_DEBUG slirp/*.c slirp_glue/*.c -DUSE_DISPLAY -DHAVE_LIBSDL -DUSE_SIM_VIDEO `sdl2-config --cflags` `sdl2-config --libs` -DUSE_READER_THREAD -DSIM_ASYNCH_IO -o BIN/pdp11 -lm -lrt -lpthread -lpcre2-8 -ldl -ledit -ltermcap -lpng -lz -lvdeplug -Wl,-R,/lib/aarch64-linux-gnu/ -L/lib/aarch64-linux-gnu/
BIN/pdp11 RegisterSanityCheck </dev/null
Running internal register sanity checks on PDP-11 simulator.
*** Good Registers in PDP-11 simulator.
SHOW VERSION output:
sim> show version
PDP-11 simulator Open SIMH V4.1-0 Current
Simulator Framework Capabilities:
32b data
32b addresses
Threaded Ethernet Packet transports:PCAP:TAP:VDE:NAT:UDP
Idle/Throttling support is available
Virtual Hard Disk (VHD) support
RAW disk and CD/DVD ROM support
Asynchronous I/O support (Lock free asynchronous event queue)
Asynchronous Clock support
FrontPanel API Version 12
Host Platform:
Compiler: GCC 14.2.0
Simulator Compiled as C (Release Build) on Aug 1 2026 at 22:20:39
Build Tool: simh-makefile
Memory Access: Little Endian
Memory Pointer Size: 64 bits
Large File (>2GB) support
SDL Video support: SDL Version 2.32.4, PNG Version 1.6.48, zlib: 1.3.1
PCRE2 RegEx (Version 10.46) support for EXPECT commands
OS clock resolution: 1ms
Time taken by msleep(1): 1ms
Ethernet packet info: libpcap version 1.10.5 (with TPACKET_V3)
OS: Linux pi5.lan 6.18.33+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.18.33-1+rpt1 (2026-06-01) aarch64 GNU/Linux
Processor Name: Cortex-A76
tar tool: tar (GNU tar) 1.35
curl tool: curl 8.14.1 (aarch64-unknown-linux-gnu) libcurl/8.14.1 OpenSSL/3.5.6 zlib/1.3.1 brotli/1.1.0 zstd/1.5.7 libidn2/2.3.8 libpsl/0.21.2 libssh2/1.11.1 nghttp2/1.64.0 nghttp3/1.8.0 librtmp/2.3 OpenLDAP/2.6.10
git commit id: a1f57fa3
git commit time: 2026-07-03T13:48:11+0200
my boot.ini:
set cpu 11/70 4096K fpp idle
set clk 60hz
set tto 8b
set rq ena
set rq0 rauser=1000
att rq0 2.11BSD_rq.dsk
set dz ena
set dz lines=8
set dz 8b
att dz 127.0.0.1:4000
att dz -am line=5,127.0.0.1:4001;notelnet
att dz -am line=7,127.0.0.1:1108;notelnet
set tq ena
att -R tq0 -F TAR pine-0dc9f7e6209a1e62a7f1882df2ffb6048414dd58.tar
set dz vector=310
boot rq0
Digging into what may be causing this, my theory is the DZ driver only adds 1 byte to the queue at every driver interrupt (dz_update_rcvi) and 2.11 BSD is only polling at ~100Hz. I have never used the actual hardware, but my assumption is that the actual DZ hardware would be placing bytes into the silo as they arrived, asynchronously until the silo was full. I am interested to hear if my assumption is flawed.
I have a patch to simulate multiple bytes per port per poll - is there any interest in testing that out? It fixes the zmodem uploads for me.
I've setup the PDP11 emulator (built
make pdp11from commit a1f57fa) with 2.11 BSD. I'm running on a pi5 with Raspberry Pi OS trixie.When downloading files via sz (2.11 BSD) -> zmodem + minicom (pi5), I get the full expected speeds:
When uploading files via zmodem + minicom (pi5) -> rz (2.11 BSD), I get around 120 bytes/s. It's hard to show the text of this because these files are small enough to fit entirely in simh's TCP receive queue, but here's a quick shell script to watch simh consume the TCP data:
socat command to connect minicom to the emulator:
minicom command:
full build output:
SHOW VERSIONoutput:my boot.ini:
Digging into what may be causing this, my theory is the DZ driver only adds 1 byte to the queue at every driver interrupt (dz_update_rcvi) and 2.11 BSD is only polling at ~100Hz. I have never used the actual hardware, but my assumption is that the actual DZ hardware would be placing bytes into the silo as they arrived, asynchronously until the silo was full. I am interested to hear if my assumption is flawed.
I have a patch to simulate multiple bytes per port per poll - is there any interest in testing that out? It fixes the zmodem uploads for me.