.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. .MACRO MACLIB .LIST .MCALL SOB,PUSH,PULL,CALL,MEM,SKIP .MCALL IF,ENDIF,ELSE,ENDELSE,SKIPIF,IFNOT .MCALL DOWHILE,ENDDO,DOIF,DOUNLESS .LIST 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 BGT WHERE .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 AND THE ; CHISIM SUBROUTINE 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 PINDEF,CLOCK,STORAGE,OCOUTPUT .MCALL PIN,CLOCKDEF,LOAD,STORE .MCALL TOUTPUT,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 PIN .A PINDEF <.A> .ENDM .MACRO PINDEF .A .IRP .S1,<.A> .DEF .S1,\.PIN .PIN=.PIN+1 .ENDM .ENDM .MACRO CLOCKDEF .A CLOCK <.A> .ENDM .MACRO CLOCK .A .IRP .S1,<.A> .CKDEF .S1,\.PIN .PIN=.PIN+1 .LCKDEF .S1,\.NPINS .NPINS=.NPINS+1 .ENDM .ENDM .MACRO STORAGE .A .NPINS=.NPINS ! 1 .IRP .S1,<.A> .DEF .S1,\.NPINS .NPINS=.NPINS+2 .ENDM .ENDM .MACRO TOUTPUT .A MOVB #-1,R0 .IRP .S1,<.A> MOVB R0,.S1(R5) .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 ; .ASECT ; .=0 ; .ASCII /.A/ ; .CSECT .ENDM .MACRO OCOUTPUT .A .IRP .S1,<.A> CLRB .S1(R5) ASR R0 BCC .+6 DECB .S1(R5) .ENDM .ENDM ;SYSTEM SECTION RT11 EMULATOR MACROS .MACRO .PRINT ADDR .IF NB,ADDR MOV ADDR,-(SP) .IFF MOV R0,-(SP) .ENDC JSR PC,.$PRNT TST (SP)+ .ENDM .PRINT .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 JSR PC,CLSALL EXIT$S .ENDM .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 .MACRO .SRESET JSR PC,CLSALL .ENDM .SRESET .LIST