# This is a summary of changes and additons in the pidp1-mods repository

The repository is on github: https://github.com/wjenh/pidp1-mods.git

I strongly suggest adding an md viewer to your browser, I use *Markdown Viewer*, which is quite popular.
It really enhances viewing of md documents.

## What has changed in pidp1?

- dynamic IOT support, an IOT can be added just by dropping the compiled code into a directory
- major improvements to audio, adding digital filtering to emulate the original hardware filters
- a bugfix in the sbs16 support
- many of the PDP1-D instructions have been added
- lightpen support implemented
- Type 19 High Speed Channel support added, basically 'dma' for IOTs
- minor mods for the Type 33 Symbol Generator

These generally can be compiled in or out via #defines, all are on by default

## What has changed in other pidp1 code?

- the install script has been modified to allow installation to other than /opt/pidp1
- p7sim has been modified to allow specifying screen size, scaling, borderless window, and light pen support

## What 'core' programs have been added?

- an audio control app added to allow runtime tuning of the audio filters and channel gain

## What additional IOT functionality has been added?

All are implemented as dynamic IOTs and don't modify the pidp1 code (other than above), and all emulate the
original hardware, some with extensions, with mostly accurate timing.

A dynamic IOT can do pretty much anything a hardware device could do, plus more.
Scheduled service calls, completion pulses, interrupt signaling, full access to the pdp-1 registers and memory,
plus more is provided, as is access to the High Speed Channel support.
It can be serviced as frequently as every machine cycle, 5 microseconds, to many seconds, minutes, or never and
the serivce interval can be changed dynamically by an IOT.

The current list is:

- Type 23 Parallel Drum
- BBN version of a real time clock
- Type 33 Symbol Generator
- Type 630 Data Communications System, with the same functionality except using sockets instead of serial ports

The BBN clock has an extension to provide a 1 msec to 8192 msec countdown timer that can issue an interrupt.

The Data Communications System has extended IOT commands to allow specifying socket information such as port.
It is configured with 8 channels, but that can be changed in the code.
A channel can be either a TCP server or a TCP client.

## What else is there>

There are several utility programs for interacting with the drum.

A disassembler is provided, this was added to the main repo early on, one thing that actually made it there.
The disassembler has support for disassembling am1 loader rim tapes as well as the
standard DDT-style loader rim tapes produced by macro and macro1.

There is a significant amount of documentation, example code, etc.

## Anythng else?

Possibly the most significant addition is the am1 assembler. This is a major improvement over macro and macro1
providing numerous convenience features and full support for extended memory, including a loader that also
understands extended memory.
It can produce rim-loadable 'tapes' directly or produce macro1 source, although no extended memory features can
be used in macro1.
And, it has real documentation.

It has an ever-growing set of macros that can be included to define the IOTs for the above and that implement
some useful utility code.

This can be used independently of the rest, it's an assembler, not part of the emulation code.
This is the sole assembler being used now for developing new PDP1 programs that get included here.

## What next?

Who knows? Suggestions welcome. Simh implements mag tapes, dectapes, a line printer, etc. Feel free to join in
and write come code!
