//monitor.asm ORG 000 070 / JMP 000 000 /JUMP INSTRUCTION FOR BRKPT / /LOC. 076 THRU 127 AVAILABLE FOR USER / /MONITOR MESSAGE TABLE / ORG 000 130 215 /CAR. RET. 212 /LINE FEED 276 /> 000 215 /CAR. RET. 212 /LINE FEED 000 / /LOC. 137 THRU 147 AVAILABLE FOR USER / ORG 000 150 000 /DIGIT STORAGE 000 /FOR OCTAL NUMBER 000 /SUBROUTINE 000 /AVAILABLE 000 /AVAILABLE / /COMMAND AND GO TO JUMP INSTRUCTION JMP 000 000 /CMND RTN FILLS IN ADDR / 000 /AVAILABLE 000 /AVAILABLE 000 /AVAILABLE 000 /AVAILABLE 000 /TEMP STORAGE 000 /TEMP STORAGE 000 /LOW ADDRESS - LOW PORTION 000 /LOW ADDRESS - PAGE PORTION 000 /HIGH ADDRESS - LOW PORTION 000 /HIGH ADDRESS - PAGE PORTION 000 /TEMP STORAGE 000 /TEMP STORAGE 000 /TEMP STORAGE 000 /TEMP STORAGE 000 /TEMP STORAGE 000 /TEMP STORAGE / 000 /VIRTUAL CPU REG "A" 000 /VIRTUAL CPU REG "B" 000 /VIRTUAL CPU REG "C" 000 /VIRTUAL CPU REG "D" 000 /VIRTUAL CPU REG "E" 000 /VIRTUAL CPU REG "H" 000 /VIRTUAL CPU REG "L" 000 /FLAG STATUS BYTE / /COMMAND LOOK UP TABLE / 315 /MODIFY 150 015 304 /DUMP 275 015 327 /BULK WRITE 343 015 322 /BULK READ 371 015 302 /BREAKPOINT 377 015 307 /GO TO 220 016 330 /EXAMINE REGISTERS 257 016 306 /FILL MEM 015 007 323 /SEARCH 022 017 324 /TRANSFER 061 017 / /LOC. 246 THRU 337 AVAILABLE FOR /USER OR TO EXPAND COMMAND TABLE / /LOC. 340 THRU 377 - INPUT BUFFER / /PAGES 01 THRU 13 AVAILABLE FOR USER'S PROGRAMS / / /COMMAND INPUT ROUTINE / ORG 014 000 INCMD, LHI 000 /SET PNTR TO HEADING MSG LLI 130 CAL MSG /PRINT C/R, L/F, > CAL CDIN /INPUT LINE FROM KYBD LLI 340 LAM /FETCH COMMAND CHAR LDI 012 /SET CMND NMBR CNTR LLI 210 /SET CMND TABLE PNTR CKCMD, CPM /IS CMND CHAR FOUND IN TBL? JTZ FOUND /YES, PROCESS COMMAND INL /NO,ADVANCE CMND TBL PNTR INL INL DCD /IS LAST CMND CHECKED? JFZ CKCMD /NO, CHECK NEXT ERR, CAL HDLN /YES, PRINT C/R, L/F LAI 311 /ILLEGAL ENTRY CODE CAL PRINT /PRINT ERROR MSG JMP INCMD /INP NEXT COMMAND / FOUND, INL /ADD CMND TBL PNTR LDM /FETCH CMND LO ADDR INL LCM /FETCH CMND PG ADDR LLI 156 /SET PNTR TO JMP INSTR. LHI 000 LMD /LOAD LO ADDR OF CMND INL LMC /LOAD PG ADDR OF CMND LLE JMP 155 000 /JUMP TO CMND ROUTINE / CDIN, LLI 340 /SET PNTR TO START OF INP BFR SPI, LMI 240 /FILL INP BFR WITH SPACES INL /INCR INP BFR PNTR JFZ SPI /DONE? NO, STORE MORE SPACES LLI 340 /SET INP BFR PNTR IN2, CAL RCV /INP CHAR FM INP DEVICE CPI 204 /CHAR = CNT'L D? JTZ INCMD /YES, RET TO COMMAND MODE CPI 215 /CHAR = CAR RET? RTZ /YES, RET TO CALLING PGM CPI 214 /CHAR = CNT'L? RTZ /YES, RET TO CALLING PGM CPI 377 /CHAR = RUBOUT? JTZ BDCR /YES, DELETE CHAR FM INP BFR INL /IS INP BFR FULL? DCL JTZ IN2 /YES, DON'T STORE CHARACER LMA /NO, STORE CHARACTER INL /INCR INP BFR PNTR JMP IN2 /CONTINUE INPUT / BDCR, LAI 340 /SET ACC TO INP BFR A.A. CPL /ANY CHARACTERS YET? JTZ IN2 /NO, CONTINUE INPUT DCL /YES, BACK UP INP BFR PNTR LMI 240 /STORE SPACE OVER LAST CHAR JMP IN2 /CONTINUE INPUT / HDLN, LLI 134 /SET PNTR TO C/R, L/F MSG LHI 000 /FALL THRU TO RINT MSG / MSG, LAM /FETCH CHAR TO PRINT NDA /END OF MSG CHAR? RTZ /YES, RET TO CALLING PGM CAL PRINT /NO, PRINT CHAR CAL INMEM /INCR MSG PNTR JMP MSG /CONTINUE PRINT OUT / INMEM, INL /INCR LO ADDR RFZ /IF NON ZERO, RET INH /ELSE, INCR PG ADDR RET /RET TO CALLING PGM / OCTNM, LEL /SAVE INP BFR PNTR CAL OCTPR /CONVERT 1ST OCATAL PAIR LLI 166 /SET PNTR TO LO ADDR STRAGE LMB /SAVE LO HALF OF LO ADDR INL LMC /SAVE PG HALF OF LO ADR LLE /RESTORE INP BFR PNTR LAM /FETCH NXT CHAR CPi 254 /CHAR = COMMA? JFZ SGL /NO, ONLY ONE ENTRY INL /YES, INCR INP BFR PNTR LEL /SAVE INP BFR PNTR CAL OCTPR /CONVERT 2ND OCTAL PAIR SGL, LLI 170 /SET PNTR TO HI ADDR STORAGE LMB /SAVE LO HALF OF HI ADDR INL LMC /SAVE PG HALF OF HI ADDR LAC LLI 167 /IS HI ADDR < LO ADDR? CPM JTC ERR /YES, PRINT ERROR RFZ /IF PG HALF NOT =, RET INL /ELSE, CHECK LO HALF LAM LLI 166 /IS HI ADDR < LO ADDR? CPM JTC ERR /YES, PRINT ERROR MSG RET /NO, RET TO CALLING PGM / OCTPR, CAL DCDNM /DECODE 1ST OCTAL NUMBER LCB /SAVE OCTAL NUMBER INE /INCR INP BFR PNTR / FALL THRU TO DECODE 2ND NMBR / DCDNM, LLI 150 /SET PNTR TO DIGIT STRAGE TBL LMH /CLEAR TBL BY STORING 000. INL LMH INL LMH LLE LOOP, CAL FNUM /CHECK FOR VALID NUMBER JTS CKLNH /IF NOT, CHECK CHAR CNT = 0 LAM /FETCH CHAR LDL /SAVE INP BFR PNTR NDI 007 /MASK OFF 260 LLI 150 /STORE OCTAL NUMBER IN LBM /TABLE AT LOC 150 PG 00 LMA /AND SHIFT OTHER NUMBERS INL /UP THRU THE TABLE LAM LMB INL LMA LLD /RESTORE AND INCR INP BFR PNTR INL JMP LOOP /FETCH NEXT NUMBER / CKLNH, LAL CPE /IS CHAR CNT = 0? JTZ ERR /YES, PRINT ERROR MSG LEL /NO, SAVE INP BFR PNTR CAL OCT /FETCH FINAL OCTAL NUMBE JFS ERR /IF INVALID, PRINT ERR MSG RET /ELSE RET TO CALLING PGM / FNUM, LAM /IS CHAR A VALID NUMBER? CPI 260 RTS /NO, RET WITH S FLAG SET SUI 270 /CHECK UPPER LIMIT BY ADI 200 /SETTING S FLAG TO PROPER RET /STATE AND RETURN / INCR, ADI 001 /INCR CONTENTS OF MEM LOC LMA /RESTORE MEM CONTENTS RFC /IF NO CARRY, RET INL /ELSE, FETCH NXT LOC LAM ADI 001 /INCR MEM CONTENTS LMA /RESTORE MEM CONTENTS RET /RETURN TO CALLING PGM / OCT, LLI 152 /SET PNTR TO 3RD DIGIT LAM CPI 004 /IS 3RD DIGIT > 3? RFS /YES, RET WITH S FLAG RESET NDI 003 /CLEAR CARRY RRC /POSITION DIGIT RRC LBA /SAVE IN REG B DCL /DECR PNTR LAM /FETCH NEXT DIGIT RLC /POSITION DIGIT RLC RLC ADB /ADD TO REG B DCL /DECR PNTR ADM LBA /SAVE FINAL NUMBER LAI 200 /SET S FLAG TO INDICATE NDA /THAT THE NUMBER IS VALID RET /RET TO CALLING PGM / SWITCH, LCH /SWITCH THE PNTR IN LHD /REG'S N AND L WITH LDC /THE PNTR IN REG'S D AND E LCL LLE LEC RET /RET TO CALLING PGM / OCTOUT, LLA /SAVE OCTAL NUMBER TO PRINT RLC /POSITION HUNDRED'S DIGIT RLC NDI 003 /MASK OFF OTHER BITS ORI 260 /FORM OCTAL NUMBER CAL PRINT /PRINT DIGIT LAL /FETCH OCTAL NUMBER RRC /POSITION TENS'S DIGIT RRC RRC NDI 007 /MASK OFF OTHER DIGITS ORI 260 /FOR ASCII CODE CAL PRINT /PRINT DIGIT LAL /FETCH OCTAL NUMBER NDI 007 /MASK OFF OTHER DIGITS ORI 260 /FORM ASCII CODE JMP PRINT /PRINT DIGIT AND RET / COLON, LAI 272 /SET ASCII CODE FOR : JMP PRINT /PRINT COLON AND RET PRT166, LLI 167 /SET PNTR TO PG ADDR LHI 000 /OF LO ADDR STORED LAM /FETCH PG ADDR NDI 077 CAL OCTOUT /PRINT PG ADDR CAL SPAC /PRINT A SPACE LLI 166 /SET PNTR TO LO ADDR LAM /FETCH LO ADDR CAL OCTOUT /PRINT LO ADDR / /FALL THRU TO PRINT SPACE / SPAC, LAI 240 /SET ASCII CODE FOR SPACE JMP PRINT /PRINT SPACE AND RET / SETUP, LHI 000 LLI 166 /SET PNTR TO 00 166 LCM /FETCH LO ADDR INL LHM /FETCH PG ADDR LLC /SET PNTR TO MEM LOC RET /RET TO CALLING PGM / CKEND, LHI 000 LLI 171 /SET PNTR TO HI ADDR LAM /FETCH 2ND HALF LLI 167 /SET PNTR TO END HALF LO ADDR CPM /2ND HALFS EQUAL? JFZ CONT /NO, CONTINUE ROCESS INL LAM /FETCH 1ST HALF HI ADDR LLI 166 /SET PNTR TO 1ST HALF HI ADDR CPM /1ST HALFS EQUAL? JTZ INCMD /YES, RET TO CMND MODE CONT, LLI 166 /NO, SET PNTRO TO LO ADDR LAM JMP INCR /INCR LO ADDR AND RET / MODIFY, LLI 342 /SET INP BFR PNTR CAL OCTNM /FETCH ADDR TO MODIFY CAL SPAC /PRINT SPACE MOD1, CAL MEMPRT /PRINT CONTENTS OF MEM LOC CAL COLON /PRINT COLON CAL INSPCL /INP MODIFICATION LAI 340 /WAS MOD ENTERED? CPL JTZ NXLOC /NO, SET UP NXT LOC LEA /YES, SAVE INP PNTR CAL DCDNM /CONVERT TO OCTAL NUMBER LAB /SAVE OCTAL NUMBER LLI 166 /SET PNTR TO MEM ADDR STRAGE LEM /FETCH MEMPNTR INL LDM CAL SWITCH /SET PNTR TO MEM LOC LMA /LOAD MEM WITH NEW VALUE NXLOC, LHI 000 /SET PNTR TO PG 00 LLI 166 /SET PNTR TO MEMADDR STRANGE LAM /FETCH LO HALF CAL INCR /INCR MEM ADDR CAL MCONT /PRINT NXT ADDR TO MODIFY JMP MOD1 / MCONT, CAL HDLN /PRINT C/R, L/F JMP PRT166 /PRINT ADDR TO MODIFY AND RET / INSPCL, LLI 340 /SET PNTR TO S.A. OF INP BFR LHI 000 LPIN, CAL RCV /INP CHAR LMA /STORE CHAR IN INP BFR CPI 240 /CHAR = SPACE? RTZ /YES, RET TO CALLING PGM CPI 215 /NO, CHAR = C/R? JTZ INCMD /YES, RET TO COMMAND MODE INL /NO, INCR INP BFR PNTR JTZ ERR /INP BFR FULL? YES, ERROR JMP LPIN /NO, INP NXT CHAR / MEMPRT, CAL SETUP /SET PNTR TO MEM LOC LAM /FETCH CURRENT MEM CONTENTS JMP OCTOUT /PRINT CONTENTS AND RET / MDUMP, LLI 342 /SET PNTR TO INP BFR CAL OCTNM /FETCH MEM DUMP LIMITS CAL HDLN /PRINT C/R, L/F MDMP1, CAL MCONT /PRINT ADDR OF 1ST LOC CAL SPAC /PRINT SPACE MDMP2, LLI 164 /SET PNTR TO TEMP STRAGE LMI 020 /SAVE LOC PER LINE CNTR OUTAGN, CAL MEMPRT /PRINT MEMORY CONTENTS CAL CKEND /CHECK FOR LAST LOC PRTD CAL SPAC /PRINT SPACE LLI 164 /SET PNTR TO L/L CNTR LBM /FETCH CNTR DCB /DECR CNTR LMB /SAVE CNTR, CNTR = 0? JTZ MDMP1 /YES, START NEW LINE JMP OUTAGN /NO, PRINT MORE CONTENTS / WRITE, LLI 342 /SET PNTR TO INP BFR CAL OCTNM /FETCH START AND END ADDR LLI 166 /SET REG'S H AND L WITH LCM /THE START ADDR AND INL /REG'S D AND E WITH LBM /THE END ADDR OF THE INL /BLOCK OF MEM TO BE LEM /WRITTEN TO THE BULK INL /STORAGE DEVICE LDM LHB LLC CAL PUNCH /GO TO USER BULK WRITE RTN JMP INCMD /RET TO COMMAND MODE / RDBULK, CAL READ /GO TO USER BULK READ RTN JMP INCMD /RETURN TO COMMAND MODE / BREAK, CAL ANLYZ /SET UP ADDRESS OF BP LLE LHD JTZ B1 /DETERMINE IF B1 OR B2 CPI 262 JFZ ERR /ERROR IF NEITHER / B2, CAL SETBK /SET UP BP RST COMMAND LMI 176 /**** STORE BP2 FND LA INL LMI 016 /**** STORE BP2 FND PG JMP FINBK /TO REST OF BP SET UP RTN / B1, CAL SETBK /SET UP BP RST COMMAND LMI 112 /**** STORE BP1 FND LA INL LMI 016 /**** STORE BP1 FND PG FINBK, INL LME /STORE BP ORIG LOW ADDR INL LMD /STORE BO ORIG PG ADDR INL LMA /STORE ORIG BP INSTRUCTION JMP INCMD / ANLYZ, LLI 343 /SET PNTR TO BUFF SA CAL OCTNM /FETCH ADDR INTO 166, 167 LLI 341 /RESTORE BUFF SA LAM /GET BP 1 OR 2 COMMAND LLI 166 /GET BP LOW ADDR LEM /INTO "E" INL LDM /AND BP PAGE LLI 156 /PNTR TO JUMP COMMAND LME INL /SET UP JUMP ADDRESS LMD CPI 261 /DETERMINE IF CMND 1 OR 2 RET / SETBK, LAM /SAVE ORIG CONTENTS OF BP LMI 075 /INSERT BP RESTART INSTR LEL /CHANGE POINTERS LDH LHI 000 /SET PAGE 00 LLI 070 /SET PNTR TO RST 1 LOC LMI 104 /STORE JUMP INSTRUCTION INL RET / BRK1, LHI 000 /SET PAGE 00 LLI 200 /CPU REGISTER STORAGE LOCS LMA /SAVE ACCUMULATOR LLI 201 LMB /AND CPU REGS B & C LLI 202 BRKCOM, LMC /WITHOUT DISTURBING FLAGS FLAGAT, LAH /SET UP TEMP REGS LBA LCA JFC NOC /TEST FOR CARRY FLAG LAI 001 /SET 1 IN "A" IF CARRY TRUE NOC, JFZ NOZ /TEST FOR ZERO FLAG LBI 010 /SET 1 IN "B" IF ZERO TRUE NOZ, JFP NOP /TEST FOR PARITY FLAG LCI 100 /SET 1 IN "C" IF PARITY "T" NOP, JFS NOS /TEST FOR SIGN FLAG ADI 200 /SET MSB IF SIGN TRUE NOS, ADB ADC /FORM FLAG STATUS BYTE LLI 207 LMA /STORE FLAG STATUS LLI 073 /PNTR TO ORIG BP LOW ADDDR LEM /GET ORIG LOC OF BP INL LDM /AND ORIG PG OF BP INL LAM /AND ORIG PG OF BP LLE /SET UP ORIGINAL LHD /BREAK POINT POINTERS LMA /RESTORE ORIG BKPNT INSTR JMP INCMD /BACK TO MONITOR / BRK2, LBH /SAVE ORIG VALUE OF H & L LCL LHI 000 /SET PNTR TO PAGE 00 LLI 203 /CPU REGISTER STORAGE LOCS LMD /SAVE REGS D AND E LLI 204 /AS WELL AS ORIG H AND L LME LLI 205 /WITHOUT DISTURBING FLAGS LMB LLI 206 JMP BRKCOM /TO REST OF BREAKPT RTN /* GO TO ROUTINE GOTO, CAL ANLYZ /SET UP ADDR OF GOTO JTZ GO1 /TO SET UP CPU REGS A,B,C CPI 262 JFZ ERR /ERROR IF NOT G1 OR G2 / GO2, LLI 203 /SET UP CPU REGS D,E,H & L LDM INL LEM GOCOM, INL LBM INL LCM LLC LHB JMP 155 000 / GO1, LLI 200 /SET UP CPU REGS A,B,C LAM JMP GOCOM / XREG, LLI 341 /SET INP BFR PNTR LAM /FETCH REG LETTER RGAGN, CPI 301 /IS REG VALID? JTC ERR /NO, PRINT ERROR CPI 306 /YES, IS REG A THRU E? JFC FHL /NO, TRY H, L OR F SUI 101 /SET UP REG TBL PNTR XCOM, LLI 164 /SAVE TBL PNTR IN TEMP STRAGE LMA LLA /SET PNTR TO REG TBL LOC CAL SPAC /PRINT SPACE LAM /FETCH CURRENT REG VALUE CAL OCTOUT /PRINT CURRENT REG VALUE CAL COLON /PRINT COLON CAL INSPCL /INP MODIFICATION LEI 340 /SET INP BFR PNTR LAL CPE /WAS MOD ENTERED? JTZ INCMD /NO, RET TO COMMAND MODE CAL DCDNM /YES, DECODE OCTAL NUMBER LLI 164 /SET PNTR TO TEMP STRAGE LLM /FETCH REG TBL PNTR LMB /STORE NEW REG VALUE JMP INCMD /RET TO COMMAND MODE / FHL, CPI 310 /IS REG = H? JFZ LORF /NO, TRY L OR F LAI 205 /YES, SET REG TBL PNTR JMP XCOM /INP MOD TO REG VALUE / LORF, CPI 314 /IS REG = L? JFZ F /NO, ATRY F LAI 206 /YES, SET REG TBL PNTR JMP XCOM /INP MOD TO REG VALUE / F, CPI 306 /IS REG = F, FOR FLAGS? JFZ ERR /NO, PRINT ERROR CAL SPAC /PRINT SPACE LLI 207 /SET REG TBL PNTR LAM /FETCH FLAG WORD CAL OCTOUT /PRINT FLAG WORD JMP INCMD /RET TO COMMAND MODE / FILL, CAL ADRDTA /INP ADDR AND DATA FM BFR FL1, CAL SETUP /SET UP MEM PNTR LMB /FILL MEM LOC WITH DATA CAL CKEND /DONE? YES, RET TO CMND MODE JMP FL1 /NO, CONTINUE WITH FILL / SEARCH, CAL ADRDTA /INP ADDR AND DATA FM BFR LLI 165 /SET PNTR TO SAVE DATA LMB /SAVE SEARCH DATA IN MEM SH1, LLI 165 /SET PNTR TO SRCH DATA LAM /FETCH SEARCH DATA CAL SETUP /FETCH CONTENTS OF MEM CPM /DATA EQUAL SRCH DATA? CTZ MCONT /YES, PRINT ADDR CAL CKEND /DONE? YES, RET TO CMND MODE JMP SH1 /NO, CONTINUE SEARCH / ADRDTA, LLI 342 /SET PNTR TO ADDR INP CAL OCTNM /INPUT START AND END ADDR INE /INCR TO DATA POSITION JMP DCDNM /FETCH DATA FM INP BFR / TRNSFR, LLI 342 /SET PNTR TO ADDR INP CAL OCTNM /FETCH 'FROM' ADDR LLI 166 /SET PNTR TO ADDR INP LBE /SAVE INP BFR PNT LEI 172 /SAVE 'FROM' IN TEMP STRGE LDH SVSA, CAL SWAP /MOVE ADDR TO TEMP STRGE LAI 172 /IS XFR COMPLETE? CPL JFZ SVSA /NO, CONTINUE MOVE INB LLB /RESTORE INP BFR PNTR CAL OCTNM /INP 'TO' ADDR LLI 176 /SET PNTR TO SAVE 'TO' ADDR LMB /SAVE LO ADDR INL LMC /SAVE PG ADDR LLI 172 /SET PNTR TO TEMP STRGE LEI 166 /SET TO MOVE 'FROM' BACK LDH TF1, CAL SWAP /XFR 'FROM' LAI 176 CPL /XFR COMPLETE? JTZ TF1 /NO, CONTINUE LEM /FETCH 'TO' PNTR INL LDM TF2, CAL SETUP /SET 'FROM' PNTR CAL SWAP /SWAP MEM CONTENTS CAL CKEND /DONE? YES, RET TO CMND MODE JMP TF2 /NO, CONTINUE XFR / SWAP, LAM /FETCH BYTE TO XFR CAL INMEM /INCR 'FROM' PNTR CAL SWITCH /CHANGE PNTRS LMA /STORE BYTE IN NEW LOC CAL INMEM /INCR 'TO' PNTR JMP SWITCH /CHANGE PNTRS AND RET / RCV, /USER DEFINED INPUT ROUTINE /FOR OPERATOR INPUT DEVICE / READ, /USER DEFINED INPUT ROUTINE /FOR BULK STORAGE DEVICE / PRINT, /USER DEFINED OUTPUT ROUTINE /FOR DISPLAY DEVICE / PUNCH, /USER DEFINED OUTPUT ROUTINE /FOR BULK STORAGE DEVICE