Commit graph

346 commits

Author SHA1 Message Date
Sergey Svishchev
41dd89f938 VAX: fix CID: 1415593, 1415629 "Missing break in switch" 2017-03-09 17:24:23 -08:00
Sergey Svishchev
b40e63de4e VAX: fix CID: 1415411, 1415414-1415417, 1415535 "Buffer not null terminated"
Pass buffer size minus one to strncpy()
2017-03-09 17:20:54 -08:00
Bob Supnik
b41d10f189 PDP11, PDP10, VAX780: CR11 is BR6, CD11 is BR4 2017-03-07 09:42:37 -08:00
Mark Pizzolato
84f1e7104e VAX: Fix help text for MBA devices to describe their device relationships 2017-02-10 11:23:29 -08:00
Mark Pizzolato
7d432406b6 PDP11, PDP10, all VAX: General extern cleanup.
Remove explicit redundant extern declarations in source files that are
defined in processor include files.
2017-02-04 19:37:20 -08:00
Mark Pizzolato
724b23844c VAX730, VAX750, VAX780, VAX8600: Fix rounding with interval timer tick rate
As discussed in #390
2017-01-31 18:15:38 -08:00
Mark Pizzolato
acbb92091b VAX: Add slightly more precise TODR initialization logic with debug support 2017-01-19 16:56:40 -08:00
Mark Pizzolato
1bb42b83ef VAX730, VAX750, VAX780, VAX8600: Make TODR a little more precise
Add consistent debug options to track TODR activities and the values which
are set.  Debug data will display the VMS time related to the values set and
read.
2017-01-19 15:25:08 -08:00
Mark Pizzolato
5cd0ea4d59 VAX730, VAX750, VAX780, VAX8600: Fix interval timer ics value
- When the running timer is explicitly stopped the ics value needs to be
    determined before canceling the active unit.
2017-01-18 23:57:14 -08:00
Mark Pizzolato
1555056396 All VAX: Adjust sim_interval by reasonable amount for string instructions
Previously sim_interval was adjusted by 1 plus the total number of bytes
referenced in string instructions (SCANC, SPANC, LOCC, SKPC, CMPC3,
CMPC5, MOVC3, MOVC5).  Since the amount of data that a string
instruction can reference is arbitrarily large (32bit size), the adjustment
to sim_interval could be ridiculously excessive.  This can result in wild
variances in clock calibration when large string data are referenced.
2017-01-17 15:58:55 -08:00
Mark Pizzolato
d8dbc7e6b5 SCP: Migrate all stdio writes to pass through SCP provided Fprintf() 2017-01-14 20:48:09 -08:00
Mark Pizzolato
5f8bdbc53d MicroVAX I, MicroVAX II: Add missing original ROM images
These files are patched by ka620_patch.com and ka630_patch.com.
2017-01-09 14:16:55 -08:00
Mark Pizzolato
ae25c72a8e PDP11, VAX730, VAX750, VAX780, VAX8600: Moved CR11/CD11 from BR4 to BR6 2017-01-07 04:56:52 -08:00
Mark Pizzolato
6e31112469 VAX, MicroVAX2: Update ROM memory access to use common code 2017-01-05 05:53:00 -08:00
Mark Pizzolato
2df1433d71 All VAX: Defer taking any HALT action until pending events have fired 2017-01-03 12:01:53 -08:00
Mark Pizzolato
d77e3e196e VAX: Re-enable the boot ROM interval timer diagnostic tests 2017-01-02 14:03:39 -08:00
Mark Pizzolato
bcac7d0973 VAX: Change interval timers to pass boot ROM diagnostics.
Various boot ROM activities, including testing the Interval Timers, presume
that ROM based code execute instructions at 1 instruction per usec.
To accommodate this, we not only throttle memory accesses to ROM space,
but we also use instruction based delays when the interval timers are
programmed from the ROM for short duration delays.
2017-01-02 13:48:23 -08:00
Mark Pizzolato
d456bac8fc All VAX: Simplify interval timers to leverage new usec timing APIs 2016-12-30 10:34:29 -08:00
Mark Pizzolato
0275ef05e8 All VAX: Lower overhead when idling.
The original idling model called sim_idle() within the context of a scheduled
event running on the CPU unit.  The overhead of scheduling and the related
dispatch serve no specific purpose.
Meanwhile, the 'work' involved in determing if idling is possible is about
equivalent to the work of executing an additional instruction.  Therefore
sim_idle is invoked with an argument which causes the sim_interval to be
adjusted by 1 on each call that doesn't actually perform an idle sleep.  This
adjustment keeps the calibrated instruction execution rate consistent with
other purely non-idle instruction mixes.
2016-12-29 09:47:09 -08:00
Mark Pizzolato
75901333e5 VAX780, VAX730, VAX750, VAX8600: Moved the TPS register to the TMR device
Clock ticks for these simulatrs are performed by programmatic setup of the
interval timer device (TMR) and have nothing to do with the TODR which
increments at 100Hz, but doesn't generate ticks to the simulated system.
2016-12-29 06:05:53 -08:00
Mark Pizzolato
372231dd3a VAX8600, VAX750: Pass correct delay to TTI device sim_clock_coschedule 2016-12-17 11:51:05 -08:00
Mark Pizzolato
76103cf760 VAX730, VAX750, VAX8600: Update Interval Timer and TODR to align with VAX780 2016-12-16 18:32:26 -08:00
Mark Pizzolato
5cf9e9ab86 VAX780: Removed pseudo ticks from TODR device
Removing pseudo ticking of the TODR improves simulator behavior
when idling.  As previously implement, the timing of the TODR and TMR
ticks weren't aligned and and idle simulator would have to wake up to
service both tick activities.

