NAM PROM MOMITOR ** **ALTAIR 680B PROM MONITOR **ACIA VERSION 1.0 ** MIVEC EQU $100 NMIVEC EQU $104 STRAPS EQU $F002 NOTERM EQU 0 ACIACS EQU $F000 ACIADA EQU $F001 ** **MONITOR STACK AND FLAGS ** ORG $F1 STACK RMB 1 BOTTOM OF MONITOR'S STACK BRKADR RMB 1 BREAKPOINT ADDRESS FLAG ECHO RMB 1 TTY ECHO FLAG EXTFLG RMB 1 ENTENDED CHARACTER FLAG BUFULL RMB 1 BUFFER FULL FLAG SAVSTK RMB 2 TEMP FOR STACK POINTER TEMP RMB 1 TEMPORARY STORAGE BYTECT RMB 1 BYTE COUNT XHI RMB 1 XREG HIGH XLOW RMB 1 XREG LOW SHIFT RMB 1 BAUDOT SHIFT FLAG SAVEX RMB 2 TEMP FOR INDEX RG BUFFER RMB 1 BAUDOT CHARACTER FLAG ** * START OF PROM ** ORG $FF00 ** * INPUT ONE CHAR INTO A-REGISTER * ECHO CHARACTER IF BIT 7 OF ECHO FLAG IS CLEAR ** INCH BSR POLCAT ACIA STATUC TO A REG BCC INCH RECEIVE NOT READY LDA B #$7F MASK FOR PARITY REMOVAL CMP B ECHO CHECK ECHO FLAG AND B ACIADA GET CARACTER BCC OUTCH ECHO RTS NO ECHO ** * THE FOLLOWING NOP LINES LINES UP THE ENTRY * POINTS TO POLCAT IN THE TWO VERSIONS * OF THE MONITOR ** NOP ** * INPUT ONE HEX DIGIT INTO B REG * RETURN TO CALLING PROGRAM IF * CHARACTER RECEIVED IS A HEX * DIGIT. IF NOT HEX, GO TO CRLF ** INHEX BSR INCH GET A CHARACTER SUB B #'0 BMI C1 NOT HEX CMP B #$9 BLE IN1HG NOT HEX CMP B #$11 BMI C1 NOT HEX CMP B #$16 BGT C1 NOT HEX SUB B #7 IT'S A LETTER-GET BCD IN1HG RTS RETURN ** * POLE FOR CHARACTER * SETS CARRY IF CHARACTER IS IN BUFFER * CLOBBERS 8 REG ** POLCAT LDA B ACIACS ACIA STATUS T0 B ASR B ROTATE RDRF BIT INTO CARRY RTS RETURN ** * LOAD PAPER TAPE * LOAD ONLY S1 TYPE RECORDS * TERMINATE ON S9 OR CHECKSUM ERROR ** LOAD BSR INCH READ FRAME SUB B #'S BNE LOAD FIRST CHAR NOT (S) BSR INCH READ FRAME CMP B #'9 BEQ C1 S9 END OF FILE CMP B #'1 BNE LOAD SECOND CHAR NOT (1) CLR A ZERO THE CHECKSUM BSR BYTE READ BYTE SUB B #2 STA B BYTECT BYTE COUNT BSR BADDR GET ADDRESS OF BLOCK LOAD11 BSR BYTE GET DATA BYTE DEC BYTECT DECREMENT BYTE COUNT BEQ LOAD15 DONE WITH THIS BLOCK STA B 0,X STORE DATA INX BUMP POINTER BRA LOAD11 GO BACK FOR MORE LOAD15 INC A INCREMENT CHECKSUM LLOAD BEQ LOAD ALL OK - IT'S ZERO C1 BRA CRLF CHECKSUM ERROR - QUIT ** * READ BYTE (2 HEX DIGITS) * INTO B REG * A IS USED FOR PAPER TAPE CHECKSUM ** BYTE BSR INHEX GET FIRST HEX DIG ASL B GET SHIFT TO HIGH ORDER 4 BITS ASL B ASL B ASL B ABA ADD TO CHEKSUM STA B TEMP STORE DIGIT BSR INHEX GET 2ND HEX DIG ABA ADD TO CHECKSUM ADD B TEMP COMBINE DIGITS TO GET BYTE RTS RETURN ** * READ 16 BIT ADDRESS INTO X * STORE SAME ADDRESS IN XHI & XLO * CLOBBERS B REG ** BADDR BSR BYTE GET HIGH ORDER ADDRESS STA B XHI STORE IT BSR BYTE GET LOW ORDER ADDRESS STA B XLOW STORE IT LDX XHI LOAD X WITH ADDRESS BUILT RTS RETURN ** * PRINT BYTE IN A REG * CLOBBERS B REG ** OUT2H TAB COPY BYTE TO B LSR B SHIFT TO RIGHT LSR B LSR B LSR B BSR OUTHR OUTPUT FIRST DIGIT TAB BYTE INTO B AGAIN OUTHR AND B #$F GET RID OF LEFT DIG ADD B #$30 GET ASCII CMP B #$39 BLS OUTCH ADD B #7 IF IT'S A LETTER ADD 7 NOP LINE UP OUTCH ENTRY POINTS NOP OUTCH FCB $8C USE CPX SKIP TRICK OUTS LDA B #$20 OUTS PRINTS A SPACE ** * OUTCH OUTPUTS CHARACTER IN B ** PSH B SAVE CHAR OUTC1 BSR POLCAT ACIA STATUS TO B REG ASR B BCC OUTC1 XMIT NOT READY PUL B CHAR BACK TO B REG STA B ACIADA OUTPUT CHARACTER RTS ** * EXAMINE AND DEPOSIT NEXT * USES CONTENTS OF XHI & XLO AS POINTER ** NCHANG LDX XHI INCREMENT POINTER INX STX XHI LDA A XHI BSR OUT2H PRINT OUT ADDRESS LDA A XLOW BSR OUT2H FCB $8C USE CPX SKIP TRICK ** * EXAMINE & DEPOSIT ** CHANGE BSR BADDR BUILD ADDRESS BSR OUTS PRINT SPACE LDA A X BYTE INTO A BSR OUT2H PRINT BYTE BSR OUTS PRINT SPACE BSR BYTE GET NEW BYTE STA B 0,X STORE NEW BYTE ** * COMMAND DECODING SECTION ** CRLF LDS SAVSTK LDA B #$D CARRIAGE RETURN BSR OUTCH LDA B #$A LINE FEED BSR OUTCH LDA B #'. PROMPT CHARACTER BSR OUTCH JSR INCH READ CHARACTER TBA MAKE A COPY BSR OUTS PRINT SPACE CMP A #'L BEQ LLOAD LOAD PAPER TAPE CMP A #'J BNE NOTJ BSR BADDR GET ADDRESS TO JUMP TO JMP 0,X JUMP TO IT NOTJ CMP A #'M BEQ CHANGE EXAMINE & DEPOSIT CMP A #'N BEQ NCHANG E & D NEXT CMP A #'P BNE CRLF RTI PROCEDE FROM BREAKPOINT ** * RESET ENTRY POINT ** RESET LDS #ECHO INITIALIZE STACK POINTER LDA B #3 INIT ECHO AND BRKADR FLAGS PSH B PSH B STA B ACIACS MASTER RESET ACIA LDA B STRAPS LOOK AT STRAPS BMI NOTERM NO TERM - JUMP TO 0 AND B #4 GET # OF STOP BITS ORA B #$D1 STA B ACIACS INIT ACIA PORT ** * SOFTWARE INTERRUPT ENTRY POINT ** INTRPT STS SAVSTK SAVE STACK POINTER STS XHI SAVE SP FOR N COMMAND LDA B BRKADR IF BIT 7 OF BRKADR IS SET BMI NOTERM JUMP TO 0 BRA CRLF GOTO COMMAND DECODER ** * NOW COME THE INTERRUPT VECTORS ** ORG $FFF8 FDB MIVEC MI VECTOR FDB INTRPT SWI VECTOR FDB NMIVEC NMI VECTOR FDB RESET RESET VECTOR END