> ARM.ProgTips.DofWeek 0 Calculate day of week for 8-bit year range 7 Works for any date from 1900-01-01 to 2199-12-31. (: 2 mc% 99 < P=0 1 FP%=mc%:O%=P% P[OPT P*2+4 Z\ On entry R0=day, 1..31 d\ R1=month, 1..12 n$\ R2=year-1900, 0..255 xI\ On exit R0=day of week 0..6 for Sun..Sat, needs incrementing with H\ ADD R0,R0,#1 after calling to become standard 1..7 range B\ Size 76 bytes (68 bytes if year 1900 reduction removed) \ .DayOfWeek0 9SUB R2,R2,#1900 &FF00 :\ Reduce year 1900+y to y SUB R2,R2,#1900 &00FF .DayOfWeek CMP R1,#3 ASUBLOS R2,R2,#1 :\ If Jan or Feb, decrement year ;MOVMI R2,#5 :\ 1900 is not a leap year /ADD R0,R0,R2 :\ R0=day+year 6ADD R0,R0,R2,LSR #2 :\ R0=day+year+year/4 ;CMP R2,#2100-1900 :\ 2100 is not a leap year BSUBHS R0,R0,#1 :\ R0=day+year+year/4-(year>2099) 5ADR R2,dowMonths-1 :\ R2=>month offsets 3LDRB R1,[R2,R1] :\ R1=month offset "PADD R0,R0,R1 :\ R0=day+year+year/4-(year>2099)+offset[month] , .dowMOD7 6.SUBS R0,R0,#7:BCS dowMOD7 :\ Reduce 7 @PADD R0,R0,#7 :\ Restore for last SUB, change to ADD R0,R0,#8 J2MOV PC,R14 :\ to return 1..7 T: ^.dowMonths h1EQUB 1:EQUB 4:EQUB 3:EQUB 6 :\ Month offsets rEQUB 1:EQUB 4:EQUB 6:EQUB 2 |EQUB 5:EQUB 0:EQUB 3:EQUB 5 \ ] 1ݤday(A%):="SunMonTueWedThuFriSat",A%*3-2,3) C%=2001-1900  B%=1 12  A%=1 31 U%=( DayOfWeek) 255 < A%;"/";B%;"/";1900+C%;" - ";day(1+(U% 255));" ";~U% . A%=30: B%=4 B%=6 B%=9 B%=11:A%=32 7 A%=28: B%=2: (C% 4) ((C%+1900) 400):A%=32  A%=29: B%=2:A%=32