<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title> words/intx.asm </title><meta name="keywords" content="amforth programming language Forth ATmega ATMEL"><meta name="description" content="amforth - laguage Forth for ATMEL ATmega"><!-- AUTOINCLUDE START "Page/Head.en.ihtml" DO NOT REMOVE --><link rel="StyleSheet" href="../../../../Web/CSS/MLAB.css" type="text/css" title="MLAB Basic Style"><link rel="StyleSheet" href="../../../../Web/CSS/MLAB_Print.css" type="text/css" media="print"><link rel="shortcut icon" type="image/x-icon" href="../../../../Web/PIC/MLAB.ico"><script type="text/javascript" src="../../../../Web/JS/MLAB_Menu.js"></script><!-- AUTOINCLUDE END --></head><body lang="en"><!-- AUTOINCLUDE START "Page/Header.en.ihtml" DO NOT REMOVE --><!-- ============== HEADER ============== --><div class="Header"><script type="text/javascript"><!--SetRelativePath("../../../../");DrawHeader();// --></script><noscript><p><b> JavaScript is required for including of the header </b></p></noscript></div><!-- AUTOINCLUDE END --><!-- AUTOINCLUDE START "Page/Menu.en.ihtml" DO NOT REMOVE --><!-- ============== MENU ============== --><div class="Menu"><script type="text/javascript"><!--SetRelativePath("../../../../");DrawMenu();// --></script><noscript><p><b> JavaScript is required for including of the menu </b><p></noscript></div><!-- AUTOINCLUDE END --><!-- ============== TEXT ============== --><div class="Text"><h1> words/intx.asm </h1><p><input type=button onClick="history.back()" value="Back"><input type=button onClick="history.forward()" value="Forward"><a href="../WordList.en.html">Jump to Vocabulary</a></p><pre>.set intcur = heap ; current interrupt.set heap = heap + 1.set intvec = heap ; forth interrupt vector (contain the XT).set heap = heap + INTVECTORS * CELLSIZE; interrupt routine gets called (again) by rcall! This gives the; address of the int-vector on the stack.isr:st -Y, r0in r0, SREGst -Y, r0pop r0pop r0 ; = intnum * intvectorsize + 1 (address following the rcall)dec r0.if intvecsize == 1 ;lsl r0.endifsts intcur, r0ld r0, Y+out SREG, r0ld r0, Y+set ; set the interrupt flag for the inner interpreterreti ; returns the interrupt, the rcall stack frame is removed!; ( xt i -- ) Interrupt; R( -- ); stores XT as interrupt vector iVE_INTSTORE:.db $04, "int!",0.dw VE_HEAD.set VE_HEAD = VE_INTSTOREXT_INTSTORE:.dw DO_COLONPFA_INTSTORE:.dw XT_2STAR.dw XT_DOLITERAL.dw intvec.dw XT_PLUS.dw XT_STORE.dw XT_EXIT; ( i -- xt ) Interrupt; R( -- ); fetches XT from interrupt vector iVE_INTFETCH:.db $04, "int@",0.dw VE_HEAD.set VE_HEAD = VE_INTFETCHXT_INTFETCH:.dw DO_COLONPFA_INTFETCH:.dw XT_2STAR.dw XT_DOLITERAL.dw intvec.dw XT_PLUS.dw XT_FETCH.dw XT_EXIT; ( -- n ) Interrupt; R( -- ); number of interrupt vectors (0 based)VE_NUMINT:.db $04, "#int",0.dw VE_HEAD.set VE_HEAD = VE_NUMINTXT_NUMINT:.dw PFA_DOVARIABLEPFA_NUMINT:.dw INTVECTORS; ( -- sreg ) Interrupt; R( -- ); turns off all interrupts and leaves SREG in TOSVE_INTOFF:.db $04, "/int",0.dw VE_HEAD.set VE_HEAD = VE_INTOFFXT_INTOFF:.dw PFA_INTOFFPFA_INTOFF:savetosclr toshin tosl, SREGclijmp_ DO_NEXT; ( -- ) Interrupt; R( -- ); turns on all interruptsVE_INTON:.db $03, "int".dw VE_HEAD.set VE_HEAD = VE_INTONXT_INTON:.dw PFA_INTONPFA_INTON:seijmp_ DO_NEXT; ( sreg -- ) Interrupt; R( -- ); restores SREG from TOS (;VE_INTRESTORE:; .db $0B, "int_restore"; .dw VE_HEAD; .set VE_HEAD = VE_INTRESTOREXT_INTRESTORE:.dw PFA_INTRESTOREPFA_INTRESTORE:out SREG, toslloadtosjmp_ DO_NEXT</pre><p><input type=button onClick="history.back()" value="Back"><input type=button onClick="history.forward()" value="Forward"><a href="../WordList.en.html">Jump to Vocabulary</a></p></div><!-- AUTOINCLUDE START "Page/Footer.en.ihtml" DO NOT REMOVE --><!-- ============== FOOTER ============== --><div class="Footer"><script type="text/javascript"><!--SetRelativePath("../../../../");DrawFooter();// --></script><noscript><p><b> JavaScript is required for including of the footer </b></p></noscript></div><!-- AUTOINCLUDE END --></body></html>