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 >
Wrap
Assembly Source File
|
1992-08-20
|
2KB
|
58 lines
;
; 8520_timing.asm
;
; A complete 8520 timing example. This blinks the power light at (exactly)
; 3 milisecond intervals. It takes over the machine, so watch out!
;
; The base Amiga crytal frequencies are:
; NTSC 28.63636 MHz
; PAL 28.37516 MHz
;
; The two 16 bit timers on the 8520 chips each count down at 1/10 the CPU
; clock, or 0.715909 MHz. That works out to 1.3968255 microseconds per count.
; Under PAL the countdown is slightly slower, 0.709379 MHz.
;
; To wait 1/100 second would require waiting 10,000 microseconds.
; The timer register would be set to (10,000 / 1.3968255 = 7159).
;
; To wait 3 miliseconds would require waiting 3000 microseconds.
; The register would be set to (3000 / 1.3968255 = 2148).
;
INCLUDE "hardware/cia.i"
INCLUDE "hardware/custom.i"
;
XREF _ciaa
XREF _ciab
XREF _custom
;
lea _custom,a3 ; Base of custom chips
lea _ciaa,a4 ; Get base address if CIA-A
;
move.w #$7fff,dmacon(a3) ; Kill all chip interrupts
;
;----Setup, only do once
;----This sets all bits needed for timer A one-shot mode.
move.b ciacra(a4),d0 ;Set control register A on CIAA
and.b #%11000000,d0 ;Don't trash bits we are not
or.b #%00001000,d0 ;using...
move.b d0,ciacra(a4)
move.b #%01111111,ciaicr(a4) ;Clear all 8520 interrupts
;
;----Set time (low byte THEN high byte)
;----And the low order with $ff
;----Shift the high order by 8
;
TIME equ 2148
move.b #(TIME&$FF),ciatalo(a4)
move.b #(TIME>>8),ciatahi(a4)
;
;----Wait for the timer to count down
busy_wait:
btst.b #0,ciaicr(a4) ;Wait for timer expired flag
beq.s busy_wait
bchg.b #CIAB_LED,ciapra(a4) ;Blink light
bset.b #0,ciacra(a4) ;Restart timer
bra.s busy_wait
END