SIMH 3.9-0 released!

And among the changes …

scp.c:

  • added *nix READLINE support (Mark Pizzolato)
  • fixed handling of DO with no arguments (Dave Bryan)
  • fixed “SHOW DEVICE” with only one enabled unit (Dave Bryan)
  • clarified some help messages (Mark Pizzolato)
  • added “SHOW SHOW” and “SHOW <dev> SHOW” commands (Mark Pizzolato)
  • fixed bug in deposit stride for numeric input (John Dundas)

sim_console.c

  • added support for BREAK key on Windows (Mark Pizzolato)

sim_ether.c

  • major revision (Dave Hittner and Mark Pizzolato)
  • fixed array overrun which caused SEGFAULT on hosts with many devices which libpcap can access.
  • fixed duplicate MAC address detection to work reliably on switch connected LANs

sim_tmxr.c:

  • made telnet option negotiation more reliable, VAX simulator now works with PuTTY as console (Mark Pizzolato)

h316_cpu.c:

  • fixed bugs in MPY, DIV introduced in 3.8-1 (from Theo Engel)
  • fixed bugs in double precision, normalization, SC (from Adrian Wise)
  • fixed XR behavior (from Adrian Wise)

hp2100 all peripherals (Dave Bryan):

  • Changed I/O signal handlers for newly revised signal model
  • Deprecated DEVNO modifier in favor of SC

hp2100_cpu.c (Dave Bryan):

  • Minor speedup in “is_mapped”
  • Added casts to cpu_mod, dmasio, dmapio, cpu_reset, dma_reset
  • Fixed I/O return status bug for DMA cycles
  • Failed I/O cycles now stop on failing instruction
  • Revised DMA for new multi-card paradigm
  • Consolidated DMA reset routines
  • DMA channels renamed from 0,1 to 1,2 to match documentation
  • Changed I/O instructions, handlers, and DMA for revised signal model
  • Changed I/O dispatch table to use DIB pointers
  • Removed DMA latency counter
  • Fixed DMA requests to enable stealing every cycle
  • Fixed DMA priority for channel 1 over channel 2
  • Corrected comments for “cpu_set_idle”

hp2100_cpu.h:

  • Changed declarations for VMS compiler

hp2100_cpu0.c (Dave Bryan):

  • Removed DS note regarding PIF card (is now implemented)

hp2100_cpu4.c (Dave Bryan):

  • Added OPSIZE casts to fp_accum calls in .FPWR/.TPWR

hp2100_cpu5.c (Dave Bryan):

  • Added sign extension for dim count in “cpu_ema_resolve”
  • Eliminated unused variable in “cpu_ema_vset”

hp2100_cpu6.c (Dave Bryan):

  • DMA channels renamed from 0,1 to 1,2 to match documentation

hp2100_cpu7.c (Dave Bryan):

  • Corrected “opsize” parameter type in vis_abs

hp2100_defs.h (Dave Bryan):

  • Added hp_setsc, hp_showsc functions to support SC modifier
  • DMA channels renamed from 0,1 to 1,2 to match documentation
  • Revised I/O signal enum values for concurrent signals
  • Revised I/O macros for new signal handling
  • Added DA and DC device select code assignments

hp2100_di.c, hp2100_di.h (Dave Bryan):

  • Implemented 12821A HP-IB Disc Interface

hp2100_di_da.c (Dave Bryan):

  • Implemented 7906H/20H/25H ICD disc drives

hp2100_dp.c (Dave Bryan):

  • Added CNTLR_TYPE cast to dp_settype

hp2100_ds.c (Dave Bryan):

  • Rewritten to use the MAC/ICD disc controller library
  • ioIOO now notifies controller service of parameter output
  • Corrected SRQ generation and FIFO under/overrun detection
  • Corrected Clear command to conform to the hardware
  • Fixed Request Status to return Unit Unavailable if illegal
  • Seek and Cold Load Read now Seek Check if seek in progress
  • Remodeled command wait for seek completion
  • Corrected status returns for disabled drive, auto-seek beyond drive limits, Request Sector Address and Wakeup with invalid or offline unit
  • Address verification reenabled if auto-seek during
  • Read Without Verify

hp2100_fp1.c (Dave Bryan):

  • Added missing precision on constant “one” in fp_trun
  • Completed the comments for divide; no code changes

hp2100_ipl.c (Dave Bryan):

  • Added CARD_INDEX casts to dib.card_index
  • A failed STC may now be retried
  • Consolidated reporting of consecutive CRS signals
  • Revised for new multi-card paradigm

hp2100_lps.c (Dave Bryan):

  • Revised detection of CLC at last DMA cycle
  • Corrected 12566B (DIAG mode) jumper settings

hp2100_ms.c (Dave Bryan):

  • Added CNTLR_TYPE cast to ms_settype

hp2100_mt.c (Dave Bryan):

  • Removed redundant MTAB_VUN from “format” MTAB entry
  • Fixed command scanning error in mtcio ioIOO handler

hp2100_stddev.c (Dave Bryan):

  • Add TBG as a logical name for the CLK device

