mirror of
https://github.com/PDP-10/stacken.git
synced 2026-03-07 11:17:06 +00:00
229 lines
5.9 KiB
Plaintext
229 lines
5.9 KiB
Plaintext
;COPY INTO YOUR TERMINAL-DEPENDENT MODULE, OR USE AS GUIDES
|
|
|
|
;CONTAINS PAIRS OF ROUTINES: THE FIRST POSITIONS TO ROW (RW) COLUMN (CM)
|
|
;THE SECOND POSITIONS TO THE START OF LINE (T4)
|
|
;(RW, CM, AND T4 ARE ACCUMULATORS)
|
|
;THE ROUTINES ALL DO A "POPJ P," WHEN DONE
|
|
|
|
;SUBROUTINES THAT MAY BE CALLED BY THESE ROUTINES:
|
|
|
|
;MOVE T1,NUMBER ;PUTNUM - OUTPUT DECIMAL NUMBER IN T1
|
|
;PUSHJ P,PUTNUM
|
|
|
|
;MOVEI T1,[ASCIZ /STRING/] ;PUTSTG - OUTPUT STRING POINTED TO BY T1
|
|
;PUSHJ P,PUTSTG
|
|
|
|
;MOVE T1,[ASCII /CHARS/] ;PUTSQ1 - OUTPUT UP TO 5 CHARACTERS IN 1
|
|
;PUSHJ P,PUTSQ1
|
|
|
|
;MOVEI T1,"X" ;OUTPUT A SINGLE CHARACTER
|
|
;IDPB T1,TY
|
|
|
|
;PUSHJ P,PUTTYP ;OUTPUT THE TYPE BUFFER TO THE TERMINAL
|
|
;(NORMALLY THIS WILL BE DONE AFTER THESE ROUTINES RETURN)
|
|
|
|
;*****************************************************************************
|
|
;OUTPUT ROW+37, COLUMN+37; STARTING ROW, COLUMN ARE [1,1]
|
|
;USED BY VT52, ADM2
|
|
|
|
;MOVE TO ROW (RW), COLUMN (CM)
|
|
|
|
POSCUR: MOVE T1,[BYTE (7) 33,"Y"]
|
|
PUSHJ P,PUTSQ1 ;START IT OFF
|
|
MOVEI T1,40(RW) ;GET ROW POSITION
|
|
IDPB T1,TY
|
|
MOVEI T1,40(CM) ;GET COLUMN POSITION
|
|
IDPB T1,TY
|
|
POPJ P, ;DONE
|
|
|
|
;MOVE TO START OF LINE (T4)
|
|
|
|
POSLIN: MOVE T1,[BYTE (7) 33,"Y"]
|
|
PUSHJ P,PUTSQ1 ;START IT OFF
|
|
MOVEI T1,40(T4) ;GET ROW POSITION
|
|
IDPB T1,TY
|
|
MOVEI T1,40 ;MOVE TO COLUMN ZERO
|
|
IDPB T1,TY
|
|
POPJ P,
|
|
|
|
;*****************************************************************************
|
|
;OUTPUT ROW IN DECIMAL, ";", COLUMN IN DECIMAL, "H"
|
|
;USED BY VT100
|
|
|
|
;MOVE TO ROW (RW), COLUMN (CM)
|
|
|
|
POSCUR: MOVE T1,[BYTE (7) 33,"Y"]
|
|
PUSHJ P,PUTSQ1 ;START IT OFF
|
|
MOVEI T1,1(RW) ;GET ROW POSITION
|
|
PUSHJ P,PUTNUM
|
|
MOVEI T1,";" ;THEN A SEMICOLON
|
|
IDPB T1,TY
|
|
MOVEI T1,1(CM) ;GET COLUMN POSITION
|
|
PUSHJ P,PUTNUM
|
|
MOVEI T1,"H" ;THEN AN H
|
|
IDPB T1,TY
|
|
POPJ P, ;DONE
|
|
|
|
;MOVE TO START OF LINE (T4)
|
|
|
|
POSLIN: MOVE T1,[BYTE (7) 33,"Y"]
|
|
PUSHJ P,PUTSQ1 ;START IT OFF
|
|
MOVEI T1,1(T4) ;GET ROW POSITION
|
|
PUSHJ P,PUTNUM
|
|
MOVE T1,[ASCII /;0H/]
|
|
JRST PUTSQ1 ;OUTPUT IT AND RETURN
|
|
|
|
;*****************************************************************************
|
|
;OUTPUT ROW AS TWO DECIMAL DIGITS; LIKEWISE COLUMN. HOME IS [0,0]
|
|
;USED BY ONTEL
|
|
|
|
;MOVE TO ROW (RW), COLUMN (CM)
|
|
|
|
POSCUR: MOVE T1,[BYTE (7) 33,"Y"]
|
|
PUSHJ P,PUTSQ1 ;START IT OFF
|
|
MOVE T1,RW ;GET ROW POSITION
|
|
IDIVI T1,12
|
|
ADDI T1,"0"
|
|
IDPB T1,TY
|
|
MOVEI T1,"0"(T2)
|
|
IDPB T1,TY
|
|
|
|
MOVE T1,CM ;GET COLUMN POSITION
|
|
IDIVI T1,12
|
|
ADDI T1,"0"
|
|
IDPB T1,TY
|
|
MOVEI T1,"0"(T2)
|
|
IDPB T1,TY
|
|
POPJ P, ;DONE
|
|
|
|
;MOVE TO START OF LINE (T4)
|
|
|
|
POSLIN: MOVE T1,[BYTE (7) 33,"Y"]
|
|
PUSHJ P,PUTSQ1 ;START IT OFF
|
|
MOVE T1,T4 ;GET ROW POSITION
|
|
IDIVI T1,12
|
|
ADDI T1,"0"
|
|
IDPB T1,TY
|
|
MOVEI T1,"0"(T2)
|
|
IDPB T1,TY
|
|
MOVEI T1,"0" ;MOVE TO COLUMN ZERO
|
|
IDPB T1,TY
|
|
IDPB T1,TY
|
|
POPJ P, ;DONE
|
|
|
|
;*****************************************************************************
|
|
;USED BY NIH DELTA DATA 7000
|
|
|
|
;MOVE TO ROW (RW), COLUMN (CM)
|
|
|
|
POSCUR: MOVE T1,[BYTE (7) 33,"Y"]
|
|
PUSHJ P,PUTSQ1 ;START IT OFF
|
|
SETCMI T1,(CM) ;GET COLUMN POSITION
|
|
IDPB T1,TY
|
|
SETCMI T1,(RW) ;GET ROW POSITION
|
|
IDPB T1,TY
|
|
POPJ P, ;DONE
|
|
|
|
;MOVE TO START OF LINE (T4)
|
|
|
|
POSLIN: MOVE T1,[BYTE (7) 33,"Y"]
|
|
PUSHJ P,PUTSQ1 ;START IT OFF
|
|
SETO T1, ;SET TO COLUMN ZERO
|
|
IDPB T1,TY
|
|
SETCMI T1,(T4) ;GET ROW POSITION
|
|
IDPB T1,TY
|
|
POPJ P, ;DONE
|
|
|
|
;*****************************************************************************
|
|
;USED BY HAZELTINE 1420
|
|
|
|
;MOVE TO ROW (RW), COLUMN (CM)
|
|
|
|
POSCUR: MOVE T1,[BYTE (7) 176,21]
|
|
PUSHJ P,PUTSQ1 ;START IT OFF
|
|
MOVEI T1,(CM) ;GET COLUMN POSITION
|
|
JUMPN T1,.+2
|
|
ADDI T1,^D96
|
|
IDPB T1,TY
|
|
HRRZ T1,RW ;GET ROW POSITION
|
|
POSCR1: JUMPN T1,.+2
|
|
ADDI T1,^D96
|
|
IDPB T1,TY
|
|
POPJ P,
|
|
|
|
;MOVE TO START OF LINE (T4)
|
|
|
|
POSLIN: MOVE T1,[BYTE (7) 176,21]
|
|
PUSHJ P,PUTSQ1 ;START IT OFF
|
|
MOVEI T1,^D96 ;SET TO COLUMN ZERO
|
|
IDPB T1,TY
|
|
MOVEI T1,(T4) ;GET ROW POSITION
|
|
JRST POSCR1 ;FINISH WITH ROW
|
|
|
|
;*****************************************************************************
|
|
;ROUTINES FOR A TERMINAL WHICH CANNOT POSITION ABSOLUTELY:
|
|
;GOES HOME AND MOVES TO THE PROPER POSITION
|
|
|
|
;MOVE TO ROW (RW), COLUMN (CM)
|
|
|
|
POSCUR: PUSHJ P,CHOME ;SIMULATE POSITIONING: GO HOME
|
|
SKIPN T2,RW ;WANT TO MOVE DOWN?
|
|
JRST POSCR1 ;NO - SKIP THIS
|
|
PUSHJ P,CDOWN
|
|
SOJG T2,.-1
|
|
POSCR1: SKIPN T2,CM ;WANT TO MOVE ACROSS?
|
|
POPJ P, ;NO - SKIP THIS
|
|
PUSHJ P,CRIGHT
|
|
SOJG T2,.-1
|
|
POPJ P, ;VERY VERY CRUDE
|
|
|
|
;MOVE TO START OF LINE (T4)
|
|
|
|
POSLIN: PUSHJ P,CHOME ;SIMULATE POSITIONING: GO HOME
|
|
SKIPN T2,T4 ;WANT TO MOVE DOWN?
|
|
POPJ P, ;NO - SKIP THIS
|
|
PUSHJ P,CDOWN
|
|
SOJG T2,.-1
|
|
POPJ P, ;STILL VERY CRUDE
|
|
|
|
;*****************************************************************************
|
|
;ROUTINES TO CLEAR TO END OF LINE AND PAGE IF TERMINAL CANNOT DO EITHER
|
|
;SIMULATE THE CLEAR BY OUTPUTTING THE RIGHT NUMBER OF SPACES
|
|
;NOTE: THESE ARE TOLERABLE ONLY ON A FAST (9600) TERMINAL
|
|
|
|
;SUBROUTINE TO CLEAR TO END OF LINE - OUTPUTS CPL-(T0) SPACES
|
|
|
|
CLRLIN: SUBI T0,CPL ;FIND NUMBER OF SPACES TO OUTPUT
|
|
MOVNS T0
|
|
MOVEI T1," " ;GET A SPACE
|
|
IDPB T1,TY ;SPACE OVER
|
|
SOJG T0,.-1 ;DO ALL THE SPACES
|
|
POPJ P, ;DONE
|
|
|
|
;SUBROUTINE TO CLEAR TO THE END OF THE PAGE. CLEARS TO THE END OF THE LINE
|
|
;BY CALLING CLRLIN, THEN OUTPUTS CPL SPACES FOR EACH REMAINING LINE ON THE PAGE
|
|
|
|
;beware: this will probably fill up the type buffer
|
|
|
|
CLRPAG: PUSHJ P,CLRLIN ;CLEAR TO THE END OF THE CURRENT LINE
|
|
MOVEI T0,LPP ;FIND NUMBER OF LINES THAT REMAIN
|
|
SUB T0,RW
|
|
PUSH T2, ;SAVE A WORK AC
|
|
MOVEI T1," " ;GET A SPACE
|
|
CLRPG1: MOVEI T2,CPL ;CLEAR AN ENTIRE LINE
|
|
IDPB T1,TY ;SPACE OVER
|
|
SOJG T2,.-1 ;DO ALL THE SPACES FOR THIS LINE
|
|
SOJG T0,CLRPG1 ;LOOP THROUGH ALL LINES
|
|
POPJ P, ;THEN DONE
|
|
|
|
;SUBROUTINE TO GO HOME AND CLEAR THE PAGE
|
|
|
|
CLRALL: PUSHJ P,CHOME ;GO HOME
|
|
PUSH P,RW ;SAVE CURRENT ROW
|
|
SETZB RW,T0 ;NOTE THAT CURSOR IS HOME
|
|
PUSHJ P,CLRPAG ;CLEAR ENTIRE SCREEN
|
|
POP P,RW ;GET REAL ROW BACK AGAIN
|
|
POPJ P, ;DONE
|
|
|
|
|