mirror of
https://github.com/PDP-10/its.git
synced 2026-05-27 07:17:32 +00:00
2522 lines
46 KiB
Plaintext
2522 lines
46 KiB
Plaintext
;<DRAW>DISP.FAI.150, 15-NOV-75 19:20:54, EDIT BY HELLIWELL
|
||
;BLINKO, DPYSET, OUTDPY, MRKPAG, MAINOU, HYDPOG
|
||
VERSION(DISP,13)
|
||
NOCMU,<
|
||
NODEC,<
|
||
NOIII,<
|
||
BLINKO: TLNN DSPACT
|
||
POPJ P,
|
||
PUSH P,T
|
||
HRRZ T,BUFPTR
|
||
SETZM 1(T)
|
||
SUBI T,DPYBUF-3-BLINKL
|
||
MOVEM T,BLINK+1
|
||
MOVE T,PGLASS
|
||
DPB T,[POINT 4,BLDPY,12] ;SET PG NUM
|
||
CAIGE T,20
|
||
XCT BLDPY
|
||
PUSHJ P,MRKPAG
|
||
POP P,T
|
||
POPJ P,
|
||
>;NOIII
|
||
>;NODEC
|
||
>;NOCMU
|
||
|
||
DPYSET: MOVEI TT,1
|
||
MOVEM TT,SIZ
|
||
MOVE TT,S2H(TT)
|
||
DPB TT,[POINT 3,BSOR,27]
|
||
MOVE TT,DEFBRT
|
||
MOVEM TT,BRT
|
||
DPB TT,[POINT 3,BSOR,24]
|
||
TLO DSPOFF ;START OFF SCREEN IN CASE HE SCREWS UP!
|
||
SETZM XDISP
|
||
SETZM YDISP
|
||
DPYST1:
|
||
NOIII,< MOVE TT,[POINT 36,DPYBUF,35] >
|
||
III,< MOVE TT,[POINT 36,DPYBUF] >
|
||
MOVEM TT,BUFPTR
|
||
SETZM DPYBUF
|
||
POPJ P,
|
||
|
||
NOCMU,<
|
||
IFN DECSW!IIISW,<
|
||
BLINKO:
|
||
PGP,< SETOM BLNKIT >
|
||
>;IFN DECSW!IIISW
|
||
OUTDPY: TLNN DSPACT
|
||
POPJ P,
|
||
PUSH P,T
|
||
HRRZ T,BUFPTR
|
||
SETZM 1(T)
|
||
SUBI T,DPYBUF-1
|
||
NOIII,< MOVEM T,HEAD+1 >
|
||
III,< HRLM T,HEAD >
|
||
MOVE T,PGLASS
|
||
DPB T,[POINT 4,DPYDPY,12]
|
||
CAIGE T,20
|
||
XCT DPYDPY
|
||
III,< JFCL >
|
||
PUSHJ P,MRKPAG
|
||
POP P,T
|
||
POPJ P,
|
||
>;NOCMU
|
||
MRKPAG: MOVEI T,1
|
||
LSH T,@PGLASS
|
||
IORM T,PAGACT
|
||
IORM T,REALACT
|
||
POPJ P,
|
||
|
||
MAINOU: TLNN DSPACT
|
||
POPJ P,
|
||
PUSHJ P,OUTDPY
|
||
AOS T,PGLASS
|
||
MAINO1: CAILE T,17 ;NOW CLEAR ALL OTHER PG'S NOT USED
|
||
POPJ P,
|
||
PUSHJ P,HYDPOG
|
||
AOJA T,MAINO1
|
||
|
||
NOCMU,<
|
||
HYDPOG: TLNN DSPACT
|
||
POPJ P,
|
||
PUSH P,T
|
||
MOVEI T,1
|
||
LSH T,@(P)
|
||
ANDCAM T,PAGACT
|
||
POP P,T ;SOME PEOPLE EXPECT T TO BE SAVED!
|
||
POPJ P,
|
||
|
||
DOPOGS: TLNN DSPACT
|
||
POPJ P,
|
||
MOVE T,PAGACT
|
||
ANDCM T,REALACT ;THESE ALL SHOULD BE ON
|
||
SKIPE T
|
||
HALT .+1
|
||
MOVE T,PAGACT ;WHAT WE WANT ACTIVE
|
||
ANDCA T,REALACT ;WHAT IS ACTIVE
|
||
MOVEI TT,17
|
||
DOPOG1: MOVEI TTT,1
|
||
LSH TTT,(TT)
|
||
TDNN T,TTT ;DOES THIS POG NEED CLEARING?
|
||
JRST DOPOG2 ;NO
|
||
DPB TT,[POINT 4,HYDDPY,12]
|
||
XCT HYDDPY
|
||
III,< JFCL >
|
||
DOPOG2: SOJG TT,DOPOG1
|
||
MOVE T,PAGACT
|
||
MOVEM T,REALACT
|
||
POPJ P,
|
||
>;NOCMU
|
||
;SETDEF, DPYBRT, TXTDPB, INSOUT, DPYBIG
|
||
SETDEF: MOVE T,STDBIG
|
||
PUSHJ P,DPYBIG
|
||
MOVE T,DEFBRT
|
||
DPYBRT: CAILE T,7 ;IN CASE HE IS LOSING!
|
||
MOVEI T,7
|
||
CAMN T,BRT
|
||
POPJ P, ;SEE THE TIME WE SAVE
|
||
MOVEM T,BRT
|
||
DPB T,[POINT 3,BSOR,24]
|
||
POPJ P, ;NO
|
||
|
||
TXTDPB: TRO T,1 ;MAKE SURE IS TEXT
|
||
TLNN DSPOFF ;ARE WE CURRENTLY OFF SCREEN?
|
||
IDPB T,BUFPTR ;NO, DEPOSIT TEXT, OR WHATEVER
|
||
POPJ P,
|
||
|
||
INSOUT: IDPB TT,BUFPTR
|
||
HRRZ TT,BUFPTR
|
||
CAIG TT,DPYBUF+DPYLEN ;THIS BUFFER FULL YET?
|
||
POPJ P,
|
||
PUSHJ P,OUTDPY ;YES, USE ANOTHER
|
||
AOS TT,PGLASS
|
||
CAIN TT,20
|
||
OUTSTR[ASCIZ/RAN OUT OF PIECES OF GLASS!
|
||
/]
|
||
JRST DPYST1
|
||
|
||
;SETUP BSOR WITH HARDWARE CHARACTER SIZE
|
||
;T = SOFTWARE SIZE
|
||
|
||
DPYBIG: CAMN T,SIZ
|
||
POPJ P,
|
||
MOVEM T,SIZ
|
||
CAILE T,CSIZES
|
||
MOVEI T,CSIZES
|
||
MOVE T,S2H(T)
|
||
DPB T,[POINT 3,BSOR,27]
|
||
POPJ P,
|
||
;AVECT, AVECTX, AVECTZ, AVECTY
|
||
AVECT: MOVE TT,XDISP
|
||
MOVEM TT,XGO
|
||
MOVE TT,YDISP
|
||
MOVEM TT,YGO
|
||
TLNE DSPOFF
|
||
JRST AVECTW
|
||
MOVEI TT,106
|
||
PUSHJ P,VECT
|
||
CAIA
|
||
JRST INSOUT
|
||
TLNN M,LWINDOW ;WINDOWING LINES?
|
||
POPJ P, ;NO
|
||
PUSHJ P,SEGWN1 ;CALC INTERSECTION POINT
|
||
PUSHJ P,FUCKUP
|
||
JRST AVECTZ
|
||
|
||
AVECTX: PUSHJ P,VECT
|
||
JRST AVECTY
|
||
PUSHJ P,SEGWN0
|
||
PUSHJ P,FUCKUP ;CAN'T LOSE
|
||
MOVE T,XDISP
|
||
MOVEM T,XGO
|
||
MOVE T,YDISP
|
||
MOVEM T,YGO
|
||
AVECTZ: TRO TT,146 ;INVIS TO EDGE
|
||
TDO TT,BSOR
|
||
PUSHJ P,INSOU2 ;THIS WAY
|
||
HRLZ TT,XGO
|
||
LSH TT,=18-=11
|
||
MOVE T,YGO
|
||
DPB T,[POINT 11,TT,21]
|
||
TRO TT,106
|
||
TDO TT,BSOR
|
||
JRST INSOUT
|
||
|
||
AVECTY: PUSHJ P,SEGWN0
|
||
POPJ P, ;DOESN'T INTERSECT SCREEN
|
||
TRO TT,146
|
||
TDO TT,BSOR
|
||
PUSHJ P,INSOU2
|
||
PUSHJ P,SEGWN1
|
||
PUSHJ P,FUCKUP ;MUST GO OUT IF IT CAME IN!
|
||
TRO TT,106
|
||
TDO TT,BSOR
|
||
JRST INSOUT
|
||
;VECTORS, CHAR POSITIONING, TFUDGE
|
||
PINPOS: MOVEI TT,146
|
||
PUSHJ P,VECT
|
||
POPJ P,
|
||
PUSHJ P,TFUDGE
|
||
JRST INSOU2
|
||
|
||
AVECTW: TLNE M,LWINDOW ;IF NOT WINDOWING LINES, JUST DO AIVECT
|
||
JRST AVECTX
|
||
AIVECT: MOVEI TT,146
|
||
PUSHJ P,VECT
|
||
POPJ P,
|
||
INSOU2: LDB T,[POINT 7,@BUFPTR,35]
|
||
CAIE T,46 ;CAN REPLACE RELATIVE INVISIBLE
|
||
CAIN T,146 ;OR ABSOLUTE INVISIBLE
|
||
SOS BUFPTR ;WITH ABSOLUTE INVISIBLE
|
||
JRST INSOUT
|
||
|
||
MPC,<
|
||
ROUTE,<
|
||
APOINT: MOVEI TT,126
|
||
PUSHJ P,VECT
|
||
POPJ P,
|
||
JRST INSOUT
|
||
>;ROUTE
|
||
>;MPC
|
||
|
||
IFN 0,< ;CURRENTLY NOT USED, BUT MAY BE USEFUL LATER
|
||
RIVECT: MOVEI TT,46
|
||
PUSHJ P,VECT
|
||
POPJ P,
|
||
JRST INSOUT
|
||
>;IFN 0
|
||
|
||
VECT: HLRE TTT,T
|
||
HRRE T,T
|
||
SUB TTT,XOFF
|
||
MPC,< TRNE M,FLIP ;INVERTING X?
|
||
MOVN TTT,TTT ;YES!
|
||
>;MPC
|
||
SUB T,YOFF
|
||
SCALE (TTT)
|
||
SCALE (T)
|
||
CALVCT: MOVEM T,YDISP
|
||
MOVEM TTT,XDISP
|
||
CAIGE TTT,%RIGHT
|
||
CAMG TTT,[%LEFT]
|
||
JRST VECTOF
|
||
CAIGE T,%TOP
|
||
CAMG T,[%BOTTOM]
|
||
JRST VECTOF
|
||
TLZ DSPOFF ;ASSUME NOT OFF YET
|
||
DPB T,[POINT 11,TT,21]
|
||
DPB TTT,[POINT 11,TT,10]
|
||
IOR TT,BSOR ;ADD BRIGHTNESS, SIZE
|
||
JRST CPOPJ1
|
||
|
||
VECTOF: TLO DSPOFF
|
||
POPJ P,
|
||
|
||
TITVCT: SKIPE T
|
||
PUSHJ P,DPYBRT
|
||
SKIPE T,TT
|
||
PUSHJ P,DPYBIG
|
||
MOVEI TT,146
|
||
DPB TTT,[POINT 11,TT,21]
|
||
HLRZ TTT,TTT
|
||
DPB TTT,[POINT 11,TT,10]
|
||
TDO TT,BSOR
|
||
PUSHJ P,TFUDGE ;FUDGE FOR TEXT
|
||
TLZ DSPOFF ;FAKE OUT TEXT ROUTINES
|
||
JRST INSOU2
|
||
|
||
;SMLVCT, BIGSET, SM2SET, TFUDGE, ATTFIX
|
||
|
||
;POSITION TO X,Y AND SET CHAR SIZE, FUDGE FOR CHAR GEN LOSSAGE
|
||
;T = X,,Y
|
||
;RETURNS
|
||
;TT = VECTOR
|
||
|
||
MPC,<
|
||
SMLVCT: SKIPA TT,STDBIG ;STD SIZE FOR TEXT
|
||
>;MPC
|
||
BIGSET: MOVEI TT,3 ;SIZE 3, BIG CHARS
|
||
SM2SET: PUSH P,T
|
||
MOVE T,TT
|
||
PUSHJ P,DPYBIG ;SETUP BSOR WITH HARDWARE CHAR SIZE
|
||
POP P,T ;X,,Y
|
||
MOVEI TT,146
|
||
PUSHJ P,VECT
|
||
POPJ P,
|
||
AOS (P) ;SKIP RETURN
|
||
|
||
;FUDGE VECTOR IN TT TO COMPENSATE FOR CHARACTER GENERATOR
|
||
;FALLS THRU
|
||
|
||
TFUDGE: PUSH P,TTT
|
||
MOVE TTT,SIZ
|
||
MOVE TTT,S2H(TTT)
|
||
LDB T,[POINT 11,TT,21] ;GET Y PART
|
||
ADD T,YTEXTF-1(TTT)
|
||
DPB T,[POINT 11,TT,21]
|
||
HRLZ T,XTEXTF-1(TTT)
|
||
POP P,TTT
|
||
LSH T,=18-=11
|
||
ADD TT,T
|
||
POPJ P,
|
||
|
||
;OFFSET LAST VECTOR PUT OUT BY X(A) AND Y(TT)
|
||
;ATTFIX(A=X, TT=Y)
|
||
ATTFIX: LSH A,=36-=11
|
||
ADDM A,@BUFPTR
|
||
LDB A,[POINT 11,@BUFPTR,21]
|
||
ADD A,TT
|
||
DPB A,[POINT 11,@BUFPTR,21]
|
||
POPJ P,
|
||
|
||
;BIGAIV, SMLAIV
|
||
|
||
BIGAIV: PUSHJ P,BIGSET ;SET X,Y FOR BIG CHAR
|
||
POPJ P,
|
||
CENCHR: MOVE TTT,SIZ ;MOVE BEAM SO CHAR IS CENTERED AT X,Y
|
||
MOVE T,DPYPTX(TTT)
|
||
CHRCN2: LSH T,=36-=11-1
|
||
TLZ T,(1B11)
|
||
SUB TT,T
|
||
LDB T,[POINT 11,TT,21]
|
||
MOVE TTT,DPYPTY(TTT)
|
||
ASH TTT,-1
|
||
SUB T,TTT
|
||
DPB T,[POINT 11,TT,21]
|
||
JRST INSOUT
|
||
|
||
MPC,<
|
||
SMLAIV: PUSHJ P,SMLVCT
|
||
POPJ P,
|
||
JRST CENCHR
|
||
|
||
SMGAIV: PUSHJ P,SMLVCT
|
||
POPJ P,
|
||
MOVE TTT,SIZ
|
||
MOVE T,DPYPTX(TTT)
|
||
ASH T,1
|
||
JRST CHRCN2
|
||
|
||
SM1AIV: PUSHJ P,SMLVCT
|
||
POPJ P,
|
||
JRST CENCHR
|
||
|
||
SM2AIV: MOVE TT,STDBIG
|
||
AOS TT
|
||
PUSHJ P,SM2SET
|
||
POPJ P,
|
||
JRST CENCHR
|
||
>;MPC
|
||
;VHLINE
|
||
NOCMU,<
|
||
VHLINE: TLNN DSPACT
|
||
POPJ P,
|
||
PUSH P,T
|
||
MOVEI TT,146
|
||
TLNE LOCATE ;LOCATING?
|
||
PUSHJ P,VECT
|
||
NODEC,<
|
||
MOVE TT,[XWD %NLOC,20] ;OFF SCREEN, DON'T DISPLAY
|
||
TRZ TT,34000 ;CLEAR BRIGHTNESS FIELD
|
||
CAMN TT,LOCAT
|
||
JRST VHLIN1
|
||
NOIII,< PGSEL 0
|
||
UPGMVM TT,LOCAT
|
||
>;NOIII
|
||
>;NODEC
|
||
|
||
NOGT,< ;;JB
|
||
VB10,<
|
||
JRST VHLIN2
|
||
EXCH TT,TTT
|
||
PUSHJ P,MAKWRD
|
||
EXCH TT,TTT
|
||
MOVEM TT,LOCATW
|
||
SKIPA TT,[XWD 400000,LOCATS]
|
||
VHLIN2: MOVE TT,[XWD 0,%NLOC]
|
||
>;VB10
|
||
PGP,<
|
||
SETZ TT, ;FLAG FOR VH LINE OFF
|
||
TRZ TT,34000 ;CLR BRIGHTNESS BITS
|
||
CAMN TT,LOCAT ;ANYTHING NEW?
|
||
JRST VHLIN1 ;NO, QUIT
|
||
PUSHJ P,PUSHAL ;SAVE ACS
|
||
JUMPE TT,VHLIN2 ;TURN OFF?
|
||
PUSHJ P,TXYSET ;SET UP XY OF LINES
|
||
RTNCAL (INTERA,<[PLIT VHLIN4],[PLIT TSXDAT]>) ;SET UP VH LINES
|
||
VHLIN3: PUSHJ P,CHCINT ;MAKE IT HAPPEN
|
||
PUSHJ P,POPALL ;RESTORE ACS
|
||
>;PGP
|
||
MOVEM TT,LOCAT
|
||
III,<; DPYOUT 0,FBUF
|
||
JFCL
|
||
>;III
|
||
VHLIN1: POP P,T
|
||
POPJ P,
|
||
PGP,<
|
||
VHLIN2: RTNCAL (INTERA,<[PLIT VHLIN5],[PLIT NULARG]>) ;TURN OFF THE VH LINES
|
||
JRST VHLIN3 ;GO MAKE IT HAPPEN
|
||
|
||
EVHL4-.-1
|
||
VHLIN4: ASCIZ !BEGIN
|
||
ON HCA
|
||
Y[9]=$1;
|
||
X[10]=$0;
|
||
'302'=1;
|
||
END,
|
||
END!
|
||
2
|
||
EVHL4__.
|
||
|
||
EVHL5-.-1
|
||
VHLIN5: ASCIZ !BEGIN
|
||
ON HCA
|
||
'302'=0;
|
||
END,
|
||
END!
|
||
0
|
||
EVHL5__.
|
||
>;PGP
|
||
>;NOGT ;;JB
|
||
|
||
GT,< ;;JB HORIZONTAL AND VERTICAL GT40 CODE.
|
||
JRST VHLIN2 ;;JB IF NOT ON SCREEN, NO LINES.
|
||
PUSHJ P,BRKTT ;;JB BREAK UP THE III INSTRUCTION NOW.
|
||
|
||
BMODS 10,1,2 ;;JB SET TO ALTER SUBPICTURE 10.
|
||
|
||
HLRZ T,TT ;;JB GET THE XIN T
|
||
PUSH P,T ;;JB STICK THE X ON THE LIST.
|
||
PUSH P,TT ;;JB AND THE Y NOW.
|
||
|
||
BMODF ;;JB SEND OUT AND CLEAN UP STACK.
|
||
STAPIC 11 ;;JB START DISPLAYING SUBPICTURE 11.
|
||
JRST VHLIN1 ;;JB AND EXIT NOW.
|
||
|
||
VHLIN2: STOPIC 11 ;;JB STOP DISPLAYING SUBPICTURE 11.
|
||
|
||
VHLIN1: POP P,T ;;JB RESTORE AVED REGISTERS NOW.
|
||
POPJ P, ;;JB AND RETURN TO THE CALLER.
|
||
>;GT ;;JB END OF THIS CRAP NOW.
|
||
>;NOCMU
|
||
;CALCOF, CONBOX
|
||
;CALCOF - POSITION FOR CONNECTOR STRING (ADJUST FOR STRING LENGTH LATER)
|
||
;E = POINT
|
||
CALCOF: FETCH(A,E,PXY) ;MAIN LOCN
|
||
FETCH(B,E,PLOC)
|
||
MOVE B,1(B) ;CHARACTER OFFSET
|
||
MOVE C,STDBIG ;CONNECTOR CHAR SIZE
|
||
;CALCOL - CALC CHAR OFFSET
|
||
;A = MAIN X,Y
|
||
;B = OFFSET X,Y
|
||
;C = CHARACTER SIZE
|
||
CALCOL: PUSHJ P,CALCF1 ;ADD IN CHARACTER OFFSET
|
||
POPJ P,
|
||
PUSHJ P,TFUDGE ;FUDGE FOR CHARACTER GENERATOR ERRS
|
||
JRST INSOU2 ;INSERT IN BUFFER
|
||
|
||
CALCF1:
|
||
MD,< HRRE T,B ;OFFSET Y
|
||
IMUL T,DPYPTY(C)
|
||
IDIV T,VIRPTY(C)
|
||
HLRE TT,B ;OFFSET X
|
||
IMUL TT,DPYPTX(C)
|
||
IDIV TT,VIRPTX(C)
|
||
MOVE TTT,TT ;DIV CAN'T BE IN TTT
|
||
HLRE TT,A ;MAIN X
|
||
SUB TT,XOFF
|
||
SCALE(TT)
|
||
ADD TTT,TT
|
||
HRRE TT,A ;MAIN Y
|
||
SUB TT,YOFF
|
||
SCALE(TT)
|
||
ADD T,TT
|
||
MOVEI TT,146
|
||
JRST CALVCT
|
||
>;MD
|
||
MPC,< MOVE T,B
|
||
ADJUST(ADD,T,A)
|
||
MOVEI TT,146
|
||
JRST VECT
|
||
>;MPC
|
||
|
||
;ABCALC - POSITION BEAM TO A+B
|
||
;A = INTERNAL X,Y
|
||
;B = CHARACTER OFFSET (IN VIR CHAR PTS)
|
||
|
||
MD,<
|
||
ABCALC: MOVE C,STDBIG
|
||
PUSHJ P,CALCF1
|
||
POPJ P,
|
||
PUSHJ P,TFUDGE
|
||
JRST INSOU2 ;ADD VECTOR TO LIST
|
||
|
||
;DISPLAY CONNECTOR BOX
|
||
;E = POINT
|
||
CONBOX: FETCH(A,E,PXY)
|
||
FETCH(B,E,PLOC)
|
||
MOVE B,1(B)
|
||
MOVE C,STDBIG
|
||
PUSHJ P,CALCF1 ;INITIAL POSITION
|
||
POPJ P, ;OFF SCREEN
|
||
PUSHJ P,INSOU2 ;START THERE
|
||
TITCON: MOVE C,STDBIG
|
||
MOVE T,DPYPTY(C)
|
||
ASH T,-1
|
||
DPB T,[POINT 7,T,35-7] ;MAKE IT +,+
|
||
MOVEI TT,2
|
||
DPB T,[POINT 14,TT,35-4-2]
|
||
TRC T,37600 ;MAKE IT +,-
|
||
ADDI T,200
|
||
DPB T,[POINT 14,TT,35-4-2-14-2]
|
||
IDPB TT,BUFPTR
|
||
MOVE A,E
|
||
PUSHJ P,CONCAL ;CALC LENGTH OF CON STRING
|
||
IMUL T,DPYPTX(C)
|
||
DPB T,[POINT 11,T,10]
|
||
HRRI T,6
|
||
IDPB T,BUFPTR ;TOP OF BOX
|
||
TDC TT,[BYTE(7)<-1>,-1(2)0(7)<-1>,-1]
|
||
ADD TT,[BYTE(7)1,1(2)0(7)1,1]
|
||
IDPB TT,BUFPTR ;RIGHT TIT
|
||
TLC T,777600 ;BOTTOM OF BOX
|
||
ADD T,[BYTE(11)1]
|
||
IDPB T,BUFPTR
|
||
POPJ P,
|
||
|
||
;DISPIN - DISPLAYS A PIN# AT BPOINT
|
||
;E = BPOINT
|
||
;A = PIN#
|
||
|
||
DISPIN: TLNE DSPOFF
|
||
POPJ P,
|
||
PUSH P,A
|
||
PUSH P,B
|
||
PUSH P,C
|
||
SETZM CHRCNT
|
||
PUSH P,PUTCHR
|
||
MOVE TTT,[AOS CHRCNT]
|
||
MOVEM TTT,PUTCHR
|
||
FETCH(C,E,BBODY)
|
||
FETCH(B,C,BSOC)
|
||
FETPAK(C,C)
|
||
PUSHJ P,PINPLS
|
||
POP P,PUTCHR
|
||
MOVN A,CHRCNT ;GET -LEN OF PIN #
|
||
FETCH(TT,E,BBODY)
|
||
FETCH(TTT,TT,BORI)
|
||
FETCH(T,E,BPLOC) ;TYPIN BLOCK FROM TYPE DEF
|
||
MOVEI C,DPYPTX ;SIGNAL PIN IS GOING TO DISPLAY
|
||
PUSHJ P,PINCAL ;CALC X,Y OFFSET FOR PIN #
|
||
PUSHJ P,ATTFIX ;OFFSET LAST VECT BY A AND TT
|
||
PUSHJ P,NUMSET ;SETUP DPY FOR CHARS
|
||
MOVE A,-2(P) ;PIN#
|
||
FETCH(C,E,BBODY)
|
||
FETCH(B,C,BSOC)
|
||
FETPAK(C,C)
|
||
PUSHJ P,PINPLS ;PRINT SOCKET PIN LOC
|
||
POP P,C ;RESTORE POINT
|
||
POP P,B ;RESTORE BODY
|
||
POP P,A ;RESTORE THE PIN #,,BITS
|
||
JRST FINTXT
|
||
|
||
;PINCAL - COMPUTE III POSITIONING FOR START OF TEXT FOR PIN
|
||
;A = -# CHARS IN PIN NAME
|
||
;C = CHARACTER SIZE TABLE ... DPY/PLT
|
||
;T = TYPIN
|
||
;TTT = BORI
|
||
;RETURNS
|
||
;A = X
|
||
;TT = Y
|
||
|
||
PINCAL: ADD C,STDBIG ;CHAR SIZE TABLE FOR STD CHAR
|
||
FETCH(T,T,TPPOS) ;GET PIN-POS BITS
|
||
PUSH P,T
|
||
PUSHJ P,PINORI ;ROTATE PIN-POS BY ORIENTATION IN TTT
|
||
IFN =35-POSB,<LSH T,POSB-=35> ;SHIFT TO RIGHT
|
||
ANDI T,(1POSW)-1
|
||
IMUL A,(C) ;PIN TEXT SIZE IN PTS
|
||
XCT PNXTAB(T)
|
||
XCT PFXTAB(T) ;FUDGE X A LITTLE, BECAUSE CHAR SPACING IS SO TIGHT
|
||
MOVN TT,DPYPTX-DPYPTY(C) ;- HEIGHT OF STD CHAR
|
||
XCT PNYTAB(T)
|
||
PUSH P,F
|
||
MOVE F,TTT ;SAVE ORIENTATION FOR CALL ON ORIENT
|
||
LDB TTT,[POINT XOFFW,-1(P),XOFFB] ;UNITS ARE 1 CURSOR STEP
|
||
TRNE TTT,1(XOFFW-1)
|
||
ORCMI TTT,(1XOFFW)-1
|
||
ASH TTT,1 ;MAKE IT DRAWING COORD
|
||
SCALE (TTT)
|
||
HRLZ T,TTT
|
||
LDB TTT,[POINT YOFFW,-1(P),YOFFB]
|
||
TRNE TTT,1(YOFFW-1)
|
||
ORCMI TTT,(1YOFFW)-1
|
||
ASH TTT,1 ;MAKE IT DRAWING COORD
|
||
SCALE (TTT)
|
||
HRR T,TTT
|
||
PUSHJ P,ORIENT ;ROTATE OFFSET
|
||
POP P,F ;RESTORE F
|
||
HLRE TTT,T
|
||
ADD A,TTT
|
||
HRRE TTT,T
|
||
ADD TT,TTT
|
||
POP P,(P)
|
||
POPJ P,
|
||
|
||
;HERE IS A FUDGE SO NUMBER ISN'T ON LINE!
|
||
PNXLTL__2 ;+-X
|
||
|
||
PNXTAB: SETZ A, ;0
|
||
ASH A,-1 ;X/2
|
||
JFCL ;X
|
||
JFCL ;X
|
||
JFCL ;X
|
||
ASH A,-1 ;X/2
|
||
SETZ A, ;0
|
||
SETZ A, ;0
|
||
|
||
PFXTAB: ADDI A,PNXLTL
|
||
JFCL
|
||
SUBI A,PNXLTL
|
||
SUBI A,PNXLTL
|
||
SUBI A,PNXLTL
|
||
JFCL
|
||
ADDI A,PNXLTL
|
||
ADDI A,PNXLTL
|
||
|
||
PNYTAB: SETZ TT, ;0
|
||
SETZ TT, ;0
|
||
SETZ TT, ;0
|
||
ASH TT,-1 ;-Y/2
|
||
JFCL ;-Y
|
||
JFCL ;-Y
|
||
JFCL ;-Y
|
||
ASH TT,-1 ;-Y/2
|
||
>;MD
|
||
;NUMSET, DISNUM, DISDEF, DISNM1, PIDCAL, CONNUM, BODNUM
|
||
;NUMSET - SETUP DPY BUFFER FOR CHARACTER MODE
|
||
NUMSET: MOVE TTT,[IDPB TTT,BFPTR2]
|
||
EXCH TTT,PUTCHR ;SET UP FOR PUTBYT
|
||
MOVEM TTT,DSPPSV
|
||
DTXSET: MOVSI TTT,(<POINT 7,0,34>)
|
||
HRR TTT,BUFPTR
|
||
MOVEM TTT,BFPTR2
|
||
NUMST1: MOVEI TT,1
|
||
MOVEM TT,1(TTT)
|
||
HRLZI TT,1(TTT)
|
||
HRRI TT,2(TTT)
|
||
BLT TT,MAXLIN/5+1(TTT) ;THIS ALLOWS FOR ENOUGH CHARS!
|
||
POPJ P,
|
||
|
||
DISNUM: TLNE DSPOFF
|
||
POPJ P,
|
||
PUSHJ P,NUMSET
|
||
PUSHJ P,PUTDEC
|
||
JRST FINTXT
|
||
|
||
;DISDEF, DISRID
|
||
|
||
MD,<
|
||
;DISDEF - DISPLAYS DEFAULT PIN NAME FROM TYPE
|
||
; (AS A BODY PIN FORMAT, NOT SOCKET PIN FORMAT)
|
||
;T -- POINTER TO TYPIN BLOCK
|
||
;TTT -- ORIENTATION
|
||
DISDEF: TLNE DSPOFF
|
||
POPJ P,
|
||
PUSH P,A
|
||
PUSHJ P,PIDCAL ;CALC PIN ID OFFSET
|
||
PUSHJ P,ATTFIX
|
||
PUSHJ P,NUMSET
|
||
PUSHJ P,OUTPID
|
||
JRST FNTXTA
|
||
|
||
OUTPID: PUSH P,T
|
||
FETCH(A,T,TPNAM)
|
||
PUSHJ P,BPINPN
|
||
POP P,T
|
||
FETCH(T,T,TPBIT)
|
||
DEC,< TRNN T,ASSL!ASSH
|
||
JRST STOPTR
|
||
PUTBYT "-"
|
||
TRNE T,ASSH
|
||
PUTBYT "H"
|
||
TRNE T,ASSL
|
||
PUTBYT "L"
|
||
STOPTR:
|
||
>;DEC
|
||
TRNE T,BUSSED
|
||
PUTSTR[ASCIZ\/B\]
|
||
POPJ P,
|
||
|
||
;DISRID - DISPLAY REAL PINID FROM BODY DEF
|
||
;T = PINBLOCK(TPIN) FROM TYPE
|
||
;TTT=BORI
|
||
|
||
DISRID: TLNE DSPOFF
|
||
POPJ P,
|
||
PUSH P,A
|
||
PUSH P,C
|
||
PUSH P,T
|
||
SETZ A,
|
||
FETCH(T,T,TPID)
|
||
DSRID1: IDIVI T,=10
|
||
SUBI A,1
|
||
JUMPN T,DSRID1
|
||
MOVE T,(P)
|
||
MOVEI C,DPYPTX ;CHARS DESTINED FOR DISPLAY
|
||
PUSHJ P,PINCAL ;CALC X,Y FOR START OFF TEXT
|
||
PUSHJ P,ATTFIX
|
||
PUSHJ P,NUMSET
|
||
POP P,T
|
||
FETCH(T,T,TPID)
|
||
PUSHJ P,DISNUM
|
||
POP P,C
|
||
POP P,A
|
||
JRST FINTXT
|
||
|
||
;PIDCAL - CALCULATE X,Y OFFSET FOR PIN NAME
|
||
;T = TPIN BLOCK
|
||
;TTT = BORI ??
|
||
;RETURNS
|
||
;A = X
|
||
;TT = Y
|
||
|
||
PIDCAL: PUSH P,T
|
||
PUSH P,TTT
|
||
FETCH(A,T,TPNAM)
|
||
SETZM CHRCNT
|
||
PUSH P,PUTCHR
|
||
MOVE T,[AOS CHRCNT]
|
||
MOVEM T,PUTCHR
|
||
PUSHJ P,BPINPN ;PRINT AS BODY PIN
|
||
POP P,PUTCHR
|
||
MOVN A,CHRCNT
|
||
POP P,TTT ;ORIENTATION
|
||
MOVE TT,(P)
|
||
FETCH(TT,TT,TPBIT)
|
||
TRNE TT,BUSSED
|
||
SUBI A,2 ;2 MORE FOR BUSSED THRU
|
||
DEC,< TRNE TT,ASSH!ASSL
|
||
SUBI A,2 ;2 MORE FOR H OR L
|
||
>;DEC
|
||
MOVE T,(P) ;T=TYPIN, A=-CHARCT, TTT=BORI
|
||
PUSH P,C
|
||
MOVEI C,DPYPTX
|
||
PUSHJ P,PINCAL ;CALC X,Y OFFSET FOR PIN #
|
||
POP P,C
|
||
POP P,T ; RETURNS A,TT
|
||
POPJ P,
|
||
>;MD
|
||
|
||
;BODNUM - DISPLAY BODY LOC
|
||
;E = BODY
|
||
|
||
BODNUM: TLNE DSPOFF
|
||
POPJ P,
|
||
PUSHJ P,NUMSET
|
||
PUSH P,A
|
||
PUSH P,TT
|
||
MD,< FETCH(A,E,BBRS)
|
||
PUSHJ P,SLTOUT ;PRINTS BAY-RACK-SLOT
|
||
FETCH(A,E,BSOC)
|
||
>;MD
|
||
MPC,< FETCH(A,E,BLN) >
|
||
PUSHJ P,LOCOUT ;PRINTS BODY LOC ON CARD
|
||
POP P,TT
|
||
FNTXTA: POP P,A
|
||
FINTXT: MOVE TTT,DSPPSV
|
||
MOVEM TTT,PUTCHR
|
||
FINDTX: MOVE TTT,BFPTR2
|
||
HRRM TTT,BUFPTR
|
||
POPJ P,
|
||
|
||
;E = POINT
|
||
CONNUM: TLNE DSPOFF
|
||
POPJ P,
|
||
PUSHJ P,NUMSET
|
||
PUSH P,A
|
||
FETCH(A,E,PLOC)
|
||
MOVE A,(A)
|
||
PUSHJ P,CSLTLP
|
||
JRST FNTXTA ;POPS A
|
||
;DTXT
|
||
;B = POINTER TO BARE TEXT STRING
|
||
DTXT: JUMPE B,CPOPJ ;POINT,BODY TEXT
|
||
ADD B,[POINT 7,1]
|
||
SETZM ALTTFG
|
||
CAIA
|
||
ALTTXT: SETOM ALTTFG ;ALTER MODE TEXT DPY
|
||
TLNE DSPOFF
|
||
POPJ P,
|
||
SETZM LINCNT ;COUNT LINES HERE
|
||
SETZM CHRCNT
|
||
PUSHJ P,DTXSET ;SETUP POINTERS ETC.
|
||
DTLOP1: TLNN B,760000 ;BYTE POINTER OUT?
|
||
JRST [ HRR B,-1(B)
|
||
TRNE B,-1
|
||
JRST .+1
|
||
JRST FINDTX]
|
||
ILDB T,B
|
||
JUMPE T,DTLOP1
|
||
SKIPN ALTTFG ;ALTER MODE
|
||
CAME T,EOLCHR ;NO, END OF LINE CHR?
|
||
CAIA
|
||
JRST DTLOP4 ;YES, END WITHOUT DPY'ING IT
|
||
IDPB T,BFPTR2
|
||
AOS TT,CHRCNT
|
||
CAIGE TT,MAXLIN ;FAKE UP CRLF IF LINE TOO LONG
|
||
JRST [ CAME T,EOLCHR ;BUT ALWAYS BREAK ON EOL
|
||
JRST DTLOP1
|
||
JRST DTLOP4]
|
||
MOVE TTT,BFPTR2
|
||
PUSHJ P,NUMST1 ;SETUP SOME MORE BUFFER
|
||
SKIPN ALTTFG
|
||
JRST DTLOP1
|
||
DTLOP4: PUSHJ P,FINDTX
|
||
SKIPN ALTTFG
|
||
JRST DTXCLF
|
||
AOS TT,LINCNT
|
||
CAIL TT,MAXPAG
|
||
POPJ P, ;QUIT IF MAX LINES EXCEEDED
|
||
DTXCLF: MOVEI TT,46
|
||
MOVE T,SIZ ;CURRENT SIZE
|
||
MOVN TTT,DPYPTY(T)
|
||
DPB TTT,[POINT 11,TT,21] ;DOWN L.F.
|
||
MOVN TTT,DPYPTX(T)
|
||
IMUL TTT,CHRCNT
|
||
DPB TTT,[POINT 11,TT,10] ;BACK TO LEFT MARGIN
|
||
IDPB TT,BUFPTR
|
||
SETZM CHRCNT ;NO CHARS IN THIS LINE YET
|
||
PUSHJ P,DTXSET
|
||
JRST DTLOP1
|
||
|
||
;STARTP, DSPSET, DSPOUT, UPSET, UPSCAL, UPSIDE
|
||
STARTP: TLNN DSPACT
|
||
POPJ P,
|
||
DPYCLR
|
||
NOCMU,<NOGT,<
|
||
DPYOUT 0,FBUF
|
||
III,< JFCL >
|
||
>>
|
||
CMU,< PUSH P,T
|
||
PUSH P,TT
|
||
SETZ T, ;MAKE SURE OUR FOLLOW FLAG IS CORRECT!
|
||
TRNE M,CURSOR
|
||
TRO T,FOLFLG
|
||
MOVEM T,FBFLGS
|
||
JSP TT,INATYO ;SET POG 0 PARAMETERS
|
||
PG0SET
|
||
PASBUF
|
||
MOVE TT,[-CMUFBL,,CMUFBF]
|
||
MOVE T,(TT)
|
||
PUSHJ P,ATYOW
|
||
AOBJN TT,.-2
|
||
PUSHJ P,DOATYO
|
||
>;CMU
|
||
NODEC,<
|
||
GLISIZ__2 ;2 LINES PER GLITCH IN SCROLLER
|
||
PAPPOS__-400 ;USE BOTTOM QUARTER OF SCREEN
|
||
NOCMU,< GLTCHS__4 >
|
||
CMU,< GLTCHS__<PAPPOS-%BOTTOM>/CHGHT/GLISIZ-1 > ;SQUEEZE AS MANY LINES AS POSSIBLE IN!
|
||
DPYPOS PAPPOS
|
||
III,< JFCL >
|
||
DPYSIZ GLTCHS*1000+GLISIZ
|
||
III,< JFCL >
|
||
>;NODEC
|
||
CMU,< POP P,TT
|
||
POP P,T
|
||
>;CMU
|
||
POPJ P,
|
||
|
||
NODEC,<
|
||
DCLAIM:
|
||
DTRY: SETZM TVISOFF
|
||
SETZM ISDPY
|
||
CMU,< SKIPLE DONTDPY ;LET HIM PRETEND
|
||
JRST FAKDPY
|
||
>;CMU
|
||
SKIPE DONTDPY
|
||
JRST DSPSET
|
||
NOIII,< SETO T,
|
||
GETLIN T
|
||
ITS,< TLNE T,420000 ;EITHER "III" OR "DATA DISK" BITS
|
||
SETOM TVDPY ;WE ARE ON TV
|
||
>;ITS
|
||
NOCMU,< TLNN T,400000
|
||
JRST DSPSET
|
||
>;NOCMU
|
||
>;NOIII
|
||
III,< DPYADD [DPYBUF] ;NOOP WHICH SKIPS ON DISPLAY
|
||
JFCL
|
||
MOVE T,40
|
||
TRNE T,200
|
||
>;III
|
||
CMU,< HRRZI TT,(T) ;GET THE TTY NUMBER
|
||
TRO TT,200000 ;MAKE SURE THE BIT IS ON
|
||
MOVEI T,3001
|
||
MOVE TTT,[2,,T]
|
||
; TRMOP. TTT,
|
||
TRMOP TTT,
|
||
HALT .
|
||
CAMN TTT,[SIXBIT /GRAPHI/]
|
||
FAKDPY:
|
||
>;CMU
|
||
SETOM ISDPY
|
||
NOCMU,< JRST DSPOUT >;START THE WORLD
|
||
CMU,< SKIPE ISDPY
|
||
PUSHJ P,INIGDP
|
||
>;CMU
|
||
>;NODEC
|
||
;NOW SETUP DSPACT
|
||
DSPSET: TLZ DSPACT
|
||
SKIPN ISDPY ;CAN IT BE ACTIVE AT ALL
|
||
POPJ P,
|
||
TLNN M,DSKACT!MACACT
|
||
TLO DSPACT ;DISPLAY IS STILL ACTIVE
|
||
POPJ P,
|
||
|
||
ENDDSP: TLNN DSPACT
|
||
POPJ P,
|
||
PUSHJ P,PUSHIT
|
||
; TLNE M,XWINDOW ;ARE WE WINDOWING?
|
||
; JRST ENDSP1
|
||
SETZM 1(P) ;USE THIS AS A FLAG
|
||
MOVE T,CURSE
|
||
CAML T,LEFT
|
||
CAMLE T,RIGHT
|
||
JRST [ AOS 1(P)
|
||
HLREM T,XOFF ;SET X OFFSET
|
||
JRST .+1]
|
||
HRRE T,T
|
||
CAML T,BOTTOM
|
||
CAMLE T,TOP
|
||
JRST [ AOS 1(P)
|
||
MOVEM T,YOFF
|
||
JRST .+1]
|
||
SKIPE 1(P) ;CHANGE X OR Y (OR BOTH)
|
||
PUSHJ P,CHANG1 ;YES, RE-CALC THINGS
|
||
JRST ENDSP1
|
||
|
||
DSPOUT: SKIPN ISDPY
|
||
POPJ P,
|
||
PUSHJ P,PUSHIT
|
||
PUSHJ P,DSPSET
|
||
PUSHJ P,STARTP
|
||
TRO MCHG!NEEDCL ;MAKE SURE IT HAPPENS
|
||
SETOM LPNTR ;UPDATE ARROW
|
||
SETOM CLOSUP ;UPDATE CLOSES TEXT
|
||
ENDSP1: PUSHJ P,FILEUP
|
||
PUSHJ P,POPIT
|
||
POPJ P,
|
||
|
||
ITS,<
|
||
.TVOFF: SKIPE ISDPY
|
||
SKIPE DONTDPY
|
||
POPJ P,
|
||
SKIPE TVDPY
|
||
SKIPE TVISOFF
|
||
POPJ P,
|
||
TLNE M,DSKACT!MACACT
|
||
POPJ P,
|
||
SETOM TVISOFF
|
||
DPYCLR
|
||
POPJ P,
|
||
|
||
TVMORE: SKIPE ISDPY
|
||
SKIPE DONTDPY
|
||
POPJ P,
|
||
SKIPE TVDPY
|
||
TLNE M,DSKACT!MACACT
|
||
POPJ P,
|
||
TVMOR1: OUTSTR [ASCIZ /-MORE-/]
|
||
INCHRW 1(P)
|
||
OUTSTR [ASCIZ /
|
||
/]
|
||
SETZM TVISOFF
|
||
JRST DSPOUT
|
||
>;ITS
|
||
|
||
UPSET: SKIPN A,CURSET
|
||
POPJ P,
|
||
MOVE T,1(A)
|
||
PUSHJ P,BIGAIV
|
||
MOVEI T,"C"+"C"+1
|
||
JRST DCLSET
|
||
|
||
NOCMU,<
|
||
UPLVL: TLNN DSPACT
|
||
POPJ P,
|
||
HRRZ T,MACPNT
|
||
SUBI T,MACPDL-1
|
||
IDIVI T,5
|
||
NODEC,< MOVEI TTT,LVLWRD
|
||
JRST UPONE
|
||
>;NODEC
|
||
|
||
VB10,<
|
||
PUSHJ P,UPONE
|
||
HRRM TT,LVLWRD
|
||
POPJ P,
|
||
>;VB10
|
||
PGP,<
|
||
MOVE TTT,[XWD UPLDAT,LVLWRD]
|
||
JRST UPONE
|
||
|
||
UPLDAT: =103
|
||
XWD %LEFT+24*CWIDTH*TITBIG,SCRTOP-TITBIG*CHGHT
|
||
>;PGP
|
||
|
||
GT,< ;;JB
|
||
PUSHJ P,UPONE1 ;;JB MAKE LEVEL A GOOD NUMBER.
|
||
ANDI TT,77777 ;;JB MAKE IT JUST 15 BITS NOW.
|
||
DPB TT,[POINT 7,TT,20] ;;JB CONVERT TO REVERSED 8 BIT FORMAT NOW.
|
||
LSH TT,-=7 ;;JB AND MOVE INTO PLACE.
|
||
MOVEM TT,GTLWRD ;;JB SAVE IN THE CORRECT SPOT NOW.
|
||
JRST SENDHD ;;JB AND SEND OUT THE HEADER NOW.
|
||
>;GT ;;JB END OF THIS CODE.
|
||
|
||
UPSCAL: TLNN DSPACT
|
||
POPJ P,
|
||
MOVE T,NSCALE
|
||
NODEC,< MOVEI TTT,SCLWRD
|
||
JRST UPONE
|
||
>;NODEC
|
||
|
||
VB10,<
|
||
PUSHJ P,UPONE
|
||
HRLM TT,SCLWRD
|
||
POPJ P,
|
||
>;VB10
|
||
PGP,<
|
||
MOVE TTT,[XWD SCLDAT,SCLWRD]
|
||
JRST UPONE
|
||
|
||
SCLDAT: =102
|
||
XWD %LEFT+14*CWIDTH*TITBIG,SCRTOP-TITBIG*CHGHT
|
||
>;PGP
|
||
|
||
GT,< ;;JB START OF MY SCALING CODE.
|
||
PUSHJ P,UPONE1 ;;JB CONVERT SCALE LEVEL TO NUMBER.
|
||
ANDI TT,77777 ;;JB CONVERT TO 15 BIT QUANTITY.
|
||
DPB TT,[POINT 7,TT,20] ;;JB REVERSE CHARACTERS AND CONVERT TO.
|
||
LSH TT,-=7 ;;JB TO 8 BIT FORMAT.
|
||
MOVEM TT,GTSWRD ;;JB SAVE IN THE LIST NOW.
|
||
JRST SENDHD ;;JB AND SEND OUT THE CHANGE NOW.
|
||
>;GT ;;JB
|
||
|
||
NOGT,< ;;JB DON'T PUT THIS IN IF THERE'S A GT40.
|
||
UPONE: PUSHJ P,UPONE1
|
||
NOVB10,<
|
||
LSH TT,1
|
||
PGP,<
|
||
UPONE3: TLNN TT,774000
|
||
JRST UPONE2
|
||
>;PGP
|
||
TRO TT,1
|
||
JRST PUT
|
||
>;NOVB10
|
||
VB10,< ADDI TT,404040
|
||
POPJ P,
|
||
>;VB10
|
||
>;NOGT ;;JB .
|
||
>;NOCMU
|
||
|
||
PGP,<
|
||
UPONE2: LSH TT,7
|
||
JRST UPONE3
|
||
>;PGP
|
||
|
||
UPONE1: IDIVI T,=10
|
||
HRLM TT,(P)
|
||
SKIPE TT,T
|
||
PUSHJ P,UPONE1
|
||
HLRZ T,(P)
|
||
NOVB10,<
|
||
LSH TT,7
|
||
ADDI TT,60(T)
|
||
>;NOVB10
|
||
|
||
VB10,<
|
||
LSH TT,6
|
||
ADDI TT,20(T)
|
||
>;VB10
|
||
POPJ P,
|
||
|
||
NOCMU,<
|
||
NOGT,< ;;JB NORMAL STUFF.
|
||
|
||
READY: PUSH P,T
|
||
NODEC,< MOVEI T,"*"+"*"+1 >
|
||
VB10,< MOVEI T,<BYTE (6) 0,0,0,35,"*",37> >
|
||
PGP,< MOVEI T,1 >
|
||
JRST SREADY
|
||
|
||
NREADY: PUSH P,T
|
||
NODEC,< MOVEI T,12 >
|
||
VB10,< MOVEI T,<BYTE (6) 0,0,0,35,"-",37> >
|
||
PGP,< SETZ T, >
|
||
SREADY: TLNN DSPACT
|
||
JRST XREADY
|
||
III,< MOVEM T,REDWRD
|
||
DPYOUT 0,FBUF
|
||
JFCL
|
||
>;III
|
||
NODEC,<
|
||
NOIII,<
|
||
PGSEL 0
|
||
MOVEM T,REDWRD
|
||
ITS,< SKIPN TVDPY >
|
||
UPGMVM T,REDWRD
|
||
>;NOIII
|
||
>;NODEC
|
||
VB10,< HRRM T,REDWRD >
|
||
PGP,< MOVEM T,REDWRD ;SAVE READYNESS STATE BIT
|
||
PUSHJ P,PUSHAL ;SAVE ACS
|
||
RTNCAL (INTERA,<[PLIT RDYPRG],[PLIT REDWRD]>) ;SEND TO PGP
|
||
PUSHJ P,CHCINT ;MAKE IT HAPPEN
|
||
PUSHJ P,POPALL ;RESTORE ACS
|
||
>;PGP
|
||
XREADY: POP P,T
|
||
POPJ P,
|
||
|
||
PGP,< ERDYP-.-1
|
||
RDYPRG: ASCIZ !BEGIN
|
||
ON HCA
|
||
'205'=$0;
|
||
END,
|
||
END!
|
||
1
|
||
ERDYP__.
|
||
STORAGE(IMPURE)
|
||
1
|
||
REDWRD: 0
|
||
STORAGE(PURE)
|
||
>;PGP
|
||
>;NOGT ;;JB END OF THEIR STUFF.
|
||
|
||
GT,< ;;NOW DEFHNE MY STUFF.
|
||
READY: PUSH P,[RDYCJ] ;;JB PUSH THE "READY" COMMAND CHAR ON THE STACK.
|
||
XREADY: EXCH T,0(P) ;;JB PICK UP THE DESIRED CHARACTER.
|
||
CAMN T,JBREDY ;;JB ALREADY IN THAT MODE?
|
||
JRST JBXRDY ;;JB IN CORRECT MODE. EXIT NOW.
|
||
TLNE DSPACT ;;JB DISPLAY ACTIVE?
|
||
IONEOU T ;;JB YES. SEND OUT THE CHARACTER NOW.
|
||
MOVEM T,JBREDY ;;JB SAVE THE STATE OF THE DISPLAY NOW.
|
||
JBXRDY: POP P,T ;;JB RESTORE THE REGISTER NOW.
|
||
POPJ P, ;;JB EXIT.
|
||
|
||
NREADY: PUSH P,[NRDYCJ] ;;JB GET THE NOT READY COMMAND NOW.
|
||
JRST XREADY ;;JB AND LOOP INTO THE MAIN CODE.
|
||
>;GT ;;JB END OF THIS CRAP.
|
||
>;NOCMU
|
||
|
||
MPC,<
|
||
UPSIDE: MOVEI T,TITBRT ;BRIGHTNESS
|
||
MOVEI TT,TITBIG ;SIZE
|
||
MOVE TTT,[%LEFT+400,,SCRTOP-CHGHT*TITBIG*2];X,Y
|
||
PUSHJ P,TITVCT
|
||
TLNE SID,FRONT ;WHICH SIDE ARE WE ON
|
||
SKIPA T,[ASCID/Compo/]
|
||
MOVE T,[ASCID/Solde/]
|
||
IDPB T,BUFPTR
|
||
TLNE SID,FRONT
|
||
SKIPA T,[ASCID/nent/]
|
||
MOVE T,[ASCID/r/]
|
||
TRNE M,FLIP
|
||
IORI T,""+""
|
||
IDPB T,BUFPTR
|
||
PUSHJ P,UPLOC
|
||
CHKVAL: TLO DSPOFF
|
||
TRNE M,FLIP
|
||
JUMPGE SID,CPOPJ
|
||
TRNN M,FLIP
|
||
JUMPL SID,CPOPJ
|
||
MOVEI T,TITBRT
|
||
MOVEI TT,TITBIG
|
||
MOVE TTT,[%LEFT+600,,SCRTOP-CHGHT*TITBIG*2]
|
||
PUSHJ P,TITVCT
|
||
MOVE T,[ASCID/Text /]
|
||
IDPB T,BUFPTR
|
||
MOVE T,[ASCID/Inval/]
|
||
IDPB T,BUFPTR
|
||
MOVE T,[ASCID/id/]
|
||
IDPB T,BUFPTR
|
||
POPJ P,
|
||
>;MPC
|
||
UPLOC: SKIPN CRDLOC ;ANY CARD LOC?
|
||
MPC,< POPJ P, > ;NO, CHECK FOR VALID TEXT
|
||
MD,< JRST UPMOD >
|
||
MOVEI T,TITBRT
|
||
MOVEI TT,TITBIG
|
||
MOVE TTT,[%LEFT,,SCRTOP-CHGHT*TITBIG*2]
|
||
PUSHJ P,TITVCT
|
||
PUSHJ P,NUMSET
|
||
PUSH P,A
|
||
HLRZ A,CRDLOC
|
||
PUSHJ P,SLTOUT
|
||
POP P,A
|
||
PUSHJ P,FINTXT
|
||
TLO DSPOFF
|
||
MD,<
|
||
UPMOD: SKIPN TVARIABLE
|
||
SKIPE TPREFIX
|
||
JRST UPMOD1
|
||
SKIPN TMODULE
|
||
SKIPE TREV
|
||
JRST UPMOD1
|
||
>;MD
|
||
POPJ P,
|
||
|
||
MD,<
|
||
UPMOD1: MOVEI T,TITBRT
|
||
MOVEI TT,TITBIG
|
||
MOVE TTT,[%RIGHT-TITBIG*CWIDTH*=21,,SCRTOP-TITBIG*CHGHT]
|
||
PUSHJ P,TITVCT
|
||
SKIPN B,TMODULE
|
||
JRST UPVARI
|
||
PUSHJ P,DTXT
|
||
MOVEI T,"-"
|
||
IDPB T,TTT
|
||
HRRM TTT,BUFPTR
|
||
UPVARI: SKIPN B,TVARIABLE
|
||
JRST UPPREF
|
||
PUSHJ P,DTXT
|
||
MOVEI T,"-"
|
||
IDPB T,TTT
|
||
HRRM TTT,BUFPTR
|
||
UPPREF: SKIPN B,TPREFIX
|
||
JRST UPREV
|
||
PUSHJ P,DTXT
|
||
UPREV: MOVEI T,40*2+1
|
||
IDPB T,BUFPTR
|
||
SKIPE B,TREV
|
||
PUSHJ P,DTXT
|
||
TLO DSPOFF
|
||
POPJ P,
|
||
>;MD
|
||
|
||
IFN UMLSW!LAYSW,<
|
||
MPC,<
|
||
DUPIN: MOVEI T,TITBRT
|
||
MOVEI TT,TITBIG
|
||
MOVE TTT,[%LEFT+1100,,SCRTOP-TITBIG*CHGHT*2]
|
||
PUSHJ P,TITVCT
|
||
MOVE T,UPINS
|
||
PUSHJ P,DISNUM
|
||
PUTSTR [ASCIZ/ "WILD"/]
|
||
TLO DSPOFF
|
||
POPJ P,
|
||
>;MPC
|
||
>;IFN UMLSW!LAYSW
|
||
|
||
MD,<
|
||
;E = POINT
|
||
OFFCLD: MOVEI T,TITBRT
|
||
MOVEI TT,TITBIG
|
||
MOVE TTT,[%LEFT+600,,SCRTOP-CHGHT*TITBIG*2]
|
||
PUSHJ P,TITVCT
|
||
PUSHJ P,TITCON
|
||
PUSHJ P,CONNUM
|
||
TLO DSPOFF ;NOW WE ARE OFF FOR SURE
|
||
POPJ P,
|
||
>;MD
|
||
|
||
IFN UMLSW!LAYSW,<
|
||
OFFERD: MOVEI T,TITBRT
|
||
MOVEI TT,TITBIG
|
||
MOVE TTT,[%LEFT+200,,SCRTOP-CHGHT*TITBIG*2]
|
||
PUSHJ P,TITVCT
|
||
MOVE T,E ;# OF ERRORS
|
||
SETZ TTT,
|
||
OFFER1: IDIVI T,=10
|
||
ADDI TT,60
|
||
IOR TTT,TT
|
||
ROT TTT,-7
|
||
JUMPN T,OFFER1
|
||
TRO TTT,1
|
||
IDPB TTT,BUFPTR
|
||
MOVE TT,[ASCID/ _??/]
|
||
IDPB TT,BUFPTR
|
||
TLO DSPOFF ;NOW WE ARE OFF FOR SURE
|
||
POPJ P,
|
||
>;UMLSW!LAYSW
|
||
;GETPOS, SETPOS, UPCURS
|
||
;THIS IS ONLY CALLED ONCE FROM COMMAND LOOP FOR BULLSEYE CURSOR MOVING
|
||
GETPOS: TLNN DSPACT
|
||
JRST [ MOVE T,CURSE
|
||
POPJ P,]
|
||
NOIII,<
|
||
NODEC,<
|
||
NOCMU,<
|
||
PGSEL 0
|
||
UPGMVE T,SAVWRD
|
||
MOVEM T,SAVWRD
|
||
>;NOCMU
|
||
>;NODEC
|
||
DEC,<
|
||
VB10,<
|
||
NOVIROS,<MOVE T,CURCUR >
|
||
VIROS,< PUSHJ P,RDLPEN >
|
||
>;VB10
|
||
NOVB10,<PUSHJ P,RDLPEN >
|
||
>;DEC
|
||
CMU,< PUSH P,TT
|
||
JSP TT,INATYO
|
||
GETCUR
|
||
GET2REGS
|
||
PUSHJ P,DOATYO
|
||
GETPS7: PUSHJ P,ATYIB
|
||
GETPS8: CAIE TT,22
|
||
JRST GETPS7
|
||
PUSHJ P,ATYIB
|
||
CAIE TT,2
|
||
JRST GETPS8
|
||
PUSHJ P,ATYIB
|
||
MOVEM TT,CHKSUM
|
||
HRLZI T,(TT)
|
||
PUSHJ P,ATYIB
|
||
ADDM TT,CHKSUM
|
||
DPB TT,[POINT 8,T,9]
|
||
PUSHJ P,ATYIB
|
||
ADDM TT,CHKSUM
|
||
DPB TT,[POINT 8,T,35]
|
||
PUSHJ P,ATYIB
|
||
ADDM TT,CHKSUM
|
||
DPB TT,[POINT 8,T,27]
|
||
PUSHJ P,ATYIB ;GET THE CHECKSUM
|
||
ADD TT,CHKSUM
|
||
ADDI TT,22+2 ;ADD THE HEADER IN
|
||
TRNE TT,377 ;MAKE SURE WE GOT A 0 CHECKSUM
|
||
HALT .
|
||
TLNE T,100000 ;SIGN EXTEND THE ANSWERS
|
||
TLO T,600000
|
||
TRNE T,100000
|
||
TRO T,600000
|
||
POP P,TT
|
||
>;CMU
|
||
CAMN T,CURCUR
|
||
JRST [ MOVE T,POSS1
|
||
POPJ P,]
|
||
MOVEM T,CURCUR
|
||
PUSH P,TT
|
||
PUSH P,TTT
|
||
PUSHJ P,GETSET
|
||
JRST ISPOS
|
||
>;NOIII
|
||
|
||
;SETPOS - MOVE CURSOR TO X,,Y
|
||
;T = NEW X,Y
|
||
;CHECKS FOR SCREEN EDGE
|
||
;CURSOR LOCATIONS
|
||
;CURSE - INTERNAL COORDS
|
||
;POSS1 - INTERNAL COORDS, CLIPPED TO WINDOW EDGE
|
||
;CURCUR - III DISPLAY COORDS
|
||
|
||
SETPOS: PUSH P,TT
|
||
PUSH P,TTT
|
||
MPC,<
|
||
MOVEM T,CURSE
|
||
HRRE T,CURSE
|
||
IDIV T,STPSIZ
|
||
ASH T,-1
|
||
IMUL T,STPSIZ
|
||
ASH T,1
|
||
HLRE TT,CURSE
|
||
ASH TT,-1
|
||
IDIV TT,STPSIZ
|
||
ASH TT,1
|
||
IMUL TT,STPSIZ
|
||
HRL T,TT
|
||
>;MPC
|
||
ISPOS:
|
||
MD,< TDZ T,[1,,1] >
|
||
MOVEM T,CURSE
|
||
TLNN DSPACT
|
||
JRST [ MOVSI T,400000
|
||
MOVEM T,POSS1 ;INVALIDATE THESE
|
||
NOCMU,< SETOM CURCUR >
|
||
CMU,< MOVEM T,CURCUR >
|
||
JRST ISSET]
|
||
SETZM EDGE ;MUST WIN THIS MANY TIMES
|
||
MOVEI TTT,1
|
||
HLLZ TT,T
|
||
CAMLE TT,RIGHT
|
||
MOVE TT,RIGHT
|
||
CAMGE TT,LEFT
|
||
MOVE TT,LEFT
|
||
HLLM TT,POSS1
|
||
HLRE TT,TT
|
||
SUB TT,XOFF
|
||
MPC,< TRNE M,FLIP
|
||
MOVN TT,TT
|
||
>;MPC
|
||
SCALE (TT)
|
||
NOCMU,< DPB TT,[POINT 11,TTT,10] >
|
||
CMU,< HRLZ TTT,TT >
|
||
HRRE T,T
|
||
CAMLE T,TOP
|
||
MOVE T,TOP
|
||
CAMGE T,BOTTOM
|
||
MOVE T,BOTTOM
|
||
HRRM T,POSS1
|
||
SUB T,YOFF
|
||
SCALE (T)
|
||
NOCMU,< DPB T,[POINT 11,TTT,21] >
|
||
CMU,< HRR TTT,T >
|
||
MOVEM TTT,CURCUR
|
||
MOVE T,POSS1
|
||
CAMN T,CURSE ;DID WE HIT EDGE?
|
||
JRST ISSET ;NO
|
||
SETOM EDGE ;WENT OFF EDGE
|
||
TLNN M,DSKACT!MACACT!XWINDOW
|
||
MOVEM T,CURSE ;STORE TRUNCATED CURSOR POS IF TTY INPUT AND WINDOW
|
||
ISSET: POP P,TTT
|
||
POP P,TT
|
||
TRNE M,CURSOR
|
||
JRST SNDCUR ;IF LIGHT PEN TRACKING, SEND CURSOR POS
|
||
POPJ P,
|
||
|
||
;PUT CURSOR ONTO GRID, CONVERT TO INTERNAL COORDS
|
||
;T = III LOCATION ON SCREEN
|
||
;RETURNS
|
||
;T = X*2,,Y*2 - INTERNAL COORD FORM
|
||
|
||
GETSET:
|
||
NOCMU,< MOVE TT,T
|
||
ASH TT,=11-=36
|
||
>;NOCMU
|
||
CMU,< HLRE TT,T >
|
||
UNSCAL (TT)
|
||
MPC,< TRNE M,FLIP
|
||
MOVN TT,TT
|
||
IDIV TT,STPSIZ
|
||
ASH TT,-1
|
||
IMUL TT,STPSIZ
|
||
ASH TT,1
|
||
>;MPC
|
||
ADD TT,XOFF
|
||
NOCMU,< LSH T,=11
|
||
ASH T,=11-=36
|
||
>;NOCMU
|
||
CMU,< HRRE T,T >
|
||
UNSCAL (T)
|
||
MPC,< MOVE TTT,TT
|
||
IDIV T,STPSIZ
|
||
ASH T,-1
|
||
IMUL T,STPSIZ
|
||
ASH T,1
|
||
>;MPC
|
||
ADD T,YOFF
|
||
MPC,< HRL T,TTT >
|
||
MD,< HRL T,TT >
|
||
|
||
TDZ T,[(1)1]
|
||
POPJ P,
|
||
|
||
;UPDATE CURSOR ON SCREEN
|
||
NOGT,< ;;JB MAJOR ELIMINATION OF CODE.
|
||
|
||
UPCURS: TLNN DSPACT
|
||
POPJ P,
|
||
MOVE T,CURSE
|
||
CAME T,POSS1 ;IS CURCUR VALID
|
||
PUSHJ P,SETPOS ;NO, MAKE IT VALID
|
||
SNDCUR:
|
||
STAN,< MOVE TT,CURCUR ;WHERE SHOULD IT BE
|
||
MOVEI TTT,SAVWRD
|
||
JRST PUT
|
||
>;STAN
|
||
|
||
ITS,< MOVE TT,CURCUR ;WHERE SHOULD IT BE
|
||
MOVEI TTT,SAVWRD
|
||
JRST PUT
|
||
>;ITS
|
||
|
||
III,< MOVE TT,CURCUR
|
||
TRZ TT,177
|
||
TRO TT,146
|
||
MOVEM TT,SAVWR1
|
||
MOVEM TT,SAVWR2
|
||
MOVEM TT,SAVWR3
|
||
MOVEM TT,SAVWR4
|
||
MOVEM TT,SAVWR5
|
||
DPYOUT 0,FBUF
|
||
JFCL
|
||
POPJ P,
|
||
>;III
|
||
|
||
VB10,<
|
||
MOVE TTT,CURCUR ;WHERE SHOULD IT BE
|
||
MOVEM TTT,SAVWR2
|
||
PUSHJ P,MAKWRD
|
||
CAMN TTT,SAVWRD
|
||
POPJ P,
|
||
MOVEM TTT,SAVWRD
|
||
SKIPE TT,FV1SAV
|
||
PUSHJ P,FOLOW4
|
||
SKIPE TT,FV2SAV
|
||
PUSHJ P,FOLOW5
|
||
POPJ P,
|
||
>;VB10
|
||
|
||
PGP,< MOVE TT,CURCUR ;GET POS OF CURSOR
|
||
TLNE DSPACT ;DISPLAYING?
|
||
CAMN TT,SAVWRD ;YES, CURSOR MOVED?
|
||
POPJ P, ;NO
|
||
MOVEM TT,SAVWRD ;YES, SAVE NEW POS
|
||
PUSHJ P,TXYSET ;SET UP XY COORDS
|
||
PUSHJ P,PUSHAL ;SAVE ACS
|
||
RTNCAL (INTERA,<[PLIT CURPRG],[PLIT TSXDAT]>) ;SEND CURSOR XY TO PGP
|
||
XRTN: PUSHJ P,CHCINT ;MAKE IT HAPPEN
|
||
PUSHJ P,POPALL ;RESTORE ACS
|
||
POPJ P,
|
||
|
||
ECURPG-.-1
|
||
CURPRG: ASCIZ !BEGIN
|
||
ON HCA
|
||
TSX=$0;
|
||
TSY=$1;
|
||
XY[2,6,8]=TSXY;
|
||
Y[3]=TSY;
|
||
X[4]=TSX;
|
||
END,
|
||
END!
|
||
2
|
||
ECURPG__.
|
||
|
||
TXYSET: LDB TTT,[POINT 11,TT,10] ;GET COORD X
|
||
TRNE TTT,2000 ;SIGN EXTEND
|
||
ORCMI TTT,1777
|
||
MOVEM TTT,TSXDAT ;SAVE FOR PGP
|
||
LDB TTT,[POINT 11,TT,21] ;REPEAT FOR Y
|
||
TRNE TTT,2000
|
||
ORCMI TTT,1777
|
||
MOVEM TTT,TSYDAT
|
||
POPJ P,
|
||
>;PGP
|
||
|
||
CMU,<
|
||
PUSH P,TT
|
||
PUSH P,TTT
|
||
JSP TT,INATYO
|
||
SETCUR
|
||
PASREGS
|
||
HLRE T,CURCUR
|
||
PUSHJ P,ATYOW
|
||
HRRE T,CURCUR
|
||
PUSHJ P,ATYOW
|
||
PUSHJ P,DOATYO
|
||
POP P,TTT
|
||
POP P,TT
|
||
POPJ P,
|
||
>;CMU
|
||
|
||
;CURBRT, CLRCLC, SETCLC, CURSOFF, CURSON, FOLOW1, FOLOW2, CLEAR1, CLEAR2
|
||
NOCMU,<
|
||
CURBRT: ANDI T,7
|
||
NODEC,<
|
||
LSH T,=11
|
||
MOVEI TT,46(T)
|
||
MOVEI TTT,FBRT
|
||
JRST PUT
|
||
>;NODEC
|
||
VB10,<
|
||
MOVEI TT,160010(T)
|
||
MOVEM TT,FBRT
|
||
POPJ P,
|
||
>;VB10
|
||
PGP,<
|
||
CAMN T,FBRT ;ANY CHANGE?
|
||
POPJ P, ;NO
|
||
MOVEM T,FBRT ;YES, SAVE VALUE
|
||
PUSHJ P,MAKBRI ;SCALE BRIGHTNESS TO PGP CAPABILITY
|
||
PUSHJ P,PUSHAL ;SAVE ACS
|
||
RTNCAL (INTERA,<[PLIT FBRPRG],[PLIT PGPBRI]>) ;SET CURSOR BRIGHTNESS
|
||
JRST XRTN ;MAKE IT HAPPEN
|
||
|
||
EFBPG-.-1
|
||
FBRPRG: ASCIZ !BEGIN
|
||
ON HCA
|
||
I[2,3,4,9,10]=$0;
|
||
END,
|
||
END!
|
||
1
|
||
EFBPG__.
|
||
|
||
STORAGE(IMPURE)
|
||
1
|
||
FBRT: 5
|
||
1
|
||
%CLOC: 1
|
||
STORAGE(PURE)
|
||
>;PGP
|
||
;CLOCATE CROSS
|
||
|
||
CLRCLC:
|
||
NODEC,< SKIPA TT,[XWD ONOFF,20] >
|
||
VB10,< SKIPA TT,[XWD ONOFF-1,0] >
|
||
PGP,< TDZA TT,TT >
|
||
SETCLC:
|
||
NODEC,<
|
||
MOVEI TT,12
|
||
MOVEI TTT,%CLOC
|
||
JRST PUT
|
||
>;NODEC
|
||
VB10,<
|
||
MOVSI TT,%CLOC+1
|
||
HLLM TT,%CLOC
|
||
POPJ P,
|
||
>;VB10
|
||
PGP,<
|
||
MOVEI TT,1 ;UNBLANK CLOCATE
|
||
CAMN TT,%CLOC ;ALREADY IN DESIRED STATE?
|
||
POPJ P, ;YES
|
||
MOVEM TT,%CLOC ;NO, SAVE STATE
|
||
PUSHJ P,PUSHAL ;SAVE ACS
|
||
RTNCAL (INTERA,<[PLIT CLCPRG],[PLIT %CLOC]>) ;SET STATE OF CLOCATE
|
||
JRST XRTN ;MAKE IT HAPPEN
|
||
|
||
ECLCPG-.-1
|
||
CLCPRG: ASCIZ !BEGIN
|
||
ON HCA
|
||
'301'=$0;
|
||
END,
|
||
END!
|
||
1
|
||
ECLCPG__.
|
||
>;PGP
|
||
|
||
CURSOFF:TRZN M,CURSOR
|
||
POPJ P,
|
||
NODEC,<
|
||
MOVE TT,[XWD CROSS,20]
|
||
MOVEI TTT,ONOFF
|
||
JRST PUT
|
||
>;NODEC
|
||
VB10,<
|
||
NOVIROS,<
|
||
MOVE TT,[XWD 400000,CROSS]
|
||
MOVEM TT,ONOFF
|
||
>;NOVIROS
|
||
POPJ P,
|
||
>;VB10
|
||
PGP,< SETZM ONOFF
|
||
CURSO1: PUSHJ P,PUSHAL ;SAVE ACS
|
||
RTNCAL (INTERA,<[PLIT COFPRG],[PLIT ONOFF]>) ;TURN ON CROSS
|
||
JRST XRTN ;MAKE IT HAPPEN
|
||
|
||
ECOFPG-.-1
|
||
COFPRG: ASCIZ !BEGIN
|
||
ON HCA
|
||
TSA=$0;
|
||
'110'=1-$0;
|
||
END,
|
||
END!
|
||
1
|
||
ECOFPG__.
|
||
|
||
STORAGE(IMPURE)
|
||
1
|
||
ONOFF: 0
|
||
STORAGE(PURE)
|
||
>;PGP
|
||
|
||
CURSON: TROE M,CURSOR
|
||
POPJ P,
|
||
NODEC,<
|
||
MOVEI TT,12
|
||
MOVEI TTT,ONOFF
|
||
JRST PUT
|
||
>;NODEC
|
||
VB10,<
|
||
NOVIROS,<
|
||
MOVEI TT,ONOFF+1
|
||
MOVEM TT,ONOFF
|
||
>;NOVIROS
|
||
POPJ P,
|
||
>;VB10
|
||
PGP,< AOS ONOFF
|
||
JRST CURSO1
|
||
>;PGP
|
||
|
||
FOLOW2: MOVEI TT,106
|
||
PUSHJ P,VECT
|
||
VB10,<
|
||
JRST CLEAR2
|
||
MOVEM TT,FV2SAV
|
||
FOLOW5: PUSH P,TT
|
||
PUSHJ P,CLEAR2+1
|
||
FOLOW3: POP P,TT
|
||
TLNN DSPACT
|
||
POPJ P,
|
||
SETOM VBSIZE
|
||
SETOM VBBRIT
|
||
SETZM VBMODE
|
||
HRLI TTT,222200
|
||
MOVEM TTT,COMPTR
|
||
HRRZM TTT,COMCTR
|
||
PUSHJ P,PUSHIT
|
||
MOVE A,SAVWRD
|
||
TRZ A,776000
|
||
HRRZM A,VBX
|
||
HLRZS A
|
||
ANDI A,1777
|
||
MOVEM A,VBY
|
||
MOVE A,SAVWR2
|
||
TRZ A,37777
|
||
TRO A,140
|
||
PUSHJ P,DISPN2
|
||
MOVE A,TT
|
||
PUSHJ P,DISPNT
|
||
PUSHJ P,POPIT
|
||
POPJ P,
|
||
|
||
FV1SAV: 0
|
||
FV2SAV: 0
|
||
>;VB10
|
||
PGP,<
|
||
JRST CLEAR2 ;OFF SCREEN, FLUSH
|
||
TLNE DSPACT ;DISPLAYING?
|
||
CAMN TT,FVECT2 ;YES, ANY CHANGE?
|
||
POPJ P, ;NO
|
||
MOVEM TT,FVECT2 ;YES, SAVE NEW DATA
|
||
PUSHJ P,TXYSET ;EXTRACT XY
|
||
PUSHJ P,PUSHAL ;SAVE ACS
|
||
RTNCAL (INTERA,<[PLIT FV2PRG],[PLIT TSXDAT]>) ;SET XY
|
||
JRST XRTN ;MAKE IT HAPPEN
|
||
|
||
CHCINT: RTNCAL (HCINT) ;MAKE IT HAPPEN
|
||
POPJ P,
|
||
|
||
EFV2PG-.-1
|
||
FV2PRG: ASCIZ !BEGIN
|
||
ON HCA
|
||
'114'=1;
|
||
[7]='114'\1\;
|
||
[8]='114'\2\;
|
||
X[7]=$0;
|
||
Y[7]=$1;
|
||
XY[8]=TSXY;
|
||
END,
|
||
END!
|
||
2
|
||
EFV2PG__.
|
||
>;PGP
|
||
CLEAR2:
|
||
NODEC,< MOVEI TT,12 > ;OFF SCREEN, DO CLEAR
|
||
VB10,< SETZM FV2SAV >
|
||
NOPGP,< MOVEI TTT,FVECT2
|
||
JRST PUT
|
||
>;NOPGP
|
||
PGP,<
|
||
TLNE DSPACT ;DISPLAYING?
|
||
SKIPN FVECT2 ;YES, ANY CHANGE?
|
||
POPJ P, ;NO
|
||
SETZM FVECT2 ;YES, SAVE STATE
|
||
PUSHJ P,PUSHAL ;SAVE ACS
|
||
RTNCAL (INTERA,<[PLIT CV2PRG],[PLIT NULARG]>) ;TURN OFF FOLLOW LINE
|
||
JRST XRTN ;MAKE IT HAPPEN
|
||
|
||
ECV2PG-.-1
|
||
CV2PRG: ASCIZ !BEGIN
|
||
ON HCA
|
||
'114'=0;
|
||
[7]='114'\1\;
|
||
[8]='114'\2\;
|
||
END,
|
||
END!
|
||
0
|
||
ECV2PG__.
|
||
>;PGP
|
||
|
||
FOLOW1: MOVEI TT,106
|
||
PUSHJ P,VECT
|
||
VB10,<
|
||
JRST CLEAR1
|
||
MOVEM TT,FV1SAV
|
||
FOLOW4: PUSH P,TT
|
||
PUSHJ P,CLEAR1+1
|
||
JRST FOLOW3
|
||
>;VB10
|
||
PGP,<
|
||
JRST CLEAR1 ;OFF SCREEN, FLUSH
|
||
TLNE DSPACT ;DISPLAYING?
|
||
CAMN TT,FVECT1 ;YES, ANY CHANGE?
|
||
POPJ P, ;NO
|
||
MOVEM TT,FVECT1 ;YES, SAVE NEW DATA
|
||
PUSHJ P,TXYSET ;EXTRACT XY
|
||
PUSHJ P,PUSHAL ;SAVE ACS
|
||
RTNCAL (INTERA,<[PLIT FV1PRG],[PLIT TSXDAT]>) ;SET XY
|
||
JRST XRTN ;MAKE IT HAPPEN
|
||
|
||
EFV1PG-.-1
|
||
FV1PRG: ASCIZ !BEGIN
|
||
ON HCA
|
||
'113'=1;
|
||
[5]='113'\1\;
|
||
[6]='113'\2\;
|
||
X[5]=$0;
|
||
Y[5]=$1;
|
||
XY[6]=TSXY;
|
||
END,
|
||
END!
|
||
2
|
||
EFV1PG__.
|
||
>;PGP
|
||
CLEAR1:
|
||
NODEC,< MOVEI TT,12 >
|
||
VB10,< SETZM FV1SAV >
|
||
NOPGP,< MOVEI TTT,FVECT1 >
|
||
PGP,<
|
||
TLNE DSPACT ;DISPLAYING?
|
||
SKIPN FVECT1 ;YES, ANY CHANGE?
|
||
POPJ P, ;NO
|
||
SETZM FVECT1 ;YES, SAVE STATE
|
||
PUSHJ P,PUSHAL ;SAVE ACS
|
||
RTNCAL (INTERA,<[PLIT CV1PRG],[PLIT NULARG]>) ;TURN OFF FOLLOW LINE
|
||
JRST XRTN ;MAKE IT HAPPEN
|
||
|
||
ECV1PG-.-1
|
||
CV1PRG: ASCIZ !BEGIN
|
||
ON HCA
|
||
'113'=0;
|
||
[5]='113'\1\;
|
||
[6]='113'\2\;
|
||
END,
|
||
END!
|
||
0
|
||
ECV1PG__.
|
||
>;PGP
|
||
PUT:
|
||
NODEC,<
|
||
TLNE DSPACT
|
||
CAMN TT,(TTT)
|
||
POPJ P,
|
||
NOIII,< PGSEL 0
|
||
UPGMVM TT,(TTT)
|
||
>;NOIII
|
||
>;NODEC
|
||
VB10,<
|
||
MOVE TT,[XWD 400000,400000]
|
||
MOVEM TT,4(TTT)
|
||
MOVEM TT,3(TTT)
|
||
MOVEM TT,2(TTT)
|
||
MOVEM TT,1(TTT)
|
||
>;VB10
|
||
PGP,< TLNE DSPACT ;DISPLAYING?
|
||
CAMN TT,(TTT) ;YES, ANY CHANGE?
|
||
POPJ P, ;NO
|
||
>;PGP
|
||
MOVEM TT,(TTT)
|
||
III,<; DPYOUT 0,FBUF
|
||
JFCL
|
||
>;III
|
||
PGP,<
|
||
PUT1: PUSHJ P,PUSHAL ;SAVE ACS
|
||
MOVEM TTT,TSXDAT ;SAVE PTR TO DATA
|
||
JRA TTT,.+1
|
||
MOVEM TTT,OUTBLK ;SEGMENT TO FLUSH
|
||
RTNCAL (INTERA,<[PLIT PUTPRG],[PLIT [PLIT OUTBLK]]>) ;FLUSH THE OLD COPY
|
||
PUSHJ P,CHCINT ;DO IT
|
||
MOVE TTT,OUTBLK ;CALC SEG NUMBER
|
||
ADDI TTT,=100
|
||
MOVEM TTT,TSYDAT
|
||
HLRZ TT,TSXDAT
|
||
HLRE B,1(TT) ;GET REFPT
|
||
HRRE C,1(TT)
|
||
RTNCAL (REFPT,<B,C>)
|
||
MOVEI T,TITBRT ;SET PARAMETERS
|
||
PUSHJ P,MAKBRI
|
||
SETZM PGPBRI+1
|
||
SETZM PGPBRI+2
|
||
RTNCAL (PARAMS,[PLIT PGPBRI])
|
||
RTNCAL (ROSEG,TSYDAT) ;OPEN IT
|
||
MOVE A,TSXDAT
|
||
HRL A,OUTBLK
|
||
PUSHJ P,DRWDEM
|
||
RTNCAL (CSEG,TSYDAT) ;CLOSE IT
|
||
RTNCAL (ENDPIC) ;FORCE OUTPUT
|
||
PUSHJ P,POPALL ;RESTORE ACS
|
||
>;PGP
|
||
POPJ P,
|
||
|
||
PGP,< EPUTPG-.-1
|
||
PUTPRG: ASCIZ !BEGIN
|
||
ON HCA
|
||
$$0=OUT;
|
||
END,
|
||
END!
|
||
1
|
||
EPUTPG__.
|
||
|
||
STORAGE(IMPURE)
|
||
2
|
||
OUTBLK: 0
|
||
-1
|
||
STORAGE(PURE)
|
||
>;PGP
|
||
>;NOGT ;;JB END OF THE ELIMINATION.
|
||
>;NOCMU
|
||
;;JB ************************************ ALL CODE FROM HERE ON IS JB'ERS.
|
||
|
||
GT,<
|
||
|
||
UPCURS: TLNN DSPACT ;DISPLAY ACTIVE?
|
||
POPJ P, ;NO. LEAVE US.
|
||
MOVE T,CURSE ;GET THE CURSOR POSITION OW.
|
||
CAME T,POSS1 ;IS CURCUR VALID?
|
||
PUSHJ P,SETPOS ;NO. UPDATE CURCUR.
|
||
SNDCUR: MOVE TT,CURCUR ;OK. NOW GET THE CURSOR AS AN III INSTRUCTION.
|
||
PUSHJ P,BRKTT ;BREAK IT UP INTO XWD X,Y
|
||
CAMN TT,JBCUR ;SAME AS BEFORE?
|
||
POPJ P, ;YES! EXIT NOW.
|
||
MOVEM TT,JBCUR ;NO. SAVE IT AWAY FOR POSTERITY.
|
||
|
||
BMODS 1,1,2 ;PREPARE TO MODIFY BLOCK 1 (THE CURSOR).
|
||
PUSH P,TT ;SAVE THE X NOW.
|
||
PUSH P,TT ;AND THE Y.
|
||
HLRZM TT,-1(P) ;WHOOPS. WRONG SIDE NOW.
|
||
BMODF ;LIST SET UP. SEND OUT CHANGE NOW.
|
||
SKIPE TT,FV1SAV ;HEY. ARE WE FOLLOWING?
|
||
PUSHJ P,FOL1A ;YES. FOLLOW 1.
|
||
SKIPE TT,FV2SAV ;HEY. ARE WE FOLLOWING TWO?
|
||
PUSHJ P,FOL2A ;YES. FOLLOW IT.
|
||
POPJ P, ;ELSE RETURN NOW.
|
||
|
||
|
||
|
||
; MISCELLANEOUS DATA.
|
||
|
||
STORAGE(IMPURE)
|
||
|
||
JBCUR: 0 ;CURRENT CURSOR POSITION.
|
||
FV1SAV: 0 ;CURRENT FOLLOW POSITION 1
|
||
FV2SAV: 0 ;CURRENT FOLLOW 2 POSITION.
|
||
STCHPS: 0 ;STACK UPDATE VALUE.
|
||
|
||
STORAGE(PURE)
|
||
|
||
CLRCLC: TLNN DSPACT
|
||
POPJ P,
|
||
STOPIC 5 ;STOP V & H LINE BY NOT DISPLAYING
|
||
POPJ P, ;THE APPROPRIATE SUBPICTURE.
|
||
|
||
SETCLC: TLNN DSPACT
|
||
POPJ P,
|
||
STAPIC 5 ;DISPLAY THEM BY DISPLAYING THE SUBPICTURE.
|
||
POPJ P,
|
||
|
||
CURSOF: TRZN M,CURSOR
|
||
POPJ P,
|
||
STOPIC(2)
|
||
STAPIC(12)
|
||
MOVEI 16,NLPXY
|
||
JRST STLPXY
|
||
|
||
CURSON: TROE M,CURSOR
|
||
POPJ P,
|
||
CURSN1: STOPIC(12)
|
||
STAPIC(2)
|
||
MOVEI 16,LPXY ;POINTER TO X,Y POS TABLE FOR CURSOR
|
||
JRST STLPXY ;SEND TO GT40
|
||
|
||
CURBRT: TLNN DSPACT
|
||
POPJ P,
|
||
ANDI T,7 ;SET CURRENT CURSOR BRIGHTNESS.
|
||
BMODS 1,0,3 ;MODIFY COMMAND WORD AND X,Y
|
||
LSH T,7 ;SHIFT TO CRRECT SPOT NOW.
|
||
ADDI T,116000 ;CREATE A GOOD ABSOLUTE LONG POINT INSTRUCTION.
|
||
PUSH P,T ;PLACE THE ITEM ON THE STACK NOW.
|
||
HLRZ T,JBCUR
|
||
PUSH P,T ;PUSH X
|
||
PUSH P,JBCUR ;PUSH Y
|
||
BMODF ;AND SEND IT OUT.
|
||
POPJ P,
|
||
|
||
|
||
; THIS ROUTINE CONTROLS THE FOLLOWING OF THE CURSOR (TWO LINES).
|
||
|
||
CLEAR1: TLNN DSPACT
|
||
POPJ P,
|
||
STOPIC 6 ;STOP SHOWING SUBPICTURE 6 NOW.
|
||
SETZM FV1SAV ;CLEAR THEFLAG NOW.
|
||
POPJ P, ;RETURN TO THE CALLER.
|
||
|
||
FOLOW1: TLNN DSPACT
|
||
POPJ P,
|
||
MOVEI TT,106 ;MAKE IT ABSOLUTE LONG VECTOR.
|
||
PUSHJ P,VECT ;CREAT IT NOW.
|
||
JRST CLEAR1 ;IF NOT THERE, CLEAR IT OUT.
|
||
PUSHJ P,BRKTT ;BREAK UP TT NOW.
|
||
MOVEM TT,FV1SAV ;AND SAVE IT AWAY NOW.
|
||
|
||
FOL1A: BMODS 6,3,2 ;MODIFY SUBPICTURE 6, FOR TWO WORDS.
|
||
HLLO TT,FV1SAV ;PICK UP THE DESIRED LOCATION NOW.
|
||
SUB TT,JBCUR ;SUBTRACT OFF OUR CURSOR POSITION.
|
||
PUSH P,TT ;PLACE ON THE STACK (NOT REALLY).
|
||
TLZ TT,756000 ;CHOP OFF CRAP NOW.
|
||
TLO TT,40000 ;MAKE VISIBLE.
|
||
TLNN TT,20000 ;NEGATIVE?
|
||
JRST .+3 ;NAW.
|
||
TLC TT,1777 ;YES. NEGATE IT NOW.
|
||
ADDI TT,1
|
||
HLRZM TT,0(P) ;AND PLACE ON THE STACK.
|
||
HRRZ TT,FV1SAV ;PICK UP THE Y NOW.
|
||
SUB TT,JBCUR ;KNOCK OFF THE CURSOR NOW.
|
||
ANDI TT,21777 ;JUST LEAVE SIGN AND MAGNITUDE.
|
||
TRNN TT,20000 ;NEGATIVE?
|
||
JRST .+3 ;NOPE.
|
||
TRC TT,1777 ;YES. NEGATE IT.
|
||
ADDI TT,1 ;THIS WAY TO PRESERVE THE BITS.
|
||
PUSH P,TT ;SAVE IT ONE THE STACK NOW.
|
||
BMODF ;AND SEND OUT THE CHANGE NOW.
|
||
STAPIC 6 ;AND DISPLAY IT NOW.
|
||
POPJ P, ;AND RETURN TO THE CALLER.
|
||
|
||
CLEAR2: TLNN DSPACT
|
||
POPJ P,
|
||
STOPIC 7 ;STOP SHOWING SUBPICTURE 7 NOW.
|
||
SETZM FV2SAV ;CLEAR THE FLAG NOW.
|
||
POPJ P, ;RETURN TO THE CALLER.
|
||
|
||
FOLOW2: TLNN DSPACT
|
||
POPJ P,
|
||
MOVEI TT,106 ;MAKE IT ABSOLUTE LONG VECTOR.
|
||
PUSHJ P,VECT ;CREAT IT NOW.
|
||
JRST CLEAR2 ;IF NOT THERE, CLEAR IT OUT.
|
||
PUSHJ P,BRKTT ;BREAK UP TT NOW.
|
||
MOVEM TT,FV2SAV ;AND SAVE IT AWAY NOW.
|
||
|
||
FOL2A: BMODS 7,3,2 ;MODIFY SUBPICTURE 7, FOR TWO WORDS.
|
||
HLLO TT,FV2SAV ;PICK UP THE DESIRED LOCATION NOW.
|
||
SUB TT,JBCUR ;SUBTRACT OFF OUR CURSOR POSITION.
|
||
PUSH P,TT ;PLACE ON THE STACK (NOT REALLY).
|
||
TLZ TT,756000 ;CHOP OFF CRAP NOW.
|
||
TLO TT,40000 ;MAKE VISIBLE.
|
||
TLNN TT,20000 ;NEGATIVE?
|
||
JRST .+3 ;NAW.
|
||
TLC TT,1777 ;YES. NEGATE IT NOW.
|
||
ADDI TT,1
|
||
HLRZM TT,0(P) ;AND PLACE ON THE STACK.
|
||
HRRZ TT,FV2SAV ;PICK UP THE Y NOW.
|
||
SUB TT,JBCUR ;KNOCK OFF THE CURSOR NOW.
|
||
ANDI TT,21777 ;JUST LEAVE SIGN AND MAGNITUDE.
|
||
TRNN TT,20000 ;NEGATIVE?
|
||
JRST .+3 ;NOPE.
|
||
TRC TT,1777 ;YES. NEGATE IT.
|
||
ADDI TT,1 ;THIS WAY TO PRESERVE THE BITS.
|
||
PUSH P,TT ;SAVE IT ONE THE STACK NOW.
|
||
BMODF ;AND SEND OUT THE CHANGE NOW.
|
||
STAPIC 7 ;AND DISPLAY THE SUBPICTURE NOW.
|
||
POPJ P, ;AND RETURN TO THE CALLER.
|
||
|
||
; THIS ROUTINE WILL BREAK UP THE III LONG VECTOR
|
||
; IN "TT" INTO (XWD X,Y).
|
||
|
||
|
||
BRKTT: ROT TT,=11 ;GET X INTO LOW ORDER BITS.
|
||
DPB TT,[POINT 11,TT,28] ;PLACE THEM INTO 18-28.
|
||
ROT TT,=11 ;NOW MOVE INTO 7-17.
|
||
AND TT,[1777,,1777]
|
||
ADD TT,[GTX,,GTY]
|
||
AND TT,[XWD 1777,1777] ;AND CHOP OFF STRAY BITS.
|
||
POPJ P, ;AND RETURN TO THE CALLER NOW.
|
||
|
||
|
||
; FILE UPDATER.
|
||
|
||
NOLAST: TLNN DSPACT
|
||
POPJ P,
|
||
MOVE T,[POINT 7,NAMBUF] ;PICK UP POINTER TO FILE NAME.
|
||
MOVEM T,TMP1 ;SAVE IT AWAY NOW.
|
||
|
||
MOVEM TTT,TMP2 ;SAVE TTT FOR A SECOND.
|
||
MOVEI TTT,GTFNAM ;PICK UP THE POINTER TO OUR NAME NOW.
|
||
MOVEI T,=25 ;25 CHARACTERS LONG.
|
||
|
||
NOLAS1: ILDB TT,TMP1 ;GET A CHARACTER.
|
||
JUMPGE TTT,NOLAS2 ;PLACE IN RIGHT HALF OF GT40 WORD.
|
||
LSH TT,=8 ;PLACE IN LEFT HALF.
|
||
IORM TT,0(TTT) ;PLACE COMPLETED WORD IN MEMORY.
|
||
AOJA TTT,NOLAS3 ;UPDATE THE POINTER NOW.
|
||
|
||
NOLAS2: MOVEM TT,0(TTT) ;PLACE THE 8 BITS IN RIGHT OF MEMORY NOW.
|
||
NOLAS3: TLC TTT,400000 ;FLIP THE SIGN BIT NOW.
|
||
SOJG T,NOLAS1 ;LOOP BACK AND GET THE NEXT ITEM.
|
||
JRST SENDHD ;AND WHEN DONE, SEND OUT CHANGES TO THE HEADING.
|
||
|
||
|
||
; SPECIAL DISPLAY SUBPICTURE TABLES.
|
||
|
||
; 1=CURSOR
|
||
; 2=BULLSEYE CURSOR
|
||
; 3=HEADING
|
||
; 4=UNUSED
|
||
; 5=HORIZONTAL AND VERTICAL LINES THROUGH CURSOR.
|
||
; 6=FOLLOW 1 CODE.
|
||
; 7=FOLLOW 2 CODE.
|
||
; 10=POSITIONING FOR LINES THROUGH LETTERS.
|
||
; 11=MAIN ROUTINEFOR LINES WHICH CALLS #10.
|
||
; 12=CROSS CURSOR
|
||
|
||
|
||
;PLEASE NOTE!!!!!!!!!! CALLS BETWEEN SUB-PICTURES ARE BY SUB-PICTURE #
|
||
; THESE ARE CONVERTED TO BLOCK #S BY TRANS8.
|
||
|
||
JBTABL: XWD -PIC1Z,PIC1
|
||
XWD -PIC2Z,PIC2
|
||
XWD -PIC3Z,PIC3
|
||
XWD -PIC4Z,PIC4
|
||
XWD -PIC5Z,PIC5
|
||
XWD -PIC6Z,PIC6
|
||
XWD -PIC7Z,PIC7
|
||
XWD -PIC10Z,PIC10
|
||
XWD -PIC11Z,PIC11
|
||
XWD -PIC12Z,PIC12
|
||
0 ;0= END OF LIST.
|
||
|
||
LPXY: 1 ;SUBPICTURE 1
|
||
JBCURX-PIC1 ;OFFSET INTO BLOCK
|
||
1 ;SAME FOR Y
|
||
JBCURY-PIC1
|
||
|
||
NLPXY: 0
|
||
0
|
||
0
|
||
0
|
||
|
||
STORAGE(IMPURE)
|
||
|
||
PIC1: 117124 ;PICTURE 1=CURSOR POSITIONING.
|
||
JBCURX: GTX
|
||
JBCURY: GTY ; BOTH THE X ANY ARE CHANGED.
|
||
DISTOP
|
||
0
|
||
PIC1Z__.-PIC1
|
||
XWD 1,0 ;DEFINE AS SUBPICUTRE 1, NO SHOW.
|
||
|
||
|
||
DEFINE CP(SX,X,SY,Y)
|
||
< IFIDN<SX><-><20000+>X*1000+IFIDN<SY><-><100+>Y*4+40000
|
||
>
|
||
|
||
DEFINE BULLSEYE
|
||
< <CP (+,0,+,1)>-40000 ;FOO, LOSING GT40
|
||
CP +,0,-,1 ;START WITH POINT AT CENTER
|
||
CP +,0,+,2
|
||
CP +,2,-,2
|
||
CP -,2,-,2
|
||
CP -,2,+,2
|
||
CP -,2,+,0
|
||
CP +,1,+,3
|
||
CP +,3,+,1
|
||
CP +,3,-,1
|
||
CP +,1,-,3
|
||
CP -,1,-,3
|
||
CP -,3,-,1
|
||
CP -,3,+,1
|
||
CP -,3,+,3
|
||
CP +,0,+,3
|
||
CP +,1,+,2
|
||
CP +,2,+,1
|
||
CP +,3,+,0
|
||
CP +,3,+,0
|
||
CP +,2,-,1
|
||
CP +,1,-,2
|
||
CP +,0,-,3
|
||
CP +,0,-,3
|
||
CP -,1,-,2
|
||
CP -,2,-,1
|
||
CP -,3,+,0
|
||
CP -,3,+,0
|
||
CP -,2,+,1
|
||
CP -,1,+,2
|
||
>
|
||
|
||
PIC2: DISTOP ;THE X ON THE CURSOR.
|
||
1 ;CALL 1 TO POSITION THE CURSOR.
|
||
130160 ;RELATIVE POINT MODE, ENB LP, NO BLINK
|
||
BULLSEYE ;ONCE WITH LP AND NOT BLINK
|
||
DISTOP
|
||
1 ;REPOSITION TO CURSOR
|
||
130130 ;NOW BLINK, BUT NO LP
|
||
BULLSEYE
|
||
130120 ;LP AND BLINK OFF
|
||
DISTOP ;END
|
||
0
|
||
PIC2Z__.-PIC2
|
||
XWD 2,0
|
||
|
||
|
||
PIC4: DISTOP ;PIC4 NO LONGER USED.
|
||
0
|
||
PIC4Z__.-PIC4
|
||
XWD 4,0 ;DO NOT SHOW IT.
|
||
|
||
|
||
PIC5: DISTOP ;5 IS THE BIG LINES THROUGH CURSOR.
|
||
1 ;GET THE POSITION NOW.
|
||
110127 ;LONG RELATIVE VECTOR MODE.
|
||
241777 ;TO RIGHT
|
||
0
|
||
221777 ;BACK LEFT TO CENTER (INV)
|
||
1777 ;BUT UP TO TOP.
|
||
240000 ;NOW DOWN VIS TO CENTER
|
||
21777
|
||
240000 ;KEEP GOING NOW.
|
||
21777
|
||
221777 ;NOW TO LEFT X, NO Y.
|
||
1777
|
||
241777 ;BACK TOCENTER VISIBLE.
|
||
0
|
||
DISTOP ;ENDOF THE PCITURE NOW.
|
||
0
|
||
PIC5Z__.-PIC5
|
||
XWD 5,-1 ;DEFINE AND SHOWIT NOW.
|
||
|
||
|
||
PIC6: DISTOP ;CALL SUBPICTURE 1
|
||
1 ;TO POSITION THE CURSOR NOW!
|
||
110124 ;THE FOLLOW 1 LONG VECTOR COMMANDS.
|
||
0
|
||
0
|
||
DISTOP
|
||
0
|
||
PIC6Z__.-PIC6
|
||
XWD 6,0 ;DO NOT INITALLY SHOW IT.
|
||
|
||
|
||
PIC7: DISTOP ;CALL SUBPICTURE 1 [CURSOR] NOW.
|
||
1
|
||
110124 ;GET INTO LONG VECTOR MODE.
|
||
0 ;DEL X AND DEL Y GOHERE.
|
||
0
|
||
DISTOP
|
||
0
|
||
PIC7Z__.-PIC7
|
||
XWD 7,0 ;SAME AS FOR 6.
|
||
|
||
|
||
PIC10: 117124 ;THIS CENTERS ON THE LETTER IN QUESTION.
|
||
0 ;X AND Y INSERTED
|
||
0
|
||
DISTOP
|
||
0
|
||
PIC10Z__.-PIC10
|
||
XWD 10,0
|
||
|
||
|
||
PIC11: DISTOP ;CROSS HAIRS FOR GOING THROUGH LETTERS.
|
||
10 ;CALL SUBPICTURE 10
|
||
110126
|
||
241777
|
||
0
|
||
221777
|
||
1777
|
||
240000
|
||
21777
|
||
240000
|
||
21777
|
||
221777
|
||
1777
|
||
241777
|
||
0
|
||
DISTOP
|
||
0
|
||
PIC11Z__.-PIC11
|
||
XWD 11,0 ;DO NOT SHOWIT INITIALLY.
|
||
|
||
|
||
PIC12: DISTOP
|
||
1 ;CALL CURSOR X,Y
|
||
104124 ;NOW DRAW CROSS
|
||
42010
|
||
22110
|
||
62110
|
||
00020
|
||
44120
|
||
DISTOP
|
||
0
|
||
PIC12Z__.-PIC12
|
||
XWD 12,-1
|
||
|
||
STORAGE(PURE)
|
||
>;GT END OF THE BIGGY IN "DISP"
|
||
|
||
;;JB RESUMING NORMAL COMMENTS FROM THIS POINT ON.
|
||
;SEGWN0, SEGWN1, SEGWIN
|
||
;SEGMENT WINDOWING
|
||
SEGWN0: PUSH P,G
|
||
MOVEI G,0
|
||
JRST SEGWIN
|
||
|
||
SEGWN1: PUSH P,G
|
||
MOVEI G,1
|
||
SEGWIN: PUSH P,F
|
||
MOVE TTT,@XDISP1(G) ;ON SCREEN POINT
|
||
MOVE T,@YDISP1(G)
|
||
SUB TTT,@XGO1(G) ;- OFF SCREEN POINT
|
||
SUB T,@YGO1(G)
|
||
MOVEI F,0 ;0 DOWN LEFT
|
||
JUMPGE T,.+2
|
||
ADDI F,1 ;+1 UP
|
||
JUMPGE TTT,.+2
|
||
ADDI F,2 ;+2 RIGHT
|
||
MOVE TT,@YGO1(G) ;OFF Y
|
||
XCT TBTAB1(F) ;0,2 BELOW BOTTOM - 1,3 ABOVE TOP
|
||
SKIPN T ;CROSSES, IS IT HORZ?
|
||
JRST TRYLR ;CAN'T CROSS VERTICALLY
|
||
MOVE TT,@YDISP1(G) ;ON Y
|
||
XCT TBTAB1(F) ;OTHER SIDE OF SCREEN EDGE?
|
||
JRST TRYLR ;NO, MAYBE LEFT AND RIGHT
|
||
SUB TT,TBTAB(F) ;DIST TO EDGE
|
||
MOVN TT,TT
|
||
IMUL TT,TTT ;MULT BY X DIF
|
||
IDIV TT,T ;DIV BY Y DIF
|
||
ADD TT,@XDISP1(G)
|
||
CAIGE TT,%RIGHT ;INTERSECT ON SCREEN?
|
||
CAMG TT,[%LEFT]
|
||
JRST TRYLR ;NO
|
||
LSH TT,=36-=11 ;PUT X IN POSITION
|
||
MOVE T,TBTAB(F)
|
||
DPB T,[POINT 11,TT,21]
|
||
JRST LWIN1
|
||
TRYLR: MOVE TT,@XGO1(G) ;OFF X
|
||
XCT LRTAB1(F) ;0,1 OFF LEFT - 2,3 OFF RIGHT
|
||
CAMN TT,@XDISP1(G) ;CROSSES, IS IT VERT.
|
||
JRST LWLOSE ;LOSE
|
||
MOVE TT,@XDISP1(G) ;ON X
|
||
XCT LRTAB1(F) ;OTHER SIDE OF SCREEN EDGE?
|
||
JRST LWLOSE ;NO COMPLETELY OFF
|
||
SUB TT,LRTAB(F) ;DIST TO EDGE
|
||
MOVN TT,TT
|
||
IMUL TT,T ;MULT BY Y DIF
|
||
MOVE TTT,@XDISP1(G) ;ON SCREEN POINT
|
||
SUB TTT,@XGO1(G) ;- OFF SCREEN POINT
|
||
IDIV TT,TTT ;DIV BY X DIF
|
||
ADD TT,@YDISP1(G)
|
||
CAIGE TT,%TOP
|
||
CAMG TT,[%BOTTOM] ;INTERSECT ON SCREEN?
|
||
JRST LWLOSE ;NO
|
||
MOVE T,LRTAB(F)
|
||
LSH TT,=36-=11-=11
|
||
DPB T,[POINT 11,TT,10]
|
||
LWIN1: POP P,F
|
||
POP P,G
|
||
JRST CPOPJ1
|
||
|
||
LWLOSE: POP P,F
|
||
POP P,G
|
||
POPJ P,
|
||
;TABLES FOR SEGWIN
|
||
XGO1: XGO
|
||
XDISP1: XDISP
|
||
XGO
|
||
|
||
YGO1: YGO
|
||
YDISP1: YDISP
|
||
YGO
|
||
|
||
LRTAB: %LEFT+1
|
||
%LEFT+1
|
||
%RIGHT-1
|
||
%RIGHT-1
|
||
|
||
LRTAB1: CAMG TT,[%LEFT]
|
||
CAMG TT,[%LEFT]
|
||
CAIL TT,%RIGHT
|
||
CAIL TT,%RIGHT
|
||
|
||
TBTAB: %BOTTOM+1
|
||
%TOP-1
|
||
%BOTTOM+1
|
||
%TOP-1
|
||
|
||
TBTAB1: CAMG TT,[%BOTTOM] ;DO WE GET THROUGH TOP OR BOTTOM FROM E TO A?
|
||
CAIL TT,%TOP
|
||
CAMG TT,[%BOTTOM]
|
||
CAIL TT,%TOP
|
||
;UPDATE FILENAME FROM NAMBUF
|
||
NOCMU,<
|
||
NOGT,< ;;JB
|
||
NOLAST:
|
||
NODEC,<
|
||
TLNN DSPACT
|
||
POPJ P,
|
||
III,< HRRZS (P) > ;USE STACK AS FLAG
|
||
NOIII,< PGSEL 0 >
|
||
MOVSI T,-NFWRDS
|
||
FILUP1: MOVE TT,NAMBUF(T)
|
||
CAME TT,FILWRD(T) ;SAVE A SYSTEM CALL!
|
||
NOIII,< UPGMVM TT,FILWRD(T) >
|
||
III,< HRROS (P) > ;FLAG DIFFERENCE
|
||
MOVEM TT,FILWRD(T)
|
||
AOBJN T,FILUP1
|
||
III,< SKIPGE (P)
|
||
DPYOUT 0,FBUF
|
||
JFCL
|
||
>;III
|
||
POPJ P,
|
||
>;NODEC
|
||
VB10,<
|
||
MOVE T,[POINT 7,NAMBUF]
|
||
MOVEM T,TMP1
|
||
MOVE T,[POINT 6,FILWRD]
|
||
MOVEM T,TMP2
|
||
MOVEI T,=25
|
||
NOLAS1: ILDB TT,TMP1
|
||
SKIPN TT
|
||
MOVEI TT,35
|
||
CAIE TT,"["
|
||
CAIN TT,"]"
|
||
JRST [PUSH P,TT
|
||
MOVEI TT,36
|
||
IDPB TT,TMP2
|
||
POP P,TT
|
||
CAIN TT,"["
|
||
MOVEI TT,53
|
||
CAIN TT,"]"
|
||
MOVEI TT,54
|
||
IDPB TT,TMP2
|
||
NOLAS3: MOVEI TT,35
|
||
JRST NOLAS2]
|
||
NOLAS2: IDPB TT,TMP2
|
||
SOJG T,NOLAS1
|
||
MOVE TT,TMP2
|
||
CAME TT,[POINT 6,FILWRD+4,29]
|
||
JRST NOLAS3
|
||
POPJ P,
|
||
>;VB10
|
||
PGP,< TLNN DSPACT ;DISPLAYING?
|
||
POPJ P, ;NO
|
||
MOVSI T,-NFWRDS ;CHECK FOR CHANGES
|
||
MOVE TT,NAMBUF(T)
|
||
CAME TT,FILWRD(T)
|
||
JRST NOLAS1 ;FOUND A CHANGE
|
||
AOBJN T,.-3
|
||
POPJ P, ;NO CHANGES, WIN
|
||
|
||
NOLAS1: MOVE T,[XWD NAMBUF,FILWRD] ;REMEMBER DATA
|
||
BLT T,FILWRD+NFWRDS-1
|
||
MOVE TTT,[XWD NLSDAT,FILWRD]
|
||
JRST PUT1
|
||
|
||
NLSDAT: =104
|
||
XWD %LEFT+31*CWIDTH*TITBIG,SCRTOP-CHGHT*TITBIG
|
||
>;PGP
|
||
;UPDATE MODE
|
||
PMODE:
|
||
NOPGP,< TLNN DSPACT
|
||
POPJ P,
|
||
MOVE T,MODE
|
||
MOVE T,DMODE(T)
|
||
NODEC,<
|
||
CAMN T,MODWRD
|
||
POPJ P,
|
||
NOIII,< PGSEL 0
|
||
UPGMVM T,MODWRD
|
||
>;NOIII
|
||
MOVEM T,MODWRD
|
||
III,< DPYOUT 0,FBUF
|
||
JFCL
|
||
>;III
|
||
>;NODEC
|
||
VB10,<
|
||
LSH T,-=10
|
||
TLZ T,77601
|
||
ADDI T,7200(T)
|
||
LSH T,=11
|
||
TLNN T,7700
|
||
TLO T,3500
|
||
HLRM T,MODWRD
|
||
>;VB10
|
||
POPJ P,
|
||
>;NOPGP
|
||
PGP,< MOVE TT,MODE ;GET MODE CHRS
|
||
MOVE TT,DMODE(TT)
|
||
MOVE TTT,[XWD PMDDAT,MODWRD]
|
||
JRST PUT
|
||
|
||
PMDDAT: =101
|
||
XWD %LEFT+5*CWIDTH*TITBIG,SCRTOP-CHGHT*TITBIG
|
||
>;PGP
|
||
>;NOGT ;;JB
|
||
|
||
GT,< ;;JB
|
||
PMODE: TLNN DSPACT ;;JB DISPLAY ACTIVE?
|
||
POPJ P, ;;JB RETURN NOW.
|
||
MOVE T,MODE ;;JB PICK UP THE MODE NOW.
|
||
MOVE T,DMODE(T) ;;JB PICK UP THE CHARACTERS NOW.
|
||
ROT T,7 ;;JB MOVE IN THE FIRST CHARACTER NOW.
|
||
DPB T,[POINT 7,T,14] ;;JB STICK IN RIGHT AFTER THE SECOND ONE.
|
||
ROT T,=15 ;;JB MOVE IN THE 15 BITS NOW.
|
||
ANDI T,77777 ;;JB AND MAKE SURE IT'S JUST FIFTEEN.
|
||
MOVEM T,GTMODE ;;JB AND SAVE IN OUR LIST NOW.
|
||
JRST SENDHD ;;JB SEND OUT THE HEADING NOW.
|
||
>;GT ;;JB
|
||
>;NOCMU
|
||
|
||
;MUST BE 2 OR LESS CHARS
|
||
STORAGE(IMPURE)
|
||
|
||
DMODE: ASCID/S/ ;SET MODE
|
||
ASCID/B/ ;BODY MODE
|
||
ASCID/P/ ;POINT MODE
|
||
ASCID/L/ ;LINE MODE
|
||
ASCID/T/ ;TEXT MODE
|
||
ASCID/PA/ ;ALTER TEXT (POINT SUBMODE)
|
||
ASCID/MA/ ;MACRO ALTER MODE
|
||
SPMODT: ASCID/SP/ ;SPECIAL POINTER MODE (FIXED UP BY INDIVIDUAL PIECES OF CODE)
|
||
MD,< ASCID/BT/ ;BODY TEXT MODE
|
||
ASCID/BA/ ;BODY TEXT ALTER MODE
|
||
ASCID/E/ ;EDIT MODE
|
||
ASCID/EI/ ;EDIT INSERT MODE
|
||
ASCID/ET/ ;EDIT TEXT MODE
|
||
ASCID/EP/ ;EDIT PIN MODE
|
||
ASCID/EG/ ;EDIT GET MODE
|
||
ASCID/EA/ ;EDIT ALTER MODE
|
||
>;MD
|
||
REPEAT NUMODES+<DMODE-.>,<ASCID/?/>
|
||
|
||
STORAGE(PURE)
|