; () MODULE: MACLIB.MAC ; ; () PROCEDURE: MACLIB ; ; DESCRIPTION TO BE SUPPLIED ; ; () END .NLIST ;NOTICE IF ..LIT. IS UNDEFINED, PUSH AND PULL WILL GENERATE ;CALLS TO S.RSAV AND S.RRES RATHER THAN INLINE CODE. THIS WILL ;SAVE CODE BUT WILL PUSH AND POP REGS IN ORDER R5...R0 RATHER ;THAN R0...R5. COULD CAUSE PROBLEMS. S.RSAV AND S.RRES ARE LOCATED ;IN GTLIN.MAC FILE. ..LIT.=0 .MACRO MACLIB .LIST .MCALL SOB,PUSH,PULL,CALL,MEM,SKIP .MCALL IF,ENDIF,ELSE,ENDELSE,SKIPIF,IFNOT .MCALL DOWHILE,ENDDO,DOIF,DOUNLESS .NLIST MEB .NLIST .MCALL .CLOCK,.UPCK,IF$1,IF$2,IF$3,IF$7 IF$5=48. IF$4=96. IF$17=0 IF$16=0 IF$15=0 IF$14=0 IF$13=0 IF$12=0 IF$11=0 IF$10=0 IF$9=0 IF$6=0 .ENDM ;NOTE USE OF BGT BELOW TO GUARD AGAINST WILD INDICES .MACRO SOB REG,WHERE DEC REG .IF NDF,..LIT. BGT WHERE .IFF BNE WHERE .ENDC .ENDM .MACRO PUSH .A .MCALL .PUSH .IF DF,..LIT. .IIF B <.A> .PUSH .IFF .IIF B <.A> JSR R5,S.RSAV .ENDC .IIF NB <.A> .PUSH <.A> .ENDM .MACRO .PUSH .A .IRP SYM,<.A> MOV SYM,-(SP) .ENDM .ENDM .MACRO PULL .A .MCALL .PULL .IF DF,..LIT. .IIF B <.A> .PULL .IFF .IIF B <.A> JSR R5,S.RRES .ENDC .IIF NB <.A> .PULL <.A> .ENDM .MACRO .PULL .A .IRP SYM,<.A> MOV (SP)+,SYM .ENDM .ENDM .MACRO CALL .A,.B,.C .IF B <.B> JSR PC,.A .MEXIT .ENDC MOV R5,-(SP) .NTYPE .S1,.B .IF NE,.S1-67 MOV .B,R5 .IFF MOV #.B,R5 .ENDC .IRP .S2,<.C> .IF B <.S2> CLR (R5)+ .IFF .NTYPE .S1,.S2 .IF NE,.S1-67 MOV .S2,(R5)+ .IFF MOV #.S2,(R5)+ .ENDC .ENDC .ENDM .NTYPE .S1,.B .IF NE,.S1-67 MOV .B,R5 .IFF MOV #.B,R5 .ENDC JSR PC,.A MOV (SP)+,R5 .ENDM .MACRO MEM .A .IRP .S1,<.A> .S1: .WORD 0 .ENDM .ENDM .MACRO .CLOCK .A,.B TSTB L'.A'CK(R4) BNE .B TSTB .A'CK(R4) BEQ .B .ENDM .MACRO .UPCK .A MOVB .A'CK(R4),L'.A'CK(R4) .ENDM .MACRO IF .A,.B,.C,.D IF$5=IF$5+1 IF$17=IF$16 IF$16=IF$15 IF$15=IF$14 IF$14=IF$13 IF$13=IF$12 IF$12=IF$11 IF$11=IF$10 IF$10=IF$9 IF$9=IF$6 IF$6=IF$4 IF$4=IF$5*2-1 IF$1 .A,.B,.C,.D,\IF$4 .ENDM .MACRO IF$1 .A,.B,.C,.D,.E .IF NB <.C> CMP'.D .A,.C .IFF .IF NB <.B> TST'.D .A .ENDC .ENDC .IF NB <.B> B'.B .+6 .IFF B'.A .+6 .ENDC JMP .E'$ .ENDM .MACRO ENDIF IF$2 \IF$4 IF$4=IF$6 IF$6=IF$9 IF$9=IF$10 IF$10=IF$11 IF$11=IF$12 IF$12=IF$13 IF$13=IF$14 IF$14=IF$15 IF$15=IF$16 IF$16=IF$17 .ENDM .MACRO IF$2 A .LIST A'$: .NLIST .ENDM .MACRO ELSE IF$8=IF$4+1 IF$3 \IF$4,\IF$8 IF$4=IF$8 .ENDM .MACRO IF$3 A,B JMP B'$ .LIST A'$: .NLIST .ENDM .MACRO ENDELSE ENDIF .ENDM .MACRO SKIP .A B'.A .+6 .ENDM .MACRO IFNOT .A,.B,.C,.D IF$5=IF$5+1 IF$17=IF$16 IF$16=IF$15 IF$15=IF$14 IF$14=IF$13 IF$13=IF$12 IF$12=IF$11 IF$11=IF$10 IF$10=IF$9 IF$9=IF$6 IF$6=IF$4 IF$4=IF$5*2-1 IF$7 .A,.B,.C,.D,\IF$4 .ENDM .MACRO IF$7 .A,.B,.C,.D,.E .IF NB <.C> CMP'.D .A,.C .IFF .IF NB <.B> TST'.D .A .ENDC .ENDC .IF NB <.B> B'.B .E'$ .IFF B'.A .E'$ .ENDC .ENDM .MACRO SKIPIF .A,.B,.C,.D IFNOT .A,.B,.C,.D .ENDM .MACRO DOWHILE .A,.B,.C,.D IF$8=IF$5*2+2 IF$2 \IF$8 IF .A,.B,.C,.D .ENDM .MACRO ENDDO ELSE IF$4=IF$6 IF$6=IF$9 IF$9=IF$10 IF$10=IF$11 IF$11=IF$12 IF$12=IF$13 IF$13=IF$14 IF$14=IF$15 IF$15=IF$16 IF$16=IF$17 .ENDM .MACRO DOIF .A,.B,.C,.D IF$8=IF$5*2+2 IF$2 \IF$8 IF .A,.B,.C,.D .ENDM .MACRO DOUNLESS .A,.B,.C,.D IF$8=IF$5*2+2 IF$2 \IF$8 SKIPIF .A,.B,.C,.D .ENDM ; THIS MACRO LIBRARY SOURCE CONTAINS ; ALL THE SKIPIF MACROS .MACRO MACLIB .MCALL SOB,PUSH,PULL,CALL,MEM,SKIP .MCALL IF,ENDIF,ELSE,ENDELSE,SKIPIF .MCALL DOWHILE,ENDDO,DOIF,DOUNLESS .MCALL OR,AND .LIST MEB .MCALL IF$1,IF$2,IF$3,IF$7 IF$5=48. IF$4=96. IF$17=0 IF$16=0 IF$15=0 IF$14=0 IF$13=0 IF$12=0 IF$11=0 IF$10=0 IF$9=0 IF$6=0 .ENDM .MACRO SIM .MCALL MACLIB .MCALL IFCK,IFCLOCK,UPCK,OUTPUT,INPUT .MCALL ENDCK,IFCKN,START,VERSION .IF NDF .PIN .NPINS=1 .IFF .NPINS=.PIN .ENDC .PIN=1 .MCALL .DEF,.CKDEF,.LCKDEF MACLIB .ENDM .MACRO CALL .A,.B,.C .IF B <.B> JSR PC,.A .MEXIT .ENDC MOV R5,-(SP) .NTYPE .S1,.B .IF NE,.S1-67 MOV .B,R5 .IFF MOV #.B,R5 .ENDC .IRP .S2,<.C> .IF B <.S2> CLR (R5)+ .IFF .NTYPE .S1,.S2 .IF NE,.S1-67 MOV .S2,(R5)+ .IFF MOV #.S2,(R5)+ .ENDC .ENDC .ENDM .NTYPE .S1,.B .IF NE,.S1-67 MOV .B,R5 .IFF MOV #.B,R5 .ENDC JSR PC,.A MOV (SP)+,R5 .ENDM .MACRO MEM .A .IRP .S1,<.A> .S1: .WORD 0 .ENDM .ENDM .MACRO IFCLOCK .A IFCK <.A> .ENDM .MACRO IFCK .A IF L'.A'CK(R5),EQ,,B IF .A'CK(R5),NE,,B .ENDM .MACRO UPCK .A MOVB .A'CK(R5),L'.A'CK(R5) .ENDM .MACRO IF .A,.B,.C,.D IF$5=IF$5+1 IF$17=IF$16 IF$16=IF$15 IF$15=IF$14 IF$14=IF$13 IF$13=IF$12 IF$12=IF$11 IF$11=IF$10 IF$10=IF$9 IF$9=IF$6 IF$6=IF$4 IF$4=IF$5*2-1 IF$1 .A,.B,.C,.D,\IF$4 .ENDM .MACRO AND .A,.B,.C,.D IF$1 .A,.B,.C,.D,\IF$4 .ENDM .MACRO IF$1 .A,.B,.C,.D,.E .IF NB <.C> CMP'.D .A,.C .IFF .IF NB <.B> TST'.D .A .ENDC .ENDC .IF NB <.B> B'.B .+6 .IFF B'.A .+6 .ENDC JMP .E'$ .ENDM .MACRO ENDIF IF$2 \IF$4 IF$4=IF$6 IF$6=IF$9 IF$9=IF$10 IF$10=IF$11 IF$11=IF$12 IF$12=IF$13 IF$13=IF$14 IF$14=IF$15 IF$15=IF$16 IF$16=IF$17 .ENDM .MACRO IF$2 A .LIST A'$: .NLIST .ENDM .MACRO ELSE IF$8=IF$4+1 IF$3 \IF$4,\IF$8 IF$4=IF$8 .ENDM .MACRO IF$3 A,B JMP B'$ .LIST A'$: .NLIST .ENDM .MACRO ENDELSE ENDIF .ENDM .MACRO SKIP .A B'.A .+6 .ENDM .MACRO SKIPIF .A,.B,.C,.D IF$5=IF$5+1 IF$17=IF$16 IF$16=IF$15 IF$15=IF$14 IF$14=IF$13 IF$13=IF$12 IF$12=IF$11 IF$11=IF$10 IF$10=IF$9 IF$9=IF$6 IF$6=IF$4 IF$4=IF$5*2-1 IF$7 .A,.B,.C,.D,\IF$4 .ENDM .MACRO OR .A,.B,.C,.D IF$7 .A,.B,.C,.D,\IF$4 .ENDM .MACRO IF$7 .A,.B,.C,.D,.E .IF NB <.C> CMP'.D .A,.C .IFF .IF NB <.B> TST'.D .A .ENDC .ENDC .IF NB <.B> B'.B .E'$ .IFF B'.A .E'$ .ENDC .ENDM .MACRO DOWHILE .A,.B,.C,.D IF$8=IF$5*2+2 IF$2 \IF$8 IF .A,.B,.C,.D .ENDM .MACRO ENDDO ELSE IF$4=IF$6 IF$6=IF$9 IF$9=IF$10 IF$10=IF$11 IF$11=IF$12 IF$12=IF$13 IF$13=IF$14 IF$14=IF$15 IF$15=IF$16 IF$16=IF$17 .ENDM .MACRO DOIF .A,.B,.C,.D IF$8=IF$5*2+2 IF$2 \IF$8 IF .A,.B,.C,.D .ENDM .MACRO DOUNLESS .A,.B,.C,.D IF$8=IF$5*2+2 IF$2 \IF$8 SKIPIF .A,.B,.C,.D .ENDM .MACRO OUTPUT .A .IRP .S1,<.A> CLRB .S1(R5) ASR R0 ROLB .S1(R5) .ENDM .ENDM .MACRO INPUT .A CLR R0 .IRP .S1,<.A> ASRB .S1(R5) ROL R0 .ENDM .ENDM .MACRO ENDCK ENDIF ENDIF .ENDM .MACRO IFCKN .A IF L'.A'CK,NE,,B IF .A'CK,EQ,,B .ENDM .MACRO START .A .IF NB <.A> .LIST .A:: .NLIST .ENDC MOV @2(R5),R5 DEC R5 .ENDM .MACRO LOAD .A,.B .IF B .B MOV .A(R5),R0 .IFF MOV .A(R5),.B .ENDC .ENDM .MACRO STORE .A,.B .IF B .B MOV R0,.A(R5) .IFF MOV .A,.B(R5) .ENDC .ENDM .MACRO .DEF .A,.B .LIST .A=.B .NLIST .ENDM .MACRO .CKDEF .A,.B .LIST .A'CK=.B .NLIST .ENDM .MACRO .LCKDEF .A,.B .LIST L'.A'CK=.B .NLIST .ENDM .MACRO VERSION .A VERSN=.A .ENDM .MACRO OCOUTPUT .A .IRP .S1,<.A> CLRB .S1(R5) ASR R0 BCC .+6 DECB .S1(R5) .ENDM .ENDM ;OLD MACROS FROM DOS-11 DISK FOR MATH FUNCTIONS .MACRO ASHR A,B,?C MOV R0,-(SP) MOV A,R0 C: ASR B DEC R0 BNE C MOV (SP)+,R0 .ENDM .MACRO ASHL A,B,?C MOV R0,-(SP) MOV A,R0 C: ASL B DEC R0 BNE C MOV (SP)+,R0 .ENDM .MACRO MULT A,B,C,?D,?E,?F MOV A,E MOV B,F JSR R5,MULT BR D E: .WORD 0 F: .WORD 0 D: MOV E,B MOV F,C .ENDM .MACRO DIVID A,B,C,?D,?E,?F ;DOES B/A B,REMAINDER IN C, A&B POSITIVE MOV A,D MOV B,E JSR R5,DIVID BR F D: .WORD 0 E: .WORD 0 F: MOV E,B MOV D,C .ENDM .MACRO CALSUB B,C,?A JSR R5,B BR A .IRP X, X .ENDR A: .ENDM ;SYSTEM SECTION RT11 EMULATOR MACROS ;MAY NEED MORE OF THESE. THESE WORK WITH THE FILES ; XXXCSI.MAC, GETSTR.MAC, AND GTLIN.MAC TO DO THEIR ; WONDERS... .MACRO .TTYOUT CHR .IF IDN ,R0 MOV R0,-(SP) .ENDC .IF B, MOV R0,-(SP) .ENDC .IF DIF ,R0 .IF NB, MOVB CHR,-(SP) .ENDC .ENDC JSR PC,TTYOUT TST (SP)+ .ENDM .MACRO .TTYIN JSR PC,TTYIN .ENDM .MACRO .TTINR JSR PC,TTYINR .ENDM .MACRO .DATE MOV #1000.,R0 ;PHONY DATE .ENDM .MACRO .PRINT ADDR .IF NB,ADDR MOV ADDR,-(SP) .IFF MOV R0,-(SP) .ENDC JSR PC,.$PRNT TST (SP)+ .ENDM .PRINT ; LARGELY DUMMY ENVIRONMENT MACROS THAT ONLY CLEAR C BIT. ; NOTE THAT RT11 CODE THAT USES DYNAMIC MEMORY ALLOCATION ; NEEDS TO FILL IN AREA TO BE ALLOCATED BY HAND. THE LOCATION ; 50 HIGH MEMORY ADDRESS IS UNTOUCHED. JSW IS TO BE A SYSTEM ; GLOBAL (DEFINED IN GTLIN) RATHER THAN A CONSTANT TOO. .MACRO .SETTOP NO .PRINT ; **** MODIFY TO SET HI ADDR IN 50 AND R0 CLC ; NO ; ..SET.TOP HERE TO NO .ENDM .SETTOP .MACRO .FETCH RG,ADDR CLC .ENDM .FETCH .MACRO .LOCK AA CLC .ENDM .MACRO .UNLOCK AA CLC .ENDM .MACRO .RCTRLO CLC .ENDM .MACRO .EXIT .MCALL EXIT$S ; EXIT CLOSES ALL FILES AND EXITS TO RSX JSR PC,CLSALL EXIT$S .ENDM ; .GTLIN - EMULATED REASONABLY WELL WITH RSX CSI. .MACRO .GTLIN BUFF,PROMPT JSR R5,S.RSAV ..LN.=1 .IF NB,PROMPT ..LN.=2 MOV PROMPT,-(SP) .ENDC MOV BUFF,-(SP) MOV #..LN.,-(SP) MOV SP,R5 JSR PC,GTLIN ADD #<2*..LN.>,SP JSR R5,S.RRES .ENDM ; SRESET ONLY CLOSES FILES AND CLEARS JSW .MACRO .SRESET CLR JSW ;CLEAR TTY MODE JSR PC,CLSALL .ENDM .SRESET .LIST .MACRO MACLIB .MCALL SOB,PUSH,PULL,CALL,MEM,SKIP .MCALL IF,ENDIF,ELSE,ENDELSE,SKIPIF .MCALL DOWHILE,ENDDO,DOIF,DOUNLESS .MCALL OR,AND .LIST MEB .MCALL IF$1,IF$2,IF$3,IF$7 IF$5=48. IF$4=96. IF$17=0 IF$16=0 IF$15=0 IF$14=0 IF$13=0 IF$12=0 IF$11=0 IF$10=0 IF$9=0 IF$6=0 .ENDM .MACRO SIM .MCALL MACLIB .MCALL IFCK,IFCLOCK,UPCK,OUTPUT,INPUT .MCALL ENDCK,IFCKN,START,VERSION .IF NDF .PIN .NPINS=1 .IFF .NPINS=.PIN .ENDC .PIN=1 .MCALL .DEF,.CKDEF,.LCKDEF MACLIB .ENDM .MACRO SOB .A,.B DEC .A BNE .B .ENDM .MACRO PUSH .A .MCALL .PUSH .IIF B <.A> .PUSH .IIF NB <.A> .PUSH <.A> .ENDM .MACRO .PUSH .A .IRP SYM,<.A> MOV SYM,-(SP) .ENDM .ENDM .MACRO PULL .A .MCALL .PULL .IIF B <.A> .PULL .IIF NB <.A> .PULL <.A> .ENDM .MACRO .PULL .A .IRP SYM,<.A> MOV (SP)+,SYM .ENDM .ENDM .MACRO .POP .A .IRP SYM,<.A> MOV (SP)+,SYM .ENDM .ENDM .MACRO CALL .A,.B,.C .IF B <.B> JSR PC,.A .MEXIT .ENDC MOV R5,-(SP) .NTYPE .S1,.B .IF NE,.S1-67 MOV .B,R5 .IFF MOV #.B,R5 .ENDC .IRP .S2,<.C> .IF B <.S2> CLR (R5)+ .IFF .NTYPE .S1,.S2 .IF NE,.S1-67 MOV .S2,(R5)+ .IFF MOV #.S2,(R5)+ .ENDC .ENDC .ENDM .NTYPE .S1,.B .IF NE,.S1-67 MOV .B,R5 .IFF MOV #.B,R5 .ENDC JSR PC,.A MOV (SP)+,R5 .ENDM .MACRO MEM .A .IRP .S1,<.A> .S1: .WORD 0 .ENDM .ENDM .MACRO IFCLOCK .A IFCK <.A> .ENDM .MACRO IFCK .A IF L'.A'CK(R5),EQ,,B IF .A'CK(R5),NE,,B .ENDM .MACRO UPCK .A MOVB .A'CK(R5),L'.A'CK(R5) .ENDM .MACRO IF .A,.B,.C,.D IF$5=IF$5+1 IF$17=IF$16 IF$16=IF$15 IF$15=IF$14 IF$14=IF$13 IF$13=IF$12 IF$12=IF$11 IF$11=IF$10 IF$10=IF$9 IF$9=IF$6 IF$6=IF$4 IF$4=IF$5*2-1 IF$1 .A,.B,.C,.D,\IF$4 .ENDM .MACRO AND .A,.B,.C,.D IF$1 .A,.B,.C,.D,\IF$4 .ENDM .MACRO IF$1 .A,.B,.C,.D,.E .IF NB <.C> CMP'.D .A,.C .IFF .IF NB <.B> TST'.D .A .ENDC .ENDC .IF NB <.B> B'.B .+6 .IFF B'.A .+6 .ENDC JMP .E'$ .ENDM .MACRO ENDIF IF$2 \IF$4 IF$4=IF$6 IF$6=IF$9 IF$9=IF$10 IF$10=IF$11 IF$11=IF$12 IF$12=IF$13 IF$13=IF$14 IF$14=IF$15 IF$15=IF$16 IF$16=IF$17 .ENDM .MACRO IF$2 A .LIST A'$: .NLIST .ENDM .MACRO ELSE IF$8=IF$4+1 IF$3 \IF$4,\IF$8 IF$4=IF$8 .ENDM .MACRO IF$3 A,B JMP B'$ .LIST A'$: .NLIST .ENDM .MACRO ENDELSE ENDIF .ENDM .MACRO SKIP .A B'.A .+6 .ENDM .MACRO SKIPIF .A,.B,.C,.D IF$5=IF$5+1 IF$17=IF$16 IF$16=IF$15 IF$15=IF$14 IF$14=IF$13 IF$13=IF$12 IF$12=IF$11 IF$11=IF$10 IF$10=IF$9 IF$9=IF$6 IF$6=IF$4 IF$4=IF$5*2-1 IF$7 .A,.B,.C,.D,\IF$4 .ENDM .MACRO OR .A,.B,.C,.D IF$7 .A,.B,.C,.D,\IF$4 .ENDM .MACRO IF$7 .A,.B,.C,.D,.E .IF NB <.C> CMP'.D .A,.C .IFF .IF NB <.B> TST'.D .A .ENDC .ENDC .IF NB <.B> B'.B .E'$ .IFF B'.A .E'$ .ENDC .ENDM .MACRO DOWHILE .A,.B,.C,.D IF$8=IF$5*2+2 IF$2 \IF$8 IF .A,.B,.C,.D .ENDM .MACRO ENDDO ELSE IF$4=IF$6 IF$6=IF$9 IF$9=IF$10 IF$10=IF$11 IF$11=IF$12 IF$12=IF$13 IF$13=IF$14 IF$14=IF$15 IF$15=IF$16 IF$16=IF$17 .ENDM .MACRO DOIF .A,.B,.C,.D IF$8=IF$5*2+2 IF$2 \IF$8 IF .A,.B,.C,.D .ENDM .MACRO DOUNLESS .A,.B,.C,.D IF$8=IF$5*2+2 IF$2 \IF$8 SKIPIF .A,.B,.C,.D .ENDM .MACRO OUTPUT .A .IRP .S1,<.A> CLRB .S1(R5) ASR R0 ROLB .S1(R5) .ENDM .ENDM .MACRO INPUT .A CLR R0 .IRP .S1,<.A> ASRB .S1(R5) ROL R0 .ENDM .ENDM .MACRO ENDCK ENDIF ENDIF .ENDM .MACRO IFCKN .A IF L'.A'CK,NE,,B IF .A'CK,EQ,,B .ENDM .MACRO START .A .IF NB <.A> .LIST .A:: .NLIST .ENDC MOV @2(R5),R5 DEC R5 .ENDM .MACRO LOAD .A,.B .IF B .B MOV .A(R5),R0 .IFF MOV .A(R5),.B .ENDC .ENDM .MACRO STORE .A,.B .IF B .B MOV R0,.A(R5) .IFF MOV .A,.B(R5) .ENDC .ENDM .MACRO .DEF .A,.B .LIST .A=.B .NLIST .ENDM .MACRO .CKDEF .A,.B .LIST .A'CK=.B .NLIST .ENDM .MACRO .LCKDEF .A,.B .LIST L'.A'CK=.B .NLIST .ENDM .MACRO OCOUTPUT .A .IRP .S1,<.A> CLRB .S1(R5) ASR R0 BCC .+6 DECB .S1(R5) .ENDM .ENDM