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 / SPAUSE.Z80 < prev    next >
Text File  |  2000-06-30  |  3KB  |  121 lines

  1. ;
  2. ; SYSLIB Module Name:  SPAUSE
  3. ; Author:  Richard Conn
  4. ; SYSLIB Version Number:  3.6
  5. ; Module Version Number:  1.1
  6.  
  7.     public    pause
  8.  
  9. ;
  10. ;  PAUSE -- Pause N 10ths of a Second
  11. ;    PAUSE will simply enter a delay loop for N 10ths of a Second.
  12. ;
  13. ;    Input Parameters:  HL = Number of 10ths of a Second to Pause
  14. ;            B = Processor CLock Speed (in MHz)
  15. ;    Output Parameters:  None
  16. ;    Registers Affected:  None
  17. ;    SYSLIB Routines Called:  None
  18. ;    Special Error Conditions:  None
  19. ;
  20.  
  21. ;
  22. ;  EQUATES
  23. ;
  24. BOOT    EQU    0    ; WARM BOOT ADDRESS
  25. CS$OFF    EQU    6    ; CONSOLE STATUS OFFSET
  26. CIN$OFF    EQU    9    ; CONSOLE INPUT OFFSET
  27.  
  28. ;
  29. ;  PAUSE ROUTINE
  30. ;    HL = N 10THS OF A SEC, B = PROCESSOR SPEED
  31. ;
  32. ;  COMPUTATION OF TIME DELAY CONSTANT:
  33. ;    INITIAL OVERHEAD    49 CYCLES
  34. ;    TERMINATING OVERHEAD    50 CYCLES
  35. ;    PROCESSOR SPEED (P)    (10+15)*P CYCLES
  36. ;    MAJOR OVERHEAD        TIME*132 CYCLES
  37. ;    N-COUNT OVERHEAD    (5+24)*N CYCLES
  38. ;    ** REQUIRED TOTAL **    100,000 CYCLES (1/10 SEC AT P=1)
  39. ;
  40. ;  SINCE THIS IS A GUESTIMATE ANYWAY AND PROCESSOR SPEED WILL NOT BE EXACTLY
  41. ;  P MHZ, I WILL THROW OUT THE PROCESSOR SPEED DELAY (AT MOST 100 CYCLES)
  42. ;
  43. ;  CALCULATIONS:  100,000 = 49 + 50 + TIME*132 + 29*N
  44. ;        TIME = (100,000 - 49 - 50 - 29*N)/132
  45. ;        TIME = (99,901 - 29*N)/132
  46. ;  CHART:
  47. ;         N    TIME
  48. ;          1     757    1/10 SEC
  49. ;          2     756
  50. ;          3     756
  51. ;          4     756
  52. ;          5     756    1/2 SEC
  53. ;         10     755    1 SEC
  54. ;         15     754
  55. ;         20     752    2 SECS
  56. ;         25     751
  57. ;         50     746    5 SECS
  58. ;        100     735    10 SECS
  59. ;        500     647    50 SECS
  60. ;
  61. ;  SINCE MOST CALLS TO THIS ROUTINE WILL REQUIRE BETWEEN 1/10 AND 5 SECS,
  62. ;  I SHALL SELECT AN "AVERAGE" TIME CONSTANT OF (757+746)/2 = 752
  63. ;  SINCE AN "AVERAGE" CLOCK IS 2+ OR 4+ MHZ, I SHALL FUDGE THIS (THRU PRACTICE)
  64. ;  TO 740
  65. ;
  66. TIME    EQU    700    ; TIME CONSTANT
  67. PAUSE:
  68.     PUSH    HL    ; SAVE REGS [4*11 = 44]
  69.     PUSH    DE
  70.     PUSH    BC
  71.     PUSH    AF
  72.     LD    C,B    ; SAVE PROCESSOR SPEED IN C [5]
  73. ;
  74. ;  THE ABOVE INSTRUCTIONS REPRESENT THE INITIAL OVERHEAD = 49 CYCLES
  75. ;
  76. PAUSL:
  77.     LD    B,C    ; GET PROCESSOR SPEED [5]
  78. PAUSL1:
  79.     LD    DE,TIME    ; GET DELAY CONSTANT [10]
  80. ;
  81. ;  THE ABOVE INSTRUCTIONS REPRESENT PART OF THE PROCESSOR SPEED OVERHEAD = 15
  82. ;
  83. PAUSL2:
  84.     EX    (SP),HL    ; LONG INSTRUCTION FOR DELAY [6*18 = 108]
  85.     EX    (SP),HL
  86.     EX    (SP),HL
  87.     EX    (SP),HL
  88.     EX    (SP),HL
  89.     EX    (SP),HL
  90.     DEC    DE    ; COUNT DOWN INNER-MOST LOOP [5]
  91.     LD    A,D    ; DONE?    [5]
  92.     OR    E    ; [4]
  93.     JP    NZ,PAUSL2    ; [10]
  94. ;
  95. ;  THE ABOVE INSTRUCTIONS REPRESENT THE MAJOR OVERHEAD = TIME*(108+5+5+4+10)
  96. ;    = TIME*132
  97. ;
  98.     DEC    B    ; COUNT DOWN 10TH-SEC LOOP [5]
  99.     JP    NZ,PAUSL1    ; [10]
  100. ;
  101. ;  THE ABOVE INSTRUCTIONS REPRESENT THE REST OF THE PROCESSOR SPEED OVERHEAD
  102. ;    = 15
  103. ;
  104.     DEC    HL    ; COUNT DOWN N 10THS LOOP [5]
  105.     LD    A,H    ; DONE? [5]
  106.     OR    L    ; [4]
  107.     JP    NZ,PAUSL    ; [10]
  108. ;
  109. ;  THE ABOVE INSTRUCTIONS REPRESENT THE N-COUNT OVERHEAD = 24 CYCLES
  110. ;
  111.     POP    AF    ; RESTORE REGS [4*10 = 40]
  112.     POP    BC
  113.     POP    DE
  114.     POP    HL
  115.     RET        ; [10]
  116. ;
  117. ;  THE ABOVE INSTRUCTIONS REPRESENT THE TERMINATING OVERHEAD = 50 CYCLES
  118. ;
  119.  
  120.     END
  121.