hp2100_sys.c (Dave Bryan):

  • Deprecated DEVNO in favor of SC
  • Added hp_setsc, hp_showsc functions to support SC modifier
  • Added DA and dummy DC devices
  • DMA channels renamed from 0,1 to 1,2 to match documentation
  • Changed DIB access for revised signal model

hp_disclib.c, hp_disclib.h (Dave Bryan)

  • Created MAC/ICD disc controller library

i1401_cd.c:

  • fixed read stacker operation in column binary mode
  • fixed punch stacker operation (Van Snyder)

id_pas.c:

  • fixed TT_GET_MODE test to use TTUF_MODE_x (Michael Bloom)
  • revised to use clock coscheduling

id_tt.c, id_ttc.p:

  • revised to use clock coscheduling

id_uvc.c:

  • added clock coscheduling routine

1401_cpu.c:

  • reverted multiple tape indicator implementation
  • fixed EOT indicator test not to clear indicator (Van Snyder)
  • fixed divide not to clear word marks in quotient (Van Snyder)
  • revised divide algorithm (Van Snyder)

i1401_mt.c:

  • reverted multiple tape indicator implementation
  • fixed END indicator test not to clear indicator (Van Snyder)
  • fixed backspace over tapemark not to set EOR (Van Snyder)
  • added no rewind option (Van Snyder)

i1401_sys.c:

  • fixed misuse of & instead of && in decode (Peter Schorn)

pdp1_cpu.c:

  • fixed misuse of & instead of && in Ea_ch (Michael Bloom)

pdp1_stddev.c:

  • fixed unitialized variable in tty output service (Michael Bloom)

pdp10_fe.c:

  • revised to use clock coscheduling

pdp11_defs.h:

  • fixed priority of PIRQ vs IO; added INT_INTERNALn

pdp11_io.c:

  • fixed Qbus interrupts to treat all IO devices (except clock) as BR4
  • fixed order of int_internal (Jordi Guillaumes i Pons)

ppd11_rf.c

  • fixed bug in updating mem addr extension (Peter Schorn)

pdp11_rk.c:

  • fixed bug in read header (Walter F Mueller)

pdp11_rl.c:

  • added debug support

pdp11_rq.c:

  • added RD32 support

pdp11_tq.c: (Mark Pizzolato)

  • set UNIT_SXC flag when a tape mark is encountered during forward motion read operations
  • fixed logic which clears UNIT_SXC to check command modifier
  • added CMF_WR flag to tq_cmf entry for OP_WTM
  • made non-immediate rewind positioning operations take 2 seconds
  • added UNIT_IDLE flag to tq units.
  • fixed debug output of tape file positions when they are 64b
  • added more debug output after positioning operations
  • added textual display of the command being performed
  • fixed comments about register addresses

pdp11_ts.c:

  • fixed t_addr printouts for 64b big-endian systems (Mark Pizzolato)

pdp11_tu.c:

  • fixed t_addr printouts for 64b big-endian systems (Mark Pizzolato)

pdp11_vh.c: (Mark Pizzolato)

  • fixed SET VH LINES=n to correctly adjust the number of lines available to be 8, 16, 24, or 32.
  • fixed performance issue avoiding redundant polling

pdp11_xq.c: (Mark Pizzolato)

  • Fixed missing information from save/restore which caused operations to not complete correctly after a restore until the OS reset the controller.
  • Added address conflict check during attach.
  • Fixed loopback processing to correctly handle forward packets.
  • Fixed interrupt dispatch issue which caused delivered packets (in and out) to sometimes not interrupt the CPU after processing.
  • Fixed the SCP visibile SA registers to always display the ROM mac address, even after it is changed by SET XQ MAC=.
  • Added changes so that the Console DELQA diagnostic (>>>TEST 82) will succeed.
  • Added DELQA-T (aka DELQA Plus) device emulation support.
  • Added dropped frame statistics to record when the receiver discards received packets due to the receiver being disabled, or due to the XQ device’s packet receive queue being full.
  • Fixed bug in receive processing when we’re not polling. This could cause receive processing to never be activated again if we don’t read all available packets via eth_read each time we get the opportunity.
  • Added the ability to Coalesce received packet interrupts. This is enabled by SET XQ POLL=DELAY=nnn where nnn is a number of microseconds to delay the triggering of an interrupt when a packet is received.
  • Added SET XQ POLL=DISABLE (aka SET XQ POLL=0) to operate without polling for packet read completion.
  • Changed the sanity and id timer mechanisms to use a separate timer unit so that transmit and recieve activities can be dealt with by the normal xq_svc routine.
  • Dynamically determine the timer polling rate based on the calibrated tmr_poll and clk_tps values of the simulator.
  • Enabled the SET XQ POLL to be meaningful if the simulator currently doesn’t support idling.
  • Changed xq_debug_setup to use sim_debug instead of printf so that all debug output goes to the same place.
  • Restored the call to xq_svc after all successful calls to eth_write to allow receive processing to happen before the next event service time. This must have been inadvertently commented out while other things were being tested.

