mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-25 09:24:19 +00:00
74 lines
1.6 KiB
Plaintext
74 lines
1.6 KiB
Plaintext
; 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
|
||
|