; EasterZ80 ; Compute Gregorian Easter according to ; Book of Common Prayer in Z80 assembly ; Ian Taylor, December 2010 ; http://chilliant.com/easter.html ; On entry: ; HL is Gregorian year (0..65535) ; On exit: ; A is "Day of March" for Easter (22..56) ; B is day of month of Easter (1..31) ; C is month of year of Easter (3..4) ; All other registers preserved ; Constraints: ; No memory usage, except 5 stack words ; No use of IX, IY or shadow registers ; No branching or calls ; Fixed computation time: 2432 T-cycles ; Code bytes used: 499 PUSH DE PUSH HL LD D, H LD A, L SRL D RRA SRL D RRA LD B, D LD C, A SRL D RRA LD E, A PUSH DE PUSH HL EX DE, HL SRL H RRA LD L, A ADD HL, BC LD D, H LD A, L ADD HL, BC ADD HL, BC SRL D RRA SRL D RRA SRL D RRA SRL D RRA LD E, A ADD HL, DE SRL D RRA LD E, A ADD HL, DE SRL D RRA SRL D RRA RRA RRA RRA AND 31 LD E, A ADD HL, DE LD A, L SRL H RRA SRL H RRA SRL H RRA SRL H RRA NEG LD E, A POP HL ADD A, A ADD A, A ADD A, A ADD A, E ADD A, A ADD A, E ADD A, L LD E, A EX DE, HL ADD A, 13 AND 32 RRCA LD D, A RRCA RRCA LD E, A RRCA RRCA ADD A, L SUB E SUB D LD L, A EX (SP), HL LD A, L LD D, H SRL D RRA SRL D RRA LD E, A ADD HL, DE LD E, H LD A, L RLA RL E RLA RL E LD D, 0 ADD HL, DE SRL E ADD HL, DE LD A, L SRL H RRA SRL H RRA SRL H RRA SRL H RRA LD L, A PUSH HL CPL LD H, A ADD A, A ADD A, A ADD A, A LD L, A ADD A, A ADD A, C ADD A, H ADD A, L RLCA RLCA RLCA ADD A, 2 AND 7 LD E, A POP HL ADD HL, DE PUSH BC LD B, H LD C, L ADD HL, HL ADD HL, BC SRL H RR L SRL H RR L EX DE, HL POP HL AND A SBC HL, DE PUSH HL PUSH DE LD H, B LD L, C ADD HL, HL INC HL ADD HL, HL ADD HL, HL INC HL LD A, L LD B, H LD C, L SRL H RRA LD D, H LD E, A SRL H RRA SRL H RRA LD L, A ADD HL, DE LD D, H LD A, L SRL D RRA SRL D RRA SRL D RRA SRL D RRA RRA RRA AND 63 LD E, A ADD HL, DE SRL E ADD HL, DE EX DE, HL LD H, B LD L, C LD A, E SRL D RRA SRL D RRA SRL D RRA SRL D RRA LD C, A ADD A, A ADD A, A ADD A, A LD B, A LD A, L SUB C SUB B SUB B SUB B LD B, 7 ADD A, B RLCA RLCA RLCA AND B ADD A, C POP DE POP HL EX (SP), HL LD B, A LD C, L LD A, L RLCA RLCA RLCA ADD A, L LD L, A LD A, B LD B, H ADD HL, HL ADD HL, DE ADD HL, BC LD D, B LD E, A SBC HL, DE LD E, 15 ADD HL, DE LD A, L LD B, L SRL H RRA LD D, H LD E, A SRL H RRA RRA RRA RRA AND 31 LD L, A ADD HL, DE LD A, L SRL H RRA RRA RRA RRA AND 31 LD E, A LD A, L AND 240 NEG ADD A, E ADD A, A ADD A, B LD E, A ADD A, 2 RLCA RLCA RLCA AND 7 LD D, A RLCA RLCA RLCA RLCA SUB D LD D, A LD A, E SUB D SUB D LD B, A ADD A, A ADD A, A ADD A, A LD L, A LD A, 138 SUB C LD E, A LD D, 115 ADD HL, HL ADD HL, HL EX DE, HL SBC HL, DE LD A, H RRA AND A RRA ADD A, B LD H, 0 LD L, A INC L INC L POP BC ADD HL, BC POP BC EX DE, HL LD H, A LD A, C ADD A, E LD L, A PUSH BC PUSH HL SRL D RR E SRL B RR C LD H, B LD A, C SRL H RRA SRL H RRA SRL H RRA LD L, A ADD HL, BC ADD HL, DE LD A, E SRL D RRA SRL D RRA SRL D RRA LD E, A ADD HL, DE LD C, H LD B, L XOR A LD D, A SLA B RL C RLA SLA B RL C RLA LD B, A LD A, H ADD HL, BC RRA RRA RRA RRA AND 15 LD E, A ADD HL, DE LD A, L SRL H RRA SRL H RRA LD L, A ADD A, A ADD A, A ADD A, A SUB L LD L, A POP BC LD A, C SUB L LD E, A LD H, D LD A, B SUB E LD L, A LD B, E LD C, L ADD HL, HL ADD HL, HL EX DE, HL ADD HL, DE EX DE, HL ADD HL, HL ADD HL, HL ADD HL, HL EX DE, HL ADD HL, DE LD A, B ADD A, A ADD A, A ADD A, A ADD A, B ADD A, H RLCA RLCA AND 3 LD B, A RLA RLA RLA SUB B ADD A, C LD E, A RLCA RLCA RLCA AND 1 LD C, A ADD A, E AND 31 LD B, A INC C INC C INC C LD A, E POP HL POP DE RET