File LIST.12

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

/ LISTING PROGRAM FOR OS/8

/ WRITTEN BY:
/ CLYDE G. ROBY, JR.
/ DEPARTMENT OF MEDICINE
/ WEST VIRGINIA UNIVERSITY
/ MORGANTOWN, WEST VIRGINIA
/ OCTOBER, 1970

/ MODIFIED BY HAROLD L. PEARSON, JR.
/ APRIL 7, 1971
/ AUGUST 1, 1972
/ DEPT. OF SURGERY

/ MODIFIED BY CGR  4/9/71

/ MODIFIED BY CGR  1/21/74 (VERSION 2)
/ ADDED IN LARGE LETTERS
/ CLEANED UP PAGE BREAKS

/ MODIFIED BY CGR 4/3/74 (VERSION 3)
/ CAPABILITY FOR MULTIPLE COPIES (=N OPTION)

/ MODIFIED BY CGR 5/15/74 (V4)
/ PAGE BREAK ACROSS ENTIRE PAGE IF TTY

	VERSION="4	/CURRENT VERSION OF LIST

FIXMRI INC=	2000	/ISZ WHEN NOT EXPECTED TO SKIP
FIXTAB

*20

PAGEB,	0	/0 TO TYPE OUT PAGE BREAK
ENDQ,	0	/END OF INPUT QUESTION LINE IF NON-ZERO
TITLEQ,	0	/0 IF TO PRINT OUT TITLE
CRSWIT,	7777	/0 IF NOT TO PRINT CR
OPTWD1,	0	/1ST OPTION WORD FROM CD
OPTWD2,	0	/2ND OPTION WORD FROM CD

	DECIMAL
MARTP1=	2	/# LINES FROM TOP OF PAGE TO TITLE
MARTP2=	3	/# LINES FROM TITLE LINE TO BODY
PAGSIZ=	66	/# LINES PER PAGE
MARBOT=	5	/# LINES FROM END OF BODY TO BOTTOM OF PAGE
BODY=	PAGSIZ-MARTP1-MARTP2-MARBOT

TP1,	-MARTP1
TP2,	-MARTP2
BDY,	-BODY
BOT,	-MARBOT
	OCTAL

LINSIZ,	0
COUNT,	0
TEMP,	0
NUMBER,	0
NUM1,	0
CTR,	0
UASCII,	0
TOPSW,	0
PAGEN,	0
PAGEP,	0
POINT,	0
CHARCT,	0
LINECT,	0
CHAR,	0
NSPACE,	0
ODNUM,	0
LZERO,	0
DIGCTR,	0
DIGIT,	0
OCTEMP,	0
LSWIT,	0		/1 IF NO LARGE LETTERS
LEFTAB,	0		/INITIAL LEFT MARGIN
NCOPY,	0		/NO. OF COPIES (=N OPTION)

DIGTAB,	-1750
	-144
	-12

GET=	JMS I .; INPUT
PUT=	JMS I .; OUTPUT
TYPE=	JMS I .; TYPEIT
PUTC=	JMS I .; XPUTC

TCRLF=	JMS .
	0
	TAD [215]
	TYPE
	TAD [212]
	TYPE
	JMP I .-5

DEVCHK,	0		/CHECK OUTPUT DEVICE FOR TTY:
	CLA IAC
	DCA TTYSWT	/SET FOR NON-TTY:
	TAD M81
	DCA LINSIZ
	CDF 10
	TAD I [7600]
	AND C17
	TAD PDCBM1
	DCA TEMP
	TAD I TEMP
	CDF 00
	SZA CLA
	JMP I DEVCHK
	DCA TTYSWT	/CLEAR FOR TTY:
	JMP I DEVCHK

C17,	17
PDCBM1,	7760-1
TTYSWT,	0		/=0 FOR TTY:
M73,	-111
M81,	-121

GETIT=	JMS .
	0
	CIF 10
	JMS I (XXGET)
	JMP I .-3

PUTIT=	JMS .
	0
	CIF 10
	JMS I (XXPUT)
	JMP I .-3

CLOSE=	JMS .
	0
	CIF 10
	JMS I (XXCLOSE)
	JMP I .-3

PAGE

