%EXTERNALSTRING(4)%ARRAY BUS0(0:15)="ADR0","ADR1","ADR2","ADR3", "ADR4","ADR5","ADR6","ADR7","USR0","USR1","USR2","USR3", "USR4","USR5","USR6","USR7" %EXTERNALSTRING(4)%ARRAY BUS1(0:15)="CSR0","CSR1","CSR2","CSR3", "CSR4","CSR5","CSR6","CSR7","NPR","MISC","?"(*) %EXTERNALSTRING(5)%ARRAY IF(2:7)="C","Z","BRG.0","BRG.1","BRG.4","BRG.7" %EXTERNALSTRING(3)%ARRAY ISO(0:31)="NUL","SOH","STX","ETX","EOT","ENQ", "ACK","BEL"," BS"," HT"," NL"," VT"," FF"," CR"," SO"," SI", "DLE","DC1","DC2","DC3","DC4","NAK","SYN","ETB","CAN"," EM","SUB", "ESC"," FS"," GS"," RS"," US" %EXTERNALROUTINE HEX(%INTEGER DATA) %INTEGER I,J %CYCLE I=12,-4,0 J=DATA>>I&15 %IF J<10 %THEN PRINT SYMBOL(J+'0') %ELSE PRINT SYMBOL(J-10+'A') %REPEAT %END %EXTERNALROUTINE OCTAL(%INTEGER DATA) %INTEGER I PRINT SYMBOL(DATA>>I&7+'0') %FOR I=15,-3,0 %END %EXTERNALROUTINE SYMBOL(%INTEGER DATA) %INTEGER I I=DATA&K'177' %IF I=DATA %THEN SPACE %ELSE PRINT SYMBOL('|') %IF I<32 %THEN PRINT STRING(ISO(I)) %ELSE %START %IF I=127 %THEN PRINT STRING("DEL") %ELSE %START PRINT SYMBOL(''''); PRINT SYMBOL(I); PRINT SYMBOL('''') %FINISH %FINISH %END %EXTERNALROUTINE INST(%INTEGER DATA) %INTEGER MEM,SRC; %SWITCH SW(0:7) %ROUTINE SP %INTEGER I I=DATA&15 PRINT STRING("SP"); PRINT SYMBOL(I//10+'0') %IF I>9 PRINT SYMBOL(I-10*(I//10)+'0') %END %ROUTINE OPD %IF 3#DATA>>13#7 %THEN PRINT STRING("MEMORY") %ELSE PRINT STRING("BRG") %END %ROUTINE FUNCTION %SWITCH OP(0:15) ->OP(DATA>>4&15) OP(0):SP; PRINT SYMBOL('+'); OPD; %RETURN OP(1):SP; PRINT SYMBOL('+'); OPD; PRINT STRING("+C"); %RETURN OP(2):SP; PRINT SYMBOL('-'); OPD; PRINT STRING("-\C"); %RETURN OP(3):SP; PRINT STRING("+1"); %RETURN OP(4):SP; PRINT STRING("+C"); %RETURN OP(5):SP; PRINT SYMBOL('+'); SP; %RETURN OP(6):SP; PRINT SYMBOL('+'); SP; PRINT STRING("+C"); %RETURN OP(7):SP; PRINT STRING("-1"); %RETURN OP(8):SP; %RETURN OP(9):OPD; %RETURN OP(10):SP; PRINT STRING("!\"); OPD; %RETURN OP(11):SP; PRINT SYMBOL('&'); OPD; %RETURN OP(12):SP; PRINT SYMBOL('!'); OPD; %RETURN OP(13):SP; PRINT STRING("!!"); OPD; %RETURN OP(14):SP; PRINT SYMBOL('-'); OPD; %RETURN OP(15):SP; PRINT SYMBOL('-'); OPD; PRINT STRING("-1") %END SRC=DATA>>13 %IF SRC<4 %OR SRC=5 %START MEM=DATA>>11&3 ->SW(DATA>>8&7) SW(0):PRINT STRING("NODEST") %UNLESS 1<=MEM<=2; ->SKIP SW(1):PRINT STRING("BRG"); ->MAR SW(2):PRINT STRING(BUS1(DATA&15)); ->MAR SW(3):PRINT STRING("BRGSHR"); ->MAR SW(4):PRINT STRING(BUS0(DATA&15)); ->MAR SW(5):PRINT STRING("MEMORY"); ->MAR SW(7):PRINT STRING("BRG = ") SW(6):SP MAR:PRINT STRING(" = ") %IF 1<=MEM<=2 SKIP:%IF MEM=2 %THEN PRINT STRING("MAR") %IF MEM=1 %THEN PRINT STRING("PAGE") PRINT STRING(" =") %IF SRC=0 %THEN WRITE(DATA&K'377',0) %ELSE %START SPACE %IF SRC=1 %THEN PRINT STRING(BUS0(DATA>>4&15)) %IF SRC=5 %THEN PRINT STRING(BUS1(DATA>>4&15)) %IF 2<=SRC<=3 %THEN FUNCTION %FINISH %IF MEM=3 %THEN PRINT STRING(", MAR = MAR+1") %FINISH %ELSE %START PRINT STRING("JUMP") %IF DATA>>13=4 %THEN WRITE(DATA>>3&K'1400'!DATA&K'377',0) %ELSE %START PRINT STRING(" PAGE"); PRINT SYMBOL(DATA>>11&3+'0') PRINT SYMBOL(':'); FUNCTION %FINISH PRINT STRING(" IF ") %AND PRINT STRING(IF(DATA>>8&7)) %IF %C DATA>>8&7>1 %FINISH %END %ENDOFFILE