mirror of
https://github.com/PDP-10/its.git
synced 2026-02-03 07:20:35 +00:00
700 lines
9.3 KiB
Plaintext
700 lines
9.3 KiB
Plaintext
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
|
||
|