home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
cpm
/
programs
/
clockk
/
mdclck13.lbr
/
READTIME.BZS
/
READTIME.BAS
Wrap
BASIC Source File
|
1988-01-06
|
3KB
|
140 lines
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
(MDT60/70)
1270 '
1280 PRINT CHR$(&H1B);CHR$(&H22);CHR$(&H30);