/***************************************************************************** * Change Log * Date | Change *-----------+----------------------------------------------------------------- * 12-Dec-85 | [1.174] Created * 25-Feb-86 | [1.379] include<> => include "" * 18-Nov-91 | [1.428] memory.h => mem1401.h, avoid ANSI name *****************************************************************************/ #include "boolean.h" #include "btypes.h" #include "mem1401.h" #include "mach.h" #include "diag.h" #include "instr.h" #include "poll.h" #include "ifetch.h" /***************************************************************************** 1401 Simulator Select Stacker Select Stacker -------------- Instruction format Mnemonic Op Code I-address d-char -------- ------- --------- ------ SSB K III x Function: This is the same as the select stacker instruction, except the next instruction is taken from the I-address instead of from the next sequential instruction address. The program branch occurs after the card has been selected. Word Marks: Word marks are not affected Address Registers After Operation: (without indexing special feature) I-Add A-Add B-Add ----- ----- ----- NSI BI ??? NOTE: THIS HAS BEEN REINTERPRETED ACCORDING TO THE INDEXING SPECIAL FEATURES ADDENDUM: I-Add A-Add B-Add ----- ----- ----- NSI BI NSI Chaining: N/A Select Stacker -------------- Instruction format Mnemonic Op Code d-char -------- ------- ------ SS K x Read Select: A select stacker instruction must be given during the first 10ms after actual card reading is completed; otherwise the command is ineffective (this functionality is not handled in the simulator). After a card is read, it continues to the stackers without stopping. Therefore, if no select stacker signal is received within the next 10ms the card stacks in the normal stacker (NR). Read select instructions cannot be used following RP and WRP instructions because the signal cannot be given within the prescribed 10ms. Punch select: The select stacker instruction is effective if given at any time between two punch card instructions. However if a punch check occurs, the error card is directed to the normal (NP) stacker. ====== | \ / / ====== V \ / / ====== ------ ------ ------ ------ ----- ---+ | | | | +---Read Read Punch Blank Punch Check | | | | | | station Check Hopper station station station | | | | | | | | | | | | +----+----+----+----+----+ NP 4 8/2 1 NR d-char feed pocket ------ ---- ------ 1 read 1 2 read 8/2 4 punch 4 8 punch 8/2 In addition, this instruction is used for various kinds of selection on other devices. Word Marks: Word marks are undisturbed Address Registers After Operation: I-Add A-Add B-Add ----- ----- ----- NSI Ap ??? Chaining: The instruction does not chain *****************************************************************************/ /**************************************************************************** * inst_SS * Result: boolean * true if operation succeeded * false if operation failed * Effect: * Does nothing, but makes SS a legal operation for the simulator ****************************************************************************/ boolean inst_SS() { tell_op(op_A|op_d); switch(I_cycle) { /* length dispatch */ case 2: /* Normal SS */ break; case 5: /* SS-and-branch */ B_addr = I_addr; NI_addr = A_addr; poll(); break; default: /* illegal length */ illegal_length(); return false; } /* length dispatch */ single_cycle_state = single_cycle_complete; tell_new_state("SS"); return true; }