home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ZSYS / SIMTEL20 / SYSLIB / SYSLIB.LBR / SYSLIBJ.HQP / SYSLIBJ.HLP
Text File  |  2000-06-30  |  21KB  |  633 lines

  1. Branching Introduction
  2. ACase     Case via Reg A: ACASE1, ACASE2, ACASE3
  3. HCase     Case via Reg Pair HL: HCASE1, HCASE2, HCASE3
  4. AGoto     Computed GOTO via Reg A: AGOTO1, AGOTO2, BGOTO1, BGOTO2
  5. HGoto     Computed GOTO via RP HL: HGOTO1, HGOTO2, DGOTO1, DGOTO2
  6. Aif       Arithmetic IF via Reg A: AIF1, AIF2
  7. Hif       Arithmetic IF via RP HL: HIF1, HIF2
  8. :Branching
  9.  
  10.      Thσ routine≤ iε thi≤ sectioε dea∞ witΦ conditiona∞ branchinτ ì
  11. vißá CASE¼á ComputeΣá GOTO¼á anΣ Arithmetiπ I╞á constructs«á  Thσ ì
  12. following example illustrates the case concept:
  13.  
  14.           < register A = key value >
  15.                CALL ACASE1
  16.                DB   SIZE      ; NUMBER OF ENTRIES IN TABLE
  17.                DW   ERROR     ; GO HERE IF NO MATCH
  18.                DB   VAL1      ; FIRST VALUE TO TEST FOR
  19.                DW   ADDR1     ; GO HERE IF A = VAL1
  20.                DB   VAL2      ; 2ND VALUE TO TEST FOR
  21.                DW   ADDR2     ; GO HERE IF A = VAL2
  22.                ...
  23.                DB   VAL$SIZE  ; 'SIZE' VALUE TO TEST FOR
  24.                DW   ADDR$SIZE ; GO HERE IF A = VAL$SIZE
  25.  
  26.  
  27.      The following example illustrates the Computed GOTO:
  28.           < register A = index (zero-relative) >
  29.                CALL AGOTO1
  30.                DW   ADDR0     ; GO HERE IF A = 0
  31.                DW   ADDR1     ; GO HERE IF A = 1
  32.                ...
  33.                DW   ADDRN     ; GO HERE IF A = N
  34.  
  35.      Thσá followinτá examplσ illustrate≤ thσ ComputeΣá GOT╧á witΦ ì
  36. limits:
  37.           < register A = index (zero-relative) >
  38.           < register B = limit >
  39.                CALL AGOTO1
  40.                DW   ADDR0     ; GO HERE IF A = 0
  41.                DW   ADDR1     ; GO HERE IF A = 1
  42.                ...
  43.                DW   ADDRN     ; GO HERE IF A = N
  44.           < error code >      ; RESUME AFTER DW ADDRN IF A > B
  45.  
  46.      The following example illustrates the Arithmetic IF:
  47.  
  48.           < register A = key value >
  49.           < register B = test value >
  50.                CALL AIF1
  51.                DW   ADDRLT    ; GO HERE IF A < B
  52.                DW   ADDREQ    ; GO HERE IF A = B
  53.                DW   ADDRGT    ; GO HERE IF A > B
  54.  
  55.      Seσ thσ SYSLI┬ tes⌠ prograφ STEST014.MA├ fo≥ example≤ oµ usσ ì
  56. of all of the branching routines.
  57.  
  58.  
  59.      The following routines are provided:
  60.  
  61.      Routine   Comments
  62.      =======   ========
  63.      ACASE1    Case statement with A = key value
  64.      ACASE2    Like ACASE1, but DE = address of case table
  65.      ACASE3    Like ACASE2, but return address is left on stack
  66.  
  67.      HCASE▒    Likσ ACASE1¼ bu⌠ H╠ ╜ ke∙ value
  68.      HCASE2    Like ACASE2, but HL = key value
  69.      HCASE3    Like ACASE3, but HL = key value
  70.  
  71.      AGOTO1    Computed GOTO with A = key value
  72.      AGOTO2    Like AGOTO1, but JMPs rather than DW follow
  73.  
  74.      HGOTO1    Computed GOTO with HL = key value
  75.      HGOTO2    Like AGOTO2, but HL = key value
  76.  
  77.  
  78.      Routine   Comments
  79.      =======   ========
  80.      BGOTO1    Like AGOTO1, but B = limit value
  81.      BGOTO2    Like AGOTO2, but B = limit value
  82.  
  83.      DGOTO1    Like HGOTO1, but DE = limit value
  84.      DGOTO2    Like HGOTO2, but DE = limit value
  85.  
  86.      AIF1      Arithmetic IF with A, B = values
  87.      AIF2      Like AIF1, but JMPs rather than DW follow
  88.  
  89.      HIF1      Arithmetic IF with HL, DE = values
  90.      HIF2      Like AIF2, but HL, DE = values
  91.  
  92. :ACASE Routines
  93.      Routine: ACASE1
  94.      Function║
  95.      ACASE▒ i≤ ß casσ statemen⌠ processor«á  Oε input¼ registe≥ ┴ ì
  96. contain≤ ß valuσ t∩ tes⌠ against«á  Thi≤ valuσ i≤ compareΣ t∩ thσ ì
  97. value≤á iε ß casσ table¼á and¼á iµ ß matcΦ i≤ found¼á contro∞á i≤ ì
  98. transferreΣá t∩á thσ addres≤ associateΣ witΦ thσ matchinτá value«  ì
  99. Thi≤ casσ act≤ a≤ ß multiwa∙ JM╨ instructioε (returε addres≤ froφ ì
  100. thσ cal∞ t∩ ACASE▒ i≤ no⌠ retained).
  101.  
  102.      Example:
  103.           MVI  A,TEST
  104.           CALL ACASE1
  105.           DB   N         ; number of entries in the table
  106.           DW   DEFAULT   ; go to this address if no match
  107.           DB   VAL1      ; test for TEST = VAL1
  108.           DW   ADDR1     ; go here if TEST = VAL1
  109.           ...
  110.           DB   VALN      ; test for TEST = VALN
  111.           DW   ADDRN     ; go here if TEST = VALN
  112.  
  113.      Inputs: A = value to test for
  114.      Outputs: None (branch is made)
  115.  
  116.      Registers Affected: None
  117.  
  118.      SYSLIB Routines Called:   None
  119.      Special Error Conditions: None
  120.  
  121.      Routine: ACASE2
  122.      Function║
  123.      ACASE▓ i≤ ß casσ statemen⌠ processor«á  Oε input¼ registe≥ ┴ ì
  124. contain≤á ß valuσ t∩ tes⌠ agains⌠ anΣ D┼ contain≤ thσ addres≤á oµ ì
  125. thσá casσá table«á  Thσ valuσ iε registe≥ ┴ i≤á compareΣá t∩á thσ ì
  126. value≤á iε ß casσ table¼á and¼á iµ ß matcΦ i≤ found¼á contro∞á i≤ ì
  127. transferreΣá t∩á thσ addres≤ associateΣ witΦ thσ matchinτá value«  ì
  128. Thi≤ casσ act≤ a≤ ß multiwa∙ JM╨ instructioε (returε addres≤ froφ ì
  129. thσ cal∞ t∩ ACASE▓ i≤ no⌠ retained).
  130.  
  131.  
  132.      Example:
  133.           MVI  A,TEST    ; value to test for
  134.           LXI  D,TABLE   ; address of table
  135.           CALL ACASE2
  136.           ...
  137.      TABLE:
  138.           DB   N         ; number of entries in the table
  139.           DW   DEFAULT   ; go to this address if no match
  140.           DB   VAL1      ; test for TEST = VAL1
  141.           DW   ADDR1     ; go here if TEST = VAL1
  142.           ...
  143.           DB   VALN      ; test for TEST = VALN
  144.           DW   ADDRN     ; go here if TEST = VALN
  145.  
  146.  
  147.      Inputs: A = value to test for
  148.                DE = address of case table
  149.      Outputs: None (branch is made)
  150.  
  151.      Registers Affected: None
  152.  
  153.      SYSLIB Routines Called:   None
  154.      Special Error Conditions: None
  155.  
  156.      Routine: ACASE3
  157.      Function║
  158.      ACASE│ i≤ ß casσ statemen⌠ processor«á  Oε input¼ registe≥ ┴ ì
  159. contain≤á ß valuσ t∩ tes⌠ agains⌠ anΣ D┼ contain≤ thσ addres≤á oµ ì
  160. thσá casσá table«á  Thσ valuσ iε registe≥ ┴ i≤á compareΣá t∩á thσ ì
  161. value≤á iε ß casσ table¼á and¼á iµ ß matcΦ i≤ found¼á contro∞á i≤ ì
  162. transferreΣá t∩á thσ addres≤ associateΣ witΦ thσ matchinτá value«  ì
  163. Thi≤á casσá act≤ a≤ ß multiwa∙ CAL╠ instructioεá (returεá addres≤ ì
  164. froφ thσ cal∞ t∩ ACASE│ i≤ lef⌠ oε thσ stack).
  165.  
  166.  
  167.      Example:
  168.           MVI  A,TEST    ; value to test for
  169.           LXI  D,TABLE   ; address of table
  170.           CALL ACASE3
  171.      < resume execution here if routines execute an RET instr >
  172.           ...
  173.      TABLE:
  174.           DB   N         ; number of entries in the table
  175.           DW   DEFAULT   ; go to this address if no match
  176.           DB   VAL1      ; test for TEST = VAL1
  177.           DW   ADDR1     ; go here if TEST = VAL1
  178.           ...
  179.           DB   VALN      ; test for TEST = VALN
  180.           DW   ADDRN     ; go here if TEST = VALN
  181.  
  182.  
  183.      Inputs: A = value to test for
  184.                DE = address of case table
  185.      Outputs: None (branch is made)
  186.  
  187.      Registers Affected: None
  188.  
  189.      SYSLIB Routines Called:   None
  190.      Special Error Conditions: None
  191. :HCASE Routines
  192.      Routine: HCASE1
  193.      Function║
  194.      HCASE▒ i≤ ß casσ statemen⌠ processor«á  Oεá input¼á registe≥ ì
  195. pai≥ H╠ contain≤ ß valuσ t∩ tes⌠ against«  Thi≤ valuσ i≤ compareΣ ì
  196. t∩ thσ value≤ iε ß casσ table¼á and¼ iµ ß matcΦ i≤ found¼ contro∞ ì
  197. i≤ transferreΣ t∩ thσ addres≤ associateΣ witΦ thσ matchinτ value«  ì
  198. Thi≤ casσ act≤ a≤ ß multiwa∙ JM╨ instructioε (returε addres≤ froφ ì
  199. thσ cal∞ t∩ HCASE▒ i≤ no⌠ retained).
  200.  
  201.      Example:
  202.           LXI  H,TEST
  203.           CALL HCASE1
  204.           DW   N         ; number of entries in the table
  205.           DW   DEFAULT   ; go to this address if no match
  206.           DW   VAL1      ; test for TEST = VAL1
  207.           DW   ADDR1     ; go here if TEST = VAL1
  208.           ...
  209.           DW   VALN      ; test for TEST = VALN
  210.           DW   ADDRN     ; go here if TEST = VALN
  211.  
  212.      Inputs: HL = value to test for
  213.      Outputs: None (branch is made)
  214.  
  215.      Registers Affected: None
  216.  
  217.      SYSLIB Routines Called:   None
  218.      Special Error Conditions: None
  219.  
  220.      Routine: HCASE2
  221.      Function║
  222.      HCASE▓á i≤ ß casσ statemen⌠ processor«á  Oε input¼á registe≥ ì
  223. pai≥á H╠á contain≤ ß valuσ t∩ tes⌠ agains⌠ anΣá D┼á contain≤á thσ ì
  224. addres≤á oµá thσ casσ table«á  Thσ valuσ iε registe≥ pai≥á H╠á i≤ ì
  225. compareΣ t∩ thσ value≤ iε ß casσ table¼ and¼ iµ ß matcΦ i≤ found¼ ì
  226. contro∞á i≤á transferreΣá t∩á thσá addres≤á associateΣá witΦá thσ ì
  227. matchinτá value«á  Thi≤á casσ act≤ a≤ ß multiwa∙ JM╨á instructioε ì
  228. (returε addres≤ froφ thσ cal∞ t∩ HCASE▓ i≤ no⌠ retained).
  229.  
  230.  
  231.      Example:
  232.           LXI  H,TEST    ; value to test for
  233.           LXI  D,TABLE   ; address of table
  234.           CALL HCASE2
  235.           ...
  236.      TABLE:
  237.           DW   N         ; number of entries in the table
  238.           DW   DEFAULT   ; go to this address if no match
  239.           DW   VAL1      ; test for TEST = VAL1
  240.           DW   ADDR1     ; go here if TEST = VAL1
  241.           ...
  242.           DW   VALN      ; test for TEST = VALN
  243.           DW   ADDRN     ; go here if TEST = VALN
  244.  
  245.  
  246.      Inputs: HL = value to test for
  247.                DE = address of case table
  248.      Outputs: None (branch is made)
  249.  
  250.      Registers Affected: None
  251.  
  252.      SYSLIB Routines Called:   None
  253.      Special Error Conditions: None
  254.  
  255.      Routine: HCASE3
  256.      Function║
  257.      HCASE│ i≤ ß casσ statemen⌠ processor«á  Oεá input¼á registe≥ ì
  258. pai≥á H╠á contain≤á ß valuσ t∩ tes⌠ agains⌠ anΣ D┼á contain≤á thσ ì
  259. addres≤á oµá thσ casσ table«á  Thσ valuσ iε registe≥ pai≥á H╠á i≤ ì
  260. compareΣ t∩ thσ value≤ iε ß casσ table¼ and¼ iµ ß matcΦ i≤ found¼ ì
  261. contro∞á i≤á transferreΣá t∩á thσá addres≤á associateΣá witΦá thσ ì
  262. matchinτá value«á  Thi≤ casσ act≤ a≤ ß multiwa∙ CAL╠á instructioε ì
  263. (returε addres≤ froφ thσ cal∞ t∩ HCASE│ i≤ lef⌠ oε thσ stack).
  264.  
  265.  
  266.      Example:
  267.           LXI  H,TEST    ; value to test for
  268.           LXI  D,TABLE   ; address of table
  269.           CALL HCASE3
  270.      < resume execution here if routines execute an RET instr >
  271.           ...
  272.      TABLE:
  273.           DW   N         ; number of entries in the table
  274.           DW   DEFAULT   ; go to this address if no match
  275.           DW   VAL1      ; test for TEST = VAL1
  276.           DW   ADDR1     ; go here if TEST = VAL1
  277.           ...
  278.           DW   VALN      ; test for TEST = VALN
  279.           DW   ADDRN     ; go here if TEST = VALN
  280.  
  281.  
  282.      Inputs: HL = value to test for
  283.                DE = address of case table
  284.      Outputs: None (branch is made)
  285.  
  286.      Registers Affected: None
  287.  
  288.      SYSLIB Routines Called:   None
  289.      Special Error Conditions: None
  290.  
  291. :AGOTO (Computed Goto)
  292.  
  293.      Routine: AGOTO1
  294.  
  295.      Function║
  296.      AGOTO▒ i≤ ß computeΣ GOTO«á  Wheε called¼ registe≥ ┴ ╜ inde° ì
  297. (zero-relative⌐á oµá thσá followinτ addres≤á t∩á brancΦá to«á  N∩ ì
  298. informatioε i≤ availablσ oε thσ numbe≥ oµ alloweΣ values¼á s∩á i⌠ ì
  299. i≤á thσ programmer'≤ responsibilit∙ t∩ seσ tha⌠ thσ rangσ oµá thσ ì
  300. Computed GOTO is not exceeded.
  301.  
  302.      Example:
  303.           MVI  A,INDEX   ; Index value
  304.           CALL AGOTO1
  305.           DW   ADDR0     ; GO HERE IF A = 0
  306.           DW   ADDR1     ; GO HERE IF A = 1
  307.           ...
  308.           DW   ADDRN     ; GO HERE IF A = N
  309.  
  310.  
  311.      Inputs: A = index value (zero-relative)
  312.      Outputs: None
  313.  
  314.      Registers Affected: None
  315.  
  316.      SYSLIB Routines Called:   None
  317.      Special Error Conditions: None
  318.  
  319.  
  320.      Routine: AGOTO2
  321.  
  322.      Function║
  323.      AGOTO2 i≤ ß computeΣ GOTO«á  Wheε called¼ registe≥ ┴ ╜ inde° ì
  324. (zero-relative⌐á oµá thσá followinτ addres≤á t∩á brancΦá to«á  N∩ ì
  325. informatioε i≤ availablσ oε thσ numbe≥ oµ alloweΣ values¼á s∩á i⌠ ì
  326. i≤á thσ programmer'≤ responsibilit∙ t∩ seσ tha⌠ thσ rangσ oµá thσ ì
  327. Computed GOTO is not exceeded.
  328.  
  329.      Example:
  330.           MVI  A,INDEX   ; Index value
  331.           CALL AGOTO2
  332.           JMP  ADDR0     ; RETURN TO THIS JMP IF A = 0
  333.           JMP  ADDR1     ; RETURN TO THIS JMP IF A = 1
  334.           ...
  335.           JMP  ADDRN     ; RETURN TO THIS JMP IF A = N
  336.      < next instr >      ; RETURN TO THIS INSTR IF A = N+1
  337.  
  338.  
  339.      Inputs: A = index value (zero-relative)
  340.      Outputs: None
  341.  
  342.      Registers Affected: None
  343.  
  344.      SYSLIB Routines Called:   None
  345.      Special Error Conditions: None
  346.  
  347.  
  348.      Routine: BGOTO1
  349.  
  350.      Function║
  351.      BGOTO▒ i≤ ß computeΣ GOTO«á  Wheε called¼ registe≥ ┴ ╜ inde° ì
  352. (zero-relative⌐ oµ thσ followinτ addres≤ t∩ brancΦ to«á  Registe≥ ì
  353. ┬ ╜ maximuφ valuσ alloweΣ fo≥ thσ inde° (registe≥ A)«á  Iµ ┴ ╛ B¼ ì
  354. theεá contro∞á i≤ transferreΣ t∩ afte≥ thσ las⌠á addres≤á iεá thσ ì
  355. table.
  356.  
  357.      Example:
  358.           MVI  A,INDEX   ; Index Value
  359.           MVI  B,LIMIT   ; Maximum Index Value
  360.           CALL BGOTO1
  361.           DW   ADDR0     ; GO HERE IF A = 0
  362.           DW   ADDR1     ; GO HERE IF A = 1
  363.           ...
  364.           DW   ADDR$LIMIT; GO HERE IF A = LIMIT
  365.      < next instruction >; RETURN TO THIS INSTRUCTION IF A > LIMIT
  366.  
  367.  
  368.      Inputs: A = index value (zero-relative)
  369.                B = maximum index value allowed
  370.      Outputs: None
  371.  
  372.      Registers Affected: None
  373.  
  374.      SYSLIB Routines Called:   None
  375.      Special Error Conditions: None
  376.  
  377.  
  378.      Routine: BGOTO2
  379.  
  380.      Function║
  381.      BGOTO▓ i≤ ß computeΣ GOTO«á  Wheε called¼ registe≥ ┴ ╜ inde° ì
  382. (zero-relative⌐ oµ thσ followinτ addres≤ t∩ brancΦ to«á  Registe≥ ì
  383. ┬ ╜ maximuφ valuσ alloweΣ fo≥ thσ inde° (registe≥ A)«á  Iµ ┴ ╛ B¼ ì
  384. theεá contro∞á i≤á transferreΣ t∩ afte≥ thσ las⌠ addres≤á iεá thσ ì
  385. table.
  386.  
  387.      Example:
  388.           MVI  A,INDEX   ; Index value
  389.           MVI  B,LIMIT   ; Maximum Index Value
  390.           CALL BGOTO2
  391.           JMP  ADDR0     ; RETURN TO THIS JMP IF A = 0
  392.           JMP  ADDR1     ; RETURN TO THIS JMP IF A = 1
  393.           ...
  394.           JMP  ADDR$LIMIT; RETURN TO THIS JMP IF A = LIMIT
  395.      < next instr >      ; RETURN TO THIS INSTR IF A > LIMIT
  396.  
  397.  
  398.      Inputs: A = index value (zero-relative)
  399.                B = maximum index value
  400.      Outputs: None
  401.  
  402.      Registers Affected: None
  403.  
  404.      SYSLIB Routines Called:   None
  405.      Special Error Conditions: None
  406.  
  407. :HGOTO (Computed Goto)
  408.  
  409.      Routine: HGOTO1
  410.  
  411.      Function║
  412.      HGOTO▒ i≤ ß computeΣ GOTO«á  Wheε called¼ registe≥ pai≥ H╠ ╜ ì
  413. inde° (zero-relative⌐ oµ thσ followinτ addres≤ t∩ brancΦ to«á  N∩ ì
  414. informatioε i≤ availablσ oε thσ numbe≥ oµ alloweΣ values¼á s∩á i⌠ ì
  415. i≤á thσ programmer'≤ responsibilit∙ t∩ seσ tha⌠ thσ rangσ oµá thσ ì
  416. ComputeΣ GOT╧ i≤ no⌠ exceeded.
  417.  
  418.      Example:
  419.           LXI  H,INDEX   ; Index value
  420.           CALL HGOTO1
  421.           DW   ADDR0     ; GO HERE IF HL = 0
  422.           DW   ADDR1     ; GO HERE IF HL = 1
  423.           ...
  424.           DW   ADDRN     ; GO HERE IF HL = N
  425.  
  426.  
  427.      Inputs: HL = index value (zero-relative)
  428.      Outputs: None
  429.  
  430.      Registers Affected: None
  431.  
  432.      SYSLIB Routines Called:   None
  433.      Special Error Conditions: None
  434.  
  435.  
  436.      Routine: HGOTO2
  437.  
  438.      Function║
  439.      HGOTO▓ i≤ ß computeΣ GOTO«á  Wheε called¼ registe≥ pai≥ H╠ ╜ ì
  440. inde° (zero-relative⌐ oµ thσ followinτ addres≤ t∩ brancΦ to«á  N∩ ì
  441. informatioεá i≤ availablσ oε thσ numbe≥ oµ alloweΣ values¼á s∩ i⌠ ì
  442. i≤á thσ programmer'≤ responsibilit∙ t∩ seσ tha⌠ thσ rangσ oµá thσ ì
  443. ComputeΣ GOT╧ i≤ no⌠ exceeded.
  444.  
  445.      Example:
  446.           LXI  H,INDEX   ; Index value
  447.           CALL HGOTO2
  448.           JMP  ADDR0     ; RETURN TO THIS JMP IF HL = 0
  449.           JMP  ADDR1     ; RETURN TO THIS JMP IF HL = 1
  450.           ...
  451.           JMP  ADDRN     ; RETURN TO THIS JMP IF HL = N
  452.      < next instr >      ; RETURN TO THIS INSTR IF HL = N+1
  453.  
  454.  
  455.      Inputs: HL = index value (zero-relative)
  456.      Outputs: None
  457.  
  458.      Registers Affected: None
  459.  
  460.      SYSLIB Routines Called:   None
  461.      Special Error Conditions: None
  462.  
  463.  
  464.      Routine: DGOTO1
  465.  
  466.      Function║
  467.      DGOTO▒ i≤ ß computeΣ GOTO«á  Wheε called¼ registe≥ pai≥ H╠ ╜ ì
  468. inde°á (zero-relative⌐á oµ thσ followinτ addres≤á t∩á brancΦá to«  ì
  469. Registe≥á pai≥ D┼ ╜ maximuφ valuσ alloweΣ fo≥ thσ inde° (registe≥ ì
  470. pai≥ HL)«á  Iµ H╠ ╛ DE¼á theε contro∞ i≤ transferreΣ t∩ afte≥ thσ ì
  471. las⌠ addres≤ iε thσ table.
  472.  
  473.      Example:
  474.           LXI  H,INDEX   ; Index Value
  475.           LXI  D,LIMIT   ; Maximum Index Value
  476.           CALL DGOTO1
  477.           DW   ADDR0     ; GO HERE IF HL = 0
  478.           DW   ADDR1     ; GO HERE IF HL = 1
  479.           ...
  480.           DW   ADDR$LIMIT; GO HERE IF HL = LIMIT
  481.      < next instruction >; RETURN TO THIS INSTRUCTION IF HL > LIMIT
  482.  
  483.  
  484.      Inputs: HL = index value (zero-relative)
  485.                DE = maximum index value allowed
  486.      Outputs: None
  487.  
  488.      Registers Affected: None
  489.  
  490.      SYSLIB Routines Called:   None
  491.      Special Error Conditions: None
  492.  
  493.  
  494.      Routine: DGOTO2
  495.  
  496.      Function║
  497.      DGOTO▓ i≤ ß computeΣ GOTO«á  Wheε called¼ registe≥ pai≥ H╠ ╜ ì
  498. inde°á (zero-relative⌐á oµ thσ followinτ addres≤á t∩á brancΦá to«  ì
  499. Registe≥á pai≥ D┼ ╜ maximuφ valuσ alloweΣ fo≥ thσ inde° (registe≥ ì
  500. pai≥ HL)«á  Iµ H╠ ╛ DE¼á theε contro∞ i≤ transferreΣ t∩ afte≥ thσ ì
  501. las⌠ addres≤ iε thσ table.
  502.  
  503.      Example:
  504.           LXI  H,INDEX   ; Index value
  505.           LXI  D,LIMIT   ; Maximum Index Value
  506.           CALL DGOTO2
  507.           JMP  ADDR0     ; RETURN TO THIS JMP IF HL = 0
  508.           JMP  ADDR1     ; RETURN TO THIS JMP IF HL = 1
  509.           ...
  510.           JMP  ADDR$LIMIT; RETURN TO THIS JMP IF HL = LIMIT
  511.      < next instr >      ; RETURN TO THIS INSTR IF HL > LIMIT
  512.  
  513.  
  514.      Inputs: HL = index value (zero-relative)
  515.                DE = maximum index value
  516.      Outputs: None
  517.  
  518.      Registers Affected: None
  519.  
  520.      SYSLIB Routines Called:   None
  521.      Special Error Conditions: None
  522.  
  523. :AIF (Arithmetic IF with Register A)
  524.  
  525.      Routine: AIF1
  526.  
  527.      Function║
  528.      AIF▒ i≤ aε arithmetiπ I╞ facility«  ┴ ke∙ valuσ i≤ passeΣ iε ì
  529. thσá ┬á registe≥á anΣ ß tes⌠ valuσ i≤ passeΣ iε thσá ┴á register«  ì
  530. Branchinτ i≤ donσ dependinτ oε thσ followinτ tests║ ┴ ╝ B¼ ┴ ╜ B¼ ì
  531. and A > B.
  532.  
  533.      Example:
  534.           MVI  A,TEST    ; test value
  535.           MVI  B,KEY     ; key value
  536.           CALL AIF1
  537.           DW   ALTB      ; GO HERE IF A < B
  538.           DW   AEQB      ; GO HERE IF A = B
  539.           DW   AGTB      ; GO HERE IF A > B
  540.  
  541.  
  542.      Inputs: A = test value
  543.                B = key value
  544.      Outputs: None
  545.  
  546.      Registers Affected: None
  547.  
  548.      SYSLIB Routines Called: None
  549.      Special Error Conditions: None
  550.  
  551.  
  552.      Routine: AIF2
  553.  
  554.      Function║
  555.      AIF2 i≤ aε arithmetiπ I╞ facility«  ┴ ke∙ valuσ i≤ passeΣ iε ì
  556. thσá ┬á registe≥á anΣ ß tes⌠ valuσ i≤ passeΣ iε thσá ┴á register«  ì
  557. Branchinτ i≤ donσ dependinτ oε thσ followinτ tests║ ┴ ╝ B¼ ┴ ╜ B¼ ì
  558. and A > B.
  559.  
  560.      Example:
  561.           MVI  A,TEST    ; test value
  562.           MVI  B,KEY     ; key value
  563.           CALL AIF2
  564.           JMP  ALTB      ; RESUME AT THIS JMP IF A < B
  565.           JMP  AEQB      ; RESUME AT THIS JMP IF A = B
  566.           JMP  AGTB      ; RESUME AT THIS JMP IF A > B
  567.  
  568.  
  569.      Inputs: A = test value
  570.                B = key value
  571.      Outputs: None
  572.  
  573.      Registers Affected: None
  574.  
  575.      SYSLIB Routines Called: None
  576.      Special Error Conditions: None
  577.  
  578. :HIF (Arithmetic IF with Register Pair HL)
  579.  
  580.      Routine: HIF1
  581.  
  582.      Function║
  583.      HIF▒ i≤ aε arithmetiπ I╞ facility«  ┴ ke∙ valuσ i≤ passeΣ iε ì
  584. thσá D┼á registe≥á pai≥á anΣ ß tes⌠ valuσ i≤á passeΣá iεá thσá H╠ ì
  585. registe≥á pair«á  Branchinτá i≤ donσ dependinτ oεá thσá followinτ ì
  586. tests║ H╠ ╝ DE¼ H╠ ╜ DE¼ anΣ H╠ ╛ DE.
  587.  
  588.      Example:
  589.           LXI  H,TEST    ; test value
  590.           LXI  D,KEY     ; key value
  591.           CALL HIF1
  592.           DW   HLTD      ; GO HERE IF HL < DE
  593.           DW   HEQD      ; GO HERE IF HL = DE
  594.           DW   HGTD      ; GO HERE IF HL > DE
  595.  
  596.  
  597.      Inputs: HL = test value
  598.                DE = key value
  599.      Outputs: None
  600.  
  601.      Registers Affected: None
  602.  
  603.      SYSLIB Routines Called: None
  604.      Special Error Conditions: None
  605.  
  606.  
  607.      Routine: HIF2
  608.  
  609.      Function║
  610.      HIF▓ i≤ aε arithmetiπ I╞ facility«  ┴ ke∙ valuσ i≤ passeΣ iε ì
  611. thσá D┼á  registe≥á pai≥á anΣ ß tes⌠ valuσ i≤ passeΣá iεá thσá H╠ ì
  612. registe≥á pair«á  Branchinτá i≤ donσ dependinτ oεá thσá followinτ ì
  613. tests║ H╠ ╝ DE¼ H╠ ╜ DE¼ anΣ H╠ ╛ DE.
  614.  
  615.      Example:
  616.           LXI  H,TEST    ; test value
  617.           LXI  D,KEY     ; key value
  618.           CALL HIF2
  619.           JMP  HLTD      ; RESUME AT THIS JMP IF HL < DE
  620.           JMP  HEQD      ; RESUME AT THIS JMP IF HL = DE
  621.           JMP  HGTD      ; RESUME AT THIS JMP IF HL > DE
  622.  
  623.  
  624.      Inputs: HL = test value
  625.                DE = key value
  626.      Outputs: None
  627.  
  628.      Registers Affected: None
  629.  
  630.      SYSLIB Routines Called: None
  631.      Special Error Conditions: None
  632.  
  633.