10 'PROGRAM TO READ TIME FROM REAL TIME CLOCK INSTALLED IN 20 'MORROW REV. 2 BOARD I/O EXPANSION SLOT. PORTS 30H THROUGH 33H. 30 ' MIKE ALLEN 7/13/86 40 ' 50 'N ARRAY HOLDS DATA FROM MSM5832 CHIP. D$ ARRAY HAS NAMES OF DAYS. 60 ' 70 DIM N(12),D$(6) 80 ' 90 'FILL NAME OF DAY ARRAY 100 ' 110 D$(0)="Sunday" 120 D$(1)="Monday" 130 D$(2)="Tuesday" 140 D$(3)="Wednesday" 150 D$(4)="Thursday" 160 D$(5)="Friday" 170 D$(6)="Saturday" 180 ' 190 'CLEAR SCREEN [^Z] 200 ' 210 PRINT CHR$(&H1A); 220 ' 230 'TURN CURSOR OFF [ESC " 6] (MDT60/70) 240 ' 250 PRINT CHR$(&H1B);CHR$(&H22);CHR$(&H36); 260 ' 270 'IDENTIFY I/O PORTS FOR 8255 280 ' PA=PORT A - DATA TO/FROM MSM5832 290 ' PB=PORT B - ADDRESS TO MSM5832 300 ' PC=PORT C - CONTROL TO MSM5832 310 ' BIT 4=HOLD 320 ' BIT 5=READ 330 ' BIT 6=WRITE 340 ' BIT 7=CHIP-SELECT-NOT (0 SELECTS MSM5832) 350 ' 360 PA=&H30:PB=&H31:PC=&H32:CTRL=&H33 370 ' 380 'TELL 8255 TO OPERATE IN MODE 0 (SIMPLEST) 390 ' PORT A IS INPUT 400 ' PORTS B & C ARE OUTPUT 410 ' 420 OUT CTRL,&H90 430 ' 440 'SET READ LINE TO MSM5832 TRUE 450 ' (ALSO SETS CHIP-SELECT-NOT TO 0 TO ENABLE MSM5832) 460 ' 470 OUT PC,&H20 480 FOR A=0 TO 12 490 ' 500 'ADDRESS THE 13 REGISTERS IN THE MSM5832 510 'READ THE DATA FROM EACH REGISTER INTO N ARRAY 520 ' 530 OUT PB,A:N(A)=INP(PA) 540 NEXT A 550 ' 560 'TURN OFF THE READ LINE TO THE MSM5832 570 ' 580 OUT PC,&H0 590 ' 600 'HOME THE CURSOR (^^) 610 ' 620 PRINT CHR$(&H1E); 630 PRINT "DATE: "; 640 ' 650 'PRINT DAY OF WEEK 660 ' 670 PRINT D$(N(6));", "; 680 ' 690 'IF MONTH IS 10, 11 OR 12, PRINT TENS DIGIT 700 ' 710 IF N(10)> 0 THEN PRINT USING "#";N(10); 720 ' 730 'PRINT ONES DIGIT OF MONTH AND THE '/' 740 ' 750 PRINT USING "#/";N(9); 760 ' 770 'IF DAY OF MONTH GREATER THAN 9, PRINT TENS DIGIT 780 ' 790 IF N(8)>0 THEN PRINT USING "#";N(8); 800 ' 810 'PRINT ONES DIGIT OF DAY OF MONTH, '/' AND TENS DIGIT OF YEAR 820 ' 830 PRINT USING "#/#";N(7);N(12); 840 ' 850 'PRINT ONES DIGIT OF YEAR 860 ' 870 PRINT USING "#";N(11) 880 PRINT "TIME: "; 890 ' 900 'SET TAG TO DEFAULT. (IF IT AIN'T 24 HOUR TIME OR PM IS MUST BE AM!) 910 ' 920 TAG$=" AM" 930 ' 940 'STRIP 24 HR. BIT. SET TAG TO HRS IF IT IS SET. 950 ' 960 IF N(5)>7 THEN N(5)=N(5)-8:TAG$=" HRS." 970 ' 980 'STRIP PM BIT. SET TAG TO PM IF IT IS SET. 990 ' 1000 IF N(5)>3 THEN N(5)=N(5)-4:TAG$=" PM" 1010 ' 1020 'SUPPRESS LEADING 0 IN HOURS IF NOT IN 24 HOUR TIME 1030 ' 1040 IF ((TAG$ <> " HRS.") AND (N(5) = 0)) THEN GOTO 1120 1050 ' 1060 'PRINT TENS OF HOURS 1070 ' 1080 PRINT USING "#";N(5); 1090 ' 1100 'PRINT ONES OF HOURS, MINUTES, TENS OF SECONDS WITH COLONS 1110 ' 1120 PRINT USING "#:#";N(4);N(3);N(2);N(1); 1130 ' 1140 'PRINT ONES OF SECONDS 1150 ' 1160 PRINT USING "#";N(0); 1170 ' 1180 'LOOP UNTIL KEY IS PRESSED 1190 ' 1200 IF INKEY$="" THEN GOTO 470 1210 ' 1220 'CLEAR SCREEN [^Z] 1230 ' 1240 PRINT CHR$(&H1A); 1250 ' 1260 'RESTORE CURSOR [ESC " 0] (MDT60/70) 1270 ' 1280 PRINT CHR$(&H1B);CHR$(&H22);CHR$(&H30); 1290 ' 1300 'EXIT TO CP/M 1310 ' 1320 SYSTEM 1330 END