diff --git a/VersionASM b/VersionASM index cc5bcc4372dc59c8f6bfeca1b881fb946d48a5c9..c9f2267738b642c4addb8980135cb255c753b727 100644 --- a/VersionASM +++ b/VersionASM @@ -13,11 +13,11 @@ GBLS Module_ComponentPath Module_MajorVersion SETS "5.35" Module_Version SETA 535 -Module_MinorVersion SETS "4.79.2.98.2.23" -Module_Date SETS "20 Feb 2010" -Module_ApplicationDate SETS "20-Feb-10" +Module_MinorVersion SETS "4.79.2.98.2.24" +Module_Date SETS "28 Feb 2010" +Module_ApplicationDate SETS "28-Feb-10" Module_ComponentName SETS "Kernel" Module_ComponentPath SETS "castle/RiscOS/Sources/Kernel" -Module_FullVersion SETS "5.35 (4.79.2.98.2.23)" -Module_HelpVersion SETS "5.35 (20 Feb 2010) 4.79.2.98.2.23" +Module_FullVersion SETS "5.35 (4.79.2.98.2.24)" +Module_HelpVersion SETS "5.35 (28 Feb 2010) 4.79.2.98.2.24" END diff --git a/VersionNum b/VersionNum index 7925c65c648e049f92faa40bbdabf71c626005ab..8bce507ca5d97e37f2b01ffc842faf43e3656ee0 100644 --- a/VersionNum +++ b/VersionNum @@ -5,19 +5,19 @@ * */ #define Module_MajorVersion_CMHG 5.35 -#define Module_MinorVersion_CMHG 4.79.2.98.2.23 -#define Module_Date_CMHG 20 Feb 2010 +#define Module_MinorVersion_CMHG 4.79.2.98.2.24 +#define Module_Date_CMHG 28 Feb 2010 #define Module_MajorVersion "5.35" #define Module_Version 535 -#define Module_MinorVersion "4.79.2.98.2.23" -#define Module_Date "20 Feb 2010" +#define Module_MinorVersion "4.79.2.98.2.24" +#define Module_Date "28 Feb 2010" -#define Module_ApplicationDate "20-Feb-10" +#define Module_ApplicationDate "28-Feb-10" #define Module_ComponentName "Kernel" #define Module_ComponentPath "castle/RiscOS/Sources/Kernel" -#define Module_FullVersion "5.35 (4.79.2.98.2.23)" -#define Module_HelpVersion "5.35 (20 Feb 2010) 4.79.2.98.2.23" +#define Module_FullVersion "5.35 (4.79.2.98.2.24)" +#define Module_HelpVersion "5.35 (28 Feb 2010) 4.79.2.98.2.24" #define Module_LibraryVersionInfo "5:35" diff --git a/hdr/VideoDevice b/hdr/VideoDevice index e0b0197897d6109c05e2d51961a488ded6430b98..f055bce4571bec99b6dc9e7be9d4b2f936fb52b4 100644 --- a/hdr/VideoDevice +++ b/hdr/VideoDevice @@ -26,12 +26,10 @@ Included_Hdr_VideoDevice SETL {TRUE} ; Device for VDU video devices - ^ 0 - # HALDeviceSize -HALDevice_VDUAddress2 # 4 -HALDevice_VDUDevice2 # 4 -HALDevice_VDUDeviceSpecificField # 4 -HALDevice_VDU_Size * :INDEX: @ + ^ 0 + # HALDeviceSize +HALDevice_VDUDeviceSpecificField # 4 +HALDevice_VDU_Size * :INDEX: @ ] diff --git a/s/VMSAv6 b/s/VMSAv6 index dfffc458a2f60290d5f6fc16ab4ce392a0f6854c..42d17f3eee7bb7af561cbc5b606e0fc111d77739 100644 --- a/s/VMSAv6 +++ b/s/VMSAv6 @@ -552,15 +552,30 @@ DAbPreVeneer ROUT SUB r11, r2, #8*4 ; r11 -> register bank STR r4, [sp, #7*4] ; store aborter's PC in user register bank - - [ {TRUE} - ; For now, don't attempt any fixup on ARMv6+, since we'll get it wrong - B %FT90 - ] +; B %FT90 TST r0, #T32_bit ; were they in Thumb mode? if so, give up now BNE %FT90 + [ {TRUE} + ; For now, the only fixup we do is for MVA-based cache/TLB ops, which can abort on ARMv7 if the specified MVA doesn't have a mapping. + ; MVA cache ops have the form coproc=p15, CRn=c7, opc1=0, opc2=1 + ; MVA TLB ops have the form coproc=p15, CRn=c8, opc=0, opc2=1 + ; Note that some non-MVA ops also follow the above rules - at the moment we make no attempt to filter those false-positives out + ; This code is also written from the perspective of running on an ARMv7 CPU - behaviour under ARMv6 hasn't been checked! + LDR r10, [r4, #-8] ; Get aborting instruction + CMP r10, #&F0000000 + BHS %FT90 ; Ignore cc=NV, which is MCR2 encoding + LDR r9, =&0FFF0FF0 ; Mask of interesting bits + AND r10,r10,r9 + LDR r9, =&0E000F30 ; Desired value, minus CRn + EOR r10,r10,r9 + CMP r10, #&70000 ; CRn=c7? + CMPNE r10, #&80000 ; CRn=c8? + BEQ %FT70 ; It's an MVA-based op. Ignore the abort and resume execution + B %FT90 ; Else skip the old & broken LDR/STR fixup code and go straight to the exception handler, + ] + ;ARM 810 or StrongARM allow signed byte load or half-word load/stores - not supported at present ;***KJB - need to think about LDRH family LDR r10, [r4, #-8]! ; r10 = actual instruction that aborted, and r4 points to it diff --git a/s/vdu/vdudriver b/s/vdu/vdudriver index ed82277809a59c8e694a6b2c7f488f0f4b403469..20bebb677b29b55c5d5e9233640f79a9c3c63b40 100644 --- a/s/vdu/vdudriver +++ b/s/vdu/vdudriver @@ -803,6 +803,8 @@ mchsub_3 ; try to extend the amount of screen memory + ! 0, "Need to fix ModeChangeSub to not leave CursorAddr, etc. pointing to unmapped pages during DA resize. Causes bad stuff should an abort occur/screen output be attempted!" ; Note that even enlarging the DA can leave the pointers in a bad state, due to the way the screen DA handler shuffles down/unmaps the lower mapping of VRAM before the higher copy is enlarged + MOV R0, #2 ; expand screen memory SWI XOS_ChangeDynamicArea BVC %FT08