Files
Digital-Research-Source-Code/MPM OPERATING SYSTEMS/MPM II/MPM II SOURCE 2/Control_2/select.lib
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

74 lines
1.6 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; MACRO LIBRARY FOR "SELECT" CONSTRUCT
;
; LABEL GENERATORS
GENSLXI MACRO NUM
;; LOAD HL WITH ADDRESS OF CASE LIST
LXI H,SELV&NUM
ENDM
;
GENCASE MACRO NUM,ELT
;; GENERATE JMP TO END OF CASES
IF ELT GT 0
JMP ENDS&NUM ;;PAST ADDR LIST
ENDIF
;; GENERATE LABEL FOR THIS CASE
CASE&NUM&@&ELT:
ENDM
;
GENELT MACRO NUM,ELT
;; GENERATE ONE ELEMENT OF CASE LIST
DW CASE&NUM&@&ELT
ENDM
;
GENSLAB MACRO NUM,ELTS
;; GENERATE CASE LIST
SELV&NUM:
ECNT SET 0 ;;COUNT ELEMENTS
REPT ELTS ;;GENERATE DW'S
GENELT NUM,%ECNT
ECNT SET ECNT+1
ENDM ;;END OF DW'S
;; GENERATE END OF CASE LIST LABEL
ENDS&NUM:
ENDM
;
SELNEXT MACRO
;; GENERATE THE NEXT CASE
GENCASE %CCNT,%ECNT
;; INCREMENT THE CASE ELEMENT COUNT
ECNT SET ECNT+1
ENDM
;
SELECT MACRO VAR
;; GENERATE CASE SELECTION CODE
CCNT SET 0 ;;COUNT "SELECTS"
SELECT MACRO V ;;REDEFINITION OF SELECT
;; SELECT ON V OR ACCUMULATOR CONTENTS
IF NOT NUL V
LDA V ;;LOAD SELECT VARIABLE
ENDIF
GENSLXI %CCNT ;;GENERATE THE LXI H,SELV#
MOV E,A ;;CREATE DOUBLE PRECISION
MVI D,0 ;;V IN D,E PAIR
DAD D ;;SINGLE PREC INDEX
DAD D ;;DOUBLE PREC INDEX
MOV E,M ;;LOW ORDER BRANCH ADDR
INX H ;;TO HIGH ORDER BYTE
MOV D,M ;;HIGH ORDER BRANCH INDEX
XCHG ;;READY BRANCH ADDRESS IN HL
PCHL ;;GONE TO THE PROPER CASE
ECNT SET 0 ;;ELEMENT COUNTER RESET
SELNEXT ;;SELECT CASE 0
ENDM
;; INVOKE REDEFINED SELECT THE FIRST TIME
SELECT VAR
ENDM
;
ENDSEL MACRO
;; END OF SELECT, GENERATE CASE LIST
GENCASE %CCNT,%ECNT ;;LAST CASE
GENSLAB %CCNT,%ECNT ;;CASE LIST
;; INCREMENT "SELECT" COUNT
CCNT SET CCNT+1
ENDM