Hallo Ove,
is something like appended patch right to get direct port access working for a win95 program? At least my dongle protected program (spde) doesn't crash any more and recognizes the license.
Bye
On Thu, 21 Jun 2001, Uwe Bonnes wrote:
Hallo Ove,
is something like appended patch right to get direct port access working for a win95 program? At least my dongle protected program (spde) doesn't crash any more and recognizes the license.
I meant to reply sooner or later... it doesn't seem right to me to load the entire DOS subsystem for reading out the timer. Direct port access is probably not allowed for win32 apps under NT anyway? Perhaps there should be a fallback there for when the DOS subsystem is not loaded? Then again, I'm not sure how it's supposed to work... it probably can't hook the timer interrupt or set the timer rate or anything without upsetting the OS?
"Ove" == Ove Kaaven ovehk@ping.uio.no writes:
Ove> On Thu, 21 Jun 2001, Uwe Bonnes wrote:
>> Hallo Ove, >> >> is something like appended patch right to get direct port access >> working for a win95 program? At least my dongle protected program >> (spde) doesn't crash any more and recognizes the license.
Ove> I meant to reply sooner or later... it doesn't seem right to me to Ove> load the entire DOS subsystem for reading out the timer. Direct Ove> port access is probably not allowed for win32 apps under NT anyway? Ove> Perhaps there should be a fallback there for when the DOS subsystem Ove> is not loaded? Then again, I'm not sure how it's supposed to Ove> work... it probably can't hook the timer interrupt or set the timer Ove> rate or anything without upsetting the OS?
What about checking if Dosvm.GetTimer is initialized and if it isn't initialized do give back the dummy value? At least the spde doesn't seem to care...
@@ -291,7 +303,7 @@ else { dummy_ctr -= 1 + (int)(10.0 * rand() / (RAND_MAX + 1.0)); - if (chan == 0) /* System timer counter divisor */ + if ((chan == 0) && (Dosvm.GetTimer))/* System timer counter divisor */ { /* FIXME: Dosvm.GetTimer() returns quite rigid values */ tempval = dummy_ctr + (WORD)Dosvm.GetTimer(); @@ -450,8 +470,9 @@ case 0: /* latch timer */ tmr_8253[chan].latched = TRUE; dummy_ctr -= 1 + (int)(10.0 * rand() / (RAND_MAX + 1.0)); - if (chan == 0) /* System timer divisor */ - tmr_8253[chan].latch = dummy_ctr + (WORD)Dosvm.GetTimer(); + if ((chan == 0) && (Dosvm.GetTimer))/* System timer divisor */ + tmr_8253[chan].latch = dummy_ctr + + (Dosvm.GetTimer)?(WORD)Dosvm.GetTimer():0; else { /* FIXME: intelligent hardware timer emulation needed */