'\'Fish\' (David B. Trout)' david.b.trout@gmail.com [hercules-390]
2018-06-09 13:07:28 UTC
This question is directed towards Hercules developers.
A user has contacted me asking about what he is calling "Intermittent instruction count" behavior, which seems to only occur for him (albeit somewhat sporadically) with SDL Hyperion but not with non-SDL Hyperion (nor with 3.x).
He says when my SDL Hyperion is used, the "instcnt=" value displayed at the bottom right of the panel (he is not using my HercGUI) appears to only be updated intermittently. He described the behavior to me over the telephone as: "It goes brip! (is incremented very quickly), then pauses for a very brief moment (he didn't say for how long), then goes brip! again (is updated), then pauses again, etc." In other words, the instruction count at the bottom of the screen (panel) is not updated as smoothly/continuously as it is when a non-SDL version of Hyperion (or 3.x) is used.
Now I *did* indeed make some changes to my SDL Hyperion related to instruction count handling, but I cannot see how the changes I made could be causing such behavior. (For what it's worth, I am not seeing the same behavior myself, or if it is occurring, it is not as noticeable to me as it apparently is to him.)
The changes I made in this area were:
1. Changed/fixed the 'run_cpu' function in cpu.c to actually update sysblk.instcount each time through its instruction execution loop ("UPDATE_SYSBLK_INSTCOUNT" macro and associated function).(*)
2. In the panel.c logic where the instruction count was being calculated (lines 2938-2971 of current hercules-390 Hyperion), I removed the logic that was manually determining the system-wide instruction count value (by manually looping through and accumulating each CPU's regs->instcount value) and replaced it instead with code to directly access the now properly/reliably updated sysblk.instcount value.
That's pretty much it!
I was wondering if one or more of you Hercules developers out there might be able to explain WHY the changes I made could explain this new behavior this user is now seeing.
I'm fairly confident the behavior is purely cosmetic and nothing to worry about. I'm fairly confident there is nothing inherently wrong (buggy) with my new SDL Hyperion instcount handling, so I'm not asking any of you to "debug" my code for me. I'm not asking that.
I'm just asking if any of you can see anything in my new code that might explain this behavior this user is seeing. Because I cannot explain it myself! Not only am I not seeing this unusual behavior myself whenever I run my own tests, but I simply CANNOT SEE *how* the changes I made could possibly have *caused* this new behavior! (Apparently is *has* caused it, but I cannot see *how* it has!)
Thanks in advance for any insight any of you can provide.
---------------------
(*) Surprisingly, current (non-SDL, i.e. hercules-390) Hercules NEVER UPDATES SYSBLK.INSTCOUNT AT ALL! My change fixed this so that now it *is* properly updated in my SDL Hyperion.
A user has contacted me asking about what he is calling "Intermittent instruction count" behavior, which seems to only occur for him (albeit somewhat sporadically) with SDL Hyperion but not with non-SDL Hyperion (nor with 3.x).
He says when my SDL Hyperion is used, the "instcnt=" value displayed at the bottom right of the panel (he is not using my HercGUI) appears to only be updated intermittently. He described the behavior to me over the telephone as: "It goes brip! (is incremented very quickly), then pauses for a very brief moment (he didn't say for how long), then goes brip! again (is updated), then pauses again, etc." In other words, the instruction count at the bottom of the screen (panel) is not updated as smoothly/continuously as it is when a non-SDL version of Hyperion (or 3.x) is used.
Now I *did* indeed make some changes to my SDL Hyperion related to instruction count handling, but I cannot see how the changes I made could be causing such behavior. (For what it's worth, I am not seeing the same behavior myself, or if it is occurring, it is not as noticeable to me as it apparently is to him.)
The changes I made in this area were:
1. Changed/fixed the 'run_cpu' function in cpu.c to actually update sysblk.instcount each time through its instruction execution loop ("UPDATE_SYSBLK_INSTCOUNT" macro and associated function).(*)
2. In the panel.c logic where the instruction count was being calculated (lines 2938-2971 of current hercules-390 Hyperion), I removed the logic that was manually determining the system-wide instruction count value (by manually looping through and accumulating each CPU's regs->instcount value) and replaced it instead with code to directly access the now properly/reliably updated sysblk.instcount value.
That's pretty much it!
I was wondering if one or more of you Hercules developers out there might be able to explain WHY the changes I made could explain this new behavior this user is now seeing.
I'm fairly confident the behavior is purely cosmetic and nothing to worry about. I'm fairly confident there is nothing inherently wrong (buggy) with my new SDL Hyperion instcount handling, so I'm not asking any of you to "debug" my code for me. I'm not asking that.
I'm just asking if any of you can see anything in my new code that might explain this behavior this user is seeing. Because I cannot explain it myself! Not only am I not seeing this unusual behavior myself whenever I run my own tests, but I simply CANNOT SEE *how* the changes I made could possibly have *caused* this new behavior! (Apparently is *has* caused it, but I cannot see *how* it has!)
Thanks in advance for any insight any of you can provide.
---------------------
(*) Surprisingly, current (non-SDL, i.e. hercules-390) Hercules NEVER UPDATES SYSBLK.INSTCOUNT AT ALL! My change fixed this so that now it *is* properly updated in my SDL Hyperion.
--
"Fish" (David B. Trout)
Software Development Laboratories
http://www.softdevlabs.com
mail: ***@softdevlabs.com
"Fish" (David B. Trout)
Software Development Laboratories
http://www.softdevlabs.com
mail: ***@softdevlabs.com