ZX81 Listing for flipclk.p


ZX81 program listing for **FLIP-CLOCK*SLR/2025**

**FLIP-CLOCK*SLR/2025** (flipclk.p)

A simple digital flip-clock.


SYSTEM VARIABLES

PROG  : 16509
D-FILE: 20494
VARS  : 21287
E-LINE: 21288
STKBOT: 21288
STKEND: 21288


LEGEND

9999 means line number
PRINT means treat as KEYWORD P


PROGRAM LISTING

  10 REM **FLIP-CLOCK*SLR/2025**
  20 GOSUB 1000
  30 REM --- MAIN LOOP ---
 100 LET NOW=PEEK 16436
 110 LET DIFF=LAST-NOW
 120 IF DIFF<0 THEN LET DIFF=DIF
F+W
 130 IF DIFF<R THEN GOTO 100
 140 LET SA=INT (DIFF/R)
 150 LET LAST=LAST-(SA*R)
 160 IF LAST<0 THEN LET LAST=LAS
T+W
 170 FOR I=1 TO SA
 180 LET SC=NOT SC
 190 GOSUB 300
 200 NEXT I
 210 IF M2=LM THEN GOTO 240
 220 GOSUB 550
 230 LET LM=M2
 240 REM --- PULSE COLON ---
 250 IF SC THEN PRINT AT 3,8;"¸"
;AT 5,8;"¸"
 260 IF NOT SC THEN PRINT AT 3,8
;" ";AT 5,8;" "
 270 GOTO 100
 300 REM --- INCREMENT ---
 310 LET S2=S2+1
 320 IF S2<11 THEN RETURN
 330 LET S2=1
 340 LET S1=S1+1
 350 IF S1<7 THEN RETURN
 360 LET S1=1
 370 LET M2=M2+1
 380 IF M2<11 THEN RETURN
 390 LET M2=1
 400 LET M1=M1+1
 410 IF M1<7 THEN RETURN
 420 LET M1=1
 430 LET H2=H2+1
 440 IF H1=3 AND H2=5 THEN GOTO
490
 450 IF H2<11 THEN RETURN
 460 LET H2=1
 470 LET H1=H1+1
 480 RETURN
 490 LET H1=1
 500 LET H2=1
 510 RETURN
 550 REM --- CONCATENATE ---
 560 FOR J=1 TO 5
 570 LET L$(J)=D$(H1,J)+" "+D$(H
2,J)+"   "+D$(M1,J)+" "+D$(M2,J)
 575 REM LET L$(J)=D$(H1,J)+" "+
D$(H2,J)+" : "+D$(M1,J)+" "+D$(M
2,J)+" : "+D$(S1,J)+" "+D$(S2,J)
 580 NEXT J
 600 REM --- DRAWING ---
 610 PRINT AT 2,0;L$(1);L$(2);L$
(3);L$(4);L$(5)
 620 RETURN
 900 REM --- SAVE ---
 910 SAVE "FLIPCLK"
 920 RUN
 950 REM --- SETUP ---
