.NLIST ; ; UTLMAC-1.SML - A MACRO LIBRARY OF USEFUL MACROS ; .MACRO CALL ADDR JSR PC,ADDR .ENDM CALL .MACRO RET RTS PC .ENDM RET .MACRO $PUSH A1,A2,A3,A4,A5,A6,A7,A8 .IF B A1 .ERROR ;NO ARGUMENTS TO $PUSH MACRO CALL .MEXIT .ENDC MOV A1,-(SP) .IF B A2 .MEXIT .ENDC MOV A2,-(SP) .IF B A3 .MEXIT .ENDC MOV A3,-(SP) .IF B A4 .MEXIT .ENDC MOV A4,-(SP) .IF B A5 .MEXIT .ENDC MOV A5,-(SP) .IF B A6 .MEXIT .ENDC MOV A6,-(SP) .IF B A7 .MEXIT .ENDC MOV A7,-(SP) .IF NB A8 .ERROR ;TOO MANY ARGUMENTS TO $PUSH MACRO .ENDC .ENDM $PUSH .MACRO $POP A1,A2,A3,A4,A5,A6,A7,A8 .IF B A1 .ERROR ;NO ARGUMENTS TO $POP MACRO CALL .MEXIT .ENDC MOV (SP)+,A1 .IF B A2 .MEXIT .ENDC MOV (SP)+,A2 .IF B A3 .MEXIT .ENDC MOV (SP)+,A3 .IF B A4 .MEXIT .ENDC MOV (SP)+,A4 .IF B A5 .MEXIT .ENDC MOV (SP)+,A5 .IF B A6 .MEXIT .ENDC MOV (SP)+,A6 .IF B A7 .MEXIT .ENDC MOV (SP)+,A7 .IF NB A8 .ERROR ;TOO MANY ARGUMENTS TO $POP MACRO .ENDC .ENDM $POP .MACRO $LOOP REG,LABEL SOB REG,LABEL .ENDM $LOOP .MACRO $LABEL LBL,NUM LBL'NUM:: .ENDM .MACRO $ASSGN LABEL,OFFSET .LIST LABEL = OFFSET .NLIST .ENDM .MACRO BYTE LABEL .NLIST .IF NB, LABEL $ASSGN LABEL,\..OFST .ENDC ..OFST = ..OFST+1 .LIST .ENDM .MACRO WORD LABEL .NLIST .IF NE, ..OFST&1 ;ODD ADDRESS? .ERROR ..OFST ;WORD FIELD ALIGNMENT ERROR .ENDC .IF NB, LABEL $ASSGN LABEL,\..OFST .ENDC ..OFST = ..OFST+2 .LIST .ENDM .MACRO DWORD LABEL .NLIST .IF NE, ..OFST&1 ;ODD ADDRESS? .ERROR ..OFST ;DOUBLE WORD ALIGNMENT ERROR .ENDC .IF NB, LABEL $ASSGN LABEL,\..OFST .ENDC ..OFST = ..OFST+4 .LIST .ENDM .MACRO BUFFER LABEL,LENGTH .NLIST $ASSGN LABEL,\..OFST ..OFST = ..OFST+ .LIST .ENDM .LIST