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 / SHIF1.Z80 < prev    next >
Text File  |  2000-06-30  |  1KB  |  61 lines

  1. ;
  2. ; SYSLIB Module Name: HIF1
  3. ; Author: Richard Conn
  4. ; SYSLIB Version Number: 3.6
  5. ; Module Version Number: 1.1
  6.  
  7.     public    hif1
  8.  
  9. ;
  10. ; HIF1 is an arithmetic IF facility.  A key value is passed in the DE register
  11. ; pair and a test value is passed in the HL register pair:
  12. ;
  13. ;    LXI    D,5    ; key value
  14. ;    LXI    H,TEST    ; test value
  15. ;    CALL    HIF1
  16. ;    DW    HLTD    ; go here if HL < DE
  17. ;    DW    HEQD    ; go here if HL = DE
  18. ;    DW    HGTD    ; go here if HL > DE
  19. ;
  20. hif1:
  21.     ex    (sp),hl        ; get return address
  22.     ld    (return),hl
  23.     ex    (sp),hl
  24.     ld    (hlsave),hl    ; save HL
  25.     push    de        ; save regs
  26.     push    af
  27.     ld    a,h        ; compare highs
  28.     cp    d
  29.     jp    c,less
  30.     jp    nz,greater
  31.     ld    a,l        ; highs are equal, compare lows
  32.     cp    e
  33.     jp    c,less
  34.     jp    nz,greater
  35.     ld    de,2        ; HL = DE, so offset is 2 bytes
  36.     jp    goto
  37. greater:
  38.     ld    de,4        ; HL > DE, so offset is 4 bytes
  39.     jp    goto
  40. less:
  41.     ld    de,0        ; HL < DE, so offset is 0 bytes
  42. goto:
  43.     ld    hl,(return)    ; get return address
  44.     add    hl,de        ; add in offset
  45.     ld    a,(hl)        ; get low
  46.     inc    hl
  47.     ld    h,(hl)        ; get high
  48.     ld    l,a        ; HL = address to return to
  49.     pop    af        ; restore regs
  50.     pop    de
  51.     ex    (sp),hl        ; set return address on stack
  52.     ld    hl,(hlsave)    ; restore HL
  53.     ret
  54. ;
  55. ; Save buffers
  56. ;
  57. hlsave:    ds    2    ; original HL
  58. return:    ds    2    ; original return address
  59.  
  60.     end
  61.