pdp11_xu.c: (Mark Pizzolato)

  • Added SHOW XU FILTERS modifier (Dave Hittner)
  • Corrected SELFTEST command, enabling use by VMS 3.7, VMS 4.7, and Ultrix 1.1 (Dave Hittner)
  • Added address conflict check during attach.
  • Added loopback processing support
  • Fixed the fact that no broadcast packets were received by the DEUNA
  • Fixed transmitted packets to have the correct source MAC address.
  • Fixed incorrect address filter setting calling eth_filter().

pdp18b_stddev.c:

  • added clock coscheduling
  • revised TTI to use clock coscheduling and to fix perpetual CAF bug

pdp18b_ttx.c:

  • revised to use clock coscheduling

pdp8_clk.c:

  • added clock coscheduling

pdp8_fpp.c: (Rick Murphy)

  • many bug fixes; now functional

pdp8_tt.c:

  • revised to use clock coscheduling and to fix perpetual CAF bug

pdp8_ttx.c:

  • revised to use clock cosheduling

pdp8_sys.c:

  • added link to FPP

pdp8_td.c:

  • fixed SDLC to clear AC (Dave Gesswein)

sds_mt.c:

  • fixed bug in scan function decode (Peter Schorn)

vax_cpu.c:

  • revised idle design (Mark Pizzolato)
  • fixed bug in SET CPU IDLE
  • fixed failure to clear PSL<tp> in BPT, XFC

vax_cpu1.c:

  • revised idle design Mark Pizzolato)
  • added VEC_QMODE test in interrupt handler

vax_fpa.c:

  • fixed integer overflow bug in EMODx (Camiel Vanderhoeven)
  • fixed POLYx normalizing before add mask bug (Camiel Vanderhoeven)
  • fixed missing arguments in 32b floating add (Mark Pizzolato)

vax_octa.c (Camiel Vanderhoeven)

  • fixed integer overflow bug in EMODH
  • fixed POLYH normalizing before add mask bug

vax_stddev.c:

  • revised to use clock coscheduling

vax_syscm.c:

  • fixed t_addr printouts for 64b big-endian systems (Mark Pizzolato)

vax_sysdev.c:

  • added power clear call to boot routine (Mark Pizzolato)

vax780_sbi.c:

  • added AUTORESTART switch support (Mark Pizzolato)

vax780_stddev.c

  • added REBOOT support (Mark Pizzolato)
  • revised to use clock coscheduling

vaxmod_def.h

  • moved all Qbus devices to BR4; deleted RP definitions

 

As always you can download it from the homepage, or from sourceforge.

Transferring data into CP/M with SIMH

This has been an exersize in insnaity..

So for some strange reason I wanted to load up Zork into SIMH‘s less featured (and much simpler) altair 8080 emulator.  The catch is the disk format which for the life of me I couldn’t get to work in any of the CP/M disk access tools.

The Altair z80 emulator as part of the same SIMH package includes a far more complicated setup, but out of the box it CANNOT read the disk image from the 8080 emulator.  After digging around it seems that one of the ‘approved’ methods of getting stuff into CP/M was to load it into memory, and just save the block (provided it fits in the 64k, more on that later).  The syntax really is quite simple:

load zork1.com 100

And that’ll load it up at the normal program entry point (just like an MS-DOS COM file!)..

Except it doesn’t want to work.

What?

but of course it works on the z80.

No problems here!

Which is great but the z80 can’t read the 8080’s disks..!  So after digging through the source code, I find this small gem that the z8080 has been changed to use a much larger disk size!

#define MAX_TRACKS 254 /* number of tracks,
original Altair has 77 tracks only */

So yes, by changing that to 77 I can now boot off the 8080’s boot disk on the z80!  Of course it also means that I’m unable to ‘see’ the hardisk in the z80, or any of the other great peripherals as no doubt the altair CP/M disk hasn’t been configured for all of these fine things.  I also tried only altering one of the disks on the z80 for 77 tracks, but once more again it seems that CP/M has an everything/nothing type idea for a disk controller.

But the load command works on the monitor, and the Altair CP/M can handle two disks, so its enough for me to format the B: drive ( a copy of the CP/M disks) and work with that.

Once you’ve loaded a program into memory, you toggle back to CP/M and run the ‘save’ command which then dumps how many pages back to disk.

For example, the program STAT is 5,248 bytes in size. 5248/256 = 20.5. Thus, the save command would be:

A>SAVE 21 STAT.COM

Pretty simple, right?  But what happens if you have a file greater than memory?  Well first I thought I could compress it, and I’d forgotten just how many old compression programs there were for CP/M, crunch, arc, zoo, zip … Finding MS-DOS equivalents wasn’t too bad (thanks for dosbox!) but I couldn’t get the 84kb data file into the memory limit, so I figure’d I’d just split the file into something on  a 256 byte boundary.  Loading them into RAM wasn’t too hard, as saving them out.. but how do you join them together on CP/M?  I found PLENTY of utils to split files, but nothing on putting them back together!

On MS-DOS you can just do a copy /B file1+file2 bigfile

But I couldn’t find out how to do this on CP/M until I looked further into the PIP command, CP/M’s answer to copy.

To join a binary file it goes something like this:

>PIP sd.com=sd.001[OV],sd.002[OV],sd.003[OV]

