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 / SLIB2.LBR / SHGO1.Z80 < prev    next >
Text File  |  2000-06-30  |  1KB  |  51 lines

  1. ;
  2. ; SYSLIB Module Name: HGOTO1
  3. ; Author: Richard Conn
  4. ; SYSLIB Version Number: 3.6
  5. ; Module Version Number: 1.1
  6.  
  7.     public    hgoto1
  8.  
  9. ;
  10. ; HGOTO1 is a computed GOTO.  When called, register pair HL = index of
  11. ; following address to branch to, as indicated:
  12. ;
  13. ;    LXI    H,INDEX    ; zero-relative
  14. ;    CALL    HGOTO1
  15. ;    DW    ADDR0    ; IF HL=0
  16. ;    DW    ADDR1    ; IF HL=1
  17. ;    DW    ADDR2    ; IF HL=2
  18. ;    ...
  19. ; ADDR0:        ; COME HERE IF HL=0
  20. ;    ...
  21. ; ADDR1:        ; COME HERE IF HL=1
  22. ;    ...
  23. ; ADDR2:        ; COME HERE IF HL=2
  24. ;    ...
  25. ;
  26. ; No error or range checking is done
  27. ;
  28. hgoto1:
  29.     ld    (hlsave),hl    ; save HL
  30.     ex    (sp),hl        ; get return address, save HL
  31.     push    de        ; save regs
  32.     push    af
  33.     ex    de,hl        ; return address in DE
  34.     ld    hl,(hlsave)    ; HL = index value
  35.     add    hl,hl        ; HL = offset (index * 2)
  36.     add    hl,de        ; point to jump in HL
  37.     ld    a,(hl)        ; get low
  38.     inc    hl
  39.     ld    h,(hl)        ; get high
  40.     ld    l,a        ; HL = address to return to
  41.     pop    af        ; get regs
  42.     pop    de
  43.     ex    (sp),hl        ; restore HL, set address of routine
  44.     ret
  45. ;
  46. ; Save buffer
  47. ;
  48. hlsave:    ds    2
  49.  
  50.     end
  51.