1000 DIM D$(12,5,3)
1010 REM DIGIT 0 (ARRAY 1)
1020 LET D$(1,1)="¸¸¸"
1030 LET D$(1,2)="¸ ¸"
1040 LET D$(1,3)="¸ ¸"
1050 LET D$(1,4)="¸ ¸"
1060 LET D$(1,5)="¸¸¸"
1070 REM DIGIT 1 (ARRAY 2)
1080 LET D$(2,1)="  ¸"
1090 LET D$(2,2)="  ¸"
1100 LET D$(2,3)="  ¸"
1110 LET D$(2,4)="  ¸"
1120 LET D$(2,5)="  ¸"
1130 REM DIGIT 2 (ARRAY 3)
1140 LET D$(3,1)="¸¸¸"
1150 LET D$(3,2)="  ¸"
1160 LET D$(3,3)="¸¸¸"
1170 LET D$(3,4)="¸  "
1180 LET D$(3,5)="¸¸¸"
1190 REM DIGIT 3 (ARRAY 4)
1200 LET D$(4,1)="¸¸¸"
1210 LET D$(4,2)="  ¸"
1220 LET D$(4,3)="¸¸¸"
1230 LET D$(4,4)="  ¸"
1240 LET D$(4,5)="¸¸¸"
1250 REM DIGIT 4 (ARRAY 5)
1260 LET D$(5,1)="¸ ¸"
1270 LET D$(5,2)="¸ ¸"
1280 LET D$(5,3)="¸¸¸"
1290 LET D$(5,4)="  ¸"
1300 LET D$(5,5)="  ¸"
1310 REM DIGIT 5 (ARRAY 6)
1320 LET D$(6,1)="¸¸¸"
1330 LET D$(6,2)="¸  "
1340 LET D$(6,3)="¸¸¸"
1350 LET D$(6,4)="  ¸"
1360 LET D$(6,5)="¸¸¸"
1370 REM DIGIT 6 (ARRAY 7)
1380 LET D$(7,1)="¸¸¸"
1390 LET D$(7,2)="¸  "
1400 LET D$(7,3)="¸¸¸"
1410 LET D$(7,4)="¸ ¸"
1420 LET D$(7,5)="¸¸¸"
1430 REM DIGIT 7 (ARRAY 8)
1440 LET D$(8,1)="¸¸¸"
1450 LET D$(8,2)="  ¸"
1460 LET D$(8,3)="  ¸"
1470 LET D$(8,4)="  ¸"
1480 LET D$(8,5)="  ¸"
1490 REM DIGIT 8 (ARRAY 9)
1500 LET D$(9,1)="¸¸¸"
1510 LET D$(9,2)="¸ ¸"
1520 LET D$(9,3)="¸¸¸"
1530 LET D$(9,4)="¸ ¸"
1540 LET D$(9,5)="¸¸¸"
1550 REM DIGIT 9 (ARRAY 10)
1560 LET D$(10,1)="¸¸¸"
1570 LET D$(10,2)="¸ ¸"
1580 LET D$(10,3)="¸¸¸"
1590 LET D$(10,4)="  ¸"
1600 LET D$(10,5)="¸¸¸"
1610 DIM L$(5,32)
1620 REM --- INIT CONSTANTS ---
1630 LET W=256
1640 LET LM = 99
1650 LET R=50
1660 IF PEEK 16424=31 THEN LET R
=60
1670 LET SC=1
1680 LET NOW=0
1690 LET LAST=0
1700 LET DIFF=0
2000 CLS
2010 PRINT "SETTING 24HR TIME (P
RESS 0-9)","PRESS D WHEN DONE"
2040 LET H1=1
2050 LET H2=1
2060 LET M1=1
2070 LET M2=1
2080 LET S1=1
2090 LET S2=1
2100 GOSUB 550
2110 PRINT AT 3,8;"¸";AT 5,8;"¸"
2200 LET K$=INKEY$
2210 IF K$="" THEN GOTO 2200
2220 IF K$="D" THEN GOTO 2400
2230 IF K$<"0" OR K$>"9" THEN
GOTO 2200
2240 REM --- SHIFT DIGITS ---
2250 LET H1=H2
2260 LET H2=M1
2270 LET M1=M2
2290 LET M2=CODE K$-27
2300 IF INKEY$<>"" THEN GOTO 230
0
2310 GOTO 2100
2400 REM --- CHECK TIME ---
2410 LET LAST=PEEK 16436
2420 IF (H1*10+H2)>34 THEN GOTO
2500
2430 IF (M1*10+M2)>70 THEN GOTO
2500
2440 CLS
2450 LET LM=99
2460 RETURN
2500 PRINT AT 7,0;"INVALID TIME"
2510 FOR I=1 TO 100
2520 NEXT I
2530 PRINT AT 7,0;"            "
2540 GOTO 2100