File F1107.PA (PAL assembler source file)

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

/PS/8 BATCH HASP HASP03

/HAS 3 LEVELS:
/	.   KBMON
/	*   CD
/	/   PRINT ON TTY

/ENTRY AT 600

/**UPDATE**

/4/10/73	DEW
/	SOME MODIFICATIONS TO  ALLOW INPUT OF FILES
/	NOT ON SYS.  THE FILE IS COPYED INTO THE
/	FILE HASPBT.TM ON SYS BEFORE STARTING.

/DEFINES
MNCRLF=160	/A LITERAL ON PAGE ZERO OF THE MONITOR WHICH POINTS
		/TO THE CARRIAGE RETURN LINE FEED ROUTINE.
KEY=7		/KEYBOARD MONITOR ON SYSTEM DEVICE
RESEXP=64	/AREA ON SYSTEM DEVICE RESERVED FOR EXPANSION - US!
F1MLOC=7673	/THIS IS THE LOCATION IN THE READ WHICH BRINGS IN THE
		/MONITOR - WE TELL IT TO BRING US IN!
IN=600	/BUFFER FROM 600-1177!
	*600
	/THIS IS ONCE ONLY CODE FOR INITIALIZATION
	/IT WILL BE OVERLAID BY THE BUFFER
TMP1,	CLA CMA 	/NORMAL ENTRY (.R HASP)
TMP2,	DCA CHANFG	/CHAIN ENTRY, CD MUST BE SET UP
TMP3,	CDF 10
	ISZ I (7700	/TO DETERMINE IF USR IS IN
	SKP
	JMP AINCOR	/IS IN CORE
	CDF 0		/IS NOT
	CIF 10
	JMS I SYSTEM	/SO LOAD IT
	10
AINCOR, CDF 10
	CLA CMA
	DCA I (7700
	CDF 0
	TAD (200
	DCA SYSTEM
	ISZ CHANFG	/SKIPS IF NOT CHAINED TO
	JMP NOCD	/CHAIN ENTRY, DO NOT CD
	CIF 10
	JMS I SYSTEM
	5
	0224	/BT
NOCD,	CDF 10
	TAD I (7620	/GET FILE START
	SNA
	JMP I (7605	/FILES DONT START AT ZERO
	DCA FBLOK
	TAD I (7617
	DCA TMP1	/STASH FOR LATER
	TAD TMP1
	CDF 0
	AND (17
	SNA
	JMP I (7605	/NO INPUT!
	DCA TMP2	/SAVE THE DEVICE NUMBER
	CIF 10		/RESET TABLES IN CASE COPY
	JMS I SYSTEM	/WE WANT NO TEN. FILE PROBLEMS
	  13
	CLA CLL
	TAD TMP2
	CIF 10
	JMS I SYSTEM
	  1		/FETCH THE HANDLER IF NECESS
XXEP,	  7201
	HLT	/THIS IS IMPOSSIBLE, SINCE CD GOT IT
	TAD XXEP
	TAD (-7607
	SZA CLA
	JMP ONSYS	/STICK THE FILE ON SYS:HASPBT.TM
/	HERE IS THE CODE TO CHANGE THE MONITOR ENTRY!

INIT1,	TAD  RESEXP
	CDF 10
	DCA I  F1MLOC	/WEVE GOT IT IN OUR HASP
	CDF 0
	JMP I (KMNTRY	/NOW WE ACT EXACTLY AS IF WE HAD BEEN CALLED
			/BY A JMP 7600 (OR 7605)
CHANFG, 0

ONSYS,	TAD TMP1	/PICK UP LENGTH ETC
	AND (7760	/MASK FOR -LENGTH
	CIA		/MAKE POSITIVE
	DCA TMP3	/AND STASH FOR LATER
	TAD TMP3
	CLL		/ONLY 14 BLOCKS WILL BE
	TAD (-300	/ALLOWED (-300=-14 20)
	SZL CLA 	/SKIP IF FILE < 14(8) BLOCKS
	JMP I (7605	/FILE TO LARGE
	TAD TMP3
	IAC		/SYSTEM DEVICE
	CIF 10
	JMS I SYSTEM	/ENTER OUTPUT FILE
	  3
HASPFL,   HASPBT
	  0
	JMP I (7605	/NO ROOM
	TAD TMP3	/PICK UP LENGTH AGAIN
	CLL RTR;RTR	/#BLOCKS PERMANENT FILE
	DCA HSCLOS
	CLA IAC 	/AND CLOSE THE FILE
	CIF 10
	JMS I SYSTEM
	  4
	  HASPBT
HSCLOS,   0
	JMP I (7605
	TAD TMP3	/LENGTH AGAIN
	CLL RTL;RAL	/TO MAKE FUNCTION WORD
	IAC		/IS IN FORWARD DIRECTION
	DCA RDBLK-2	/READ FUNCTION WORD
	CLA STL RAR	/WRITE
	TAD RDBLK-2
	DCA WTBLK-2	/WRITE FUNCTION
	TAD FBLOK	/FROM WHERE
	DCA RDBLK
	TAD HASPFL	/START ON SYS
	DCA FBLOK	/SAVE FOR HASP
	TAD FBLOK
	DCA WTBLK	/PUT IN HANDLER CALL
	JMS I XXEP	/READ IT
	 0
	 1000		/HAVE  14 BLOCKS HERE
RDBLK,	 0
	JMP I (7605	/HUH!
	JMS I (7607	/NOW WRITE IT OUT
	 0
	 1000
WTBLK,	 0
	JMP I (7605
	JMP INIT1

HASPBT, FILENAME HASPBT.TM

PAGE
/
	*200
CDHASP, CLA CLL / **** MUST BE AT 00200 ******
	CLA CLL
	TAD  -200	/MOVE IT ALL, SOME MAY NOT BE NEEDED
	DCA T
	TAD  1200-1
	DCA LXR
	TAD  1400-1
	DCA X1
CDLP01, TAD I LXR	/MOVE CDINIT ROUTINE UP
	DCA I X1
	ISZ T
	JMP CDLP01
	TAD IBLK
	DCA BLKSAV	/REMEMBER THAT, WE MAY NEED IT (SEE BELOW)
	JMS GETCHR	/ALSO RETURN FROM SLASH LINE
	DCA SAVCHR
CDTADX, TAD SAVCHR
	TAD  -"*
	SZA
	JMP I  SLASHT	/NO ASTERISK! GO TEST FOR SLAS
	TAD  1200-1
	DCA LXR
	TAD  -107	/FIRST 72 COLUMNS OF FILE MAY BE ANALYZED
	DCA T
CDLP02, JMS GETCHR
	TAD  -215
	SNA
	JMP EOCDLN
	TAD  215-"$
	SNA
	JMP CDDOLR
	TAD  "$-"<
	SNA
	TAD  " -"<	/LSS MUST BECOME ARROW BEFORE CD CALLED
	TAD  "<
	DCA I LXR	/PUT CHARACTER OUT
	ISZ T
	JMP CDLP02
	JMS I  GGCRET	/LINE TOO LONG--
	JMP EOCDLN
CDDOLR, JMS I  GGCRET	/GET THE REST OF THE LINE
	SKP
EOCDLN, CLA CLL CMA
	DCA T
	DCA I LXR
	DCA I LXR
	JMS I DEVHND
	4500		/WRITE LOCS 0-1117
	0
	RESEXP
	HLT
	CLA CLL
	KCC		/IF THE COMMAND DECODER HAD REALLY BEEN
			/CALLED, IT WOULD HVE CLEARE THE LAG
	TAD T
	JMP I  1400	/BACK TO COMMAND DECODER
GETCHR, 0
	CLA CLL
	ISZ ICRCNT
	JMP I2		/NO NEED TO READ
	TAD FBLOK
	DCA IBLK
	JMS I DEVHND
	0200
	IN
IBLK,	0
	HLT		/OOPS
	CLA CLL
	ISZ FBLOK	/FOR NEXT TIME!
	TAD  IN
	DCA IPTR1
	TAD  IN
	DCA IPTR2
	TAD  -600
	DCA ICRCNT
	TAD  -3
	DCA I3
I2,	ISZ I3
	JMP I1		/NORMAL CHARACTER
	TAD  -3 	/WEIRD CHAR - RESET SWITCH
	DCA I3
	TAD I IPTR2
	ISZ IPTR2
	AND  7400
	DCA ICHAR
	TAD I IPTR2
	ISZ IPTR2
	AND  7400
	CLL RTR
	RTR
	TAD ICHAR
	CLL RTR
	RTR
	JMP .+3
I1,	TAD I IPTR1
	ISZ IPTR1
	AND  177
	TAD  200
/	WE IGNORE CERTAIN CHARACTERS!
	SNA
	JMP GETCHR+1	/NULL
	TAD  -212
	SNA
	JMP GETCHR+1	/LINE FEED
	TAD  212-214
	SNA
	JMP GETCHR+1	/FORM FE
	TAD  214-377
	SNA
	JMP GETCHR+1	/RUBOUT
	TAD  377-232
	SNA
	JMP ENDHSP	/ON  Z KILL HASP
	TAD  232
	JMP I GETCHR
I3,	0
ICHAR,	0
ICRCNT, -1		/SO WE READ INITIALLY!
IPTR1,	0		/WRD 1 PTR
IPTR2,	0		/WRD 2 PTR
/
ENDHSP, TAD  KEY
	CDF 10
	DCA I  F1MLOC	/SET CALL BACK TO NORMAL!
	CDF 0
	IFNZRO .&400 <PAGE WAS EXCEEDED....>
	JMP I  7605	/QUIT HASPING
/
/
	PAGE
	*400
/
/	**** ONLY PAGE ZERO LITERALS ON THIS PAGE! *********
/
KMNTRY, JMS I DEVHND	/MUST BE AT 00400 *****
	0400		/READ IN TWO BLOCKS OF KEYBOARD
	1000
	KEY+2
	HLT
	JMS I DEVHND
	0100		/READ THE BUFFER BACK IN
	1000
	RESEXP+2	/I ONLY NEEDED THE MONITOR CODE AT 1200
	HLT
	KCC
	TAD  7700
	DCA SYSTEM
	JMP I  1601	/INITIALIZE (USES 22 25 15 14
			/ALSO: STANDARD SYS 106 120
			/EXTENDED COMMANDS SYS 111 122)
XXRETI, TAD  UPROVL-1	/MOVE OUR CODE TO MONITOR AREA
	DCA LXR
	TAD  1200
	DCA X1
	TAD  XXKILL-XXLAST-1
	DCA T1
HASPLP, TAD I LXR
	DCA I X1
	ISZ T1
	JMP HASPLP	/KEEP MOVING THAT STUFF
HASP77, SKP	/BECOMES TAD SAVCHR IF CD KILL
	JMP HASPRD+1
	CLA CLL
HASPRD, JMS I GCHR	/FIRST CHARACTER ON LINE
	TAD  -215	/IF THE FIRST CHARACTER ON LINE IS A
	SNA
	JMP HASPRD	/GO BACK (OTHERWISE WE LOSE NEXT LINE)
	TAD  215-".
	SZA
	JMP SLT /NOT A PERIOD, TEST FOR SLASH
	TAD  SKP
	DCA HASP77
	TAD  1577
	DCA LXR
	TAD  -107	/FIRST 72 COLUMNS MAY CONTAIN INFO
	DCA T
HASPCC, JMS I GCHR
	TAD  -215	/CARRIAGE RETURN
	SNA
	JMP EOLINE
	TAD  215-"$
	SNA
	JMP ALTMOD
	TAD  "$ 	/FIX BACK
	DCA I LXR	/PUT IT TO MONITOR AREA
	ISZ T
	JMP HASPCC
	JMS GGCRET	/LINE TOO LONG, IGNORE REST
	JMP EOLINE
FLUSHP, JMS GGCRET	/FIRST CHAR WAS NOT PERIOD,
	JMP HASPRD	/FLUSH LINE AND TRY AGAIN
ALTMOD, DCA I LXR	/A ZERO
	TAD  "$
	DCA I LXR
	JMS GGCRET
EOLINE, DCA I LXR
	DCA I LXR
/
/	HERE I WRITE MESELF OUT!
	JMS I DEVHND
	5000		/WRITE 4 BLOCKS
	0
	RESEXP		/IT WAS RESERVED FOR EXPANSION - SO USE IT
	HLT
/
	JMP I  XXGO	/GO!
/
GGCRET, 0
	JMS I GCHR	/SCAN OUT TO THE CARRIAGE RETURN
	TAD  -215
	SZA CLA
	JMP .-3
	JMP I GGCRET
ENDCDC, TAD I  CDTADX	/CODE IF WE DIDNT GET AN ASTERISK
	DCA HASP77	/ON A LINE FOR THE COMMAND DECODER
	TAD BLKSAV	/LOOK TO SEE IF WE DID A READ
	CIA
	TAD I  IBLK
	SNA CLA
	JMP KMNTRY	/WE DID NOT READ FROM CONTROL FILE
	JMS I DEVHND
	4100		/WE DID READ, SO WE NEED TO SAVE THIS PART
	1000		/OF THE BUFFER BEFORE WE CAN ACT LIKE THE
	RESEXP+2	/CALL FOR THE MONITOR
	HLT
	JMP KMNTRY
SLASHT, TAD	 "*-"/	/IS IT SLASH?
	SZA CLA
	JMP I	 ENDCDC /NOT SLASH, END CD
	JMS	LIST	/SLASH, LIST WHOLE LINE
	JMP I	 CDTADX-2	/
HANUPA, KSF		/WAIT FOR KEYSTRUCK
	JMP .-1 	/*****************************
	KCC		/***NOTE WE ARE ABOUT TO******
			/***EXECUTE THE SUBROUTINE****
			/***RETURN IN LIST!!!!!*******
			/***LIST MUST NOT BE CALLED***
			/*****************************

LIST,	0		/SR TO LIST SLASH LINE
	JMS I	GCHR	/GET A CHAR
	JMS	ECHO	/TYPE IT
	TAD KMUPA	/TEST FOR
	SNA
	JMP HANUPA	/YES, HANDLE UP ARROW
	TAD	KUM215	/WAS IT CR?
	SZA CLA
	JMP	LIST+1	/NO, KEEP TYPING
	TAD	 212	/CR, APPEND A LF
	JMS	ECHO
	CLA CLL
	JMP I	LIST	/DONE LISTING
SLT,	TAD	 ".-"/	/IS IT SLASH
	SZA CLA
	JMP	FLUSHP	/NO
	JMS	LIST	/YES, LIST IT
	JMP	HASPRD	/DONE
UPROVL=.
	NOPUNCH; *1201; ENPUNCH
/	***	THIS CODE GETS MOVED TO MONITOR AREA
XXKILL, JMP I .+1
	7600		/WE GOT CALLED HERE, NO GOOD
XXGO,	TAD SYSTEM
	DCA XXSAVE
	JMS I DEVHND
	0500		/READ IN THE OTHER 2 1/2 BLOCKS
	0
	KEY
	HLT
	CLA CLL
	JMS I MNCRLF
	TAD XXSAVE
	DCA SYSTEM
	JMP I XXLAST
XXSAVE, 0
XXLAST, 404		/********GO INTO MONITOR!
/
/
/	PAGE ZERO, SOME LOCATIONS ARE LIKE MONITOR!
/
	*14
LXR,	0
X1,	0
	*20
T1,	0
T,	0
	*25
SYSTEM, 7700
ECHO,	0
	TLS
	TSF
	JMP .-1
	JMP I ECHO
	*35
DEVHND, 7607
SAVCHR, 0
GCHR,	GETCHR
FBLOK,	0
BLKSAV, 0
/
/	THESE ARE LOCS USED BY THE INIT ROUTINE
/
*50;XXRETI	/POINTER FOR RETURN
*106;7700	/LITERAL FOR STANDARD SYS
*111;7700	/LITERAL FOR EXTENDED COMMANDS SYS
KMUPA,	-"
KUM215, " -215
*120;0200	/LITERAL FOR ST SYS
*122;0200	/LITERAL FOR EXT COM SYS
	$



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