EigenSysInfo 0.02 - Example of WimpSWIVe post-trapping by AjC of DoggySoft Requires BAX 1.00 or later to compile. Source best viewed in a big mode, 114 column formatting trappedswi=&400F2-&400C0 modevar_yeig=5 XOS_WriteI=&20100 vbit=28 code 100000 0,"Error in compilation, pass "+ pass+": "+ $+", at line "+ pass=4 O%=code:P%=0 [OPT pass Equd 0 Equd mod_init Equd mod_quit Equd 0 Equd mod_title Equd mod_help Equd 0 Equd 0 Equd 0 Equd 0 Equd 0 .specialfilter Equs "WSWI" .mod_title Equz "EigenSysInfo" .mod_help ' Equs "Eigen SysInfo"+ (" Equz "0.02 (27 Apr 1995)" .suffix_hires Equz "22" .suffix_lores Equz "24" Align .mod_init StmFd R13!,{R0-R4,R14} Ldr R0,specialfilter Mov R1,#trappedswi Orr R1,R1,#1<<31 Mov R2,R12 8 Adr R3,pre_readsysinfo 9! Adr R4,post_readsysinfo :\ Swi "XWimp_RegisterFilter" ; claim SWI Wimp_ReadSysInfo AddVs R13,R13,#4 LdmVsFd R13!,{R1-R4,Pc} Mov R0,#0 >s Str R0,[R12] ; initialise single word workspace (=private word!) LdmFd R13!,{R0-R4,Pc}^ .mod_quit StmFd R13!,{R0-R4,R14} Ldr R0,specialfilter Mov R1,#trappedswi Mov R2,R12 F Adr R3,pre_readsysinfo G! Adr R4,post_readsysinfo H^ Swi "XWimp_RegisterFilter" ; release SWI Wimp_ReadSysInfo LdmFd R13!,{R0-R4,Pc}^ .pre_readsysinfo StmFd R13!,{R14} Ldr R14,[R12] Cmp R14,#0 AddGt R14,R14,#1 StrGt R14,[R12] Qe LdmGtFd R13!,{Pc}^ ; count number of inner SysInfo calls Teq R0,#2 MovEq R14,#1 Tk StrEq R14,[R12] ; flag as signifcant if correct reason code LdmFd R13!,{Pc}^ .post_readsysinfo StmFd R13!,{R0-R2,R14} Mov R0,Pc Ldr R14,[R12] Cmp R14,#1 SubPl R14,R14,#1 StrPl R14,[R12] ^l LdmNeFd R13!,{R0-R2,Pc}^ ; if SWI not flagged as significant, pass on Tst R0,#1<EigSysInfo",&FFA,,code,O%