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

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

/	FILE NAME : INTFS.SB	LAST MOD : 21-NOV-81
/
/	IFLAG = INTFS(FWA,ODEV,OFNAM,IDEV,IFNAM)
/
/	FWA :=	ADDRESS OF ZERO-FILLED BUFFER CONTAINING STRING
/		THAT IS TO BE INTERPRETED.
/
/		FORMAT IS THE SAME AS THE COMMAND DECODER,
/		BUT ONLY DEV,FNAME,AND EXT ARE ALLOWED.
/		SEMICOLON IS ALLOWED IN PLACE OF COLON.
/		LEADING ASTERISK IS ALLOWED, AND IS IGNORED.
/
/		ODEV:OFNAME.EX<IDEV:IFNAME.EX
/
/	OFNAM,IFNAM := 4 WORD BUFFERS, INTO WHICH ARE PLACED:
/		3 WORD, 6 CHAR ZERO-FILLED FILE NAME.
/		1 WORD, 2 CHAR ZERO-FILLED EXTENSION.
/
/	ODEV,IDEV := 2 WORD BUFFERS, INTO WHICH ARE PLACED:
/		2 WORD, 4 CHAR ZERO-FILLED DEVICE NAME.
/
/	IFLAG := -1 IF ERROR IN FORMAT.  RESULTS UNDEFINED.
/		  0 IF FORMAT WAS O.K.
/		 +1 IF END OF STRING ENCOUNTERED.
/
/------------
/
/	NORMAL CALLING SEQUENCE IS :
/
/	READ(1,100)FWA
/	CALL ZFILL(FWA,LEN)
/	IF(INTFS(FWA,ODEV,OFNAM,IDEV,IFNAM))ERR,OK,OK
/
//////

ABSYM	SUBR	0	/SO WE CAN TELL WHERE SUBROUTINES ARE.

ABSYM	TEMP	7	/DON'T CALL DUMMY SUBROUTINES.
ABSYM	FROM	10	/AUTO-INC FOR MOVING.
ABSYM	TO	11	/DITTO.
ABSYM	CTR	12	/DON'T USE THESE LOCS INDIRECTLY.
ABSYM	FRMFLG	13	/UNPACKING FLAG.

ABSYM	F1	125	/FILENAME BUFFER.
ABSYM	F2	126
ABSYM	F3	127
ABSYM	EX	130	/EXTENSION.
ABSYM	D1	131	/DEVICE NAME BUFFER.
ABSYM	D2	132

ABSYM	OUTFLG	133	/OUTPUT SPEC FLAG.
ABSYM	DEVFLG	134	/DEVICE SPEC FLAG.
ABSYM	EXTFLG	135	/EXTENSION FLAG.
ABSYM	GETP	136	/UNPACKING POINTER.
ABSYM	PUTP	137	/PACKING POINTER.

ENTRY	INTFS

	LAP

