! ! KMC11 LOADER - GJB 14/04/78 ! %CONTROL K'101011' %BEGIN %RECORDFORMAT KF(%BYTEINTEGER CSR0,CSR1,%INTEGER CSR2,CSR4,CSR6) %SYSTEMROUTINESPEC MAP HWR(%INTEGER SEG) %CONSTRECORD(KF)%NAME KMC=K'060160'; %INTEGER ADDRESS,DATA %ROUTINE READ DATA %INTEGER I READ SYMBOL(I); READ SYMBOL(DATA) DATA=DATA!I<<8 %END %ROUTINE INST(%INTEGER INSTRUCTION) KMC_CSR1=0; KMC_CSR6=INSTRUCTION KMC_CSR1=KMC_CSR1!2 KMC_CSR1=KMC_CSR1!1 %END MAP HWR(3) SELECT INPUT(1) READ DATA; %STOP %UNLESS DATA=7<<13 %CYCLE READ DATA %EXIT %UNLESS 4#DATA>>13#7 %OR DATA&X'700'#0 %IF DATA>>13=6 %AND DATA&X'700'=0 %THEN %C ADDRESS=(DATA&X'1800')>>3!(DATA&X'FF') %C %ELSE %START KMC_CSR1=0; KMC_CSR4=ADDRESS; KMC_CSR6=DATA KMC_CSR1=KMC_CSR1!4 KMC_CSR1=KMC_CSR1!32 KMC=0 KMC_CSR4=ADDRESS KMC_CSR1=KMC_CSR1!4 %IF KMC_CSR6#DATA %START PRINT STRING('CRAM LOAD FAULT AT ADDRESS') WRITE(ADDRESS,0); NEWLINE %FINISH ADDRESS=ADDRESS+1 %FINISH %REPEAT %WHILE DATA>>13#7 %CYCLE %IF DATA>>13=4 %THEN ADDRESS=(DATA&X'1800')>>3!(DATA&X'FF') %ELSE %START INST(X'1000'!ADDRESS&255) INST(X'0800'!ADDRESS>>8) INST(X'0500'!DATA&X'FF') INST(X'4290') %IF KMC_CSR0#DATA %START PRINT STRING('DATA LOAD FAULT AT ADDRESS') WRITE(ADDRESS,0); NEWLINE %FINISH ADDRESS=ADDRESS+1 %FINISH READ DATA %REPEAT SELECT INPUT(0) PROMPT('GO? '); READ SYMBOL(DATA) %STOP %UNLESS DATA='Y' KMC_CSR1=64 KMC_CSR0=0; KMC_CSR2=0; KMC_CSR4=0; KMC_CSR6=0 KMC_CSR1=128 %ENDOFPROGRAM