problem with remote terminal sessions:
1. netlink to remote Prime
2. a prirun
3. l (list directory)
4. displays a little, then a longish pause up to 30 seconds, then the rest
Does a similar thing with stat us. Hitting Enter will cause it to
finish, while typing characters does not. I suspect this is a problem
with Prime's networking code, but not sure.
Also, if async I/O is used, the QUIT. OK, message doesn't appear after
ctrl-p. I think they are getting wiped out by Primenet's buffer
flushes.
All of this might be subtle timing problems because I changed the
default clock rate from 250/330/500/whatever times per sec to 20 times
per second in this rev 19 version of Primos.
this case, bitno was specified in the EAFA instruction itself. The
emulator was setting the E-bit in the returned ea because there was a
non-zero bit offset. This extra test of bitno & setting of E-bit was
removed from apea to pass CPUT4 at 10001.
Issues like this, might be why DIAG was developed to surpass T&M: many
of these CPUT4 tests are testing the implementation of an instruction
rather than just the architectural feature of the instruction.
at 7753 and 10061. At 7753, CPUT4 loads -1L into the SB register,
EAFA 1,SB%, then LDLR '12 to get the FAR1 register value. It expects
it to be -1. For the test at 10061, EAFA was clearing the E-bit in
FAR1, but the test expected it to be set. The emulator never uses the
E-bit in the FAR (it only looks at bitno), so it doesn't matter how the
E-bit is set in the register.
emulator seg fault after LPSW near label RXM in CPUT4.
CPUT4 activates Ring 3 by loading the ring bits of the program
counter. However, it does not enable segmentation, so we're still
accessing memory by physical location - no address mapping occurs.
mapva used the entire 32-bit program counter as an offset in the MEM
array (physical memory), and because of the ring bits, this caused a
Unix seg fault.
mapva was changed to only use 28 bits of the address when VA mapping
is disabled (28 bits matches the size of the MEM array). Technically,
a more accurate mask should be applied based on the CPU model. For
example, a P750 could only access 8MB of memory.
This is an unsigned int, so will overflow after 4B instructions, but
it's impractical to trace that many instructions anyway. This feature
is used for debugging the emulator, getting diags to work, etc., so
instruction counts tend to be low.
NOTE: ea would only be set for mem. ref. instructions, but we use the
same code at label d_uii: for generics too. Not sure what the ea should
be for a generic UII fault where there is no ea computed.
don't load registers and keys from the runfile unless the 'regs'
option is used. Old T&M's were normally loaded into memory, followed
by a master clear, then run. The Prime runfiles on disk (at rev 18)
had the wrong mode in the key field of the rvec file header, so the
test did not execute properly. Also expanded the boot help for data
switches.
test how magrst behaves. It treats this just like a real tape error,
which is good. If mtwrite is used to re-create a physical tape from a
.tap file, it cannot re-create tape errors, so writes a 4-byte zero
record instead. Prime magrst will still see this as an error record
since it isn't long enough to be a real magsav record.
add DNS lookup on every license server connect to handle dynamic IP
made keyboard chars ^O, ^Y, and ^V work on system console
added printf in fatal() if any messages were logged to error.log
supports ^b in Primos II to reboot from tape w/Primos II in memory
to allow running make rev 19 from Primos II, but it's still broken
fixed cylinder limits for some disk models (couldn't format some drive types)
fixed devdisk problem: a error on one unit could cause bogus errors on another
IMPORTANT: fixed rare bug where emulator would hang in sleep (IMPS=0)
added licensing dongle support
boot option supports filename, sense and data switches:
-boot filename sswitch dswitch (for D. Boone)
-ds option (like VCP) as alternate way to set data switches (for D. Boone)
removed -v and -vv: they were old and didn't do anything
tries to read ring0.map and ring3.map if no -map option used
fixed bug with new connect for multiple AMLC controllers
default build is now for 32 amlc lines
fixed disk geometry for CMD; added geometry for Model 4935 (1.1G NEC)
fixed tape boot for variable record sizes (for D. Boone), but rev 19 loops
added EMULATOR_VERSION #define and version printf()
changed tape drive filenames from dev14u0-4 to mt0-4
changed disk drive filenames from dev26u0 to disk26u0
added license manager tracing
changed to automatically redirect stderr to error.log on startup
changed to create mtx tape drive files if they don't exist
tested write-protected tape drive files
changed invalid seek from a fatal error (emulator halt) to a disk error
disable Nagle algorithm for telnet connections (OSX buggy delay)
error setting terminfo flags for USB serial devices is no longer fatal
changed "pio to unimplemented device" from error to trace
changes for hobby version (no amlc, one disk drive)
new files geom.h, geomhash.h, geomhash.c for hobby version
added checksum to disk geometry tables to thwart hacking hobby version
added head offset check to disk driver for hobby version
added -boot help to display help with booting
added initial support for Matrixlock dongle
emulator handles xon/xoff on console to avoid blocking
supports read-only tape files (Unix read-only mode)
changed clock catch-up code (slower) so rev 20 doesn't crash after suspend
changed disk driver to controller 0-7 instead of device 0-64
demand-based variable interrupt rate for amlc controllers
fixed devdisk error reading zero bytes past disk eof (for D. Boone)
devdisk sets read check status bit on Unix read error
added INA '1114 for cpboot (for D. Boone)
changed SETCC_16/32, tcr, tch for speed, checked with Shark
support for real serial ports
added "amlc" config file to tie specific amlc lines to serial ports
changed amlc context to controller 0-7 rather than device 0-64
use lword bit 7 to enable hardware flow control: 2413 -> 3413
poll amlc faster if dmq buffer full (output), but don't do this for
input because user input buffer might overflow
-- this was causing the LISTENER_ORDER$ signals after DIAG
-- also was causing HELP to fail sporadically (HELP MTRESUME)
removed TB_xxx flags (identical to T_xxx)
added some eap hints
changed to pop the concealed stack earlier
changed LDLR/LDAR to load result from RP if ea is 7
changed STLR/STAR to store result in RP if ea is 7
added new trace flags for GET/PUT (unimplemented)
reworked ring/register fix so that Primos nevers sees RP faulted
but we don't have to do extra tests in the fetch loop
changed EAxxx routines to use RP segno when EA = register
added FP exception fault to ieeepr8 and all FP routines
added round flag to ieeepr8 (though not sure it's rounding correctly)
used gcov info to reorder some stuff in ea16s, ea32s, ea32r64r
changed warn() and fatal() to use get16t; prevpc might be a register
IMPORTANT NOTE: to compile with -O0, also use -DNOREG (gcc bug)