home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD v1.2 / amidev_cd_12.iso / reference_library / hardware / hard_examples / 8520_timing.asm next >
Assembly Source File  |  1992-08-20  |  2KB  |  58 lines

  1. ;
  2. ; 8520_timing.asm
  3. ;
  4. ; A complete 8520 timing example.  This blinks the power light at (exactly)
  5. ; 3 milisecond intervals.  It takes over the machine, so watch out!
  6. ;
  7. ; The base Amiga crytal frequencies are:
  8. ;           NTSC    28.63636  MHz
  9. ;           PAL     28.37516  MHz
  10. ;
  11. ; The two 16 bit timers on the 8520 chips each count down at 1/10 the CPU
  12. ; clock, or 0.715909 MHz.  That works out to 1.3968255 microseconds per count.
  13. ; Under PAL the countdown is slightly slower, 0.709379 MHz.
  14. ;
  15. ; To wait 1/100 second would require waiting 10,000 microseconds.
  16. ; The timer register would be set to (10,000 / 1.3968255 = 7159).
  17. ;
  18. ; To wait 3 miliseconds would require waiting 3000 microseconds.
  19. ; The register would be set to (3000 / 1.3968255 = 2148).
  20. ;
  21.         INCLUDE "hardware/cia.i"
  22.         INCLUDE "hardware/custom.i"
  23. ;
  24.         XREF    _ciaa
  25.         XREF    _ciab
  26.         XREF    _custom
  27. ;
  28.         lea     _custom,a3              ; Base of custom chips
  29.         lea     _ciaa,a4                ; Get base address if CIA-A
  30. ;
  31.         move.w  #$7fff,dmacon(a3)       ; Kill all chip interrupts
  32. ;
  33. ;----Setup, only do once
  34. ;----This sets all bits needed for timer A one-shot mode.
  35.         move.b  ciacra(a4),d0           ;Set control register A on CIAA
  36.         and.b   #%11000000,d0           ;Don't trash bits we are not
  37.         or.b    #%00001000,d0           ;using...
  38.         move.b  d0,ciacra(a4)
  39.         move.b  #%01111111,ciaicr(a4)   ;Clear all 8520 interrupts
  40. ;
  41. ;----Set time (low byte THEN high byte)
  42. ;----And the low order with $ff
  43. ;----Shift the high order by 8
  44. ;
  45. TIME    equ     2148
  46.         move.b  #(TIME&$FF),ciatalo(a4)
  47.         move.b  #(TIME>>8),ciatahi(a4)
  48. ;
  49. ;----Wait for the timer to count down
  50. busy_wait:
  51.         btst.b  #0,ciaicr(a4)           ;Wait for timer expired flag
  52.         beq.s   busy_wait
  53.         bchg.b  #CIAB_LED,ciapra(a4)    ;Blink light
  54.         bset.b  #0,ciacra(a4)           ;Restart timer
  55.         bra.s   busy_wait
  56.  
  57.         END
  58.