mirror of
https://github.com/SDL-Hercules-390/hyperion.git
synced 2026-04-11 06:35:02 +02:00
Those of you who have added platform specific tests to Hercules (e.g. #if __APPLE__, #if __SOLARIS__, #if __FreeBSD, etc) PLEASE STOP DOING THAT! Design a configure.ac test for the needed feature or functionality instead (or add the platform specific test to ONLY hostopts.h) and then #define your own HAVE_FEATURE_ABCXYZ and use that instead. Refer to the "_TODO.txt" document for more information and the reason why this is important.
193 lines
8.7 KiB
Plaintext
193 lines
8.7 KiB
Plaintext
|
|
|
|
---------------------
|
|
HERCULES TODO IDEAS
|
|
---------------------
|
|
|
|
|
|
(in absolutely *NO* particular order)
|
|
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
*BUG*: FIX PORTABILITY ISSUES that have crept in over time.
|
|
|
|
Remove all "#if defined(__APPLE__) || defined(__FreeBSD__)" statements.
|
|
|
|
You should NOT test for specific platforms. Instead, create a configure.ac
|
|
test for specific functionality or for feature a specific that your code
|
|
requires, and then #define HAVE_FEATURE_ABCXYZ if a platform supports it.
|
|
Then simply use #if defined(HAVE_FEATURE_ABCXYZ) in your Hercules code.
|
|
|
|
That way if a given platform begins supporting a feature that it previously
|
|
did not support, YOU DON'T HAVE TO CHANGE ANY HERCULES CODE AT ALL. This is
|
|
called "Writing portable code".
|
|
|
|
ONLY if you cannot design a test for the needed FEATURE within configure.ac
|
|
may you then add a test for a given platform, and then ONLY in "hostopts.h".
|
|
|
|
Our "hostopts.h" header is the ONLY SOURCE MODULE where tests for specific
|
|
platforms should be done. Test for the platform and #define your FEATURE
|
|
accordingly. Elsewhere in Hercules you then test for that #define FEATURE.
|
|
|
|
Windows is the only allowed exception to the rule. You may test for _MSVC_
|
|
or _WIN32, etc, but for non-Windows platforms #define HAVE_FEATURE_ABCXYZ
|
|
and then test for that instead.
|
|
|
|
Refer to "hostopts.h" for an example of the technique I'm referring to.
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
*BUG*: printer FCB parsing is FUBAR (wrong):
|
|
|
|
Old (original) style was: "fcb=66010713192531374361495561",
|
|
which yields: 66 1 7 13 19 25 31 37 43 61 49 55 61
|
|
int FCBMASK[] = {66,1,7,13,19,25,31,37,43,63,49,55,61};
|
|
|
|
Notice the old style is a string of 26 digits (13 pairs), which are NOT
|
|
separated by commas. The current parsing code presumes comma separators
|
|
which is WRONG and incorrectly causes old format to always be rejected.
|
|
|
|
Also notice channel 9 and 12 are on same line number 61. This is valid
|
|
for old 1403 paper carraige-control tapes, but is invalid on newer 3211
|
|
FCB image printers which support only one channel defined per line. We
|
|
need to fix this (provide supported for BOTH) which is REQUIRED to fix
|
|
the incorrect parsing/support of the original "fcb=" option format.
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
"Generic-ize" the 'qd' command so that it works for ANY device
|
|
instead of just dasd devices. SenseId and RDC (Read Device
|
|
Characteristics) information is valuable information to display
|
|
for devices other than dasd! (e.g. tape devices for example)
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
BUG: instruction tracing: control registers not being shown for some
|
|
instructions which use/modify them. We need a better way to determine
|
|
if FPRs/CRs/ARs should be traced or not. (New bits in OPCODE table?)
|
|
(see "display_inst_regs" function in "hscmisc.c")
|
|
|
|
Modify/enhance instruction/device tracing to write raw trace information
|
|
to a file (instead of formatting it to console which is slow/inefficient)
|
|
and develop a new offline utility to then format/display only the desired
|
|
information (selected registers, instructions, time range, buffers, etc).
|
|
|
|
Instruction Tracing: ability to specify multiple disparate trace ranges.
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
DUMP command (Windows only) to create on-demand mini-dump.
|
|
|
|
modify fthread to maintain the thread's name in its FTHREAD list of
|
|
threads and provide a function to return a copy of that information
|
|
(linked list of thread ids and thread names), and then modify the
|
|
minidump BuildUserStreams function in bootstrap.c to save that info
|
|
so we can know which threads are which when we analyze a crash dump.
|
|
|
|
Add thread naming support to *Nix: autoconf: check for availability
|
|
of pthread_setname_np and pthread_getname_np functions.
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Suspend/Resume:
|
|
|
|
Add filename option to suspend/Resume command.
|
|
Resume option to issue start command if resume is successful.
|
|
Suspend/Resume command needs prompts/error messages: Ask Y/N confirmation
|
|
during suspend if overwriting existing suspend file, error message when
|
|
resume command given and machine is not in the reset state.
|
|
Add missing Suspend/Resume support to tape devices.
|
|
Add missing Suspend/Resume support to CTC devices.
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Add 'const' to as many functions' arguments as possible.
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Document all DIAGNOSE instruction support
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Per Mark Gaubatz, we need a new dasd util to fix CE/SA alt cyl issue
|
|
for existing dasds created using the old dasdinit.
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Card reader: @stack support, like Ivan's tape autoloader, to provide
|
|
ability to specify different options (ascii/ebcdic) for each i/p file.
|
|
Then you could stack a VM USERID card in ebcdic followed by a normal
|
|
ascii text file (which would be auto-translated to ebcdic of course),
|
|
or vice-versa: an ascii USERID card followed by ebcdic binary data.
|
|
Would make getting VMARC files into VM much easier without having to
|
|
mess with a ebcdic USERID card.
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Maxrates off: reset/disable automatic maxrates
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Design a more platform generic host cpu features runtime check that
|
|
checks for the availability of certain host processor features
|
|
|
|
and then point any needed function-pointers to the correct function.
|
|
That way we can exploit certain host processor features when they're
|
|
available. Going through a function pointer is inefficient of course
|
|
(depending on where the function is being used), but depending on
|
|
what the function provides, it may be more of a gain than a loss.
|
|
|
|
E.g. (WIN64):
|
|
|
|
init_hostinfo:
|
|
BOOL WINAPI IsProcessorFeaturePresent( PF_COMPARE_EXCHANGE128 );
|
|
_INTEGRAL_MAX_BITS (machdep.h ==> _InterlockedCompareExchange128 ==> cmpxchg16b)
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Design a way for users to define command synonyms. (dynmod?)
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Windows block device support (i.e. ability to define an entire drive
|
|
(Windows drive letter / partition) as a Hercules dasd)
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Full 2540 reader/punch support! mode=1 (normal), mode=2 (binary/"card image")
|
|
hopper selection, etc.
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Ability to specify highlighting for console messages via regex pattern.
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
ISSUE: there's the possibility for "socketpair" function to connect to some
|
|
other socket other than the pair's listening socket due to some other socket
|
|
on the host already listening for connections on INADDR_LOOPBACK. Fix is to
|
|
change the "socketpair" function to use a starting port# and SO_REUSEADDR
|
|
in a 'setsockopt' call and detect (HSO_errno == HSO_EADDRINUSE) return code
|
|
in its 'bind' call and auto-retry again using next port# (in a loop). Refer
|
|
to the "console_connection_handler" function for reference.
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Device or facility per Gerhard Postpischil's 9/20/2007 suggestion
|
|
that allows one to generate random "problems" (i/o errors, machine
|
|
checks, etc) for better software error recovery testing.
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Add new "+rdbwd" 3590-device-only option to set flag in
|
|
TapeCommands3590 table to allow/accept Read Backward CCW.
|
|
(Requested by "herc_fun" = Charlie <os_390@hotmail.com>)
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
Generic native host SCSI support (mostly for tape,
|
|
but having it opens other interesting possibilities)
|
|
|
|
-------------------------------------------------------------------------------
|