So with all that work, I was now able to create a zork1.dsk that the 8080 emulator is capable of playing!

Zork1 finally loaded on the SIMH Altair 8080

And for the curious, here is Zork1, in the old Altair 77 track format.

 

 

I don’t know how I missed it, but SIMH 3.9-0 was released!

SIMH, is Bob Supniks emulation package that includes:

  • Data General Nova, Eclipse
  • Digital Equipment Corporation PDP-1, PDP-4, PDP-7, PDP-8, PDP-9, PDP-10, PDP-11, PDP-15, VAX
  • GRI Corporation GRI-909, GRI-99
  • IBM 1401, 1620, 1130,  7090/7094, System 3
  • Interdata (Perkin-Elmer) 16b and 32b systems
  • Hewlett-Packard 2114, 2115, 2116, 2100, 21MX, 1000
  • Honeywell H316/H516
  • MITS Altair 8800, with both 8080 and Z80
  • Royal-Mcbee LGP-30, LGP-21
  • Scientific Data Systems SDS 940
  • SWTP 6800
The changes from the previous version are:

0 01-May-2012 scp.c:
– added *nix READLINE support (Mark Pizzolato)
– fixed handling of DO with no arguments (Dave Bryan)
– fixed “SHOW DEVICE” with only one enabled unit (Dave Bryan)
– clarified some help messages (Mark Pizzolato)
– added “SHOW SHOW” and “SHOW <dev> SHOW” commands (Mark Pizzolato)
– fixed bug in deposit stride for numeric input (John Dundas)

sim_console.c
– added support for BREAK key on Windows (Mark Pizzolato)

sim_ether.c
– major revision (Dave Hittner and Mark Pizzolato)
– fixed array overrun which caused SEGFAULT on hosts with many
devices which libpcap can access.
– fixed duplicate MAC address detection to work reliably on switch
connected LANs

sim_tmxr.c:
– made telnet option negotiation more reliable, VAX simulator now
works with PuTTY as console (Mark Pizzolato)

h316_cpu.c:
– fixed bugs in MPY, DIV introduced in 3.8-1 (from Theo Engel)
– fixed bugs in double precision, normalization, SC (from Adrian Wise)
– fixed XR behavior (from Adrian Wise)

hp2100 all peripherals (Dave Bryan):
– Changed I/O signal handlers for newly revised signal model
– Deprecated DEVNO modifier in favor of SC

hp2100_cpu.c (Dave Bryan):
– Minor speedup in “is_mapped”
– Added casts to cpu_mod, dmasio, dmapio, cpu_reset, dma_reset
– Fixed I/O return status bug for DMA cycles
– Failed I/O cycles now stop on failing instruction
– Revised DMA for new multi-card paradigm
– Consolidated DMA reset routines
– DMA channels renamed from 0,1 to 1,2 to match documentation
– Changed I/O instructions, handlers, and DMA for revised signal model
– Changed I/O dispatch table to use DIB pointers
– Removed DMA latency counter
– Fixed DMA requests to enable stealing every cycle
– Fixed DMA priority for channel 1 over channel 2
– Corrected comments for “cpu_set_idle”

hp2100_cpu.h:
– Changed declarations for VMS compiler

hp2100_cpu0.c (Dave Bryan):
– Removed DS note regarding PIF card (is now implemented)

hp2100_cpu4.c (Dave Bryan):
– Added OPSIZE casts to fp_accum calls in .FPWR/.TPWR

hp2100_cpu5.c (Dave Bryan):
– Added sign extension for dim count in “cpu_ema_resolve”
– Eliminated unused variable in “cpu_ema_vset”

hp2100_cpu6.c (Dave Bryan):
– DMA channels renamed from 0,1 to 1,2 to match documentation

hp2100_cpu7.c (Dave Bryan):
– Corrected “opsize” parameter type in vis_abs

hp2100_defs.h (Dave Bryan):
– Added hp_setsc, hp_showsc functions to support SC modifier
– DMA channels renamed from 0,1 to 1,2 to match documentation
– Revised I/O signal enum values for concurrent signals
– Revised I/O macros for new signal handling
– Added DA and DC device select code assignments

hp2100_di.c, hp2100_di.h (Dave Bryan):
– Implemented 12821A HP-IB Disc Interface

hp2100_di_da.c (Dave Bryan):
– Implemented 7906H/20H/25H ICD disc drives

hp2100_dp.c (Dave Bryan):
– Added CNTLR_TYPE cast to dp_settype

hp2100_ds.c (Dave Bryan):
– Rewritten to use the MAC/ICD disc controller library
– ioIOO now notifies controller service of parameter output
– Corrected SRQ generation and FIFO under/overrun detection
– Corrected Clear command to conform to the hardware
– Fixed Request Status to return Unit Unavailable if illegal
– Seek and Cold Load Read now Seek Check if seek in progress
– Remodeled command wait for seek completion
– Corrected status returns for disabled drive, auto-seek
beyond drive limits, Request Sector Address and Wakeup
with invalid or offline unit
– Address verification reenabled if auto-seek during
Read Without Verify