The real hardware has a TODR which changes every 10ms to reflect changes
to wall clock time.  This is already completely achieved by referencing the
host system time whenever the TODR register is referenced.  No need for
to simulate pseudo ticking.

The real interval timer hardware generates ticks a the rate specifically
programmed in the interval timer device registers.  The common cases
programmed the ticks at 10 ms intervals (100Hz), but real operating systems
exist which programmed ticks at 16667 usecs (60Hz).
2016-12-16 10:39:49 -08:00
Mark Pizzolato
7022f0c1b2 VAX: Fix interval timer to properly synchronize with calibrated clock ticks 2016-12-14 09:30:44 -08:00
Mark Pizzolato
eea394422e VAX, VAX750, VAX780, VAX8600: Properly coschedule console input with TMXR_MULT
The timer specific coscheduling routines take ticks as the delay argument
2016-12-12 01:53:49 -08:00
Mark Pizzolato
1c3c50fd26 VAX, VAX780, VAX750, VAX8600: Make TODR state file endian independent
When the TODR device (CLK) is attached to a state file, it operates in OS
agnostic mode.  This file can now be ported between hosts with different
endianness and work consistently to track the time of year.

Additionally, the VAX and VAX750 TODR values now properly don't
progress when they have zero values (or when they overflow back to zero).
2016-12-09 18:01:21 -08:00
Mark Pizzolato
a7593385aa VAX: Fixed Interval timer simplification
Reading the interval timer register while the timer is running needed
to be reflect usecs
2016-12-08 05:32:08 -08:00
Mark Pizzolato
63a16c4ed4 VAX: Simplify Interval Timer implementation
Use actual microsecond references, with the value synchronized to the CLK
device and all delays scaled to the calibrated instruction execution rate.
2016-12-06 13:36:01 -08:00
Mark Pizzolato
7498f183d2 VAX: Added debug options for SYSD device (TMR, TODR, CNF) 2016-12-05 14:57:35 -08:00
Mark Pizzolato
39d2944ede TIMER: Add support for catchup clock ticks and cleaned up asynchronous clocks
Asynchronous clocks are now built for all simulators which are built with
SIM_ASYNCH_IO defined.  The default behavior has asynchronous clocks
disabled since this is still experimental, but it can be enabled with
SET TIMER ASYNC.

Catchup clock ticks are now available, but since they're experimental,
they aren't enabled by default.  Catchup ticks are only available if the
simulators clock device calls sim_rtcn_tick_ack to acknowledge processing
of clock ticks.  The VAX simulators have been modified to leverage this.
Catchup clock ticks can be enabled with SET TIMER CATCHUP

Additionally, an idle threshold is provided which can be used to
influence when clock calibration may be suppressed.  The default is not
to suppress calibration activities.

The various timer behaviors are visible with the SHOW TIMER command.

The state of the operating timer facilities is visible with: SHOW CLOCK

