File KEYPAT.PA (PAL assembler source file)

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

/1	KEY$ PATCH FOR COMMERCIAL BASIC

/	THIS FILE PROVIDES A WAY OF ACCESSING SLU2 AND 3 ON THE VT78.
/	THE FUNCTION CALL IS OF THE FORM KEY$(4*D+L)
/	L = LINE NUMBER: 0 = CONSOLE, 1 = SLU2, 2 = SLU3
/	D = TIMEOUT DELAY, 0 = NO TIMEOUT, N = APPROX *TBS* SEC OF TIMEOUT

/	THE STRING RETURNED IS OF THE SAME FORM AS USUAL, EXCEPT A NULL
/	STRING IS RETURNED IF THE TIMEOUT OCCURS.  ALSO, NOTE THAT SINCE
/	TIMEOUT OCCURS ON EACH CHARACTER, YOU CAN DIFFERENTIATE BETWEEN
/	A SINGLE ESC AND A WHOLE SEQUENCE;  A SINGLE ESC WILL BE RETURNED
/	AFTER A TIMEOUT, WHEREAS A WHOLE SEQUENCE IS TRANSMITTED RAPIDLY
/	ENOUGH TO BE PICKED UP COMPLETELY.


/	ASSEMBLE AND LOAD THIS FILE AS FOLLOWS:

/	.PAL KEYPAT
/	.R ABSLDR
/	*BASIC.OV/I
/	*KEYPAT$
/	.SAVE SYS BASIC.OV 3400-4577,22000-26377,33400-34777;7605

/	IT IS RECOMMENDED THAT YOU KEEP AN UNPATCHED COPY OF BASIC.OV AS A BACKUP


	XKSTROK=3515
	KSTROK=3625
	PGCH=3772
	SETLEN=3603
	O177=160
	XR1=11
	XR2=12
	TEMP1=63
	PUNSFIX=172
	CTCCHK=1260
	VALCNT=3732
	JMPSF=3407
	OVERLAY=3400
	LITPL=3564

	FIELD 2		/PUT PATCH ON THE OVERLAY CODE NOW
	*2000
	RELOC OVERLAY

	*JMPSF+15
	XKSTROK		/PATCH DISPATCH TABLE TO KSTROK NOW

	*XKSTROK
XKSTROK,JMS I PUNSFIX	/GET THE ARG
	DCA TEMP1
	TAD TEMP1	/ISOLATE KEYBOARD TO USE
	AND I KTAB	/HACK POINTER TO LITERAL "3"
	CLL RAL
	TAD KTAB
	DCA XR1		/POINT TO PAIR OF IOT'S
	TAD I XR1	/PICK UP KSF IOT
	DCA KSFIOT
	TAD I XR1	/NOW PICK UP KRB IOT
	DCA KRBIOT
	JMP I .+1	/JMP INTO NORMAL ROUTINE NOW
	KSTROK
KTAB,	XKTAB-1

KGCH,	0		/SUBSTITUTE GET CHAR ROUTINE
	TAD TEMP1	/GET PARAMETER
	AND O7774	/ISOLATE DELAY TO USE
	CIA
	DCA KC
KWAIT2,	CLA STL RAR	/CLA IF PDP-8/A
	DCA KZ
KWAIT,	JMS I PCTCCHK	/TEST IF ^C HIT
KSFIOT,	HLT		/GETS KSF
	JMP FIGUR8	/WAIT IN FIGURE 8 LOOP
	JMS I PCTCCHK
KRBIOT,	HLT		/GETS KRB
	AND O177
	JMP I KGCH	/RETURN WITH A CHARACTER
FIGUR8,	ISZ KZ		/DO INNER TIMEOUT LOOP
	JMP KWAIT
	TAD KC		/LOOP FOREVER IF NO DELAY
	SZA CLA
	ISZ KC
	JMP KWAIT2
	JMP I .+1
	SETLEN		/JUST USE CURRENT STRING IF TIMEOUT
			/NOTE THAT WE CAN DIFFERENTIATE BETWEEN ESC AND
			/ALTERNATE KEYPAD SEQ BY TIMING OUT HERE...
O7774,	7774
PCTCCHK,CTCCHK

	IFZERO .-LITPL&4000 <__TOO BIG!__>

KC=	XR1
KZ=	XR2		/DEFINE A FEW TEMPS

	*VALCNT+1	/PUT IOT TABLE HERE
O3,	3		/MUST PRECEDE XKTAB BY 1
XKTAB,	6031;6036
	6401;6406
	6421;6426
	6031;6036

	*PGCH
	KGCH		/ZAP LINK TO GCH IN KSTROK
	$



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