File HP.TK

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

/******* TOPS8 PTP-PUNCHER EMULATOR *******
/LAST EDIT: 29-SEP-78, HOU
/LAST EDIT: 10-MAR-76, ELC (REMOVED FAKEHANDLER STUFF)
/LAST EDIT:  5-FEB-76, ELC (ADAPTED TO V6)
/LAST EDIT: 30-DEC-75, JV
/CREATED: 29-DEC-75, JV (FROM LE)

/FUNCTION: TO EMULATE THE PTP-PUNCHER IOTS AND TO SEND CHAR-
/	ACTERS FROM THE USER ACCUMULATOR TO THE PTP-PUNCHER.
/CONCEPT:THE PAPERTAPE-PUNCHER IS A SHARED DEVICE.
/	IT WOULD BE CONVENIENT IF THE CLAIM FOR IT
/	COULD BE HANDLED AUTOMATICALLY WITHOUT CONFLICTS.
/	THIS COULD BE ACHIEVED BY USING THE PTP-PUNCHER
/	BLOCKDRIVER AS OUTPUT MEDIUM: FOREGROUND PROGRAMS
/	USE IT TOO. SO WHOEVER HAS CLAIMED THE PTP-PUNCHER
/	BLOCKDRIVER, HAS CLAIMED THE PTP-PUNCHER TOO.
/	TWO BUFFERS ARE USED FOR SMOOTH OPERATION BETWEEN
/	BACKGROUND SWAPS.
/	ANY BLANKS SEND BEFORE THE FIRST PSF INSTRUCTION ARE
/	IGNORED (TO SUPPRESS THE HANGING IN CASE OF PROGRAMS
/	THAT DON'T ACTUALLY USE THE PUNCHER, BUT DO A 6024
/	JUST FORTRAN II).
/	THE CHARND ARE
/	PACKED (LIKE OY ARE. WHEN
/	THE BUFFED IS MADE INACTIVE
/	AND THE BG-SCHEDULER INFORMED OF THIS. THEN THE
/	PTP-PUNCHER BLOCKDRIVER IS CALLED. WHEN BUSY, THIS
/	TASK LOOPS TO RETRY. BEFORE AWAITING THE COMPLETION
/	OF THE TRANSFER, A NEW BUFFER IS PSARY OVERLAP. THE VERY L/	TED WITH A CTRL/Z AND N THE "GENERAL CLEAR",
INTO THE BUFFER (IF NOT YET)
/	AND A "CLEAR SWPOUT" IS DONE.
/	NOTE THAT PE CARRIES ITS BUFFERS IN ITS OWN BODY AND
/	IS THUS RATHER LARGE. PART OF THE INITIALISING CODE
/	RESIDES IN THE BUFFER (ONCE ONLY CODE).

/	PAPERTAPE-IOTS ARE EMULATED AS FOLLOWS:
/	6020,5&7:ERROR RETURN, RESULTING IN ERROR MESSAGE
/	6021	:OVERLAID BY A PERMANENT SKIP
/	6022&3	:NO OPERATION
/	6024&6	:PUT CHARACTER IN BUFFER
/	6000	:COPY BLOCKS INTO BUFFER (FOR FAKE HANDLER)

PEBUFMAX=200	/LENGTH OF BUFFERS , MUST BE 1 PAGE OR 2,4,8,ETC.
IFNZRO PEBUFMAX&177+PEBUFMAX-1&PEBUFMAX <LNGTHR,XERROR>

BUFLNG=PEBUFMAX^2

PEUPC,	TASKNA HP	/ "HP"
PEUFLDS,200+BUFLNG	/ONE PAGE PLUS BUFFER(S)
PEBUFI,	PEINIT		/START OF INITIALISATION
PETVI,	PETV		/POINTER TO TRANSFER VECTOR
PECA,	0
PE,	JMP I PEBUFI	/DO INITIALISATION. OVERLAYD WITH:
/	SNA CLA
	 JMP PECLR	/'CLEAR': CLOSE OUTPUT AND SWPOUT
PESTRT,	TAD I PEUINST	/FETCH INSTRUCTION
	AND C7
	CLL RAR
	SNA
	 JMP PE2	/6020 OR 6021
PEERR,	T023 GIVE NOP
	SNA CLA		027
	 JMP PERET	/AC=0 F
	TAD I PEUAC	/6024 & 6377	/TAKE 8 BITS ONLY
	TAD PEM232	/-232
	SNA		/A ^Z IS CONSIDERED END OF INPUT
	 JMP PECLR	/
PEEND,	TAD PE232	/
PMYCDF,	  HLT		/BUFFER IS IN THIS FIELD
PEJMP,	JMP I PEP	/COROUTINE !
PEP,	PEP1		/ROUTINE TO GET ET,	JMS MONITOR	//RETURN  RETURN	//

PECLR,	TAL UP BUFFER WITH ZERO'SFLIP CALLS
	DCA PEPAT2
	DCA PEPAT3	/LET PE DO A SWPOUT
	JMP PEEND	/BE SURE TO WRITE THE BUFFER

/PATCH THE USER INSTRUCTION FOR FAST EMULATION.
PE2,	/SNL CLA
	/ JMP PEERR	/6020
	ACM1		/6021: SKIP ON FLAG, PATCH BG !
	TAD I PEUPC	/NOTE THIS FLIPS THE LINK !!
	ISZ I PEUPC	/LET HIM SKIP RIGHT NOW
	DCA ZTEM1	/ADDRESS OF INSTRUCTION
	TAD I PEUFLDS
	AND C70
	TAD C6201
	DCA .+2
	TAD PESKP
	  CDF		//CDF TO USERS INSTRUCTION FIELD
	DCA I ZTEM1	//
	JMP PERET	//
PEP0,	JMS PEP		/GET FIRST CHAR
PEP1,	DCA I PECA	/STORE IN BUFFER
	JMS PEP		/GET SECOND CHAR
	DCA PETMP	/SET ASIDE FOR A WHILE
	JMS PEP		/GET THIRD CHAR
	RTL
	RTL
	DCA ZTEM1	/8 BITS LEFT JUSTIFIED
	TAD ZTEM1
	AND C7400	/TAKE FOUR HIGH ORDER BITS
	TAD I PECA	/ADD INTO FIRST BUFFER WORD
	DCA I PECA	/THATS ONE
	ISZ PECA	/BUMP POINTER TO NEXT BUFFER WORD
	TAD ZTEM1
	RTL
	RTL
	AND C7400	/FOR LOW ORDER BITS
	TAD PETMP	/ADD SECOND CHAR
	DCA I PECA	/STORE IN SECOND BUFFER WORD
	ISZ PECA	/BUMP ISZ PEWC	/INCREMENT DOUBEP0	/BUFFER NOT FULL YETLIP	/DEACTIVATE THE BG
-PEBUFMAX: START OF FULL BUFFER
	DCA PETV+1	/DROP INTO TRANSFER VECTOR
	TAD PEBUFI
	CIA
	TAD PECA
PE377,	AND PEBUFL	/-PEBUFMAX-PEBUFMAX-1 WRAP AROUND
	TAD PEBUFI
	DCA PECA
	JMS PEWT	/WAIT FOR COMPL. OF PREVIOTVI	/GET POINTER TO TRANR
	   CALL
	   TASKNA R ALREADY IN USE BY FORES THE EVENT #
PEPAT2,	JMS PEFLIP	/ACTIVATE THE BG
	TAD PEPENG	/-PEBUFMAX%2!4000
	DCA PEWC	/RESET WORDCOUNT
PEPAT3,	JMP PEP0	/AND CONTINUE
	JMS PEWT	/WAIT FOR COMPLETION OF LAST XFER.
	JMS MONITOR
	   EXIT SWPOUT
PEFLIP,			/ACTIVATE/DEACTIVATE BG
PEWC,	-PEBUFMAX%2!4000/SHARED LOCATION !
	CDF MONFLD
	TAD I PEUSTAT
	RAL
	CML RAL		/COMPLEMENT INACTIVE BIT
	CML RTR		/COMPLEMENT EMULATE BIT
IFNZRO BGMAX-1 <
	AND PELNG1	/CLEAR LONG SO WE GET PRIORITY >
	DCA I PEUSTAT
IFNZRO BGMAX-1 <
	JMS MONITOR	/KICK THE BG-SCHEDULER SO HE KNOWS
	   SIGNAL
	   BSSLOT	/ >
	CDTOIF
	JMP I PEFLIP
PETMP,			/SHARED LOCATION
PEWT,	.-.		/WAIT FOR COMPLETION
	JMS MONITOR
	   WAIT
PESLOT,	   -1		/MAKES 'WAIT' BEHAVE LIKE 'NOP'
	CLA		/IGNORE ERRORS AND COMPLETION

JMP I PEWT PEWAIT, JMS MONITOR STALL DGNTICK / CLA JMP PECALL PETV, 0 //* /THIS IS THE ACTUAL TRANSFER VECTOR 0 //* /2 WORDS, BLOCK NUMBER NOT USED PEUSTAT,0 //* PEUAC, 0 //*THESE 5 WORDS PEUINST,0 //* PESKP, SLNG1, -LONG-1 / > PEPE232, 232 PEM232, -232 376 PEBUFP, -PEBUFMAX PEBUFL, -PEBUFMAX-PEBUFMAX-1 PAGE BUFBEG=. /BEGIN OF BUFFER /THIS IS THE FIRST PAGE OF THE BUFFER AND CONTAINS /A LOT OF INITIALISATION CODE. PEBUF0, BUFBEG /STARTING ADDRESS OF THIS PAGE PEBUF1, PETV-1 PEBUF5, PMYCDF PEBUF7, PE&7600-1 PEBUF8, PEP PEBUF9, PEP1 PBUF10, PESTRT 0 PEINIT, SZA /INITIALISATION CODE JMP .+3 PEIGNR, JMS MONITOR /JUST A 'CLEAR' EXIT RELEASE DCA ZTEM1 /POINTER TO BG-AREA TAD ZTEM1 TAD (UINST JMS DEFER TAD (-TLS&7007+KL8P+10 SZA /PLS ? JMP PEGO TAD ZTEM1 TAD (UAC JMS DEFER /GET UAC PEGO, CDTOIF SNA CLA /IS IT A BLANK ? JMP PEIGNR /YES, THEN IGNORE THIS TRAP TAD PEBUF7 DCA AUTO10 TAD ZTEM1 TAD (UPC /SET UP PEUPC DCA I AUTO10 TAD ZTEM1 TAD (UFLDS DCA I AUTO10 /SET UP PEUFLDS DCA I AUTO10 /BSZ AUTO10 /SKIP POI PEBUF9 DCA I POUTINES TAD PEBUF0 DCA I AUTO10 /INITIALISE BUFFER POINTER TAD (SNA CLA DCA I AUTO10 /PATCH INITIALISATION CALL TAD MYCDF DCA I PEBUF5 /SET UP PMYCDF DCA AUTO10 TAP PETV RDF TAD PEBUF0 D ZTEM1 DCA I AUTO10 TAD ZTEM1 TAD (UAC DCA I AUTO10 TAD ZTEM1 TAD (UINST DCA I AUTO10 CDF MONFLD /+ ORIG. DF JMP I PBUF10 /START TASK PAGE $



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