10 REM ***** C64 ANTIKYTHERA SIMULATOR 11 REM VERSION 1.0 (06.12.2022) 12 REM (C) 2022 JENS PUHLE, ALZENAU 13 REM 50 GOSUB 2000:GOSUB 3000 60 AM=0:REM AUTOMATIC MODE 100 GOSUB 1000 110 IF CH$="V" OR CH$=" " THEN GOSUB 3000:GOTO 190 115 IF CH$="E" THEN 990 120 IF CH$="H" THEN GOSUB 1100:GOTO 190 130 IF CH$="+" THEN GF=GF+DELTA:GOSUB5000:GOSUB3000:GOTO 190 135 IF CH$="-" THEN GF=GF-DELTA:GOSUB5000:GOSUB3000:GOTO 190 140 IF CH$="Y" THEN GOSUB 1200:GOSUB5000:GOSUB3000:GOTO 190 150 IF CH$="D" THEN GOSUB 1300:GOSUB3000:GOTO 190 160 IF CH$="A" THEN AM=ABS(AM-1):GOSUB3000:GOTO190 180 GOSUB 3000 185 IF CH$<>"" THEN PRINT:PRINT "PRESS (H) FOR HELP" 190 IF AM=1 THEN GOSUB200:GOTO110 195 GOTO 100 200 REM AUTOMATIC MODE 210 GF=GF+DELTA:GOSUB5000 220 GET CH$ 230 RETURN 990 PRINT CHR$(154);"ANTIKYTHERA SIMULATOR TERMINATED" 992 GOSUB 1900 995 END 1000 REM GET A CHARACTER 1005 GET CH$:IF CH$="" THEN 1005 1009 RETURN 1100 REM HELP 1102 GOSUB 3100 1110 PRINT "(V) VISUALIZE MECHANISM" 1120 PRINT "(+) ADD DELTA TO GDN" 1130 PRINT "(-) SUBTRACT DELTA FROM GDN" 1140 PRINT "(Y) SELECT A YEAR" 1150 PRINT "(D) CHANGE DELTA" 1160 PRINT "(A) TOGGLE AUTOMATIC MODE" 1170 PRINT "(H) DISPLAY HELP" 1180 PRINT "(E) EXIT THE PROGRAM" 1199 RETURN 1200 REM SELECT A YEAR 1202 GOSUB 3100 1208 PRINT "SELECT A YEAR":PRINT 1210 PRINT "(1) 776 BC" 1212 PRINT "(2) 330 BC" 1214 PRINT "(3) 205 BC" 1218 PRINT "(4) 1 AD" 1230 PRINT "(5) 1582" 1232 PRINT "(6) 1896" 1234 PRINT "(7) 1970" 1240 PRINT "(8) 1999" 1245 PRINT "(9) 2023" 1258 PRINT "(A) ABORT" 1260 GOSUB 1000 1270 IF CH$="1" THEN GF=-861170:RETURN 1272 IF CH$="2" THEN GF=-698091:RETURN 1274 IF CH$="3" THEN GF=-652613:RETURN 1278 IF CH$="4" THEN GF=-577736:RETURN 1285 IF CH$="5" THEN GF=1:RETURN 1287 IF CH$="6" THEN GF=114400:RETURN 1290 IF CH$="7" THEN GF=141428:RETURN 1292 IF CH$="8" THEN GF=152242:RETURN 1295 IF CH$="9" THEN GF=160786:RETURN 1298 IF CH$="A" THEN RETURN 1299 GOTO 1260 1300 REM CHANGE DELTA 1302 GOSUB 3100 1308 PRINT "SELECT DELTA":PRINT 1310 PRINT "(D) DAY" 1312 PRINT "(W) WEEK" 1315 PRINT "(H) HALF MONTH (14.765 DAYS)" 1318 PRINT "(L) LUNAR ORBIT (27.322 DAYS)" 1320 PRINT "(M) MONTH (29.530 DAYS)" 1325 PRINT "(Y) YEAR (365.256 DAYS)" 1330 PRINT "(O) OLYMPIAD (4 YEARS)" 1335 PRINT "(S) SAROS (223 MONTHS)" 1340 PRINT "(C) CENTURY (100 YEARS)" 1358 PRINT "(A) ABORT" 1360 GOSUB 1000 1370 IF CH$="D" THEN DELTA=1:DN$="DAY":RETURN 1372 IF CH$="W" THEN DELTA=7:DN$="WEEK":RETURN 1374 IF CH$="H" THEN DELTA=LM/2:DN$="HALF MONTH":RETURN 1376 IF CH$="L" THEN DELTA=LO:DN$="LUN.ORBIT":RETURN 1378 IF CH$="M" THEN DELTA=LM:DN$="MONTH":RETURN 1380 IF CH$="Y" THEN DELTA=SY:DN$="YEAR":RETURN 1390 IF CH$="O" THEN DELTA=1461:DN$="OLYMPIAD":RETURN 1392 IF CH$="S" THEN DELTA=223*LM:DN$="SAROS":RETURN 1395 IF CH$="C" THEN DELTA=36525:DN$="CENTURY":RETURN 1398 IF CH$="A" THEN RETURN 1399 GOTO 1260 1900 REM SET DEFAULT C64 COLORS 1902 POKE 53281,6:POKE 53280,14:PRINT CHR$(154) 1909 RETURN 1910 REM SET ANTIKYTHERA COLORS 1912 POKE 53281,9:POKE 53280,8:PRINT CHR$(5) 1919 RETURN 2000 REM INITIALIZATION 2005 PRINT "INITIALIZATION ..." 2010 SY=365.2563604167 : REM SOLAR YEAR 2020 LO=27.322 : REM LUNAR ORBIT 2030 LM=29.53 : REM LUNAR MONTH 2040 SD=-652613:REM START DATE 205BC-01-01 (NEW MOON) 2050 GF=SD:GDN=INT(GF):REM GF=GDN FLOAT 2060 DELTA=1:DN$="DAY" 2065 DC$="JULIAN" 2100 REM INIT ANCIENT ECLIPSE DATA 2105 PRINT "INIT ANCIENT ECLIPSE DATA ..." 2110 DIM EA$(223):REM ECLIPSE ARRAY 2120 FOR I=0 TO 223:EA$(I)="-":NEXT 2202 EA$(2)="LUNAR+SOLAR" 2203 EA$(3)="LUNAR" 2208 EA$(8)="LUNAR+SOLAR" 2213 EA$(13)="SOLAR" 2214 EA$(14)="LUNAR+SOLAR" 2219 EA$(19)="SOLAR" 2220 EA$(20)="LUNAR" 2225 EA$(25)="SOLAR" 2226 EA$(26)="LUNAR" 2231 EA$(31)="SOLAR" 2232 EA$(32)="LUNAR" 2237 EA$(37)="LUNAR+SOLAR" 2238 EA$(38)="LUNAR" 2243 EA$(43)="LUNAR+SOLAR" 2249 EA$(49)="LUNAR+SOLAR" 2255 EA$(55)="LUNAR+SOLAR" 2260 EA$(60)="SOLAR" 2261 EA$(61)="LUNAR+SOLAR" 2266 EA$(66)="SOLAR" 2267 EA$(67)="LUNAR" 2272 EA$(72)="SOLAR" 2273 EA$(73)="LUNAR" 2278 EA$(78)="SOLAR" 2279 EA$(79)="LUNAR" 2284 EA$(84)="LUNAR+SOLAR" 2290 EA$(90)="LUNAR+SOLAR" 2291 EA$(91)="LUNAR" 2296 EA$(96)="LUNAR+SOLAR" 2302 EA$(102)="LUNAR+SOLAR" 2307 EA$(107)="SOLAR" 2308 EA$(108)="LUNAR" 2313 EA$(113)="SOLAR" 2314 EA$(114)="LUNAR+SOLAR" 2319 EA$(119)="SOLAR" 2320 EA$(120)="LUNAR" 2325 EA$(125)="SOLAR" 2326 EA$(126)="LUNAR" 2331 EA$(131)="LUNAR+SOLAR" 2337 EA$(137)="LUNAR+SOLAR" 2343 EA$(143)="LUNAR+SOLAR" 2349 EA$(149)="LUNAR+SOLAR" 2354 EA$(154)="SOLAR" 2355 EA$(155)="LUNAR+SOLAR" 2360 EA$(160)="SOLAR" 2361 EA$(161)="LUNAR" 2366 EA$(166)="SOLAR" 2367 EA$(167)="LUNAR" 2372 EA$(172)="LUNAR+SOLAR" 2373 EA$(173)="LUNAR" 2378 EA$(178)="LUNAR+SOLAR" 2379 EA$(179)="LUNAR" 2384 EA$(184)="LUNAR+SOLAR" 2390 EA$(190)="LUNAR+SOLAR" 2395 EA$(195)="SOLAR" 2396 EA$(196)="LUNAR+SOLAR" 2401 EA$(201)="SOLAR" 2402 EA$(202)="LUNAR" 2407 EA$(207)="SOLAR" 2408 EA$(208)="LUNAR" 2413 EA$(213)="SOLAR" 2414 EA$(214)="LUNAR" 2419 EA$(219)="LUNAR+SOLAR" 2420 EA$(220)="LUNAR" 2500 REM INIT METON YEARS AND MONTHS 2505 PRINT "INIT METON YEARS AND MONTHS ..." 2510 DIM MA$(235):REM METON ARRAY 2520 MM=0:MA$(MM)="" 2530 FOR MY=1 TO 19:GOSUB4800 2532 MY$=STR$(MY):MY$="Y"+MID$(MY$,2) 2535 PRINT "INIT METON YEAR";MY;"MONTHS:";YM 2540 FOR V1=1 TO YM 2545 V1$=STR$(V1):V1$="M"+MID$(V1$,2) 2550 MM=MM+1:MA$(MM)=MY$+" "+V1$ 2560 NEXT 2570 NEXT 2600 REM INIT MODERN ECLIPSE DATA 2605 PRINT "INIT MODERN ECLIPSE DATA ..." 2610 DIM EM$(223):REM MODERN ECLIPSE ARRAY 2620 FOR I=0 TO 223:EM$(I)="-":NEXT 2703 EM$(3)="LUNAR+SOLAR" 2709 EM$(9)="LUNAR+SOLAR" 2714 EM$(14)="SOLAR" 2715 EM$(15)="LUNAR" 2720 EM$(20)="SOLAR" 2721 EM$(21)="LUNAR" 2726 EM$(26)="SOLAR" 2727 EM$(27)="LUNAR" 2732 EM$(32)="SOLAR" 2733 EM$(33)="LUNAR" 2738 EM$(38)="LUNAR+SOLAR" 2744 EM$(44)="LUNAR+SOLAR" 2750 EM$(50)="LUNAR+SOLAR" 2755 EM$(55)="SOLAR" 2756 EM$(56)="LUNAR+SOLAR" 2761 EM$(61)="SOLAR" 2762 EM$(62)="LUNAR" 2767 EM$(67)="SOLAR" 2768 EM$(68)="LUNAR" 2773 EM$(73)="SOLAR" 2774 EM$(74)="LUNAR" 2779 EM$(79)="LUNAR+SOLAR" 2780 EM$(80)="LUNAR" 2785 EM$(85)="LUNAR+SOLAR" 2791 EM$(91)="LUNAR+SOLAR" 2797 EM$(97)="LUNAR+SOLAR" 2802 EM$(102)="SOLAR" 2803 EM$(103)="LUNAR" 2808 EM$(108)="SOLAR" 2809 EM$(109)="LUNAR" 2814 EM$(114)="SOLAR" 2815 EM$(115)="LUNAR" 2820 EM$(120)="SOLAR" 2821 EM$(121)="LUNAR" 2826 EM$(126)="LUNAR+SOLAR" 2832 EM$(132)="LUNAR+SOLAR" 2838 EM$(138)="LUNAR+SOLAR" 2844 EM$(144)="LUNAR+SOLAR" 2849 EM$(149)="SOLAR" 2850 EM$(150)="LUNAR" 2855 EM$(155)="SOLAR" 2856 EM$(156)="LUNAR" 2861 EM$(161)="SOLAR" 2862 EM$(162)="LUNAR" 2867 EM$(167)="LUNAR+SOLAR" 2868 EM$(168)="LUNAR" 2873 EM$(173)="LUNAR+SOLAR" 2879 EM$(179)="LUNAR+SOLAR" 2885 EM$(185)="LUNAR+SOLAR" 2890 EM$(190)="SOLAR" 2891 EM$(191)="LUNAR" 2896 EM$(196)="SOLAR" 2897 EM$(197)="LUNAR" 2902 EM$(202)="SOLAR" 2903 EM$(203)="LUNAR" 2908 EM$(208)="SOLAR" 2909 EM$(209)="LUNAR" 2914 EM$(214)="LUNAR+SOLAR" 2915 EM$(215)="LUNAR" 2920 EM$(220)="LUNAR+SOLAR" 2990 GOSUB 5000 2999 RETURN 3000 REM VISUALIZE THE MECHANISM 3005 GOSUB 3100 3010 D$=STR$(DELTA):D$=MID$(D$,2) 3012 PRINT CHR$(158);"YEAR",CHR$(5);YEAR,CHR$(152);"DELTA" 3013 V1$=STR$(GDN):V1$=MID$(V1$,2) 3014 PRINT CHR$(158);"GDN ",CHR$(5);V1$,CHR$(152);D$;" (";DN$;")" 3018 PRINT 3020 PRINT CHR$(158);"SUN",CHR$(5);SC$ 3025 PRINT CHR$(158);"MOON",CHR$(5);MC$,CHR$(158);"DAY";MD;MP$ 3030 PRINT 3040 PRINT CHR$(158);DC$,CHR$(5);Y$,M$;DAY 3050 PRINT CHR$(158);"CALIPPIC",CHR$(5);CAL$,ED$:PRINT 3060 PRINT CHR$(158);"OLYMPIAD",CHR$(5);OLYMP$,CHR$(158);GAMES$ 3070 PRINT CHR$(158);"METON",CHR$(5);MY$,CHR$(152);MM$:PRINT 3080 PRINT CHR$(158);"EXELIGMOS",CHR$(5);EX$ 3085 PRINT CHR$(158);"SAROS",CHR$(5);SM$,EC$ 3090 IF AM=1 THEN PRINT:PRINT CHR$(28);"AUTOMATIC MODE";CHR$(152) 3099 RETURN 3100 REM OUTPUT ANTIKYTHERA HEADER 3102 GOSUB 1910 3105 PRINT CHR$(147);"***** C64 ANTIKYTHERA SIMULATOR *****" 3107 PRINT 3109 RETURN 4000 REM CALCULATE DATE 4001 DC$="JULIAN" 4002 IF GDN >= 79 THEN 4200 4004 IF GDN >= 1 THEN 4100 4006 IF GDN >= -577736 THEN 4050 4010 REM CALCULATE DATE BEFORE CHRIST 4020 DG=GDN+861170:REM DELTA GDN START YEAR 776 BC 4025 YEAR=-775 4030 V1=INT(DG/1461):DG=DG-V1*1461:YEAR=YEAR+4*V1 4035 GOSUB4400:IF DG >= DY THEN DG=DG-DY:YEAR=YEAR+1:GOTO 4035 4040 Y$=STR$(ABS(YEAR-1))+" BC" 4042 Y$=MID$(Y$,2) 4045 DAY=DG+1:GOSUB4850:GOSUB4900 4049 RETURN 4050 REM CALCULATE DATE >= YEAR 1 AD < 1582-10-15 4060 DG=GDN+577736:REM DELTA GDN START YEAR 1 AD 4070 YEAR=1 4080 V1=INT(DG/1461):DG=DG-V1*1461:YEAR=YEAR+4*V1 4085 GOSUB4400:IF DG >= DY THEN DG=DG-DY:YEAR=YEAR+1:GOTO 4085 4090 Y$=STR$(YEAR)+" AD" 4092 Y$=MID$(Y$,2) 4095 DAY=DG+1:GOSUB4850:GOSUB4950 4099 RETURN 4100 REM CALCULATE DATE >= 1582-10-15 UNTIL 1582-12-31 4101 DC$="GREGORIAN" 4110 YEAR=1582:Y$="1582" 4120 DAY=287+GDN:GOSUB4850:GOSUB4950 4140 RETURN 4200 REM CALCULATE DATE >= 1583-01-01 4205 DC$="GREGORIAN" 4210 YEAR=1583:DG=GDN-79 4212 IF GDN >= 79337 THEN YEAR=1800:DG=GDN-79337 4214 IF GDN >= 114400 THEN YEAR=1896:DG=GDN-114400 4216 IF GDN >= 141428 THEN YEAR=1970:DG=GDN-141428 4218 IF GDN >= 152385 THEN YEAR=2000:DG=GDN-152385 4220 IF GDN >= 159690 THEN YEAR=2020:DG=GDN-159690 4230 V1=INT(DG/146097):DG=DG-V1*146097:YEAR=YEAR+400*V1 4240 GOSUB4400:IF DG >= DY THEN DG=DG-DY:YEAR=YEAR+1:GOTO 4240 4280 Y$=STR$(YEAR):Y$=MID$(Y$,2) 4290 DAY=DG+1:GOSUB4850:GOSUB4950 4299 RETURN 4400 REM CALCULATE DY = DAYS IN YEAR 4410 YEAR=INT(YEAR):DY=365 4420 IF YEAR=1582 THEN DY=355:RETURN 4430 GOSUB 4500:IF LY=1 THEN DY=366:RETURN 4499 RETURN 4500 REM CALCULATE LEAP YEAR (YEAR):LY 4502 LY=0:REM NO LEAP YEAR 4505 VY=ABS(INT(YEAR)):REM VY=VARIABLE YEAR 4510 V1=INT(VY/4):V2=VY-4*V1:IF V2>0 THEN RETURN 4515 LY=1:REM LEAP YEAR 4520 IF YEAR < 1600 THEN RETURN 4530 REM GREGORIAN CALENDAR 4532 V1=INT(VY/400):V2=VY-400*V1:IF V2=0 THEN RETURN 4535 V1=INT(VY/100):V2=VY-100*V1:IF V2>0 THEN RETURN 4540 LY=0 4545 RETURN 4600 REM GET CONSTELLATION NAME (V1) 4605 CN$="-" 4610 V2=INT(V1):V3=V1-V2:V4=INT(360*V3) 4620 CN$=STR$(V4)+" GRAD" 4630 IF V4<20 THEN CN$="SAGITTAR.":RETURN 4631 IF V4<45 THEN CN$="CAPRICORN":RETURN 4632 IF V4<69 THEN CN$="AQUARIUS":RETURN 4633 IF V4<110 THEN CN$="PISCES":RETURN 4634 IF V4<130 THEN CN$="ARIES":RETURN 4635 IF V4<169 THEN CN$="TAURUS":RETURN 4636 IF V4<198 THEN CN$="GEMINI":RETURN 4637 IF V4<220 THEN CN$="CANCER":RETURN 4638 IF V4<255 THEN CN$="LEO":RETURN 4639 IF V4<303 THEN CN$="VIRGO":RETURN 4640 IF V4<324 THEN CN$="LIBRA":RETURN 4641 IF V4<349 THEN CN$="SCORPIO":RETURN 4642 CN$="SAGITTAR." 4690 RETURN 4700 REM CALCULATE EGYPTION DATE 4701 REM PRINT "4701 CALCULATE EGYPTION DATE" 4710 V1=INT(GDN+652327):V2=INT(V1/365) 4720 V3=V1-365*V2+1 4730 IF V3=361 THEN ED$="ED1 OSIRIS":RETURN 4731 IF V3=362 THEN ED$="ED2 HORUS":RETURN 4732 IF V3=363 THEN ED$="ED3 SET":RETURN 4733 IF V3=364 THEN ED$="ED4 ISIS":RETURN 4734 IF V3=365 THEN ED$="ED5 NEPHTHYS":RETURN 4740 V1=1 4750 IF V3>30 THEN V1=V1+1:V3=V3-30:GOTO 4750 4760 ED$="MONTH"+STR$(V1)+STR$(V3) 4761 IF V1=1 THEN ED$="I THOTH"+STR$(V3):RETURN 4762 IF V1=2 THEN ED$="II PHAOPHI"+STR$(V3):RETURN 4763 IF V1=3 THEN ED$="III ATHYR"+STR$(V3):RETURN 4764 IF V1=4 THEN ED$="IV CHOIAK"+STR$(V3):RETURN 4765 IF V1=5 THEN ED$="V TYBI"+STR$(V3):RETURN 4766 IF V1=6 THEN ED$="VI MECHIR"+STR$(V3):RETURN 4767 IF V1=7 THEN ED$="VII PHAMENOTH"+STR$(V3):RETURN 4768 IF V1=8 THEN ED$="VIII PHAMUTHI"+STR$(V3):RETURN 4769 IF V1=9 THEN ED$="IX PACHON"+STR$(V3):RETURN 4770 IF V1=10 THEN ED$="X PAYNI"+STR$(V3):RETURN 4771 IF V1=11 THEN ED$="XI EPIPHI"+STR$(V3):RETURN 4772 IF V1=12 THEN ED$="XII MESORE"+STR$(V3):RETURN 4799 RETURN 4800 REM GET MONTHS IN METON YEAR 4805 YM=12:REM 12 MONTHS IN SHORT YEARS 4810 IF MY=3 OR MY=5 OR MY=8 OR MY=11 OR MY=13 OR MY=16 OR MY=19 THEN YM=1 3 4815 RETURN 4850 REM GET DAY&MONTH (YEAR,DAY):DAY,V1 4855 GOSUB4500:REM LY = LEAP YEAR 4860 V1=1:REM MONTH JANUARY 4861 IF V1=1 AND DAY>31 THEN V1=V1+1:DAY=DAY-31 4862 IF V1=2 AND LY=1 AND DAY>29 THEN V1=V1+1:DAY=DAY-29 4863 IF V1=2 AND LY=0 AND DAY>28 THEN V1=V1+1:DAY=DAY-28 4864 IF V1=3 AND DAY>31 THEN V1=V1+1:DAY=DAY-31 4865 IF V1=4 AND DAY>30 THEN V1=V1+1:DAY=DAY-30 4866 IF V1=5 AND DAY>31 THEN V1=V1+1:DAY=DAY-31 4867 IF V1=6 AND DAY>30 THEN V1=V1+1:DAY=DAY-30 4868 IF V1=7 AND DAY>31 THEN V1=V1+1:DAY=DAY-31 4869 IF V1=8 AND DAY>31 THEN V1=V1+1:DAY=DAY-31 4870 IF V1=9 AND DAY>30 THEN V1=V1+1:DAY=DAY-30 4871 IF V1=10 AND DAY>31 THEN V1=V1+1:DAY=DAY-31 4872 IF V1=11 AND DAY>30 THEN V1=V1+1:DAY=DAY-30 4899 RETURN 4900 REM GET ROMAN MONTH NAME (V1):M$ 4910 M$="MONTH"+STR$(V1) 4911 IF V1=1 THEN M$="IANUARIUS":RETURN 4912 IF V1=2 THEN M$="FEBRUARIUS":RETURN 4913 IF V1=3 THEN M$="MARTIUS":RETURN 4914 IF V1=4 THEN M$="APRILIS":RETURN 4915 IF V1=5 THEN M$="MAIUS":RETURN 4916 IF V1=6 THEN M$="IUNIUS":RETURN 4917 IF V1=7 THEN M$="QUINTILIS":RETURN 4918 IF V1=8 THEN M$="SEXTILIS":RETURN 4919 IF V1=9 THEN M$="SEPTEMBER":RETURN 4920 IF V1=10 THEN M$="OCTOBER":RETURN 4921 IF V1=11 THEN M$="NOVEMBER":RETURN 4923 IF V1=12 THEN M$="DECEMBER":RETURN 4929 RETURN 4950 REM GET ENGLISH MONTH NAME (V1):M$ 4960 M$="MONTH"+STR$(V1) 4961 IF V1=1 THEN M$="JANUARY":RETURN 4962 IF V1=2 THEN M$="FEBRUARY":RETURN 4963 IF V1=3 THEN M$="MARCH":RETURN 4964 IF V1=4 THEN M$="APRIL":RETURN 4965 IF V1=5 THEN M$="MAY":RETURN 4966 IF V1=6 THEN M$="JUNE":RETURN 4967 IF V1=7 THEN M$="JULY":RETURN 4968 IF V1=8 THEN M$="AUGUST":RETURN 4969 IF V1=9 THEN M$="SEPTEMBER":RETURN 4970 IF V1=10 THEN M$="OCTOBER":RETURN 4971 IF V1=11 THEN M$="NOVEMBER":RETURN 4973 IF V1=12 THEN M$="DECEMBER":RETURN 4979 RETURN 5000 REM CALCULATE/UPDATE ALL DATES 5005 PRINT:PRINT CHR$(28);"CALCULATING...";CHR$(152) 5010 IF GF < -861170 THEN GF=-861170:REM MIN DATE 776 BC 5020 IF GF > 188910 THEN GF=188910:REM MAX DATE 2100 5030 GDN=INT(GF) 5040 GOSUB 4000 5050 SP=(GF-SD)/SY 5060 GOSUB 5500 5499 RETURN 5500 REM COMPUTE ANTIKYTHERA GEAR WHEELS 5505 REM SOLAR POINTER SP 5510 B1=SP:B2=B1 5520 L1=-(B2*32/19):L2=L1 5522 M1=-(L2*53/96):M2=M1:M3=M1 5524 N1=-(M2*15/53):N2=N1:N3=N1 5526 O1=-(N2*57/60) 5528 P1=-(N3/4):P2=P1:Q1=-(P2/5) 5540 E3=-(M3*27/223):E4=E3 5542 F1=-(E4*188/53):F2=F1 5544 G1=-(F2*30/54):G2=G1 5546 H1=-(G2/3):H2=H1:I1=-(H2/4) 5550 C1=-(B2*32/19):C2=C1 5552 D1=-2*C2:D2=D1 5554 E2=-(D2*127/32):E5=E2 5560 K1=-E5 5570 K2=K1:REM SIMPLIFIED TODO REAL 5580 E6=-K2:E1=E6:B3=-E1 5585 LP=B3:REM LUNAR POINTER LP 5600 REM CALCULATE ANTIKYTHERA DISPLAYS 5610 REM OLYMPIAD 5612 V1=575.475/4+O1:OY=INT(V1*4) 5615 OL=INT(OY/4):OY=OY-4*OL 5616 IF OY=0 THEN OL=OL-1:OY=4 5620 OY$=STR$(OY):OL$=STR$(OL) 5621 OY$=MID$(OY$,2):OL$=MID$(OL$,2) 5625 OLYMP$=OY$+" ("+OL$+")" 5630 REM PANHELLENIC GAMES 5632 GAME$="" 5634 IF OY=1 THEN GA$="ISTHMIA, OLYMPIA" 5635 IF OY=2 THEN GA$="NEMEA, NAA" 5636 IF OY=3 THEN GA$="ISTHMIA, PYTHIA" 5637 IF OY=4 THEN GA$="NEMEA, HALIEIA" 5640 REM METON MONTH 5645 V1=-N1/5:V2=INT(V1):V3=V1-V2 5650 MM=INT(235*V3)-7:IF MM<1 THEN MM=MM+235 5652 MM$=STR$(MM):MM$=MID$(MM$,2) 5655 MY$=MA$(MM):REM GOSUB 4850 5660 REM CALLIPPIC CYCLE 5661 REM V1=Q1*76:CAL=125-INT(V1) 5662 V1=201.44093/76-Q1 5663 CC=INT(V1):V1=V1-CC:CAL=INT(V1*76) 5665 REM VK=INT(CAL):NK=CAL-VK:CAL=VK 5666 REM CC=INT(CAL/76):CAL=CAL-CC*76:CC=CC+1 5668 IF CAL=0 THEN CC=CC-1:CAL=76 5670 S1$=STR$(CAL):S2$=STR$(CC) 5672 S1$=MID$(S1$,2):S2$=MID$(S2$,2) 5675 CAL$=S1$ 5676 IF CC > 0 THEN CAL$=CAL$+" ("+S2$+")" 5680 REM SUN AND MOON CONSTELLATION 5682 V1=SP:GOSUB4600:SC$=CN$ 5685 V1=LP:GOSUB4600:MC$=CN$ 5690 GOSUB4700:REM EGYPTIAN DATE 5700 REM MOON PHASE 5705 MD=13:MP$="" 5710 V1=INT(SP):V2=SP-V1 5715 V3=INT(LP):V4=LP-V3 5720 V5=V4-V2:IF V5 < 0 THEN V5=V5+1 5730 MD=INT(V5*29)+1 5740 V1=INT(V5*360):REM DELTA MOON SUN DEGREES 5750 IF V1<15 OR V1>350 THEN MP$="NEW MOON" 5755 IF V1>75 AND V1<105 THEN MP$="HALF MOON" 5760 IF V1>170 AND V1<190 THEN MP$="FULL MOON" 5765 IF V1>255 AND V1<285 THEN MP$="HALF MOON" 5800 REM SAROS 5810 V1=-G1/4:V2=INT(V1):V3=V1-V2 5820 SM=INT(223*V3+0.51)+219:IF SM>223 THEN SM=SM-223 5825 SM$=STR$(SM):SM$=MID$(SM$,2) 5830 EC$="---":IF YEAR < 1000 THEN EC$=EA$(SM) 5835 IF YEAR > 1500 THEN EC$=EM$(SM) 5850 REM EXELIGMOS 5855 V1=-I1:V2=INT(V1):V3=V1-V2 5860 EX=INT(24*V3):IF EX=0 THEN EX=24 5865 EX$=STR$(EX):EX$=MID$(EX$,2) 5999 RETURN