File HASPV3.PA (PAL assembler source file)

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

/OS/8 V3 HASP - THE PHANTOM PHANTOM
/	FOR DECSYSTEM-8		D.E. WREGE

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


/HASP IS INCOMPATIBLE WITH BATCH IN THAT SOME IF THE
/KEYMON AND CD INITIALIZATION CODE IS CHANGED.  ALSO
/IN ORDER TO GET SYSTEM BLOCKS AVALABLE THE OS/8 V3
/SYSTEM AREA IS 3-BLOCKS LARGER THAN NORMAL.  I.E. 73(8)
/RATHER THAN 70(8) BLOCKS ARE USED.  ON STARTUP
/HASP DETERMINES IF THE BLOCKS ARE AVAILABLE AND RESERVES
/THEM IF EMPTIES ARE AVAILABLE: IF NOT AN ERROR MESSAGE IS
/GENERATED.  THE OPTIONS:

	/H	INITIALIZES THE SYSTEM FOR HASP
	/N	RETURNS IT TO NORMAL (FOR BATCH)

/***********************NOTE*********************
/HASP USES BIT 0 OF LOC 7777 TO INDICATE THAT HASP
/IS RUNNING.  AT PRESENT THIS BIT IS RESERVED FOR
/EXPANSION IN OS/8 V3.
/************************************************


/THE LAYOUT OF HASPV3 IN THE RESERVED FOR EXPANSION
/BLOCKS AND THE WAY IT READS INTO CORE IS AS FOLLOWS:

/RESEXP:	LOADS INTO 1000-1400

/ 0-111	  HASP CODE FOR CD.
/	  LINE BUFFER FOR KEYMON

/ 112-177 SUBROUTINE CALLED BY GETCHR TO READ IN
/	  THE NEXT INPUT BLOCK.

/ 200-377 HASP CODE FOR KEYMON
/	  LINE BUFFER FOR CD.

/RESEXP+1:

/ 0-177	  COMMON CODE FOR GETTING CHARS.
/ 200-377 FIRST HALF OF CURRENT INPUT BUFFER

/RESEXP+2:
/ 0-177	  SECOND HALF OF CURRENT INPUT BUFFER
/ 200-377 NOT USED.

/THE KEY TO HASP IS THAT THE INPUT BUFFER IS SPLIT
/ACROSS A BLOCK BOUNDARY SO THAT ONLY ONE PAGE IS
/IN CORE AT A TIME.  THE SWITCH PSWITCH INDICATES
/WHICH HALF OF THE BUFFER BLOCK IS BEING USED.
/IT IS FORTUNATE THAT THE SYMETRY EXISTS BETWEEN THE
/CD AND KEYMON LINE BUFFERS.  NOTE THAT AFTER THE FIRST
/WRITE ONTO THE RESEXP BLOCKS THE ONLY BLOCK THAT NEEDS
/TO BE REWRITTEN EACH TIME IS RESEXP+1. I.E. THE COMMON
/CODE SECTION.  ALL REMEMBERED POINTERS ARE HERE.


/DEFINES - SYSTEM BLOCK ALLOCATION

KEYREC=	0007		/WHERE THE KEYBOARD MONITOR LIVES
RESEXP=	0070	/AREA ON SYSTEM DEVICE RESERVED
		/FOR EXPANSION BY US FOR US!
CDREC=	0051	/WHERE THE COMMAND DECODER LIVES

/COMMAND DECODER DEFINES

CDLXR=	0015
RESTRT=	0676		/WHERE CD STARTS UP
T=	0020
MPARAM=	7643
ANALYZ=	0202
TT=	0021	/*******CAREFUL********
		/WHERE HASP INIT STARTS
		/NOTE: CONFLICTS WITH BATCH
CDCONT=	1237	/ALSO CDCONT+1

/KEYMON DEFINES

AMFLAG=	0017
LXR=	0013
RBFLAG=	0020
NM1=	0034
BATCH=	0035
KEYMON=	0403
KCHANG=	1024
	/*******CAREFUL*******
	/LOCS KCHANG,KCHANG+1 ARE CHANGED
	/BY /H OPTION TO ALLOW HASP TO RUN

/AND OTHERS

BUFFC=4000


*200 /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 /CHECK FOR OPTIONS TAD I [MPARAM /FOR /H OPTION AND [20 /MASK /H BIT SZA CLA JMP I [SLASHH /SETUP FOR HASP TAD I [MPARAM+1 /NOW FOR /N CDF 0 AND [2000 /MASK /N SZA CLA JMP I [SLASHN SWMONC, CDF 10 TAD I [7620 /GET FILE START CDF 0 SNA JMP I [7605 /FILES DONT START AT ZERO DCA I [FBLOK CDF 10 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, JMS I [SWMON /PUT CODE IN MONITOR CLA STL RAR /4000=HASP DCA I [7777 JMP I [7605 /AND START UP KEYMON 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 I [FBLOK /FROM WHERE DCA RDBLK TAD HASPFL /START ON SYS DCA I [FBLOK /SAVE FOR HASP TAD I [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 SYSTEM, 7700 PAGE
/FIX UP MONITOR FOR 3 EXTRA BLOCKS AND /WRITE HASP OUT INTO THEM SWMON, 0 JMS I [GETBKS /NEED 3-EXTRA SYSTEM BLOCKS JMS I [7607 /NOW WRITE HASP INTO 4400 /RESEXP BLOCKS 1000 RESEXP JMP I [7605 /BAD WRITE JMP I SWMON /READ IN KEYMON MODIFY AND WRITE OUT /CALL: JMS SLSHS1 / PNTR TO CODE FOR PAGE 0 / INSTR FOR LOC 1024 / INSTR FOR LOC 1025 / RETURN SLSHS1, 0 JMS I [7607 /READ IN KEYMON 0200 /FIRST BLOCK BUFFC /INTO CHANGE BUFFER KEYREC /OF KEYMON HLT /TROUBLE JMS I [7607 0201 BUFFC+400 KEYREC+2 /INIT CODE HLT /HUH! JMS VERCHK /CHECK VERSION # TAD I SLSHS1 /GET POINTER TO PAGE 0 CODE JMS MOVE /MOVE IT IN BUFFC+BATCH /THERE BATCH-BATEND /#WORDS ISZ SLSHS1 TAD I SLSHS1 /GET INSTRUCTION DCA I [KCHANGE&377+BUFFC+400 ISZ SLSHS1 TAD I SLSHS1 /AND OTHER INSTRUCTION DCA I [KCHANGE+1&377+BUFFC+400 JMS I [7607 /WRITE IT BACK OUT 4200 /AS IT IS READY FOR HASP BUFFC KEYREC HLT /HUH!! JMS I [7607 4201 BUFFC+400 KEYREC+2 HLT ISZ SLSHS1 JMP I SLSHS1 /MOVE SUB: / TAD (SRCADD / JMS MOVE / DESTADD / -#WORDS MOVE, 0 DCA MOVPT1 /SOURCE POINTER TAD I MOVE /DESTINATION DCA MOVPT2 ISZ MOVE TAD I MOVE /WORD COUNT DCA MOVCNT ISZ MOVE /RETURN POINTER TAD I MOVPT1 DCA I MOVPT2 ISZ MOVPT1 ISZ MOVPT2 ISZ MOVCNT JMP .-5 JMP I MOVE MOVPT1, 0 MOVPT2, 0 MOVCNT, 0 /A SUBROUTINE TO DO THE EQUIVALENT OF SLSHS1 ONLY /FOR THE CD. SLSHS2, 0 JMS I [7607 /READ IN A RECORD OF CD 0200 BUFFC /INTO CHANGE BUFFER CDREC HLT JMS I [7607 0200 BUFFC+400 CDREC+2 HLT TAD I SLSHS2 /GET ADD OF LIST JMS MOVE BUFFC+TT TT-TTEND ISZ SLSHS2 TAD I SLSHS2 DCA I (CDCONT+1&377+BUFFC+400 ISZ SLSHS2 /POINT TO RETURN JMS I [7607 /NOW REWRITE CD 4200 BUFFC CDREC HLT JMS I [7607 /AND OTHER BLOCK 4200 BUFFC+400 CDREC+2 HLT JMP I SLSHS2 /DONE SLASHH, CDF 0 JMS SLSHS1 /CHANGE MONITOR HSPKEY SPA CLA JMP BATCH JMS SLSHS2 HSPCD NOP JMP I [SWMONC /AND CONTINUE SLASHN, JMS SLSHS1 NRMKEY RAL SMA CLA JMS SLSHS2 NRMCD RAL JMP I [SWMONC /MONITOR VERSION CHECK: VERCHK, 0 TAD I [BUFFC+35 /THE BATCH ENTRY INSTRUCTION TAD [-4562 /THE JMS I [SYSHND SNA CLA /SKIP IF BAD MONITOR JMP I VERCHK /IS O.K. JMP I [7605 /FOR NOW. PAGE
/SYSTEM NEEDS TO BE AT LEAST 73 BLOCK LONG. /SO CHECK IT AND QUIT IF NOT O.K. GETBKS, 0 JMS I [7607 /READ DIRECT BLK1 200 BUFFC /INTO CHANGE BUFFER 1 /THAT'S WERE DIRECTORIES START JMP I [7605 /HUH! TAD I [BUFFC+1 /GET WHERE FILES START TAD [-73 /NEED THAT MANY SMA CLA /SKIP IF NOT ENOUGH JMP I GETBKS /GROOVY!!! TAD I [BUFFC+5 /GET FIRST FILENAME SZA CLA /SKIP IF AN EMPTY JMP NOROOM /NOT ENOUGH ROOM IN THE INN. TAD I [BUFFC+6 /GET SIZE OF EMPTY CIA /MAKE POSITIVE CLL /AS MIGHT BE LARGE TAD I [BUFFC+1 /ADD TO WERE FILES START TAD [-73 /IF LINK CARRY WE ARE O.K. SNL CLA JMP NOROOM /NOT ENOUGH ROOM TAD [-73 /CALC HOW MANY EXTRA WE NEED TAD I [BUFFC+1 /RESULT=-REQUIRED CIA /MAKE POSITIVE TAD I [BUFFC+6 /ADD TO -EMPTIES SNA /SKIP IF ANY LEFT JMP SQDIR /SQ OUT EMPTY DCA I [BUFFC+6 GETBLD, TAD (73 /NEW START OF FILES DCA I [BUFFC+1 JMS I [7607 /REWRITE DIRECTORY SEG 4200 BUFFC 1 HLT JMP I GETBKS /AND EXIT SQDIR, TAD I SQPNT1 DCA I SQPNT2 ISZ SQPNT1 ISZ SQPNT2 ISZ SQCNT JMP SQDIR ISZ I [BUFFC /DECREASE ENTRIES IN SEG JMP GETBLD /DONE HLT /SHOULD NEVER SKP SQPNT1, BUFFC+7 SQPNT2, BUFFC+5 SQCNT, -172 BADMON, JMS ERROR MBADMON JMP I [7605 NOROOM, JMS ERROR MNOROOM JMS ERROR MNORO2 JMS ERROR MNORO3 JMP I [7605 /ERROR MESSAGE PRINTER - EXITS TO MONITOR ERROR, 0 CLA CLL /JUST IN CASE TAD I ERROR DCA T ISZ ERROR /TO RETURN TAD [215 JMS I [ECHO /START WITH C.R. CLA CLL TAD [212 JMS I [ECHO /LINE FEED CLA CLL ERRL, TAD I T /GET PACKED WORD RTR CLL;RTR;RTR /GET HI ORD CHAR JMS PCH /PRINT IT TAD I T /FOR LOW ORDER JMS PCH ISZ T JMP ERRL /KEEP GOING /PRINT A CHAR - EXIT TO MON WHEN = 0 PCH, 0 AND [77 SNA /SKIP IF ONE THERE JMP I ERROR /BACK TO CALL DCA TT /TEMP STORE TAD TT AND [40 /FOR TYPE SNA CLA /SKIP IF 200 CODE TAD [100 /IS 300 CODE TAD [200 /PARITY IN TAD TT /RESTORE CHAR JMS I [ECHO /USE SUBROUTINE CLA CLL /EXIT WITH AC CLEAR KSF /AND CHECK ^C JMP I PCH /AND RETURN KRS /READ IT TAD [-"C+100 /AND CHECK FOR SNA CLA /^C JMP I [7605 /IS ^C JMP I PCH PAGE
*1000 /HASP PHANTOM FOR THE PHANTOM COMMAND DECODER /THE FIRST 111 LOCS OF THIS PAGE MAY NOT BE REFERRED /TO BY THE KEYMON PORTION AS THEY ARE OVERWRITTEN /BY THE KEYMON LINE BUFFER. NONE OF THIS PAGE NEED /BE REFRESHED IN RESEXP BLOCKS. 0130 /FOR REST OF CD ERROR MESSAGE 0000 /******MONITOR DEPENDENT**** /THIS MUST BE AT XGLINE OF CD. CDRSTR, JMP CDHASP-1 /***GETS CLEARED AFTER STARTUP JMS I SYSH /RESTART HASPING 0400 /GET HASP OVER MYSELF 1000 /1000-1777 RESEXP PARMM1, MPARAM-1 /ALSO A HALT DCA CDRSTR /CLEAR INITAL JMP CDHASP, TAD CDLNST /START OF LINE BUFFER DCA CDLXR /INIT LXR TAD M107 /ONLY ALLOW 72 COLUMNS DCA T /USE T FOR COUNTER JMS I (GETCHR /GET A CHARACTER TAD MSTAR /CHECK "*" SNA /SKIP IF LINE IS NOT FOR CD. JMP CDLP01 /START UP JMS I (SLASH /NO:CHECK SLASH JMP CDHASP CDLP01, JMS I (GETCHR /YES:SCAN OUT LINE TAD M215 /A C.R. ENDS LINE SNA /SKIP IF NOT JMP CDEOLN /END CDLINE TAD CRMDOL /WE TURN "$" INTO ALTMODES SNA JMP CDDOLR /END LINE WITH "$" TAD ("$-"_ /WE MUST TURN _ INTO < SNA TAD ("<-"_ /DO IT TAD ("_ /RESTORE CHAR DCA I CDLXR /PUT IN LINE BUFFER ISZ T /SKIP IF LINE TOO LONG JMP CDLP01 /KEEP SCANNING JMS I GCRET /LINE TOO LONG-SCAN TO C.R. /CR FOUND = END LINE CDEOLN, DCA I CDLXR /END THE LINE TSF JMS I (ECHO /MAKE SURE TTY FLAG UP JMS I SYSH /NOW WRITE OUT LINE INPUT STUFF 4200 /AS WE ARE HERE 1400 /A WHOLE BLOCK RESEXP+1 /THERE HLT JMS I SYSH /WE NEED TO RESTORE STUFF 200 /BEHIND LINE BUFFER 1400 /CAN USE THIS AREA CDREC+2 /FOR TEMP STORAGE MSTAR, -"* /ALSO A HLT TAD I CDMP1 /MOVE STUFF DOWN DCA I CDMP2 /BEHIND LINE BUFFER ISZ CDMP1 ISZ CDMP2 ISZ CDMCN1 JMP .-5 TAD I CDMP3 /NEED CRLF SUBROUTINE DCA I CDMP4 /MOVE IT IN BEHIND HERE ISZ CDMP3 ISZ CDMP4 ISZ CDMCN2 JMP .-5 KCC /COMMAND DECODER DOES THIS JMP I .+1 /AND START UP CD. ANALYZE CDMP3, 1400+112 CDMP4, 1000+112 /POINTERS TO FILL IN LAST CDMCN2, 112-200 /OF THIS PAGE SYSH, 7607 IFNZRO 1112-.&4000 <+= /TOO MUCH CODE BEFORE HERE> /"$" FOUND = END LINE LIKE ALTMODE CDDOLR, JMS I GCRET /IGNORE REST OF LINE CLA STL RAR /SET ALTMODE BIT CDF 10 /IN CD PARAM AREA DCA I PARMM1 /LIKE OLD XGLINE DOES CDF 0 /BACK TO THIS FIELD JMP CDEOLN /AND END THE LINE M107, -107 M215, -215 CRMDOL, 215-"$ GCRET, GGCRET CDLNST, 1200-1 /START OF CD LINE BUFFER CDMP1, 1600+112 /CD POST INIT CODE CDMP2, 1200+112 /MOVE POINTERS CDMCN1, 112-200 /AND COUNTER
IFNZRO .-1112&4000 <+= /REST MUST BE ABOVE LINE BUFFER> /SUBROUTINE CALLED BY GETCHR TO READ NEXT INPUT BLOCK. /ENTER WITH DESIRED BLOCK IN AC. NXTBLK, 0 DCA RBLK /SAVE DESIRED BLOCK # JMS I SYSH /SAVE COMMON CODE AS IS 4100 /JUST THE ONE PAGE 1400 /AS WE NEED TO REMEMBER RESEXP+1 /SUB RETURNS HLT JMS I SYSH /READ IN NEXT BLOCK 0201 /FROM INDEV P1400, 1400 /OVER COMMON CODE RBLK, 0 HLT JMS I SYSH /AND WRITE OUT SECOND PAGE 4100 /OF BUFFER FIRST P1600, 1600 /FROM END RESEXP+2 /ONTO 3RD EXP BLOCK HLT /IF ERROR TAD P1400 DCA NXTP1 TAD P1600 DCA NXTP2 TAD (-200 DCA NXTCNT TAD I NXTP1 /AND COPY FIRST HALF DCA I NXTP2 /BACK OVER SECOND HALF ISZ NXTP1 /TO MINIMIZE TAPE MOTION ISZ NXTP2 /ON READ NEW BLOCK. ISZ NXTCNT /SKIP WHEN DONE JMP .-5 /KEEP MOVING JMS I SYSH /AND READ COMMON BACK DOWN 100 /ONLY ONE PAGE 1400 RESEXP+1 /BACK IN HLT /HLT ON ERRORS JMP I NXTBLK /AND RETURN NXTP1, 0 /POINTERS FOR MOVE NXTP2, 0 /VOLITILE NXTCNT, 0 PAGE
/THIS IS THE HASP CONTROLLER FOR THE KEYBOARD MONITOR. /REQUIRES ONLY THE BATCH HOOKS. KMNTRY, KEYMON+1 /MUST BE AT XGLINE TAD .-1 /SAVE RETURN FOR REFRSH DCA RBFLAG /A GOOD TEMP JMS I SYSHN /REFRESH MYSELF 0400 1000 RESEXP HLT JMP KHASPGO /CONTINUE CODE ELSEWERE SYSHN, 7607 /HERE IS THE CODE TO MAKE MYSELF GO AWAY /NO LITERALS IN "VANISH" CODE VANISH, JMS I SYSHN /WRITE COMMON CODE OUT 4200 /TO REMEMBER POINTERS 1400 /INCLUDING BUFFER RESEXP+1 HLT /HLT ON ERRS JMS I SYSHN /NOW TO MOVE STUFF BEHIND 200 /THE LINE BUFFER 1400 /CAN USE THIS KEYREC+2 HLT TAD I KRESP1 /NOW MOVE IT IN DCA I KRESP2 /BEHIND LINE BUFFER ISZ KRESP1 ISZ KRESP2 /NEXT WORD ISZ KRESC1 /SKIP WHEN DONE JMP .-5 TAD I KRESP3 /AND BEHIND HERE. I.E. BEHIND DCA I KRESP4 /WHERE XGLINE NORMALLY ENDS ISZ KRESP3 ISZ KRESP4 ISZ KRESC2 /ALL OF IT JMP .-5 JMS I SYSHN /AND READ IN THE RUN STUFF 201 /WHERE BUFFER WAS 1400 KEYREC+3 /TO RESTORE ALL OF HLT /KEYMON KCC /THAT'S WHAT GLINE DOES JMP I RBFLAG /AND DO SUB RETURN KRESP1, 1400+112 /POINTERS FOR MOVE KRESP2, 1000+112 /BEHIND LINE BUFFER KRESC1, 112-200 KRESP3, 1600+62 /MOVE SRCH ETC BEHIND KRESP4, 1200+62 /XGLINE ROUTINE KRESC2, 62-200 IFNZRO 1262-.&4000 <+= /TO MUCH CODE BEFORE HERE> /THE PREVIOUS CODE MUST BE PRIOR TO LOC 1327 /AS OVERWRITTEN ABOVE
TAD KMNTRY /ENTRY ON INITIALIZATION LOAD DCA RBFLAG KHASPGO, DCA AMFLAG /LIKE XGLINE DOES TAD (1000-1 /START OF LINE BUFFER DCA LXR /INIT POINTER TAD (-107 /THAT'S HOW MUCH ALLOWED DCA NM1 /USE NM1 FOR COUNTER JMS I (GETCHR /GET A CHAR AND START TAD (-". /LOOKING FOR A . SNA /SKIP IF FOUND JMP KHASP1 TAD (".-"* /MAKE AC=CHAR-* JMS SLASH /LOOK FOR / ALSO JMP KHASPGO KHASP1, JMS I (GETCHR /GET ANOTHER CHAR TAD (-215 /AND SEE IF EOL SNA JMP KEOLN /IS KEYBOARD EOL TAD (215-"$ /"$" ALSO END LINES SNA JMP KALTMOD /PROCESS ALTMODE EOL. TAD ("$ /RESTORE CHAR DCA I LXR /STICK IN LINE BUFFER ISZ NM1 /COUNT CHARS JMP KHASP1 /KEEP SCANNING JMS I (GGCRET /IGNORE REST OF LINE SKP /AND ACT LIKE C.R. KALTMO, ISZ AMFLAG /LIKE XGLINE DOES KEOLN, DCA I LXR /END THE LINE DCA I LXR /WITH 2 ZEROS TSF JMS I (ECHO /MAKE SURE TTY FLAG UP JMP VANISH /AND MAKE HASP MOSTLY GO AWAY /LOOK FOR A "/" AND LIST IF SO. OTHER WISE IGNORE TO /CARRIAGE RETURN. /CALL: JMS SLASH /AC=CHAR-"* SLASH, 0 TAD ("*-"/ /CHECK FOR "/" SZA CLA /SKIP IF A "/" JMP .+3 /JUST IGNORE LINE JMS I (LIST JMP I SLASH /AND RETURN JMS I (GGCRET /IGNORE LINE JMP I SLASH PAGE
GETCHR, 0 CLA CLL ISZ ICRCNT JMP I2 /NO NEED TO READ ISZ PSWITC /SKIP IF NEED ANOTHER BLOCK JMP COPHLF /GET OTHER PAGE IN TAD FBLOK JMS I (NXTBLK /GET NEXT INPUT BLOCK ISZ FBLOK /INC TO NEXT STA CLL RAL /-2 DCA PSWITC /RESET PAGE/HALF SWITCH GETCHL, TAD C1600 /THAT'S WHERE THE BUFFER STARTS DCA IPTR1 TAD C1600 DCA IPTR2 TAD (-300 /CHARS/PAGE 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 / WE IGNORE CERTAIN CHARACTERS! SNA JMP GETCHR+1 /NULL TAD (-12 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 COPHLF, JMS I (7607 /READ OTHER HALF BLOCK 100 /FROM RESEXP+2 C1600, 1600 /IN BUFFER RESEXP+2 HLT JMP GETCHL /AND CONTINUE ENDHSP, DCA I (7777 /CLEAR BATCH RUNNING FLAG JMP I (7605 /QUIT HASPING GGCRET, 0 JMS GETCHR /SCAN OUT TO THE CARRIAGE RETURN TAD (-215 SZA CLA JMP .-3 JMP I GGCRET LIST, 0 /SR TO LIST SLASH LINE JMS GETCHR /GET A CHAR JMS ECHO /TYPE IT TAD (-"^ /TEST FOR ^ SNA JMP HANUPA /YES, HANDLE UP ARROW TAD ("^-215 /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 /HANDLER FOR UP-ARROW HANUPA, KSF /WAIT FOR JMP .-1 /KEY STRUCK KCC /ALSO CLEARS AC JMP LIST+1 /CONTINUE LISTING /ECHO A CHAR TO CONSOL ECHO, 0 TLS TSF JMP .-1 JMP I ECHO /THESE LOCS ARE WHAT MUST BE WRITTEN OUT EACH TIME /HASP GOES BACK TO KEYMON OR CD. FBLOK, 0 /NEXT INPUT BLOCK ICHAR, 0 /TEMP FOR 1/2 CHARS UNPACKING I3, 0 /THREE WAY CHAR SWITCH PSWITC, -1 /PAGE/BLOCK SWITCH ICRCNT, -1 /INIT FOR FIRST READ IPTR1, 0 /TWO INPUT POINTERS IPTR2, 0 PAGE
HSPCD, /HASP CD PAGE 0 RELOC TT /WHERE INIT CODE GOES /INCOMPATIBLE WITH BATCH TT, JMS I SYSHND 0400 1000 RESEXP SKP CLA /ERROR=CLEAR HASP RUNNING JMP BTCHGO /GO BABY DCA I KM1 JMP I .+1 7605 KM1, 7777 SYSHND, 7607 BTCHGO, JMP I .+1 RESTRT+1 TTEND=. RELOC NRMCD, /NORMAL KEYMON RELOC TT CIF 0 TAD I 43 /TAD I DVICE TAD 41 /TAD OUTSW SNA CLA /SNA CLA JMP NAMECT /JMP NAMECT CDF 0 /CDF 0 ISZ I 2 /ISZ I NUMTST JMP I 107 /JMP I [7605 NAMECT, CIF CDF 0 /CDF CIF 0 JMP I .+1 /JMP I .+1 0677 /RESTRT+1 0;0 RELOC /FOR KEYMON WITH HASP HSPKEY, RELOC BATCH JMS I 162 /JMS I [7607 0400 / 0400 1000 / 1000 RESEXP / RESEXP SKP CLA /SKP CLA JMP BCHGO /JMP BCHGO DCA I KM11 /DCA I KM1 JMP 1 /JMP KMONER KM11, 7777 BCHGO, CDF CIF 0 JMP I .+1 KHASPGO-2 BATEND=. RELOC NRMKEY, RELOC BATCH JMS I 162 /JMS I [7607 0610 / 0610 NM4, 0 / 0 13 / 13 SKP CLA /SKP CLA JMP BCHGO /JMP BCHGO DCA I KM11 /DCA I KM1 JMP 1 /JMP KMONER KM11, 7777 BCHGO, CDF CIF 0 JMP I .+1 1001 /KMINIT RELOC MBADMO, TEXT \MONITOR INCOMPATIBLE\ MNOROO, TEXT \MONITOR SIZE TOO SMALL:\ MNORO2, TEXT \TO FIX: CREATE 3-BLOCK EMPTY\ MNORO3, TEXT \AS FIRST DIRECTORY ENTRY.\ 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