/ LIST STARTS HERE AT 00200 JMS WHOQ /OUTPUT CURRENT VERSION BEGIN, CLA CLL TAD (-MARTP1 DCA TP1 TAD (-MARTP2 DCA TP2 TAD (-BODY DCA BDY TAD (-MARBOT DCA BOT JMS SETUPL /CALL COMMAND DECODER AND SET UP I/O JMS DEVCHK /SET BREAK OPTIONS FOR DEVICE TYPE CDF 10 TAD I (7643) DCA OPTWD1 /SAVE FIRST OPTION WORD TAD I (7644) DCA OPTWD2 /SAVE SECOND OPTION WORD TAD I (7646) /=N OPTION SNA IAC /IF ZERO, ASSUME 1 COPY CIA DCA NCOPY /NO. OF COPIES CDF 00 TAD OPTWD2 /LOOK FOR /X OPTION SWITCH CLL RAR /PUT IT IN LINK BIT SNL CLA /IS THERE A /X ? JMP BEGIN2 /NO TAD OPTWD1 /YES, SET THE /A SWITCH, CLL RAL /WHICH ALSO SETS /N SWITCH STL RAR DCA OPTWD1 BEGIN2, TAD OPTWD1 /LOOK FOR OPTION CHAR "A" SMA CLA JMP .+5 /NOT "A" TAD OPTWD2 /IF "A", THEN RTL /GET OPTION CHAR "N" TO LINK STL RTR /SET "N", PUT IT BACK DCA OPTWD2 STL RTR /SET PAGEB IF /B AND OPTWD1 DCA PAGEB /IF /B, DO NOT TYPE PAGE BREAK TAD OPTWD2 /CHECK FOR "M" TO SET MARGINS SPA CLA /FOR ADH LIST JMS ADHSET TAD (PAGTAB-1) DCA 10 TAD (-30) DCA COUNT TAD OPTWD2 AND (400) /LOOK FOR OPTION CHAR "P" SZA CLA JMP PPAGES /IF /P, ASK FOR PAGES TO PRINT CLA IAC DCA I 10 /SET UP PAGE TABLE TO PRINT ALL STL CLA RTR /2000 TO ACC DCA I 10 DCA I 10 /0 TO END THE TABLE JMP OPTV /GO CHECK FOR /V PPAGES, JMS GETMESS /ASK FOR PARTIAL PAGES ENTPAG /TYPE OUT THIS MESSAGE FIRST TAD [TITLEM-1] DCA 10 TAD (PAGTAB-1) DCA 11 DCA ENDQ /NOT END OF LINE YET PPAGE0, DCA NUM1 /NOT AN A-B TYPE NXTNUM, JMS ASCBIN /CONVERT ASCII TO BINARY SZA JMP PPAGE1 STA DCA ENDQ /END OF LINE JMP PPAGE2 /GET LAST PAGE OR PAGES PPAGE1, TAD (-255) /IS IT A MINUS SIGN? SZA CLA JMP PPAGE2 /NOT MINUS TAD NUMBER /A MINUS, SET UP FOR CONSECUTIVE PAGES DCA NUM1 JMP NXTNUM PPAGE2, TAD NUM1 /CHECK FOR CONSECUTIVE SNA JMP SET1 /NO, JUST SET 1 PAGE CIA /CONSECUTIVE FROM NUM1 TO NUMBER TAD NUMBER SPA CLA JMP PPAGES /ASK AGAIN, BAD ARGS TAD NUM1 PPAGE3, DCA I 11 /FIRST PAGE OF CONSECUTIVE TAD NUMBER DCA I 11 /SECOND PAGE OF CONSECUTIVE ISZ COUNT /PAGE TABLE FULL? SKP JMP PPAGE4 /YES, PREPARE TO CHECK /V TAD ENDQ /END OF INPUT LINE? SNA CLA JMP PPAGE0 /NOT END OF LINE, CHECK FOR MORE PAGES PPAGE4, DCA I 11 /0 ENDS THE TABLE JMP OPTV /CHECK OPTION "V" SET1, TAD NUMBER /SET 1 PAGE, USE NUMBER BOTH TIMES JMP PPAGE3 BREAK, 0 TAD [215] PUT TAD [-106] DCA COUNT TAD ("-) /OUTPUT 6 "-" PUT ISZ COUNT JMP .-3 TAD [215] /THEN A CARRIAGE RETURN PUT JMP I BREAK PAGE
OPTV, TAD OPTWD2 AND (4) /LOOK FOR OPTION CHAR "V" SZA CLA JMP OPTVT /YES, SET UP VARIABLE TABS TAD OPTWD1 AND (100) /NO, LOOK FOR OPTION CHAR "F" SZA CLA JMP OPTF /YES, SET UP FIXED TABS TAD (TABTAB) /NO, SET UP FIXED TABS AT 8 COLUMNS DCA POINT TAD (-204) /132 DECIMAL DCA COUNT STA DCA I POINT /START IN COLUMN 1 STDTAB, TAD [-10] DCA NUMBER /SET TABS EVERY 8 COLUMNS TLOOP, TAD NUMBER TAD I POINT INC POINT DCA I POINT /SAVE NEXT TAB POSITION ISZ COUNT JMP TLOOP JMP OPTT /GO LOOK FOR "T" OPTF, JMS GETMESS /GET INPUT LINE FOR FIXED TABS ENTABF /MESSAGE TO PRINT TAD [TITLEM-1] DCA 10 TAD (TABTAB) DCA POINT /SET UP POINTER AND COUNTER TAD (-204) DCA COUNT STA DCA I POINT JMS ASCBIN /GET FIXED TAB NUMBER CLA /DON'T CARE WHAT ENDED IT TAD NUMBER CIA JMP STDTAB+1 /GO FILL TABLE OPTVT, JMS GETMESS /GET INPUT LINE FOR TABS ENTABV /MESSAGE TO PRINT OUT TAD [TITLEM-1] DCA 10 TAD (TABTAB) DCA POINT TAD (-204) /132 DECIMAL DCA COUNT /DO NOT OVERFLOW TABLE DCA ENDQ /NOT END OF LINE YET STA DCA I POINT /SAVE TAB POSITION GETTAB, JMS ASCBIN /GET A TAB POSITION DCA ENDQ /END OF LINE ENCOUNTERED TAD I POINT CIA TAD NUMBER SPA JMP OPTV /ERROR IN INPUT LINE SZA CLA INC POINT /NOT EQUAL TO LAST TAB TAD NUMBER CIA DCA I POINT /SAVE TAB IN TABLE ISZ COUNT /ALL TAB POSITIONS FILLED? SKP JMP OPTT /YES, GET OPTION "T" TAD ENDQ SZA CLA JMP GETTAB /GET NEXT TAB JMP STDTAB /GO FILL REST OF TABLE OPTT, DCA LEFTAB /INIT LEFT TAB TO 0 TAD OPTWD2 /LOOK FOR /T AND (20) SNA CLA JMP OPTL /NO /T, CHECK /L OPTION JMS GETMESS /GET THE TAB ENTABT /USE THIS MESSAGE TAD [TITLEM-1] /FROM TITLE BUFFER DCA 10 JMS ASCBIN /GET THE NUMBER CLA /IGNORE CHAR THAT ENDED IT TAD NUMBER DCA LEFTAB /INITIALIZE LEFT MARGIN TAB OPTL, CLA IAC AND OPTWD1 /IS /L OPTION GIVEN? DCA LSWIT /IF 1, NO LARGE LETTERS TAD TTYSWT SZA CLA /OUTPUT TO TELETYPE? JMP OPTN /NO CLA IAC /YES, NO LARGE LETTERS DCA LSWIT OPTN, STL RTR /TEST FOR /N AND OPTWD2 /LOOK FOR OPTION CHAR "N" DCA TITLEQ /0 IF TO PRINT TITLE TAD TITLEQ SZA CLA JMP START /IF /N, DO NOT ASK FOR TITLE JMS GETMESS /ASK FOR TITLE ENTITL /USE THIS MESSAGE JMP START /GO START MAIN PROGRAM / OUTPUT LINE FEEDS FROM "LARGE" SUBRS LFOUT, 0 DCA LFOCTR /SAVE NO. OF LINE FEEDS TO OUTPUT LFOUT1, TAD [212] PUTC ISZ LFOCTR JMP LFOUT1 JMP I LFOUT LFOCTR, 0 PAGE
/ SUBROUTINE TO OUTPUT CHARS / CHECK FOR SPECIAL CHARACTERS AND SPEED UP THE OUTPUT XPUTC, 0 DCA UASCII /SAVE ASCII CHAR TAD TOPSW /MUST WE DO TOP OF PAGE BREAK? SZA CLA XPUTC1, JMS TBREAK /YES, GO DO IT TAD UASCII /GET ASCII CHAR BACK TAD [-212] SNA JMP LFEED /LINE FEED TAD [212-215] SNA JMP CARRET /CARRIAGE RETURN TAD [215-240] SNA JMP SPACE /SPACES TAD [240-211] SNA JMP OUTTAB /TAB TAD [211-214] SNA CLA JMP FFEED /FORM FEED TAD NSPACE /ANY SPACES YET? SNA JMP TYPOUT /NO, GO TYPE OUT CHAR CIA DCA NSPACE /YES, MAKE A COUNTER TAD [" ] PUT ISZ NSPACE /OUTPUT N SPACES JMP .-3 TYPOUT, STA DCA CRSWIT /PRINT CARRIAGE RETURN TAD UASCII /OUTPUT ASCII CHAR PUT JMS LCHECK /CHECK LINE OVERFLOW XPUTCR, DCA NSPACE /NO SPACES JMP I XPUTC LFEED, TAD [212] /OUTPUT A LINE FEED PUT ISZ LINECT /AT BOTTOM OF PAGE JMP LFEED3 TAD PAGEN SPA SNA CLA /GET NEXT CHAR ON PAGE? JMP LFEED4 /NO GET TAD [-214] /CHAR AFTER LINE FEED A FORM FEED? SNA JMP FFEED /YES, GO TO FORM FEED ROUTINE TAD [214] /NO, RESTORE CHAR TO ACC DCA UASCII JMS BBREAK /OUTPUT PAGE BREAK TAD OPTWD1 AND [10] /LOOK FOR OPTION CHAR "I" SZA CLA INC PAGEN /IF /I, INCREMENT PAGE# JMP XPUTC1 /GO OUTPUT TITLE AND CHECK CHAR LFEED4, JMS BBREAK /DO BOTTOM OF PAGE BREAK LFEED3, CLA IAC DCA CHARCT /INITIALIZE CHAR COUNTER TO 1 TAD (TABTAB) DCA POINT /TAB TABLE POINTER TAD OPTWD2 AND (20) /CHECK FOR OPTION /T SNA CLA JMP XPUTCR /NO SPACES EITHER TAD PAGEN /OUTPUTTING LARGE LETTERS? SPA SNA CLA JMP XPUTCR /NO, NO LEADING SPACES TAD LEFTAB /YES, /T SPECIFIED DCA NSPACE /USE AS LEFT MARGIN JMP I XPUTC /RETURN TO CALLER FFEED1, TAD TOPSW /AT TOP OF PAGE? SZA CLA JMP LFEED3 /YES, RESET SOM E PARMS DCA PAGEP /RESET PARTIAL PAGE# TO 0 JMS BBREAK /OUTPUT BOTTOM OF PAGE BREAK INC PAGEN /INCREMENT PAGE# NOP STA DCA TOPSW /MUST OUTPUT TOP OF PAGE BREAK DCA CRSWIT JMP LFEED3 CARRET, ISZ CRSWIT /OUTPUT THE CARRIAGE RETURN? JMP LFEED3 /NO, GO START NEW LINE TAD [215] /YES, OUTPUT IT PUT JMP LFEED3 SPACE, INC NSPACE /INCREMENT NO. OF SPACES JMS LCHECK /CHECK LINE OVERFLOW JMP I XPUTC INCTAB, CLA INC POINT /POINT TO NEXT TAB POSITION OUTTAB, TAD CHARCT TAD I POINT SMA JMP INCTAB /NOT YET TO TAB POSITION DCA COUNT /SAVE COUNT TO TAB POSITION INC NSPACE /"OUTPUT" A SPACE JMS LCHECK /CHECK LINE OVERFLOW ISZ COUNT JMP .-3 JMP I XPUTC / SUBROUTINE TO BOTTOM OF PAGE BREAK BBREAK, 0 TAD PAGEB /OUTPUT "BOTTOM OF PAGE" BREAK? TAD TTYSWT SZA CLA JMP PUTFF /NO, JUST OUTPUT A FORM FEED TAD LINECT JMS PUTLF /GO TO BOTTOM OF PAGE TAD BOT JMS PUTLF /OUTPUT "BOT" LINE FEEDS JMS BREAK /OUTPUT 6 "-" PUTFF, TAD [214] /OUTPUT FORM FEED PUT DCA LINECT /CLEAR LINECT JMP I BBREAK PAGE
GETMESS, 0 CLA CLL TAD (TYPE) DCA OUTIT /OUTPUT TO TELETYPE IN SUBR. "TYPMESS" TCRLF TAD I GETMESS INC GETMESS DCA .+2 JMS TYPMESS /OUTPUT THE MESSAGE TO USER 0 TAD (TITLEM) DCA POINT /POINT TO CURRENT CHAR POISITION DCA I POINT TAD (-77) DCA COUNT /NO. OF CHARS IN BUFFER DCA RUBFLG /NO RUBOUT YET TITLIN, JMS KBDIN /GET A KEYBOARD CHAR TAD (-377) SNA JMP RUBOUT /RUBOUT, DELETE ONE CHAR TAD (377-215) SNA JMP ENDTIT /CARRIAGE RETURN, END THE TITLE TAD (215-212) SNA JMP ECHOIT /LINE FEED, ECHO THE TITLE TAD (212-225) SNA JMP CTRLU /CTRL/U, DELETE ENTIRE LINE TAD (225) /REGENERATE THE CHAR DCA I POINT TAD RUBFLG /PROCESSING A RUBOUT? SNA CLA JMP TITL2 /NO TAD ("\) /YES, FIRST OUTPUT A BACKSLASH TYPE DCA RUBFLG /NO RUBOUTS NOW TITL2, TAD I POINT TYPE INC POINT /INCREMENT POINTER FOR NEXT CHAR DCA I POINT /A ZERO INDICATES EOM ISZ COUNT /IS BUFFER FULL? JMP TITLIN /NO, GET NEXT CHAR ENDTIT, TCRLF TAD (PUT) /RESET FOR SYSTEM PUT DCA OUTIT JMP I GETMESS CTRLU, TAD ("^) /ECHO "^U" TYPE TAD ("U) TYPE JMP GETMESS+1 /GET NEW LINE TYPEIT, 0 TLS TSF JMP .-1 TCF CLA CLL JMP I TYPEIT RUBOUT, TAD POINT TAD (-TITLEM) /AT START OF BUFFER? SNA CLA JMP TITLIN /YES, DO NOT ECHO TAD RUBFLG /FIRST RUBOUT? SZA CLA JMP .+3 /NO TAD ("\) /YES, ECHO A BACKSLASH TYPE STA DCA RUBFLG /NOW PROCESSING A RUBOUT STA TAD POINT DCA POINT /DECREMENT BUFFER POINTER BY ONE TAD I POINT /ECHO CHAR JUST DELETED TYPE DCA I POINT /ZERO TO INDICATE EOM STA TAD COUNT DCA COUNT /DECREMENT COUNTER, TOO JMP TITLIN /GET CHARS FOR TITLE RUBFLG, 0 ECHOIT, TCRLF JMS TYPMESS TITLEM JMP TITLIN KBDIN, 0 KSF JMP .-1 KRS TAD (-203) SNA CLA JMP I [7600] /CTRL/C, RETURN TO SYSTEM KRB /RESTORE CHAR TO ACC JMP I KBDIN /RETURN WITH CHAR IN ACC TYPMESS, 0 STA TAD I TYPMESS INC TYPMESS DCA 11 TAD I 11 SNA JMP I TYPMESS OUTIT, PUT JMP .-4 EXTBUF, ZBLOCK 7 PAGE
/ SUBROUTINE TO OUTPUT A CHAR TO OUTPUT FILE / CHECK TO SEE IF WE ARE LISTING THIS PAGE OUTPUT, 0 DCA CHAR /SAVE THE CHAR KSF JMP OUTQ /KEY NOT STRUCK, GO OUTPUT PAGE KRS /READ IN CHAR TAD (-203) SNA CLA JMP I [7600] /CTRL/C, RETURN TO SYSTEM KCC /CLEAR FLAG OUTQ, TAD PAGEN /IS PAGE # <= 0 ? SPA SNA CLA JMP OUTQIT /YES, GO OUTPUT CHAR TAD (PAGTAB-1) /NO, CHECK PAGE TABLE DCA 17 TAD (-30) DCA OUTQCT /SET UP COUNTER OUTQ1, TAD I 17 /FIRST OF PAIR OF PAGE NUMBERS SNA JMP I OUTPUT /END OF TABLE, NOT PRINTING THIS PAGE CIA TAD PAGEN SPA CLA /PAGE # < FIRST NUM? JMP I OUTPUT /YES, NOT PRINTING THIS PAGE TAD I 17 /2ND OF PAIR CIA TAD PAGEN SMA SZA CLA /PAGE # > SECOND NUM? JMP OUTQ1 /YES, MAYBE ANOTHER PAIR TO CHECK OUTQIT, TAD CHAR /O.K. TO OUTPUT THE CHAR PUTIT /YES, OUTPUT THE CHAR JMP I OUTPUT OUTQCT, 0 / SUBROUTINE TO OUTPUT TOP OF PAGE BREAK TBREAK, 0 TAD PAGEB /OUTPUT A PAGE BREAK? SZA CLA JMP NOBREAK /NO, GO RESET LINE COUNTER TAD OPTWD1 /ARE WE DOING AN ASM LISTING (/A) ? SPA CLA JMP ASMBRK /YES TAD TP1 /GET MARGIN FROM TOP JMS PUTLF /OUTPUT "TOPM" LINE FEEDS TAD PAGEN SPA SNA CLA /IS PAGE # <= 0 ? JMP FBRK2 /YES, NO TITLE TAD TITLEQ /OUTPUT TITLE LINE? SZA CLA JMP FBREAK /NO, GO FINISH THE BREAK TAD LEFTAB /YES DCA NSPACE /INITIALIZE NO. OF SPACES ON LINE TAD NSPACE SNA JMP TBRK2 /NO LEFT MARGIN CIA DCA STARCT /USE CTR FOR NO. OF LEADING SPACES TAD [" ] PUT ISZ STARCT JMP .-3 TBRK2, JMS TYPMESS /YES, OUTPUT PAGE# PAGEM TAD PAGEN JMS OCTDEC /OUTPUT PAGE NUMBER TAD OPTWD1 AND [10] /LOOK FOR OPTION CHAR "I" SZA CLA JMP NOPART /IF /I, ONLY LIST PAGE NO. (INTEGER) TAD [".] /OTHERWISE, WANT PARTIAL PAGE, TOO PUT INC PAGEP /INCREMENT PARTIAL PAGE# TAD PAGEP JMS OCTDEC /OUTPUT THE PARTIAL PAGE# NOPART, JMS TYPMESS /OUTPUT 2 SPACES SPACE2 JMS TYPMESS /OUTPUT THE TITLE TITLEM TAD [DATBUF-2-1] /NO, PREPARE TO OUTPUT DATE DCA 10 FBRK1, TAD I 10 SNA JMP FBRK2 PUT JMP FBRK1 FBRK2, TAD [215] PUT FBREAK, TAD OPTWD1 SPA CLA /SKIP IF NOT /A CLL STA RAL /SET AC = -2 TAD BDY DCA LINECT TAD OPTWD1 /SKIP IF NOT /A SPA CLA STL RTL /SET AC=2 TAD TP2 JMS PUTLF /OUTPUT THE LINE FEEDS FBRK4, DCA TOPSW /NO LONGER AT TOP OF PAGE JMP I TBREAK ASMBRK, CLL STA RAL /-2 TO ACC NOBREAK, TAD BDY DCA LINECT /RESET LINE COUNT JMP FBRK4 STARSV, 0 DCA 10 /ADDR OF BUFFER TO SAVE STARS TAD [-6] /NO. OF ASTERISKS TO SAVE DCA STARCT TAD ["*] DCA I 10 /SAVE IN APPROPRIATE BUFFER ISZ STARCT JMP .-3 DCA I 10 /0 ENDS THE BUFFER JMP I STARSV STARCT, 0 NAMBUF, ZBLOCK 7 PAGE
/ / FORM FEED HAS BEEN INPUT / IF IT IS AN ASSEMBLY LISTING, / THEN "READ" THE PAL-8 OR PAL-12 / PAGE NUMBER FROM THE HEADING / FFEED, TAD OPTWD1 /IS THIS AN ASSEMBLY LISTING? SMA CLA JMP FFEED1 /NO, REGULAR FORM FEED TAD PAGEN SPA SNA CLA /PRINTING REGULAR LISTING? JMP FFEED1 /NO JMS BBREAK /OUTPUT BOTTOM OF PAGE BREAK STA DCA TOPSW /TOP OF PAGE BREAK TAD (-73) DCA COUNT /NO. OF CHARS TO PAL8 OR PAL12 PAGE# TAD (ASMBUF-1) /LOC TO SAVE THEM DCA 10 GET DCA I 10 /SAVE CHARS IN BUFFER ISZ COUNT JMP .-3 GET /NOW HUNT FOR EOL TAD [-215] SNA JMP .+4 TAD [215] DCA I 10 /OTHERWISE SAVE CHARS JMP .-6 /AND GET SOME MORE DCA I 10 /IF EOL, END BUFFER WITH 0 TAD (ASMBUF+73-1) DCA 10 JMS ASCBIN /GET THE PAGE NUMBER CLA /IGNORE CHAR THAT ENDED IT TAD NUMBER DCA PAGEN /SAVE THE PAGE NUMBER DCA CRSWIT TAD TTYSWT /OUTPUTTING TO TTY? SZA CLA JMP .+5 /NO TAD [212] /YES, OUTPUT A COUPLE OF LINE FEEDS PUT TAD [212] PUT TAD (ASMBUF-1) DCA 10 /PREPARE TO OUTPUT THE TITLE LINE TAD I 10 SNA JMP .+3 /0, END OF LINE; CONTINUE WITH CR/LF PUT JMP .-4 /CONTINUE TO OUTPUT HEADING ISZ LINECT /DOES NOT SKIP OUT JMP CARRET+2 /OUTPUT CR, THEN GET LINE FEED ASCBIN, 0 CLA CLL GETNUM, DCA NUMBER /UPDATE THE NUMBER TAD I 10 /GET AN ASCII CHAR FROM BUFFER SNA JMP I ASCBIN /ZERO INDICATES END OF INPUT LINE TAD (-272) SPA JMP .+3 TAD (272) JMP I ASCBIN /NOT DIGIT, RET WITH CHAR IN ACC TAD (272-260) SMA JMP .+3 TAD ["0] JMP I ASCBIN /NOT DIGIT, RET WITH CHAR IN ACC DCA TEMP /SAVE DIGIT TAD NUMBER /10X = (4X + X) * 2 CLL RTL TAD NUMBER CLL RAL TAD TEMP /ADD IN CURRENT DIGIT JMP GETNUM /UPDATE NUMBER SETUPL, 0 CIF 10 JMS I (SETUP) 0 /NO EXTENSION ENDATA /END-OF-FILE ROUTINE TAD [DATBUF-1] DCA 10 CDF 10 TAD I (MDATE) /GET SYSTEM DATE CDF 00 SNA JMP SETUP3 /NO, DATE GIVEN, FILL WITH "***" DCA SETUPT /SAVE THE DATE TAD SETUPT CLL RTL; RTL; RAL JMS DATECV TAD SETUPT RTR; RAR JMS DATECV /SAVE DAY PART TAD ["7] DCA I 10 TAD SETUPT AND [7] TAD ["0] DCA I 10 /SAVE YEAR JMP SETUP5 SETUP3, TAD [-10] DCA SETUPC TAD ["*] DCA I 10 /FILL BUFFER WITH STARS ISZ SETUPC JMP .-3 SETUP5, DCA I 10 /0 ENDS THE BUFFER JMS SETNAM /FIX UP FILENAME AND EXTENSION JMP I SETUPL SETUPT, 0 SETUPC, 0 PAGE
INPUT, 0 GETIT /GET AN INPUT CHAR AND (177) /CHECK 7 BIT ASCII SZA TAD (-177) /CHECK FOR RUBOUT SNA JMP INPUT+1 /IGNORE ZERO AND RUBOUT CODES TAD (177+200) /RESTORE CHAR TO ACC JMP I INPUT DECIMAL ADHSET, 0 /RESET MARGINS FOR ADH TAD (-6-MARTP1) DCA TP1 TAD (-0-MARTP2) DCA TP2 TAD (+6+0-BODY) DCA BDY JMP I ADHSET OCTAL / ASCII STRINGS FOR TYPOUTS ENTITL, ASCII "ENTER TITLE" 215; 212; 0 ENTPAG, ASCII "ENTER PAGES" 215; 212; 0 ENTABV, ASCII "ENTER VARIABLE TABS" 215; 212; 0 ENTABF, ASCII "ENTER FIXED TAB" 215; 212; 0 ENTABT, ASCII "ENTER LEFT TAB" 215; 212; 0 PAGEM, ASCIIZ "PAGE " SPACE2, 240;240;0 LISTM, ASCII "LIST V" VERSION; 215; 212; 0 PAGE
/ SUBROUTINE TO PRINT OUT THE FILE NAME AND EXTENSION / IN LARGE LETTERS, ALSO THE SYSTEM DATE LARGE, 0 TAD [-10] JMS LFOUT /OUTPUT 8 LINE FEEDS JMS LARGEO /OUTPUT THE NAME NAMBUF 7777 TAD I (EXTBUF) SNA CLA /ANYTHING IN EXTENSION BUFFER? JMP LARGE2 /NO TAD (-4) /YES JMS LFOUT /FIRST, OUTPUT 4 LINE FEEDS JMS LARGEO /THEN OUTPUT THE ENTENSION EXTBUF 7777 LARGE2, TAD [-6] JMS LFOUT /OUTPUT SOME MORE BLANK LINES JMS LARGEO /THEN OUTPUT THE DATE DATBUF 0000 JMP I LARGE /RETURN TO CALLER / MAIN SUBROUTINE TO USE PATTERN WORDS TO OUTPUT LARGE CHARS LARGEO, 0 TAD I LARGEO INC LARGEO DCA LARGPT /POINTS TO OUTPUT BUFFER TAD I LARGEO INC LARGEO DCA LARGSW /THE SWITCH FOR EXTRA LARGE OR LARGE TAD [-6] DCA LGCTR1 /NO. OF LINES PER CHAR DCA LGWORD /1ST OF 3 PATTERN WORDS DCA LGHALF /START IN LEFT HALF LARGA, TAD LARGSW /EXTRA LARGE LETTERS? CLL RAL /MAKE 7777 A 7776 (-2) SNL /ANSWER IN LINK BIT STA /NO, JUST 1 LINE DCA LARGCT /SAVE THE CTR LARG0, TAD LARGPT DCA LGPTR1 /POINTS TO CHARS TO OUTPUT LARG1, TAD I LGPTR1 /GET A CHAR SNA JMP LARG5 /END OF LINE TAD [-240] DCA LGTMP /FOR INDEX INTO TABLE TAD LGTMP CLL RAL TAD LGTMP TAD (PWORDS) /PATTERNS IN FIELD 1 TAD LGWORD /CURRENT WORD OF 3-WORD GROUP DCA LGPTR2 TAD LGHALF /WHICH HALF TO DO? SNA CLA JMP LGLEFT /0, LEFT HALF CDF 10 /7777, RIGHT HALF TAD I LGPTR2 /GET A PATTERN WORD FROM FIELD 1 CDF 00 CLL RTL; RTL; RTL JMP LARG2 LGLEFT, CDF 10 TAD I LGPTR2 CDF 00 LARG2, AND (7700) /JUST WANT GOOD PART DCA LGTMP TAD [-6] /NO. OF BITS TO PROCESS DCA LGCTR2 LARG3, TAD LGTMP CLL RAL DCA LGTMP SNL /PRINT THE CHAR? JMP .+3 /NO, PRINT A SPACE TAD I LGPTR1 /YES, GET THE CHAR TO PRINT SKP TAD [" ] DCA LGCHAR /SAVE CHAR TO PRINT TAD LGCHAR PUTC TAD LARGSW /EXTRA LARGE CHARS? SNA CLA JMP .+3 /NO TAD LGCHAR /YES, OUTPUT IT AGAIN PUTC ISZ LGCTR2 /ALL CHARS ACROSS FOR THIS ONE? JMP LARG3 /NO, GET NEXT BIT TAD [" ] PUTC /OUTPUT A SPACE TAD LARGSW /ARE WE DOING REGULAR LARGE? SZA CLA JMP LARG4 /NO, EXTRA LARGE, NO MORE SPACES TAD [" ] PUTC TAD [" ] PUTC LARG4, INC LGPTR1 /NEXT CHAR ON LINE JMP LARG1 LARG5, TAD [215] /OUTPUT CR/LF COMBO PUTC TAD [212] PUTC ISZ LARGCT /ENOUGH LINES OUT? JMP LARG0 /NO, GO DO NEXT LINE TAD LGHALF /END OF LINE CMA DCA LGHALF /COMPLEMENT HALF SWITCH TAD LGHALF /ARE WE ON A NEW WORD? SNA CLA INC LGWORD /YES, POINT TO LEFT HALF OF NEXT WORD ISZ LGCTR1 /6 LINES DONE? JMP LARGA /NO, DO ANOTHER LINE JMP I LARGEO /YES, RETURN LARGPT, 0 LARGSW, 0 LGCTR1, 0 LGCTR2, 0 LGHALF, 0 LGPTR1, 0 LGPTR2, 0 LGTMP, 0 LGCHAR, 0 LGWORD, 0 LARGCT, 0 PAGE
/ SUBROUTINE TO GET FILENAME AND EXTENSION / AND PUT IN BUFFERS FOR LARGE CHARACTER OUTPUT SETNAM, 0 CLA CLL DCA I [NAMBUF] DCA I [EXTBUF] TAD [TITLEM-1] /USED AS TEMP FOR SAVING CHARS DCA 10 TAD (7601) DCA SETPTR /POINTS TO CURRENT NAME DCA SETHLF /START IN LEFT HALF STA CLL RTL /-3 TO ACC DCA SETCTR /3 WORDS TO NAME DCA SETCNT /NO. OF CHARS IN NAME AND EXT SETN2, CDF 10 TAD I SETPTR /GET 2 CHARS CDF 00 ISZ SETHLF /WHICH HALF? JMP SETLFT /LEFT HALF FIRST JMS SETSAV /RIGHT HALF, SAVE IN LINE BUFFER INC SETPTR /POINT TO NEXT CHARS ISZ SETCTR /NAME DONE? JMP SETN2 /YES CDF 10 TAD I SETPTR /NOW CHECK EXTENSION CDF 00 SNA JMP SETN4 /NO EXTENSION DCA SETEMP /SAVE THE EXTENSION TAD [".] DCA I 10 /. COMES BEFORE EXTENSION INC SETCNT /ANOTHER CHAR IN LINE BUFFER TAD SETEMP CLL RTR; RTR; RTR JMS SETSAV /SAVE LEFT CHAR TAD SETEMP JMS SETSAV /AND RIGHT CHAR SETN4, DCA I 10 /0 ENDS THE BUFFER TAD I (TITLEM) SNA CLA JMP SETN5 /NOTHING IN FILE NAME TAD [NAMBUF-1] DCA 10 /SAVE IN NAME BUFFER, FIRST TAD SETCNT TAD [-6] /<= 6 CHARS IN NAME BUFFER? SMA SZA JMP SETN7 /> 6, SOMETHING SPECIAL SMA JMP SETN6 /=6, JUST SAVE ALL CHARS STL RAR SZL IAC SNA JMP SETN6 /NO LEADING SPACES DCA SETCNT /SAVE THE COUNTER TAD [" ] DCA I 10 ISZ SETCNT /ENOUGH SPACES YET? JMP .-3 SETN6, TAD [TITLEM-1] DCA 11 TAD I 11 SNA JMP .+3 DCA I 10 /MOVE CHARS TO NAME BUFFER JMP .-4 DCA I 10 /AGAIN, 0 ENDS THE BUFFER SETNMR, JMP I SETNAM /RETURN TO CALLER SETLFT, CLL RTR; RTR; RTR JMS SETSAV /SAVE THE LEFT HALF STA DCA SETHLF /RIGHT HALF NEXT TIME JMP SETN2 SETN5, TAD [NAMBUF-1] JMS STARSV /FILL NAME BUFFER WITH STARS TAD [EXTBUF-1] /DITTO EXTENSION BUFFER JMS STARSV JMP I SETNAM SETHLF, 0 SETCTR, 0 SETCNT, 0 SETPTR, 0 SETEMP, 0 / SUBROUTINE TO CHECK FOR SPECIAL ASSEMBLER LISTING FLAGS ASMSET, 0 CLA CLL TAD OPTWD1 /A OPTION GIVEN? SMA CLA JMP I ASMSET /NO, RETURN TO CALLER CLA IAC AND OPTWD2 /CHECK FOR /X OPTION SNA CLA JMP I ASMSET /NO, JUST RETURN TAD (TABTAB) /YES, USE PRESET TABS DCA POINT TAD (-204) /132 DECIMAL DCA COUNT TAD (-6) DCA I POINT /START AS IF COL 3 ASMST1, TAD [-10] /AND EVERY 10TH (8TH) COL AFTER TAD I POINT INC POINT DCA I POINT ISZ COUNT JMP ASMST1 JMP I ASMSET /RETURN TO CALLER PUTLF, 0 SNA JMP I PUTLF /IF ZERO, RETURN DCA COUNT /SAVE COUNTER TAD [212] PUT ISZ COUNT JMP .-3 JMP I PUTLF PAGE
/ CONTINUATION OF SETNAM SUBROUTINE SETN7, CLA DCA SETCNT /CTR FOR NO. OF CHARS AS WE LOOK TAD [TITLEM-1] DCA 11 /LOOK AT THE BUFFER LINE AGAIN SETN8, TAD I 11 INC SETCNT /COUNT THE CHAR SNA HLT /SHOULD NEVER HALF TAD [-".] SZA CLA JMP SETN8 /NOT PERIOD, LOOK AGAIN TAD SETCNT /IS PERIOD, IN 5TH POSITION? TAD (-5) SZA CLA JMP .+3 TAD [" ] /YES, OUTPUT A LEADING SPACE DCA I 10 TAD [TITLEM-1] DCA 11 /PREPARE TO MOVE THE NAME SETN81, TAD I 11 SNA HLT /SHOULD NEVER HAPPEN TAD [-".] /IS CHAR A PERIOD? SNA JMP SETN9 /YES TAD [".] /NO, REGENERATE CHAR DCA I 10 /AND SAVE IT JMP SETN81 SETN9, DCA I 10 /0 ENDS THE NAME BUFFER TAD [EXTBUF-1] DCA 10 /NOW TO MOVE EXTENSION TAD [" ] /ALWAYS 2 LEADING SPACES DCA I 10 TAD [" ] DCA I 10 TAD I 11 /MOVE THE CHARS INTO EXTENSION DCA I 10 TAD I 11 DCA I 10 TAD I 11 DCA I 10 JMP SETNMR /RETURN TO CALLER / SAVE A CHAR IN A BUFFER AND COUNT IT SETSAV, 0 AND [77] SNA JMP I SETSAV /IGNORE 0 CODE TAD [" ] AND [77] TAD [" ] DCA I 10 INC SETCNT JMP I SETSAV / SUBROUTINE USED IN DATE CONVERSION DATECV, 0 AND (37) DCA DATET1 DCA DATET2 JMP .+3 ISZ DATET2 DCA DATET1 TAD DATET1 TAD (-12) SMA JMP .-5 CLA TAD DATET2 SNA JMP .+3 TAD ["0] DCA I 10 TAD DATET1 TAD ["0] DCA I 10 TAD ("/) DCA I 10 JMP I DATECV DATET1, 0 DATET2, 0 240; 240 /THESE SPACES MUST BE BEFORE 'DATBUF' DATBUF, ZBLOCK 12 LCHECK, 0 INC CHARCT /INCREMENT CHARACTER CTR TAD CHARCT TAD LINSIZ /END OF OUTPUT LINE? SPA CLA JMP I LCHECK /NO, RETURN TAD OPTWD1 /YES, END THE LINE HERE? RTL /CHECK FOR /C OPTION CHAR SMA CLA JMP I LCHECK /NO, RETURN TAD [215] /YES, OUTPUT CARRIAGE RETURN PUT JMP LFEED /THEN OUTPUT LINE FEED / TELL USER WHO WE ARE WHOQ, 0 CLA CLL TAD (TYPE) DCA OUTIT /OUTPUT DEV IS TELETYPE JMS TYPMESS /OUTPUT THE MESSAGE LISTM /"LIST VN" TAD (PUT) DCA OUTIT /RESET OUTPUT ROUTINE JMP I WHOQ PAGE
/ START OF PS/8 LISTING PROGRAM / ACTUAL LISTING PART OF LISTER START, STA DCA LINECT /INTIIALIZE LINES/PAGE CTR DCA TOPSW /ZAP TOP OF PAGE SWITCH DCA PAGEN /PAGE # = 0000 DCA PAGEP /PARTIAL PAGE # = 0, TOO TAD [214] /YES, OUTPUT TO TOP OF PAGE PUTC STARTL, CLA IAC DCA PAGEN /INITIALIZE PAGE # DCA PAGEP /AND PART PAGE JMS ASMSET /SET UP FOR ASSEMBLY OUTPUT (MAYBE) TAD OPTWD1 DCA ASMTMP /SAVE /A SWITCH A SEC TAD TTYSWT /OUTPUT TO TELETYPE? SNA CLA JMP START1 /YES CLL STA RAR /3777 TO ACC AND OPTWD1 DCA OPTWD1 /GET RID OF /A OPTION FOR NOW TAD LSWIT /OUTPUT LARGE LETTERS? SZA CLA JMP START1 /NO DCA PAGEN /YES, SO ZAP PAGE # JMS LARGE /OUTPUT NAME IN LARGE LETTERS TAD [214] /OUTPUT TO BOTTOM OF PAGE PUTC START1, TAD ASMTMP /RESET /A OPTION DCA OPTWD1 TAD OPTWD1 /CHECK FOR /A OPTION SMA CLA JMP START2 /NOT, GO START LIST TAD TTYSWT //A, NOW SET PAGE # SZA CLA /OUTPUT TO TTY? CLL STA RAR /NO, SET PAGE # = 3777 DCA PAGEN /YES, SET PAGE # TO 0 START2, GET /GET AN INPUT CHAR PUTC /OUTPUT THE CHAR JMP START2 /KEEP IN LOOP ASMTMP, 0 / END OF DATA PROCEDURE ENDATA, STA DCA PAGEN /ALLOW NO HEADING ON LAST PAGES TAD OPTWD1 DCA OPTWDE /SAVE OPT WD 1 A SEC CLL STA RAR /3777 TO ACC AND OPTWD1 /GET RID OF /A OPTION DCA OPTWD1 TAD TOPSW /ARE WE AT TOP OF PAGE? SZA CLA JMP .+3 /YES TAD [214] /LAST PAGE BREAK PUTC DCA PAGEN /NO TOP OF PAGE TITLE HEADING ENDAT1, TAD LSWIT /OUTPUT LARGE LETTERS? SZA CLA JMP ENDAT2 /NO JMS LARGE /OUTPUT END LARGE LETTERS TAD [214] PUTC ENDAT2, TAD OPTWDE /RESET OPTWD1 DCA OPTWD1 ISZ NCOPY /ALL COPIES OUT? JMP ENDAT3 /NO TAD TTYSWT /OUTPUT TO TELETYPE? SZA CLA JMP ENDAT4 /NO, CLOSE FINAL OUTPUT TAD [212] /OUTPUT A COUPLE MORE LINE FEEDS PUTC TAD [212] PUTC ENDAT4, CLOSE /CLOSE OUTPUT FILE JMP BEGIN /ASK FOR MORE INPUT ENDAT3, CIF 10 /WE WANT MORE COPIES, SO JMS I (IOPEN) /REOPEN INPUT FILES JMP STARTL /AND GO AGAIN OPTWDE, 0 / CONVERT NUMBER IN AC TO DECIMAL OCTDEC, 0 DCA ODNUM /SAVE NUM TO CONVERT STA DCA LZERO /SET LEADING ZERO SWITCH TAD (DIGTAB-1) DCA OCTEMP CLL STA RTL /-3 TO ACC DCA DIGCTR /NO. OF DIGITS BEFORE PRINTING LAST OD1, INC OCTEMP DCA DIGIT /CLEAR OUT DIGIT OD2, TAD ODNUM TAD I OCTEMP /CHECK WITH POWER OF TEN SPA JMP OD3 INC DIGIT /INCREMENT DIGIT IF POSITIVE DCA ODNUM /SAVE DIFFERENCE JMP OD2 OD3, CLA TAD DIGIT SNA JMP LEADZ /IS IT A LEADING ZERO? OD4, TAD ["0] /NO, CONVERT TO ASCII CHAR PUT /OUTPUT THE CHAR DCA LZERO /NO MORE LEADING ZEROES OD5, ISZ DIGCTR /3 DIGITS OUT? JMP OD1 TAD ODNUM /YES, OUTPUT LAST DIGIT TAD ["0] PUT JMP I OCTDEC /RETURN TO CALLER LEADZ, TAD LZERO SZA CLA JMP OD5 JMP OD4 PAGE
TITLEM=. TABTAB=TITLEM+100 PAGTAB=TABTAB+206 DOT=PAGTAB+100 ASMBUF=3400 OUBUF=3600 /OUTPUT BUFFER IN FIELD 0 OUCTL=1400!4000 /6 RECORDS IN BUFFER (3000 WORDS) OUDEVH=7200 /2-PAGE OUTPUT HANDLER INBUF=0000 /INPUT BUFFER IN FIELD 1 INCTL=2010 /8 RECORDS IN BUFFER (4000 WORDS) INRECS=INCTL%200 INDEVH=6600 /2-PAGE INPUT HANDLER MDATE=7666 /IN FIELD 1 FIELD 1 /DUMP PAGE ZERO LITERALS
/ PATTERN WORDS FOR 6X6 CHARACTER MATRIX *7300 PWORDS, 0000; 0000; 0000 /40: SPACE 1010; 1010; 0010 /41: ! 2424; 0000; 0000 /42: " 2476; 2424; 7624 /43: # 3744; 3611; 1176 /44: $ 6162; 0410; 2343 /45: % 1422; 1421; 4235 /46: & 1010; 0000; 0000 /47: ' 1420; 2020; 2014 /50: ( 1402; 0202; 0214 /51: ) 4224; 7624; 4200 /52: * 0010; 1076; 1010 /53: + 0000; 0014; 0410 /54: , 0000; 0076; 0000 /55: - 0000; 0000; 1414 /56: . 0102; 0410; 2040 /57: / 3643; 4551; 6136 /60: 0 0414; 0404; 0437 /61: 1 3442; 0410; 2076 /62: 2 3442; 0402; 4234 /63: 3 0414; 2477; 0404 /64: 4 7640; 7601; 4136 /65: 5 0204; 1034; 4234 /66: 6 7702; 0410; 2040 /67: 7 1422; 1422; 4136 /70: 8 1621; 1604; 1020 /71: 9 0014; 1400; 1414 /72: : 1414; 0014; 0410 /73: ; 0410; 2010; 0400 /74: < 0000; 7600; 7600 /75: = 1004; 0204; 1000 /76: > 3442; 0410; 0010 /77: ? 3641; 5556; 4037 /100: @ 3641; 7741; 4141 /101: A 7641; 7641; 4176 /102: B 3641; 4040; 4136 /103: C 7641; 4141; 4176 /104: D 7740; 7640; 4077 /105: E 7740; 7640; 4040 /106: F 3641; 4047; 4136 /107: G 4141; 7741; 4141 /110: H 3410; 1010; 1034 /111: I 0702; 0202; 2214 /112: J 4450; 6050; 4442 /113: K 4040; 4040; 4077 /114: L 4163; 5541; 4141 /115: M 4161; 5145; 4341 /116: N 7741; 4141; 4177 /117: O 7641; 7640; 4040 /120: P 3641; 4145; 4337 /121: Q 7641; 7644; 4241 /122: R 3640; 3601; 4136 /123: S 7610; 1010; 1010 /124: T 4141; 4141; 4136 /125: U 4141; 4142; 2410 /126: V 4141; 4155; 6341 /127: W 4122; 1414; 2241 /130: X 4122; 1410; 2040 /131: Y 7702; 0410; 2077 /132: Z 1410; 1010; 1014 /133: [ 4020; 1004; 0201 /134: \ 1404; 0404; 0414 /135: ] 3452; 1010; 1010 /136: ^ 0010; 2077; 2010 /137: _ / END OF PATTERN WORDS PAUSE /FOR IOPACK TO BE ASSEMBLED



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