Page 45 of 62
SBasic User's Manual SBasic Version 2.7 Page 45
Printed: December 5, 1999
Interrupts
SBasic provides support for processing interrupts on the target
system.
You can write interrupt service routines (ISRs) directly in SBasic,
rather than having to drop down into assembly language for the target
machine. However, you must declare a block of SBasic code as an ISR
by using the INTERRUPT statement.
The INTERRUPT statement can accept a single argument, which is the
address on the target system to use as an interrupt vector. SBasic
will determine the address of the ISR code, then write that address to
the vector address you specify.
Later, when your program is running on the target system, an interrupt
will cause control to transfer to the address stored in the vector
address. This in turn starts execution of your SBasic routine.
Example:
interrupt $fff0 ' use $fff0 as the interrupt vector
a = peekb(porta) ' read 8 bits from port A
end ' return from the interrupt
Given the above example, an interrupt that uses $fff0 as its vector
will cause control to jump to the statement containing the PEEKB
function. This small program will read a value from port A, then
return from the interrupt.
Note that your SBasic routine does not get written to address $fff0;
only the address of your routine gets written there. If necessary,
examine the code created by the compiler to help understand how SBasic
interrupts work.
You must use an END statment to terminate all ISR code following an
INTERRUPT statement. When it processes this END statement, SBasic
compiles the proper Return from Interrupt instruction for the target
system.
You sometimes need more than one exit from an ISR. If so, simply use
the RETURN statement to exit the ISR. SBasic will automatically
compile the proper instruction for leaving the interrupt section.
Example:
interrupt $fff0
if n = $66
return
endif
n = $10
end