File TELTYP.SB (8k SABR macro assembler source file)

Directory of image this file is from
This file as a plain text file

/TELTYP.SB, PAGE 1 OF 7.	(8/12/71 - C.M.MOORE, RICE U., HOUSTON)
/
/THIS FILE CONTAINS THE FOLLOWING TELETYPE I/O ROUTINES, WHICH MAY
/BE USED WITHOUT HAVING TO LOAD THE 9-PAGE LIBRARY I/O PACKAGE:
/
/THE FIRST ROUTINE CAN BE CALLED ONLY IN SABR BECAUSE IT
/REQUIRES THAT THE AC BE LOADED WITH AN ARGUMENT.
/
/TYPE	     :TYPES 6-BIT ASCII CHARACTER IN BITS 6-11 OF AC, CLEARS AC.
/
/THE REMAINING ROUTINES MAY BE CALLED IN FORTRAN OR SABR.
/INTIN IS A FUNCTIOONIN FORTRAN; ALL OTHERS ARE SUBROUTINES.
/
/CRLF		:TYPES CARRIAGE-RETURN, LINE-FEED.
/
/SPACE(N)	:TYPES N BLANKS.
/
/ALPHA(STRNG)	:TYPES STRING OF 6-BIT ASCII CHARACTERS (2 CHARS/WORD)
/		FROM STRNG UNTIL A ZERO-VALUED CHARACTER IS ENCOUNTERED.
/		 THE CHARACTERS IN A FORTRAN HOLLERITH STRING OF LESS
/		 THAN 6 CHARACTERS WILL BE FOLLOWED BY A ZERO-VALUED
/		 CHARACTER: E.G., 'HELLO'.  LONGER STRINGS MAY BE
/		 FORMED WITH SABR TEXT PSEUDO-OPS, OR BY LOADING
/		 A REAL-VALUED VECTOR WITH HOLLERITH STRINGS, EACH
/		 OF WHICH, EXCEPT FOR THE LAST, MUST BE 6 CHARACTERS
/		 IN LENGTH.  FOR EXAMPLE, THE FOLLOWING WILL TYPE THE
/		 WORDS 'THIS IS A STRING':
/			DIMENSION X(3)
/			X='THIS I'
/			X(2)='S A ST'
/			X(3)='RING'
/			CALL ALPHA(X)
/
/IOUT(NUM,IRADX):TYPES INTEGER VALUE OF NUM, USING A RADIX OF
/		 IABS(IRADX).  IF IRADX>0, NUM IS TYPED AS A SIGNED
/		 INTEGER WITH LEADING ZEROS DELETED.  IF IRADX<0, NUM IS
/		  TYPED AS AN UNSIGNED INTEGER, INCLUDING LEADING ZEROS.
/
/M=INTIN(IRADX)	:SETS M = INTEGER VALUE OF THE NUMBER TYPED ON THE
/		 TELETYPE USING A RADHX OF IRADX.
/		 THE INTEGER MAY BE PRECEDED BY A - SIGN.
/		 THE INTEGER IS TERMINATED BY TYPING A CARRIAGE-RETURN,
/		 WHICH CAUSES A CARRIAGE-RETURN AND LINE-FEED TO BE
/		 ECHOED ON THE TELETYPE.
/		 THE ROUTINE WILL ASK FOR THE NUMBER TO BE RETYPED IF
/		 RUBOUT OR AN INVALID CHARACTER IS TYPED.
/
/DIGITS ABOVE 9 FOR IOUT AND INTIN FOLLOW THE ASCII 6-BIT CODE
/SEQUENCE, AS LISTED ON THE FOLLOWING LINE:
/    0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ !"#$%&'()*+,-./
/
/
/TELTYP.RL OCCUPIES 2 PAGES OF CORE STORAGE, AND IS INCLUDED IN LIBRARY
/FILE LIB12.RL.
/

