mirror of
https://github.com/PDP-10/its.git
synced 2026-03-02 18:04:38 +00:00
260 lines
4.6 KiB
Plaintext
260 lines
4.6 KiB
Plaintext
.NLIST
|
||
;IN ORDER TO USE THESE MACROS, INCLUDE THIS FILE AS THE FIRST
|
||
;FILE OF YOUR ASSEMBLY.
|
||
;THIS MACRO IS USED BY THE OTHERS
|
||
.MACRO EVAL A,B,C,D,E,F,G,H
|
||
A'B'C'D'E'F'G'H
|
||
.ENDM
|
||
;THESE MACROS IMPLEMENT THE IF THEN ELSE CONSTRUCT,
|
||
;LOOPING CONSTRUCTS, AND A CASE CONSTRUCT
|
||
;FIRST WE HAVE:
|
||
; CONDITION CODES SET
|
||
; IF COND
|
||
; STATEMENTS TO EXECUTE
|
||
; ELSE
|
||
; STATEMENTS TO EXECUTE
|
||
; ENDF
|
||
;IN THE ABOVE, 'COND' IS THE MNEMONIC FOR A BRANCH INSTRUCTION
|
||
;MINUS THE B FOR EXAMPLE EQ, PL, OR LOS.
|
||
;THE ELSE MAY BE OMMITTED.
|
||
.MACRO IF COND
|
||
EVAL BN,COND,< >,ZI,\ZUNF
|
||
EVAL ZIB,\ZUNF,<:>
|
||
ZISP=ZISP+1
|
||
EVAL ZIS,\ZISP,=,ZUNF
|
||
ZUNF=ZUNF+1
|
||
.ENDM
|
||
.MACRO ELSE
|
||
EVAL ZT,=,ZIS,\ZISP
|
||
EVAL BR,< >,ZI,\ZUNF
|
||
EVAL ZI,\ZT,<:>
|
||
EVAL ZIS,\ZISP,=,ZUNF
|
||
ZUNF=ZUNF+1
|
||
.ENDM
|
||
.MACRO ENDF
|
||
EVAL ZT=ZIS,\ZISP
|
||
EVAL ZI,\ZT,<:>
|
||
ZISP=ZISP-1
|
||
.ENDM
|
||
;TO EXTEND THE POWER OF THE IF MACRO, TWO OTHER MACROS ARE
|
||
;INTRODUCED TO ALLOW COMPLEX LOGICAL EXPRESSIONS TO BE
|
||
;EVALUATED.
|
||
; CONDITION CODES SET
|
||
; OR COND
|
||
;OR PRODUCES A BCOND INTO THE NEXT IF TO BE OPEND
|
||
; CONDITION CODES SET
|
||
; AND COND
|
||
;AND PRODUCES A BNCOND TO THE END (OR ELSE) OF THE ENCLOSING IF
|
||
;AS AN EXAMPLE TO EVALUATE (A OR B) AND C YOU USE
|
||
; OR A
|
||
; IF B
|
||
; AND C
|
||
.MACRO OR COND
|
||
EVAL B,COND,< >,ZIB,\ZUNF
|
||
.ENDM
|
||
.MACRO AND COND
|
||
EVAL ZT,=,ZIS,\ZISP
|
||
EVAL BN,COND,< >,ZI,\ZT
|
||
.ENDM
|
||
;HERE WE HAVE A LOOPING CONSTRUCT:
|
||
; LOOP
|
||
; STATEMENTS TO EXECUTE
|
||
; CONDITION CODES SET
|
||
; WHILE COND
|
||
;CONTROLE BRANCHS BACK TO THE LOOP, IF COND IS TRUE.
|
||
;IN ADDITION COND MAY HAVE THE FORM 'SOB,REG' IN WHICH CASE
|
||
;A SOB LOOP IS SET UP.
|
||
.MACRO LOOP
|
||
ZUNL=ZUNL+1
|
||
ZLSP=ZLSP+1
|
||
EVAL ZLS,\ZLSP,=ZUNL
|
||
EVAL ZLB,\ZUNL,<:>
|
||
.ENDM
|
||
.MACRO WHILE COND,REG
|
||
EVAL ZT=ZLS,\ZLSP
|
||
.IF IDN,<COND>,<SOB>
|
||
EVAL SOB,< >,REG,<,>,ZLB,\ZT
|
||
.IFF
|
||
EVAL B,COND,< >,ZLB,\ZT
|
||
.ENDC
|
||
EVAL ZL,\ZT,<:>
|
||
ZLSP=ZLSP-1
|
||
.ENDM
|
||
;HERE WE HAVE A MORE FLEXABLE LOOPING CONSTRUCT:
|
||
; LOOP
|
||
; STATEMENTS TO EXECUTE
|
||
; CONDITION CODES SET
|
||
; UNTIL COND
|
||
; STATEMENTS TO EXECUTE
|
||
; ENDL
|
||
;NOW CONTROLE ESCAPES THE LOOP AT UNTIL WHEN COND IS TRUE.
|
||
;THERE MAY BE MORE THAN ONE UNTIL IN THE LOOP ALLOWING
|
||
;ALTERNATE ESCAPE CRITEREA.
|
||
.MACRO UNTIL COND
|
||
EVAL ZT=ZLS,\ZLSP
|
||
EVAL B,COND,< >,ZL,\ZT
|
||
.ENDM
|
||
.MACRO ENDL LONG
|
||
.IF IDN,<LONG>,<J>
|
||
EVAL ZT=ZLS,\ZLSP
|
||
EVAL JMP,< >,ZLB,\ZT
|
||
EVAL ZL,\ZT,<:>
|
||
ZLSP=ZLSP-1
|
||
.IFF
|
||
WHILE R
|
||
.ENDC
|
||
.ENDM
|
||
;NOW TO ADD MORE FLEXIBLE CONTROL OF EXECUTION WE ADD TWO
|
||
;MORE CONSTRUCTS THAT MAY APPEAR WITHIN A LOOP
|
||
; ENDOF NUM
|
||
; OUTOF NUM
|
||
;NUM IS THE NUMBER OF LEVELS, 0 MEANS THE CURRENT LOOP
|
||
;ENDOF BRANCHS BACK TO THE BIGINNING, AND OUTOF EXITS FROM
|
||
;THE SPECIFIED LOOP.
|
||
.MACRO ENDOF NUM
|
||
ZT=0
|
||
.IIF NB,<NUM>,ZT=NUM
|
||
ZT=ZLSP-ZT
|
||
EVAL ZT=ZLS,\ZT
|
||
EVAL BR,< >,ZLB,\ZT
|
||
.ENDM
|
||
.MACRO OUTOF NUM
|
||
ZT=0
|
||
.IIF NB,<NUM>,ZT=NUM
|
||
ZT=ZLSP-ZT
|
||
EVAL ZT=ZLS,\ZT
|
||
EVAL BR,< >,ZL,\ZT
|
||
.ENDM
|
||
;FINALLY WE HAVE A CASE CONSTRUCT
|
||
; REG FILLED WITH EVEN CHOICE INTEGER 0 2 4 6 ...
|
||
; CASET REG,NUM
|
||
; CASE 1
|
||
; STATEMENTS
|
||
; CASE 2
|
||
; STATEMENTS
|
||
; .
|
||
; .
|
||
; .
|
||
; CASE NUM
|
||
; STATEMENTS
|
||
; ENDC
|
||
;NUM IS THE NUMBER OF CASES, THE CASES CAN ACCURE IN ANY ORDER
|
||
;THE STATEMENTS THAT ARE EXECUTED FOR CASE N, ARE THOSE
|
||
;FROM THE CASE N STATEMENT TO THE NEXT CASE, OR ENDC STATEMENT
|
||
.MACRO CASET REG,NUM
|
||
ADD REG,PC
|
||
ZUNC=ZUNC+1
|
||
ZCSP=ZCSP+1
|
||
EVAL ZCS,\ZCSP,=,ZUNC
|
||
ZT=0
|
||
.REPT NUM
|
||
ZT=ZT+1
|
||
EVAL BR,< >,ZC,\ZUNC,\ZT
|
||
.ENDM
|
||
.ENDM
|
||
.MACRO CASE NUM,LONG
|
||
EVAL ZT,=,ZCS,\ZCSP
|
||
.IF IDN,<LONG>,<J>
|
||
EVAL JMP,< >,ZC,\ZT,0
|
||
.IFF
|
||
EVAL BR,< >,ZC,\ZT,0
|
||
.ENDC
|
||
EVAL ZC,\ZT,NUM,<:>
|
||
.ENDM
|
||
.MACRO ENDC
|
||
EVAL ZT=ZCS,\ZCSP
|
||
EVAL ZC,\ZT,0,<:>
|
||
ZCSP=ZCSP-1
|
||
.ENDM
|
||
;THESE CLUMBSY MACROS ALLOW THE NEGATION OF THE CONDITION
|
||
;NEEDED FOR IF.
|
||
.MACRO BNR LAB
|
||
ZT=ZT ;NOP IT DOESN'T SEEM TO WORK WITH NO STATEMENTS.
|
||
.ENDM
|
||
.MACRO BNEQ LAB
|
||
BNE LAB
|
||
.ENDM
|
||
.MACRO BNNE LAB
|
||
BEQ LAB
|
||
.ENDM
|
||
.MACRO BNPL LAB
|
||
BMI LAB
|
||
.ENDM
|
||
.MACRO BNMI LAB
|
||
BPL LAB
|
||
.ENDM
|
||
.MACRO BNVC LAB
|
||
BVS LAB
|
||
.ENDM
|
||
.MACRO BNVS LAB
|
||
BVC LAB
|
||
.ENDM
|
||
.MACRO BNCC LAB
|
||
BCS LAB
|
||
.ENDM
|
||
.MACRO BNCS LAB
|
||
BCC LAB
|
||
.ENDM
|
||
.MACRO BNGE LAB
|
||
BLT LAB
|
||
.ENDM
|
||
.MACRO BNLT LAB
|
||
BGE LAB
|
||
.ENDM
|
||
.MACRO BNGT LAB
|
||
BLE LAB
|
||
.ENDM
|
||
.MACRO BNLE LAB
|
||
BGT LAB
|
||
.ENDM
|
||
.MACRO BNHI LAB
|
||
BLOS LAB
|
||
.ENDM
|
||
.MACRO BNLOS LAB
|
||
BHI LAB
|
||
.ENDM
|
||
.MACRO BNHIS LAB
|
||
BLO LAB
|
||
.ENDM
|
||
.MACRO BNLO LAB
|
||
BHIS LAB
|
||
.ENDM
|
||
;THIS POSITION INDEPENDENTLY LOADS THE ADDRESS LAB INTO REG.
|
||
.MACRO LA LAB,REG
|
||
MOV PC,REG
|
||
ADD #LAB-.,REG
|
||
.ENDM
|
||
;THESE INITIALIZE THE REGESTER NAMES, AND CERTAIN SYMBOLS USED
|
||
;BY THE ABOVE MACROS.
|
||
;UNIQUE NAME GENERATORS
|
||
ZUNF=0
|
||
ZUNL=0
|
||
ZUNC=0
|
||
;STACK PTRS
|
||
ZISP=0
|
||
ZLSP=0
|
||
ZCSP=0
|
||
;STACKS
|
||
;ZISXXX
|
||
;ZLSXXX
|
||
;ZCSXXX
|
||
;GENERATED LABELS
|
||
;ZIBXXX
|
||
;ZIXXX
|
||
;ZLBXXX
|
||
;ZLXXX
|
||
;ZCXXXN
|
||
R0=%0
|
||
R1=%1
|
||
R2=%2
|
||
R3=%3
|
||
R4=%4
|
||
R5=%5
|
||
R6=%6
|
||
R7=%7
|
||
SP=%6
|
||
PC=%7
|
||
PSW=177776
|
||
SWR=177570
|
||
.LIST
|
||
|