ISCOVE%UTOROCI.bitnet@ugw.utcs.utoronto.ca (09/14/89)
Version 3.5 handles the task stack incorrectly. I've now had time to
study Markus Wandel's Exec disassembly. The extra longword on the
Amiga task stack is used (in AddTask, Switch and Dispatch) to
store/restore the context of a 68881 if it is present. So NoClick has
to test and adjust only for the presence of a 68881 and not for a
68010/20/30 as 3.5 did.
Accordingly, NoClick3.6 :
begin 644 NoClick3.6
M```#\P`````````!``````````````!2```#Z0```%)(YS\^+'@`!'P!1_D`8
M``$R2?D```$`3J[_B$'N`98B3$ZN_NPFP"!`9O1'Z__\0>X!I%'._^I.KO^"Y
M2?D```$R80``M"!K`$:Q_`#X``!C``">0?D```$`<`!R`$/Y```!$DZN_D1F1
M``"&)GD```$F0_D```$23J[^/B)K``J2_``8)!%822!1D,)V`#8(5D,@`W(!,
M3J[_.B)`Y$L@0B+84<O__"I`"&T`!P$%.WP,@!HX>``Z+@$H"`4`!&<">`1)"
M^0```3)A+B1S0$:5PMO*3J[_B">-0$9.KO^"81AG#DZN_X@GC4!&3J[_@F#N$
M3-]\_'``3G4B7"9I`#8@"4YU=')A8VMD:7-K+F1E=FEC90``````````````C
M`````````````````````````````````````````````````````````$YQ_
M```#[`````@`````````#````!(````\````5````%X```!L````<@```,(`C
'```````#\@@`]
``
end
size 412
Here is the source for the revised section. The rest of the
source was posted to c.s.a. with version 3.3/3.4 and can be
mailed on request.
*-----------------------------------------------------------------------*
* Fix each task's exit vector to point to ram version *
*-----------------------------------------------------------------------*
checkcpu:
moveq #0,d4 ;d4 = 0, offset for fixptrs
move.w 296(a6),d5 ;AttnFlags = 0/1/$11 if cpu is 68000/10/20
btst.b #4,d5 ;68881 = 00010xxx
beq.s fixptrs ;branch if no 68881
moveq #4,d4 ;d4 = 4 if 68881
fixptrs:
lea tasks,a4 ;a4 = address of task list
bsr.s nextset ;a3 = tc_SPReg for listed task
move.l $46(a3,d4),a2 ;a2 = finalPC, td code that task exits to
sub.l d2,a2 ;a2 = offset of code from start (d2) in rom
add.l a2,a5 ;a5 = corresponding address in ram copy
jsr _LVODisable(a6)
move.l a5,$46(a3,d4) ;replace corrected finalPC pointer
jsr _LVOEnable(a6)
fixloop:
bsr.s nextset
beq.s exit ;exit on a1 = 0 (address next listed task)
jsr _LVODisable(a6)
move.l a5,$46(a3,d4) ;replace corrected finalPC pointer
jsr _LVOEnable(a6)
bra.s fixloop
Norman Iscove iscove@utoroci (bitnet)