hp2100_fp1.c (Dave Bryan):
– Added missing precision on constant “one” in fp_trun
– Completed the comments for divide; no code changes

hp2100_ipl.c (Dave Bryan):
– Added CARD_INDEX casts to dib.card_index
– A failed STC may now be retried
– Consolidated reporting of consecutive CRS signals
– Revised for new multi-card paradigm

hp2100_lps.c (Dave Bryan):
– Revised detection of CLC at last DMA cycle
– Corrected 12566B (DIAG mode) jumper settings

hp2100_ms.c (Dave Bryan):
– Added CNTLR_TYPE cast to ms_settype

hp2100_mt.c (Dave Bryan):
– Removed redundant MTAB_VUN from “format” MTAB entry
– Fixed command scanning error in mtcio ioIOO handler

hp2100_stddev.c (Dave Bryan):
– Add TBG as a logical name for the CLK device

hp2100_sys.c (Dave Bryan):
– Deprecated DEVNO in favor of SC
– Added hp_setsc, hp_showsc functions to support SC modifier
– Added DA and dummy DC devices
– DMA channels renamed from 0,1 to 1,2 to match documentation
– Changed DIB access for revised signal model

hp_disclib.c, hp_disclib.h (Dave Bryan)
– Created MAC/ICD disc controller library

i1401_cd.c:
– fixed read stacker operation in column binary mode
– fixed punch stacker operation (Van Snyder)

id_pas.c:
– fixed TT_GET_MODE test to use TTUF_MODE_x (Michael Bloom)
– revised to use clock coscheduling

id_tt.c, id_ttc.p:
– revised to use clock coscheduling

id_uvc.c:
– added clock coscheduling routine

1401_cpu.c:
– reverted multiple tape indicator implementation
– fixed EOT indicator test not to clear indicator (Van Snyder)
– fixed divide not to clear word marks in quotient (Van Snyder)
– revised divide algorithm (Van Snyder)

i1401_mt.c:
– reverted multiple tape indicator implementation
– fixed END indicator test not to clear indicator (Van Snyder)
– fixed backspace over tapemark not to set EOR (Van Snyder)
– added no rewind option (Van Snyder)

i1401_sys.c:
– fixed misuse of & instead of && in decode (Peter Schorn)

pdp1_cpu.c:
– fixed misuse of & instead of && in Ea_ch (Michael Bloom)

pdp1_stddev.c:
– fixed unitialized variable in tty output service (Michael Bloom)

pdp10_fe.c:
– revised to use clock coscheduling

pdp11_defs.h:
– fixed priority of PIRQ vs IO; added INT_INTERNALn

pdp11_io.c:
– fixed Qbus interrupts to treat all IO devices (except clock) as BR4
– fixed order of int_internal (Jordi Guillaumes i Pons)

ppd11_rf.c
– fixed bug in updating mem addr extension (Peter Schorn)

pdp11_rk.c:
– fixed bug in read header (Walter F Mueller)

pdp11_rl.c:
– added debug support

pdp11_rq.c:
– added RD32 support

pdp11_tq.c: (Mark Pizzolato)
– set UNIT_SXC flag when a tape mark is encountered
during forward motion read operations
– fixed logic which clears UNIT_SXC to check command modifier
– added CMF_WR flag to tq_cmf entry for OP_WTM
– made non-immediate rewind positioning operations take 2 seconds
– added UNIT_IDLE flag to tq units.
– fixed debug output of tape file positions when they are 64b
– added more debug output after positioning operations
– added textual display of the command being performed
– fixed comments about register addresses

pdp11_ts.c:
– fixed t_addr printouts for 64b big-endian systems (Mark Pizzolato)

pdp11_tu.c:
– fixed t_addr printouts for 64b big-endian systems (Mark Pizzolato)

pdp11_vh.c: (Mark Pizzolato)
– fixed SET VH LINES=n to correctly adjust the number
of lines available to be 8, 16, 24, or 32.
– fixed performance issue avoiding redundant polling

pdp11_xq.c: (Mark Pizzolato)
– Fixed missing information from save/restore which
caused operations to not complete correctly after
a restore until the OS reset the controller.
– Added address conflict check during attach.
– Fixed loopback processing to correctly handle forward packets.
– Fixed interrupt dispatch issue which caused delivered packets
(in and out) to sometimes not interrupt the CPU after processing.
– Fixed the SCP visibile SA registers to always display the
ROM mac address, even after it is changed by SET XQ MAC=.
– Added changes so that the Console DELQA diagnostic (>>>TEST 82)
will succeed.
– Added DELQA-T (aka DELQA Plus) device emulation support.
– Added dropped frame statistics to record when the receiver discards
received packets due to the receiver being disabled, or due to the
XQ device’s packet receive queue being full.
– Fixed bug in receive processing when we’re not polling. This could
cause receive processing to never be activated again if we don’t
read all available packets via eth_read each time we get the
opportunity.
– Added the ability to Coalesce received packet interrupts. This
is enabled by SET XQ POLL=DELAY=nnn where nnn is a number of
microseconds to delay the triggering of an interrupt when a packet
is received.
– Added SET XQ POLL=DISABLE (aka SET XQ POLL=0) to operate without
polling for packet read completion.
– Changed the sanity and id timer mechanisms to use a separate timer
unit so that transmit and recieve activities can be dealt with
by the normal xq_svc routine.
Dynamically determine the timer polling rate based on the
calibrated tmr_poll and clk_tps values of the simulator.
– Enabled the SET XQ POLL to be meaningful if the simulator currently
doesn’t support idling.
– Changed xq_debug_setup to use sim_debug instead of printf so that
all debug output goes to the same place.
– Restored the call to xq_svc after all successful calls to eth_write
to allow receive processing to happen before the next event
service time. This must have been inadvertently commented out
while other things were being tested.

