; SHAM - SHOW ALTERNATE MEMORY 3/4/08 ; PROMPTS FOR ADDRESS, DUMPS 20 LINES IN OCTAL AND TEXT ; ENTER ALL TO DUMP EVERYTHING IN ALTERNATE MEMORY ; JUST ENTER TO EXIT ; USES LOCS 150,151 FOR TEMPS ; OCTAL DEFINE SHAM MS_SAVE ;SAVE MS VECTORS TO RESTORE ON EXIT 150 #0 PUT ;INTERACTIVE MODE, IF ALL ENTERED SET TO 1 ;151 USED FOR OFFSET IN ALL MODE DO 150 GET IFZ ;IF INTERACTIVE MODE CRLF "ADR: " $PRINT $IN $TRIM "ALL" $EQUAL IFNZ ;IF ALL ENTERED $DROP "0" ;START WITH ADDRESS 0 151 #0 PUT ;INIT OFFSET COUNTER 150 #1 PUT ;SET ALL FLAG ENDIF ELSE 151 GET 240 ADD ;PUSH NEXT ADDRESS TO DUMP 151 OVER PUT ;WRITE BACK TO COUNTER DUP CASE < 76000 ;"IF" LESS THAN MAX $STR ;TURN ADDRESS INTO STRING DEFAULT ;"ELSE" DROP "" ;DROP ADDRESS AND PUSH EMPTY STRING TO TERMINATE ENDCASE ;"ENDIF" ENDIF $LEN IFZ ;IF NOTHING ENTERED $DROP #1 ;DROP STRING, SAY EXIT ELSE #0 ;SAY DON'T EXIT $VAL DUP ;GET VALUE OF STRING, DUP FOR LATER @BLK GET 240 A>CCOPY ;COPY WORDS FROM ALT TO BLOCK 0 #1 OUTBLOCK >MS ;REDIRECT TEXT OUTPUT TO BLOCK 1 @BLK GET DUP 237 ADD DUMP ;DUMP 20 LINES OF MEMORY TO BLOCK 1 #0 23 +DO ;LOOP THROUGH 20 LINES INDEX 120 MUL INC INC SETOP ;SET OUTPUT PTR TO ADDRESS FIELD DUP $STR $HEAD DROP $PRINT ;OVERWRITE WITH REAL ADDRESS 10 ADD ;NEXT LINE TO CHANGE +LOOP DROP ;NEXT, DROP PTR WHEN DONE <>CON ;RESTORE CONSOLE TEXT ;DUMP BLOCK 1 TO AND INCLUDING OFFSET 1440 TO SCREEN 150 GET IFZ CRLF ENDIF ;CRLF IF INTERACTIVE MODE ;SKIP 1ST WORD, A CRLF ADDED BY DUMP @BLK GET 2001 ADD DUP 1437 ADD +DO INDEX GET PWRD +LOOP ENDIF UNTIL ;USER PRESSES JUST ENTER MS_RESTORE ;RESTORE MS VECTORS END ; ; UNSHAM - DECODES A SHAM DUMP 3/6/08 ; READS A SHAM DUMP FILE ATTACHED TO MS IN (PTR) AND PUTS IN ALT MEM ; ADD ~TERMINATE~ ON A LINE BY ITSELF AT THE END OF THE DUMP TO STOP, ; OR HALT, RUN 2 WHEN IT HANGS. NOT FOR ALTDUMP OUTPUT. ; OCTAL DEFINE UNSHAM ALTSAVE ZAM DO MS$IN $LEN 13 SUB IF<0 $DROP #1 ELSE "~TERMINATE~" $EQUAL IFNZ $DROP #0 ELSE 5 $GET 72 SUB IFNZ $DROP #1 ELSE ;IT'S A LINE TO DECODE 6 ;START PARSING STRING AT OFFSET 6 #0 4 $SLICE $VAL DUP PNUM 15 PCHR DUP 7 ADD +DO ;LOOP THROUGH ADDRESSES #1 INDEX SUB IF<0 ;IF NOT LOC 0 OR 1 (THEY'RE A AND B REG) DUP DUP 5 ADD $SLICE INDEX $VAL APUT ;WRITE TO ALT MEM ENDIF 7 ADD ;NEXT OCTAL DATA DUP DEC 40 SUB IFNZ INC ENDIF ;SKIP PDF JUNK (THOSE AREN'T SPACES!) +LOOP $DROP ;LEAVE STRING PTR ON STACK FOR WHILE ENDIF ENDIF ENDIF WHILE END ; CONSOLE ~TERMINATE~