SAGA_CLOCK_COUNTER Register

Overview

Clock-Cycle Counter Register is a new SAGA Read-Only register. It is a unique feature, never seen in another existing 68K system. It allows to get, in real-time, the number of cycles consumed by one or more CPU instructions. This register can come in handy when a programmer needs to optimize their code and locate greedy routines.


Name

  • SAGA_CLOCK_COUNTER

Address

  • 0xDE0008

Access

  • Read-Only

Size

  • 32-bits

Description

Each time register is read, the internal counter is reinitialized to 0.

Can overflow if the delay between two calls is too long.


Example

TEST:
  move.l #$CAFECAFE,d1 ; Operand for DIVU.L
  tst.l  $DE0008       ; Reset the Clock-Cycle counter
  divu.l #100,d1       ; Consume some CPU cycles
  move.l $DE0008,d0    ; D0 = Number of cycles consumed by the DIVU instruction.
  rts

Macros

DEBUG EQU 1

SAGA_CLOCK_COUNTER EQU $DE0008

CLKCNT_RESET MACRO
  IFNE DEBUG
  tst.l SAGA_CLOCK_COUNTER
  ENDC
  ENDM

CLKCNT_SAVE MACRO
  IFNE DEBUG
  move.l SAGA_CLOCK_COUNTER,__\1
  ENDC
ENDM

CLKCNT_ADD MACRO
  IFNE DEBUG
  move.l d0,-(sp)
  move.l SAGA_CLOCK_COUNTER,d0
  add.l  d0,__\1
  move.l (sp)+,d0
  ENDC
ENDM
MyRoutine:	
  move.l #$CAFECAFE,d1    ; Operand for DIVU
  CLKCNT_RESET            ; Reset the Clock-Cycle counter
  divu.l #100,d1          ; Consume some CPU cycles
  CLKCNT_SAVE MyCounter   ; Save the number of cycles in MyCounter
  RTS

MyCounter: DC.L 0

You are here: start » saga » registers » saga_clock_counter

Last modified: le 2019/12/10 02:16