pdp11_xu.c: (Mark Pizzolato)
– Added SHOW XU FILTERS modifier (Dave Hittner)
– Corrected SELFTEST command, enabling use by VMS 3.7, VMS 4.7, and Ultrix 1.1 (Dave Hittner)
– Added address conflict check during attach.
– Added loopback processing support
– Fixed the fact that no broadcast packets were received by the DEUNA
– Fixed transmitted packets to have the correct source MAC address.
– Fixed incorrect address filter setting calling eth_filter().

pdp18b_stddev.c:
– added clock coscheduling
– revised TTI to use clock coscheduling and to fix perpetual CAF bug

pdp18b_ttx.c:
– revised to use clock coscheduling

pdp8_clk.c:
– added clock coscheduling

pdp8_fpp.c: (Rick Murphy)
– many bug fixes; now functional

pdp8_tt.c:
– revised to use clock coscheduling and to fix perpetual CAF bug

pdp8_ttx.c:
– revised to use clock cosheduling

pdp8_sys.c:
– added link to FPP

pdp8_td.c:
– fixed SDLC to clear AC (Dave Gesswein)

sds_mt.c:
– fixed bug in scan function decode (Peter Schorn)

vax_cpu.c:
– revised idle design (Mark Pizzolato)
– fixed bug in SET CPU IDLE
– fixed failure to clear PSL<tp> in BPT, XFC

vax_cpu1.c:
– revised idle design Mark Pizzolato)
– added VEC_QMODE test in interrupt handler

vax_fpa.c:
– fixed integer overflow bug in EMODx (Camiel Vanderhoeven)
– fixed POLYx normalizing before add mask bug (Camiel Vanderhoeven)
– fixed missing arguments in 32b floating add (Mark Pizzolato)

vax_octa.c (Camiel Vanderhoeven)
– fixed integer overflow bug in EMODH
– fixed POLYH normalizing before add mask bug

vax_stddev.c:
– revised to use clock coscheduling

vax_syscm.c:
– fixed t_addr printouts for 64b big-endian systems (Mark Pizzolato)

vax_sysdev.c:
– added power clear call to boot routine (Mark Pizzolato)

vax780_sbi.c:
– added AUTORESTART switch support (Mark Pizzolato)

vax780_stddev.c
– added REBOOT support (Mark Pizzolato)
– revised to use clock coscheduling

vaxmod_def.h
– moved all Qbus devices to BR4; deleted RP definitions

 

Anyways, let the good times roll!

 

NetBSD 1.2 for the MicroVAX II package…

Well looking around on my sourceforge page, it hit me that I never did do a NetBSD 1.2 MicroVAX II package, so I thought I’d slap one together.  I basically just followed my install notes, and added in some stuff that I’d built earlier.

So for those who care, here you go!

From the package’s readme:

Welcome to this minimal version of NetBSD 1.2 for the MicroVAX II.

Getting started
:::::::::::::::

just fire up the emulator like this:

vax.exe run.ini

—–8<—–8<—–8<—–8<—–8<—–8<

C:\netbsd1.2\test>vax.exe run.ini

VAX simulator V3.8-1
run.ini> set idle OLDVMS
Non-existent device
TS: creating new file
Loading boot code from ka655x.bin