/ ///// ENTRY \\\\\ / \\\\\ POINT ///// ENTPT, INTFS, BLOCK 2 TAD ENTPT DCA CDFA TAD (-12 DCA CTR TAD PLPTR DCA TO CDFA, TAD I ENTPT# /SABR CDF GETS MODIFIED. CDFAA, DCA I TO /FORCE CDF. INC ENTPT# ISZ CTR JMP CDFA CMA DCA OUTFLG /ALLOW OUTPUT SPEC. DCA FRMFLG /START WITH UPPER CHAR. TAD STRING DCA CDFG TAD STRING# DCA GETP JMS ZERO JMS MOVEI JMP ENTER /JUMP TO STRING KRACKER. / JMS ZERO - ZERO 6 WORD BUFFER. ZERO, SUBR DCA F1 DCA F2 DCA F3 DCA EX DCA D1 DCA D2 JMP I ZERO / AC = -#WORDS / JMS PLOAD - LOAD PARAMETER FROM BUFFER. / ARG1 - BUFFER ADDRESS. / ARG2 - POINTER TO PARAMETER DUMMYVAR. PLOAD, SUBR DCA CTR CMA TAD I PLOAD DCA FROM INC PLOAD TAD I PLOAD DCA TEMP TAD I TEMP DCA CDFT INC TEMP CMA TAD I TEMP DCA TO CDFF, TAD I FROM /FORCE CDF. CDFT, DCA I TO /SABR CDF GETS MODIFIED. ISZ CTR JMP CDFF PLOADX, INC PLOAD JMP I PLOAD F1PTR, F1 PLPTR, PLPTR STRING, BLOCK 2 ODEV, BLOCK 2 OFNAM, BLOCK 2 IDEV, BLOCK 2 IFNAM, BLOCK 2 / JMS MOVEI - MOVE BUFFER TO INPUT FILE PARAS. MOVEI, SUBR TAD (-2 JMS PLOAD D1 IDEV TAD (-4 JMS PLOAD F1 IFNAM JMP I MOVEI / JMS MOVEO - MOVE BUFFER TO OFILE BUFFER. MOVEO, SUBR TAD (-2 JMS PLOAD D1 ODEV TAD (-4 JMS PLOAD F1 OFNAM JMP I MOVEO / JMS FINIT - INITIALIZE FOR FILE SPEC. FINIT, SUBR CMA DCA EXTFLG /ALLOW EXTENSION CMA DCA DEVFLG /ALLOW DEVICE. JMS ZERO JMS SINIT JMP I FINIT / JMS SINIT - STRING KRACKING INITIALIZATION. SINIT, SUBR TAD (-7 DCA CTR TAD F1PTR DCA PUTP JMP I SINIT PAGE / JMS GET1 - GET A 6-BIT CHAR FROM STRING. / AC = 6 BIT CHAR. GET1, SUBR CDFG, TAD I GETP /SABR CDF GETS MODIFIED. ISZ FRMFLG JMP LEFT6 INC GETP /TAKING RIGHT 6. MOVE TO NEXT WORD. JMP GET1X LEFT6, DCA TEMP CMA DCA FRMFLG /RESET FOR RIGHT 6. TAD TEMP RTR RTR RTR GET1X, AND (77 JMP I GET1 / AC = 6-BIT CHAR. / JMS PUT1 - PUT A 6-BIT CHAR INTO BUFFER. CH, PUT1, SUBR DCA TEMP TAD I PUTP AND (7700 SNA JMP NEWORD /STARTING NEW WORD. TAD TEMP /FINISHING OLD WORD. DCA I PUTP INC PUTP JMP I PUT1 NEWORD, TAD TEMP CLL RTL RTL RTL DCA I PUTP JMP I PUT1 ///// LOOP FOR INTERPRETTING STRING. / STRING MUST END IN AT LEAST 1 6-BIT 00. / / ENTRY TO LOOP IS AT "ENTER". OUTCH, ISZ OUTFLG JMP ERR ENTER, JMS MOVEO JMS FINIT JMS GET1 TAD (-52 /-"* 00-52 SNA JMP KRACK /IGNORE LEADING ASTERISK TAD (52 JMP KRACK1 TEXTCH, TAD CH JMS PUT1 KRACK, JMS GET1 KRACK1, DCA CH TAD CH SNA JMP EOL /EOL IF 00. TAD (-74 /-"< 00-74 SNA JMP OUTCH /IF "<", END OF OUTPUT IAC /"<-"; 74-73 SNA JMP DEVCH /IF ";", END OF DEVICE IAC /";-": 73-72 SNA JMP DEVCH /IF ":", END OF DEVICE SMA JMP ERR /IF ABOVE NUMBERS TAD (12 /":-"0 72-60 SMA JMP NUMCH /IF NUMBER TAD (2 /"0-". 60-56 SNA JMP EXTCH /IF PERIOD, EXTENSION FOLLOWS TAD (16 /".-" /56-40 SNA JMP KRACK /IF SPACE, IGNORE TAD (6 /" -"Z 40-32 SMA SZA JMP ERR /IF ABOVE ALPHABETICS NUMCH, CLA /ALPHABETIC OR NUMERIC ISZ CTR JMP TEXTCH /PUT CHAR IN BUFFER. /SKIPS IF TOO MANY CHARS. ERR, CLA CMA /-1 ERROR. JMP XIT EXTCH, ISZ EXTFLG JMP ERR /TOO MANY PERIODS. TAD (-3 /PREPARE TO GET EXTENSION. DCA CTR TAD EXPTR DCA PUTP DCA DEVFLG /FORBID DEVICE SPEC. JMP KRACK /GO GET EXTENSION. EXPTR, EX DEVCH, TAD F3 SNA CLA /SKIP IF MORE THAN 4 CHARS. ISZ DEVFLG JMP ERR /5 OR 6 CHARS, OR TOO MANY :'S. TAD F1 /MOVE DEVICE NAME. DCA D1 DCA F1 TAD F2 DCA D2 DCA F2 JMS SINIT /TRY AGAIN FOR FILE NAME. JMP KRACK EOL, JMS MOVEI IAC /FLAG EOL FOUND. XIT, RETRN INTFS 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