Proposed Nova system update to SimH 3.7 --------------------------------------- 2007-June-03 snapshot Bruce Ray (BKR) The purpose of this update for the SimH Nova subsystem is to: - fix errors with current Nova implementation - correct deficiencies and device inconsistencies - add enhancements - propose code/enhancements usable by all SimH CPUs - make the Nova environment more "DG-ified" This is a snapshot of 'work in progress' and is presented for comments, ridicule and suggestions by the SimH community. The official update should be presented to SimH for consideration within a week... depending upon community feedback. Fixes ----- 1) fixed behaviour of non-supported devices (nova_cpu.c) 2) MT boot code fixed; self-booting mag tapes now work; official DG boot code now used (nova_mt.c) 3) Fixed ROM table calc, cleaned up DG boot code, documented DG boot process ('cpu_boot()') (nova_cpu.c) 4) Fixed Nova 3 and 4 MFFP instruction that did not mask value correctly (nova_cpu.c) 5) Fixed secret Nova 4 SAVN instruction reference (nova_cpu.c) 6) Fixed Nova 3 secret LDB/STB instruction behaviour. 7) Fixed Nova 3 secret DIVS instruction behaviour. Deficiencies ------------ 1) PTR support can now be disabled (nova_pt.c) 2) PTP support can now be disabled (nova_pt.c) 3) RTC may now be disabled (nova_clk.c) 4) TTI may now be disabled (nova_tt.c) 5) TTO may now be disabled (but simh might not oblige) (nova_tt.c) DG Compatibility ---------------- 1) 'ind_max' changed from 16 to 65536 for better unmapped system compatibility (nova_cpu.c) 2) mag tape device name changed from DEC's MT to DG's MTA 3) fixed head disk device name changed from DEC's DK to DG's DSK 4) moving head disk device name changed from DEC's DP to DG's DKP 5) real-time clock device name changed from DEC's CLK to DG's RTC 6) official, standard DG boot code now used for CPU, MTA and PTR devices 7) DEC's ION/IOF assembler instructions changed to DG's INTEN/INTDS Enhancements ------------ 1) PTR now supports 7 or 8 bit input mask (default 8-bit), (modifier 7B or 8B) (nova_pt.c) 2) PTP now supports 7 or 8 bit output mask (default 8-bit) (modifier 7B or 8B) (nova_pt.c) 3) PLT now supports 7 or 8 bit output mask (default 8-bit) (modifier 7B or 8B) (nova_plt.c) 4) LPT now supports 7 or 8 bit output mask (default 8-bit), (modifier 7B or 8B) (nova_lp.c) 5) common DEV_CLR/_SET_BUSY/_DONE and DEV_UPDATE_INTR macros introduced to simplify device handling, minimize and fix some coding errors (nova_defs.h) 6) TTI now supports 7 or 8 bit input mask (default 7-bit) (modifier 7B or 8B) (nova_tt.c) 7) TTO now supports 7 or 8 bit output mask (default 7-bit) (modifier 7B or 8B) (nova_tt.c) 8) PTR now uses common DEV_CLR/SET macros (nova_pt.c) 9) PTP now uses common DEV_CLR/SET macros (nova_pt.c) 10) LPT now uses common DEV_CLR/SET macros (nova_lp.c) 11) PLT now uses common DEV_CLR/SET macros (nova_plt.c) 12) RTC now uses common DEV_CLR/SET macros (nova_clk.c) 13) QTY local DEV_xxx macro names changed to eliminate conflicts with new 'nova_defs.h' macros. 14) added comments/documentation regarding DG boot code (nova_cpu.c) 15) CPU execution history added (a la PDP-8). min is 0 (disable history), max is arbitrarily 65538 entries; PC, IR, ACs, Carry, if Nova 3 or 4: SP and FP displayed. (nova_cpu.c) to do: ------ - Nova 3 and Nova 4 support is keyed off of MUL/DIV attribute - this is not true in DG hardware (i.e. a Nova 3 may not have the MUL/DIV hardware!) - quirks with original Nova MUL/DIV hardware are not emulated. - separate MULU/DIVU and MULS/DIVS for more accurate, authentic support - clean up/consolidate Nova, Nova 3 and Nova 4 control (now STK, MDV and BYT are used as approximations) - have PTR boot either .apl format tape, start at 077777 + 1B0, or do actual load using PTR FP - add devBusy/Done/Intr bit to device name converter - separate STK from Nova 4 SAVN instruction (some secret Nova 3s had BYT instructions also!) - PIT driver as separate module? - LPT option for ---> (possible with other devices to for flexibility) - mem size comments in nova_defs.h - DEV_CAS in nova_defs.h? Retain? - add DCM 'bit-banger' mux support: DG's first multiplexor! - have ASSEM/DISASSEM use device table for name/code lookups - pretty display/alignment of EXame STATE - clean up or comment I/O bus assumptions in all code - boot code for DKP/DSK - handling for MS Win - DCH throttle for DSK and DKP (per unit?) - modularize history routines into subsystem - add options to history display: devBusy/Done/Intr - add options to history display: send to file - add DG "SKPDN , JMP .-1" throttle - LOAD command detect auto-start location and do so unless inhibited? - add wrap-around test option for QTY - add wrap-around test option for ALM - test/verify/update MTA, DSK and DKP device drivers Documentation ------------- - update Nova .doc/.pdf . disclaimer for low-level authenticity, compatible only to high-level: NMORT N3MORT N4MORT . SP/FP CPU registers . Nova, Nova 3 and Nova 4 differences . MUL/DIV, MULS/DIVS differences/quirks . execution history . breakpoint operation . device names . new device capabilities . PTP: B7/B8 . PTR: B7/B8 . LPT: B7/B8 . confirm breakpoint types supported ('E' only at this point?) . confirm any debugging support (none in this rev?) . main simh_doc.pdf nova status info: expand table to Nova/3/4 for Nova, Nova 3, Nova 4 . tutorial for paper tape handling . binary loader - .apl procedure error checking . program loading - .ab or .abs tape header issues same as 'load' command? SR 1B0 for high-speed, 0B0 for low speed SR starting address of 0177777 . starting user program . common old program issues TTI uppercase only TTI parity TTI masking TTO parity TTO masking TTO timing/delay . DG tape duplicator format notes (Bob, I would do this if you wish to send me the master document you use.) Common SimH subsystems ---------------------- - instruction execution history container - use of common macros DEV_CLR/_SET_BUSY/_DONE and DEV_UPDATE_INTR to simplify programming and minimize errors (especially mine!) Miscellaneous Notes ------------------- - I have tried to be respectful of original coding style and format, but sometimes I 'adjust' code I'm looking as I try to understand it. - I would suggest renaming some of the files to be consistent with the device names: nova_lp.c ---> nova_lpt.c nova_pt.c ---> nova_ptr.c nova_tt.c ---> nova_tty.c nova_tt1.c ---> nova_tty1.c I did not want to do this at this point without community feedback. - DSK and DKP devices have not yet been updated. Yet. - Eclipse code has not been touched. Development Environment ----------------------- Primary development environment is MS Visual C++, rev 6. Secondary environment is Cygwin and GCC 4.x. MSVC++ console project created with: development directory of \SimH\nova\nova nova subdirectory source files added (directory relative) simh source files added (directory relative) includes added: ../../ libraries added: winmm.lib wsock32.lib Bruce Ray Wild Hare Computer Systems, Inc. Boulder, Colorado bkr@WildHareComputers.com (303) 466-7717 "Novas are forever..." 2007-Jun-3, BKR