CMM MOV A,B STA MODE SET OUTPUT INDICATOR JMP CTRL * CI CPI 'I' INPUT COMMAND JNZ CO * * (I) INPUT PORT COMMANDS * CALL SPAR GET PARAMETER MOV A,H ORA A JNZ SERR PORT NUMBER ILLEGAL MOV A,L GET PORT NUMBER CALL ICHK CHECK INPUT TABLE MOV A,C GET PORT COUNT CPI 16 CHECK NUMBER OF PORTS JNC SERR STA INUM SAVE COUNT MVI M,-1 SET FOR REAL-TIME INPUT LDA IBUF+1 GET 2ND LETTER CPI 'S' SET INPUT VALUE JNZ CIR * DEFINE VALUE FOR INPUT PORT - NOT SIMULATED XCHG SAVE ADDRESS LHLD BBUF+2 FETCH PREDEFINED VALUE MOV A,H ORA A JNZ SERR ILLEGAL VALUE XCHG MVI M,1 SET INPUT TYPE INX H MOV M,E SET PORT VALUE IN TABLE JMP CTRL CIR CPI 'R' REAL INPUT JZ CTRL ALREADY SET SO JUMP MVI M,0 SET FOR NORMAL SIMULATION CPI 'C' CLEAR INPUT JZ CTRL ALREADY CLEAR SO JUMP JMP SERR ILLEGAL COMMAND * * - OUTPUT PORT COMMAND * CO CPI 'O' JNZ CS CALL SPAR MOV A,H ORA A JNZ SERR PORT TOO BIG MOV A,L CALL OTCHK CHECK OUTPUT TABLE MOV A,C GET ENTRY COUNT CPI 16 JNC SERR TOO MANY E NTRIES STA ONUM SAVE COUNT MVI B,-1 LDA IBUF+1 CPI 'R' REAL TIME PORT JZ OTSET INR B CPI 'A' ASCII PORT JZ OTSET INR B CPI 'C' OTSET MOV M,B JZ CTRL JMP SERR * * THIS SUBROUTINE IS USED TO SCAN THROUGH THE INPUT PORT TABLE TO SEE * IF A PORT IS ALREADY IN THE TABLE. IF NOT, IT PLACES THE PORT * NUMBER IN THE TABLE. THE TABLE INDICATES WHETHER A PORT IS A * PREDEFINED, REAL TIME, OR NORMAL SIMULATION PORT. * UP TO 15 DIFFERENT PORTS CNA BE DEFINED. * OTCHK LXI H,OTTAB OUTPUT TABLE ADDRESS MOV B,A LDA ONUM JMP ICH3 ICHK LXI H,ITAB SET TABLE ADDRESS MOV B,A SAVE PORT NUMBER LDA INUM FETCH PORT COUNT ICH3 MOV C,A ORA A NO PORT YET MOV A,B MOV B,C JZ ICH2 JUMP IF 1ST PORT ICH1 CMP M ALREADY IN TABLE INX H RZ RETURN IF IN TABLE INX H INX H DCR B PORT COUNT JNZ ICH1 ICH2 MOV M,A STORE IN TABLE INX H INR C INCREMENT COUNT AND CLEAR ZERO RET * CS CPI 'S' SET COMMAND JNZ SERR ILLEGAL COMMAND * * (S) SET VALUE COMMAND * LXI H,IBUF+1 INPUT BUFFER ADDRESS SHLD PNTR SAVE POINTER * SET REGISTER VALUES SREG CALL ZBUF CLEAR BUFFER CALL SBLK SCAN TO NEXT ASSIGNMENT JC CTRL FOUND CR XCHG MVI C,10 SET REGISTER COUNT LXI H,REGT SET REGISTER TABLE ADDRESS RCOM CMP M CHECK REGISTER NAME JZ SRKP INX H DCR C JNZ RCOM JMP SERR ILLEGAL REGISTER NAME SRKP MOV A,C STA TEMP SAVE REGISTER INDICATOR XCHG INX H MOV A,M CPI '=' CHECK FOR = JNZ SERR ERROR IF NOT FOUND INX H MOV A,M LXI D,ABUF CALL SNUMER CONVERT VALUE JC SERR LDA TEMP CPI 1 JZ SSP MOV C,A MOV A,H CHECK VALUE ORA A JNZ SERR VALUE OUT OF RANGE MOV A,L LXI H,FLAG-02 SET BASE ADDRESS MVI B,0 DAD B FORM REGISTER ADDRESS MOV M,A SET REGISTER VALUE JMP SREG CONTINUE * * PROCESS NUMERIC VALUE FOR SIMULATOR INPUT * SNUMER CALL ALPS DCX D LDAX D LXI B,ABUF CPI 'D' DECIMAL JZ NUMD1 CPI 'Q' OCTAL JZ NUM3 OCTAL CPI 'H' JNZ EMODE DEFAULT TO SYSTEM SWITCH JMP NUM2 HEX * * SET STACK POINTER SSP SHLD USP SET USERS STACKPOINTER JMP SREG * * GET INPUT PARAMETERS FROM COMMAND SPAR CALL ETRA GET PARAMETERS JC SERR INPUT ERROR CALL ABCON JC SERR LDA ABUF CHECK FOR PARAMETER ORA A JZ SERR NO PARAMETER LHLD BBUF FETCH PARAMETER RET * * SIMULATOR ERROR ROUTINE SERR CALL CRLF MVI B,3FH ERROR INDICATOR CALL OUT8 JMP CTRL * REGISTER SET TABLE * REGT DB 'A','B','C','D','E','H','L','A','F','S' DS 12 PATCH SPACE * * PROCESS AUTO COMMAND * AUTO LHLD IN8+1 GET DRIVER ADDRESS SHLD BBUF+1 SAVE IT LDA ABUF ORA A CHECK PARAMETER JZ AUTO1 LHLD MAXL GET MAXIMUM LINE # SHLD ABUF LHLD MAXL+2 JMP AUTO2 AUTO1 LXI H,'00' SHLD ABUF WANT TO START AT 1 AUTO2 SHLD ABUF+2 MVI A,0C3H FORM JMP INSTRUCTION STA BBUF LXI H,AUTO3 SHLD IN8+1 CHANGE DRIVER ADDRESS JMP EORNS AUTO3 CALL BBUF GO TO REAL INPUT MOV A,L CPI IBUF-IBUFP 1ST CHARACTER ? JNZ AUTO7 MVI A,01BH CHECK FOR ESCAPE CMP B JZ EORMS SUSPEND AUTO LXI H,IBUF+5 MVI E,7 AUTO7 MVI A,ASCR CMP B CHECK FOR END OF LINE MOV A,B RNZ PUSH H PUSH D LXI D,ABUF LXI H,ABUF+3 AUTO6 MOV A,M GET NUMBER INR A #=#+1 CPI '9'+1 JNC AUTO5 >9 MOV M,A LXI H,IBUF MVI B,4 AUTO4 LDAX D MOV M,A MOVE LINE NUMBER INX H INX D DCR B JNZ AUTO4 MVI M,' ' POP D MVI B,ASCR MOV A,B POP H RET AUTO5 MVI A,'0' MOV M,A DCX H JMP AUTO6 * * DATA AREA * ORG DORG * DEFINE INPUT AND OUTPUT PORTS * * USTA EQU 0 UART STATUS UDAI EQU 1 DATA IN UDAO EQU 1 DATA OUT PDAI EQU 6 PROM DATA IN PADO EQU 7 PROM ADDRESS OUT PDAO EQU 8 PROM DATA OUT PCTO EQU 9 PROM CONTROL OUT SWCH EQU 0FFH * * FILE AREA PARAMETERS MAXFIL EQU 6 MAX = OF FILES NMLEN EQU 5 NAME LENGTH FELEN EQU NMLEN+8 DIRECTORY ENTRY LENGTH FILE0 DS NMLEN BOFP DS 2 EOFP DS 2 MAXL DS 4 MAXF1 EQU MAXFIL-1 FILTB DS MAXF1*FELEN IOFLE DS MAXF1*FELEN SYSIO DS NMLEN STANDARD DRIVER NAME SYSIN DS 2 INPUT DRIVER ADDRESS SYSOT DS 2 OUTPUT DRIVER ADDRESS INDR DS OUTP8-INP8 INPUT DRIVER STAT EQU INDR+STAT8-INP8 OUTDR DS CRLF-OUTP8 OUTPUT DRIVER IN8 DS 3 DRIVER LINKAGE OUT8 DS 3 DRIVER LINKAGE INSP DS 2 INSERT LINE POSITION DELP EQU INSP DELETE LINE POSITION ASCR EQU 13 ASCII CARRIAGE RETURN VALUE ESC EQU 1BH ASCII ESCAPE CHARACTER HCON DS 3 ADDS EQU HCON FIND ADDRESS FBUF DS NMLEN FILE NAME BUFFER FREAD DS 2 FREE ADDRESS IN DIRECTORY FEF DS 1 FREE ENTRY FOUND FLAG FOCNT EQU FEF OUTPUT COUNTER ABUF DS 16 ASCII BUFFER AREA BBUF DS 4 BINARY BUFFER SCNT DS 1 DCNT DS 1 DUMP ROUTINE COUNTER NCOM EQU 10 NUMBER OF COMMANDS TABA DS 2 SYMNOL TABLE END ADDRESS ASPC DS 2 ASSEMBLER PROGRAM COUNTER PASI DS 1 PASS INDICATOR LFMT DS 1 FORMAT CONTROL NOLIN DS 1 TEXT OR LIST SWITCH IOSWC DS 1 IO SWITCH INDICATOR SWCH1 DS 1 SWCH2 DS 1 XOUT DS 1 SCRN PARAMETER ASMTY DS 1 ASSEMBLY TYPE FLAG PNTR DS 2 LINE POINTER STORAGE NOLA DS 1 NUMBER OF LABELS SIGN DS 1 SIGN STORAGE FOR SCAN OPRD DS 2 OPERAND STORAGE OPRI DS 1 OPERAND FOUND INDICATOR GTLT DS 1 GT LT FLAG TEMP DS 1 APNT EQU INSP ASSEMBLE LINE POINTER AERR EQU DCNT ERROR PRINT SWITCH ALST DS 1 ASSEMBLER LISTING FLAG OIND DS 2 OUTPUT ADDRESS LLAB EQU 5 LENGTH OF LABELS DS 16 MORE STACK ROOM AREA DS 18 SMODE DS 1 SYSTEM MODE SYMSAV DS 2 SYMBOL ADDRESS CCNT EQU SCNT LINE NUMBER COUNT SYMX EQU AERR SYMBOL TABLE FLAG SYMADD DS 2 SYMBOL TABLE ADDRESS * SIMULATOR DATA AREA BRKI DS 1 BREAKPOINT INDICATOR REALI DS 1 REAL TIME INDICATOR INUM DS 1 INPUT TABLE COUNT ONUM DS 1 OUTPUT TABLE COUNT BRKA DS 2 BREAKPOINT ADDRESS REALAD DS 2 REAL TIME ADDRESS * DATA AREA NPC DS 2 PC DS 2 USP DS 2 USER STACK POINTER FLAG DS 1 STATUS FLAGS DS 1 TAKE REG A SPACE FOR PUSH REGL DS 1 REGH DS 1 REGE DS 1 REGD DS 1 REGC DS 1 REGB DS 1 REGA DS 1 * MODE DS 1 SIMULATOR OUTPUT MODE SWITCH SEXE DS 6 EXECUTION AREA * ITAB DS 16 INPUT PORT TABLE OTTAB DS 45 OUTPUT PORT TABLE TERMW DS 1 TERMINAL WIDTH CHRR DS 1 INPUT CHR USARE DS 56 USER AREA FOR GLOBAL OBUF DS 22 OUTPUT BUFFER AREA DS 5 IBUF DS 120 EDIT EQU 0FA0BH WAY UP YONDER SAVL EQU OBUF LINE STARTING ADDRESS CUCOM DS 70 ORG DORG+300H SYSYM DS 2 SYSTEM SYMBOL TABLE SYMT EQU PORG ASSEMBLY SYMBOL TABLE IBUFP EQU IBUF/256*256 IBUF81 EQU IBUF+81 IBUF1P EQU IBUF81/256*256 OBUF15 EQU OBUF+15 OBUFP EQU OBUF15/256*256 ABUFP EQU ABUF/256*256 END