; BINPATCH - ASSISTS IN ALTERING DEVICE I/O ASSIGNMENTS 3/23/08 ; REQUIRES ALTUTIL.IPL FCAM.IPL SHAM OCTAL DEFINE BINPATCH "BINARY PATCH UTILITY" $PRINT CRLF DO ;UNTIL QUIT #0 ;EXIT FLAG, CHANGES TO NON-ZERO TO EXIT CRLF "1) RUN FCAM TO FIND CODE" $PRINT CRLF "2) RUN SHAM TO DUMP CODE" $PRINT CRLF "3) CHANGE DEVICE I/O SLOT" $PRINT CRLF "PRESS 1-3 (ANY OTHER EXITS): " $PRINT CHRIN CRLF CASE = 61 FCAM = 62 SHAM = 63 ;CHANGE I/O SLOT... ;USES ZP MEM 150 TO 155 "EXISTING I/O SLOT: " $PRINT $IN 40 $APPEND $VAL DUP IFZ DROP ELSE 150 SWAP PUT ;STORE OLD SLOT IN LOC 150 "NEW I/O SLOT: " $PRINT $IN 40 $APPEND $VAL DUP IFZ DROP ELSE 151 SWAP PUT ;STORE NEW SLOT IN LOC 151 "FROM ADDRESS: " $PRINT $IN 40 $APPEND $VAL DUP IFZ DROP ELSE 152 SWAP PUT ;STORE FROM IN 152 "TO ADDRESS: " $PRINT $IN 40 $APPEND $VAL DUP IFZ DROP ELSE 153 SWAP PUT ;STORE TO IN 153 ;MAKE SURE TO >= FROM 153 GET 152 GET SUB IF<0 "INVALID RANGE" $PRINT CRLF ELSE "PATCH CONTROL WORDS? (Y/N) " $PRINT CHRIN CRLF 131 SUB 154 SWAP PUT ;154=0 TO PATCH CW "PROMPT BEFORE CHANGING? (Y/N) " $PRINT CHRIN CRLF 131 SUB 155 SWAP PUT ;155=0 TO PROMPT 150 GET AGET DUP IFZ DROP ELSE "MOVING IRQ VECTOR" $PRINT CRLF 150 GET #0 APUT 151 GET SWAP APUT ENDIF 152 GET 153 GET +DO ;LOOP THRU SPECIFIED RANGE ;INSTRUCTION MUST MATCH 1000X1XYYYZZZZZZ WHERE ;X=DON'T CARE Y=ANYTHING BUT 0 Z=OLDSLOT INDEX AGET 172000 AND 102000 SUB IFZ ;=1000X1 INDEX AGET 700 AND IFNZ ;YYY NOT 0 INDEX AGET 77 AND 150 GET SUB IFZ ;ZZZZZZ=OLDSLOT INDEX PNUM INDEX AGET PNUM 155 GET IFZ " CHANGE? (Y/N) " $PRINT CHRIN ELSE 131 ENDIF 131 SUB IFZ " --> " $PRINT INDEX AGET 177700 AND 151 GET OR DUP PNUM INDEX SWAP APUT ENDIF CRLF ENDIF ENDIF ENDIF 154 GET IFZ ;IF PATCH CONTROL SELECTED ;INSTR MUST BE X0X0000000ZZZZZZ INDEX AGET 57700 AND IFZ ;CONTROL WORD MATCH INDEX AGET 77 AND 150 GET SUB IFZ ;=OLDSLOT INDEX PNUM INDEX AGET PNUM 155 GET IFZ " CHANGE? (Y/N) " $PRINT CHRIN ELSE 131 ENDIF 131 SUB IFZ " --> " $PRINT INDEX AGET 177700 AND 151 GET OR DUP PNUM INDEX SWAP APUT ENDIF CRLF ENDIF ENDIF ENDIF +LOOP ENDIF ENDIF ENDIF ENDIF ENDIF DEFAULT DROP #1 ENDCASE UNTIL END CONSOLE ~TERMINATE~