TEXAS 2-STEP 2.0 TO CALCULATE THE DAY FOR ALL DATES A.D.2*2 TO 2y2k-2 - utilising Hans Lachman's Method of Conversion - Strictly adhering to Lachman's Maxim (Complexity is a diseconomy of scale) this method was designed to run sublimely as a stand-alone function, when your only recourse is to call a 68k Asm program via AMS on TI calculators: i.e. no values looked up in tables, files or libraries when executing, no kernel, no system calls, no exception processing, minimal registers to be used, nor the need to save any. It is valid for Julian dates as of 4 A.D. and for Gregorian ones as of 1582 A.D. Although using a processor more sophisticated than found on four-function calculators, this method is simple to execute using Hans' original Method. It succeeds where other Methods do not on the lowliest 68k device, while needing just 2 registers to compute the day of the week in less than 2 dozen arithmetic operations. The function below returns a day-number compatible with ISO 8601 when called with three inputs at their corresponding locations: ; WDN, an address - for storing result d0 ; FLAG, 0 or 2 - to choose between Julian or Gregorian, respectively ; DATE, year0mDA - date stamp as binary word&byte&byte in basic ISO format ; move.l DATE,d0 move.l d0,d1 ; ; APPLY STEP 1 - LACHMAN'S CONGRUENCE--MOD 100 andi.l #$f00,d0 divu #100,d0 addi.w #93,d0 andi.l #$ff,d0 divu #100,d0 ; MonthIndex in the upper word (mod100) ; ; APPLY STEP 2 - USING SPQR AS A JULIAN YLLD swap d0 ; MI add.w DATE,d0 ; + year andi.l #$fff,d0 add.b d1,d0 ; + DA subi.l #$300,d1 lsr #2,d1 swap d1 add.w d1,d0 ; + SPQR/4 ; ; (APPLY STEP ".0" - GREGORIAN ADJUSTMENT) mulu FLAG,d1 divu #50,d1 mulu #25,d1 lsr #2,d1 add.w d1,d0 ; + SP00div16 add.w FLAG,d0 ; (SP32div16) + SPQR/4 + year + MI + DA ; ; divu #7,d0 swap d0 ; d0.w becomes the day-number ; move.w d0,WDN ; returns the day-number to address WDN rts ; ; Days of the week correspond to day-numbers as: ; Sun=0 Mon=1 Tue=2 Wed=3 Thu=4 Fri=5 Sat=6 The 2-Step is designed such that parameters are to be passed in the proper formats. Thus, one must pass 2 as a word for a Gregorian date as of 15.oct.1582, and 0 as of 1.iii.IV for a Julian date where a year is to start in January and is leap if divisible by 4. Some historians believe that IV A.D. was a leap year, such that a FLAG of 0 may be likewise applied as early as 1.iii.I. It applies historically as well to 29.ii.MCM--a valid date for Orthodox countries like Russia--and will continue to give valid conversions for dates on such Orthodox calendars for some time. The routine accordingly gives compleat, valid, historical continuity in converting (non-Old-Style) A.D. dates from 1.iii.IV (Julian) and from the Ides of October 1582 (Gregorian) until January, 3998 (Gregorian or non-Old-Style Julian). -- REFERENCES gopher://gopherite.org/0/users/retroburrowers/TemporalRetrology/QL/JG gopher://gopherite.org/0/users/retroburrowers/TemporalRetrology/cc/g4