Advertisement
mcleod_ideafix

Improved version of Z80 speed measurement routine

Mar 1st, 2020
1,654
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;(c)2020 Miguel Angel Rodriguez Jodar.
  2.  
  3.                 org 8100h
  4. Start           di
  5.                 ld a,81h
  6.                 ld i,a
  7.                 im 2
  8.                 jp RealStart
  9.  
  10.                 org 81FFh
  11.                 dw NewIM2
  12. NewIM2          ei
  13. PatchHere       ret   ;later, this will be ex (sp),hl         ;10T / 19T
  14.                 ld d,h
  15.                 ld e,l
  16.                 ld c,b
  17.                 im 1
  18.                 ex (sp),hl
  19.                 ret
  20.  
  21. ReturnFromNOPs  di
  22.                 ld a,c
  23.                 ld (23728),a    ; Number of complete loops executed
  24.                 ld hl,StartNOPs
  25.                 or a
  26.                 ex de,hl
  27.                 sbc hl,de   ;
  28.                 ld b,h      ;
  29.                 ld c,l      ; Return value: number of NOPs in last iteration of loop
  30.                 ei          ; Frequency (MHz) = (peek(23728)*10010+BC*4+60)/19968
  31.                 ret
  32.  
  33. RealStart       ld a,201                                                     -
  34.                 ld (PatchHere),a  ;init interrupt
  35.  
  36.                 ei
  37.                 halt
  38.                 ld hl,ReturnFromNOPs
  39.                 push hl
  40.                 ld hl,551            ;loop to wait for aprox. 14336 cycles
  41. WaitContended   dec hl
  42.                 ld a,h
  43.                 or l
  44.                 jr nz,WaitContended  ;wait until we are in the contended area
  45.                 ld a,(16384)  ;contended operation to sync HALT
  46.                 ;----------- Time measuring starts here!
  47.                 halt                  ;33T, including intack, int routine and return
  48.                 ld a,0e3h             ; 7T
  49.                 ld (PatchHere),a      ;13T
  50.  
  51.                 ld b,0                ; 7T
  52.                                       ;-----
  53.                                       ;60T pre-loop time
  54. StartNOPs
  55.                 rept 2499             ;4T per NOP
  56.                   nop
  57.                 endm
  58.                 inc b                 ; 4T
  59.                 jp nz,StartNOPs       ;10T  ;----- 10010T per loop
  60.                 ret
  61.  
  62.                 end Start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement