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 / SLIB3.LBR / SMOVE.Z80 < prev    next >
Text File  |  2000-06-30  |  2KB  |  135 lines

  1. ;
  2. ; SYSLIB Module Name:  SMOVE
  3. ; Author:  Richard Conn
  4. ; SYSLIB Version Number:  3.6
  5. ; Module Version Number:  1.1
  6.  
  7.     public    hmovb,hmovbc,moveb,movebc
  8.  
  9. ;
  10. ;  SMOVEB.MAC -- SYSLIB MODULE
  11. ;
  12. ;  ENTRY POINTS --
  13. ;    EXT    MOVEB        -- MOVE BYTES PTED TO BY HL TO
  14. ;                   LOCATION PTED TO BY DE FOR B BYTES
  15. ;    EXT    MOVEBC        -- MOVE BYTES PTED TO BY HL TO
  16. ;                   LOCATION PTED TO BY DE FOR BC BYTES
  17. ;
  18. ;  NO REGISTERS ARE TO BE AFFECTED
  19. ;
  20. ;    EXT    HMOVB        -- LIKE MOVEB, BUT HL AND DE PT TO BYTE AFTER
  21. ;                   LAST BYTE MOVED WHEN DONE
  22. ;    EXT    HMOVBC        -- LIKE MOVEBC, BUT HL AND DE PT TO BYTE AFTER
  23. ;                   LAST BYTE MOVED WHEN DONE
  24. ;
  25.  
  26. ;
  27. ;  SUPPORTING MACROS --
  28. ;
  29. PUTRG    MACRO        ; SAVE ALL REGS
  30.     PUSH    AF
  31.     PUSH    BC
  32.     PUSH    DE
  33.     PUSH    HL
  34.     ENDM
  35.  
  36. GETRG    MACRO        ; RESTORE ALL REGS
  37.     POP    HL
  38.     POP    DE
  39.     POP    BC
  40.     POP    AF
  41.     ENDM
  42.  
  43. ;
  44. ;  HMOVB AND HMOVBC ROUTINES --
  45. ;
  46. HMOVB:
  47.     CALL    MOVEB    ; DO THE MOVE
  48.     PUSH    BC    ; SAVE BC
  49.     LD    C,B    ; BC=B
  50.     LD    B,0
  51.     ADD    HL,BC    ; HL PTS TO BYTE AFTER LAST BYTE MOVED
  52.     EX    DE,HL
  53.     ADD    HL,BC    ; DE PTS TO BYTE AFTER LAST BYTE MOVED
  54.     EX    DE,HL
  55.     POP    BC    ; GET BC
  56.     RET
  57.  
  58. HMOVBC:
  59.     CALL    MOVEBC    ; DO THE MOVE
  60.     PUSH    BC    ; SAVE BC
  61.     ADD    HL,BC    ; HL PTS TO BYTE AFTER LAST BYTE MOVED
  62.     EX    DE,HL
  63.     ADD    HL,BC    ; DE PTS TO BYTE AFTER LAST BYTE MOVED
  64.     EX    DE,HL
  65.     POP    BC    ; GET BC
  66.     RET
  67.  
  68. ;
  69. ;  MOVEB AND MOVEBC ROUTINES --
  70. ;
  71. MOVEB:
  72.     PUSH    BC    ; SAVE BC
  73.     LD    C,B    ; C=B
  74.     LD    B,0    ; B=0
  75.     CALL    MOVEBC    ; USE MOVEBC
  76.     POP    BC    ; RESTORE BC
  77.     RET
  78.  
  79. MOVEBC:
  80.     PUTRG        ; SAVE ALL REGS
  81. ;
  82. ;  DETERMINE IF HL < DE; IF SO, MOVE BACK TO FRONT; OTHERWISE, FRONT TO BACK
  83. ;
  84.     LD    A,H    ; HL<DE?
  85.     CP    D
  86.     JP    C,MOVER    ; MOVE BACK-TO-FRONT
  87.     JP    NZ,MOVEF    ; MOVE FRONT-TO-BACK IF HL>DE
  88.     LD    A,L    ; HL<DE?
  89.     CP    E
  90.     JP    C,MOVER    ; MOVE BACK-TO-FRONT
  91.  
  92. ;  MOVE FRONT-TO-BACK
  93. MOVEF:
  94.     LD    A,(HL)    ; GET BYTE
  95.     LD    (DE),A    ; PUT BYTE
  96.     INC    HL    ; PT TO NEXT
  97.     INC    DE
  98.     DEC    BC    ; COUNT DOWN
  99.     LD    A,B    ; DONE?
  100.     OR    C
  101.     JP    NZ,MOVEF
  102.  
  103. ;  DONE WITH PROGRAM
  104. DONE:
  105.     GETRG        ; RESTORE ALL REGS
  106.     RET
  107. ;
  108. ;  MOVE BACK-TO-FRONT
  109. ;
  110. MOVER:
  111. ;
  112. ;  POINT TO END OF BUFFERS
  113. ;
  114.     DEC    BC    ; DECR COUNT BY 1
  115.     ADD    HL,BC    ; PT TO END OF BUFFERS
  116.     EX    DE,HL
  117.     ADD    HL,BC
  118.     EX    DE,HL
  119.     INC    BC    ; CORRECT BYTE COUNT
  120. ;
  121. ;  PERFORM MOVE
  122. ;
  123. MOVERL:
  124.     LD    A,(HL)    ; GET BYTE
  125.     LD    (DE),A    ; PUT BYTE
  126.     DEC    HL    ; PT TO NEXT
  127.     DEC    DE
  128.     DEC    BC    ; COUNT DOWN
  129.     LD    A,B    ; DONE?
  130.     OR    C
  131.     JP    NZ,MOVERL
  132.     JP    DONE
  133.  
  134.     END
  135.