IMD 1.16: 2/09/2008 8:43:18 84-93016-xx b000 f01601 nm4 autoload types 2,3,4,6 internal only    @0{)vvЀЀsQpk)p " }fA __M@OS4 MB084050913520950840511085430 840511085430/F01601 VOLNM-4 AUTOLOAD - TYPES 2,3,4 AND 6   _M@qGyy GGG`HX@ b G`^Y e GQ @@p@987 85P@ G:پN 8)0. * C'xC# b# }B+> @0DAJL w+™ЀЀΖQA1"   i  ž} š} @EEFF)DEۄF8 џ} ԟ} ̟} * `jUBBI,v BI, # @ G7H@pܾrCHC C GTq` Lg gEXC P+s=胾P+c fQN p $Rxnj  ޔniZ ތ⊞ } }HGž Ÿ@ALS)"$ C k20j.h( +$`%ꂜ\1 !M' y %'+os慾)sY ed|{ @8 o O m J K i gN )V% t%sLn`"E F. F„ D>) =`;nrgy w"G,{Kq1 A&}E*`(t@% ;c  765y342(.OS:: SYSG @ @G6BDāCGDĀ# BC @E OBO0SEGMENTBLANK oim MACRO (F510) @ |{   A~~4 6A ^즞솣  AN  ގC vuLrٞo)A> ep@)~idAMx @u iijI)Bi ] _bcU Alb _~ސ{ ~~KL 6UK5 > . - ,Ai@ &C 6g p@ 66G  @EB  5 `"! )+ޅ|   #IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII  ppy disk mounted in unit 0, the following commands are entered into the OS4 Operating System. .sp 2 .co 6 MARCO DF0.TYPE2AUTO.AS TITL NM-4 AUTOLOAD TYPE 2 #84-93016-11B0 TITL START * COPYRIGHT 1978,1976 COMPUTER AUTOMATION INC. * * USER DOCUMENTATION 00-93016-00B0 * SOURCE FILE 84-93016-21B0 * OBJECT FILE 84-93016-31B0 * WORD I/O BINARY 92-2100 0-41B0 * MAINTENANCE DOC 92-21000-51B0 * REL 0 RES 256,0 REL 0 * * START EQU $ JT  SS,MEMSRC IF UNATTENED IN 4,A GET CONSOLE WORD REGISTER CONTENTS JGE A,MEMSRC CHECK FOR TEST JMP JERROR IF TEST-HALT TITL FLOPPY LOADER * * FLOPPY LOADER * FLPYAD EQU :11 FLOPPY DEVICE ADDRESS FLOPPY EQU $ SST FLPYAD*8+4 CHECK FOR CONTROLLER PRESENT JMP NEXT IF NOT PRESENT COPY =7,A READ ALL OPCODE COPY A,OPCODE TO IOB COPY A,SEEK SEEK COUNT FLOP1 EQU $ COPY =1,A SET UP TO READ SECTOR 1 COPY A,SECTOR PUT IT IN IOB  COPY BASE,A GET CODES BASE ADDRESS ADD =IOB-START,A COMPUTE NEW IOB ADDRESS SST FLPYAD*8+0 TEST FOR CONTROLLER IDLE JMP $-1 WAIT FOR CONTROLLER IDLE OUT A,FLPYAD*8+0 ISSUE I/O SST FLPYAD*8+0 TEST FOR COMPLETION JMP $-1 WAIT FOR DONE COPY =-80,A INSURE CYLINDER 0 EXCH A,SEEK GET SEEK COUNT JGE A,FLOP1 IF FIRST SEEK COPY FLPSTT,A  GET STATUS SHIFT A,RO,1 SYSTEM READY BIT TO -OV- JT OV,NEXT IF NOT READY FLOP2 EQU  $ AND =:7F,A CLEAR TO 7 BITS JEQ A,BOOT IF NO ERRORS JERROR EQU $ JMP ERROR  IF ERROR TITL DEVICE SELECTION DECODE * * DEVICE SELECTION DECODE * INIT EQU $ COPY X,BASE SAVE THE BASE ADDRESS OF AUTOLOAD NOW JMP JTEST DO MINI-DIAGNOSTIC SETUP EQU $ THEN RETURN HERE COPY H100,A SET UP MAGNETIC DEVICE WORD COUNT COPY A,WORDS STUFF IT IN THE IOB FIRST EQU $ COPY =0,A INITIALIZE IOB VALUES COPY A,BUFFER BUFFER ADDRESS IS ALWAYS 0 COPY A,INTER NO INTERRUPTS COPY A,FLPSTT CLEAR FLOPPY STATUS COPY A,CYLIN CYLINDER 0  COPY A,UNIT UNIT 0 COPY =5,A SET MINI-FLOPPY AS FIRST DEVICE COPY A,DEV  SET UP FOR UNATTENDED OPERATION NEXT EQU $ IN 4,Q GET CONSOLE WORD REGISTER SHIFT Q,RO,1 RIGHT JSTIFY DEVICE SELECTION CODE COPY PANEL,A GET PANEL FLAG JNE A,NOPANL IF NO PANEL SKIP SENSE SWITCH TEST JF SS,SAME IF ATTENDED OPERATION NOPANL EQU $ IMS DEV BUMP TO NEXT DEVICE COPY DEV,Q LOAD DEVICE INDEX TITL SAME EQU $ XNX Q  INDEX THE JUMP INSTRUCTION JMP $+1 AND EXECUTE IT JMP NEXT . 0=PTP REL, NOT SUPPORTED JMP NEXT . 1=PTP ABS, NOT SUPPORTED JMP STM14 . 2=STORAGE MODULE, POLLED 4TH JMP FLOPPY . 3=FLOPPY, POLLED 2ND JMP MTIC . 4=MTIC, POLLED 3RD JMP STMU14 . 5=DISC UPPER PLATTER, NOT POLLED JMP MINFL0 . 6= MINI-FLOPPY UNIT 0 POLLED FIRST JMP MINFL1 . 7= MINI-FLOPPY UNIT 1 NOT  POLLED TITL MTIC EOB INTERRUPT SERVICE * * RETURN HERE ON MTIC EOB INTERRUPT * MTEOB EQU $ MTSTRT WORD :230  MTIC START COMMAND IN MTICDA+1,A GET STATUS BYTE ONE AND THROW IT AWAY IN MTICDA+1,A  GET STATUS BYTE TWO SUB =:C0,A CHECK HDW & RATE ERRORS JLT A,JERROR IF ERROR - HALT BOOT EQU $  COPY =0,X SET EXECUTION ADDRESS TO 0 JMP MAGS GO CHECK EXECUTION BIT TITL FLOPPY/DISC IOB * * THE FOLLOWING LOCATIONS ARE USED AS TEMP CELLS * BASE RES 1,0 AUTOLOAD RELOCATION ADDRESS DEV RES 1,0  DEVICE TO CHECK IF READY PANEL RES 1,0 PANEL FLAG = 0 IF CONSOLE PRESENT * * THE FOLLOWING LOCATION ARE USED AS THE IOB * FOR THE FLOPPY AND DISCS * IOB EQU $ ORG IOB OPCODE RES 1,0 UNIT RES 1,0 CYLIN RES 1,0 SEEK EQU $ HEAD RES 1,0 SECTOR RES 1,0 WORDS RES 1,0 BUFFER RES 1,0 INTER RES 1,0 FLPWCT EQU $ NXTIOB RES 1,0 FLPSTT EQU $ STMWCT RES 1,0 STMCST RES 1,0 STMDST RES 1,0 TITL MEMORY SEARCH TO RELOCATE AUTOLOAD ************************************************** * NOTE: THIS SECTION IS OVERLAYED WITH * * THE DISK I/O BLOCK. SEE ABOVE * * * **************************************************  ORG IOB-3 * FIND END OF MEMORY MEMSRC EQU $ SBIT 6,S TURN ON XA BIT COPY Q,K SAVE RELOCATION BIAS COPY =0,X START FROM TOP OF MEMORY AND WORK DOWN COPY X,PANEL CLEAR PANEL FLAG COPY =:FF,Y Y USED FOR CONSOLE CHECK AND TRANSFER COUNTER SELP Y,4 PUT Y INTO WORD REG IN  4,Q GET IT BACK CSK Q,=:FF CHECK IF CONSOLE PRESENT NOP COPY Y,PANEL NOT PRESENT SO SET PANEL FLAG NON-ZERO SELP A,4 RESTORE WORD REG IN CASE SS=FALSE FINDMN EQU $ SUB H100,X  DECREMENT MEMORY POINTER COPY =-1,A SET TO ALL ONES EXCH A,0(X) ACCESS MEMORY THROUGH POINTER EXCH A,0(X) ACCESS MEMORY THROUGH POINTER IJNE A,FINDMN BUMP RESULTS OF MEMORY ACCESS, IF NOT RAM, AGAIN EXCH A,0(X) NOW TRY TO GET BACK ZEROS EXCH A,0(X) JNE A,FINDMN IF FAILURE MUST BE ROM COPY A,TRAP NOP TRAP IN CASE OF PARITY ERROR * TRAP WILL FALL THROUGH TO PARITY ERROR HALT  TITL * * RELOCATE AUTOLOAD TO HIGHEST WRITABLE MEMORY * GOTMN EQU $ MOVNXT EQU $ COPY 0(Y),A  PICK UP WORD COPY A,0(X,Y) MOVE IT TO HIGH MEMORY JNED Y,MOVNXT IF DONE MOVING  JMP INIT-START(X) GO TO RELOCATED AUTOLOAD CODE * * TITL DISC STORAGE MODULE LOADER * SMDA EQU :14 DISC STORAGE MODULE DEVICE ADDRESS SUDA EQU :15 * * :14= MEDIUM CAPACITY DISC * :15= HIGH CAPACITY DISC * STMU14 EQU $ COPY =2,Y SET HEAD FOR UPPER PLATTER JMP STMX JUMP AROUND LOWER PLATTER HEAD SET STM14 EQU $ DISC LOWER PLATTER COPY =0,Y SET HEAD FOR LOWER PLATTER STMX COPY Y,HEAD  COPY =1,Q COPY =1,X SET Q AND X FOR LOOPING STM0 EQU $ SST SMDA*8+4 SENSE IF CONTROLLER PRESENT JMP TRYUPR IF NOT TRY AT :15 JMP STM1 PRESENT AT :14 TRYUPR SST SUDA*8+4 SENSE IF PRESENT AT :15 JMP FIRST NOT PRESENT SO CHECK FIRST DEVICE COPY =1,Y SET Y FOR :15 PATH TITL STM1 EQU $ COPY =4,A SET UP OPCODE COPY A,OPCODE COPY =0,A INITIALIZE IOB VALUES COPY A,SECTOR SECTOR ADDRESS OF 0 COPY A,NXTIOB NO IOB CHAINING COPY A,STMCST CLEAR CONTROLLER STATUS COPY BASE,A COMPUTE NEW IOB ADDRESS ADD =IOB-START,A CLSN Y,=1 FIND WHICH PATH TO TAKE JMP PATH15 Y WAS SET TO ONE SO TAKE :15 PATH PATH14 SELP A,SMDA*8+4 INITIALIZE THE CONTROLLER SST SMDA*8+0 TEST FOR IDLE JMP $-1  WAIT FOR IDLE OUT A,SMDA*8+0 ISSUE I/O SST SMDA*8+0 TEST FOR COMPLETION JMP $-1  WAIT FOR COMPLETION JMP STAT JUMP AROUND :15 PATH PATH15 SELP A,SUDA*8+0 INITIALIZE THE CONTROLLER  SST SUDA*8+0 TEST FOR IDLE JMP $-1 WAIT FOR IDLE OUT A,SUDA*8+0 ISSUE I/O SST SUDA*8+0 TEST FOR COMPLETION JMP $-1 WAIT FOR COMPLETION STAT COPY STMCST,A GET THE STATUS JGE A,BOOT IF NO ERROR GO EXECUTE BOOT SHIFT A,RO,1 DISC READY BIT TO -OV- JF OV,ERROR IF ERROR AND READY JNED Q,STM1 IF ONLY TRIED ONCE ADD =1,Q MAKE SURE LAST INSTRUCTION IS PASSED AGAIN JNED X,TRYUPR TRY :15 TWICE JMP FIRST IF STILL NOT READY TITL ERROR/EXECUTION HALT * H100 WORD :100 * JFIRST EQU $ JUMP INTO POLLING SEQUENCE COPY =1,A  SET UP FOR DISC STORAGE MODULE NEXT XNEXT COPY A,DEV JMP NEXT * JTEST JMP TEST INDIRECT JUMP TO TEST  TITL UNINSTALLED MEMORY TRAP SET-UP REL :88 ORIGIN AT MEMORY TRAP LOCATION TEMP1 EQU $ LOCATION IS ALSO USED AS A TEMP QCDCHK WORD :A656 QCD ROM CHECKSUM VALUE CKSUM RES 1,0 TRAP EQU $ JMP FINDMN UNINSTALLED MEMORY TRAP IERROR EQU $ USED FOR INDIRECT JUMP AND ALSO JMP ERROR PARITY ERROR SQ RES  1,0 JBOOT JMP BOOT * ERROR EQU $ OUT A,2 TURN OFF AUTOLOAD LIGHT HLT HALT FOR ERROR OR NO EXECUTION COPY Q,K SAVE RELOCATION BIAS JMP FIRST * TITL MTIC LOADER * MTIC LOADER MTICDA EQU :F2 MTIC DEVICE ADDRESS MTRDY EQU :4 READY BIT MTLDP EQU :10  LOAD POINT STATUS POINT MTONL EQU :10 ON-LINE STATUS BIT MTDBY EQU :2 WORD BUSY STATUS BIT MTRAT EQU :40 MTHER EQU :80 MTINT EQU :C8 MTWDCT EQU MTINT+1 MTMODE WORD :4FF * MTIC EQU $ COPY MTMODE,A GET MODE SELECT WORD OUT A,MTICDA+1 ISSUE MODE SELECT IN MTICDA+1,Q GET STATUS B YTE ONE IN MTICDA+1,A GET STATUS BYTE TWO * CHECK STATUS JEQ Q,JFIRST NO DIO INSTALLED, CONTINUE POLLING AND =MTDBY;MTLDP,Q MUST BE AT LOAD POINT AND NOT BUSY JNE Q,JFIRST IF MTIC IS NOT READY, GO TO NEXT DEVICE AND =MTRDY;MTONL,A CHECK FOR READY JNE A,JFIRST IF NOT READY * GOOD STATUS, TRY TO LOAD * ASSUME I/O LOCATIONS ARE LOADED FROM ROM MTIC1 EQU $ COPY BASE,X GET AUTOLOAD BASE  COPY MTSTRT,A GET START I/O COMMAND SBIT 8,S ENABLE INTERRUPTS OUT A,MTICDA+1 ISSUE START TO PICO JMP $ WAIT FOR COMPLETION TITL READY,SET,GO! * MAGS EQU $ FROM MAGNETIC DEVICE LOADING COPY =:40,Y SET UP Y FOR LSI-3/05 OUT A,2 TURN OFF AUTOLOAD LIGHT COPY  PANEL,A CONSOLE ATTACHED JNE A,GOOO NO-AUTOLOAD ANYWAY JT SS,GOOO IF UNATTENDED ALWAYS EXECUTE  IN 4,A INPUT WORD REGISTER SHIFT A,RO,1 GET EXECTUION/NO EXECUTION BIT JF OV,ERROR  IF NO EXECUTION GOOO EQU $ RBIT 6,S TURN OFF XA BIT JMP 0 * TITL MINI-FLOPPY LOADER * PICODA EQU :FC PICO DEVICE ADDRESS, CHANNEL 6 * MINFL1 EQU $ MINI-FLOPPY UNIT 1 COPY =1,A COPY A,MFUNIT MINFL0 EQU $ MINI-FLOPPY UNIT 0 IN PICODA+1,A GET PICO STATUS TO A JEQ A,JMPOUT DIO NOT ENSTALLED TBIT 1,A GET PRESENT/NOT BUSY BIT TO OV JF OV,READY JMPOUT COPY =2,A NOT READY SO SET FLOPPY AS NEXT DEVICE JMP XNEXT JUMP TO NEXT DEVICE READY EQU $  COPY BASE,Y ADD OUTAD,Y CREATE CONTROL BLOCK ADDRESS COPY =1,Q SET Q FOR LOOP TWICE  COPY =9,A SET OPCODE FOR SEEK COPY A,OPC TITL TWICE COPY =5,X SET X AS COUNTER AND POINTER OUTLUP COPY 0(X,Y),A OUTPUT CONTROL INFORMATION OUT A,PICODA IN OUTPUT LOOP JNED X,OUTLUP SEND SIX BYTES COPY COMAND,A OUTPUT OF COMMAND WORD OUT A,PICODA+1 COPY =7,A SET OPCODE FOR READ COPY A,OPC STATUS IN PICODA+1,A INPUT STATUS TBIT 1,A CHECK BUSY BIT JT OV,STATUS LOOP UNTIL NOT BUSY ERRCHK EQU $ ERROR CHECKING AND =:7F,A IGNORE WRITE PROTECT CSK  A,=5 CHECK ERROR CODE JMP HERE A<5, NO ERRORS JF SS,IERROR A>5, IF NOT POLLING - ERROR HALT  JMP JMPOUT A=5, NOT READY SO TRY NEXT DEVICE TITL MTIC I/O INTERRUPT LOCATION SET UP * REL :C8 ORIGIN AT MTIC INTERRUPT LOCATION AIB MTICDA+0 WORD :7E70 READ :C8 WORDS EXEC EQU $ WORD -1 HPC EQU $ WORD 0 JST MTEOB-START(X) AT END OF MTIC READ GOT TO END OF BLOCK TITL MINI-FLOPPY CONTINUED HERE JNED Q,TWICE OUTPUT SEEK0, THEN READ1 AND GO ON INPUT EQU $ INPUT FROM PICO FIFO TO MEMORY  COPY =0,X SET POINTER COPY =:7F,Y SET COUNTER SBIT 2,S SET BYTE MODE INLOOP EQU $ IN PUT LOOP IN PICODA,A INPUT A BYTE COPYB A,0(X) STORE BYTE INDEXED BY X ADD =1,X INCREMENT POINTER JNED Y,INLOOP DECREMENT COUNTER RBIT 2,S RESET BYTE MODE JMP JBOOT JUMP TO BOOT * * OUTAD WORD OUTBL ADRESS OF CONTROL BLOCK OUTBL EQU $ MFDED WORD :0001 DRIVE ENABLE DELAY MFSEC WORD :0001 SECTOR MFHEAD WORD :0000 HEAD MFTRAK WORD :0000 TRACK MFUNIT WORD :0000 UNIT # OPC WORD  :0009 OPCODE COMAND WORD :200 * TITL MINI-DIAGNOSTIC * * MINI-DIAGNOSTIC CHECKS PROCESSOR OPERATION *  AND DOES A PARITY PURGE THROUGHOUT MEMORY * TEST EQU $ COPY X,XSAVE SBIT 1,S SET OV JF  OV,STOPIT ENSURE OV WAS SET RBIT 1,S RESET OV JT OV,STOPIT ENSURE OV RESET COPY =0,A ZERO A REGISTER JNE A,STOPIT SUB =1,A IJNE A,STOPIT TEST1 EQU $ COPY A,Q XOR Q,A JEQ A,PURGE STOPIT EQU $ STOP IN TEST OUT A,2 TURN OFF AUTOLOAD LATCH HLT PURGE EQU $ READ/WRITE TO PURGE MEMORY COPY 0(X),A COPY A,0(X) JNED X,TEST1 *  TO ENABLE PARITY LOGIC, ENABLE INTERRUPTS * THEN ISSUE A UIS, NO PARITY ERRORS SHOULD *  OCCUR AFTER THE PURGE SBIT 8,S ENABLE INTERRUPTS UIS RE-ENABLE PARITY CHECKING RBIT 8,S DISABLE INTERRUPTS COPY XSAVE,X COPY RETURN,Y PICK UP RETURN ADDRESS ADD  X,Y ADD AUTOLOAD OFFSET COPY Y,RETURN STORE COMPUTED RETURN ADDRESS JMP *RETURN RETURN THROUGH INDIRECT POINTER * * RETURN FOR AUTOLOAD THROUGH THIS LOCATION * RETURN WORD SETUP * XSAVE RES 1,0 RES 6,0 TITL QCD AUT TEST VERIFY * * THIS ROUTINE COMPUTES THE XUM * OF THE AUTOLOAD ROM AS IT IS * DONE IN THE QCD TEST. * REL :100 COPY HXFF00,A SET UP COUNT COPY A,TEMP2 COPY =0,X  COPY 0(X),A FIRST WORD JMP AUT5 AUT4 EQU $ ADD 0(X),A ADD NEXT AUT5  EQU $ ADD =1,X BUMP INDEX IMS TEMP2 JMP AUT4 CSK A,AUTTOT COMPARE TO QCD VALUE HLT LESS HLT GREATER HLT EQUAL TEMP2 RES 1,0 AUTTOT WORD :FFFF HXFF00 WORD :FF00 END D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D OP OF MEMORY AND WORK DOWN COPY X,PANEL FIND IF CONSOLE PRESENT COPY =:FF,Y Y IS USED FOR CONSOLE TEST ANO0SEGMENTBLANK oim MACRO (F510) @ |z5     C~ ~4 6GA) ֦]  AN ވ‡C tOC= ep@)|idA@cQAv @u r`h`&er@TA_ p.6g]Vb(4+L Lr@t@U*U FDi@?C 6g _= p@  r  vv  qhfy pih @L@| MBj LuJ RBC Q" /.-  M^BB6J?6;TM 6D?665?6 4""1Q1( 6# "(YV.R #GG )+ޅ|   FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PICK UP WORD COPY A,0(X,Y) MOVE IT TO HIGH MEMORY JNED Y,MOVNXT IF DONE MOVING  TITL NM-4 AUTOLOAD TYPE 3 #84-93016-12B0 TITL START TYPE 3 * COPYRIGHT 1978,1976 COMPUTER AUTOMATION INC. * * USER DOCUMENTATION 00-93016-00B0 * SOURCE FILE 84-93016-22B0 * OBJECT FILE 84-93016-32B0 * WORD I/O BINARY  92-21000-42B0 * MAINTENANCE DOC 92-21000-51B0 * REL 0 RES 256,0 REL 0 * * START EQU $  JT SS,MEMSRC IF UNATTENDED IN 4,A GET CONSOLE WORD REGISTER CONTENTS JGE A,MEMSRC CHECK FOR TEST JMP JERROR IF TEST-HALT TITL MINI-DIAGNOSTIC AND PARITY PURGE TEST EQU $ TEST1 EQU $ COPY 0(X),A READ A CELL COPY A,0(X) WRITE IT BACK JNED X,TEST1 PURGE FROM AUTOLOAD BASE DOWN SBIT 8,S ENABLE INTERRUPTS UIS RE-ENABLE PARITY CHECKING RBIT 8,S DISABLE AGAIN  COPY BASE,X JMP FIRST GO AUTOLOAD SOMETHING TITL FLOPPY LOADER * * FLOPPY LOADER * FLOPDA EQU :11  FLOPPY DEVICE ADDRESS FLOPPY EQU $ SST FLOPDA*8+4 CHECK FOR CONTROLLER PRESENT JMP FIRST  IF NOT PRESENT COPY =7,A READ ALL OPCODE COPY A,OPCODE TO IOB COPY A,SEEK  SEEK COUNT FLOP1 EQU $ COPY =1,A SET UP TO READ SECTOR 1 COPY A,SECTOR PUT IT IN IOB COPY BASE,A GET CODES BASE ADDRESS ADD =IOB-START,A COMPUTE NEW IOB ADDRESS SST FLOPDA*8+0 TEST FOR CONTROLLER IDLE JMP $-1 WAIT FOR CONTROLLER IDLE OUT A,FLOPDA*8+0 ISSUE I/O SST FLOPDA*8+0 TEST FOR COMPLETION JMP $-1 WAIT FOR DONE COPY =-80,A INSURE CYLINDER 0 EXCH A,SEEK GET SEEK COUNT JGE A,FLOP1 IF FIRST SEEK COPY FLPSTT,A GET STATUS SHIFT A,RO,1 SYSTEM READY BIT TO -OV- JT OV,FIRST IF NOT READY FLOP2 EQU $ AND =:7F,A CLEAR TO 7 BITS JEQ A,BOOT IF NO ERRORS JERROR EQU $  JMP ERROR IF ERROR BOOT COPY =0,X JMP MAGS TITL INITIALIZE AND SELECT DEVICE INIT EQU $ COPY X,BASE JMP TEST FIRST EQU $ GET READY TO TRY DEVICES COPY =0,A INITIALIZE THE IOB COPY A,FLPSTT CLEAR FLOPPY STATUS COPY A,BUFFER CLEAR THE IOB COPY A,INTER COPY  A,CYLIN COPY A,UNIT UNIT 0 COPY A,DEV SET UP FOR POLLING DEVICES COPY H100,A COPY  A,WORDS SET UP WORD COUNT NEXT EQU $ SECONDARY DEVICE RETURN IN 4,Q INPUT CONSOLE WORD REGISTER  SHIFT Q,RO,1 STRIP EXECUTION BIT COPY PANEL,A GET PANEL FLAG JNE A,NOPANL IF NO CONSOLE INSTALLED THEN POLL JF SS,SAME IF ATTENDED OPERATION NOPANL EQU $ IMS DEV BUMP DEVICE SELECTION COPY DEV,Q LOAD Q FOR DEVICE INDEX TITL SAME EQU $ LOAD FROM SAME DEVICE XNX Q INDEX THE JUMP INSTRUCTION JMP $+1 AND EXECUTE FROM SELECTED DEVICE JMP RPTP 0= PTP REL, NOT READY TO NEXT JMP APTP 1= PTP ABS, NOT READY TO NEXT JMP NEXT 2= DISC, NOT SUPPORTED JMP FLOPPY 3= FLOPPY, NOT READY TO NEXT TITL FLOPPY IOB AND TEMP CELLS * * THE FOLLOWING LOCATIONS ARE USED FOR THE FLOPPY IOB * AND TEMPORARY CELLS * * TEMP CELLS PANEL RES 1,0 DEV RES 1,0 EXEC RES 1,0 HPC RES 1,0 BASE RES 1,0 BACMEM RES 1,0 * IOB EQU $ ORG IOB OPCODE RES 1,0 UNIT RES 1,0 CYLIN RES 1,0 SEEK EQU $ HEAD RES 1,0 SECTOR RES 1,0 WORDS RES 1,0 BUFFER RES 1,0 INTER RES 1,0 FLPWCT EQU $ RES 1,0 FLPSTT EQU $ RES 1,0 STM  RES 2,0 TITL MEMORY SEARCH TO RELOCATE AUTOLOAD ************************************************** * NOTE: THIS SECTION IS OVERLAYED WITH * * THE FLOPPY I/O BLOCK - SEE ABOVE * *  * ************************************************** ORG IOB-6 * FIND END OF MEMORY MEMSRC EQU $  SBIT 6,S TURN ON XA BIT COPY Q,K SAVE RELOCATION BIAS COPY =0,X START FROM TOP OF MEMORY AND WORK DOWN COPY X,PANEL FIND IF CONSOLE PRESENT COPY =:FF,Y Y IS USED FOR CONSOLE TEST AND TRANSFER COUNTER SELP Y,4 IN 4,Q SUB Y,Q JEQ Q,$+2 COPY Q,PANEL NO CONSOLE SO SET PANEL FLAG NON-ZERO SELP A,4 RESTORE WORD REGISTER CONTENTS FINDMN EQU $ SUB H100,X  DECREMENT MEMORY POINTER COPY =-1,A SET TO ALL ONES EXCH A,0(X) ACCESS MEMORY THROUGH POINTER EXCH A,0(X) ACCESS MEMORY THROUGH POINTER IJNE A,FINDMN BUMP RESULTS OF MEMORY ACCESS, IF NOT RAM, AGAIN EXCH A,0(X) NOW TRY TO GET BACK ZEROS EXCH A,0(X) JNE A,FINDMN  IF FAILURE MUST BE ROM COPY A,TRAP NOP TRAP IN CASE PARITY ERROR * TRAP WILL FALL THROUGH TO PARITY ERROR HALT TITL * * RELOCATE AUTOLOAD TO HIGHEST WRITABLE MEMORY * GOTMN EQU $ MOVNXT EQU $ COPY 0(Y),A  PICK UP WORD COPY A,0(X,Y) MOVE IT TO HIGH MEMORY JNED Y,MOVNXT IF DONE MOVING  JMP INIT-START(X) GO TO RELOCATED AUTOLOAD CODE * TITL TYPE CODE PROCESSING ** RORG EQU $ ADD K,A ADD RELOCATION BIAS IF ANY AORG EQU $ COPY A,Y UPDATE THE PC UPDAT EQU  $ COPY HPC,X CSM Y,X JMP $+2 COPY Y,HPC JMP TYPE DO NEXT TYPE CODE * * ABS/REL END TYPE CODE PROCESSING * *NOTE: END ADDRESS OF :FFFF IS NOT AN EXECUTION ADDRESS * REND EQU $ ADD  K,A ADD RELOCATION BIAS IF ANY AEND EQU $ COPY A,Q MOVE EXECUTION ADDRESS TO Q IJEQ Q,JTYPE  CHECK FOR VALID EXECUTION ADDRESS COPY A,EXEC STORE EXECUTION ADDRESS JTYPE JMP TYPE GO PROCESS NEXT TYPE CODE * BAC EQU $ COPY K,X COPY REL OFFSET TO X SHIFT X,LO,1 MAKE IT A BYTE OFFSET JT OV,ERROR REL OFFSET >32K TOO LARGE COPY X,BACMEM BYTE OFFSET TO MEMORY RBIT 0,S RESET CARRY BIT ADDC BACMEM,A ADD IN BAC PLUS OFFSET JT CY,ERROR BAC PLUS OFFSET TOO LARGE COPY =-1,X SET COUNT TO -1 JMP AWORD EXIT * TITL ** * LUPDAT EQU $ IJEQ X,UPDAT BUMP COUNT, IF DONE UPDATE HPC  CLSN Q,=8-9&:FF CHECK FOR RES AND FILL TC = 8 JMP AWORD IF RES AND FILL KEEP OLD VALUE WORD EQU $ JST PINPW GET NEW VALUE CLSN Q,=7-9&:FF CHECK FOR REL WORD TC = 7 RWORD ADD K,A REL WORD, ADD BIAS AWORD EQU $ COPY A,0(Y) STORE VALUE AT PC IJNE Y,LUPDAT BUMP PC AND REPEAT * SKIPIT EQU $  JST PINPB COPY A,Q JEQD Q,JTYPE IF LENGTH IS 0, DO NEXT TC JST PINPB JNED Q,$-1 JMP TYPE * TITL EXECUTION PREPARATION * * ZERO RECORD LENGTH IS AND END OF FILE * EOT EQU $  COPY HPC,Q PUT FIRST AVAILABLE MEMORY LOCATION IN QQ COPY EXEC,X PUT EXECUTION ADDRESS IN X MAGS EQU $ COPY =:40,Y SET UP FOR LSI 3/05 OPERATION OUT A,2 TURN OFF AUTOLOAD LIGHT COPY PANEL,A CONSOLE ATTACHED JNE A,GOOO NO-AUTOLOAD ANYWAY JT SS,GOOO IF UNATTENDED ALWAYS EXECUTE IN 4,A INPUT CONSOLE REGISTER SHIFT A,RO,1 GET EXECUTION BIT TO OV JF OV,ERROR STOP IF NO EXECUTION GOOO EQU $ RBIT  6,S TURN OFF XA BIT JMP 0(X) GO EXECUTE * TITL UNINSTALLED MEMORY TRAP SET-UP * REL :88  ORG AT MEMORY TRAP TEMP1 EQU $ LOCATION IS ALSO USED AS A TEMP QCDCHK WORD :095F QCD ROM CHECKSUM VALUE CKSUM RES 1,0 TRAP EQU $ JMP FINDMN IF UNINSTALLED MEMORY TRAP, KEEP SIZING MEMORY * ERROR EQU $ OUT A,2 TURN OFF AUTOLOAD LIGHT HLT HALT FOR ERROR OR NO EXECUTION COPY  Q,K SAVE RTELOCATION BIAS JFIRST EQU $ JMP FIRST GO LOAD ANOTHER TAPE * H100 WORD :100 RECORD RES 1,0 SQ RES 1,0 TITL FIND FILEMARK - INPUT RECORD LENGTH PTP1 EQU $ ENT LOOK FOR A FILEMARK AND INPUT RECORD LENGTH JST PINPB GET A FRAME IN A REG SUB =:FF,A CHECK FOR FILEMARK JNE A,PTP1+1 IF NOT FOUND LOOK AGAIN COPY A,CKSUM ZERO CHECKSUM JST PINPW  GET RECORD LENGTH ( 2 FRAMES ) COMP A,A COPY A,RECORD IJEQ A,EOT ZERO RECORD LENGTH IS AND END OF FILE JMP *PTP1 TITL PAPER TAPE INPUT WORD * * GETS A WORD (2 FRAMES) AND RETURNS IT IN A * PINPW EQU $ ENT JST PINPB PICK UP FIRST BYTE SHIFT A,LO,8 MOVE IT TO THE UPPER BYTE COPY A,TEMP1   STORE IT JST PINPB PICK UP NEXT BYTE OR TEMP1,A COMBINE THE TWO BYTES JMP *PINPW RETURN H8614 WORD :8614 JNEXT JMP NEXT TITL TYPE CODE DECODING * APTP COPY =0,A ABSOLUTE PAPER TAPE COPY A,K ZERO RELOCATION BIAS RPTP EQU $ RELATIVE PAPER TATPE COPY =0,Y ZERO PLACE COUNT (Y IS PC) COPY Y,HPC AND HIGH PC JST PTP1 GO LOOK FOR RECORD * TYPE CODE DECODING TYPE EQU $ JST PINPB GET TYPE CODE (1 FRAME) COPY A,Q SAVE TC IN Q CLSN =:40,Q CHECK NULL JMP TYPE AND =:DD,A CHECK FOR :4D,:4F,:6D,:6F CLSN =:4D,A JMP SKIPIT JST PINPW GET LENGTH (2 FRAMES) NEG  A,X MAKE X A COUNTER CLSN =:18,Q CHECK FOR BEGIN JMP TYPE SUB =:9,Q JGT Q,CKERR TC OUT OF RANGE TITL XNX Q INDEX JUMP INSTRUCTION JMPTBL EQU $ JMP JMPTBL+:9 CKERR JMP ERROR 1= LSI-2 START JMP AEND 2= ABS END JMP REND 3= REL END JMP AORG 4= ABS ORG JMP RORG 5= REL ORG JMP WORD 6= ABS WORD JMP WORD 7= REL WORD JMP  WORD 8= RES AND FILL JMP BAC 9= BYTE ADDRESS CONSTANT TITL PAPER TAPE INPUT BYTE * * GETS A FRAME FROM THE DIO HSPTR OR DIO TTY PTR * WHICHEVER IS READY * IF NEITHER IS READY, IT RETURNS TO * CHECK THE NEXT DEVICE IN THE POLLING SEQUENCE * * PINPB ENT COPY Q,SQ SAVE Q REGISTER COPY H8614,Q  SET UP DEAD MAN TIMER OUT Q,:FB START DIO HSPTR OUT Q,:F9 START DIO TTY PTR HSR1 EQU $  IN :FB,A GET DIO HSPTR STATUS TBIT 1,A JT OV,TRYTTY . IF SYSTEM NOT READY, TRY TTY PTR TBIT 3,A JT OV,HSR1 . IF STILL THERE TRY AGAIN TRYHSR EQU $ IJEQ Q,GOTIT  INCREMENT DEAD MAN TIMER, IF EXPIRED JUMP IN :FB,A GET DIO HSPTR STATUS TBIT 1,A  JT OV,TRYTTY . IF NOT READY, TRY TTY PTR TBIT 3,A JF OV,TRYTTY . IF NO WORD READY,TRY TTY * IN :FA,A GET A BYTE FROM HSPTR JMP GOTIT GOT A BYTE TRYTTY EQU $ IN :F9,A GET TTY STATUS TBIT 1,A JT OV,TRYHSR . IF NOT THERE, BACK TO HSPTR TBIT  3,A JF OV,TRYHSR . IF NO WORD TRY HSPTR IN :F8,A GET A BYTE FROM TTY PTR TITL GOTIT EQU $ EXCH H100,X GET RESET COMMNAD OUT X,:FB RESET DIO HSPTR OUT X,:F9 RESET DIO TTY EXCH H100,X RESTORE X JEQ Q,JNEXT COPY SQ,Q  RESTORE Q * NOW DO CHECKSUM CALCULATION CK EQU $ EXCH A,CKSUM COPY A,LASTCK SAVE LAST CHECKSUM  SHIFT A,RO,1 JF OV,$+2 OR =:80,A TURN ON BIT 7 XOR CKSUM,A EXCH CKSUM,A RESTORE CHARACTER IMS RECORD JMP *PINPB TITL CKSM EQU $ CHECKSUM VERIFICATION   COPY LASTCK,A GET LAST CHECKSUM COPY A,CKSAVE SAVE IT COPY PINPB,A GET RETURN POINTER COPY A,SPINPB SAVE IT COPY PINPW,A E COPY A,SPINPW SAVE ANOTHER JST PINPB GET CHECKSUM BYTE SUB  CKSAVE,A SHOULD BE ZERO JNE A,CKERR COPY TEMP1,A GET UPPER BYTE OF INPUT WORD ROUTINE COPY A,CKSAVE STORE IT TEMPORARILY IN CHECKSUM SAVE JST PTP1 GOOD CHECKSUM-GET NEW RECORD COPY CKSAVE,A GET BACK UPPER BYTE COPY A,TEMP1 STORE IT BACK FOR INPUT WORD ROUTINE COPY SPINPW,A COPY A,PINPW RESTORE POINTER COPY SPINPB,A COPY A,PINPB RESTORE ANOTHER JMP PINPB+1 PICK UP A BYTE AND RETURN TO PREVIOUS TC TITL RESERVED CELLS AND LITERAL POOL LASTCK RES 1,0 CHECKSUM SAVE CKSAVE RES 1,0 CHECKSUM SAVE SPINPW RES 1,0 SAVE PINPW RETURN ADDRESS SPINPB RES 1,0 SAVE PINPB RETURN ADDRESS TITL QCD AUTOLOAD TEST VERIFY * * THIS ROUTINE COMPUTES THE XUM * OF THE AUTOLOAD ROM AS IT IS * DONE IN THE QCD TEST. * REL :100 COPY HXFF00,A SET UP COUNT COPY A,TEMP2 COPY =0,X COPY 0(X),A  FIRST WORD JMP AUT5 AUT4 EQU $ ADD 0(X),A ADD NEXT AUT5 EQU $ ADD =1,X  BUMP INDEX IMS TEMP2 JMP AUT4 CSK A,AUTTOT COMPARE TO QCD VALUE HLT LESS HLT GREATER HLT EQUAL TEMP2 RES 1,0 AUTTOT WORD :FFFF HXFF00 WORD :FF00 END D D D D D D D D D D D D D D HT COPY PANEL,A CONSOLE ATTACHED JNE A,GOOO NO-AUTOLOAD ANYWAY JT SS,GOOO IF UNATTENDED ALWAYS EXECUTE IN 4,A INPUT CONSOLE WORD REGISTER SHIFT A,RO,1 GET EXECUTION BIT TO -OV- JF OV,ERROR IF NO EXECUTION GOOO EQU $ RBIT 6,S TURN OFF XA BIT JMP 0(X) GO EXECUTE PANEL RES 1,0 O0SEGMENTBLANK oim MACRO (F510) @ m6kI ) 56= 4B Ui%+u')  Ȁ5   AN ޻ºC  ecȞ?<r@TA r``&槞4:L Lr@ti@C 6gre ep@)|idA@cQAv @u   wv| e p@# qusy p.62XV-(7   piPU@L@| M ˾_ LuJRBC S  V 1DBB 6J?6;TM6D?6 65?6G""DQ * 6%$YV # R   GGE@UBBU( )+ޅ|   OT+:C * FIND END OF MEMORY MEMSRC EQU $ SBIT 6,S TURN ON XA BIT COPY Q,K SAVE RELOCATION BIAS COPY =0,X START FROM TOP OF MEMORY AND WORK DOWN COPY X,PANEL FIND IF CONSOLE PRESENT  TITL NM-4 AUTOLOAD TYPE 4 #84-9316-13B0 TITL START TYPE 4 AUTOLOAD * COPYRIGHT 1978, 1976 COMPUTER AUTOMATION INC. * * USER DOCUMENTATION 00-93016-00B0 * SOURCE FILE 84-93016-23B0 * OBJECT FILE 84-93016-33B0 * WOR  D I/O BINARY 92-21000-43B0 * MAINTENANCE DOC 92-21000-51B0 * REL 0 RES 256,0 REL 0 * * START EQU $ JMP BEGIN START AUTOLOAD TITL MINI-FLOPPY LOADER * PICODA EQU :FC PICO DEVICE ADDRESS, CHANNEL 6 * MINFL1 EQU $ MINI-FLOPPY UNIT 1 COPY =1,A SET UNIT ONE COPY A,MFUNIT MINFL0 EQU $ MINI-FLOPPY UNIT 0 IN PICODA+1,A GET PICO STATUS TO A JEQ A,FIRST  DIO NOT INSTALLED TBIT 1,A GET PRESENT BIT TO OV JT OV,FIRST START POLLING AGAIN READY EQU $  COPY BASE,Y COPY =1,Q SET Q FOR LOOP TWICE COPY =9,A SET OPCODE FOR SEEK TWICE EQU  $ COPY A,OPC COPY =5,X SET X FOR COUNTING AND AS POINTER OUTLUP EQU $ OUTPUT LOOP COPY OUTBL-START(X,Y),A HOPE THIS WORKS OUT A,PICODA IN OUTPUT LOOP JNED X,OUTLUP SEND SIX BYTES  COPY COMAND,A OUTPUT OF COMMAND WORD OUT A,PICODA+1 TITL STATUS IN PICODA+1,A INPUT STATUS  TBIT 1,A BUSY BIT TO OV JT OV,STATUS WAIT FOR NOT BUSY ERRCHK EQU $ ERROR CHECK AND =:7F,A IGNORE WRITE PROTECT CSK A,=5 IJEQ X,HERE A<5, NO ERRORS AND MAKE X=0 JF SS,XERROR A>5, IF NOT POLLING - ERROR HALT JMP FIRST A=5, NOT READY ERROR - KEEP TRYINGV HERE EQU $ COPY =7,A SET OPCODE FOR READ JNED Q,TWICE DO SEEK TO 0 THEN READ 1 SECTOR INPUT EQU $ INPUT FROM PICO FIFO TO MEMORY COPY =:7F,Y SET COUNTER SBIT 2,S SET BYTE MODE INLOOP EQU $ INPUT LOOP  IN PICODA,A COPYB A,0(X) STORE BYTE ADD =1,X INCREMENT POINTER JNED Y,INLOOP DECREMENT COUNTER RBIT 2,S RESET BYTE MODE COPY =0,X SET OFFSET TO ZERO JMP MAGS * * CONTROL BLOCK FOR MINI-FLOPPY * OUTBL EQU $ DED WORD :0001 DRIVE ENABLE DELAY MFSEC WORD :0001 SECTOR MFHEAD WORD :0000 HEAD TRAK WORD :0000 TRACK MFUNIT WORD :0000 MINI FLOPPY UNIT OPC WORD :0009 OPCODE COMAND WORD :200 * TITL INITIALIZE, PURGE MEMORY, AND SELECT DEVICE * * DEVICE SELECTION DECODE * INIT EQU $ COPY  X,BASE SAVE THE BASE ADDRESS OF AUTOLOAD NOW PURGE COPY 0(X),A COPY A,0(X) JNED X,PURGE PURGE PARITY  SBIT 8,S ENABLE INTERRUPTS UIS SET PARITY RBIT 8,S DISABLE INTERRUPTS FIRST  EQU $ COPY =0,A INITIALIZE IOB VALUES XNEXT COPY A,DEV SET UP FOR UNATTENDED OPERATION NEXT EQU $  IN 4,Q GET CONSOLE WORD REGISTER CONTENTS SHIFT Q,RO,1 RIGHT JUSTIFY DEVICE SELECTIN CODE COPY PANEL,A GET PANEL FLAG JNE A,NOPANL IF NO CONSOLE SKIP SENSE SWITCH TEST JF SS,SAME IF ATTENDED OPERATION NOPANL EQU $ IMS DEV BUMP TO NEXT DEVICE COPY DEV,Q LOAD DEVICE INDEX SAME EQU $ XNX  Q INDEX THE JUMP INSTRUCTION JMP $+1 JMP RPTP 0=PTP REL, NOT READY TO NEXT JMP APTP   1=PTP ABS, NOT READY TO NEXT BEGIN JT SS,MEMSRC IF UNATTENDED IN 4,A GET CONSOLE WORD REGISTER CONTENTS JGE A,MEMSRC CHECK FOR TEST XERROR JMP ERROR IF TEST-HALT JMP MINFL0 6=MINI-FLOPPY UNIT 0, NR TO NEXTT JMP MINFL1 7=MINI-FLOPPY UNIT 1, NR TO NEXT TITL PAPER TAPE SERVICE ROUTINES * * ABS/REL END TYPE CODE PROCESSING * * NOTE: END ADDRESS OF -1 IS NOT AN EXECUTION ADDRESS * REND EQU $ ADD K,A ADD RELOCATION BIAS AEND EQU $ COPY A,Q MOVE EXECUTION ADDRESS TO Q IJEQ Q,JTYPE CHECK FOR VALID EXECUTION ADDRESS COPY A,EXEC JTYPE JMP TYPE PROCESS ANOTHER TYPE CODE ** RORG EQU $ ADD K,A ADD RELOCATION BIAS AORG EQU $ COPY A,Y UPDATE THE PC UPDAT EQU $ COPY HPC,X CSM Y,X  JMP $+2 COPY Y,HPC JMP TYPE TITL ** LUPDAT EQU $ IJEQ X,UPDAT BUMP COUNT,IF DONE UPDATE HPC CLSN Q,=8-9&:FF CHECK FOR RES AND FILL TC=8 JMP AWORD KEEP SAME VALUE IF RES AND FILL WORD EQU  $ JST PINPW CLSN Q,=7-9&:FF CHECK FOR REL WORD TC=7 RWORD ADD K,A REL WORD ADD BIAS AWORD EQU $ COPY A,0(Y) STORE VALUE AT PC IJNE Y,LUPDAT BUMP THE PC AND REPEAT * * END OF TAPE SERVICE * * NOTE: ZERO RECORD LENGTH IS AN END OF FILE * EOT EQU $ COPY HPC,Q PUT FIRST AVAILABLE LOCATION IN Q COPY EXEC,X PUT EXECUTION ADDRESS IN X MAGS EQU $ COPY =:40,Y SET UP Y FOR LSI-3/05 OUT A,2 TURN OFF AUTOLOAD LIGHT COPY PANEL,A CONSOLE ATTACHED JNE A,GOOO NO-AUTOLOAD ANYWAY JT SS,GOOO IF UNATTENDED ALWAYS EXECUTE IN 4,A INPUT CONSOLE WORD REGISTER SHIFT A,RO,1 GET EXECUTION BIT TO -OV- JF OV,ERROR IF NO EXECUTION GOOO EQU $ RBIT 6,S TURN OFF XA BIT JMP 0(X) GO EXECUTE PANEL RES 1,0 TITL TEMPORARY STORAGE CELLS * THE FOLLOWING LOCATIONS ARE USED AS TEMP CELLS REL :72 BACMEM RES 1,0 SQ RES  1,0 BASE RES 1,0 BASE ADDRESS OF RELOCATED AUTOLOAD DEV RES 1,0 DEVICE TO SELECT OR POLL EXEC RES 1,0 EXECUTION ADDRESS HPC RES 1,0 HIGH PROGRAM COUNTER LASTCK RES 1,0 CKSAVE RES 1,0 SPINPW RES 1,0 SPINPB RES 1,0 RECORD RES 1,0 TITL MEMORY SIZE TO RELOCATE AUTOLOAD *********************************************** * * * THIS SECTION IS OVERLAYED WITH THE * * TEMPORARY CELLS  * * * *********************************************** ORG EOT+:C * FIND END OF MEMORY MEMSRC EQU $ SBIT 6,S TURN ON XA BIT COPY Q,K SAVE RELOCATION BIAS COPY =0,X START FROM TOP OF MEMORY AND WORK DOWN COPY X,PANEL FIND IF CONSOLE PRESENT  COPY =:FF,Y Y IS USED FOR CONSOLE TEST AND TRANSFER COUNTER SELP Y,4 IN 4,Q SUB Y,Q  JEQ Q,$+2 COPY Q,PANEL NO CONSOLE SO SET PANEL FLAG NON-ZERO SELP A,4 RESTORE WORD REGISTER CONTE  NTS FINDMN EQU $ SUB H100,X DECREMENT MEMORY POINTER COPY =-1,A SET TO ALL ONES  EXCH A,0(X) ACCESS MEMORY THROUGH POINTER EXCH A,0(X) ACCESS MEMORY THROUGH POINTER IJNE A,FINDMN BUMP RESULTS OF MEMORY ACCESS, IF NOT RAM, AGAIN EXCH A,0(X) NOW TRY TO GET BACK ZEROS EXCH A,0(X) JNE A,FINDMN IF FAILURE MUST BE ROM COPY A,TRAP NOP TRAP IN CASE OF PARITY ERROR * TRAP WILL FALL THROUGH TO PARITY ERROR HALT TITL * * RELOCATE AUTOLOAD TO HIGHEST WRITABLE MEMORY * GOTMN EQU $ MOVNXT EQU $ COPY 0(Y),A PICK UP WORD COPY A,0(X,Y) MOVE IT TO HIGH MEMORY JNED Y,MOVNXT IF DONE MOVING JMP INIT-START(X) GO TO RELOCATED AUTOLOAD CODE PTP1 EQU $ ENT * LOOK FOR FILEMARK AND INPUT RECORD LENGTH JST PINPB GET A FRAME IN A REGISTER SUB =:FF,A  CHECK FOR FILEMARK JNE A,PTP1+1 IF NOT FOUND LOOK AGAIN COPY A,CKSUM ZERO CHECKSUM JST PINPW GET RECORD LENGTH (TWO FRAMES) COMP A,A COPY A,RECORD SET COUNT IJEQ A,EOT ZERO LENGTH IS END OF TAPE JMP *PTP1 H8614 WORD :8614 * * TITL UNINSTALLED MEMORY TRAP SET-UP * REL :88  ORG AT MEMORY TRAP TEMP1 EQU $ LOCATION IS ALSO USED AS A TEMP QCDCHK WORD :017C QCD ROM CHECKSUM VALUE CKSUM  RES 1,0 TRAP EQU $ JMP FINDMN UNINSTALLED MEMORY TRAP * * * ERROR EQU $ OUT A,2 TURN OFF AUTOLOAD LIGHT HLT HALT FOR ERROR OR NO EXECUTION COPY Q,K SAVE RTELOCATION BIAS JFIRST EQU $ JMP FIRST GO LOAD ANOTHER TAPE * TITL PAPER TAPE SERVICE ROUTINES * * PAPER TAPE INPUT WORD * RETURNS TWO FRAMES IN A * PINPW EQU $ ENT JST PINPB GET FIRST BYTE SHIFT A,LO,8 MOVE IT TO UPPER BYTE COPY A,TEMP1 STORE IT AWAY JST PINPB GET SECOND BYTE OR TEMP1,A COMBINE TWO BYTES JMP *PINPW * * * BYTE ADDRESS CONSTANT SERVICE * BAC EQU $ COPY K,X GET REL OFFSET TO X SHIFT X,LO,1 MAKE IT A BYTE OFFSET JT OV,ERROR TOO LARGE AN OFFSET COPY X,BACMEM RBIT 0,S CLEAR CARRY ADDC BACMEM,A JT CY,ERROR BAC PLUS OFFSET TOO LARGE COPY  =-1,X JMP AWORD * H100 WORD :100 * JNEXT COPY =6,A SET POLLING SEQUENCE JMP XNEXT TITL  PAPER TAPE TYPE CODE DECODING APTP COPY =0,A ABSOLUTE PAPER TAPE COPY A,K ZERO RELOCATION BIAS RPTP EQU $ RELATIVE PAPER TAPE PTP COPY =0,Y ZERO PC (Y IS PC) COPY Y,HPC AND HIGH PC JST PTP1 GO LOOK FOR RECORD * TYPE CODE DECODING TYPE EQU $ JST PINPB GET TYPE CODE ( 1 FRAME ) COPY A,Q SAVE TYPE CODE CLSN =:40,Q CHECK NULL JMP TYPE AND  =:DD,A CLSN =:4D,A CHECK FOR :4D,:6D,:6F JMP SKIPIT JST PINPW GET LENGTH (TWO FRAMES)   NEG A,X MAKE X A COUNTER CLSN =:18,Q CHECK FOR BEGIN JMP TYPE SUB =:9,Q JGT Q,CKERR TITL XNX Q INDEX JUMP INSTRUCTION JMPTBL EQU $ JMP JMPTBL+:9 CKERR JMP ERROR LSI-2 START JMP AEND 2= ABS END JMP REND 3= REL END JMP AORG 4= ABS ORG JMP RORG 5= REL ORG JMP WORD 6= ABS WORD JMP WORD 7= REL WORD JMP WORD 8= RES AND FILL JMP BAC 9= BYTE ADDRESS CONSTANT * TITL PAPER TAPE INPUT BYTE * * GETS A FRAME FROM THE DIO HSPTR OR DIO TTY PTR * WHICHEVER IS READY * IF NEITHER IS READY, IT RETURNS TO * CHECK THE NEXT DEVICE IN THE POLLING SEQUENCE * * PINPB ENT COPY Q,SQ SAVE Q REGISTER COPY H8614,Q  SET UP DEAD MAN TIMER OUT Q,:FB START DIO HSPTR OUT Q,:F9 START DIO TTY PTR HSR1 EQU $  IN :FB,A GET DIO HSPTR STATUS TBIT 1,A JT OV,TRYTTY . IF SYSTEM NOT READY, TRY TTY PTR TBIT 3,A JT OV,HSR1 . IF STILL THERE TRY AGAIN TRYHSR EQU $ IJEQ Q,GOTIT  INCREMENT DEAD MAN TIMER, IF EXPIRED JUMP IN :FB,A GET DIO HSPTR STATUS TBIT 1,A  JT OV,TRYTTY . IF NOT READY, TRY TTY PTR TBIT 3,A JF OV,TRYTTY . IF NO WORD READY,TRY TTY * IN :FA,A GET A BYTE FROM HSPTR JMP GOTIT GOT A BYTE TRYTTY EQU $ IN :F9,A GET TTY STATUS TBIT 1,A JT OV,TRYHSR . IF NOT THERE, BACK TO HSPTR TBIT 3,A JF OV,TRYHSR . IF NO WORD TRY HSPTR IN :F8,A GET A BYTE FROM TTY PTR TITL GOTIT EQU $ EXCH H100,X GET RESET COMMNAD OUT X,:FB RESET DIO HSPTR OUT  X,:F9 RESET DIO TTY EXCH H100,X RESTORE X JEQ Q,JNEXT COPY SQ,Q  RESTORE Q * NOW DO CHECKSUM CALCULATION CK EQU $ EXCH A,CKSUM COPY A,LASTCK SAVE LAST CHECKSUM  SHIFT A,RO,1 JF OV,$+2 OR =:80,A TURN ON BIT 7 XOR CKSUM,A EXCH CKSUM,A RESTORE CHARACTER IMS RECORD JMP *PINPB TITL CKSM EQU $ CHECKSUM VERIFICATION COPY  LASTCK,A GET LAST CHECKSUM COPY A,CKSAVE SAVE IT COPY PINPB,A GET RETURN POINTER COPY A,SPINPB SAVE IT COPY PINPW,A COPY A,SPINPW SAVE ANOTHER JST PINPB GET CHECKSUM BYTE SUB  CKSAVE,A SHOULD BE ZERO JNE A,CKERR ERROR JUMP COPY TEMP1,A SAVE UIPPER BYTE IF IN WORD FETCH COPY A,CKSAVE JST PTP1 LOOK FOR FILEMARK INPUT RECORD COUNT COPY CKSAVE,A RESTORE UPPER BYTE COPY A,TEMP1 COPY SPINPW,A COPY A,PINPW RESTORE POINTER COPY SPINPB,A COPY A,PINPB RESTORE POINTER JMP PINPB+1 PICK UP A BYTE AND RETURN IN PREVIOUS TC ** SKIPIT EQU $ JST PINPB GET  LENGTHH COPY A,Q SAVE IT IN Q JEQD Q,XTYPE IF ZERO DO NEXT TYPE JST PINPB IF NOT GET NEXT BYTE JNED Q,$-1 INPUT BYTES TILL Q=0E XTYPE JMP TYPE TITL QCD AUT TEST VERIFY * * THIS ROUTINE COMPUTES THE XUM * OF THE AUTOLOAD ROM AS IT IS * DONE IN THE QCD TEST. * REL :100 COPY HXFF00,A  SET UP COUNT COPY A,TEMP2 COPY =0,X COPY 0(X),A FIRST WORD JMP AUT5 AUT4 EQU $ ADD 0(X),A ADD NEXT AUT5 EQU $ ADD =1,X BUMP INDEX IMS TEMP2 JMP AUT4 CSK A,AUTTOT COMPARE TO QCD VALUE HLT LESS HLT GREATER HLT EQUAL TEMP2 RES 1,0 AUTTOT WORD :FFFF HXFF00 WORD :FF00 END D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D  =7,A READ ALL OPCODE COPY A,OPCODE TO IOB COPY A,SEEK SEEK COUNT FLOP1 EQU $ COPY =1,A SET UP TO READ SECTOR 1 COPY A,SECTOR PUT IT IN IOB COPY BASE,A GET CODES BASE ADDRESS ADD =IOB-START,A COMPUTE NEW IOB ADDRESS SST FLPYAD*8+0 TEST FOR CONTROLOVicEdDano>|{   A~~4 6A ^즞솣 AN ގC vuLrٞo)A>Iep@)~idAMx@uiijI)Bi ] _bcU Alb_~ސ{~~KL 6UK5 >1. - ,Ai@&C 6g p@릙66G  @EB 5 `"恟! )+ޅ|   #mG9G4G3G6--G7--E7G1--G0E4---- (CHANNEL 6) * ADDED UNIT 1 AUTOLOAD CAPABILITY * ADDED THREE WORDS TO DISK CIOB LENGTH FOR WTC * * EXCHANGE INSTRUCTIONS IN LOCATIONS 0 AND 1 TO * SAVE DATA REGISTER IF SENSE SWITCH IS ON * TITL START REL 0 RES 256,0 REL  0 * * START EQU $ IN 4,A GET CONSOLE WORD REGISTER CONTENTS JT SS,MEMSRC IF UNATTENED  JGE A,MEMSRC CHECK FOR TEST JMP JERROR IF TEST-HALT TITL FLOPPY LOADER * * FLOPPY LOADER * FLPYAD EQU :11 FLOPPY DEVICE ADDRESS FLOPPY EQU $ SST FLPYAD*8+4 CHECK FOR CONTROLLER PRESENT JMP  NEXT IF NOT PRESENT COPY =7,A READ ALL OPCODE COPY A,OPCODE TO IOB  COPY A,SEEK SEEK COUNT FLOP1 EQU $ COPY =1,A SET UP TO READ SECTOR 1 COPY A,O0SEGMENTBLANK oim MACRO (F510) @ ~|   B~~4 6O c䆨  AN ޓ’C  vuPޞ0 @)B? ep@)~idAMx @u iijI)=i ] _bcU Bl ~~~~Q  6UK5 ;!V? / p@ ~AQ+X Q "i@ C 6g B6 Q I )5  6= i E~pU)i%+u'6  66G  @EB 5 `"恟 )+ޅ|    JMP ERROR1 IF ERROR TITL DEVICE SELECTION DECODE * * DEVICE SELECTION DECODE * INIT EQU $ .f1 " MAINTENANCE DOCUMENT NM-4 AUTOLOAD ROM .f2 " P/N 92-21000-51 rev C000 page # .f3 " .bp 2 .sp 7 .bo REFERENCE .sp 2 .fi The NM-4 autoload programs consist of the following: .sp 2 .co 9 .bo  ITEM PART NUMBER .sp User Documentation 00-93016-00 Assembly Listing  84-93016-1X Source File (Floppy Disk) 84-93016-2X ROM/PROM Generation Tape (PT)  92-21000-4X .sp 2 X = 1 Type 2 - Part No. 01-49682-95 X = 2 Type 3 - Part No. 01-49682-96 X = 3 Type 4 - Part No. 01-49682-97 X = 5 Type 6 - Part No. 01-49684-43 CHECK SUM = :6D4F .sp 2 .bo OBJECT AND BINARY FILE GENERATION .sp 2 With the source diskette 84-93016-XX mounted in unit 0, the following commands will to create the object and then the binary files. .sp 2 .co 6 MARCO DF0.TYPE( )AUTO.ASM .sp LINK DF0.TYPE( )AUTO.OBJ .sp The LINKER will create the binary file called TYPE(X)AUTO.BIN to be used with ROMGEN. .sp 2 .bo DATA I/O PROGRAMING TAPE GENERATION .sp 1 To generate the Data I/O ROM/PROM paper tape enter the following commands. .sp ROMGEN.BIN .sp The ROM/PROM generation program will be entered, and will query for the following response. (Terminate each response with a carriage return character). .sp 2 .tp 100 .co 99 .bo .ul QUERY  RESPONSE .sp ROMGEN (E400) .sp LOAD "L" PROCESS "P" RE-PROCESS "R" VERIFY "V" TERMINATE "T" .sp ->  L LOGICAL WORD SIZE OF INPUT, IN BITS? 16 ACKNOWLEDGE RE-ORG (Y OR N)?  Y ONLY LOAD DATA ABOVE LOGICAL ADDRESS=: CR INPUT MEDIUM DF0.TYPE(X)AUTO.BIN .sp LOAD "L" PROCESS "P" RE-PROCESS "R" VERIFY "V" TERMINATE "T" .sp -> P ROM OR PROM (R OR P)? P (P)ROM WIDTH IN BITS (4 OR 8)? 8 (P)ROM LENGTH ("K" SUFFIX MULTIPLIES BY 1024)? 512 OUTPUT DATA FORMAT (1 BIT = H OR L)? L AUTOLOAD FORMAT (Y OR N)? Y VISUALLY-READABLE HEADERS/TRAILERS TO APPEAR IN OUTPUT (Y OR N)? Y TITLE (CO. OR PROG. NAME)?  NM4 AUTOLOAD MORE CO. OR PROG. INFORMATION? TYPE ( ) 92-21000-4X DATE, 9 CHARACTERS (DD MMM YY)?  (ENTER CURRENT DATE) YOUR P.O. NUMBER? (CR) NUMBER OF (P)ROMS (1-24)?  1 INPUT YOUR PART NUMBERS... (P)ROM 1? XX-XXXXX-XX INPUT VENDOR PART NUMBERS.. (P)ROM 1? (CR) OUTPUT MEDIUM: PP .sp LOAD "L" PROCESS "P" RE-PROCESS "R" VERIFY "V" TERMINATE "T" .sp ->   V INPUT MEDIUM: PR .sp LOAD "L" PROCESS "P" RE-PROCESS "R" VERIFY "V" TERMINATE "T" .sp -> T .sp 3 .bo .ul .co 0 .fi PROM GENERATION FOR DATA I/O .sp 2 The following commands will load the binary program from the paper tape. .co 99 .sp LOAD XXYY (Family code XX, pinout code YY depends on the specific part that is to be programed) BLOCK LIMITS L1=0 ENTER L2=200 ENTER L3=0 ENTER .sp SEL 10 (This selects the paper tape reader) START SEL D1 START .co 0 .sp 2 .fi The program is now loaded. Insert the blank prom P/N 01-49683-00 or 01-49599-00 (47S472,28S42,82S147) and program it by entering the following commands. .sp 2 .co 2 PROG START .sp 5 .bo 3 .ls 2 .ul 3 NOTE: THE SOURCE FOR THIS DOCUMENT THIS ON FLOPPY DISKETTE P/N 84-93016-01 VOLUME F01601. DO NOT MAKE OFF-LINE CHANGES. R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R COPY A,TRAP NOP TRAP IN CASE OF PARITY ERROR * TRAP WILL FALL THROUGH TO PARITY ERROR HALT TITL * * RELOCATE AUTOLOAD TO HIGHEST WRITABLE MEMORY * GOTMN EQU $ MOVNXT EQU $ COPY 0(Y),A PICK UP WORD COVicEdDano?~|   B~~4 6Oc󦣞䆨 AN ޓ’C vuPޞ0 @)B ?Hep@)~idAMx@uiijI)=i ] _bcU Bl~~~~Q 6UK5 ;!V?;/ p@ ~AQ+XQ"i@C 6g B6 Q I )5 6= iE~pU)i%+u'6  66G  @EB 5 `"恟 )+ޅ|   mG9G4G3G6G5G7--E7G1--G0E4----)B ?Hep@)~idAMx@uiijI)=i ] _bcU Bl~~~~Q 6UK5 ;!V?;/ p@ ~AQ+XQ"i@C 6g B6 Q I )5 6= iE~pU)i%+u'6 TM1 EQU $ COPY =4,A SET UP OPCODE COPY A,OPCODE COPY =0,A INITIALIZE IOB VALUES COPY A,SECTOR SECTOR ADDRESS OF 0 COPY A,NXTIOB NO IOB CHAINING COPY A,STMCST CLEAR CONTROLLER STATUS COPY BASE,A COMPUTE NEW IOB ADDRESS ADD =IOB-START,A  CLSN Y,=1 FIND WHICH PATH TO TAKE JMP PATH15 Y WAS SET TO ONE SO TAKE :15 PATH COPY A,WTCST3  TEMP STORE COPY HX8000,A NEG 64K COPY A,TEMP1 STORE COPY WTCST3,A REPLACE A REG PATH14 SELP A,SMDA*8+4 INITIALIZE THE CONTROLLER SST SMDA*8+0 TEST FOR IDLE JMP $-1 WAIT FOR IDLE OUT A,SMDA*8+0 ISSUE I/O SST SMDA*8+0 TEST FOR COMPLETION JMP $+2 IF NOT COMPLETE JMP STAT IF COMPLETE IMS TEMP1 WAIT FOR 120 MS THEN TRY :15 JMP   $-4 WAIT FOR COMPLETION PATH15 SELP A,SUDA*8+4 INITIALIZE THE CONTROLLER SST SUDA*8+0 TEST FOR IDLE JMP $-1 WAIT FOR IDLE OUT A,SUDA*8+0 ISSUE I/O SST SUDA*8+0 TEST FOR COMPLETION JMP $-1 WAIT FOR COMPLETION STAT COPY STMCST,A GET THE STATUS JGE A,JBOOT  IF NO ERROR GO EXECUTE BOOT SHIFT A,RO,1 DISC READY BIT TO -OV- JF OV,ERROR IF ERROR AND READY JNED Q,STM1 IF ONLY TRIED ONCE ADD =1,Q MAKE SURE LAST INSTRUCTION IS PASSED AGAIN  JNED X,TRYUPR TRY :15 TWICE JMP FIRST IF STILL NOT READY TITL ERROR/EXECUTION HALT * *  TITL UNINSTALLED MEMORY TRAP SET-UP REL :88 ORIGIN AT MEMORY TRAP LOCATION TEMP1 EQU $ LOCATION IS ALSO USED AS A TEMP QCDCHK WORD :4767 QCD ROM CHECKSUM VALUE (B0 REV) CKSUM RES 1,0 TRAP EQU $ JMP  FINDMN UNINSTALLED MEMORY TRAP IERROR EQU $ USED FOR INDIRECT JUMP AND ALSO ERROR1 JMP ERROR PARITY ERROR AND RANGE JMP SQ RES 1,0 JBOOT JMP BOOT * H100 WORD :100 HX8000 WORD :8000 * JFIRST EQU $ JUMP INTO POLLING SEQUENCE COPY =1,A SET UP FOR DISC STORAGE MODULE NEXT XNEXT COPY A,DEV JMP NEXT * JTEST JMP TEST INDIRECT JUMP TO TEST * * C0 ADDITION FOR UNIT 1 DISK AUTOLOAD * DRV1 COPY =1,A COPY A,UNIT SET UNIT TO ONE JMP STM14 GO DO IT * MAGS EQU $ FOR MAG DEVICE LOADING COPY =:40,Y SET UP Y FOR LSI-3/05 OUT A,2 TURN OFF AUTOLOAD LIGHT COPY PANEL,A CONSOLE ATTACHED JNE A,GOOO NO-AUTOLOAD ANYWAY JT SS,GOOO IF UNATTENDED ALWAYS EXECUTE IN 4,A INPUT WORD REGISTER SHIFT A,RO,1 GET EXECUTION/NO EXECUTION BIT JF OV,ERROR IF NO EXECUTION * GOOO EQU $ RBIT 6,S TURN OFF XA BIT JMP 0 * ERROR EQU $ OUT A,2 TURN OFF AUTOLOAD LIGHT HLT HALT FOR ERROR OR NO EXECUTION COPY Q,K SAVE RELOCATION BIAS  JMP FIRST * * TITL MINI-DIAGNOSTIC * * MINI-DIAGNOSTIC CHECKS PROCESSOR OPERATION * AND DOES A PARITY PURGE THROUGHOUT MEMORY * TEST EQU $ COPY X,XSAVE SBIT 1,S SET OV JF OV,STOPIT ENSURE OV WAS SET RBIT 1,S RESET OV JT OV,STOPIT ENSURE OV RESET COPY =0,A ZERO A REGISTER  JNE A,STOPIT SUB =1,A IJNE A,STOPIT TEST1 EQU $ COPY A,Q XOR Q,A JEQ  A,PURGE STOPIT EQU $ STOP IN TEST OUT A,2 TURN OFF AUTOLOAD LATCH HLT PURGE EQU $  READ/WRITE TO PURGE MEMORY COPY 0(X),A COPY A,0(X) JNED X,TEST1 * TO ENABLE PARITY LOGIC, ENABLE INTERRUPTS * THEN ISSUE A UIS, NO PARITY ERRORS SHOULD * OCCUR AFTER THE PURGE SBIT 8,S ENABLE INTERRUPTS UIS RE-ENABLE PARITY CHECKING RBIT 8,S  DISABLE INTERRUPTS COPY XSAVE,X COPY RETURN,Y PICK UP RETURN ADDRESS ADD X,Y ADD A UTOLOAD OFFSET COPY Y,RETURN STORE COMPUTED RETURN ADDRESS JMP *RETURN RETURN THROUGH INDIRECT POINTER * * RETURN FOR AUTOLOAD THROUGH THIS LOCATION * RETURN WORD SETUP * XSAVE RES 1,0 RES 6,0 TITL QCD AUT TEST VERIFY * * THIS ROUTINE COMPUTES THE XUM * OF THE AUTOLOAD ROM AS IT IS * DONE IN THE QCD TEST. *  REL :100 COPY HXFF00,A SET UP COUNT COPY A,TEMP2 COPY =0,X COPY 0(X),A  FIRST WORD JMP AUT5 AUT4 EQU $ ADD 0(X),A ADD NEXT AUT5 EQU $ ADD =1,X BUMP INDEX IMS TEMP2 JMP AUT4 CSK A,AUTTOT COMPARE TO QCD VALUE HLT LESS HLT GREATER HLT EQUAL TEMP2 RES 1,0 AUTTOT WORD :FFFF HXFF00 WORD :FF00 END D D D D D D D D D ON CODE COPY PANEL,A GET PANEL FLAG JNE A,NOPANL IF NO PANEL SKIP SENSE SWITCH TEST JF SS,SAME  IF ATTENDED OPERATION NOPANL EQU $ IMS DEV BUMP TO NEXT DEVICE COPY DEV,Q  LOAD DEVICE INDEX TITL SAME EQU $ XNX Q INDEX THE JUMP INSTRUCTION JMPO0SEGMENTBLANK oim MACRO (F510) @ |{   A~~4 6A ^즞솣  AN  ގC vuLrٞo)A> ep@)~idAMx @u iijI)Bi ] _bcU Alb _~ސ{ ~~KL 6UK5Gg> . - ,Ai@ &C 6g p@ 66G  @EB  5 `"! )+ޅ|   # PANEL FLAG = 0 IF CONSOLE PRESENT * * THE FOLLOWING LOCATION ARE USED AS THE IOB * FOR THE FLOPPY AND DISCS * IOB EQU $ ORG IOB OPCODE RES 1,0 UNIT RES 1,0 CYLIN RES 1,0 SEEK EQU $ HEAD RES 1,0 SECTOR RES OVicEdDano>|{   A~~4 6A ^즞솣 AN ގC vuLrٞo)A>Iep@)~idAMx@uiijI)Bi ] _bcU Alb_~ސ{~~KL 6UK5Gg>1. - ,Ai@&C 6g p@릙66G  @EB 5 `"恟! )+ޅ|   #mG9G4G3G6--G7--E7G1--G0E4---- 6,S TURN ON XA BIT COPY Q,K SAVE RELOCATION BIAS COPY =0,X START FROM TOP OF MEMORY AND WORK DOWN COPY X,PANEL CLEAR PANEL FLAG COPY =:FF,Y Y USED FOR CONSOLE CHECK AND TRANSFER COUNTER  SELP Y,4 PUT Y INTO WORD REG IN 4,Q GET IT BACK CSK Q,=:FF CHECK IF CONSOLE PRESENT  .f1 " MAINTENANCE DOCUMENT NM-4 AUTOLOAD ROM .f2 " P/N 92-21000-51 rev C000 page # .f3 " .bp 2 .sp 7 .bo REFERENCE .sp 2 .fi The NM-4 autoload programs consist of the following: .sp 2 .co 9 .bo  ITEM PART NUMBER .sp User Documentation 00-93016-00 Assembly Listing  84-93016-1X Source File (Floppy Disk) 84-93016-2X ROM/PROM Generation Tape (PT)  92-21000-4X .sp 2 X = 1 Type 2 - Part No. 01-49682-95 X = 2 Type 3 - Part No. 01-49682-96 X = 3 Type 4 - Part No. 01-49682-97 X = 5 Type 6 - Part No. 01-49684-43 .sp 2 .bo OBJECT AND BINARY FILE GENERATION .sp 2 With the source diskette 84-93016-XX mounted in unit 0, the following commands will to create the object and then the binary files. .sp 2 .co 6 MARCO DF0.TYPE( )AUTO.ASM .sp LINK DF0.TYPE( )AUTO.OBJ .sp The LINKER will create the binary file called TYPE(X)AUTO.BIN to be used with ROMGEN. .sp 2 .bo DATA I/O PROGRAMING TAPE GENERATION .sp 1 To generate the Data I/O ROM/PROM paper tape enter the following commands. .sp ROMGEN.BIN .sp The ROM/PROM generation program will be entered, and will query for the following response. (Terminate each response with a carriage return character). .sp 2 .tp 100 .co 99 .bo .ul QUERY  RESPONSE .sp ROMGEN (E400) .sp LOAD "L" PROCESS "P" RE-PROCESS "R" VERIFY "V" TERMINATE "T" .sp ->  L LOGICAL WORD SIZE OF INPUT, IN BITS? 16 ACKNOWLEDGE RE-ORG (Y OR N)? Y ONLY LOAD DATA ABOVE LOGICAL ADDRESS=: CR INPUT MEDIUM DF0.TYPE(X)AUTO.BIN .sp LOAD "L" PROCESS "P" RE-PROCESS "R" VERIFY "V" TERMINATE "T" .sp -> P ROM OR PROM (R OR P)?  P (P)ROM WIDTH IN BITS (4 OR 8)? 8 (P)ROM LENGTH ("K" SUFFIX MULTIPLIES BY 1024)? 512 OUTPUT DATA FORMAT (1 BIT = H OR L)? L AUTOLOAD FORMAT (Y OR N)? Y VISUALLY-READABLE HEADERS/TRAILERS TO APPEAR IN OUTPUT (Y OR N)? Y TITLE (CO. OR PROG. NAME)? NM4 AUTOLOAD MORE CO. OR PROG. INFORMATION? TYPE ( ) 92-21000-4X DATE, 9 CHARACTERS (DD MMM YY)? (ENTER CURRENT DATE) YOUR P.O. NUMBER? (CR) NUMBER OF (P)ROMS (1-24)? 1 INPUT YOUR PART NUMBERS... (P)ROM 1? XX-XXXXX-XX INPUT VENDOR PART NUMBERS.. (P)ROM 1? (CR) OUTPUT MEDIUM:  PP .sp LOAD "L" PROCESS "P" RE-PROCESS "R" VERIFY "V" TERMINATE "T" .sp ->  V INPUT MEDIUM: PR .sp LOAD "L" PROCESS "P" RE-PROCESS "R" VERIFY "V" TERMINATE "T" .sp -> T .sp 3 .bo .ul .co 0 .fi PROM GENERATION FOR DATA I/O .sp 2 The following commands will load the binary program from the paper tape. .co 99 .sp LOAD XXYY (Family code XX, pinout code YY depends on the specific part that is to be programed) BLOCK LIMITS L1=0 ENTER L2=200 ENTER L3= 0 ENTER .sp SEL 10 (This selects the paper tape reader) START SEL D1 START .co 0 .sp 2 .fi The program is now loaded. Insert the blank prom P/N 01-49683-00 or 01-49599-00 (47S472,28S42,82S147) and program it by entering the following commands. .sp 2 .co 2 PROG START .sp 5 .bo 3 .ls 2 .ul 3 NOTE: THE SOURCE FOR THIS DOCUMENT THIS ON FLOPPY DISKETTE P/N 84-93016-01 VOLUME F01601. DO NOT MAKE OFF-LINE CHANGES. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ROM CHECKSUM VALUE (CO REV) CKSUM RES 1,0 TRAP EQU $ JMP FINDMN UNINSTALLED MEMORY TRAP IERROR EQU  $ USED FOR INDIRECT JUMP AND ALSO ERROR1 JMP ERROR PARITY ERROR AND RANGE JMP SQ RES 1,0 JBOOT JMP BOOT * H1O0SEGMENTBLANK oim MACRO (F510) @ |{   A~~4 6A ^즞솣  AN  ގC vuLrٞo)A> ep@)~idAMx @u iijI)Bi ] _bcU Alb _~ސ{ ~~KL 6UK5> . - ,Ai@ &C 6g p@ 66G  @EB  5 `"! )+ޅ|   #CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC,S TURN OFF XA BIT JMP 0 * ERROR EQU $ OUT A,2 TURN OFF AUTOLOAD LIGHT HLT HALT FOR ERROR OR NO EXECUTION COPY Q,K SAVE RELOCATION BIAS JMP FIRST * * TITL MINI-DIAGNOSTIC * TITL NM-4 AUTOLOAD TYPE 6 #84-93016-15B0 TITL START * COPYRIGHT 1978,1976 COMPUTER AUTOMATION INC. * * USER DOCUMENTATION 00-93016-00B0 * SOURCE FILE 84-93016-25B0 * OBJECT FILE 84-93016-35B0 * WORD I/O BINARY 92-21000-45B0 * MAINTENANCE DOC 92-21000-51C0 * ************************************************************ * REVISION HISTORY ************************************************************ * * REVISION B0 - 10/MAY/84 A.BROUGHTON * * TYPE 6 AUTOLOAD IS A MODIFICATION OF TYPE 2 * * THE CHANGES ARE: * * REMOVED MAG TAPE PICO AUTOLOAD (CHANNEL 1) * REMOVED MINI-FLOPPY AUTOLOAD (CHANNEL 6) * ADDED UNIT 1 AUTOLOAD CAPABILITY * ADDED THREE WORDS TO DISK CIOB LENGTH FOR WTC * * EXCHANGE INSTRUCTIONS IN LOCATIONS 0 AND 1 TO * SAVE DATA REGISTER IF SENSE SWITCH IS ON * TITL START REL 0 RES 256,0 REL  0 * * START EQU $ IN 4,A GET CONSOLE WORD REGISTER CONTENTS JT SS,MEMSRC IF UNATTENED  JGE A,MEMSRC CHECK FOR TEST JMP JERROR IF TEST-HALT TITL FLOPPY LOADER * * FLOPPY LOADER * FLPYAD EQU :11 FLOPPY DEVICE ADDRESS FLOPPY EQU $ SST FLPYAD*8+4 CHECK FOR CONTROLLER PRESENT JMP  NEXT IF NOT PRESENT COPY =7,A READ ALL OPCODE COPY A,OPCODE TO IOB  COPY A,SEEK SEEK COUNT FLOP1 EQU $ COPY =1,A SET UP TO READ SECTOR 1 COPY A, SECTOR PUT IT IN IOB COPY BASE,A GET CODES BASE ADDRESS ADD =IOB-START,A COMPUTE NEW IOB ADDRESS SST FLPYAD*8+0 TEST FOR CONTROLLER IDLE JMP $-1 WAIT FOR CONTROLLER IDLE OUT  A,FLPYAD*8+0 ISSUE I/O SST FLPYAD*8+0 TEST FOR COMPLETION JMP $-1 WAIT FOR DONE COPY =-80,A INSURE CYLINDER 0 EXCH A,SEEK GET SEEK COUNT JGE A,FLOP1 IF FIRST SEEK COPY FLPSTT,A GET STATUS SHIFT A,RO,1 SYSTEM READY BIT TO -OV- JT OV,EXIT  IF NOT READY JMP FLOP2 EXIT COPY =1,A SET UP FOR HARD DISK NEXT COPY A,DEV JMP NEXT FLOP2 EQU $ AND =:7F,A CLEAR TO 7 BITS JEQ A,BOOT IF NO ERRORS JERROR EQU $  JMP ERROR1 IF ERROR TITL DEVICE SELECTION DECODE * * DEVICE SELECTION DECODE * INIT EQU $  COPY X,BASE SAVE THE BASE ADDRESS OF AUTOLOAD NOW JMP JTEST DO MINI-DIAGNOSTIC SETUP EQU  $ THEN RETURN HERE COPY H100,A SET UP MAGNETIC DEVICE WORD COUNT COPY A,WORDS STUFF IT IN THE IOB FIRST EQU $ COPY =0,A INITIALIZE IOB VALUES COPY A,BUFFER BUFFER ADDRESS IS ALWAYS 0 COPY A,INTER NO INTERRUPTS COPY A,FLPSTT CLEAR FLOPPY STATUS COPY A,CYLIN  CYLINDER 0 COPY A,UNIT UNIT 0 COPY =2,A SET FLOPPY AS FIRST DEVICE COPY A,DEV SET UP FOR UNATTENDED OPERATION NEXT EQU $ IN 4,Q GET CONSOLE WORD REGISTER  SHIFT Q,RO,1 RIGHT JSTIFY DEVICE SELECTION CODE COPY PANEL,A GET PANEL FLAG JNE A,NOPANL IF NO PANEL SKIP SENSE SWITCH TEST JF SS,SAME IF ATTENDED OPERATION NOPANL EQU $ IMS DEV  BUMP TO NEXT DEVICE COPY DEV,Q LOAD DEVICE INDEX TITL SAME EQU $ XNX Q  INDEX THE JUMP INSTRUCTION JMP $+1 AND EXECUTE IT JMP NEXT . 0=PTP REL, NOT SUPPORTED JMP NEXT . 1=PTP ABS, NOT SUPPORTED JMP STM14 . 2=STORAGE MODULE, POLLED 2ND JMP FLOPPY . 3=FLOPPY, POLLED 1ST JMP NEXT . 4=MTIC, NOT POLLED JMP STMU14 . 5=DISC UPPER PLATTER, NOT POLLED JMP DRV1 . 6 = HARD DISK UNIT 1 NOT POLLED JMP NEXT . 7= NOT POLLED * BOOT EQU $  COPY =0,X SET EXECUTION ADDRESS TO ZERO JMP MAGS GO CHECK EXECUTION BIT * TITL FLOPPY/DISC IOB * * THE FOLLOWING LOCATIONS ARE USED AS TEMP CELLS * BASE RES 1,0 AUTOLOAD RELOCATION ADDRESS DEV RES 1,0 DEVICE TO CHECK IF READY PANEL RES 1,0 PANEL FLAG = 0 IF CONSOLE PRESENT * * THE FOLLOWING LOCATION ARE USED AS THE IOB * FOR THE FLOPPY AND DISCS * IOB EQU $ ORG IOB OPCODE RES 1,0 UNIT RES 1,0 CYLIN RES 1,0 SEEK EQU $ HEAD RES 1,0 SECTOR RES 1,0 WORDS RES 1,0 BUFFER RES 1,0 INTER RES 1,0 FLPWCT EQU $ NX TIOB RES 1,0 FLPSTT EQU $ STMWCT RES 1,0 STMCST RES 1,0 STMDST RES 1,0 WTCST1 RES 1,0 ADDED FOR WINCHESTER TAPE CONTROLLER WTCST2 RES 1,0 WTCST3 RES 1,0 TITL MEMORY SEARCH TO RELOCATE AUTOLOAD ************************************************** * NOTE: THIS SECTION IS OVERLAYED WITH * * THE DISK I/O BLOCK. SEE ABOVE * * * ************************************************** ORG IOB-3 *  FIND END OF MEMORY MEMSRC EQU $ SBIT 6,S TURN ON XA BIT COPY Q,K SAVE RELOCATION BIAS  COPY =0,X START FROM TOP OF MEMORY AND WORK DOWN COPY X,PANEL CLEAR PANEL FLAG COPY =:FF,Y Y USED FOR CONSOLE CHECK AND TRANSFER COUNTER SELP Y,4 PUT Y INTO WORD REG IN 4,Q GET IT BACK CSK Q,=:FF CHECK IF CONSOLE PRESENT NOP COPY Y,PANEL NOT PRESENT SO SET PANEL FLAG NON-ZERO  SELP A,4 RESTORE WORD REG IN CASE SS=FALSE FINDMN EQU $ SUB H100,X DECREMENT MEMORY POINTER COPY =-1,A SET TO ALL ONES EXCH A,0(X) ACCESS MEMORY THROUGH POINTER EXCH A,0(X) ACCESS MEMORY THROUGH POINTER IJNE A,FINDMN BUMP RESULTS OF MEMORY ACCESS, IF NOT RAM, AGAIN  EXCH A,0(X) NOW TRY TO GET BACK ZEROS EXCH A,0(X) JNE A,FINDMN IF FAILURE MUST BE ROM  COPY A,TRAP NOP TRAP IN CASE OF PARITY ERROR * TRAP WILL FALL THROUGH TO PARITY ERROR HALT TITL * * RELOCATE AUTOLOAD TO HIGHEST WRITABLE MEMORY * GOTMN EQU $ MOVNXT EQU $ COPY 0(Y),A PICK UP WORD COPY A,0(X,Y) MOVE IT TO HIGH MEMORY JNED Y,MOVNXT IF DONE MOVING JMP INIT-START(X)  GO TO RELOCATED AUTOLOAD CODE * * TITL DISC STORAGE MODULE LOADER * SMDA EQU :14 DISC STORAGE MODULE DEVICE ADDRESS SUDA EQU :15 * * :14= MEDIUM CAPACITY DISC * :15= HIGH CAPACITY DISC * STMU14 EQU $ COPY =2,Y SET HEAD FOR UPPER PLATTER JMP STMX JUMP AROUND LOWER PLATTER HEAD SET STM14 EQU $  DISC LOWER PLATTER COPY =0,Y SET HEAD FOR LOWER PLATTER STMX COPY Y,HEAD COPY =1,Q  COPY =1,X SET Q AND X FOR LOOPING STM0 EQU $ SST SMDA*8+4 SENSE IF CONTROLLER PRESENT JMP  TRYUPR IF NOT TRY AT :15 JMP STM1 PRESENT AT :14 TRYUPR SST SUDA*8+4 SENSE IF PRESENT AT :15 JMP FIRST NOT PRESENT SO CHECK FIRST DEVICE COPY =1,Y SET Y FOR :15 PATH TITL STM1 EQU $ COPY =4,A SET UP OPCODE COPY A,OPCODE COPY =0,A INITIALIZE IOB VALUES COPY A,SECTOR SECTOR ADDRESS OF 0 COPY A,NXTIOB NO IOB CHAINING COPY A,STMCST CLEAR CONTROLLER STATUS COPY BASE,A COMPUTE NEW IOB ADDRESS ADD =IOB-START,A  CLSN Y,=1 FIND WHICH PATH TO TAKE JMP PATH15 Y WAS SET TO ONE SO TAKE :15 PATH COPY A,WTCST3   TEMP STORE COPY HX8000,A NEG 64K COPY A,TEMP1 STORE COPY WTCST3,A REPLACE A REG PATH14 SELP A,SMDA*8+4 INITIALIZE THE CONTROLLER SST SMDA*8+0 TEST FOR IDLE JMP $-1 WAIT FOR IDLE OUT A,SMDA*8+0 ISSUE I/O SST SMDA*8+0 TEST FOR COMPLETION JMP $+2 IF NOT COMPLETE JMP STAT IF COMPLETE IMS TEMP1 WAIT FOR 120 MS THEN TRY :15 JMP  $-4 WAIT FOR COMPLETION PATH15 SELP A,SUDA*8+4 INITIALIZE THE CONTROLLER SST SUDA*8+0 TEST FOR IDLE JMP $-1 WAIT FOR IDLE OUT A,SUDA*8+0 ISSUE I/O SST SUDA*8+0 TEST FOR COMPLETION JMP $-1 WAIT FOR COMPLETION STAT COPY STMCST,A GET THE STATUS JGE A,JBOOT  IF NO ERROR GO EXECUTE BOOT SHIFT A,RO,1 DISC READY BIT TO -OV- JF OV,ERROR IF ERROR AND READY JNED Q,STM1 IF ONLY TRIED ONCE ADD =1,Q MAKE SURE LAST INSTRUCTION IS PASSED AGAIN  JNED X,TRYUPR TRY :15 TWICE JMP FIRST IF STILL NOT READY TITL ERROR/EXECUTION HALT * *  TITL UNINSTALLED MEMORY TRAP SET-UP REL :88 ORIGIN AT MEMORY TRAP LOCATION TEMP1 EQU $ LOCATION IS ALSO USED AS A TEMP QCDCHK WORD :A4FB QCD ROM CHECKSUM VALUE (B0 REV) CKSUM RES 1,0 TRAP EQU $ JMP  FINDMN UNINSTALLED MEMORY TRAP IERROR EQU $ USED FOR INDIRECT JUMP AND ALSO ERROR1 JMP ERROR PARITY ERROR AND RANGE JMP SQ RES 1,0 JBOOT JMP BOOT * H100 WORD :100 HX8000 WORD :8000 * JFIRST EQU $ JUMP INTO POLLING SEQUENCE COPY =1,A SET UP FOR DISC STORAGE MODULE NEXT XNEXT COPY A,DEV JMP NEXT * JTEST JMP TEST INDIRECT JUMP TO TEST * * UNIT 1 DISK AUTOLOAD * DRV1 COPY =1,A COPY A,UNIT SET UNIT TO ONE  JMP STM14 GO DO IT * MAGS EQU $ FOR MAG DEVICE LOADING COPY =:40,Y SET UP Y FOR LSI-3/05 OUT A,2 TURN OFF AUTOLOAD LIGHT COPY PANEL,A CONSOLE ATTACHED JNE A,GOOO NO-AUTOLOAD ANYWAY JT SS,GOOO IF UNATTENDED ALWAYS EXECUTE IN 4,A INPUT WORD REGISTER SHIFT A,RO,1 GET EXECUTION/NO EXECUTION BIT JF OV,ERROR IF NO EXECUTION * GOOO EQU $ RBIT 6,S TURN OFF XA BIT JMP 0 * ERROR EQU $ OUT A,2 TURN OFF AUTOLOAD LIGHT HLT HALT FOR ERROR OR NO EXECUTION COPY Q,K SAVE RELOCATION BIAS JMP FIRST * * TITL MINI-DIAGNOSTIC * * MINI-DIAGNOSTIC CHECKS PROCESSOR OPERATION * AND DOES A PARITY PURGE THROUGHOUT MEMORY * TEST EQU $ COPY X,XSAVE SBIT 1,S SET OV JF OV,STOPIT ENSURE OV WAS SET  RBIT 1,S RESET OV JT OV,STOPIT ENSURE OV RESET COPY =0,A ZERO A REGISTER JNE A,STOPIT SUB =1,A IJNE A,STOPIT TEST1 EQU $ COPY A,Q XOR Q,A JEQ A,PURGE STOPIT EQU $ STOP IN TEST OUT A,2 TURN OFF AUTOLOAD LATCH HLT PURGE EQU $ READ/WRITE  TO PURGE MEMORY COPY 0(X),A COPY A,0(X) JNED X,TEST1 * TO ENABLE PARITY LOGIC, ENABLE INTERRUPTS * THEN ISSUE A UIS, NO PARITY ERRORS SHOULD * OCCUR AFTER THE PURGE SBIT 8,S ENABLE INTERRUPTS UIS RE-ENABLE PARITY CHECKING RBIT 8,S DISABLE INTERRUPTS COPY XSAVE,X COPY RETURN,Y PICK UP RETURN ADDRESS ADD X,Y ADD AUTOLOAD OFFSET  COPY Y,RETURN STORE COMPUTED RETURN ADDRESS JMP *RETURN RETURN THROUGH INDIRECT POINTER * * RETURN FOR AUTOLOAD THROUGH THIS LOCATION * RETURN WORD SETUP * XSAVE RES 1,0 RES 6,0 TITL QCD AUT TEST VERIFY * * THIS ROUTINE COMPUTES THE XUM * OF THE AUTOLOAD ROM AS IT IS * DONE IN THE QCD TEST. * REL :100  COPY HXFF00,A SET UP COUNT COPY A,TEMP2 COPY =0,X COPY 0(X),A FIRST WORD JMP AUT5 AUT4 EQU $ ADD 0(X),A ADD NEXT AUT5 EQU $ ADD =1,X  BUMP INDEX IMS TEMP2 JMP AUT4 CSK A,AUTTOT COMPARE TO QCD VALUE HLT LESS HLT GREATER HLT EQUAL TEMP2 RES 1,0 AUTTOT WORD :FFFF HXFF00 WORD :FF00 END 1PAGE 0001 MACRO (F510) NM-4 AUTOLOAD TYPE 6 #84-93016-15B0 1984/05/11 14:45:51 START SI = DK20.TYPE6AUTO.ASM SO = DK20.TYPE6AUTO.OBJ LO = DK20.TYPE6AUTO.LST 0003 * COPYRIGHT 1978,1976 COMPUTER AUTOMATION INC.  0004 * 0005 * USER DOCUMENTATION 00-93016-00B0 0006 * SOURCE FILE 84-93016-25B0 0007 * OBJECT FILE 84-93016-35B0 0008 * WORD I/O BINARY 92-21000-45B0  0009 * MAINTENANCE DOC 92-21000-51C0 0010 * 0011 ************************************************************ 0012 * REVISION HISTORY 0013 ************************************************************ 0014 * 0015 * REVISION B0 - 10/MAY/84 A.BROUGHTON 0016 * 0017 * TYPE 6 AUTOLOAD IS A MODIFICATION OF TYPE 2 0018 * 0019 * THE CHANGES ARE: 0020 * 0021 * REMOVED MAG TAPE PICO AUTOLOAD (CHANNEL 1) 0022 * REMOVED MINI-FLOPPY AUTOLOAD (CHANNEL 6) 0023 * ADDED UNIT 1 AUTOLOAD CAPABILITY 0024 * ADDED THREE WORDS TO DISK CIOB LENGTH FOR WTC 0025 *  0026 * EXCHANGE INSTRUCTIONS IN LOCATIONS 0 AND 1 TO 0027 * SAVE DATA REGISTER IF SENSE SWITCH IS ON   0028 * 1PAGE 0002 MACRO (F510) NM-4 AUTOLOAD TYPE 6 #84-93016-15B0 1984/05/11 14:45:52 START 0000 0001 0030 REL 0 0000 0000 0031 RES 256,0 0000 0001 0032 REL 0 0033 * 0034 * 00000000 0035 START EQU $ 0000 0104 0036  IN 4,A GET CONSOLE WORD REGISTER CONTENTS 0001 167C 003E 0037 JT SS,MEMSRC IF UNATTENED 0002 137B 003E 0038 JGE A,MEMSRC CHECK FOR TEST 0003 9E9A 001E 0039 JMP JERROR IF TEST-HALT 1PAGE 0003 MACRO (F510) NM-4 AUTOLOAD TYPE 6 #84-93016-15B0 1984/05/11 14:45:52 FLOPPY LOADER  0041 * 0042 * FLOPPY LOADER 0043 * 00000011 0044 FLPYAD EQU :11 FLOPPY DEVICE ADDRESS 00000004 0045 FLOPPY EQU $ 0004 068C 0046 SST FLPYAD*8+4 CHECK FOR CONTROLLER PRESENT 0005 9E93 0019 0047 JMP EXIT IF NOT PRESENT 0006 0907 0048  COPY =7,A READ ALL OPCODE 0007 86B9 0041 0049 COPY A,OPCODE TO IOB 0008 86BB 0044 0050 COPY A,SEEK SEEK COUNT 00000009 0051 FLOP1 EQU $ 0009 0901 0052 COPY =1,A SET UP TO READ SECTOR 1 000A 86BA 0045 0053 COPY A,SECTOR PUT IT IN IOB 000B 82B2 003E 0054 COPY BASE,A GET CODES BASE ADDRESS 000C 0B41 0055 ADD =IOB-START,A COMPUTE NEW IOB ADDRESS 000D 0688 0056 SST FLPYAD*8+0 TEST FOR CONTROLLER IDLE 000E 9E7E 000D 0057  JMP $-1 WAIT FOR CONTROLLER IDLE 000F 0288 0058 OUT A,FLPYAD*8+0 ISSUE I/O 0010 0688 0059 SST FLPYAD*8+0 TEST FOR COMPLETION 0011 9E7E 0010 0060 JMP $-1 WAIT FOR DONE 0012 08B0 0061 COPY =-80,A INSURE CYLINDER 0 0013 92B0 0044 0062 EXCH A,SEEK GET SEEK COUNT 0014 1334 0009 0063 JGE A,FLOP1 IF FIRST SEEK 0015 82B4 004A 0064  COPY FLPSTT,A GET STATUS 0016 0E09 0065 SHIFT A,RO,1 SYSTEM READY BIT TO -OV- 0017 3641 0019 0066 JT OV,EXIT IF NOT READY 0018 9E83 001C 0067 JMP FLOP2 0019 0901 0068 EXIT COPY =1,A SET UP FOR HARD DISK NEXT 001A 86A4 003F 0069 COPY A,DEV 001B 9E8F 002B 0070 JMP NEXT 0000001C 0071 FLOP2 EQU $ 001C 187F 0072 AND =:7F,A CLEAR TO 7 BITS 001D 115E 003C 0073 JEQ A,BOOT IF NO ERRORS 0000001E 0074 JERROR EQU $  001E 9EEC 008B 0075 JMP ERROR1 IF ERROR 1PAGE 0004 MACRO (F510) NM-4 AUTOLOAD TYPE 6 #84-93016-15B0  1984/05/11 14:45:53 DEVICE SELECTION DECODE 0077 * 0078 * DEVICE SELECTION DECODE 0079 * 0000001F 0080 INIT EQU $ 001F A69E 003E 0081 COPY X,BASE   SAVE THE BASE ADDRESS OF AUTOLOAD NOW 0020 9EF2 0093 0082 JMP JTEST DO MINI-DIAGNOSTIC 00000021 0083 SETUP EQU $ THEN RETURN HERE 0021 82EC 008E 0084 COPY H100,A SET UP MAGNETIC DEVICE WORD COUNT 0022 86A3 0046 0085 COPY A,WORDS STUFF IT IN THE IOB 00000023 0086 FIRST EQU $ 0023 0900 0087 COPY =0,A INITIALIZE IOB VALUES 0024 86A2 0047 0088 COPY A,BUFFER BUFFER ADDRESS IS ALWAYS 0 0025 86A2 0048 0089 COPY A,INTER NO INTERRUPTS 0026 86A3 004A 0090 COPY A,FLPSTT CLEAR FLOPPY STATUS 0027 869B 0043 0091 COPY A,CYLIN CYLINDER 0 0028 8699 0042 0092 COPY A,UNIT UNIT 0 0029 0902 0093 COPY =2,A SET FLOPPY AS FIRST DEVICE 002A 8694 003F 0094 COPY A,DEV SET UP FOR UNATTENDED OPERATION 0000002B  0095 NEXT EQU $ 002B 4104 0096 IN 4,Q GET CONSOLE WORD REGISTER 002C 4E09 0097 SHIFT Q,RO,1 RIGHT JSTIFY DEVICE SELECTION CODE 002D 8292 0040 0098 COPY PANEL,A  GET PANEL FLAG 002E 11C1 0030 0099 JNE A,NOPANL IF NO PANEL SKIP SENSE SWITCH TEST 002F 16C2 0032 0100 JF SS,SAME IF ATTENDED OPERATION 00000030 0101 NOPANL EQU $ 0030 DE8E 003F 0102  IMS DEV BUMP TO NEXT DEVICE 0031 C28D 003F 0103 COPY DEV,Q LOAD DEVICE INDEX 1PAGE 0005 MACRO (F510) NM-4 AUTOLOAD TYPE 6 #84-93016-15B0 1984/05/11 14:45:55 DEVICE SELECTION DECODE 00000032  0105 SAME EQU $ 0032 430A 0106 XNX Q INDEX THE JUMP INSTRUCTION 0033 9E80 0034 0107 JMP $+1 AND EXECUTE IT 0034 9E76 002B 0108 JMP NEXT . 0=PTP REL, NOT SUPPORTED 0035 9E75 002B 0109 JMP NEXT . 1=PTP ABS, NOT SUPPORTED 0036 9EA1 0058 0110 JMP  STM14 . 2=STORAGE MODULE, POLLED 2ND 0037 9E4C 0004 0111 JMP FLOPPY . 3=FLOPPY, POLLED 1ST 0038 9E72 002B 0112 JMP NEXT . 4=MTIC, NOT POLLED 0039 9E9C 0056 0113 JMP STMU14  . 5=DISC UPPER PLATTER, NOT POLLED 003A 9ED9 0094 0114 JMP DRV1 . 6 = HARD DISK UNIT 1 NOT POLLED 003B 9E6F 002B 0115 JMP NEXT . 7= NOT POLLED 0116 * 0000003C 0117 BOOT EQU $ 003C 2900 0118 COPY =0,X SET EXECUTION ADDRESS TO ZERO 003D 9ED9 0097 0119  JMP MAGS GO CHECK EXECUTION BIT 0120 * 1PAGE 0006 MACRO (F510) NM-4 AUTOLOAD TYPE 6 #84-93016-15B0 1984/05/11 14:45:55 FLOPPY/DISC IOB 0122 * 0123 * THE FOLLOWING LOCATIONS ARE USED AS TEMP CELLS 0124 * 003E 0000 0125 BASE RES 1,0 AUTOLOAD RELOCATION ADDRESS 003F 0000 0126 DEV RES 1,0 DEVICE TO CHECK IF READY 0040 0000 0127 PANEL R ES 1,0 PANEL FLAG = 0 IF CONSOLE PRESENT 0128 * 0129 * THE FOLLOWING LOCATION ARE USED AS THE IOB 0130 * FOR THE FLOPPY AND DISCS 0131 * 00000041 0132 IOB EQU $ 0041 0001 0133 ORG IOB 0041 0000 0134 OPCODE RES 1,0 0042 0000  0135 UNIT RES 1,0 0043 0000 0136 CYLIN RES 1,0 00000044 0137 SEEK EQU $ 0044 0000 0138 HEAD RES 1,0 0045 0000 0139 SECTOR RES 1,0 0046 0000 0140 WORDS RES 1,0 0047 0000 0141 BUFFER RES 1,0 0048 0000 0142 INTER RES 1,0 00000049 0143 FLPWCT  EQU $ 0049 0000 0144 NXTIOB RES 1,0 0000004A 0145 FLPSTT EQU $ 004A 0000 0146 STMWCT RES 1,0 004B 0000 0147 STMCST RES 1,0 004C 0000 0148 STMDST RES 1,0 004D 0000  0149 WTCST1 RES 1,0 ADDED FOR WINCHESTER TAPE CONTROLLER 004E 0000 0150 WTCST2 RES 1,0 004F 0000 0151 WTCST3 RES 1,0 1PAGE 0007 MACRO (F510) NM-4 AUTOLOAD TYPE 6 #84-93016-15B0 1984/05/11 14:45:56  MEMORY SEARCH TO RELOCATE AUTOLOAD 0153 **************************************************  0154 * NOTE: THIS SECTION IS OVERLAYED WITH * 0155 * THE DISK I/O BLOCK. SEE ABOVE * 0156 * * 0157 ************************************************** 003E 0001 0158 ORG IOB-3 0159 * FIND END OF MEMORY 0000003E 0160 MEMSRC EQU $ 003E 0E65 0161 SBIT 6,S TURN ON XA BIT 003F 7040  0162 COPY Q,K SAVE RELOCATION BIAS 0040 2900 0163 COPY =0,X START FROM TOP OF MEMORY AND WORK DOWN 0041 A67E 0040 0164 COPY X,PANEL CLEAR PANEL FLAG 0042 69FF 0165  COPY =:FF,Y Y USED FOR CONSOLE CHECK AND TRANSFER COUNTER 0043 6404 0166 SELP Y,4  PUT Y INTO WORD REG 0044 4104 0167 IN 4,Q GET IT BACK 0045 4DFF 0168 CSK Q,=:FF CHECK IF CONSOLE PRESENT 0046 0000 0169 NOP 0047 E678 0040 0170  COPY Y,PANEL NOT PRESENT SO SET PANEL FLAG NON-ZERO 0048 0404 0171 SELP A,4 RESTORE WORD REG IN CASE SS=FALSE 00000049 0172 FINDMN EQU $ 0049 AEC4 008E 0173 SUB H100,X  DECREMENT MEMORY POINTER 004A 08FF 0174 COPY =-1,A SET TO ALL ONES 004B 9080 0000 0175  EXCH A,0(X) ACCESS MEMORY THROUGH POINTER 004C 9080 0000 0176 EXCH A,0(X) ACCESS MEMORY THROUGH POINTER 004D 14BB 0049 0177 IJNE A,FINDMN BUMP RESULTS OF MEMORY ACCESS, IF NOT RAM, AGAIN 004E 9080 0000 0178 EXCH A,0(X) NOW TRY TO GET BACK ZEROS 004F 9080 0000 0179 EXCH A,0(X)   0050 11B8 0049 0180 JNE A,FINDMN IF FAILURE MUST BE ROM 0051 86B8 008A 0181 COPY A,TRAP  NOP TRAP IN CASE OF PARITY ERROR 0182 * TRAP WILL FALL THROUGH TO PARITY ERROR HALT 1PAGE 0008 MACRO (F510) NM-4 AUTOLOAD TYPE 6 #84-93016-15B0 1984/05/11 14:45:58 MEMORY SEARCH TO RELOCATE AUTOLOAD 0184 * 0185 * RELOCATE AUTOLOAD TO HIGHEST WRITABLE MEMORY 0186 * 00000052 0187 GOTMN EQU $ 00000052 0188 MOVNXT EQU $ 0052 8040 0000 0189 COPY 0(Y),A PICK UP WORD 0053 84C0 0000 0190 COPY A,0(X,Y) MOVE IT TO HIGH MEMORY 0054 75BD 0052 0191 JNED  Y,MOVNXT IF DONE MOVING 0055 9C9F 001F 0192 JMP INIT-START(X) GO TO RELOCATED AUTOLOAD CODE  0193 * 0194 * 1PAGE 0009 MACRO (F510) NM-4 AUTOLOAD TYPE 6 #84-93016-15B0 1984/05/11 14:45:58 DISC STORAGE MODULE LOADER 0196 * 00000014 0197 SMDA EQU :14 DISC STORAGE MODULE DEVICE ADDRESS 00000015 0198 SUDA EQU :15 0199 * 0200 * :14= MEDIUM CAPACITY DISC 0201 * :15= HIGH CAPACITY DISC 0202 * 00000056 0203  STMU14 EQU $ 0056 6902 0204 COPY =2,Y SET HEAD FOR UPPER PLATTER 0057 9E81 0059 0205  JMP STMX JUMP AROUND LOWER PLATTER HEAD SET 00000058 0206 STM14 EQU $ DISC LOWER PLATTER 0058 6900 0207 COPY =0,Y SET HEAD FOR LOWER PLATTER 0059 E66A 0044 0208 STMX  COPY Y,HEAD 005A 4901 0209 COPY =1,Q 005B 2901 0210 COPY =1,X SET Q AND X FOR LOOPING 0000005C 0211 STM0 EQU $ 005C 06A4 0212 SST SMDA*8+4 SENSE IF CONTROLLER PRESENT 005D 9E81 005F 0213 JMP TRYUPR IF NOT TRY AT :15 005E 9E83 0062 0214 JMP  STM1 PRESENT AT :14 005F 06AC 0215 TRYUPR SST SUDA*8+4 SENSE IF PRESENT AT :15 0060 9E42 0023 0216 JMP FIRST NOT PRESENT SO CHECK FIRST DEVICE 0061 6901 0217 COPY =1,Y  SET Y FOR :15 PATH 1PAGE 0010 MACRO (F510) NM-4 AUTOLOAD TYPE 6 #84-93016-15B0 1984/05/11 14:45:59 DISC STORAGE MODULE LOADER 00000062 0219 STM1 EQU $ 0062 0904 0220 COPY =4,A SET UP OPCODE  0063 865D 0041 0221 COPY A,OPCODE 0064 0900 0222 COPY =0,A INITIALIZE IOB VALUES 0065 865F 0045 0223 COPY A,SECTOR SECTOR ADDRESS OF 0 0066 8662 0049 0224 COPY A,NXTIOB  NO IOB CHAINING 0067 8663 004B 0225 COPY A,STMCST CLEAR CONTROLLER STATUS 0068 8255 003E 0226  COPY BASE,A COMPUTE NEW IOB ADDRESS 0069 0B41 0227 ADD =IOB-START,A 006A 6C01 0228 CLSN Y,=1 FIND WHICH PATH TO TAKE 006B 9E8D 0079 0229 JMP PATH15 Y WAS SET TO  ONE SO TAKE :15 PATH 006C 8662 004F 0230 COPY A,WTCST3 TEMP STORE 006D 82A1 008F 0231 COPY  HX8000,A NEG 64K 006E 8699 0088 0232 COPY A,TEMP1 STORE 006F 825F 004F 0233 COPY  WTCST3,A REPLACE A REG 0070 04A4 0234 PATH14 SELP A,SMDA*8+4 INITIALIZE THE CONTROLLER 0071 06A0  0235 SST SMDA*8+0 TEST FOR IDLE 0072 9E7E 0071 0236 JMP $-1 WAIT FOR IDLE 0073 02A0 0237 OUT A,SMDA*8+0 ISSUE I/O 0074 06A0 0238 SST SMDA*8+0 TEST FOR COMPLETION 0075 9E81 0077 0239 JMP $+2 IF NOT COMPLETE 0076 9E88 007F 0240 JMP STAT  IF COMPLETE 0077 DE90 0088 0241 IMS TEMP1 WAIT FOR 120 MS THEN TRY :15 0078 9E7B 0074 0242 JMP $-4 WAIT FOR COMPLETION 0079 04AC 0243 PATH15 SELP A,SUDA*8+4 INITIALIZE THE CONTROLLER 007A 06A8 0244 SST SUDA*8+0 TEST FOR IDLE 007B 9E7E 007A 0245 JMP $-1  WAIT FOR IDLE 007C 02A8 0246 OUT A,SUDA*8+0 ISSUE I/O 007D 06A8 0247 SST SUDA*8+0 TEST FOR COMPLETION 007E 9E7E 007D 0248 JMP $-1 WAIT FOR COMPLETION 007F 824B 004B 0249 STAT COPY STMCST,A GET THE STATUS 0080 134C 008D 0250 JGE A,JBOOT IF NO ERROR GO EXECUTE BOOT 0081 0E09 0251 SHIFT A,RO,1 DISC READY BIT TO -OV- 0082 36DE 00A1 0252 JF  OV,ERROR IF ERROR AND READY 0083 559E 0062 0253 JNED Q,STM1 IF ONLY TRIED ONCE 0084 4B01 0254 ADD =1,Q MAKE SURE LAST INSTRUCTION IS PASSED AGAIN 0085 3599 005F 0255 JNED X,TRYUPR TRY :15 TWICE 1PAGE 0011 MACRO (F510) NM-4 AUTOLOAD TYPE 6 #84-93016-15B0 1984/05/11 14:46:00 DISC STORAGE MODULE LOADER 0086 9E1C 0023 0256 JMP FIRST IF STILL NOT READY 1PAGE 0012 MACRO (F510) NM-4 AUTOLOAD TYPE 6 #84-93016-15B0 1984/05/11 14:46:01 ERROR/EXECUTION HALT 0258 * 0259 * 1PAGE 0013 MACRO (F510) NM-4 AUTOLOAD TYPE 6 #84-93016-15B0 1984/05/11 14:46:01 UNINSTALLED MEMORY TRAP SET-UP 0088 0001 0261 REL :88 ORIGIN AT MEMORY TRAP LOCATION 00000088 0262 TEMP1 EQU $  LOCATION IS ALSO USED AS A TEMP 0088 0000 0263 QCDCHK WORD :0000 QCD ROM CHECKSUM VALUE (B0 REV)  0089 0000 0264 CKSUM RES 1,0 0000008A 0265 TRAP EQU $ 008A 9E3E 0049 0266 JMP  FINDMN UNINSTALLED MEMORY TRAP 0000008B 0267 IERROR EQU $ USED FOR INDIRECT JUMP AND ALSO 008B 9E95 00A1 0268 ERROR1 JMP ERROR PARITY ERROR AND RANGE JMP 008C 0000 0269 SQ RES 1,0 008D 9E2E 003C 0270 JBOOT JMP BOOT 0271 * 008E 0100 0272 H100 WORD :100 008F 8000 0273 HX8000 WORD :8000 0274 * 00000090 0275 JFIRST EQU $ JUM P INTO POLLING SEQUENCE 0090 0901 0276 COPY =1,A SET UP FOR DISC STORAGE MODULE NEXT 0091 862D 003F 0277 XNEXT COPY A,DEV 0092 9E18 002B 0278 JMP NEXT 0279 * 0093 9E91 00A5 0280 JTEST JMP TEST INDIRECT JUMP TO TEST 0281 * 0282 * UNIT 1 DISK AUTOLOAD 0283 * 0094 0901 0284 DRV1 COPY =1,A 0095 862C 0042 0285 COPY A,UNIT  SET UNIT TO ONE 0096 9E41 0058 0286 JMP STM14 GO DO IT 0287 * 00000097 0288 MAGS EQU $ FOR MAG DEVICE LOADING 0097 6940 0289 COPY =:40,Y SET UP Y FOR LSI-3/05 0098 0202 0290 OUT A,2 TURN OFF AUTOLOAD LIGHT 0099 8226 0040 0291 COPY PANEL,A CONSOLE ATTACHED 009A 11C4 009F 0292 JNE A,GOOO NO-AUTOLOAD ANYWAY 009B 1643 009F 0293 JT SS,GOOO IF UNATTENDED ALWAYS EXECUTE 009C 0104 0294 IN 4,A INPUT WORD REGISTER 009D 0E09 0295 SHIFT A,RO,1 GET EXECUTION/NO EXECUTION BIT 009E 36C2 00A1 0296 JF OV,ERROR IF NO EXECUTION 0297 * 1PAGE 0014 MACRO (F510) NM-4 AUTOLOAD TYPE 6 #84-93016-15B0 1984/05/11 14:46:02 UNINSTALLED MEMORY TRAP SET-UP 0000009F 0298 GOOO EQU $ 009F 0E67  0299 RBIT 6,S TURN OFF XA BIT 00A0 9C00 0000 0300 JMP 0 0301 * 000000A1 0302 ERROR EQU $ 00A1 0202 0303 OUT A,2 TURN OFF AUTOLOAD LIGHT 00A2 0E0D 0304 HLT HALT FOR ERROR OR NO EXECUTION 00A3 7040 0305 COPY Q,K SAVE RELOCATION BIAS 00A4 9FEB 0110 0306 JMP FIRST 0307 * 0308 * 1PAGE 0015 MACRO (F510) NM-4 AUTOLOAD TYPE 6 #84-93016-15B0 1984/05/11 14:46:02 MINI-DIAGNOSTIC  0310 * 0311 * MINI-DIAGNOSTIC CHECKS PROCESSOR OPERATION 0312 * AND DOES A PARITY PURGE THROUGHOUT MEMORY 0313 * 000000A5 0314 TEST EQU $ 00A5 A699 00BF 0315  COPY X,XSAVE 00A6 0E15 0316 SBIT 1,S SET OV 00A7 36C9 00B1 0317 JF OV,STOPIT ENSURE OV WAS SET 00A8 0E17 0318 RBIT 1,S RESET OV 00A9 3647 00B1 0319  JT OV,STOPIT ENSURE OV RESET 00AA 0900 0320 COPY =0,A ZERO A REGISTER 00AB 11C5 00B1 0321 JNE A,STOPIT 00AC 0AFF 0322 SUB =1,A 00AD 14C3 00B1 0323 IJNE A,STOPIT 000000AE 0324 TEST1 EQU $ 00AE 4000 0325 COPY A,Q 00AF 0045 0326 XOR Q,A 00B0 1142 00B3 0327 JEQ A,PURGE 000000B1 0328 STOPIT EQU $ STOP IN TEST 00B1 0202 0329 OUT A,2 TURN OFF AUTOLOAD LATCH 00B2 0E0D 0330 HLT   000000B3 0331 PURGE EQU $ READ/WRITE TO PURGE MEMORY 00B3 8080 0000 0332  COPY 0(X),A 00B4 8480 0000 0333 COPY A,0(X) 00B5 35B8 00AE 0334 JNED X,TEST1  0335 * TO ENABLE PARITY LOGIC, ENABLE INTERRUPTS 0336 * THEN ISSUE A UIS, NO PARITY ERRORS SHOULD 0337 * OCCUR AFTER THE PURGE 00B6 0E85 0338 SBIT 8,S ENABLE INTERRUPTS 00B7 0309 0339 UIS RE-ENABLE PARITY CHECKING 00B8 0E87 0340 RBIT 8,S DISABLE INTERRUPTS 00B9 A285 00BF 0341 COPY XSAVE,X 00BA E283 00BE 0342 COPY RETURN,Y PICK UP RETURN ADDRESS 00BB 6022 0343 ADD X,Y ADD AUTOLOAD OFFSET 00BC E681 00BE 0344 COPY Y,RETURN STORE COMPUTED RETURN ADDRESS 00BD 9F80 00BE 0345 JMP *RETURN RETURN THROUGH INDIRECT POINTER 0346 * 1PAGE 0016 MACRO (F510) NM-4 AUTOLOAD TYPE 6 #84-93016-15B0 1984/05/11 14:46:04 MINI-DIAGNOSTIC 0347 * RETURN FOR AUTOLOAD THROUGH THIS LOCATION 0348 * 00BE 0021 0349 RETURN WORD SETUP 0350  * 00BF 0000 0351 XSAVE RES 1,0 00C0 0000 0352 RES 6,0 1PAGE 0017 MACRO (F510) NM-4 AUTOLOAD TYPE 6 #84-93016-15B0 1984/05/11 14:46:04 QCD AUT TEST VERIFY 0354 * 0355  * THIS ROUTINE COMPUTES THE XUM 0356 * OF THE AUTOLOAD ROM AS IT IS 0357 *  DONE IN THE QCD TEST. 0358 * 0100 0001 0359 REL :100 0100 828E 010F 0360  COPY HXFF00,A SET UP COUNT 0101 868B 010D 0361 COPY A,TEMP2 0102 2900 0362 COPY  =0,X 0103 8080 0000 0363 COPY 0(X),A FIRST WORD 0104 9E81 0106 0364 JMP AUT5 00000105 0365 AUT4 EQU $ 0105 8880 0000 0366 ADD 0(X),A ADD NEXT 00000106 0367 AUT5 EQU $ 0106 2B01 0368 ADD =1,X BUMP INDEX 0107 DE85 010D 0369 IMS TEMP2 0108 9E7C 0105 0370 JMP AUT4 0109 BA84 010E 0371 CSK A,AUTTOT COMPARE TO QCD VALUE  010A 0E0D 0372 HLT LESS 010B 0E0D 0373 HLT GREATER 010C 0E0D 0374 HLT EQUAL 010D 0000 0375 TEMP2 RES 1,0 010E FFFF 0376  AUTTOT WORD :FFFF 010F FF00 0377 HXFF00 WORD :FF00 0110 0023 FIRST 0111  0378 END 0000 ERRORS (0000/0000) 0000 WARNINGS (0000/0000) ! e840509135209840509135209840514085150e@840509135209840509135209920701112126" e840509135209840509135209840509135209e840509135209840509135209840509135209840509135209840509135209840509135209e840511153859840511153258840511154025e ?840510130258800815113204840511153943e&%840510130307840510130216840511153946 e(# 8d840510130310800814105529840511153958 eE840510130320840510130252840511154001 eG8D840510130323800814105735840511154011 ei840514085142840514084000840514085145 eq9206301448490092070111200850920701112121eg840510165607840510130140840511153929e840510130346840510120624840511154032$ e0_840511153906840511144606840511154051e2_840511153918840511153114840511154022% & ' ( ) * + . TYPE2AUTO OBJTYPE2AUTO ASMTYPE3AUTO OBJ TYPE3AUTO ASM TYPE4AUTO OBJ TYPE4AUTO ASMTYPE6AUTO ASMTYPE6AUTO OBJ MAINTENANCEDOCTYPE2AUTO BINTYPE6AUTO LST TITL NM-4 AUTOLOAD TYPE 6 #84-93016-15B0 TITL START * COPYRIGHT 1978,1976 COMPUTER AUTOMATION INC. * * USER DOCUMENTATION 00-93016-00B0 * SOURCE FILE 84-93016-25B0 * OBJECT FILE 84-93016-35B0 * WORD I/O BINARY 92-21000-45B0 * MAINTENANCE DOC 92-21000-51C0 * ************************************************************ * REVISION HISTORY ************************************************************ * * REVISION B0 - 10/MAY/84 A.BROUGHTON * * TYPE 6 AUTOLOAD,  IS A MODIFICATION OF TYPE 2 * * THE CHANGES ARE: * * REMOVED MAG TAPE PICO AUTOLOAD (CHANNEL 1) * REMOVED MINI-FLOPPY AUTOLOAD (CHANNEL 6) * ADDED UNIT 1 AUTOLOAD CAPABILITY * ADDED THREE WORDS TO DISK CIOB LENGTH FOR WTC * * EXCHANGE INSTRUCTIONS IN LOCATIONS 0 AND 1 TO * SAVE DATA REGISTER IF SENSE SWITCH IS ON * TITL START REL 0 RES 256,0 REL  0 * * START EQU $ IN 4,A GET CONSOLE WORD REGISTER CONTENTS JT SS,MEMSRC IF UNATTENED  JGE A,MEMSRC CHECK FOR TEST JMP JERROR IF TEST-HALT TITL FLOPPY LOADER * * FLOPPY LOADER * FLPYAD EQU :11 FLOPPY DEVICE ADDRESS FLOPPY EQU $ SST FLPYAD*8+4 CHECK FOR CONTROLLER PRESENT JMP  EXIT IF NOT PRESENT COPY =7,A READ ALL OPCODE COPY A,OPCODE TO IOB  COPY A,SEEK SEEK COUNT FLOP1 EQU $ COPY =1,A SET UP TO READ SECTOR 1 COPY A,SECTOR PUT IT IN IOB COPY BASE,A GET CODES BASE ADDRESS ADD =IOB-START,A COMPUTE NEW IOB ADDRESS SST FLPYAD*8+0 TEST FOR CONTROLLER IDLE JMP $-1 WAIT FOR CONTROLLER IDLE OUT  A,FLPYAD*8+0 ISSUE I/O SST FLPYAD*8+0 TEST FOR COMPLETION JMP $-1 WAIT FOR DONE COPY =-80,A INSURE CYLINDER 0 EXCH A,SEEK GET SEEK COUNT JGE A,FLOP1 IF FIRST SEEK COPY FLPSTT,A GET STATUS SHIFT A,RO,1 SYSTEM READY BIT TO -OV- JT OV,EXIT  IF NOT READY JMP FLOP2 EXIT COPY =1,A SET UP FOR HARD DISK NEXT COPY A,DEV JMP NEXT FLOP2 EQU $ AND =:7F,A CLEAR TO 7 BITS JEQ A,BOOT IF NO ERRORS JERROR EQU $  JMP ERROR1 IF ERROR TITL DEVICE SELECTION DECODE * * DEVICE SELECTION DECODE * INIT EQU $  COPY X,BASE SAVE THE BASE ADDRESS OF AUTOLOAD NOW JMP JTEST DO MINI-DIAGNOSTIC SETUP EQU  $ THEN RETURN HERE COPY H100,A SET UP MAGNETIC DEVICE WORD COUNT COPY A,WORDS STUFF IT IN THE IOB FIRST EQU $ COPY =0,A INITIALIZE IOB VALUES COPY A,BUFFER BUFFER ADDRESS IS ALWAYS 0 COPY A,INTER NO INTERRUPTS COPY A,FLPSTT CLEAR FLOPPY STATUS COPY A,CYLIN  CYLINDER 0 COPY A,UNIT UNIT 0 COPY =2,A SET FLOPPY AS FIRST DEVICE COPY A,DEV SET UP FOR UNATTENDED OPERATION NEXT EQU $ IN 4,Q GET CONSOLE WORD REGISTER  SHIFT Q,RO,1 RIGHT JSTIFY DEVICE SELECTION CODE COPY PANEL,A GET PANEL FLAG JNE A,NOPANL IF NO PANEL SKIP SENSE SWITCH TEST JF SS,SAME IF ATTENDED OPERATION NOPANL EQU $ IMS DEV  BUMP TO NEXT DEVICE COPY DEV,Q LOAD DEVICE INDEX TITL SAME EQU $ XNX Q  INDEX THE JUMP INSTRUCTION JMP $+1 AND EXECUTE IT JMP NEXT . 0=PTP REL, N- OT SUPPORTED JMP NEXT . 1=PTP ABS, NOT SUPPORTED JMP STM14 . 2=STORAGE MODULE, POLLED 2ND JMP FLOPPY . 3=FLOPPY, POLLED 1ST JMP NEXT . 4=MTIC, NOT POLLED JMP STMU14 . 5=DISC UPPER PLATTER, NOT POLLED JMP DRV1 . 6 = HARD DISK UNIT 1 NOT POLLED JMP NEXT . 7= NOT POLLED * BOOT EQU $  COPY =0,X SET EXECUTION ADDRESS TO ZERO JMP MAGS GO CHECK EXECUTION BIT * TITL FLOPPY/DISC IOB * * THE FOLLOWING LOCATIONS ARE USED AS TEMP CELLS * BASE RES 1,0 AUTOLOAD RELOCATION ADDRESS DEV RES 1,0 DEVICE TO CHECK IF READY PANEL RES 1,0 PANEL FLAG = 0 IF CONSOLE PRESENT * * THE FOLLOWING LOCATION ARE USED AS THE IOB * FOR THE FLOPPY AND DISCS * IOB EQU $ ORG IOB OPCODE RES 1,0 UNIT RES 1,0 CYLIN RES 1,0 SEEK EQU $ HEAD RES 1,0 SECTOR RES 1,0 WORDS RES 1,0 BUFFER RES 1,0 INTER RES 1,0 FLPWCT EQU $ NXTIOB RES 1,0 FLPSTT EQU $ STMWCT RES 1,0 STMCST RES 1,0 STMDST RES 1,0 WTCST1 RES 1,0 ADDED FOR WINCHESTER TAPE CONTROLLER WTCST2 RES 1,0 WTCST3 RES 1,0 TITL MEMORY SEARCH TO RELOCATE AUTOLOAD ************************************************** * NOTE: THIS SECTION IS OVERLAYED WITH * * THE DISK I/O BLOCK. SEE ABOVE * * * ************************************************** ORG IOB-3 *  FIND END OF MEMORY MEMSRC EQU $ SBIT 6,S TURN ON XA BIT COPY Q,K SAVE RELOCATION BIAS  COPY =0,X START FROM TOP OF MEMORY AND WORK DOWN COPY X,PANEL CLEAR PANEL FLAG COPY =:FF,Y Y USED FOR CONSOLE CHECK AND TRANSFER COUNTER SELP Y,4 PUT Y INTO WORD REG IN 4,Q GET IT BACK CSK Q,=:FF CHECK IF CONSOLE PRESENT NOP COPY Y,PANEL NOT PRESENT SO SET PANEL FLAG NON-ZERO  SELP A,4 RESTORE WORD REG IN CASE SS=FALSE FINDMN EQU $ SUB H100,X DECREMENT MEMORY POINTER COPY =-1,A SET TO ALL ONES EXCH A,0(X) ACCESS MEMORY THROUGH POINTER EXCH A,0(X) ACCESS MEMORY THROUGH POINTER IJNE A,FINDMN BUMP RESULTS OF MEMORY ACCESS, IF NOT RAM, AGAIN  EXCH A,0(X) NOW TRY TO GET BACK ZEROS EXCH A,0(X) JNE A,FINDMN IF FAILURE MUST BE ROM  COPY A,TRAP NOP TRAP IN CASE OF PARITY ERROR * TRAP WILL FALL THROUGH TO PARITY ERROR HALT TITL * * RELOCATE AUTOLOAD TO HIGHEST WRITABLE MEMORY * GOTMN EQU $ MOVNXT EQU $ COPY 0(Y),A PICK UP WORD COPY A,0(X,Y) MOVE IT TO HIGH MEMORY JNED Y,MOVNXT IF DONE MOVING JMP INIT-START(X)  GO TO RELOCATED AUTOLOAD CODE * * TITL DISC STORAGE MODULE LOADER * SMDA EQU :14 DISC STORAGE MODULE DEVICE ADDRESS SUDA EQU :15 * * :14= MEDIUM CAPACITY DISC * :15= HIGH CAPACITY DISC * STMU14 EQU $ COPY =2,Y SET HEAD FOR UPPER PLATTER JMP STMX JUMP AROUND LOWER PLATTER HEAD SET STM14 EQU $ .  DISC LOWER PLATTER COPY =0,Y SET HEAD FOR LOWER PLATTER STMX COPY Y,HEAD COPY =1,Q  COPY =1,X SET Q AND X FOR LOOPING STM0 EQU $ SST SMDA*8+4 SENSE IF CONTROLLER PRESENT JMP  TRYUPR IF NOT TRY AT :15 JMP STM1 PRESENT AT :14 TRYUPR SST SUDA*8+4 SENSE IF PRESENT AT :15 JMP FIRST NOT PRESENT SO CHECK FIRST DEVICE COPY =1,Y SET Y FOR :15 PATH TITL STM1 EQU $ COPY =4,A SET UP OPCODE COPY A,OPCODE COPY =0,A INITIALIZE IOB VALUES COPY A,SECTOR SECTOR ADDRESS OF 0 COPY A,NXTIOB NO IOB CHAINING COPY A,STMCST CLEAR CONTROLLER STATUS COPY BASE,A COMPUTE NEW IOB ADDRESS ADD =IOB-START,A  CLSN Y,=1 FIND WHICH PATH TO TAKE JMP PATH15 Y WAS SET TO ONE SO TAKE :15 PATH COPY A,WTCST3  TEMP STORE COPY HX8000,A NEG 64K COPY A,TEMP1 STORE COPY WTCST3,A REPLACE A REG PATH14 SELP A,SMDA*8+4 INITIALIZE THE CONTROLLER SST SMDA*8+0 TEST FOR IDLE JMP $-1 WAIT FOR IDLE OUT A,SMDA*8+0 ISSUE I/O SST SMDA*8+0 TEST FOR COMPLETION JMP $+2 IF NOT COMPLETE JMP STAT IF COMPLETE IMS TEMP1 WAIT FOR 120 MS THEN TRY :15 JMP  $-4 WAIT FOR COMPLETION PATH15 SELP A,SUDA*8+4 INITIALIZE THE CONTROLLER SST SUDA*8+0 TEST FOR IDLE JMP $-1 WAIT FOR IDLE OUT A,SUDA*8+0 ISSUE I/O SST SUDA*8+0 TEST FOR COMPLETION JMP $-1 WAIT FOR COMPLETION STAT COPY STMCST,A GET THE STATUS JGE A,JBOOT  IF NO ERROR GO EXECUTE BOOT SHIFT A,RO,1 DISC READY BIT TO -OV- JF OV,ERROR IF ERROR AND READY JNED Q,STM1 IF ONLY TRIED ONCE ADD =1,Q MAKE SURE LAST INSTRUCTION IS PASSED AGAIN  JNED X,TRYUPR TRY :15 TWICE JMP FIRST IF STILL NOT READY TITL ERROR/EXECUTION HALT * *  TITL UNINSTALLED MEMORY TRAP SET-UP REL :88 ORIGIN AT MEMORY TRAP LOCATION TEMP1 EQU $ LOCATION IS ALSO USED AS A TEMP QCDCHK WORD :A50D QCD ROM CHECKSUM VALUE (B0 REV) CKSUM RES 1,0 TRAP EQU $ JMP  FINDMN UNINSTALLED MEMORY TRAP IERROR EQU $ USED FOR INDIRECT JUMP AND ALSO ERROR1 JMP ERROR PARITY ERROR AND RANGE JMP SQ RES 1,0 JBOOT JMP BOOT * H100 WORD :100 HX8000 WORD :8000 * JFIRST EQU $ JUMP INTO POLLING SEQUENCE COPY =1,A SET UP FOR DISC STORAGE MODULE NEXT XNEXT COPY A,DEV JMP NEXT * JTEST JMP TEST INDIRECT JUMP TO TEST * * UNIT 1 DISK AUTOLOAD * DRV1 COPY =1,A COPY A,UNIT SET UNIT TO ONE  JMP STM14 GO DO IT * MAGS EQU $ FOR MAG DEVICE LOADING COPY =:40,Y SET UP Y FOR LSI-3/05 OUT A,2 TURN OFF AUTOLOAD LIGHT COPY PANEL,A CONSOLE ATTACHED JNE A,GOOO NO-AUTOLOAD ANYWAY JT SS,GOOO IF UNATTEND/ ED ALWAYS EXECUTE IN 4,A INPUT WORD REGISTER SHIFT A,RO,1 GET EXECUTION/NO EXECUTION BIT JF OV,ERROR IF NO EXECUTION * GOOO EQU $ RBIT 6,S TURN OFF XA BIT JMP 0 * ERROR EQU $ OUT A,2 TURN OFF AUTOLOAD LIGHT HLT HALT FOR ERROR OR NO EXECUTION COPY Q,K SAVE RELOCATION BIAS JMP FIRST * * TITL MINI-DIAGNOSTIC * * MINI-DIAGNOSTIC CHECKS PROCESSOR OPERATION * AND DOES A PARITY PURGE THROUGHOUT MEMORY * TEST EQU $ COPY X,XSAVE SBIT 1,S SET OV JF OV,STOPIT ENSURE OV WAS SET  RBIT 1,S RESET OV JT OV,STOPIT ENSURE OV RESET COPY =0,A ZERO A REGISTER JNE A,STOPIT SUB =1,A IJNE A,STOPIT TEST1 EQU $ COPY A,Q XOR Q,A JEQ A,PURGE STOPIT EQU $ STOP IN TEST OUT A,2 TURN OFF AUTOLOAD LATCH HLT PURGE EQU $ READ/WRITE TO PURGE MEMORY COPY 0(X),A COPY A,0(X) JNED X,TEST1 * TO ENABLE PARITY LOGIC, ENABLE INTERRUPTS * THEN ISSUE A UIS, NO PARITY ERRORS SHOULD * OCCUR AFTER THE PURGE SBIT 8,S ENABLE INTERRUPTS UIS RE-ENABLE PARITY CHECKING RBIT 8,S DISABLE INTERRUPTS COPY XSAVE,X COPY RETURN,Y PICK UP RETURN ADDRESS ADD X,Y ADD AUTOLOAD OFFSET  COPY Y,RETURN STORE COMPUTED RETURN ADDRESS JMP *RETURN RETURN THROUGH INDIRECT POINTER * * RETURN FOR AUTOLOAD THROUGH THIS LOCATION * RETURN WORD SETUP * XSAVE RES 1,0 RES 6,0 TITL QCD AUT TEST VERIFY * * THIS ROUTINE COMPUTES THE XUM * OF THE AUTOLOAD ROM AS IT IS * DONE IN THE QCD TEST. * REL :100  COPY HXFF00,A SET UP COUNT COPY A,TEMP2 COPY =0,X COPY 0(X),A FIRST WORD JMP AUT5 AUT4 EQU $ ADD 0(X),A ADD NEXT AUT5 EQU $ ADD =1,X  BUMP INDEX IMS TEMP2 JMP AUT4 CSK A,AUTTOT COMPARE TO QCD VALUE HLT LESS HLT GREATER HLT EQUAL TEMP2 RES 1,0 AUTTOT WORD :FFFF HXFF00 WORD :FF00 END 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L OS4 MB084050913520950840511085430 840511085430/F01601 VOLNM-4 AUTOLOAD - TYPES 2,3,4 AND 6