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

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

/UTILEO.SB
/---------
/A MODIFIED UTILTY.SB FOR THE 0S/8 FORTRAN II LIBRARY
/CURRENTLY IN THE LIB8.RL FILE. FOR END OF FILE DETECTION.
/THE GENERAL DEVICE #4 ON INPUT SETS AN END OF FILE FLAG (IEOF) TO -1
/SEEING A CONTROL/Z. IT IS NORMALLY SET TO 0. THE USER MUST INITIALLY
/SET THE FLAG TO 0 AND THEN HE MAY TEST IT AT ANY TIME BY DOING A 
/"CALL EOF(IFLAG)". IFLAG WILL THEN BE SET TO -1 OR 0. EVERYTIME
/SUBROUTINE EOF(IFLAG) IS CALLED IT SETS IFLAG TO THE CURRENT VALUE OF
/IOEF AND THEN SETS IEOF TO ZERO. THIS IS HOW IT IS INITIALLY CLEARED
/(I.E. BY CALLING IT AND IGNORING THE VALUE OF IFLAG THE FIRST TIME IS
/CALLED). THIS IS SUMMARIZED BELOW :
/	IFLAG	MEANING
/	-----	-------
/	 0	CONTROL/Z (EOF) NOT SEEN YET
/	-1	CONTROL/Z (EOF) WAS DETECTED SINCE SUBROUTINE EOF
/		WAS LAST CALLED
/
/USING UTILEO.SB
/--------------
/TO USE UTILEO.SB IT MUST BE ASSEMBLED UNDER SABR
/THEN LOADED BEFORE (!) THE LIB8.RL HAS BEEN LOADED
/E.G.
/	.R SABR
/	*UTILEO.RL<UTILEO.SB
/	.R LOADER	/CALL THE RELOC. LOADER
/	*MAIN.RL	/LOAD MAIN
/	*UTILEO.RL
/	*LIB8.RL/L$	/LOAD THE LIBRARY ROUTINES
/	.SAVE SYS MAIN	/SAVE IT
/
/	MODIFIED UTILITY SUBROUTINE PACKAGE
/	COPYRIGHT 1968, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.
/	BODY IS VERSION UTILTY.V07 (JANUARY 7, 1969)
/
	ENTRY EOF	/TEST AND RESET THE IEOF FLAG
	ENTRY OPEN	/INITIALIZING AND FLAG SETTING ROUTINE
	ENTRY GENIO
	ENTRY EXIT	/EXIT TO DISK MONITOR SYSTEM
	ENTRY ERROR
	ENTRY CKIO	/USELESS ROUTINE
	OPDEF  KRS 6034
	OPDEF  KCC 6032
	OPDEF TADI 1400
	OPDEF DCAI 3400
	OPDEF JMSI 4400
	OPDEF JMPI 5400
/CARD READER IOT'S
	OPDEF RCSE 6672
	OPDEF RCSP 6671
	OPDEF RCSF 6631
	OPDEF RCRA 6632
/LINE PRINTER IOT'S
	OPDEF  LLB 6666
	OPDEF  LSF 6661

