NAM CALC-1 *A DRIVER ROUTINE FOR THE MP-N BOARD JAN 28 1979 OPT PAG ORG $0080 FCB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F FCB $0F,$0F,$0F,$0F,$0F,$21,$0F,$0F FCB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F FCB $2F,$0F,$0F,$0F,$0F,$0F,$0F,$0F FCB $21,$0F,$0F,$0F,$0F,$0F,$0F,$0F FCB $0F,$0F,$3B,$39,$0F,$3A,$0A,$3C FCB $00,$01,$02,$03,$04,$05,$06,$07 FCB $08,$09,$0F,$0F,$0F,$0F,$22,$0F FCB $0F,$1B,$36,$25,$2D,$0B,$2C,$1C FCB $1D,$20,$0F,$0F,$0F,$18,$35,$23 FCB $0D,$33,$37,$24,$26,$32,$34,$31 FCB $30,$2B,$0C,$0F,$0F,$0F,$38,$0F FCB $0F,$0F,$36,$25,$2D,$0B,$2C,$1C FCB $1D,$20,$0F,$0F,$0F,$18,$35,$23 FCB $0D,$33,$37,$24,$26,$32,$34,$31 FCB $30,$2B,$0C,$0F,$0F,$0F,$0F,$0F ORG $0100 START LDS #$A047 DECREMENT STACK LDX #CLRSCN JSR PDATA1 CLEAR AND TITLE TERM LDX PARADR BSR INITAL BRA COMAND INITAL LDA A #$7F INIT A SIDE OF PIA STA A 0,X LDA A #$36 HIGH HOLD-POS READY STA A 1,X LDA A #$00 INIT B SIDE OF PIA STA A 2,X LDA A #$34 NEG R/W STA A 3,X LDA A 2,X CLEAR R/W FLAG RTS COMAND JSR INEEE GET OPERATOR DATA ORA A #$80 POSITION TO TOP OF TABLE STA A POINT+1 POINT LDA A $00 SELF MODIFING CODE CMP A #$21 BEQ ZERMEM BSR OUTINS BRA CHRCHK OUTINS LDA B 1,X WAIT FOR READY BPL OUTINS STA A 0,X FORWARD INSTRUCTION TO CALC LDA B 0,X CLEAR FLAG BIT LDA B #$3C LOW HOLD-NEG READY STA B 1,X BRING HOLD LINE LOW WAIT10 LDA B 1,X BPL WAIT10 LOOP FOR READY LOW LDA B 0,X CLEAR FLAG BIT LDA B #$36 HIGH HOLD-POS READY STA B 1,X RETURN HOLD LINE HIGH RTS CHRCHK CMP A #$2F BNE SKIP75 CLR FORMAT SKIP75 TST SMDC CHECK FOR PREVIOUS SMDC INSTR BNE ZERMEM CONT50 CMP A #$0F BEQ COMAND GET MOR DATA IF NOP CMP A #$18 BNE SKIP25 COM SMDC BRA COMAND GET MORE DATA IF SMDC SKIP25 CMP A #$20 BEQ COMAND GET MORE DATA IF INV CMP A #$0B BLS COMAND GET MORE DATA IF NUMBERS CMP A #$22 LOOK FOR TOGM BNE ZERMEM COM FORMAT ZERMEM CLR SMDC ZERO SMDC BSR SETMEM BRA LODADR SETMEM CLR $20 CLEAR $0020 LDX #$20 BOTTOM OF BUFFER LDA B #$20 LOOP1 INX STA B 0,X STORE A SPACE CPX #$2B CHEXC FOR TOP OF BUFFER BNE LOOP1 RTS LODADR LDX PARADR BSR OUTANS BRA OUTCHR OUTANS LDA B 1,X BPL OUTANS LDA A 0,X CLEAR FLAG BIT LDA A #$16 SEND AN OUT STA A 0,X LDA B #$3E LOW HOLD-POS READY STA B 1,X BRING HOLD LINE LOW WAIT30 LDA B 1,X WAIT FOR SECOND READY BPL WAIT30 LDA B 0,X CLEAR FLAG BIT LDA A #$0F STA A 0,X SEND A NOP WAIT3 LDA B 3,X LOOK FOR R/W STROBE BMI OUTDIG TRANSFER CALC DATA INTO MEMORY LDA B 1,X LOOK FOR READY STROBE BMI CONFLG PRINT MEMORY CONTENTS BRA WAIT3 OUTDIG LDA A 2,X LOAD OUT DATA INTO A TAB AND A #$0F ELIMINATE UPPER 4 BITS ORA A #$30 CONVERT TO ASCII DATA LSR B LSR B LSR B LSR B ORA B #$20 INCREMENT ADDRESSES BY $20 STA B POINT2+1 STORE OUT DATA SEQUENTIALLY POINT2 STA A $0 SELF MODIFING CODE BRA WAIT3 CONFLG LDA A #$36 HIGH HOLD-POS READY STA A 1,X BRING HOLD LINE HIGH LDA A 0,X CLEAR FLAG BIT RTS OUTCHR BPL CONT1 SKIP IF NO ERROR WAIT70 LDA B 1,X WAIT FOR READY BPL WAIT70 LDA A #$2B ERROR CLEAR INSTRUCTION STA A 0,X LDA B 0,X CLEAR FLAG BIT LDA B #$3C LOW HOLD-NEG READY STA B 1,X BRING HOLD LOW WAIT71 LDA B 1,X BPL WAIT71 LDA B 0,X CLEAR FLAG BIT LDA B #$36 HIGH HOLD-POS READY STA B 1,X RETURN HOLD HIGH LDX #ERRMSG JSR PDATA1 CONT1 LDX #CRLF JSR PDATA1 TST FORMAT BMI SCINOT FLOPNT LDX #$22 FLOTING POINT NOTATION LDA A 0,X INPUT MANTISSA SIGN DATA AND A #$08 MASK BIT 4 BNE MINPNT LDA A #$20 LOAD A SPACE BRA PRINT1 MINPNT LDA A #$2D LOAD MINUS PRINT1 JSR OUTEEE PRINT CHARACTER DPIND INX LDA B 0,X AND B #$0F STA B 0,X LDA B #$2F SUB B 0,X STA B $21 STORE DEC PT POSITION IND DIGLOP INX LDA A 0,X JSR OUTEEE OUTPUT ASCII NUMBER CPX $20 TIME FOR DEC PT BNE ENDCH1 LDA A #$2E JSR OUTEEE ENDCH1 CPX #$2B CHECK FOR LAST DIGIT BNE DIGLOP GET NEXT DIGIT LDX #CRLF JSR PDATA1 PRINT CR/LF LDX PARADR JMP COMAND SCINOT LDA A $22 SCIENTIFIC NOTATION AND A #$08 LOOK FOR NEGATIVE MANTISSA BNE NEGPNT LDA A #$20 SPACE IF NOT BRA PRINT2 NEGPNT LDA A #$2D PRINT2 JSR OUTEEE PRINT SIGN LDX #$23 NUMLOP INX LDA A 0,X JSR OUTEEE CPX #$24 LOOK FOR DEC PT DIGIT BNE SKIPDP LDA A #$2E JSR OUTEEE PRINT DEC PT SKIPDP CPX #$2B CHECK FOR LAST DIGIT BNE NUMLOP LDA A #$45 JSR OUTEEE PRINT AN E LDA A $22 LOAD SIGN BYTE AND A #$01 BEQ SKPSGN LDA A #$2D JSR OUTEEE PRINT A - SKPSGN LDA A $20 JSR OUTEEE PRINT EXPONENT MSD LDA A $21 JSR OUTEEE PRINT EXPONENT LSD LDX #CRLF JSR PDATA1 PRINT CR/LF LDX PARADR JMP COMAND CLRSCN FCB $0D,$0A,$10,$16,$00 FCC /SWTPC 6800 CALC-1 CALCULATOR/ CRLF FCB $0D,$0A,$00,$00,$00,$04 FORMAT FCB $00 SMDC FCB $00 ERRMSG FCB $0D,$0A,$00,$00 FCC /ERROR/ FCB $04 PDATA1 EQU $E07E PARADR EQU $A002 INEEE EQU $E1AC OUTEEE EQU $E1D1 ORG $A002 FDB $800C END START