1
0
mirror of https://github.com/prirun/p50em.git synced 2026-01-18 16:56:59 +00:00

131 Commits

Author SHA1 Message Date
Jim
499d07d82e CPUT4 T&M: max indirect levels is 8 then RXM fault occurs (S/R mode) 2011-08-06 14:44:42 -04:00
Jim
adbf7dff22 Always print a linefeed after HLT 2011-08-06 09:39:19 -04:00
Jim
6b080f7c5e For CPUT4, add LPID (only checks restricted) and mark some other
unimplemented instructions as restricted.
2011-08-06 09:30:27 -04:00
Jim
23b8cd9892 Only use 28 bits of physical address in mapva to correct CPUT4
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.
2011-08-06 09:01:16 -04:00
Jim
8ad786dc42 Invalidate brp cache on LPSW, since segmentation could be enabled. 2011-08-06 08:47:53 -04:00
Jim
3b6ed6f52c On HLT with -boot filename (T&M), either continue or halt. Add trace
code for CLS to show memory value used for comparison.
2011-08-06 08:44:36 -04:00
Jim
4388350678 Allow continue after HLT for -boot filename for V-mode T&Ms 2011-08-03 17:31:09 -04:00
Jim
6beed769cf Add -trace arg (number > 99) to start tracing after this instruction.
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.
2011-08-02 16:57:10 -04:00
Jim
2943b41e0c Cause UII for P300 paging instructions for CPUT4 T&M 2011-08-02 14:41:16 -04:00
Jim
cefc0e64e8 Corrected CREP and RTN based on CPUT4 T&M 2011-08-01 18:08:14 -04:00
Jim
efe90b9abb Change UII fault to pass ea for faddr instead of RP, to pass CPUT1 T&M.
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.
2011-07-31 23:25:51 -04:00
Jim
12e82b1d9a Fix bug in CEA: 16S not truncating ea after indexing. Caught by old
T&M test CPUT1.  Checked ea16s, and it was already doing the truncate.
2011-07-31 22:54:11 -04:00
Jim
37909a6de0 Add sense switch skips SS1-4, SR1-4, SSS, SSR to run old T&M diags 2011-07-31 22:40:33 -04:00
Jim
314ef7cc50 Changed -sd to -ds to specify data switches, to run old T&M programs,
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.
2011-07-30 18:14:35 -04:00
Jim
fde9c6e812 Initial PNC driver (no receive yet), added #ifdefs for trace, allow
continuing after real HLT in S and R modes for old T&M diagnostics,
expanded list of Prime device drivers
2011-07-30 17:06:19 -04:00
Jim
6a00d0d937 Add mt option to return 2-word zero record instead of error status, to
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.
2011-07-18 09:49:34 -04:00
Jim
bcfdbec10f Changes for gcc on OSX 10.6, cross compile on Intel 2011-07-18 09:31:14 -04:00
Jim
78aaf1753d Add an inline swab option to swap.h 2011-06-19 08:56:11 -04:00
Jim
e8528a2233 lmserver changes for linux 2011-05-04 11:17:52 -04:00
Jim
dbe7246f12 Default to 1 AMLC board; add magrst to makefile 2010-01-31 09:31:08 -05:00
Jim
dd587bade1 Fixed if/else indenting 2008-10-04 17:49:42 -04:00
Jim
2f065a3bde License server ignores bogus connections, updated makefile to store
executables in local directory instead of ../run (for testing first)
2008-09-24 16:02:01 -04:00
Jim
b787eaa56b Changed makefile so that utility binaries go in bin, not run 2008-09-12 21:33:16 -04:00
Jim
f971e4fac5 Moved mx directories to ../dongle, out of source directory 2008-09-12 20:12:17 -04:00
Jim
f70c0561cb Print version and exit for "em --version" 2008-09-12 16:42:43 -04:00
Jim
4466fa57e7 makefile updated with all compile options, added back to repository 2008-09-12 14:57:19 -04:00
Jim
5f56ba04f4 Catches SIGTERM and gracefully shutdown Primos with a sensor check. 2008-09-10 16:15:40 -04:00
Jim
ba3d9a1a7f licensing, sys console, fixed rare hang in sleep if IMPS goes to zero
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)
2008-04-25 00:00:00 -04:00
Jim
1750f7f83b license dongle, boot options, amlc, tape, disk, change device filenames
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
2008-01-06 00:00:00 -05:00
Jim
e16f8824c4 license dongle, hobbyist build, tape, RT clock, amlc, disk, cpboot
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)
2007-11-29 00:00:00 -05:00
Jim
b8233043d2 devamlc supports real serial ports, performance tweaks
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
2007-10-29 00:00:00 -04:00
Jim
73eaf5cfd5 jump directly to shift to eliminate a sub-switch (Primos rebuild gcov)
After profiling Primos rebuild, shift instructions are #8
2007-10-21 00:00:00 -04:00
Jim
9d6903b4e2 prep devamlc for real serial, changed ints to shorts for queue instructions
changed devamlc in prep for real serial support:
- changed .sockfd to .fd
- change transmit to directly access queue, to remove select
2007-10-19 00:00:00 -04:00
Jim
1e85a5c348 fixed MAJOR BUG (since em83) where memory writes were being lost
because the "page unmodified" bit wasn't being cleared.  If Primos
needed the page, it wouldn't write it to the paging disk first.
2007-10-17 00:00:00 -04:00
Jim
3bb5eefc61 fixed multiple extension segments (stex, pcl, prtn), perf tweaks
-- 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)
2007-10-16 00:00:00 -04:00
Jim
dffe43212e used gcov info to reorder some stuff in ea64v (ea64v4.h) 2007-10-12 00:00:00 -04:00
Jim
afdf6057b1 FP exceptions, -DNOREG for -O0 and -DBG compiles, perf tweaks, gcov
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)
2007-10-12 00:00:00 -04:00
Jim
36254e2fba RP ring bits weren't being preserved when executing code in registers.
This caused a HLT instruction in the register to halt the machine from ring 3
2007-10-09 00:00:00 -04:00
Jim
4779beb25e removed dup iget16 in BDX, no wait common case handled first in WAIT
cleaned up/added a few comments, added messages to fatal() calls
2007-10-06 00:00:00 -04:00
Jim
c463fce90d large changes to dispatch.h to support 2 tables +
separate R/S-mode mem ref dispatch table to avoid R-mode check in V-mode inst
2007-10-04 00:00:00 -04:00
Jim
c845fdce12 changed main loop to test inhcount only when intvec is set;
this also required changes to emdev.h (can't look at inhcount)
2007-10-04 00:00:00 -04:00
Jim
84f57c9d59 removed rounding operation from ieeepr8 - causing Info RUN to fail +
changed ARGT to add ring bits to LB & SB in brsave[]
major TRACE update, to debug Information tsrc$$ problem
changed MAXMB default for non-OSX platforms (PS3) to 32MB
2007-10-02 00:00:00 -04:00
Jim
399b67ea91 SSSN hack to bypass serialization in Primos, more performance tweaks
changed B(I,D)(X,Y) instructions to increment/decrement inside if;
  (avoids reloading values to test them) and removed B(X,Y)NE macros
changed default cpuid to 15 so real time clock is always set
use ppa instead of ppn to avoid << 10 on every memory reference
changed newkeys() so illegal keys give illegal instruction vs fatal()
removed hack to patch Primos for rev 23 SSSN check
added code to SSSN to skip the check loop immediately following
removed #ifdef FAST from a few places, just use the faster code
added code to LDA trace to also display as two octal bytes
2007-09-23 00:00:00 -04:00
Jim
2fb2e1a348 PCL fixes, more perf tweaks: shift, prtn, add16
changed EXPCL macro to set and clear bits - not just set
changed shift instructions - made CLEARCL conditional;  this
  means keys are only updated once per shift, not twice
fixed prtn to update stack free pointer after values fetched
  in case a fault occurs and prtn is restarted
changed prtn to invalidate brp cache only if ring changes
changed prtn to inline, to avoid register save/restore
changed argt to only update rp word offset in sf header
added hack to pcl to correct wrapped RP for cpu.pcl case 42
added cgt inline proc, used in 2 places; generates better code
  (store to utempa is avoided altogether)
added pimh (also used for pima) inline proc to avoid stores
inlined invalidate_brp
changed add16 implementation while looking at code generated
  ran faster according to Jeff's timers: 59/52 for old/new
2007-09-15 00:00:00 -04:00
Jim
d99d16932d More performance tweeaks: get/put(16/32)r, eaxxx()
changed get/put(16,32)r to check for ring change and use regular
  get/put call if possible, so brp supercache can be used
FUTURE: could add separate brp cache entry for R0 accesses
changed ea32r64r live register test so normal path is first
changed ea64v live register test so normal path is first
change ea32i to use INCRP macro instead of RPL++
2007-09-15 00:00:00 -04:00
Jim
91f8780e43 moved memlimit global variable to gv structure for quicker access +
removed need for duplicated memcpy in pcl() (copying ecb)
inlined pclea for speed
FUTURE: would be nice to inline complex pcl/argt, but it's called
      by CALF and ARGT instructions
2007-09-15 00:00:00 -04:00
Jim
7a713e8ea9 speedup LDC/STC, STTM CPU time fix, IMA/IRS perf, apea() perf, -DNOMEM
added 2 new rbp entries for FAR0/1; used in ldc/stc
changed IMA and IRS back to use get/put16t to make use of
  supercache instead of always doing 1 mapva
changed apea() to use brp[RPBR] for AP fetch, UNBR for indirect
added -DNOMEM to remove -mem command option and testing
fixed bug in STTM causing sporadic CPU times (negative deltas)
2007-09-14 00:00:00 -04:00
Jim
e095020a55 add access bits to brp.vpn entries, use brp cache for put16 & put32
added get32m & put32m: these always map
changed get32 and put32 to be inlined
changed mem[] references to MEM[] to allow experiments
tried using register for MEM pointer - not so great
tried using register for instcount - screwed up (very sluggish)
2007-09-12 00:00:00 -04:00
Jim
0948124f29 added "# of register sets" array, enabled multi-register set code ("ors") +
moved dispatch tables to global variable structure
2007-09-12 00:00:00 -04:00
Jim
c4f7df2944 Fine tune eap supercache, other performance optimizations +
Change tracing to show when supercache is used
Symbolic names for supercache entries
Added supercache entries for sector 0 and PB (different from RP)
Add invalidate_brp to invalidate supercache
Separate get16trap (WILL trap) from get16t (MIGHT trap)
Use supercache in get32 and various get/put routines
2007-09-10 00:00:00 -04:00