1 ' ULTRA CLOCK v.1.7 (Y2K) For NEC PC-8201 12/27/01 George T. Pasek Jr 2 ' Must run Victor Landweber's NEC-LINE.BA (LINE.ba) before UCLK 3 ' Found at Club 100 M100 Library 4 ' 5 ' 10 '- Init - 15 IF(PEEK(64082!)=135)AND(PEEK(64083!))=11THENBEEP:PRINT"Run LINE First":END 20 CLEAR:CLEAR500:CLS:SCREEN 0:EXEC17091:EXEC17006 25 DIM HX(60),HY(60),MX(60),MY(60) 30 READD:IFD=-1THENGOTO35ELSEMX(X)=D:READD:MY(X)=D:READD:HX(X)=D:READD:HY(X)=D:X=X+1:GOTO30 35 GOSUB200:GOSUB400 40 MN=60:MT=7:HL=24:UO=5 49 ' 50 '- Loop - 55 KB$=INKEY$:IF KB$<>""THENGOSUB300 57 LOCATE12,0:PRINTRIGHT$(DATE$,5) 59 UT=VAL(LEFT$(TIME$,2))+UO:IFUT>=24THENUT=UT-24 61 LOCATE22,0:PRINTUSING"##";UT:LOCATE24,0:PRINT":":LOCATE25,0:PRINTMID$(TIME$,4,2):LOCATE27,0:PRINT":":LOCATE28,0:PRINTRIGHT$(TIME$,2) 63 IFCD<>VAL(RIGHT$(DATE$,2))THENGOSUB100:LOCATE35,0:PRINTSPACE$(4):LOCATE35,0:PRINTUSING"#####";N 65 GOSUB500 67 IFCS=1ANDCA=0ANDC1=VAL(LEFT$(TIME$,2))ANDC2=VAL(MID$(TIME$,4,2))THENCA=1:CN=1:MOTOR1 69 IFCS=1ANDCA=1ANDC3=VAL(LEFT$(TIME$,2))ANDC4=VAL(MID$(TIME$,4,2))THENCA=0:CN=0:MOTOR0 71 IFAS=1ANDAR=0ANDAH=VAL(LEFT$(TIME$,2))ANDAM=VAL(MID$(TIME$,4,2))THENAA=1:BEEP 73 IFAA=1ANDAM<>VAL(MID$(TIME$,4,2))THEN AA=0:AR=0 95 GOTO50 99 ' 100 '- Caculate Days Till Retirement - 110 RM=2:RD=1:RY=2008 115 CY=VAL(LEFT$(DATE$,2)) 120 CM=VAL(MID$(DATE$,4,2)) 125 CD=VAL(RIGHT$(DATE$,2)) 128 'Figure Retirement Julian Date 130 W=FIX((RM-14)/12) 135 JD=INT(1461*(RY+2900+W)/4) 140 B=FIX(367*(RM-2-W*12)/12) 145 JD=JD+B 150 B=INT(INT(3*(RY+3000+W)/100)/4) 155 JR=JD+RD-32075-B 156 'JR is 1760537 days 159 'Figure Current Julian Date 160 W=FIX((CM-14)/12) 165 JD=INT(1461*(CY+4900+W)/4) 170 B=FIX(367*(CM-2-W*12)/12) 175 JD=JD+B 180 B=INT(INT(3*(CY+5000+W)/100)/4) 185 JC=JD+CD-32075-B 190 N=JR-JC 199 ' 200 '- Draw Analog Clock Face - 205 LINE(0,0)-(63,63),1,B:LINE(1,1)-(62,62),1,B 215 LINE(28,3)-(36,3):LINE(28,7)-(36,7):LINE(29,4)-(31,6):LINE(29,6)-(31,4):LINE(33,4)-(33,6):LINE(35,4)-(35,6) 225 LINE(54,30)-(60,30):LINE(54,34)-(60,34):LINE(55,30)-(55,34):LINE(57,30)-(57,34):LINE(59,30)-(59,34) 230 LINE(29,56)-(35,56):LINE(29,60)-(35,60):LINE(34,57)-(34,59):PSET(30,57):PSET(30,58):PSET(31,59):PSET(32,57):PSET(32,58) 235 LINE(3,30)-(9,30):LINE(3,34)-(9,34):LINE(4,31)-(4,33):LINE(6,31)-(8,33):LINE(6,33)-(8,31) 240 LINE(44,8)-(46,8):LINE(44,12)-(46,12):LINE(45,8)-(45,12) 245 LINE(53,17)-(57,17):LINE(53,21)-(57,21):LINE(54,18)-(54,20):LINE(56,18)-(56,20) 250 LINE(51,43)-(57,43):LINE(51,47)-(57,47):LINE(52,44)-(52,46):LINE(54,44)-(54,45):LINE(56,44)-(56,45):PSET(55,46) 255 LINE(43,52)-(47,52):LINE(43,56)-(47,56):LINE(44,53)-(44,54):LINE(46,53)-(46,54):PSET(45,55) 260 LINE(15,52)-(23,52):LINE(15,56)-(23,56):LINE(22,53)-(22,55):LINE(20,53)-(20,55):LINE(16,53)-(16,54):LINE(18,53)-(18,54):PSET(17,55) 265 LINE(4,43)-(14,43):LINE(4,47)-(14,47):LINE(13,44)-(13,46):LINE(11,44)-(11,46):LINE(9,44)-(9,46):LINE(5,44)-(5,45):LINE(7,44)-(7,45):PSET(6,46) 270 LINE(7,17)-(11,17):LINE(7,21)-(11,21):LINE(8,18)-(10,20):LINE(10,18)-(8,20) 275 LINE(16,8)-(22,8):LINE(16,12)-(22,12):LINE(21,9)-(21,11):LINE(17,9)-(19,11):LINE(19,9)-(17,11) 295 RETURN 299 ' 300 '- Keyboard Handler - 305 IFKB$>="a"ANDKB$<="z"THENKB$=CHR$(ASC(KB$)-32) 310 IFKB$=CHR$(27)THENEXEC17011:EXEC17124:CLS:END 315 IFKB$="C"THENGOTO900 320 IFKB$="A"THENGOTO800 325 IFKB$="G"THENGOTO600 330 IFKB$=CHR$(32)ANDAA=1THENAR=1 345 SOUND15000,10:RETURN 399 ' 400 '- Screen Configure - 405 LOCATE12,7:PRINT"[A]larm":LOCATE22,7:PRINT"[C]trl":LOCATE31,7:PRINT"[G]PS" 410 LOCATE18,0:PRINT"UTC:":LOCATE31,0:PRINT"DTR=" 415 LOCATE25,2:PRINT"*":LOCATE25,5:PRINT"*" 445 RETURN 450 '- Reset Screen - 455 FORX=2TO5:LOCATE12,X:PRINTSPACE$(28):NEXTX:LINE(70,12)-(234,50),0,B 460 MT=7:GOSUB700:GOSUB720 465 LOCATE25,2:PRINT"*":LOCATE25,5:PRINT"*" 495 RETURN 499 ' 500 '- Analog Clock Update - 505 IFMN<>VAL(MID$(TIME$,4,2))THENLINE(32,32)-(MX(MN),MY(MN)),0ELSERETURN 510 MN=VAL(MID$(TIME$,4,2)):LINE(32,32)-(MX(MN),MY(MN)):GOSUB700 512 HC=VAL(LEFT$(TIME$,2)):IFHL<>HCTHENHL=HC:GOSUB720 515 IFHC>=12THENHC=HC-12 520 HC=FIX((HC*5)+(MN/10)):IFHM<>HCORHM=MN-1ORHM=MN-2ORHM=MN-3ORHM=MN-4THENLINE(32,32)-(HX(HM),HY(HM)),0ELSERETURN 525 HM=HC:LINE(32,32)-(HX(HM),HY(HM)) 535 RETURN 549 ' 599 ' 600 '- GPS Sync - 605 FORX=1TO6:LOCATE12,X:PRINTSPACE$(28):NEXT X 610 LINE(70,12)-(234,50),1,B 615 LOCATE 16,5:PRINT"[Space Bar] to Exit" 620 LOCATE 13,2:PRINT"GPS UTC Time:" 625 LOCATE 13,3:PRINT"NEC UTC Time:" 630 LOCATE 17,4:PRINT"[S]ynchronize Time" 632 OPEN"COM:7N81NN"FORINPUTAS#1 635 UT=VAL(LEFT$(TIME$,2))+UO:IFUT>=24THENUT=UT-24 640 LOCATE26,3:PRINTUSING"##";UT:LOCATE28,3:PRINT":":LOCATE29,3:PRINTMID$(TIME$,4,2):LOCATE31,3:PRINT":":LOCATE32,3:PRINTRIGHT$(TIME$,2) 645 LINEINPUT#1,GP$ 650 IFLEFT$(GP$,6)="$GPGGA"THENLOCATE26,2ELSEGOTO645 655 GH$=MID$(GP$,8,2):GM$=MID$(GP$,10,2):GS$=MID$(GP$,12,2) 660 PRINTGH$:LOCATE28,2:PRINT":":LOCATE29,2:PRINTGM$:LOCATE31,2:PRINT":":LOCATE32,2:PRINTGS$ 665 LOCATE36,2:PRINTUSING"##";VAL(MID$(GP$,41,2)) 670 KB$=INKEY$:IFKB$=""THENGOTO635 675 IFKB$=CHR$(32)THENCLOSE#1:GOSUB 450:RETURN 680 IFKB$="S"OR KB$="s"THENGH=VAL(GH$)-UOELSESOUND15000,10:GOTO635 685 IFGH<0THENGH=GH+24 687 GH$=STR$(GH):GL=LEN(GH$):IFGL=3THEN GH$=RIGHT$(GH$,2)ELSEGH$="0"+RIGHT$(GH$,1) 690 T$=GH$+":"+GM$+":"+GS$ 692 TIME$=T$ 695 GOTO635 699 ' 700 '- Digital Clock - 705 IFMT<>FIX(MN/10)THENMT=FIX(MN/10):FORX=1TO6:LOCATE26,X:PRINTSPACE$(14):NEXTX:O=160:TD=MT:GOSUB750 710 FORX=1TO6:LOCATE30,X:PRINTSPACE$(10):NEXTX:O=184:TD=MN-(MT*10):GOSUB750:RETURN 720 FORX=1TO6:LOCATE12,X:PRINTSPACE$(13):NEXT X 725 TD=VAL(LEFT$(TIME$,1)):O=103:GOSUB750 730 TD=VAL(MID$(TIME$,2,1)):O=127:GOSUB750 735 RETURN 750 IF TD=0 THEN GOSUB765:GOSUB770:GOSUB775:GOSUB780:GOSUB785:GOSUB790:RETURN 751 IF TD=1 THEN GOSUB770:GOSUB775:RETURN 752 IF TD=2 THEN GOSUB765:GOSUB770:GOSUB780:GOSUB785:GOSUB795:RETURN 753 IF TD=3 THEN GOSUB765:GOSUB770:GOSUB775:GOSUB780:GOSUB795:RETURN 754 IF TD=4 THEN GOSUB770:GOSUB775:GOSUB790:GOSUB795:RETURN 755 IF TD=5 THEN GOSUB765:GOSUB775:GOSUB780:GOSUB790:GOSUB795:RETURN 756 IF TD=6 THEN GOSUB765:GOSUB775:GOSUB780:GOSUB785:GOSUB790:GOSUB795:RETURN 757 IF TD=7 THEN GOSUB765:GOSUB770:GOSUB775:RETURN 758 IF TD=8 THEN GOSUB765:GOSUB770:GOSUB775:GOSUB780:GOSUB785:GOSUB790:GOSUB795:RETURN 759 IF TD=9 THEN GOSUB765:GOSUB770:GOSUB775:GOSUB790:GOSUB795:RETURN 760 BEEP 765 FORY=13TO16:LINE(O,Y)-(O+17,Y):NEXTY:RETURN 770 FORX=14TO17:LINE(O+X,13)-(O+X,32):NEXTX:RETURN 775 FORX=14TO17:LINE(O+X,29)-(O+X,48):NEXTX:RETURN 780 FORY=45TO48:LINE(O,Y)-(O+17,Y):NEXTY:RETURN 785 FORX=0TO3:LINE(O+X,29)-(O+X,48):NEXTX:RETURN 790 FORX=0TO3:LINE(O+X,13)-(O+X,32):NEXTX:RETURN 795 FORY=29TO32:LINE(O,Y)-(O+17,Y):NEXTY:RETURN 799 ' 800 '- Alarm - 805 FORX=1TO6:LOCATE12,X:PRINTSPACE$(28):NEXT X 810 LINE(70,12)-(234,50),1,B 815 LOCATE16,5:PRINT"[Space Bar] to Exit" 820 LOCATE20,2:PRINT"ALARM SET":LOCATE13,3:PRINT"[T]IME: : (24hr mode)":LOCATE13,4:PRINT"[A]ctive?: ":LOCATE21,3:PRINTUSING"##";AH:LOCATE24,3:PRINTUSING"##";AM:LOCATE24,4:IFAS=0THENPRINT"N"ELSEPRINT"Y" 825 KB$=INKEY$:IF KB$=""THENGOTO825 830 IFKB$=CHR$(32)THENGOSUB450:RETURN 835 IFKB$="A"ORKB$="a"THENIFAS=0THENAS=1:LOCATE24,4:PRINT"Y":LOCATE12,7:EXEC17058:PRINT"[A]":EXEC17063:GOTO825ELSEAS=0:LOCATE24,4:PRINT"N":LOCATE12,7:PRINT"[A]":GOTO825 840 IFKB$="T"ORKB$="t"THEN LOCATE21,3:EXEC17051:EXEC17016:PRINT"HH":LOCATE22,3:AH=0:AM=0ELSESOUND15000,10:GOTO825 845 KB$=INKEY$:IFKB$=""THENGOTO845ELSEIFKB$=CHR$(30)THENAH=AH+1ELSEIFKB$=CHR$(31)THENAH=AH-1ELSEGOTO860 850 IFAH=24THENAH=0ELSEIFAH=-1THEN AH=23 855 IFAH<10THENLOCATE21,3:PRINT"0":LOCATE22,3:PRINTUSING"#";AH:LOCATE22,3:GOTO845ELSELOCATE21,3:PRINTUSING"##";AH:LOCATE22,3:GOTO845 860 LOCATE24,3:PRINT"MM":LOCATE25,3:AM=0 865 KB$=INKEY$:IFKB$=""THENGOTO865ELSEIFKB$=CHR$(30)THENAM=AM+1ELSEIFKB$=CHR$(31)THENAM=AM-1ELSEGOTO880 870 IFAM=60THENAM=0ELSEIFAM=-1THENAM=59 875 IFAM<10THENLOCATE24,3:PRINT"0":LOCATE25,3:PRINTUSING"#";AM:LOCATE25,3:GOTO865ELSELOCATE24,3:PRINTUSING"##";AM:LOCATE25,3:GOTO865 880 EXEC17046:EXEC17021:GOTO825 899 ' 900 '- External Control - 905 FOR X=1TO6:LOCATE12,X:PRINTSPACE$(28):NEXTX 908 LINE(70,12)-(234,50),1,B 911 LOCATE16,5:PRINT"[Space Bar] to Exit" 914 LOCATE13,2:PRINT"[S]tart:":LOCATE22,2:PRINTUSING"##";C1:LOCATE24,2:PRINT":":LOCATE25,2:PRINTUSING"##";C2:LOCATE28,2:PRINT"(24hr mode)" 917 LOCATE13,3:PRINT"[E]nd:":LOCATE22,3:PRINTUSING"##";C3:LOCATE24,3:PRINT":":LOCATE25,3:PRINTUSING"##";C4 920 LOCATE13,4:PRINT"[A]ctive?:":LOCATE23,4:IFCS=0THENPRINT"N"ELSEPRINT"Y" 923 LOCATE27,4:PRINT"[M]anual:":LOCATE36,4:IFCN=0THENPRINT"OFF"ELSEPRINT"ON " 926 KB$=INKEY$:IFKB$=""THENGOTO926 929 IFKB$=CHR$(32)ANDCS=1ANDC1=C3ANDC2=C4THENBEEP:BEEP:BEEP:CS=0:LOCATE23,4:PRINT"N":LOCATE22,7:PRINT"[C]":GOTO926ELSEIFKB$=CHR$(32)THENGOSUB450:RETURN 932 IFKB$="S"ORKB$="s"THENEXEC17051:EXEC17016:LOCATE22,2:PRINT"HH":LOCATE23,2:C1=0:C2=0:ELSEGOTO956 935 KB$=INKEY$:IFKB$=""THENGOTO935ELSEIFKB$=CHR$(30)THENC1=C1+1ELSEIFKB$=CHR$(31)THENC1=C1-1ELSEGOTO944 938 IFC1=24THENC1=0ELSEIFC1=-1THENC1=23 941 IFC1<10THENLOCATE22,2:PRINT"0":LOCATE23,2:PRINTUSING"#";C1:LOCATE23,2:GOTO935ELSELOCATE22,2:PRINTUSING"##";C1:LOCATE23,2:GOTO935 944 LOCATE25,2:PRINT"MM":LOCATE26,2:C2=0 947 KB$=INKEY$:IF KB$=""THENGOTO947ELSEIFKB$=CHR$(30)THENC2=C2+1ELSEIFKB$=CHR$(31)THENC2=C2-1ELSEEXEC17046:EXEC17021:GOTO926 950 IFC2=60THENC2=0ELSEIFC2=-1THENC2=59 953 IFC2<10THENLOCATE25,2:PRINT"0":LOCATE26,2:PRINTUSING"#";C2:LOCATE26,2:GOTO947ELSELOCATE25,2:PRINTUSING"##";C2:LOCATE26,2:GOTO947 956 IFKB$="E"OR KB$="e"THENEXEC17051:EXEC17016:LOCATE22,3:PRINT"HH":LOCATE23,3:C3=0:C4=0:ELSEGOTO980 959 KB$=INKEY$:IFKB$=""THENGOTO959ELSEIFKB$=CHR$(30)THENC3=C3+1ELSEIFKB$=CHR$(31)THEN C3=C3-1ELSEGOTO968 962 IFC3=24THENC3=0ELSEIFC3=-1THEN C3=23 965 IFC3<10THENLOCATE22,3:PRINT"0":LOCATE23,3:PRINTUSING"#";C3:LOCATE23,3:GOTO959ELSELOCATE22,3:PRINTUSING"##";C3:LOCATE23,3:GOTO959 968 LOCATE25,3:PRINT"MM":LOCATE26,3:C4=0 971 KB$=INKEY$:IFKB$=""THENGOTO971ELSEIFKB$=CHR$(30)THENC4=C4+1ELSEIFKB$=CHR$(31)THENC4=C4-1ELSEEXEC17046:EXEC17021:GOTO926 974 IFC4=60THENC4=0ELSEIFC4=-1THENC4=59 977 IFC4<10THENLOCATE25,3:PRINT"0":LOCATE26,3:PRINTUSING"#";C4:LOCATE26,3:GOTO971ELSELOCATE25,3:PRINTUSING"##";C4:LOCATE26,3:GOTO971 980 IFKB$="A"ORKB$="a"THENIFCS=0THENCS=1:LOCATE23,4:PRINT"Y":LOCATE22,7:EXEC17058:PRINT"[C]":EXEC17063:GOTO926 ELSE CS=0:LOCATE23,4:PRINT"N":LOCATE22,7:EXEC17063:PRINT"[C]":GOTO926 983 IFKB$="M"ORKB$="m" THENIFCN=0THENCN=1:LOCATE36,4:PRINT"ON ":MOTOR1:CA=1:GOTO926ELSELOCATE36,4:PRINT"OFF":CN=0:CA=0:MOTOR0:GOTO926 986 SOUND15000,10:GOTO926 999 ' 1000 DATA 32,10,32,20,35,10,33,20,37,10,35,20,39,11,36,21,41,12,37,21,42,13,38,222,45,14,39,22,47,16,40,23,49,17,41,24,50,19,42,25,51,21,42,26,52,23,43,27,53,25,43,28,53,28,44,29,52,30,44,31,53,32,44,32 1010 DATA 52,34,44,33,52,37,44,35,53,39,43,36,52,41,43,37,49,42,42,38,49,45,42,39,48,47,41,40,46,48,40,41,44,49,39,42,42,50,38,42,41,52,37,43,39,53,36,43,36,53,34,44,34,54,33,44,32,54,32,44 1020 DATA 30,54,31,44,27,54,29,44,25,53,28,44,24,50,27,43,22,50,26,42,19,50,25,42,17,48,24,41,16,46,23,40,16,44,22,39,16,41,22,38,12,41,21,37,11,39,21,36,11,36,20,35,11,34,20,33,10,32,20,32 1030 DATA 11,30,20,31,11,27,20,29,11,25,20,28,12,23,21,27,13,21,21,26,14,19,22,25,16,17,23,24,17,16,24,23,19,14,25,22,22,14,26,22,24,13,27,21,25,11,28,21,27,11,29,20,30,10,31,20,32,10,32,20,-1