$ CARD LIST1 EXPAND DEBUG $ CARD LIST1 EXPAND DEBUG PUNCH * ****************************************************************** * EMULATION VEHICLE * * COLD START LOADER - B1700 * * OCTOBER 1972 * ****************************************************************** * DEFINE EMV-PORT-CHANNEL _ S5A * TEMPORARY STORAGE FOR PORT DEFINE RDEND _ H61C5D5 * CONSTANT -/EN- DEFINE IO-WAIT-FLAG _ CC (0) * I/O WAIT INDICATOR DEFINE ENDING-ADDRESS _ S1A * STORAGE FOR LAST M ADDRESS DEFINE DATA- _ S3 * ADDR. AND LENGTH STORE AREA DEFINE DATA-ADDRESS _ S3A* USED BY M AND S LOADER DEFINE DATA-LENGTH _ S3B * USED BY M AND S LOADER DEFINE FROM- _ S8 DEFINE FROM-ADDRESS _ S8A DEFINE FROM-LENGTH _ S8B DEFINE TO- _ S9 DEFINE TO-ADDRESS _ S9A DEFINE TO-LENGTH _ S9B DEFINE BASE _ S10A * BASE AND/OR INDEX REG DEFINE EMV-WRITE-DESCRIPTOR _ H3520 * ADDRESS OF .... DEFINE EMV-WRITE-B-ADDRESS _ H3568 * ADDRESS OF .... DEFINE EMV-WRITE-RESULT-STATUS _ H3598 * ADDRESS OF ... DEFINE EMV-READ-DESCRIPTOR _ H35C8 * ADDRESS OF ... DEFINE EMV-READ-RESULT-STATUS_ H3640 * ADDRESS OF ... DEFINE READER-PREAMBLE _ H3750 * ADDRESS OF .... DEFINE INCOMING-PREAMBLE-FLAGS _ H36C0 * FLAG AREA DEFINE INCOMING-PREAMBLE _ H36B0 * COMMON PREAMBLE INPUT AREA DEFINE SBUF _ H5000 * START ADDR. OF M-CORE IMAGE DEFINE EMV-OUTPUT-BUFFER-PREAMBLE _ H2B500 * ADDR OUTPUT PREAMBLE DEFINE EMV-OUTPUT-BUFFER-DATA _ H2B5A0 * ADDR. OUTPUT AREA DEFINE EMV-INPUT-BUFFER-PREAMBLE _ H2F500 * ADDR. INPUT PREAMBLE DEFINE EMV-INPUT-BUFFER-DATA _ H2F5A0 * ADDR. INCOMING DATA SET CD TO 4 * SET OVERRIDE BIT MOVE 24 TO CP * SET 24 BIT BINARY MOVE 0 TO A * INITIALIZE A REGISTER SEGMENT EMV-LOADER AT 0 LOAD-MSMA START OVERLAY OVERLAY * DO IT.... NOP SET CD TO 4 * SET MEMORY OUT-OF-BOUNDS OVERRIDE MOVE 24 TO CP * SET 24 BIT BINARY MODE MOVE MAXS TO LR MOVE 0 TO BR * SET MEMORY LIMITS MOVE H20 TO T * PORT 2 CHANNEL 0 NORMAL LOCATION FOR CTL ***** ALLOWS SETTING OF EMV PORT TO OTHER THAN STANDARD 2-0 IF HALT-INTERRUPT THEN * TEST CONSOLE SWITCH FOR NON-STANDARD P/C HALT * LOAD MANUALLY PORT & CHANNEL INTO T-REG MOVE T TO EMV-PORT-CHANNEL * MEMORY CLEAR ROUTINE -- ALSO SETS CORRECT PARITY CLEAR L FA * INITIALIZE FOR CLEAR OPERATION MOVE MAXS TO Y * UPPER BOUNDARY OF CLEAR .MORE WRITE (25) BITS FROM L INC FA* SET GOOD PARITY AND CLEAR 24 BITS MOVE FA TO X * PREPARE TO CHECK FOR END OF CLEAR IF X LSS Y GO TO -MORE * CHECK IT... EMV-LOAD ** BUILD I/O DESCRIPTORS AND EMV PREAMBLE * WRITE I/O DESCRIPTOR.... LIT EMV-WRITE-DESCRIPTOR TO FA * ADDRESS OF... LIT H400000 TO X * WRITE OP CODE WRITE 24 BITS FROM X INC FA LIT H3580 TO X * RIA ADDRESS WRITE 24 BITS FROM X INC FA LIT EMV-OUTPUT-BUFFER-PREAMBLE TO X * -A- ADDRESS WRITE 24 BITS FROM X INC FA LIT H2D500 TO X * -B- ADDRESS WRITE 24 BITS FROM X INC FA CLEAR X * ZEROS... WRITE 24 BITS FROM X INC FA WRITE 24 BITS FROM X INC FA LIT H35C8 TO X * LINK ADDRESS - POINTS TO READ DESCRIPTOR WRITE 24 BITS FROM X INC FA * READ DESCRIPTOR LIT EMV-READ-DESCRIPTOR TO FA * ADDRESS OF.... LIT H020000 TO X * READ OP WITH NO TIMEOUT WRITE 24 BITS FROM X INC FA LIT H3628 TO X * READ RIA... WRITE 24 BITS FROM X INC FA LIT EMV-INPUT-BUFFER-PREAMBLE TO X * -A- ADDRESS WRITE 24 BITS FROM X INC FA LIT H33500 TO X * -B- ADDRESS WRITE 24 BITS FROM X INC FA CLEAR X WRITE 24 BITS FROM X INC FA WRITE 24 BITS FROM X INC FA * READ PREAMBLE LIT READER-PREAMBLE TO FA * ADDRESS OF... COUNT FA UP BY 20 * ADJUST TO POINT TO OP CODE LIT H100010 TO X * READ OP ON CARD READER (PSUEDO FOR LOAD) WRITE 24 BITS FROM X INC FA CLEAR X * ZEROES.... WRITE 24 BITS FROM X INC FA WRITE 24 BITS FROM X INC FA WRITE 24 BITS FROM X INC FA WRITE 24 BITS FROM X INC FA WRITE 24 BITS FROM X INC FA * SET UP CONCLUDED ........... SET CA TO 0 * CLEAR FLAG REG. GO TO EMV-READ-INITIATE * WAIT FOR BIG BROTHER TO CALL START-M-LOAD LIT SBUF TO BR * START OF M-IMAGE MOVE BR TO BASE * SET INDEX CLEAR ENDING-ADDRESS M-MEMORY-LOAD CALL B1500-INITIATE LIT EMV-INPUT-BUFFER-DATA TO FA IF CA (0) THEN * IS BYPASS FLAG ON... GO TO ?PROCESS MOVE ?//M? TO X * M-LOAD IDENTIFIER CONSTANT READ 24 BITS TO Y * GET FIRST THREE CHARACTERS IF X EQL Y THEN * TEST FOR PROPER HEADER CARD BEGIN SET CA TO 8 * M/LOADER HEADER PRESENT FLAG GO TO M-MEMORY-LOAD END SET FU TO 15 * MISSING M-LOAD HEADER CARD INDICATOR HALT GO TO M-MEMORY-LOAD .PROCESS LIT RDEND TO Y * END OF READ CONSTANT READ 24 BITS TO X * GET FIRST 3 BYTES OF BUFFER SKIP WHEN X NEQ Y * TEST FOR END OF READ.... JUMP TO ?END CALL XCBUF * TRANSLATES LOAD FORMAT TO EBCDIC MOVE T TO DATA-ADDRESS * ADDRESS OF DATA COUNT FA UP BY 8 * POINT TO DATA LENGTH ON CARD READ 16 BITS TO T INC FA * GET LENGTH FROM CARD SKIP WHEN TE EQL 12 FALSE * TEST FOR -C- INC TF BY 9 * YES IT WAS -- XLATE TO UNDIGIT SKIP WHEN TC EQL 12 FALSE * TEST FOR -C- INC TD BY 9 * YES IT WAS-- XLATE TO UNDIGIT MOVE TD TO TE * CLOSE RANKS... EXTRACT 8 BITS FROM T(16) TO T * ISOLATE LOW-ORDER 8 BITS MOVE T TO DATA-LENGTH * SAVE LENGTH MOVE DATA-ADDRESS TO X * PREPARE TO DETERMINE IF PRESENT MOVE DATA-LENGTH TO Y * ADDRESS IS HIGHEST ENCOUNTERED SO FAR.. MOVE SUM TO X MOVE ENDING-ADDRESS TO Y * HIGHEST SO FAR... SKIP WHEN X LEQ Y * WILL NEW ADDR. BE HIGHER MOVE X TO ENDING-ADDRESS * YES, SO SAVE IT... COUNT FA UP BY 8 * POINT TO DATA ON CARD XCH DATA- F DATA- * DUMMY CYCLE TO ALIGN ADDRESSES ADD BASE TO FA * INDEX THE IMAGE POINTER .MORE-DATA XCH DATA- F DATA- * RESTORE ADDRESS OF DATA IN READ BUFFER CALL XCBUF4 * DECODE 16 BITS ( U M-WORD) XCH DATA- F DATA- * RESTORE S-MEMRY LOAD ADDRESS WRITE 16 BITS FROM T INC FA AND DEC FL IF FL NEQ 0 GO TO -MORE-DATA * IF LENGTH NOT EXHAUSTED GET MORE.. STORE F INTO DATA- * SAVE LAST DATA ADDRESS GO TO M-MEMORY-LOAD .END SET CA TO 0 * RESET PROCESS SWITCH MOVE MAXM TO T * ACTUAL SIZE OF M-STRING MEMORY ROTATE T RIGHT BY 9 BITS TO TOPM * SET TOPM ACCORDINGLY MOVE ENDING-ADDRESS TO FB * LAST M-ADDRESS USED IF FT NEQ 0 THEN * IS THERE LESS THAN FFF0 IN BITS BEGIN * YES..... LIT HFFF0 TO FL * LARGEST POSSIBLE FOR FL END MOVE BR TO FA * START OF OVERLAY FROM S-MEMORY CLEAR L * STARTING ADDRESS IN M FOR OVERLAY GO TO OVERLAY XCBUF SET FU TO 0 * RESET FIRST TIME SWITCH GO TO XCBUF1 XCBUF4 SET FU TO 4 * SET 16 BIT DECODE XCBUF1 READ 24 BITS TO T INC FA * GET 3 BYTES * TRANSLATE THEM.... SKIP WHEN TE EQL 12 FALSE * IS IT A -C- INC TF BY 9 * YES IT WAS - XLATE TO UNDIGIT.. SKIP WHEN TC EQL 12 FALSE * IS IT A -C- INC TD BY 9 * YES IT WAS... MOVE TD TO TE * COMPACT IT A LITTLE BIT.. SKIP WHEN TA EQL 12 FALSE * IS IT A -C- INC TB BY 9 * YES IT WAS MOVE TB TO TD * COMPLETE LOWER 12 BITS IF FU(3) GO TO ?LAST-12-BITS * TEST FIRST TIME SWITCH IF FU(1) GO TO ?M-WORD-DECODE SHIFT T LEFT BY 12 BITS TO X * ALIGN LOWER 12 BITS TO BE UPPER ONES SET FU TO 1 * TURN ON FIRST TIME SWITCH GO TO XCBUF1 * GO GET NEXT 3 BYTES .LAST-12-BITS EXTRACT 12 BITS FROM T(12) TO Y * GET 12 BITS MOVE XORY TO T * OR UPPER 12 AND LOWER 12 BITS CLEAR FU * RESET FIRST TIME SWITCH EXIT * RETURN TO CALLING ROUTINE .M-WORD-DECODE SHIFT T LEFT BY 4 BITS TO X * ADJUST FOR NEST 4 BITS READ 8 BITS TO T INC FA SKIP WHEN TE EQL 12 FALSE * TEST FOR UNDIGIT INC TF BY 9 * YES IT IS... MOVE TF TO Y MOVE XORY TO T * MERGE 12 BITS AND 4 BITS CLEAR FU EXIT B1500-INITIATE LIT READER-PREAMBLE TO FA * ADDRESS OF... LIT HA0 TO FL * LENGTH OF PREAMBLE LIT EMV-OUTPUT-BUFFER-PREAMBLE TO T CALL MOVE-B1500-DATA MOVE TO-ADDRESS TO T * ENDING ADDRESS OF DATA LIT EMV-WRITE-B-ADDRESS TO FA * ADDRESS OF.... WRITE 24 BITS FROM T EMV-WRITE-INITIATE LIT EMV-WRITE-RESULT-STATUS TO FA * ADDRESS OF .... LIT H100 TO Y * INTERRUPT REQUEST BIT WRITE 24 BITS FROM Y LIT EMV-WRITE-DESCRIPTOR TO L * SET UP FOR DISPATCH MOVE EMV-PORT-CHANNEL TO T CALL DISPATCH-EMV CALL EMV-INTERRUPT-SERVICE ** WHEN NO EXCEPTIONS, INITIATE READ EMV-READ-INITIATE LIT EMV-READ-RESULT-STATUS TO FA * ADDRESS OF ... LIT H100 TO Y * INTERRUPT REQUEST BIT WRITE 24 BITS FROM Y LIT EMV-READ-DESCRIPTOR TO L * SET UP TO READ FROM HOST MOVE EMV-PORT-CHANNEL TO T CALL DISPATCH-EMV CALL EMV-INTERRUPT-SERVICE GO TO PREAMBLE-SERVICE-IN * ANALYZE PREAMBLE RETURNED BY HOST ************************************************************************ DISPATCH-EMV DISPATCH LOCK SKIP WHEN UNLOCKED HALT * SHOULD NOT OCCUR DISPATCH WRITE * INITIATE I/O TO/FROM HOST EXIT ************************************************************************ EMV-INTERRUPT-SERVICE SET IO-WAIT-FLAG * INDICATE WE ARE AWAITING I/O INTERRUPT .LOOP-TILL-INTERRUPT IF INTERRUPT FALSE GO TO -LOOP-TILL-INTERRUPT *WAIT TILL COMPLETE RESET IO-WAIT-FLAG * TURN OFF THE LIGHT DISPATCH READ AND CLEAR * CLEAR THE INTERRUPT IF T(23) THEN * TEST FOR ACCESS ERROR HALT MOVE L TO FA * ADDRESS OF RSW PLUS 24 READ 24 BITS REVERSE TO T * GET RSW IF TA (0) FALSE THEN * TEST FOR I/O COMPLETE HALT IF TA(1) FALSE THEN * TEST FOR NO EXCEPTIONS EXIT EMV-IO-RETRY MOVE TAS TO FA * RETURN ADDRESS OF CALLING ROUTINE * NEXT 7 INSTRUCTIONS STEP POINTER BACK WITHOUT MOLESTING OTHER REGS COUNT FA DOWN BY 24 COUNT FA DOWN BY 24 COUNT FA DOWN BY 24 COUNT FA DOWN BY 24 COUNT FA DOWN BY 24 COUNT FA DOWN BY 24 COUNT FA DOWN BY 16 MOVE FA TO A * ** ABOVE INSTRUCTION CAUSES RETURN TO START OF CALLING ROUTINE ************************************************************************ PREAMBLE-SERVICE-IN LIT EMV-INPUT-BUFFER-PREAMBLE TO FA * ADDRESS OF HOSTS PREAMBLE LIT 160 TO FL * LENGTH OF PREAMBLE 20 * 8 (BITS) LIT INCOMING-PREAMBLE TO T * ADDRESS OF DESTINATION... CALL MOVE-B1500-DATA * MOVE IT.... LIT INCOMING-PREAMBLE-FLAGS TO FA READ 4 BITS TO T * GET FLAGS IF TF (3) THEN * TEST FOR NAK FLAG GO TO EMV-WRITE-INITIATE * RETRY OPERATION COMPLETELY COUNT FA UP BY 16 * POINT TO TO UNIT TYPE READ 8 BITS TO T SKIP WHEN TF EQL 0 FALSE * TEST FOR SYS-TO-SYS GO TO ANALYZE-REQUEST * YES, IT IS... SKIP WHEN TF EQL 1 * TEST FOR CARD READ HALT * NO , ITS NOT.. ILLEGAL FOR LOADER EXIT ANALYZE-REQUEST READ 12 BITS REVERSE TO Y * GET OPERATION CODE LIT H531 TO X * IS IT A START M LOAD REQUEST... IF X EQL Y THEN * TEST... GO TO START-M-LOAD * YES, IT IS... ELSE HALT * ALL OTHERS ILLEGAL FOR COLD START LOAD HALT MOVE-B1500-DATA MOVE T TO TO-ADDRESS * DESTINATION .MORE READ 8 BITS TO X INC FA AND DEC FL * FETCH A CHARACTER OR 8 BIT XCH TO- F FROM- * SAVE SOURCE AND GET DESTINATION WRITE 8 BITS FROM X INC FA * STORE 8 BITS XCH FROM- F TO- * SAVE DESTINATION, GET SOURCE IF FL NEQ 0 GO TO -MORE * BRANCH IF NOT FINISHED E IT M RETURN TO CALLING RO43INE LOAD-MSMA STOP LIT HFFFFFF TO X MOVE X TO Y * MAKE SURE ITS NOTICED... LIT HAAAAAA TO T * INDICATE END OF MTR MODE LIT HAAAAAA TO L * INDICATE END OF MTR MODE MOVE H10 TO A * POINT TO A-REGISTER ADDRESS OF 1 CASSETTE STOP HALT ? END