; MACRO LIBRARY ; .TITLE PUSH REGISTERS ONTO STACK .MACRO PUSH MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) MOV R5,-(SP) .ENDM ; .TITLE POP REGISTERS FROM STACK .MACRO POP MOV (SP)+,R5 MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 .ENDM ; ; DISPLAY MACROS: THESE MACROS DISPLAY 16-BIT VALUES IN VARIOUS FORMATS. ; .TITLE DISPLAY WORD A ON TTY: IN OCTAL WITH .MACRO OCTDIS A .MCALL .TTYOUT,PUSH,POP .PSECT PUSH MOV A,R1 CLR R0 MOV #12,R0 .TTYOUT BIT #100000,R1 BEQ 1$ MOVB #61,R0 .TTYOUT BR 2$ 1$: MOVB #60,R0 .TTYOUT 2$: BIC #107777,R1 CLC ROL R1 ROL R1 ROL R1 ROL R1 ROL R1 CLC CLR R0 ADD #60,R1 MOVB R1,R0 .TTYOUT MOV A,R1 BIC #170777,R1 CLC SWAB R1 ROR R1 CLC CLR R0 ADD #60,R1 MOVB R1,R0 .TTYOUT MOV A,R1 BIC #177077,R1 CLC ROR R1 ROR R1 ROR R1 ROR R1 ROR R1 ROR R1 CLR R0 ADD #60,R1 MOVB R1,R0 .TTYOUT MOV A,R1 BIC #177707,R1 CLC ROR R1 ROR R1 ROR R1 CLR R0 ADD #60,R1 MOVB R1,R0 .TTYOUT MOV A,R1 BIC #177770,R1 CLR R0 ADD #60,R1 MOVB R1,R0 .TTYOUT MOV #11,R0 .TTYOUT DEC 5$ BNE 6$ MOV #10,5$ MOV #15,R0 .TTYOUT 6$: BR 7$ 5$: .WORD 10 7$: POP ; .ENDM ; .TITLE DISPLAY WORD A ON TTY: IN OCTAL WITHOUT .MACRO OCTDNR A .MCALL .TTYOUT,PUSH,POP .PSECT PUSH MOV A,R1 CLR R0 BIT #100000,R1 BEQ 1$ MOVB #61,R0 .TTYOUT BR 2$ 1$: MOVB #60,R0 .TTYOUT 2$: BIC #107777,R1 CLC ROL R1 ROL R1 ROL R1 ROL R1 ROL R1 CLC CLR R0 ADD #60,R1 MOVB R1,R0 .TTYOUT MOV A,R1 BIC #170777,R1 CLC SWAB R1 ROR R1 CLC CLR R0 ADD #60,R1 MOVB R1,R0 .TTYOUT MOV A,R1 BIC #177077,R1 CLC ROR R1 ROR R1 ROR R1 ROR R1 ROR R1 ROR R1 CLR R0 ADD #60,R1 MOVB R1,R0 .TTYOUT MOV A,R1 BIC #177707,R1 CLC ROR R1 ROR R1 ROR R1 CLR R0 ADD #60,R1 MOVB R1,R0 .TTYOUT MOV A,R1 BIC #177770,R1 CLR R0 ADD #60,R1 MOVB R1,R0 .TTYOUT MOV #11,R0 .TTYOUT DEC 5$ BNE 6$ MOV #10,5$ 6$: BR 7$ 5$: .WORD 10 7$: POP ; .ENDM ; ; DISPLAY # IN A IN DECIMAL FORMAT -32776 TO 32777 WITH AFTER # .TITLE DECDIS.MAC .MACRO DECDIS A .MCALL .TTYOUT,PUSH,POP .PSECT ; PUSH ;SAVE REGISTERS MOV A,R1 MOV A,R2 ;SAVE # FOR LATER RESTORATION MOV #12,R0 .TTYOUT MOV #10000.,R3 CLR R4 MOV #5,R5 ;5 DIGITS BIT #100000,R1 BEQ 1$ MOV #45.,R0 .TTYOUT ;PRINT - SIGN IF NECESSARY NEG A ;TWO'S COMPLEMENT THE NUMBER TO BE DISPLAYED 1$: CLR R0 MOV A,R1 DIV R3,R0 BIT #1,R4 BNE 3$ CMP #0,R0 BEQ 2$ 3$: ADD #60,R0 .TTYOUT MOV #1,R4 2$: MOV R1,A CLR R0 MOV R3,R1 DIV #10.,R0 MOV R0,R3 DEC R5 BEQ 4$ JMP 1$ 4$: BIT #1,R4 BNE 5$ MOV #60,R0 .TTYOUT ;A=0 PRINT A ZERO 5$: MOV #15,R0 .TTYOUT 6$: MOV R2,A ;RESTORE ORIGINAL # POP ;RESTORE REGISTERS .ENDM ; ; DISPLAY # IN A IN DECIMAL FORMAT -32776 TO 32777 WITHOUT AFTER # .TITLE DECDNR.MAC .MACRO DECDNR A .MCALL .TTYOUT,PUSH,POP .PSECT ; PUSH ;SAVE REGISTERS MOV A,R1 MOV A,R2 ;SAVE # FOR LATER RESTORATION MOV #10000.,R3 CLR R4 MOV #5,R5 ;5 DIGITS BIT #100000,R1 BEQ 1$ MOV #45.,R0 .TTYOUT ;PRINT - SIGN IF NECESSARY NEG A ;TWO'S COMPLEMENT THE NUMBER TO BE DISPLAYED 1$: CLR R0 MOV A,R1 DIV R3,R0 BIT #1,R4 BNE 3$ CMP #0,R0 BEQ 2$ 3$: ADD #60,R0 .TTYOUT MOV #1,R4 2$: MOV R1,A CLR R0 MOV R3,R1 DIV #10.,R0 MOV R0,R3 DEC R5 BEQ 4$ JMP 1$ 4$: BIT #1,R4 BNE 6$ MOV #60,R0 .TTYOUT 6$: MOV R2,A ;RESTORE ORIGINAL # POP ;RESTORE REGISTERS .ENDM ; ; DISPLAY # IN A IN BINARY FORMAT ON TT: WITH .TITLE BINDIS.MAC .MACRO BINDIS A .MCALL .TTYOUT,PUSH,POP .PSECT ; PUSH ;SAVE REGISTERS MOV A,R1 ;R1<-- WORD A MOV #12,R0 ;ASCII FOR .TTYOUT ;PRINT MOV #20,R3 ;R3 COUNTS # OF BITS IN WORD MOV #1,R4 ;R4 COUNTS # OF BITS TO DISPLAY BEFORE A SPACE 4$: CLC ASL R1 ;SHIFT BIT 15 INTO CARRY BCS 1$ MOV #60,R0 ;ASCII FOR 0 .TTYOUT ;PRINT A ZERO BR 2$ 1$: MOV #61,R0 ;ASCII FOR 1 .TTYOUT ;PRINT A ONE 2$: DEC R4 ;SHOULD WE PRINT A SPACE? BNE 3$ ;NO IF RESULT .NE. 0 MOV #40,R0 ;ASCII FOR SPACE .TTYOUT ;PRINT A SPACE MOV #3,R4 ;PRINT ANOTHER SPACE AFTER NEXT 3 BITS DISPLAYED 3$: DEC R3 ;HAVE WE EXAMINED ALL 16 BITS? BNE 4$ ;NO - TEST FOR NEXT BIT MOV #15,R0 ;ASCII FOR .TTYOUT ;PRINT POP ;RESTORE REGISTERS .ENDM ; ; DISPLAY # IN A IN BINARY FORMAT ON TT: WITH NO .TITLE BINDNR.MAC .MACRO BINDNR A .MCALL .TTYOUT,PUSH,POP .PSECT ; PUSH ;SAVE REGISTERS MOV A,R1 ;R1<-- WORD A MOV #20,R3 ;R3 COUNTS # OF BITS IN WORD MOV #1,R4 ;R4 COUNTS # OF BITS TO DISPLAY BEFORE A SPACE 4$: CLC ASL R1 ;SHIFT BIT 15 INTO CARRY BCS 1$ MOV #60,R0 ;ASCII FOR 0 .TTYOUT ;PRINT A ZERO BR 2$ 1$: MOV #61,R0 ;ASCII FOR 1 .TTYOUT ;PRINT A ONE 2$: DEC R4 ;SHOULD WE PRINT A SPACE? BNE 3$ ;NO IF RESULT .NE. 0 MOV #40,R0 ;ASCII FOR SPACE .TTYOUT ;PRINT A SPACE MOV #3,R4 ;PRINT ANOTHER SPACE AFTER NEXT 3 BITS DISPLAYED 3$: DEC R3 ;HAVE WE EXAMINED ALL 16 BITS? BNE 4$ ;NO - TEST FOR NEXT BIT POP ;RESTORE REGISTERS .ENDM ; ; DISPLAY # IN A IN HEXADECIMAL WITH .TITLE HEXDIS.MAC - DISPLAY IN HEXIDECIMAL .MACRO HEXDIS A .MCALL .TTYOUT,PUSH,POP .PSECT ; PUSH MOV #12,R0 .TTYOUT CLR R2 CLR R3 CLR R4 CLR R5 MOVB A,R5 MOVB A,R4 MOVB A+1,R3 MOVB A+1,R2 BIC #177760,R5 BIC #177417,R4 CLC ROR R4 ROR R4 ROR R4 ROR R4 BIC #177760,R3 BIC #177417,R2 CLC ROR R2 ROR R2 ROR R2 ROR R2 MOV R2,R0 JSR PC,4$ MOV R3,R0 JSR PC,4$ MOV R4,R0 JSR PC,4$ MOV R5,R0 JSR PC,4$ JMP 1$ 4$: CMP #10.,R0 BLE 2$ ADD #48.,R0 JMP 3$ 2$: ADD #55.,R0 3$: .TTYOUT RTS PC 1$: MOV #15,R0 .TTYOUT POP .ENDM ; ; DISPLAY # IN A IN HEXADECIMAL WITH NO .TITLE HEXDNR.MAC - DISPLAY IN HEXIDECIMAL .MACRO HEXDNR A .MCALL .TTYOUT,PUSH,POP .PSECT ; PUSH CLR R2 CLR R3 CLR R4 CLR R5 MOVB A,R5 MOVB A,R4 MOVB A+1,R3 MOVB A+1,R2 BIC #177760,R5 BIC #177417,R4 CLC ROR R4 ROR R4 ROR R4 ROR R4 BIC #177760,R3 BIC #177417,R2 CLC ROR R2 ROR R2 ROR R2 ROR R2 MOV R2,R0 JSR PC,4$ MOV R3,R0 JSR PC,4$ MOV R4,R0 JSR PC,4$ MOV R5,R0 JSR PC,4$ JMP 1$ 4$: CMP #10.,R0 BLE 2$ ADD #48.,R0 JMP 3$ 2$: ADD #55.,R0 3$: .TTYOUT RTS PC 1$: POP .ENDM ; ; SEND ASCII CHARACTERS TO TTY: .MACRO TTYO A .MCALL .TTYOUT,PUSH,POP .PSECT ; PUSH MOV A,R1 1$: MOVB (R1)+,R0 CMP #0,R0 BEQ 2$ .TTYOUT BR 1$ 2$: POP .ENDM