This is an old revision of the document!


SAGA Clock-Cycle Register

Overview

Clock-Cycle Register is a new SAGA Read-Only register. It is unique feature, never seen in other 68K existing system. It allows to get, in real-time, the number of cycles consumed by one or more instructions. This register can come in handy when programmer need to optimize his 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_CLKCNT EQU $DE0008

CLKRESET MACRO
  IFNE DEBUG
  tst.l SAGA_CLKCNT
  ENDC
  ENDM

CLKSAVE MACRO
  IFNE DEBUG
  move.l SAGA_CLKCNT,__\1_time
  ENDC
ENDM

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

MyCounter: DC.L 0

Home | Links | SAGA | SAGA Registers

Last modified: le 2020/08/02 12:37