* THE INSTRUCTION * RSTO LXI SP,USP SET STACK POINTER MVI A,0C3H A JMP INSTRUCTION STA SEXE+3 LXI H,STOR SHLD SEXE+4 POP H FETCH USERS SP POP PSW RESTORE FLAGS INX SP INCREMENT SP INX SP INCREMENT SP POP D RESTORE D,E POP B RESTORE B,C SPHL RESTORE USERS SP LHLD REGL RESTORE H,L LDA REGA RESTORE REG A JMP SEXE STOR STA REGA SAVE REG A SHLD REGL SAVE H,L RAL PUT CARRY IN REG A LXI H,0 H,L=0 DAD SP LOAD SP INTO H,L LXI SP,REGB+1 REGISTER STORAGE AREA PUSH B SAVE REG B,C PUSH D SAVE D,E DCX SP DECREMENT SP DCX SP DECREMENT SP RAR SET CARRY PUSH PSW SAVE FLAGS PUSH H SAVE SP LXI SP,AREA+14 SET STACK POINTER * * DISPLAY RESULTS OF SIMULATION * DISP IN SWCH READ SWITCHES ANI 80H JNZ DIS3 CALL STAT JZ NCHR CALL IN8 CPI 24 CHECK FOR CONTROL X JZ DIS3 NCHR LDA BRKI FETCH BREAKPOINT INDICATOR ORA A IS BREAKPOINT SET? JZ DIS1 NO BREAKPOINT SO OUTPUT LHLD BRKA FETCH BREAKPOINT ADDRESS LDA NPC+1 FETCH PC CMP H JNZ DIS2 SKIP OUTPUT LDA NPC FETCH PC CMP L JNZ DIS2 * DIS3 CALL DBU1 DISPLAY RESULTS JMP CTRL * DIS1 CALL DBU1 OUTPUT DISPLAY IN SWCH ANI 40H CZ IN8 READ KEYBOARD CPI 24 JZ CTRL CALL CRLF DIS2 LHLD PC SHLD NPC MODIFY OLD PC JMP SIMU CONTINUE SIMULATION DNPC LDA NPC+1 FETCH ADDRESS (HIGH) MOV D,A LDA NPC FETCH ADDRESS (LOW) MOV E,A CALL ADOUT CALL BLK1 CALL BLK1 RET DBU1 CALL DNPC LDA FLAG MOV C,A ANI 01H CARRY BIT CALL FLAO ANI 80H SIGN BIT CALL FLAO OUTPUT FLAG ANI 10H IDC BIT CALL FLAO OUTPUT FLAG ANI 04H PARITY BIT CALL FLAO OUTPUT FLAG ANI 40H ZERO BIT CALL FLAO OUTPUT FLAG CALL BLK1 OUTPUT A BLANK LXI D,REGA SET ADDRESS LDAX D FETCH REG A CALL SOTB CALL BLK1 MVI C,4 NEXT 4 REGISTERS SDI1 DCX D LDAX D CALL SOTB OUTPUT REGISTER DCR C JNZ SDI1 CALL BLK1 DCX D LDAX D FETCH REGISTER H CALL SOTB DCX D LDAX D FETCH REGISTER L CALL SOTB LHLD REGL GET MEMORY ADDRESS MOV A,M FETCH CONTENTS OF MEMORY CALL SOTB CALL BLK1 LDA USP+1 FETCH SP (HIGH) MOV D,A LDA USP FETCH SP (LOW) MOV E,A CALL ADOUT ADDRESS PRINT LXI D,SEXE GET INSTRUCTION CALL BLK1 SPACE CALL CODOT INSTRUCTION CALL CODOT FIRST BYTE JMP CODOT SECOND BYTE CODOT CALL BLK1 LDAX D INX D CALL SOUT RET * * OUTPUT FLAGS * FLAO MVI B,'1' SET TO ASCII 1 JNZ FOU1 DCR B SET TO ASCII 0 FOU1 CALL OUT8 MOV A,C RET * * THIS ROUTINE CALLS EITHER A HEXADECIMAL OR DECIMAL * OUTPUT ROUTINE DEPENDING UPON THE OUTPUT MODE * SOUT LXI H,MODE ADDRESS OF MODE INDICATOR MOV B,M DCR B DECIMAL OR HEX JP SDEC DECIMAL CALL DUMO RET SDEC JMP DOUT DECIMAL OUTPUT * * SAME AS ABOVE ROUTINE BUT ALSO OUTPUTS A BLANK SOTB CALL SOUT JMP BLK1 * * * STARTING POINT FOR SIMULATOR, INITIALIZE VARIZBLES * SINT LDA IBUF+4 CPI ' '+1 IS IT A SPACE OR CONTROL CHR JNC CTRL IF NOT DON"T CHANGE THE TABLES XRA A CLEAR A STA INUM SET INPUT TABLE COUNT STA MODE INITIALIZE OUTPUT MODE TO HEX STA ONUM INITIALIZE OUTPUT TABLE STA REALI CLEAR REAL TIME INDICATOR SIN1 STA BRKI SET BREAKPOINT INDICATOR * * CTRL LXI SP,AREA+18 CALL CRLF MVI B,'*' PROMPT SYMBOL CALL OUT8 OUTPUT CHARACTER CALL READ READ COMMAND LDA IBUF FETCH COMMAND CPI 'P' SET PC COMMAND JNZ CBP * * (P) SET PROGRAM COUNTER FOR SIMULATION * CALL SPAR GET PARAMETERS SHLD PC SHLD NPC JMP CTRL CBP CPI 'B' BREAKPOINT COMMAND JNZ CRT * * (B) SET BREAKPOINT * CALL SPAR GET PARAMETERS SHLD BRKA SET BREAKPOINT ADDRESS JMP SIN1 * * - REAL TIME ADDRESS COMMAND CRT CPI 'R' JNZ CCBP CALL SPAR SHLD REALAD SAVE ADDRESS MVI A,1 STA REALI SET INDICATOR JMP CTRL CCBP CPI 'C' CLEAR BREAKPOINT JNZ CG * * (C) CLEAR BREAKPOINT * LDA IBUF+1 LXI H,BRKI CPI 'B' JZ CINDS INX H CPI 'R' JZ CINDS INX H CPI 'I' JZ CINDS INX H CPI 'O' JNZ SERR CINDS MVI M,0 JMP CTRL CG CPI 'G' GO COMMAND * * (G) START SIMULATION * JZ DIS2-3 START SIMULATION * CD CPI 'D' DUMP COMMAND JNZ CE * * (D) DUMP CONTENTS OF MEMORY * CALL SPAR GET PARAMETERS CALL DUMP+3 DUMP MEMORY JMP CTRL * CE CPI 'E' ENTER MEMORY JNZ CX * * (E) ENTER DATA INTO MEMORY * CALL SPAR GET PARAMETERS CALL ENTS ENTER DATA INTO MEMORY JC SERR JMP CTRL * CX CPI 'X' EXIT COMMAND * * (X) EXIT FROM SIMULATOR TO EXECUTIVE * JZ EORMS RETURN TO SYSTEM CM CPI 'M' MODE COMMAND JNZ CI * * (M) OUTPUT MODE COMMAND CALL SPAR GET PARAMETERS MOV A,L MVI B,1 INITIALIZE MODE SWITCH CPI 10H DECIMAL OUTPUT JZ CMM DCR B