1
0
mirror of https://github.com/PDP-10/its.git synced 2026-02-03 07:20:35 +00:00
Files
PDP-10.its/src/klh/clock.84
2018-12-03 15:31:05 +01:00

700 lines
9.3 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
TITLE CLOCK ;FIRST HACK WITH DISPLAY UUOS
.MLLIT==1
F=0
A=1
B=2
C=3
D=4
E=5
G=6
H=7
;=10
U1=11
U2=12
U3=13
U4=14
U5=15
SP=16
P=17
DEFINE SETF TEXT,FLG
IFDEF FLG,.STOP
.TAG FOOBAR
PRINTC "TEXT
FLG="
.TTYMAC FLAG
IFSE FLAG,YES,FLG==1
IFSE FLAG,NO,FLG==0
IFSE FLAG,Y,FLG==1
IFSE FLAG,N,FLG==0
IFNDEF FLG,FLG==FLAG
TERMIN
IFNDEF FLG,.GO FOOBAR
TERMIN
SETF [Integer arith?]UFRIN$
SETF [Tiny watch?]WATCH$
IFE WATCH$, SETF [Digital clock?]DIGTL$
IFN WATCH$,DIGTL$==0
NORML$==0
IFE WATCH$+DIGTL$,NORML$==1
LOC 41
JSR UUOH
JSR TSINT
LOC 100
TYIC==1
RLTBIT==200000,,0
PDLLEN==100
PDL: BLOCK PDLLEN
PAT:
PATCH: BLOCK 100
.INSRT KLH;DUUOS >
TTINFO: SETZ ? 'CNSGET ? 1000,,TYIC
2000,,HORSIZ'
2000,,VERSIZ'
2000,,TCTYP'
2000,,TTYCOM'
2000,,TTYOPT'
SETZM TTYTYP'
DIE: .VALUE [ASCIZ /:KILL /]
SIXTYS: 60. ;# OF 1/60'THS OF SEC TO INTERRUPT ON
GO: MOVE P,[-PDLLEN,,PDL]
.OPEN TYIC,[0,,'TTY]
.VALUE
.SUSET [.SMSK2,,[1_TYIC]]
.SUSET [.SPICLR,,[-1]] ;ENABLE TYPEIN INTS.
.CALL TTINFO
.VALUE
MOVE A,TCTYP
CAIE A,5 ;TV?
.VALUE [ASCIZ /: Foo, you are not on a TV! 
:KILL /]
DSTART ;INITIALIZE DISP UUOS
IFN WATCH$, .VALUE [ASCIZ //]
PUSHJ P,CINIT
GO5: DRWPIC DRWCLK ;DRAW CLOCK
PUSHJ P,TINIT ;initialize time vars
SETZM FIRST' ;indicate first pass.
MOVE A,[600000,,SIXTYS] ;INTERRUPT EVERY SECOND
.REALT A,
JFCL
.SUSET [.SAPIRQC,,[RLTBIT]] ;TURN OFF ANY PREVIOUS INTS
.SUSET [.SIMASK,,[RLTBIT]] ;NOW ENABLE INT.
.SUSET [.SIPIRQC,,[RLTBIT]] ;AND TICK OFF IMMEDIATELY, ONCE.
JFCL
.HANG ;HANG FOREVER
JRST .-2
TSINT: 0
0
PUSH P,A
SKIPL A,TSINT
JRST TSINT2 ;1ST WD INT.
MOVEI A,TYIC ;TYPEIN INT?
.ITYIC A,
JRST TSINT3
JRST DIE ;DIE ON ANY TYPEIN.
TSINT2: TDNE A,[RLTBIT]
PUSHJ P,TICK
TSINT3: POP P,A
.DISMIS TSINT+1
SECS: -1 ;# SECS
SECANG: 0 ;ANGLE OF SEC. HAND
MINS: -1
MINANG: 0
HRS: -1
HRANG: 0
;GET TIME IN B,C,D (A/ 1 IF PM)
TIME: .CALL [SETZ ? 'RQDATE ? SETZM A]
.VALUE
HRRZS A
LSH A,-1 ;GET # SECS
IDIVI A,60.
MOVE D,B ; 0-59 SECS IN D
IDIVI A,60.
MOVE C,B ; 0-59 MINS IN C
IDIVI A,12. ; 0-11 HRS IN B, A=0 FOR AM, A=1 FOR PM.
POPJ P,
IFN NORML$,[
CINIT: SETSCL [0.75]
SETORG [0,,0]
POPJ P,
TINIT: SETOM SECS ;INITIALIZE TIME
SETOM MINS
SETOM HRS
SETZM SECANG ;INITIALIZE ANGLES OF HANDS
SETZM MINANG
SETZM HRANG
POPJ P,
TICK: PUSHAE P,[A,B,C,D]
TICK1: PUSHJ P,TIME
CAMN D,SECS ;DIFF # SECS?
JRST TICK2 ;NO, TRY MINS
MOVEM D,SECS
IMULI D,6 ;GET # DEGS OUT
SKIPE FIRST
XORPIC DRWSEC ;ERASE OLD
MOVEM D,SECANG
XORPIC DRWSEC ;DRAW NEW
TICK2: CAMN C,MINS
JRST TICK3
MOVEM C,MINS
IMULI C,6
SKIPE FIRST
XORPIC DRWMIN ;ERASE OLD
MOVEM C,MINANG
XORPIC DRWMIN
MOVEM B,HRS
IMULI B,30. ;GET # DEGS FOR HR
IDIVI C,12. ;AND # ADD'L DEGS FROM MINUTE-HAND POSIITON
ADDI B,(C)
CAMN B,HRANG
JRST TICK3
SKIPE FIRST
XORPIC DRWHR
MOVEM B,HRANG
XORPIC DRWHR
TICK3: SETOM FIRST
POPAE P,[D,C,B,A]
POPJ P,
DRWSEC: ORIGIN
RIGHT SECANG
PUSHJ P,HNDSEC
POPJ P,
HNDSEC: FDU 50.
FD 150.
POPJ P,
DRWMIN: ORIGIN
RIGHT MINANG
PUSHJ P,HNDMIN
POPJ P,
HNDMIN: SPUSH
PUSHJ P,RMIN
SPOP
REVRSE
PUSHJ P,RMIN
REVRSE
POPJ P,
RMIN: FDU 190.
SPUSH
FDU -210.
RT 90.
FD 20.
SPOPDRW
POPJ P,
DRWHR: ORIGIN
RIGHT HRANG
PUSHJ P,HNDHR
POPJ P,
HNDHR: SPUSH
PUSHJ P,RHR
SPOP
REVRSE
PUSHJ P,RHR
REVRSE
POPJ P,
RHR: FDU 100.
SPUSH
FDU -125.
RT 90.
FD 30.
SPOPDRW
POPJ P,
DRWCLK: PUSHAE P,[A,B,C,D]
ORIGIN
MOVSI D,-12.*5
DRWC1: SPUSH
MOVEI A,(D)
IMULI A,6
RT (A)
FDU 200.
SPUSH
MOVEI A,(D)
IDIVI A,5
FD -5.
CAIE B,0
JRST DRWC2
FD -10.
FDU 75. ;15 BACK UP, AND 60 BEYOND EDGE (NUMS ARE 50 HIGH)
RT 90.
FDU -15.
CAIN A,0
MOVEI A,12. ;FOR TOP #
CAILE A,9.
FDU -17. ;ADJUST SO DOUBLE DIGIT IS CENTERED.
PUSHJ P,DBNUM ;DISPLAY NUM BIGLY
DRWC2: SPOP
RT 90.
FD 10.
RT 3.
FD 10.
SPOP
AOBJN D,DRWC1
POPAE P,[D,C,B,A]
POPJ P,
] ;END OF IFN NORML$
IFN WATCH$,[
CINIT: SETSCL [0.15]
SETORG [230.,,190.] ;(COORD RANGES ARE |288.| AND |227.| RESP.)
POPJ P,
TINIT: SETOM SECS ;INITIALIZE TIME
SETOM MINS
SETOM HRS
SETZM SECANG ;INITIALIZE ANGLES OF HANDS
SETZM MINANG
SETZM HRANG
POPJ P,
TICK: PUSHAE P,[A,B,C,D]
ORIGIN
LT 90.
FDU 200. ;WANT TO CHECK FOR CLOBBERRAGE
DSKIPE ;SKIP IF GOT CLOBBERED TO 0
JRST TICK1
MOVE P,[-PDLLEN,,PDL] ;GOT CLOBBERED, RESTART.
.SUSET [.SAMASK,,[RLTBIT]] ;DISABLE REALT INTS
.DISMIS [GO5]
TICK1: PUSHJ P,TIME
CAMN D,SECS ;DIFF # SECS?
JRST TICK2 ;NO, TRY MINS
MOVEM D,SECS
IMULI D,6 ;GET # DEGS OUT
CLRPIC DRWSEC
MOVEM D,SECANG
DRWPIC DRWSEC
TICK2: CAMN C,MINS
JRST TICK3
MOVEM C,MINS
IMULI C,6
CLRPIC DRWMIN
MOVEM C,MINANG
DRWPIC DRWMIN
MOVEM B,HRS
IMULI B,30. ;GET # DEGS FOR HR
IDIVI C,12. ;AND # ADD'L DEGS FROM MINUTE-HAND POSIITON
ADDI B,(C)
CAMN B,HRANG
JRST TICK3
CLRPIC DRWHR
MOVEM B,HRANG
DRWPIC DRWHR
TICK3: POPAE P,[D,C,B,A]
POPJ P,
DRWSEC: ORIGIN
RIGHT SECANG
PUSHJ P,HNDSEC
POPJ P,
HNDSEC: FDU 210.
RT 90.
FD 5
LT 120.
FD 10.
LT 120.
FD 10.
LT 120.
FD 5.
POPJ P,
DRWMIN: ORIGIN
RIGHT MINANG
PUSHJ P,HNDMIN
POPJ P,
HNDMIN: FD 165.
POPJ P,
DRWHR: ORIGIN
RIGHT HRANG
PUSHJ P,HNDHR
POPJ P,
HNDHR: SPUSH
PUSHJ P,RHR
SPOP
REVRSE
PUSHJ P,RHR
REVRSE
POPJ P,
RHR: FDU -10.
RT 90.
FD 5
LT 90.
FD 100.
LT 90.
FD 5
POPJ P,
DRWCLK: PUSHAE P,[A,B,C,D]
ORIGIN
SPUSH
LT 90.
FDU 200.
DOPT
SPOP
MOVSI D,-12.*5
DRWC1: SPUSH
MOVEI A,(D)
IMULI A,6
RT (A)
FDU 200.
SPUSH
MOVEI A,(D)
IDIVI A,5
CAIE B,0
JRST DRWC2
FD -10.
DRWC2: SPOP
SPOP
AOBJN D,DRWC1
POPAE P,[D,C,B,A]
POPJ P,
] ; END OF IFN WATCH$
IFN DIGTL$,[
CINIT: SETSCL [1.5]
SETORG [150.,,0]
POPJ P,
TINIT: SETOM SECS
SETOM MINS
SETOM HRS
POPJ P,
TICK: PUSHAE P,[A,B,C,D]
TICK1: PUSHJ P,TIME
MOVEM D,NSECS'
MOVEM C,NMINS'
CAIE A,0
ADDI B,12.
MOVEM B,NHRS'
MOVSI E,-3
TICK2: MOVE B,@NTAB(E) ;GET NEW NUM
MOVE A,@OTAB(E) ;GET OLD NUM
CAMN A,B ;SAME?
JRST TICK5
SKIPN FIRST
JRST TICK3
PUSHJ P,@SETTAB(E) ;SET INITIAL LOCATION
XORPIC DIFNUM ;WRITE.
TICK3: EXCH A,B
PUSHJ P,@SETTAB(E)
XORPIC DIFNUM
MOVEM A,@OTAB(E) ;SET OLD TO NEW.
TICK5: AOBJN E,TICK2
SETOM FIRST
POPAE P,[D,C,B,A]
POPJ P,
NTAB: NSECS
NMINS
NHRS
OTAB: SECS
MINS
HRS
SETTAB: SETSEC
SETMIN
SETHR
SETSEC: ORIGIN
LT 90.
FDU 80.
RT 90.
FDU 50.
RT 90.
POPJ P,
SETMIN: ORIGIN
LT 90.
FDU 80.+10.+80.
RT 90.
FDU 50.
RT 90.
POPJ P,
SETHR: ORIGIN
LT 90.
FDU 80.+10.+80.+10.+80.
RT 90.
FDU 50.
RT 90.
POPJ P,
DRWCLK: ORIGIN
FD 60.
LT 90.
FD 10.+80.+10.+80.+10.+80.
LT 90.
FD 60.
LT 90.
FD 10.+80.+10.+80.+10.+80.
POPJ P,
; A AND B HAVE NEW AND OLD NUMBERS. DRAWS ONLY DIGITS OF NEW NUMBER
;WHICH DIFFER.
DIFNUM: PUSHAE P,[A,B,G,H]
MOVE G,B
SETZB B,H
IDIVI A,10.
JUMPL G,[SETOB G,H ? JRST .+2]
IDIVI G,10.
CAMN A,G
PENUP ;draw it with pen up.
PUSHJ P,@BNUMTB(A)
PENDWN
MOVE A,B
CAME A,H
PUSHJ P,@BNUMTB(A)
POPAE P,[H,G,B,A]
POPJ P,
] ; END OF IFN DIGTL$
DBNUM: PUSH P,B
IDIVI A,10.
CAIE A,0 ;ANYTHING LEFT? DRAW DIGIT IN B IF NOT.
PUSHJ P,DBNUM ;ELSE FIRST DRAW # IN A
PUSHJ P,@BNUMTB(B)
POP P,B
POPJ P,
BNUMTB: BNUM0
BNUM1
BNUM2
BNUM3
BNUM4
BNUM5
BNUM6
BNUM7
BNUM8
BNUM9
DEFINE DLV CH,X,Y
IFSE [CH][B] RRLV [X,,Y]
IFSE [CH][D] RRLVU [X,,Y]
TERMIN
DEFINE DRJM
POPJ P,
TERMIN
; big number routines
BNUM0: DLV D,10,0
DLV B,10,0
DLV B,10,-10
DLV B,0,-30
DLV B,-10,-10
DLV B,-10,0
DLV B,-10,10
DLV B,0,30
DLV B,10,10
DLV D,0,-10
DLV B,10,0
DLV B,0,-30
DLV B,-10,0
DLV B,0,30
DLV D,30,10
DRJM
BNUM1: DLV D,10,0
DLV B,10,0
DLV B,0,-50
DLV B,-10,0
DLV B,0,50
DLV D,30,0
DRJM
BNUM2: DLV D,10,0
DLV B,10,0
DLV B,10,-10
DLV B,0,-10
DLV B,-20,-20
DLV B,20,0
DLV B,0,-10
DLV B,-30,0
DLV B,0,10
DLV B,20,20
DLV B,0,10
DLV B,-10,0
DLV B,-10,-10
DLV B,0,10
DLV B,10,10
DLV D,30,0
DRJM
BNUM3: DLV D,10,0
DLV B,10,0
DLV B,10,-10
DLV B,0,-30
DLV B,-10,-10
DLV B,-10,0
DLV B,-10,10
DLV B,0,10
DLV B,10,-10
DLV B,10,0
DLV B,0,10
DLV B,-10,0
DLV B,0,10
DLV B,10,0
DLV B,0,10
DLV B,-10,0
DLV B,-10,-10
DLV B,0,10
DLV B,10,10
DLV D,30,0
DRJM
BNUM4: DLV D,10,0
DLV B,0,-20
DLV B,10,0
DLV B,0,20
DLV B,10,0
DLV B,0,-50
DLV B,-10,0
DLV B,0,20
DLV B,-20,0
DLV B,0,30
DLV B,10,0
DLV D,30,0
DRJM
BNUM5: DLV B,30,0
DLV B,0,-10
DLV B,-20,0
DLV B,0,-10
DLV B,20,0
DLV B,0,-30
DLV B,-30,0
DLV B,0,10
DLV B,20,0
DLV B,0,10
DLV B,-20,0
DLV B,0,30
DLV D,40,0
DRJM
BNUM6: DLV D,10,0
DLV B,10,0
DLV B,10,-10
DLV B,0,-10
DLV B,-10,10
DLV B,-10,0
DLV B,0,-10
DLV B,10,0
DLV B,10,-10
DLV B,0,-10
DLV B,-10,-10
DLV B,-10,0
DLV B,-10,10
DLV B,0,30
DLV B,10,10
DLV D,0,-30
DLV B,0,-10
DLV B,10,0
DLV B,0,10
DLV B,-10,0
DLV D,30,30
DRJM
BNUM7: DLV B,30,0
DLV B,0,-50
DLV B,-10,0
DLV B,0,40
DLV B,-20,0
DLV B,0,10
DLV D,40,0
DRJM
BNUM8: DLV D,10,0
DLV B,10,0
DLV B,10,-10
DLV B,0,-10
DLV B,-10,-4
DLV B,10,-4
DLV B,0,-10
DLV B,-10,-10
DLV B,-10,0
DLV B,-10,10
DLV B,0,10
DLV B,10,4
DLV B,-10,4
DLV B,0,10
DLV B,10,10
DLV D,0,-10
DLV B,10,0
DLV B,0,-6
DLV B,-4,-2
DLV B,-4,2
DLV B,0,6
DLV D,0,-30
DLV B,10,0
DLV B,0,6
DLV B,-4,2
DLV B,-4,-2
DLV B,0,-6
DLV D,30,40
DRJM
BNUM9: DLV D,10,0
DLV B,10,0
DLV B,10,-10
DLV B,0,-30
DLV B,-10,-10
DLV B,-10,0
DLV B,-10,10
DLV B,0,10
DLV B,10,-10
DLV B,10,0
DLV B,0,10
DLV B,-10,0
DLV B,-10,10
DLV B,0,10
DLV B,10,10
DLV D,0,-10
DLV B,10,0
DLV B,0,-10
DLV B,-10,0
DLV B,0,10
DLV D,30,10
DRJM
END GO