Timer events which are queued are visible with the SHOW QUEUE command.
2016-11-16 23:50:53 -08:00
Mark Pizzolato
32bf2629b1 VAX8600: Changed console input polling
Polling is now done at least every 500ms even if the prior input
character hasn't been processed yet.   This allows ^E to provide a way
to exit a simulator which otherwise isn't reading from the console port.
2016-11-16 20:35:35 -08:00
Mark Pizzolato
da3f5359bb VAX, PDP11, PDP8, PDP1: Properly declare timer with clock unit 2016-09-26 15:55:50 -07:00
Mark Pizzolato
6e15dceaea VAX730, VAX8600: Remove mention of TQ device as bootable.
Fix #334
2016-08-29 23:01:54 -07:00
Mark Pizzolato
93a8754bfe MicroVAX I, MicroVAX II, VAX: Improve debug output for QVSS keyboard activities (LK) 2016-07-17 11:44:23 -07:00
Mark Pizzolato
83bf230a47 All VAX: Fix REI check when compatibilty mode. From Bob Supnik
The rule check on the PSL was incomplete. DV, FU, IV must all be zero,
and they weren't checked at all.

VAX Diagnostic EVKAE now runs to completion.
2016-07-14 11:45:32 -07:00
Mark Pizzolato
3f27267102 All VAX: Fix value check on SIIR.
Only the low 4 bits of the value are interesting and the value 0 in not
valid.  Never generate a Reserved Operand Fault. EVKAE detected this
problem.
2016-06-21 16:32:50 -07:00
Mark Pizzolato
953683c115 VAX730: Add missing value in DIB structure for proper auto-configure behavior 2016-06-21 05:24:51 -07:00
Mark Pizzolato
f946508c8b VAX750: Fix UBA register alignment and length check
The VAX 11/750 diagnostic supervisor makes word length references to
UBA register space, so this must have been legal.
2016-06-20 16:51:52 -07:00
Mark Pizzolato
c5d5a9dfbf VAX780: Fix Interval Timer logic
- Previous changes made to support 32V's 60HZ clock tick introduced changes
  which didn't properly handle increments and interrupt generation while single
  stepping the timer.

- The icr_rd routine returned an incorrect value when interpolation was
  necessary due to a missing cast when converting from double to uint32.

- Properly start the timer from the current state of the interval count register
  when the timer was previously stopped.
2016-06-20 15:56:19 -07:00
Mark Pizzolato
b89369e896 QVSS: Add support for keyboard bell 2016-06-11 08:30:36 -07:00
Mark Pizzolato
8d7e8f4d30 VAX: Fixed WordLshift (ASHP left overflow calc)
As observed by EVKAB diagnostic and reported in #319
2016-05-30 14:43:35 -07:00
Mark Pizzolato
a71a7c6882 VAX: Add octaword result information to instruction history
Also reworked drom result bitfield macros to use standard shift and masks
2016-05-28 06:03:21 -07:00
Mark Pizzolato
4e7fada26c VAX: Fix decode of octaword instructions
EXAMINE -M now properly displays instruction arguments for octaword
instructions.
2016-05-27 15:09:40 -07:00
Mark Pizzolato
8e5d0b0a40 VAX: Allow history log file to have mixed case filename 2016-05-27 07:55:17 -07:00
Mark Pizzolato
253e9deea7 All VAX: Fix idle/inifinite loop detection for instructions with side effects
Recent enhancements to idle/infinite loop detection generalized handling
of detecting 'loop to self' cases.  This was done without considering that
some instructions have side effects (i.e. change other state like the stack
pointer) and thus aren't merely loop to self cases.

This problem was reported in #315
2016-05-18 09:02:22 -07:00
Sergey Svishchev
504bc7c61f VAX: 2681 UART: implement ACR and IPR 2016-05-15 15:44:15 -07:00
Sergey Svishchev
ba4b951bd6 VAX: replace magic numbers with constants 2016-05-15 15:44:14 -07:00
Mark Pizzolato
5531ccb175 ALL: Massive 'const' cleanup
These changes facilitate more robust parameter type checking and helps
to identify unexpected coding errors.

Most simulators can now also be compiled with a C++ compiler without
warnings.

Additionally, these changes have also been configured to facilitate easier
backporting of simulator and device simulation modules to run under the
simh v3.9+ SCP framework.
2016-05-15 15:25:33 -07:00
Mark Pizzolato
7bd58c6d7f PDP11, VAX8600, VAX780, VAX750: Fix prior Massbus auto configure.
As discussed in #307
2016-05-09 10:40:58 -07:00
Mark Pizzolato
550e360769 VAX750, VAX780, VAX8600: Fix Massbus device description output 2016-05-07 16:32:09 -07:00