diff --git a/VersionASM b/VersionASM index 492c6807806fb927617e68ebcd8296418d125ce9..12366d42de76dc88f6349369e60273ab20b8783d 100644 --- a/VersionASM +++ b/VersionASM @@ -6,9 +6,9 @@ GBLS Module_MinorVersion GBLS Module_Date GBLS Module_FullVersion -Module_MajorVersion SETS "4.84" -Module_Version SETA 484 +Module_MajorVersion SETS "4.85" +Module_Version SETA 485 Module_MinorVersion SETS "" -Module_Date SETS "19 Aug 1999" -Module_FullVersion SETS "4.84" +Module_Date SETS "24 Aug 1999" +Module_FullVersion SETS "4.85" END diff --git a/VersionNum b/VersionNum index ace355b315341d0038c234aaaee2d180ae842919..b134f877b8717e6e531f52e846791275e56cafb1 100644 --- a/VersionNum +++ b/VersionNum @@ -1,15 +1,15 @@ -/* (4.84) +/* (4.85) * * This file is automatically maintained by srccommit, do not edit manually. * */ -#define Module_MajorVersion_CMHG 4.84 +#define Module_MajorVersion_CMHG 4.85 #define Module_MinorVersion_CMHG -#define Module_Date_CMHG 19 Aug 1999 +#define Module_Date_CMHG 24 Aug 1999 -#define Module_MajorVersion "4.84" -#define Module_Version 484 +#define Module_MajorVersion "4.85" +#define Module_Version 485 #define Module_MinorVersion "" -#define Module_Date "19 Aug 1999" +#define Module_Date "24 Aug 1999" -#define Module_FullVersion "4.84" +#define Module_FullVersion "4.85" diff --git a/s/PMF/osword b/s/PMF/osword index 5b72601a92dd87d9982dc3cc1364fdeaa0c81cac..6317ee4bb6a790193ec330240df25ff7c6929c79 100644 --- a/s/PMF/osword +++ b/s/PMF/osword @@ -766,6 +766,9 @@ OsWord0F ROUT LDRB R0, [R1] MOV R9, #0 + TEQ R0, #5 ; write all of time (5-byte UTC) + BEQ OsWord0F_5byte + TEQ R0, #8 ; write hours, minutes, seconds MOVEQ R9, #1 @@ -778,7 +781,16 @@ OsWord0F ROUT TEQ R9, #0 Pull "R5-R10, PC", EQ ; unknown call, pass it on - [ {TRUE} ; international version uses Territory_ConvertTimeStringToOrdinals +; first set up data in registers as follows :- +; R0 = hours +; R1 = minutes +; R2 = days +; R3 = months +; (R4 -> block) +; R5 = year(lo) +; R6 = year(hi) +; R7 = seconds +; R8 = centiseconds TST R9, #2 BEQ %FT01 @@ -893,145 +905,22 @@ OsWord0F ROUT MOV r4, #100 DivRem r6, r5, r4, r14 ; r5 = Year (lo), r6 = Year (hi) - | - -; first set up data in registers as follows :- -; R0 = hours -; R1 = minutes -; R2 = days -; R3 = months -; (R4 -> block) -; R5 = year(lo) -; R6 = year(hi) -; R7 = seconds -; R8 = centiseconds - -; first do the date part, if appropriate - - TST R9, #2 - MOVEQ R2, #-1 ; if not doing date, set days, - MOVEQ R3, #-1 ; months, year(lo), year(hi) to -1 - MOVEQ R5, #-1 - MOVEQ R6, #-1 - BEQ %FT50 ; [not doing date] - -; do the months - - LDRB R1, [R4, #8] ; get first char - ORR R1, R1, #&20 ; lower case it - LDRB R2, [R4, #9] ; get second char - ORR R2, R2, #&20 ; lower case it - ORR R1, R1, R2, LSL #8 ; merge - LDRB R2, [R4, #10] ; get third char - ORR R2, R2, #&20 ; lower case it - ORR R1, R1, R2, LSL #16 ; merge - - ADR R2, MonthNameTable-4 ; months start at 1 - MOV R3, #12 ; try December first -10 - LDR R0, [R2, R3, LSL #2] ; get month word - TEQ R0, R1 - SUBNES R3, R3, #1 ; if not equal, decrement month - BNE %BT10 ; and if non-zero, loop - - TEQ R3, #0 ; failed to match ? - BEQ Bad0F ; then ignore all - -; R3 now contains the month number - -; do the days - - MOV R1, #5 ; offset to days - BL GetDecimalPair - BCS Bad0F ; bad digits - - MOVS R2, R1 - BEQ Bad0F ; zero days not allowed - - ADR R0, MonthLengths ; now validate days against - LDRB R1, [R0, R3] ; maximum number of days in that month - CMP R1, R2 ; (29 for Feb) and eliminate if invalid - BCC Bad0F - -; R2 now contains the days - -; now do the years so we can check whether 29 Feb is legal - - MOV R1, #12 ; offset to year(hi) - BL GetDecimalPair - MOVCC R6, R1 - - MOVCC R1, #14 ; offset to year(lo) - BLCC GetDecimalPair - MOVCC R5, R1 - - BCS Bad0F - -; now check for Feb 29 - - TEQ R3, #2 ; month = Feb ? - TEQEQ R2, #29 ; and day = 29 ? - BNE %FT20 ; [not 29 Feb] - - TST R5, #3 ; is year multiple of 4 - BNE Bad0F ; no, then 29 Feb is bad - - TEQ R5, #0 ; is it a century year ? - BNE %FT20 ; no, then 29 Feb is good - - TST R6, #3 ; is it a multiple of 400 ? - BNE Bad0F ; no, then 29 Feb is bad - -20 - ADD R4, R4, #16 ; move on to time part - -; now do the time part, if appropriate - -50 - TST R9, #1 - MOVEQ R0, #-1 ; if not doing time, set hours, - MOVEQ R1, #-1 ; minutes and seconds to -1 - MOVEQ R7, #-1 - MOVEQ R8, #-1 - BEQ %FT80 ; [not doing time part] - -; do the seconds - - MOV R1, #7 ; offset to seconds - BL GetDecimalPair - CMPCC R1, #60 - MOVCC R7, R1 - -; zero the centiseconds - - MOV R8, #0 - -; do the hours - - MOVCC R1, #1 ; offset to hours - BLCC GetDecimalPair - CMPCC R1, #24 - MOVCC R0, R1 - -; do the minutes - - MOVCC R1, #4 - BLCC GetDecimalPair - CMPCC R1, #60 - - BCS Bad0F -80 - -; we have now completely validated the settings - - ] ;International version. - BL SetTime ; also updates 5-byte RealTime Bad0F ; come here if setting invalid Pull "R5-R10, R14" MyOsWord +OsWord0F_5byte + SUB SP, SP, #36 + ADD R1, R1, #1 ; process the user's 5-byte block + MOV R2, SP + SWI XTerritory_ConvertTimeToUTCOrdinals + ADDVS SP, SP, #36 + BVS Bad0F + MOV R10, #0 ; no string on stack + B %BT10 ; nip back in to the main handler + ; ***************************************************************************** [ {FALSE} ; not needed for internationalised kernel