/TELTYP.SB, PAGE 2 OF 7. / LAP / OPDEF TADI 1400 OPDEF INCI 2400 OPDEF JMSI 4400 OPDEF JMPI 5400 / /GETARG FETCHES ARGUMENTS GETARG, 0 CLA CMA CLL RTL /AC=-3 TAD GETARG DCA ENTRYP TADI ENTRYP INC ENTRYP GETEM, DCA CDF1 TADI ENTRYP INCI ENTRYP INCI ENTRYP QUOT, CDF1, 0 /CHANGE TO DF SPECIFIED BY ENTRY PT DCA CDF1 TADI CDF1 INC CDF1 DCA CDFTEM TADI CDF1 DCA TEM JMS FETCH /GET ARG JMPI GETARG / /FETCH FETCHES NEXT ARG POINTED TO BY TEM BASE, FETCH, 0 DCOUNT, CDFTEM, 0 /CHANGE TO DF OF ARG TADI TEM INC TEM JMP I FETCH /CHANGE TO CURRENT DF / BACPT, ARGBAC P40, 40 P55, 55 P212, 212 /
/TELTYP.SB, PAGE 3 OF 7. / /SUBROUTINE IOUT(NUM,IRADX) ENTRY IOUT IOUT, BLOCK 2 JMS GETARG DCA CRLF TAD BACPT DCA GETARG TAD IOUT JMP GETEM ARGBAC, SMA /CHECK IF NUM IS TO SIGNED OR UNSIGNED. JMP SIGNED DCA BASE IAC JMP CHKBAS SIGNED, CIA DCA BASE TAD P40 CALL 0,TYPE /TYPE LEADING BLANK TAD CRLF SMA JMP POSNUM CIA DCA CRLF TAD P55 CALL 0,TYPE /TYPE - SIGN POSNUM, CLA CHKBAS, DCA GETARG IAC TAD BASE SPA CLA /MAKE SURE NEGATIVE OF RADIX IS < -1. JMP BASEOK CLA CMA CLL RAL /AC=-2 DCA BASE /DETERMINE # OF DIGITP OF R@ADIX IRADX THAT WILL BE REQUIRED. BASEOK, DCA DCOUNT CMA /DIVIDEND=7777 NDIGLP, JMS IDIV CLA CMA TAD DCOUNT DCA DCOUNT TAD QUOT SZA JMP NDIGLP /LOOP TO GET DIGITS DIGLUP, TAD DCOUNT DCA CRLF# TAD CRLF DCA QUOT DIGLP2, CLA TAD QUOT /DIVIDEND JMS IDIV ISZ CRLF# JMP DIGLP2 /
/TELTYP.SB, PAGE 4 OF 7. / /AC NOW CONTAINS NEXT DIGIT TO BE TYPED. /CHECK FOR LEADING ZERO DELETION. SZA JMP TYPDIG TAD GETARG SZA CLA JMP TYPDIG IAC CLL TAD DCOUNT P60, SZA CLA SNL JMP INCDIG TYPDIG, TAD P60 CALL 0,TYPE INC GETARG INCDIG, ISZ DCOUNT JMP DIGLUP RETRN IOUT / /SUBROUTINE CRLF ENTRY CRLF CRLF, 0 ENTRYP, 0 CLA CLL CML IAC RAL /AC=3 TAD P212 CALL 0,GENIO TAD P212 CALL 0,GENIO RETRN CRLF / /UNSIGNED INTEGER DIVISION ROUTINE /ENTER WITH DIVIDEND IN AC, NEGATIVE OF DIVISOR IN BASE /EXIT WITH REMAINDER IN AC, QUOTIENT IN QUOT TEM, IDIV, 0 DCA 7 /TEMP STORAGE DCA QUOT /ZERO QUOTIENT TAD 7 SKP DIVLUP, INC QUOT CLL CML SNA JMPI IDIV TAD BASE /DIVISOR SMA JMP DIVLUP SNL JMP DIVLUP DCA 7 TAD BASE CIA TAD 7 AAPAG1, JMPI IDIV / /END OF CORE PAGE 1. /
/TELTYP.SB, PAGE 5 OF 7. / /CONSTANTS FOR 2ND CORE PAGE CPAGE 200 GETP, GETARG FETCHP, FETCH P240, 240 P162, 162 P100, 100 P77, 77 P12, 12 P3, 3 M40, -40 M60, -60 M255, -255 M260, -260 M377, -377 / /SUBROUTINE TYPE ENTRY TYPE TYPE, BLOCK 2 AND P77 TAD M40 SPA TAD P100 TAD P240 CALL 0,GENIO RETRN TYPE / /SUBROUTINE SPACE(N) ENTRY SPACE BASE2, /HOLDS RADIX VALUE FOR INTIN SPACE, BLOCK 2 JMSI GETP CIA SNA JMP SPBAC /ZERO SPACES DCA TYPE SPLUP, TAD P240 CALL 0,GENIO ISZ TYPE JMP SPLUP SPBAC, RETRN SPACE /
/TELTYP.SB, PAGE 6 OF 7. / /FUNCTION INTIN(IRADX) ENTRY INTIN INTIN, BLOCK 2 JMSI GETP SPA SNA CLA IAC DCA BASE2 ZIPNUM, DCA ALPHA /CHECK FOR LEADING - SIGN STA DCA ALPHA# JMS READR /READ CHAR & STORE IN SPACE# TAD SPACE# TAD M255 SZA CLA JMP GETN2 DCA ALPHA# /GET NEXT CHAR, CHECK FOR RUBOUT, CR. GETNX, JMS READR GETN2, TAD SPACE# TAD M377 SNA /***** CHANGE THE FOLLOWING INSTRUCTION TO 'JMP GETNX' IF YOU WISH /***** INTIN TO IGNORE RUBOUTS, RATHER THAN TO ASK FOR THE NUMBER /***** TO BE REPEATED. (FOR EXAMPLE, WHEN READING PAPER TAPE WHICH /***** HAS BEEN CORRECTED WITH RUBOUTS). JMP BADINT /RUBOUT THE NUMBER TAD P162 SNA JMP CR /END OF INPUT TAD P3 SNA JMP GETNX /IGNORE LINE-FEED TAD P12 SNA JMP GETNX /IGNORE LEADER-TRAILER CODE (OCTAL 200) /CHECK IF VALID DIGIT TAD M60 SPA JMP BADINT CIA TAD BASE2 SPA SNA CLA JMP BADINT /ADD DIGIT TO NUMBER TAD ALPHA CALL 1,MPY ARG BASE2 TAD M260 TAD SPACE# DCA ALPHA JMP GETNX /
/TELTYP.SB, PAGE 7 OF 7. / /READR READS NEXT CHAR, STORES IT IN SPACE# READR, 0 CLA CLL CML RTR /AC=2000 CALL 0,GENIO DCA SPACE# JMP I READR / /ASK THAT INPUT BE REPEATED (RUBOUT, INVALID CHARACTER) BADINT, CALL 0,CRLF CALL 1,ALPHA ARG REPEAT JMP ZIPNUM REPEAT, TEXT /REPEAT:@/ / /CR ENCOUNTERED, RETURN SIGNED # IN AC CR, TAD ALPHA ISZ ALPHA# /CHECK SIGN CIA RETRN INTIN / /SUBROUTINE ALPHA(STRNG) ENTRY ALPHA ALPHA, BLOCK 2 JMSI GETP /GET 1ST PAIR OF CHARACTERS ALUP, DCA SPACE# TAD SPACE# RTR RTR RTR JMS PCHAR /CHECK & TYPE 1ST CHAR OF PAIR TAD SPACE# JMS PCHAR /CHECK & TYPE 2ND CHAR JMSI FETCHP /GET NEXT PAIR OF CHARACTERS JMP ALUP PCHAR, 0 AND P77 SNA JMP AAPAG2 /END OF STRING CALL 0,TYPE /TYPE NEXT CHAR JMPI PCHAR AAPAG2, RETRN ALPHA / /END OF 2ND CORE PAGE END



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search