From 7ac92a0e84313c9ddb80dca2a4ed0e75f74996fd Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Wed, 25 Jan 2017 11:50:49 -0800 Subject: [PATCH] HP3000: Fourth HP 3000 release, update 1 See HP3000/hp3000_release.txt for details of the release --- HP3000/hp3000_cpu.c | 29 +++++++++++++++++-------- HP3000/hp3000_release.txt | 43 ++++++++++++++++++++++++++++++-------- doc/simh_doc.doc | Bin 270848 -> 275456 bytes 3 files changed, 54 insertions(+), 18 deletions(-) diff --git a/HP3000/hp3000_cpu.c b/HP3000/hp3000_cpu.c index 538ce5d6..60914314 100644 --- a/HP3000/hp3000_cpu.c +++ b/HP3000/hp3000_cpu.c @@ -1,6 +1,6 @@ /* hp3000_cpu.c: HP 3000 Central Processing Unit simulator - Copyright (c) 2016, J. David Bryan + Copyright (c) 2016-2017, J. David Bryan Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -25,6 +25,7 @@ CPU HP 3000 Series III Central Processing Unit + 19-Jan-17 JDB Added comments describing the OPND and EXEC trace options 29_Dec-16 JDB Changed the status mnemonic flag from REG_S to REG_T 07-Nov-16 JDB Renamed cpu_byte_to_word_ea to cpu_byte_ea 03-Nov-16 JDB Added zero offsets to the cpu_call_procedure calls @@ -509,11 +510,13 @@ The trace options that may be specified are: Trace Action - ----- ---------------------------------- - INSTR trace instruction executions + ----- ------------------------------------------- + INSTR trace instructions executed DATA trace memory data accesses FETCH trace memory instruction fetches REG trace registers + OPND trace memory operands + EXEC trace matching instruction execution states PSERV trace process clock service events A section of an example trace is: @@ -564,12 +567,20 @@ instruction that may alter the base registers, the program, data, and stack segment base registers are printed. - The OPND option traces operand values. Some instructions that take memory - and register operands that are difficult to decode from DATA or REG traces - present the operand values in a higher-level format. The memory bank and - address values are always those of the operands. The operand data and value - presented are specific to the instruction; see the instruction executor - comments for details. + The OPND option traces memory byte operand values. Some instructions take + memory and register operands that are difficult to decode from DATA or REG + traces. This option presents these operands in a higher-level format. The + memory bank and address values are always those of the operands. The operand + data and values printed are specific to the instruction. For example, the + ALGN instruction prints its source and target operands, digit counts, and + fraction counts, and the EDIT instruction displays its subprogram operations. + + The EXEC option traces the execution of instructions that match + user-specified criteria. When a match occurs, all CPU trace options are + turned on for the duration of the execution of the matched instruction. The + prior trace settings are restored when a match fails. This option allows + detailed tracing of specified instructions while minimizing the log file size + compared to a full instruction trace. The PSERV option traces process clock event service entries. Each trace reports whether or not the CPU was executing on the Interrupt Control Stack diff --git a/HP3000/hp3000_release.txt b/HP3000/hp3000_release.txt index 02d5038b..afa5a06b 100644 --- a/HP3000/hp3000_release.txt +++ b/HP3000/hp3000_release.txt @@ -1,6 +1,6 @@ SIMH/HP 3000 RELEASE NOTES ========================== - Last update: 2017-01-08 + Last update: 2017-01-23 This file documents the release history of the Hewlett-Packard 3000 simulator. @@ -11,13 +11,32 @@ simulator code base is available at: https://github.com/simh/simh ...and may be downloaded at any time. A code snapshot is identified by the "git -commit ID" that is displayed by the simulator welcome banner. +commit ID" that is displayed in the simulator welcome banner. Therefore, HP 3000 releases are simply documentation checkpoints that describe the changes that have occurred since the last checkpoint. Generally, a release is written when one or more major changes have been incorporated. Minor bug -fixes will be available immediately but only noted as part of the next release -document. +fixes will be available immediately from the repository but only noted as part +of the next release document. + + + +=============================== +Reporting Bugs in the Simulator +=============================== + +If you find a bug in the HP 3000 simulator, please report it either to the SIMH +issue tracker on github at: + + https://github.com/simh/simh/issues + +...or to the SIMH mailing list; see: + + http://mailman.trailing-edge.com/mailman/listinfo/simh + +...for subscribing information. In either case, please include a console log +that contains a reproducible test case that illustrates the problem. See the +"Recording Simulator Activities" section of the "SIMH User's Guide" for details. @@ -58,15 +77,14 @@ PDF version of the same manual is available at: A preconfigured MPE-V/R disc image containing the Fundamental Operating Software (FOS), selected SUBSYS language processors (BASIC, BASICOMP, COBOL, COBOLII, -FORTRAN, PASCAL, RPG, and SPL), and example programs is available from Bitsavers -at: +FORTRAN, PASCAL, RPG, and SPL), and example programs is available at: - http://www.bitsavers.org/bits/HP/HP_3000/ + http://simh.trailing-edge.com/kits/mpe-vr-software-kit.zip The archive contains instructions and simulator command files that allow ready-to-run operation. -Manuals describing MPE operation are also available from Bitsavers at: +Manuals describing MPE operation are available from Bitsavers at: http://www.bitsavers.org/pdf/hp/3000/ @@ -187,6 +205,13 @@ Implementation Notes routines to the system SL and COBOL example programs to the OPERATOR.SYS account. The startup command files also enable the COBOL II instruction set. + - If you are using a custom MPE configuration and want to run COBOL II + programs, you must perform a SYSDUMP/COLDSTART to replace the three existing + COBLIB segments in your SL.PUB.SYS with their COBOL II replacements. The + U00U232A.USL.SYS and COB68LIB.PUB.SYS files on the disc image from the + software kit contain the replacement segments. See Usage Note 6 in the + "readme.txt" file and the "mpe-3-sysdump.log" file in the kit for details. + - New "hp3000_cpu_cis.c" and "hp3000_mem.c" modules have been added. - For this release, checking for interrupts is not performed during execution @@ -285,7 +310,7 @@ Bugs Fixed the stack, and the instruction is reexecuted. However, the program label has been lost, so control transfers to a random location. - CAUSE: The instructions obtain the label and then delete the TOS, flush + CAUSE: The instructions obtain the labels and then delete the TOS, flush the rest of the stack registers to memory, and then check that SM <= Z, i.e., that the current top of the stack in memory does not exceed the stack limit. If SM > Z, a stack overflow has occurred, and the trap diff --git a/doc/simh_doc.doc b/doc/simh_doc.doc index 062def7084208f3271b0d108f804b79c4ef1a461..f7b69e6d34db44ac7b674de4ff4aa16a50239d1d 100644 GIT binary patch delta 24132 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 Xnt%OzmA$J}saW6N7+%7nESf-cLo(VDG&m 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