; MSUPATCH - PATCHER FOR SINGLE-USER 31KW MSU BASIC ; CREATED 3/2/08 LAST MOD 3/13/08 ; BUGS... CAN ONLY EDIT INFO LINE(S) IF NEW TEXT IS SHORTER OR ; NOT MUCH LONGER, OTHERWISE MAYHEM RESULTS. WHEN RUNNING PREP ; SPACE-PAD INITIAL INFO LINE(S) TO END OF TERMINAL LINE, AND ; DON'T ENTER A LINE LONGER THAN THE INITIAL PADDING. ; ; NOTE! BEFORE PATCHING ANYTHING THE STOCK SYSTEM MUST ; HAVE BEEN LOGGED ONTO AT LEAST ONCE TO INITIALIZE ITSELF, ; THE PATCHES BYPASS THIS SO THOSE DATA STRUCTURES MUST ALREADY ; BE IN PLACE. SET T/D, LOG ON, BREAK SIM AT THE READY PROMPT ; RUN 77000 TO GO BACK TO HP-IPL/OS THEN RUN THIS UTILITY. ; ; THE PATCHES MAKE IT BOOT STRAIGHT TO THE READY PROMPT WITHOUT ; CLEARING MEMORY, AND CAUSE BYE TO RETURN TO HP-IPL/OS IF PRESENT ; OR RUN THE STOCK LOGOUT IF NOT. ; ; ALSO PERMITS FLIPPING THE BACKSPACE CHAR BETWEEN _ AND ASCII-8 ; CHANGING THE INFORMATION LINES (BUT NOT THE NUMBER OF LINES) ; AND RECONFIGURING THE CLK AND TTY SLOTS. CARD/TAPE NOT SUPPORTED. ; ; THIS IS ONLY FOR A 31KW SYSTEM (PREP ABS VERSION 3/1/08) SET UP FOR ; A SINGLE-USER, LOGGING DISABLED, NO CARD/TAPE SUPPORT. THE FOLLOWING ; LOCATIONS MUST BE TRUE: 2012=60114 73662=10443 67337=60373 75632=63647 ; ; INSTRUCTIONS... ASSUMING "UTIL" BUILD (DISK INSTR. IN PAR) ; BOOT THE UTIL BUILD, HALT, ATTACH THIS FILE TO PTR, CONTINUE ; THEN ENTER LOAD TO LOAD IT. ; IF PATCHING THE RAW OUTPUT FROM THE CONFIGURATOR... ; ENTER RUNABS, PRESS Y TO HALT, ATTACH PTR TO RAW ABS, CONTINUE ; SET DATE/TIME, LOG ON, AT READY PROMPT HALT, RUN 77000 ; IF REPATCHING AN ALREADY-PATCHED VERSION... ; ENTER HLT, ATTACH PTR TO EXISTING PATCHED ABS, CONTINUE, ENTER ABSLOAD ; (TO REPATCH DISK VERSION ENTER "FILENAME" F2AM) ; WITH LOGGED-ON 31KW CMU BASIC IN ALT-MEM VIA ONE OF THE ABOVE, ; ENTER CMUPATCH TO RUN THE PATCH UTILITY. ; WHEN DONE PATCHING, ENTER AM2ABS, PRESS Y TO SAVE, Y TO HALT, ; ATTACH PTP TO NEW OUTPUT ABS, CONTINUE, WHEN IT HALTS DETACH PTP ; AND CONTINUE. SHOULD BE DONE, TEST THE RESULTS. ; (TO SAVE PATCHED BASIC TO DISK ENTER "NEWNAME" 174000 AM2F) ; OCTAL DEFINE MSUPATCH #1 ;VALID 2012 AGET 60114 SUB IFNZ DROP #0 ENDIF 73662 AGET 10443 SUB IFNZ DROP #0 ENDIF 67337 AGET 60373 SUB IFNZ DROP #0 ENDIF 75632 AGET 63647 SUB IFNZ DROP #0 ENDIF IFZ "INCORRECT VERSION" $PRINT ELSE "SINGLE USER 31KW MSU BASIC PATCH UTILITY" $PRINT CRLF DO #0 ;EXIT FLAG "[1] APPLY PATCHES" $PRINT CRLF "[2] CHANGE BACKSPACE" $PRINT CRLF "[3] CHANGE INFO LINES" $PRINT CRLF "[4] CONFIGURE SLOTS" $PRINT CRLF "PRESS KEY OR ANY OTHER TO EXIT: " $PRINT CHRIN CRLF CASE = 61 ;1 - APPLY PATCHES "APPLYING PATCHES..." $PRINT CRLF 67562 73205 APUT ;BYPASS LOG-ON PROMPTS 100 2021 APUT ;BYBASS BASIC INIT ; PATCH TO MAKE BYE EXIT TO HP-IPL/OS OR LOGOUT... 75700 163705 APUT ;LDA 75705,I GET 1ST SWAPPER INSTRUCTION 75701 53706 APUT ;CPA 75706 IS IT HP-IPL/OS? 75702 127705 APUT ;JMP 75705,I YES - RUN THE SWAPPER 75703 127704 APUT ;JMP 75704,I NO - RUN THE STOCK LOGOUT 75704 73313 APUT ;73313 - ADDRESS OF LOGOUT CODE 75705 77000 APUT ;LOCATION OF SWAPPER = 77000 75706 105734 APUT ;1ST SWAPPER INSTRUCTION = 105734 101 75700 APUT ;SET BYE VECTOR TO NEW CODE ; NEW STARTUP PATCH (WAS JUST 3=67314 BUT THAT DIDN'T CLC 0) 75720 106700 APUT ;CLC 0 75721 127722 APUT ;JMP 75722,I 75722 67314 APUT ;67314 - START PAST TASK INIT 3 75720 APUT ;SET START TO NEW STARTUP CODE = 62 ;2 - CHANGE BACKSPACE 75530 AGET 137 SUB IFZ ;IF STOCK "CHANGING TO ASCII-8 BACKSPACE" $PRINT CRLF 75530 10 APUT ELSE ;IF NOT STOCK "CHANGING TO UNDERLINE BACKSPACE" $PRINT CRLF 75530 137 APUT ENDIF = 63 ;3 - CHANGE INFO LINE(S) #0 73070 AGET 2CPL DEC +DO ;LOOP THRU INFO LINES 73071 AGET INDEX ADD AGET ;PUSH START OF TEXT #0 73072 AGET INDEX ADD AGET DEC +DO ;LOOP FOR ALL CHARS DUP INDEX 2 DIV ADD AGET ;GET WORD INDEX #1 AND IFZ ;IF CHAR COUNT EVEN 400 DIV PCHR ;PRINT HIGH CHAR ELSE ;IF ODD 377 AND PCHR ;PRINT LOW CHAR ENDIF +LOOP CRLF ;FINISH PRINTING LINE DROP ;MEM POINTER +LOOP ;PRINT ALL LINES "CHANGE? [Y/ANY] " $PRINT CHRIN CRLF 131 SUB IFZ ;IF Y PRESSED "ENTER NEW LINE" $PRINT 73070 AGET 2CPL DEC IFNZ "S" $PRINT ENDIF "..." $PRINT CRLF #0 73070 AGET 2CPL DEC +DO ;LOOP THRU INFO LINES $IN $LEN IFZ $DROP " " ENDIF ;INPUT LINE, AT LEAST ONE SPACE DO ;trim too-long lines 3/13/08 $LEN CASE > 110 $TAIL DROP #0 DEFAULT #1 ENDCASE UNTIL ;72 chars or less 73072 AGET INDEX ADD $LEN APUT ;UPDATE LENGTH 73071 AGET INDEX ADD AGET ;PUSH START OF LINE #0 $LEN INC 2 DIV DEC +DO ;LOOP FOR EACH WORD DUP INDEX ADD $ADR INDEX ADD GET APUT ;WRITE WORD +LOOP ;NEXT WORD DROP $DROP ;MEM PTR AND STRING +LOOP ;NEXT LINE ENDIF = 64 ;4 - CHANGE SLOTS ;USES LOC 150 TO STORE PATCH # 67340 AGET $STR $TAIL $TAIL $DROP ;PUSH CLK SLOT DIGITS "CLK SLOT (" $PRINT PCHR PCHR "): " $PRINT $IN 40 $APPEND $VAL DUP CASE < 10 DROP > 25 DROP DEFAULT ;IF BETWEEN 10 AND 25 150 SWAP PUT ;SAVE SLOT# "PATCHING CLK TO SLOT " $PRINT 150 GET PNUM CRLF 67340 AGET 77 AND #0 APUT ;ZERO EXISTING CLK VECTOR 150 GET 114030 APUT ;SET NEW INT VECTOR #0 ;TERMINATE VALUE, PATCH LIST... 67340 67342 75643 75631 73547 DO DUP IFNZ ;IF NOT THE TERMINATOR DUP AGET 170000 AND 100000 SUB IFZ ;IF IT LOOKS LIKE I/O DUP DUP AGET 177700 AND 150 GET OR APUT ;PATCH IT ENDIF ENDIF WHILE ;NON-ZERO ADDRESS ENDCASE 73661 AGET $STR $TAIL $TAIL $DROP ;PUSH TTY SLOT DIGITS "TTY SLOT (" $PRINT PCHR PCHR "): " $PRINT $IN 40 $APPEND $VAL DUP CASE < 10 DROP > 25 DROP DEFAULT 150 SWAP PUT "PATCHING TTY TO SLOT " $PRINT 150 GET PNUM CRLF 73661 AGET 77 AND #0 APUT ;ZERO EXISTING TTY VECTOR 150 GET 114031 APUT ;SET NEW INT VECTOR #0 ;TERMINATE VALUE, TTY PATCH LIST... 73661 73665 73666 73671 73672 73673 74647 67316 67317 67332 67333 75612 75635 67351 67457 67460 67461 67466 67467 67470 67472 67314 DO DUP IFNZ DUP AGET 170000 AND 100000 SUB IFZ DUP DUP AGET 177700 AND 150 GET OR APUT ENDIF ENDIF WHILE ENDCASE DEFAULT DROP #1 ;EXIT IF ANY OTHER KEY PRESSED ENDCASE UNTIL ;EXIT ENDIF END ; CONSOLE ~TERMINATE~