Task-Specific Program Code
C-11
Program Examples
Example C–7. Implementing a HOLD Operation (hold.asm)
* File:
hold.asm
*
* Function:
HOLD test code
*
* Check for HOLDA toggle for HOLD requests in MODE 0
*
* Check for XF toggle on HOLD/INT1 requests in MODE 1
*
.title ” HOLD Test ”
; Title
.mmregs
icr
.set
0FFECh
; Interrupt control register in I/O space
icrshdw
.set
060h
; scratch pad location
* Interrupt vectors
.text
reset
B
main
; 0–reset , Branch to main program on reset
int1h
B
int1_hold
; 1–external interrupt 1 or HOLD
.space 40*16
*********Interrupt service routine ISR for HOLD logic*************************
main:
splk
#0001h,imr
clrc
intm
wait:
b
wait
int1_hold:
; Perform any desired context save
ldp
#0
in
icrshdw, icr
; save the contents of ICR register
lacl
#010h
; load ACC with mask for MODE bit
and
icrshdw
; Filter out all bits except MODE bit
bcnd
int1,neq
; Branch if MODE bit is 1, else in HOLD mode
lacc
imr, 0
; load ACC with interrupt mask register
splk
#1, imr
; mask all interrupts except interrupt1/HOLD
idle
; enter HOLD mode, issues HOLDA
; and the busses will be in tristate
splk
#1, ifr
; Clear HOLD/INT1 flag to prevent
; re–entering HOLD mode
sacl
imr
; restore interrupt mask register
; Perform necessary context restore
clrc
intm
; enable all interrupts
ret
; return from HOLD interrupt
int1:
nop
; Replace this with desired INT1 interrupt
nop
; service routine
setc
xf
; Dummy toggle to check the loop entry
clrc
xf
; in MODE 1
splk
#0001,ifr
clrc
intm
; enable all interrupts
ret
; return from interrupts