LAP U17, 17 /*** MUST BE FIRST LOC IN PAGE *** IOER, 1117 0522 /"IOER" ERROR GENIO, BLOCK 2 /GENERAL INPUT/OUTPUT ROUTINE DCA 7 /SAVE ENTRY AC GENLP, TAD 7 RTL RTL RAL U200, AND U17 TAD JMPITB DCA DSPACH /INDEX JUMP TABLE BY DEVICE NUMBER TAD U200 KRS TAD UM203 SNA CLA KSF /CHECK FOR ^C ON TELETYPE DSPACH, NOP /NO ^C - DISPATCH TO I/O ROUTINE CALL 0,EXIT JMPITB, JMPI DEVTAB DEVTAB, TTYOUT HSPOUT LPTOUT GENOUT TTYIN HSRIN CDRIN GENIN TTYFUJ /FUDGE - SEE TELETYPE INPUT ROUTINE IOERR IOERR IOERR IOERR IOERR IOERR IOERR HSPOUT, PSF JMP GENLP TAD 7 PLS GENRTN, CLA RETRN GENIO TTYIN, KSF JMP GENLP CLA CLL CML RTR /****DEPENDS ON NUMBER OF DEVICES **** JMP GENLP /TEST FOR ^C ONE LAST TIME HSRIN, RSF JMP GENLP RRB RFC JMP GENRTN# UM203, -203 CDRIN, TAD CDRCT SNA CLA JMP CDRNXT /NEW CARD NECESSARY
ISZ CDRCT /ADVANCE TO NEXT COLUMN JMP CDRGET TAD CDR215 /NO MORE - SEND A CARRIAGE RETURN JMP GENRTN# CDRNXT, RCSE JMP GENLP /CHECK FOR ^C WHILE WAITING FOR NEXT CARD CDRTST, RCSP JMP CDRCOL /NOT END OF CARD YET TAD CDRCT /END OF CARD - SET UP FOR EXTRACTION OF CHARS CMA DCA CDRLEN JMP GENLP /CHECK FOR ^C AGAIN CDRCOL, RCSF /ANYTHING YET? JMP CDRTST /KEEP LOOKING RCRA /READ IT CLL RAR TAD PCDRTB JMS I PCDRGC /GET TABLE ENTRY, FORCING DATA FIELD CURRENT DCA CDRLEN /SAVE IT TEMPORARILY TAD CDRCT CIA CLL RAR TAD CDR100 /INDEX TABLE AT LOC 10100 DCA DSPACH 6211 /CDF 10 TAD CDRLEN SZL /WHICH HALF? JMP CDNORT /RIGHT HALF RTL RTL RTL SKP CDNORT, TADI DSPACH /ADD EXISTING LEFT HALF DCAI DSPACH /SAVE UPDATED ENTRY CLA CMA TAD CDRCT DCA CDRCT /UPDATE COLUMN POINTER JMP CDRCOL CDRGET, TAD CDRCT TAD CDRLEN /FORM CHAR POINTER INTO TABLE AT 10100 CLL RAR TAD CDR100 6211 JMSI PCDRGCH /INDEX TABLE AND PULL OUT CHAR (DF=10) TAD CDR240 /CHANGE TO ASCII JMP GENRTN# /RETURN PCDRGC, CDRGCH /USED TO FORCE DF=CURRENT WHEN NECESSARY CDR215, 215 CDR100, 100 CDR240, 240 PCDRTB, CDRTBL /CONVERSION FROM CARD CODE TO ASCII-240 CDRCT, 0 CDRLEN, 0 PAGE
U377, 377 /MUST BE FIRST LOC IN THIS PAGE DUMMY EOFX EOFX, BLOCK 2 EOF, BLOCK 2 /SUBROUTINE EOF(IFLAG) TAD I EOF /GET THE FLAG DCA EOFX INC EOF# TAD I EOF /GET THE ADDRESS DCA EOFX# INC EOF# TAD IEOF /GET THE INTERNAL DEVICE #4 FLAG IN "GENINI" DCA I EOFX /PUT FIELD DCA IEOF /ZERO FLAG RETRN EOF GENIN, 6201 TADI IHNDLR SNA CLA /OPEN INPUT FILE? JMP IOERR /NO 6202 JMS I FICHAR /GET A CHAR JMP IOERR /INPUT ERROR UU200, AND U377 DCA EOFX /SAVE IT TAD EOFX TAD (-232 /CONTROL/Z SZA CLA JMP NOEOF /NO CLA CMA /YES DCA IEOF NOEOF, TAD EOFX /RESTORE CHARACTER GRTN2, RETRN GENIO IEOF, 0 /EOF FLAG GENOUT, 6201 TADI OHNDLR SNA CLA /OPEN OUTPUT FILE? JMP IOERR /NO 6202 TAD 7 /GET CHAR TO BE OUTPUT AND U377 JMS I FOCHAR /PUT A CHARACTER JMP IOERR /OUTPUT ERROR JMP GRTN2 IHNDLR, 122 /***ALL THESE LOCATIONS ARE VERY VOLATILE!! *** FICHAR, 606 /******* OHNDLR, 121 /******* FOCHAR, 651 /****************** /INITIALIZING SUBROUTINE CALLED BY FORTRAN /CLEARS FLOATING AC AND SETS FLAGS OPEN, BLOCK 2 TAD (212 TLS /PUT LINE-FEED ON TTY LLB /INITIALIZE LPT KCC /CLEAR KEYBOARD FLAG (AND AC) PLS RFC CALL 0,CLEAR 6201 DCAI IHNDLR DCAI OHNDLR /ZERO DEVICE-INDEPENDENT IO FLAGS RETRN OPEN
LPTOUT, LSF JMP GENLP TAD 7 ISZ PFSTCH JMP NOFST TAD (-1262 /LOOK FOR CONTROL CHARS IN PRINT POSITION 1 CLL IAC IAC SNL JMP DCACH CLL RAL TAD (212 NOFST, LLB TAD (-1212 DCACH, SNA CLA /IF LINE FEED CMA /SET "FIRST CHAR" SWITCH ON DCA PFSTCH JMP GRTN2 PFSTCH, -1 TTYFUJ, TAD UU200 KRS DCA 7 /SAVE KEYBOARD CHAR KCC /CLEAR FLAG TAD 7 TAD (-212 SZA CLA JMS TYPE TAD 7 TAD (-215 SZA CLA JMP TYRTN CLA CLL CMA RTL JMS TYPE TYRTN, TAD 7 JMP GRTN2 /RETURN WITH CHAR IN AC TYPE, 0 TAD 7 TYPELP, TSF JMP TYPELP TLS CLA JMPI TYPE TTYOUT, JMS TYPE JMP GRTN2 IOERR, CALL 1,ERROR ARG IOER CDRTBL, 0021;2223;2425;2627 3031;3203;4007;3502 2017;6364;6566;6770 7172;7514;0577;3637 1552;53524;5556;5760 6162;0104;1211;3374 0641;4243;4445;4647 5051;7316;3410;1376 PAGE
PMESG, MESG MESG, 7777 7777 4005 2222 1722 4001 2440 1417 0340 LIT7, 0007 ERROR, BLOCK 2 /ERROR PROCESSOR U7600, 7600 TAD ERROR DCA TEM1 TEM1, NOP /SET DATA FIELD OF "CALL ERROR" TADI ERROR# DCA TEM3 INC ERROR# E60, CLA CMA CML /CML IS WINDOW DRESSING TADI ERROR# DCA 10 INC ERROR# TEM3, NOP /DATA FIELD OF MESSAGE&ENTRY POINT DCA CKIO /ZERO "FATAL ERROR" FLAG TADI 10 RAL SZL /NON-FATAL BIT ON? ISZ CKIO /YES - SET "FATAL FLAG" TO NON-FATAL CLL RAR /STRIP NON-FATAL BIT FROM MESSAGE DCA MESG TADI 10 /SECOND WORD OF MESSAGE DCA MESG# TADI 10 DCA TEM1 TADI 10 DCA TEM3 /CALLING ADDRESS TAD PMESG DCA TEM2 ERLP, TAD I TEM2 RTR RTR RTR JMS PR6BIT TAD I TEM2 JMS PR6BIT INC TEM2 JMP ERLP PRLOC, TAD TEM1 RTR RTR JMS ERTTY /PRINT CALLING FIELD TAD (-4 DCA TEM2 NUMLP, TAD TEM3
RTL RAL DCA TEM3 TAD TEM3 JMS ERTTY ISZ TEM2 JMP NUMLP TAD (215 DCA 7 JMS TYPE CLA CLL CMA RTL JMS TYPE TAD CKIO /GET THE FATAL ERROR FLAG SNA CLA /WHADDOWEDO?? JMP EXITX RETRN ERROR /HE SAYS ITS NON-FATAL - LET HIM HANDLE IT ERTTY, 0 /DIGIT PRINTING ROUTINE RAL AND LIT7 TAD E60 JMS PR6BIT JMP I ERTTY PR6BIT, 0 /6BIT TO 8BIT CONVERTOR AND (77 SNA JMP PRLOC /MESSAGE OVER TAD (7740 SPA TAD (100 TAD (240 CALL 0,GENIO /LOOK FOR ^C WHILE TYPING JMP I PR6BIT /EXIT TO DISK MONITOR SYSTEM EXIT, BLOCK 2 EXITX, CALL 0,CKIO 6203 JMPI U7600 /RETURN TO MONITOR CKIO, 0 TEM2, 0 /DUMMY SUBROUTINE TO WAIT FOR I/O COMPLETE CKWAIT, 6041 JMP CKWAIT RETRN CKIO CDRGCH, 0 /GET A CHAR FROM A PACKED TABLE DCA TEM2 /WORD PTR IN AC, LEFT/RIGHT SW IN LINK TADI TEM2 /PRESERVE ENTRY FIELD SZL JMP CDRAND /RIGHT HALF RTR RTR RTR CDRAND, AND CDR77 JMP I CDRGCH /RESTORE CURRENT FIELD AND GET OUT CDR77, 77 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