?[c
KA655-B V5.3, VMB 2.7
Performing normal system tests.
40..39..38..37..36..35..34..33..32..31..30..29..28..27..26..25..
24..23..22..21..20..19..18..17..16..15..14..13..12..11..10..09..
08..07..06..05..04..03..
Tests completed.
>>>
—–8<—–8<—–8<—–8<—–8<—–8<

You’ll be booted up to the boot rom. next we have to boot from the
hard disk. NetBSD’s bootblocks were very fragile back then so
it won’t autoboot. I never did tear into it to see why it won’t boot
so you’ll have to do it the old fasioned way.
>>>b/3 dua0
(BOOT/R5:3 DUA0

2..
-DUA0
1..0..
howto 0x3, bdev 0x11, booting…done. (11108+33996)

Nboot
:ra(0,0)netbsd
—–8<—–8<—–8<—–8<—–8<—–8<

Once you’ve booted the kernel, it’ll probe out the hardware, then
it’ll ask where the root disk is (ra0a).

—–8<—–8<—–8<—–8<—–8<—–8<
zs0: timeout waiting for TS_SSR
tmscp0 at uba0 csr 174500 vec 760, ipl 15
tms0 at tmscp0 slave 0
qe0 at uba0 csr 174440 vec 754 ipl 15
qe0: delqa, hardware address 08:00:2b:aa:bb:cc
dz0 at uba0 csr 160100 vec 304 ipl 15
root device?
—–8<—–8<—–8<—–8<—–8<—–8<

Armed with this information you can simply hit enter as it’ll want
to drop to single user mode, then hit contrl+d and it’ll resume booting
into multiuser mode.

—–8<—–8<—–8<—–8<—–8<—–8<
root device? ra0a
?Enter pathname of shell or RETURN for sh:
#
—–8<—–8<—–8<—–8<—–8<—–8<
remember it’s enter then control+d

—–8<—–8<—–8<—–8<—–8<—–8<
#^D setting tty flags
starting network
add host amnesiac.my.domain: gateway localhost
add net default: gateway 10.0.2.2
starting rpc daemons: portmap.
starting system logger, time daemon.
checking for core dump…
savecore: no core dump
checking quotas: done.
building databases…
clearing /tmp
standard daemons: update cron.
starting network daemons: routed printer inetd.
creating runtime link editor directory cache.
starting local daemons:.
Tue May 5 08:29:22 PDT 1998
May 5 08:29:22 amnesiac init: kernel security level changed from 0 to 1

NetBSD/vax (amnesiac.my.domain) (console)

login:
—–8<—–8<—–8<—–8<—–8<—–8<
And there we go, NetBSD is all booted. The network is configured, you
may wish to change the /etc/resolv.conf if you so wish.
USING NETBSD
::::::::::::

Once the system is booted up into multiuser mode, TCP/IP is enabled and
you can now telnet into your system, by connecting to the localhost on
port 42323.

telnet localhost 42323

will connect you, and you’ll get the login prompt:

—–8<—–8<—–8<—–8<—–8<—–8<
NetBSD/vax (amnesiac.my.domain) (ttyp0)

login:
—–8<—–8<—–8<—–8<—–8<—–8<

There is no root password, so you can just login as root, and away you
go. I prefer to telnet in so I get a working terminal as the console
doesn’t do any VT100 emulation, its more of a dumb TTY. Outside of the
default programs in NetBSD the following programs have been installed
into the image:
* bash-2.0
* dungeon-2.5.6
* ircii-4.4
* lynx-2.8.2
* GNUmake-3.75
* pine-3.87
* screen-3.7.1
* unzip552

This should at least make using the system somewhat tollerable.

FAQ
:::
Q:When I hit backspace I get ^H ‘s!!!
A:stty erase <backspace>

In unix they used keyboards with delete keys instead of backspaces… Oh the horrors.
SHUTTING DOWN
:::::::::::::

This should be simple, login as root and just issue the following command:

reboot

And you’ll get halted to the SIMH prompt from there you can just quit.

NetBSD 1.2 MicroVAX II

 

 

Slow VM disk access on Qemu/SIMH or other emulators running on Windows?

Turns out from an interesting thread on the SIMH mailing list, is that the Windows volume shadow copy service, and other ‘system’ protecting services may tag files like .dsk to be monitored, and to save a difference of every write to the file.

Yes that is right, on top of NTFS’s transaction log and rolls, you have the OS doing the same thing which in turn makes your disk access slower than hell.

The fix?

Quite simple, dont use TLA (three letter acronym) file extensions, or no extensions at all and suddenly you’ll find that your disk based emulation is significantly faster.

4.1c BSD

It’s been a long while since I’ve posted anything VAX BSD related.  So I found this ISO image a while back that had all these old versions of BSD on them, but sadly many of them are incomplete, missing parts, and give really no clue on how to use them.  There is even some duplication thrown in there just to complicate things further.  So I figured I’d try one of them, an interim release of 4 BSD and see if I could just overlay a newer release version and see what I get…

VAX780 simulator V3.8-1
Listening on port 23 (socket 156)
loading ra(0,0)boot
Boot
: ra(0,0)vmunix
215688+63964+69764 start 0xf98
4.1c BSD UNIX #2: Tue Aug 28 09:39:12 PDT 1984
real mem  = 8384512
avail mem = 7036928
using 148 buffers containing 838656 bytes of memory
mcr0 at tr1
mcr1 at tr2
uba0 at tr3
hk0 at uba0 csr 177440 vec 210, ipl 15
rk0 at hk0 slave 0
rk1 at hk0 slave 1
uda0 at uba0 csr 172150 vec 774, ipl 15
ra0 at uda0 slave 0
ra1 at uda0 slave 1
zs0 at uba0 csr 172520 vec 224, ipl 15
ts0 at zs0 slave 0
dz0 at uba0 csr 160100 vec 300, ipl 15
mba0 at tr8
root on ra0
WARNING: should run interleaved swap with >= 2Mb
Automatic reboot in progress...
Tue Aug 28 09:54:53 PDT 1984
/dev/rra0a: 836 files, 6010 used, 1419 free (35 frags, 173 blocks)
/dev/rra0h: 6598 files, 41780 used, 320080 free (160 frags, 79980 blocks)
Tue Aug 28 09:54:58 PDT 1984
local daemons: telnetd ftpd tftpd syslog sendmail.
preserving editor files
clearing /tmp
standard daemons: update cron accounting berknet mail printer.
starting network: rshd rexecd rlogind rwhod routed.
Tue Aug 28 09:55:00 PDT 1984

ucbmonet login: root
Last login: Tue Aug 28 09:44:44 on tty00
4.1c BSD UNIX #2: Tue Aug 28 09:39:12 PDT 1984
Master source now lives here; freeze your 4.1c stuff now.
As far as the laws of mathematics refer to reality, they are not
certain; and as far as they are certain, they do not refer to reality.
                -- Albert Einstein
monet#

Pretty cool.  And oddly enough googling around doesn’t seem to find much about people running 4.1c BSD, but it is significant with the first version of sendmail being bundled, and rogue.

The release also includes TCP/IP support but I haven’t the slightest idea how to use it.  I suppose reading the instructions is key.  But I thought I’d share this little fossil first.

For those who want to try it, you can download it here.  It’s using SIMH, so if you aren’t running Windows, bring your own VAX 11/780 and you’ll be good to go.

Follow up on Dungeon (zork) for RT-11

I have documented the install steps back here, a long while back.  However recently I did get a request for a binary for this for someone to try to load up  on a physical PDP-11.  The steps sure are duanting and of course time consuming for a first time user, so while I was building dungeon again, I thought I should take this opertunity to package this up and make it more accesable for everyone.

This is the output of my ‘effort’ although the real thanks to this goes to Bob Supnik ,not only for writing SIMH making it possible, but also for porting Dungeon to Fortran way back then.

Extract the archive using 7zip, then run pdp11.exe and it should boot you up into RT-11.  Then just type in

RUN DUNGEON

And you should be teleported to the open field west of a big white house with a boarded front door…

Open Mailbox

It was 30 years ago today…

 

IBM released the PC onto the world.

Wow.

For the occasion here is 86-DOS fished out from 86-dos.org  This is what was sold to Microsoft as the basis for MS-DOS.

You too can behold this ancient gem here.

Maybe I should do something about the various versions and hunt out something capable of running MS-DOS 1.25..  I’m sure Peter has something for the  occasion!

Oh and I have to add this bit from olduse.net

“Out of today’s mail:  Electronics, June 16, 1981:Under the heading (pg. 33) “Xerox to market personal computer…”
with the announcement of the 820 which most of you may have seen already, is “… with IBM to follow suit” Called Chess, it is an 8088-based system priced between $3-4K, and includes two DSDD 5-1/4 Tandon floppy drives, a detachable keyboard.  An OS “similar to CP/M” from Microsoft (IBM Personal Computer DOS), from 64K to 256K RAM, and a “600-by-400-line” B&W display and able to handle eight colors with a resolution of 400×200 pixels or four colors at 800×400.  Look for it to be announced next month and check out Sears, Computerland, and maybe J.C. Penney.”

The first mention of the IBM PC on usenet…

AberMud

I never was that much into MUD’s but after reading this and this, I decided to go for it. Looking here, I thought I’d go with David Kinder’s revamping of the version 2 source.

I figured I’d try to run AberMUD on 2.11BSD / PDP-11 which didn’t go so well.. I know there is issues with the word size (it tries to switch on longs which it doesn’t like, I changed them to int’s and.. well sigbus. Not to mention I had to link with overlays and well.. I get the feeling you actually have to do something not just trust the linker.

32v is just too crusty, along with 3.0 BSD. 4.2 BSD was lacking a few functions (memcpy/strchr) so I grabbed some replacements and it just crashed. Looking back AberMUD dates from the late 1980’s so I figured 4.3 BSD would be a far better match. And I figured 4.3 from Wisconsin would certainly work the best for my needs. This time, only a minimal amount of hacking on the source was required, and more importantly it worked!

So here is a tape file with the source & binary.

The next thing I figured I’d do is put it online. Now my VPS runs a 64bit version of Linux, and seeing this is a VAX exe/OS I’ll need to run it on SIMH. Since I’m going to allow people to telnet it (I guess I could go thru some hell with the serial line mux) I’ll need my SLiRP build of SIMH, which only runs clean as a 32bit exe. So to get things started, first install 32bit support on x86_64 debian like this:

apt-get install ia32-libs

Then using Slackware 13.37, I made my exe, and uploaded it… And it worked fine! I also set the cpu to throttle at 3% so I don’t get into trouble for running 100% of the time, and it’ll be about as slow as a real VAX 11/730… It’s a simple line in SIMH, but I tend to misplace things so here it is.

set throttle 3%

Simple, right?

Well I thought I’d make one more change. I hate those systems that make you login to run the designated program that you went there for in the first place. At the same time, this VM is born to MUD, why not let it MUD all the time? Simply replacing /bin/login with mud.1 let me do just that. And of course I could just add an option in mud.1 to allow me to have a normal OS login. Simple, right? Not to mention it works on the console just fine.

So, let’s connect!

telnet vpsland.superglobalmegacorp.com

I suppose I could hook up flashterm to it later, but for now, telnet on in. I’ve never run a MUD before so I guess we’ll see. Worst case it’ll suck and crash and the only evidence will be the tape image, and this post.