From d80736ab6e8e3cad2f1a30c6eaba2d6883dbe967 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 26 Aug 2017 20:31:40 +0200 Subject: Remove AmForth --- amforth-6.5/appl/eval-pollin/blocks/hd44780.frt | 115 - .../appl/eval-pollin/blocks/hello-world.frt | 81 - amforth-6.5/appl/eval-pollin/blocks/netio.frt | 32 - amforth-6.5/appl/eval-pollin/build.xml | 15 - amforth-6.5/appl/eval-pollin/dict_appl.inc | 8 - amforth-6.5/appl/eval-pollin/dict_appl_core.inc | 2 - amforth-6.5/appl/eval-pollin/p1284-16.eep.hex | 7 - amforth-6.5/appl/eval-pollin/p1284-16.hex | 646 -- amforth-6.5/appl/eval-pollin/p1284-16.lst | 10495 ------------------- amforth-6.5/appl/eval-pollin/p1284-16.map | 2253 ---- amforth-6.5/appl/eval-pollin/p1284-16.xml | 36 - amforth-6.5/appl/eval-pollin/p16-8.eep.hex | 7 - amforth-6.5/appl/eval-pollin/p16-8.hex | 625 -- amforth-6.5/appl/eval-pollin/p16-8.lst | 10363 ------------------ amforth-6.5/appl/eval-pollin/p16-8.map | 1961 ---- amforth-6.5/appl/eval-pollin/p16-8.xml | 36 - amforth-6.5/appl/eval-pollin/p32-16.xml | 45 - amforth-6.5/appl/eval-pollin/p32-8.eep.hex | 7 - amforth-6.5/appl/eval-pollin/p32-8.hex | 628 -- amforth-6.5/appl/eval-pollin/p32-8.lst | 10420 ------------------ amforth-6.5/appl/eval-pollin/p32-8.map | 1933 ---- amforth-6.5/appl/eval-pollin/p32-8.xml | 35 - amforth-6.5/appl/eval-pollin/p328-16.eep.hex | 7 - amforth-6.5/appl/eval-pollin/p328-16.hex | 633 -- amforth-6.5/appl/eval-pollin/p328-16.lst | 10427 ------------------ amforth-6.5/appl/eval-pollin/p328-16.map | 2054 ---- amforth-6.5/appl/eval-pollin/p328-16.xml | 36 - amforth-6.5/appl/eval-pollin/p644-16.eep.hex | 7 - amforth-6.5/appl/eval-pollin/p644-16.hex | 635 -- amforth-6.5/appl/eval-pollin/p644-16.lst | 10444 ------------------ amforth-6.5/appl/eval-pollin/p644-16.map | 2133 ---- amforth-6.5/appl/eval-pollin/p644-16.xml | 27 - amforth-6.5/appl/eval-pollin/p8-12.xml | 25 - amforth-6.5/appl/eval-pollin/pollin.asm | 21 - amforth-6.5/appl/eval-pollin/words/applturnkey.asm | 30 - 35 files changed, 66229 deletions(-) delete mode 100644 amforth-6.5/appl/eval-pollin/blocks/hd44780.frt delete mode 100644 amforth-6.5/appl/eval-pollin/blocks/hello-world.frt delete mode 100644 amforth-6.5/appl/eval-pollin/blocks/netio.frt delete mode 100644 amforth-6.5/appl/eval-pollin/build.xml delete mode 100644 amforth-6.5/appl/eval-pollin/dict_appl.inc delete mode 100644 amforth-6.5/appl/eval-pollin/dict_appl_core.inc delete mode 100644 amforth-6.5/appl/eval-pollin/p1284-16.eep.hex delete mode 100644 amforth-6.5/appl/eval-pollin/p1284-16.hex delete mode 100644 amforth-6.5/appl/eval-pollin/p1284-16.lst delete mode 100644 amforth-6.5/appl/eval-pollin/p1284-16.map delete mode 100644 amforth-6.5/appl/eval-pollin/p1284-16.xml delete mode 100644 amforth-6.5/appl/eval-pollin/p16-8.eep.hex delete mode 100644 amforth-6.5/appl/eval-pollin/p16-8.hex delete mode 100644 amforth-6.5/appl/eval-pollin/p16-8.lst delete mode 100644 amforth-6.5/appl/eval-pollin/p16-8.map delete mode 100644 amforth-6.5/appl/eval-pollin/p16-8.xml delete mode 100644 amforth-6.5/appl/eval-pollin/p32-16.xml delete mode 100644 amforth-6.5/appl/eval-pollin/p32-8.eep.hex delete mode 100644 amforth-6.5/appl/eval-pollin/p32-8.hex delete mode 100644 amforth-6.5/appl/eval-pollin/p32-8.lst delete mode 100644 amforth-6.5/appl/eval-pollin/p32-8.map delete mode 100644 amforth-6.5/appl/eval-pollin/p32-8.xml delete mode 100644 amforth-6.5/appl/eval-pollin/p328-16.eep.hex delete mode 100644 amforth-6.5/appl/eval-pollin/p328-16.hex delete mode 100644 amforth-6.5/appl/eval-pollin/p328-16.lst delete mode 100644 amforth-6.5/appl/eval-pollin/p328-16.map delete mode 100644 amforth-6.5/appl/eval-pollin/p328-16.xml delete mode 100644 amforth-6.5/appl/eval-pollin/p644-16.eep.hex delete mode 100644 amforth-6.5/appl/eval-pollin/p644-16.hex delete mode 100644 amforth-6.5/appl/eval-pollin/p644-16.lst delete mode 100644 amforth-6.5/appl/eval-pollin/p644-16.map delete mode 100644 amforth-6.5/appl/eval-pollin/p644-16.xml delete mode 100644 amforth-6.5/appl/eval-pollin/p8-12.xml delete mode 100644 amforth-6.5/appl/eval-pollin/pollin.asm delete mode 100644 amforth-6.5/appl/eval-pollin/words/applturnkey.asm (limited to 'amforth-6.5/appl/eval-pollin') diff --git a/amforth-6.5/appl/eval-pollin/blocks/hd44780.frt b/amforth-6.5/appl/eval-pollin/blocks/hd44780.frt deleted file mode 100644 index 0524f5f..0000000 --- a/amforth-6.5/appl/eval-pollin/blocks/hd44780.frt +++ /dev/null @@ -1,115 +0,0 @@ -\ -\ Module: hd44780 routines -\ use the hd44780 module in 8bit mode -\ v 0.9 - -\ needs marker.frt and bitnames.frt from lib - -marker _hd44780_ - - -hex - -\ for the pollin addon board 1.0 -1b 20 + constant hd44780-data \ PORTA -18 20 + constant hd44780-ctrl \ PORTB - -hd44780-ctrl 1 portpin: hd44780-rw -hd44780-ctrl 0 portpin: hd44780-en -hd44780-ctrl 2 portpin: hd44780-rs - -2 constant hd44780-pulse-delay -a constant hd44780-short-delay - -: hd44780-pulse-en - hd44780-en high - hd44780-pulse-delay ms - hd44780-en low - hd44780-pulse-delay ms -; - -: hd44780-data-mode - hd44780-rs high -; - -: hd44780-command-mode - hd44780-rs low -; - - -: hd44780-read-mode - 0 hd44780-data 1- c! \ input - hd44780-rw high -; - -: hd44780-write-mode - ff hd44780-data 1- c! \ output - hd44780-rw low -; - -: hd44780-read-data ( -- c ) - hd44780-read-mode - hd44780-pulse-en - hd44780-short-delay ms - hd44780-data 1- 1- c@ -; - -: hd44780-wait - hd44780-read-mode - hd44780-rw high - hd44780-rs low - hd44780-pulse-en - begin - hd44780-data 1- 1- c@ - 80 and - until -; - -: hd44780-command ( n -- ) - hd44780-wait - hd44780-write-mode - hd44780-command-mode - hd44780-data c! - hd44780-pulse-en -; - -: hd44780-emit ( c -- ) - hd44780-write-mode - hd44780-data-mode - hd44780-data c! - hd44780-pulse-en -; - -: hd44780-init - hd44780-rw pin_output - hd44780-en pin_output - hd44780-rs pin_output -; -\ from tracker: hd44780.frt - added LCD initialization - ID: 2785157 -: hd44780-cmd-no-wait ( n -- ) - hd44780-write-mode - hd44780-command-mode - hd44780-data c! - hd44780-pulse-en -; - -: hd44780-start - hd44780-init - 15 ms - 30 hd44780-cmd-no-wait - 4 ms - 30 hd44780-cmd-no-wait - 1 ms - 30 hd44780-cmd-no-wait - 38 hd44780-command - 6 hd44780-command - c hd44780-command - 1 hd44780-command -; - - -: hd44780-page ( clear page ) - 1 hd44780-command ( clear hd44780 ) - 3 hd44780-command ( cursor home ) -; - diff --git a/amforth-6.5/appl/eval-pollin/blocks/hello-world.frt b/amforth-6.5/appl/eval-pollin/blocks/hello-world.frt deleted file mode 100644 index 94073b8..0000000 --- a/amforth-6.5/appl/eval-pollin/blocks/hello-world.frt +++ /dev/null @@ -1,81 +0,0 @@ -\ test routines for the atmel evaluation -\ boards from www.pollin.de -\ needs the device register definitions loaded - -#require ms.frt - -marker _pollin_ - -decimal - -\ wait some milliseconds -: blinkdelay 250 ms ; - -PORTD 5 portpin: led1 -PORTD 6 portpin: led2 - -PORTD 2 portpin: key1 -PORTD 3 portpin: key2 -PORTD 4 portpin: key3 - -GICR 7 portpin: en_int1 -GICR 6 portpin: en_int0 -GICR 5 portpin: en_int2 - -: +demoports - led1 pin_output - led2 pin_output - key1 pin_input - key2 pin_input - key3 pin_input - - 05 MCUCR c! \ int0/1 - en_int1 high - en_int0 high - en_int2 low -; - -\ test runs until a terminal-key is pressed - -\ as long as a key on the board is pressed the -\ corresponding led/buzzer is turned on -: keys - begin - PIND c@ - [ hex ] fc and - 3 lshift - PORTD c! - key? until - key drop \ we do not want to keep this key stroke -; - - -: blink ( -- ) - led1 high blinkdelay - led2 high blinkdelay - led2 low blinkdelay - led1 low blinkdelay -; - -: led1blink - led1 high - blinkdelay - led1 low -; - -\ simple lights on/off -: led - begin - blink - key? - until - key drop \ we do not want to keep this key stroke -; - -\ interrupt processing takes a long time, do not -\ press the key while it runs... -\ ' led1blink 1 int! -\ ' noop 2 int! - -\ autoconfig the i/o ports -\ ' portinit 'turnkey e! diff --git a/amforth-6.5/appl/eval-pollin/blocks/netio.frt b/amforth-6.5/appl/eval-pollin/blocks/netio.frt deleted file mode 100644 index 6c1f62c..0000000 --- a/amforth-6.5/appl/eval-pollin/blocks/netio.frt +++ /dev/null @@ -1,32 +0,0 @@ - -\ Definitions for the netio-addon board - -\ SPI communication pins - PORTB 4 portpin: /ss - PORTB 5 portpin: _mosi - PORTB 6 portpin: _miso - PORTB 7 portpin: _clk - -\ setup the SPI pins - : +spi ( -- ) - /ss high \ activate pullup! - _mosi high _mosi pin_output - _clk low _clk pin_output - ; - - : -spi 0 SPCR c! ; - - \ transfer 1 cell - : >< c!@spi - swap c!@spi - swap >< + - ; - -: +mmc - /ss low -; -: -mmc - /ss high -; - diff --git a/amforth-6.5/appl/eval-pollin/build.xml b/amforth-6.5/appl/eval-pollin/build.xml deleted file mode 100644 index 081eea6..0000000 --- a/amforth-6.5/appl/eval-pollin/build.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/amforth-6.5/appl/eval-pollin/dict_appl.inc b/amforth-6.5/appl/eval-pollin/dict_appl.inc deleted file mode 100644 index a7e4b42..0000000 --- a/amforth-6.5/appl/eval-pollin/dict_appl.inc +++ /dev/null @@ -1,8 +0,0 @@ -; this dictionary contains optional words -; they may be moved to the core dictionary if needed -.include "words/dot-s.asm" -.include "words/spirw.asm" -.include "words/n-spi.asm" -.include "words/applturnkey.asm" -.include "dict/compiler2.inc" -.include "words/2r_fetch.asm" diff --git a/amforth-6.5/appl/eval-pollin/dict_appl_core.inc b/amforth-6.5/appl/eval-pollin/dict_appl_core.inc deleted file mode 100644 index 93c0d8a..0000000 --- a/amforth-6.5/appl/eval-pollin/dict_appl_core.inc +++ /dev/null @@ -1,2 +0,0 @@ -; This file is intentionally left empty -; do not delete it! diff --git a/amforth-6.5/appl/eval-pollin/p1284-16.eep.hex b/amforth-6.5/appl/eval-pollin/p1284-16.eep.hex deleted file mode 100644 index dfec159..0000000 --- a/amforth-6.5/appl/eval-pollin/p1284-16.eep.hex +++ /dev/null @@ -1,7 +0,0 @@ -:10004600FFFF9A05CB01A00042046E00B040EC040D -:0A0056004DF55A00A8FD01005A0004 -:06006E0002003FFB2BFB2A -:1000780090F37A0000000000FF40AF40AF4000005E -:100088000A00B600C4008B00A60040FD00002DFD4C -:0800980005FA24FA14FA19001C -:00000001FF diff --git a/amforth-6.5/appl/eval-pollin/p1284-16.hex b/amforth-6.5/appl/eval-pollin/p1284-16.hex deleted file mode 100644 index 1f80cb8..0000000 --- a/amforth-6.5/appl/eval-pollin/p1284-16.hex +++ /dev/null @@ -1,646 +0,0 @@ -:020000020000FC -:0200040039D1F0 -:0200080037D1EE -:02000C0035D1EC -:0200100033D1EA -:0200140031D1E8 -:020018002FD1E6 -:02001C002DD1E4 -:020020002BD1E2 -:0200240029D1E0 -:0200280027D1DE -:02002C0025D1DC -:0200300023D1DA -:0200340021D1D8 -:020038001FD1D6 -:02003C001DD1D4 -:020040001BD1D2 -:0200440019D1D0 -:0200480017D1CE -:02004C0015D1CC -:0200500013D1CA -:0200540011D1C8 -:020058000FD1C6 -:02005C000DD1C4 -:020060000BD1C2 -:0200640009D1C0 -:0200680007D1BE -:02006C0005D1BC -:0200700003D1BA -:0200740001D1B8 -:02007800FFD0B7 -:02007C00FDD0B5 -:02008000FBD0B3 -:02008400F9D0B1 -:10008800F7D000400010FFFF23000B0041546D65BE -:10009800676131323834500007FF3E72782D62753F -:1000A800660000005700082F10911001E0E0F1E011 -:1000B800E10FF31D008313951F70109310018991B0 -:1000C80099910C9405F006FF6973722D72785000AF -:1000D80001F046F0C600AAF0C3F046F003009AFD0E -:1000E8003FF0770074FA560026F001F046F06C00F5 -:1000F80046F02800A2F446F0000146F0160066F12A -:10010800EAF426F006FF72782D627566670001F042 -:10011800A6003FF08C0046F01101AAF0C3F046F0AB -:100128000001AFF1AAF0D6F041F246F00F0025F237 -:1001380046F011019FF026F007FF72783F2D627597 -:100148006600860001F06CFA46F01101AAF046F04C -:100158001001AAF025F126F007FF74782D706F6C56 -:100168006C00A00001F0C4003FF0B70046F0C600E4 -:100178009FF026F008FF74783F2D706F6C6CB0000C -:1001880001F06CFA46F0C000AAF046F0200025F213 -:1001980026F004FF75627272BE0081F09E00CFFBEC -:1001A800D9FB06FF2B7573617274CD0001F046F020 -:1001B800980046F0C1009FF046F0060046F0C200E5 -:1001C8009FF0D100C3F00BF346F0C5009FF046F056 -:1001D800C4009FF0790026F008FF31772E7265730E -:1001E8006574D500F7009A938A93249A2C98E0E8CE -:1001F800F7E03197F1F71FB7F8942C9A2498E0E0CC -:10020800F1E03197F1F783B184FF9FEF1FBF249886 -:100218002C98E0E8F6E03197F1F7892F0C9405F077 -:1002280007FF31772E736C6F7400F0001B012C9858 -:10023800249A1FB7F894E8E1F0E03197F1F7889431 -:10024800879510F42C9A2498E4E2F0E03197F1F7BE -:1002580003B104FD8068ECECF0E03197F1F72C9ADB -:100268002498E8E0F0E03197F1F71FBF0C9405F00F -:040000000C9475FAED -:100278000A920FB60A920F900F900A94B02CFF932F -:10028800EF93E2E1F1E00694E00DF31D00800394A2 -:100298000082EF91FF9109900FBE0990089502FF27 -:1002A8006D2B140101F082FD30F426F003FF756414 -:1002B8002A00530101F0C3F011F1F2F1EBF0D6F08E -:1002C80008F1F2F1F3F0AFF126F004FF756D6178F3 -:1002D8005A0101F080F56EF13FF07301D6F0EBF0B2 -:1002E80026F004FF756D696E690101F080F579F1FA -:1002F8003FF07F01D6F0EBF026F001F046F00080E9 -:1003080025F22CF13FF08A01A1FD26F05DF126F0DF -:100318000AFF6E616D653E666C616773750101F079 -:10032800E3F346F000FF25F226F006FF6E657765D9 -:1003380073748C0154F0350106FF6C617465737435 -:10034800990154F0390108FF2863726561746529C1 -:10035800A00101F0CFF90403C3F09E0179F593F0F1 -:10036800E9029E0193F026F001005C00A70101F06C -:10037800B6F902F199F593F026F001002800B801CA -:1003880001F046F02900A2F989F526F007FF636F0E -:100398006D70696C6500C10101F008F1C3F0C6FB1E -:1003A80011F1E3F3DB0126F001FF2C00CA0101F093 -:1003B800C9F585F3C9F541F2B4FBCAF526F0030087 -:1003C8005B275D00D80101F025F8F10126F0070050 -:1003D8006C69746572616C00E30101F0D00146F04C -:1003E800DB0126F00800736C69746572616CEB01BF -:1003F80001F0D00188F796F726F001F0C9F5D00191 -:10040800FFFF26F001F072FBC9F5D6F085F326F060 -:1004180001F0C9F526F001F072FBDB0126F00500BA -:10042800616865616400F60101F0D00135F00102F0 -:1004380026F002006966130201F0D0013FF00102C4 -:1004480026F00400656C73651D0201F0D00135F0DB -:100458000102D6F0060226F004007468656E2502D3 -:1004680001F0060226F00500626567696E00300239 -:1004780001F00C0226F005007768696C6500370208 -:1004880001F02002D6F026F00600726570656174EE -:100498003F0201F06102340226F00500756E7469AE -:1004A8006C00480201F046F03FF0DB010F0226F035 -:1004B8000500616761696E00510201F0D00135F0F5 -:1004C8000F0226F00200646F5C0201F0D001ADF269 -:1004D8000C0266F1C40226F004006C6F6F706602AD -:1004E80001F0D001DBF2AB0226F005002B6C6F6F38 -:1004F8007000700201F0D001CCF2AB0226F00500CA -:100508006C6561766500790201F0D001E6F21802A7 -:10051800C40226F003003F646F00830201F0D0019B -:100528009A0220026902D6F0C40226F001F080F592 -:100538009AFDC3F011F13FF0A20289F508F10FF21C -:1005480026F007FF656E646C6F6F70008E0201F015 -:100558000F02B802CBF03FF0B402340235F0AD021E -:1005680026F002FF6C3EA50201F0D7028BF08BF05B -:1005780046F0FEFFD70277F226F002FF3E6CB50286 -:1005880001F0A6FDD70277F2D7028BF093F026F0A0 -:1005980003FF6C703000C10281F05200CFFBD9FB21 -:1005A80002FF6C70CC0254F03B0106FF6372656178 -:1005B8007465D40201F0AD010D03D00161F026F09D -:1005C80006FF686561646572D90201F0C9F511F129 -:1005D80011F1C3F03AF13FF0FB02C3F046F000FF1F -:1005E8002EF29AF708F171F3DB0108F126F046F0D4 -:1005F800F0FF5CF807FF776C73636F706500E402C7 -:100608002EFC4E00CFFBD9FB06FF72657665616C48 -:10061800FE0201F09E0179F58BF0CBF03FF0180354 -:100628009E018BF0D6F04DF326F00500646F6573DC -:100638003E00080301F0D0013103D0010E94D0012F -:10064800260326F09A938A93CB0101967F916F91A6 -:10065800BF93AF93DB010C9405F001F008F19E0104 -:1006680079F58BF071F399FC85F326F001FF3A00D8 -:10067800190301F0AD014803EBF026F007FF3A6ECD -:100688006F6E616D65003A0301F0C9F5C3F0A5010D -:1006980093F0D00101F05D0326F001003B00420316 -:1006A80001F0D00126F065030D0326F001FF5D007F -:1006B800510301F0A1FD66F593F026F001005B00FF -:1006C8005A0301F066F166F593F026F008FF7661AB -:1006D800726961626C65620301F0DAF57C03A6FD5C -:1006E800E3F526F008FF636F6E7374616E746A0336 -:1006F80001F0AD010D03D00154F0DB0126F004FF39 -:1007080075736572760301F0AD010D03D00167F0D2 -:10071800DB0126F007007265637572736500830359 -:1007280001F0A5018BF0DB0126F009FF696D6D650D -:100738006469617465008E0301F0420471F3C3F0CB -:10074800E3F346F0FF7F25F2D6F085F326F00600A6 -:100758005B636861725D990301F0D00146F005F9A9 -:10076800DB0126F0060061626F727422AB0301F0B0 -:10077800DCF4D001CD0326F005FF61626F727400CE -:10078800B60301F05DF15CF806FF3F61626F7274B9 -:10079800C00301F0F3F03FF0D303BBF7C50389F5BD -:1007A80026F009FF6765742D737461636B00C803D5 -:1007B80001F0C3F079F5D6F071F3C3F011F166F1E9 -:1007C800D6F09A023FF0F303ADF2BEF247F273F5AA -:1007D800E1F0AFF171F3D6F05DF1CCF2E90389F500 -:1007E80008F126F009FF7365742D737461636B005B -:1007F800D50301F0E1F033F13FF0050446F0FCFFCA -:100808005CF880F54DF3D6F066F19A023FF01204D9 -:10081800ADF279F591F54DF3DBF20D04EBF026F02E -:1008280009FF6D61702D737461636B00F60301F04D -:10083800C3F079F5D6F071F373F579FD9A023FF0BC -:100848003704ADF2BEF271F3D6F011F11AF130F0BF -:10085800CBF03FF0330408F1EBF0E6F226F008F1B4 -:10086800A6FDCCF22604EBF066F126F00BFF6765D7 -:10087800742D63757272656E7400140401F046F08D -:10088800580071F326F009FF6765742D6F7264656F -:1008980072003A0401F046F05C00DC0326F009FF20 -:1008A8006366672D6F7264657200470454F05C00DC -:1008B80007FF636F6D706172650053046304BF9333 -:1008C800AF938C0189919991DC01899199919C014F -:1008D80089919991FC01ED90F190EF1451F40A95EA -:1008E80019F02A95C1F701C02A95022B11F488271F -:1008F80002C08FEF00C0982FAF91BF910C9405F004 -:1009080007FF6E66613E6C6661005C0401F08DFC59 -:1009180041F216F2AFF126F002FF2E73840401F0C3 -:10092800BCFA63F4FDF7BCFA66F19A023FF0A20440 -:10093800ADF2BEF2CAF463F4DBF29D0426F006FFC2 -:100948006321407370699004A90403D099270C941B -:1009580005F08EBD0DB5087F0DBD0DB507FFFACFAB -:100968008EB5089505FF6E4073706900A304BC043A -:100978008C0189919991FC01C8012EBC2DB527FFE6 -:10098800FDCF2EB521930197C1F7899199910C94C8 -:1009980005F005FF6E2173706900B604D3048C015D -:1009A80089919991FC01C80121912EBD2DB527FF90 -:1009B800FDCF2EB50197C1F7899199910C9405F057 -:1009C8000BFF6170706C7475726E6B657900CD0485 -:1009D80001F0DA0094F47FFBFDF75BF546F0E803DD -:1009E800D4F102F1F8F53DF788F704006B487A2056 -:1009F800BBF726F00BFF7365742D63757272656E15 -:100A08007400E40401F046F058004DF326F008FFA6 -:100A1800776F72646C697374FE0401F0D2F566F145 -:100A2800E1F04DF3C3F079F5B4FBD3F526F00EFFF2 -:100A3800666F7274682D776F72646C6973740B05D6 -:100A480054F05A0009FF7365742D6F726465720063 -:100A58001B0501F046F05C00FD0326F00FFF7365EF -:100A6800742D7265636F676E697A65727300260507 -:100A780001F046F06E00FD0326F00FFF6765742D48 -:100A88007265636F676E697A65727300320501F08B -:100A980046F06E00DC0326F004FF636F64654105D1 -:100AA80001F0AD010D03C9F5C6FBDB0126F008FF17 -:100AB800656E642D636F6465500501F0D0010C9478 -:100AC800D00105F026F008FF286D61726B65722968 -:100AD8005B0581F07A00CFFBD9FB0800706F737457 -:100AE800706F6E65670501F0CFF9E7FAF2FAC3F0A7 -:100AF80011F1C6FBC6FBE3F330F008F1C6FBE3F3E4 -:100B0800DB0126F003FF3272400071058B059A93D2 -:100B18008A93EF91FF918F919F919F938F93FF936A -:0C0B2800EF939A938A93CF010C9405F090 -:020000021000EC -:10E00200BF93AF93DB011196B21499F4FD0155272A -:10E01200EE0FFF1F551F5BBF679177911196FB01B2 -:10E022005527EE0FFF1F551F5BBF07911791F80190 -:10E0320009949A938A938B2D9927BB246DEB74EFE5 -:10E04200EECF04FF65786974860527F0AF91BF9122 -:10E05200DBCF07FF657865637574650022F031F0E8 -:10E06200BC0189919991DBCF36F0FD015527EE0F66 -:10E07200FF1F551F5BBFA791B791C6CF40F0982BEA -:10E082008991999191F31196BFCF47F09A938A9310 -:10E09200FD015527EE0FFF1F551F5BBF879197911B -:10E0A2001196B2CF54F09A938A93FB013196552779 -:10E0B200EE0FFF1F551F5BBF87919791A5CF61F0B0 -:10E0C2009A938A93CB0101969FCF67F09A938A9392 -:10E0D200FB0131965527EE0FFF1F551F5BBF87913E -:10E0E2009791840D951D90CF07FF2876616C756519 -:10E0F20029002AF001F0AD010D03D00181F026F0D4 -:10E102000E942603C3F0C6FBE3F330F026F001FFC2 -:10E11200400075F08CF0FC018191919175CF01FF67 -:10E12200210088F094F0FC01899199919183808378 -:10E132008991999169CF02FF632190F0A0F0FC01CF -:10E14200899199918083899199915ECF02FF634071 -:10E152009CF0ABF0FC019927808156CF02FF4075FD -:10E16200A7F001F014F3AFF18BF026F002FF217556 -:10E17200AFF001F014F3AFF193F026F003FF6475F2 -:10E182007000B7F0C4F09A938A933ECF04FF3F64C5 -:10E192007570BFF0CCF0082F092B11F09A938A9377 -:10E1A20033CF04FF73776170C7F0D7F08C01899188 -:10E1B20099911A930A9328CF04FF6F766572D2F071 -:10E1C200E2F09A938A938A819B811ECF04FF647244 -:10E1D2006F70DDF0ECF08991999116CF03FF726FA9 -:10E1E2007400E7F0F4F08C012991399189919991A9 -:10E1F2003A932A931A930A9307CF03FF6E6970002A -:10E20200EFF003F1229600CF02FF723EFEF009F119 -:10E212009A938A938F919F91F7CE02FF3E7205F1F6 -:10E2220012F19F938F9389919991EECE02FF7240E2 -:10E232000EF11BF19A938A938F919F919F938F93E3 -:10E24200E3CE02FF3C3E17F101F09AFD2CF126F0DD -:10E2520002FF303D22F12DF1982BD1F530C002FFA3 -:10E26200303C29F134F197FD2AC032C002FF303E22 -:10E2720030F13BF1821593055CF151F120C003FFAF -:10E2820064303E0037F145F18215930589919991E9 -:10E2920082059305ECF0E1F012C003FF64303C000C -:10E2A20040F153F1229697FD0C9460F10C9469F1C0 -:10E2B20004FF747275654EF15EF19A938A938FEF43 -:10E2C2009FEFA2CE01FF300059F167F19A938A9332 -:10E2D200C1019ACE02FF753C63F16FF12991399128 -:10E2E20082179307A8F3A1F3EACF02FF753E6BF101 -:10E2F20001F0D6F06EF126F001FF3C0076F181F1DB -:10E3020029913991281739071CF7D9CF01FF3E000F -:10E312007DF18BF12991399128173907CCF2C1F29D -:10E32200CECF04FF6C6F673287F197F1FC0199271A -:10E3320080E18A9522F0EE0FFF1FD8F765CE9A95FD -:10E3420063CE01FF2D0092F1A6F109911991081BEC -:10E35200190BC80159CE01FF2B00A2F1B0F10991AE -:10E362001991800F911F50CE02FF6D2AACF1B9F1C5 -:10E372008C01899199919C0131027001209FC00109 -:10E382003003F308900DE11CF31C1203F308900D07 -:10E39200E11CF31C9A938A93C70136CE06FF756D72 -:10E3A2002F6D6F64B5F1D5F17C01299139910991F5 -:10E3B200199140E15527000F111F221F331F551FCE -:10E3C2002E153F05520518F003952E193F094A955F -:10E3D20089F73A932A93C80117CE03FF756D2A0075 -:10E3E200CFF1F3F18C0189919991809FF00122275D -:10E3F2003327909FF00D211D331D819FF00D211DAC -:10E40200331D919F200D311DCF019A938A93C9012B -:10E41200FBCD06FF696E76657274EEF110F280959F -:10E422009095F2CD02FF322F0AF217F29595879559 -:10E43200EBCD02FF322A13F21EF2880F991FE4CDB0 -:10E4420003FF616E64001AF226F20991199180238A -:10E452009123DACD02FF6F7221F22FF20991199105 -:10E46200802B912BD1CD03FF786F72002BF239F202 -:10E472000991199180279127C7CD02FF312B34F2E0 -:10E4820042F20196C1CD02FF312D3EF248F20197D0 -:10E49200BBCD07FF3F6E65676174650044F201F012 -:10E4A20033F13FF055F25AF626F006FF6C736869B5 -:10E4B20066744AF25CF2FC018991999131971AF0E3 -:10E4C200880F991FFBCFA0CD06FF7273686966742F -:10E4D20056F26BF2FC018991999131971AF0969557 -:10E4E2008795FBCF91CD02FF2B2165F278F2FC01DB -:10E4F2008991999120813181820F931F8083918329 -:10E502008991999181CD03FF7270400074F289F272 -:10E512009A938A938DB79EB777CD03FF72702100CD -:10E5220084F293F22FB7F8948DBF9EBF2FBF8991CB -:10E5320099916ACD03FF737040008EF2A0F29A9314 -:10E542008A93CE0161CD03FF737021009BF2A9F281 -:10E55200EC018991999158CDAEF229913991E0E877 -:10E562003E0F821B930B3F932F939F938F9389911F -:10E5720099914ACD01FF6900A4F2BFF29A938A935E -:10E582008F919F91EF91FF91FF93EF939F938F93C1 -:10E592008E0F9F1F39CDCDF2EF91FF91E80FF91F3A -:10E5A200899199911BF0FF93EF935FCD0F911F918A -:10E5B20011962ACDDCF2EF91FF913196BBF3F3CFA6 -:10E5C20006FF756E6C6F6F70BBF2E7F21F910F91D1 -:10E5D2001F910F9119CD06FF636D6F76653EE1F2D3 -:10E5E200F2F2BF93AF93E991F991A991B991092FF1 -:10E5F200082B41F0E80FF91FA80FB91F1E911293C3 -:10E602000197E1F7AF91BF9189919991FDCC02FFFA -:10E612003E3CECF20CF3092F982F802FF5CC03FF30 -:10E622007570400008F315F39A938A93C201ECCCFB -:10E6320003FF7570210010F31EF32C01899199914B -:10E64200E3CC03FF316D730019F327F3E0EAFFE037 -:10E652003197F1F7D9CC03FF323E720022F331F346 -:10E66200FC01899199919F938F93FF93EF938991E5 -:10E672009991CACC03FF32723E002CF340F39A9375 -:10E682008A93EF91FF918F919F919A938A93CF01F1 -:10E69200BBCC02FF21653BF34EF3FC0189919991BA -:10E6A2002FB7F89428D000B5081709F00BD031968F -:10E6B20022D000B5091711F0892F04D02FBF8991FC -:10E6C2009991A2CCF999FECF07B700FDFDCFF2BD1B -:10E6D200E1BD80BDFA9AF99A089502FF40654AF3B6 -:10E6E20072F32FB7F894FC0106D080B5319603D0AF -:10E6F20090B52FBF89CCF999FECFF2BDE1BDF89A52 -:10E70200089502FF21696EF32EFC7800CFFBD9FB3E -:10E7120009FF2821692D6E727777290082F391F320 -:10E722001FB71F93F8949C0189919991AF93BF935E -:10E73200CF93DF9309D0DF91CF91BF91AF918991B0 -:10E7420099911F911FBF60CC10D0E094F0948E215C -:10E752009F21982B19F0F90102E023D0F90104E07E -:10E7620020D0F90100E11DD00895F901E078FF7F82 -:10E77200EF01A0E8B0E0FE015527EE0FFF1F551F85 -:10E782005BBF47915791FE01E217F30711F00A01AF -:10E7920002C07A010C01002704D02196119759F783 -:10E7A2000895F999FECF17B710FDFDCF5527EE0F4B -:10E7B200FF1F551F5BBF016007BFE895089502FF69 -:10E7C200406989F3E4F3FC015527EE0FFF1F551F43 -:10E7D2005BBF8791979118CC03FF6E3E7200E0F306 -:10E7E200F2F3FC01082F899199919F938F930A95D7 -:10E7F200D1F7EF93FF938991999106CC03FF6E7243 -:10E802003E00EDF304F49A938A93FF91EF910E2F59 -:10E812008F919F919A938A930A95D1F7CF01F4CB66 -:10E8220003FF64322A00FFF316F409911991000FD5 -:10E83200111F881F991F1A930A93E6CB03FF6432B4 -:10E842002F0011F424F40991199195958795179544 -:10E8520007951A930A93D8CB02FF642B1FF431F465 -:10E8620029913991E990F99049915991240F351FD5 -:10E872008E1D9F1D3A932A93C7CB02FF642D2DF460 -:10E8820042F429913991E990F99049915991421BA9 -:10E89200530BE80AF90A5A934A93C701B5CB07FF0B -:10E8A20064696E76657274003EF457F409911991A9 -:10E8B20080959095009510951A930A93A5CB02FF27 -:10E8C200752E50F401F066F145F726F003FF752E20 -:10E8D200720060F401F066F1D6F04EF726F00DFFFB -:10E8E20073686F772D776F72646C6973740067F465 -:10E8F20001F046F07FF4D6F072FC26F001F08DFCB8 -:10E90200BBF7FDF75DF126F005FF776F72647300C8 -:10E9120070F401F046F05E0071F379F426F004FF22 -:10E922002B696E7485F495F478946ECB04FF2D698F -:10E932006E7490F49CF4F89467CB04FF696E7421B2 -:10E9420097F401F046F00000AFF14DF326F004FF1A -:10E95200696E74409EF401F046F00000AFF171F36D -:10E9620026F008FF696E742D74726170A8F4B9F410 -:10E97200B82E8991999148CB01F0ACF430F0C2F4F1 -:10E9820026F0C3F401D040CB189504FF7069636B85 -:10E99200B2F401F041F273F59FF2AFF18BF026F081 -:10E9A20002002E22C6F401F0DCF4D001BBF726F0FF -:10E9B20002007322D1F401F046F02200A2F966F5BA -:10E9C2008BF03FF0E5F4FC0126F004FF66696C6C05 -:10E9D200D9F401F0F3F0F3F0CBF03FF0F7F479FD66 -:10E9E200ADF2C3F0BEF29FF0DBF2F2F4EBF026F0F0 -:10E9F2000BFF656E7669726F6E6D656E7400E6F47C -:10EA020054F0560009FF776F72646C697374730077 -:10EA1200000001F046F0080026F004FF2F70616448 -:10EA220003F501F09FF29FF5A5F126F005FF2F688F -:10EA32006F6C64000EF501F09FF5DAF5A5F126F092 -:10EA42000AFF666F7274682D6E616D6517F501F0CD -:10EA520088F70700616D666F7274680026F007FF21 -:10EA620076657273696F6E0021F501F046F0410020 -:10EA720026F003FF6370750030F501F046F049009F -:10EA8200E7F726F008FF6D63752D696E666F3AF53C -:10EA920001F046F0450026F005FF2F757365720000 -:10EAA20043F501F046F02C0026F005FF665F637027 -:10EAB2007500F9F401F046F0002446F0F40026F067 -:10EAC20005FF73746174650056F554F03D0104FF4F -:10EAD2006261736561F567F00C0005FF63656C6C3C -:10EAE200730068F51EF205FF63656C6C2B006EF512 -:10EAF2007AF5029689CA04FF3264757074F501F0E2 -:10EB0200E1F0E1F026F005FF3264726F70007CF5EF -:10EB120001F0EBF0EBF026F004FF7475636B84F503 -:10EB220001F0D6F0E1F026F003FF3E696E008DF5AC -:10EB320067F0180003FF7061640095F501F0DAF5E3 -:10EB420046F02800AFF126F004FF656D69749BF56D -:10EB52002EFC0E00F7FB03FC05FF656D69743F0098 -:10EB6200A5F52EFC1000F7FB03FC03FF6B65790093 -:10EB7200ADF52EFC1200F7FB03FC04FF6B65793F39 -:10EB8200B6F52EFC1400F7FB03FC02FF6470BEF521 -:10EB920081F04800CFFBD9FB05FF6568657265000F -:10EBA200C6F581F04C00CFFBD9FB04FF68657265A6 -:10EBB200CDF581F04A00CFFBD9FB05FF616C6C6F8C -:10EBC2007400D6F501F0DAF5AFF1B4FBDBF526F00F -:10EBD20003FF62696E00DEF501F0A6FD6CF593F0AD -:10EBE20026F007FF646563696D616C00E9F501F069 -:10EBF20046F00A006CF593F026F003FF6865780092 -:10EC0200F2F501F046F010006CF593F026F002FFE9 -:10EC1200626CFEF554F0200007FF7475726E6B652E -:10EC2200790008F62EFC5400CFFBD9FB04FF2F6DB0 -:10EC32006F640DF61CF69C0109911991412F43272F -:10EC420017FF04C0109500950F5F1F4F37FF04C0D8 -:10EC5200309520952F5F3F4FEE24FF1851E1001FA2 -:10EC6200111F5A9539F447FF04C0109500950F5FA4 -:10EC72001F4F0BC0EE1CFF1CE21AF30A20F4E20E37 -:10EC8200F31E8894ECCF0894EACFFA92EA92C80174 -:10EC9200BBC905FF752F6D6F640017F601F011F106 -:10ECA20066F108F1D4F126F006FF6E6567617465BE -:10ECB2004AF601F00FF241F226F001FF2F0055F65D -:10ECC20001F01BF602F126F003FF6D6F64005EF6A1 -:10ECD20001F01BF6EBF026F003FF6162730065F6AC -:10ECE20001F0C3F050F226F003FF6D696E006DF67D -:10ECF20001F080F58AF13FF07FF6D6F0EBF026F0D6 -:10ED020003FF6D61780075F601F080F580F13FF048 -:10ED12008BF6D6F0EBF026F006FF77697468696E21 -:10ED220081F601F0E1F0A5F111F1A5F108F16EF122 -:10ED320026F007FF746F7570706572008DF601F032 -:10ED4200C3F046F0610046F07B0092F63FF0ACF66D -:10ED520046F0DF0025F226F007FF746F6C6F7765CF -:10ED620072009AF601F0C3F046F0410046F05B00F3 -:10ED720092F63FF0BFF646F020002EF226F003FF97 -:10ED8200686C6400ADF654F03F0104FF686F6C6478 -:10ED9200C0F601F0C4F6C3F08BF047F2C3F011F1F4 -:10EDA200D6F093F008F19FF026F002FF3C23C6F65E -:10EDB20001F09FF5C4F693F026F001FF2300D6F68A -:10EDC20001F06CF58BF05EF7F3F046F00900E1F02C -:10EDD20080F13FF0EFF646F00700AFF146F0300069 -:10EDE200AFF1CAF626F002FF2373DEF601F0E1F678 -:10EDF20080F52EF22CF13FF0F8F626F002FF233ECA -:10EE0200F4F601F089F5C4F68BF09FF5E1F0A5F177 -:10EE120026F004FF7369676EFFF601F033F13FF0ED -:10EE220015F746F02D00CAF626F003FF642E720095 -:10EE32000AF701F011F191F5EFFCD9F6F7F6F3F0CC -:10EE42000EF702F708F1E1F0A5F106F816F826F040 -:10EE520002FF2E7216F701F011F182FD08F11AF786 -:10EE620026F002FF642E29F701F066F11AF7FDF78A -:10EE720026F001FF2E0032F701F082FD35F726F071 -:10EE820003FF75642E003AF701F066F14EF7FDF7C5 -:10EE920026F004FF75642E7241F701F011F1D9F6E4 -:10EEA200F7F602F708F1E1F0A5F106F816F826F0F8 -:10EEB20006FF75642F6D6F644AF701F011F166F178 -:10EEC2001AF1D4F108F1D6F011F1D4F108F126F0DB -:10EED20006FF64696769743F59F701F0A0F6C3F051 -:10EEE20046F039008AF146F0000125F2AFF1C3F095 -:10EEF20046F040018AF146F0070125F2A5F146F0FD -:10EF02003000A5F1C3F06CF58BF06EF126F001F044 -:10EF12001AF1E7F708F1E1F041F216F2AFF141F22E -:10EF220011F126F002FF732C69F701F0C3F09AF792 -:10EF320026F001F0DB01C3F016F291F51DF2A5F106 -:10EF420011F166F19A023FF0ADF7ADF2C3F08BF02A -:10EF5200DB0179F5DBF2A7F708F13AF13FF0B4F7FC -:10EF6200C3F0AAF0DB01EBF026F005FF69747970BB -:10EF7200650093F701F0C3F016F291F51DF2A5F1C9 -:10EF820011F166F19A023FF0CFF7ADF2C3F0E3F36D -:10EF9200C3F0DCF7D8F741F2DBF2C7F708F13AF138 -:10EFA2003FF0D6F7C3F0E3F3DCF7EBF026F001F025 -:10EFB2000BF3DCF726F001F046F0FF0025F2A9F58D -:10EFC20026F006FF69636F756E74B6F701F0C3F041 -:10EFD20041F2D6F0E3F326F002FF6372E2F701F0AA -:10EFE20046F00D00A9F546F00A00A9F526F005FF46 -:10EFF200737061636500EDF701F00BF6A9F526F079 -:10F0020006FF737061636573F8F701F066F185F6C8 -:10F01200C3F03FF010F8FDF747F235F009F8EBF0D6 -:10F0220026F004FF7479706501F801F079FD9A0207 -:10F032003FF021F8ADF2BEF2AAF0A9F5DBF21CF81E -:10F0420026F001FF270012F801F0CFF9E7FAF2FAF1 -:10F05200C3F065FB9AFDD6F0E3F346F09AFB9AFD06 -:10F062002EF23FF037F846F0F3FF5CF8EBF026F0B3 -:10F0720007FF68616E646C65720022F867F00A002F -:10F0820005FF63617463680039F801F09FF211F1C2 -:10F092003FF88BF011F188F23FF893F030F008F16D -:10F0A2003FF893F008F1EBF066F126F005FF746883 -:10F0B200726F770041F801F0C3F02CF13FF063F872 -:10F0C200EBF026F03FF88BF092F208F13FF893F064 -:10F0D20008F1D6F011F1A8F2EBF008F126F005FFE5 -:10F0E20063736B69700057F801F011F1C3F03FF0E0 -:10F0F20084F8E1F0AAF01AF19AFD3FF084F8A1FD3C -:10F10200C0F935F077F808F1EBF026F005FF6373EC -:10F1120063616E0070F801F011F1E1F0C3F0AAF042 -:10F122001AF19AFD2CF13FF0A1F8D6F047F2D6F091 -:10F13200E1F033F12CF13FF0A1F841F235F08FF814 -:10F1420002F1E1F0A5F108F1EBF026F006FF6163B0 -:10F152006365707487F801F0E1F0AFF147F2E1F016 -:10F16200BAF5C3F0EDF82CF13FF0DFF8C3F046F04A -:10F1720008009AFD3FF0CFF8EBF0F3F080F58AF14A -:10F1820011F1F3F0F3F008F13FF0CDF8E5F847F2B2 -:10F1920011F1E1F008F16D0135F0DDF8C3F00BF685 -:10F1A20080F13FF0D6F8EBF00BF6C3F0A9F5E1F0F1 -:10F1B2009FF041F2E1F0790135F0B1F8EBF002F1A4 -:10F1C200D6F0A5F1F0F726F001F046F00800C3F002 -:10F1D200A9F5FDF7A9F526F001F0C3F046F00D0000 -:10F1E2009AFDD6F046F00A009AFD2EF226F006FFAE -:10F1F200726566696C6CA7F82EFC1A00F7FB03FCBB -:10F2020004FF63686172F8F801F0CFF9EBF0AAF03D -:10F2120026F006FF6E756D62657201F901F06CF5FC -:10F222008BF011F153F911F166F953F908F12EF24D -:10F2320011F1C3F02CF13FF026F989F508F1EBF05A -:10F2420008F16CF593F066F126F030F366F166F1A1 -:10F252003FF384F9CBF03FF048F9A1FD9AFD3FF06E -:10F262003FF9AAF046F02E009AFD3FF040F908F16E -:10F272003FF03CF9FCFCA6FD35F04EF9EBF089F5C8 -:10F2820008F1EBF008F16CF593F066F126F089F5E0 -:10F2920008F13FF04DF95AF6A1FD08F16CF593F033 -:10F2A2005DF126F001F0E1F0AAF046F02D009AFDA2 -:10F2B200C3F011F13FF05FF9A1FDC0F908F126F0AA -:10F2C20061F00A00100002000A0001F0E1F0AAF069 -:10F2D20046F02300A5F1C3F066F146F0040092F671 -:10F2E2003FF07CF961F9AFF1E3F36CF593F0A1FD26 -:10F2F200C0F935F07DF9EBF026F007FF3E6E756D33 -:10F30200626572000AF901F0C3F03FF09CF9E1F086 -:10F31200AAF06EF72CF13FF090F9EBF026F011F124 -:10F3220020FD6CF58BF05E0108F1560120FDA1FD78 -:10F33200C0F935F085F926F005FF7061727365003A -:10F342007EF901F011F1B6F999F58BF0C0F908F1E7 -:10F352008CF8C3F041F299F577F2A1FDC0F926F0DD -:10F3620006FF736F757263659DF92EFC1600F7FB3D -:10F3720003FC07FF2F737472696E6700B1F901F025 -:10F38200F3F0E1F0AFF1F3F0F3F0A5F126F00AFFAC -:10F3920070617273652D6E616D65BAF901F00BF6DD -:10F3A200D3F926F001F011F1B6F999F58BF0C0F915 -:10F3B2001AF175F808F18CF880F5AFF1B6F9EBF0B7 -:10F3C200A5F199F593F026F007FF66696E642D7832 -:10F3D2007400C8F901F046F0F7F946F05C001B042E -:10F3E2002CF13FF0F6F989F566F126F001F011F102 -:10F3F20080F508F140FCC3F03FF004FA11F102F18C -:10F4020002F108F15DF126F001F088F70300206FA8 -:10F412006B00BBF726F003FF2E6F6B00E5F92EFCA5 -:10F422001C00F7FB03FC01F088F702003E20F0F716 -:10F43200BBF726F006FF2E72656164790CFA2EFC8A -:10F442002000F7FB03FC01F088F70400203F3F2077 -:10F45200BBF76CF58BF011F1F8F53DF799F58BF0F0 -:10F462003DF708F16CF593F026F006FF2E657272F7 -:10F472006F721BFA2EFC1E00F7FB03FC04FF717572 -:10F48200697436FA01F0D002D70293F0A4FAA8F216 -:10F49200B1FA92F2650366F58BF02CF13FF052FA65 -:10F4A20020FAFDF83FF064FA46F0CAFA46F8CBF0CB -:10F4B2003FF064FAC3F046F0FEFF80F13FF062FADB -:10F4C2003BFA35F044FA10FA35F04CFA05FF706158 -:10F4D200757365003FFA2EFC4101E3FBEDFB04FF6F -:10F4E200636F6C6467FA75FAA4B622243324BB24D2 -:10F4F20024BEE0E0F1E02192E030E9F7F134D9F7FF -:10F50200E3E4F1E02F010FEF0DBF048310E41EBF0F -:10F512001583CFEAC683D0E4D783A7E9BAEF0C9468 -:10F5220005F004FF7761726D70FA01F06BFD46F031 -:10F532009AFB46F06CFA0EFC650313F643FA03FFDE -:10F542007370300092FA81F00600F7FB03FC02FFB1 -:10F552007370A0FA67F0080003FF72703000A8FA17 -:10F5620001F0B5FA8BF026F067F0040005FF646540 -:10F5720070746800ADFA01F0A4FA9FF2A5F116F2D8 -:10F5820047F226F009FF696E746572707265740045 -:10F59200B7FA01F0CFF9C3F03FF0DBFAE7FAF2FA7B -:10F5A20066F58BF03FF0D6FAC6FBE3F330F072FB60 -:10F5B20035F0CBFA89F526F010FF666F7274682D6C -:10F5C2007265636F676E697A6572C3FA81F0500083 -:10F5D200CFFBD9FB09FF7265636F676E697A6500BD -:10F5E200DDFA01F046F0FDFAD6F01B042CF13FF0F3 -:10F5F200FCFA89F565FB26F001F0F3F0F3F080F5F3 -:10F6020030F3F3F030F03FF3F3F0C3F065FB9AFD13 -:10F612003FF00EFBEBF066F126F002F102F15DF134 -:10F6220026F006FF64743A6E756DEBFA61F09AFB90 -:10F63200F101F10107FF64743A646E756D0012FB0B -:10F6420061F09AFB92FD92FD07FF7265633A6E7557 -:10F652006D001BFB01F00FF93FF037FBA1FD9AFD96 -:10F662003FF035FB17FB26F021FB26F065FB26F069 -:10F6720008FF7265633A66696E6425FB01F0EBF977 -:10F68200C3F02CF13FF048FBEBF065FB26F04FFB9B -:10F6920026F005FF64743A78740039FB61F053FB7D -:10F6A20057FB92FD01F0EBF030F026F001F033F160 -:10F6B2003FF05DFBDB0126F030F026F007FF6474BB -:10F6C2003A6E756C6C004AFB61F069FB69FB69FB81 -:10F6D20001F046F0F3FF5CF806FF3F737461636B61 -:10F6E2005FFB01F0BCFA33F13FF07AFB46F0FCFF1E -:10F6F2005CF826F003FF766572006DFB01F028F5D9 -:10F70200BBF7FDF76CF58BF036F5F8F582FDD9F60F -:10F71200E1F646F02E00CAF6F7F602F716F86CF597 -:10F7220093F0FDF73EF5BBF726F004FF6E6F6F70A6 -:10F732007BFB01F026F006FF756E7573656496FB20 -:10F7420001F09FF2DAF5A5F126F00200746F9CFB3E -:10F7520001F025F88BFD66F58BF03FF0BAFBD00186 -:10F76200B4FBDB0126F001F008F1C3F0C6FB11F196 -:10F77200E3F3C3F0C6FBC6FBE3F330F026F007FF6A -:10F78200692D63656C6C2B00A6FB01F041F226F03B -:10F7920007FF4564656665724000C0FB01F0E3F354 -:10F7A20071F326F007FF4564656665722100C9FBA7 -:10F7B20001F0E3F34DF326F007FF526465666572CC -:10F7C2004000D3FB01F0E3F38BF026F007FF526415 -:10F7D200656665722100DDFB01F0E3F393F026F02C -:10F7E20007FF5564656665724000E7FB01F0E3F3CD -:10F7F20014F3AFF18BF026F007FF5564656665726E -:10F802002100F1FB01F0E3F314F3AFF193F026F0E2 -:10F8120006FF646566657221FDFB01F08BFDC3F096 -:10F82200C6FBC6FBE3F330F026F006FF64656665AF -:10F83200724009FC01F08BFDC3F0C6FBE3F330F02C -:10F8420026F007FF286465666572290016FC01F040 -:10F85200AD010D03D0012EFC26F00E942603C3F059 -:10F86200C6FBE3F330F030F026F00FFF73656172F0 -:10F8720063682D776F72646C6973740022FC01F007 -:10F8820011F166F146F055FC08F172FCC3F02CF15F -:10F892003FF04FFC89F5EBF066F126F0C3F099FCDE -:10F8A200D6F09301810126F001F011F1EBF080F521 -:10F8B2001AF18DFCA3FC3FF063FC08F1EBF066F15A -:10F8C2005DF126F089F508F166F126F011FF7472F8 -:10F8D2006176657273652D776F72646C69737400FB -:10F8E20036FC01F071F3C3F03FF083FC80F530F396 -:10F8F200D6F030F03FF3F3F03FF083FC8A04E3F3F9 -:10F9020035F074FC89F526F00BFF6E616D653E7370 -:10F912007472696E670067FC01F0E7F746F0FF005A -:10F9220025F226F007FF6E66613E6366610085FC84 -:10F9320001F08A0441F226F008FF69636F6D70617D -:10F94200726593FC01F011F1E1F008F125F13FF04D -:10F95200AEFC89F5EBF05DF126F0D6F066F19A0285 -:10F962003FF0D1FCADF2E1F08BF0E1F0E3F3C3F054 -:10F9720046F000016EF13FF0C2FCD6F046F0FF0007 -:10F9820025F225F13FF0C9FC89F55DF1E6F226F09A -:10F9920041F2D6F079F5D6F046F00200CCF2B4FC92 -:10F9A20089F566F126F001FF2A009DFC01F0B8F10D -:10F9B200EBF026F001FF6A00D4FC01F088F246F079 -:10F9C2000700AFF18BF088F246F00900AFF18BF03F -:10F9D200AFF126F004FF64616273DBFC01F0C3F057 -:10F9E20033F13FF0F5FCFCFC26F007FF646E65671F -:10F9F20061746500EBFC01F056F4A1FD66F130F490 -:10FA020026F005FF636D6F766500F6FC08FDBF9377 -:10FA1200AF93E991F991A991B991092F082B21F09E -:10FA22001D9111930197E1F7AF91BF91899199913E -:10FA32000C9405F005FF32737761700002FD01F04E -:10FA4200F3F011F1F3F008F126F00AFF726566692E -:10FA52006C6C2D7469621BFD01F049FD46F05A0081 -:10FA6200ACF84FFD93F066F199F593F05DF126F055 -:10FA72000AFF736F757263652D74696226FD01F06A -:10FA820049FD4FFD8BF026F003FF7469620039FDDA -:10FA920054F06F0104FF2374696245FD54F0C901FB -:10FAA20006FF65653E72616D4BFD01F066F1ADF2D8 -:10FAB200E1F071F3E1F093F079F5D6F079F5D6F053 -:10FAC200DBF259FD89F526F008FF696E69742D7223 -:10FAD200616D51FD01F046F07C0014F346F0220006 -:10FAE20016F256FD26F006FF626F756E647365FDB1 -:10FAF20001F0E1F0AFF1D6F026F003FF733E6400AF -:10FB020074FD01F0C3F033F126F005FF3E626F642D -:10FB120079007EFD42F20800326C69746572616C94 -:10FB220086FD01F0D6F0F101F10126F001FF3D0062 -:10FB32008CFD01F0A5F12CF126F001FF310097FDBB -:10FB420054F0010001FF32009EFD54F0020002FF5A -:08FB52002D31A3FD54F0FFFF6B -:00000001FF diff --git a/amforth-6.5/appl/eval-pollin/p1284-16.lst b/amforth-6.5/appl/eval-pollin/p1284-16.lst deleted file mode 100644 index 00d54e8..0000000 --- a/amforth-6.5/appl/eval-pollin/p1284-16.lst +++ /dev/null @@ -1,10495 +0,0 @@ - -AVRASM ver. 2.1.52 p1284-16.asm Sun Apr 30 20:10:15 2017 - -p1284-16.asm(5): Including file '../../avr8\preamble.inc' -../../avr8\preamble.inc(2): Including file '../../avr8\macros.asm' -../../avr8\macros.asm(6): Including file '../../avr8\user.inc' -../../avr8\preamble.inc(6): Including file '../../avr8/devices/atmega1284p\device.asm' -../../avr8/devices/atmega1284p\device.asm(5): Including file '../../avr8/Atmel/Appnotes2\m1284Pdef.inc' -p1284-16.asm(14): Including file '../../avr8\drivers/usart_0.asm' -../../avr8\drivers/usart_0.asm(32): Including file '../../avr8\drivers/usart_common.asm' -../../avr8\drivers/usart_common.asm(11): Including file '../../avr8\drivers/usart-rx-buffer.asm' -../../avr8\drivers/usart_common.asm(24): Including file '../../avr8\words/usart-tx-poll.asm' -../../avr8\drivers/usart_common.asm(29): Including file '../../avr8\words/ubrr.asm' -../../avr8\drivers/usart_common.asm(30): Including file '../../avr8\words/usart.asm' -p1284-16.asm(19): Including file '../../avr8\drivers/1wire.asm' -p1284-16.asm(21): Including file '../../avr8\amforth.asm' -../../avr8\amforth.asm(12): Including file '../../avr8\drivers/generic-isr.asm' -../../avr8\amforth.asm(14): Including file '../../avr8\dict/rww.inc' -../../avr8\dict/rww.inc(1): Including file '../../avr8\words/mplus.asm' -../../avr8\dict/rww.inc(2): Including file '../../common\words/ud-star.asm' -../../avr8\dict/rww.inc(3): Including file '../../common\words/umax.asm' -../../avr8\dict/rww.inc(4): Including file '../../common\words/umin.asm' -../../avr8\dict/rww.inc(5): Including file '../../avr8\words/immediate-q.asm' -../../avr8\dict/rww.inc(6): Including file '../../avr8\words/name2flags.asm' -../../avr8\dict/rww.inc(9): Including file '../../avr8\dict/appl_8k.inc' -../../avr8\dict/appl_8k.inc(1): Including file '../../avr8\dict/compiler1.inc' -../../avr8\dict/compiler1.inc(2): Including file '../../avr8\words/newest.asm' -../../avr8\dict/compiler1.inc(3): Including file '../../avr8\words/latest.asm' -../../avr8\dict/compiler1.inc(4): Including file '../../common\words/do-create.asm' -../../avr8\dict/compiler1.inc(5): Including file '../../common\words/backslash.asm' -../../avr8\dict/compiler1.inc(6): Including file '../../common\words/l-paren.asm' -../../avr8\dict/compiler1.inc(8): Including file '../../common\words/compile.asm' -../../avr8\dict/compiler1.inc(9): Including file '../../avr8\words/comma.asm' -../../avr8\dict/compiler1.inc(10): Including file '../../common\words/brackettick.asm' -../../avr8\dict/compiler1.inc(13): Including file '../../common\words/literal.asm' -../../avr8\dict/compiler1.inc(14): Including file '../../common\words/sliteral.asm' -../../avr8\dict/compiler1.inc(15): Including file '../../avr8\words/g-mark.asm' -../../avr8\dict/compiler1.inc(16): Including file '../../avr8\words/g-resolve.asm' -../../avr8\dict/compiler1.inc(17): Including file '../../avr8\words/l_mark.asm' -../../avr8\dict/compiler1.inc(18): Including file '../../avr8\words/l_resolve.asm' -../../avr8\dict/compiler1.inc(20): Including file '../../common\words/ahead.asm' -../../avr8\dict/compiler1.inc(21): Including file '../../common\words/if.asm' -../../avr8\dict/compiler1.inc(22): Including file '../../common\words/else.asm' -../../avr8\dict/compiler1.inc(23): Including file '../../common\words/then.asm' -../../avr8\dict/compiler1.inc(24): Including file '../../common\words/begin.asm' -../../avr8\dict/compiler1.inc(25): Including file '../../common\words/while.asm' -../../avr8\dict/compiler1.inc(26): Including file '../../common\words/repeat.asm' -../../avr8\dict/compiler1.inc(27): Including file '../../common\words/until.asm' -../../avr8\dict/compiler1.inc(28): Including file '../../common\words/again.asm' -../../avr8\dict/compiler1.inc(29): Including file '../../common\words/do.asm' -../../avr8\dict/compiler1.inc(30): Including file '../../common\words/loop.asm' -../../avr8\dict/compiler1.inc(31): Including file '../../common\words/plusloop.asm' -../../avr8\dict/compiler1.inc(32): Including file '../../common\words/leave.asm' -../../avr8\dict/compiler1.inc(33): Including file '../../common\words/qdo.asm' -../../avr8\dict/compiler1.inc(34): Including file '../../common\words/endloop.asm' -../../avr8\dict/compiler1.inc(36): Including file '../../common\words/l-from.asm' -../../avr8\dict/compiler1.inc(37): Including file '../../common\words/to-l.asm' -../../avr8\dict/compiler1.inc(38): Including file '../../avr8\words/lp0.asm' -../../avr8\dict/compiler1.inc(39): Including file '../../avr8\words/lp.asm' -../../avr8\dict/compiler1.inc(41): Including file '../../common\words/create.asm' -../../avr8\dict/compiler1.inc(42): Including file '../../avr8\words/header.asm' -../../avr8\dict/compiler1.inc(43): Including file '../../avr8\words/wlscope.asm' -../../avr8\dict/compiler1.inc(44): Including file '../../common\words/reveal.asm' -../../avr8\dict/compiler1.inc(45): Including file '../../avr8\words/does.asm' -../../avr8\dict/compiler1.inc(46): Including file '../../common\words/colon.asm' -../../avr8\dict/compiler1.inc(47): Including file '../../avr8\words/colon-noname.asm' -../../avr8\dict/compiler1.inc(48): Including file '../../common\words/semicolon.asm' -../../avr8\dict/compiler1.inc(49): Including file '../../common\words/right-bracket.asm' -../../avr8\dict/compiler1.inc(50): Including file '../../common\words/left-bracket.asm' -../../avr8\dict/compiler1.inc(51): Including file '../../common\words/variable.asm' -../../avr8\dict/compiler1.inc(52): Including file '../../common\words/constant.asm' -../../avr8\dict/compiler1.inc(53): Including file '../../avr8\words/user.asm' -../../avr8\dict/compiler1.inc(55): Including file '../../common\words/recurse.asm' -../../avr8\dict/compiler1.inc(56): Including file '../../avr8\words/immediate.asm' -../../avr8\dict/compiler1.inc(58): Including file '../../common\words/bracketchar.asm' -../../avr8\dict/compiler1.inc(59): Including file '../../common\words/abort-string.asm' -../../avr8\dict/compiler1.inc(60): Including file '../../common\words/abort.asm' -../../avr8\dict/compiler1.inc(61): Including file '../../common\words/q-abort.asm' -../../avr8\dict/compiler1.inc(63): Including file '../../common\words/get-stack.asm' -../../avr8\dict/compiler1.inc(64): Including file '../../common\words/set-stack.asm' -../../avr8\dict/compiler1.inc(65): Including file '../../common\words/map-stack.asm' -../../avr8\dict/compiler1.inc(66): Including file '../../avr8\words/get-current.asm' -../../avr8\dict/compiler1.inc(67): Including file '../../common\words/get-order.asm' -../../avr8\dict/compiler1.inc(68): Including file '../../common\words/cfg-order.asm' -../../avr8\dict/compiler1.inc(69): Including file '../../avr8\words/compare.asm' -../../avr8\dict/compiler1.inc(70): Including file '../../avr8\words/nfa2lfa.asm' -../../avr8\amforth.asm(15): Including file 'dict_appl.inc' -dict_appl.inc(3): Including file '../../common\words/dot-s.asm' -dict_appl.inc(4): Including file '../../avr8\words/spirw.asm' -dict_appl.inc(5): Including file '../../avr8\words/n-spi.asm' -dict_appl.inc(6): Including file 'words/applturnkey.asm' -dict_appl.inc(7): Including file '../../avr8\dict/compiler2.inc' -../../avr8\dict/compiler2.inc(8): Including file '../../avr8\words/set-current.asm' -../../avr8\dict/compiler2.inc(9): Including file '../../avr8\words/wordlist.asm' -../../avr8\dict/compiler2.inc(11): Including file '../../avr8\words/forth-wordlist.asm' -../../avr8\dict/compiler2.inc(12): Including file '../../common\words/set-order.asm' -../../avr8\dict/compiler2.inc(13): Including file '../../common\words/set-recognizer.asm' -../../avr8\dict/compiler2.inc(14): Including file '../../common\words/get-recognizer.asm' -../../avr8\dict/compiler2.inc(15): Including file '../../avr8\words/code.asm' -../../avr8\dict/compiler2.inc(16): Including file '../../avr8\words/end-code.asm' -../../avr8\dict/compiler2.inc(17): Including file '../../avr8\words/marker.asm' -../../avr8\dict/compiler2.inc(18): Including file '../../common\words/postpone.asm' -dict_appl.inc(8): Including file '../../avr8\words/2r_fetch.asm' -../../avr8\amforth.asm(23): Including file '../../avr8\amforth-interpreter.asm' -../../avr8\amforth.asm(24): Including file '../../avr8\dict/nrww.inc' -../../avr8\dict/nrww.inc(4): Including file '../../avr8\words/exit.asm' -../../avr8\dict/nrww.inc(5): Including file '../../avr8\words/execute.asm' -../../avr8\dict/nrww.inc(6): Including file '../../avr8\words/dobranch.asm' -../../avr8\dict/nrww.inc(7): Including file '../../avr8\words/docondbranch.asm' -../../avr8\dict/nrww.inc(10): Including file '../../avr8\words/doliteral.asm' -../../avr8\dict/nrww.inc(11): Including file '../../avr8\words/dovariable.asm' -../../avr8\dict/nrww.inc(12): Including file '../../avr8\words/doconstant.asm' -../../avr8\dict/nrww.inc(13): Including file '../../avr8\words/douser.asm' -../../avr8\dict/nrww.inc(14): Including file '../../avr8\words/do-value.asm' -../../avr8\dict/nrww.inc(15): Including file '../../avr8\words/fetch.asm' -../../avr8\dict/nrww.inc(16): Including file '../../avr8\words/store.asm' -../../avr8\dict/nrww.inc(17): Including file '../../avr8\words/cstore.asm' -../../avr8\dict/nrww.inc(18): Including file '../../avr8\words/cfetch.asm' -../../avr8\dict/nrww.inc(19): Including file '../../avr8\words/fetch-u.asm' -../../avr8\dict/nrww.inc(20): Including file '../../avr8\words/store-u.asm' -../../avr8\dict/nrww.inc(23): Including file '../../avr8\words/dup.asm' -../../avr8\dict/nrww.inc(24): Including file '../../avr8\words/qdup.asm' -../../avr8\dict/nrww.inc(25): Including file '../../avr8\words/swap.asm' -../../avr8\dict/nrww.inc(26): Including file '../../avr8\words/over.asm' -../../avr8\dict/nrww.inc(27): Including file '../../avr8\words/drop.asm' -../../avr8\dict/nrww.inc(28): Including file '../../avr8\words/rot.asm' -../../avr8\dict/nrww.inc(29): Including file '../../avr8\words/nip.asm' -../../avr8\dict/nrww.inc(31): Including file '../../avr8\words/r_from.asm' -../../avr8\dict/nrww.inc(32): Including file '../../avr8\words/to_r.asm' -../../avr8\dict/nrww.inc(33): Including file '../../avr8\words/r_fetch.asm' -../../avr8\dict/nrww.inc(36): Including file '../../common\words/not-equal.asm' -../../avr8\dict/nrww.inc(37): Including file '../../avr8\words/equalzero.asm' -../../avr8\dict/nrww.inc(38): Including file '../../avr8\words/lesszero.asm' -../../avr8\dict/nrww.inc(39): Including file '../../avr8\words/greaterzero.asm' -../../avr8\dict/nrww.inc(40): Including file '../../avr8\words/d-greaterzero.asm' -../../avr8\dict/nrww.inc(41): Including file '../../avr8\words/d-lesszero.asm' -../../avr8\dict/nrww.inc(43): Including file '../../avr8\words/true.asm' -../../avr8\dict/nrww.inc(44): Including file '../../avr8\words/zero.asm' -../../avr8\dict/nrww.inc(45): Including file '../../avr8\words/uless.asm' -../../avr8\dict/nrww.inc(46): Including file '../../common\words/u-greater.asm' -../../avr8\dict/nrww.inc(47): Including file '../../avr8\words/less.asm' -../../avr8\dict/nrww.inc(48): Including file '../../avr8\words/greater.asm' -../../avr8\dict/nrww.inc(50): Including file '../../avr8\words/log2.asm' -../../avr8\dict/nrww.inc(51): Including file '../../avr8\words/minus.asm' -../../avr8\dict/nrww.inc(52): Including file '../../avr8\words/plus.asm' -../../avr8\dict/nrww.inc(53): Including file '../../avr8\words/mstar.asm' -../../avr8\dict/nrww.inc(54): Including file '../../avr8\words/umslashmod.asm' -../../avr8\dict/nrww.inc(55): Including file '../../avr8\words/umstar.asm' -../../avr8\dict/nrww.inc(57): Including file '../../avr8\words/invert.asm' -../../avr8\dict/nrww.inc(58): Including file '../../avr8\words/2slash.asm' -../../avr8\dict/nrww.inc(59): Including file '../../avr8\words/2star.asm' -../../avr8\dict/nrww.inc(60): Including file '../../avr8\words/and.asm' -../../avr8\dict/nrww.inc(61): Including file '../../avr8\words/or.asm' -../../avr8\dict/nrww.inc(62): Including file '../../avr8\words/xor.asm' -../../avr8\dict/nrww.inc(64): Including file '../../avr8\words/1plus.asm' -../../avr8\dict/nrww.inc(65): Including file '../../avr8\words/1minus.asm' -../../avr8\dict/nrww.inc(66): Including file '../../common\words/q-negate.asm' -../../avr8\dict/nrww.inc(67): Including file '../../avr8\words/lshift.asm' -../../avr8\dict/nrww.inc(68): Including file '../../avr8\words/rshift.asm' -../../avr8\dict/nrww.inc(69): Including file '../../avr8\words/plusstore.asm' -../../avr8\dict/nrww.inc(71): Including file '../../avr8\words/rpfetch.asm' -../../avr8\dict/nrww.inc(72): Including file '../../avr8\words/rpstore.asm' -../../avr8\dict/nrww.inc(73): Including file '../../avr8\words/spfetch.asm' -../../avr8\dict/nrww.inc(74): Including file '../../avr8\words/spstore.asm' -../../avr8\dict/nrww.inc(76): Including file '../../avr8\words/dodo.asm' -../../avr8\dict/nrww.inc(77): Including file '../../avr8\words/i.asm' -../../avr8\dict/nrww.inc(78): Including file '../../avr8\words/doplusloop.asm' -../../avr8\dict/nrww.inc(79): Including file '../../avr8\words/doloop.asm' -../../avr8\dict/nrww.inc(80): Including file '../../avr8\words/unloop.asm' -../../avr8\dict/nrww.inc(84): Including file '../../avr8\words/cmove_g.asm' -../../avr8\dict/nrww.inc(85): Including file '../../avr8\words/byteswap.asm' -../../avr8\dict/nrww.inc(86): Including file '../../avr8\words/up.asm' -../../avr8\dict/nrww.inc(87): Including file '../../avr8\words/1ms.asm' -../../avr8\dict/nrww.inc(88): Including file '../../avr8\words/2to_r.asm' -../../avr8\dict/nrww.inc(89): Including file '../../avr8\words/2r_from.asm' -../../avr8\dict/nrww.inc(91): Including file '../../avr8\words/store-e.asm' -../../avr8\dict/nrww.inc(92): Including file '../../avr8\words/fetch-e.asm' -../../avr8\dict/nrww.inc(93): Including file '../../avr8\words/store-i.asm' -../../avr8\dict/nrww.inc(97): Including file '../../avr8\words/store-i_nrww.asm' -../../avr8\dict/nrww.inc(99): Including file '../../avr8\words/fetch-i.asm' -../../avr8\dict/nrww.inc(102): Including file '../../avr8\dict/core_8k.inc' -../../avr8\dict/core_8k.inc(2): Including file '../../avr8\words/n_to_r.asm' -../../avr8\dict/core_8k.inc(3): Including file '../../avr8\words/n_r_from.asm' -../../avr8\dict/core_8k.inc(5): Including file '../../avr8\words/d-2star.asm' -../../avr8\dict/core_8k.inc(6): Including file '../../avr8\words/d-2slash.asm' -../../avr8\dict/core_8k.inc(7): Including file '../../avr8\words/d-plus.asm' -../../avr8\dict/core_8k.inc(8): Including file '../../avr8\words/d-minus.asm' -../../avr8\dict/core_8k.inc(9): Including file '../../avr8\words/d-invert.asm' -../../avr8\dict/core_8k.inc(10): Including file '../../common\words/u-dot.asm' -../../avr8\dict/core_8k.inc(11): Including file '../../common\words/u-dot-r.asm' -../../avr8\dict/core_8k.inc(13): Including file '../../common\words/show-wordlist.asm' -../../avr8\dict/core_8k.inc(14): Including file '../../common\words/words.asm' -../../avr8\dict/core_8k.inc(15): Including file '../../avr8\dict/interrupt.inc' -../../avr8\dict/interrupt.inc(8): Including file '../../avr8\words/int-on.asm' -../../avr8\dict/interrupt.inc(9): Including file '../../avr8\words/int-off.asm' -../../avr8\dict/interrupt.inc(10): Including file '../../avr8\words/int-store.asm' -../../avr8\dict/interrupt.inc(11): Including file '../../avr8\words/int-fetch.asm' -../../avr8\dict/interrupt.inc(12): Including file '../../avr8\words/int-trap.asm' -../../avr8\dict/interrupt.inc(14): Including file '../../avr8\words/isr-exec.asm' -../../avr8\dict/interrupt.inc(15): Including file '../../avr8\words/isr-end.asm' -../../avr8\dict/core_8k.inc(17): Including file '../../common\words/pick.asm' -../../avr8\dict/core_8k.inc(18): Including file '../../common\words/dot-quote.asm' -../../avr8\dict/core_8k.inc(19): Including file '../../common\words/squote.asm' -../../avr8\dict/core_8k.inc(21): Including file '../../avr8\words/fill.asm' -../../avr8\dict/core_8k.inc(23): Including file '../../avr8\words/environment.asm' -../../avr8\dict/core_8k.inc(24): Including file '../../avr8\words/env-wordlists.asm' -../../avr8\dict/core_8k.inc(25): Including file '../../avr8\words/env-slashpad.asm' -../../avr8\dict/core_8k.inc(26): Including file '../../common\words/env-slashhold.asm' -../../avr8\dict/core_8k.inc(27): Including file '../../common\words/env-forthname.asm' -../../avr8\dict/core_8k.inc(28): Including file '../../common\words/env-forthversion.asm' -../../avr8\dict/core_8k.inc(29): Including file '../../common\words/env-cpu.asm' -../../avr8\dict/core_8k.inc(30): Including file '../../avr8\words/env-mcuinfo.asm' -../../avr8\dict/core_8k.inc(31): Including file '../../common\words/env-usersize.asm' -../../avr8\dict/core_8k.inc(33): Including file '../../common\words/f_cpu.asm' -../../avr8\dict/core_8k.inc(34): Including file '../../avr8\words/state.asm' -../../avr8\dict/core_8k.inc(35): Including file '../../common\words/base.asm' -../../avr8\dict/core_8k.inc(37): Including file '../../avr8\words/cells.asm' -../../avr8\dict/core_8k.inc(38): Including file '../../avr8\words/cellplus.asm' -../../avr8\dict/core_8k.inc(40): Including file '../../common\words/2dup.asm' -../../avr8\dict/core_8k.inc(41): Including file '../../common\words/2drop.asm' -../../avr8\dict/core_8k.inc(43): Including file '../../common\words/tuck.asm' -../../avr8\dict/core_8k.inc(45): Including file '../../common\words/to-in.asm' -../../avr8\dict/core_8k.inc(46): Including file '../../common\words/pad.asm' -../../avr8\dict/core_8k.inc(47): Including file '../../common\words/emit.asm' -../../avr8\dict/core_8k.inc(48): Including file '../../common\words/emitq.asm' -../../avr8\dict/core_8k.inc(49): Including file '../../common\words/key.asm' -../../avr8\dict/core_8k.inc(50): Including file '../../common\words/keyq.asm' -../../avr8\dict/core_8k.inc(52): Including file '../../avr8\words/dp.asm' -../../avr8\dict/core_8k.inc(53): Including file '../../avr8\words/ehere.asm' -../../avr8\dict/core_8k.inc(54): Including file '../../avr8\words/here.asm' -../../avr8\dict/core_8k.inc(55): Including file '../../avr8\words/allot.asm' -../../avr8\dict/core_8k.inc(57): Including file '../../common\words/bin.asm' -../../avr8\dict/core_8k.inc(58): Including file '../../common\words/decimal.asm' -../../avr8\dict/core_8k.inc(59): Including file '../../common\words/hex.asm' -../../avr8\dict/core_8k.inc(60): Including file '../../common\words/bl.asm' -../../avr8\dict/core_8k.inc(62): Including file '../../avr8\words/turnkey.asm' -../../avr8\dict/core_8k.inc(64): Including file '../../avr8\words/slashmod.asm' -../../avr8\dict/core_8k.inc(65): Including file '../../avr8\words/uslashmod.asm' -../../avr8\dict/core_8k.inc(66): Including file '../../avr8\words/negate.asm' -../../avr8\dict/core_8k.inc(67): Including file '../../common\words/slash.asm' -../../avr8\dict/core_8k.inc(68): Including file '../../common\words/mod.asm' -../../avr8\dict/core_8k.inc(69): Including file '../../common\words/abs.asm' -../../avr8\dict/core_8k.inc(70): Including file '../../common\words/min.asm' -../../avr8\dict/core_8k.inc(71): Including file '../../common\words/max.asm' -../../avr8\dict/core_8k.inc(72): Including file '../../common\words/within.asm' -../../avr8\dict/core_8k.inc(74): Including file '../../common\words/to-upper.asm' -../../avr8\dict/core_8k.inc(75): Including file '../../common\words/to-lower.asm' -../../avr8\dict/core_8k.inc(77): Including file '../../avr8\words/hld.asm' -../../avr8\dict/core_8k.inc(78): Including file '../../common\words/hold.asm' -../../avr8\dict/core_8k.inc(79): Including file '../../common\words/less-sharp.asm' -../../avr8\dict/core_8k.inc(80): Including file '../../common\words/sharp.asm' -../../avr8\dict/core_8k.inc(81): Including file '../../common\words/sharp-s.asm' -../../avr8\dict/core_8k.inc(82): Including file '../../common\words/sharp-greater.asm' -../../avr8\dict/core_8k.inc(83): Including file '../../common\words/sign.asm' -../../avr8\dict/core_8k.inc(84): Including file '../../common\words/d-dot-r.asm' -../../avr8\dict/core_8k.inc(85): Including file '../../common\words/dot-r.asm' -../../avr8\dict/core_8k.inc(86): Including file '../../common\words/d-dot.asm' -../../avr8\dict/core_8k.inc(87): Including file '../../common\words/dot.asm' -../../avr8\dict/core_8k.inc(88): Including file '../../common\words/ud-dot.asm' -../../avr8\dict/core_8k.inc(89): Including file '../../common\words/ud-dot-r.asm' -../../avr8\dict/core_8k.inc(90): Including file '../../common\words/ud-slash-mod.asm' -../../avr8\dict/core_8k.inc(91): Including file '../../common\words/digit-q.asm' -../../avr8\dict/core_8k.inc(93): Including file '../../avr8\words/do-sliteral.asm' -../../avr8\dict/core_8k.inc(94): Including file '../../avr8\words/scomma.asm' -../../avr8\dict/core_8k.inc(95): Including file '../../avr8\words/itype.asm' -../../avr8\dict/core_8k.inc(96): Including file '../../avr8\words/icount.asm' -../../avr8\dict/core_8k.inc(97): Including file '../../common\words/cr.asm' -../../avr8\dict/core_8k.inc(98): Including file '../../common\words/space.asm' -../../avr8\dict/core_8k.inc(99): Including file '../../common\words/spaces.asm' -../../avr8\dict/core_8k.inc(100): Including file '../../common\words/type.asm' -../../avr8\dict/core_8k.inc(101): Including file '../../common\words/tick.asm' -../../avr8\dict/core_8k.inc(103): Including file '../../common\words/handler.asm' -../../avr8\dict/core_8k.inc(104): Including file '../../common\words/catch.asm' -../../avr8\dict/core_8k.inc(105): Including file '../../common\words/throw.asm' -../../avr8\dict/core_8k.inc(107): Including file '../../common\words/cskip.asm' -../../avr8\dict/core_8k.inc(108): Including file '../../common\words/cscan.asm' -../../avr8\dict/core_8k.inc(109): Including file '../../common\words/accept.asm' -../../avr8\dict/core_8k.inc(110): Including file '../../common\words/refill.asm' -../../avr8\dict/core_8k.inc(111): Including file '../../common\words/char.asm' -../../avr8\dict/core_8k.inc(112): Including file '../../common\words/number.asm' -../../avr8\dict/core_8k.inc(113): Including file '../../common\words/q-sign.asm' -../../avr8\dict/core_8k.inc(114): Including file '../../common\words/set-base.asm' -../../avr8\dict/core_8k.inc(115): Including file '../../common\words/to-number.asm' -../../avr8\dict/core_8k.inc(116): Including file '../../common\words/parse.asm' -../../avr8\dict/core_8k.inc(117): Including file '../../common\words/source.asm' -../../avr8\dict/core_8k.inc(118): Including file '../../common\words/slash-string.asm' -../../avr8\dict/core_8k.inc(119): Including file '../../common\words/parse-name.asm' -../../avr8\dict/core_8k.inc(120): Including file '../../common\words/find-xt.asm' -../../avr8\dict/core_8k.inc(122): Including file '../../common\words/prompt-ok.asm' -../../avr8\dict/core_8k.inc(123): Including file '../../common\words/prompt-ready.asm' -../../avr8\dict/core_8k.inc(124): Including file '../../common\words/prompt-error.asm' -../../avr8\dict/core_8k.inc(126): Including file '../../common\words/quit.asm' -../../avr8\dict/core_8k.inc(127): Including file '../../avr8\words/pause.asm' -../../avr8\dict/core_8k.inc(128): Including file '../../avr8\words/cold.asm' -../../avr8\dict/core_8k.inc(129): Including file '../../common\words/warm.asm' -../../avr8\dict/core_8k.inc(131): Including file '../../avr8\words/sp0.asm' -../../avr8\dict/core_8k.inc(132): Including file '../../avr8\words/rp0.asm' -../../avr8\dict/core_8k.inc(133): Including file '../../common\words/depth.asm' -../../avr8\dict/core_8k.inc(134): Including file '../../common\words/interpret.asm' -../../avr8\dict/core_8k.inc(135): Including file '../../avr8\words/forth-recognizer.asm' -../../avr8\dict/core_8k.inc(136): Including file '../../common\words/recognize.asm' -../../avr8\dict/core_8k.inc(137): Including file '../../common\words/rec-intnum.asm' -../../avr8\dict/core_8k.inc(138): Including file '../../common\words/rec-find.asm' -../../avr8\dict/core_8k.inc(139): Including file '../../common\words/dt-null.asm' -../../avr8\dict/core_8k.inc(141): Including file '../../common\words/q-stack.asm' -../../avr8\dict/core_8k.inc(142): Including file '../../common\words/ver.asm' -../../avr8\dict/core_8k.inc(144): Including file '../../common\words/noop.asm' -../../avr8\dict/core_8k.inc(145): Including file '../../avr8\words/unused.asm' -../../avr8\dict/core_8k.inc(147): Including file '../../common\words/to.asm' -../../avr8\dict/core_8k.inc(148): Including file '../../avr8\words/i-cellplus.asm' -../../avr8\dict/core_8k.inc(150): Including file '../../avr8\words/edefer-fetch.asm' -../../avr8\dict/core_8k.inc(151): Including file '../../avr8\words/edefer-store.asm' -../../avr8\dict/core_8k.inc(152): Including file '../../common\words/rdefer-fetch.asm' -../../avr8\dict/core_8k.inc(153): Including file '../../common\words/rdefer-store.asm' -../../avr8\dict/core_8k.inc(154): Including file '../../common\words/udefer-fetch.asm' -../../avr8\dict/core_8k.inc(155): Including file '../../common\words/udefer-store.asm' -../../avr8\dict/core_8k.inc(156): Including file '../../common\words/defer-store.asm' -../../avr8\dict/core_8k.inc(157): Including file '../../common\words/defer-fetch.asm' -../../avr8\dict/core_8k.inc(158): Including file '../../avr8\words/do-defer.asm' -../../avr8\dict/core_8k.inc(160): Including file '../../common\words/search-wordlist.asm' -../../avr8\dict/core_8k.inc(161): Including file '../../common\words/traverse-wordlist.asm' -../../avr8\dict/core_8k.inc(162): Including file '../../common\words/name2string.asm' -../../avr8\dict/core_8k.inc(163): Including file '../../avr8\words/nfa2cfa.asm' -../../avr8\dict/core_8k.inc(164): Including file '../../avr8\words/icompare.asm' -../../avr8\dict/core_8k.inc(166): Including file '../../common\words/star.asm' -../../avr8\dict/core_8k.inc(167): Including file '../../avr8\words/j.asm' -../../avr8\dict/core_8k.inc(169): Including file '../../avr8\words/dabs.asm' -../../avr8\dict/core_8k.inc(170): Including file '../../avr8\words/dnegate.asm' -../../avr8\dict/core_8k.inc(171): Including file '../../avr8\words/cmove.asm' -../../avr8\dict/core_8k.inc(172): Including file '../../common\words/2swap.asm' -../../avr8\dict/core_8k.inc(174): Including file '../../common\words/tib.asm' -../../avr8\dict/core_8k.inc(176): Including file '../../avr8\words/init-ram.asm' -../../avr8\dict/core_8k.inc(177): Including file '../../avr8\dict/compiler2.inc' -../../avr8\dict/core_8k.inc(178): Including file '../../common\words/bounds.asm' -../../avr8\dict/core_8k.inc(179): Including file '../../common\words/s-to-d.asm' -../../avr8\dict/core_8k.inc(180): Including file '../../avr8\words/to-body.asm' -../../avr8\dict/nrww.inc(112): Including file '../../common\words/2literal.asm' -../../avr8\dict/nrww.inc(113): Including file '../../avr8\words/equal.asm' -../../avr8\dict/nrww.inc(114): Including file '../../common\words/num-constants.asm' -../../avr8\amforth.asm(25): Including file 'dict_appl_core.inc' -../../avr8\amforth.asm(36): Including file '../../avr8\amforth-eeprom.inc' - - - ; file see ../template/template.asm. You may want to - ; copy that file to this one and edit it afterwards. - - .include "preamble.inc" - - .include "macros.asm" - - .set DICT_COMPILER2 = 0 ; - .set cpu_msp430 = 0 - .set cpu_avr8 = 1 - - .include "user.inc" - - ; - - ; used by the multitasker - .set USER_STATE = 0 - .set USER_FOLLOWER = 2 - - ; stackpointer, used by mulitasker - .set USER_RP = 4 - .set USER_SP0 = 6 - .set USER_SP = 8 - - ; excpection handling - .set USER_HANDLER = 10 - - ; numeric IO - .set USER_BASE = 12 - - ; character IO - .set USER_EMIT = 14 - .set USER_EMITQ = 16 - .set USER_KEY = 18 - .set USER_KEYQ = 20 - - .set USER_SOURCE = 22 - .set USER_TO_IN = 24 - .set USER_REFILL = 26 - - .set USER_P_OK = 28 - .set USER_P_ERR = 30 - .set USER_P_RDY = 32 - - .set SYSUSERSIZE = 34 - ; - - .def zerol = r2 - .def zeroh = r3 - .def upl = r4 - .def uph = r5 - - .def al = r6 - .def ah = r7 - .def bl = r8 - .def bh = r9 - - ; internal - .def mcu_boot = r10 - .def isrflag = r11 - - .def temp4 = r14 - .def temp5 = r15 - - .def temp0 = r16 - .def temp1 = r17 - .def temp2 = r18 - .def temp3 = r19 - - .def temp6 = r20 - .def temp7 = r21 - - .def tosl = r24 - .def tosh = r25 - - .def wl = r22 - .def wh = r23 - - .macro loadtos - ld tosl, Y+ - ld tosh, Y+ - .endmacro - - .macro savetos - st -Y, tosh - st -Y, tosl - .endmacro - - .macro in_ - .if (@1 < $40) - in @0,@1 - .else - lds @0,@1 - .endif - .endmacro - - .macro out_ - .if (@0 < $40) - out @0,@1 - .else - sts @0,@1 - .endif - .endmacro - - .macro sbi_ - .if (@0 < $40) - sbi @0,@1 - .else - in_ @2,@0 - ori @2,exp2(@1) - out_ @0,@2 - .endif - .endmacro - - .macro cbi_ - .if (@0 < $40) - cbi @0,@1 - .else - in_ @2,@0 - andi @2,~(exp2(@1)) - out_ @0,@2 - .endif - .endmacro - - .macro jmp_ - ; a more flexible macro - .ifdef @0 - .if (@0-pc > 2040) || (pc-@0>2040) - jmp @0 - .else - rjmp @0 - .endif - .else - jmp @0 - .endif - .endmacro - .macro call_ - ; a more flexible macro - .ifdef @0 - .if (@0-pc > 2040) || (pc-@0>2040) - call @0 - .else - rcall @0 - .endif - .else - call @0 - .endif - .endmacro - - ; F_CPU - ; µsec 16000000 14745600 8000000 1000000 - ; 1 16 14,74 8 1 - ; 10 160 147,45 80 10 - ; 100 1600 1474,56 800 100 - ; 1000 16000 14745,6 8000 1000 - ; - ; cycles = µsec * f_cpu / 1e6 - ; n_loops=cycles/5 - ; - ; cycles already used will be subtracted from the delay - ; the waittime resolution is 1 cycle (delay from exact to +1 cycle) - ; the maximum delay at 20MHz (50ns/clock) is 38350ns - ; waitcount register must specify an immediate register - ; - ; busy waits a specfied amount of microseconds - .macro delay - .set cycles = ( ( @0 * F_CPU ) / 1000000 ) - .if (cycles > ( 256 * 255 * 4 + 2)) - .error "MACRO delay - too many cycles to burn" - .else - .if (cycles > 6) - .set loop_cycles = (cycles / 4) - ldi zl,low(loop_cycles) - ldi zh,high(loop_cycles) - sbiw Z, 1 - brne pc-1 - .set cycles = (cycles - (loop_cycles * 4)) - .endif - .if (cycles > 0) - .if (cycles & 4) - rjmp pc+1 - rjmp pc+1 - .endif - .if (cycles & 2) - rjmp pc+1 - .endif - .if (cycles & 1) - nop - .endif - .endif - .endif - .endmacro - - ; portability macros, they come from the msp430 branches - - .macro DEST - .dw @0 - .endm - - ; controller specific file selected via include - ; directory definition when calling the assembler (-I) - .include "device.asm" - - ; generated automatically, do not edit - - .list - - .equ ramstart = 256 - .equ CELLSIZE = 2 - .macro readflashcell - clr temp7 - lsl zl - rol zh - rol temp7 - out_ RAMPZ, temp7 - elpm @0, Z+ - elpm @1, Z+ - .endmacro - .macro writeflashcell - clr temp7 - lsl zl - rol zh - rol temp7 - out_ RAMPZ, temp7 - .endmacro - .set WANT_ANALOG_COMPARATOR = 0 - .set WANT_USART0 = 0 - .set WANT_PORTA = 0 - .set WANT_PORTB = 0 - .set WANT_PORTC = 0 - .set WANT_PORTD = 0 - .set WANT_TIMER_COUNTER_0 = 0 - .set WANT_TIMER_COUNTER_1 = 0 - .set WANT_TIMER_COUNTER_2 = 0 - .set WANT_TIMER_COUNTER_3 = 0 - .set WANT_BOOT_LOAD = 0 - .set WANT_EXTERNAL_INTERRUPT = 0 - .set WANT_AD_CONVERTER = 0 - .set WANT_JTAG = 0 - .set WANT_EEPROM = 0 - .set WANT_TWI = 0 - .set WANT_USART1 = 0 - .set WANT_SPI = 0 - .set WANT_WATCHDOG = 0 - .set WANT_CPU = 0 - .equ intvecsize = 2 ; please verify; flash size: 131072 bytes - .equ pclen = 2 ; please verify - .overlap - .org 2 -000002 d139 rcall isr ; External Interrupt Request 0 - .org 4 -000004 d137 rcall isr ; External Interrupt Request 1 - .org 6 -000006 d135 rcall isr ; External Interrupt Request 2 - .org 8 -000008 d133 rcall isr ; Pin Change Interrupt Request 0 - .org 10 -00000a d131 rcall isr ; Pin Change Interrupt Request 1 - .org 12 -00000c d12f rcall isr ; Pin Change Interrupt Request 2 - .org 14 -00000e d12d rcall isr ; Pin Change Interrupt Request 3 - .org 16 -000010 d12b rcall isr ; Watchdog Time-out Interrupt - .org 18 -000012 d129 rcall isr ; Timer/Counter2 Compare Match A - .org 20 -000014 d127 rcall isr ; Timer/Counter2 Compare Match B - .org 22 -000016 d125 rcall isr ; Timer/Counter2 Overflow - .org 24 -000018 d123 rcall isr ; Timer/Counter1 Capture Event - .org 26 -00001a d121 rcall isr ; Timer/Counter1 Compare Match A - .org 28 -00001c d11f rcall isr ; Timer/Counter1 Compare Match B - .org 30 -00001e d11d rcall isr ; Timer/Counter1 Overflow - .org 32 -000020 d11b rcall isr ; Timer/Counter0 Compare Match A - .org 34 -000022 d119 rcall isr ; Timer/Counter0 Compare Match B - .org 36 -000024 d117 rcall isr ; Timer/Counter0 Overflow - .org 38 -000026 d115 rcall isr ; SPI Serial Transfer Complete - .org 40 -000028 d113 rcall isr ; USART0, Rx Complete - .org 42 -00002a d111 rcall isr ; USART0 Data register Empty - .org 44 -00002c d10f rcall isr ; USART0, Tx Complete - .org 46 -00002e d10d rcall isr ; Analog Comparator - .org 48 -000030 d10b rcall isr ; ADC Conversion Complete - .org 50 -000032 d109 rcall isr ; EEPROM Ready - .org 52 -000034 d107 rcall isr ; 2-wire Serial Interface - .org 54 -000036 d105 rcall isr ; Store Program Memory Read - .org 56 -000038 d103 rcall isr ; USART1 RX complete - .org 58 -00003a d101 rcall isr ; USART1 Data Register Empty - .org 60 -00003c d0ff rcall isr ; USART1 TX complete - .org 62 -00003e d0fd rcall isr ; Timer/Counter3 Capture Event - .org 64 -000040 d0fb rcall isr ; Timer/Counter3 Compare Match A - .org 66 -000042 d0f9 rcall isr ; Timer/Counter3 Compare Match B - .org 68 -000044 d0f7 rcall isr ; Timer/Counter3 Overflow - .equ INTVECTORS = 35 - .nooverlap - - ; compatability layer (maybe empty) - - ; controller data area, environment query mcu-info - mcu_info: - mcu_ramsize: -000045 4000 .dw 16384 - mcu_eepromsize: -000046 1000 .dw 4096 - mcu_maxdp: -000047 ffff .dw 65535 - mcu_numints: -000048 0023 .dw 35 - mcu_name: -000049 000b .dw 11 -00004a 5441 -00004b 656d -00004c 6167 -00004d 3231 -00004e 3438 -00004f 0050 .db "ATmega1284P",0 - .set codestart=pc - - ; some defaults, change them in your application master file - ; see template.asm for an example - - ; enabling Interrupts, disabling them affects - ; other settings as well. - .set WANT_INTERRUPTS = 1 - - ; count the number of interrupts individually. - ; requires a lot of RAM (one byte per interrupt) - ; disabled by default. - .set WANT_INTERRUPT_COUNTERS = 0 - - ; receiving is asynchronously, so an interrupt queue is useful. - .set WANT_ISR_RX = 1 - - ; case insensitve dictionary lookup. - .set WANT_IGNORECASE = 0 - - ; map all memories to one address space. Details in the - ; technical guide - .set WANT_UNIFIED = 0 - - ; terminal input buffer - .set TIB_SIZE = 90 ; ANS94 needs at least 80 characters per line - - ; USER variables *in addition* to system ones - .set APPUSERSIZE = 10 ; size of application specific user area in bytes - - ; addresses of various data segments - .set rstackstart = RAMEND ; start address of return stack, grows downward - .set stackstart = RAMEND - 80 ; start address of data stack, grows downward - ; change only if you know what to you do - .set NUMWORDLISTS = 8 ; number of word lists in the searh order, at least 8 - .set NUMRECOGNIZERS = 4 ; total number of recognizers, two are always used. - - ; 10 per mille (1 per cent) is ok. - .set BAUD = 38400 - .set BAUD_MAXERROR = 10 - - ; Dictionary setup - .set VE_HEAD = $0000 - .set VE_ENVHEAD = $0000 - - .set AMFORTH_RO_SEG = NRWW_START_ADDR+1 - - ; cpu clock in hertz - .equ F_CPU = 16000000 - .set BAUD_MAXERROR = 30 - .equ TIMER_INT = OVF2addr - - .include "drivers/usart_0.asm" - - .equ BAUDRATE_HIGH = UBRR0H - .equ USART_C = UCSR0C - .equ USART_B = UCSR0B - .equ USART_A = UCSR0A - .equ USART_DATA = UDR0 - .ifndef URXCaddr - .equ URXCaddr = URXC0addr - .equ UDREaddr = UDRE0addr - .endif - - .equ bm_USART_RXRD = 1 << RXC0 - .equ bm_USART_TXRD = 1 << UDRE0 - .equ bm_ENABLE_TX = 1 << TXEN0 - .equ bm_ENABLE_RX = 1 << RXEN0 - .equ bm_ENABLE_INT_RX = 1<rx-buf",0 -000055 0000 .dw VE_HEAD - .set VE_HEAD = VE_TO_RXBUF - XT_TO_RXBUF: -000056 0057 .dw PFA_rx_tobuf - PFA_rx_tobuf: -000057 2f08 mov temp0, tosl -000058 9110 0110 lds temp1, usart_rx_in -00005a e0e0 ldi zl, low(usart_rx_data) -00005b e0f1 ldi zh, high(usart_rx_data) -00005c 0fe1 add zl, temp1 -00005d 1df3 adc zh, zeroh -00005e 8300 st Z, temp0 -00005f 9513 inc temp1 -000060 701f andi temp1,usart_rx_mask -000061 9310 0110 sts usart_rx_in, temp1 -000063 9189 -000064 9199 loadtos -000065 940c f005 jmp_ DO_NEXT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ; setup with - ; ' isr-rx URXCaddr int! - VE_ISR_RX: -000067 ff06 .dw $ff06 -000068 7369 -000069 2d72 -00006a 7872 .db "isr-rx" -00006b 0050 .dw VE_HEAD - .set VE_HEAD = VE_ISR_RX - XT_ISR_RX: -00006c f001 .dw DO_COLON - usart_rx_isr: -00006d f046 .dw XT_DOLITERAL -00006e 00c6 .dw usart_data -00006f f0aa .dw XT_CFETCH -000070 f0c3 .dw XT_DUP -000071 f046 .dw XT_DOLITERAL -000072 0003 .dw 3 -000073 fd9a .dw XT_EQUAL -000074 f03f .dw XT_DOCONDBRANCH -000075 0077 .dw usart_rx_isr1 -000076 fa74 .dw XT_COLD - usart_rx_isr1: -000077 0056 .dw XT_TO_RXBUF -000078 f026 .dw XT_EXIT - - ; ( -- ) Hardware Access - ; R( --) - ; initialize usart - ;VE_USART_INIT_RXBUFFER: - ; .dw $ff0x - ; .db "+usart-buffer" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_USART_INIT_RXBUFFER - XT_USART_INIT_RX_BUFFER: -000079 f001 .dw DO_COLON - PFA_USART_INIT_RX_BUFFER: ; ( -- ) -00007a f046 -00007b 006c .dw XT_DOLITERAL, XT_ISR_RX -00007c f046 -00007d 0028 .dw XT_DOLITERAL, URXCaddr -00007e f4a2 .dw XT_INTSTORE - -00007f f046 .dw XT_DOLITERAL -000080 0100 .dw usart_rx_data -000081 f046 .dw XT_DOLITERAL -000082 0016 .dw usart_rx_size + 6 -000083 f166 .dw XT_ZERO -000084 f4ea .dw XT_FILL -000085 f026 .dw XT_EXIT - - ; ( -- c) - ; MCU - ; get 1 character from input queue, wait if needed using interrupt driver - VE_RX_BUFFER: -000086 ff06 .dw $ff06 -000087 7872 -000088 622d -000089 6675 .db "rx-buf" -00008a 0067 .dw VE_HEAD - .set VE_HEAD = VE_RX_BUFFER - XT_RX_BUFFER: -00008b f001 .dw DO_COLON - PFA_RX_BUFFER: -00008c 00a6 .dw XT_RXQ_BUFFER -00008d f03f .dw XT_DOCONDBRANCH -00008e 008c .dw PFA_RX_BUFFER -00008f f046 .dw XT_DOLITERAL -000090 0111 .dw usart_rx_out -000091 f0aa .dw XT_CFETCH -000092 f0c3 .dw XT_DUP -000093 f046 .dw XT_DOLITERAL -000094 0100 .dw usart_rx_data -000095 f1af .dw XT_PLUS -000096 f0aa .dw XT_CFETCH -000097 f0d6 .dw XT_SWAP -000098 f241 .dw XT_1PLUS -000099 f046 .dw XT_DOLITERAL -00009a 000f .dw usart_rx_mask -00009b f225 .dw XT_AND -00009c f046 .dw XT_DOLITERAL -00009d 0111 .dw usart_rx_out -00009e f09f .dw XT_CSTORE -00009f f026 .dw XT_EXIT - - ; ( -- f) - ; MCU - ; check if unread characters are in the input queue - VE_RXQ_BUFFER: -0000a0 ff07 .dw $ff07 -0000a1 7872 -0000a2 2d3f -0000a3 7562 -0000a4 0066 .db "rx?-buf",0 -0000a5 0086 .dw VE_HEAD - .set VE_HEAD = VE_RXQ_BUFFER - XT_RXQ_BUFFER: -0000a6 f001 .dw DO_COLON - PFA_RXQ_BUFFER: -0000a7 fa6c .dw XT_PAUSE -0000a8 f046 .dw XT_DOLITERAL -0000a9 0111 .dw usart_rx_out -0000aa f0aa .dw XT_CFETCH -0000ab f046 .dw XT_DOLITERAL -0000ac 0110 .dw usart_rx_in -0000ad f0aa .dw XT_CFETCH -0000ae f125 .dw XT_NOTEQUAL -0000af f026 .dw XT_EXIT - ; .include "drivers/timer-usart-isr.asm" - .set XT_RX = XT_RX_BUFFER - .set XT_RXQ = XT_RXQ_BUFFER - .set XT_USART_INIT_RX = XT_USART_INIT_RX_BUFFER - .else - .endif - - .include "words/usart-tx-poll.asm" - - ; MCU - ; check availability and send one character to the terminal using register poll - VE_TX_POLL: -0000b0 ff07 .dw $ff07 -0000b1 7874 -0000b2 702d -0000b3 6c6f -0000b4 006c .db "tx-poll",0 -0000b5 00a0 .dw VE_HEAD - .set VE_HEAD = VE_TX_POLL - XT_TX_POLL: -0000b6 f001 .dw DO_COLON - PFA_TX_POLL: - ; wait for data ready -0000b7 00c4 .dw XT_TXQ_POLL -0000b8 f03f .dw XT_DOCONDBRANCH -0000b9 00b7 .dw PFA_TX_POLL - ; send to usart -0000ba f046 .dw XT_DOLITERAL -0000bb 00c6 .dw USART_DATA -0000bc f09f .dw XT_CSTORE -0000bd f026 .dw XT_EXIT - - ; ( -- f) MCU - ; MCU - ; check if a character can be send using register poll - VE_TXQ_POLL: -0000be ff08 .dw $ff08 -0000bf 7874 -0000c0 2d3f -0000c1 6f70 -0000c2 6c6c .db "tx?-poll" -0000c3 00b0 .dw VE_HEAD - .set VE_HEAD = VE_TXQ_POLL - XT_TXQ_POLL: -0000c4 f001 .dw DO_COLON - PFA_TXQ_POLL: -0000c5 fa6c .dw XT_PAUSE -0000c6 f046 .dw XT_DOLITERAL -0000c7 00c0 .dw USART_A -0000c8 f0aa .dw XT_CFETCH -0000c9 f046 .dw XT_DOLITERAL -0000ca 0020 .dw bm_USART_TXRD -0000cb f225 .dw XT_AND -0000cc f026 .dw XT_EXIT - .set XT_TX = XT_TX_POLL - .set XT_TXQ = XT_TXQ_POLL - .set XT_USART_INIT_TX = 0 - - .include "words/ubrr.asm" - - ; MCU - ; returns usart UBRR settings - VE_UBRR: -0000cd ff04 .dw $ff04 -0000ce 6275 -0000cf 7272 .db "ubrr" -0000d0 00be .dw VE_HEAD - .set VE_HEAD = VE_UBRR - XT_UBRR: -0000d1 f081 .dw PFA_DOVALUE1 - PFA_UBRR: ; ( -- ) -0000d2 009e .dw EE_UBRRVAL -0000d3 fbcf .dw XT_EDEFERFETCH -0000d4 fbd9 .dw XT_EDEFERSTORE - .include "words/usart.asm" - - ; MCU - ; initialize usart - VE_USART: -0000d5 ff06 .dw $ff06 -0000d6 752b -0000d7 6173 -0000d8 7472 .db "+usart" -0000d9 00cd .dw VE_HEAD - .set VE_HEAD = VE_USART - XT_USART: -0000da f001 .dw DO_COLON - PFA_USART: ; ( -- ) - -0000db f046 .dw XT_DOLITERAL -0000dc 0098 .dw USART_B_VALUE -0000dd f046 .dw XT_DOLITERAL -0000de 00c1 .dw USART_B -0000df f09f .dw XT_CSTORE - -0000e0 f046 .dw XT_DOLITERAL -0000e1 0006 .dw USART_C_VALUE -0000e2 f046 .dw XT_DOLITERAL -0000e3 00c2 .dw USART_C | bm_USARTC_en -0000e4 f09f .dw XT_CSTORE - -0000e5 00d1 .dw XT_UBRR -0000e6 f0c3 .dw XT_DUP -0000e7 f30b .dw XT_BYTESWAP -0000e8 f046 .dw XT_DOLITERAL -0000e9 00c5 .dw BAUDRATE_HIGH -0000ea f09f .dw XT_CSTORE -0000eb f046 .dw XT_DOLITERAL -0000ec 00c4 .dw BAUDRATE_LOW -0000ed f09f .dw XT_CSTORE - .if XT_USART_INIT_RX!=0 -0000ee 0079 .dw XT_USART_INIT_RX - .endif - .if XT_USART_INIT_TX!=0 - .endif - -0000ef f026 .dw XT_EXIT - - ; settings for 1wire interface - .equ OW_PORT=PORTB - .EQU OW_BIT=4 - .include "drivers/1wire.asm" - - ; B. J. Rodriguez (MSP 430) - ; Matthias Trute (AVR Atmega) - ; COPYRIGHT - ; (c) 2012 Bradford J. Rodriguez for the 430 code and API - - ; adapted 430 assembly code to AVR - ; wishlist: - ; use a configurable pin at runtime, compatible with bitnames.frt - ; no external pull up, no external power supply for devices - ; ??? - ; - ;.EQU OW_BIT=4 - ;.equ OW_PORT=PORTE - .set OW_DDR=(OW_PORT-1) - .set OW_PIN=(OW_DDR-1) - - ;****f* 1W.RESET - ; NAME - ; 1W.RESET - ; SYNOPSIS - ; 1W.RESET ( -- f ) Initialize 1-wire devices; return true if present - ; DESCRIPTION - ; This configures the port pin used by the 1-wire interface, and then - ; sends an "initialize" sequence to the 1-wire devices. If any device - ; is present, it will be detected. - ; - ; Timing, per DS18B20 data sheet: - ; a) Output "0" (drive output low) for >480 usec. - ; b) Output "1" (let output float). - ; c) After 15 to 60 usec, device will drive pin low for 60 to 240 usec. - ; So, wait 75 usec and sample input. - ; d) Leave output high (floating) for at least 480 usec. - ;****** - ; ( -- f ) - ; Hardware - ; Initialize 1-wire devices; return true if present - VE_OW_RESET: -0000f0 ff08 .dw $ff08 -0000f1 7731 -0000f2 722e -0000f3 7365 -0000f4 7465 .db "1w.reset" -0000f5 00d5 .dw VE_HEAD - .set VE_HEAD = VE_OW_RESET - XT_OW_RESET: -0000f6 00f7 .dw PFA_OW_RESET - PFA_OW_RESET: -0000f7 939a -0000f8 938a savetos - ; setup to output -0000f9 9a24 sbi OW_DDR, OW_BIT - ; Pull output low -0000fa 982c cbi OW_PORT, OW_BIT - ; Delay >480 usec -0000fb e8e0 -0000fc e0f7 -0000fd 9731 -0000fe f7f1 DELAY 480 - ; Critical timing period, disable interrupts. -0000ff b71f in temp1, SREG -000100 94f8 cli - ; Pull output high -000101 9a2c sbi OW_PORT, OW_BIT - ; make pin input, sends "1" -000102 9824 cbi OW_DDR, OW_BIT -000103 e0e0 -000104 e0f1 -000105 9731 -000106 f7f1 DELAY 64 ; delayB - ; Sample input pin, set TOS if input is zero -000107 b183 in tosl, OW_PIN -000108 ff84 sbrs tosl, OW_BIT -000109 ef9f ser tosh - ; End critical timing period, enable interrupts -00010a bf1f out SREG, temp1 - ; release bus -00010b 9824 cbi OW_DDR, OW_BIT -00010c 982c cbi OW_PORT, OW_BIT - - ; Delay rest of 480 usec -00010d e8e0 -00010e e0f6 -00010f 9731 -000110 f7f1 DELAY 416 - ; we now have the result flag in TOS -000111 2f89 mov tosl, tosh -000112 940c f005 jmp_ DO_NEXT - - ;****f* 1W.SLOT - ; NAME - ; 1W.SLOT - ; SYNOPSIS - ; 1W.SLOT ( c -- c' ) Write and read one bit to/from 1-wire. - ; DESCRIPTION - ; The "touch byte" function is described in Dallas App Note 74. - ; It outputs a byte to the 1-wire pin, LSB first, and reads back - ; the state of the 1-wire pin after a suitable delay. - ; To read a byte, output $FF and read the reply data. - ; To write a byte, output that byte and discard the reply. - ; - ; This function performs one bit of the "touch" operation -- - ; one read/write "slot" in Dallas jargon. Perform this eight - ; times in a row to get the "touch byte" function. - ; - ; PARAMETERS - ; The input parameter is xxxxxxxxbbbbbbbo where - ; 'xxxxxxxx' are don't cares, - ; 'bbbbbbb' are bits to be shifted down, and - ; 'o' is the bit to be output in the slot. This must be 1 - ; to create a read slot. - ; - ; The returned value is xxxxxxxxibbbbbbb where - ; 'xxxxxxxx' are not known (the input shifted down 1 position), - ; 'i' is the bit read during the slot. This has no meaning - ; if it was a write slot. - ; 'bbbbbbb' are the 7 input bits, shifted down one position. - ; - ; This peculiar parameter usage allows OWTOUCH to be written as - ; OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT - ; - ; NOTES - ; Interrupts are disabled during each bit. - - ; Timing, per DS18B20 data sheet: - ; a) Output "0" for start period. (> 1 us, < 15 us, typ. 6 us*) - ; b) Output data bit (0 or 1), open drain - ; c) After MS from start of cycle, sample input (15 to 60 us, typ. 25 us*) - ; d) After write-0 period from start of cycle, output "1" (>60 us) - ; e) After recovery period, loop or return. (> 1 us) - ; For writes, DS18B20 samples input 15 to 60 usec from start of cycle. - ; * "Typical" values are per App Note 132 for a 300m cable length. - - ; --------- ------------------------------- - ; \ / / - ; ------------------------------- - ; a b c d e - ; | 6us | 19us | 35us | 2us | - ;****** - ; ( c -- c' ) - ; Hardware - ; Write and read one bit to/from 1-wire. - VE_OW_SLOT: -000114 ff07 .dw $ff07 -000115 7731 -000116 732e -000117 6f6c -000118 0074 .db "1w.slot",0 -000119 00f0 .dw VE_HEAD - .set VE_HEAD = VE_OW_SLOT - XT_OW_SLOT: -00011a 011b .dw PFA_OW_SLOT - PFA_OW_SLOT: - ; pull low -00011b 982c cbi OW_PORT, OW_BIT -00011c 9a24 sbi OW_DDR, OW_BIT - ; disable interrupts -00011d b71f in temp1, SREG -00011e 94f8 cli -00011f e1e8 -000120 e0f0 -000121 9731 -000122 f7f1 DELAY 6 ; DELAY A - ; check bit -000123 9488 clc -000124 9587 ror tosl -000125 f410 brcc PFA_OW_SLOT0 ; a 0 keeps the bus low - ; release bus, a 1 is written -000126 9a2c sbi OW_PORT, OW_BIT -000127 9824 cbi OW_DDR, OW_BIT - PFA_OW_SLOT0: - ; sample the input (no action required if zero) -000128 e2e4 -000129 e0f0 -00012a 9731 -00012b f7f1 DELAY 9 ; wait DELAY E to sample -00012c b103 in temp0, OW_PIN -00012d fd04 sbrc temp0, OW_BIT -00012e 6880 ori tosl, $80 - -00012f ecec -000130 e0f0 -000131 9731 -000132 f7f1 DELAY 51 ; DELAY B -000133 9a2c sbi OW_PORT, OW_BIT ; release bus -000134 9824 cbi OW_DDR, OW_BIT -000135 e0e8 -000136 e0f0 -000137 9731 -000138 f7f1 delay 2 - ; re-enable interrupts -000139 bf1f out SREG, temp1 -00013a 940c f005 jmp_ DO_NEXT - - .include "amforth.asm" - - ;;;; - ;;;; GPL V2 (only) - - .set AMFORTH_NRWW_SIZE=(FLASHEND-AMFORTH_RO_SEG)*2 - - .set corepc = pc - .org $0000 -000000 940c fa75 jmp_ PFA_COLD - - .org corepc - .include "drivers/generic-isr.asm" - - .eseg -000000 intvec: .byte INTVECTORS * CELLSIZE - .dseg -000112 intcnt: .byte INTVECTORS - .cseg - - ; interrupt routine gets called (again) by rcall! This gives the - ; address of the int-vector on the stack. - isr: -00013c 920a st -Y, r0 -00013d b60f in r0, SREG -00013e 920a st -Y, r0 - .if (pclen==3) - .endif -00013f 900f pop r0 -000140 900f pop r0 ; = intnum * intvectorsize + 1 (address following the rcall) -000141 940a dec r0 - .if intvecsize == 1 ; - .endif -000142 2cb0 mov isrflag, r0 -000143 93ff push zh -000144 93ef push zl -000145 e1e2 ldi zl, low(intcnt) -000146 e0f1 ldi zh, high(intcnt) -000147 9406 lsr r0 ; we use byte addresses in the counter array, not words -000148 0de0 add zl, r0 -000149 1df3 adc zh, zeroh -00014a 8000 ld r0, Z -00014b 9403 inc r0 -00014c 8200 st Z, r0 -00014d 91ef pop zl -00014e 91ff pop zh - -00014f 9009 ld r0, Y+ -000150 be0f out SREG, r0 -000151 9009 ld r0, Y+ -000152 9508 ret ; returns the interrupt, the rcall stack frame is removed! - ; no reti here, see words/isr-end.asm - ; lower part of the dictionary - .include "dict/rww.inc" - - - ; Arithmetics - ; add a number to a double cell - VE_MPLUS: -000153 ff02 .dw $ff02 -000154 2b6d .db "m+" -000155 0114 .dw VE_HEAD - .set VE_HEAD = VE_MPLUS - XT_MPLUS: -000156 f001 .dw DO_COLON - PFA_MPLUS: -000157 fd82 .dw XT_S2D -000158 f430 .dw XT_DPLUS -000159 f026 .dw XT_EXIT - .include "words/ud-star.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDSTAR: -00015a ff03 .dw $ff03 -00015b 6475 -../../common\words/ud-star.asm(9): warning: .cseg .db misalignment - padding zero byte -00015c 002a .db "ud*" -00015d 0153 .dw VE_HEAD - .set VE_HEAD = VE_UDSTAR - XT_UDSTAR: -00015e f001 .dw DO_COLON - PFA_UDSTAR: - - .endif - ;Z UD* ud1 d2 -- ud3 32*16->32 multiply - ; XT_DUP >R UM* DROP XT_SWAP R> UM* ROT + ; - -00015f f0c3 -000160 f111 -000161 f1f2 -000162 f0eb .DW XT_DUP,XT_TO_R,XT_UMSTAR,XT_DROP -000163 f0d6 -000164 f108 -000165 f1f2 -000166 f0f3 -000167 f1af -000168 f026 .DW XT_SWAP,XT_R_FROM,XT_UMSTAR,XT_ROT,XT_PLUS,XT_EXIT - .include "words/umax.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UMAX: -000169 ff04 .dw $ff04 -00016a 6d75 -00016b 7861 .db "umax" -00016c 015a .dw VE_HEAD - .set VE_HEAD = VE_UMAX - XT_UMAX: -00016d f001 .dw DO_COLON - PFA_UMAX: - .endif - -00016e f580 -00016f f16e .DW XT_2DUP,XT_ULESS -000170 f03f .dw XT_DOCONDBRANCH -000171 0173 DEST(UMAX1) -000172 f0d6 .DW XT_SWAP -000173 f0eb UMAX1: .DW XT_DROP -000174 f026 .dw XT_EXIT - .include "words/umin.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UMIN: -000175 ff04 .dw $ff04 -000176 6d75 -000177 6e69 .db "umin" -000178 0169 .dw VE_HEAD - .set VE_HEAD = VE_UMIN - XT_UMIN: -000179 f001 .dw DO_COLON - PFA_UMIN: - .endif -00017a f580 -00017b f179 .DW XT_2DUP,XT_UGREATER -00017c f03f .dw XT_DOCONDBRANCH -00017d 017f DEST(UMIN1) -00017e f0d6 .DW XT_SWAP -00017f f0eb UMIN1: .DW XT_DROP -000180 f026 .dw XT_EXIT - .include "words/immediate-q.asm" - - ; Tools - ; return +1 if immediate, -1 otherwise, flag from name>flags - ;VE_IMMEDIATEQ: - ; .dw $ff06 - ; .db "immediate?" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_IMMEDIATEQ - XT_IMMEDIATEQ: -000181 f001 .dw DO_COLON - PFA_IMMEDIATEQ: -000182 f046 .dw XT_DOLITERAL -000183 8000 .dw $8000 -000184 f225 .dw XT_AND -000185 f12c .dw XT_ZEROEQUAL -000186 f03f .dw XT_DOCONDBRANCH -000187 018a DEST(IMMEDIATEQ1) -000188 fda1 .dw XT_ONE -000189 f026 .dw XT_EXIT - IMMEDIATEQ1: - ; not immediate -00018a f15d .dw XT_TRUE -00018b f026 .dw XT_EXIT - .include "words/name2flags.asm" - - ; Tools - ; get the flags from a name token - VE_NAME2FLAGS: -00018c ff0a .dw $ff0a -00018d 616e -00018e 656d -00018f 663e -000190 616c -000191 7367 .db "name>flags" -000192 0175 .dw VE_HEAD - .set VE_HEAD = VE_NAME2FLAGS - XT_NAME2FLAGS: -000193 f001 .dw DO_COLON - PFA_NAME2FLAGS: -000194 f3e3 .dw XT_FETCHI ; skip to link field -000195 f046 .dw XT_DOLITERAL -000196 ff00 .dw $ff00 -000197 f225 .dw XT_AND -000198 f026 .dw XT_EXIT - - .if AMFORTH_NRWW_SIZE > 8000 - .include "dict/appl_8k.inc" - - - .include "words/newest.asm" - - ; System Variable - ; system state - VE_NEWEST: -000199 ff06 .dw $ff06 -00019a 656e -00019b 6577 -00019c 7473 .db "newest" -00019d 018c .dw VE_HEAD - .set VE_HEAD = VE_NEWEST - XT_NEWEST: -00019e f054 .dw PFA_DOVARIABLE - PFA_NEWEST: -00019f 0135 .dw ram_newest - - .dseg -000135 ram_newest: .byte 4 - .include "words/latest.asm" - - ; System Variable - ; system state - VE_LATEST: -0001a0 ff06 .dw $ff06 -0001a1 616c -0001a2 6574 -0001a3 7473 .db "latest" -0001a4 0199 .dw VE_HEAD - .set VE_HEAD = VE_LATEST - XT_LATEST: -0001a5 f054 .dw PFA_DOVARIABLE - PFA_LATEST: -0001a6 0139 .dw ram_latest - - .dseg -000139 ram_latest: .byte 2 - .include "words/do-create.asm" - - ; Compiler - ; parse the input and create an empty vocabulary entry without XT and data field (PF) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOCREATE: -0001a7 ff08 .dw $ff08 -0001a8 6328 -0001a9 6572 -0001aa 7461 -0001ab 2965 .db "(create)" -0001ac 01a0 .dw VE_HEAD - .set VE_HEAD = VE_DOCREATE - XT_DOCREATE: -0001ad f001 .dw DO_COLON - PFA_DOCREATE: - .endif -0001ae f9cf -0001af 0304 .DW XT_PARSENAME,XT_WLSCOPE ; ( -- addr len wid) -0001b0 f0c3 -0001b1 019e -0001b2 f579 -0001b3 f093 .DW XT_DUP,XT_NEWEST,XT_CELLPLUS,XT_STORE ; save the wid -0001b4 02e9 -0001b5 019e -0001b6 f093 .DW XT_HEADER,XT_NEWEST,XT_STORE ; save the nt -0001b7 f026 .DW XT_EXIT - .include "words/backslash.asm" - - ; Compiler - ; everything up to the end of the current line is a comment - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BACKSLASH: -0001b8 0001 .dw $0001 -0001b9 005c .db $5c,0 -0001ba 01a7 .dw VE_HEAD - .set VE_HEAD = VE_BACKSLASH - XT_BACKSLASH: -0001bb f001 .dw DO_COLON - PFA_BACKSLASH: - .endif -0001bc f9b6 .dw XT_SOURCE -0001bd f102 .dw XT_NIP -0001be f599 .dw XT_TO_IN -0001bf f093 .dw XT_STORE -0001c0 f026 .dw XT_EXIT - .include "words/l-paren.asm" - - ; Compiler - ; skip everything up to the closing bracket on the same line - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_LPAREN: -0001c1 0001 .dw $0001 -0001c2 0028 .db "(" ,0 -0001c3 01b8 .dw VE_HEAD - .set VE_HEAD = VE_LPAREN - XT_LPAREN: -0001c4 f001 .dw DO_COLON - PFA_LPAREN: - .endif -0001c5 f046 .dw XT_DOLITERAL -0001c6 0029 .dw ')' -0001c7 f9a2 .dw XT_PARSE -0001c8 f589 .dw XT_2DROP -0001c9 f026 .dw XT_EXIT - - .include "words/compile.asm" - - ; Dictionary - ; read the following cell from the dictionary and append it to the current dictionary position. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_COMPILE: -0001ca ff07 .dw $ff07 -0001cb 6f63 -0001cc 706d -0001cd 6c69 -0001ce 0065 .db "compile",0 -0001cf 01c1 .dw VE_HEAD - .set VE_HEAD = VE_COMPILE - XT_COMPILE: -0001d0 f001 .dw DO_COLON - PFA_COMPILE: - .endif -0001d1 f108 .dw XT_R_FROM -0001d2 f0c3 .dw XT_DUP -0001d3 fbc6 .dw XT_ICELLPLUS -0001d4 f111 .dw XT_TO_R -0001d5 f3e3 .dw XT_FETCHI -0001d6 01db .dw XT_COMMA -0001d7 f026 .dw XT_EXIT - .include "words/comma.asm" - - ; Dictionary - ; compile 16 bit into flash at DP - VE_COMMA: -0001d8 ff01 .dw $ff01 -0001d9 002c .db ',',0 ; , -0001da 01ca .dw VE_HEAD - .set VE_HEAD = VE_COMMA - XT_COMMA: -0001db f001 .dw DO_COLON - PFA_COMMA: -0001dc f5c9 .dw XT_DP -0001dd f385 .dw XT_STOREI -0001de f5c9 .dw XT_DP -0001df f241 .dw XT_1PLUS -0001e0 fbb4 .dw XT_DOTO -0001e1 f5ca .dw PFA_DP -0001e2 f026 .dw XT_EXIT - .include "words/brackettick.asm" - - ; Compiler - ; what ' does in the interpreter mode, do in colon definitions - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BRACKETTICK: -0001e3 0003 .dw $0003 -0001e4 275b -0001e5 005d .db "[']",0 -0001e6 01d8 .dw VE_HEAD - .set VE_HEAD = VE_BRACKETTICK - XT_BRACKETTICK: -0001e7 f001 .dw DO_COLON - PFA_BRACKETTICK: - .endif -0001e8 f825 .dw XT_TICK -0001e9 01f1 .dw XT_LITERAL -0001ea f026 .dw XT_EXIT - - - .include "words/literal.asm" - - ; Compiler - ; compile a literal in colon defintions - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_LITERAL: -0001eb 0007 .dw $0007 -0001ec 696c -0001ed 6574 -0001ee 6172 -0001ef 006c .db "literal",0 -0001f0 01e3 .dw VE_HEAD - .set VE_HEAD = VE_LITERAL - XT_LITERAL: -0001f1 f001 .dw DO_COLON - PFA_LITERAL: - .endif -0001f2 01d0 .DW XT_COMPILE -0001f3 f046 .DW XT_DOLITERAL -0001f4 01db .DW XT_COMMA -0001f5 f026 .DW XT_EXIT - .include "words/sliteral.asm" - - ; String - ; compiles a string to flash, at runtime leaves ( -- flash-addr count) on stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SLITERAL: -0001f6 0008 .dw $0008 -0001f7 6c73 -0001f8 7469 -0001f9 7265 -0001fa 6c61 .db "sliteral" -0001fb 01eb .dw VE_HEAD - .set VE_HEAD = VE_SLITERAL - XT_SLITERAL: -0001fc f001 .dw DO_COLON - PFA_SLITERAL: - .endif -0001fd 01d0 .dw XT_COMPILE -0001fe f788 .dw XT_DOSLITERAL ; ( -- addr n) -0001ff f796 .dw XT_SCOMMA -000200 f026 .dw XT_EXIT - .include "words/g-mark.asm" - - ; Compiler - ; places current dictionary position for backward resolves - ;VE_GMARK: - ; .dw $ff05 - ; .db ">mark" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_GMARK - XT_GMARK: -000201 f001 .dw DO_COLON - PFA_GMARK: -000202 f5c9 .dw XT_DP -000203 01d0 .dw XT_COMPILE -000204 ffff .dw -1 ; ffff does not erase flash -000205 f026 .dw XT_EXIT - .include "words/g-resolve.asm" - - ; Compiler - ; resolve backward jumps - ;VE_GRESOLVE: - ; .dw $ff08 - ; .db ">resolve" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_GRESOLVE - XT_GRESOLVE: -000206 f001 .dw DO_COLON - PFA_GRESOLVE: -000207 fb72 .dw XT_QSTACK -000208 f5c9 .dw XT_DP -000209 f0d6 .dw XT_SWAP -00020a f385 .dw XT_STOREI -00020b f026 .dw XT_EXIT - .include "words/l_mark.asm" - - ; Compiler - ; place destination for backward branch - ;VE_LMARK: - ; .dw $ff05 - ; .db "r if 2drop then r> invert ; - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_QDOCHECK: -00029a f001 .dw DO_COLON - PFA_QDOCHECK: - .endif -00029b f580 .dw XT_2DUP -00029c fd9a .dw XT_EQUAL -00029d f0c3 .dw XT_DUP -00029e f111 .dw XT_TO_R -00029f f03f .dw XT_DOCONDBRANCH -0002a0 02a2 DEST(PFA_QDOCHECK1) -0002a1 f589 .dw XT_2DROP - PFA_QDOCHECK1: -0002a2 f108 .dw XT_R_FROM -0002a3 f20f .dw XT_INVERT -0002a4 f026 .dw XT_EXIT - .include "words/endloop.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENDLOOP: -0002a5 ff07 .dw $ff07 -0002a6 6e65 -0002a7 6c64 -0002a8 6f6f -0002a9 0070 .db "endloop",0 -0002aa 028e .dw VE_HEAD - .set VE_HEAD = VE_ENDLOOP - XT_ENDLOOP: -0002ab f001 .dw DO_COLON - PFA_ENDLOOP: - .endif - ;Z ENDLOOP adrs xt -- L: 0 a1 a2 .. aN -- - ; ?DUP WHILE POSTPONE THEN REPEAT ; - ; resolve LEAVEs - ; This is a common factor of LOOP and +LOOP. - -0002ac 020f .DW XT_LRESOLVE -0002ad 02b8 -0002ae f0cb -0002af f03f LOOP1: .DW XT_L_FROM,XT_QDUP,XT_DOCONDBRANCH -0002b0 02b4 DEST(LOOP2) -0002b1 0234 .DW XT_THEN -0002b2 f035 .dw XT_DOBRANCH -0002b3 02ad DEST(LOOP1) -0002b4 f026 LOOP2: .DW XT_EXIT - ; leave address stack - .include "words/l-from.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_L_FROM: -0002b5 ff02 .dw $ff02 -0002b6 3e6c .db "l>" -0002b7 02a5 .dw VE_HEAD - .set VE_HEAD = VE_L_FROM - XT_L_FROM: -0002b8 f001 .dw DO_COLON - PFA_L_FROM: - - .endif - ;Z L> -- x L: x -- move from leave stack - ; LP @ @ -2 LP +! ; - -0002b9 02d7 .dw XT_LP -0002ba f08b .dw XT_FETCH -0002bb f08b .dw XT_FETCH -0002bc f046 .dw XT_DOLITERAL -0002bd fffe .dw -2 -0002be 02d7 .dw XT_LP -0002bf f277 .dw XT_PLUSSTORE -0002c0 f026 .dw XT_EXIT - .include "words/to-l.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO_L: -0002c1 ff02 .dw $ff02 -0002c2 6c3e .db ">l" -0002c3 02b5 .dw VE_HEAD - .set VE_HEAD = VE_TO_L - XT_TO_L: -0002c4 f001 .dw DO_COLON - PFA_TO_L: - .endif - ;Z >L x -- L: -- x move to leave stack - ; CELL LP +! LP @ ! ; (L stack grows up) - -0002c5 fda6 .dw XT_TWO -0002c6 02d7 .dw XT_LP -0002c7 f277 .dw XT_PLUSSTORE -0002c8 02d7 .dw XT_LP -0002c9 f08b .dw XT_FETCH -0002ca f093 .dw XT_STORE -0002cb f026 .dw XT_EXIT - .include "words/lp0.asm" - - ; Stack - ; start address of leave stack - VE_LP0: -0002cc ff03 .dw $ff03 -0002cd 706c -0002ce 0030 .db "lp0",0 -0002cf 02c1 .dw VE_HEAD - .set VE_HEAD = VE_LP0 - XT_LP0: -0002d0 f081 .dw PFA_DOVALUE1 - PFA_LP0: -0002d1 0052 .dw CFG_LP0 -0002d2 fbcf .dw XT_EDEFERFETCH -0002d3 fbd9 .dw XT_EDEFERSTORE - .include "words/lp.asm" - - ; System Variable - ; leave stack pointer - VE_LP: -0002d4 ff02 .dw $ff02 -0002d5 706c .db "lp" -0002d6 02cc .dw VE_HEAD - .set VE_HEAD = VE_LP - XT_LP: -0002d7 f054 .dw PFA_DOVARIABLE - PFA_LP: -0002d8 013b .dw ram_lp - - .dseg -00013b ram_lp: .byte 2 - .cseg - - - .include "words/create.asm" - - ; Dictionary - ; create a dictionary header. XT is (constant), with the address of the data field of name - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CREATE: -0002d9 ff06 .dw $ff06 -0002da 7263 -0002db 6165 -0002dc 6574 .db "create" -0002dd 02d4 .dw VE_HEAD - .set VE_HEAD = VE_CREATE - XT_CREATE: -0002de f001 .dw DO_COLON - PFA_CREATE: - .endif -0002df 01ad .dw XT_DOCREATE -0002e0 030d .dw XT_REVEAL -0002e1 01d0 .dw XT_COMPILE -0002e2 f061 .dw PFA_DOCONSTANT -0002e3 f026 .dw XT_EXIT - .include "words/header.asm" - - ; Compiler - ; creates the vocabulary header without XT and data field (PF) in the wordlist wid - VE_HEADER: -0002e4 ff06 .dw $ff06 -0002e5 6568 -0002e6 6461 -0002e7 7265 .db "header" -0002e8 02d9 .dw VE_HEAD - .set VE_HEAD = VE_HEADER - XT_HEADER: -0002e9 f001 .dw DO_COLON - PFA_HEADER: -0002ea f5c9 .dw XT_DP ; the new Name Field -0002eb f111 .dw XT_TO_R -0002ec f111 .dw XT_TO_R ; ( R: NFA WID ) -0002ed f0c3 .dw XT_DUP -0002ee f13a .dw XT_GREATERZERO -0002ef f03f .dw XT_DOCONDBRANCH -0002f0 02fb .dw PFA_HEADER1 -0002f1 f0c3 .dw XT_DUP -0002f2 f046 .dw XT_DOLITERAL -0002f3 ff00 .dw $ff00 ; all flags are off (e.g. immediate) -0002f4 f22e .dw XT_OR -0002f5 f79a .dw XT_DOSCOMMA - ; make the link to the previous entry in this wordlist -0002f6 f108 .dw XT_R_FROM -0002f7 f371 .dw XT_FETCHE -0002f8 01db .dw XT_COMMA -0002f9 f108 .dw XT_R_FROM -0002fa f026 .dw XT_EXIT - - PFA_HEADER1: - ; -16: attempt to use zero length string as a name -0002fb f046 .dw XT_DOLITERAL -0002fc fff0 .dw -16 -0002fd f85c .dw XT_THROW - - .include "words/wlscope.asm" - - ; Compiler - ; dynamically place a word in a wordlist. The word name may be changed. - VE_WLSCOPE: -0002fe ff07 .dw $ff07 -0002ff 6c77 -000300 6373 -000301 706f -000302 0065 .db "wlscope",0 -000303 02e4 .dw VE_HEAD - .set VE_HEAD = VE_WLSCOPE - XT_WLSCOPE: -000304 fc2e .dw PFA_DODEFER1 - PFA_WLSCOPE: -000305 004e .dw CFG_WLSCOPE -000306 fbcf .dw XT_EDEFERFETCH -000307 fbd9 .dw XT_EDEFERSTORE - - ; wlscope, "wordlist scope" ( addr len -- addr' len' wid ), is a deferred word - ; which enables the AmForth application to choose the wordlist ( wid ) for the - ; new voc entry based on the input ( addr len ) string. The name of the new voc - ; entry ( addr' len' ) may be different from the input string. Note that all - ; created voc entry types pass through the wlscope mechanism. The default - ; wlscope action passes the input string to the output without modification and - ; uses get-current to select the wid. - .include "words/reveal.asm" - - ; Dictionary - ; makes an entry in a wordlist visible, if not already done. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_REVEAL: -000308 ff06 .dw $ff06 -000309 6572 -00030a 6576 -00030b 6c61 .db "reveal" -00030c 02fe .dw VE_HEAD - .set VE_HEAD = VE_REVEAL - XT_REVEAL: -00030d f001 .dw DO_COLON - PFA_REVEAL: - .endif -00030e 019e -00030f f579 -000310 f08b .DW XT_NEWEST,XT_CELLPLUS,XT_FETCH ; only if wordlist is in use -000311 f0cb -000312 f03f .DW XT_QDUP,XT_DOCONDBRANCH -000313 0318 DEST(REVEAL1) -000314 019e -000315 f08b -000316 f0d6 -000317 f34d .DW XT_NEWEST,XT_FETCH,XT_SWAP,XT_STOREE - ; .DW XT_ZERO,XT_NEWEST,XT_CELLPLUS,XT_STORE ; clean wordlist entry - REVEAL1: -000318 f026 .DW XT_EXIT - .include "words/does.asm" - - ; Compiler - ; organize the XT replacement to call other colon code - VE_DOES: -000319 0005 .dw $0005 -00031a 6f64 -00031b 7365 -00031c 003e .db "does>",0 -00031d 0308 .dw VE_HEAD - .set VE_HEAD = VE_DOES - XT_DOES: -00031e f001 .dw DO_COLON - PFA_DOES: -00031f 01d0 .dw XT_COMPILE -000320 0331 .dw XT_DODOES -000321 01d0 .dw XT_COMPILE ; create a code snippet to be used in an embedded XT -000322 940e .dw $940e ; the address of this compiled -000323 01d0 .dw XT_COMPILE ; code will replace the XT of the -000324 0326 .dw DO_DODOES ; word that CREATE created -000325 f026 .dw XT_EXIT ; - - DO_DODOES: ; ( -- PFA ) -000326 939a -000327 938a savetos -000328 01cb movw tosl, wl -000329 9601 adiw tosl, 1 - ; the following takes the address from a real uC-call - .if (pclen==3) - .endif -00032a 917f pop wh -00032b 916f pop wl - -00032c 93bf push XH -00032d 93af push XL -00032e 01db movw XL, wl -00032f 940c f005 jmp_ DO_NEXT - - ; ( -- ) - ; System - ; replace the XT written by CREATE to call the code that follows does> - ;VE_DODOES: - ; .dw $ff07 - ; .db "(does>)" - ; .set VE_HEAD = VE_DODOES - XT_DODOES: -000331 f001 .dw DO_COLON - PFA_DODOES: -000332 f108 .dw XT_R_FROM -000333 019e .dw XT_NEWEST -000334 f579 .dw XT_CELLPLUS -000335 f08b .dw XT_FETCH -000336 f371 .dw XT_FETCHE -000337 fc99 .dw XT_NFA2CFA -000338 f385 .dw XT_STOREI -000339 f026 .dw XT_EXIT - .include "words/colon.asm" - - ; Compiler - ; create a named entry in the dictionary, XT is DO_COLON - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_COLON: -00033a ff01 .dw $ff01 -00033b 003a .db ":",0 -00033c 0319 .dw VE_HEAD - .set VE_HEAD = VE_COLON - XT_COLON: -00033d f001 .dw DO_COLON - PFA_COLON: - .endif -00033e 01ad .dw XT_DOCREATE -00033f 0348 .dw XT_COLONNONAME -000340 f0eb .dw XT_DROP -000341 f026 .dw XT_EXIT - .include "words/colon-noname.asm" - - ; Compiler - ; create an unnamed entry in the dictionary, XT is DO_COLON - VE_COLONNONAME: -000342 ff07 .dw $ff07 -000343 6e3a -000344 6e6f -000345 6d61 -000346 0065 .db ":noname",0 -000347 033a .dw VE_HEAD - .set VE_HEAD = VE_COLONNONAME - XT_COLONNONAME: -000348 f001 .dw DO_COLON - PFA_COLONNONAME: -000349 f5c9 .dw XT_DP -00034a f0c3 .dw XT_DUP -00034b 01a5 .dw XT_LATEST -00034c f093 .dw XT_STORE - -00034d 01d0 .dw XT_COMPILE -00034e f001 .dw DO_COLON - -00034f 035d .dw XT_RBRACKET -000350 f026 .dw XT_EXIT - .include "words/semicolon.asm" - - ; Compiler - ; finish colon defintion, compiles (exit) and returns to interpret state - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_SEMICOLON: -000351 0001 .dw $0001 -000352 003b .db $3b,0 -000353 0342 .dw VE_HEAD - .set VE_HEAD = VE_SEMICOLON - XT_SEMICOLON: -000354 f001 .dw DO_COLON - PFA_SEMICOLON: - .endif -000355 01d0 .dw XT_COMPILE -000356 f026 .dw XT_EXIT -000357 0365 .dw XT_LBRACKET -000358 030d .dw XT_REVEAL -000359 f026 .dw XT_EXIT - .include "words/right-bracket.asm" - - ; Compiler - ; enter compiler mode - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RBRACKET: -00035a ff01 .dw $ff01 -00035b 005d .db "]",0 -00035c 0351 .dw VE_HEAD - .set VE_HEAD = VE_RBRACKET - XT_RBRACKET: -00035d f001 .dw DO_COLON - PFA_RBRACKET: - .endif -00035e fda1 .dw XT_ONE -00035f f566 .dw XT_STATE -000360 f093 .dw XT_STORE -000361 f026 .dw XT_EXIT - .include "words/left-bracket.asm" - - ; Compiler - ; enter interpreter mode - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_LBRACKET: -000362 0001 .dw $0001 -000363 005b .db "[",0 -000364 035a .dw VE_HEAD - .set VE_HEAD = VE_LBRACKET - XT_LBRACKET: -000365 f001 .dw DO_COLON - PFA_LBRACKET: - .endif -000366 f166 .dw XT_ZERO -000367 f566 .dw XT_STATE -000368 f093 .dw XT_STORE -000369 f026 .dw XT_EXIT - .include "words/variable.asm" - - ; Compiler - ; create a dictionary entry for a variable and allocate 1 cell RAM - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_VARIABLE: -00036a ff08 .dw $ff08 -00036b 6176 -00036c 6972 -00036d 6261 -00036e 656c .db "variable" -00036f 0362 .dw VE_HEAD - .set VE_HEAD = VE_VARIABLE - XT_VARIABLE: -000370 f001 .dw DO_COLON - PFA_VARIABLE: - .endif -000371 f5da .dw XT_HERE -000372 037c .dw XT_CONSTANT -000373 fda6 .dw XT_TWO -000374 f5e3 .dw XT_ALLOT -000375 f026 .dw XT_EXIT - .include "words/constant.asm" - - ; Compiler - ; create a constant in the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_CONSTANT: -000376 ff08 .dw $ff08 -000377 6f63 -000378 736e -000379 6174 -00037a 746e .db "constant" -00037b 036a .dw VE_HEAD - .set VE_HEAD = VE_CONSTANT - XT_CONSTANT: -00037c f001 .dw DO_COLON - PFA_CONSTANT: - .endif -00037d 01ad .dw XT_DOCREATE -00037e 030d .dw XT_REVEAL -00037f 01d0 .dw XT_COMPILE -000380 f054 .dw PFA_DOVARIABLE -000381 01db .dw XT_COMMA -000382 f026 .dw XT_EXIT - .include "words/user.asm" - - ; Compiler - ; create a dictionary entry for a user variable at offset n - VE_USER: -000383 ff04 .dw $ff04 -000384 7375 -000385 7265 .db "user" -000386 0376 .dw VE_HEAD - .set VE_HEAD = VE_USER - XT_USER: -000387 f001 .dw DO_COLON - PFA_USER: -000388 01ad .dw XT_DOCREATE -000389 030d .dw XT_REVEAL - -00038a 01d0 .dw XT_COMPILE -00038b f067 .dw PFA_DOUSER -00038c 01db .dw XT_COMMA -00038d f026 .dw XT_EXIT - - .include "words/recurse.asm" - - ; Compiler - ; compile the XT of the word currently being defined into the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RECURSE: -00038e 0007 .dw $0007 -00038f 6572 -000390 7563 -000391 7372 -000392 0065 .db "recurse",0 -000393 0383 .dw VE_HEAD - .set VE_HEAD = VE_RECURSE - XT_RECURSE: -000394 f001 .dw DO_COLON - PFA_RECURSE: - .endif -000395 01a5 .dw XT_LATEST -000396 f08b .dw XT_FETCH -000397 01db .dw XT_COMMA -000398 f026 .dw XT_EXIT - .include "words/immediate.asm" - - ; Compiler - ; set immediate flag for the most recent word definition - VE_IMMEDIATE: -000399 ff09 .dw $ff09 -00039a 6d69 -00039b 656d -00039c 6964 -00039d 7461 -00039e 0065 .db "immediate",0 -00039f 038e .dw VE_HEAD - .set VE_HEAD = VE_IMMEDIATE - XT_IMMEDIATE: -0003a0 f001 .dw DO_COLON - PFA_IMMEDIATE: -0003a1 0442 .dw XT_GET_CURRENT -0003a2 f371 .dw XT_FETCHE -0003a3 f0c3 .dw XT_DUP -0003a4 f3e3 .dw XT_FETCHI -0003a5 f046 .dw XT_DOLITERAL -0003a6 7fff .dw $7fff -0003a7 f225 .dw XT_AND -0003a8 f0d6 .dw XT_SWAP -0003a9 f385 .dw XT_STOREI -0003aa f026 .dw XT_EXIT - - .include "words/bracketchar.asm" - - ; Tools - ; skip leading space delimites, place the first character of the word on the stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BRACKETCHAR: -0003ab 0006 .dw $0006 -0003ac 635b -0003ad 6168 -0003ae 5d72 .db "[char]" -0003af 0399 .dw VE_HEAD - .set VE_HEAD = VE_BRACKETCHAR - XT_BRACKETCHAR: -0003b0 f001 .dw DO_COLON - PFA_BRACKETCHAR: - .endif -0003b1 01d0 .dw XT_COMPILE -0003b2 f046 .dw XT_DOLITERAL -0003b3 f905 .dw XT_CHAR -0003b4 01db .dw XT_COMMA -0003b5 f026 .dw XT_EXIT - .include "words/abort-string.asm" - - ;C i*x x1 -- R: j*x -- x1<>0 - ; POSTPONE IS" POSTPONE ?ABORT ; IMMEDIATE - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ABORTQUOTE: -0003b6 0006 .dw $0006 -0003b7 6261 -0003b8 726f -0003b9 2274 .db "abort",'"' -0003ba 03ab .dw VE_HEAD - .set VE_HEAD = VE_ABORTQUOTE - XT_ABORTQUOTE: -0003bb f001 .dw DO_COLON - PFA_ABORTQUOTE: - .endif -0003bc f4dc .dw XT_SQUOTE -0003bd 01d0 .dw XT_COMPILE -0003be 03cd .dw XT_QABORT -0003bf f026 .DW XT_EXIT - .include "words/abort.asm" - - ; Exceptions - ; send an exception -1 - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ABORT: -0003c0 ff05 .dw $ff05 -0003c1 6261 -0003c2 726f -0003c3 0074 .db "abort",0 -0003c4 03b6 .dw VE_HEAD - .set VE_HEAD = VE_ABORT - XT_ABORT: -0003c5 f001 .dw DO_COLON - PFA_ABORT: - .endif -0003c6 f15d .dw XT_TRUE -0003c7 f85c .dw XT_THROW - .include "words/q-abort.asm" - - ; ROT IF ITYPE ABORT THEN 2DROP ; - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QABORT: -0003c8 ff06 .dw $ff06 -0003c9 613f -0003ca 6f62 -0003cb 7472 .db "?abort" -0003cc 03c0 .dw VE_HEAD - .set VE_HEAD = VE_QABORT - XT_QABORT: -0003cd f001 .dw DO_COLON - PFA_QABORT: - - .endif -0003ce f0f3 -0003cf f03f .DW XT_ROT,XT_DOCONDBRANCH -0003d0 03d3 DEST(QABO1) -0003d1 f7bb -0003d2 03c5 .DW XT_ITYPE,XT_ABORT -0003d3 f589 -0003d4 f026 QABO1: .DW XT_2DROP,XT_EXIT - - .include "words/get-stack.asm" - - ; Tools - ; Get a stack from EEPROM - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_GET_STACK: -0003d5 ff09 .dw $ff09 -0003d6 6567 -0003d7 2d74 -0003d8 7473 -0003d9 6361 -0003da 006b .db "get-stack",0 -0003db 03c8 .dw VE_HEAD - .set VE_HEAD = VE_GET_STACK - XT_GET_STACK: -0003dc f001 .dw DO_COLON - .endif -0003dd f0c3 .dw XT_DUP -0003de f579 .dw XT_CELLPLUS -0003df f0d6 .dw XT_SWAP -0003e0 f371 .dw XT_FETCHE -0003e1 f0c3 .dw XT_DUP -0003e2 f111 .dw XT_TO_R -0003e3 f166 .dw XT_ZERO -0003e4 f0d6 .dw XT_SWAP ; go from bigger to smaller addresses -0003e5 029a .dw XT_QDOCHECK -0003e6 f03f .dw XT_DOCONDBRANCH -0003e7 03f3 DEST(PFA_N_FETCH_E2) -0003e8 f2ad .dw XT_DODO - PFA_N_FETCH_E1: - ; ( ee-addr ) -0003e9 f2be .dw XT_I -0003ea f247 .dw XT_1MINUS -0003eb f573 .dw XT_CELLS ; ( -- ee-addr i*2 ) -0003ec f0e1 .dw XT_OVER ; ( -- ee-addr i*2 ee-addr ) -0003ed f1af .dw XT_PLUS ; ( -- ee-addr ee-addr+i -0003ee f371 .dw XT_FETCHE ;( -- ee-addr item_i ) -0003ef f0d6 .dw XT_SWAP ;( -- item_i ee-addr ) -0003f0 f15d .dw XT_TRUE ; shortcut for -1 -0003f1 f2cc .dw XT_DOPLUSLOOP -0003f2 03e9 DEST(PFA_N_FETCH_E1) - PFA_N_FETCH_E2: -0003f3 f589 .dw XT_2DROP -0003f4 f108 .dw XT_R_FROM -0003f5 f026 .dw XT_EXIT - - .include "words/set-stack.asm" - - ; Tools - ; Write a stack to EEPROM - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SET_STACK: -0003f6 ff09 .dw $ff09 -0003f7 6573 -0003f8 2d74 -0003f9 7473 -0003fa 6361 -0003fb 006b .db "set-stack",0 -0003fc 03d5 .dw VE_HEAD - .set VE_HEAD = VE_SET_STACK - XT_SET_STACK: -0003fd f001 .dw DO_COLON - PFA_SET_STACK: - .endif -0003fe f0e1 .dw XT_OVER -0003ff f133 .dw XT_ZEROLESS -000400 f03f .dw XT_DOCONDBRANCH -000401 0405 DEST(PFA_SET_STACK0) -000402 f046 .dw XT_DOLITERAL -000403 fffc .dw -4 -000404 f85c .dw XT_THROW - PFA_SET_STACK0: -000405 f580 .dw XT_2DUP -000406 f34d .dw XT_STOREE ; ( -- i_n .. i_0 n e-addr ) -000407 f0d6 .dw XT_SWAP -000408 f166 .dw XT_ZERO -000409 029a .dw XT_QDOCHECK -00040a f03f .dw XT_DOCONDBRANCH -00040b 0412 DEST(PFA_SET_STACK2) -00040c f2ad .dw XT_DODO - PFA_SET_STACK1: -00040d f579 .dw XT_CELLPLUS ; ( -- i_x e-addr ) -00040e f591 .dw XT_TUCK ; ( -- e-addr i_x e-addr -00040f f34d .dw XT_STOREE -000410 f2db .dw XT_DOLOOP -000411 040d DEST(PFA_SET_STACK1) - PFA_SET_STACK2: -000412 f0eb .dw XT_DROP -000413 f026 .dw XT_EXIT - - .include "words/map-stack.asm" - - ; Tools - ; Iterate over a stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_MAPSTACK: -000414 ff09 .dw $ff09 -000415 616d -000416 2d70 -000417 7473 -000418 6361 -000419 006b .db "map-stack",0 -00041a 03f6 .dw VE_HEAD - .set VE_HEAD = VE_MAPSTACK - XT_MAPSTACK: -00041b f001 .dw DO_COLON - PFA_MAPSTACK: - .endif -00041c f0c3 .dw XT_DUP -00041d f579 .dw XT_CELLPLUS -00041e f0d6 .dw XT_SWAP -00041f f371 .dw XT_FETCHE -000420 f573 .dw XT_CELLS -000421 fd79 .dw XT_BOUNDS -000422 029a .dw XT_QDOCHECK -000423 f03f .dw XT_DOCONDBRANCH -000424 0437 DEST(PFA_MAPSTACK3) -000425 f2ad .dw XT_DODO - PFA_MAPSTACK1: -000426 f2be .dw XT_I -000427 f371 .dw XT_FETCHE ; -- i*x XT id -000428 f0d6 .dw XT_SWAP -000429 f111 .dw XT_TO_R -00042a f11a .dw XT_R_FETCH -00042b f030 .dw XT_EXECUTE ; i*x id -- j*y true | i*x false -00042c f0cb .dw XT_QDUP -00042d f03f .dw XT_DOCONDBRANCH -00042e 0433 DEST(PFA_MAPSTACK2) -00042f f108 .dw XT_R_FROM -000430 f0eb .dw XT_DROP -000431 f2e6 .dw XT_UNLOOP -000432 f026 .dw XT_EXIT - PFA_MAPSTACK2: -000433 f108 .dw XT_R_FROM -000434 fda6 .dw XT_TWO -000435 f2cc .dw XT_DOPLUSLOOP -000436 0426 DEST(PFA_MAPSTACK1) - PFA_MAPSTACK3: -000437 f0eb .dw XT_DROP -000438 f166 .dw XT_ZERO -000439 f026 .dw XT_EXIT - - ; - ; : map-stack ( i*x XT e-addr -- j*y ) - ; dup cell+ swap @e cells bounds ?do - ; ( -- i*x XT ) - ; i @e swap >r r@ execute - ; ?dup if r> drop unloop exit then - ; r> - ; 2 +loop drop 0 - ; ; - .include "words/get-current.asm" - - ; Search Order - ; get the wid of the current compilation word list - VE_GET_CURRENT: -00043a ff0b .dw $ff0b -00043b 6567 -00043c 2d74 -00043d 7563 -00043e 7272 -00043f 6e65 -000440 0074 .db "get-current",0 -000441 0414 .dw VE_HEAD - .set VE_HEAD = VE_GET_CURRENT - XT_GET_CURRENT: -000442 f001 .dw DO_COLON - PFA_GET_CURRENT: -000443 f046 .dw XT_DOLITERAL -000444 0058 .dw CFG_CURRENT -000445 f371 .dw XT_FETCHE -000446 f026 .dw XT_EXIT - .include "words/get-order.asm" - - ; Search Order - ; Get the current search order word list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_GET_ORDER: -000447 ff09 .dw $ff09 -000448 6567 -000449 2d74 -00044a 726f -00044b 6564 -00044c 0072 .db "get-order",0 -00044d 043a .dw VE_HEAD - .set VE_HEAD = VE_GET_ORDER - XT_GET_ORDER: -00044e f001 .dw DO_COLON - PFA_GET_ORDER: - .endif -00044f f046 .dw XT_DOLITERAL -000450 005c .dw CFG_ORDERLISTLEN -000451 03dc .dw XT_GET_STACK -000452 f026 .dw XT_EXIT - .include "words/cfg-order.asm" - - ; Search Order - ; Get the current search order word list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CFG_ORDER: -000453 ff09 .dw $ff09 -000454 6663 -000455 2d67 -000456 726f -000457 6564 -000458 0072 .db "cfg-order",0 -000459 0447 .dw VE_HEAD - .set VE_HEAD = VE_CFG_ORDER - XT_CFG_ORDER: -00045a f054 .dw PFA_DOVARIABLE - PFA_CFG_ORDER: - .endif -00045b 005c .dw CFG_ORDERLISTLEN - .include "words/compare.asm" - - ; String - ; compares two strings in RAM - VE_COMPARE: -00045c ff07 .dw $ff07 -00045d 6f63 -00045e 706d -00045f 7261 -000460 0065 .db "compare",0 -000461 0453 .dw VE_HEAD - .set VE_HEAD = VE_COMPARE - XT_COMPARE: -000462 0463 .dw PFA_COMPARE - PFA_COMPARE: -000463 93bf push xh -000464 93af push xl -000465 018c movw temp0, tosl -000466 9189 -000467 9199 loadtos -000468 01dc movw xl, tosl -000469 9189 -00046a 9199 loadtos -00046b 019c movw temp2, tosl -00046c 9189 -00046d 9199 loadtos -00046e 01fc movw zl, tosl - PFA_COMPARE_LOOP: -00046f 90ed ld temp4, X+ -000470 90f1 ld temp5, Z+ -000471 14ef cp temp4, temp5 -000472 f451 brne PFA_COMPARE_NOTEQUAL -000473 950a dec temp0 -000474 f019 breq PFA_COMPARE_ENDREACHED2 -000475 952a dec temp2 -000476 f7c1 brne PFA_COMPARE_LOOP -000477 c001 rjmp PFA_COMPARE_ENDREACHED - PFA_COMPARE_ENDREACHED2: -000478 952a dec temp2 - PFA_COMPARE_ENDREACHED: -000479 2b02 or temp0, temp2 -00047a f411 brne PFA_COMPARE_CHECKLASTCHAR -00047b 2788 clr tosl -00047c c002 rjmp PFA_COMPARE_DONE - PFA_COMPARE_CHECKLASTCHAR: - PFA_COMPARE_NOTEQUAL: -00047d ef8f ser tosl -00047e c000 rjmp PFA_COMPARE_DONE - - PFA_COMPARE_DONE: -00047f 2f98 mov tosh, tosl -000480 91af pop xl -000481 91bf pop xh -000482 940c f005 jmp_ DO_NEXT - .include "words/nfa2lfa.asm" - - ; System - ; get the link field address from the name field address - VE_NFA2LFA: -000484 ff07 .dw $ff07 -000485 666e -000486 3e61 -000487 666c -000488 0061 .db "nfa>lfa",0 -000489 045c .dw VE_HEAD - .set VE_HEAD = VE_NFA2LFA - XT_NFA2LFA: -00048a f001 .dw DO_COLON - PFA_NFA2LFA: -00048b fc8d .dw XT_NAME2STRING -00048c f241 .dw XT_1PLUS -00048d f216 .dw XT_2SLASH -00048e f1af .dw XT_PLUS -00048f f026 .dw XT_EXIT - .elif AMFORTH_NRWW_SIZE > 4000 - .elif AMFORTH_NRWW_SIZE > 2000 - .else - .endif - .include "dict_appl.inc" - - ; they may be moved to the core dictionary if needed - .include "words/dot-s.asm" - - ; Tools - ; stack dump - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOTS: -000490 ff02 .dw $ff02 -000491 732e .db ".s" -000492 0484 .dw VE_HEAD - .set VE_HEAD = VE_DOTS - XT_DOTS: -000493 f001 .dw DO_COLON - PFA_DOTS: - .endif -000494 fabc .dw XT_DEPTH -000495 f463 .dw XT_UDOT -000496 f7fd .dw XT_SPACE -000497 fabc .dw XT_DEPTH -000498 f166 .dw XT_ZERO -000499 029a .dw XT_QDOCHECK -00049a f03f .dw XT_DOCONDBRANCH -00049b 04a2 DEST(PFA_DOTS2) -00049c f2ad .dw XT_DODO - PFA_DOTS1: -00049d f2be .dw XT_I -00049e f4ca .dw XT_PICK -00049f f463 .dw XT_UDOT -0004a0 f2db .dw XT_DOLOOP -0004a1 049d DEST(PFA_DOTS1) - PFA_DOTS2: -0004a2 f026 .dw XT_EXIT - .include "words/spirw.asm" - - ; MCU - ; SPI exchange of 1 byte - VE_SPIRW: -0004a3 ff06 .dw $ff06 -0004a4 2163 -0004a5 7340 -0004a6 6970 .db "c!@spi" -0004a7 0490 .dw VE_HEAD - .set VE_HEAD = VE_SPIRW - XT_SPIRW: -0004a8 04a9 .dw PFA_SPIRW - PFA_SPIRW: -0004a9 d003 rcall do_spirw -0004aa 2799 clr tosh -0004ab 940c f005 jmp_ DO_NEXT - - do_spirw: -0004ad bd8e out_ SPDR, tosl - do_spirw1: -0004ae b50d in_ temp0, SPSR -0004af 7f08 cbr temp0,7 -0004b0 bd0d out_ SPSR, temp0 -0004b1 b50d in_ temp0, SPSR -0004b2 ff07 sbrs temp0, 7 -0004b3 cffa rjmp do_spirw1 ; wait until complete -0004b4 b58e in_ tosl, SPDR -0004b5 9508 ret - .include "words/n-spi.asm" - - ; MCU - ; read len bytes from SPI to addr - VE_N_SPIR: -0004b6 ff05 .dw $ff05 -0004b7 406e -0004b8 7073 -0004b9 0069 .db "n@spi",0 -0004ba 04a3 .dw VE_HEAD - .set VE_HEAD = VE_N_SPIR - XT_N_SPIR: -0004bb 04bc .dw PFA_N_SPIR - PFA_N_SPIR: -0004bc 018c movw temp0, tosl -0004bd 9189 -0004be 9199 loadtos -0004bf 01fc movw zl, tosl -0004c0 01c8 movw tosl, temp0 - PFA_N_SPIR_LOOP: -0004c1 bc2e out_ SPDR, zerol - PFA_N_SPIR_LOOP1: -0004c2 b52d in_ temp2, SPSR -0004c3 ff27 sbrs temp2, SPIF -0004c4 cffd rjmp PFA_N_SPIR_LOOP1 -0004c5 b52e in_ temp2, SPDR -0004c6 9321 st Z+, temp2 -0004c7 9701 sbiw tosl, 1 -0004c8 f7c1 brne PFA_N_SPIR_LOOP -0004c9 9189 -0004ca 9199 loadtos -0004cb 940c f005 jmp_ DO_NEXT - - ; ( addr len -- ) - ; MCU - ; write len bytes to SPI from addr - VE_N_SPIW: -0004cd ff05 .dw $ff05 -0004ce 216e -0004cf 7073 -0004d0 0069 .db "n!spi",0 -0004d1 04b6 .dw VE_HEAD - .set VE_HEAD = VE_N_SPIW - XT_N_SPIW: -0004d2 04d3 .dw PFA_N_SPIW - PFA_N_SPIW: -0004d3 018c movw temp0, tosl -0004d4 9189 -0004d5 9199 loadtos -0004d6 01fc movw zl, tosl -0004d7 01c8 movw tosl, temp0 - PFA_N_SPIW_LOOP: -0004d8 9121 ld temp2, Z+ -0004d9 bd2e out_ SPDR, temp2 - PFA_N_SPIW_LOOP1: -0004da b52d in_ temp2, SPSR -0004db ff27 sbrs temp2, SPIF -0004dc cffd rjmp PFA_N_SPIW_LOOP1 -0004dd b52e in_ temp2, SPDR ; ignore the data -0004de 9701 sbiw tosl, 1 -0004df f7c1 brne PFA_N_SPIW_LOOP -0004e0 9189 -0004e1 9199 loadtos -0004e2 940c f005 jmp_ DO_NEXT - .include "words/applturnkey.asm" - - ; R( -- ) - ; application specific turnkey action - VE_APPLTURNKEY: -0004e4 ff0b .dw $ff0b -0004e5 7061 -0004e6 6c70 -0004e7 7574 -0004e8 6e72 -0004e9 656b -0004ea 0079 .db "applturnkey",0 -0004eb 04cd .dw VE_HEAD - .set VE_HEAD = VE_APPLTURNKEY - XT_APPLTURNKEY: -0004ec f001 .dw DO_COLON - PFA_APPLTURNKEY: -0004ed 00da .dw XT_USART - - .if WANT_INTERRUPTS == 1 -0004ee f494 .dw XT_INTON - .endif -0004ef fb7f .dw XT_DOT_VER -0004f0 f7fd .dw XT_SPACE -0004f1 f55b .dw XT_F_CPU -0004f2 f046 .dw XT_DOLITERAL -0004f3 03e8 .dw 1000 -0004f4 f1d4 .dw XT_UMSLASHMOD -0004f5 f102 .dw XT_NIP -0004f6 f5f8 .dw XT_DECIMAL -0004f7 f73d .dw XT_DOT -0004f8 f788 .dw XT_DOSLITERAL -0004f9 0004 .dw 4 -0004fa 486b -0004fb 207a .db "kHz " -0004fc f7bb .dw XT_ITYPE -0004fd f026 .dw XT_EXIT - .include "dict/compiler2.inc" - - ; included almost independently from each other - ; on a include-per-use basis - ; - .if DICT_COMPILER2 == 0 - .set DICT_COMPILER2 = 1 - - .include "words/set-current.asm" - - ; Search Order - ; set current word list to the given word list wid - VE_SET_CURRENT: -0004fe ff0b .dw $ff0b -0004ff 6573 -000500 2d74 -000501 7563 -000502 7272 -000503 6e65 -000504 0074 .db "set-current",0 -000505 04e4 .dw VE_HEAD - .set VE_HEAD = VE_SET_CURRENT - XT_SET_CURRENT: -000506 f001 .dw DO_COLON - PFA_SET_CURRENT: -000507 f046 .dw XT_DOLITERAL -000508 0058 .dw CFG_CURRENT -000509 f34d .dw XT_STOREE -00050a f026 .dw XT_EXIT - .include "words/wordlist.asm" - - ; Search Order - ; create a new, empty wordlist - VE_WORDLIST: -00050b ff08 .dw $ff08 -00050c 6f77 -00050d 6472 -00050e 696c -00050f 7473 .db "wordlist" -000510 04fe .dw VE_HEAD - .set VE_HEAD = VE_WORDLIST - XT_WORDLIST: -000511 f001 .dw DO_COLON - PFA_WORDLIST: -000512 f5d2 .dw XT_EHERE -000513 f166 .dw XT_ZERO -000514 f0e1 .dw XT_OVER -000515 f34d .dw XT_STOREE -000516 f0c3 .dw XT_DUP -000517 f579 .dw XT_CELLPLUS -000518 fbb4 .dw XT_DOTO -000519 f5d3 .dw PFA_EHERE -00051a f026 .dw XT_EXIT - - .include "words/forth-wordlist.asm" - - ; Search Order - ; get the system default word list - VE_FORTHWORDLIST: -00051b ff0e .dw $ff0e -00051c 6f66 -00051d 7472 -00051e 2d68 -00051f 6f77 -000520 6472 -000521 696c -000522 7473 .db "forth-wordlist" -000523 050b .dw VE_HEAD - .set VE_HEAD = VE_FORTHWORDLIST - XT_FORTHWORDLIST: -000524 f054 .dw PFA_DOVARIABLE - PFA_FORTHWORDLIST: -000525 005a .dw CFG_FORTHWORDLIST - .include "words/set-order.asm" - - ; Search Order - ; replace the search order list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SET_ORDER: -000526 ff09 .dw $ff09 -000527 6573 -000528 2d74 -000529 726f -00052a 6564 -00052b 0072 .db "set-order",0 -00052c 051b .dw VE_HEAD - .set VE_HEAD = VE_SET_ORDER - XT_SET_ORDER: -00052d f001 .dw DO_COLON - PFA_SET_ORDER: - .endif -00052e f046 .dw XT_DOLITERAL -00052f 005c .dw CFG_ORDERLISTLEN -000530 03fd .dw XT_SET_STACK -000531 f026 .dw XT_EXIT - - .include "words/set-recognizer.asm" - - ; Interpreter - ; replace the recognizer list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SET_RECOGNIZERS: -000532 ff0f .dw $ff0f -000533 6573 -000534 2d74 -000535 6572 -000536 6f63 -000537 6e67 -000538 7a69 -000539 7265 -00053a 0073 .db "set-recognizers",0 -00053b 0526 .dw VE_HEAD - .set VE_HEAD = VE_SET_RECOGNIZERS - XT_SET_RECOGNIZERS: -00053c f001 .dw DO_COLON - PFA_SET_RECOGNIZERS: - .endif -00053d f046 .dw XT_DOLITERAL -00053e 006e .dw CFG_RECOGNIZERLISTLEN -00053f 03fd .dw XT_SET_STACK -000540 f026 .dw XT_EXIT - - .include "words/get-recognizer.asm" - - ; Interpreter - ; Get the current recognizer list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_GET_RECOGNIZERS: -000541 ff0f .dw $ff0f -000542 6567 -000543 2d74 -000544 6572 -000545 6f63 -000546 6e67 -000547 7a69 -000548 7265 -000549 0073 .db "get-recognizers",0 -00054a 0532 .dw VE_HEAD - .set VE_HEAD = VE_GET_RECOGNIZERS - XT_GET_RECOGNIZERS: -00054b f001 .dw DO_COLON - PFA_GET_RECOGNIZERS: - .endif -00054c f046 .dw XT_DOLITERAL -00054d 006e .dw CFG_RECOGNIZERLISTLEN -00054e 03dc .dw XT_GET_STACK -00054f f026 .dw XT_EXIT - .include "words/code.asm" - - ; Compiler - ; create named entry in the dictionary, XT is the data field - VE_CODE: -000550 ff04 .dw $ff04 -000551 6f63 -000552 6564 .db "code" -000553 0541 .dw VE_HEAD - .set VE_HEAD = VE_CODE - XT_CODE: -000554 f001 .dw DO_COLON - PFA_CODE: -000555 01ad .dw XT_DOCREATE -000556 030d .dw XT_REVEAL -000557 f5c9 .dw XT_DP -000558 fbc6 .dw XT_ICELLPLUS -000559 01db .dw XT_COMMA -00055a f026 .dw XT_EXIT - .include "words/end-code.asm" - - ; Compiler - ; finish a code definition - VE_ENDCODE: -00055b ff08 .dw $ff08 -00055c 6e65 -00055d 2d64 -00055e 6f63 -00055f 6564 .db "end-code" -000560 0550 .dw VE_HEAD - .set VE_HEAD = VE_ENDCODE - XT_ENDCODE: -000561 f001 .dw DO_COLON - PFA_ENDCODE: -000562 01d0 .dw XT_COMPILE -000563 940c .dw $940c -000564 01d0 .dw XT_COMPILE -000565 f005 .dw DO_NEXT -000566 f026 .dw XT_EXIT - .include "words/marker.asm" - - ; System Value - ; The eeprom address until which MARKER saves and restores the eeprom data. - VE_MARKER: -000567 ff08 .dw $ff08 -000568 6d28 -000569 7261 -00056a 656b -00056b 2972 .db "(marker)" -00056c 055b .dw VE_HEAD - .set VE_HEAD = VE_MARKER - XT_MARKER: -00056d f081 .dw PFA_DOVALUE1 - PFA_MARKER: -00056e 007a .dw EE_MARKER -00056f fbcf .dw XT_EDEFERFETCH -000570 fbd9 .dw XT_EDEFERSTORE - .include "words/postpone.asm" - - ; Compiler - ; Append the compilation semantics of "name" to the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_POSTPONE: -000571 0008 .dw $0008 -000572 6f70 -000573 7473 -000574 6f70 -000575 656e .db "postpone" -000576 0567 .dw VE_HEAD - .set VE_HEAD = VE_POSTPONE - XT_POSTPONE: -000577 f001 .dw DO_COLON - PFA_POSTPONE: - .endif -000578 f9cf .dw XT_PARSENAME -000579 fae7 .dw XT_FORTHRECOGNIZER -00057a faf2 .dw XT_RECOGNIZE -00057b f0c3 .dw XT_DUP -00057c f111 .dw XT_TO_R -00057d fbc6 .dw XT_ICELLPLUS -00057e fbc6 .dw XT_ICELLPLUS -00057f f3e3 .dw XT_FETCHI -000580 f030 .dw XT_EXECUTE -000581 f108 .dw XT_R_FROM -000582 fbc6 .dw XT_ICELLPLUS -000583 f3e3 .dw XT_FETCHI -000584 01db .dw XT_COMMA -000585 f026 .dw XT_EXIT - .endif - .include "words/2r_fetch.asm" - - ; Stack - ; fetch content of TOR - VE_2R_FETCH: -000586 ff03 .dw $ff03 -000587 7232 -000588 0040 .db "2r@",0 -000589 0571 .dw VE_HEAD - .set VE_HEAD = VE_2R_FETCH - XT_2R_FETCH: -00058a 058b .dw PFA_2R_FETCH - PFA_2R_FETCH: -00058b 939a -00058c 938a savetos -00058d 91ef pop zl -00058e 91ff pop zh -00058f 918f pop tosl -000590 919f pop tosh -000591 939f push tosh -000592 938f push tosl -000593 93ff push zh -000594 93ef push zl -000595 939a -000596 938a savetos -000597 01cf movw tosl, zl -000598 940c f005 jmp_ DO_NEXT - - .set DPSTART = pc - .if(pc>AMFORTH_RO_SEG) - .endif - - .org AMFORTH_RO_SEG - .include "amforth-interpreter.asm" - - - DO_COLON: -00f001 93bf push XH -00f002 93af push XL ; PUSH IP -00f003 01db movw XL, wl -00f004 9611 adiw xl, 1 - DO_NEXT: - .if WANT_INTERRUPTS == 1 -00f005 14b2 cp isrflag, zerol -00f006 f499 brne DO_INTERRUPT - .endif -00f007 01fd movw zl, XL ; READ IP -00f008 2755 -00f009 0fee -00f00a 1fff -00f00b 1f55 -00f00c bf5b -00f00d 9167 -00f00e 9177 readflashcell wl, wh -00f00f 9611 adiw XL, 1 ; INC IP - - DO_EXECUTE: -00f010 01fb movw zl, wl -00f011 2755 -00f012 0fee -00f013 1fff -00f014 1f55 -00f015 bf5b -00f016 9107 -00f017 9117 readflashcell temp0,temp1 -00f018 01f8 movw zl, temp0 -00f019 9409 ijmp - - .if WANT_INTERRUPTS == 1 - DO_INTERRUPT: - ; here we deal with interrupts the forth way -00f01a 939a -00f01b 938a savetos -00f01c 2d8b mov tosl, isrflag -00f01d 2799 clr tosh -00f01e 24bb clr isrflag -00f01f eb6d ldi wl, LOW(XT_ISREXEC) -00f020 ef74 ldi wh, HIGH(XT_ISREXEC) -00f021 cfee rjmp DO_EXECUTE - .include "dict/nrww.inc" - - ; section together with the forth inner interpreter - - .include "words/exit.asm" - - ; Compiler - ; end of current colon word - VE_EXIT: -00f022 ff04 .dw $ff04 -00f023 7865 -00f024 7469 .db "exit" -00f025 0586 .dw VE_HEAD - .set VE_HEAD = VE_EXIT - XT_EXIT: -00f026 f027 .dw PFA_EXIT - PFA_EXIT: -00f027 91af pop XL -00f028 91bf pop XH -00f029 cfdb jmp_ DO_NEXT - .include "words/execute.asm" - - ; System - ; execute XT - VE_EXECUTE: -00f02a ff07 .dw $ff07 -00f02b 7865 -00f02c 6365 -00f02d 7475 -00f02e 0065 .db "execute",0 -00f02f f022 .dw VE_HEAD - .set VE_HEAD = VE_EXECUTE - XT_EXECUTE: -00f030 f031 .dw PFA_EXECUTE - PFA_EXECUTE: -00f031 01bc movw wl, tosl -00f032 9189 -00f033 9199 loadtos -00f034 cfdb jmp_ DO_EXECUTE - .include "words/dobranch.asm" - - ; System - ; runtime of branch - ;VE_DOBRANCH: - ; .dw $ff08 - ; .db "(branch)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOBRANCH - XT_DOBRANCH: -00f035 f036 .dw PFA_DOBRANCH - PFA_DOBRANCH: -00f036 01fd movw zl, XL -00f037 2755 -00f038 0fee -00f039 1fff -00f03a 1f55 -00f03b bf5b -00f03c 91a7 -00f03d 91b7 readflashcell XL,XH -00f03e cfc6 jmp_ DO_NEXT - .include "words/docondbranch.asm" - - ; System - ; runtime of ?branch - ;VE_DOCONDBRANCH: - ; .dw $ff09 - ; .db "(?branch)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOCONDBRANCH - XT_DOCONDBRANCH: -00f03f f040 .dw PFA_DOCONDBRANCH - PFA_DOCONDBRANCH: -00f040 2b98 or tosh, tosl -00f041 9189 -00f042 9199 loadtos -00f043 f391 brbs 1, PFA_DOBRANCH ; 1 is z flag; if tos is zero (false), do the branch -00f044 9611 adiw XL, 1 -00f045 cfbf jmp_ DO_NEXT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/doliteral.asm" - - ; System - ; runtime of literal - ;VE_DOLITERAL: - ; .dw $ff09 - ; .db "(literal)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOLITERAL - XT_DOLITERAL: -00f046 f047 .dw PFA_DOLITERAL - PFA_DOLITERAL: -00f047 939a -00f048 938a savetos -00f049 01fd movw zl, xl -00f04a 2755 -00f04b 0fee -00f04c 1fff -00f04d 1f55 -00f04e bf5b -00f04f 9187 -00f050 9197 readflashcell tosl,tosh -00f051 9611 adiw xl, 1 -00f052 cfb2 jmp_ DO_NEXT - - .include "words/dovariable.asm" - - ; System - ; puts content of parameter field (1 cell) to TOS - ;VE_DOVARIABLE: - ; .dw $ff0a - ; .db "(variable)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOVARIABLE - XT_DOVARIABLE: -00f053 f054 .dw PFA_DOVARIABLE - PFA_DOVARIABLE: -00f054 939a -00f055 938a savetos -00f056 01fb movw zl, wl -00f057 9631 adiw zl,1 -00f058 2755 -00f059 0fee -00f05a 1fff -00f05b 1f55 -00f05c bf5b -00f05d 9187 -00f05e 9197 readflashcell tosl,tosh -00f05f cfa5 jmp_ DO_NEXT - .include "words/doconstant.asm" - - ; System - ; place data field address on TOS - ;VE_DOCONSTANT: - ; .dw $ff0a - ; .db "(constant)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOCONSTANT - XT_DOCONSTANT: -00f060 f061 .dw PFA_DOCONSTANT - PFA_DOCONSTANT: -00f061 939a -00f062 938a savetos -00f063 01cb movw tosl, wl -00f064 9601 adiw tosl, 1 -00f065 cf9f jmp_ DO_NEXT - .include "words/douser.asm" - - ; System - ; runtime part of user - ;VE_DOUSER: - ; .dw $ff06 - ; .db "(user)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOUSER - XT_DOUSER: -00f066 f067 .dw PFA_DOUSER - PFA_DOUSER: -00f067 939a -00f068 938a savetos -00f069 01fb movw zl, wl -00f06a 9631 adiw zl, 1 -00f06b 2755 -00f06c 0fee -00f06d 1fff -00f06e 1f55 -00f06f bf5b -00f070 9187 -00f071 9197 readflashcell tosl,tosh -00f072 0d84 add tosl, upl -00f073 1d95 adc tosh, uph -00f074 cf90 jmp_ DO_NEXT - .include "words/do-value.asm" - - ; System - ; runtime of value - VE_DOVALUE: -00f075 ff07 .dw $ff07 -00f076 7628 -00f077 6c61 -00f078 6575 -00f079 0029 .db "(value)", 0 -00f07a f02a .dw VE_HEAD - .set VE_HEAD = VE_DOVALUE - XT_DOVALUE: -00f07b f001 .dw DO_COLON - PFA_DOVALUE: -00f07c 01ad .dw XT_DOCREATE -00f07d 030d .dw XT_REVEAL -00f07e 01d0 .dw XT_COMPILE -00f07f f081 .dw PFA_DOVALUE1 -00f080 f026 .dw XT_EXIT - PFA_DOVALUE1: -00f081 940e 0326 call_ DO_DODOES -00f083 f0c3 .dw XT_DUP -00f084 fbc6 .dw XT_ICELLPLUS -00f085 f3e3 .dw XT_FETCHI -00f086 f030 .dw XT_EXECUTE -00f087 f026 .dw XT_EXIT - - ; : (value) dup icell+ @i execute ; - .include "words/fetch.asm" - - ; Memory - ; read 1 cell from RAM address - VE_FETCH: -00f088 ff01 .dw $ff01 -00f089 0040 .db "@",0 -00f08a f075 .dw VE_HEAD - .set VE_HEAD = VE_FETCH - XT_FETCH: -00f08b f08c .dw PFA_FETCH - PFA_FETCH: - .if WANT_UNIFIED == 1 - .endif - PFA_FETCHRAM: -00f08c 01fc movw zl, tosl - ; low byte is read before the high byte -00f08d 9181 ld tosl, z+ -00f08e 9191 ld tosh, z+ -00f08f cf75 jmp_ DO_NEXT - .if WANT_UNIFIED == 1 - .endif - .include "words/store.asm" - - ; Memory - ; write n to RAM memory at addr, low byte first - VE_STORE: -00f090 ff01 .dw $ff01 -00f091 0021 .db "!",0 -00f092 f088 .dw VE_HEAD - .set VE_HEAD = VE_STORE - XT_STORE: -00f093 f094 .dw PFA_STORE - PFA_STORE: - .if WANT_UNIFIED == 1 - .endif - PFA_STORERAM: -00f094 01fc movw zl, tosl -00f095 9189 -00f096 9199 loadtos - ; the high byte is written before the low byte -00f097 8391 std Z+1, tosh -00f098 8380 std Z+0, tosl -00f099 9189 -00f09a 9199 loadtos -00f09b cf69 jmp_ DO_NEXT - .if WANT_UNIFIED == 1 - .endif - .include "words/cstore.asm" - - ; Memory - ; store a single byte to RAM address - VE_CSTORE: -00f09c ff02 .dw $ff02 -00f09d 2163 .db "c!" -00f09e f090 .dw VE_HEAD - .set VE_HEAD = VE_CSTORE - XT_CSTORE: -00f09f f0a0 .dw PFA_CSTORE - PFA_CSTORE: -00f0a0 01fc movw zl, tosl -00f0a1 9189 -00f0a2 9199 loadtos -00f0a3 8380 st Z, tosl -00f0a4 9189 -00f0a5 9199 loadtos -00f0a6 cf5e jmp_ DO_NEXT - .include "words/cfetch.asm" - - ; Memory - ; fetch a single byte from memory mapped locations - VE_CFETCH: -00f0a7 ff02 .dw $ff02 -00f0a8 4063 .db "c@" -00f0a9 f09c .dw VE_HEAD - .set VE_HEAD = VE_CFETCH - XT_CFETCH: -00f0aa f0ab .dw PFA_CFETCH - PFA_CFETCH: -00f0ab 01fc movw zl, tosl -00f0ac 2799 clr tosh -00f0ad 8180 ld tosl, Z -00f0ae cf56 jmp_ DO_NEXT - .include "words/fetch-u.asm" - - ; Memory - ; read 1 cell from USER area - VE_FETCHU: -00f0af ff02 .dw $ff02 -00f0b0 7540 .db "@u" -00f0b1 f0a7 .dw VE_HEAD - .set VE_HEAD = VE_FETCHU - XT_FETCHU: -00f0b2 f001 .dw DO_COLON - PFA_FETCHU: -00f0b3 f314 .dw XT_UP_FETCH -00f0b4 f1af .dw XT_PLUS -00f0b5 f08b .dw XT_FETCH -00f0b6 f026 .dw XT_EXIT - .include "words/store-u.asm" - - ; Memory - ; write n to USER area at offset - VE_STOREU: -00f0b7 ff02 .dw $ff02 -00f0b8 7521 .db "!u" -00f0b9 f0af .dw VE_HEAD - .set VE_HEAD = VE_STOREU - XT_STOREU: -00f0ba f001 .dw DO_COLON - PFA_STOREU: -00f0bb f314 .dw XT_UP_FETCH -00f0bc f1af .dw XT_PLUS -00f0bd f093 .dw XT_STORE -00f0be f026 .dw XT_EXIT - - ;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/dup.asm" - - ; Stack - ; duplicate TOS - VE_DUP: -00f0bf ff03 .dw $ff03 -00f0c0 7564 -00f0c1 0070 .db "dup",0 -00f0c2 f0b7 .dw VE_HEAD - .set VE_HEAD = VE_DUP - XT_DUP: -00f0c3 f0c4 .dw PFA_DUP - PFA_DUP: -00f0c4 939a -00f0c5 938a savetos -00f0c6 cf3e jmp_ DO_NEXT - .include "words/qdup.asm" - - ; Stack - ; duplicate TOS if non-zero - VE_QDUP: -00f0c7 ff04 .dw $ff04 -00f0c8 643f -00f0c9 7075 .db "?dup" -00f0ca f0bf .dw VE_HEAD - .set VE_HEAD = VE_QDUP - XT_QDUP: -00f0cb f0cc .dw PFA_QDUP - PFA_QDUP: -00f0cc 2f08 mov temp0, tosl -00f0cd 2b09 or temp0, tosh -00f0ce f011 breq PFA_QDUP1 -00f0cf 939a -00f0d0 938a savetos - PFA_QDUP1: -00f0d1 cf33 jmp_ DO_NEXT - .include "words/swap.asm" - - ; Stack - ; swaps the two top level stack cells - VE_SWAP: -00f0d2 ff04 .dw $ff04 -00f0d3 7773 -00f0d4 7061 .db "swap" -00f0d5 f0c7 .dw VE_HEAD - .set VE_HEAD = VE_SWAP - XT_SWAP: -00f0d6 f0d7 .dw PFA_SWAP - PFA_SWAP: -00f0d7 018c movw temp0, tosl -00f0d8 9189 -00f0d9 9199 loadtos -00f0da 931a st -Y, temp1 -00f0db 930a st -Y, temp0 -00f0dc cf28 jmp_ DO_NEXT - .include "words/over.asm" - - ; Stack - ; Place a copy of x1 on top of the stack - VE_OVER: -00f0dd ff04 .dw $ff04 -00f0de 766f -00f0df 7265 .db "over" -00f0e0 f0d2 .dw VE_HEAD - .set VE_HEAD = VE_OVER - XT_OVER: -00f0e1 f0e2 .dw PFA_OVER - PFA_OVER: -00f0e2 939a -00f0e3 938a savetos -00f0e4 818a ldd tosl, Y+2 -00f0e5 819b ldd tosh, Y+3 - -00f0e6 cf1e jmp_ DO_NEXT - .include "words/drop.asm" - - ; Stack - ; drop TOS - VE_DROP: -00f0e7 ff04 .dw $ff04 -00f0e8 7264 -00f0e9 706f .db "drop" -00f0ea f0dd .dw VE_HEAD - .set VE_HEAD = VE_DROP - XT_DROP: -00f0eb f0ec .dw PFA_DROP - PFA_DROP: -00f0ec 9189 -00f0ed 9199 loadtos -00f0ee cf16 jmp_ DO_NEXT - .include "words/rot.asm" - - ; Stack - ; rotate the three top level cells - VE_ROT: -00f0ef ff03 .dw $ff03 -00f0f0 6f72 -00f0f1 0074 .db "rot",0 -00f0f2 f0e7 .dw VE_HEAD - .set VE_HEAD = VE_ROT - XT_ROT: -00f0f3 f0f4 .dw PFA_ROT - PFA_ROT: -00f0f4 018c movw temp0, tosl -00f0f5 9129 ld temp2, Y+ -00f0f6 9139 ld temp3, Y+ -00f0f7 9189 -00f0f8 9199 loadtos - -00f0f9 933a st -Y, temp3 -00f0fa 932a st -Y, temp2 -00f0fb 931a st -Y, temp1 -00f0fc 930a st -Y, temp0 - -00f0fd cf07 jmp_ DO_NEXT - .include "words/nip.asm" - - ; Stack - ; Remove Second of Stack - VE_NIP: -00f0fe ff03 .dw $ff03 -00f0ff 696e -00f100 0070 .db "nip",0 -00f101 f0ef .dw VE_HEAD - .set VE_HEAD = VE_NIP - XT_NIP: -00f102 f103 .dw PFA_NIP - PFA_NIP: -00f103 9622 adiw yl, 2 -00f104 cf00 jmp_ DO_NEXT - ;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/r_from.asm" - - ; Stack - ; move TOR to TOS - VE_R_FROM: -00f105 ff02 .dw $ff02 -00f106 3e72 .db "r>" -00f107 f0fe .dw VE_HEAD - .set VE_HEAD = VE_R_FROM - XT_R_FROM: -00f108 f109 .dw PFA_R_FROM - PFA_R_FROM: -00f109 939a -00f10a 938a savetos -00f10b 918f pop tosl -00f10c 919f pop tosh -00f10d cef7 jmp_ DO_NEXT - .include "words/to_r.asm" - - ; Stack - ; move TOS to TOR - VE_TO_R: -00f10e ff02 .dw $ff02 -00f10f 723e .db ">r" -00f110 f105 .dw VE_HEAD - .set VE_HEAD = VE_TO_R - XT_TO_R: -00f111 f112 .dw PFA_TO_R - PFA_TO_R: -00f112 939f push tosh -00f113 938f push tosl -00f114 9189 -00f115 9199 loadtos -00f116 ceee jmp_ DO_NEXT - .include "words/r_fetch.asm" - - ; Stack - ; fetch content of TOR - VE_R_FETCH: -00f117 ff02 .dw $ff02 -00f118 4072 .db "r@" -00f119 f10e .dw VE_HEAD - .set VE_HEAD = VE_R_FETCH - XT_R_FETCH: -00f11a f11b .dw PFA_R_FETCH - PFA_R_FETCH: -00f11b 939a -00f11c 938a savetos -00f11d 918f pop tosl -00f11e 919f pop tosh -00f11f 939f push tosh -00f120 938f push tosl -00f121 cee3 jmp_ DO_NEXT - - - .include "words/not-equal.asm" - - ; Compare - ; true if n1 is not equal to n2 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NOTEQUAL: -00f122 ff02 .dw $ff02 -00f123 3e3c .db "<>" -00f124 f117 .dw VE_HEAD - .set VE_HEAD = VE_NOTEQUAL - XT_NOTEQUAL: -00f125 f001 .dw DO_COLON - PFA_NOTEQUAL: - .endif - -00f126 fd9a -00f127 f12c -00f128 f026 .DW XT_EQUAL,XT_ZEROEQUAL,XT_EXIT - .include "words/equalzero.asm" - - ; Compare - ; compare with 0 (zero) - VE_ZEROEQUAL: -00f129 ff02 .dw $ff02 -00f12a 3d30 .db "0=" -00f12b f122 .dw VE_HEAD - .set VE_HEAD = VE_ZEROEQUAL - XT_ZEROEQUAL: -00f12c f12d .dw PFA_ZEROEQUAL - PFA_ZEROEQUAL: -00f12d 2b98 or tosh, tosl -00f12e f5d1 brne PFA_ZERO1 -00f12f c030 rjmp PFA_TRUE1 - .include "words/lesszero.asm" - - ; Compare - ; compare with zero - VE_ZEROLESS: -00f130 ff02 .dw $ff02 -00f131 3c30 .db "0<" -00f132 f129 .dw VE_HEAD - .set VE_HEAD = VE_ZEROLESS - XT_ZEROLESS: -00f133 f134 .dw PFA_ZEROLESS - PFA_ZEROLESS: -00f134 fd97 sbrc tosh,7 -00f135 c02a rjmp PFA_TRUE1 -00f136 c032 rjmp PFA_ZERO1 - .include "words/greaterzero.asm" - - ; Compare - ; true if n1 is greater than 0 - VE_GREATERZERO: -00f137 ff02 .dw $ff02 -00f138 3e30 .db "0>" -00f139 f130 .dw VE_HEAD - .set VE_HEAD = VE_GREATERZERO - XT_GREATERZERO: -00f13a f13b .dw PFA_GREATERZERO - PFA_GREATERZERO: -00f13b 1582 cp tosl, zerol -00f13c 0593 cpc tosh, zeroh -00f13d f15c brlt PFA_ZERO1 -00f13e f151 brbs 1, PFA_ZERO1 -00f13f c020 rjmp PFA_TRUE1 - .include "words/d-greaterzero.asm" - - ; Compare - ; compares if a double double cell number is greater 0 - VE_DGREATERZERO: -00f140 ff03 .dw $ff03 -00f141 3064 -00f142 003e .db "d0>",0 -00f143 f137 .dw VE_HEAD - .set VE_HEAD = VE_DGREATERZERO - XT_DGREATERZERO: -00f144 f145 .dw PFA_DGREATERZERO - PFA_DGREATERZERO: -00f145 1582 cp tosl, zerol -00f146 0593 cpc tosh, zeroh -00f147 9189 -00f148 9199 loadtos -00f149 0582 cpc tosl, zerol -00f14a 0593 cpc tosh, zeroh -00f14b f0ec brlt PFA_ZERO1 -00f14c f0e1 brbs 1, PFA_ZERO1 -00f14d c012 rjmp PFA_TRUE1 - .include "words/d-lesszero.asm" - - ; Compare - ; compares if a double double cell number is less than 0 - VE_DXT_ZEROLESS: -00f14e ff03 .dw $ff03 -00f14f 3064 -00f150 003c .db "d0<",0 -00f151 f140 .dw VE_HEAD - .set VE_HEAD = VE_DXT_ZEROLESS - XT_DXT_ZEROLESS: -00f152 f153 .dw PFA_DXT_ZEROLESS - PFA_DXT_ZEROLESS: -00f153 9622 adiw Y,2 -00f154 fd97 sbrc tosh,7 -00f155 940c f160 jmp PFA_TRUE1 -00f157 940c f169 jmp PFA_ZERO1 - - .include "words/true.asm" - - ; Arithmetics - ; leaves the value -1 (true) on TOS - VE_TRUE: -00f159 ff04 .dw $ff04 -00f15a 7274 -00f15b 6575 .db "true" -00f15c f14e .dw VE_HEAD - .set VE_HEAD = VE_TRUE - XT_TRUE: -00f15d f15e .dw PFA_TRUE - PFA_TRUE: -00f15e 939a -00f15f 938a savetos - PFA_TRUE1: -00f160 ef8f ser tosl -00f161 ef9f ser tosh -00f162 cea2 jmp_ DO_NEXT - .include "words/zero.asm" - - ; Arithmetics - ; place a value 0 on TOS - VE_ZERO: -00f163 ff01 .dw $ff01 -00f164 0030 .db "0",0 -00f165 f159 .dw VE_HEAD - .set VE_HEAD = VE_ZERO - XT_ZERO: -00f166 f167 .dw PFA_ZERO - PFA_ZERO: -00f167 939a -00f168 938a savetos - PFA_ZERO1: -00f169 01c1 movw tosl, zerol -00f16a ce9a jmp_ DO_NEXT - .include "words/uless.asm" - - ; Compare - ; true if u1 < u2 (unsigned) - VE_ULESS: -00f16b ff02 .dw $ff02 -00f16c 3c75 .db "u<" -00f16d f163 .dw VE_HEAD - .set VE_HEAD = VE_ULESS - XT_ULESS: -00f16e f16f .dw PFA_ULESS - PFA_ULESS: -00f16f 9129 ld temp2, Y+ -00f170 9139 ld temp3, Y+ -00f171 1782 cp tosl, temp2 -00f172 0793 cpc tosh, temp3 -00f173 f3a8 brlo PFA_ZERO1 -00f174 f3a1 brbs 1, PFA_ZERO1 -00f175 cfea jmp_ PFA_TRUE1 - .include "words/u-greater.asm" - - ; Compare - ; true if u1 > u2 (unsigned) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UGREATER: -00f176 ff02 .dw $ff02 -00f177 3e75 .db "u>" -00f178 f16b .dw VE_HEAD - .set VE_HEAD = VE_UGREATER - XT_UGREATER: -00f179 f001 .dw DO_COLON - PFA_UGREATER: - .endif -00f17a f0d6 .DW XT_SWAP -00f17b f16e .dw XT_ULESS -00f17c f026 .dw XT_EXIT - .include "words/less.asm" - - ; Compare - ; true if n1 is less than n2 - VE_LESS: -00f17d ff01 .dw $ff01 -00f17e 003c .db "<",0 -00f17f f176 .dw VE_HEAD - .set VE_HEAD = VE_LESS - XT_LESS: -00f180 f181 .dw PFA_LESS - PFA_LESS: -00f181 9129 ld temp2, Y+ -00f182 9139 ld temp3, Y+ -00f183 1728 cp temp2, tosl -00f184 0739 cpc temp3, tosh - PFA_LESSDONE: -00f185 f71c brge PFA_ZERO1 -00f186 cfd9 rjmp PFA_TRUE1 - .include "words/greater.asm" - - ; Compare - ; flag is true if n1 is greater than n2 - VE_GREATER: -00f187 ff01 .dw $ff01 -00f188 003e .db ">",0 -00f189 f17d .dw VE_HEAD - .set VE_HEAD = VE_GREATER - XT_GREATER: -00f18a f18b .dw PFA_GREATER - PFA_GREATER: -00f18b 9129 ld temp2, Y+ -00f18c 9139 ld temp3, Y+ -00f18d 1728 cp temp2, tosl -00f18e 0739 cpc temp3, tosh - PFA_GREATERDONE: -00f18f f2cc brlt PFA_ZERO1 -00f190 f2c1 brbs 1, PFA_ZERO1 -00f191 cfce rjmp PFA_TRUE1 - - .include "words/log2.asm" - - ; Arithmetics - ; logarithm to base 2 or highest set bitnumber - VE_LOG2: -00f192 ff04 .dw $ff04 -00f193 6f6c -00f194 3267 .db "log2" -00f195 f187 .dw VE_HEAD - .set VE_HEAD = VE_LOG2 - XT_LOG2: -00f196 f197 .dw PFA_LOG2 - PFA_LOG2: -00f197 01fc movw zl, tosl -00f198 2799 clr tosh -00f199 e180 ldi tosl, 16 - PFA_LOG2_1: -00f19a 958a dec tosl -00f19b f022 brmi PFA_LOG2_2 ; wrong data -00f19c 0fee lsl zl -00f19d 1fff rol zh -00f19e f7d8 brcc PFA_LOG2_1 -00f19f ce65 jmp_ DO_NEXT - - PFA_LOG2_2: -00f1a0 959a dec tosh -00f1a1 ce63 jmp_ DO_NEXT - .include "words/minus.asm" - - ; Arithmetics - ; subtract n2 from n1 - VE_MINUS: -00f1a2 ff01 .dw $ff01 -00f1a3 002d .db "-",0 -00f1a4 f192 .dw VE_HEAD - .set VE_HEAD = VE_MINUS - XT_MINUS: -00f1a5 f1a6 .dw PFA_MINUS - PFA_MINUS: -00f1a6 9109 ld temp0, Y+ -00f1a7 9119 ld temp1, Y+ -00f1a8 1b08 sub temp0, tosl -00f1a9 0b19 sbc temp1, tosh -00f1aa 01c8 movw tosl, temp0 -00f1ab ce59 jmp_ DO_NEXT - .include "words/plus.asm" - - ; Arithmetics - ; add n1 and n2 - VE_PLUS: -00f1ac ff01 .dw $ff01 -00f1ad 002b .db "+",0 -00f1ae f1a2 .dw VE_HEAD - .set VE_HEAD = VE_PLUS - XT_PLUS: -00f1af f1b0 .dw PFA_PLUS - PFA_PLUS: -00f1b0 9109 ld temp0, Y+ -00f1b1 9119 ld temp1, Y+ -00f1b2 0f80 add tosl, temp0 -00f1b3 1f91 adc tosh, temp1 -00f1b4 ce50 jmp_ DO_NEXT - .include "words/mstar.asm" - - ; Arithmetics - ; multiply 2 cells to a double cell - VE_MSTAR: -00f1b5 ff02 .dw $ff02 -00f1b6 2a6d .db "m*" -00f1b7 f1ac .dw VE_HEAD - .set VE_HEAD = VE_MSTAR - XT_MSTAR: -00f1b8 f1b9 .dw PFA_MSTAR - PFA_MSTAR: -00f1b9 018c movw temp0, tosl -00f1ba 9189 -00f1bb 9199 loadtos -00f1bc 019c movw temp2, tosl - ; high cell ah*bh -00f1bd 0231 muls temp3, temp1 -00f1be 0170 movw temp4, r0 - ; low cell al*bl -00f1bf 9f20 mul temp2, temp0 -00f1c0 01c0 movw tosl, r0 - ; signed ah*bl -00f1c1 0330 mulsu temp3, temp0 -00f1c2 08f3 sbc temp5, zeroh -00f1c3 0d90 add tosh, r0 -00f1c4 1ce1 adc temp4, r1 -00f1c5 1cf3 adc temp5, zeroh - - ; signed al*bh -00f1c6 0312 mulsu temp1, temp2 -00f1c7 08f3 sbc temp5, zeroh -00f1c8 0d90 add tosh, r0 -00f1c9 1ce1 adc temp4, r1 -00f1ca 1cf3 adc temp5, zeroh - -00f1cb 939a -00f1cc 938a savetos -00f1cd 01c7 movw tosl, temp4 -00f1ce ce36 jmp_ DO_NEXT - .include "words/umslashmod.asm" - - ; Arithmetics - ; unsigned division ud / u2 with remainder - VE_UMSLASHMOD: -00f1cf ff06 .dw $ff06 -00f1d0 6d75 -00f1d1 6d2f -00f1d2 646f .db "um/mod" -00f1d3 f1b5 .dw VE_HEAD - .set VE_HEAD = VE_UMSLASHMOD - XT_UMSLASHMOD: -00f1d4 f1d5 .dw PFA_UMSLASHMOD - PFA_UMSLASHMOD: -00f1d5 017c movw temp4, tosl - -00f1d6 9129 ld temp2, Y+ -00f1d7 9139 ld temp3, Y+ - -00f1d8 9109 ld temp0, Y+ -00f1d9 9119 ld temp1, Y+ - - ;; unsigned 32/16 -> 16r16 divide - - PFA_UMSLASHMODmod: - - ; set loop counter -00f1da e140 ldi temp6,$10 - - PFA_UMSLASHMODmod_loop: - ; shift left, saving high bit -00f1db 2755 clr temp7 -00f1dc 0f00 lsl temp0 -00f1dd 1f11 rol temp1 -00f1de 1f22 rol temp2 -00f1df 1f33 rol temp3 -00f1e0 1f55 rol temp7 - - ; try subtracting divisor -00f1e1 152e cp temp2, temp4 -00f1e2 053f cpc temp3, temp5 -00f1e3 0552 cpc temp7,zerol - -00f1e4 f018 brcs PFA_UMSLASHMODmod_loop_control - - PFA_UMSLASHMODmod_subtract: - ; dividend is large enough - ; do the subtraction for real - ; and set lowest bit -00f1e5 9503 inc temp0 -00f1e6 192e sub temp2, temp4 -00f1e7 093f sbc temp3, temp5 - - PFA_UMSLASHMODmod_loop_control: -00f1e8 954a dec temp6 -00f1e9 f789 brne PFA_UMSLASHMODmod_loop - - PFA_UMSLASHMODmod_done: - ; put remainder on stack -00f1ea 933a st -Y,temp3 -00f1eb 932a st -Y,temp2 - - ; put quotient on stack -00f1ec 01c8 movw tosl, temp0 -00f1ed ce17 jmp_ DO_NEXT - .include "words/umstar.asm" - - ; Arithmetics - ; multiply 2 unsigned cells to a double cell - VE_UMSTAR: -00f1ee ff03 .dw $ff03 -00f1ef 6d75 -00f1f0 002a .db "um*",0 -00f1f1 f1cf .dw VE_HEAD - .set VE_HEAD = VE_UMSTAR - XT_UMSTAR: -00f1f2 f1f3 .dw PFA_UMSTAR - PFA_UMSTAR: -00f1f3 018c movw temp0, tosl -00f1f4 9189 -00f1f5 9199 loadtos - ; result: (temp3*temp1)* 65536 + (temp3*temp0 + temp1*temp2) * 256 + (temp0 * temp2) - ; low bytes -00f1f6 9f80 mul tosl,temp0 -00f1f7 01f0 movw zl, r0 -00f1f8 2722 clr temp2 -00f1f9 2733 clr temp3 - ; middle bytes -00f1fa 9f90 mul tosh, temp0 -00f1fb 0df0 add zh, r0 -00f1fc 1d21 adc temp2, r1 -00f1fd 1d33 adc temp3, zeroh - -00f1fe 9f81 mul tosl, temp1 -00f1ff 0df0 add zh, r0 -00f200 1d21 adc temp2, r1 -00f201 1d33 adc temp3, zeroh - -00f202 9f91 mul tosh, temp1 -00f203 0d20 add temp2, r0 -00f204 1d31 adc temp3, r1 -00f205 01cf movw tosl, zl -00f206 939a -00f207 938a savetos -00f208 01c9 movw tosl, temp2 -00f209 cdfb jmp_ DO_NEXT - - .include "words/invert.asm" - - ; Arithmetics - ; 1-complement of TOS - VE_INVERT: -00f20a ff06 .dw $ff06 -00f20b 6e69 -00f20c 6576 -00f20d 7472 .db "invert" -00f20e f1ee .dw VE_HEAD - .set VE_HEAD = VE_INVERT - XT_INVERT: -00f20f f210 .dw PFA_INVERT - PFA_INVERT: -00f210 9580 com tosl -00f211 9590 com tosh -00f212 cdf2 jmp_ DO_NEXT - .include "words/2slash.asm" - - ; Arithmetics - ; arithmetic shift right - VE_2SLASH: -00f213 ff02 .dw $ff02 -00f214 2f32 .db "2/" -00f215 f20a .dw VE_HEAD - .set VE_HEAD = VE_2SLASH - XT_2SLASH: -00f216 f217 .dw PFA_2SLASH - PFA_2SLASH: -00f217 9595 asr tosh -00f218 9587 ror tosl -00f219 cdeb jmp_ DO_NEXT - .include "words/2star.asm" - - ; Arithmetics - ; arithmetic shift left, filling with zero - VE_2STAR: -00f21a ff02 .dw $ff02 -00f21b 2a32 .db "2*" -00f21c f213 .dw VE_HEAD - .set VE_HEAD = VE_2STAR - XT_2STAR: -00f21d f21e .dw PFA_2STAR - PFA_2STAR: -00f21e 0f88 lsl tosl -00f21f 1f99 rol tosh -00f220 cde4 jmp_ DO_NEXT - .include "words/and.asm" - - ; Logic - ; bitwise and - VE_AND: -00f221 ff03 .dw $ff03 -00f222 6e61 -00f223 0064 .db "and",0 -00f224 f21a .dw VE_HEAD - .set VE_HEAD = VE_AND - XT_AND: -00f225 f226 .dw PFA_AND - PFA_AND: -00f226 9109 ld temp0, Y+ -00f227 9119 ld temp1, Y+ -00f228 2380 and tosl, temp0 -00f229 2391 and tosh, temp1 -00f22a cdda jmp_ DO_NEXT - .include "words/or.asm" - - ; Logic - ; logical or - VE_OR: -00f22b ff02 .dw $ff02 -00f22c 726f .db "or" -00f22d f221 .dw VE_HEAD - .set VE_HEAD = VE_OR - XT_OR: -00f22e f22f .dw PFA_OR - PFA_OR: -00f22f 9109 ld temp0, Y+ -00f230 9119 ld temp1, Y+ -00f231 2b80 or tosl, temp0 -00f232 2b91 or tosh, temp1 -00f233 cdd1 jmp_ DO_NEXT - - .include "words/xor.asm" - - ; Logic - ; exclusive or - VE_XOR: -00f234 ff03 .dw $ff03 -00f235 6f78 -00f236 0072 .db "xor",0 -00f237 f22b .dw VE_HEAD - .set VE_HEAD = VE_XOR - XT_XOR: -00f238 f239 .dw PFA_XOR - PFA_XOR: -00f239 9109 ld temp0, Y+ -00f23a 9119 ld temp1, Y+ -00f23b 2780 eor tosl, temp0 -00f23c 2791 eor tosh, temp1 -00f23d cdc7 jmp_ DO_NEXT - - .include "words/1plus.asm" - - ; Arithmetics - ; optimized increment - VE_1PLUS: -00f23e ff02 .dw $ff02 -00f23f 2b31 .db "1+" -00f240 f234 .dw VE_HEAD - .set VE_HEAD = VE_1PLUS - XT_1PLUS: -00f241 f242 .dw PFA_1PLUS - PFA_1PLUS: -00f242 9601 adiw tosl,1 -00f243 cdc1 jmp_ DO_NEXT - .include "words/1minus.asm" - - ; Arithmetics - ; optimized decrement - VE_1MINUS: -00f244 ff02 .dw $ff02 -00f245 2d31 .db "1-" -00f246 f23e .dw VE_HEAD - .set VE_HEAD = VE_1MINUS - XT_1MINUS: -00f247 f248 .dw PFA_1MINUS - PFA_1MINUS: -00f248 9701 sbiw tosl, 1 -00f249 cdbb jmp_ DO_NEXT - .include "words/q-negate.asm" - - ; 0< IF NEGATE THEN ; ...a common factor - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QNEGATE: -00f24a ff07 .dw $ff07 -00f24b 6e3f -00f24c 6765 -00f24d 7461 -../../common\words/q-negate.asm(11): warning: .cseg .db misalignment - padding zero byte -00f24e 0065 .db "?negate" -00f24f f244 .dw VE_HEAD - .set VE_HEAD = VE_QNEGATE - XT_QNEGATE: -00f250 f001 .dw DO_COLON - PFA_QNEGATE: - - .endif -00f251 f133 -00f252 f03f .DW XT_ZEROLESS,XT_DOCONDBRANCH -00f253 f255 DEST(QNEG1) -00f254 f65a .DW XT_NEGATE -00f255 f026 QNEG1: .DW XT_EXIT - .include "words/lshift.asm" - - ; Arithmetics - ; logically shift n1 left n2 times - VE_LSHIFT: -00f256 ff06 .dw $ff06 -00f257 736c -00f258 6968 -00f259 7466 .db "lshift" -00f25a f24a .dw VE_HEAD - .set VE_HEAD = VE_LSHIFT - XT_LSHIFT: -00f25b f25c .dw PFA_LSHIFT - PFA_LSHIFT: -00f25c 01fc movw zl, tosl -00f25d 9189 -00f25e 9199 loadtos - PFA_LSHIFT1: -00f25f 9731 sbiw zl, 1 -00f260 f01a brmi PFA_LSHIFT2 -00f261 0f88 lsl tosl -00f262 1f99 rol tosh -00f263 cffb rjmp PFA_LSHIFT1 - PFA_LSHIFT2: -00f264 cda0 jmp_ DO_NEXT - - .include "words/rshift.asm" - - ; Arithmetics - ; shift n1 n2-times logically right - VE_RSHIFT: -00f265 ff06 .dw $ff06 -00f266 7372 -00f267 6968 -00f268 7466 .db "rshift" -00f269 f256 .dw VE_HEAD - .set VE_HEAD = VE_RSHIFT - XT_RSHIFT: -00f26a f26b .dw PFA_RSHIFT - PFA_RSHIFT: -00f26b 01fc movw zl, tosl -00f26c 9189 -00f26d 9199 loadtos - PFA_RSHIFT1: -00f26e 9731 sbiw zl, 1 -00f26f f01a brmi PFA_RSHIFT2 -00f270 9596 lsr tosh -00f271 9587 ror tosl -00f272 cffb rjmp PFA_RSHIFT1 - PFA_RSHIFT2: -00f273 cd91 jmp_ DO_NEXT - - .include "words/plusstore.asm" - - ; Arithmetics - ; add n to content of RAM address a-addr - VE_PLUSSTORE: -00f274 ff02 .dw $ff02 -00f275 212b .db "+!" -00f276 f265 .dw VE_HEAD - .set VE_HEAD = VE_PLUSSTORE - XT_PLUSSTORE: -00f277 f278 .dw PFA_PLUSSTORE - PFA_PLUSSTORE: -00f278 01fc movw zl, tosl -00f279 9189 -00f27a 9199 loadtos -00f27b 8120 ldd temp2, Z+0 -00f27c 8131 ldd temp3, Z+1 -00f27d 0f82 add tosl, temp2 -00f27e 1f93 adc tosh, temp3 -00f27f 8380 std Z+0, tosl -00f280 8391 std Z+1, tosh -00f281 9189 -00f282 9199 loadtos -00f283 cd81 jmp_ DO_NEXT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/rpfetch.asm" - - ; Stack - ; current return stack pointer address - VE_RP_FETCH: -00f284 ff03 .dw $ff03 -00f285 7072 -00f286 0040 .db "rp@",0 -00f287 f274 .dw VE_HEAD - .set VE_HEAD = VE_RP_FETCH - XT_RP_FETCH: -00f288 f289 .dw PFA_RP_FETCH - PFA_RP_FETCH: -00f289 939a -00f28a 938a savetos -00f28b b78d in tosl, SPL -00f28c b79e in tosh, SPH -00f28d cd77 jmp_ DO_NEXT - .include "words/rpstore.asm" - - ; Stack - ; set return stack pointer - VE_RP_STORE: -00f28e ff03 .dw $ff03 -00f28f 7072 -00f290 0021 .db "rp!",0 -00f291 f284 .dw VE_HEAD - .set VE_HEAD = VE_RP_STORE - XT_RP_STORE: -00f292 f293 .dw PFA_RP_STORE - PFA_RP_STORE: -00f293 b72f in temp2, SREG -00f294 94f8 cli -00f295 bf8d out SPL, tosl -00f296 bf9e out SPH, tosh -00f297 bf2f out SREG, temp2 -00f298 9189 -00f299 9199 loadtos -00f29a cd6a jmp_ DO_NEXT - .include "words/spfetch.asm" - - ; Stack - ; current data stack pointer - VE_SP_FETCH: -00f29b ff03 .dw $ff03 -00f29c 7073 -00f29d 0040 .db "sp@",0 -00f29e f28e .dw VE_HEAD - .set VE_HEAD = VE_SP_FETCH - XT_SP_FETCH: -00f29f f2a0 .dw PFA_SP_FETCH - PFA_SP_FETCH: -00f2a0 939a -00f2a1 938a savetos -00f2a2 01ce movw tosl, yl -00f2a3 cd61 jmp_ DO_NEXT - .include "words/spstore.asm" - - ; Stack - ; set data stack pointer to addr - VE_SP_STORE: -00f2a4 ff03 .dw $ff03 -00f2a5 7073 -00f2a6 0021 .db "sp!",0 -00f2a7 f29b .dw VE_HEAD - .set VE_HEAD = VE_SP_STORE - XT_SP_STORE: -00f2a8 f2a9 .dw PFA_SP_STORE - PFA_SP_STORE: -00f2a9 01ec movw yl, tosl -00f2aa 9189 -00f2ab 9199 loadtos -00f2ac cd58 jmp_ DO_NEXT - - .include "words/dodo.asm" - - ; System - ; runtime of do - ;VE_DODO: - ; .dw $ff04 - ; .db "(do)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DODO - XT_DODO: -00f2ad f2ae .dw PFA_DODO - PFA_DODO: -00f2ae 9129 ld temp2, Y+ -00f2af 9139 ld temp3, Y+ ; limit - PFA_DODO1: -00f2b0 e8e0 ldi zl, $80 -00f2b1 0f3e add temp3, zl -00f2b2 1b82 sub tosl, temp2 -00f2b3 0b93 sbc tosh, temp3 - -00f2b4 933f push temp3 -00f2b5 932f push temp2 ; limit ( --> limit + $8000) -00f2b6 939f push tosh -00f2b7 938f push tosl ; start -> index ( --> index - (limit - $8000) -00f2b8 9189 -00f2b9 9199 loadtos -00f2ba cd4a jmp_ DO_NEXT - .include "words/i.asm" - - ; Compiler - ; current loop counter - VE_I: -00f2bb ff01 .dw $FF01 -00f2bc 0069 .db "i",0 -00f2bd f2a4 .dw VE_HEAD - .set VE_HEAD = VE_I - XT_I: -00f2be f2bf .dw PFA_I - PFA_I: -00f2bf 939a -00f2c0 938a savetos -00f2c1 918f pop tosl -00f2c2 919f pop tosh ; index -00f2c3 91ef pop zl -00f2c4 91ff pop zh ; limit -00f2c5 93ff push zh -00f2c6 93ef push zl -00f2c7 939f push tosh -00f2c8 938f push tosl -00f2c9 0f8e add tosl, zl -00f2ca 1f9f adc tosh, zh -00f2cb cd39 jmp_ DO_NEXT - .include "words/doplusloop.asm" - - ; System - ; runtime of +loop - ;VE_DOPLUSLOOP: - ; .dw $ff07 - ; .db "(+loop)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOPLUSLOOP - XT_DOPLUSLOOP: -00f2cc f2cd .dw PFA_DOPLUSLOOP - PFA_DOPLUSLOOP: -00f2cd 91ef pop zl -00f2ce 91ff pop zh -00f2cf 0fe8 add zl, tosl -00f2d0 1ff9 adc zh, tosh -00f2d1 9189 -00f2d2 9199 loadtos -00f2d3 f01b brvs PFA_DOPLUSLOOP_LEAVE - ; next cycle - PFA_DOPLUSLOOP_NEXT: - ; next iteration -00f2d4 93ff push zh -00f2d5 93ef push zl -00f2d6 cd5f rjmp PFA_DOBRANCH ; read next cell from dictionary and jump to its destination - PFA_DOPLUSLOOP_LEAVE: -00f2d7 910f pop temp0 -00f2d8 911f pop temp1 ; remove limit -00f2d9 9611 adiw xl, 1 ; skip branch-back address -00f2da cd2a jmp_ DO_NEXT - .include "words/doloop.asm" - - ; System - ; runtime of loop - ;VE_DOLOOP: - ; .dw $ff06 - ; .db "(loop)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOLOOP - XT_DOLOOP: -00f2db f2dc .dw PFA_DOLOOP - PFA_DOLOOP: -00f2dc 91ef pop zl -00f2dd 91ff pop zh -00f2de 9631 adiw zl,1 -00f2df f3bb brvs PFA_DOPLUSLOOP_LEAVE -00f2e0 cff3 jmp_ PFA_DOPLUSLOOP_NEXT - .include "words/unloop.asm" - - ; Compiler - ; remove loop-sys, exit the loop and continue execution after it - VE_UNLOOP: -00f2e1 ff06 .dw $ff06 -00f2e2 6e75 -00f2e3 6f6c -00f2e4 706f .db "unloop" -00f2e5 f2bb .dw VE_HEAD - .set VE_HEAD = VE_UNLOOP - XT_UNLOOP: -00f2e6 f2e7 .dw PFA_UNLOOP - PFA_UNLOOP: -00f2e7 911f pop temp1 -00f2e8 910f pop temp0 -00f2e9 911f pop temp1 -00f2ea 910f pop temp0 -00f2eb cd19 jmp_ DO_NEXT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;; - - .include "words/cmove_g.asm" - - ; Memory - ; copy data in RAM from higher to lower addresses. - VE_CMOVE_G: -00f2ec ff06 .dw $ff06 -00f2ed 6d63 -00f2ee 766f -00f2ef 3e65 .db "cmove>" -00f2f0 f2e1 .dw VE_HEAD - .set VE_HEAD = VE_CMOVE_G - XT_CMOVE_G: -00f2f1 f2f2 .dw PFA_CMOVE_G - PFA_CMOVE_G: -00f2f2 93bf push xh -00f2f3 93af push xl -00f2f4 91e9 ld zl, Y+ -00f2f5 91f9 ld zh, Y+ ; addr-to -00f2f6 91a9 ld xl, Y+ -00f2f7 91b9 ld xh, Y+ ; addr-from -00f2f8 2f09 mov temp0, tosh -00f2f9 2b08 or temp0, tosl -00f2fa f041 brbs 1, PFA_CMOVE_G1 -00f2fb 0fe8 add zl, tosl -00f2fc 1ff9 adc zh, tosh -00f2fd 0fa8 add xl, tosl -00f2fe 1fb9 adc xh, tosh - PFA_CMOVE_G2: -00f2ff 911e ld temp1, -X -00f300 9312 st -Z, temp1 -00f301 9701 sbiw tosl, 1 -00f302 f7e1 brbc 1, PFA_CMOVE_G2 - PFA_CMOVE_G1: -00f303 91af pop xl -00f304 91bf pop xh -00f305 9189 -00f306 9199 loadtos -00f307 ccfd jmp_ DO_NEXT - .include "words/byteswap.asm" - - ; Arithmetics - ; exchange the bytes of the TOS - VE_BYTESWAP: -00f308 ff02 .dw $ff02 -00f309 3c3e .db "><" -00f30a f2ec .dw VE_HEAD - .set VE_HEAD = VE_BYTESWAP - XT_BYTESWAP: -00f30b f30c .dw PFA_BYTESWAP - PFA_BYTESWAP: -00f30c 2f09 mov temp0, tosh -00f30d 2f98 mov tosh, tosl -00f30e 2f80 mov tosl, temp0 -00f30f ccf5 jmp_ DO_NEXT - .include "words/up.asm" - - ; System Variable - ; get user area pointer - VE_UP_FETCH: -00f310 ff03 .dw $ff03 -00f311 7075 -00f312 0040 .db "up@",0 -00f313 f308 .dw VE_HEAD - .set VE_HEAD = VE_UP_FETCH - XT_UP_FETCH: -00f314 f315 .dw PFA_UP_FETCH - PFA_UP_FETCH: -00f315 939a -00f316 938a savetos -00f317 01c2 movw tosl, upl -00f318 ccec jmp_ DO_NEXT - - ; ( addr -- ) - ; System Variable - ; set user area pointer - VE_UP_STORE: -00f319 ff03 .dw $ff03 -00f31a 7075 -00f31b 0021 .db "up!",0 -00f31c f310 .dw VE_HEAD - .set VE_HEAD = VE_UP_STORE - XT_UP_STORE: -00f31d f31e .dw PFA_UP_STORE - PFA_UP_STORE: -00f31e 012c movw upl, tosl -00f31f 9189 -00f320 9199 loadtos -00f321 cce3 jmp_ DO_NEXT - .include "words/1ms.asm" - - ; Time - ; busy waits (almost) exactly 1 millisecond - VE_1MS: -00f322 ff03 .dw $ff03 -00f323 6d31 -00f324 0073 .db "1ms",0 -00f325 f319 .dw VE_HEAD - .set VE_HEAD = VE_1MS - XT_1MS: -00f326 f327 .dw PFA_1MS - PFA_1MS: -00f327 eae0 -00f328 e0ff -00f329 9731 -00f32a f7f1 delay 1000 -00f32b ccd9 jmp_ DO_NEXT - .include "words/2to_r.asm" - - ; Stack - ; move DTOS to TOR - VE_2TO_R: -00f32c ff03 .dw $ff03 -00f32d 3e32 -00f32e 0072 .db "2>r",0 -00f32f f322 .dw VE_HEAD - .set VE_HEAD = VE_2TO_R - XT_2TO_R: -00f330 f331 .dw PFA_2TO_R - PFA_2TO_R: -00f331 01fc movw zl, tosl -00f332 9189 -00f333 9199 loadtos -00f334 939f push tosh -00f335 938f push tosl -00f336 93ff push zh -00f337 93ef push zl -00f338 9189 -00f339 9199 loadtos -00f33a ccca jmp_ DO_NEXT - .include "words/2r_from.asm" - - ; Stack - ; move DTOR to TOS - VE_2R_FROM: -00f33b ff03 .dw $ff03 -00f33c 7232 -00f33d 003e .db "2r>",0 -00f33e f32c .dw VE_HEAD - .set VE_HEAD = VE_2R_FROM - XT_2R_FROM: -00f33f f340 .dw PFA_2R_FROM - PFA_2R_FROM: -00f340 939a -00f341 938a savetos -00f342 91ef pop zl -00f343 91ff pop zh -00f344 918f pop tosl -00f345 919f pop tosh -00f346 939a -00f347 938a savetos -00f348 01cf movw tosl, zl -00f349 ccbb jmp_ DO_NEXT - - .include "words/store-e.asm" - - ; Memory - ; write n (2bytes) to eeprom address - VE_STOREE: -00f34a ff02 .dw $ff02 -00f34b 6521 .db "!e" -00f34c f33b .dw VE_HEAD - .set VE_HEAD = VE_STOREE - XT_STOREE: -00f34d f34e .dw PFA_STOREE - PFA_STOREE: - .if WANT_UNIFIED == 1 - .endif - PFA_STOREE0: -00f34e 01fc movw zl, tosl -00f34f 9189 -00f350 9199 loadtos -00f351 b72f in_ temp2, SREG -00f352 94f8 cli -00f353 d028 rcall PFA_FETCHE2 -00f354 b500 in_ temp0, EEDR -00f355 1708 cp temp0,tosl -00f356 f009 breq PFA_STOREE3 -00f357 d00b rcall PFA_STOREE1 - PFA_STOREE3: -00f358 9631 adiw zl,1 -00f359 d022 rcall PFA_FETCHE2 -00f35a b500 in_ temp0, EEDR -00f35b 1709 cp temp0,tosh -00f35c f011 breq PFA_STOREE4 -00f35d 2f89 mov tosl, tosh -00f35e d004 rcall PFA_STOREE1 - PFA_STOREE4: -00f35f bf2f out_ SREG, temp2 -00f360 9189 -00f361 9199 loadtos -00f362 cca2 jmp_ DO_NEXT - - PFA_STOREE1: -00f363 99f9 sbic EECR, EEPE -00f364 cffe rjmp PFA_STOREE1 - - PFA_STOREE2: ; estore_wait_low_spm: -00f365 b707 in_ temp0, SPMCSR -00f366 fd00 sbrc temp0,SPMEN -00f367 cffd rjmp PFA_STOREE2 - -00f368 bdf2 out_ EEARH,zh -00f369 bde1 out_ EEARL,zl -00f36a bd80 out_ EEDR, tosl -00f36b 9afa sbi EECR,EEMPE -00f36c 9af9 sbi EECR,EEPE - -00f36d 9508 ret - .if WANT_UNIFIED == 1 - .endif - .include "words/fetch-e.asm" - - ; Memory - ; read 1 cell from eeprom - VE_FETCHE: -00f36e ff02 .dw $ff02 -00f36f 6540 .db "@e" -00f370 f34a .dw VE_HEAD - .set VE_HEAD = VE_FETCHE - XT_FETCHE: -00f371 f372 .dw PFA_FETCHE - PFA_FETCHE: - .if WANT_UNIFIED == 1 - .endif - PFA_FETCHE1: -00f372 b72f in_ temp2, SREG -00f373 94f8 cli -00f374 01fc movw zl, tosl -00f375 d006 rcall PFA_FETCHE2 -00f376 b580 in_ tosl, EEDR - -00f377 9631 adiw zl,1 - -00f378 d003 rcall PFA_FETCHE2 -00f379 b590 in_ tosh, EEDR -00f37a bf2f out_ SREG, temp2 -00f37b cc89 jmp_ DO_NEXT - - PFA_FETCHE2: -00f37c 99f9 sbic EECR, EEPE -00f37d cffe rjmp PFA_FETCHE2 - -00f37e bdf2 out_ EEARH,zh -00f37f bde1 out_ EEARL,zl - -00f380 9af8 sbi EECR,EERE -00f381 9508 ret - - .if WANT_UNIFIED == 1 - .endif - .include "words/store-i.asm" - - ; System Value - ; Deferred action to write a single 16bit cell to flash - VE_STOREI: -00f382 ff02 .dw $ff02 -00f383 6921 .db "!i" -00f384 f36e .dw VE_HEAD - .set VE_HEAD = VE_STOREI - XT_STOREI: -00f385 fc2e .dw PFA_DODEFER1 - PFA_STOREI: -00f386 0078 .dw EE_STOREI -00f387 fbcf .dw XT_EDEFERFETCH -00f388 fbd9 .dw XT_EDEFERSTORE - .if FLASHEND > $10000 - .else - .include "words/store-i_nrww.asm" - - ; Memory - ; writes n to flash memory using assembly code (code to be placed in boot loader section) - VE_DO_STOREI_NRWW: -00f389 ff09 .dw $ff09 -00f38a 2128 -00f38b 2d69 -00f38c 726e -00f38d 7777 -00f38e 0029 .db "(!i-nrww)",0 -00f38f f382 .dw VE_HEAD - .set VE_HEAD = VE_DO_STOREI_NRWW - XT_DO_STOREI: -00f390 f391 .dw PFA_DO_STOREI_NRWW - PFA_DO_STOREI_NRWW: - ; store status register -00f391 b71f in temp1,SREG -00f392 931f push temp1 -00f393 94f8 cli - -00f394 019c movw temp2, tosl ; save the (word) address -00f395 9189 -00f396 9199 loadtos ; get the new value for the flash cell -00f397 93af push xl -00f398 93bf push xh -00f399 93cf push yl -00f39a 93df push yh -00f39b d009 rcall DO_STOREI_atmega -00f39c 91df pop yh -00f39d 91cf pop yl -00f39e 91bf pop xh -00f39f 91af pop xl - ; finally clear the stack -00f3a0 9189 -00f3a1 9199 loadtos -00f3a2 911f pop temp1 - ; restore status register (and interrupt enable flag) -00f3a3 bf1f out SREG,temp1 - -00f3a4 cc60 jmp_ DO_NEXT - - ; - DO_STOREI_atmega: - ; write data to temp page buffer - ; use the values in tosl/tosh at the - ; appropiate place -00f3a5 d010 rcall pageload - - ; erase page if needed - ; it is needed if a bit goes from 0 to 1 -00f3a6 94e0 com temp4 -00f3a7 94f0 com temp5 -00f3a8 218e and tosl, temp4 -00f3a9 219f and tosh, temp5 -00f3aa 2b98 or tosh, tosl -00f3ab f019 breq DO_STOREI_writepage -00f3ac 01f9 movw zl, temp2 -00f3ad e002 ldi temp0,(1<8000 - .include "dict/core_8k.inc" - - .include "words/n_to_r.asm" - - ; Stack - ; move n items from data stack to return stack - VE_N_TO_R: -00f3ed ff03 .dw $ff03 -00f3ee 3e6e -00f3ef 0072 .db "n>r",0 -00f3f0 f3e0 .dw VE_HEAD - .set VE_HEAD = VE_N_TO_R - XT_N_TO_R: -00f3f1 f3f2 .dw PFA_N_TO_R - PFA_N_TO_R: -00f3f2 01fc movw zl, tosl -00f3f3 2f08 mov temp0, tosl - PFA_N_TO_R1: -00f3f4 9189 -00f3f5 9199 loadtos -00f3f6 939f push tosh -00f3f7 938f push tosl -00f3f8 950a dec temp0 -00f3f9 f7d1 brne PFA_N_TO_R1 -00f3fa 93ef push zl -00f3fb 93ff push zh -00f3fc 9189 -00f3fd 9199 loadtos -00f3fe cc06 jmp_ DO_NEXT - .include "words/n_r_from.asm" - - ; Stack - ; move n items from return stack to data stack - VE_N_R_FROM: -00f3ff ff03 .dw $ff03 -00f400 726e -00f401 003e .db "nr>",0 -00f402 f3ed .dw VE_HEAD - .set VE_HEAD = VE_N_R_FROM - XT_N_R_FROM: -00f403 f404 .dw PFA_N_R_FROM - PFA_N_R_FROM: -00f404 939a -00f405 938a savetos -00f406 91ff pop zh -00f407 91ef pop zl -00f408 2f0e mov temp0, zl - PFA_N_R_FROM1: -00f409 918f pop tosl -00f40a 919f pop tosh -00f40b 939a -00f40c 938a savetos -00f40d 950a dec temp0 -00f40e f7d1 brne PFA_N_R_FROM1 -00f40f 01cf movw tosl, zl -00f410 cbf4 jmp_ DO_NEXT - - .include "words/d-2star.asm" - - ; Arithmetics - ; shift a double cell left - VE_D2STAR: -00f411 ff03 .dw $ff03 -00f412 3264 -00f413 002a .db "d2*",0 -00f414 f3ff .dw VE_HEAD - .set VE_HEAD = VE_D2STAR - XT_D2STAR: -00f415 f416 .dw PFA_D2STAR - PFA_D2STAR: -00f416 9109 ld temp0, Y+ -00f417 9119 ld temp1, Y+ -00f418 0f00 lsl temp0 -00f419 1f11 rol temp1 -00f41a 1f88 rol tosl -00f41b 1f99 rol tosh -00f41c 931a st -Y, temp1 -00f41d 930a st -Y, temp0 -00f41e cbe6 jmp_ DO_NEXT - .include "words/d-2slash.asm" - - ; Arithmetics - ; shift a double cell value right - VE_D2SLASH: -00f41f ff03 .dw $ff03 -00f420 3264 -00f421 002f .db "d2/",0 -00f422 f411 .dw VE_HEAD - .set VE_HEAD = VE_D2SLASH - XT_D2SLASH: -00f423 f424 .dw PFA_D2SLASH - PFA_D2SLASH: -00f424 9109 ld temp0, Y+ -00f425 9119 ld temp1, Y+ -00f426 9595 asr tosh -00f427 9587 ror tosl -00f428 9517 ror temp1 -00f429 9507 ror temp0 -00f42a 931a st -Y, temp1 -00f42b 930a st -Y, temp0 -00f42c cbd8 jmp_ DO_NEXT - .include "words/d-plus.asm" - - ; Arithmetics - ; add 2 double cell values - VE_DPLUS: -00f42d ff02 .dw $ff02 -00f42e 2b64 .db "d+" -00f42f f41f .dw VE_HEAD - .set VE_HEAD = VE_DPLUS - XT_DPLUS: -00f430 f431 .dw PFA_DPLUS - PFA_DPLUS: -00f431 9129 ld temp2, Y+ -00f432 9139 ld temp3, Y+ - -00f433 90e9 ld temp4, Y+ -00f434 90f9 ld temp5, Y+ -00f435 9149 ld temp6, Y+ -00f436 9159 ld temp7, Y+ - -00f437 0f24 add temp2, temp6 -00f438 1f35 adc temp3, temp7 -00f439 1d8e adc tosl, temp4 -00f43a 1d9f adc tosh, temp5 - -00f43b 933a st -Y, temp3 -00f43c 932a st -Y, temp2 -00f43d cbc7 jmp_ DO_NEXT - .include "words/d-minus.asm" - - ; Arithmetics - ; subtract d2 from d1 - VE_DMINUS: -00f43e ff02 .dw $ff02 -00f43f 2d64 .db "d-" -00f440 f42d .dw VE_HEAD - .set VE_HEAD = VE_DMINUS - XT_DMINUS: -00f441 f442 .dw PFA_DMINUS - PFA_DMINUS: -00f442 9129 ld temp2, Y+ -00f443 9139 ld temp3, Y+ - -00f444 90e9 ld temp4, Y+ -00f445 90f9 ld temp5, Y+ -00f446 9149 ld temp6, Y+ -00f447 9159 ld temp7, Y+ - -00f448 1b42 sub temp6, temp2 -00f449 0b53 sbc temp7, temp3 -00f44a 0ae8 sbc temp4, tosl -00f44b 0af9 sbc temp5, tosh - -00f44c 935a st -Y, temp7 -00f44d 934a st -Y, temp6 -00f44e 01c7 movw tosl, temp4 -00f44f cbb5 jmp_ DO_NEXT - .include "words/d-invert.asm" - - ; Arithmetics - ; invert all bits in the double cell value - VE_DINVERT: -00f450 ff07 .dw $ff07 -00f451 6964 -00f452 766e -00f453 7265 -00f454 0074 .db "dinvert",0 -00f455 f43e .dw VE_HEAD - .set VE_HEAD = VE_DINVERT - XT_DINVERT: -00f456 f457 .dw PFA_DINVERT - PFA_DINVERT: -00f457 9109 ld temp0, Y+ -00f458 9119 ld temp1, Y+ -00f459 9580 com tosl -00f45a 9590 com tosh -00f45b 9500 com temp0 -00f45c 9510 com temp1 -00f45d 931a st -Y, temp1 -00f45e 930a st -Y, temp0 -00f45f cba5 jmp_ DO_NEXT - .include "words/u-dot.asm" - - ; Numeric IO - ; unsigned PNO with single cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDOT: -00f460 ff02 .dw $ff02 -00f461 2e75 .db "u." -00f462 f450 .dw VE_HEAD - .set VE_HEAD = VE_UDOT - XT_UDOT: -00f463 f001 .dw DO_COLON - PFA_UDOT: - .endif -00f464 f166 .dw XT_ZERO -00f465 f745 .dw XT_UDDOT -00f466 f026 .dw XT_EXIT - ; : u. ( us -- ) 0 ud. ; - .include "words/u-dot-r.asm" - - ; Numeric IO - ; unsigned PNO with single cells numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_UDOTR: -00f467 ff03 .dw $ff03 -00f468 2e75 -00f469 0072 .db "u.r",0 -00f46a f460 .dw VE_HEAD - .set VE_HEAD = VE_UDOTR - XT_UDOTR: -00f46b f001 .dw DO_COLON - PFA_UDOTR: - .endif -00f46c f166 .dw XT_ZERO -00f46d f0d6 .dw XT_SWAP -00f46e f74e .dw XT_UDDOTR -00f46f f026 .dw XT_EXIT - ; : u.r ( s n -- ) 0 swap ud.r ; - - .include "words/show-wordlist.asm" - - ; Tools - ; prints the name of the words in a wordlist - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SHOWWORDLIST: -00f470 ff0d .dw $ff0d -00f471 6873 -00f472 776f -00f473 772d -00f474 726f -00f475 6c64 -00f476 7369 -00f477 0074 .db "show-wordlist",0 -00f478 f467 .dw VE_HEAD - .set VE_HEAD = VE_SHOWWORDLIST - XT_SHOWWORDLIST: -00f479 f001 .dw DO_COLON - PFA_SHOWWORDLIST: - .endif -00f47a f046 .dw XT_DOLITERAL -00f47b f47f .dw XT_SHOWWORD -00f47c f0d6 .dw XT_SWAP -00f47d fc72 .dw XT_TRAVERSEWORDLIST -00f47e f026 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_SHOWWORD: -00f47f f001 .dw DO_COLON - PFA_SHOWWORD: - .endif -00f480 fc8d .dw XT_NAME2STRING -00f481 f7bb .dw XT_ITYPE -00f482 f7fd .dw XT_SPACE ; ( -- addr n) -00f483 f15d .dw XT_TRUE -00f484 f026 .dw XT_EXIT - .include "words/words.asm" - - ; Tools - ; prints a list of all (visible) words in the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_WORDS: -00f485 ff05 .dw $ff05 -00f486 6f77 -00f487 6472 -00f488 0073 .db "words",0 -00f489 f470 .dw VE_HEAD - .set VE_HEAD = VE_WORDS - XT_WORDS: -00f48a f001 .dw DO_COLON - PFA_WORDS: - .endif -00f48b f046 .dw XT_DOLITERAL -00f48c 005e .dw CFG_ORDERLISTLEN+2 -00f48d f371 .dw XT_FETCHE -00f48e f479 .dw XT_SHOWWORDLIST -00f48f f026 .dw XT_EXIT - .include "dict/interrupt.inc" - - .if WANT_INTERRUPTS == 1 - - .if WANT_INTERRUPT_COUNTERS == 1 - .endif - - .include "words/int-on.asm" - - ; Interrupt - ; turns on all interrupts - VE_INTON: -00f490 ff04 .dw $ff04 -00f491 692b -00f492 746e .db "+int" -00f493 f485 .dw VE_HEAD - .set VE_HEAD = VE_INTON - XT_INTON: -00f494 f495 .dw PFA_INTON - PFA_INTON: -00f495 9478 sei -00f496 cb6e jmp_ DO_NEXT - .include "words/int-off.asm" - - ; Interrupt - ; turns off all interrupts - VE_INTOFF: -00f497 ff04 .dw $ff04 -00f498 692d -00f499 746e .db "-int" -00f49a f490 .dw VE_HEAD - .set VE_HEAD = VE_INTOFF - XT_INTOFF: -00f49b f49c .dw PFA_INTOFF - PFA_INTOFF: -00f49c 94f8 cli -00f49d cb67 jmp_ DO_NEXT - .include "words/int-store.asm" - - ; Interrupt - ; stores XT as interrupt vector i - VE_INTSTORE: -00f49e ff04 .dw $ff04 -00f49f 6e69 -00f4a0 2174 .db "int!" -00f4a1 f497 .dw VE_HEAD - .set VE_HEAD = VE_INTSTORE - XT_INTSTORE: -00f4a2 f001 .dw DO_COLON - PFA_INTSTORE: -00f4a3 f046 .dw XT_DOLITERAL -00f4a4 0000 .dw intvec -00f4a5 f1af .dw XT_PLUS -00f4a6 f34d .dw XT_STOREE -00f4a7 f026 .dw XT_EXIT - .include "words/int-fetch.asm" - - ; Interrupt - ; fetches XT from interrupt vector i - VE_INTFETCH: -00f4a8 ff04 .dw $ff04 -00f4a9 6e69 -00f4aa 4074 .db "int@" -00f4ab f49e .dw VE_HEAD - .set VE_HEAD = VE_INTFETCH - XT_INTFETCH: -00f4ac f001 .dw DO_COLON - PFA_INTFETCH: -00f4ad f046 .dw XT_DOLITERAL -00f4ae 0000 .dw intvec -00f4af f1af .dw XT_PLUS -00f4b0 f371 .dw XT_FETCHE -00f4b1 f026 .dw XT_EXIT - .include "words/int-trap.asm" - - ; Interrupt - ; trigger an interrupt - VE_INTTRAP: -00f4b2 ff08 .dw $ff08 -00f4b3 6e69 -00f4b4 2d74 -00f4b5 7274 -00f4b6 7061 .db "int-trap" -00f4b7 f4a8 .dw VE_HEAD - .set VE_HEAD = VE_INTTRAP - XT_INTTRAP: -00f4b8 f4b9 .dw PFA_INTTRAP - PFA_INTTRAP: -00f4b9 2eb8 mov isrflag, tosl -00f4ba 9189 -00f4bb 9199 loadtos -00f4bc cb48 jmp_ DO_NEXT - - .include "words/isr-exec.asm" - - ; Interrupt - ; executes an interrupt service routine - ;VE_ISREXEC: - ; .dw $ff08 - ; .db "isr-exec" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_ISREXEC - XT_ISREXEC: -00f4bd f001 .dw DO_COLON - PFA_ISREXEC: -00f4be f4ac .dw XT_INTFETCH -00f4bf f030 .dw XT_EXECUTE -00f4c0 f4c2 .dw XT_ISREND -00f4c1 f026 .dw XT_EXIT - .include "words/isr-end.asm" - - ; Interrupt - ; re-enables interrupts in an ISR - ;VE_ISREND: - ; .dw $ff07 - ; .db "isr-end",0 - ; .dw VE_HEAD - ; .set VE_HEAD = VE_ISREND - XT_ISREND: -00f4c2 f4c3 .dw PFA_ISREND - PFA_ISREND: -00f4c3 d001 rcall PFA_ISREND1 ; clear the interrupt flag for the controller -00f4c4 cb40 jmp_ DO_NEXT - PFA_ISREND1: -00f4c5 9518 reti - .endif - - .include "words/pick.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PICK: -00f4c6 ff04 .dw $ff04 -00f4c7 6970 -00f4c8 6b63 .db "pick" -00f4c9 f4b2 .dw VE_HEAD - .set VE_HEAD = VE_PICK - XT_PICK: -00f4ca f001 .dw DO_COLON - PFA_PICK: - .endif -00f4cb f241 .dw XT_1PLUS -00f4cc f573 .dw XT_CELLS -00f4cd f29f .dw XT_SP_FETCH -00f4ce f1af .dw XT_PLUS -00f4cf f08b .dw XT_FETCH -00f4d0 f026 .dw XT_EXIT - .include "words/dot-quote.asm" - - ; Compiler - ; compiles string into dictionary to be printed at runtime - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_DOTSTRING: -00f4d1 0002 .dw $0002 -00f4d2 222e .db ".",$22 -00f4d3 f4c6 .dw VE_HEAD - .set VE_HEAD = VE_DOTSTRING - XT_DOTSTRING: -00f4d4 f001 .dw DO_COLON - PFA_DOTSTRING: - .endif -00f4d5 f4dc .dw XT_SQUOTE -00f4d6 01d0 .dw XT_COMPILE -00f4d7 f7bb .dw XT_ITYPE -00f4d8 f026 .dw XT_EXIT - .include "words/squote.asm" - - ; Compiler - ; compiles a string to flash, at runtime leaves ( -- flash-addr count) on stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SQUOTE: -00f4d9 0002 .dw $0002 -00f4da 2273 .db "s",$22 -00f4db f4d1 .dw VE_HEAD - .set VE_HEAD = VE_SQUOTE - XT_SQUOTE: -00f4dc f001 .dw DO_COLON - PFA_SQUOTE: - .endif -00f4dd f046 .dw XT_DOLITERAL -00f4de 0022 .dw 34 ; 0x22 -00f4df f9a2 .dw XT_PARSE ; ( -- addr n) -00f4e0 f566 .dw XT_STATE -00f4e1 f08b .dw XT_FETCH -00f4e2 f03f .dw XT_DOCONDBRANCH -00f4e3 f4e5 DEST(PFA_SQUOTE1) -00f4e4 01fc .dw XT_SLITERAL - PFA_SQUOTE1: -00f4e5 f026 .dw XT_EXIT - - .include "words/fill.asm" - - ; Memory - ; fill u bytes memory beginning at a-addr with character c - VE_FILL: -00f4e6 ff04 .dw $ff04 -00f4e7 6966 -00f4e8 6c6c .db "fill" -00f4e9 f4d9 .dw VE_HEAD - .set VE_HEAD = VE_FILL - XT_FILL: -00f4ea f001 .dw DO_COLON - PFA_FILL: -00f4eb f0f3 .dw XT_ROT -00f4ec f0f3 .dw XT_ROT -00f4ed f0cb -00f4ee f03f .dw XT_QDUP,XT_DOCONDBRANCH -00f4ef f4f7 DEST(PFA_FILL2) -00f4f0 fd79 .dw XT_BOUNDS -00f4f1 f2ad .dw XT_DODO - PFA_FILL1: -00f4f2 f0c3 .dw XT_DUP -00f4f3 f2be .dw XT_I -00f4f4 f09f .dw XT_CSTORE ; ( -- c c-addr) -00f4f5 f2db .dw XT_DOLOOP -00f4f6 f4f2 .dw PFA_FILL1 - PFA_FILL2: -00f4f7 f0eb .dw XT_DROP -00f4f8 f026 .dw XT_EXIT - - .include "words/environment.asm" - - ; System Value - ; word list identifier of the environmental search list - VE_ENVIRONMENT: -00f4f9 ff0b .dw $ff0b -00f4fa 6e65 -00f4fb 6976 -00f4fc 6f72 -00f4fd 6d6e -00f4fe 6e65 -00f4ff 0074 .db "environment",0 -00f500 f4e6 .dw VE_HEAD - .set VE_HEAD = VE_ENVIRONMENT - XT_ENVIRONMENT: -00f501 f054 .dw PFA_DOVARIABLE - PFA_ENVIRONMENT: -00f502 0056 .dw CFG_ENVIRONMENT - .include "words/env-wordlists.asm" - - ; Environment - ; maximum number of wordlists in the dictionary search order - VE_ENVWORDLISTS: -00f503 ff09 .dw $ff09 -00f504 6f77 -00f505 6472 -00f506 696c -00f507 7473 -00f508 0073 .db "wordlists",0 -00f509 0000 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVWORDLISTS - XT_ENVWORDLISTS: -00f50a f001 .dw DO_COLON - PFA_ENVWORDLISTS: -00f50b f046 .dw XT_DOLITERAL -00f50c 0008 .dw NUMWORDLISTS -00f50d f026 .dw XT_EXIT - .include "words/env-slashpad.asm" - - ; Environment - ; Size of the PAD buffer in bytes - VE_ENVSLASHPAD: -00f50e ff04 .dw $ff04 -00f50f 702f -00f510 6461 .db "/pad" -00f511 f503 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVSLASHPAD - XT_ENVSLASHPAD: -00f512 f001 .dw DO_COLON - PFA_ENVSLASHPAD: -00f513 f29f .dw XT_SP_FETCH -00f514 f59f .dw XT_PAD -00f515 f1a5 .dw XT_MINUS -00f516 f026 .dw XT_EXIT - .include "words/env-slashhold.asm" - - ; Environment - ; size of the pictured numeric output buffer in bytes - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENVSLASHHOLD: -00f517 ff05 .dw $ff05 -00f518 682f -00f519 6c6f -00f51a 0064 .db "/hold",0 -00f51b f50e .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVSLASHHOLD - XT_ENVSLASHHOLD: -00f51c f001 .dw DO_COLON - PFA_ENVSLASHHOLD: - .endif -00f51d f59f .dw XT_PAD -00f51e f5da .dw XT_HERE -00f51f f1a5 .dw XT_MINUS -00f520 f026 .dw XT_EXIT - .include "words/env-forthname.asm" - - ; Environment - ; flash address of the amforth name string - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENV_FORTHNAME: -00f521 ff0a .dw $ff0a -00f522 6f66 -00f523 7472 -00f524 2d68 -00f525 616e -00f526 656d .db "forth-name" -00f527 f517 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_FORTHNAME - XT_ENV_FORTHNAME: -00f528 f001 .dw DO_COLON - PFA_EN_FORTHNAME: -00f529 f788 .dw XT_DOSLITERAL -00f52a 0007 .dw 7 - .endif -00f52b 6d61 -00f52c 6f66 -00f52d 7472 -../../common\words/env-forthname.asm(22): warning: .cseg .db misalignment - padding zero byte -00f52e 0068 .db "amforth" - .if cpu_msp430==1 - .endif -00f52f f026 .dw XT_EXIT - .include "words/env-forthversion.asm" - - ; Environment - ; version number of amforth - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENV_FORTHVERSION: -00f530 ff07 .dw $ff07 -00f531 6576 -00f532 7372 -00f533 6f69 -00f534 006e .db "version",0 -00f535 f521 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_FORTHVERSION - XT_ENV_FORTHVERSION: -00f536 f001 .dw DO_COLON - PFA_EN_FORTHVERSION: - .endif -00f537 f046 .dw XT_DOLITERAL -00f538 0041 .dw 65 -00f539 f026 .dw XT_EXIT - .include "words/env-cpu.asm" - - ; Environment - ; flash address of the CPU identification string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENV_CPU: -00f53a ff03 .dw $ff03 -00f53b 7063 -00f53c 0075 .db "cpu",0 -00f53d f530 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_CPU - XT_ENV_CPU: -00f53e f001 .dw DO_COLON - PFA_EN_CPU: - .endif -00f53f f046 .dw XT_DOLITERAL -00f540 0049 .dw mcu_name -00f541 f7e7 .dw XT_ICOUNT -00f542 f026 .dw XT_EXIT - .include "words/env-mcuinfo.asm" - - ; Environment - ; flash address of some CPU specific parameters - VE_ENV_MCUINFO: -00f543 ff08 .dw $ff08 -00f544 636d -00f545 2d75 -00f546 6e69 -00f547 6f66 .db "mcu-info" -00f548 f53a .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_MCUINFO - XT_ENV_MCUINFO: -00f549 f001 .dw DO_COLON - PFA_EN_MCUINFO: -00f54a f046 .dw XT_DOLITERAL -00f54b 0045 .dw mcu_info -00f54c f026 .dw XT_EXIT - .include "words/env-usersize.asm" - - ; Environment - ; size of the USER area in bytes - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_ENVUSERSIZE: -00f54d ff05 .dw $ff05 -00f54e 752f -00f54f 6573 -00f550 0072 .db "/user",0 -00f551 f543 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVUSERSIZE - XT_ENVUSERSIZE: -00f552 f001 .dw DO_COLON - PFA_ENVUSERSIZE: - .endif -00f553 f046 .dw XT_DOLITERAL -00f554 002c .dw SYSUSERSIZE + APPUSERSIZE -00f555 f026 .dw XT_EXIT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/f_cpu.asm" - - ; System - ; put the cpu frequency in Hz on stack - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_F_CPU: -00f556 ff05 .dw $ff05 -00f557 5f66 -00f558 7063 -00f559 0075 .db "f_cpu",0 -00f55a f4f9 .dw VE_HEAD - .set VE_HEAD = VE_F_CPU - XT_F_CPU: -00f55b f001 .dw DO_COLON - PFA_F_CPU: - .endif -00f55c f046 .dw XT_DOLITERAL -00f55d 2400 .dw (F_CPU % 65536) -00f55e f046 .dw XT_DOLITERAL -00f55f 00f4 .dw (F_CPU / 65536) -00f560 f026 .dw XT_EXIT - .include "words/state.asm" - - ; System Variable - ; system state - VE_STATE: -00f561 ff05 .dw $ff05 -00f562 7473 -00f563 7461 -00f564 0065 .db "state",0 -00f565 f556 .dw VE_HEAD - .set VE_HEAD = VE_STATE - XT_STATE: -00f566 f054 .dw PFA_DOVARIABLE - PFA_STATE: -00f567 013d .dw ram_state - - .dseg -00013d ram_state: .byte 2 - .include "words/base.asm" - - ; Numeric IO - ; location of the cell containing the number conversion radix - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BASE: -00f568 ff04 .dw $ff04 -00f569 6162 -00f56a 6573 .db "base" -00f56b f561 .dw VE_HEAD - .set VE_HEAD = VE_BASE - XT_BASE: -00f56c f067 .dw PFA_DOUSER - PFA_BASE: - .endif -00f56d 000c .dw USER_BASE - - .include "words/cells.asm" - - ; Arithmetics - ; n2 is the size in address units of n1 cells - VE_CELLS: -00f56e ff05 .dw $ff05 -00f56f 6563 -00f570 6c6c -00f571 0073 .db "cells",0 -00f572 f568 .dw VE_HEAD - .set VE_HEAD = VE_CELLS - XT_CELLS: -00f573 f21e .dw PFA_2STAR - .include "words/cellplus.asm" - - ; Arithmetics - ; add the size of an address-unit to a-addr1 - VE_CELLPLUS: -00f574 ff05 .dw $ff05 -00f575 6563 -00f576 6c6c -00f577 002b .db "cell+",0 -00f578 f56e .dw VE_HEAD - .set VE_HEAD = VE_CELLPLUS - XT_CELLPLUS: -00f579 f57a .dw PFA_CELLPLUS - PFA_CELLPLUS: -00f57a 9602 adiw tosl, CELLSIZE -00f57b ca89 jmp_ DO_NEXT - - .include "words/2dup.asm" - - ; Stack - ; Duplicate the 2 top elements - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2DUP: -00f57c ff04 .dw $ff04 -00f57d 6432 -00f57e 7075 .db "2dup" -00f57f f574 .dw VE_HEAD - .set VE_HEAD = VE_2DUP - XT_2DUP: -00f580 f001 .dw DO_COLON - PFA_2DUP: - .endif - -00f581 f0e1 .dw XT_OVER -00f582 f0e1 .dw XT_OVER -00f583 f026 .dw XT_EXIT - .include "words/2drop.asm" - - ; Stack - ; Remove the 2 top elements - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2DROP: -00f584 ff05 .dw $ff05 -00f585 6432 -00f586 6f72 -00f587 0070 .db "2drop",0 -00f588 f57c .dw VE_HEAD - .set VE_HEAD = VE_2DROP - XT_2DROP: -00f589 f001 .dw DO_COLON - PFA_2DROP: - .endif -00f58a f0eb .dw XT_DROP -00f58b f0eb .dw XT_DROP -00f58c f026 .dw XT_EXIT - - .include "words/tuck.asm" - - ; Stack - ; Copy the first (top) stack item below the second stack item. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TUCK: -00f58d ff04 .dw $ff04 -00f58e 7574 -00f58f 6b63 .db "tuck" -00f590 f584 .dw VE_HEAD - .set VE_HEAD = VE_TUCK - XT_TUCK: -00f591 f001 .dw DO_COLON - PFA_TUCK: - .endif -00f592 f0d6 .dw XT_SWAP -00f593 f0e1 .dw XT_OVER -00f594 f026 .dw XT_EXIT - - .include "words/to-in.asm" - - ; System Variable - ; pointer to current read position in input buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO_IN: -00f595 ff03 .dw $ff03 -00f596 693e -00f597 006e .db ">in",0 -00f598 f58d .dw VE_HEAD - .set VE_HEAD = VE_TO_IN - XT_TO_IN: -00f599 f067 .dw PFA_DOUSER - PFA_TO_IN: - .endif -00f59a 0018 .dw USER_TO_IN - .include "words/pad.asm" - - ; System Variable - ; Address of the temporary scratch buffer. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PAD: -00f59b ff03 .dw $ff03 -00f59c 6170 -00f59d 0064 .db "pad",0 -00f59e f595 .dw VE_HEAD - .set VE_HEAD = VE_PAD - XT_PAD: -00f59f f001 .dw DO_COLON - PFA_PAD: - .endif -00f5a0 f5da .dw XT_HERE -00f5a1 f046 .dw XT_DOLITERAL -00f5a2 0028 .dw 40 -00f5a3 f1af .dw XT_PLUS -00f5a4 f026 .dw XT_EXIT - .include "words/emit.asm" - - ; Character IO - ; fetch the emit vector and execute it. should emit a character from TOS - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_EMIT: -00f5a5 ff04 .dw $ff04 -00f5a6 6d65 -00f5a7 7469 .db "emit" -00f5a8 f59b .dw VE_HEAD - .set VE_HEAD = VE_EMIT - XT_EMIT: -00f5a9 fc2e .dw PFA_DODEFER1 - PFA_EMIT: - .endif -00f5aa 000e .dw USER_EMIT -00f5ab fbf7 .dw XT_UDEFERFETCH -00f5ac fc03 .dw XT_UDEFERSTORE - .include "words/emitq.asm" - - ; Character IO - ; fetch emit? vector and execute it. should return the ready-to-send condition - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_EMITQ: -00f5ad ff05 .dw $ff05 -00f5ae 6d65 -00f5af 7469 -00f5b0 003f .db "emit?",0 -00f5b1 f5a5 .dw VE_HEAD - .set VE_HEAD = VE_EMITQ - XT_EMITQ: -00f5b2 fc2e .dw PFA_DODEFER1 - PFA_EMITQ: - .endif -00f5b3 0010 .dw USER_EMITQ -00f5b4 fbf7 .dw XT_UDEFERFETCH -00f5b5 fc03 .dw XT_UDEFERSTORE - .include "words/key.asm" - - ; Character IO - ; fetch key vector and execute it, should leave a single character on TOS - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_KEY: -00f5b6 ff03 .dw $ff03 -00f5b7 656b -00f5b8 0079 .db "key",0 -00f5b9 f5ad .dw VE_HEAD - .set VE_HEAD = VE_KEY - XT_KEY: -00f5ba fc2e .dw PFA_DODEFER1 - PFA_KEY: - .endif -00f5bb 0012 .dw USER_KEY -00f5bc fbf7 .dw XT_UDEFERFETCH -00f5bd fc03 .dw XT_UDEFERSTORE - .include "words/keyq.asm" - - ; Character IO - ; fetch key? vector and execute it. should turn on key sender, if it is disabled/stopped - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_KEYQ: -00f5be ff04 .dw $ff04 -00f5bf 656b -00f5c0 3f79 .db "key?" -00f5c1 f5b6 .dw VE_HEAD - .set VE_HEAD = VE_KEYQ - XT_KEYQ: -00f5c2 fc2e .dw PFA_DODEFER1 - PFA_KEYQ: - .endif -00f5c3 0014 .dw USER_KEYQ -00f5c4 fbf7 .dw XT_UDEFERFETCH -00f5c5 fc03 .dw XT_UDEFERSTORE - - .include "words/dp.asm" - - ; System Value - ; address of the next free dictionary cell - VE_DP: -00f5c6 ff02 .dw $ff02 -00f5c7 7064 .db "dp" -00f5c8 f5be .dw VE_HEAD - .set VE_HEAD = VE_DP - XT_DP: -00f5c9 f081 .dw PFA_DOVALUE1 - PFA_DP: -00f5ca 0048 .dw CFG_DP -00f5cb fbcf .dw XT_EDEFERFETCH -00f5cc fbd9 .dw XT_EDEFERSTORE - .include "words/ehere.asm" - - ; System Value - ; address of the next free address in eeprom - VE_EHERE: -00f5cd ff05 .dw $ff05 -00f5ce 6865 -00f5cf 7265 -00f5d0 0065 .db "ehere",0 -00f5d1 f5c6 .dw VE_HEAD - .set VE_HEAD = VE_EHERE - XT_EHERE: -00f5d2 f081 .dw PFA_DOVALUE1 - PFA_EHERE: -00f5d3 004c .dw EE_EHERE -00f5d4 fbcf .dw XT_EDEFERFETCH -00f5d5 fbd9 .dw XT_EDEFERSTORE - .include "words/here.asm" - - ; System Value - ; address of the next free data space (RAM) cell - VE_HERE: -00f5d6 ff04 .dw $ff04 -00f5d7 6568 -00f5d8 6572 .db "here" -00f5d9 f5cd .dw VE_HEAD - .set VE_HEAD = VE_HERE - XT_HERE: -00f5da f081 .dw PFA_DOVALUE1 - PFA_HERE: -00f5db 004a .dw EE_HERE -00f5dc fbcf .dw XT_EDEFERFETCH -00f5dd fbd9 .dw XT_EDEFERSTORE - .include "words/allot.asm" - - ; System - ; allocate or release memory in RAM - VE_ALLOT: -00f5de ff05 .dw $ff05 -00f5df 6c61 -00f5e0 6f6c -00f5e1 0074 .db "allot",0 -00f5e2 f5d6 .dw VE_HEAD - .set VE_HEAD = VE_ALLOT - XT_ALLOT: -00f5e3 f001 .dw DO_COLON - PFA_ALLOT: -00f5e4 f5da .dw XT_HERE -00f5e5 f1af .dw XT_PLUS -00f5e6 fbb4 .dw XT_DOTO -00f5e7 f5db .dw PFA_HERE -00f5e8 f026 .dw XT_EXIT - - .include "words/bin.asm" - - ; Numeric IO - ; set base for numeric conversion to 10 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BIN: -00f5e9 ff03 .dw $ff03 -00f5ea 6962 -00f5eb 006e .db "bin",0 -00f5ec f5de .dw VE_HEAD - .set VE_HEAD = VE_BIN - XT_BIN: -00f5ed f001 .dw DO_COLON - PFA_BIN: - .endif -00f5ee fda6 .dw XT_TWO -00f5ef f56c .dw XT_BASE -00f5f0 f093 .dw XT_STORE -00f5f1 f026 .dw XT_EXIT - .include "words/decimal.asm" - - ; Numeric IO - ; set base for numeric conversion to 10 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DECIMAL: -00f5f2 ff07 .dw $ff07 -00f5f3 6564 -00f5f4 6963 -00f5f5 616d -00f5f6 006c .db "decimal",0 -00f5f7 f5e9 .dw VE_HEAD - .set VE_HEAD = VE_DECIMAL - XT_DECIMAL: -00f5f8 f001 .dw DO_COLON - PFA_DECIMAL: - .endif -00f5f9 f046 .dw XT_DOLITERAL -00f5fa 000a .dw 10 -00f5fb f56c .dw XT_BASE -00f5fc f093 .dw XT_STORE -00f5fd f026 .dw XT_EXIT - .include "words/hex.asm" - - ; Numeric IO - ; set base for numeric conversion to 10 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_HEX: -00f5fe ff03 .dw $ff03 -00f5ff 6568 -00f600 0078 .db "hex",0 -00f601 f5f2 .dw VE_HEAD - .set VE_HEAD = VE_HEX - XT_HEX: -00f602 f001 .dw DO_COLON - PFA_HEX: - .endif -00f603 f046 .dw XT_DOLITERAL -00f604 0010 .dw 16 -00f605 f56c .dw XT_BASE -00f606 f093 .dw XT_STORE -00f607 f026 .dw XT_EXIT - .include "words/bl.asm" - - ; Character IO - ; put ascii code of the blank to the stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BL: -00f608 ff02 .dw $ff02 -00f609 6c62 .db "bl" -00f60a f5fe .dw VE_HEAD - .set VE_HEAD = VE_BL - XT_BL: -00f60b f054 .dw PFA_DOVARIABLE - PFA_BL: - .endif -00f60c 0020 .dw 32 - - .include "words/turnkey.asm" - - ; System Value - ; Deferred action during startup/reset - VE_TURNKEY: -00f60d ff07 .dw $ff07 -00f60e 7574 -00f60f 6e72 -00f610 656b -00f611 0079 .db "turnkey",0 -00f612 f608 .dw VE_HEAD - .set VE_HEAD = VE_TURNKEY - XT_TURNKEY: -00f613 fc2e .dw PFA_DODEFER1 - PFA_TURNKEY: -00f614 0054 .dw CFG_TURNKEY -00f615 fbcf .dw XT_EDEFERFETCH -00f616 fbd9 .dw XT_EDEFERSTORE - ;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/slashmod.asm" - - ; Arithmetics - ; signed division n1/n2 with remainder and quotient - VE_SLASHMOD: -00f617 ff04 .dw $ff04 -00f618 6d2f -00f619 646f .db "/mod" -00f61a f60d .dw VE_HEAD - .set VE_HEAD = VE_SLASHMOD - XT_SLASHMOD: -00f61b f61c .dw PFA_SLASHMOD - PFA_SLASHMOD: -00f61c 019c movw temp2, tosl - -00f61d 9109 ld temp0, Y+ -00f61e 9119 ld temp1, Y+ - -00f61f 2f41 mov temp6,temp1 ;move dividend High to sign register -00f620 2743 eor temp6,temp3 ;xor divisor High with sign register -00f621 ff17 sbrs temp1,7 ;if MSB in dividend set -00f622 c004 rjmp PFA_SLASHMOD_1 -00f623 9510 com temp1 ; change sign of dividend -00f624 9500 com temp0 -00f625 5f0f subi temp0,low(-1) -00f626 4f1f sbci temp1,high(-1) - PFA_SLASHMOD_1: -00f627 ff37 sbrs temp3,7 ;if MSB in divisor set -00f628 c004 rjmp PFA_SLASHMOD_2 -00f629 9530 com temp3 ; change sign of divisor -00f62a 9520 com temp2 -00f62b 5f2f subi temp2,low(-1) -00f62c 4f3f sbci temp3,high(-1) -00f62d 24ee PFA_SLASHMOD_2: clr temp4 ;clear remainder Low byte -00f62e 18ff sub temp5,temp5;clear remainder High byte and carry -00f62f e151 ldi temp7,17 ;init loop counter - -00f630 1f00 PFA_SLASHMOD_3: rol temp0 ;shift left dividend -00f631 1f11 rol temp1 -00f632 955a dec temp7 ;decrement counter -00f633 f439 brne PFA_SLASHMOD_5 ;if done -00f634 ff47 sbrs temp6,7 ; if MSB in sign register set -00f635 c004 rjmp PFA_SLASHMOD_4 -00f636 9510 com temp1 ; change sign of result -00f637 9500 com temp0 -00f638 5f0f subi temp0,low(-1) -00f639 4f1f sbci temp1,high(-1) -00f63a c00b PFA_SLASHMOD_4: rjmp PFA_SLASHMODmod_done ; return -00f63b 1cee PFA_SLASHMOD_5: rol temp4 ;shift dividend into remainder -00f63c 1cff rol temp5 -00f63d 1ae2 sub temp4,temp2 ;remainder = remainder - divisor -00f63e 0af3 sbc temp5,temp3 ; -00f63f f420 brcc PFA_SLASHMOD_6 ;if result negative -00f640 0ee2 add temp4,temp2 ; restore remainder -00f641 1ef3 adc temp5,temp3 -00f642 9488 clc ; clear carry to be shifted into result -00f643 cfec rjmp PFA_SLASHMOD_3 ;else -00f644 9408 PFA_SLASHMOD_6: sec ; set carry to be shifted into result -00f645 cfea rjmp PFA_SLASHMOD_3 - - PFA_SLASHMODmod_done: - ; put remainder on stack -00f646 92fa st -Y,temp5 -00f647 92ea st -Y,temp4 - - ; put quotient on stack -00f648 01c8 movw tosl, temp0 -00f649 c9bb jmp_ DO_NEXT - .include "words/uslashmod.asm" - - ; Arithmetics - ; unsigned division with remainder - VE_USLASHMOD: -00f64a ff05 .dw $ff05 -00f64b 2f75 -00f64c 6f6d -00f64d 0064 .db "u/mod",0 -00f64e f617 .dw VE_HEAD - .set VE_HEAD = VE_USLASHMOD - XT_USLASHMOD: -00f64f f001 .dw DO_COLON - PFA_USLASHMOD: -00f650 f111 .dw XT_TO_R -00f651 f166 .dw XT_ZERO -00f652 f108 .dw XT_R_FROM -00f653 f1d4 .dw XT_UMSLASHMOD -00f654 f026 .dw XT_EXIT - .include "words/negate.asm" - - ; Logic - ; 2-complement - VE_NEGATE: -00f655 ff06 .dw $ff06 -00f656 656e -00f657 6167 -00f658 6574 .db "negate" -00f659 f64a .dw VE_HEAD - .set VE_HEAD = VE_NEGATE - XT_NEGATE: -00f65a f001 .dw DO_COLON - PFA_NEGATE: -00f65b f20f .dw XT_INVERT -00f65c f241 .dw XT_1PLUS -00f65d f026 .dw XT_EXIT - .include "words/slash.asm" - - ; Arithmetics - ; divide n1 by n2. giving the quotient - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_SLASH: -00f65e ff01 .dw $ff01 -00f65f 002f .db "/",0 -00f660 f655 .dw VE_HEAD - .set VE_HEAD = VE_SLASH - XT_SLASH: -00f661 f001 .dw DO_COLON - PFA_SLASH: - .endif -00f662 f61b .dw XT_SLASHMOD -00f663 f102 .dw XT_NIP -00f664 f026 .dw XT_EXIT - - .include "words/mod.asm" - - ; Arithmetics - ; divide n1 by n2 giving the remainder n3 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_MOD: -00f665 ff03 .dw $ff03 -00f666 6f6d -00f667 0064 .db "mod",0 -00f668 f65e .dw VE_HEAD - .set VE_HEAD = VE_MOD - XT_MOD: -00f669 f001 .dw DO_COLON - PFA_MOD: - .endif -00f66a f61b .dw XT_SLASHMOD -00f66b f0eb .dw XT_DROP -00f66c f026 .dw XT_EXIT - .include "words/abs.asm" - - ; DUP ?NEGATE ; - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ABS: -00f66d ff03 .dw $ff03 -00f66e 6261 -00f66f 0073 .db "abs",0 -00f670 f665 .dw VE_HEAD - .set VE_HEAD = VE_ABS - XT_ABS: -00f671 f001 .dw DO_COLON - PFA_ABS: - - .endif - -00f672 f0c3 -00f673 f250 -00f674 f026 .DW XT_DUP,XT_QNEGATE,XT_EXIT - .include "words/min.asm" - - ; Compare - ; compare two values leave the smaller one - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_MIN: -00f675 ff03 .dw $ff03 -00f676 696d -00f677 006e .db "min",0 -00f678 f66d .dw VE_HEAD - .set VE_HEAD = VE_MIN - XT_MIN: -00f679 f001 .dw DO_COLON - PFA_MIN: - .endif -00f67a f580 .dw XT_2DUP -00f67b f18a .dw XT_GREATER -00f67c f03f .dw XT_DOCONDBRANCH -00f67d f67f DEST(PFA_MIN1) -00f67e f0d6 .dw XT_SWAP - PFA_MIN1: -00f67f f0eb .dw XT_DROP -00f680 f026 .dw XT_EXIT - .include "words/max.asm" - - ; Compare - ; compare two values, leave the bigger one - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_MAX: -00f681 ff03 .dw $ff03 -00f682 616d -00f683 0078 .db "max",0 -00f684 f675 .dw VE_HEAD - .set VE_HEAD = VE_MAX - XT_MAX: -00f685 f001 .dw DO_COLON - PFA_MAX: - - .endif -00f686 f580 .dw XT_2DUP -00f687 f180 .dw XT_LESS -00f688 f03f .dw XT_DOCONDBRANCH -00f689 f68b DEST(PFA_MAX1) -00f68a f0d6 .dw XT_SWAP - PFA_MAX1: -00f68b f0eb .dw XT_DROP -00f68c f026 .dw XT_EXIT - .include "words/within.asm" - - ; Compare - ; check if n is within min..max - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_WITHIN: -00f68d ff06 .dw $ff06 -00f68e 6977 -00f68f 6874 -00f690 6e69 .db "within" -00f691 f681 .dw VE_HEAD - .set VE_HEAD = VE_WITHIN - XT_WITHIN: -00f692 f001 .dw DO_COLON - PFA_WITHIN: - .endif -00f693 f0e1 .dw XT_OVER -00f694 f1a5 .dw XT_MINUS -00f695 f111 .dw XT_TO_R -00f696 f1a5 .dw XT_MINUS -00f697 f108 .dw XT_R_FROM -00f698 f16e .dw XT_ULESS -00f699 f026 .dw XT_EXIT - - .include "words/to-upper.asm" - - ; String - ; if c is a lowercase letter convert it to uppercase - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TOUPPER: -00f69a ff07 .dw $ff07 -00f69b 6f74 -00f69c 7075 -00f69d 6570 -00f69e 0072 .db "toupper",0 -00f69f f68d .dw VE_HEAD - .set VE_HEAD = VE_TOUPPER - XT_TOUPPER: -00f6a0 f001 .dw DO_COLON - PFA_TOUPPER: - .endif -00f6a1 f0c3 .dw XT_DUP -00f6a2 f046 .dw XT_DOLITERAL -00f6a3 0061 .dw 'a' -00f6a4 f046 .dw XT_DOLITERAL -00f6a5 007b .dw 'z'+1 -00f6a6 f692 .dw XT_WITHIN -00f6a7 f03f .dw XT_DOCONDBRANCH -00f6a8 f6ac DEST(PFA_TOUPPER0) -00f6a9 f046 .dw XT_DOLITERAL -00f6aa 00df .dw 223 ; inverse of 0x20: 0xdf -00f6ab f225 .dw XT_AND - PFA_TOUPPER0: -00f6ac f026 .dw XT_EXIT - .include "words/to-lower.asm" - - ; String - ; if C is an uppercase letter convert it to lowercase - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_TOLOWER: -00f6ad ff07 .dw $ff07 -00f6ae 6f74 -00f6af 6f6c -00f6b0 6577 -00f6b1 0072 .db "tolower",0 -00f6b2 f69a .dw VE_HEAD - .set VE_HEAD = VE_TOLOWER - XT_TOLOWER: -00f6b3 f001 .dw DO_COLON - PFA_TOLOWER: - .endif -00f6b4 f0c3 .dw XT_DUP -00f6b5 f046 .dw XT_DOLITERAL -00f6b6 0041 .dw 'A' -00f6b7 f046 .dw XT_DOLITERAL -00f6b8 005b .dw 'Z'+1 -00f6b9 f692 .dw XT_WITHIN -00f6ba f03f .dw XT_DOCONDBRANCH -00f6bb f6bf DEST(PFA_TOLOWER0) -00f6bc f046 .dw XT_DOLITERAL -00f6bd 0020 .dw 32 -00f6be f22e .dw XT_OR - PFA_TOLOWER0: -00f6bf f026 .dw XT_EXIT - ;;;;;;;;;;;;;;;;;;;;;; - .include "words/hld.asm" - - ; Numeric IO - ; pointer to current write position in the Pictured Numeric Output buffer - VE_HLD: -00f6c0 ff03 .dw $ff03 -00f6c1 6c68 -00f6c2 0064 .db "hld",0 -00f6c3 f6ad .dw VE_HEAD - .set VE_HEAD = VE_HLD - XT_HLD: -00f6c4 f054 .dw PFA_DOVARIABLE - PFA_HLD: -00f6c5 013f .dw ram_hld - - .dseg -00013f ram_hld: .byte 2 - .cseg - .include "words/hold.asm" - - ; Numeric IO - ; prepend character to pictured numeric output buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_HOLD: -00f6c6 ff04 .dw $ff04 -00f6c7 6f68 -00f6c8 646c .db "hold" -00f6c9 f6c0 .dw VE_HEAD - .set VE_HEAD = VE_HOLD - XT_HOLD: -00f6ca f001 .dw DO_COLON - PFA_HOLD: - .endif -00f6cb f6c4 .dw XT_HLD -00f6cc f0c3 .dw XT_DUP -00f6cd f08b .dw XT_FETCH -00f6ce f247 .dw XT_1MINUS -00f6cf f0c3 .dw XT_DUP -00f6d0 f111 .dw XT_TO_R -00f6d1 f0d6 .dw XT_SWAP -00f6d2 f093 .dw XT_STORE -00f6d3 f108 .dw XT_R_FROM -00f6d4 f09f .dw XT_CSTORE -00f6d5 f026 .dw XT_EXIT - .include "words/less-sharp.asm" ; <# - - ; Numeric IO - ; initialize the pictured numeric output conversion process - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_L_SHARP: -00f6d6 ff02 .dw $ff02 -00f6d7 233c .db "<#" -00f6d8 f6c6 .dw VE_HEAD - .set VE_HEAD = VE_L_SHARP - XT_L_SHARP: -00f6d9 f001 .dw DO_COLON - PFA_L_SHARP: - .endif -00f6da f59f .dw XT_PAD -00f6db f6c4 .dw XT_HLD -00f6dc f093 .dw XT_STORE -00f6dd f026 .dw XT_EXIT - .include "words/sharp.asm" - - ; Numeric IO - ; pictured numeric output: convert one digit - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_SHARP: -00f6de ff01 .dw $ff01 -00f6df 0023 .db "#",0 -00f6e0 f6d6 .dw VE_HEAD - .set VE_HEAD = VE_SHARP - XT_SHARP: -00f6e1 f001 .dw DO_COLON - PFA_SHARP: - .endif -00f6e2 f56c .dw XT_BASE -00f6e3 f08b .dw XT_FETCH -00f6e4 f75e .dw XT_UDSLASHMOD -00f6e5 f0f3 .dw XT_ROT -00f6e6 f046 .dw XT_DOLITERAL -00f6e7 0009 .dw 9 -00f6e8 f0e1 .dw XT_OVER -00f6e9 f180 .dw XT_LESS -00f6ea f03f .dw XT_DOCONDBRANCH -00f6eb f6ef DEST(PFA_SHARP1) -00f6ec f046 .dw XT_DOLITERAL -00f6ed 0007 .dw 7 -00f6ee f1af .dw XT_PLUS - PFA_SHARP1: -00f6ef f046 .dw XT_DOLITERAL -00f6f0 0030 .dw 48 ; ASCII 0 -00f6f1 f1af .dw XT_PLUS -00f6f2 f6ca .dw XT_HOLD -00f6f3 f026 .dw XT_EXIT - ; : # ( ud1 -- ud2 ) - ; base @ ud/mod rot 9 over < if 7 + then 30 + hold ; - .include "words/sharp-s.asm" - - ; Numeric IO - ; pictured numeric output: convert all digits until 0 (zero) is reached - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SHARP_S: -00f6f4 ff02 .dw $ff02 -00f6f5 7323 .db "#s" -00f6f6 f6de .dw VE_HEAD - .set VE_HEAD = VE_SHARP_S - XT_SHARP_S: -00f6f7 f001 .dw DO_COLON - PFA_SHARP_S: - .endif - NUMS1: -00f6f8 f6e1 .dw XT_SHARP -00f6f9 f580 .dw XT_2DUP -00f6fa f22e .dw XT_OR -00f6fb f12c .dw XT_ZEROEQUAL -00f6fc f03f .dw XT_DOCONDBRANCH -00f6fd f6f8 DEST(NUMS1) ; PFA_SHARP_S -00f6fe f026 .dw XT_EXIT - .include "words/sharp-greater.asm" ; #> - - ; Numeric IO - ; Pictured Numeric Output: convert PNO buffer into an string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SHARP_G: -00f6ff ff02 .dw $ff02 -00f700 3e23 .db "#>" -00f701 f6f4 .dw VE_HEAD - .set VE_HEAD = VE_SHARP_G - XT_SHARP_G: -00f702 f001 .dw DO_COLON - PFA_SHARP_G: - .endif -00f703 f589 .dw XT_2DROP -00f704 f6c4 .dw XT_HLD -00f705 f08b .dw XT_FETCH -00f706 f59f .dw XT_PAD -00f707 f0e1 .dw XT_OVER -00f708 f1a5 .dw XT_MINUS -00f709 f026 .dw XT_EXIT - .include "words/sign.asm" - - ; Numeric IO - ; place a - in HLD if n is negative - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SIGN: -00f70a ff04 .dw $ff04 -00f70b 6973 -00f70c 6e67 .db "sign" -00f70d f6ff .dw VE_HEAD - .set VE_HEAD = VE_SIGN - XT_SIGN: -00f70e f001 .dw DO_COLON - PFA_SIGN: - .endif -00f70f f133 .dw XT_ZEROLESS -00f710 f03f .dw XT_DOCONDBRANCH -00f711 f715 DEST(PFA_SIGN1) -00f712 f046 .dw XT_DOLITERAL -00f713 002d .dw 45 ; ascii - -00f714 f6ca .dw XT_HOLD - PFA_SIGN1: -00f715 f026 .dw XT_EXIT - .include "words/d-dot-r.asm" - - ; Numeric IO - ; singed PNO with double cell numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DDOTR: -00f716 ff03 .dw $ff03 -00f717 2e64 -00f718 0072 .db "d.r",0 -00f719 f70a .dw VE_HEAD - .set VE_HEAD = VE_DDOTR - XT_DDOTR: -00f71a f001 .dw DO_COLON - PFA_DDOTR: - - .endif -00f71b f111 .dw XT_TO_R -00f71c f591 .dw XT_TUCK -00f71d fcef .dw XT_DABS -00f71e f6d9 .dw XT_L_SHARP -00f71f f6f7 .dw XT_SHARP_S -00f720 f0f3 .dw XT_ROT -00f721 f70e .dw XT_SIGN -00f722 f702 .dw XT_SHARP_G -00f723 f108 .dw XT_R_FROM -00f724 f0e1 .dw XT_OVER -00f725 f1a5 .dw XT_MINUS -00f726 f806 .dw XT_SPACES -00f727 f816 .dw XT_TYPE -00f728 f026 .dw XT_EXIT - ; : d.r ( d n -- ) - ; >r swap over dabs <# #s rot sign #> r> over - spaces type ; - .include "words/dot-r.asm" - - ; Numeric IO - ; singed PNO with single cell numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOTR: -00f729 ff02 .dw $ff02 -00f72a 722e .db ".r" -00f72b f716 .dw VE_HEAD - .set VE_HEAD = VE_DOTR - XT_DOTR: -00f72c f001 .dw DO_COLON - PFA_DOTR: - - .endif -00f72d f111 .dw XT_TO_R -00f72e fd82 .dw XT_S2D -00f72f f108 .dw XT_R_FROM -00f730 f71a .dw XT_DDOTR -00f731 f026 .dw XT_EXIT - ; : .r ( s n -- ) >r s>d r> d.r ; - .include "words/d-dot.asm" - - ; Numeric IO - ; singed PNO with double cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DDOT: -00f732 ff02 .dw $ff02 -00f733 2e64 .db "d." -00f734 f729 .dw VE_HEAD - .set VE_HEAD = VE_DDOT - XT_DDOT: -00f735 f001 .dw DO_COLON - PFA_DDOT: - - .endif -00f736 f166 .dw XT_ZERO -00f737 f71a .dw XT_DDOTR -00f738 f7fd .dw XT_SPACE -00f739 f026 .dw XT_EXIT - ; : d. ( d -- ) 0 d.r space ; - .include "words/dot.asm" - - ; Numeric IO - ; singed PNO with single cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_DOT: -00f73a ff01 .dw $ff01 -00f73b 002e .db ".",0 -00f73c f732 .dw VE_HEAD - .set VE_HEAD = VE_DOT - XT_DOT: -00f73d f001 .dw DO_COLON - PFA_DOT: - .endif -00f73e fd82 .dw XT_S2D -00f73f f735 .dw XT_DDOT -00f740 f026 .dw XT_EXIT - ; : . ( s -- ) s>d d. ; - .include "words/ud-dot.asm" - - ; Numeric IO - ; unsigned PNO with double cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDDOT: -00f741 ff03 .dw $ff03 -00f742 6475 -00f743 002e .db "ud.",0 -00f744 f73a .dw VE_HEAD - .set VE_HEAD = VE_UDDOT - XT_UDDOT: -00f745 f001 .dw DO_COLON - PFA_UDDOT: - .endif -00f746 f166 .dw XT_ZERO -00f747 f74e .dw XT_UDDOTR -00f748 f7fd .dw XT_SPACE -00f749 f026 .dw XT_EXIT - .include "words/ud-dot-r.asm" - - ; Numeric IO - ; unsigned PNO with double cell numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_UDDOTR: -00f74a ff04 .dw $ff04 -00f74b 6475 -00f74c 722e .db "ud.r" -00f74d f741 .dw VE_HEAD - .set VE_HEAD = VE_UDDOTR - XT_UDDOTR: -00f74e f001 .dw DO_COLON - PFA_UDDOTR: - .endif -00f74f f111 .dw XT_TO_R -00f750 f6d9 .dw XT_L_SHARP -00f751 f6f7 .dw XT_SHARP_S -00f752 f702 .dw XT_SHARP_G -00f753 f108 .dw XT_R_FROM -00f754 f0e1 .dw XT_OVER -00f755 f1a5 .dw XT_MINUS -00f756 f806 .dw XT_SPACES -00f757 f816 .dw XT_TYPE -00f758 f026 .dw XT_EXIT - .include "words/ud-slash-mod.asm" - - ; Arithmetics - ; unsigned double cell division with remainder - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDSLASHMOD: -00f759 ff06 .dw $ff06 -00f75a 6475 -00f75b 6d2f -00f75c 646f .db "ud/mod" -00f75d f74a .dw VE_HEAD - .set VE_HEAD = VE_UDSLASHMOD - XT_UDSLASHMOD: -00f75e f001 .dw DO_COLON - PFA_UDSLASHMOD: - .endif -00f75f f111 .dw XT_TO_R -00f760 f166 .dw XT_ZERO -00f761 f11a .dw XT_R_FETCH -00f762 f1d4 .dw XT_UMSLASHMOD -00f763 f108 .dw XT_R_FROM -00f764 f0d6 .dw XT_SWAP -00f765 f111 .dw XT_TO_R -00f766 f1d4 .dw XT_UMSLASHMOD -00f767 f108 .dw XT_R_FROM -00f768 f026 .dw XT_EXIT - .include "words/digit-q.asm" - - ; Numeric IO - ; tries to convert a character to a number, set flag accordingly - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DIGITQ: -00f769 ff06 .dw $ff06 -00f76a 6964 -00f76b 6967 -00f76c 3f74 .db "digit?" -00f76d f759 .dw VE_HEAD - .set VE_HEAD = VE_DIGITQ - XT_DIGITQ: -00f76e f001 .dw DO_COLON - PFA_DIGITQ: - .endif -00f76f f6a0 .dw XT_TOUPPER -00f770 f0c3 -00f771 f046 -00f772 0039 -00f773 f18a -00f774 f046 -00f775 0100 .DW XT_DUP,XT_DOLITERAL,57,XT_GREATER,XT_DOLITERAL,256 -00f776 f225 -00f777 f1af -00f778 f0c3 -00f779 f046 -00f77a 0140 -00f77b f18a .DW XT_AND,XT_PLUS,XT_DUP,XT_DOLITERAL,320,XT_GREATER -00f77c f046 -00f77d 0107 -00f77e f225 -00f77f f1a5 -00f780 f046 -00f781 0030 .DW XT_DOLITERAL,263,XT_AND,XT_MINUS,XT_DOLITERAL,48 -00f782 f1a5 -00f783 f0c3 -00f784 f56c -00f785 f08b -00f786 f16e .DW XT_MINUS,XT_DUP,XT_BASE,XT_FETCH,XT_ULESS -00f787 f026 .DW XT_EXIT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/do-sliteral.asm" - - ; String - ; runtime portion of sliteral - ;VE_DOSLITERAL: - ; .dw $ff0a - ; .db "(sliteral)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOSLITERAL - XT_DOSLITERAL: -00f788 f001 .dw DO_COLON - PFA_DOSLITERAL: -00f789 f11a .dw XT_R_FETCH ; ( -- addr ) -00f78a f7e7 .dw XT_ICOUNT -00f78b f108 .dw XT_R_FROM -00f78c f0e1 .dw XT_OVER ; ( -- addr' n addr n) -00f78d f241 .dw XT_1PLUS -00f78e f216 .dw XT_2SLASH ; ( -- addr' n addr k ) -00f78f f1af .dw XT_PLUS ; ( -- addr' n addr'' ) -00f790 f241 .dw XT_1PLUS -00f791 f111 .dw XT_TO_R ; ( -- ) -00f792 f026 .dw XT_EXIT - .include "words/scomma.asm" - - ; Compiler - ; compiles a string from RAM to Flash - VE_SCOMMA: -00f793 ff02 .dw $ff02 -00f794 2c73 .db "s",$2c -00f795 f769 .dw VE_HEAD - .set VE_HEAD = VE_SCOMMA - XT_SCOMMA: -00f796 f001 .dw DO_COLON - PFA_SCOMMA: -00f797 f0c3 .dw XT_DUP -00f798 f79a .dw XT_DOSCOMMA -00f799 f026 .dw XT_EXIT - - ; ( addr len len' -- ) - ; Compiler - ; compiles a string from RAM to Flash - ;VE_DOSCOMMA: - ; .dw $ff04 - ; .db "(s",$2c,")" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOSCOMMA - XT_DOSCOMMA: -00f79a f001 .dw DO_COLON - PFA_DOSCOMMA: -00f79b 01db .dw XT_COMMA -00f79c f0c3 .dw XT_DUP ; ( --addr len len) -00f79d f216 .dw XT_2SLASH ; ( -- addr len len/2 -00f79e f591 .dw XT_TUCK ; ( -- addr len/2 len len/2 -00f79f f21d .dw XT_2STAR ; ( -- addr len/2 len len' -00f7a0 f1a5 .dw XT_MINUS ; ( -- addr len/2 rem -00f7a1 f111 .dw XT_TO_R -00f7a2 f166 .dw XT_ZERO -00f7a3 029a .dw XT_QDOCHECK -00f7a4 f03f .dw XT_DOCONDBRANCH -00f7a5 f7ad .dw PFA_SCOMMA2 -00f7a6 f2ad .dw XT_DODO - PFA_SCOMMA1: -00f7a7 f0c3 .dw XT_DUP ; ( -- addr addr ) -00f7a8 f08b .dw XT_FETCH ; ( -- addr c1c2 ) -00f7a9 01db .dw XT_COMMA ; ( -- addr ) -00f7aa f579 .dw XT_CELLPLUS ; ( -- addr+cell ) -00f7ab f2db .dw XT_DOLOOP -00f7ac f7a7 .dw PFA_SCOMMA1 - PFA_SCOMMA2: -00f7ad f108 .dw XT_R_FROM -00f7ae f13a .dw XT_GREATERZERO -00f7af f03f .dw XT_DOCONDBRANCH -00f7b0 f7b4 .dw PFA_SCOMMA3 -00f7b1 f0c3 .dw XT_DUP ; well, tricky -00f7b2 f0aa .dw XT_CFETCH -00f7b3 01db .dw XT_COMMA - PFA_SCOMMA3: -00f7b4 f0eb .dw XT_DROP ; ( -- ) -00f7b5 f026 .dw XT_EXIT - .include "words/itype.asm" - - ; Tools - ; reads string from flash and prints it - VE_ITYPE: -00f7b6 ff05 .dw $ff05 -00f7b7 7469 -00f7b8 7079 -00f7b9 0065 .db "itype",0 -00f7ba f793 .dw VE_HEAD - .set VE_HEAD = VE_ITYPE - XT_ITYPE: -00f7bb f001 .dw DO_COLON - PFA_ITYPE: -00f7bc f0c3 .dw XT_DUP ; ( --addr len len) -00f7bd f216 .dw XT_2SLASH ; ( -- addr len len/2 -00f7be f591 .dw XT_TUCK ; ( -- addr len/2 len len/2 -00f7bf f21d .dw XT_2STAR ; ( -- addr len/2 len len' -00f7c0 f1a5 .dw XT_MINUS ; ( -- addr len/2 rem -00f7c1 f111 .dw XT_TO_R -00f7c2 f166 .dw XT_ZERO -00f7c3 029a .dw XT_QDOCHECK -00f7c4 f03f .dw XT_DOCONDBRANCH -00f7c5 f7cf .dw PFA_ITYPE2 -00f7c6 f2ad .dw XT_DODO - PFA_ITYPE1: -00f7c7 f0c3 .dw XT_DUP ; ( -- addr addr ) -00f7c8 f3e3 .dw XT_FETCHI ; ( -- addr c1c2 ) -00f7c9 f0c3 .dw XT_DUP -00f7ca f7dc .dw XT_LOWEMIT -00f7cb f7d8 .dw XT_HIEMIT -00f7cc f241 .dw XT_1PLUS ; ( -- addr+cell ) -00f7cd f2db .dw XT_DOLOOP -00f7ce f7c7 .dw PFA_ITYPE1 - PFA_ITYPE2: -00f7cf f108 .dw XT_R_FROM -00f7d0 f13a .dw XT_GREATERZERO -00f7d1 f03f .dw XT_DOCONDBRANCH -00f7d2 f7d6 .dw PFA_ITYPE3 -00f7d3 f0c3 .dw XT_DUP ; make sure the drop below has always something to do -00f7d4 f3e3 .dw XT_FETCHI -00f7d5 f7dc .dw XT_LOWEMIT - PFA_ITYPE3: -00f7d6 f0eb .dw XT_DROP -00f7d7 f026 .dw XT_EXIT - - ; ( w -- ) - ; R( -- ) - ; content of cell fetched on stack. - ;VE_HIEMIT: - ; .dw $ff06 - ; .db "hiemit" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_HIEMIT - XT_HIEMIT: -00f7d8 f001 .dw DO_COLON - PFA_HIEMIT: -00f7d9 f30b .dw XT_BYTESWAP -00f7da f7dc .dw XT_LOWEMIT -00f7db f026 .dw XT_EXIT - - ; ( w -- ) - ; R( -- ) - ; content of cell fetched on stack. - ;VE_LOWEMIT: - ; .dw $ff07 - ; .db "lowemit" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_LOWEMIT - XT_LOWEMIT: -00f7dc f001 .dw DO_COLON - PFA_LOWEMIT: -00f7dd f046 .dw XT_DOLITERAL -00f7de 00ff .dw $00ff -00f7df f225 .dw XT_AND -00f7e0 f5a9 .dw XT_EMIT -00f7e1 f026 .dw XT_EXIT - .include "words/icount.asm" - - ; Tools - ; get count information out of a counted string in flash - VE_ICOUNT: -00f7e2 ff06 .dw $ff06 -00f7e3 6369 -00f7e4 756f -00f7e5 746e .db "icount" -00f7e6 f7b6 .dw VE_HEAD - .set VE_HEAD = VE_ICOUNT - XT_ICOUNT: -00f7e7 f001 .dw DO_COLON - PFA_ICOUNT: -00f7e8 f0c3 .dw XT_DUP -00f7e9 f241 .dw XT_1PLUS -00f7ea f0d6 .dw XT_SWAP -00f7eb f3e3 .dw XT_FETCHI -00f7ec f026 .dw XT_EXIT - .include "words/cr.asm" - - ; Character IO - ; cause subsequent output appear at the beginning of the next line - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CR: -00f7ed ff02 .dw 0xff02 -00f7ee 7263 .db "cr" -00f7ef f7e2 .dw VE_HEAD - .set VE_HEAD = VE_CR - XT_CR: -00f7f0 f001 .dw DO_COLON - PFA_CR: - .endif - -00f7f1 f046 .dw XT_DOLITERAL -00f7f2 000d .dw 13 -00f7f3 f5a9 .dw XT_EMIT -00f7f4 f046 .dw XT_DOLITERAL -00f7f5 000a .dw 10 -00f7f6 f5a9 .dw XT_EMIT -00f7f7 f026 .dw XT_EXIT - .include "words/space.asm" - - ; Character IO - ; emits a space (bl) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SPACE: -00f7f8 ff05 .dw $ff05 -00f7f9 7073 -00f7fa 6361 -00f7fb 0065 .db "space",0 -00f7fc f7ed .dw VE_HEAD - .set VE_HEAD = VE_SPACE - XT_SPACE: -00f7fd f001 .dw DO_COLON - PFA_SPACE: - .endif -00f7fe f60b .dw XT_BL -00f7ff f5a9 .dw XT_EMIT -00f800 f026 .dw XT_EXIT - .include "words/spaces.asm" - - ; Character IO - ; emits n space(s) (bl) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SPACES: -00f801 ff06 .dw $ff06 -00f802 7073 -00f803 6361 -00f804 7365 .db "spaces" -00f805 f7f8 .dw VE_HEAD - .set VE_HEAD = VE_SPACES - XT_SPACES: -00f806 f001 .dw DO_COLON - PFA_SPACES: - - .endif - ;C SPACES n -- output n spaces - ; BEGIN DUP 0> WHILE SPACE 1- REPEAT DROP ; -00f807 f166 -00f808 f685 .DW XT_ZERO, XT_MAX -00f809 f0c3 -00f80a f03f SPCS1: .DW XT_DUP,XT_DOCONDBRANCH -00f80b f810 DEST(SPCS2) -00f80c f7fd -00f80d f247 -00f80e f035 .DW XT_SPACE,XT_1MINUS,XT_DOBRANCH -00f80f f809 DEST(SPCS1) -00f810 f0eb -00f811 f026 SPCS2: .DW XT_DROP,XT_EXIT - .include "words/type.asm" - - ; Character IO - ; print a RAM based string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TYPE: -00f812 ff04 .dw $ff04 -00f813 7974 -00f814 6570 .db "type" -00f815 f801 .dw VE_HEAD - .set VE_HEAD = VE_TYPE - XT_TYPE: -00f816 f001 .dw DO_COLON - PFA_TYPE: - - .endif -00f817 fd79 .dw XT_BOUNDS -00f818 029a .dw XT_QDOCHECK -00f819 f03f .dw XT_DOCONDBRANCH -00f81a f821 DEST(PFA_TYPE2) -00f81b f2ad .dw XT_DODO - PFA_TYPE1: -00f81c f2be .dw XT_I -00f81d f0aa .dw XT_CFETCH -00f81e f5a9 .dw XT_EMIT -00f81f f2db .dw XT_DOLOOP -00f820 f81c DEST(PFA_TYPE1) - PFA_TYPE2: -00f821 f026 .dw XT_EXIT - .include "words/tick.asm" - - ; Dictionary - ; search dictionary for name, return XT or throw an exception -13 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TICK: -00f822 ff01 .dw $ff01 -00f823 0027 .db "'",0 -00f824 f812 .dw VE_HEAD - .set VE_HEAD = VE_TICK - XT_TICK: -00f825 f001 .dw DO_COLON - PFA_TICK: - .endif -00f826 f9cf .dw XT_PARSENAME -00f827 fae7 .dw XT_FORTHRECOGNIZER -00f828 faf2 .dw XT_RECOGNIZE - ; a word is tickable unless DT:TOKEN is DT:NULL or - ; the interpret action is a NOOP -00f829 f0c3 .dw XT_DUP -00f82a fb65 .dw XT_DT_NULL -00f82b fd9a .dw XT_EQUAL -00f82c f0d6 .dw XT_SWAP -00f82d f3e3 .dw XT_FETCHI -00f82e f046 .dw XT_DOLITERAL -00f82f fb9a .dw XT_NOOP -00f830 fd9a .dw XT_EQUAL -00f831 f22e .dw XT_OR -00f832 f03f .dw XT_DOCONDBRANCH -00f833 f837 DEST(PFA_TICK1) -00f834 f046 .dw XT_DOLITERAL -00f835 fff3 .dw -13 -00f836 f85c .dw XT_THROW - PFA_TICK1: -00f837 f0eb .dw XT_DROP -00f838 f026 .dw XT_EXIT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/handler.asm" - - ; Exceptions - ; USER variable used by catch/throw - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_HANDLER: -00f839 ff07 .dw $ff07 -00f83a 6168 -00f83b 646e -00f83c 656c -00f83d 0072 .db "handler",0 -00f83e f822 .dw VE_HEAD - .set VE_HEAD = VE_HANDLER - XT_HANDLER: -00f83f f067 .dw PFA_DOUSER - PFA_HANDLER: - .endif -00f840 000a .dw USER_HANDLER - .include "words/catch.asm" - - ; Exceptions - ; execute XT and check for exceptions. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CATCH: -00f841 ff05 .dw $ff05 -00f842 6163 -00f843 6374 -00f844 0068 .db "catch",0 -00f845 f839 .dw VE_HEAD - .set VE_HEAD = VE_CATCH - XT_CATCH: -00f846 f001 .dw DO_COLON - PFA_CATCH: - .endif - - ; sp@ >r -00f847 f29f .dw XT_SP_FETCH -00f848 f111 .dw XT_TO_R - ; handler @ >r -00f849 f83f .dw XT_HANDLER -00f84a f08b .dw XT_FETCH -00f84b f111 .dw XT_TO_R - ; rp@ handler ! -00f84c f288 .dw XT_RP_FETCH -00f84d f83f .dw XT_HANDLER -00f84e f093 .dw XT_STORE -00f84f f030 .dw XT_EXECUTE - ; r> handler ! -00f850 f108 .dw XT_R_FROM -00f851 f83f .dw XT_HANDLER -00f852 f093 .dw XT_STORE -00f853 f108 .dw XT_R_FROM -00f854 f0eb .dw XT_DROP -00f855 f166 .dw XT_ZERO -00f856 f026 .dw XT_EXIT - .include "words/throw.asm" - - ; Exceptions - ; throw an exception - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_THROW: -00f857 ff05 .dw $ff05 -00f858 6874 -00f859 6f72 -00f85a 0077 .db "throw",0 -00f85b f841 .dw VE_HEAD - .set VE_HEAD = VE_THROW - XT_THROW: -00f85c f001 .dw DO_COLON - PFA_THROW: - .endif -00f85d f0c3 .dw XT_DUP -00f85e f12c .dw XT_ZEROEQUAL -00f85f f03f .dw XT_DOCONDBRANCH -00f860 f863 DEST(PFA_THROW1) -00f861 f0eb .dw XT_DROP -00f862 f026 .dw XT_EXIT - PFA_THROW1: -00f863 f83f .dw XT_HANDLER -00f864 f08b .dw XT_FETCH -00f865 f292 .dw XT_RP_STORE -00f866 f108 .dw XT_R_FROM -00f867 f83f .dw XT_HANDLER -00f868 f093 .dw XT_STORE -00f869 f108 .dw XT_R_FROM -00f86a f0d6 .dw XT_SWAP -00f86b f111 .dw XT_TO_R -00f86c f2a8 .dw XT_SP_STORE -00f86d f0eb .dw XT_DROP -00f86e f108 .dw XT_R_FROM -00f86f f026 .dw XT_EXIT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/cskip.asm" - - ; String - ; skips leading occurancies in string at addr1/n1 leaving addr2/n2 pointing to the 1st non-c character - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CSKIP: -00f870 ff05 .dw $ff05 -00f871 7363 -00f872 696b -00f873 0070 .db "cskip",0 -00f874 f857 .dw VE_HEAD - .set VE_HEAD = VE_CSKIP - XT_CSKIP: -00f875 f001 .dw DO_COLON - PFA_CSKIP: - .endif -00f876 f111 .dw XT_TO_R ; ( -- addr1 n1 ) - PFA_CSKIP1: -00f877 f0c3 .dw XT_DUP ; ( -- addr' n' n' ) -00f878 f03f .dw XT_DOCONDBRANCH ; ( -- addr' n') -00f879 f884 DEST(PFA_CSKIP2) -00f87a f0e1 .dw XT_OVER ; ( -- addr' n' addr' ) -00f87b f0aa .dw XT_CFETCH ; ( -- addr' n' c' ) -00f87c f11a .dw XT_R_FETCH ; ( -- addr' n' c' c ) -00f87d fd9a .dw XT_EQUAL ; ( -- addr' n' f ) -00f87e f03f .dw XT_DOCONDBRANCH ; ( -- addr' n') -00f87f f884 DEST(PFA_CSKIP2) -00f880 fda1 .dw XT_ONE -00f881 f9c0 .dw XT_SLASHSTRING -00f882 f035 .dw XT_DOBRANCH -00f883 f877 DEST(PFA_CSKIP1) - PFA_CSKIP2: -00f884 f108 .dw XT_R_FROM -00f885 f0eb .dw XT_DROP ; ( -- addr2 n2) -00f886 f026 .dw XT_EXIT - .include "words/cscan.asm" - - ; String - ; Scan string at addr1/n1 for the first occurance of c, leaving addr1/n2, char at n2 is first non-c character - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CSCAN: -00f887 ff05 .dw $ff05 -00f888 7363 -00f889 6163 -../../common\words/cscan.asm(12): warning: .cseg .db misalignment - padding zero byte -00f88a 006e .db "cscan" -00f88b f870 .dw VE_HEAD - .set VE_HEAD = VE_CSCAN - XT_CSCAN: -00f88c f001 .dw DO_COLON - PFA_CSCAN: - .endif -00f88d f111 .dw XT_TO_R -00f88e f0e1 .dw XT_OVER - PFA_CSCAN1: -00f88f f0c3 .dw XT_DUP -00f890 f0aa .dw XT_CFETCH -00f891 f11a .dw XT_R_FETCH -00f892 fd9a .dw XT_EQUAL -00f893 f12c .dw XT_ZEROEQUAL -00f894 f03f .dw XT_DOCONDBRANCH -00f895 f8a1 DEST(PFA_CSCAN2) -00f896 f0d6 .dw XT_SWAP -00f897 f247 .dw XT_1MINUS -00f898 f0d6 .dw XT_SWAP -00f899 f0e1 .dw XT_OVER -00f89a f133 .dw XT_ZEROLESS ; not negative -00f89b f12c .dw XT_ZEROEQUAL -00f89c f03f .dw XT_DOCONDBRANCH -00f89d f8a1 DEST(PFA_CSCAN2) -00f89e f241 .dw XT_1PLUS -00f89f f035 .dw XT_DOBRANCH -00f8a0 f88f DEST(PFA_CSCAN1) - PFA_CSCAN2: -00f8a1 f102 .dw XT_NIP -00f8a2 f0e1 .dw XT_OVER -00f8a3 f1a5 .dw XT_MINUS -00f8a4 f108 .dw XT_R_FROM -00f8a5 f0eb .dw XT_DROP -00f8a6 f026 .dw XT_EXIT - - ; : my-cscan ( addr len c -- addr len' ) - ; >r over ( -- addr len addr ) - ; begin - ; dup c@ r@ <> while - ; swap 1- swap over 0 >= while - ; 1+ - ; repeat then - ; nip over - r> drop - ; ; - .include "words/accept.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ACCEPT: -00f8a7 ff06 .dw $ff06 -00f8a8 6361 -00f8a9 6563 -00f8aa 7470 .db "accept" -00f8ab f887 .dw VE_HEAD - .set VE_HEAD = VE_ACCEPT - XT_ACCEPT: -00f8ac f001 .dw DO_COLON - PFA_ACCEPT: - - .endif -00f8ad f0e1 -00f8ae f1af -00f8af f247 -00f8b0 f0e1 .DW XT_OVER,XT_PLUS,XT_1MINUS,XT_OVER -00f8b1 f5ba -00f8b2 f0c3 -00f8b3 f8ed -00f8b4 f12c -00f8b5 f03f ACC1: .DW XT_KEY,XT_DUP,XT_CRLFQ,XT_ZEROEQUAL,XT_DOCONDBRANCH -00f8b6 f8df DEST(ACC5) -00f8b7 f0c3 -00f8b8 f046 -00f8b9 0008 -00f8ba fd9a -00f8bb f03f .DW XT_DUP,XT_DOLITERAL,8,XT_EQUAL,XT_DOCONDBRANCH -00f8bc f8cf DEST(ACC3) -00f8bd f0eb -00f8be f0f3 -00f8bf f580 -00f8c0 f18a -00f8c1 f111 -00f8c2 f0f3 -00f8c3 f0f3 -00f8c4 f108 -00f8c5 f03f .DW XT_DROP,XT_ROT,XT_2DUP,XT_GREATER,XT_TO_R,XT_ROT,XT_ROT,XT_R_FROM,XT_DOCONDBRANCH -00f8c6 f8cd DEST(ACC6) -00f8c7 f8e5 -00f8c8 f247 -00f8c9 f111 -00f8ca f0e1 -00f8cb f108 -00f8cc 016d .DW XT_BS,XT_1MINUS,XT_TO_R,XT_OVER,XT_R_FROM,XT_UMAX -00f8cd f035 ACC6: .DW XT_DOBRANCH -00f8ce f8dd DEST(ACC4) - - - ACC3: ; check for remaining control characters, replace them with blank -00f8cf f0c3 .dw XT_DUP ; ( -- addr k k ) -00f8d0 f60b .dw XT_BL -00f8d1 f180 .dw XT_LESS -00f8d2 f03f .dw XT_DOCONDBRANCH -00f8d3 f8d6 DEST(PFA_ACCEPT6) -00f8d4 f0eb .dw XT_DROP -00f8d5 f60b .dw XT_BL - PFA_ACCEPT6: -00f8d6 f0c3 -00f8d7 f5a9 -00f8d8 f0e1 -00f8d9 f09f -00f8da f241 -00f8db f0e1 -00f8dc 0179 .DW XT_DUP,XT_EMIT,XT_OVER,XT_CSTORE,XT_1PLUS,XT_OVER,XT_UMIN -00f8dd f035 ACC4: .DW XT_DOBRANCH -00f8de f8b1 DEST(ACC1) -00f8df f0eb -00f8e0 f102 -00f8e1 f0d6 -00f8e2 f1a5 -00f8e3 f7f0 -00f8e4 f026 ACC5: .DW XT_DROP,XT_NIP,XT_SWAP,XT_MINUS,XT_CR,XT_EXIT - - - ; ( -- ) - ; System - ; send a backspace character to overwrite the current char - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - ;VE_BS: - ; .dw $ff02 - ; .db "bs" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_BS - XT_BS: -00f8e5 f001 .dw DO_COLON - .endif -00f8e6 f046 .dw XT_DOLITERAL -00f8e7 0008 .dw 8 -00f8e8 f0c3 .dw XT_DUP -00f8e9 f5a9 .dw XT_EMIT -00f8ea f7fd .dw XT_SPACE -00f8eb f5a9 .dw XT_EMIT -00f8ec f026 .dw XT_EXIT - - - ; ( c -- f ) - ; System - ; is the character a line end character? - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_CRLFQ: - ; .dw $ff02 - ; .db "crlf?" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_CRLFQ - XT_CRLFQ: -00f8ed f001 .dw DO_COLON - .endif -00f8ee f0c3 .dw XT_DUP -00f8ef f046 .dw XT_DOLITERAL -00f8f0 000d .dw 13 -00f8f1 fd9a .dw XT_EQUAL -00f8f2 f0d6 .dw XT_SWAP -00f8f3 f046 .dw XT_DOLITERAL -00f8f4 000a .dw 10 -00f8f5 fd9a .dw XT_EQUAL -00f8f6 f22e .dw XT_OR -00f8f7 f026 .dw XT_EXIT - .include "words/refill.asm" - - ; System - ; refills the input buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_REFILL: -00f8f8 ff06 .dw $ff06 -00f8f9 6572 -00f8fa 6966 -00f8fb 6c6c .db "refill" -00f8fc f8a7 .dw VE_HEAD - .set VE_HEAD = VE_REFILL - XT_REFILL: -00f8fd fc2e .dw PFA_DODEFER1 - PFA_REFILL: - .endif -00f8fe 001a .dw USER_REFILL -00f8ff fbf7 .dw XT_UDEFERFETCH -00f900 fc03 .dw XT_UDEFERSTORE - .include "words/char.asm" - - ; Tools - ; copy the first character of the next word onto the stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CHAR: -00f901 ff04 .dw $ff04 -00f902 6863 -00f903 7261 .db "char" -00f904 f8f8 .dw VE_HEAD - .set VE_HEAD = VE_CHAR - XT_CHAR: -00f905 f001 .dw DO_COLON - PFA_CHAR: - .endif -00f906 f9cf .dw XT_PARSENAME -00f907 f0eb .dw XT_DROP -00f908 f0aa .dw XT_CFETCH -00f909 f026 .dw XT_EXIT - .include "words/number.asm" - - ; Numeric IO - ; convert a string at addr to a number - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NUMBER: -00f90a ff06 .dw $ff06 -00f90b 756e -00f90c 626d -00f90d 7265 .db "number" -00f90e f901 .dw VE_HEAD - .set VE_HEAD = VE_NUMBER - XT_NUMBER: -00f90f f001 .dw DO_COLON - PFA_NUMBER: - .endif -00f910 f56c .dw XT_BASE -00f911 f08b .dw XT_FETCH -00f912 f111 .dw XT_TO_R -00f913 f953 .dw XT_QSIGN -00f914 f111 .dw XT_TO_R -00f915 f966 .dw XT_SET_BASE -00f916 f953 .dw XT_QSIGN -00f917 f108 .dw XT_R_FROM -00f918 f22e .dw XT_OR -00f919 f111 .dw XT_TO_R - ; check whether something is left -00f91a f0c3 .dw XT_DUP -00f91b f12c .dw XT_ZEROEQUAL -00f91c f03f .dw XT_DOCONDBRANCH -00f91d f926 DEST(PFA_NUMBER0) - ; nothing is left. It cannot be a number at all -00f91e f589 .dw XT_2DROP -00f91f f108 .dw XT_R_FROM -00f920 f0eb .dw XT_DROP -00f921 f108 .dw XT_R_FROM -00f922 f56c .dw XT_BASE -00f923 f093 .dw XT_STORE -00f924 f166 .dw XT_ZERO -00f925 f026 .dw XT_EXIT - PFA_NUMBER0: -00f926 f330 .dw XT_2TO_R -00f927 f166 .dw XT_ZERO ; starting value -00f928 f166 .dw XT_ZERO -00f929 f33f .dw XT_2R_FROM -00f92a f984 .dw XT_TO_NUMBER ; ( 0. addr len -- d addr' len' - ; check length of the remaining string. - ; if zero: a single cell number is entered -00f92b f0cb .dw XT_QDUP -00f92c f03f .dw XT_DOCONDBRANCH -00f92d f948 DEST(PFA_NUMBER1) - ; if equal 1: mayba a trailing dot? --> double cell number -00f92e fda1 .dw XT_ONE -00f92f fd9a .dw XT_EQUAL -00f930 f03f .dw XT_DOCONDBRANCH -00f931 f93f DEST(PFA_NUMBER2) - ; excatly one character is left -00f932 f0aa .dw XT_CFETCH -00f933 f046 .dw XT_DOLITERAL -00f934 002e .dw 46 ; . -00f935 fd9a .dw XT_EQUAL -00f936 f03f .dw XT_DOCONDBRANCH -00f937 f940 DEST(PFA_NUMBER6) - ; its a double cell number - ; incorporate sign into number -00f938 f108 .dw XT_R_FROM -00f939 f03f .dw XT_DOCONDBRANCH -00f93a f93c DEST(PFA_NUMBER3) -00f93b fcfc .dw XT_DNEGATE - PFA_NUMBER3: -00f93c fda6 .dw XT_TWO -00f93d f035 .dw XT_DOBRANCH -00f93e f94e DEST(PFA_NUMBER5) - PFA_NUMBER2: -00f93f f0eb .dw XT_DROP - PFA_NUMBER6: -00f940 f589 .dw XT_2DROP -00f941 f108 .dw XT_R_FROM -00f942 f0eb .dw XT_DROP -00f943 f108 .dw XT_R_FROM -00f944 f56c .dw XT_BASE -00f945 f093 .dw XT_STORE -00f946 f166 .dw XT_ZERO -00f947 f026 .dw XT_EXIT - PFA_NUMBER1: -00f948 f589 .dw XT_2DROP ; remove the address - ; incorporate sign into number -00f949 f108 .dw XT_R_FROM -00f94a f03f .dw XT_DOCONDBRANCH -00f94b f94d DEST(PFA_NUMBER4) -00f94c f65a .dw XT_NEGATE - PFA_NUMBER4: -00f94d fda1 .dw XT_ONE - PFA_NUMBER5: -00f94e f108 .dw XT_R_FROM -00f94f f56c .dw XT_BASE -00f950 f093 .dw XT_STORE -00f951 f15d .dw XT_TRUE -00f952 f026 .dw XT_EXIT - .include "words/q-sign.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_QSIGN: -00f953 f001 .dw DO_COLON - PFA_QSIGN: ; ( c -- ) - .endif -00f954 f0e1 .dw XT_OVER ; ( -- addr len addr ) -00f955 f0aa .dw XT_CFETCH -00f956 f046 .dw XT_DOLITERAL -00f957 002d .dw '-' -00f958 fd9a .dw XT_EQUAL ; ( -- addr len flag ) -00f959 f0c3 .dw XT_DUP -00f95a f111 .dw XT_TO_R -00f95b f03f .dw XT_DOCONDBRANCH -00f95c f95f DEST(PFA_NUMBERSIGN_DONE) -00f95d fda1 .dw XT_ONE ; skip sign character -00f95e f9c0 .dw XT_SLASHSTRING - PFA_NUMBERSIGN_DONE: -00f95f f108 .dw XT_R_FROM -00f960 f026 .dw XT_EXIT - .include "words/set-base.asm" - - ; Numeric IO - ; skip a numeric prefix character - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_BASES: -00f961 f061 .dw PFA_DOCONSTANT - .endif -00f962 000a -00f963 0010 -00f964 0002 -00f965 000a .dw 10,16,2,10 ; last one could a 8 instead. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_SET_BASE: -00f966 f001 .dw DO_COLON - PFA_SET_BASE: ; ( adr1 len1 -- adr2 len2 ) - .endif -00f967 f0e1 .dw XT_OVER -00f968 f0aa .dw XT_CFETCH -00f969 f046 .dw XT_DOLITERAL -00f96a 0023 .dw 35 -00f96b f1a5 .dw XT_MINUS -00f96c f0c3 .dw XT_DUP -00f96d f166 .dw XT_ZERO -00f96e f046 .dw XT_DOLITERAL -00f96f 0004 .dw 4 -00f970 f692 .dw XT_WITHIN -00f971 f03f .dw XT_DOCONDBRANCH -00f972 f97c DEST(SET_BASE1) - .if cpu_msp430==1 - .endif -00f973 f961 .dw XT_BASES -00f974 f1af .dw XT_PLUS -00f975 f3e3 .dw XT_FETCHI -00f976 f56c .dw XT_BASE -00f977 f093 .dw XT_STORE -00f978 fda1 .dw XT_ONE -00f979 f9c0 .dw XT_SLASHSTRING -00f97a f035 .dw XT_DOBRANCH -00f97b f97d DEST(SET_BASE2) - SET_BASE1: -00f97c f0eb .dw XT_DROP - SET_BASE2: -00f97d f026 .dw XT_EXIT - - ; create bases 10 , 16 , 2 , 8 , - ; : set-base 35 - dup 0 4 within if - ; bases + @i base ! 1 /string - ; else - ; drop - ; then ; - .include "words/to-number.asm" - - ; Numeric IO - ; convert a string to a number c-addr2/u2 is the unconverted string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO_NUMBER: -00f97e ff07 .dw $ff07 -00f97f 6e3e -00f980 6d75 -00f981 6562 -00f982 0072 .db ">number",0 -00f983 f90a .dw VE_HEAD - .set VE_HEAD = VE_TO_NUMBER - XT_TO_NUMBER: -00f984 f001 .dw DO_COLON - - .endif - -00f985 f0c3 -00f986 f03f TONUM1: .DW XT_DUP,XT_DOCONDBRANCH -00f987 f99c DEST(TONUM3) -00f988 f0e1 -00f989 f0aa -00f98a f76e .DW XT_OVER,XT_CFETCH,XT_DIGITQ -00f98b f12c -00f98c f03f .DW XT_ZEROEQUAL,XT_DOCONDBRANCH -00f98d f990 DEST(TONUM2) -00f98e f0eb -00f98f f026 .DW XT_DROP,XT_EXIT -00f990 f111 -00f991 fd20 -00f992 f56c -00f993 f08b -00f994 015e TONUM2: .DW XT_TO_R,XT_2SWAP,XT_BASE,XT_FETCH,XT_UDSTAR -00f995 f108 -00f996 0156 -00f997 fd20 .DW XT_R_FROM,XT_MPLUS,XT_2SWAP -00f998 fda1 -00f999 f9c0 -00f99a f035 .DW XT_ONE,XT_SLASHSTRING,XT_DOBRANCH -00f99b f985 DEST(TONUM1) -00f99c f026 TONUM3: .DW XT_EXIT - - ;C >NUMBER ud adr u -- ud' adr' u' - ;C convert string to number - ; BEGIN - ; DUP WHILE - ; OVER C@ DIGIT? - ; 0= IF DROP EXIT THEN - ; >R 2SWAP BASE @ UD* - ; R> M+ 2SWAP - ; 1 /STRING - ; REPEAT ; - .include "words/parse.asm" - - ; String - ; in input buffer parse ccc delimited string by the delimiter char. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PARSE: -00f99d ff05 .dw $ff05 -00f99e 6170 -00f99f 7372 -00f9a0 0065 .db "parse",0 -00f9a1 f97e .dw VE_HEAD - .set VE_HEAD = VE_PARSE - XT_PARSE: -00f9a2 f001 .dw DO_COLON - PFA_PARSE: - .endif -00f9a3 f111 .dw XT_TO_R ; ( -- ) -00f9a4 f9b6 .dw XT_SOURCE ; ( -- addr len) -00f9a5 f599 .dw XT_TO_IN ; ( -- addr len >in) -00f9a6 f08b .dw XT_FETCH -00f9a7 f9c0 .dw XT_SLASHSTRING ; ( -- addr' len' ) - -00f9a8 f108 .dw XT_R_FROM ; ( -- addr' len' c) -00f9a9 f88c .dw XT_CSCAN ; ( -- addr' len'') -00f9aa f0c3 .dw XT_DUP ; ( -- addr' len'' len'') -00f9ab f241 .dw XT_1PLUS -00f9ac f599 .dw XT_TO_IN ; ( -- addr' len'' len'' >in) -00f9ad f277 .dw XT_PLUSSTORE ; ( -- addr' len') -00f9ae fda1 .dw XT_ONE -00f9af f9c0 .dw XT_SLASHSTRING -00f9b0 f026 .dw XT_EXIT - .include "words/source.asm" - - ; System - ; address and current length of the input buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SOURCE: -00f9b1 ff06 .dw $FF06 -00f9b2 6f73 -00f9b3 7275 -00f9b4 6563 .db "source" -00f9b5 f99d .dw VE_HEAD - .set VE_HEAD = VE_SOURCE - XT_SOURCE: -00f9b6 fc2e .dw PFA_DODEFER1 - PFA_SOURCE: - .endif -00f9b7 0016 .dw USER_SOURCE -00f9b8 fbf7 .dw XT_UDEFERFETCH -00f9b9 fc03 .dw XT_UDEFERSTORE - - - .include "words/slash-string.asm" - - ; String - ; adjust string from addr1 to addr1+n, reduce length from u1 to u2 by n - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SLASHSTRING: -00f9ba ff07 .dw $ff07 -00f9bb 732f -00f9bc 7274 -00f9bd 6e69 -00f9be 0067 .db "/string",0 -00f9bf f9b1 .dw VE_HEAD - .set VE_HEAD = VE_SLASHSTRING - XT_SLASHSTRING: -00f9c0 f001 .dw DO_COLON - PFA_SLASHSTRING: - .endif -00f9c1 f0f3 .dw XT_ROT -00f9c2 f0e1 .dw XT_OVER -00f9c3 f1af .dw XT_PLUS -00f9c4 f0f3 .dw XT_ROT -00f9c5 f0f3 .dw XT_ROT -00f9c6 f1a5 .dw XT_MINUS -00f9c7 f026 .dw XT_EXIT - - .include "words/parse-name.asm" - - ; String - ; In the SOURCE buffer parse whitespace delimited string. Returns string address within SOURCE. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_PARSENAME: -00f9c8 ff0a .dw $FF0A -00f9c9 6170 -00f9ca 7372 -00f9cb 2d65 -00f9cc 616e -00f9cd 656d .db "parse-name" -00f9ce f9ba .dw VE_HEAD - .set VE_HEAD = VE_PARSENAME - XT_PARSENAME: -00f9cf f001 .dw DO_COLON - PFA_PARSENAME: - .endif -00f9d0 f60b .dw XT_BL -00f9d1 f9d3 .dw XT_SKIPSCANCHAR -00f9d2 f026 .dw XT_EXIT - - ; ( c -- addr2 len2 ) - ; String - ; skips char and scan what's left in source for char - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_SKIPSCANCHAR: - ; .dw $FF0A - ; .db "skipscanchar" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_SKIPSCANCHAR - XT_SKIPSCANCHAR: -00f9d3 f001 .dw DO_COLON - PFA_SKIPSCANCHAR: - .endif -00f9d4 f111 .dw XT_TO_R -00f9d5 f9b6 .dw XT_SOURCE -00f9d6 f599 .dw XT_TO_IN -00f9d7 f08b .dw XT_FETCH -00f9d8 f9c0 .dw XT_SLASHSTRING - -00f9d9 f11a .dw XT_R_FETCH -00f9da f875 .dw XT_CSKIP -00f9db f108 .dw XT_R_FROM -00f9dc f88c .dw XT_CSCAN - - ; adjust >IN -00f9dd f580 .dw XT_2DUP -00f9de f1af .dw XT_PLUS -00f9df f9b6 .dw XT_SOURCE -00f9e0 f0eb .dw XT_DROP -00f9e1 f1a5 .dw XT_MINUS -00f9e2 f599 .dw XT_TO_IN -00f9e3 f093 .dw XT_STORE -00f9e4 f026 .dw XT_EXIT - .include "words/find-xt.asm" - - ; Tools - ; search wordlists for an entry with the xt from c-addr/len - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_FINDXT: -00f9e5 ff07 .dw $ff07 -00f9e6 6966 -00f9e7 646e -00f9e8 782d -00f9e9 0074 .db "find-xt",0 -00f9ea f9c8 .dw VE_HEAD - .set VE_HEAD = VE_FINDXT - XT_FINDXT: -00f9eb f001 .dw DO_COLON - PFA_FINDXT: - .endif -00f9ec f046 .dw XT_DOLITERAL -00f9ed f9f7 .dw XT_FINDXTA -00f9ee f046 .dw XT_DOLITERAL -00f9ef 005c .dw CFG_ORDERLISTLEN -00f9f0 041b .dw XT_MAPSTACK -00f9f1 f12c .dw XT_ZEROEQUAL -00f9f2 f03f .dw XT_DOCONDBRANCH -00f9f3 f9f6 DEST(PFA_FINDXT1) -00f9f4 f589 .dw XT_2DROP -00f9f5 f166 .dw XT_ZERO - PFA_FINDXT1: -00f9f6 f026 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - XT_FINDXTA: -00f9f7 f001 .dw DO_COLON - PFA_FINDXTA: - .endif -00f9f8 f111 .dw XT_TO_R -00f9f9 f580 .dw XT_2DUP -00f9fa f108 .dw XT_R_FROM -00f9fb fc40 .dw XT_SEARCH_WORDLIST -00f9fc f0c3 .dw XT_DUP -00f9fd f03f .dw XT_DOCONDBRANCH -00f9fe fa04 DEST(PFA_FINDXTA1) -00f9ff f111 .dw XT_TO_R -00fa00 f102 .dw XT_NIP -00fa01 f102 .dw XT_NIP -00fa02 f108 .dw XT_R_FROM -00fa03 f15d .dw XT_TRUE - PFA_FINDXTA1: -00fa04 f026 .dw XT_EXIT - - .include "words/prompt-ok.asm" - - ; System - ; send the READY prompt to the command line - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_PROMPTOK: - ; .dw $ff02 - ; .db "ok" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_PROMPTOK - XT_DEFAULT_PROMPTOK: -00fa05 f001 .dw DO_COLON - PFA_DEFAULT_PROMPTOK: -00fa06 f788 .dw XT_DOSLITERAL -00fa07 0003 .dw 3 -00fa08 6f20 -00fa09 006b .db " ok",0 - .endif -00fa0a f7bb .dw XT_ITYPE -00fa0b f026 .dw XT_EXIT - - ; ------------------------ - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PROMPTOK: -00fa0c ff03 .dw $FF03 -00fa0d 6f2e -../../common\words/prompt-ok.asm(43): warning: .cseg .db misalignment - padding zero byte -00fa0e 006b .db ".ok" -00fa0f f9e5 .dw VE_HEAD - .set VE_HEAD = VE_PROMPTOK - XT_PROMPTOK: -00fa10 fc2e .dw PFA_DODEFER1 - PFA_PROMPTOK: - .endif -00fa11 001c .dw USER_P_OK -00fa12 fbf7 .dw XT_UDEFERFETCH -00fa13 fc03 .dw XT_UDEFERSTORE - .include "words/prompt-ready.asm" - - ; System - ; process the error prompt - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_PROMPTRDY: - ; .dw $ff04 - ; .db "p_er" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_PROMPTRDY - XT_DEFAULT_PROMPTREADY: -00fa14 f001 .dw DO_COLON - PFA_DEFAULT_PROMPTREADY: -00fa15 f788 .dw XT_DOSLITERAL -00fa16 0002 .dw 2 -00fa17 203e .db "> " - .endif -00fa18 f7f0 .dw XT_CR -00fa19 f7bb .dw XT_ITYPE -00fa1a f026 .dw XT_EXIT - - ; ------------------------ - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PROMPTREADY: -00fa1b ff06 .dw $FF06 -00fa1c 722e -00fa1d 6165 -00fa1e 7964 .db ".ready" -00fa1f fa0c .dw VE_HEAD - .set VE_HEAD = VE_PROMPTREADY - XT_PROMPTREADY: -00fa20 fc2e .dw PFA_DODEFER1 - PFA_PROMPTREADY: - .endif -00fa21 0020 .dw USER_P_RDY -00fa22 fbf7 .dw XT_UDEFERFETCH -00fa23 fc03 .dw XT_UDEFERSTORE - .include "words/prompt-error.asm" - - ; System - ; process the error prompt - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_PROMPTERROR: - ; .dw $ff04 - ; .db "p_er" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_PROMPTERROR - XT_DEFAULT_PROMPTERROR: -00fa24 f001 .dw DO_COLON - PFA_DEFAULT_PROMPTERROR: -00fa25 f788 .dw XT_DOSLITERAL -00fa26 0004 .dw 4 -00fa27 3f20 -00fa28 203f .db " ?? " - .endif -00fa29 f7bb .dw XT_ITYPE -00fa2a f56c .dw XT_BASE -00fa2b f08b .dw XT_FETCH -00fa2c f111 .dw XT_TO_R -00fa2d f5f8 .dw XT_DECIMAL -00fa2e f73d .dw XT_DOT -00fa2f f599 .dw XT_TO_IN -00fa30 f08b .dw XT_FETCH -00fa31 f73d .dw XT_DOT -00fa32 f108 .dw XT_R_FROM -00fa33 f56c .dw XT_BASE -00fa34 f093 .dw XT_STORE -00fa35 f026 .dw XT_EXIT - - ; ------------------------ - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PROMPTERROR: -00fa36 ff06 .dw $FF06 -00fa37 652e -00fa38 7272 -00fa39 726f .db ".error" -00fa3a fa1b .dw VE_HEAD - .set VE_HEAD = VE_PROMPTERROR - XT_PROMPTERROR: -00fa3b fc2e .dw PFA_DODEFER1 - PFA_PROMPTERROR: - .endif -00fa3c 001e .dw USER_P_ERR -00fa3d fbf7 .dw XT_UDEFERFETCH -00fa3e fc03 .dw XT_UDEFERSTORE - - .include "words/quit.asm" - - ; System - ; main loop of amforth. accept - interpret in an endless loop - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QUIT: -00fa3f ff04 .dw $ff04 -00fa40 7571 -00fa41 7469 .db "quit" -00fa42 fa36 .dw VE_HEAD - .set VE_HEAD = VE_QUIT - XT_QUIT: -00fa43 f001 .dw DO_COLON - .endif - PFA_QUIT: -00fa44 02d0 -00fa45 02d7 -00fa46 f093 .dw XT_LP0,XT_LP,XT_STORE -00fa47 faa4 .dw XT_SP0 -00fa48 f2a8 .dw XT_SP_STORE -00fa49 fab1 .dw XT_RP0 -00fa4a f292 .dw XT_RP_STORE -00fa4b 0365 .dw XT_LBRACKET - - PFA_QUIT2: -00fa4c f566 .dw XT_STATE -00fa4d f08b .dw XT_FETCH -00fa4e f12c .dw XT_ZEROEQUAL -00fa4f f03f .dw XT_DOCONDBRANCH -00fa50 fa52 DEST(PFA_QUIT4) -00fa51 fa20 .dw XT_PROMPTREADY - PFA_QUIT4: -00fa52 f8fd .dw XT_REFILL -00fa53 f03f .dw XT_DOCONDBRANCH -00fa54 fa64 DEST(PFA_QUIT3) -00fa55 f046 .dw XT_DOLITERAL -00fa56 faca .dw XT_INTERPRET -00fa57 f846 .dw XT_CATCH -00fa58 f0cb .dw XT_QDUP -00fa59 f03f .dw XT_DOCONDBRANCH -00fa5a fa64 DEST(PFA_QUIT3) -00fa5b f0c3 .dw XT_DUP -00fa5c f046 .dw XT_DOLITERAL -00fa5d fffe .dw -2 -00fa5e f180 .dw XT_LESS -00fa5f f03f .dw XT_DOCONDBRANCH -00fa60 fa62 DEST(PFA_QUIT5) -00fa61 fa3b .dw XT_PROMPTERROR - PFA_QUIT5: -00fa62 f035 .dw XT_DOBRANCH -00fa63 fa44 DEST(PFA_QUIT) - PFA_QUIT3: -00fa64 fa10 .dw XT_PROMPTOK -00fa65 f035 .dw XT_DOBRANCH -00fa66 fa4c DEST(PFA_QUIT2) - ; .dw XT_EXIT ; never reached - - .include "words/pause.asm" - - ; Multitasking - ; Fetch pause vector and execute it. may make a context/task switch - VE_PAUSE: -00fa67 ff05 .dw $ff05 -00fa68 6170 -00fa69 7375 -00fa6a 0065 .db "pause",0 -00fa6b fa3f .dw VE_HEAD - .set VE_HEAD = VE_PAUSE - XT_PAUSE: -00fa6c fc2e .dw PFA_DODEFER1 - PFA_PAUSE: -00fa6d 0141 .dw ram_pause -00fa6e fbe3 .dw XT_RDEFERFETCH -00fa6f fbed .dw XT_RDEFERSTORE - - .dseg -000141 ram_pause: .byte 2 - .cseg - .include "words/cold.asm" - - ; System - ; start up amforth. - VE_COLD: -00fa70 ff04 .dw $ff04 -00fa71 6f63 -00fa72 646c .db "cold" -00fa73 fa67 .dw VE_HEAD - .set VE_HEAD = VE_COLD - XT_COLD: -00fa74 fa75 .dw PFA_COLD - PFA_COLD: -00fa75 b6a4 in_ mcu_boot, MCUSR -00fa76 2422 clr zerol -00fa77 2433 clr zeroh -00fa78 24bb clr isrflag -00fa79 be24 out_ MCUSR, zerol - ; clear RAM -00fa7a e0e0 ldi zl, low(ramstart) -00fa7b e0f1 ldi zh, high(ramstart) - clearloop: -00fa7c 9221 st Z+, zerol -00fa7d 30e0 cpi zl, low(sram_size+ramstart) -00fa7e f7e9 brne clearloop -00fa7f 34f1 cpi zh, high(sram_size+ramstart) -00fa80 f7d9 brne clearloop - ; init first user data area - ; allocate space for User Area - .dseg -000143 ram_user1: .byte SYSUSERSIZE + APPUSERSIZE - .cseg -00fa81 e4e3 ldi zl, low(ram_user1) -00fa82 e0f1 ldi zh, high(ram_user1) -00fa83 012f movw upl, zl - ; init return stack pointer -00fa84 ef0f ldi temp0,low(rstackstart) -00fa85 bf0d out_ SPL,temp0 -00fa86 8304 std Z+4, temp0 -00fa87 e410 ldi temp1,high(rstackstart) -00fa88 bf1e out_ SPH,temp1 -00fa89 8315 std Z+5, temp1 - - ; init parameter stack pointer -00fa8a eacf ldi yl,low(stackstart) -00fa8b 83c6 std Z+6, yl -00fa8c e4d0 ldi yh,high(stackstart) -00fa8d 83d7 std Z+7, yh - - ; load Forth IP with starting word -00fa8e e9a7 ldi XL, low(PFA_WARM) -00fa8f efba ldi XH, high(PFA_WARM) - ; its a far jump... -00fa90 940c f005 jmp_ DO_NEXT - .include "words/warm.asm" - - ; System - ; initialize amforth further. executes turnkey operation and go to quit - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_WARM: -00fa92 ff04 .dw $ff04 -00fa93 6177 -00fa94 6d72 .db "warm" -00fa95 fa70 .dw VE_HEAD - .set VE_HEAD = VE_WARM - XT_WARM: -00fa96 f001 .dw DO_COLON - PFA_WARM: - .endif -00fa97 fd6b .dw XT_INIT_RAM -00fa98 f046 .dw XT_DOLITERAL -00fa99 fb9a .dw XT_NOOP -00fa9a f046 .dw XT_DOLITERAL -00fa9b fa6c .dw XT_PAUSE -00fa9c fc0e .dw XT_DEFERSTORE -00fa9d 0365 .dw XT_LBRACKET -00fa9e f613 .dw XT_TURNKEY -00fa9f fa43 .dw XT_QUIT ; never returns - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/sp0.asm" - - ; Stack - ; start address of the data stack - VE_SP0: -00faa0 ff03 .dw $ff03 -00faa1 7073 -00faa2 0030 .db "sp0",0 -00faa3 fa92 .dw VE_HEAD - .set VE_HEAD = VE_SP0 - XT_SP0: -00faa4 f081 .dw PFA_DOVALUE1 - PFA_SP0: -00faa5 0006 .dw USER_SP0 -00faa6 fbf7 .dw XT_UDEFERFETCH -00faa7 fc03 .dw XT_UDEFERSTORE - - ; ( -- addr) - ; Stack - ; address of user variable to store top-of-stack for inactive tasks - VE_SP: -00faa8 ff02 .dw $ff02 -00faa9 7073 .db "sp" -00faaa faa0 .dw VE_HEAD - .set VE_HEAD = VE_SP - XT_SP: -00faab f067 .dw PFA_DOUSER - PFA_SP: -00faac 0008 .dw USER_SP - .include "words/rp0.asm" - - ; Stack - ; start address of return stack - VE_RP0: -00faad ff03 .dw $ff03 -00faae 7072 -00faaf 0030 .db "rp0",0 -00fab0 faa8 .dw VE_HEAD - .set VE_HEAD = VE_RP0 - XT_RP0: -00fab1 f001 .dw DO_COLON - PFA_RP0: -00fab2 fab5 .dw XT_DORP0 -00fab3 f08b .dw XT_FETCH -00fab4 f026 .dw XT_EXIT - - ; ( -- addr) - ; Stack - ; user variable of the address of the initial return stack - ;VE_DORP0: - ; .dw $ff05 - ; .db "(rp0)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DORP0 - XT_DORP0: -00fab5 f067 .dw PFA_DOUSER - PFA_DORP0: -00fab6 0004 .dw USER_RP - .include "words/depth.asm" - - ; Stack - ; number of single-cell values contained in the data stack before n was placed on the stack. - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DEPTH: -00fab7 ff05 .dw $ff05 -00fab8 6564 -00fab9 7470 -00faba 0068 .db "depth",0 -00fabb faad .dw VE_HEAD - .set VE_HEAD = VE_DEPTH - XT_DEPTH: -00fabc f001 .dw DO_COLON - PFA_DEPTH: - .endif -00fabd faa4 .dw XT_SP0 -00fabe f29f .dw XT_SP_FETCH -00fabf f1a5 .dw XT_MINUS -00fac0 f216 .dw XT_2SLASH -00fac1 f247 .dw XT_1MINUS -00fac2 f026 .dw XT_EXIT - .include "words/interpret.asm" - - ; System - ; Interpret SOURCE word by word. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_INTERPRET: -00fac3 ff09 .dw $ff09 -00fac4 6e69 -00fac5 6574 -00fac6 7072 -00fac7 6572 -00fac8 0074 .db "interpret",0 -00fac9 fab7 .dw VE_HEAD - .set VE_HEAD = VE_INTERPRET - XT_INTERPRET: -00faca f001 .dw DO_COLON - .endif - PFA_INTERPRET: -00facb f9cf .dw XT_PARSENAME ; ( -- addr len ) -00facc f0c3 .dw XT_DUP ; ( -- addr len flag) -00facd f03f .dw XT_DOCONDBRANCH -00face fadb DEST(PFA_INTERPRET2) -00facf fae7 .dw XT_FORTHRECOGNIZER -00fad0 faf2 .dw XT_RECOGNIZE -00fad1 f566 .dw XT_STATE -00fad2 f08b .dw XT_FETCH -00fad3 f03f .dw XT_DOCONDBRANCH -00fad4 fad6 DEST(PFA_INTERPRET1) -00fad5 fbc6 .dw XT_ICELLPLUS ; we need the compile action - PFA_INTERPRET1: -00fad6 f3e3 .dw XT_FETCHI -00fad7 f030 .dw XT_EXECUTE -00fad8 fb72 .dw XT_QSTACK -00fad9 f035 .dw XT_DOBRANCH -00fada facb DEST(PFA_INTERPRET) - PFA_INTERPRET2: -00fadb f589 .dw XT_2DROP -00fadc f026 .dw XT_EXIT - .include "words/forth-recognizer.asm" - - ; System Value - ; address of the next free data space (RAM) cell - VE_FORTHRECOGNIZER: -00fadd ff10 .dw $ff10 -00fade 6f66 -00fadf 7472 -00fae0 2d68 -00fae1 6572 -00fae2 6f63 -00fae3 6e67 -00fae4 7a69 -00fae5 7265 .db "forth-recognizer" -00fae6 fac3 .dw VE_HEAD - .set VE_HEAD = VE_FORTHRECOGNIZER - XT_FORTHRECOGNIZER: -00fae7 f081 .dw PFA_DOVALUE1 - PFA_FORTHRECOGNIZER: -00fae8 0050 .dw CFG_FORTHRECOGNIZER -00fae9 fbcf .dw XT_EDEFERFETCH -00faea fbd9 .dw XT_EDEFERSTORE - .include "words/recognize.asm" - - ; System - ; walk the recognizer stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RECOGNIZE: -00faeb ff09 .dw $ff09 -00faec 6572 -00faed 6f63 -00faee 6e67 -00faef 7a69 -00faf0 0065 .db "recognize",0 -00faf1 fadd .dw VE_HEAD - .set VE_HEAD = VE_RECOGNIZE - XT_RECOGNIZE: -00faf2 f001 .dw DO_COLON - PFA_RECOGNIZE: - .endif -00faf3 f046 .dw XT_DOLITERAL -00faf4 fafd .dw XT_RECOGNIZE_A -00faf5 f0d6 .dw XT_SWAP -00faf6 041b .dw XT_MAPSTACK -00faf7 f12c .dw XT_ZEROEQUAL -00faf8 f03f .dw XT_DOCONDBRANCH -00faf9 fafc DEST(PFA_RECOGNIZE1) -00fafa f589 .dw XT_2DROP -00fafb fb65 .dw XT_DT_NULL - PFA_RECOGNIZE1: -00fafc f026 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ; ( addr len XT -- addr len [ dt:xt -1 | 0 ] ) - XT_RECOGNIZE_A: -00fafd f001 .dw DO_COLON - PFA_RECOGNIZE_A: - .endif -00fafe f0f3 .dw XT_ROT ; -- len xt addr -00faff f0f3 .dw XT_ROT ; -- xt addr len -00fb00 f580 .dw XT_2DUP -00fb01 f330 .dw XT_2TO_R -00fb02 f0f3 .dw XT_ROT ; -- addr len xt -00fb03 f030 .dw XT_EXECUTE ; -- i*x dt:* | dt:null -00fb04 f33f .dw XT_2R_FROM -00fb05 f0f3 .dw XT_ROT -00fb06 f0c3 .dw XT_DUP -00fb07 fb65 .dw XT_DT_NULL -00fb08 fd9a .dw XT_EQUAL -00fb09 f03f .dw XT_DOCONDBRANCH -00fb0a fb0e DEST(PFA_RECOGNIZE_A1) -00fb0b f0eb .dw XT_DROP -00fb0c f166 .dw XT_ZERO -00fb0d f026 .dw XT_EXIT - PFA_RECOGNIZE_A1: -00fb0e f102 .dw XT_NIP -00fb0f f102 .dw XT_NIP -00fb10 f15d .dw XT_TRUE -00fb11 f026 .dw XT_EXIT - - ; : recognize ( addr len stack-id -- i*x dt:* | dt:null ) - ; [: ( addr len -- addr len 0 | i*x dt:* -1 ) - ; rot rot 2dup 2>r rot execute 2r> rot - ; dup dt:null = ( -- addr len dt:* f ) - ; if drop 0 else nip nip -1 then - ; ;] - ; map-stack ( -- i*x addr len dt:* f ) - ; 0= if \ a recognizer did the job, remove addr/len - ; 2drop dt:null - ; then ; - ; - .include "words/rec-intnum.asm" - - ; Interpreter - ; Method table for single cell integers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_NUM: -00fb12 ff06 .dw $ff06 -00fb13 7464 -00fb14 6e3a -00fb15 6d75 .db "dt:num" -00fb16 faeb .dw VE_HEAD - .set VE_HEAD = VE_DT_NUM - XT_DT_NUM: -00fb17 f061 .dw PFA_DOCONSTANT - PFA_DT_NUM: - .endif -00fb18 fb9a .dw XT_NOOP ; interpret -00fb19 01f1 .dw XT_LITERAL ; compile -00fb1a 01f1 .dw XT_LITERAL ; postpone - - ; ( -- addr ) - ; Interpreter - ; Method table for double cell integers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_DNUM: -00fb1b ff07 .dw $ff07 -00fb1c 7464 -00fb1d 643a -00fb1e 756e -00fb1f 006d .db "dt:dnum",0 -00fb20 fb12 .dw VE_HEAD - .set VE_HEAD = VE_DT_DNUM - XT_DT_DNUM: -00fb21 f061 .dw PFA_DOCONSTANT - PFA_DT_DNUM: - .endif -00fb22 fb9a .dw XT_NOOP ; interpret -00fb23 fd92 .dw XT_2LITERAL ; compile -00fb24 fd92 .dw XT_2LITERAL ; postpone - - ; ( addr len -- f ) - ; Interpreter - ; recognizer for integer numbers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_REC_NUM: -00fb25 ff07 .dw $ff07 -00fb26 6572 -00fb27 3a63 -00fb28 756e -00fb29 006d .db "rec:num",0 -00fb2a fb1b .dw VE_HEAD - .set VE_HEAD = VE_REC_NUM - XT_REC_NUM: -00fb2b f001 .dw DO_COLON - PFA_REC_NUM: - .endif - ; try converting to a number -00fb2c f90f .dw XT_NUMBER -00fb2d f03f .dw XT_DOCONDBRANCH -00fb2e fb37 DEST(PFA_REC_NONUMBER) -00fb2f fda1 .dw XT_ONE -00fb30 fd9a .dw XT_EQUAL -00fb31 f03f .dw XT_DOCONDBRANCH -00fb32 fb35 DEST(PFA_REC_INTNUM2) -00fb33 fb17 .dw XT_DT_NUM -00fb34 f026 .dw XT_EXIT - PFA_REC_INTNUM2: -00fb35 fb21 .dw XT_DT_DNUM -00fb36 f026 .dw XT_EXIT - PFA_REC_NONUMBER: -00fb37 fb65 .dw XT_DT_NULL -00fb38 f026 .dw XT_EXIT - .include "words/rec-find.asm" - - ; Interpreter - ; search for a word - .if cpu_msp430==1 - .endif - .if cpu_avr8==1 - VE_REC_FIND: -00fb39 ff08 .dw $ff08 -00fb3a 6572 -00fb3b 3a63 -00fb3c 6966 -00fb3d 646e .db "rec:find" -00fb3e fb25 .dw VE_HEAD - .set VE_HEAD = VE_REC_FIND - XT_REC_FIND: -00fb3f f001 .dw DO_COLON - PFA_REC_FIND: - .endif -00fb40 f9eb .DW XT_FINDXT -00fb41 f0c3 .dw XT_DUP -00fb42 f12c .dw XT_ZEROEQUAL -00fb43 f03f .dw XT_DOCONDBRANCH -00fb44 fb48 DEST(PFA_REC_WORD_FOUND) -00fb45 f0eb .dw XT_DROP -00fb46 fb65 .dw XT_DT_NULL -00fb47 f026 .dw XT_EXIT - PFA_REC_WORD_FOUND: -00fb48 fb4f .dw XT_DT_XT - -00fb49 f026 .dw XT_EXIT - - ; ( -- addr ) - ; Interpreter - ; actions to handle execution tokens and their flags - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_XT: -00fb4a ff05 .dw $ff05 -00fb4b 7464 -00fb4c 783a -00fb4d 0074 .db "dt:xt",0 -00fb4e fb39 .dw VE_HEAD - .set VE_HEAD = VE_DT_XT - XT_DT_XT: -00fb4f f061 .dw PFA_DOCONSTANT - PFA_DT_XT: - .endif -00fb50 fb53 .dw XT_R_WORD_INTERPRET -00fb51 fb57 .dw XT_R_WORD_COMPILE -00fb52 fd92 .dw XT_2LITERAL - - ; ( XT flags -- ) - ; Interpreter - ; interpret method for WORD recognizer - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_R_WORD_INTERPRET: -00fb53 f001 .dw DO_COLON - PFA_R_WORD_INTERPRET: - .endif -00fb54 f0eb .dw XT_DROP ; the flags are in the way -00fb55 f030 .dw XT_EXECUTE -00fb56 f026 .dw XT_EXIT - - ; ( XT flags -- ) - ; Interpreter - ; Compile method for WORD recognizer - .if cpu_msp430==1 - .endif - .if cpu_avr8==1 - XT_R_WORD_COMPILE: -00fb57 f001 .dw DO_COLON - PFA_R_WORD_COMPILE: - .endif -00fb58 f133 .dw XT_ZEROLESS -00fb59 f03f .dw XT_DOCONDBRANCH -00fb5a fb5d DEST(PFA_R_WORD_COMPILE1) -00fb5b 01db .dw XT_COMMA -00fb5c f026 .dw XT_EXIT - PFA_R_WORD_COMPILE1: -00fb5d f030 .dw XT_EXECUTE -00fb5e f026 .dw XT_EXIT - .include "words/dt-null.asm" - - ; Interpreter - ; there is no parser for this recognizer, this is the default and failsafe part - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_NULL: -00fb5f ff07 .dw $ff07 -00fb60 7464 -00fb61 6e3a -00fb62 6c75 -../../common\words/dt-null.asm(12): warning: .cseg .db misalignment - padding zero byte -00fb63 006c .db "dt:null" -00fb64 fb4a .dw VE_HEAD - .set VE_HEAD = VE_DT_NULL - XT_DT_NULL: -00fb65 f061 .dw PFA_DOCONSTANT - PFA_DT_NULL: - .endif -00fb66 fb69 .dw XT_FAIL ; interpret -00fb67 fb69 .dw XT_FAIL ; compile -00fb68 fb69 .dw XT_FAIL ; postpone - - ; ( addr len -- ) - ; Interpreter - ; default failure action: throw exception -13. - .if cpu_msp430==1 - .endif - .if cpu_avr8==1 - ;VE_FAIL: - ; .dw $ff04 - ; .db "fail" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_FAIL - XT_FAIL: -00fb69 f001 .dw DO_COLON - PFA_FAIL: - .endif -00fb6a f046 .dw XT_DOLITERAL -00fb6b fff3 .dw -13 -00fb6c f85c .dw XT_THROW - - .include "words/q-stack.asm" - - ; Tools - ; check data stack depth and exit to quit if underrun - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QSTACK: -00fb6d ff06 .dw $ff06 -00fb6e 733f -00fb6f 6174 -00fb70 6b63 .db "?stack" -00fb71 fb5f .dw VE_HEAD - .set VE_HEAD = VE_QSTACK - XT_QSTACK: -00fb72 f001 .dw DO_COLON - PFA_QSTACK: - .endif -00fb73 fabc .dw XT_DEPTH -00fb74 f133 .dw XT_ZEROLESS -00fb75 f03f .dw XT_DOCONDBRANCH -00fb76 fb7a DEST(PFA_QSTACK1) -00fb77 f046 .dw XT_DOLITERAL -00fb78 fffc .dw -4 -00fb79 f85c .dw XT_THROW - PFA_QSTACK1: -00fb7a f026 .dw XT_EXIT - .include "words/ver.asm" - - ; Tools - ; print the version string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOT_VER: -00fb7b ff03 .dw $ff03 -00fb7c 6576 -../../common\words/ver.asm(12): warning: .cseg .db misalignment - padding zero byte -00fb7d 0072 .db "ver" -00fb7e fb6d .dw VE_HEAD - .set VE_HEAD = VE_DOT_VER - XT_DOT_VER: -00fb7f f001 .dw DO_COLON - PFA_DOT_VER: - .endif -00fb80 f528 .dw XT_ENV_FORTHNAME -00fb81 f7bb .dw XT_ITYPE -00fb82 f7fd .dw XT_SPACE -00fb83 f56c .dw XT_BASE -00fb84 f08b .dw XT_FETCH - -00fb85 f536 .dw XT_ENV_FORTHVERSION -00fb86 f5f8 .dw XT_DECIMAL -00fb87 fd82 .dw XT_S2D -00fb88 f6d9 .dw XT_L_SHARP -00fb89 f6e1 .dw XT_SHARP -00fb8a f046 .dw XT_DOLITERAL -00fb8b 002e .dw '.' -00fb8c f6ca .dw XT_HOLD -00fb8d f6f7 .dw XT_SHARP_S -00fb8e f702 .dw XT_SHARP_G -00fb8f f816 .dw XT_TYPE -00fb90 f56c .dw XT_BASE -00fb91 f093 .dw XT_STORE -00fb92 f7fd .dw XT_SPACE -00fb93 f53e .dw XT_ENV_CPU -00fb94 f7bb .dw XT_ITYPE - -00fb95 f026 .dw XT_EXIT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/noop.asm" - - ; Tools - ; do nothing - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NOOP: -00fb96 ff04 .dw $ff04 -00fb97 6f6e -00fb98 706f .db "noop" -00fb99 fb7b .dw VE_HEAD - .set VE_HEAD = VE_NOOP - XT_NOOP: -00fb9a f001 .dw DO_COLON - PFA_NOOP: - .endif -00fb9b f026 .DW XT_EXIT - .include "words/unused.asm" - - ; Tools - ; Amount of available RAM (incl. PAD) - VE_UNUSED: -00fb9c ff06 .dw $ff06 -00fb9d 6e75 -00fb9e 7375 -00fb9f 6465 .db "unused" -00fba0 fb96 .dw VE_HEAD - .set VE_HEAD = VE_UNUSED - XT_UNUSED: -00fba1 f001 .dw DO_COLON - PFA_UNUSED: -00fba2 f29f .dw XT_SP_FETCH -00fba3 f5da .dw XT_HERE -00fba4 f1a5 .dw XT_MINUS -00fba5 f026 .dw XT_EXIT - - .include "words/to.asm" - - ; Tools - ; store the TOS to the named value (eeprom cell) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO: -00fba6 0002 .dw $0002 -00fba7 6f74 .db "to" -00fba8 fb9c .dw VE_HEAD - .set VE_HEAD = VE_TO - XT_TO: -00fba9 f001 .dw DO_COLON - PFA_TO: - .endif -00fbaa f825 .dw XT_TICK -00fbab fd8b .dw XT_TO_BODY -00fbac f566 .dw XT_STATE -00fbad f08b .dw XT_FETCH -00fbae f03f .dw XT_DOCONDBRANCH -00fbaf fbba DEST(PFA_TO1) -00fbb0 01d0 .dw XT_COMPILE -00fbb1 fbb4 .dw XT_DOTO -00fbb2 01db .dw XT_COMMA -00fbb3 f026 .dw XT_EXIT - - ; ( n -- ) (R: IP -- IP+1) - ; Tools - ; runtime portion of to - ;VE_DOTO: - ; .dw $ff04 - ; .db "(to)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOTO - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - XT_DOTO: -00fbb4 f001 .dw DO_COLON - PFA_DOTO: - .endif -00fbb5 f108 .dw XT_R_FROM -00fbb6 f0c3 .dw XT_DUP -00fbb7 fbc6 .dw XT_ICELLPLUS -00fbb8 f111 .dw XT_TO_R -00fbb9 f3e3 .dw XT_FETCHI - PFA_TO1: -00fbba f0c3 .dw XT_DUP -00fbbb fbc6 .dw XT_ICELLPLUS -00fbbc fbc6 .dw XT_ICELLPLUS -00fbbd f3e3 .dw XT_FETCHI -00fbbe f030 .dw XT_EXECUTE -00fbbf f026 .dw XT_EXIT - .include "words/i-cellplus.asm" - - ; Compiler - ; skip to the next cell in flash - VE_ICELLPLUS: -00fbc0 ff07 .dw $FF07 -00fbc1 2d69 -00fbc2 6563 -00fbc3 6c6c -00fbc4 002b .db "i-cell+",0 -00fbc5 fba6 .dw VE_HEAD - .set VE_HEAD = VE_ICELLPLUS - XT_ICELLPLUS: -00fbc6 f001 .dw DO_COLON - PFA_ICELLPLUS: -00fbc7 f241 .dw XT_1PLUS -00fbc8 f026 .dw XT_EXIT - - .include "words/edefer-fetch.asm" - - ; System - ; does the real defer@ for eeprom defers - VE_EDEFERFETCH: -00fbc9 ff07 .dw $ff07 -00fbca 6445 -00fbcb 6665 -00fbcc 7265 -00fbcd 0040 .db "Edefer@",0 -00fbce fbc0 .dw VE_HEAD - .set VE_HEAD = VE_EDEFERFETCH - XT_EDEFERFETCH: -00fbcf f001 .dw DO_COLON - PFA_EDEFERFETCH: -00fbd0 f3e3 .dw XT_FETCHI -00fbd1 f371 .dw XT_FETCHE -00fbd2 f026 .dw XT_EXIT - .include "words/edefer-store.asm" - - ; System - ; does the real defer! for eeprom defers - VE_EDEFERSTORE: -00fbd3 ff07 .dw $ff07 -00fbd4 6445 -00fbd5 6665 -00fbd6 7265 -00fbd7 0021 .db "Edefer!",0 -00fbd8 fbc9 .dw VE_HEAD - .set VE_HEAD = VE_EDEFERSTORE - XT_EDEFERSTORE: -00fbd9 f001 .dw DO_COLON - PFA_EDEFERSTORE: -00fbda f3e3 .dw XT_FETCHI -00fbdb f34d .dw XT_STOREE -00fbdc f026 .dw XT_EXIT - .include "words/rdefer-fetch.asm" - - ; System - ; The defer@ for ram defers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RDEFERFETCH: -00fbdd ff07 .dw $ff07 -00fbde 6452 -00fbdf 6665 -00fbe0 7265 -00fbe1 0040 .db "Rdefer@",0 -00fbe2 fbd3 .dw VE_HEAD - .set VE_HEAD = VE_RDEFERFETCH - XT_RDEFERFETCH: -00fbe3 f001 .dw DO_COLON - PFA_RDEFERFETCH: - .endif -00fbe4 f3e3 .dw XT_FETCHI -00fbe5 f08b .dw XT_FETCH -00fbe6 f026 .dw XT_EXIT - .include "words/rdefer-store.asm" - - ; System - ; The defer! for ram defers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RDEFERSTORE: -00fbe7 ff07 .dw $ff07 -00fbe8 6452 -00fbe9 6665 -00fbea 7265 -00fbeb 0021 .db "Rdefer!",0 -00fbec fbdd .dw VE_HEAD - .set VE_HEAD = VE_RDEFERSTORE - XT_RDEFERSTORE: -00fbed f001 .dw DO_COLON - PFA_RDEFERSTORE: - .endif -00fbee f3e3 .dw XT_FETCHI -00fbef f093 .dw XT_STORE -00fbf0 f026 .dw XT_EXIT - - .include "words/udefer-fetch.asm" - - ; System - ; does the real defer@ for user based defers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDEFERFETCH: -00fbf1 ff07 .dw $ff07 -00fbf2 6455 -00fbf3 6665 -00fbf4 7265 -00fbf5 0040 .db "Udefer@",0 -00fbf6 fbe7 .dw VE_HEAD - .set VE_HEAD = VE_UDEFERFETCH - XT_UDEFERFETCH: -00fbf7 f001 .dw DO_COLON - PFA_UDEFERFETCH: - .endif -00fbf8 f3e3 .dw XT_FETCHI -00fbf9 f314 .dw XT_UP_FETCH -00fbfa f1af .dw XT_PLUS -00fbfb f08b .dw XT_FETCH -00fbfc f026 .dw XT_EXIT - .include "words/udefer-store.asm" - - ; System - ; does the real defer! for user based defers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDEFERSTORE: -00fbfd ff07 .dw $ff07 -00fbfe 6455 -00fbff 6665 -00fc00 7265 -00fc01 0021 .db "Udefer!",0 -00fc02 fbf1 .dw VE_HEAD - .set VE_HEAD = VE_UDEFERSTORE - XT_UDEFERSTORE: -00fc03 f001 .dw DO_COLON - PFA_UDEFERSTORE: - .endif - -00fc04 f3e3 .dw XT_FETCHI -00fc05 f314 .dw XT_UP_FETCH -00fc06 f1af .dw XT_PLUS -00fc07 f093 .dw XT_STORE -00fc08 f026 .dw XT_EXIT - - .include "words/defer-store.asm" - - ; System - ; stores xt1 as the xt to be executed when xt2 is called - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DEFERSTORE: -00fc09 ff06 .dw $ff06 -00fc0a 6564 -00fc0b 6566 -00fc0c 2172 .db "defer!" -00fc0d fbfd .dw VE_HEAD - .set VE_HEAD = VE_DEFERSTORE - XT_DEFERSTORE: -00fc0e f001 .dw DO_COLON - PFA_DEFERSTORE: - .endif -00fc0f fd8b .dw XT_TO_BODY -00fc10 f0c3 .dw XT_DUP -00fc11 fbc6 .dw XT_ICELLPLUS -00fc12 fbc6 .dw XT_ICELLPLUS -00fc13 f3e3 .dw XT_FETCHI -00fc14 f030 .dw XT_EXECUTE -00fc15 f026 .dw XT_EXIT - - .include "words/defer-fetch.asm" - - ; System - ; returns the XT associated with the given XT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DEFERFETCH: -00fc16 ff06 .dw $ff06 -00fc17 6564 -00fc18 6566 -00fc19 4072 .db "defer@" -00fc1a fc09 .dw VE_HEAD - .set VE_HEAD = VE_DEFERFETCH - XT_DEFERFETCH: -00fc1b f001 .dw DO_COLON - PFA_DEFERFETCH: - .endif -00fc1c fd8b .dw XT_TO_BODY -00fc1d f0c3 .dw XT_DUP -00fc1e fbc6 .dw XT_ICELLPLUS -00fc1f f3e3 .dw XT_FETCHI -00fc20 f030 .dw XT_EXECUTE -00fc21 f026 .dw XT_EXIT - .include "words/do-defer.asm" - - ; System - ; runtime of defer - VE_DODEFER: -00fc22 ff07 .dw $ff07 -00fc23 6428 -00fc24 6665 -00fc25 7265 -00fc26 0029 .db "(defer)", 0 -00fc27 fc16 .dw VE_HEAD - .set VE_HEAD = VE_DODEFER - XT_DODEFER: -00fc28 f001 .dw DO_COLON - PFA_DODEFER: -00fc29 01ad .dw XT_DOCREATE -00fc2a 030d .dw XT_REVEAL -00fc2b 01d0 .dw XT_COMPILE -00fc2c fc2e .dw PFA_DODEFER1 -00fc2d f026 .dw XT_EXIT - PFA_DODEFER1: -00fc2e 940e 0326 call_ DO_DODOES -00fc30 f0c3 .dw XT_DUP -00fc31 fbc6 .dw XT_ICELLPLUS -00fc32 f3e3 .dw XT_FETCHI -00fc33 f030 .dw XT_EXECUTE -00fc34 f030 .dw XT_EXECUTE -00fc35 f026 .dw XT_EXIT - - ; : (defer) dup i-cell+ @i execute execute ; - - - .include "words/search-wordlist.asm" - - ; Search Order - ; searches the word list wid for the word at c-addr/len - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SEARCH_WORDLIST: -00fc36 ff0f .dw $ff0f -00fc37 6573 -00fc38 7261 -00fc39 6863 -00fc3a 772d -00fc3b 726f -00fc3c 6c64 -00fc3d 7369 -00fc3e 0074 .db "search-wordlist",0 -00fc3f fc22 .dw VE_HEAD - .set VE_HEAD = VE_SEARCH_WORDLIST - XT_SEARCH_WORDLIST: -00fc40 f001 .dw DO_COLON - PFA_SEARCH_WORDLIST: - .endif -00fc41 f111 .dw XT_TO_R -00fc42 f166 .dw XT_ZERO -00fc43 f046 .dw XT_DOLITERAL -00fc44 fc55 .dw XT_ISWORD -00fc45 f108 .dw XT_R_FROM -00fc46 fc72 .dw XT_TRAVERSEWORDLIST -00fc47 f0c3 .dw XT_DUP -00fc48 f12c .dw XT_ZEROEQUAL -00fc49 f03f .dw XT_DOCONDBRANCH -00fc4a fc4f DEST(PFA_SEARCH_WORDLIST1) -00fc4b f589 .dw XT_2DROP -00fc4c f0eb .dw XT_DROP -00fc4d f166 .dw XT_ZERO -00fc4e f026 .dw XT_EXIT - PFA_SEARCH_WORDLIST1: - ; ... get the XT ... -00fc4f f0c3 .dw XT_DUP -00fc50 fc99 .dw XT_NFA2CFA - ; .. and get the header flag -00fc51 f0d6 .dw XT_SWAP -00fc52 0193 .dw XT_NAME2FLAGS -00fc53 0181 .dw XT_IMMEDIATEQ -00fc54 f026 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_ISWORD: -00fc55 f001 .dw DO_COLON - PFA_ISWORD: - .endif - ; ( c-addr len 0 nt -- c-addr len 0 true| nt false ) -00fc56 f111 .dw XT_TO_R -00fc57 f0eb .dw XT_DROP -00fc58 f580 .dw XT_2DUP -00fc59 f11a .dw XT_R_FETCH ; -- addr len addr len nt -00fc5a fc8d .dw XT_NAME2STRING -00fc5b fca3 .dw XT_ICOMPARE ; (-- addr len f ) -00fc5c f03f .dw XT_DOCONDBRANCH -00fc5d fc63 DEST(PFA_ISWORD3) - ; not now -00fc5e f108 .dw XT_R_FROM -00fc5f f0eb .dw XT_DROP -00fc60 f166 .dw XT_ZERO -00fc61 f15d .dw XT_TRUE ; maybe next word -00fc62 f026 .dw XT_EXIT - PFA_ISWORD3: - ; we found the word, now clean up iteration data ... -00fc63 f589 .dw XT_2DROP -00fc64 f108 .dw XT_R_FROM -00fc65 f166 .dw XT_ZERO ; finish traverse-wordlist -00fc66 f026 .dw XT_EXIT - .include "words/traverse-wordlist.asm" - - ; Tools Ext (2012) - ; call the xt for every member of the wordlist wid until xt returns false - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TRAVERSEWORDLIST: -00fc67 ff11 .dw $ff11 -00fc68 7274 -00fc69 7661 -00fc6a 7265 -00fc6b 6573 -00fc6c 772d -00fc6d 726f -00fc6e 6c64 -00fc6f 7369 -00fc70 0074 .db "traverse-wordlist",0 -00fc71 fc36 .dw VE_HEAD - .set VE_HEAD = VE_TRAVERSEWORDLIST - XT_TRAVERSEWORDLIST: -00fc72 f001 .dw DO_COLON - PFA_TRAVERSEWORDLIST: - - .endif -00fc73 f371 .dw XT_FETCHE - PFA_TRAVERSEWORDLIST1: -00fc74 f0c3 .dw XT_DUP ; ( -- xt nt nt ) -00fc75 f03f .dw XT_DOCONDBRANCH ; ( -- nt ) is nfa = counted string -00fc76 fc83 DEST(PFA_TRAVERSEWORDLIST2) -00fc77 f580 .dw XT_2DUP -00fc78 f330 .dw XT_2TO_R -00fc79 f0d6 .dw XT_SWAP -00fc7a f030 .dw XT_EXECUTE -00fc7b f33f .dw XT_2R_FROM -00fc7c f0f3 .dw XT_ROT -00fc7d f03f .dw XT_DOCONDBRANCH -00fc7e fc83 DEST(PFA_TRAVERSEWORDLIST2) -00fc7f 048a .dw XT_NFA2LFA -00fc80 f3e3 .dw XT_FETCHI -00fc81 f035 .dw XT_DOBRANCH ; ( -- addr ) -00fc82 fc74 DEST(PFA_TRAVERSEWORDLIST1) ; ( -- addr ) - PFA_TRAVERSEWORDLIST2: -00fc83 f589 .dw XT_2DROP -00fc84 f026 .dw XT_EXIT - - ; : traverse-wordlist ( i*x xt wid -- i*x' ) - ; begin @ dup - ; while - ; 2dup 2>r - ; swap execute ( i*x nt -- i*x' f ) - ; 2r> rot - ; while - ; nfa>lfa @i - ; repeat then 2drop ; - .include "words/name2string.asm" - - ; Tools Ext (2012) - ; get a (flash) string from a name token nt - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NAME2STRING: -00fc85 ff0b .dw $ff0b -00fc86 616e -00fc87 656d -00fc88 733e -00fc89 7274 -00fc8a 6e69 -00fc8b 0067 .db "name>string",0 -00fc8c fc67 .dw VE_HEAD - .set VE_HEAD = VE_NAME2STRING - XT_NAME2STRING: -00fc8d f001 .dw DO_COLON - PFA_NAME2STRING: - - .endif -00fc8e f7e7 .dw XT_ICOUNT ; ( -- addr n ) -00fc8f f046 .dw XT_DOLITERAL -00fc90 00ff .dw 255 -00fc91 f225 .dw XT_AND ; mask immediate bit -00fc92 f026 .dw XT_EXIT - .include "words/nfa2cfa.asm" - - ; Tools - ; get the XT from a name token - VE_NFA2CFA: -00fc93 ff07 .dw $ff07 -00fc94 666e -00fc95 3e61 -00fc96 6663 -../../avr8\words/nfa2cfa.asm(6): warning: .cseg .db misalignment - padding zero byte -00fc97 0061 .db "nfa>cfa" -00fc98 fc85 .dw VE_HEAD - .set VE_HEAD = VE_NFA2CFA - XT_NFA2CFA: -00fc99 f001 .dw DO_COLON - PFA_NFA2CFA: -00fc9a 048a .dw XT_NFA2LFA ; skip to link field -00fc9b f241 .dw XT_1PLUS ; next is the execution token -00fc9c f026 .dw XT_EXIT - .include "words/icompare.asm" - - ; Tools - ; compares string in RAM with string in flash. f is zero if equal like COMPARE - VE_ICOMPARE: -00fc9d ff08 .dw $ff08 -00fc9e 6369 -00fc9f 6d6f -00fca0 6170 -00fca1 6572 .db "icompare" -00fca2 fc93 .dw VE_HEAD - .set VE_HEAD = VE_ICOMPARE - XT_ICOMPARE: -00fca3 f001 .dw DO_COLON - PFA_ICOMPARE: -00fca4 f111 .dw XT_TO_R ; ( -- r-addr r-len f-addr) -00fca5 f0e1 .dw XT_OVER ; ( -- r-addr r-len f-addr r-len) -00fca6 f108 .dw XT_R_FROM ; ( -- r-addr r-len f-addr r-len f-len ) -00fca7 f125 .dw XT_NOTEQUAL ; ( -- r-addr r-len f-addr flag ) -00fca8 f03f .dw XT_DOCONDBRANCH -00fca9 fcae .dw PFA_ICOMPARE_SAMELEN -00fcaa f589 .dw XT_2DROP -00fcab f0eb .dw XT_DROP -00fcac f15d .dw XT_TRUE -00fcad f026 .dw XT_EXIT - PFA_ICOMPARE_SAMELEN: -00fcae f0d6 .dw XT_SWAP ; ( -- r-addr f-addr len ) -00fcaf f166 .dw XT_ZERO -00fcb0 029a .dw XT_QDOCHECK -00fcb1 f03f .dw XT_DOCONDBRANCH -00fcb2 fcd1 .dw PFA_ICOMPARE_DONE -00fcb3 f2ad .dw XT_DODO - PFA_ICOMPARE_LOOP: - ; ( r-addr f-addr --) -00fcb4 f0e1 .dw XT_OVER -00fcb5 f08b .dw XT_FETCH - .if WANT_IGNORECASE == 1 - .endif -00fcb6 f0e1 .dw XT_OVER -00fcb7 f3e3 .dw XT_FETCHI ; ( -- r-addr f-addr r-cc f- cc) - .if WANT_IGNORECASE == 1 - .endif - ; flash strings are zero-padded at the last cell - ; that means: if the flash cell is less $0100, than mask the - ; high byte in the ram cell -00fcb8 f0c3 .dw XT_DUP - ;.dw XT_BYTESWAP -00fcb9 f046 .dw XT_DOLITERAL -00fcba 0100 .dw $100 -00fcbb f16e .dw XT_ULESS -00fcbc f03f .dw XT_DOCONDBRANCH -00fcbd fcc2 .dw PFA_ICOMPARE_LASTCELL -00fcbe f0d6 .dw XT_SWAP -00fcbf f046 .dw XT_DOLITERAL -00fcc0 00ff .dw $00FF -00fcc1 f225 .dw XT_AND ; the final swap can be omitted - PFA_ICOMPARE_LASTCELL: -00fcc2 f125 .dw XT_NOTEQUAL -00fcc3 f03f .dw XT_DOCONDBRANCH -00fcc4 fcc9 .dw PFA_ICOMPARE_NEXTLOOP -00fcc5 f589 .dw XT_2DROP -00fcc6 f15d .dw XT_TRUE -00fcc7 f2e6 .dw XT_UNLOOP -00fcc8 f026 .dw XT_EXIT - PFA_ICOMPARE_NEXTLOOP: -00fcc9 f241 .dw XT_1PLUS -00fcca f0d6 .dw XT_SWAP -00fccb f579 .dw XT_CELLPLUS -00fccc f0d6 .dw XT_SWAP -00fccd f046 .dw XT_DOLITERAL -00fcce 0002 .dw 2 -00fccf f2cc .dw XT_DOPLUSLOOP -00fcd0 fcb4 .dw PFA_ICOMPARE_LOOP - PFA_ICOMPARE_DONE: -00fcd1 f589 .dw XT_2DROP -00fcd2 f166 .dw XT_ZERO -00fcd3 f026 .dw XT_EXIT - - .if WANT_IGNORECASE == 1 - .endif - - .include "words/star.asm" - - ; Arithmetics - ; multiply routine - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_STAR: -00fcd4 ff01 .dw $ff01 -00fcd5 002a .db "*",0 -00fcd6 fc9d .dw VE_HEAD - .set VE_HEAD = VE_STAR - XT_STAR: -00fcd7 f001 .dw DO_COLON - PFA_STAR: - .endif - -00fcd8 f1b8 .dw XT_MSTAR -00fcd9 f0eb .dw XT_DROP -00fcda f026 .dw XT_EXIT - .include "words/j.asm" - - ; Compiler - ; loop counter of outer loop - VE_J: -00fcdb ff01 .dw $FF01 -00fcdc 006a .db "j",0 -00fcdd fcd4 .dw VE_HEAD - .set VE_HEAD = VE_J - XT_J: -00fcde f001 .dw DO_COLON - PFA_J: -00fcdf f288 .dw XT_RP_FETCH -00fce0 f046 .dw XT_DOLITERAL -00fce1 0007 .dw 7 -00fce2 f1af .dw XT_PLUS -00fce3 f08b .dw XT_FETCH -00fce4 f288 .dw XT_RP_FETCH -00fce5 f046 .dw XT_DOLITERAL -00fce6 0009 .dw 9 -00fce7 f1af .dw XT_PLUS -00fce8 f08b .dw XT_FETCH -00fce9 f1af .dw XT_PLUS -00fcea f026 .dw XT_EXIT - - .include "words/dabs.asm" - - ; Arithmetics - ; double cell absolute value - VE_DABS: -00fceb ff04 .dw $ff04 -00fcec 6164 -00fced 7362 .db "dabs" -00fcee fcdb .dw VE_HEAD - .set VE_HEAD = VE_DABS - XT_DABS: -00fcef f001 .dw DO_COLON - PFA_DABS: -00fcf0 f0c3 .dw XT_DUP -00fcf1 f133 .dw XT_ZEROLESS -00fcf2 f03f .dw XT_DOCONDBRANCH -00fcf3 fcf5 .dw PFA_DABS1 -00fcf4 fcfc .dw XT_DNEGATE - PFA_DABS1: -00fcf5 f026 .dw XT_EXIT - ; : dabs ( ud1 -- +d2 ) dup 0< if dnegate then ; - .include "words/dnegate.asm" - - ; Arithmetics - ; double cell negation - VE_DNEGATE: -00fcf6 ff07 .dw $ff07 -00fcf7 6e64 -00fcf8 6765 -00fcf9 7461 -00fcfa 0065 .db "dnegate",0 -00fcfb fceb .dw VE_HEAD - .set VE_HEAD = VE_DNEGATE - XT_DNEGATE: -00fcfc f001 .dw DO_COLON - PFA_DNEGATE: -00fcfd f456 .dw XT_DINVERT -00fcfe fda1 .dw XT_ONE -00fcff f166 .dw XT_ZERO -00fd00 f430 .dw XT_DPLUS -00fd01 f026 .dw XT_EXIT - ; : dnegate ( ud1 -- ud2 ) dinvert 1. d+ ; - .include "words/cmove.asm" - - ; Memory - ; copy data in RAM, from lower to higher addresses - VE_CMOVE: -00fd02 ff05 .dw $ff05 -00fd03 6d63 -00fd04 766f -00fd05 0065 .db "cmove",0 -00fd06 fcf6 .dw VE_HEAD - .set VE_HEAD = VE_CMOVE - XT_CMOVE: -00fd07 fd08 .dw PFA_CMOVE - PFA_CMOVE: -00fd08 93bf push xh -00fd09 93af push xl -00fd0a 91e9 ld zl, Y+ -00fd0b 91f9 ld zh, Y+ ; addr-to -00fd0c 91a9 ld xl, Y+ -00fd0d 91b9 ld xh, Y+ ; addr-from -00fd0e 2f09 mov temp0, tosh -00fd0f 2b08 or temp0, tosl -00fd10 f021 brbs 1, PFA_CMOVE1 - PFA_CMOVE2: -00fd11 911d ld temp1, X+ -00fd12 9311 st Z+, temp1 -00fd13 9701 sbiw tosl, 1 -00fd14 f7e1 brbc 1, PFA_CMOVE2 - PFA_CMOVE1: -00fd15 91af pop xl -00fd16 91bf pop xh -00fd17 9189 -00fd18 9199 loadtos -00fd19 940c f005 jmp_ DO_NEXT - .include "words/2swap.asm" - - ; Stack - ; Exchange the two top cell pairs - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2SWAP: -00fd1b ff05 .dw $ff05 -00fd1c 7332 -00fd1d 6177 -00fd1e 0070 .db "2swap",0 -00fd1f fd02 .dw VE_HEAD - .set VE_HEAD = VE_2SWAP - XT_2SWAP: -00fd20 f001 .dw DO_COLON - PFA_2SWAP: - - .endif -00fd21 f0f3 .dw XT_ROT -00fd22 f111 .dw XT_TO_R -00fd23 f0f3 .dw XT_ROT -00fd24 f108 .dw XT_R_FROM -00fd25 f026 .dw XT_EXIT - - .include "words/tib.asm" - - ; System - ; refills the input buffer - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_REFILLTIB: -00fd26 ff0a .dw $ff0a -00fd27 6572 -00fd28 6966 -00fd29 6c6c -00fd2a 742d -00fd2b 6269 .db "refill-tib" -00fd2c fd1b .dw VE_HEAD - .set VE_HEAD = VE_REFILLTIB - XT_REFILLTIB: -00fd2d f001 .dw DO_COLON - PFA_REFILLTIB: - .endif -00fd2e fd49 .dw XT_TIB -00fd2f f046 .dw XT_DOLITERAL -00fd30 005a .dw TIB_SIZE -00fd31 f8ac .dw XT_ACCEPT -00fd32 fd4f .dw XT_NUMBERTIB -00fd33 f093 .dw XT_STORE -00fd34 f166 .dw XT_ZERO -00fd35 f599 .dw XT_TO_IN -00fd36 f093 .dw XT_STORE -00fd37 f15d .dw XT_TRUE ; -1 -00fd38 f026 .dw XT_EXIT - - ; ( -- addr n ) - ; System - ; address and current length of the input buffer - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SOURCETIB: -00fd39 ff0a .dw $FF0A -00fd3a 6f73 -00fd3b 7275 -00fd3c 6563 -00fd3d 742d -00fd3e 6269 .db "source-tib" -00fd3f fd26 .dw VE_HEAD - .set VE_HEAD = VE_SOURCETIB - XT_SOURCETIB: -00fd40 f001 .dw DO_COLON - PFA_SOURCETIB: - .endif -00fd41 fd49 .dw XT_TIB -00fd42 fd4f .dw XT_NUMBERTIB -00fd43 f08b .dw XT_FETCH -00fd44 f026 .dw XT_EXIT - - ; ( -- addr ) - ; System Variable - ; terminal input buffer address - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TIB: -00fd45 ff03 .dw $ff03 -00fd46 6974 -00fd47 0062 .db "tib",0 -00fd48 fd39 .dw VE_HEAD - .set VE_HEAD = VE_TIB - XT_TIB: -00fd49 f054 .dw PFA_DOVARIABLE - PFA_TIB: -00fd4a 016f .dw ram_tib - .dseg -00016f ram_tib: .byte TIB_SIZE - .cseg - .endif - - ; ( -- addr ) - ; System Variable - ; variable holding the number of characters in TIB - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NUMBERTIB: -00fd4b ff04 .dw $ff04 -00fd4c 7423 -00fd4d 6269 .db "#tib" -00fd4e fd45 .dw VE_HEAD - .set VE_HEAD = VE_NUMBERTIB - XT_NUMBERTIB: -00fd4f f054 .dw PFA_DOVARIABLE - PFA_NUMBERTIB: -00fd50 01c9 .dw ram_sharptib - .dseg -0001c9 ram_sharptib: .byte 2 - .cseg - .endif - - .include "words/init-ram.asm" - - ; Tools - ; copy len cells from eeprom to ram - VE_EE2RAM: -00fd51 ff06 .dw $ff06 -00fd52 6565 -00fd53 723e -00fd54 6d61 .db "ee>ram" -00fd55 fd4b .dw VE_HEAD - .set VE_HEAD = VE_EE2RAM - XT_EE2RAM: -00fd56 f001 .dw DO_COLON - PFA_EE2RAM: ; ( -- ) -00fd57 f166 .dw XT_ZERO -00fd58 f2ad .dw XT_DODO - PFA_EE2RAM_1: - ; ( -- e-addr r-addr ) -00fd59 f0e1 .dw XT_OVER -00fd5a f371 .dw XT_FETCHE -00fd5b f0e1 .dw XT_OVER -00fd5c f093 .dw XT_STORE -00fd5d f579 .dw XT_CELLPLUS -00fd5e f0d6 .dw XT_SWAP -00fd5f f579 .dw XT_CELLPLUS -00fd60 f0d6 .dw XT_SWAP -00fd61 f2db .dw XT_DOLOOP -00fd62 fd59 .dw PFA_EE2RAM_1 - PFA_EE2RAM_2: -00fd63 f589 .dw XT_2DROP -00fd64 f026 .dw XT_EXIT - - ; ( -- ) - ; Tools - ; setup the default user area from eeprom - VE_INIT_RAM: -00fd65 ff08 .dw $ff08 -00fd66 6e69 -00fd67 7469 -00fd68 722d -00fd69 6d61 .db "init-ram" -00fd6a fd51 .dw VE_HEAD - .set VE_HEAD = VE_INIT_RAM - XT_INIT_RAM: -00fd6b f001 .dw DO_COLON - PFA_INI_RAM: ; ( -- ) -00fd6c f046 .dw XT_DOLITERAL -00fd6d 007c .dw EE_INITUSER -00fd6e f314 .dw XT_UP_FETCH -00fd6f f046 .dw XT_DOLITERAL -00fd70 0022 .dw SYSUSERSIZE -00fd71 f216 .dw XT_2SLASH -00fd72 fd56 .dw XT_EE2RAM -00fd73 f026 .dw XT_EXIT - .include "dict/compiler2.inc" - - ; included almost independently from each other - ; on a include-per-use basis - ; - .if DICT_COMPILER2 == 0 - .endif - .include "words/bounds.asm" - - ; Tools - ; convert a string to an address range - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BOUNDS: -00fd74 ff06 .dw $ff06 -00fd75 6f62 -00fd76 6e75 -00fd77 7364 .db "bounds" -00fd78 fd65 .dw VE_HEAD - .set VE_HEAD = VE_BOUNDS - XT_BOUNDS: -00fd79 f001 .dw DO_COLON - PFA_BOUNDS: - .endif -00fd7a f0e1 .dw XT_OVER -00fd7b f1af .dw XT_PLUS -00fd7c f0d6 .dw XT_SWAP -00fd7d f026 .dw XT_EXIT - .include "words/s-to-d.asm" - - ; Conversion - ; extend (signed) single cell value to double cell - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_S2D: -00fd7e ff03 .dw $ff03 -00fd7f 3e73 -00fd80 0064 .db "s>d",0 -00fd81 fd74 .dw VE_HEAD - .set VE_HEAD = VE_S2D - XT_S2D: -00fd82 f001 .dw DO_COLON - PFA_S2D: - .endif -00fd83 f0c3 .dw XT_DUP -00fd84 f133 .dw XT_ZEROLESS -00fd85 f026 .dw XT_EXIT - .include "words/to-body.asm" - - ; Core - ; get body from XT - VE_TO_BODY: -00fd86 ff05 .dw $ff05 -00fd87 623e -00fd88 646f -00fd89 0079 .db ">body",0 -00fd8a fd7e .dw VE_HEAD - .set VE_HEAD = VE_TO_BODY - XT_TO_BODY: -00fd8b f242 .dw PFA_1PLUS - .elif AMFORTH_NRWW_SIZE>4000 - .elif AMFORTH_NRWW_SIZE>2000 - .else - .endif - ; now colon words - ;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/2literal.asm" - - ; Compiler - ; compile a cell pair literal in colon definitions - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2LITERAL: -00fd8c 0008 .dw $0008 -00fd8d 6c32 -00fd8e 7469 -00fd8f 7265 -00fd90 6c61 .db "2literal" -00fd91 fd86 .dw VE_HEAD - .set VE_HEAD = VE_2LITERAL - XT_2LITERAL: -00fd92 f001 .dw DO_COLON - PFA_2LITERAL: - .endif -00fd93 f0d6 .dw XT_SWAP -00fd94 01f1 .dw XT_LITERAL -00fd95 01f1 .dw XT_LITERAL -00fd96 f026 .dw XT_EXIT - .include "words/equal.asm" - - ; Compare - ; compares two values for equality - VE_EQUAL: -00fd97 ff01 .dw $ff01 -00fd98 003d .db "=",0 -00fd99 fd8c .dw VE_HEAD - .set VE_HEAD = VE_EQUAL - XT_EQUAL: -00fd9a f001 .dw DO_COLON - PFA_EQUAL: -00fd9b f1a5 .dw XT_MINUS -00fd9c f12c .dw XT_ZEROEQUAL -00fd9d f026 .dw XT_EXIT - .include "words/num-constants.asm" - - .endif - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ONE: -00fd9e ff01 .dw $ff01 -00fd9f 0031 .db "1",0 -00fda0 fd97 .dw VE_HEAD - .set VE_HEAD = VE_ONE - XT_ONE: -00fda1 f054 .dw PFA_DOVARIABLE - PFA_ONE: - .endif -00fda2 0001 .DW 1 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TWO: -00fda3 ff01 .dw $ff01 -00fda4 0032 .db "2",0 -00fda5 fd9e .dw VE_HEAD - .set VE_HEAD = VE_TWO - XT_TWO: -00fda6 f054 .dw PFA_DOVARIABLE - PFA_TWO: - .endif -00fda7 0002 .DW 2 - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_MINUSONE: -00fda8 ff02 .dw $ff02 -00fda9 312d .db "-1" -00fdaa fda3 .dw VE_HEAD - .set VE_HEAD = VE_MINUSONE - XT_MINUSONE: -00fdab f054 .dw PFA_DOVARIABLE - PFA_MINUSONE: - .endif -00fdac ffff .DW -1 - .include "dict_appl_core.inc" - - ; do not delete it! - - .set flashlast = pc - .if (pc>FLASHEND) - .endif - - .dseg - ; define a label for the 1st free ram address - HERESTART: - .eseg - .include "amforth-eeprom.inc" -000046 ff ff - ; some configs -000048 9a 05 CFG_DP: .dw DPSTART ; Dictionary Pointer -00004a cb 01 EE_HERE: .dw HERESTART ; Memory Allocation -00004c a0 00 EE_EHERE: .dw EHERESTART ; EEProm Memory Allocation -00004e 42 04 CFG_WLSCOPE: .dw XT_GET_CURRENT ; default wordlist scope -000050 6e 00 CFG_FORTHRECOGNIZER: .dw CFG_RECOGNIZERLISTLEN ; Recognizer word set - ; LEAVE stack is between data stack and return stack. -000052 b0 40 CFG_LP0: .dw stackstart+1 -000054 ec 04 CFG_TURNKEY: .dw XT_APPLTURNKEY ; TURNKEY -000056 4d f5 CFG_ENVIRONMENT:.dw VE_ENVHEAD ; environmental queries -000058 5a 00 CFG_CURRENT: .dw CFG_FORTHWORDLIST ; forth-wordlist -00005a a8 fd CFG_FORTHWORDLIST:.dw VE_HEAD ; pre-defined (compiled in) wordlist - CFG_ORDERLISTLEN: -00005c 01 00 .dw 1 - CFG_ORDERLIST: ; list of wordlist id, exactly numwordlist entries -00005e 5a 00 .dw CFG_FORTHWORDLIST ; get/set-order -000060 .byte (NUMWORDLISTS-1)*CELLSIZE ; one slot is already used - CFG_RECOGNIZERLISTLEN: -00006e 02 00 .dw 2 - CFG_RECOGNIZERLIST: -000070 3f fb .dw XT_REC_FIND -000072 2b fb .dw XT_REC_NUM -000074 .byte (NUMRECOGNIZERS-2)*CELLSIZE ; two slots are already used - - EE_STOREI: -000078 90 f3 .dw XT_DO_STOREI ; Store a cell into flash - - ; MARKER saves everything up to here. Nothing beyond gets saved - EE_MARKER: -00007a 7a 00 .dw EE_MARKER - - ; default user area - EE_INITUSER: -00007c 00 00 .dw 0 ; USER_STATE -00007e 00 00 .dw 0 ; USER_FOLLOWER -000080 ff 40 .dw rstackstart ; USER_RP -000082 af 40 .dw stackstart ; USER_SP0 -000084 af 40 .dw stackstart ; USER_SP - -000086 00 00 .dw 0 ; USER_HANDLER -000088 0a 00 .dw 10 ; USER_BASE - -00008a b6 00 .dw XT_TX ; USER_EMIT -00008c c4 00 .dw XT_TXQ ; USER_EMITQ -00008e 8b 00 .dw XT_RX ; USER_KEY -000090 a6 00 .dw XT_RXQ ; USER_KEYQ -000092 40 fd .dw XT_SOURCETIB ; USER_SOURCE -000094 00 00 .dw 0 ; USER_G_IN -000096 2d fd .dw XT_REFILLTIB ; USER_REFILL -000098 05 fa .dw XT_DEFAULT_PROMPTOK -00009a 24 fa .dw XT_DEFAULT_PROMPTERROR -00009c 14 fa .dw XT_DEFAULT_PROMPTREADY - - ; calculate baud rate error - .equ UBRR_VAL = ((F_CPU+BAUD*8)/(BAUD*16)-1) ; smart round - .equ BAUD_REAL = (F_CPU/(16*(UBRR_VAL+1))) ; effective baud rate - .equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000) ; error in pro mille - - .if ((BAUD_ERROR>BAUD_MAXERROR) || (BAUD_ERROR<-BAUD_MAXERROR)) - .endif - EE_UBRRVAL: -00009e 19 00 .dw UBRR_VAL ; BAUDRATE - ; 1st free address in EEPROM. - EHERESTART: - .cseg - - -RESOURCE USE INFORMATION ------------------------- - -Notice: -The register and instruction counts are symbol table hit counts, -and hence implicitly used resources are not counted, eg, the -'lpm' instruction without operands implicitly uses r0 and z, -none of which are counted. - -x,y,z are separate entities in the symbol table and are -counted separately from r26..r31 here. - -.dseg memory usage only counts static data declared with .byte - -"ATmega1284P" register use summary: -r0 : 25 r1 : 5 r2 : 10 r3 : 12 r4 : 4 r5 : 1 r6 : 0 r7 : 0 -r8 : 0 r9 : 0 r10: 1 r11: 6 r12: 0 r13: 0 r14: 22 r15: 20 -r16: 89 r17: 61 r18: 61 r19: 37 r20: 13 r21: 38 r22: 11 r23: 3 -r24: 212 r25: 145 r26: 28 r27: 17 r28: 7 r29: 4 r30: 90 r31: 49 -x : 4 y : 217 z : 50 -Registers used: 29 out of 35 (82.9%) - -"ATmega1284P" instruction use summary: -.lds : 0 .sts : 0 adc : 22 add : 17 adiw : 17 and : 4 -andi : 3 asr : 2 bclr : 0 bld : 0 brbc : 2 brbs : 7 -brcc : 3 brcs : 1 break : 0 breq : 6 brge : 1 brhc : 0 -brhs : 0 brid : 0 brie : 0 brlo : 1 brlt : 3 brmi : 3 -brne : 22 brpl : 0 brsh : 0 brtc : 0 brts : 0 brvc : 0 -brvs : 2 bset : 0 bst : 0 call : 2 cbi : 7 cbr : 1 -clc : 2 clh : 0 cli : 7 cln : 0 clr : 23 cls : 0 -clt : 0 clv : 0 clz : 0 com : 14 cp : 11 cpc : 10 -cpi : 2 cpse : 0 dec : 10 elpm : 16 eor : 3 fmul : 0 -fmuls : 0 fmulsu: 0 icall : 0 ijmp : 1 in : 25 inc : 3 -jmp : 14 ld : 145 ldd : 4 ldi : 41 lds : 1 lpm : 0 -lsl : 14 lsr : 2 mov : 16 movw : 72 mul : 5 muls : 1 -mulsu : 2 neg : 0 nop : 0 or : 9 ori : 2 out : 31 -pop : 49 push : 43 rcall : 48 ret : 7 reti : 1 rjmp : 105 -rol : 32 ror : 6 sbc : 9 sbci : 3 sbi : 8 sbic : 3 -sbis : 0 sbiw : 16 sbr : 0 sbrc : 5 sbrs : 7 sec : 1 -seh : 0 sei : 1 sen : 0 ser : 4 ses : 0 set : 0 -sev : 0 sez : 0 sleep : 0 spm : 2 st : 81 std : 8 -sts : 1 sub : 6 subi : 3 swap : 0 tst : 0 wdr : 0 - -Instructions used: 72 out of 114 (63.2%) - -"ATmega1284P" memory use summary [bytes]: -Segment Begin End Code Data Used Size Use% ---------------------------------------------------------------- -[.cseg] 0x000000 0x01fb5a 2156 14646 16802 131072 12.8% -[.dseg] 0x000100 0x0001cb 0 203 203 16384 1.2% -[.eseg] 0x000000 0x0000a0 0 160 160 4096 3.9% - -Assembly complete, 0 errors, 8 warnings diff --git a/amforth-6.5/appl/eval-pollin/p1284-16.map b/amforth-6.5/appl/eval-pollin/p1284-16.map deleted file mode 100644 index 81938c3..0000000 --- a/amforth-6.5/appl/eval-pollin/p1284-16.map +++ /dev/null @@ -1,2253 +0,0 @@ - -AVRASM ver. 2.1.52 p1284-16.asm Sun Apr 30 20:10:15 2017 - - -SET DICT_COMPILER2 00000001 -SET cpu_msp430 00000000 -SET cpu_avr8 00000001 -SET USER_STATE 00000000 -SET USER_FOLLOWER 00000002 -SET USER_RP 00000004 -SET USER_SP0 00000006 -SET USER_SP 00000008 -SET USER_HANDLER 0000000a -SET USER_BASE 0000000c -SET USER_EMIT 0000000e -SET USER_EMITQ 00000010 -SET USER_KEY 00000012 -SET USER_KEYQ 00000014 -SET USER_SOURCE 00000016 -SET USER_TO_IN 00000018 -SET USER_REFILL 0000001a -SET USER_P_OK 0000001c -SET USER_P_ERR 0000001e -SET USER_P_RDY 00000020 -SET SYSUSERSIZE 00000022 -DEF zerol r2 -DEF zeroh r3 -DEF upl r4 -DEF uph r5 -DEF al r6 -DEF ah r7 -DEF bl r8 -DEF bh r9 -DEF mcu_boot r10 -DEF isrflag r11 -DEF temp4 r14 -DEF temp5 r15 -DEF temp0 r16 -DEF temp1 r17 -DEF temp2 r18 -DEF temp3 r19 -DEF temp6 r20 -DEF temp7 r21 -DEF tosl r24 -DEF tosh r25 -DEF wl r22 -DEF wh r23 -EQU SIGNATURE_000 0000001e -EQU SIGNATURE_001 00000097 -EQU SIGNATURE_002 00000005 -EQU UDR1 000000ce -EQU UBRR1L 000000cc -EQU UBRR1H 000000cd -EQU UCSR1C 000000ca -EQU UCSR1B 000000c9 -EQU UCSR1A 000000c8 -EQU UDR0 000000c6 -EQU UBRR0L 000000c4 -EQU UBRR0H 000000c5 -EQU UCSR0C 000000c2 -EQU UCSR0B 000000c1 -EQU UCSR0A 000000c0 -EQU TWAMR 000000bd -EQU TWCR 000000bc -EQU TWDR 000000bb -EQU TWAR 000000ba -EQU TWSR 000000b9 -EQU TWBR 000000b8 -EQU ASSR 000000b6 -EQU OCR2B 000000b4 -EQU OCR2A 000000b3 -EQU TCNT2 000000b2 -EQU TCCR2B 000000b1 -EQU TCCR2A 000000b0 -EQU OCR3BL 0000009a -EQU OCR3BH 0000009b -EQU OCR3AL 00000098 -EQU OCR3AH 00000099 -EQU ICR3L 00000096 -EQU ICR3H 00000097 -EQU TCNT3L 00000094 -EQU TCNT3H 00000095 -EQU TCCR3C 00000092 -EQU TCCR3B 00000091 -EQU TCCR3A 00000090 -EQU OCR1BL 0000008a -EQU OCR1BH 0000008b -EQU OCR1AL 00000088 -EQU OCR1AH 00000089 -EQU ICR1L 00000086 -EQU ICR1H 00000087 -EQU TCNT1L 00000084 -EQU TCNT1H 00000085 -EQU TCCR1C 00000082 -EQU TCCR1B 00000081 -EQU TCCR1A 00000080 -EQU DIDR1 0000007f -EQU DIDR0 0000007e -EQU ADMUX 0000007c -EQU ADCSRB 0000007b -EQU ADCSRA 0000007a -EQU ADCH 00000079 -EQU ADCL 00000078 -EQU PCMSK3 00000073 -EQU TIMSK3 00000071 -EQU TIMSK2 00000070 -EQU TIMSK1 0000006f -EQU TIMSK0 0000006e -EQU PCMSK2 0000006d -EQU PCMSK1 0000006c -EQU PCMSK0 0000006b -EQU EICRA 00000069 -EQU PCICR 00000068 -EQU OSCCAL 00000066 -EQU PRR1 00000065 -EQU PRR0 00000064 -EQU CLKPR 00000061 -EQU WDTCSR 00000060 -EQU SREG 0000003f -EQU SPL 0000003d -EQU SPH 0000003e -EQU RAMPZ 0000003b -EQU SPMCSR 00000037 -EQU MCUCR 00000035 -EQU MCUSR 00000034 -EQU SMCR 00000033 -EQU OCDR 00000031 -EQU ACSR 00000030 -EQU SPDR 0000002e -EQU SPSR 0000002d -EQU SPCR 0000002c -EQU GPIOR2 0000002b -EQU GPIOR1 0000002a -EQU OCR0B 00000028 -EQU OCR0A 00000027 -EQU TCNT0 00000026 -EQU TCCR0B 00000025 -EQU TCCR0A 00000024 -EQU GTCCR 00000023 -EQU EEARH 00000022 -EQU EEARL 00000021 -EQU EEDR 00000020 -EQU EECR 0000001f -EQU GPIOR0 0000001e -EQU EIMSK 0000001d -EQU EIFR 0000001c -EQU PCIFR 0000001b -EQU TIFR3 00000018 -EQU TIFR2 00000017 -EQU TIFR1 00000016 -EQU TIFR0 00000015 -EQU PORTD 0000000b -EQU DDRD 0000000a -EQU PIND 00000009 -EQU PORTC 00000008 -EQU DDRC 00000007 -EQU PINC 00000006 -EQU PORTB 00000005 -EQU DDRB 00000004 -EQU PINB 00000003 -EQU PORTA 00000002 -EQU DDRA 00000001 -EQU PINA 00000000 -EQU ACME 00000006 -EQU ACIS0 00000000 -EQU ACIS1 00000001 -EQU ACIC 00000002 -EQU ACIE 00000003 -EQU ACI 00000004 -EQU ACO 00000005 -EQU ACBG 00000006 -EQU ACD 00000007 -EQU AIN0D 00000000 -EQU AIN1D 00000001 -EQU UDR0_0 00000000 -EQU UDR0_1 00000001 -EQU UDR0_2 00000002 -EQU UDR0_3 00000003 -EQU UDR0_4 00000004 -EQU UDR0_5 00000005 -EQU UDR0_6 00000006 -EQU UDR0_7 00000007 -EQU MPCM0 00000000 -EQU U2X0 00000001 -EQU UPE0 00000002 -EQU DOR0 00000003 -EQU FE0 00000004 -EQU UDRE0 00000005 -EQU TXC0 00000006 -EQU RXC0 00000007 -EQU TXB80 00000000 -EQU RXB80 00000001 -EQU UCSZ02 00000002 -EQU TXEN0 00000003 -EQU RXEN0 00000004 -EQU UDRIE0 00000005 -EQU TXCIE0 00000006 -EQU RXCIE0 00000007 -EQU UCPOL0 00000000 -EQU UCSZ00 00000001 -EQU UCPHA0 00000001 -EQU UCSZ01 00000002 -EQU UDORD0 00000002 -EQU USBS0 00000003 -EQU UPM00 00000004 -EQU UPM01 00000005 -EQU UMSEL00 00000006 -EQU UMSEL0 00000006 -EQU UMSEL01 00000007 -EQU UMSEL1 00000007 -EQU UBRR8 00000000 -EQU UBRR9 00000001 -EQU UBRR10 00000002 -EQU UBRR11 00000003 -EQU _UBRR0 00000000 -EQU _UBRR1 00000001 -EQU UBRR2 00000002 -EQU UBRR3 00000003 -EQU UBRR4 00000004 -EQU UBRR5 00000005 -EQU UBRR6 00000006 -EQU UBRR7 00000007 -EQU PORTA0 00000000 -EQU PA0 00000000 -EQU PORTA1 00000001 -EQU PA1 00000001 -EQU PORTA2 00000002 -EQU PA2 00000002 -EQU PORTA3 00000003 -EQU PA3 00000003 -EQU PORTA4 00000004 -EQU PA4 00000004 -EQU PORTA5 00000005 -EQU PA5 00000005 -EQU PORTA6 00000006 -EQU PA6 00000006 -EQU PORTA7 00000007 -EQU PA7 00000007 -EQU DDA0 00000000 -EQU DDA1 00000001 -EQU DDA2 00000002 -EQU DDA3 00000003 -EQU DDA4 00000004 -EQU DDA5 00000005 -EQU DDA6 00000006 -EQU DDA7 00000007 -EQU PINA0 00000000 -EQU PINA1 00000001 -EQU PINA2 00000002 -EQU PINA3 00000003 -EQU PINA4 00000004 -EQU PINA5 00000005 -EQU PINA6 00000006 -EQU PINA7 00000007 -EQU PORTB0 00000000 -EQU PB0 00000000 -EQU PORTB1 00000001 -EQU PB1 00000001 -EQU PORTB2 00000002 -EQU PB2 00000002 -EQU PORTB3 00000003 -EQU PB3 00000003 -EQU PORTB4 00000004 -EQU PB4 00000004 -EQU PORTB5 00000005 -EQU PB5 00000005 -EQU PORTB6 00000006 -EQU PB6 00000006 -EQU PORTB7 00000007 -EQU PB7 00000007 -EQU DDB0 00000000 -EQU DDB1 00000001 -EQU DDB2 00000002 -EQU DDB3 00000003 -EQU DDB4 00000004 -EQU DDB5 00000005 -EQU DDB6 00000006 -EQU DDB7 00000007 -EQU PINB0 00000000 -EQU PINB1 00000001 -EQU PINB2 00000002 -EQU PINB3 00000003 -EQU PINB4 00000004 -EQU PINB5 00000005 -EQU PINB6 00000006 -EQU PINB7 00000007 -EQU PORTC0 00000000 -EQU PC0 00000000 -EQU PORTC1 00000001 -EQU PC1 00000001 -EQU PORTC2 00000002 -EQU PC2 00000002 -EQU PORTC3 00000003 -EQU PC3 00000003 -EQU PORTC4 00000004 -EQU PC4 00000004 -EQU PORTC5 00000005 -EQU PC5 00000005 -EQU PORTC6 00000006 -EQU PC6 00000006 -EQU PORTC7 00000007 -EQU PC7 00000007 -EQU DDC0 00000000 -EQU DDC1 00000001 -EQU DDC2 00000002 -EQU DDC3 00000003 -EQU DDC4 00000004 -EQU DDC5 00000005 -EQU DDC6 00000006 -EQU DDC7 00000007 -EQU PINC0 00000000 -EQU PINC1 00000001 -EQU PINC2 00000002 -EQU PINC3 00000003 -EQU PINC4 00000004 -EQU PINC5 00000005 -EQU PINC6 00000006 -EQU PINC7 00000007 -EQU PORTD0 00000000 -EQU PD0 00000000 -EQU PORTD1 00000001 -EQU PD1 00000001 -EQU PORTD2 00000002 -EQU PD2 00000002 -EQU PORTD3 00000003 -EQU PD3 00000003 -EQU PORTD4 00000004 -EQU PD4 00000004 -EQU PORTD5 00000005 -EQU PD5 00000005 -EQU PORTD6 00000006 -EQU PD6 00000006 -EQU PORTD7 00000007 -EQU PD7 00000007 -EQU DDD0 00000000 -EQU DDD1 00000001 -EQU DDD2 00000002 -EQU DDD3 00000003 -EQU DDD4 00000004 -EQU DDD5 00000005 -EQU DDD6 00000006 -EQU DDD7 00000007 -EQU PIND0 00000000 -EQU PIND1 00000001 -EQU PIND2 00000002 -EQU PIND3 00000003 -EQU PIND4 00000004 -EQU PIND5 00000005 -EQU PIND6 00000006 -EQU PIND7 00000007 -EQU TOIE0 00000000 -EQU OCIE0A 00000001 -EQU OCIE0B 00000002 -EQU TOV0 00000000 -EQU OCF0A 00000001 -EQU OCF0B 00000002 -EQU WGM00 00000000 -EQU WGM01 00000001 -EQU COM0B0 00000004 -EQU COM0B1 00000005 -EQU COM0A0 00000006 -EQU COM0A1 00000007 -EQU CS00 00000000 -EQU CS01 00000001 -EQU CS02 00000002 -EQU WGM02 00000003 -EQU FOC0B 00000006 -EQU FOC0A 00000007 -EQU TCNT0_0 00000000 -EQU TCNT0_1 00000001 -EQU TCNT0_2 00000002 -EQU TCNT0_3 00000003 -EQU TCNT0_4 00000004 -EQU TCNT0_5 00000005 -EQU TCNT0_6 00000006 -EQU TCNT0_7 00000007 -EQU OCR0A_0 00000000 -EQU OCR0A_1 00000001 -EQU OCR0A_2 00000002 -EQU OCR0A_3 00000003 -EQU OCR0A_4 00000004 -EQU OCR0A_5 00000005 -EQU OCR0A_6 00000006 -EQU OCR0A_7 00000007 -EQU OCR0B_0 00000000 -EQU OCR0B_1 00000001 -EQU OCR0B_2 00000002 -EQU OCR0B_3 00000003 -EQU OCR0B_4 00000004 -EQU OCR0B_5 00000005 -EQU OCR0B_6 00000006 -EQU OCR0B_7 00000007 -EQU PSRSYNC 00000000 -EQU PSR10 00000000 -EQU TSM 00000007 -EQU TOIE1 00000000 -EQU OCIE1A 00000001 -EQU OCIE1B 00000002 -EQU ICIE1 00000005 -EQU TOV1 00000000 -EQU OCF1A 00000001 -EQU OCF1B 00000002 -EQU ICF1 00000005 -EQU WGM10 00000000 -EQU PWM10 00000000 -EQU WGM11 00000001 -EQU PWM11 00000001 -EQU COM1B0 00000004 -EQU COM1B1 00000005 -EQU COM1A0 00000006 -EQU COM1A1 00000007 -EQU CS10 00000000 -EQU CS11 00000001 -EQU CS12 00000002 -EQU WGM12 00000003 -EQU CTC1 00000003 -EQU WGM13 00000004 -EQU ICES1 00000006 -EQU ICNC1 00000007 -EQU FOC1B 00000006 -EQU FOC1A 00000007 -EQU TOIE2 00000000 -EQU TOIE2A 00000000 -EQU OCIE2A 00000001 -EQU OCIE2B 00000002 -EQU TOV2 00000000 -EQU OCF2A 00000001 -EQU OCF2B 00000002 -EQU WGM20 00000000 -EQU WGM21 00000001 -EQU COM2B0 00000004 -EQU COM2B1 00000005 -EQU COM2A0 00000006 -EQU COM2A1 00000007 -EQU CS20 00000000 -EQU CS21 00000001 -EQU CS22 00000002 -EQU WGM22 00000003 -EQU FOC2B 00000006 -EQU FOC2A 00000007 -EQU TCNT2_0 00000000 -EQU TCNT2_1 00000001 -EQU TCNT2_2 00000002 -EQU TCNT2_3 00000003 -EQU TCNT2_4 00000004 -EQU TCNT2_5 00000005 -EQU TCNT2_6 00000006 -EQU TCNT2_7 00000007 -EQU OCR2A_0 00000000 -EQU OCR2A_1 00000001 -EQU OCR2A_2 00000002 -EQU OCR2A_3 00000003 -EQU OCR2A_4 00000004 -EQU OCR2A_5 00000005 -EQU OCR2A_6 00000006 -EQU OCR2A_7 00000007 -EQU OCR2B_0 00000000 -EQU OCR2B_1 00000001 -EQU OCR2B_2 00000002 -EQU OCR2B_3 00000003 -EQU OCR2B_4 00000004 -EQU OCR2B_5 00000005 -EQU OCR2B_6 00000006 -EQU OCR2B_7 00000007 -EQU TCR2BUB 00000000 -EQU TCR2AUB 00000001 -EQU OCR2BUB 00000002 -EQU OCR2AUB 00000003 -EQU TCN2UB 00000004 -EQU AS2 00000005 -EQU EXCLK 00000006 -EQU PSRASY 00000001 -EQU PSR2 00000001 -EQU TOIE3 00000000 -EQU OCIE3A 00000001 -EQU OCIE3B 00000002 -EQU ICIE3 00000005 -EQU TOV3 00000000 -EQU OCF3A 00000001 -EQU OCF3B 00000002 -EQU ICF3 00000005 -EQU WGM30 00000000 -EQU WGM31 00000001 -EQU COM3B0 00000004 -EQU COM3B1 00000005 -EQU COM3A0 00000006 -EQU COM3A1 00000007 -EQU CS30 00000000 -EQU CS31 00000001 -EQU CS32 00000002 -EQU WGM32 00000003 -EQU WGM33 00000004 -EQU ICES3 00000006 -EQU ICNC3 00000007 -EQU FOC3B 00000006 -EQU FOC3A 00000007 -EQU OCR3AH0 00000000 -EQU OCR3AH1 00000001 -EQU OCR3AH2 00000002 -EQU OCR3AH3 00000003 -EQU OCR3AH4 00000004 -EQU OCR3AH5 00000005 -EQU OCR3AH6 00000006 -EQU OCR3AH7 00000007 -EQU OCR3AL0 00000000 -EQU OCR3AL1 00000001 -EQU OCR3AL2 00000002 -EQU OCR3AL3 00000003 -EQU OCR3AL4 00000004 -EQU OCR3AL5 00000005 -EQU OCR3AL6 00000006 -EQU OCR3AL7 00000007 -EQU SPMEN 00000000 -EQU PGERS 00000001 -EQU PGWRT 00000002 -EQU BLBSET 00000003 -EQU RWWSRE 00000004 -EQU SIGRD 00000005 -EQU RWWSB 00000006 -EQU SPMIE 00000007 -EQU ISC00 00000000 -EQU ISC01 00000001 -EQU ISC10 00000002 -EQU ISC11 00000003 -EQU ISC20 00000004 -EQU ISC21 00000005 -EQU INT0 00000000 -EQU INT1 00000001 -EQU INT2 00000002 -EQU INTF0 00000000 -EQU INTF1 00000001 -EQU INTF2 00000002 -EQU PCIE0 00000000 -EQU PCIE1 00000001 -EQU PCIE2 00000002 -EQU PCIE3 00000003 -EQU PCIF0 00000000 -EQU PCIF1 00000001 -EQU PCIF2 00000002 -EQU PCIF3 00000003 -EQU PCINT24 00000000 -EQU PCINT25 00000001 -EQU PCINT26 00000002 -EQU PCINT27 00000003 -EQU PCINT28 00000004 -EQU PCINT29 00000005 -EQU PCINT30 00000006 -EQU PCINT31 00000007 -EQU PCINT16 00000000 -EQU PCINT17 00000001 -EQU PCINT18 00000002 -EQU PCINT19 00000003 -EQU PCINT20 00000004 -EQU PCINT21 00000005 -EQU PCINT22 00000006 -EQU PCINT23 00000007 -EQU PCINT8 00000000 -EQU PCINT9 00000001 -EQU PCINT10 00000002 -EQU PCINT11 00000003 -EQU PCINT12 00000004 -EQU PCINT13 00000005 -EQU PCINT14 00000006 -EQU PCINT15 00000007 -EQU PCINT0 00000000 -EQU PCINT1 00000001 -EQU PCINT2 00000002 -EQU PCINT3 00000003 -EQU PCINT4 00000004 -EQU PCINT5 00000005 -EQU PCINT6 00000006 -EQU PCINT7 00000007 -EQU MUX0 00000000 -EQU MUX1 00000001 -EQU MUX2 00000002 -EQU MUX3 00000003 -EQU MUX4 00000004 -EQU ADLAR 00000005 -EQU REFS0 00000006 -EQU REFS1 00000007 -EQU ADPS0 00000000 -EQU ADPS1 00000001 -EQU ADPS2 00000002 -EQU ADIE 00000003 -EQU ADIF 00000004 -EQU ADATE 00000005 -EQU ADSC 00000006 -EQU ADEN 00000007 -EQU ADTS0 00000000 -EQU ADTS1 00000001 -EQU ADTS2 00000002 -EQU ADCH0 00000000 -EQU ADCH1 00000001 -EQU ADCH2 00000002 -EQU ADCH3 00000003 -EQU ADCH4 00000004 -EQU ADCH5 00000005 -EQU ADCH6 00000006 -EQU ADCH7 00000007 -EQU ADCL0 00000000 -EQU ADCL1 00000001 -EQU ADCL2 00000002 -EQU ADCL3 00000003 -EQU ADCL4 00000004 -EQU ADCL5 00000005 -EQU ADCL6 00000006 -EQU ADCL7 00000007 -EQU ADC0D 00000000 -EQU ADC1D 00000001 -EQU ADC2D 00000002 -EQU ADC3D 00000003 -EQU ADC4D 00000004 -EQU ADC5D 00000005 -EQU ADC6D 00000006 -EQU ADC7D 00000007 -EQU OCDR0 00000000 -EQU OCDR1 00000001 -EQU OCDR2 00000002 -EQU OCDR3 00000003 -EQU OCDR4 00000004 -EQU OCDR5 00000005 -EQU OCDR6 00000006 -EQU OCDR7 00000007 -EQU IDRD 00000007 -EQU JTD 00000007 -EQU JTRF 00000004 -EQU EEAR8 00000000 -EQU EEAR9 00000001 -EQU EEAR10 00000002 -EQU EEAR11 00000003 -EQU EEAR0 00000000 -EQU EEAR1 00000001 -EQU EEAR2 00000002 -EQU EEAR3 00000003 -EQU EEAR4 00000004 -EQU EEAR5 00000005 -EQU EEAR6 00000006 -EQU EEAR7 00000007 -EQU EEDR0 00000000 -EQU EEDR1 00000001 -EQU EEDR2 00000002 -EQU EEDR3 00000003 -EQU EEDR4 00000004 -EQU EEDR5 00000005 -EQU EEDR6 00000006 -EQU EEDR7 00000007 -EQU EERE 00000000 -EQU EEPE 00000001 -EQU EEMPE 00000002 -EQU EERIE 00000003 -EQU EEPM0 00000004 -EQU EEPM1 00000005 -EQU TWAM0 00000001 -EQU TWAMR0 00000001 -EQU TWAM1 00000002 -EQU TWAMR1 00000002 -EQU TWAM2 00000003 -EQU TWAMR2 00000003 -EQU TWAM3 00000004 -EQU TWAMR3 00000004 -EQU TWAM4 00000005 -EQU TWAMR4 00000005 -EQU TWAM5 00000006 -EQU TWAMR5 00000006 -EQU TWAM6 00000007 -EQU TWAMR6 00000007 -EQU TWBR0 00000000 -EQU TWBR1 00000001 -EQU TWBR2 00000002 -EQU TWBR3 00000003 -EQU TWBR4 00000004 -EQU TWBR5 00000005 -EQU TWBR6 00000006 -EQU TWBR7 00000007 -EQU TWIE 00000000 -EQU TWEN 00000002 -EQU TWWC 00000003 -EQU TWSTO 00000004 -EQU TWSTA 00000005 -EQU TWEA 00000006 -EQU TWINT 00000007 -EQU TWPS0 00000000 -EQU TWPS1 00000001 -EQU TWS3 00000003 -EQU TWS4 00000004 -EQU TWS5 00000005 -EQU TWS6 00000006 -EQU TWS7 00000007 -EQU TWD0 00000000 -EQU TWD1 00000001 -EQU TWD2 00000002 -EQU TWD3 00000003 -EQU TWD4 00000004 -EQU TWD5 00000005 -EQU TWD6 00000006 -EQU TWD7 00000007 -EQU TWGCE 00000000 -EQU TWA0 00000001 -EQU TWA1 00000002 -EQU TWA2 00000003 -EQU TWA3 00000004 -EQU TWA4 00000005 -EQU TWA5 00000006 -EQU TWA6 00000007 -EQU UDR1_0 00000000 -EQU UDR1_1 00000001 -EQU UDR1_2 00000002 -EQU UDR1_3 00000003 -EQU UDR1_4 00000004 -EQU UDR1_5 00000005 -EQU UDR1_6 00000006 -EQU UDR1_7 00000007 -EQU MPCM1 00000000 -EQU U2X1 00000001 -EQU UPE1 00000002 -EQU DOR1 00000003 -EQU FE1 00000004 -EQU UDRE1 00000005 -EQU TXC1 00000006 -EQU RXC1 00000007 -EQU TXB81 00000000 -EQU RXB81 00000001 -EQU UCSZ12 00000002 -EQU TXEN1 00000003 -EQU RXEN1 00000004 -EQU UDRIE1 00000005 -EQU TXCIE1 00000006 -EQU RXCIE1 00000007 -EQU UCPOL1 00000000 -EQU UCSZ10 00000001 -EQU UCPHA1 00000001 -EQU UCSZ11 00000002 -EQU UDORD1 00000002 -EQU USBS1 00000003 -EQU UPM10 00000004 -EQU UPM11 00000005 -EQU UMSEL10 00000006 -EQU UMSEL11 00000007 -EQU UBRR_8 00000000 -EQU UBRR_9 00000001 -EQU UBRR_10 00000002 -EQU UBRR_11 00000003 -EQU UBRR_0 00000000 -EQU UBRR_1 00000001 -EQU UBRR_2 00000002 -EQU UBRR_3 00000003 -EQU UBRR_4 00000004 -EQU UBRR_5 00000005 -EQU UBRR_6 00000006 -EQU UBRR_7 00000007 -EQU SPDR0 00000000 -EQU SPDR1 00000001 -EQU SPDR2 00000002 -EQU SPDR3 00000003 -EQU SPDR4 00000004 -EQU SPDR5 00000005 -EQU SPDR6 00000006 -EQU SPDR7 00000007 -EQU SPI2X 00000000 -EQU WCOL 00000006 -EQU SPIF 00000007 -EQU SPR0 00000000 -EQU SPR1 00000001 -EQU CPHA 00000002 -EQU CPOL 00000003 -EQU MSTR 00000004 -EQU DORD 00000005 -EQU SPE 00000006 -EQU SPIE 00000007 -EQU WDP0 00000000 -EQU WDP1 00000001 -EQU WDP2 00000002 -EQU WDE 00000003 -EQU WDCE 00000004 -EQU WDP3 00000005 -EQU WDIE 00000006 -EQU WDIF 00000007 -EQU SREG_C 00000000 -EQU SREG_Z 00000001 -EQU SREG_N 00000002 -EQU SREG_V 00000003 -EQU SREG_S 00000004 -EQU SREG_H 00000005 -EQU SREG_T 00000006 -EQU SREG_I 00000007 -EQU IVCE 00000000 -EQU IVSEL 00000001 -EQU PUD 00000004 -EQU BODSE 00000005 -EQU BODS 00000006 -EQU PORF 00000000 -EQU EXTRF 00000001 -EQU BORF 00000002 -EQU WDRF 00000003 -EQU CAL0 00000000 -EQU CAL1 00000001 -EQU CAL2 00000002 -EQU CAL3 00000003 -EQU CAL4 00000004 -EQU CAL5 00000005 -EQU CAL6 00000006 -EQU CAL7 00000007 -EQU CLKPS0 00000000 -EQU CLKPS1 00000001 -EQU CLKPS2 00000002 -EQU CLKPS3 00000003 -EQU CLKPCE 00000007 -EQU SE 00000000 -EQU SM0 00000001 -EQU SM1 00000002 -EQU SM2 00000003 -EQU RAMPZ0 00000000 -EQU GPIOR20 00000000 -EQU GPIOR21 00000001 -EQU GPIOR22 00000002 -EQU GPIOR23 00000003 -EQU GPIOR24 00000004 -EQU GPIOR25 00000005 -EQU GPIOR26 00000006 -EQU GPIOR27 00000007 -EQU GPIOR10 00000000 -EQU GPIOR11 00000001 -EQU GPIOR12 00000002 -EQU GPIOR13 00000003 -EQU GPIOR14 00000004 -EQU GPIOR15 00000005 -EQU GPIOR16 00000006 -EQU GPIOR17 00000007 -EQU GPIOR00 00000000 -EQU GPIOR01 00000001 -EQU GPIOR02 00000002 -EQU GPIOR03 00000003 -EQU GPIOR04 00000004 -EQU GPIOR05 00000005 -EQU GPIOR06 00000006 -EQU GPIOR07 00000007 -EQU PRADC 00000000 -EQU PRUSART0 00000001 -EQU PRSPI 00000002 -EQU PRTIM1 00000003 -EQU PRUSART1 00000004 -EQU PRTIM0 00000005 -EQU PRTIM2 00000006 -EQU PRTWI 00000007 -EQU PRTIM3 00000000 -EQU LB1 00000000 -EQU LB2 00000001 -EQU BLB01 00000002 -EQU BLB02 00000003 -EQU BLB11 00000004 -EQU BLB12 00000005 -EQU CKSEL0 00000000 -EQU CKSEL1 00000001 -EQU CKSEL2 00000002 -EQU CKSEL3 00000003 -EQU SUT0 00000004 -EQU SUT1 00000005 -EQU CKOUT 00000006 -EQU CKDIV8 00000007 -EQU BOOTRST 00000000 -EQU BOOTSZ0 00000001 -EQU BOOTSZ1 00000002 -EQU EESAVE 00000003 -EQU WDTON 00000004 -EQU SPIEN 00000005 -EQU JTAGEN 00000006 -EQU OCDEN 00000007 -EQU BODLEVEL0 00000000 -EQU BODLEVEL1 00000001 -EQU BODLEVEL2 00000002 -DEF XH r27 -DEF XL r26 -DEF YH r29 -DEF YL r28 -DEF ZH r31 -DEF ZL r30 -EQU FLASHEND 0000ffff -EQU IOEND 000000ff -EQU SRAM_START 00000100 -EQU SRAM_SIZE 00004000 -EQU RAMEND 000040ff -EQU XRAMEND 00000000 -EQU E2END 00000fff -EQU EEPROMEND 00000fff -EQU EEADRBITS 0000000c -EQU NRWW_START_ADDR 0000f000 -EQU NRWW_STOP_ADDR 0000ffff -EQU RWW_START_ADDR 00000000 -EQU RWW_STOP_ADDR 0000efff -EQU PAGESIZE 00000080 -EQU FIRSTBOOTSTART 0000fe00 -EQU SECONDBOOTSTART 0000fc00 -EQU THIRDBOOTSTART 0000f800 -EQU FOURTHBOOTSTART 0000f000 -EQU SMALLBOOTSTART 0000fe00 -EQU LARGEBOOTSTART 0000f000 -EQU INT0addr 00000002 -EQU INT1addr 00000004 -EQU INT2addr 00000006 -EQU PCI0addr 00000008 -EQU PCI1addr 0000000a -EQU PCI2addr 0000000c -EQU PCI3addr 0000000e -EQU WDTaddr 00000010 -EQU OC2Aaddr 00000012 -EQU OC2Baddr 00000014 -EQU OVF2addr 00000016 -EQU ICP1addr 00000018 -EQU OC1Aaddr 0000001a -EQU OC1Baddr 0000001c -EQU OVF1addr 0000001e -EQU OC0Aaddr 00000020 -EQU OC0Baddr 00000022 -EQU OVF0addr 00000024 -EQU SPIaddr 00000026 -EQU URXC0addr 00000028 -EQU UDRE0addr 0000002a -EQU UTXC0addr 0000002c -EQU ACIaddr 0000002e -EQU ADCCaddr 00000030 -EQU ERDYaddr 00000032 -EQU TWIaddr 00000034 -EQU SPMRaddr 00000036 -EQU URXC1addr 00000038 -EQU UDRE1addr 0000003a -EQU UTXC1addr 0000003c -EQU ICP3addr 0000003e -EQU OC3Aaddr 00000040 -EQU OC3Baddr 00000042 -EQU OVF3addr 00000044 -EQU INT_VECTORS_SIZE 00000046 -EQU ramstart 00000100 -EQU CELLSIZE 00000002 -SET WANT_ANALOG_COMPARATOR 00000000 -SET WANT_USART0 00000000 -SET WANT_PORTA 00000000 -SET WANT_PORTB 00000000 -SET WANT_PORTC 00000000 -SET WANT_PORTD 00000000 -SET WANT_TIMER_COUNTER_0 00000000 -SET WANT_TIMER_COUNTER_1 00000000 -SET WANT_TIMER_COUNTER_2 00000000 -SET WANT_TIMER_COUNTER_3 00000000 -SET WANT_BOOT_LOAD 00000000 -SET WANT_EXTERNAL_INTERRUPT 00000000 -SET WANT_AD_CONVERTER 00000000 -SET WANT_JTAG 00000000 -SET WANT_EEPROM 00000000 -SET WANT_TWI 00000000 -SET WANT_USART1 00000000 -SET WANT_SPI 00000000 -SET WANT_WATCHDOG 00000000 -SET WANT_CPU 00000000 -EQU intvecsize 00000002 -EQU pclen 00000002 -CSEG isr 0000013c -EQU INTVECTORS 00000023 -CSEG mcu_info 00000045 -CSEG mcu_ramsize 00000045 -CSEG mcu_eepromsize 00000046 -CSEG mcu_maxdp 00000047 -CSEG mcu_numints 00000048 -CSEG mcu_name 00000049 -SET codestart 00000050 -SET WANT_INTERRUPTS 00000001 -SET WANT_INTERRUPT_COUNTERS 00000000 -SET WANT_ISR_RX 00000001 -SET WANT_IGNORECASE 00000000 -SET WANT_UNIFIED 00000000 -SET TIB_SIZE 0000005a -SET APPUSERSIZE 0000000a -SET rstackstart 000040ff -SET stackstart 000040af -SET NUMWORDLISTS 00000008 -SET NUMRECOGNIZERS 00000004 -SET BAUD 00009600 -SET BAUD_MAXERROR 0000001e -SET VE_HEAD 0000fda8 -SET VE_ENVHEAD 0000f54d -SET AMFORTH_RO_SEG 0000f001 -EQU F_CPU 00f42400 -EQU TIMER_INT 00000016 -EQU BAUDRATE_LOW 000000c4 -EQU BAUDRATE_HIGH 000000c5 -EQU USART_C 000000c2 -EQU USART_B 000000c1 -EQU USART_A 000000c0 -EQU USART_DATA 000000c6 -EQU URXCaddr 00000028 -EQU UDREaddr 0000002a -EQU bm_USART_RXRD 00000080 -EQU bm_USART_TXRD 00000020 -EQU bm_ENABLE_TX 00000008 -EQU bm_ENABLE_RX 00000010 -EQU bm_ENABLE_INT_RX 00000080 -EQU bm_ENABLE_INT_TX 00000020 -EQU bm_USARTC_en 00000000 -EQU bm_ASYNC 00000000 -EQU bm_SYNC 00000040 -EQU bm_NO_PARITY 00000000 -EQU bm_EVEN_PARITY 00000020 -EQU bm_ODD_PARITY 00000030 -EQU bm_1STOPBIT 00000000 -EQU bm_2STOPBIT 00000008 -EQU bm_5BIT 00000000 -EQU bm_6BIT 00000002 -EQU bm_7BIT 00000004 -EQU bm_8BIT 00000006 -SET USART_C_VALUE 00000006 -SET USART_B_VALUE 00000098 -EQU usart_rx_size 00000010 -EQU usart_rx_mask 0000000f -DSEG usart_rx_data 00000100 -DSEG usart_rx_in 00000110 -DSEG usart_rx_out 00000111 -CSEG VE_TO_RXBUF 00000050 -CSEG XT_TO_RXBUF 00000056 -CSEG PFA_rx_tobuf 00000057 -CSEG DO_NEXT 0000f005 -CSEG VE_ISR_RX 00000067 -CSEG XT_ISR_RX 0000006c -CSEG DO_COLON 0000f001 -CSEG usart_rx_isr 0000006d -CSEG XT_DOLITERAL 0000f046 -CSEG XT_CFETCH 0000f0aa -CSEG XT_DUP 0000f0c3 -CSEG XT_EQUAL 0000fd9a -CSEG XT_DOCONDBRANCH 0000f03f -CSEG usart_rx_isr1 00000077 -CSEG XT_COLD 0000fa74 -CSEG XT_EXIT 0000f026 -CSEG XT_USART_INIT_RX_BUFFER 00000079 -CSEG PFA_USART_INIT_RX_BUFFER 0000007a -CSEG XT_INTSTORE 0000f4a2 -CSEG XT_ZERO 0000f166 -CSEG XT_FILL 0000f4ea -CSEG VE_RX_BUFFER 00000086 -CSEG XT_RX_BUFFER 0000008b -CSEG PFA_RX_BUFFER 0000008c -CSEG XT_RXQ_BUFFER 000000a6 -CSEG XT_PLUS 0000f1af -CSEG XT_SWAP 0000f0d6 -CSEG XT_1PLUS 0000f241 -CSEG XT_AND 0000f225 -CSEG XT_CSTORE 0000f09f -CSEG VE_RXQ_BUFFER 000000a0 -CSEG PFA_RXQ_BUFFER 000000a7 -CSEG XT_PAUSE 0000fa6c -CSEG XT_NOTEQUAL 0000f125 -SET XT_RX 0000008b -SET XT_RXQ 000000a6 -SET XT_USART_INIT_RX 00000079 -CSEG VE_TX_POLL 000000b0 -CSEG XT_TX_POLL 000000b6 -CSEG PFA_TX_POLL 000000b7 -CSEG XT_TXQ_POLL 000000c4 -CSEG VE_TXQ_POLL 000000be -CSEG PFA_TXQ_POLL 000000c5 -SET XT_TX 000000b6 -SET XT_TXQ 000000c4 -SET XT_USART_INIT_TX 00000000 -CSEG VE_UBRR 000000cd -CSEG XT_UBRR 000000d1 -CSEG PFA_DOVALUE1 0000f081 -CSEG PFA_UBRR 000000d2 -ESEG EE_UBRRVAL 0000009e -CSEG XT_EDEFERFETCH 0000fbcf -CSEG XT_EDEFERSTORE 0000fbd9 -CSEG VE_USART 000000d5 -CSEG XT_USART 000000da -CSEG PFA_USART 000000db -CSEG XT_BYTESWAP 0000f30b -EQU OW_PORT 00000005 -EQU OW_BIT 00000004 -SET OW_DDR 00000004 -SET OW_PIN 00000003 -CSEG VE_OW_RESET 000000f0 -CSEG XT_OW_RESET 000000f6 -CSEG PFA_OW_RESET 000000f7 -SET cycles 00000000 -SET loop_cycles 00000fa0 -CSEG VE_OW_SLOT 00000114 -CSEG XT_OW_SLOT 0000011a -CSEG PFA_OW_SLOT 0000011b -CSEG PFA_OW_SLOT0 00000128 -SET AMFORTH_NRWW_SIZE 00001ffc -SET corepc 0000013c -CSEG PFA_COLD 0000fa75 -ESEG intvec 00000000 -DSEG intcnt 00000112 -CSEG VE_MPLUS 00000153 -CSEG XT_MPLUS 00000156 -CSEG PFA_MPLUS 00000157 -CSEG XT_S2D 0000fd82 -CSEG XT_DPLUS 0000f430 -CSEG VE_UDSTAR 0000015a -CSEG XT_UDSTAR 0000015e -CSEG PFA_UDSTAR 0000015f -CSEG XT_TO_R 0000f111 -CSEG XT_UMSTAR 0000f1f2 -CSEG XT_DROP 0000f0eb -CSEG XT_R_FROM 0000f108 -CSEG XT_ROT 0000f0f3 -CSEG VE_UMAX 00000169 -CSEG XT_UMAX 0000016d -CSEG PFA_UMAX 0000016e -CSEG XT_2DUP 0000f580 -CSEG XT_ULESS 0000f16e -CSEG UMAX1 00000173 -CSEG VE_UMIN 00000175 -CSEG XT_UMIN 00000179 -CSEG PFA_UMIN 0000017a -CSEG XT_UGREATER 0000f179 -CSEG UMIN1 0000017f -CSEG XT_IMMEDIATEQ 00000181 -CSEG PFA_IMMEDIATEQ 00000182 -CSEG XT_ZEROEQUAL 0000f12c -CSEG IMMEDIATEQ1 0000018a -CSEG XT_ONE 0000fda1 -CSEG XT_TRUE 0000f15d -CSEG VE_NAME2FLAGS 0000018c -CSEG XT_NAME2FLAGS 00000193 -CSEG PFA_NAME2FLAGS 00000194 -CSEG XT_FETCHI 0000f3e3 -CSEG VE_NEWEST 00000199 -CSEG XT_NEWEST 0000019e -CSEG PFA_DOVARIABLE 0000f054 -CSEG PFA_NEWEST 0000019f -DSEG ram_newest 00000135 -CSEG VE_LATEST 000001a0 -CSEG XT_LATEST 000001a5 -CSEG PFA_LATEST 000001a6 -DSEG ram_latest 00000139 -CSEG VE_DOCREATE 000001a7 -CSEG XT_DOCREATE 000001ad -CSEG PFA_DOCREATE 000001ae -CSEG XT_PARSENAME 0000f9cf -CSEG XT_WLSCOPE 00000304 -CSEG XT_CELLPLUS 0000f579 -CSEG XT_STORE 0000f093 -CSEG XT_HEADER 000002e9 -CSEG VE_BACKSLASH 000001b8 -CSEG XT_BACKSLASH 000001bb -CSEG PFA_BACKSLASH 000001bc -CSEG XT_SOURCE 0000f9b6 -CSEG XT_NIP 0000f102 -CSEG XT_TO_IN 0000f599 -CSEG VE_LPAREN 000001c1 -CSEG XT_LPAREN 000001c4 -CSEG PFA_LPAREN 000001c5 -CSEG XT_PARSE 0000f9a2 -CSEG XT_2DROP 0000f589 -CSEG VE_COMPILE 000001ca -CSEG XT_COMPILE 000001d0 -CSEG PFA_COMPILE 000001d1 -CSEG XT_ICELLPLUS 0000fbc6 -CSEG XT_COMMA 000001db -CSEG VE_COMMA 000001d8 -CSEG PFA_COMMA 000001dc -CSEG XT_DP 0000f5c9 -CSEG XT_STOREI 0000f385 -CSEG XT_DOTO 0000fbb4 -CSEG PFA_DP 0000f5ca -CSEG VE_BRACKETTICK 000001e3 -CSEG XT_BRACKETTICK 000001e7 -CSEG PFA_BRACKETTICK 000001e8 -CSEG XT_TICK 0000f825 -CSEG XT_LITERAL 000001f1 -CSEG VE_LITERAL 000001eb -CSEG PFA_LITERAL 000001f2 -CSEG VE_SLITERAL 000001f6 -CSEG XT_SLITERAL 000001fc -CSEG PFA_SLITERAL 000001fd -CSEG XT_DOSLITERAL 0000f788 -CSEG XT_SCOMMA 0000f796 -CSEG XT_GMARK 00000201 -CSEG PFA_GMARK 00000202 -CSEG XT_GRESOLVE 00000206 -CSEG PFA_GRESOLVE 00000207 -CSEG XT_QSTACK 0000fb72 -CSEG XT_LMARK 0000020c -CSEG PFA_LMARK 0000020d -CSEG XT_LRESOLVE 0000020f -CSEG PFA_LRESOLVE 00000210 -CSEG VE_AHEAD 00000213 -CSEG XT_AHEAD 00000218 -CSEG PFA_AHEAD 00000219 -CSEG XT_DOBRANCH 0000f035 -CSEG VE_IF 0000021d -CSEG XT_IF 00000220 -CSEG PFA_IF 00000221 -CSEG VE_ELSE 00000225 -CSEG XT_ELSE 00000229 -CSEG PFA_ELSE 0000022a -CSEG VE_THEN 00000230 -CSEG XT_THEN 00000234 -CSEG PFA_THEN 00000235 -CSEG VE_BEGIN 00000237 -CSEG XT_BEGIN 0000023c -CSEG PFA_BEGIN 0000023d -CSEG VE_WHILE 0000023f -CSEG XT_WHILE 00000244 -CSEG PFA_WHILE 00000245 -CSEG VE_REPEAT 00000248 -CSEG XT_REPEAT 0000024d -CSEG PFA_REPEAT 0000024e -CSEG XT_AGAIN 00000261 -CSEG VE_UNTIL 00000251 -CSEG XT_UNTIL 00000256 -CSEG PFA_UNTIL 00000257 -CSEG VE_AGAIN 0000025c -CSEG PFA_AGAIN 00000262 -CSEG VE_DO 00000266 -CSEG XT_DO 00000269 -CSEG PFA_DO 0000026a -CSEG XT_DODO 0000f2ad -CSEG XT_TO_L 000002c4 -CSEG VE_LOOP 00000270 -CSEG XT_LOOP 00000274 -CSEG PFA_LOOP 00000275 -CSEG XT_DOLOOP 0000f2db -CSEG XT_ENDLOOP 000002ab -CSEG VE_PLUSLOOP 00000279 -CSEG XT_PLUSLOOP 0000027e -CSEG PFA_PLUSLOOP 0000027f -CSEG XT_DOPLUSLOOP 0000f2cc -CSEG VE_LEAVE 00000283 -CSEG XT_LEAVE 00000288 -CSEG PFA_LEAVE 00000289 -CSEG XT_UNLOOP 0000f2e6 -CSEG VE_QDO 0000028e -CSEG XT_QDO 00000292 -CSEG PFA_QDO 00000293 -CSEG XT_QDOCHECK 0000029a -CSEG PFA_QDOCHECK 0000029b -CSEG PFA_QDOCHECK1 000002a2 -CSEG XT_INVERT 0000f20f -CSEG VE_ENDLOOP 000002a5 -CSEG PFA_ENDLOOP 000002ac -CSEG LOOP1 000002ad -CSEG XT_L_FROM 000002b8 -CSEG XT_QDUP 0000f0cb -CSEG LOOP2 000002b4 -CSEG VE_L_FROM 000002b5 -CSEG PFA_L_FROM 000002b9 -CSEG XT_LP 000002d7 -CSEG XT_FETCH 0000f08b -CSEG XT_PLUSSTORE 0000f277 -CSEG VE_TO_L 000002c1 -CSEG PFA_TO_L 000002c5 -CSEG XT_TWO 0000fda6 -CSEG VE_LP0 000002cc -CSEG XT_LP0 000002d0 -CSEG PFA_LP0 000002d1 -ESEG CFG_LP0 00000052 -CSEG VE_LP 000002d4 -CSEG PFA_LP 000002d8 -DSEG ram_lp 0000013b -CSEG VE_CREATE 000002d9 -CSEG XT_CREATE 000002de -CSEG PFA_CREATE 000002df -CSEG XT_REVEAL 0000030d -CSEG PFA_DOCONSTANT 0000f061 -CSEG VE_HEADER 000002e4 -CSEG PFA_HEADER 000002ea -CSEG XT_GREATERZERO 0000f13a -CSEG PFA_HEADER1 000002fb -CSEG XT_OR 0000f22e -CSEG XT_DOSCOMMA 0000f79a -CSEG XT_FETCHE 0000f371 -CSEG XT_THROW 0000f85c -CSEG VE_WLSCOPE 000002fe -CSEG PFA_DODEFER1 0000fc2e -CSEG PFA_WLSCOPE 00000305 -ESEG CFG_WLSCOPE 0000004e -CSEG VE_REVEAL 00000308 -CSEG PFA_REVEAL 0000030e -CSEG REVEAL1 00000318 -CSEG XT_STOREE 0000f34d -CSEG VE_DOES 00000319 -CSEG XT_DOES 0000031e -CSEG PFA_DOES 0000031f -CSEG XT_DODOES 00000331 -CSEG DO_DODOES 00000326 -CSEG PFA_DODOES 00000332 -CSEG XT_NFA2CFA 0000fc99 -CSEG VE_COLON 0000033a -CSEG XT_COLON 0000033d -CSEG PFA_COLON 0000033e -CSEG XT_COLONNONAME 00000348 -CSEG VE_COLONNONAME 00000342 -CSEG PFA_COLONNONAME 00000349 -CSEG XT_RBRACKET 0000035d -CSEG VE_SEMICOLON 00000351 -CSEG XT_SEMICOLON 00000354 -CSEG PFA_SEMICOLON 00000355 -CSEG XT_LBRACKET 00000365 -CSEG VE_RBRACKET 0000035a -CSEG PFA_RBRACKET 0000035e -CSEG XT_STATE 0000f566 -CSEG VE_LBRACKET 00000362 -CSEG PFA_LBRACKET 00000366 -CSEG VE_VARIABLE 0000036a -CSEG XT_VARIABLE 00000370 -CSEG PFA_VARIABLE 00000371 -CSEG XT_HERE 0000f5da -CSEG XT_CONSTANT 0000037c -CSEG XT_ALLOT 0000f5e3 -CSEG VE_CONSTANT 00000376 -CSEG PFA_CONSTANT 0000037d -CSEG VE_USER 00000383 -CSEG XT_USER 00000387 -CSEG PFA_USER 00000388 -CSEG PFA_DOUSER 0000f067 -CSEG VE_RECURSE 0000038e -CSEG XT_RECURSE 00000394 -CSEG PFA_RECURSE 00000395 -CSEG VE_IMMEDIATE 00000399 -CSEG XT_IMMEDIATE 000003a0 -CSEG PFA_IMMEDIATE 000003a1 -CSEG XT_GET_CURRENT 00000442 -CSEG VE_BRACKETCHAR 000003ab -CSEG XT_BRACKETCHAR 000003b0 -CSEG PFA_BRACKETCHAR 000003b1 -CSEG XT_CHAR 0000f905 -CSEG VE_ABORTQUOTE 000003b6 -CSEG XT_ABORTQUOTE 000003bb -CSEG PFA_ABORTQUOTE 000003bc -CSEG XT_SQUOTE 0000f4dc -CSEG XT_QABORT 000003cd -CSEG VE_ABORT 000003c0 -CSEG XT_ABORT 000003c5 -CSEG PFA_ABORT 000003c6 -CSEG VE_QABORT 000003c8 -CSEG PFA_QABORT 000003ce -CSEG QABO1 000003d3 -CSEG XT_ITYPE 0000f7bb -CSEG VE_GET_STACK 000003d5 -CSEG XT_GET_STACK 000003dc -CSEG PFA_N_FETCH_E2 000003f3 -CSEG PFA_N_FETCH_E1 000003e9 -CSEG XT_I 0000f2be -CSEG XT_1MINUS 0000f247 -CSEG XT_CELLS 0000f573 -CSEG XT_OVER 0000f0e1 -CSEG VE_SET_STACK 000003f6 -CSEG XT_SET_STACK 000003fd -CSEG PFA_SET_STACK 000003fe -CSEG XT_ZEROLESS 0000f133 -CSEG PFA_SET_STACK0 00000405 -CSEG PFA_SET_STACK2 00000412 -CSEG PFA_SET_STACK1 0000040d -CSEG XT_TUCK 0000f591 -CSEG VE_MAPSTACK 00000414 -CSEG XT_MAPSTACK 0000041b -CSEG PFA_MAPSTACK 0000041c -CSEG XT_BOUNDS 0000fd79 -CSEG PFA_MAPSTACK3 00000437 -CSEG PFA_MAPSTACK1 00000426 -CSEG XT_R_FETCH 0000f11a -CSEG XT_EXECUTE 0000f030 -CSEG PFA_MAPSTACK2 00000433 -CSEG VE_GET_CURRENT 0000043a -CSEG PFA_GET_CURRENT 00000443 -ESEG CFG_CURRENT 00000058 -CSEG VE_GET_ORDER 00000447 -CSEG XT_GET_ORDER 0000044e -CSEG PFA_GET_ORDER 0000044f -ESEG CFG_ORDERLISTLEN 0000005c -CSEG VE_CFG_ORDER 00000453 -CSEG XT_CFG_ORDER 0000045a -CSEG PFA_CFG_ORDER 0000045b -CSEG VE_COMPARE 0000045c -CSEG XT_COMPARE 00000462 -CSEG PFA_COMPARE 00000463 -CSEG PFA_COMPARE_LOOP 0000046f -CSEG PFA_COMPARE_NOTEQUAL 0000047d -CSEG PFA_COMPARE_ENDREACHED2 00000478 -CSEG PFA_COMPARE_ENDREACHED 00000479 -CSEG PFA_COMPARE_CHECKLASTCHAR 0000047d -CSEG PFA_COMPARE_DONE 0000047f -CSEG VE_NFA2LFA 00000484 -CSEG XT_NFA2LFA 0000048a -CSEG PFA_NFA2LFA 0000048b -CSEG XT_NAME2STRING 0000fc8d -CSEG XT_2SLASH 0000f216 -CSEG VE_DOTS 00000490 -CSEG XT_DOTS 00000493 -CSEG PFA_DOTS 00000494 -CSEG XT_DEPTH 0000fabc -CSEG XT_UDOT 0000f463 -CSEG XT_SPACE 0000f7fd -CSEG PFA_DOTS2 000004a2 -CSEG PFA_DOTS1 0000049d -CSEG XT_PICK 0000f4ca -CSEG VE_SPIRW 000004a3 -CSEG XT_SPIRW 000004a8 -CSEG PFA_SPIRW 000004a9 -CSEG do_spirw 000004ad -CSEG do_spirw1 000004ae -CSEG VE_N_SPIR 000004b6 -CSEG XT_N_SPIR 000004bb -CSEG PFA_N_SPIR 000004bc -CSEG PFA_N_SPIR_LOOP 000004c1 -CSEG PFA_N_SPIR_LOOP1 000004c2 -CSEG VE_N_SPIW 000004cd -CSEG XT_N_SPIW 000004d2 -CSEG PFA_N_SPIW 000004d3 -CSEG PFA_N_SPIW_LOOP 000004d8 -CSEG PFA_N_SPIW_LOOP1 000004da -CSEG VE_APPLTURNKEY 000004e4 -CSEG XT_APPLTURNKEY 000004ec -CSEG PFA_APPLTURNKEY 000004ed -CSEG XT_INTON 0000f494 -CSEG XT_DOT_VER 0000fb7f -CSEG XT_F_CPU 0000f55b -CSEG XT_UMSLASHMOD 0000f1d4 -CSEG XT_DECIMAL 0000f5f8 -CSEG XT_DOT 0000f73d -CSEG VE_SET_CURRENT 000004fe -CSEG XT_SET_CURRENT 00000506 -CSEG PFA_SET_CURRENT 00000507 -CSEG VE_WORDLIST 0000050b -CSEG XT_WORDLIST 00000511 -CSEG PFA_WORDLIST 00000512 -CSEG XT_EHERE 0000f5d2 -CSEG PFA_EHERE 0000f5d3 -CSEG VE_FORTHWORDLIST 0000051b -CSEG XT_FORTHWORDLIST 00000524 -CSEG PFA_FORTHWORDLIST 00000525 -ESEG CFG_FORTHWORDLIST 0000005a -CSEG VE_SET_ORDER 00000526 -CSEG XT_SET_ORDER 0000052d -CSEG PFA_SET_ORDER 0000052e -CSEG VE_SET_RECOGNIZERS 00000532 -CSEG XT_SET_RECOGNIZERS 0000053c -CSEG PFA_SET_RECOGNIZERS 0000053d -ESEG CFG_RECOGNIZERLISTLEN 0000006e -CSEG VE_GET_RECOGNIZERS 00000541 -CSEG XT_GET_RECOGNIZERS 0000054b -CSEG PFA_GET_RECOGNIZERS 0000054c -CSEG VE_CODE 00000550 -CSEG XT_CODE 00000554 -CSEG PFA_CODE 00000555 -CSEG VE_ENDCODE 0000055b -CSEG XT_ENDCODE 00000561 -CSEG PFA_ENDCODE 00000562 -CSEG VE_MARKER 00000567 -CSEG XT_MARKER 0000056d -CSEG PFA_MARKER 0000056e -ESEG EE_MARKER 0000007a -CSEG VE_POSTPONE 00000571 -CSEG XT_POSTPONE 00000577 -CSEG PFA_POSTPONE 00000578 -CSEG XT_FORTHRECOGNIZER 0000fae7 -CSEG XT_RECOGNIZE 0000faf2 -CSEG VE_2R_FETCH 00000586 -CSEG XT_2R_FETCH 0000058a -CSEG PFA_2R_FETCH 0000058b -SET DPSTART 0000059a -CSEG DO_INTERRUPT 0000f01a -CSEG DO_EXECUTE 0000f010 -CSEG XT_ISREXEC 0000f4bd -CSEG VE_EXIT 0000f022 -CSEG PFA_EXIT 0000f027 -CSEG VE_EXECUTE 0000f02a -CSEG PFA_EXECUTE 0000f031 -CSEG PFA_DOBRANCH 0000f036 -CSEG PFA_DOCONDBRANCH 0000f040 -CSEG PFA_DOLITERAL 0000f047 -CSEG XT_DOVARIABLE 0000f053 -CSEG XT_DOCONSTANT 0000f060 -CSEG XT_DOUSER 0000f066 -CSEG VE_DOVALUE 0000f075 -CSEG XT_DOVALUE 0000f07b -CSEG PFA_DOVALUE 0000f07c -CSEG VE_FETCH 0000f088 -CSEG PFA_FETCH 0000f08c -CSEG PFA_FETCHRAM 0000f08c -CSEG VE_STORE 0000f090 -CSEG PFA_STORE 0000f094 -CSEG PFA_STORERAM 0000f094 -CSEG VE_CSTORE 0000f09c -CSEG PFA_CSTORE 0000f0a0 -CSEG VE_CFETCH 0000f0a7 -CSEG PFA_CFETCH 0000f0ab -CSEG VE_FETCHU 0000f0af -CSEG XT_FETCHU 0000f0b2 -CSEG PFA_FETCHU 0000f0b3 -CSEG XT_UP_FETCH 0000f314 -CSEG VE_STOREU 0000f0b7 -CSEG XT_STOREU 0000f0ba -CSEG PFA_STOREU 0000f0bb -CSEG VE_DUP 0000f0bf -CSEG PFA_DUP 0000f0c4 -CSEG VE_QDUP 0000f0c7 -CSEG PFA_QDUP 0000f0cc -CSEG PFA_QDUP1 0000f0d1 -CSEG VE_SWAP 0000f0d2 -CSEG PFA_SWAP 0000f0d7 -CSEG VE_OVER 0000f0dd -CSEG PFA_OVER 0000f0e2 -CSEG VE_DROP 0000f0e7 -CSEG PFA_DROP 0000f0ec -CSEG VE_ROT 0000f0ef -CSEG PFA_ROT 0000f0f4 -CSEG VE_NIP 0000f0fe -CSEG PFA_NIP 0000f103 -CSEG VE_R_FROM 0000f105 -CSEG PFA_R_FROM 0000f109 -CSEG VE_TO_R 0000f10e -CSEG PFA_TO_R 0000f112 -CSEG VE_R_FETCH 0000f117 -CSEG PFA_R_FETCH 0000f11b -CSEG VE_NOTEQUAL 0000f122 -CSEG PFA_NOTEQUAL 0000f126 -CSEG VE_ZEROEQUAL 0000f129 -CSEG PFA_ZEROEQUAL 0000f12d -CSEG PFA_ZERO1 0000f169 -CSEG PFA_TRUE1 0000f160 -CSEG VE_ZEROLESS 0000f130 -CSEG PFA_ZEROLESS 0000f134 -CSEG VE_GREATERZERO 0000f137 -CSEG PFA_GREATERZERO 0000f13b -CSEG VE_DGREATERZERO 0000f140 -CSEG XT_DGREATERZERO 0000f144 -CSEG PFA_DGREATERZERO 0000f145 -CSEG VE_DXT_ZEROLESS 0000f14e -CSEG XT_DXT_ZEROLESS 0000f152 -CSEG PFA_DXT_ZEROLESS 0000f153 -CSEG VE_TRUE 0000f159 -CSEG PFA_TRUE 0000f15e -CSEG VE_ZERO 0000f163 -CSEG PFA_ZERO 0000f167 -CSEG VE_ULESS 0000f16b -CSEG PFA_ULESS 0000f16f -CSEG VE_UGREATER 0000f176 -CSEG PFA_UGREATER 0000f17a -CSEG VE_LESS 0000f17d -CSEG XT_LESS 0000f180 -CSEG PFA_LESS 0000f181 -CSEG PFA_LESSDONE 0000f185 -CSEG VE_GREATER 0000f187 -CSEG XT_GREATER 0000f18a -CSEG PFA_GREATER 0000f18b -CSEG PFA_GREATERDONE 0000f18f -CSEG VE_LOG2 0000f192 -CSEG XT_LOG2 0000f196 -CSEG PFA_LOG2 0000f197 -CSEG PFA_LOG2_1 0000f19a -CSEG PFA_LOG2_2 0000f1a0 -CSEG VE_MINUS 0000f1a2 -CSEG XT_MINUS 0000f1a5 -CSEG PFA_MINUS 0000f1a6 -CSEG VE_PLUS 0000f1ac -CSEG PFA_PLUS 0000f1b0 -CSEG VE_MSTAR 0000f1b5 -CSEG XT_MSTAR 0000f1b8 -CSEG PFA_MSTAR 0000f1b9 -CSEG VE_UMSLASHMOD 0000f1cf -CSEG PFA_UMSLASHMOD 0000f1d5 -CSEG PFA_UMSLASHMODmod 0000f1da -CSEG PFA_UMSLASHMODmod_loop 0000f1db -CSEG PFA_UMSLASHMODmod_loop_control 0000f1e8 -CSEG PFA_UMSLASHMODmod_subtract 0000f1e5 -CSEG PFA_UMSLASHMODmod_done 0000f1ea -CSEG VE_UMSTAR 0000f1ee -CSEG PFA_UMSTAR 0000f1f3 -CSEG VE_INVERT 0000f20a -CSEG PFA_INVERT 0000f210 -CSEG VE_2SLASH 0000f213 -CSEG PFA_2SLASH 0000f217 -CSEG VE_2STAR 0000f21a -CSEG XT_2STAR 0000f21d -CSEG PFA_2STAR 0000f21e -CSEG VE_AND 0000f221 -CSEG PFA_AND 0000f226 -CSEG VE_OR 0000f22b -CSEG PFA_OR 0000f22f -CSEG VE_XOR 0000f234 -CSEG XT_XOR 0000f238 -CSEG PFA_XOR 0000f239 -CSEG VE_1PLUS 0000f23e -CSEG PFA_1PLUS 0000f242 -CSEG VE_1MINUS 0000f244 -CSEG PFA_1MINUS 0000f248 -CSEG VE_QNEGATE 0000f24a -CSEG XT_QNEGATE 0000f250 -CSEG PFA_QNEGATE 0000f251 -CSEG QNEG1 0000f255 -CSEG XT_NEGATE 0000f65a -CSEG VE_LSHIFT 0000f256 -CSEG XT_LSHIFT 0000f25b -CSEG PFA_LSHIFT 0000f25c -CSEG PFA_LSHIFT1 0000f25f -CSEG PFA_LSHIFT2 0000f264 -CSEG VE_RSHIFT 0000f265 -CSEG XT_RSHIFT 0000f26a -CSEG PFA_RSHIFT 0000f26b -CSEG PFA_RSHIFT1 0000f26e -CSEG PFA_RSHIFT2 0000f273 -CSEG VE_PLUSSTORE 0000f274 -CSEG PFA_PLUSSTORE 0000f278 -CSEG VE_RP_FETCH 0000f284 -CSEG XT_RP_FETCH 0000f288 -CSEG PFA_RP_FETCH 0000f289 -CSEG VE_RP_STORE 0000f28e -CSEG XT_RP_STORE 0000f292 -CSEG PFA_RP_STORE 0000f293 -CSEG VE_SP_FETCH 0000f29b -CSEG XT_SP_FETCH 0000f29f -CSEG PFA_SP_FETCH 0000f2a0 -CSEG VE_SP_STORE 0000f2a4 -CSEG XT_SP_STORE 0000f2a8 -CSEG PFA_SP_STORE 0000f2a9 -CSEG PFA_DODO 0000f2ae -CSEG PFA_DODO1 0000f2b0 -CSEG VE_I 0000f2bb -CSEG PFA_I 0000f2bf -CSEG PFA_DOPLUSLOOP 0000f2cd -CSEG PFA_DOPLUSLOOP_LEAVE 0000f2d7 -CSEG PFA_DOPLUSLOOP_NEXT 0000f2d4 -CSEG PFA_DOLOOP 0000f2dc -CSEG VE_UNLOOP 0000f2e1 -CSEG PFA_UNLOOP 0000f2e7 -CSEG VE_CMOVE_G 0000f2ec -CSEG XT_CMOVE_G 0000f2f1 -CSEG PFA_CMOVE_G 0000f2f2 -CSEG PFA_CMOVE_G1 0000f303 -CSEG PFA_CMOVE_G2 0000f2ff -CSEG VE_BYTESWAP 0000f308 -CSEG PFA_BYTESWAP 0000f30c -CSEG VE_UP_FETCH 0000f310 -CSEG PFA_UP_FETCH 0000f315 -CSEG VE_UP_STORE 0000f319 -CSEG XT_UP_STORE 0000f31d -CSEG PFA_UP_STORE 0000f31e -CSEG VE_1MS 0000f322 -CSEG XT_1MS 0000f326 -CSEG PFA_1MS 0000f327 -CSEG VE_2TO_R 0000f32c -CSEG XT_2TO_R 0000f330 -CSEG PFA_2TO_R 0000f331 -CSEG VE_2R_FROM 0000f33b -CSEG XT_2R_FROM 0000f33f -CSEG PFA_2R_FROM 0000f340 -CSEG VE_STOREE 0000f34a -CSEG PFA_STOREE 0000f34e -CSEG PFA_STOREE0 0000f34e -CSEG PFA_FETCHE2 0000f37c -CSEG PFA_STOREE3 0000f358 -CSEG PFA_STOREE1 0000f363 -CSEG PFA_STOREE4 0000f35f -CSEG PFA_STOREE2 0000f365 -CSEG VE_FETCHE 0000f36e -CSEG PFA_FETCHE 0000f372 -CSEG PFA_FETCHE1 0000f372 -CSEG VE_STOREI 0000f382 -CSEG PFA_STOREI 0000f386 -ESEG EE_STOREI 00000078 -CSEG VE_DO_STOREI_NRWW 0000f389 -CSEG XT_DO_STOREI 0000f390 -CSEG PFA_DO_STOREI_NRWW 0000f391 -CSEG DO_STOREI_atmega 0000f3a5 -CSEG pageload 0000f3b6 -CSEG DO_STOREI_writepage 0000f3af -CSEG dospm 0000f3d2 -EQU pagemask ffffff80 -CSEG pageload_loop 0000f3bc -CSEG pageload_newdata 0000f3ca -CSEG pageload_cont 0000f3cc -CSEG pageload_done 0000f3d1 -CSEG dospm_wait_ee 0000f3d2 -CSEG dospm_wait_spm 0000f3d4 -CSEG VE_FETCHI 0000f3e0 -CSEG PFA_FETCHI 0000f3e4 -CSEG VE_N_TO_R 0000f3ed -CSEG XT_N_TO_R 0000f3f1 -CSEG PFA_N_TO_R 0000f3f2 -CSEG PFA_N_TO_R1 0000f3f4 -CSEG VE_N_R_FROM 0000f3ff -CSEG XT_N_R_FROM 0000f403 -CSEG PFA_N_R_FROM 0000f404 -CSEG PFA_N_R_FROM1 0000f409 -CSEG VE_D2STAR 0000f411 -CSEG XT_D2STAR 0000f415 -CSEG PFA_D2STAR 0000f416 -CSEG VE_D2SLASH 0000f41f -CSEG XT_D2SLASH 0000f423 -CSEG PFA_D2SLASH 0000f424 -CSEG VE_DPLUS 0000f42d -CSEG PFA_DPLUS 0000f431 -CSEG VE_DMINUS 0000f43e -CSEG XT_DMINUS 0000f441 -CSEG PFA_DMINUS 0000f442 -CSEG VE_DINVERT 0000f450 -CSEG XT_DINVERT 0000f456 -CSEG PFA_DINVERT 0000f457 -CSEG VE_UDOT 0000f460 -CSEG PFA_UDOT 0000f464 -CSEG XT_UDDOT 0000f745 -CSEG VE_UDOTR 0000f467 -CSEG XT_UDOTR 0000f46b -CSEG PFA_UDOTR 0000f46c -CSEG XT_UDDOTR 0000f74e -CSEG VE_SHOWWORDLIST 0000f470 -CSEG XT_SHOWWORDLIST 0000f479 -CSEG PFA_SHOWWORDLIST 0000f47a -CSEG XT_SHOWWORD 0000f47f -CSEG XT_TRAVERSEWORDLIST 0000fc72 -CSEG PFA_SHOWWORD 0000f480 -CSEG VE_WORDS 0000f485 -CSEG XT_WORDS 0000f48a -CSEG PFA_WORDS 0000f48b -CSEG VE_INTON 0000f490 -CSEG PFA_INTON 0000f495 -CSEG VE_INTOFF 0000f497 -CSEG XT_INTOFF 0000f49b -CSEG PFA_INTOFF 0000f49c -CSEG VE_INTSTORE 0000f49e -CSEG PFA_INTSTORE 0000f4a3 -CSEG VE_INTFETCH 0000f4a8 -CSEG XT_INTFETCH 0000f4ac -CSEG PFA_INTFETCH 0000f4ad -CSEG VE_INTTRAP 0000f4b2 -CSEG XT_INTTRAP 0000f4b8 -CSEG PFA_INTTRAP 0000f4b9 -CSEG PFA_ISREXEC 0000f4be -CSEG XT_ISREND 0000f4c2 -CSEG PFA_ISREND 0000f4c3 -CSEG PFA_ISREND1 0000f4c5 -CSEG VE_PICK 0000f4c6 -CSEG PFA_PICK 0000f4cb -CSEG VE_DOTSTRING 0000f4d1 -CSEG XT_DOTSTRING 0000f4d4 -CSEG PFA_DOTSTRING 0000f4d5 -CSEG VE_SQUOTE 0000f4d9 -CSEG PFA_SQUOTE 0000f4dd -CSEG PFA_SQUOTE1 0000f4e5 -CSEG VE_FILL 0000f4e6 -CSEG PFA_FILL 0000f4eb -CSEG PFA_FILL2 0000f4f7 -CSEG PFA_FILL1 0000f4f2 -CSEG VE_ENVIRONMENT 0000f4f9 -CSEG XT_ENVIRONMENT 0000f501 -CSEG PFA_ENVIRONMENT 0000f502 -ESEG CFG_ENVIRONMENT 00000056 -CSEG VE_ENVWORDLISTS 0000f503 -CSEG XT_ENVWORDLISTS 0000f50a -CSEG PFA_ENVWORDLISTS 0000f50b -CSEG VE_ENVSLASHPAD 0000f50e -CSEG XT_ENVSLASHPAD 0000f512 -CSEG PFA_ENVSLASHPAD 0000f513 -CSEG XT_PAD 0000f59f -CSEG VE_ENVSLASHHOLD 0000f517 -CSEG XT_ENVSLASHHOLD 0000f51c -CSEG PFA_ENVSLASHHOLD 0000f51d -CSEG VE_ENV_FORTHNAME 0000f521 -CSEG XT_ENV_FORTHNAME 0000f528 -CSEG PFA_EN_FORTHNAME 0000f529 -CSEG VE_ENV_FORTHVERSION 0000f530 -CSEG XT_ENV_FORTHVERSION 0000f536 -CSEG PFA_EN_FORTHVERSION 0000f537 -CSEG VE_ENV_CPU 0000f53a -CSEG XT_ENV_CPU 0000f53e -CSEG PFA_EN_CPU 0000f53f -CSEG XT_ICOUNT 0000f7e7 -CSEG VE_ENV_MCUINFO 0000f543 -CSEG XT_ENV_MCUINFO 0000f549 -CSEG PFA_EN_MCUINFO 0000f54a -CSEG VE_ENVUSERSIZE 0000f54d -CSEG XT_ENVUSERSIZE 0000f552 -CSEG PFA_ENVUSERSIZE 0000f553 -CSEG VE_F_CPU 0000f556 -CSEG PFA_F_CPU 0000f55c -CSEG VE_STATE 0000f561 -CSEG PFA_STATE 0000f567 -DSEG ram_state 0000013d -CSEG VE_BASE 0000f568 -CSEG XT_BASE 0000f56c -CSEG PFA_BASE 0000f56d -CSEG VE_CELLS 0000f56e -CSEG VE_CELLPLUS 0000f574 -CSEG PFA_CELLPLUS 0000f57a -CSEG VE_2DUP 0000f57c -CSEG PFA_2DUP 0000f581 -CSEG VE_2DROP 0000f584 -CSEG PFA_2DROP 0000f58a -CSEG VE_TUCK 0000f58d -CSEG PFA_TUCK 0000f592 -CSEG VE_TO_IN 0000f595 -CSEG PFA_TO_IN 0000f59a -CSEG VE_PAD 0000f59b -CSEG PFA_PAD 0000f5a0 -CSEG VE_EMIT 0000f5a5 -CSEG XT_EMIT 0000f5a9 -CSEG PFA_EMIT 0000f5aa -CSEG XT_UDEFERFETCH 0000fbf7 -CSEG XT_UDEFERSTORE 0000fc03 -CSEG VE_EMITQ 0000f5ad -CSEG XT_EMITQ 0000f5b2 -CSEG PFA_EMITQ 0000f5b3 -CSEG VE_KEY 0000f5b6 -CSEG XT_KEY 0000f5ba -CSEG PFA_KEY 0000f5bb -CSEG VE_KEYQ 0000f5be -CSEG XT_KEYQ 0000f5c2 -CSEG PFA_KEYQ 0000f5c3 -CSEG VE_DP 0000f5c6 -ESEG CFG_DP 00000048 -CSEG VE_EHERE 0000f5cd -ESEG EE_EHERE 0000004c -CSEG VE_HERE 0000f5d6 -CSEG PFA_HERE 0000f5db -ESEG EE_HERE 0000004a -CSEG VE_ALLOT 0000f5de -CSEG PFA_ALLOT 0000f5e4 -CSEG VE_BIN 0000f5e9 -CSEG XT_BIN 0000f5ed -CSEG PFA_BIN 0000f5ee -CSEG VE_DECIMAL 0000f5f2 -CSEG PFA_DECIMAL 0000f5f9 -CSEG VE_HEX 0000f5fe -CSEG XT_HEX 0000f602 -CSEG PFA_HEX 0000f603 -CSEG VE_BL 0000f608 -CSEG XT_BL 0000f60b -CSEG PFA_BL 0000f60c -CSEG VE_TURNKEY 0000f60d -CSEG XT_TURNKEY 0000f613 -CSEG PFA_TURNKEY 0000f614 -ESEG CFG_TURNKEY 00000054 -CSEG VE_SLASHMOD 0000f617 -CSEG XT_SLASHMOD 0000f61b -CSEG PFA_SLASHMOD 0000f61c -CSEG PFA_SLASHMOD_1 0000f627 -CSEG PFA_SLASHMOD_2 0000f62d -CSEG PFA_SLASHMOD_3 0000f630 -CSEG PFA_SLASHMOD_5 0000f63b -CSEG PFA_SLASHMOD_4 0000f63a -CSEG PFA_SLASHMODmod_done 0000f646 -CSEG PFA_SLASHMOD_6 0000f644 -CSEG VE_USLASHMOD 0000f64a -CSEG XT_USLASHMOD 0000f64f -CSEG PFA_USLASHMOD 0000f650 -CSEG VE_NEGATE 0000f655 -CSEG PFA_NEGATE 0000f65b -CSEG VE_SLASH 0000f65e -CSEG XT_SLASH 0000f661 -CSEG PFA_SLASH 0000f662 -CSEG VE_MOD 0000f665 -CSEG XT_MOD 0000f669 -CSEG PFA_MOD 0000f66a -CSEG VE_ABS 0000f66d -CSEG XT_ABS 0000f671 -CSEG PFA_ABS 0000f672 -CSEG VE_MIN 0000f675 -CSEG XT_MIN 0000f679 -CSEG PFA_MIN 0000f67a -CSEG PFA_MIN1 0000f67f -CSEG VE_MAX 0000f681 -CSEG XT_MAX 0000f685 -CSEG PFA_MAX 0000f686 -CSEG PFA_MAX1 0000f68b -CSEG VE_WITHIN 0000f68d -CSEG XT_WITHIN 0000f692 -CSEG PFA_WITHIN 0000f693 -CSEG VE_TOUPPER 0000f69a -CSEG XT_TOUPPER 0000f6a0 -CSEG PFA_TOUPPER 0000f6a1 -CSEG PFA_TOUPPER0 0000f6ac -CSEG VE_TOLOWER 0000f6ad -CSEG XT_TOLOWER 0000f6b3 -CSEG PFA_TOLOWER 0000f6b4 -CSEG PFA_TOLOWER0 0000f6bf -CSEG VE_HLD 0000f6c0 -CSEG XT_HLD 0000f6c4 -CSEG PFA_HLD 0000f6c5 -DSEG ram_hld 0000013f -CSEG VE_HOLD 0000f6c6 -CSEG XT_HOLD 0000f6ca -CSEG PFA_HOLD 0000f6cb -CSEG VE_L_SHARP 0000f6d6 -CSEG XT_L_SHARP 0000f6d9 -CSEG PFA_L_SHARP 0000f6da -CSEG VE_SHARP 0000f6de -CSEG XT_SHARP 0000f6e1 -CSEG PFA_SHARP 0000f6e2 -CSEG XT_UDSLASHMOD 0000f75e -CSEG PFA_SHARP1 0000f6ef -CSEG VE_SHARP_S 0000f6f4 -CSEG XT_SHARP_S 0000f6f7 -CSEG PFA_SHARP_S 0000f6f8 -CSEG NUMS1 0000f6f8 -CSEG VE_SHARP_G 0000f6ff -CSEG XT_SHARP_G 0000f702 -CSEG PFA_SHARP_G 0000f703 -CSEG VE_SIGN 0000f70a -CSEG XT_SIGN 0000f70e -CSEG PFA_SIGN 0000f70f -CSEG PFA_SIGN1 0000f715 -CSEG VE_DDOTR 0000f716 -CSEG XT_DDOTR 0000f71a -CSEG PFA_DDOTR 0000f71b -CSEG XT_DABS 0000fcef -CSEG XT_SPACES 0000f806 -CSEG XT_TYPE 0000f816 -CSEG VE_DOTR 0000f729 -CSEG XT_DOTR 0000f72c -CSEG PFA_DOTR 0000f72d -CSEG VE_DDOT 0000f732 -CSEG XT_DDOT 0000f735 -CSEG PFA_DDOT 0000f736 -CSEG VE_DOT 0000f73a -CSEG PFA_DOT 0000f73e -CSEG VE_UDDOT 0000f741 -CSEG PFA_UDDOT 0000f746 -CSEG VE_UDDOTR 0000f74a -CSEG PFA_UDDOTR 0000f74f -CSEG VE_UDSLASHMOD 0000f759 -CSEG PFA_UDSLASHMOD 0000f75f -CSEG VE_DIGITQ 0000f769 -CSEG XT_DIGITQ 0000f76e -CSEG PFA_DIGITQ 0000f76f -CSEG PFA_DOSLITERAL 0000f789 -CSEG VE_SCOMMA 0000f793 -CSEG PFA_SCOMMA 0000f797 -CSEG PFA_DOSCOMMA 0000f79b -CSEG PFA_SCOMMA2 0000f7ad -CSEG PFA_SCOMMA1 0000f7a7 -CSEG PFA_SCOMMA3 0000f7b4 -CSEG VE_ITYPE 0000f7b6 -CSEG PFA_ITYPE 0000f7bc -CSEG PFA_ITYPE2 0000f7cf -CSEG PFA_ITYPE1 0000f7c7 -CSEG XT_LOWEMIT 0000f7dc -CSEG XT_HIEMIT 0000f7d8 -CSEG PFA_ITYPE3 0000f7d6 -CSEG PFA_HIEMIT 0000f7d9 -CSEG PFA_LOWEMIT 0000f7dd -CSEG VE_ICOUNT 0000f7e2 -CSEG PFA_ICOUNT 0000f7e8 -CSEG VE_CR 0000f7ed -CSEG XT_CR 0000f7f0 -CSEG PFA_CR 0000f7f1 -CSEG VE_SPACE 0000f7f8 -CSEG PFA_SPACE 0000f7fe -CSEG VE_SPACES 0000f801 -CSEG PFA_SPACES 0000f807 -CSEG SPCS1 0000f809 -CSEG SPCS2 0000f810 -CSEG VE_TYPE 0000f812 -CSEG PFA_TYPE 0000f817 -CSEG PFA_TYPE2 0000f821 -CSEG PFA_TYPE1 0000f81c -CSEG VE_TICK 0000f822 -CSEG PFA_TICK 0000f826 -CSEG XT_DT_NULL 0000fb65 -CSEG XT_NOOP 0000fb9a -CSEG PFA_TICK1 0000f837 -CSEG VE_HANDLER 0000f839 -CSEG XT_HANDLER 0000f83f -CSEG PFA_HANDLER 0000f840 -CSEG VE_CATCH 0000f841 -CSEG XT_CATCH 0000f846 -CSEG PFA_CATCH 0000f847 -CSEG VE_THROW 0000f857 -CSEG PFA_THROW 0000f85d -CSEG PFA_THROW1 0000f863 -CSEG VE_CSKIP 0000f870 -CSEG XT_CSKIP 0000f875 -CSEG PFA_CSKIP 0000f876 -CSEG PFA_CSKIP1 0000f877 -CSEG PFA_CSKIP2 0000f884 -CSEG XT_SLASHSTRING 0000f9c0 -CSEG VE_CSCAN 0000f887 -CSEG XT_CSCAN 0000f88c -CSEG PFA_CSCAN 0000f88d -CSEG PFA_CSCAN1 0000f88f -CSEG PFA_CSCAN2 0000f8a1 -CSEG VE_ACCEPT 0000f8a7 -CSEG XT_ACCEPT 0000f8ac -CSEG PFA_ACCEPT 0000f8ad -CSEG ACC1 0000f8b1 -CSEG XT_CRLFQ 0000f8ed -CSEG ACC5 0000f8df -CSEG ACC3 0000f8cf -CSEG ACC6 0000f8cd -CSEG XT_BS 0000f8e5 -CSEG ACC4 0000f8dd -CSEG PFA_ACCEPT6 0000f8d6 -CSEG VE_REFILL 0000f8f8 -CSEG XT_REFILL 0000f8fd -CSEG PFA_REFILL 0000f8fe -CSEG VE_CHAR 0000f901 -CSEG PFA_CHAR 0000f906 -CSEG VE_NUMBER 0000f90a -CSEG XT_NUMBER 0000f90f -CSEG PFA_NUMBER 0000f910 -CSEG XT_QSIGN 0000f953 -CSEG XT_SET_BASE 0000f966 -CSEG PFA_NUMBER0 0000f926 -CSEG XT_TO_NUMBER 0000f984 -CSEG PFA_NUMBER1 0000f948 -CSEG PFA_NUMBER2 0000f93f -CSEG PFA_NUMBER6 0000f940 -CSEG PFA_NUMBER3 0000f93c -CSEG XT_DNEGATE 0000fcfc -CSEG PFA_NUMBER5 0000f94e -CSEG PFA_NUMBER4 0000f94d -CSEG PFA_QSIGN 0000f954 -CSEG PFA_NUMBERSIGN_DONE 0000f95f -CSEG XT_BASES 0000f961 -CSEG PFA_SET_BASE 0000f967 -CSEG SET_BASE1 0000f97c -CSEG SET_BASE2 0000f97d -CSEG VE_TO_NUMBER 0000f97e -CSEG TONUM1 0000f985 -CSEG TONUM3 0000f99c -CSEG TONUM2 0000f990 -CSEG XT_2SWAP 0000fd20 -CSEG VE_PARSE 0000f99d -CSEG PFA_PARSE 0000f9a3 -CSEG VE_SOURCE 0000f9b1 -CSEG PFA_SOURCE 0000f9b7 -CSEG VE_SLASHSTRING 0000f9ba -CSEG PFA_SLASHSTRING 0000f9c1 -CSEG VE_PARSENAME 0000f9c8 -CSEG PFA_PARSENAME 0000f9d0 -CSEG XT_SKIPSCANCHAR 0000f9d3 -CSEG PFA_SKIPSCANCHAR 0000f9d4 -CSEG VE_FINDXT 0000f9e5 -CSEG XT_FINDXT 0000f9eb -CSEG PFA_FINDXT 0000f9ec -CSEG XT_FINDXTA 0000f9f7 -CSEG PFA_FINDXT1 0000f9f6 -CSEG PFA_FINDXTA 0000f9f8 -CSEG XT_SEARCH_WORDLIST 0000fc40 -CSEG PFA_FINDXTA1 0000fa04 -CSEG XT_DEFAULT_PROMPTOK 0000fa05 -CSEG PFA_DEFAULT_PROMPTOK 0000fa06 -CSEG VE_PROMPTOK 0000fa0c -CSEG XT_PROMPTOK 0000fa10 -CSEG PFA_PROMPTOK 0000fa11 -CSEG XT_DEFAULT_PROMPTREADY 0000fa14 -CSEG PFA_DEFAULT_PROMPTREADY 0000fa15 -CSEG VE_PROMPTREADY 0000fa1b -CSEG XT_PROMPTREADY 0000fa20 -CSEG PFA_PROMPTREADY 0000fa21 -CSEG XT_DEFAULT_PROMPTERROR 0000fa24 -CSEG PFA_DEFAULT_PROMPTERROR 0000fa25 -CSEG VE_PROMPTERROR 0000fa36 -CSEG XT_PROMPTERROR 0000fa3b -CSEG PFA_PROMPTERROR 0000fa3c -CSEG VE_QUIT 0000fa3f -CSEG XT_QUIT 0000fa43 -CSEG PFA_QUIT 0000fa44 -CSEG XT_SP0 0000faa4 -CSEG XT_RP0 0000fab1 -CSEG PFA_QUIT2 0000fa4c -CSEG PFA_QUIT4 0000fa52 -CSEG PFA_QUIT3 0000fa64 -CSEG XT_INTERPRET 0000faca -CSEG PFA_QUIT5 0000fa62 -CSEG VE_PAUSE 0000fa67 -CSEG PFA_PAUSE 0000fa6d -DSEG ram_pause 00000141 -CSEG XT_RDEFERFETCH 0000fbe3 -CSEG XT_RDEFERSTORE 0000fbed -CSEG VE_COLD 0000fa70 -CSEG clearloop 0000fa7c -DSEG ram_user1 00000143 -CSEG PFA_WARM 0000fa97 -CSEG VE_WARM 0000fa92 -CSEG XT_WARM 0000fa96 -CSEG XT_INIT_RAM 0000fd6b -CSEG XT_DEFERSTORE 0000fc0e -CSEG VE_SP0 0000faa0 -CSEG PFA_SP0 0000faa5 -CSEG VE_SP 0000faa8 -CSEG XT_SP 0000faab -CSEG PFA_SP 0000faac -CSEG VE_RP0 0000faad -CSEG PFA_RP0 0000fab2 -CSEG XT_DORP0 0000fab5 -CSEG PFA_DORP0 0000fab6 -CSEG VE_DEPTH 0000fab7 -CSEG PFA_DEPTH 0000fabd -CSEG VE_INTERPRET 0000fac3 -CSEG PFA_INTERPRET 0000facb -CSEG PFA_INTERPRET2 0000fadb -CSEG PFA_INTERPRET1 0000fad6 -CSEG VE_FORTHRECOGNIZER 0000fadd -CSEG PFA_FORTHRECOGNIZER 0000fae8 -ESEG CFG_FORTHRECOGNIZER 00000050 -CSEG VE_RECOGNIZE 0000faeb -CSEG PFA_RECOGNIZE 0000faf3 -CSEG XT_RECOGNIZE_A 0000fafd -CSEG PFA_RECOGNIZE1 0000fafc -CSEG PFA_RECOGNIZE_A 0000fafe -CSEG PFA_RECOGNIZE_A1 0000fb0e -CSEG VE_DT_NUM 0000fb12 -CSEG XT_DT_NUM 0000fb17 -CSEG PFA_DT_NUM 0000fb18 -CSEG VE_DT_DNUM 0000fb1b -CSEG XT_DT_DNUM 0000fb21 -CSEG PFA_DT_DNUM 0000fb22 -CSEG XT_2LITERAL 0000fd92 -CSEG VE_REC_NUM 0000fb25 -CSEG XT_REC_NUM 0000fb2b -CSEG PFA_REC_NUM 0000fb2c -CSEG PFA_REC_NONUMBER 0000fb37 -CSEG PFA_REC_INTNUM2 0000fb35 -CSEG VE_REC_FIND 0000fb39 -CSEG XT_REC_FIND 0000fb3f -CSEG PFA_REC_FIND 0000fb40 -CSEG PFA_REC_WORD_FOUND 0000fb48 -CSEG XT_DT_XT 0000fb4f -CSEG VE_DT_XT 0000fb4a -CSEG PFA_DT_XT 0000fb50 -CSEG XT_R_WORD_INTERPRET 0000fb53 -CSEG XT_R_WORD_COMPILE 0000fb57 -CSEG PFA_R_WORD_INTERPRET 0000fb54 -CSEG PFA_R_WORD_COMPILE 0000fb58 -CSEG PFA_R_WORD_COMPILE1 0000fb5d -CSEG VE_DT_NULL 0000fb5f -CSEG PFA_DT_NULL 0000fb66 -CSEG XT_FAIL 0000fb69 -CSEG PFA_FAIL 0000fb6a -CSEG VE_QSTACK 0000fb6d -CSEG PFA_QSTACK 0000fb73 -CSEG PFA_QSTACK1 0000fb7a -CSEG VE_DOT_VER 0000fb7b -CSEG PFA_DOT_VER 0000fb80 -CSEG VE_NOOP 0000fb96 -CSEG PFA_NOOP 0000fb9b -CSEG VE_UNUSED 0000fb9c -CSEG XT_UNUSED 0000fba1 -CSEG PFA_UNUSED 0000fba2 -CSEG VE_TO 0000fba6 -CSEG XT_TO 0000fba9 -CSEG PFA_TO 0000fbaa -CSEG XT_TO_BODY 0000fd8b -CSEG PFA_TO1 0000fbba -CSEG PFA_DOTO 0000fbb5 -CSEG VE_ICELLPLUS 0000fbc0 -CSEG PFA_ICELLPLUS 0000fbc7 -CSEG VE_EDEFERFETCH 0000fbc9 -CSEG PFA_EDEFERFETCH 0000fbd0 -CSEG VE_EDEFERSTORE 0000fbd3 -CSEG PFA_EDEFERSTORE 0000fbda -CSEG VE_RDEFERFETCH 0000fbdd -CSEG PFA_RDEFERFETCH 0000fbe4 -CSEG VE_RDEFERSTORE 0000fbe7 -CSEG PFA_RDEFERSTORE 0000fbee -CSEG VE_UDEFERFETCH 0000fbf1 -CSEG PFA_UDEFERFETCH 0000fbf8 -CSEG VE_UDEFERSTORE 0000fbfd -CSEG PFA_UDEFERSTORE 0000fc04 -CSEG VE_DEFERSTORE 0000fc09 -CSEG PFA_DEFERSTORE 0000fc0f -CSEG VE_DEFERFETCH 0000fc16 -CSEG XT_DEFERFETCH 0000fc1b -CSEG PFA_DEFERFETCH 0000fc1c -CSEG VE_DODEFER 0000fc22 -CSEG XT_DODEFER 0000fc28 -CSEG PFA_DODEFER 0000fc29 -CSEG VE_SEARCH_WORDLIST 0000fc36 -CSEG PFA_SEARCH_WORDLIST 0000fc41 -CSEG XT_ISWORD 0000fc55 -CSEG PFA_SEARCH_WORDLIST1 0000fc4f -CSEG PFA_ISWORD 0000fc56 -CSEG XT_ICOMPARE 0000fca3 -CSEG PFA_ISWORD3 0000fc63 -CSEG VE_TRAVERSEWORDLIST 0000fc67 -CSEG PFA_TRAVERSEWORDLIST 0000fc73 -CSEG PFA_TRAVERSEWORDLIST1 0000fc74 -CSEG PFA_TRAVERSEWORDLIST2 0000fc83 -CSEG VE_NAME2STRING 0000fc85 -CSEG PFA_NAME2STRING 0000fc8e -CSEG VE_NFA2CFA 0000fc93 -CSEG PFA_NFA2CFA 0000fc9a -CSEG VE_ICOMPARE 0000fc9d -CSEG PFA_ICOMPARE 0000fca4 -CSEG PFA_ICOMPARE_SAMELEN 0000fcae -CSEG PFA_ICOMPARE_DONE 0000fcd1 -CSEG PFA_ICOMPARE_LOOP 0000fcb4 -CSEG PFA_ICOMPARE_LASTCELL 0000fcc2 -CSEG PFA_ICOMPARE_NEXTLOOP 0000fcc9 -CSEG VE_STAR 0000fcd4 -CSEG XT_STAR 0000fcd7 -CSEG PFA_STAR 0000fcd8 -CSEG VE_J 0000fcdb -CSEG XT_J 0000fcde -CSEG PFA_J 0000fcdf -CSEG VE_DABS 0000fceb -CSEG PFA_DABS 0000fcf0 -CSEG PFA_DABS1 0000fcf5 -CSEG VE_DNEGATE 0000fcf6 -CSEG PFA_DNEGATE 0000fcfd -CSEG VE_CMOVE 0000fd02 -CSEG XT_CMOVE 0000fd07 -CSEG PFA_CMOVE 0000fd08 -CSEG PFA_CMOVE1 0000fd15 -CSEG PFA_CMOVE2 0000fd11 -CSEG VE_2SWAP 0000fd1b -CSEG PFA_2SWAP 0000fd21 -CSEG VE_REFILLTIB 0000fd26 -CSEG XT_REFILLTIB 0000fd2d -CSEG PFA_REFILLTIB 0000fd2e -CSEG XT_TIB 0000fd49 -CSEG XT_NUMBERTIB 0000fd4f -CSEG VE_SOURCETIB 0000fd39 -CSEG XT_SOURCETIB 0000fd40 -CSEG PFA_SOURCETIB 0000fd41 -CSEG VE_TIB 0000fd45 -CSEG PFA_TIB 0000fd4a -DSEG ram_tib 0000016f -CSEG VE_NUMBERTIB 0000fd4b -CSEG PFA_NUMBERTIB 0000fd50 -DSEG ram_sharptib 000001c9 -CSEG VE_EE2RAM 0000fd51 -CSEG XT_EE2RAM 0000fd56 -CSEG PFA_EE2RAM 0000fd57 -CSEG PFA_EE2RAM_1 0000fd59 -CSEG PFA_EE2RAM_2 0000fd63 -CSEG VE_INIT_RAM 0000fd65 -CSEG PFA_INI_RAM 0000fd6c -ESEG EE_INITUSER 0000007c -CSEG VE_BOUNDS 0000fd74 -CSEG PFA_BOUNDS 0000fd7a -CSEG VE_S2D 0000fd7e -CSEG PFA_S2D 0000fd83 -CSEG VE_TO_BODY 0000fd86 -CSEG VE_2LITERAL 0000fd8c -CSEG PFA_2LITERAL 0000fd93 -CSEG VE_EQUAL 0000fd97 -CSEG PFA_EQUAL 0000fd9b -CSEG VE_ONE 0000fd9e -CSEG PFA_ONE 0000fda2 -CSEG VE_TWO 0000fda3 -CSEG PFA_TWO 0000fda7 -CSEG VE_MINUSONE 0000fda8 -CSEG XT_MINUSONE 0000fdab -CSEG PFA_MINUSONE 0000fdac -SET flashlast 0000fdad -DSEG HERESTART 000001cb -ESEG EHERESTART 000000a0 -ESEG CFG_ORDERLIST 0000005e -ESEG CFG_RECOGNIZERLIST 00000070 -EQU UBRR_VAL 00000019 -EQU BAUD_REAL 0000963d -EQU BAUD_ERROR 00000001 diff --git a/amforth-6.5/appl/eval-pollin/p1284-16.xml b/amforth-6.5/appl/eval-pollin/p1284-16.xml deleted file mode 100644 index b712290..0000000 --- a/amforth-6.5/appl/eval-pollin/p1284-16.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - Uploading Hexfiles for p1284 - 16 - - - - Writing fuses - - - - diff --git a/amforth-6.5/appl/eval-pollin/p16-8.eep.hex b/amforth-6.5/appl/eval-pollin/p16-8.eep.hex deleted file mode 100644 index c6b7ad6..0000000 --- a/amforth-6.5/appl/eval-pollin/p16-8.eep.hex +++ /dev/null @@ -1,7 +0,0 @@ -:10002A00FFFF020F1D018400150552001004540E33 -:0A003A00B7053E00EE1F01003E0076 -:060052000200AB0B970B4E -:10005C007E1F5E00000000005F040F040F04000010 -:10006C000A009800A6006D008800AC0D0000990DE8 -:08007C00990AB80AA80A0C0059 -:00000001FF diff --git a/amforth-6.5/appl/eval-pollin/p16-8.hex b/amforth-6.5/appl/eval-pollin/p16-8.hex deleted file mode 100644 index c9756f7..0000000 --- a/amforth-6.5/appl/eval-pollin/p16-8.hex +++ /dev/null @@ -1,625 +0,0 @@ -:020000020000FC -:020004001BD10E -:0200080019D10C -:02000C0017D10A -:0200100015D108 -:0200140013D106 -:0200180011D104 -:02001C000FD102 -:020020000DD100 -:020024000BD1FE -:0200280009D1FC -:02002C0007D1FA -:0200300005D1F8 -:0200340003D1F6 -:0200380001D1F4 -:02003C00FFD0F3 -:02004000FDD0F1 -:02004400FBD0EF -:02004800F9D0ED -:02004C00F7D0EB -:10005000F5D00004000200381500080041546D6519 -:100060006761313607FF3E72782D627566000000C9 -:100070003900082F10917000E0E6F0E0E10FF31D69 -:10008000008313951F7010937000899199910C94BF -:10009000051C06FF6973722D72783200011C3D1C2D -:1000A0002C00981CB11C3D1C0300E01F361C59009D -:1000B000E00A3800201C011C3D1C4E003D1C1600AF -:1000C00013023D1C60003D1C1600541D5D02201CE7 -:1000D00006FF72782D6275664900011C8800361C87 -:1000E0006E003D1C7100981CB11C3D1C60009D1DE4 -:1000F000981CC41C2F1E3D1C0F00131E3D1C7100BC -:100100008D1C201C07FF72783F2D62756600680009 -:10011000011CD80A3D1C7100981C3D1C7000981CE5 -:10012000131D201C07FF74782D706F6C6C0082000B -:10013000011CA600361C99003D1C2C008D1C201CA7 -:1001400008FF74783F2D706F6C6C9200011CD80A08 -:100150003D1C2B00981C3D1C2000131E201C04FF7E -:1001600075627272A0006F1C82003B0C450C06FF8A -:100170002B7573617274AF00011C3D1C98003D1C0F -:100180002A008D1C3D1C06003D1CC0008D1CB300C8 -:10019000B11CF91E3D1C40008D1C3D1C29008D1C0E -:1001A0005B00201C08FF31772E7265736574B70001 -:1001B000D9009A938A93BC9AC498E0ECF3E0319703 -:1001C000F1F71FB7F894C49ABC98E0E8F0E03197D3 -:1001D000F1F786B384FF9FEF1FBFBC98C498E0E49B -:1001E000F3E03197F1F7892F0C94051C07FF317765 -:1001F0002E736C6F7400D200FD00C498BC9A1FB7B8 -:10020000F894ECE0F0E03197F1F78894879510F4DA -:10021000C49ABC98E2E1F0E03197F1F706B304FD2F -:100220008068E6E6F0E03197F1F7C49ABC98E4E024 -:0C023000F0E03197F1F71FBF0C94051CA3 -:040000000C94E10A71 -:10023C000A920FB60A920F900F900A94B02CFF936B -:10024C00EF93E2E7F0E00694E00DF31D00800394D9 -:10025C000082EF91FF9109900FBE0990089502FF63 -:10026C006D2BF600011CEE0D9C01201C03FF756428 -:10027C002A003501011CB11CFF1CE01DD91CC41C3B -:10028C00F61CE01DE11C9D1D201C04FF756D6178A2 -:10029C003C01011CEB055C1D361C5501C41CD91C12 -:1002AC00201C04FF756D696E4B01011CEB05671D6D -:1002BC00361C6101C41CD91C201C011C3D1C008077 -:1002CC00131E1A1D361C6C01E71F201C4B1D201C15 -:1002DC000AFF6E616D653E666C6167735701011CA8 -:1002EC00CB1F3D1C00FF131E201C03FF64322A0091 -:1002FC006E01800109911991000F111F881F991F20 -:10030C001A930A930C94051C03FF64322F007B0193 -:10031C008F010991199195958795179507951A93C2 -:10032C000A930C94051C02FF642B8A019D012991F0 -:10033C003991E990F99049915991240F351F8E1DEF -:10034C009F1D3A932A930C94051C02FF642D99016E -:10035C00AF0129913991E990F99049915991421B3A -:10036C00530BE80AF90A5A934A93C7010C94051CDB -:10037C0007FF64696E7665727400AB01C501099163 -:10038C00199180959095009510951A930A930C9459 -:10039C00051C02FF752EBE01011C541DB107201C4B -:1003AC0003FF752E7200CF01011C541DC41CBA072B -:1003BC00201C0DFF73686F772D776F72646C6973F7 -:1003CC007400D601011C3D1CEE01C41CDE0C201C6B -:1003DC00011CF90C270869084B1D201C05FF776FC1 -:1003EC0072647300DF01011C3D1C42005F1FE801B9 -:1003FC00201C04FF2B696E74F401040278940C9495 -:10040C00051C04FF2D696E74FF010C02F8940C940A -:10041C00051C04FF696E74210702011C3D1C0000C1 -:10042C009D1D3B1F201C04FF696E74400F02011CB4 -:10043C003D1C00009D1D5F1F201C08FF696E742D64 -:10044C007472617019022A02B82E899199910C94D8 -:10045C00051C011C1D022A1C3402201C350202D072 -:10046C000C94051C189504FF7069636B2302011C26 -:10047C002F1EDD058D1E9D1D791C201C02002E22B9 -:10048C003902011C4F02A3022708201C0200732210 -:10049C004402011C3D1C22000E0AD005791C361C9E -:1004AC005802CF02201C04FF66696C6C4C02011CC4 -:1004BC00E11CE11CB91C361C6A02E50D9B1EB11C2B -:1004CC00AC1E8D1CC91E6502D91C201C06FF6E6556 -:1004DC00776573745902481C870006FF6C6174655C -:1004EC0073746C02481C8B0008FF2863726561747E -:1004FC0065297302011C3B0AD703B11C7102E30589 -:10050C00811CBC037102811C201C01005C007A025E -:10051C00011C220AF01C0406811C201C010028006E -:10052C008B02011C3D1C29000E0AF405201C07FF40 -:10053C00636F6D70696C65009402011CF61CB11C34 -:10054C00320CFF1CCB1FAE02201C01FF2C009D02A5 -:10055C00011C3406731F34062F1E200C3506201C7C -:10056C0003005B275D00AB02011C9108C402201C38 -:10057C0007006C69746572616C00B602011CA30201 -:10058C003D1CAE02201C0800736C69746572616CB2 -:10059C00BE02011CA302F4070208201C011C340635 -:1005AC00A302FFFF201C011CDE0B3406C41C731FAE -:1005BC00201C011C3406201C011CDE0BAE02201C6E -:1005CC000500616865616400C902011CA3022F1C4F -:1005DC00D402201C02006966E602011CA302361C30 -:1005EC00D402201C0400656C7365F002011CA3028C -:1005FC002F1CD402C41CD902201C04007468656E24 -:10060C00F802011CD902201C0500626567696E00A6 -:10061C000303011CDF02201C05007768696C650070 -:10062C000A03011CF302C41C201C060072657065D1 -:10063C0061741203011C34030703201C0500756E42 -:10064C0074696C001B03011C3D1C361CAE02E202DB -:10065C00201C0500616761696E002403011CA30264 -:10066C002F1CE202201C0200646F2F03011CA3024A -:10067C009B1EDF02541D9703201C04006C6F6F70CF -:10068C003903011CA302C91E7E03201C05002B6C20 -:10069C006F6F70004303011CA302BA1E7E03201C63 -:1006AC0005006C65617665004C03011CA302D41E29 -:1006BC00EB029703201C03003F646F005603011CE0 -:1006CC00A3026D03F3023C03C41C9703201C011C02 -:1006DC00EB05E01FB11CFF1C361C7503F405F61C62 -:1006EC00FD1D201C07FF656E646C6F6F700061034D -:1006FC00011CE2028B03B91C361C870307032F1C59 -:10070C008003201C02FF6C3E7803011CAA03791C99 -:10071C00791C3D1CFEFFAA03651E201C02FF3E6CCB -:10072C008803011CEC1FAA03651EAA03791C811CFB -:10073C00201C03FF6C70300094036F1C36003B0CC4 -:10074C00450C02FF6C709F03481C8D0006FF637202 -:10075C0065617465A703011C8002E003A302521CAF -:10076C00201C06FF686561646572AC03011C3406CD -:10077C00FF1CFF1CB11C281D361CCE03B11C3D1CDC -:10078C0000FF1C1E0608F61C5F1FAE02F61C201C88 -:10079C003D1CF0FFC80807FF776C73636F70650032 -:1007AC00B7039A0C32003B0C450C06FF726576655C -:1007BC00616CD103011C7102E305791CB91C361C58 -:1007CC00EB037102791CC41C3B1F201C0500646FD9 -:1007DC0065733E00DB03011CA3020404A3020E9408 -:1007EC00A302F903201C9A938A93CB0101967F9163 -:1007FC006F91BF93AF93DB010C94051C011CF61C8D -:10080C007102E305791C5F1F050D731F201C01FF8E -:10081C003A00EC03011C80021B04D91C201C07FFAE -:10082C003A6E6F6E616D65000D04011C3406B11CCF -:10083C007802811CA302011C3004201C01003B0027 -:10084C001504011CA302201C3804E003201C01FF2A -:10085C005D002404011CE71FD005811C201C010035 -:10086C005B002D04011C541DD005811C201C08FFAD -:10087C007661726961626C653504011C45064F0432 -:10088C00EC1F4E06201C08FF636F6E7374616E7450 -:10089C003D04011C8002E003A302481CAE02201C94 -:1008AC0004FF757365724904011C8002E003A30206 -:1008BC00581CAE02201C07007265637572736500CC -:1008CC005604011C7802791CAE02201C09FF696DCC -:1008DC006D656469617465006104011C15055F1F19 -:1008EC00B11CCB1F3D1CFF7F131EC41C731F201C8F -:1008FC0006005B636861725D6C04011CA3023D1C05 -:10090C007109AE02201C060061626F7274227E04B3 -:10091C00011C4F02A302A004201C05FF61626F7230 -:10092C0074008904011C4B1DC80806FF3F61626FEF -:10093C0072749304011CE11C361CA604270898044D -:10094C00F405201C09FF6765742D737461636B00DB -:10095C009B04011CB11CE305C41C5F1FB11CFF1CD4 -:10096C00541DC41C6D03361CC6049B1EAC1E351EC8 -:10097C00DD05CF1C9D1D5F1FC41C4B1DBA1EBC0486 -:10098C00F405F61C201C09FF7365742D73746163E8 -:10099C006B00A804011CCF1C211D361CD8043D1C67 -:1009AC00FCFFC808EB053B1FC41C541D6D03361C13 -:1009BC00E5049B1EE305FC053B1FC91EE004D91C86 -:1009CC00201C09FF6D61702D737461636B00C90489 -:1009DC00011CB11CE305C41C5F1FDD05E50D6D0397 -:1009EC00361C0A059B1EAC1E5F1FC41CFF1C081D79 -:1009FC002A1CB91C361C0605F61CD91CD41E201C3E -:100A0C00F61CEC1FBA1EF904D91C541D201C0BFF3C -:100A1C006765742D63757272656E7400E704011C52 -:100A2C003D1C3C005F1F201C09FF6765742D6F7215 -:100A3C00646572000D05011C3D1C4000AF04201CB8 -:100A4C0009FF6366672D6F72646572001A05481C96 -:100A5C00400007FF636F6D706172650026053605F7 -:100A6C00BF93AF938C0189919991DC0189919991F4 -:100A7C009C0189919991FC01ED90F190EF1451F446 -:100A8C000A9519F02A95C1F701C02A95022B11F489 -:100A9C00882702C08FEF00C0982FAF91BF910C94A4 -:100AAC00051C07FF6E66613E6C6661002F05011C1C -:100ABC00F90C2F1E041E9D1D201C0BFF656E766904 -:100ACC00726F6E6D656E74005705481C3A0009FF15 -:100ADC00776F72646C69737473000000011C3D1CA9 -:100AEC000800201C04FF2F7061646D05011C8D1E15 -:100AFC000A06931D201C05FF2F686F6C6400780597 -:100B0C00011C0A064506931D201C0AFF666F7274B1 -:100B1C00682D6E616D658105011CF4070700616D20 -:100B2C00666F72746800201C07FF76657273696FBC -:100B3C006E008B05011C3D1C4100201C03FF6370E3 -:100B4C0075009A05011C3D1C2D005308201C08FF44 -:100B5C006D63752D696E666FA405011C3D1C290023 -:100B6C00201C05FF2F7573657200AD05011C3D1C23 -:100B7C002C00201C05FF665F637075006305011C6B -:100B8C003D1C00123D1C7A00201C05FF737461741F -:100B9C006500C005481C8F0004FF62617365CB05BE -:100BAC00581C0C0005FF63656C6C7300D2050C1EA1 -:100BBC0005FF63656C6C2B00D805E40502960C945C -:100BCC00051C04FF32647570DE05011CCF1CCF1CA4 -:100BDC00201C05FF3264726F7000E705011CD91CE4 -:100BEC00D91C201C04FF7475636BEF05011CC41C1D -:100BFC00CF1C201C03FF3E696E00F805581C180022 -:100C0C0003FF706164000006011C45063D1C2800B2 -:100C1C009D1D201C04FF656D697406069A0C0E0060 -:100C2C00630C6F0C05FF656D69743F0010069A0C20 -:100C3C001000630C6F0C03FF6B65790018069A0C9F -:100C4C001200630C6F0C04FF6B65793F21069A0C44 -:100C5C001400630C6F0C02FF647029066F1C2C00CF -:100C6C003B0C450C05FF65686572650031066F1C11 -:100C7C0030003B0C450C04FF6865726538066F1C30 -:100C8C002E003B0C450C05FF616C6C6F740041062B -:100C9C00011C45069D1D200C4606201C03FF6269A5 -:100CAC006E004906011CEC1FD605811C201C07FF99 -:100CBC00646563696D616C005406011C3D1C0A007F -:100CCC00D605811C201C03FF686578005D06011C9D -:100CDC003D1C1000D605811C201C02FF626C6906AD -:100CEC00481C200007FF7475726E6B6579007306E3 -:100CFC009A0C38003B0C450C04FF2F6D6F64780682 -:100D0C0087069C0109911991412F432717FF04C0B5 -:100D1C00109500950F5F1F4F37FF04C0309520953D -:100D2C002F5F3F4FEE24FF1851E1001F111F5A9502 -:100D3C0039F447FF04C0109500950F5F1F4F0BC08F -:100D4C00EE1CFF1CE21AF30A20F4E20EF31E889448 -:100D5C00ECCF0894EACFFA92EA92C8010C94051CE5 -:100D6C0005FF752F6D6F64008206011CFF1C541D5E -:100D7C00F61CC21D201C06FF6E6567617465B60605 -:100D8C00011CFD1D2F1E201C01FF2F00C106011C84 -:100D9C008606F01C201C03FF6D6F6400CA06011C44 -:100DAC008606D91C201C03FF61627300D106011C4E -:100DBC00B11C3E1E201C03FF6D696E00D906011C80 -:100DCC00EB05781D361CEB06C41CD91C201C03FF3C -:100DDC006D617800E106011CEB056E1D361CF706F3 -:100DEC00C41CD91C201C06FF77697468696EED065B -:100DFC00011CCF1C931DFF1C931DF61C5C1D201C9D -:100E0C0007FF746F757070657200F906011CB11CD8 -:100E1C003D1C61003D1C7B00FE06361C18073D1C6A -:100E2C00DF00131E201C07FF746F6C6F7765720058 -:100E3C000607011CB11C3D1C41003D1C5B00FE065D -:100E4C00361C2B073D1C20001C1E201C03FF686C4D -:100E5C0064001907481C910004FF686F6C642C0730 -:100E6C00011C3007B11C791C351EB11CFF1CC41CA5 -:100E7C00811CF61C8D1C201C02FF3C233207011C1C -:100E8C000A063007811C201C01FF23004207011CAD -:100E9C00D605791CCA07E11C3D1C0900CF1C6E1D30 -:100EAC00361C5B073D1C07009D1D3D1C30009D1D25 -:100EBC003607201C02FF23734A07011C4D07EB0564 -:100ECC001C1E1A1D361C6407201C02FF233E6007E3 -:100EDC00011CF4053007791C0A06CF1C931D201C3D -:100EEC0004FF7369676E6B07011C211D361C81079B -:100EFC003D1C2D003607201C03FF642E7200760764 -:100F0C00011CFF1CFC055B0D45076307E11C7A0700 -:100F1C006E07F61CCF1C931D72088208201C02FF62 -:100F2C002E728207011CFF1CEE0DF61C8607201C7E -:100F3C0002FF642E9507011C541D86076908201CAE -:100F4C0001FF2E009E07011CEE0DA107201C03FFC4 -:100F5C0075642E00A607011C541DBA076908201CD5 -:100F6C0004FF75642E72AD07011CFF1C4507630757 -:100F7C006E07F61CCF1C931D72088208201C06FFFE -:100F8C0075642F6D6F64B607011CFF1C541D081D82 -:100F9C00C21DF61CC41CFF1CC21DF61C201C06FF27 -:100FAC0064696769743FC507011C0C07B11C3D1CC3 -:100FBC003900781D3D1C0001131E9D1DB11C3D1CEC -:100FCC004001781D3D1C0701131E931D3D1C300074 -:100FDC00931DB11CD605791C5C1D201C011C081D21 -:100FEC005308F61CCF1C2F1E041E9D1D2F1EFF1C0C -:100FFC00201C02FF732CD507011CB11C0608201CF9 -:10100C00011CAE02B11C041EFC050B1E931DFF1C23 -:10101C00541D6D03361C19089B1EB11C791CAE02A5 -:10102C00E305C91E1308F61C281D361C2008B11C2C -:10103C00981CAE02D91C201C05FF697479706500E0 -:10104C00FF07011CB11C041EFC050B1E931DFF1C8D -:10105C00541D6D03361C3B089B1EB11CCB1FB11CD1 -:10106C00480844082F1EC91E3308F61C281D361CC0 -:10107C004208B11CCB1F4808D91C201C011CF91EAE -:10108C004808201C011C3D1CFF00131E1406201CCC -:10109C0006FF69636F756E742208011CB11C2F1E4C -:1010AC00C41CCB1F201C02FF63724E08011C3D1C8C -:1010BC000D0014063D1C0A001406201C05FF73705D -:1010CC00616365005908011C76061406201C06FF96 -:1010DC007370616365736408011C541DF106B11CC7 -:1010EC00361C7C086908351E2F1C7508D91C201C61 -:1010FC0004FF747970656D08011CE50D6D03361CD9 -:10110C008D089B1EAC1E981C1406C91E8808201C3A -:10111C0001FF27007E08011C3B0A600B360BB11C3B -:10112C00D10BE01FC41CCB1F3D1C060CE01F1C1E6A -:10113C00361CA3083D1CF3FFC808D91C201C07FF54 -:10114C0068616E646C6572008E08581C0A0005FF9D -:10115C00636174636800A508011C8D1EFF1CAB083D -:10116C00791CFF1C761EAB08811C2A1CF61CAB08D4 -:10117C00811CF61CD91C541D201C05FF7468726F51 -:10118C007700AD08011CB11C1A1D361CCF08D91CE8 -:10119C00201CAB08791C801EF61CAB08811CF61CAD -:1011AC00C41CFF1C961ED91CF61C201C05FF637367 -:1011BC006B697000C308011CFF1CB11C361CF008C5 -:1011CC00CF1C981C081DE01F361CF008E71F2C0ACA -:1011DC002F1CE308F61CD91C201C05FF63736361EC -:1011EC006E00DC08011CFF1CCF1CB11C981C081DD8 -:1011FC00E01F1A1D361C0D09C41C351EC41CCF1C47 -:10120C00211D1A1D361C0D092F1E2F1CFB08F01C4E -:10121C00CF1C931DF61CD91C201C06FF6163636553 -:10122C007074F308011CCF1C9D1D351ECF1C2506A8 -:10123C00B11C59091A1D361C4B09B11C3D1C080068 -:10124C00E01F361C3B09D91CE11CEB05781DFF1C6B -:10125C00E11CE11CF61C361C39095109351EFF1C1A -:10126C00CF1CF61C4F012F1C4909B11C76066E1DB4 -:10127C00361C4209D91C7606B11C1406CF1C8D1CD9 -:10128C002F1ECF1C5B012F1C1D09D91CF01CC41C6C -:10129C00931D5C08201C011C3D1C0800B11C14068D -:1012AC0069081406201C011CB11C3D1C0D00E01F1C -:1012BC00C41C3D1C0A00E01F1C1E201C06FF72658E -:1012CC0066696C6C13099A0C1A00630C6F0C04FFA2 -:1012DC00636861726409011C3B0AD91C981C201CB0 -:1012EC0006FF6E756D6265726D09011CD605791C61 -:1012FC00FF1CBF09FF1CD209BF09F61C1C1EFF1CDA -:10130C00B11C1A1D361C9209F405F61CD91CF61CCE -:10131C00D605811C541D201C1E1F541D541D2D1F31 -:10132C00F009B91C361CB409E71FE01F361CAB09C9 -:10133C00981C3D1C2E00E01F361CAC09F61C361CFC -:10134C00A809680DEC1F2F1CBA09D91CF405F61C52 -:10135C00D91CF61CD605811C541D201CF405F61C4A -:10136C00361CB909C606E71FF61CD605811C4B1D99 -:10137C00201C011CCF1C981C3D1C2D00E01FB11C17 -:10138C00FF1C361CCB09E71F2C0AF61C201C521C18 -:10139C000A00100002000A00011CCF1C981C3D1C06 -:1013AC002300931DB11C541D3D1C0400FE06361C6D -:1013BC00E809CD099D1DCB1FD605811CE71F2C0A02 -:1013CC002F1CE909D91C201C07FF3E6E756D626548 -:1013DC0072007609011CB11C361C080ACF1C981C23 -:1013EC00DA071A1D361CFC09D91C201CFF1C8C0D9D -:1013FC00D605791C4001F61C38018C0DE71F2C0A10 -:10140C002F1CF109201C05FF706172736500EA093D -:10141C00011CFF1C220A0406791C2C0AF61CF80875 -:10142C00B11C2F1E0406651EE71F2C0A201C06FF8C -:10143C00736F75726365090A9A0C1600630C6F0C56 -:10144C0007FF2F737472696E67001D0A011CE11C83 -:10145C00CF1C9D1DE11CE11C931D201C0AFF70611B -:10146C007273652D6E616D65260A011C76063F0A46 -:10147C00201C011CFF1C220A0406791C2C0A081DC6 -:10148C00E108F61CF808EB059D1D220AD91C931DDA -:10149C000406811C201C07FF66696E642D7874009D -:1014AC00340A011C3D1C630A3D1C4000EE041A1D4D -:1014BC00361C620AF405541D201C011CFF1CEB0594 -:1014CC00F61CAC0CB11C361C700AFF1CF01CF01C7A -:1014DC00F61C4B1D201C04FF71756974510A011C0C -:1014EC00A303AA03811C100B961E1D0B801E38042F -:1014FC00D005791C1A1D361C840AB40A6909361CDD -:10150C00960A3D1C6B0BB208B91C361C960AB11C12 -:10151C003D1CFEFF6E1D361C940ACF0A2F1C760A4A -:10152C00A40A2F1C7E0A011CF4070300206F6B0019 -:10153C002708201C03FF2E6F6B00710A9A0C1C00ED -:10154C00630C6F0C011CF40702003E205C0827089A -:10155C00201C06FF2E7265616479A00A9A0C20008B -:10156C00630C6F0C011CF4070400203F3F2027087C -:10157C00D605791CFF1C6306A9070406791CA9076C -:10158C00F61CD605811C201C06FF2E6572726F722C -:10159C00AF0A9A0C1E00630C6F0C05FF706175731B -:1015AC006500CA0A9A0C93004F0C590C04FF636F28 -:1015BC006C64D30AE10AA4B622243324BB2424BECF -:1015CC00E0E6F0E02192E036E9F7F430D9F7E5E90E -:1015DC00F0E02F010FE50DBF048314E01EBF15834F -:1015EC00CFE0C683D4E0D783A3E0BBE00C94051C0A -:1015FC0004FF7761726DDC0A011CD70D3D1C060CD3 -:10160C003D1CD80A7A0C38047E06750A03FF7370E9 -:10161C003000FE0A6F1C0600630C6F0C02FF737027 -:10162C000C0B581C080003FF72703000140B011CCB -:10163C00210B791C201C581C040005FF6465707478 -:10164C006800190B011C100B8D1E931D041E351EFA -:10165C00201C09FF7265636F676E697A6500230B46 -:10166C00011C3D1C410BC41CEE041A1D361C400B06 -:10167C00F405D10B201C011CE11CE11CEB051E1F09 -:10168C00E11C2A1C2D1FE11CB11CD10BE01F361CC8 -:10169C00520BD91C541D201CF01CF01C4B1D201C83 -:1016AC0010FF666F7274682D7265636F676E697A6E -:1016BC0065722F0B6F1C34003B0C450C09FF696ED7 -:1016CC007465727072657400560B011C3B0AB11C78 -:1016DC00361C7C0B600B360BD005791C361C770B3B -:1016EC00320CCB1F2A1CDE0B2F1C6C0BF405201CA0 -:1016FC0006FF64743A6E756D640B521C060CC402C2 -:10170C00C40207FF64743A646E756D007E0B521C44 -:10171C00060CD81FD81F07FF7265633A6E756D00F3 -:10172C00870B011C7B09361CA30BE71FE01F361C23 -:10173C00A10B830B201C8D0B201CD10B201C08FF34 -:10174C007265633A66696E64910B011C570AB11C91 -:10175C001A1D361CB40BD91CD10B201CBB0B201C26 -:10176C0005FF64743A787400A50B521CBF0BC30BB5 -:10177C00D81F011CD91C2A1C201C011C211D361C25 -:10178C00C90BAE02201C2A1C201C07FF64743A6E85 -:10179C00756C6C00B60B521CD50BD50BD50B011C04 -:1017AC003D1CF3FFC80806FF3F737461636BCB0BE2 -:1017BC00011C280B211D361CE60B3D1CFCFFC80828 -:1017CC00201C03FF76657200D90B011C92052708BB -:1017DC006908D605791CA0056306EE0D45074D0773 -:1017EC003D1C2E00360763076E078208D605811C48 -:1017FC006908A8052708201C04FF6E6F6F70E70BA3 -:10180C00011C201C06FF756E75736564020C011CAF -:10181C008D1E4506931D201C0200746F080C011CC4 -:10182C009108F70DD005791C361C260CA302200C50 -:10183C00AE02201C011CF61CB11C320CFF1CCB1F71 -:10184C00B11C320C320CCB1F2A1C201C07FF692D3B -:10185C0063656C6C2B00120C011C2F1E201C07FFE7 -:10186C0045646566657240002C0C011CCB1F5F1F24 -:10187C00201C07FF4564656665722100350C011C50 -:10188C00CB1F3B1F201C07FF52646566657240002E -:10189C003F0C011CCB1F791C201C07FF5264656692 -:1018AC0065722100490C011CCB1F811C201C07FFF9 -:1018BC005564656665724000530C011CCB1F021FFA -:1018CC009D1D791C201C07FF5564656665722100FF -:1018DC005D0C011CCB1F021F9D1D811C201C06FFD3 -:1018EC00646566657221690C011CF70DB11C320C24 -:1018FC00320CCB1F2A1C201C06FF646566657240E7 -:10190C00750C011CF70DB11C320CCB1F2A1C201CB2 -:10191C0007FF2864656665722900820C011C800231 -:10192C00E003A3029A0C201C0E94F903B11C320C98 -:10193C00CB1F2A1C2A1C201C0FFF73656172636865 -:10194C002D776F72646C697374008E0C011CFF1C14 -:10195C00541D3D1CC10CF61CDE0CB11C1A1D361C92 -:10196C00BB0CF405D91C541D201CB11C050DC41C4A -:10197C0075016301201C011CFF1CD91CEB05081D03 -:10198C00F90C0F0D361CCF0CF61CD91C541D4B1D1D -:10199C00201CF405F61C541D201C11FF747261767A -:1019AC00657273652D776F72646C69737400A20C29 -:1019BC00011C5F1FB11C361CEF0CEB051E1FC41C59 -:1019CC002A1C2D1FE11C361CEF0C5D05CB1F2F1C98 -:1019DC00E00CF405201C0BFF6E616D653E73747298 -:1019EC00696E6700D30C011C53083D1CFF00131ECD -:1019FC00201C07FF6E66613E63666100F10C011CE2 -:101A0C005D052F1E201C08FF69636F6D7061726588 -:101A1C00FF0C011CFF1CCF1CF61C131D361C1A0DD1 -:101A2C00F405D91C4B1D201CC41C541D6D03361C05 -:101A3C003D0D9B1ECF1C791CCF1CCB1FB11C3D1C1C -:101A4C0000015C1D361C2E0DC41C3D1CFF00131E1A -:101A5C00131D361C350DF4054B1DD41E201C2F1EDA -:101A6C00C41CE305C41C3D1C0200BA1E200DF40569 -:101A7C00541D201C01FF2A00090D011CA61DD91C98 -:101A8C00201C01FF6A00400D011C761E3D1C070046 -:101A9C009D1D791C761E3D1C09009D1D791C9D1DEC -:101AAC00201C04FF64616273470D011CB11C211DD5 -:101ABC00361C610D680D201C07FF646E6567617430 -:101ACC006500570D011CC401E71F541D9C01201C0F -:101ADC0005FF636D6F766500620D740DBF93AF9358 -:101AEC00E991F991A991B991092F082B21F01D9138 -:101AFC0011930197E1F7AF91BF91899199910C9452 -:101B0C00051C05FF3273776170006E0D011CE11C22 -:101B1C00FF1CE11CF61C201C0AFF726566696C6CCC -:101B2C002D746962870D011CB50D3D1C5A001809F6 -:101B3C00BB0D811C541D0406811C4B1D201C0AFF6F -:101B4C00736F757263652D746962920D011CB50D0E -:101B5C00BB0D791C201C03FF74696200A50D481C89 -:101B6C00C10004FF23746962B10D481C1B0106FF00 -:101B7C0065653E72616DB70D011C541D9B1ECF1C1B -:101B8C005F1FCF1C811CE305C41CE305C41CC91ECC -:101B9C00C50DF405201C08FF696E69742D72616D0A -:101BAC00BD0D011C3D1C6000021F3D1C2200041ECB -:101BBC00C20D201C06FF626F756E6473D10D011C83 -:101BCC00CF1C9D1DC41C201C03FF733E6400E00D44 -:101BDC00011CB11C211D201C05FF3E626F647900A5 -:101BEC00EA0D301E02FF2E73F20D011C280BD201E0 -:101BFC006908280B541D6D03361C0A0E9B1EAC1E67 -:101C0C003D02D201C91E050E201C06FF6321407344 -:101C1C007069F80D110E03D099270C94051C8FB91F -:101C2C000EB1087F0EB90EB107FFFACF8FB1089530 -:101C3C0005FF6E40737069000B0E240E8C018991A8 -:101C4C009991FC01C8012FB82EB127FFFDCF2FB100 -:101C5C0021930197C1F7899199910C94051C05FF6B -:101C6C006E21737069001E0E3B0E8C018991999147 -:101C7C00FC01C80121912FB92EB127FFFDCF2FB147 -:101C8C000197C1F7899199910C94051C0BFF617018 -:101C9C00706C7475726E6B657900350E011CBC002E -:101CAC000302EB0B6908C5053D1CE803C21DF01CC3 -:101CBC006306A907F40704006B487A202708201C48 -:101CCC000BFF7365742D63757272656E74004C0E28 -:101CDC00011C3D1C3C003B1F201C08FF776F7264ED -:101CEC006C697374660E011C3D06541DCF1C3B1FA2 -:101CFC00B11CE305200C3E06201C0EFF666F7274AF -:101D0C00682D776F72646C697374730E481C3E0097 -:101D1C0009FF7365742D6F7264657200830E011C6C -:101D2C003D1C4000D004201C0FFF7365742D7265A0 -:101D3C00636F676E697A657273008E0E011C3D1CB1 -:101D4C005200D004201C0FFF6765742D7265636F01 -:101D5C00676E697A657273009A0E011C3D1C520005 -:101D6C00AF04201C04FF636F6465A90E011C800284 -:101D7C00E0033406320CAE02201C08FF656E642DA5 -:101D8C00636F6465B80E011CA3020C94A302051CBE -:101D9C00201C08FF286D61726B657229C30E6F1CC5 -:101DAC005E003B0C450C0800706F7374706F6E65B1 -:101DBC00CF0E011C3B0A600B360BB11CFF1C320C06 -:101DCC00320CCB1F2A1CF61C320CCB1FAE02201C73 -:101DDC0003FF32724000D90EF30E9A938A93EF915F -:101DEC00FF918F919F919F938F93FF93EF939A9372 -:081DFC008A93CF010C94051C31 -:10380200BF93AF93DB011196B21469F4FD01EE0F81 -:10381200FF1F659175911196FB01EE0FFF1F059138 -:103822001591F80109949A938A938B2D9927BB24B9 -:103832006FE272E0F1CF04FF65786974EE0E211C2D -:10384200AF91BF91E1CF07FF65786563757465003D -:103852001C1C2B1CBC0189919991DECF301CFD01EF -:10386200EE0FFF1FA591B591CFCF371C982B8991F1 -:103872009991A9F31196C8CF3E1C9A938A93FD01A0 -:10388200EE0FFF1F859195911196BECF481C9A931A -:103892008A93FB013196EE0FFF1F85919591B4CF6C -:1038A200521C9A938A93CB010196AECF581C9A93DD -:1038B2008A93FB013196EE0FFF1F85919591840D3E -:1038C200951DA2CF07FF2876616C75652900241C1F -:1038D200011C8002E003A3026F1C201C0E94F9035A -:1038E200B11C320CCB1F2A1C201C01FF4000631CA0 -:1038F2007A1CFC018191919187CF01FF2100761CF6 -:10390200821CFC018991999191838083899199917B -:103912007BCF02FF63217E1C8E1CFC018991999151 -:1039220080838991999170CF02FF63408A1C991C10 -:10393200FC019927808168CF02FF4075951C011C0C -:10394200021F9D1D791C201C02FF21759D1C011C5C -:10395200021F9D1D811C201C03FF64757000A51CA5 -:10396200B21C9A938A9350CF04FF3F647570AD1CCA -:10397200BA1C082F092B11F09A938A9345CF04FFA2 -:1039820073776170B51CC51C8C01899199911A934A -:103992000A933ACF04FF6F766572C01CD01C9A93CB -:1039A2008A938A819B8130CF04FF64726F70CB1C33 -:1039B200DA1C8991999128CF03FF726F7400D51C8C -:1039C200E21C8C0129913991899199913A932A9318 -:1039D2001A930A9319CF03FF6E697000DD1CF11C64 -:1039E200229612CF02FF723EEC1CF71C9A938A9326 -:1039F2008F919F9109CF02FF3E72F31C001D9F938E -:103A02008F938991999100CF02FF7240FC1C091D8E -:103A12009A938A938F919F919F938F93F5CE02FFF2 -:103A22003C3E051D011CE01F1A1D201C02FF303DFB -:103A3200101D1B1D982BD1F530C002FF303C171D05 -:103A4200221D97FD2AC032C002FF303E1E1D291DD5 -:103A5200821593055CF151F120C003FF64303E00F2 -:103A6200251D331D82159305899199918205930530 -:103A7200ECF0E1F012C003FF64303C002E1D411D4A -:103A8200229697FD0C944E1D0C94571D04FF7472E0 -:103A920075653C1D4C1D9A938A938FEF9FEFB4CEB0 -:103AA20001FF3000471D551D9A938A93C101ACCE88 -:103AB20002FF753C511D5D1D2991399182179307B3 -:103AC200A8F3A1F3EACF02FF753E591D011CC41CE5 -:103AD2005C1D201C01FF3C00641D6F1D2991399162 -:103AE200281739071CF7D9CF01FF3E006B1D791D3E -:103AF2002991399128173907CCF2C1F2CECF04FFB0 -:103B02006C6F6732751D851DFC01992780E18A95CE -:103B120022F0EE0FFF1FD8F777CE9A9575CE01FFF0 -:103B22002D00801D941D09911991081B190BC801C4 -:103B32006BCE01FF2B00901D9E1D09911991800FE4 -:103B4200911F62CE02FF6D2A9A1DA71D8C018991D9 -:103B520099919C0131027001209FC0013003F3084A -:103B6200900DE11CF31C1203F308900DE11CF31CF1 -:103B72009A938A93C70148CE06FF756D2F6D6F64C5 -:103B8200A31DC31D7C01299139910991199140E12D -:103B92005527000F111F221F331F551F2E153F05DA -:103BA200520518F003952E193F094A9589F73A9361 -:103BB2002A93C80129CE03FF756D2A00BD1DE11DA0 -:103BC2008C0189919991809FF00122273327909F40 -:103BD200F00D211D331D819FF00D211D331D919F7D -:103BE200200D311DCF019A938A93C9010DCE06FF94 -:103BF200696E76657274DC1DFE1D8095909504CE0B -:103C020002FF322FF81D051E95958795FDCD02FF07 -:103C1200322A011E0C1E880F991FF6CD03FF616E1A -:103C22006400081E141E0991199180239123ECCD82 -:103C320002FF6F720F1E1D1E09911991802B912B8D -:103C4200E3CD03FF786F7200191E271E09911991A7 -:103C520080279127D9CD02FF312B221E301E0196DB -:103C6200D3CD02FF312D2C1E361E0197CDCD07FF7D -:103C72003F6E656761746500321E011C211D361C92 -:103C8200431EC606201C06FF6C7368696674381EE4 -:103C92004A1EFC018991999131971AF0880F991F58 -:103CA200FBCFB2CD06FF727368696674441E591E5B -:103CB200FC018991999131971AF096958795FBCFDE -:103CC200A3CD02FF2B21531E661EFC0189919991FF -:103CD20020813181820F931F8083918389919991F1 -:103CE20093CD03FF72704000621E771E9A938A93EF -:103CF2008DB79EB789CD03FF72702100721E811E9F -:103D02002FB7F8948DBF9EBF2FBF899199917CCD1B -:103D120003FF737040007C1E8E1E9A938A93CE011D -:103D220073CD03FF73702100891E971EEC018991E8 -:103D320099916ACD9C1E29913991E0E83E0F821B30 -:103D4200930B3F932F939F938F93899199915CCD7E -:103D520001FF6900921EAD1E9A938A938F919F91E3 -:103D6200EF91FF91FF93EF939F938F938E0F9F1F7E -:103D72004BCDBB1EEF91FF91E80FF91F89919991ED -:103D82001BF0FF93EF936BCD0F911F9111963CCDDA -:103D9200CA1EEF91FF913196BBF3F3CF06FF756E0A -:103DA2006C6F6F70A91ED51E1F910F911F910F91FD -:103DB2002BCD06FF636D6F76653ECF1EE01EBF936F -:103DC200AF93E991F991A991B991092F082B41F08B -:103DD200E80FF91FA80FB91F1E9112930197E1F77F -:103DE200AF91BF91899199910FCD02FF3E3CDA1EAE -:103DF200FA1E092F982F802F07CD03FF7570400000 -:103E0200F61E031F9A938A93C201FECC03FF7570BC -:103E12002100FE1E0C1F2C0189919991F5CC03FF04 -:103E2200316D7300071F151FE0EDF7E03197F1F7D1 -:103E3200EBCC03FF323E7200101F1F1FFC01899161 -:103E420099919F938F93FF93EF9389919991DCCCF2 -:103E520003FF32723E001A1F2E1F9A938A93EF912C -:103E6200FF918F919F919A938A93CF01CDCC02FFBC -:103E72002165291F3C1FFC01899199912FB7F89464 -:103E820028D00DB3081709F00BD0319622D00DB30C -:103E9200091711F0892F04D02FBF89919991B4CCC1 -:103EA200E199FECF07B700FDFDCFFFBBEEBB8DBB97 -:103EB200E29AE19A089502FF4065381F601F2FB70A -:103EC200F894FC0106D08DB3319603D09DB32FBF79 -:103ED2009BCCE199FECFFFBBEEBBE09A089502FFB7 -:103EE20021695C1F9A0C5C003B0C450C09FF2821E0 -:103EF200692D6E7277772900701F7F1F1FB71F937E -:103F0200F8949C0189919991AF93BF93CF93DF93DA -:103F120009D0DF91CF91BF91AF91899199911F9172 -:103F22001FBF72CC10D0E094F0948E219F21982B69 -:103F320019F0F90102E020D0F90104E01DD0F901E5 -:103F420000E11AD00895F901E07CFF7FEF01A0E4BF -:103F5200B0E0FE01EE0FFF1F45915591FE01E21701 -:103F6200F30711F00A0102C07A010C01002704D004 -:103F72002196119771F70895E199FECF17B710FDB9 -:103F8200FDCFEE0FFF1F016007BFE895089502FF06 -:103F92004069771FCC1FFC01EE0FFF1F85919591A1 -:103FA20033CC0800326C69746572616CC81F011CE5 -:103FB200C41CC402C402201C01FF3D00D21F011C0C -:103FC200931D1A1D201C01FF3100DD1F481C01003A -:103FD20001FF3200E41F481C020002FF2D31E91FDD -:043FE200481CFFFF79 -:00000001FF diff --git a/amforth-6.5/appl/eval-pollin/p16-8.lst b/amforth-6.5/appl/eval-pollin/p16-8.lst deleted file mode 100644 index 4cb21fb..0000000 --- a/amforth-6.5/appl/eval-pollin/p16-8.lst +++ /dev/null @@ -1,10363 +0,0 @@ - -AVRASM ver. 2.1.52 p16-8.asm Sun Apr 30 20:10:14 2017 - -p16-8.asm(5): Including file '../../avr8\preamble.inc' -../../avr8\preamble.inc(2): Including file '../../avr8\macros.asm' -../../avr8\macros.asm(6): Including file '../../avr8\user.inc' -../../avr8\preamble.inc(6): Including file '../../avr8/devices/atmega16\device.asm' -../../avr8/devices/atmega16\device.asm(5): Including file '../../avr8/Atmel/Appnotes2\m16def.inc' -p16-8.asm(14): Including file '../../avr8\drivers/usart.asm' -../../avr8\drivers/usart.asm(30): Including file '../../avr8\drivers/usart_common.asm' -../../avr8\drivers/usart_common.asm(11): Including file '../../avr8\drivers/usart-rx-buffer.asm' -../../avr8\drivers/usart_common.asm(24): Including file '../../avr8\words/usart-tx-poll.asm' -../../avr8\drivers/usart_common.asm(29): Including file '../../avr8\words/ubrr.asm' -../../avr8\drivers/usart_common.asm(30): Including file '../../avr8\words/usart.asm' -p16-8.asm(19): Including file '../../avr8\drivers/1wire.asm' -p16-8.asm(21): Including file '../../avr8\amforth.asm' -../../avr8\amforth.asm(12): Including file '../../avr8\drivers/generic-isr.asm' -../../avr8\amforth.asm(14): Including file '../../avr8\dict/rww.inc' -../../avr8\dict/rww.inc(1): Including file '../../avr8\words/mplus.asm' -../../avr8\dict/rww.inc(2): Including file '../../common\words/ud-star.asm' -../../avr8\dict/rww.inc(3): Including file '../../common\words/umax.asm' -../../avr8\dict/rww.inc(4): Including file '../../common\words/umin.asm' -../../avr8\dict/rww.inc(5): Including file '../../avr8\words/immediate-q.asm' -../../avr8\dict/rww.inc(6): Including file '../../avr8\words/name2flags.asm' -../../avr8\dict/rww.inc(13): Including file '../../avr8\dict/appl_2k.inc' -../../avr8\dict/appl_2k.inc(1): Including file '../../avr8\words/d-2star.asm' -../../avr8\dict/appl_2k.inc(2): Including file '../../avr8\words/d-2slash.asm' -../../avr8\dict/appl_2k.inc(3): Including file '../../avr8\words/d-plus.asm' -../../avr8\dict/appl_2k.inc(4): Including file '../../avr8\words/d-minus.asm' -../../avr8\dict/appl_2k.inc(5): Including file '../../avr8\words/d-invert.asm' -../../avr8\dict/appl_2k.inc(6): Including file '../../common\words/u-dot.asm' -../../avr8\dict/appl_2k.inc(7): Including file '../../common\words/u-dot-r.asm' -../../avr8\dict/appl_2k.inc(9): Including file '../../common\words/show-wordlist.asm' -../../avr8\dict/appl_2k.inc(10): Including file '../../common\words/words.asm' -../../avr8\dict/appl_2k.inc(11): Including file '../../avr8\dict/interrupt.inc' -../../avr8\dict/interrupt.inc(8): Including file '../../avr8\words/int-on.asm' -../../avr8\dict/interrupt.inc(9): Including file '../../avr8\words/int-off.asm' -../../avr8\dict/interrupt.inc(10): Including file '../../avr8\words/int-store.asm' -../../avr8\dict/interrupt.inc(11): Including file '../../avr8\words/int-fetch.asm' -../../avr8\dict/interrupt.inc(12): Including file '../../avr8\words/int-trap.asm' -../../avr8\dict/interrupt.inc(14): Including file '../../avr8\words/isr-exec.asm' -../../avr8\dict/interrupt.inc(15): Including file '../../avr8\words/isr-end.asm' -../../avr8\dict/appl_2k.inc(13): Including file '../../common\words/pick.asm' -../../avr8\dict/appl_2k.inc(14): Including file '../../common\words/dot-quote.asm' -../../avr8\dict/appl_2k.inc(15): Including file '../../common\words/squote.asm' -../../avr8\dict/appl_2k.inc(17): Including file '../../avr8\words/fill.asm' -../../avr8\dict/appl_2k.inc(18): Including file '../../avr8\dict/compiler1.inc' -../../avr8\dict/compiler1.inc(2): Including file '../../avr8\words/newest.asm' -../../avr8\dict/compiler1.inc(3): Including file '../../avr8\words/latest.asm' -../../avr8\dict/compiler1.inc(4): Including file '../../common\words/do-create.asm' -../../avr8\dict/compiler1.inc(5): Including file '../../common\words/backslash.asm' -../../avr8\dict/compiler1.inc(6): Including file '../../common\words/l-paren.asm' -../../avr8\dict/compiler1.inc(8): Including file '../../common\words/compile.asm' -../../avr8\dict/compiler1.inc(9): Including file '../../avr8\words/comma.asm' -../../avr8\dict/compiler1.inc(10): Including file '../../common\words/brackettick.asm' -../../avr8\dict/compiler1.inc(13): Including file '../../common\words/literal.asm' -../../avr8\dict/compiler1.inc(14): Including file '../../common\words/sliteral.asm' -../../avr8\dict/compiler1.inc(15): Including file '../../avr8\words/g-mark.asm' -../../avr8\dict/compiler1.inc(16): Including file '../../avr8\words/g-resolve.asm' -../../avr8\dict/compiler1.inc(17): Including file '../../avr8\words/l_mark.asm' -../../avr8\dict/compiler1.inc(18): Including file '../../avr8\words/l_resolve.asm' -../../avr8\dict/compiler1.inc(20): Including file '../../common\words/ahead.asm' -../../avr8\dict/compiler1.inc(21): Including file '../../common\words/if.asm' -../../avr8\dict/compiler1.inc(22): Including file '../../common\words/else.asm' -../../avr8\dict/compiler1.inc(23): Including file '../../common\words/then.asm' -../../avr8\dict/compiler1.inc(24): Including file '../../common\words/begin.asm' -../../avr8\dict/compiler1.inc(25): Including file '../../common\words/while.asm' -../../avr8\dict/compiler1.inc(26): Including file '../../common\words/repeat.asm' -../../avr8\dict/compiler1.inc(27): Including file '../../common\words/until.asm' -../../avr8\dict/compiler1.inc(28): Including file '../../common\words/again.asm' -../../avr8\dict/compiler1.inc(29): Including file '../../common\words/do.asm' -../../avr8\dict/compiler1.inc(30): Including file '../../common\words/loop.asm' -../../avr8\dict/compiler1.inc(31): Including file '../../common\words/plusloop.asm' -../../avr8\dict/compiler1.inc(32): Including file '../../common\words/leave.asm' -../../avr8\dict/compiler1.inc(33): Including file '../../common\words/qdo.asm' -../../avr8\dict/compiler1.inc(34): Including file '../../common\words/endloop.asm' -../../avr8\dict/compiler1.inc(36): Including file '../../common\words/l-from.asm' -../../avr8\dict/compiler1.inc(37): Including file '../../common\words/to-l.asm' -../../avr8\dict/compiler1.inc(38): Including file '../../avr8\words/lp0.asm' -../../avr8\dict/compiler1.inc(39): Including file '../../avr8\words/lp.asm' -../../avr8\dict/compiler1.inc(41): Including file '../../common\words/create.asm' -../../avr8\dict/compiler1.inc(42): Including file '../../avr8\words/header.asm' -../../avr8\dict/compiler1.inc(43): Including file '../../avr8\words/wlscope.asm' -../../avr8\dict/compiler1.inc(44): Including file '../../common\words/reveal.asm' -../../avr8\dict/compiler1.inc(45): Including file '../../avr8\words/does.asm' -../../avr8\dict/compiler1.inc(46): Including file '../../common\words/colon.asm' -../../avr8\dict/compiler1.inc(47): Including file '../../avr8\words/colon-noname.asm' -../../avr8\dict/compiler1.inc(48): Including file '../../common\words/semicolon.asm' -../../avr8\dict/compiler1.inc(49): Including file '../../common\words/right-bracket.asm' -../../avr8\dict/compiler1.inc(50): Including file '../../common\words/left-bracket.asm' -../../avr8\dict/compiler1.inc(51): Including file '../../common\words/variable.asm' -../../avr8\dict/compiler1.inc(52): Including file '../../common\words/constant.asm' -../../avr8\dict/compiler1.inc(53): Including file '../../avr8\words/user.asm' -../../avr8\dict/compiler1.inc(55): Including file '../../common\words/recurse.asm' -../../avr8\dict/compiler1.inc(56): Including file '../../avr8\words/immediate.asm' -../../avr8\dict/compiler1.inc(58): Including file '../../common\words/bracketchar.asm' -../../avr8\dict/compiler1.inc(59): Including file '../../common\words/abort-string.asm' -../../avr8\dict/compiler1.inc(60): Including file '../../common\words/abort.asm' -../../avr8\dict/compiler1.inc(61): Including file '../../common\words/q-abort.asm' -../../avr8\dict/compiler1.inc(63): Including file '../../common\words/get-stack.asm' -../../avr8\dict/compiler1.inc(64): Including file '../../common\words/set-stack.asm' -../../avr8\dict/compiler1.inc(65): Including file '../../common\words/map-stack.asm' -../../avr8\dict/compiler1.inc(66): Including file '../../avr8\words/get-current.asm' -../../avr8\dict/compiler1.inc(67): Including file '../../common\words/get-order.asm' -../../avr8\dict/compiler1.inc(68): Including file '../../common\words/cfg-order.asm' -../../avr8\dict/compiler1.inc(69): Including file '../../avr8\words/compare.asm' -../../avr8\dict/compiler1.inc(70): Including file '../../avr8\words/nfa2lfa.asm' -../../avr8\dict/appl_2k.inc(20): Including file '../../avr8\words/environment.asm' -../../avr8\dict/appl_2k.inc(21): Including file '../../avr8\words/env-wordlists.asm' -../../avr8\dict/appl_2k.inc(22): Including file '../../avr8\words/env-slashpad.asm' -../../avr8\dict/appl_2k.inc(23): Including file '../../common\words/env-slashhold.asm' -../../avr8\dict/appl_2k.inc(24): Including file '../../common\words/env-forthname.asm' -../../avr8\dict/appl_2k.inc(25): Including file '../../common\words/env-forthversion.asm' -../../avr8\dict/appl_2k.inc(26): Including file '../../common\words/env-cpu.asm' -../../avr8\dict/appl_2k.inc(27): Including file '../../avr8\words/env-mcuinfo.asm' -../../avr8\dict/appl_2k.inc(28): Including file '../../common\words/env-usersize.asm' -../../avr8\dict/appl_2k.inc(30): Including file '../../common\words/f_cpu.asm' -../../avr8\dict/appl_2k.inc(31): Including file '../../avr8\words/state.asm' -../../avr8\dict/appl_2k.inc(32): Including file '../../common\words/base.asm' -../../avr8\dict/appl_2k.inc(34): Including file '../../avr8\words/cells.asm' -../../avr8\dict/appl_2k.inc(35): Including file '../../avr8\words/cellplus.asm' -../../avr8\dict/appl_2k.inc(37): Including file '../../common\words/2dup.asm' -../../avr8\dict/appl_2k.inc(38): Including file '../../common\words/2drop.asm' -../../avr8\dict/appl_2k.inc(40): Including file '../../common\words/tuck.asm' -../../avr8\dict/appl_2k.inc(42): Including file '../../common\words/to-in.asm' -../../avr8\dict/appl_2k.inc(43): Including file '../../common\words/pad.asm' -../../avr8\dict/appl_2k.inc(44): Including file '../../common\words/emit.asm' -../../avr8\dict/appl_2k.inc(45): Including file '../../common\words/emitq.asm' -../../avr8\dict/appl_2k.inc(46): Including file '../../common\words/key.asm' -../../avr8\dict/appl_2k.inc(47): Including file '../../common\words/keyq.asm' -../../avr8\dict/appl_2k.inc(49): Including file '../../avr8\words/dp.asm' -../../avr8\dict/appl_2k.inc(50): Including file '../../avr8\words/ehere.asm' -../../avr8\dict/appl_2k.inc(51): Including file '../../avr8\words/here.asm' -../../avr8\dict/appl_2k.inc(52): Including file '../../avr8\words/allot.asm' -../../avr8\dict/appl_2k.inc(54): Including file '../../common\words/bin.asm' -../../avr8\dict/appl_2k.inc(55): Including file '../../common\words/decimal.asm' -../../avr8\dict/appl_2k.inc(56): Including file '../../common\words/hex.asm' -../../avr8\dict/appl_2k.inc(57): Including file '../../common\words/bl.asm' -../../avr8\dict/appl_2k.inc(59): Including file '../../avr8\words/turnkey.asm' -../../avr8\dict/appl_2k.inc(61): Including file '../../avr8\words/slashmod.asm' -../../avr8\dict/appl_2k.inc(62): Including file '../../avr8\words/uslashmod.asm' -../../avr8\dict/appl_2k.inc(63): Including file '../../avr8\words/negate.asm' -../../avr8\dict/appl_2k.inc(64): Including file '../../common\words/slash.asm' -../../avr8\dict/appl_2k.inc(65): Including file '../../common\words/mod.asm' -../../avr8\dict/appl_2k.inc(66): Including file '../../common\words/abs.asm' -../../avr8\dict/appl_2k.inc(67): Including file '../../common\words/min.asm' -../../avr8\dict/appl_2k.inc(68): Including file '../../common\words/max.asm' -../../avr8\dict/appl_2k.inc(69): Including file '../../common\words/within.asm' -../../avr8\dict/appl_2k.inc(71): Including file '../../common\words/to-upper.asm' -../../avr8\dict/appl_2k.inc(72): Including file '../../common\words/to-lower.asm' -../../avr8\dict/appl_2k.inc(74): Including file '../../avr8\words/hld.asm' -../../avr8\dict/appl_2k.inc(75): Including file '../../common\words/hold.asm' -../../avr8\dict/appl_2k.inc(76): Including file '../../common\words/less-sharp.asm' -../../avr8\dict/appl_2k.inc(77): Including file '../../common\words/sharp.asm' -../../avr8\dict/appl_2k.inc(78): Including file '../../common\words/sharp-s.asm' -../../avr8\dict/appl_2k.inc(79): Including file '../../common\words/sharp-greater.asm' -../../avr8\dict/appl_2k.inc(80): Including file '../../common\words/sign.asm' -../../avr8\dict/appl_2k.inc(81): Including file '../../common\words/d-dot-r.asm' -../../avr8\dict/appl_2k.inc(82): Including file '../../common\words/dot-r.asm' -../../avr8\dict/appl_2k.inc(83): Including file '../../common\words/d-dot.asm' -../../avr8\dict/appl_2k.inc(84): Including file '../../common\words/dot.asm' -../../avr8\dict/appl_2k.inc(85): Including file '../../common\words/ud-dot.asm' -../../avr8\dict/appl_2k.inc(86): Including file '../../common\words/ud-dot-r.asm' -../../avr8\dict/appl_2k.inc(87): Including file '../../common\words/ud-slash-mod.asm' -../../avr8\dict/appl_2k.inc(88): Including file '../../common\words/digit-q.asm' -../../avr8\dict/appl_2k.inc(90): Including file '../../avr8\words/do-sliteral.asm' -../../avr8\dict/appl_2k.inc(91): Including file '../../avr8\words/scomma.asm' -../../avr8\dict/appl_2k.inc(92): Including file '../../avr8\words/itype.asm' -../../avr8\dict/appl_2k.inc(93): Including file '../../avr8\words/icount.asm' -../../avr8\dict/appl_2k.inc(94): Including file '../../common\words/cr.asm' -../../avr8\dict/appl_2k.inc(95): Including file '../../common\words/space.asm' -../../avr8\dict/appl_2k.inc(96): Including file '../../common\words/spaces.asm' -../../avr8\dict/appl_2k.inc(97): Including file '../../common\words/type.asm' -../../avr8\dict/appl_2k.inc(98): Including file '../../common\words/tick.asm' -../../avr8\dict/appl_2k.inc(100): Including file '../../common\words/handler.asm' -../../avr8\dict/appl_2k.inc(101): Including file '../../common\words/catch.asm' -../../avr8\dict/appl_2k.inc(102): Including file '../../common\words/throw.asm' -../../avr8\dict/appl_2k.inc(104): Including file '../../common\words/cskip.asm' -../../avr8\dict/appl_2k.inc(105): Including file '../../common\words/cscan.asm' -../../avr8\dict/appl_2k.inc(106): Including file '../../common\words/accept.asm' -../../avr8\dict/appl_2k.inc(107): Including file '../../common\words/refill.asm' -../../avr8\dict/appl_2k.inc(108): Including file '../../common\words/char.asm' -../../avr8\dict/appl_2k.inc(109): Including file '../../common\words/number.asm' -../../avr8\dict/appl_2k.inc(110): Including file '../../common\words/q-sign.asm' -../../avr8\dict/appl_2k.inc(111): Including file '../../common\words/set-base.asm' -../../avr8\dict/appl_2k.inc(112): Including file '../../common\words/to-number.asm' -../../avr8\dict/appl_2k.inc(113): Including file '../../common\words/parse.asm' -../../avr8\dict/appl_2k.inc(114): Including file '../../common\words/source.asm' -../../avr8\dict/appl_2k.inc(115): Including file '../../common\words/slash-string.asm' -../../avr8\dict/appl_2k.inc(116): Including file '../../common\words/parse-name.asm' -../../avr8\dict/appl_2k.inc(117): Including file '../../common\words/find-xt.asm' -../../avr8\dict/appl_2k.inc(119): Including file '../../common\words/quit.asm' -../../avr8\dict/appl_2k.inc(120): Including file '../../common\words/prompt-ok.asm' -../../avr8\dict/appl_2k.inc(121): Including file '../../common\words/prompt-ready.asm' -../../avr8\dict/appl_2k.inc(122): Including file '../../common\words/prompt-error.asm' -../../avr8\dict/appl_2k.inc(123): Including file '../../avr8\words/pause.asm' -../../avr8\dict/appl_2k.inc(124): Including file '../../avr8\words/cold.asm' -../../avr8\dict/appl_2k.inc(125): Including file '../../common\words/warm.asm' -../../avr8\dict/appl_2k.inc(127): Including file '../../avr8\words/sp0.asm' -../../avr8\dict/appl_2k.inc(128): Including file '../../avr8\words/rp0.asm' -../../avr8\dict/appl_2k.inc(129): Including file '../../common\words/depth.asm' -../../avr8\dict/appl_2k.inc(130): Including file '../../common\words/recognize.asm' -../../avr8\dict/appl_2k.inc(131): Including file '../../avr8\words/forth-recognizer.asm' -../../avr8\dict/appl_2k.inc(132): Including file '../../common\words/interpret.asm' -../../avr8\dict/appl_2k.inc(133): Including file '../../common\words/rec-intnum.asm' -../../avr8\dict/appl_2k.inc(134): Including file '../../common\words/rec-find.asm' -../../avr8\dict/appl_2k.inc(135): Including file '../../common\words/dt-null.asm' -../../avr8\dict/appl_2k.inc(137): Including file '../../common\words/q-stack.asm' -../../avr8\dict/appl_2k.inc(138): Including file '../../common\words/ver.asm' -../../avr8\dict/appl_2k.inc(140): Including file '../../common\words/noop.asm' -../../avr8\dict/appl_2k.inc(141): Including file '../../avr8\words/unused.asm' -../../avr8\dict/appl_2k.inc(143): Including file '../../common\words/to.asm' -../../avr8\dict/appl_2k.inc(144): Including file '../../avr8\words/i-cellplus.asm' -../../avr8\dict/appl_2k.inc(146): Including file '../../avr8\words/edefer-fetch.asm' -../../avr8\dict/appl_2k.inc(147): Including file '../../avr8\words/edefer-store.asm' -../../avr8\dict/appl_2k.inc(148): Including file '../../common\words/rdefer-fetch.asm' -../../avr8\dict/appl_2k.inc(149): Including file '../../common\words/rdefer-store.asm' -../../avr8\dict/appl_2k.inc(150): Including file '../../common\words/udefer-fetch.asm' -../../avr8\dict/appl_2k.inc(151): Including file '../../common\words/udefer-store.asm' -../../avr8\dict/appl_2k.inc(152): Including file '../../common\words/defer-store.asm' -../../avr8\dict/appl_2k.inc(153): Including file '../../common\words/defer-fetch.asm' -../../avr8\dict/appl_2k.inc(154): Including file '../../avr8\words/do-defer.asm' -../../avr8\dict/appl_2k.inc(156): Including file '../../common\words/search-wordlist.asm' -../../avr8\dict/appl_2k.inc(157): Including file '../../common\words/traverse-wordlist.asm' -../../avr8\dict/appl_2k.inc(158): Including file '../../common\words/name2string.asm' -../../avr8\dict/appl_2k.inc(159): Including file '../../avr8\words/nfa2cfa.asm' -../../avr8\dict/appl_2k.inc(160): Including file '../../avr8\words/icompare.asm' -../../avr8\dict/appl_2k.inc(162): Including file '../../common\words/star.asm' -../../avr8\dict/appl_2k.inc(163): Including file '../../avr8\words/j.asm' -../../avr8\dict/appl_2k.inc(165): Including file '../../avr8\words/dabs.asm' -../../avr8\dict/appl_2k.inc(166): Including file '../../avr8\words/dnegate.asm' -../../avr8\dict/appl_2k.inc(167): Including file '../../avr8\words/cmove.asm' -../../avr8\dict/appl_2k.inc(168): Including file '../../common\words/2swap.asm' -../../avr8\dict/appl_2k.inc(170): Including file '../../common\words/tib.asm' -../../avr8\dict/appl_2k.inc(172): Including file '../../avr8\words/init-ram.asm' -../../avr8\dict/appl_2k.inc(173): Including file '../../common\words/bounds.asm' -../../avr8\dict/appl_2k.inc(174): Including file '../../common\words/s-to-d.asm' -../../avr8\dict/appl_2k.inc(175): Including file '../../avr8\words/to-body.asm' -../../avr8\amforth.asm(15): Including file 'dict_appl.inc' -dict_appl.inc(3): Including file '../../common\words/dot-s.asm' -dict_appl.inc(4): Including file '../../avr8\words/spirw.asm' -dict_appl.inc(5): Including file '../../avr8\words/n-spi.asm' -dict_appl.inc(6): Including file 'words/applturnkey.asm' -dict_appl.inc(7): Including file '../../avr8\dict/compiler2.inc' -../../avr8\dict/compiler2.inc(8): Including file '../../avr8\words/set-current.asm' -../../avr8\dict/compiler2.inc(9): Including file '../../avr8\words/wordlist.asm' -../../avr8\dict/compiler2.inc(11): Including file '../../avr8\words/forth-wordlist.asm' -../../avr8\dict/compiler2.inc(12): Including file '../../common\words/set-order.asm' -../../avr8\dict/compiler2.inc(13): Including file '../../common\words/set-recognizer.asm' -../../avr8\dict/compiler2.inc(14): Including file '../../common\words/get-recognizer.asm' -../../avr8\dict/compiler2.inc(15): Including file '../../avr8\words/code.asm' -../../avr8\dict/compiler2.inc(16): Including file '../../avr8\words/end-code.asm' -../../avr8\dict/compiler2.inc(17): Including file '../../avr8\words/marker.asm' -../../avr8\dict/compiler2.inc(18): Including file '../../common\words/postpone.asm' -dict_appl.inc(8): Including file '../../avr8\words/2r_fetch.asm' -../../avr8\amforth.asm(23): Including file '../../avr8\amforth-interpreter.asm' -../../avr8\amforth.asm(24): Including file '../../avr8\dict/nrww.inc' -../../avr8\dict/nrww.inc(4): Including file '../../avr8\words/exit.asm' -../../avr8\dict/nrww.inc(5): Including file '../../avr8\words/execute.asm' -../../avr8\dict/nrww.inc(6): Including file '../../avr8\words/dobranch.asm' -../../avr8\dict/nrww.inc(7): Including file '../../avr8\words/docondbranch.asm' -../../avr8\dict/nrww.inc(10): Including file '../../avr8\words/doliteral.asm' -../../avr8\dict/nrww.inc(11): Including file '../../avr8\words/dovariable.asm' -../../avr8\dict/nrww.inc(12): Including file '../../avr8\words/doconstant.asm' -../../avr8\dict/nrww.inc(13): Including file '../../avr8\words/douser.asm' -../../avr8\dict/nrww.inc(14): Including file '../../avr8\words/do-value.asm' -../../avr8\dict/nrww.inc(15): Including file '../../avr8\words/fetch.asm' -../../avr8\dict/nrww.inc(16): Including file '../../avr8\words/store.asm' -../../avr8\dict/nrww.inc(17): Including file '../../avr8\words/cstore.asm' -../../avr8\dict/nrww.inc(18): Including file '../../avr8\words/cfetch.asm' -../../avr8\dict/nrww.inc(19): Including file '../../avr8\words/fetch-u.asm' -../../avr8\dict/nrww.inc(20): Including file '../../avr8\words/store-u.asm' -../../avr8\dict/nrww.inc(23): Including file '../../avr8\words/dup.asm' -../../avr8\dict/nrww.inc(24): Including file '../../avr8\words/qdup.asm' -../../avr8\dict/nrww.inc(25): Including file '../../avr8\words/swap.asm' -../../avr8\dict/nrww.inc(26): Including file '../../avr8\words/over.asm' -../../avr8\dict/nrww.inc(27): Including file '../../avr8\words/drop.asm' -../../avr8\dict/nrww.inc(28): Including file '../../avr8\words/rot.asm' -../../avr8\dict/nrww.inc(29): Including file '../../avr8\words/nip.asm' -../../avr8\dict/nrww.inc(31): Including file '../../avr8\words/r_from.asm' -../../avr8\dict/nrww.inc(32): Including file '../../avr8\words/to_r.asm' -../../avr8\dict/nrww.inc(33): Including file '../../avr8\words/r_fetch.asm' -../../avr8\dict/nrww.inc(36): Including file '../../common\words/not-equal.asm' -../../avr8\dict/nrww.inc(37): Including file '../../avr8\words/equalzero.asm' -../../avr8\dict/nrww.inc(38): Including file '../../avr8\words/lesszero.asm' -../../avr8\dict/nrww.inc(39): Including file '../../avr8\words/greaterzero.asm' -../../avr8\dict/nrww.inc(40): Including file '../../avr8\words/d-greaterzero.asm' -../../avr8\dict/nrww.inc(41): Including file '../../avr8\words/d-lesszero.asm' -../../avr8\dict/nrww.inc(43): Including file '../../avr8\words/true.asm' -../../avr8\dict/nrww.inc(44): Including file '../../avr8\words/zero.asm' -../../avr8\dict/nrww.inc(45): Including file '../../avr8\words/uless.asm' -../../avr8\dict/nrww.inc(46): Including file '../../common\words/u-greater.asm' -../../avr8\dict/nrww.inc(47): Including file '../../avr8\words/less.asm' -../../avr8\dict/nrww.inc(48): Including file '../../avr8\words/greater.asm' -../../avr8\dict/nrww.inc(50): Including file '../../avr8\words/log2.asm' -../../avr8\dict/nrww.inc(51): Including file '../../avr8\words/minus.asm' -../../avr8\dict/nrww.inc(52): Including file '../../avr8\words/plus.asm' -../../avr8\dict/nrww.inc(53): Including file '../../avr8\words/mstar.asm' -../../avr8\dict/nrww.inc(54): Including file '../../avr8\words/umslashmod.asm' -../../avr8\dict/nrww.inc(55): Including file '../../avr8\words/umstar.asm' -../../avr8\dict/nrww.inc(57): Including file '../../avr8\words/invert.asm' -../../avr8\dict/nrww.inc(58): Including file '../../avr8\words/2slash.asm' -../../avr8\dict/nrww.inc(59): Including file '../../avr8\words/2star.asm' -../../avr8\dict/nrww.inc(60): Including file '../../avr8\words/and.asm' -../../avr8\dict/nrww.inc(61): Including file '../../avr8\words/or.asm' -../../avr8\dict/nrww.inc(62): Including file '../../avr8\words/xor.asm' -../../avr8\dict/nrww.inc(64): Including file '../../avr8\words/1plus.asm' -../../avr8\dict/nrww.inc(65): Including file '../../avr8\words/1minus.asm' -../../avr8\dict/nrww.inc(66): Including file '../../common\words/q-negate.asm' -../../avr8\dict/nrww.inc(67): Including file '../../avr8\words/lshift.asm' -../../avr8\dict/nrww.inc(68): Including file '../../avr8\words/rshift.asm' -../../avr8\dict/nrww.inc(69): Including file '../../avr8\words/plusstore.asm' -../../avr8\dict/nrww.inc(71): Including file '../../avr8\words/rpfetch.asm' -../../avr8\dict/nrww.inc(72): Including file '../../avr8\words/rpstore.asm' -../../avr8\dict/nrww.inc(73): Including file '../../avr8\words/spfetch.asm' -../../avr8\dict/nrww.inc(74): Including file '../../avr8\words/spstore.asm' -../../avr8\dict/nrww.inc(76): Including file '../../avr8\words/dodo.asm' -../../avr8\dict/nrww.inc(77): Including file '../../avr8\words/i.asm' -../../avr8\dict/nrww.inc(78): Including file '../../avr8\words/doplusloop.asm' -../../avr8\dict/nrww.inc(79): Including file '../../avr8\words/doloop.asm' -../../avr8\dict/nrww.inc(80): Including file '../../avr8\words/unloop.asm' -../../avr8\dict/nrww.inc(84): Including file '../../avr8\words/cmove_g.asm' -../../avr8\dict/nrww.inc(85): Including file '../../avr8\words/byteswap.asm' -../../avr8\dict/nrww.inc(86): Including file '../../avr8\words/up.asm' -../../avr8\dict/nrww.inc(87): Including file '../../avr8\words/1ms.asm' -../../avr8\dict/nrww.inc(88): Including file '../../avr8\words/2to_r.asm' -../../avr8\dict/nrww.inc(89): Including file '../../avr8\words/2r_from.asm' -../../avr8\dict/nrww.inc(91): Including file '../../avr8\words/store-e.asm' -../../avr8\dict/nrww.inc(92): Including file '../../avr8\words/fetch-e.asm' -../../avr8\dict/nrww.inc(93): Including file '../../avr8\words/store-i.asm' -../../avr8\dict/nrww.inc(97): Including file '../../avr8\words/store-i_nrww.asm' -../../avr8\dict/nrww.inc(99): Including file '../../avr8\words/fetch-i.asm' -../../avr8\dict/nrww.inc(106): Including file '../../avr8\dict/core_2k.inc' -../../avr8\dict/nrww.inc(112): Including file '../../common\words/2literal.asm' -../../avr8\dict/nrww.inc(113): Including file '../../avr8\words/equal.asm' -../../avr8\dict/nrww.inc(114): Including file '../../common\words/num-constants.asm' -../../avr8\amforth.asm(25): Including file 'dict_appl_core.inc' -../../avr8\amforth.asm(36): Including file '../../avr8\amforth-eeprom.inc' - - - ; file see ../template/template.asm. You may want to - ; copy that file to this one and edit it afterwards. - - .include "preamble.inc" - - .include "macros.asm" - - .set DICT_COMPILER2 = 0 ; - .set cpu_msp430 = 0 - .set cpu_avr8 = 1 - - .include "user.inc" - - ; - - ; used by the multitasker - .set USER_STATE = 0 - .set USER_FOLLOWER = 2 - - ; stackpointer, used by mulitasker - .set USER_RP = 4 - .set USER_SP0 = 6 - .set USER_SP = 8 - - ; excpection handling - .set USER_HANDLER = 10 - - ; numeric IO - .set USER_BASE = 12 - - ; character IO - .set USER_EMIT = 14 - .set USER_EMITQ = 16 - .set USER_KEY = 18 - .set USER_KEYQ = 20 - - .set USER_SOURCE = 22 - .set USER_TO_IN = 24 - .set USER_REFILL = 26 - - .set USER_P_OK = 28 - .set USER_P_ERR = 30 - .set USER_P_RDY = 32 - - .set SYSUSERSIZE = 34 - ; - - .def zerol = r2 - .def zeroh = r3 - .def upl = r4 - .def uph = r5 - - .def al = r6 - .def ah = r7 - .def bl = r8 - .def bh = r9 - - ; internal - .def mcu_boot = r10 - .def isrflag = r11 - - .def temp4 = r14 - .def temp5 = r15 - - .def temp0 = r16 - .def temp1 = r17 - .def temp2 = r18 - .def temp3 = r19 - - .def temp6 = r20 - .def temp7 = r21 - - .def tosl = r24 - .def tosh = r25 - - .def wl = r22 - .def wh = r23 - - .macro loadtos - ld tosl, Y+ - ld tosh, Y+ - .endmacro - - .macro savetos - st -Y, tosh - st -Y, tosl - .endmacro - - .macro in_ - .if (@1 < $40) - in @0,@1 - .else - lds @0,@1 - .endif - .endmacro - - .macro out_ - .if (@0 < $40) - out @0,@1 - .else - sts @0,@1 - .endif - .endmacro - - .macro sbi_ - .if (@0 < $40) - sbi @0,@1 - .else - in_ @2,@0 - ori @2,exp2(@1) - out_ @0,@2 - .endif - .endmacro - - .macro cbi_ - .if (@0 < $40) - cbi @0,@1 - .else - in_ @2,@0 - andi @2,~(exp2(@1)) - out_ @0,@2 - .endif - .endmacro - - .macro jmp_ - ; a more flexible macro - .ifdef @0 - .if (@0-pc > 2040) || (pc-@0>2040) - jmp @0 - .else - rjmp @0 - .endif - .else - jmp @0 - .endif - .endmacro - .macro call_ - ; a more flexible macro - .ifdef @0 - .if (@0-pc > 2040) || (pc-@0>2040) - call @0 - .else - rcall @0 - .endif - .else - call @0 - .endif - .endmacro - - ; F_CPU - ; µsec 16000000 14745600 8000000 1000000 - ; 1 16 14,74 8 1 - ; 10 160 147,45 80 10 - ; 100 1600 1474,56 800 100 - ; 1000 16000 14745,6 8000 1000 - ; - ; cycles = µsec * f_cpu / 1e6 - ; n_loops=cycles/5 - ; - ; cycles already used will be subtracted from the delay - ; the waittime resolution is 1 cycle (delay from exact to +1 cycle) - ; the maximum delay at 20MHz (50ns/clock) is 38350ns - ; waitcount register must specify an immediate register - ; - ; busy waits a specfied amount of microseconds - .macro delay - .set cycles = ( ( @0 * F_CPU ) / 1000000 ) - .if (cycles > ( 256 * 255 * 4 + 2)) - .error "MACRO delay - too many cycles to burn" - .else - .if (cycles > 6) - .set loop_cycles = (cycles / 4) - ldi zl,low(loop_cycles) - ldi zh,high(loop_cycles) - sbiw Z, 1 - brne pc-1 - .set cycles = (cycles - (loop_cycles * 4)) - .endif - .if (cycles > 0) - .if (cycles & 4) - rjmp pc+1 - rjmp pc+1 - .endif - .if (cycles & 2) - rjmp pc+1 - .endif - .if (cycles & 1) - nop - .endif - .endif - .endif - .endmacro - - ; portability macros, they come from the msp430 branches - - .macro DEST - .dw @0 - .endm - - ; controller specific file selected via include - ; directory definition when calling the assembler (-I) - .include "device.asm" - - ; generated automatically, do not edit - - .list - - .equ ramstart = 96 - .equ CELLSIZE = 2 - .macro readflashcell - lsl zl - rol zh - lpm @0, Z+ - lpm @1, Z+ - .endmacro - .macro writeflashcell - lsl zl - rol zh - .endmacro - .set WANT_TIMER_COUNTER_0 = 0 - .set WANT_TIMER_COUNTER_1 = 0 - .set WANT_EXTERNAL_INTERRUPT = 0 - .set WANT_EEPROM = 0 - .set WANT_CPU = 0 - .set WANT_TIMER_COUNTER_2 = 0 - .set WANT_SPI = 0 - .set WANT_USART = 0 - .set WANT_TWI = 0 - .set WANT_ANALOG_COMPARATOR = 0 - .set WANT_AD_CONVERTER = 0 - .set WANT_JTAG = 0 - .set WANT_BOOT_LOAD = 0 - .set WANT_PORTA = 0 - .set WANT_PORTB = 0 - .set WANT_PORTC = 0 - .set WANT_PORTD = 0 - .set WANT_WATCHDOG = 0 - .equ intvecsize = 2 ; please verify; flash size: 16384 bytes - .equ pclen = 2 ; please verify - .overlap - .org 2 -000002 d11b rcall isr ; External Interrupt Request 0 - .org 4 -000004 d119 rcall isr ; External Interrupt Request 1 - .org 6 -000006 d117 rcall isr ; Timer/Counter2 Compare Match - .org 8 -000008 d115 rcall isr ; Timer/Counter2 Overflow - .org 10 -00000a d113 rcall isr ; Timer/Counter1 Capture Event - .org 12 -00000c d111 rcall isr ; Timer/Counter1 Compare Match A - .org 14 -00000e d10f rcall isr ; Timer/Counter1 Compare Match B - .org 16 -000010 d10d rcall isr ; Timer/Counter1 Overflow - .org 18 -000012 d10b rcall isr ; Timer/Counter0 Overflow - .org 20 -000014 d109 rcall isr ; Serial Transfer Complete - .org 22 -000016 d107 rcall isr ; USART, Rx Complete - .org 24 -000018 d105 rcall isr ; USART Data Register Empty - .org 26 -00001a d103 rcall isr ; USART, Tx Complete - .org 28 -00001c d101 rcall isr ; ADC Conversion Complete - .org 30 -00001e d0ff rcall isr ; EEPROM Ready - .org 32 -000020 d0fd rcall isr ; Analog Comparator - .org 34 -000022 d0fb rcall isr ; 2-wire Serial Interface - .org 36 -000024 d0f9 rcall isr ; External Interrupt Request 2 - .org 38 -000026 d0f7 rcall isr ; Timer/Counter0 Compare Match - .org 40 -000028 d0f5 rcall isr ; Store Program Memory Ready - .equ INTVECTORS = 21 - .nooverlap - - ; compatability layer (maybe empty) - .equ EEPE = EEWE - .equ EEMPE = EEMWE - - ; controller data area, environment query mcu-info - mcu_info: - mcu_ramsize: -000029 0400 .dw 1024 - mcu_eepromsize: -00002a 0200 .dw 512 - mcu_maxdp: -00002b 3800 .dw 14336 - mcu_numints: -00002c 0015 .dw 21 - mcu_name: -00002d 0008 .dw 8 -00002e 5441 -00002f 656d -000030 6167 -000031 3631 .db "ATmega16" - .set codestart=pc - - ; some defaults, change them in your application master file - ; see template.asm for an example - - ; enabling Interrupts, disabling them affects - ; other settings as well. - .set WANT_INTERRUPTS = 1 - - ; count the number of interrupts individually. - ; requires a lot of RAM (one byte per interrupt) - ; disabled by default. - .set WANT_INTERRUPT_COUNTERS = 0 - - ; receiving is asynchronously, so an interrupt queue is useful. - .set WANT_ISR_RX = 1 - - ; case insensitve dictionary lookup. - .set WANT_IGNORECASE = 0 - - ; map all memories to one address space. Details in the - ; technical guide - .set WANT_UNIFIED = 0 - - ; terminal input buffer - .set TIB_SIZE = 90 ; ANS94 needs at least 80 characters per line - - ; USER variables *in addition* to system ones - .set APPUSERSIZE = 10 ; size of application specific user area in bytes - - ; addresses of various data segments - .set rstackstart = RAMEND ; start address of return stack, grows downward - .set stackstart = RAMEND - 80 ; start address of data stack, grows downward - ; change only if you know what to you do - .set NUMWORDLISTS = 8 ; number of word lists in the searh order, at least 8 - .set NUMRECOGNIZERS = 4 ; total number of recognizers, two are always used. - - ; 10 per mille (1 per cent) is ok. - .set BAUD = 38400 - .set BAUD_MAXERROR = 10 - - ; Dictionary setup - .set VE_HEAD = $0000 - .set VE_ENVHEAD = $0000 - - .set AMFORTH_RO_SEG = NRWW_START_ADDR+1 - - ; cpu clock in hertz - .equ F_CPU = 8000000 - .set BAUD_MAXERROR = 30 - .equ TIMER_INT = OVF2addr - - .include "drivers/usart.asm" - - .equ BAUDRATE_LOW = UBRRL+$20 - .equ BAUDRATE_HIGH = UBRRH+$20 - .equ USART_C = UCSRC+$20 - .equ USART_B = UCSRB+$20 - .equ USART_A = UCSRA+$20 - .equ USART_DATA = UDR+$20 - .equ bm_USARTC_en = 1 << 7 - - ; some generic constants - .equ bm_USART_RXRD = 1 << RXC - .equ bm_USART_TXRD = 1 << UDRE - .equ bm_ENABLE_TX = 1 << TXEN - .equ bm_ENABLE_RX = 1 << RXEN - .equ bm_ENABLE_INT_RX = 1<rx-buf",0 -000037 0000 .dw VE_HEAD - .set VE_HEAD = VE_TO_RXBUF - XT_TO_RXBUF: -000038 0039 .dw PFA_rx_tobuf - PFA_rx_tobuf: -000039 2f08 mov temp0, tosl -00003a 9110 0070 lds temp1, usart_rx_in -00003c e6e0 ldi zl, low(usart_rx_data) -00003d e0f0 ldi zh, high(usart_rx_data) -00003e 0fe1 add zl, temp1 -00003f 1df3 adc zh, zeroh -000040 8300 st Z, temp0 -000041 9513 inc temp1 -000042 701f andi temp1,usart_rx_mask -000043 9310 0070 sts usart_rx_in, temp1 -000045 9189 -000046 9199 loadtos -000047 940c 1c05 jmp_ DO_NEXT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ; setup with - ; ' isr-rx URXCaddr int! - VE_ISR_RX: -000049 ff06 .dw $ff06 -00004a 7369 -00004b 2d72 -00004c 7872 .db "isr-rx" -00004d 0032 .dw VE_HEAD - .set VE_HEAD = VE_ISR_RX - XT_ISR_RX: -00004e 1c01 .dw DO_COLON - usart_rx_isr: -00004f 1c3d .dw XT_DOLITERAL -000050 002c .dw usart_data -000051 1c98 .dw XT_CFETCH -000052 1cb1 .dw XT_DUP -000053 1c3d .dw XT_DOLITERAL -000054 0003 .dw 3 -000055 1fe0 .dw XT_EQUAL -000056 1c36 .dw XT_DOCONDBRANCH -000057 0059 .dw usart_rx_isr1 -000058 0ae0 .dw XT_COLD - usart_rx_isr1: -000059 0038 .dw XT_TO_RXBUF -00005a 1c20 .dw XT_EXIT - - ; ( -- ) Hardware Access - ; R( --) - ; initialize usart - ;VE_USART_INIT_RXBUFFER: - ; .dw $ff0x - ; .db "+usart-buffer" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_USART_INIT_RXBUFFER - XT_USART_INIT_RX_BUFFER: -00005b 1c01 .dw DO_COLON - PFA_USART_INIT_RX_BUFFER: ; ( -- ) -00005c 1c3d -00005d 004e .dw XT_DOLITERAL, XT_ISR_RX -00005e 1c3d -00005f 0016 .dw XT_DOLITERAL, URXCaddr -000060 0213 .dw XT_INTSTORE - -000061 1c3d .dw XT_DOLITERAL -000062 0060 .dw usart_rx_data -000063 1c3d .dw XT_DOLITERAL -000064 0016 .dw usart_rx_size + 6 -000065 1d54 .dw XT_ZERO -000066 025d .dw XT_FILL -000067 1c20 .dw XT_EXIT - - ; ( -- c) - ; MCU - ; get 1 character from input queue, wait if needed using interrupt driver - VE_RX_BUFFER: -000068 ff06 .dw $ff06 -000069 7872 -00006a 622d -00006b 6675 .db "rx-buf" -00006c 0049 .dw VE_HEAD - .set VE_HEAD = VE_RX_BUFFER - XT_RX_BUFFER: -00006d 1c01 .dw DO_COLON - PFA_RX_BUFFER: -00006e 0088 .dw XT_RXQ_BUFFER -00006f 1c36 .dw XT_DOCONDBRANCH -000070 006e .dw PFA_RX_BUFFER -000071 1c3d .dw XT_DOLITERAL -000072 0071 .dw usart_rx_out -000073 1c98 .dw XT_CFETCH -000074 1cb1 .dw XT_DUP -000075 1c3d .dw XT_DOLITERAL -000076 0060 .dw usart_rx_data -000077 1d9d .dw XT_PLUS -000078 1c98 .dw XT_CFETCH -000079 1cc4 .dw XT_SWAP -00007a 1e2f .dw XT_1PLUS -00007b 1c3d .dw XT_DOLITERAL -00007c 000f .dw usart_rx_mask -00007d 1e13 .dw XT_AND -00007e 1c3d .dw XT_DOLITERAL -00007f 0071 .dw usart_rx_out -000080 1c8d .dw XT_CSTORE -000081 1c20 .dw XT_EXIT - - ; ( -- f) - ; MCU - ; check if unread characters are in the input queue - VE_RXQ_BUFFER: -000082 ff07 .dw $ff07 -000083 7872 -000084 2d3f -000085 7562 -000086 0066 .db "rx?-buf",0 -000087 0068 .dw VE_HEAD - .set VE_HEAD = VE_RXQ_BUFFER - XT_RXQ_BUFFER: -000088 1c01 .dw DO_COLON - PFA_RXQ_BUFFER: -000089 0ad8 .dw XT_PAUSE -00008a 1c3d .dw XT_DOLITERAL -00008b 0071 .dw usart_rx_out -00008c 1c98 .dw XT_CFETCH -00008d 1c3d .dw XT_DOLITERAL -00008e 0070 .dw usart_rx_in -00008f 1c98 .dw XT_CFETCH -000090 1d13 .dw XT_NOTEQUAL -000091 1c20 .dw XT_EXIT - ; .include "drivers/timer-usart-isr.asm" - .set XT_RX = XT_RX_BUFFER - .set XT_RXQ = XT_RXQ_BUFFER - .set XT_USART_INIT_RX = XT_USART_INIT_RX_BUFFER - .else - .endif - - .include "words/usart-tx-poll.asm" - - ; MCU - ; check availability and send one character to the terminal using register poll - VE_TX_POLL: -000092 ff07 .dw $ff07 -000093 7874 -000094 702d -000095 6c6f -000096 006c .db "tx-poll",0 -000097 0082 .dw VE_HEAD - .set VE_HEAD = VE_TX_POLL - XT_TX_POLL: -000098 1c01 .dw DO_COLON - PFA_TX_POLL: - ; wait for data ready -000099 00a6 .dw XT_TXQ_POLL -00009a 1c36 .dw XT_DOCONDBRANCH -00009b 0099 .dw PFA_TX_POLL - ; send to usart -00009c 1c3d .dw XT_DOLITERAL -00009d 002c .dw USART_DATA -00009e 1c8d .dw XT_CSTORE -00009f 1c20 .dw XT_EXIT - - ; ( -- f) MCU - ; MCU - ; check if a character can be send using register poll - VE_TXQ_POLL: -0000a0 ff08 .dw $ff08 -0000a1 7874 -0000a2 2d3f -0000a3 6f70 -0000a4 6c6c .db "tx?-poll" -0000a5 0092 .dw VE_HEAD - .set VE_HEAD = VE_TXQ_POLL - XT_TXQ_POLL: -0000a6 1c01 .dw DO_COLON - PFA_TXQ_POLL: -0000a7 0ad8 .dw XT_PAUSE -0000a8 1c3d .dw XT_DOLITERAL -0000a9 002b .dw USART_A -0000aa 1c98 .dw XT_CFETCH -0000ab 1c3d .dw XT_DOLITERAL -0000ac 0020 .dw bm_USART_TXRD -0000ad 1e13 .dw XT_AND -0000ae 1c20 .dw XT_EXIT - .set XT_TX = XT_TX_POLL - .set XT_TXQ = XT_TXQ_POLL - .set XT_USART_INIT_TX = 0 - - .include "words/ubrr.asm" - - ; MCU - ; returns usart UBRR settings - VE_UBRR: -0000af ff04 .dw $ff04 -0000b0 6275 -0000b1 7272 .db "ubrr" -0000b2 00a0 .dw VE_HEAD - .set VE_HEAD = VE_UBRR - XT_UBRR: -0000b3 1c6f .dw PFA_DOVALUE1 - PFA_UBRR: ; ( -- ) -0000b4 0082 .dw EE_UBRRVAL -0000b5 0c3b .dw XT_EDEFERFETCH -0000b6 0c45 .dw XT_EDEFERSTORE - .include "words/usart.asm" - - ; MCU - ; initialize usart - VE_USART: -0000b7 ff06 .dw $ff06 -0000b8 752b -0000b9 6173 -0000ba 7472 .db "+usart" -0000bb 00af .dw VE_HEAD - .set VE_HEAD = VE_USART - XT_USART: -0000bc 1c01 .dw DO_COLON - PFA_USART: ; ( -- ) - -0000bd 1c3d .dw XT_DOLITERAL -0000be 0098 .dw USART_B_VALUE -0000bf 1c3d .dw XT_DOLITERAL -0000c0 002a .dw USART_B -0000c1 1c8d .dw XT_CSTORE - -0000c2 1c3d .dw XT_DOLITERAL -0000c3 0006 .dw USART_C_VALUE -0000c4 1c3d .dw XT_DOLITERAL -0000c5 00c0 .dw USART_C | bm_USARTC_en -0000c6 1c8d .dw XT_CSTORE - -0000c7 00b3 .dw XT_UBRR -0000c8 1cb1 .dw XT_DUP -0000c9 1ef9 .dw XT_BYTESWAP -0000ca 1c3d .dw XT_DOLITERAL -0000cb 0040 .dw BAUDRATE_HIGH -0000cc 1c8d .dw XT_CSTORE -0000cd 1c3d .dw XT_DOLITERAL -0000ce 0029 .dw BAUDRATE_LOW -0000cf 1c8d .dw XT_CSTORE - .if XT_USART_INIT_RX!=0 -0000d0 005b .dw XT_USART_INIT_RX - .endif - .if XT_USART_INIT_TX!=0 - .endif - -0000d1 1c20 .dw XT_EXIT - - ; settings for 1wire interface - .equ OW_PORT=PORTB - .EQU OW_BIT=4 - .include "drivers/1wire.asm" - - ; B. J. Rodriguez (MSP 430) - ; Matthias Trute (AVR Atmega) - ; COPYRIGHT - ; (c) 2012 Bradford J. Rodriguez for the 430 code and API - - ; adapted 430 assembly code to AVR - ; wishlist: - ; use a configurable pin at runtime, compatible with bitnames.frt - ; no external pull up, no external power supply for devices - ; ??? - ; - ;.EQU OW_BIT=4 - ;.equ OW_PORT=PORTE - .set OW_DDR=(OW_PORT-1) - .set OW_PIN=(OW_DDR-1) - - ;****f* 1W.RESET - ; NAME - ; 1W.RESET - ; SYNOPSIS - ; 1W.RESET ( -- f ) Initialize 1-wire devices; return true if present - ; DESCRIPTION - ; This configures the port pin used by the 1-wire interface, and then - ; sends an "initialize" sequence to the 1-wire devices. If any device - ; is present, it will be detected. - ; - ; Timing, per DS18B20 data sheet: - ; a) Output "0" (drive output low) for >480 usec. - ; b) Output "1" (let output float). - ; c) After 15 to 60 usec, device will drive pin low for 60 to 240 usec. - ; So, wait 75 usec and sample input. - ; d) Leave output high (floating) for at least 480 usec. - ;****** - ; ( -- f ) - ; Hardware - ; Initialize 1-wire devices; return true if present - VE_OW_RESET: -0000d2 ff08 .dw $ff08 -0000d3 7731 -0000d4 722e -0000d5 7365 -0000d6 7465 .db "1w.reset" -0000d7 00b7 .dw VE_HEAD - .set VE_HEAD = VE_OW_RESET - XT_OW_RESET: -0000d8 00d9 .dw PFA_OW_RESET - PFA_OW_RESET: -0000d9 939a -0000da 938a savetos - ; setup to output -0000db 9abc sbi OW_DDR, OW_BIT - ; Pull output low -0000dc 98c4 cbi OW_PORT, OW_BIT - ; Delay >480 usec -0000dd ece0 -0000de e0f3 -0000df 9731 -0000e0 f7f1 DELAY 480 - ; Critical timing period, disable interrupts. -0000e1 b71f in temp1, SREG -0000e2 94f8 cli - ; Pull output high -0000e3 9ac4 sbi OW_PORT, OW_BIT - ; make pin input, sends "1" -0000e4 98bc cbi OW_DDR, OW_BIT -0000e5 e8e0 -0000e6 e0f0 -0000e7 9731 -0000e8 f7f1 DELAY 64 ; delayB - ; Sample input pin, set TOS if input is zero -0000e9 b386 in tosl, OW_PIN -0000ea ff84 sbrs tosl, OW_BIT -0000eb ef9f ser tosh - ; End critical timing period, enable interrupts -0000ec bf1f out SREG, temp1 - ; release bus -0000ed 98bc cbi OW_DDR, OW_BIT -0000ee 98c4 cbi OW_PORT, OW_BIT - - ; Delay rest of 480 usec -0000ef e4e0 -0000f0 e0f3 -0000f1 9731 -0000f2 f7f1 DELAY 416 - ; we now have the result flag in TOS -0000f3 2f89 mov tosl, tosh -0000f4 940c 1c05 jmp_ DO_NEXT - - ;****f* 1W.SLOT - ; NAME - ; 1W.SLOT - ; SYNOPSIS - ; 1W.SLOT ( c -- c' ) Write and read one bit to/from 1-wire. - ; DESCRIPTION - ; The "touch byte" function is described in Dallas App Note 74. - ; It outputs a byte to the 1-wire pin, LSB first, and reads back - ; the state of the 1-wire pin after a suitable delay. - ; To read a byte, output $FF and read the reply data. - ; To write a byte, output that byte and discard the reply. - ; - ; This function performs one bit of the "touch" operation -- - ; one read/write "slot" in Dallas jargon. Perform this eight - ; times in a row to get the "touch byte" function. - ; - ; PARAMETERS - ; The input parameter is xxxxxxxxbbbbbbbo where - ; 'xxxxxxxx' are don't cares, - ; 'bbbbbbb' are bits to be shifted down, and - ; 'o' is the bit to be output in the slot. This must be 1 - ; to create a read slot. - ; - ; The returned value is xxxxxxxxibbbbbbb where - ; 'xxxxxxxx' are not known (the input shifted down 1 position), - ; 'i' is the bit read during the slot. This has no meaning - ; if it was a write slot. - ; 'bbbbbbb' are the 7 input bits, shifted down one position. - ; - ; This peculiar parameter usage allows OWTOUCH to be written as - ; OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT - ; - ; NOTES - ; Interrupts are disabled during each bit. - - ; Timing, per DS18B20 data sheet: - ; a) Output "0" for start period. (> 1 us, < 15 us, typ. 6 us*) - ; b) Output data bit (0 or 1), open drain - ; c) After MS from start of cycle, sample input (15 to 60 us, typ. 25 us*) - ; d) After write-0 period from start of cycle, output "1" (>60 us) - ; e) After recovery period, loop or return. (> 1 us) - ; For writes, DS18B20 samples input 15 to 60 usec from start of cycle. - ; * "Typical" values are per App Note 132 for a 300m cable length. - - ; --------- ------------------------------- - ; \ / / - ; ------------------------------- - ; a b c d e - ; | 6us | 19us | 35us | 2us | - ;****** - ; ( c -- c' ) - ; Hardware - ; Write and read one bit to/from 1-wire. - VE_OW_SLOT: -0000f6 ff07 .dw $ff07 -0000f7 7731 -0000f8 732e -0000f9 6f6c -0000fa 0074 .db "1w.slot",0 -0000fb 00d2 .dw VE_HEAD - .set VE_HEAD = VE_OW_SLOT - XT_OW_SLOT: -0000fc 00fd .dw PFA_OW_SLOT - PFA_OW_SLOT: - ; pull low -0000fd 98c4 cbi OW_PORT, OW_BIT -0000fe 9abc sbi OW_DDR, OW_BIT - ; disable interrupts -0000ff b71f in temp1, SREG -000100 94f8 cli -000101 e0ec -000102 e0f0 -000103 9731 -000104 f7f1 DELAY 6 ; DELAY A - ; check bit -000105 9488 clc -000106 9587 ror tosl -000107 f410 brcc PFA_OW_SLOT0 ; a 0 keeps the bus low - ; release bus, a 1 is written -000108 9ac4 sbi OW_PORT, OW_BIT -000109 98bc cbi OW_DDR, OW_BIT - PFA_OW_SLOT0: - ; sample the input (no action required if zero) -00010a e1e2 -00010b e0f0 -00010c 9731 -00010d f7f1 DELAY 9 ; wait DELAY E to sample -00010e b306 in temp0, OW_PIN -00010f fd04 sbrc temp0, OW_BIT -000110 6880 ori tosl, $80 - -000111 e6e6 -000112 e0f0 -000113 9731 -000114 f7f1 DELAY 51 ; DELAY B -000115 9ac4 sbi OW_PORT, OW_BIT ; release bus -000116 98bc cbi OW_DDR, OW_BIT -000117 e0e4 -000118 e0f0 -000119 9731 -00011a f7f1 delay 2 - ; re-enable interrupts -00011b bf1f out SREG, temp1 -00011c 940c 1c05 jmp_ DO_NEXT - - .include "amforth.asm" - - ;;;; - ;;;; GPL V2 (only) - - .set AMFORTH_NRWW_SIZE=(FLASHEND-AMFORTH_RO_SEG)*2 - - .set corepc = pc - .org $0000 -000000 940c 0ae1 jmp_ PFA_COLD - - .org corepc - .include "drivers/generic-isr.asm" - - .eseg -000000 intvec: .byte INTVECTORS * CELLSIZE - .dseg -000072 intcnt: .byte INTVECTORS - .cseg - - ; interrupt routine gets called (again) by rcall! This gives the - ; address of the int-vector on the stack. - isr: -00011e 920a st -Y, r0 -00011f b60f in r0, SREG -000120 920a st -Y, r0 - .if (pclen==3) - .endif -000121 900f pop r0 -000122 900f pop r0 ; = intnum * intvectorsize + 1 (address following the rcall) -000123 940a dec r0 - .if intvecsize == 1 ; - .endif -000124 2cb0 mov isrflag, r0 -000125 93ff push zh -000126 93ef push zl -000127 e7e2 ldi zl, low(intcnt) -000128 e0f0 ldi zh, high(intcnt) -000129 9406 lsr r0 ; we use byte addresses in the counter array, not words -00012a 0de0 add zl, r0 -00012b 1df3 adc zh, zeroh -00012c 8000 ld r0, Z -00012d 9403 inc r0 -00012e 8200 st Z, r0 -00012f 91ef pop zl -000130 91ff pop zh - -000131 9009 ld r0, Y+ -000132 be0f out SREG, r0 -000133 9009 ld r0, Y+ -000134 9508 ret ; returns the interrupt, the rcall stack frame is removed! - ; no reti here, see words/isr-end.asm - ; lower part of the dictionary - .include "dict/rww.inc" - - - ; Arithmetics - ; add a number to a double cell - VE_MPLUS: -000135 ff02 .dw $ff02 -000136 2b6d .db "m+" -000137 00f6 .dw VE_HEAD - .set VE_HEAD = VE_MPLUS - XT_MPLUS: -000138 1c01 .dw DO_COLON - PFA_MPLUS: -000139 0dee .dw XT_S2D -00013a 019c .dw XT_DPLUS -00013b 1c20 .dw XT_EXIT - .include "words/ud-star.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDSTAR: -00013c ff03 .dw $ff03 -00013d 6475 -../../common\words/ud-star.asm(9): warning: .cseg .db misalignment - padding zero byte -00013e 002a .db "ud*" -00013f 0135 .dw VE_HEAD - .set VE_HEAD = VE_UDSTAR - XT_UDSTAR: -000140 1c01 .dw DO_COLON - PFA_UDSTAR: - - .endif - ;Z UD* ud1 d2 -- ud3 32*16->32 multiply - ; XT_DUP >R UM* DROP XT_SWAP R> UM* ROT + ; - -000141 1cb1 -000142 1cff -000143 1de0 -000144 1cd9 .DW XT_DUP,XT_TO_R,XT_UMSTAR,XT_DROP -000145 1cc4 -000146 1cf6 -000147 1de0 -000148 1ce1 -000149 1d9d -00014a 1c20 .DW XT_SWAP,XT_R_FROM,XT_UMSTAR,XT_ROT,XT_PLUS,XT_EXIT - .include "words/umax.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UMAX: -00014b ff04 .dw $ff04 -00014c 6d75 -00014d 7861 .db "umax" -00014e 013c .dw VE_HEAD - .set VE_HEAD = VE_UMAX - XT_UMAX: -00014f 1c01 .dw DO_COLON - PFA_UMAX: - .endif - -000150 05eb -000151 1d5c .DW XT_2DUP,XT_ULESS -000152 1c36 .dw XT_DOCONDBRANCH -000153 0155 DEST(UMAX1) -000154 1cc4 .DW XT_SWAP -000155 1cd9 UMAX1: .DW XT_DROP -000156 1c20 .dw XT_EXIT - .include "words/umin.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UMIN: -000157 ff04 .dw $ff04 -000158 6d75 -000159 6e69 .db "umin" -00015a 014b .dw VE_HEAD - .set VE_HEAD = VE_UMIN - XT_UMIN: -00015b 1c01 .dw DO_COLON - PFA_UMIN: - .endif -00015c 05eb -00015d 1d67 .DW XT_2DUP,XT_UGREATER -00015e 1c36 .dw XT_DOCONDBRANCH -00015f 0161 DEST(UMIN1) -000160 1cc4 .DW XT_SWAP -000161 1cd9 UMIN1: .DW XT_DROP -000162 1c20 .dw XT_EXIT - .include "words/immediate-q.asm" - - ; Tools - ; return +1 if immediate, -1 otherwise, flag from name>flags - ;VE_IMMEDIATEQ: - ; .dw $ff06 - ; .db "immediate?" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_IMMEDIATEQ - XT_IMMEDIATEQ: -000163 1c01 .dw DO_COLON - PFA_IMMEDIATEQ: -000164 1c3d .dw XT_DOLITERAL -000165 8000 .dw $8000 -000166 1e13 .dw XT_AND -000167 1d1a .dw XT_ZEROEQUAL -000168 1c36 .dw XT_DOCONDBRANCH -000169 016c DEST(IMMEDIATEQ1) -00016a 1fe7 .dw XT_ONE -00016b 1c20 .dw XT_EXIT - IMMEDIATEQ1: - ; not immediate -00016c 1d4b .dw XT_TRUE -00016d 1c20 .dw XT_EXIT - .include "words/name2flags.asm" - - ; Tools - ; get the flags from a name token - VE_NAME2FLAGS: -00016e ff0a .dw $ff0a -00016f 616e -000170 656d -000171 663e -000172 616c -000173 7367 .db "name>flags" -000174 0157 .dw VE_HEAD - .set VE_HEAD = VE_NAME2FLAGS - XT_NAME2FLAGS: -000175 1c01 .dw DO_COLON - PFA_NAME2FLAGS: -000176 1fcb .dw XT_FETCHI ; skip to link field -000177 1c3d .dw XT_DOLITERAL -000178 ff00 .dw $ff00 -000179 1e13 .dw XT_AND -00017a 1c20 .dw XT_EXIT - - .if AMFORTH_NRWW_SIZE > 8000 - .elif AMFORTH_NRWW_SIZE > 4000 - .elif AMFORTH_NRWW_SIZE > 2000 - .include "dict/appl_2k.inc" - - - ; Arithmetics - ; shift a double cell left - VE_D2STAR: -00017b ff03 .dw $ff03 -00017c 3264 -00017d 002a .db "d2*",0 -00017e 016e .dw VE_HEAD - .set VE_HEAD = VE_D2STAR - XT_D2STAR: -00017f 0180 .dw PFA_D2STAR - PFA_D2STAR: -000180 9109 ld temp0, Y+ -000181 9119 ld temp1, Y+ -000182 0f00 lsl temp0 -000183 1f11 rol temp1 -000184 1f88 rol tosl -000185 1f99 rol tosh -000186 931a st -Y, temp1 -000187 930a st -Y, temp0 -000188 940c 1c05 jmp_ DO_NEXT - .include "words/d-2slash.asm" - - ; Arithmetics - ; shift a double cell value right - VE_D2SLASH: -00018a ff03 .dw $ff03 -00018b 3264 -00018c 002f .db "d2/",0 -00018d 017b .dw VE_HEAD - .set VE_HEAD = VE_D2SLASH - XT_D2SLASH: -00018e 018f .dw PFA_D2SLASH - PFA_D2SLASH: -00018f 9109 ld temp0, Y+ -000190 9119 ld temp1, Y+ -000191 9595 asr tosh -000192 9587 ror tosl -000193 9517 ror temp1 -000194 9507 ror temp0 -000195 931a st -Y, temp1 -000196 930a st -Y, temp0 -000197 940c 1c05 jmp_ DO_NEXT - .include "words/d-plus.asm" - - ; Arithmetics - ; add 2 double cell values - VE_DPLUS: -000199 ff02 .dw $ff02 -00019a 2b64 .db "d+" -00019b 018a .dw VE_HEAD - .set VE_HEAD = VE_DPLUS - XT_DPLUS: -00019c 019d .dw PFA_DPLUS - PFA_DPLUS: -00019d 9129 ld temp2, Y+ -00019e 9139 ld temp3, Y+ - -00019f 90e9 ld temp4, Y+ -0001a0 90f9 ld temp5, Y+ -0001a1 9149 ld temp6, Y+ -0001a2 9159 ld temp7, Y+ - -0001a3 0f24 add temp2, temp6 -0001a4 1f35 adc temp3, temp7 -0001a5 1d8e adc tosl, temp4 -0001a6 1d9f adc tosh, temp5 - -0001a7 933a st -Y, temp3 -0001a8 932a st -Y, temp2 -0001a9 940c 1c05 jmp_ DO_NEXT - .include "words/d-minus.asm" - - ; Arithmetics - ; subtract d2 from d1 - VE_DMINUS: -0001ab ff02 .dw $ff02 -0001ac 2d64 .db "d-" -0001ad 0199 .dw VE_HEAD - .set VE_HEAD = VE_DMINUS - XT_DMINUS: -0001ae 01af .dw PFA_DMINUS - PFA_DMINUS: -0001af 9129 ld temp2, Y+ -0001b0 9139 ld temp3, Y+ - -0001b1 90e9 ld temp4, Y+ -0001b2 90f9 ld temp5, Y+ -0001b3 9149 ld temp6, Y+ -0001b4 9159 ld temp7, Y+ - -0001b5 1b42 sub temp6, temp2 -0001b6 0b53 sbc temp7, temp3 -0001b7 0ae8 sbc temp4, tosl -0001b8 0af9 sbc temp5, tosh - -0001b9 935a st -Y, temp7 -0001ba 934a st -Y, temp6 -0001bb 01c7 movw tosl, temp4 -0001bc 940c 1c05 jmp_ DO_NEXT - .include "words/d-invert.asm" - - ; Arithmetics - ; invert all bits in the double cell value - VE_DINVERT: -0001be ff07 .dw $ff07 -0001bf 6964 -0001c0 766e -0001c1 7265 -0001c2 0074 .db "dinvert",0 -0001c3 01ab .dw VE_HEAD - .set VE_HEAD = VE_DINVERT - XT_DINVERT: -0001c4 01c5 .dw PFA_DINVERT - PFA_DINVERT: -0001c5 9109 ld temp0, Y+ -0001c6 9119 ld temp1, Y+ -0001c7 9580 com tosl -0001c8 9590 com tosh -0001c9 9500 com temp0 -0001ca 9510 com temp1 -0001cb 931a st -Y, temp1 -0001cc 930a st -Y, temp0 -0001cd 940c 1c05 jmp_ DO_NEXT - .include "words/u-dot.asm" - - ; Numeric IO - ; unsigned PNO with single cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDOT: -0001cf ff02 .dw $ff02 -0001d0 2e75 .db "u." -0001d1 01be .dw VE_HEAD - .set VE_HEAD = VE_UDOT - XT_UDOT: -0001d2 1c01 .dw DO_COLON - PFA_UDOT: - .endif -0001d3 1d54 .dw XT_ZERO -0001d4 07b1 .dw XT_UDDOT -0001d5 1c20 .dw XT_EXIT - ; : u. ( us -- ) 0 ud. ; - .include "words/u-dot-r.asm" - - ; Numeric IO - ; unsigned PNO with single cells numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_UDOTR: -0001d6 ff03 .dw $ff03 -0001d7 2e75 -0001d8 0072 .db "u.r",0 -0001d9 01cf .dw VE_HEAD - .set VE_HEAD = VE_UDOTR - XT_UDOTR: -0001da 1c01 .dw DO_COLON - PFA_UDOTR: - .endif -0001db 1d54 .dw XT_ZERO -0001dc 1cc4 .dw XT_SWAP -0001dd 07ba .dw XT_UDDOTR -0001de 1c20 .dw XT_EXIT - ; : u.r ( s n -- ) 0 swap ud.r ; - - .include "words/show-wordlist.asm" - - ; Tools - ; prints the name of the words in a wordlist - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SHOWWORDLIST: -0001df ff0d .dw $ff0d -0001e0 6873 -0001e1 776f -0001e2 772d -0001e3 726f -0001e4 6c64 -0001e5 7369 -0001e6 0074 .db "show-wordlist",0 -0001e7 01d6 .dw VE_HEAD - .set VE_HEAD = VE_SHOWWORDLIST - XT_SHOWWORDLIST: -0001e8 1c01 .dw DO_COLON - PFA_SHOWWORDLIST: - .endif -0001e9 1c3d .dw XT_DOLITERAL -0001ea 01ee .dw XT_SHOWWORD -0001eb 1cc4 .dw XT_SWAP -0001ec 0cde .dw XT_TRAVERSEWORDLIST -0001ed 1c20 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_SHOWWORD: -0001ee 1c01 .dw DO_COLON - PFA_SHOWWORD: - .endif -0001ef 0cf9 .dw XT_NAME2STRING -0001f0 0827 .dw XT_ITYPE -0001f1 0869 .dw XT_SPACE ; ( -- addr n) -0001f2 1d4b .dw XT_TRUE -0001f3 1c20 .dw XT_EXIT - .include "words/words.asm" - - ; Tools - ; prints a list of all (visible) words in the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_WORDS: -0001f4 ff05 .dw $ff05 -0001f5 6f77 -0001f6 6472 -0001f7 0073 .db "words",0 -0001f8 01df .dw VE_HEAD - .set VE_HEAD = VE_WORDS - XT_WORDS: -0001f9 1c01 .dw DO_COLON - PFA_WORDS: - .endif -0001fa 1c3d .dw XT_DOLITERAL -0001fb 0042 .dw CFG_ORDERLISTLEN+2 -0001fc 1f5f .dw XT_FETCHE -0001fd 01e8 .dw XT_SHOWWORDLIST -0001fe 1c20 .dw XT_EXIT - .include "dict/interrupt.inc" - - .if WANT_INTERRUPTS == 1 - - .if WANT_INTERRUPT_COUNTERS == 1 - .endif - - .include "words/int-on.asm" - - ; Interrupt - ; turns on all interrupts - VE_INTON: -0001ff ff04 .dw $ff04 -000200 692b -000201 746e .db "+int" -000202 01f4 .dw VE_HEAD - .set VE_HEAD = VE_INTON - XT_INTON: -000203 0204 .dw PFA_INTON - PFA_INTON: -000204 9478 sei -000205 940c 1c05 jmp_ DO_NEXT - .include "words/int-off.asm" - - ; Interrupt - ; turns off all interrupts - VE_INTOFF: -000207 ff04 .dw $ff04 -000208 692d -000209 746e .db "-int" -00020a 01ff .dw VE_HEAD - .set VE_HEAD = VE_INTOFF - XT_INTOFF: -00020b 020c .dw PFA_INTOFF - PFA_INTOFF: -00020c 94f8 cli -00020d 940c 1c05 jmp_ DO_NEXT - .include "words/int-store.asm" - - ; Interrupt - ; stores XT as interrupt vector i - VE_INTSTORE: -00020f ff04 .dw $ff04 -000210 6e69 -000211 2174 .db "int!" -000212 0207 .dw VE_HEAD - .set VE_HEAD = VE_INTSTORE - XT_INTSTORE: -000213 1c01 .dw DO_COLON - PFA_INTSTORE: -000214 1c3d .dw XT_DOLITERAL -000215 0000 .dw intvec -000216 1d9d .dw XT_PLUS -000217 1f3b .dw XT_STOREE -000218 1c20 .dw XT_EXIT - .include "words/int-fetch.asm" - - ; Interrupt - ; fetches XT from interrupt vector i - VE_INTFETCH: -000219 ff04 .dw $ff04 -00021a 6e69 -00021b 4074 .db "int@" -00021c 020f .dw VE_HEAD - .set VE_HEAD = VE_INTFETCH - XT_INTFETCH: -00021d 1c01 .dw DO_COLON - PFA_INTFETCH: -00021e 1c3d .dw XT_DOLITERAL -00021f 0000 .dw intvec -000220 1d9d .dw XT_PLUS -000221 1f5f .dw XT_FETCHE -000222 1c20 .dw XT_EXIT - .include "words/int-trap.asm" - - ; Interrupt - ; trigger an interrupt - VE_INTTRAP: -000223 ff08 .dw $ff08 -000224 6e69 -000225 2d74 -000226 7274 -000227 7061 .db "int-trap" -000228 0219 .dw VE_HEAD - .set VE_HEAD = VE_INTTRAP - XT_INTTRAP: -000229 022a .dw PFA_INTTRAP - PFA_INTTRAP: -00022a 2eb8 mov isrflag, tosl -00022b 9189 -00022c 9199 loadtos -00022d 940c 1c05 jmp_ DO_NEXT - - .include "words/isr-exec.asm" - - ; Interrupt - ; executes an interrupt service routine - ;VE_ISREXEC: - ; .dw $ff08 - ; .db "isr-exec" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_ISREXEC - XT_ISREXEC: -00022f 1c01 .dw DO_COLON - PFA_ISREXEC: -000230 021d .dw XT_INTFETCH -000231 1c2a .dw XT_EXECUTE -000232 0234 .dw XT_ISREND -000233 1c20 .dw XT_EXIT - .include "words/isr-end.asm" - - ; Interrupt - ; re-enables interrupts in an ISR - ;VE_ISREND: - ; .dw $ff07 - ; .db "isr-end",0 - ; .dw VE_HEAD - ; .set VE_HEAD = VE_ISREND - XT_ISREND: -000234 0235 .dw PFA_ISREND - PFA_ISREND: -000235 d002 rcall PFA_ISREND1 ; clear the interrupt flag for the controller -000236 940c 1c05 jmp_ DO_NEXT - PFA_ISREND1: -000238 9518 reti - .endif - - .include "words/pick.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PICK: -000239 ff04 .dw $ff04 -00023a 6970 -00023b 6b63 .db "pick" -00023c 0223 .dw VE_HEAD - .set VE_HEAD = VE_PICK - XT_PICK: -00023d 1c01 .dw DO_COLON - PFA_PICK: - .endif -00023e 1e2f .dw XT_1PLUS -00023f 05dd .dw XT_CELLS -000240 1e8d .dw XT_SP_FETCH -000241 1d9d .dw XT_PLUS -000242 1c79 .dw XT_FETCH -000243 1c20 .dw XT_EXIT - .include "words/dot-quote.asm" - - ; Compiler - ; compiles string into dictionary to be printed at runtime - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_DOTSTRING: -000244 0002 .dw $0002 -000245 222e .db ".",$22 -000246 0239 .dw VE_HEAD - .set VE_HEAD = VE_DOTSTRING - XT_DOTSTRING: -000247 1c01 .dw DO_COLON - PFA_DOTSTRING: - .endif -000248 024f .dw XT_SQUOTE -000249 02a3 .dw XT_COMPILE -00024a 0827 .dw XT_ITYPE -00024b 1c20 .dw XT_EXIT - .include "words/squote.asm" - - ; Compiler - ; compiles a string to flash, at runtime leaves ( -- flash-addr count) on stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SQUOTE: -00024c 0002 .dw $0002 -00024d 2273 .db "s",$22 -00024e 0244 .dw VE_HEAD - .set VE_HEAD = VE_SQUOTE - XT_SQUOTE: -00024f 1c01 .dw DO_COLON - PFA_SQUOTE: - .endif -000250 1c3d .dw XT_DOLITERAL -000251 0022 .dw 34 ; 0x22 -000252 0a0e .dw XT_PARSE ; ( -- addr n) -000253 05d0 .dw XT_STATE -000254 1c79 .dw XT_FETCH -000255 1c36 .dw XT_DOCONDBRANCH -000256 0258 DEST(PFA_SQUOTE1) -000257 02cf .dw XT_SLITERAL - PFA_SQUOTE1: -000258 1c20 .dw XT_EXIT - - .include "words/fill.asm" - - ; Memory - ; fill u bytes memory beginning at a-addr with character c - VE_FILL: -000259 ff04 .dw $ff04 -00025a 6966 -00025b 6c6c .db "fill" -00025c 024c .dw VE_HEAD - .set VE_HEAD = VE_FILL - XT_FILL: -00025d 1c01 .dw DO_COLON - PFA_FILL: -00025e 1ce1 .dw XT_ROT -00025f 1ce1 .dw XT_ROT -000260 1cb9 -000261 1c36 .dw XT_QDUP,XT_DOCONDBRANCH -000262 026a DEST(PFA_FILL2) -000263 0de5 .dw XT_BOUNDS -000264 1e9b .dw XT_DODO - PFA_FILL1: -000265 1cb1 .dw XT_DUP -000266 1eac .dw XT_I -000267 1c8d .dw XT_CSTORE ; ( -- c c-addr) -000268 1ec9 .dw XT_DOLOOP -000269 0265 .dw PFA_FILL1 - PFA_FILL2: -00026a 1cd9 .dw XT_DROP -00026b 1c20 .dw XT_EXIT - .include "dict/compiler1.inc" - - .include "words/newest.asm" - - ; System Variable - ; system state - VE_NEWEST: -00026c ff06 .dw $ff06 -00026d 656e -00026e 6577 -00026f 7473 .db "newest" -000270 0259 .dw VE_HEAD - .set VE_HEAD = VE_NEWEST - XT_NEWEST: -000271 1c48 .dw PFA_DOVARIABLE - PFA_NEWEST: -000272 0087 .dw ram_newest - - .dseg -000087 ram_newest: .byte 4 - .include "words/latest.asm" - - ; System Variable - ; system state - VE_LATEST: -000273 ff06 .dw $ff06 -000274 616c -000275 6574 -000276 7473 .db "latest" -000277 026c .dw VE_HEAD - .set VE_HEAD = VE_LATEST - XT_LATEST: -000278 1c48 .dw PFA_DOVARIABLE - PFA_LATEST: -000279 008b .dw ram_latest - - .dseg -00008b ram_latest: .byte 2 - .include "words/do-create.asm" - - ; Compiler - ; parse the input and create an empty vocabulary entry without XT and data field (PF) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOCREATE: -00027a ff08 .dw $ff08 -00027b 6328 -00027c 6572 -00027d 7461 -00027e 2965 .db "(create)" -00027f 0273 .dw VE_HEAD - .set VE_HEAD = VE_DOCREATE - XT_DOCREATE: -000280 1c01 .dw DO_COLON - PFA_DOCREATE: - .endif -000281 0a3b -000282 03d7 .DW XT_PARSENAME,XT_WLSCOPE ; ( -- addr len wid) -000283 1cb1 -000284 0271 -000285 05e3 -000286 1c81 .DW XT_DUP,XT_NEWEST,XT_CELLPLUS,XT_STORE ; save the wid -000287 03bc -000288 0271 -000289 1c81 .DW XT_HEADER,XT_NEWEST,XT_STORE ; save the nt -00028a 1c20 .DW XT_EXIT - .include "words/backslash.asm" - - ; Compiler - ; everything up to the end of the current line is a comment - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BACKSLASH: -00028b 0001 .dw $0001 -00028c 005c .db $5c,0 -00028d 027a .dw VE_HEAD - .set VE_HEAD = VE_BACKSLASH - XT_BACKSLASH: -00028e 1c01 .dw DO_COLON - PFA_BACKSLASH: - .endif -00028f 0a22 .dw XT_SOURCE -000290 1cf0 .dw XT_NIP -000291 0604 .dw XT_TO_IN -000292 1c81 .dw XT_STORE -000293 1c20 .dw XT_EXIT - .include "words/l-paren.asm" - - ; Compiler - ; skip everything up to the closing bracket on the same line - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_LPAREN: -000294 0001 .dw $0001 -000295 0028 .db "(" ,0 -000296 028b .dw VE_HEAD - .set VE_HEAD = VE_LPAREN - XT_LPAREN: -000297 1c01 .dw DO_COLON - PFA_LPAREN: - .endif -000298 1c3d .dw XT_DOLITERAL -000299 0029 .dw ')' -00029a 0a0e .dw XT_PARSE -00029b 05f4 .dw XT_2DROP -00029c 1c20 .dw XT_EXIT - - .include "words/compile.asm" - - ; Dictionary - ; read the following cell from the dictionary and append it to the current dictionary position. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_COMPILE: -00029d ff07 .dw $ff07 -00029e 6f63 -00029f 706d -0002a0 6c69 -0002a1 0065 .db "compile",0 -0002a2 0294 .dw VE_HEAD - .set VE_HEAD = VE_COMPILE - XT_COMPILE: -0002a3 1c01 .dw DO_COLON - PFA_COMPILE: - .endif -0002a4 1cf6 .dw XT_R_FROM -0002a5 1cb1 .dw XT_DUP -0002a6 0c32 .dw XT_ICELLPLUS -0002a7 1cff .dw XT_TO_R -0002a8 1fcb .dw XT_FETCHI -0002a9 02ae .dw XT_COMMA -0002aa 1c20 .dw XT_EXIT - .include "words/comma.asm" - - ; Dictionary - ; compile 16 bit into flash at DP - VE_COMMA: -0002ab ff01 .dw $ff01 -0002ac 002c .db ',',0 ; , -0002ad 029d .dw VE_HEAD - .set VE_HEAD = VE_COMMA - XT_COMMA: -0002ae 1c01 .dw DO_COLON - PFA_COMMA: -0002af 0634 .dw XT_DP -0002b0 1f73 .dw XT_STOREI -0002b1 0634 .dw XT_DP -0002b2 1e2f .dw XT_1PLUS -0002b3 0c20 .dw XT_DOTO -0002b4 0635 .dw PFA_DP -0002b5 1c20 .dw XT_EXIT - .include "words/brackettick.asm" - - ; Compiler - ; what ' does in the interpreter mode, do in colon definitions - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BRACKETTICK: -0002b6 0003 .dw $0003 -0002b7 275b -0002b8 005d .db "[']",0 -0002b9 02ab .dw VE_HEAD - .set VE_HEAD = VE_BRACKETTICK - XT_BRACKETTICK: -0002ba 1c01 .dw DO_COLON - PFA_BRACKETTICK: - .endif -0002bb 0891 .dw XT_TICK -0002bc 02c4 .dw XT_LITERAL -0002bd 1c20 .dw XT_EXIT - - - .include "words/literal.asm" - - ; Compiler - ; compile a literal in colon defintions - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_LITERAL: -0002be 0007 .dw $0007 -0002bf 696c -0002c0 6574 -0002c1 6172 -0002c2 006c .db "literal",0 -0002c3 02b6 .dw VE_HEAD - .set VE_HEAD = VE_LITERAL - XT_LITERAL: -0002c4 1c01 .dw DO_COLON - PFA_LITERAL: - .endif -0002c5 02a3 .DW XT_COMPILE -0002c6 1c3d .DW XT_DOLITERAL -0002c7 02ae .DW XT_COMMA -0002c8 1c20 .DW XT_EXIT - .include "words/sliteral.asm" - - ; String - ; compiles a string to flash, at runtime leaves ( -- flash-addr count) on stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SLITERAL: -0002c9 0008 .dw $0008 -0002ca 6c73 -0002cb 7469 -0002cc 7265 -0002cd 6c61 .db "sliteral" -0002ce 02be .dw VE_HEAD - .set VE_HEAD = VE_SLITERAL - XT_SLITERAL: -0002cf 1c01 .dw DO_COLON - PFA_SLITERAL: - .endif -0002d0 02a3 .dw XT_COMPILE -0002d1 07f4 .dw XT_DOSLITERAL ; ( -- addr n) -0002d2 0802 .dw XT_SCOMMA -0002d3 1c20 .dw XT_EXIT - .include "words/g-mark.asm" - - ; Compiler - ; places current dictionary position for backward resolves - ;VE_GMARK: - ; .dw $ff05 - ; .db ">mark" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_GMARK - XT_GMARK: -0002d4 1c01 .dw DO_COLON - PFA_GMARK: -0002d5 0634 .dw XT_DP -0002d6 02a3 .dw XT_COMPILE -0002d7 ffff .dw -1 ; ffff does not erase flash -0002d8 1c20 .dw XT_EXIT - .include "words/g-resolve.asm" - - ; Compiler - ; resolve backward jumps - ;VE_GRESOLVE: - ; .dw $ff08 - ; .db ">resolve" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_GRESOLVE - XT_GRESOLVE: -0002d9 1c01 .dw DO_COLON - PFA_GRESOLVE: -0002da 0bde .dw XT_QSTACK -0002db 0634 .dw XT_DP -0002dc 1cc4 .dw XT_SWAP -0002dd 1f73 .dw XT_STOREI -0002de 1c20 .dw XT_EXIT - .include "words/l_mark.asm" - - ; Compiler - ; place destination for backward branch - ;VE_LMARK: - ; .dw $ff05 - ; .db "r if 2drop then r> invert ; - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_QDOCHECK: -00036d 1c01 .dw DO_COLON - PFA_QDOCHECK: - .endif -00036e 05eb .dw XT_2DUP -00036f 1fe0 .dw XT_EQUAL -000370 1cb1 .dw XT_DUP -000371 1cff .dw XT_TO_R -000372 1c36 .dw XT_DOCONDBRANCH -000373 0375 DEST(PFA_QDOCHECK1) -000374 05f4 .dw XT_2DROP - PFA_QDOCHECK1: -000375 1cf6 .dw XT_R_FROM -000376 1dfd .dw XT_INVERT -000377 1c20 .dw XT_EXIT - .include "words/endloop.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENDLOOP: -000378 ff07 .dw $ff07 -000379 6e65 -00037a 6c64 -00037b 6f6f -00037c 0070 .db "endloop",0 -00037d 0361 .dw VE_HEAD - .set VE_HEAD = VE_ENDLOOP - XT_ENDLOOP: -00037e 1c01 .dw DO_COLON - PFA_ENDLOOP: - .endif - ;Z ENDLOOP adrs xt -- L: 0 a1 a2 .. aN -- - ; ?DUP WHILE POSTPONE THEN REPEAT ; - ; resolve LEAVEs - ; This is a common factor of LOOP and +LOOP. - -00037f 02e2 .DW XT_LRESOLVE -000380 038b -000381 1cb9 -000382 1c36 LOOP1: .DW XT_L_FROM,XT_QDUP,XT_DOCONDBRANCH -000383 0387 DEST(LOOP2) -000384 0307 .DW XT_THEN -000385 1c2f .dw XT_DOBRANCH -000386 0380 DEST(LOOP1) -000387 1c20 LOOP2: .DW XT_EXIT - ; leave address stack - .include "words/l-from.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_L_FROM: -000388 ff02 .dw $ff02 -000389 3e6c .db "l>" -00038a 0378 .dw VE_HEAD - .set VE_HEAD = VE_L_FROM - XT_L_FROM: -00038b 1c01 .dw DO_COLON - PFA_L_FROM: - - .endif - ;Z L> -- x L: x -- move from leave stack - ; LP @ @ -2 LP +! ; - -00038c 03aa .dw XT_LP -00038d 1c79 .dw XT_FETCH -00038e 1c79 .dw XT_FETCH -00038f 1c3d .dw XT_DOLITERAL -000390 fffe .dw -2 -000391 03aa .dw XT_LP -000392 1e65 .dw XT_PLUSSTORE -000393 1c20 .dw XT_EXIT - .include "words/to-l.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO_L: -000394 ff02 .dw $ff02 -000395 6c3e .db ">l" -000396 0388 .dw VE_HEAD - .set VE_HEAD = VE_TO_L - XT_TO_L: -000397 1c01 .dw DO_COLON - PFA_TO_L: - .endif - ;Z >L x -- L: -- x move to leave stack - ; CELL LP +! LP @ ! ; (L stack grows up) - -000398 1fec .dw XT_TWO -000399 03aa .dw XT_LP -00039a 1e65 .dw XT_PLUSSTORE -00039b 03aa .dw XT_LP -00039c 1c79 .dw XT_FETCH -00039d 1c81 .dw XT_STORE -00039e 1c20 .dw XT_EXIT - .include "words/lp0.asm" - - ; Stack - ; start address of leave stack - VE_LP0: -00039f ff03 .dw $ff03 -0003a0 706c -0003a1 0030 .db "lp0",0 -0003a2 0394 .dw VE_HEAD - .set VE_HEAD = VE_LP0 - XT_LP0: -0003a3 1c6f .dw PFA_DOVALUE1 - PFA_LP0: -0003a4 0036 .dw CFG_LP0 -0003a5 0c3b .dw XT_EDEFERFETCH -0003a6 0c45 .dw XT_EDEFERSTORE - .include "words/lp.asm" - - ; System Variable - ; leave stack pointer - VE_LP: -0003a7 ff02 .dw $ff02 -0003a8 706c .db "lp" -0003a9 039f .dw VE_HEAD - .set VE_HEAD = VE_LP - XT_LP: -0003aa 1c48 .dw PFA_DOVARIABLE - PFA_LP: -0003ab 008d .dw ram_lp - - .dseg -00008d ram_lp: .byte 2 - .cseg - - - .include "words/create.asm" - - ; Dictionary - ; create a dictionary header. XT is (constant), with the address of the data field of name - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CREATE: -0003ac ff06 .dw $ff06 -0003ad 7263 -0003ae 6165 -0003af 6574 .db "create" -0003b0 03a7 .dw VE_HEAD - .set VE_HEAD = VE_CREATE - XT_CREATE: -0003b1 1c01 .dw DO_COLON - PFA_CREATE: - .endif -0003b2 0280 .dw XT_DOCREATE -0003b3 03e0 .dw XT_REVEAL -0003b4 02a3 .dw XT_COMPILE -0003b5 1c52 .dw PFA_DOCONSTANT -0003b6 1c20 .dw XT_EXIT - .include "words/header.asm" - - ; Compiler - ; creates the vocabulary header without XT and data field (PF) in the wordlist wid - VE_HEADER: -0003b7 ff06 .dw $ff06 -0003b8 6568 -0003b9 6461 -0003ba 7265 .db "header" -0003bb 03ac .dw VE_HEAD - .set VE_HEAD = VE_HEADER - XT_HEADER: -0003bc 1c01 .dw DO_COLON - PFA_HEADER: -0003bd 0634 .dw XT_DP ; the new Name Field -0003be 1cff .dw XT_TO_R -0003bf 1cff .dw XT_TO_R ; ( R: NFA WID ) -0003c0 1cb1 .dw XT_DUP -0003c1 1d28 .dw XT_GREATERZERO -0003c2 1c36 .dw XT_DOCONDBRANCH -0003c3 03ce .dw PFA_HEADER1 -0003c4 1cb1 .dw XT_DUP -0003c5 1c3d .dw XT_DOLITERAL -0003c6 ff00 .dw $ff00 ; all flags are off (e.g. immediate) -0003c7 1e1c .dw XT_OR -0003c8 0806 .dw XT_DOSCOMMA - ; make the link to the previous entry in this wordlist -0003c9 1cf6 .dw XT_R_FROM -0003ca 1f5f .dw XT_FETCHE -0003cb 02ae .dw XT_COMMA -0003cc 1cf6 .dw XT_R_FROM -0003cd 1c20 .dw XT_EXIT - - PFA_HEADER1: - ; -16: attempt to use zero length string as a name -0003ce 1c3d .dw XT_DOLITERAL -0003cf fff0 .dw -16 -0003d0 08c8 .dw XT_THROW - - .include "words/wlscope.asm" - - ; Compiler - ; dynamically place a word in a wordlist. The word name may be changed. - VE_WLSCOPE: -0003d1 ff07 .dw $ff07 -0003d2 6c77 -0003d3 6373 -0003d4 706f -0003d5 0065 .db "wlscope",0 -0003d6 03b7 .dw VE_HEAD - .set VE_HEAD = VE_WLSCOPE - XT_WLSCOPE: -0003d7 0c9a .dw PFA_DODEFER1 - PFA_WLSCOPE: -0003d8 0032 .dw CFG_WLSCOPE -0003d9 0c3b .dw XT_EDEFERFETCH -0003da 0c45 .dw XT_EDEFERSTORE - - ; wlscope, "wordlist scope" ( addr len -- addr' len' wid ), is a deferred word - ; which enables the AmForth application to choose the wordlist ( wid ) for the - ; new voc entry based on the input ( addr len ) string. The name of the new voc - ; entry ( addr' len' ) may be different from the input string. Note that all - ; created voc entry types pass through the wlscope mechanism. The default - ; wlscope action passes the input string to the output without modification and - ; uses get-current to select the wid. - .include "words/reveal.asm" - - ; Dictionary - ; makes an entry in a wordlist visible, if not already done. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_REVEAL: -0003db ff06 .dw $ff06 -0003dc 6572 -0003dd 6576 -0003de 6c61 .db "reveal" -0003df 03d1 .dw VE_HEAD - .set VE_HEAD = VE_REVEAL - XT_REVEAL: -0003e0 1c01 .dw DO_COLON - PFA_REVEAL: - .endif -0003e1 0271 -0003e2 05e3 -0003e3 1c79 .DW XT_NEWEST,XT_CELLPLUS,XT_FETCH ; only if wordlist is in use -0003e4 1cb9 -0003e5 1c36 .DW XT_QDUP,XT_DOCONDBRANCH -0003e6 03eb DEST(REVEAL1) -0003e7 0271 -0003e8 1c79 -0003e9 1cc4 -0003ea 1f3b .DW XT_NEWEST,XT_FETCH,XT_SWAP,XT_STOREE - ; .DW XT_ZERO,XT_NEWEST,XT_CELLPLUS,XT_STORE ; clean wordlist entry - REVEAL1: -0003eb 1c20 .DW XT_EXIT - .include "words/does.asm" - - ; Compiler - ; organize the XT replacement to call other colon code - VE_DOES: -0003ec 0005 .dw $0005 -0003ed 6f64 -0003ee 7365 -0003ef 003e .db "does>",0 -0003f0 03db .dw VE_HEAD - .set VE_HEAD = VE_DOES - XT_DOES: -0003f1 1c01 .dw DO_COLON - PFA_DOES: -0003f2 02a3 .dw XT_COMPILE -0003f3 0404 .dw XT_DODOES -0003f4 02a3 .dw XT_COMPILE ; create a code snippet to be used in an embedded XT -0003f5 940e .dw $940e ; the address of this compiled -0003f6 02a3 .dw XT_COMPILE ; code will replace the XT of the -0003f7 03f9 .dw DO_DODOES ; word that CREATE created -0003f8 1c20 .dw XT_EXIT ; - - DO_DODOES: ; ( -- PFA ) -0003f9 939a -0003fa 938a savetos -0003fb 01cb movw tosl, wl -0003fc 9601 adiw tosl, 1 - ; the following takes the address from a real uC-call - .if (pclen==3) - .endif -0003fd 917f pop wh -0003fe 916f pop wl - -0003ff 93bf push XH -000400 93af push XL -000401 01db movw XL, wl -000402 940c 1c05 jmp_ DO_NEXT - - ; ( -- ) - ; System - ; replace the XT written by CREATE to call the code that follows does> - ;VE_DODOES: - ; .dw $ff07 - ; .db "(does>)" - ; .set VE_HEAD = VE_DODOES - XT_DODOES: -000404 1c01 .dw DO_COLON - PFA_DODOES: -000405 1cf6 .dw XT_R_FROM -000406 0271 .dw XT_NEWEST -000407 05e3 .dw XT_CELLPLUS -000408 1c79 .dw XT_FETCH -000409 1f5f .dw XT_FETCHE -00040a 0d05 .dw XT_NFA2CFA -00040b 1f73 .dw XT_STOREI -00040c 1c20 .dw XT_EXIT - .include "words/colon.asm" - - ; Compiler - ; create a named entry in the dictionary, XT is DO_COLON - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_COLON: -00040d ff01 .dw $ff01 -00040e 003a .db ":",0 -00040f 03ec .dw VE_HEAD - .set VE_HEAD = VE_COLON - XT_COLON: -000410 1c01 .dw DO_COLON - PFA_COLON: - .endif -000411 0280 .dw XT_DOCREATE -000412 041b .dw XT_COLONNONAME -000413 1cd9 .dw XT_DROP -000414 1c20 .dw XT_EXIT - .include "words/colon-noname.asm" - - ; Compiler - ; create an unnamed entry in the dictionary, XT is DO_COLON - VE_COLONNONAME: -000415 ff07 .dw $ff07 -000416 6e3a -000417 6e6f -000418 6d61 -000419 0065 .db ":noname",0 -00041a 040d .dw VE_HEAD - .set VE_HEAD = VE_COLONNONAME - XT_COLONNONAME: -00041b 1c01 .dw DO_COLON - PFA_COLONNONAME: -00041c 0634 .dw XT_DP -00041d 1cb1 .dw XT_DUP -00041e 0278 .dw XT_LATEST -00041f 1c81 .dw XT_STORE - -000420 02a3 .dw XT_COMPILE -000421 1c01 .dw DO_COLON - -000422 0430 .dw XT_RBRACKET -000423 1c20 .dw XT_EXIT - .include "words/semicolon.asm" - - ; Compiler - ; finish colon defintion, compiles (exit) and returns to interpret state - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_SEMICOLON: -000424 0001 .dw $0001 -000425 003b .db $3b,0 -000426 0415 .dw VE_HEAD - .set VE_HEAD = VE_SEMICOLON - XT_SEMICOLON: -000427 1c01 .dw DO_COLON - PFA_SEMICOLON: - .endif -000428 02a3 .dw XT_COMPILE -000429 1c20 .dw XT_EXIT -00042a 0438 .dw XT_LBRACKET -00042b 03e0 .dw XT_REVEAL -00042c 1c20 .dw XT_EXIT - .include "words/right-bracket.asm" - - ; Compiler - ; enter compiler mode - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RBRACKET: -00042d ff01 .dw $ff01 -00042e 005d .db "]",0 -00042f 0424 .dw VE_HEAD - .set VE_HEAD = VE_RBRACKET - XT_RBRACKET: -000430 1c01 .dw DO_COLON - PFA_RBRACKET: - .endif -000431 1fe7 .dw XT_ONE -000432 05d0 .dw XT_STATE -000433 1c81 .dw XT_STORE -000434 1c20 .dw XT_EXIT - .include "words/left-bracket.asm" - - ; Compiler - ; enter interpreter mode - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_LBRACKET: -000435 0001 .dw $0001 -000436 005b .db "[",0 -000437 042d .dw VE_HEAD - .set VE_HEAD = VE_LBRACKET - XT_LBRACKET: -000438 1c01 .dw DO_COLON - PFA_LBRACKET: - .endif -000439 1d54 .dw XT_ZERO -00043a 05d0 .dw XT_STATE -00043b 1c81 .dw XT_STORE -00043c 1c20 .dw XT_EXIT - .include "words/variable.asm" - - ; Compiler - ; create a dictionary entry for a variable and allocate 1 cell RAM - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_VARIABLE: -00043d ff08 .dw $ff08 -00043e 6176 -00043f 6972 -000440 6261 -000441 656c .db "variable" -000442 0435 .dw VE_HEAD - .set VE_HEAD = VE_VARIABLE - XT_VARIABLE: -000443 1c01 .dw DO_COLON - PFA_VARIABLE: - .endif -000444 0645 .dw XT_HERE -000445 044f .dw XT_CONSTANT -000446 1fec .dw XT_TWO -000447 064e .dw XT_ALLOT -000448 1c20 .dw XT_EXIT - .include "words/constant.asm" - - ; Compiler - ; create a constant in the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_CONSTANT: -000449 ff08 .dw $ff08 -00044a 6f63 -00044b 736e -00044c 6174 -00044d 746e .db "constant" -00044e 043d .dw VE_HEAD - .set VE_HEAD = VE_CONSTANT - XT_CONSTANT: -00044f 1c01 .dw DO_COLON - PFA_CONSTANT: - .endif -000450 0280 .dw XT_DOCREATE -000451 03e0 .dw XT_REVEAL -000452 02a3 .dw XT_COMPILE -000453 1c48 .dw PFA_DOVARIABLE -000454 02ae .dw XT_COMMA -000455 1c20 .dw XT_EXIT - .include "words/user.asm" - - ; Compiler - ; create a dictionary entry for a user variable at offset n - VE_USER: -000456 ff04 .dw $ff04 -000457 7375 -000458 7265 .db "user" -000459 0449 .dw VE_HEAD - .set VE_HEAD = VE_USER - XT_USER: -00045a 1c01 .dw DO_COLON - PFA_USER: -00045b 0280 .dw XT_DOCREATE -00045c 03e0 .dw XT_REVEAL - -00045d 02a3 .dw XT_COMPILE -00045e 1c58 .dw PFA_DOUSER -00045f 02ae .dw XT_COMMA -000460 1c20 .dw XT_EXIT - - .include "words/recurse.asm" - - ; Compiler - ; compile the XT of the word currently being defined into the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RECURSE: -000461 0007 .dw $0007 -000462 6572 -000463 7563 -000464 7372 -000465 0065 .db "recurse",0 -000466 0456 .dw VE_HEAD - .set VE_HEAD = VE_RECURSE - XT_RECURSE: -000467 1c01 .dw DO_COLON - PFA_RECURSE: - .endif -000468 0278 .dw XT_LATEST -000469 1c79 .dw XT_FETCH -00046a 02ae .dw XT_COMMA -00046b 1c20 .dw XT_EXIT - .include "words/immediate.asm" - - ; Compiler - ; set immediate flag for the most recent word definition - VE_IMMEDIATE: -00046c ff09 .dw $ff09 -00046d 6d69 -00046e 656d -00046f 6964 -000470 7461 -000471 0065 .db "immediate",0 -000472 0461 .dw VE_HEAD - .set VE_HEAD = VE_IMMEDIATE - XT_IMMEDIATE: -000473 1c01 .dw DO_COLON - PFA_IMMEDIATE: -000474 0515 .dw XT_GET_CURRENT -000475 1f5f .dw XT_FETCHE -000476 1cb1 .dw XT_DUP -000477 1fcb .dw XT_FETCHI -000478 1c3d .dw XT_DOLITERAL -000479 7fff .dw $7fff -00047a 1e13 .dw XT_AND -00047b 1cc4 .dw XT_SWAP -00047c 1f73 .dw XT_STOREI -00047d 1c20 .dw XT_EXIT - - .include "words/bracketchar.asm" - - ; Tools - ; skip leading space delimites, place the first character of the word on the stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BRACKETCHAR: -00047e 0006 .dw $0006 -00047f 635b -000480 6168 -000481 5d72 .db "[char]" -000482 046c .dw VE_HEAD - .set VE_HEAD = VE_BRACKETCHAR - XT_BRACKETCHAR: -000483 1c01 .dw DO_COLON - PFA_BRACKETCHAR: - .endif -000484 02a3 .dw XT_COMPILE -000485 1c3d .dw XT_DOLITERAL -000486 0971 .dw XT_CHAR -000487 02ae .dw XT_COMMA -000488 1c20 .dw XT_EXIT - .include "words/abort-string.asm" - - ;C i*x x1 -- R: j*x -- x1<>0 - ; POSTPONE IS" POSTPONE ?ABORT ; IMMEDIATE - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ABORTQUOTE: -000489 0006 .dw $0006 -00048a 6261 -00048b 726f -00048c 2274 .db "abort",'"' -00048d 047e .dw VE_HEAD - .set VE_HEAD = VE_ABORTQUOTE - XT_ABORTQUOTE: -00048e 1c01 .dw DO_COLON - PFA_ABORTQUOTE: - .endif -00048f 024f .dw XT_SQUOTE -000490 02a3 .dw XT_COMPILE -000491 04a0 .dw XT_QABORT -000492 1c20 .DW XT_EXIT - .include "words/abort.asm" - - ; Exceptions - ; send an exception -1 - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ABORT: -000493 ff05 .dw $ff05 -000494 6261 -000495 726f -000496 0074 .db "abort",0 -000497 0489 .dw VE_HEAD - .set VE_HEAD = VE_ABORT - XT_ABORT: -000498 1c01 .dw DO_COLON - PFA_ABORT: - .endif -000499 1d4b .dw XT_TRUE -00049a 08c8 .dw XT_THROW - .include "words/q-abort.asm" - - ; ROT IF ITYPE ABORT THEN 2DROP ; - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QABORT: -00049b ff06 .dw $ff06 -00049c 613f -00049d 6f62 -00049e 7472 .db "?abort" -00049f 0493 .dw VE_HEAD - .set VE_HEAD = VE_QABORT - XT_QABORT: -0004a0 1c01 .dw DO_COLON - PFA_QABORT: - - .endif -0004a1 1ce1 -0004a2 1c36 .DW XT_ROT,XT_DOCONDBRANCH -0004a3 04a6 DEST(QABO1) -0004a4 0827 -0004a5 0498 .DW XT_ITYPE,XT_ABORT -0004a6 05f4 -0004a7 1c20 QABO1: .DW XT_2DROP,XT_EXIT - - .include "words/get-stack.asm" - - ; Tools - ; Get a stack from EEPROM - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_GET_STACK: -0004a8 ff09 .dw $ff09 -0004a9 6567 -0004aa 2d74 -0004ab 7473 -0004ac 6361 -0004ad 006b .db "get-stack",0 -0004ae 049b .dw VE_HEAD - .set VE_HEAD = VE_GET_STACK - XT_GET_STACK: -0004af 1c01 .dw DO_COLON - .endif -0004b0 1cb1 .dw XT_DUP -0004b1 05e3 .dw XT_CELLPLUS -0004b2 1cc4 .dw XT_SWAP -0004b3 1f5f .dw XT_FETCHE -0004b4 1cb1 .dw XT_DUP -0004b5 1cff .dw XT_TO_R -0004b6 1d54 .dw XT_ZERO -0004b7 1cc4 .dw XT_SWAP ; go from bigger to smaller addresses -0004b8 036d .dw XT_QDOCHECK -0004b9 1c36 .dw XT_DOCONDBRANCH -0004ba 04c6 DEST(PFA_N_FETCH_E2) -0004bb 1e9b .dw XT_DODO - PFA_N_FETCH_E1: - ; ( ee-addr ) -0004bc 1eac .dw XT_I -0004bd 1e35 .dw XT_1MINUS -0004be 05dd .dw XT_CELLS ; ( -- ee-addr i*2 ) -0004bf 1ccf .dw XT_OVER ; ( -- ee-addr i*2 ee-addr ) -0004c0 1d9d .dw XT_PLUS ; ( -- ee-addr ee-addr+i -0004c1 1f5f .dw XT_FETCHE ;( -- ee-addr item_i ) -0004c2 1cc4 .dw XT_SWAP ;( -- item_i ee-addr ) -0004c3 1d4b .dw XT_TRUE ; shortcut for -1 -0004c4 1eba .dw XT_DOPLUSLOOP -0004c5 04bc DEST(PFA_N_FETCH_E1) - PFA_N_FETCH_E2: -0004c6 05f4 .dw XT_2DROP -0004c7 1cf6 .dw XT_R_FROM -0004c8 1c20 .dw XT_EXIT - - .include "words/set-stack.asm" - - ; Tools - ; Write a stack to EEPROM - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SET_STACK: -0004c9 ff09 .dw $ff09 -0004ca 6573 -0004cb 2d74 -0004cc 7473 -0004cd 6361 -0004ce 006b .db "set-stack",0 -0004cf 04a8 .dw VE_HEAD - .set VE_HEAD = VE_SET_STACK - XT_SET_STACK: -0004d0 1c01 .dw DO_COLON - PFA_SET_STACK: - .endif -0004d1 1ccf .dw XT_OVER -0004d2 1d21 .dw XT_ZEROLESS -0004d3 1c36 .dw XT_DOCONDBRANCH -0004d4 04d8 DEST(PFA_SET_STACK0) -0004d5 1c3d .dw XT_DOLITERAL -0004d6 fffc .dw -4 -0004d7 08c8 .dw XT_THROW - PFA_SET_STACK0: -0004d8 05eb .dw XT_2DUP -0004d9 1f3b .dw XT_STOREE ; ( -- i_n .. i_0 n e-addr ) -0004da 1cc4 .dw XT_SWAP -0004db 1d54 .dw XT_ZERO -0004dc 036d .dw XT_QDOCHECK -0004dd 1c36 .dw XT_DOCONDBRANCH -0004de 04e5 DEST(PFA_SET_STACK2) -0004df 1e9b .dw XT_DODO - PFA_SET_STACK1: -0004e0 05e3 .dw XT_CELLPLUS ; ( -- i_x e-addr ) -0004e1 05fc .dw XT_TUCK ; ( -- e-addr i_x e-addr -0004e2 1f3b .dw XT_STOREE -0004e3 1ec9 .dw XT_DOLOOP -0004e4 04e0 DEST(PFA_SET_STACK1) - PFA_SET_STACK2: -0004e5 1cd9 .dw XT_DROP -0004e6 1c20 .dw XT_EXIT - - .include "words/map-stack.asm" - - ; Tools - ; Iterate over a stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_MAPSTACK: -0004e7 ff09 .dw $ff09 -0004e8 616d -0004e9 2d70 -0004ea 7473 -0004eb 6361 -0004ec 006b .db "map-stack",0 -0004ed 04c9 .dw VE_HEAD - .set VE_HEAD = VE_MAPSTACK - XT_MAPSTACK: -0004ee 1c01 .dw DO_COLON - PFA_MAPSTACK: - .endif -0004ef 1cb1 .dw XT_DUP -0004f0 05e3 .dw XT_CELLPLUS -0004f1 1cc4 .dw XT_SWAP -0004f2 1f5f .dw XT_FETCHE -0004f3 05dd .dw XT_CELLS -0004f4 0de5 .dw XT_BOUNDS -0004f5 036d .dw XT_QDOCHECK -0004f6 1c36 .dw XT_DOCONDBRANCH -0004f7 050a DEST(PFA_MAPSTACK3) -0004f8 1e9b .dw XT_DODO - PFA_MAPSTACK1: -0004f9 1eac .dw XT_I -0004fa 1f5f .dw XT_FETCHE ; -- i*x XT id -0004fb 1cc4 .dw XT_SWAP -0004fc 1cff .dw XT_TO_R -0004fd 1d08 .dw XT_R_FETCH -0004fe 1c2a .dw XT_EXECUTE ; i*x id -- j*y true | i*x false -0004ff 1cb9 .dw XT_QDUP -000500 1c36 .dw XT_DOCONDBRANCH -000501 0506 DEST(PFA_MAPSTACK2) -000502 1cf6 .dw XT_R_FROM -000503 1cd9 .dw XT_DROP -000504 1ed4 .dw XT_UNLOOP -000505 1c20 .dw XT_EXIT - PFA_MAPSTACK2: -000506 1cf6 .dw XT_R_FROM -000507 1fec .dw XT_TWO -000508 1eba .dw XT_DOPLUSLOOP -000509 04f9 DEST(PFA_MAPSTACK1) - PFA_MAPSTACK3: -00050a 1cd9 .dw XT_DROP -00050b 1d54 .dw XT_ZERO -00050c 1c20 .dw XT_EXIT - - ; - ; : map-stack ( i*x XT e-addr -- j*y ) - ; dup cell+ swap @e cells bounds ?do - ; ( -- i*x XT ) - ; i @e swap >r r@ execute - ; ?dup if r> drop unloop exit then - ; r> - ; 2 +loop drop 0 - ; ; - .include "words/get-current.asm" - - ; Search Order - ; get the wid of the current compilation word list - VE_GET_CURRENT: -00050d ff0b .dw $ff0b -00050e 6567 -00050f 2d74 -000510 7563 -000511 7272 -000512 6e65 -000513 0074 .db "get-current",0 -000514 04e7 .dw VE_HEAD - .set VE_HEAD = VE_GET_CURRENT - XT_GET_CURRENT: -000515 1c01 .dw DO_COLON - PFA_GET_CURRENT: -000516 1c3d .dw XT_DOLITERAL -000517 003c .dw CFG_CURRENT -000518 1f5f .dw XT_FETCHE -000519 1c20 .dw XT_EXIT - .include "words/get-order.asm" - - ; Search Order - ; Get the current search order word list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_GET_ORDER: -00051a ff09 .dw $ff09 -00051b 6567 -00051c 2d74 -00051d 726f -00051e 6564 -00051f 0072 .db "get-order",0 -000520 050d .dw VE_HEAD - .set VE_HEAD = VE_GET_ORDER - XT_GET_ORDER: -000521 1c01 .dw DO_COLON - PFA_GET_ORDER: - .endif -000522 1c3d .dw XT_DOLITERAL -000523 0040 .dw CFG_ORDERLISTLEN -000524 04af .dw XT_GET_STACK -000525 1c20 .dw XT_EXIT - .include "words/cfg-order.asm" - - ; Search Order - ; Get the current search order word list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CFG_ORDER: -000526 ff09 .dw $ff09 -000527 6663 -000528 2d67 -000529 726f -00052a 6564 -00052b 0072 .db "cfg-order",0 -00052c 051a .dw VE_HEAD - .set VE_HEAD = VE_CFG_ORDER - XT_CFG_ORDER: -00052d 1c48 .dw PFA_DOVARIABLE - PFA_CFG_ORDER: - .endif -00052e 0040 .dw CFG_ORDERLISTLEN - .include "words/compare.asm" - - ; String - ; compares two strings in RAM - VE_COMPARE: -00052f ff07 .dw $ff07 -000530 6f63 -000531 706d -000532 7261 -000533 0065 .db "compare",0 -000534 0526 .dw VE_HEAD - .set VE_HEAD = VE_COMPARE - XT_COMPARE: -000535 0536 .dw PFA_COMPARE - PFA_COMPARE: -000536 93bf push xh -000537 93af push xl -000538 018c movw temp0, tosl -000539 9189 -00053a 9199 loadtos -00053b 01dc movw xl, tosl -00053c 9189 -00053d 9199 loadtos -00053e 019c movw temp2, tosl -00053f 9189 -000540 9199 loadtos -000541 01fc movw zl, tosl - PFA_COMPARE_LOOP: -000542 90ed ld temp4, X+ -000543 90f1 ld temp5, Z+ -000544 14ef cp temp4, temp5 -000545 f451 brne PFA_COMPARE_NOTEQUAL -000546 950a dec temp0 -000547 f019 breq PFA_COMPARE_ENDREACHED2 -000548 952a dec temp2 -000549 f7c1 brne PFA_COMPARE_LOOP -00054a c001 rjmp PFA_COMPARE_ENDREACHED - PFA_COMPARE_ENDREACHED2: -00054b 952a dec temp2 - PFA_COMPARE_ENDREACHED: -00054c 2b02 or temp0, temp2 -00054d f411 brne PFA_COMPARE_CHECKLASTCHAR -00054e 2788 clr tosl -00054f c002 rjmp PFA_COMPARE_DONE - PFA_COMPARE_CHECKLASTCHAR: - PFA_COMPARE_NOTEQUAL: -000550 ef8f ser tosl -000551 c000 rjmp PFA_COMPARE_DONE - - PFA_COMPARE_DONE: -000552 2f98 mov tosh, tosl -000553 91af pop xl -000554 91bf pop xh -000555 940c 1c05 jmp_ DO_NEXT - .include "words/nfa2lfa.asm" - - ; System - ; get the link field address from the name field address - VE_NFA2LFA: -000557 ff07 .dw $ff07 -000558 666e -000559 3e61 -00055a 666c -00055b 0061 .db "nfa>lfa",0 -00055c 052f .dw VE_HEAD - .set VE_HEAD = VE_NFA2LFA - XT_NFA2LFA: -00055d 1c01 .dw DO_COLON - PFA_NFA2LFA: -00055e 0cf9 .dw XT_NAME2STRING -00055f 1e2f .dw XT_1PLUS -000560 1e04 .dw XT_2SLASH -000561 1d9d .dw XT_PLUS -000562 1c20 .dw XT_EXIT - - .include "words/environment.asm" - - ; System Value - ; word list identifier of the environmental search list - VE_ENVIRONMENT: -000563 ff0b .dw $ff0b -000564 6e65 -000565 6976 -000566 6f72 -000567 6d6e -000568 6e65 -000569 0074 .db "environment",0 -00056a 0557 .dw VE_HEAD - .set VE_HEAD = VE_ENVIRONMENT - XT_ENVIRONMENT: -00056b 1c48 .dw PFA_DOVARIABLE - PFA_ENVIRONMENT: -00056c 003a .dw CFG_ENVIRONMENT - .include "words/env-wordlists.asm" - - ; Environment - ; maximum number of wordlists in the dictionary search order - VE_ENVWORDLISTS: -00056d ff09 .dw $ff09 -00056e 6f77 -00056f 6472 -000570 696c -000571 7473 -000572 0073 .db "wordlists",0 -000573 0000 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVWORDLISTS - XT_ENVWORDLISTS: -000574 1c01 .dw DO_COLON - PFA_ENVWORDLISTS: -000575 1c3d .dw XT_DOLITERAL -000576 0008 .dw NUMWORDLISTS -000577 1c20 .dw XT_EXIT - .include "words/env-slashpad.asm" - - ; Environment - ; Size of the PAD buffer in bytes - VE_ENVSLASHPAD: -000578 ff04 .dw $ff04 -000579 702f -00057a 6461 .db "/pad" -00057b 056d .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVSLASHPAD - XT_ENVSLASHPAD: -00057c 1c01 .dw DO_COLON - PFA_ENVSLASHPAD: -00057d 1e8d .dw XT_SP_FETCH -00057e 060a .dw XT_PAD -00057f 1d93 .dw XT_MINUS -000580 1c20 .dw XT_EXIT - .include "words/env-slashhold.asm" - - ; Environment - ; size of the pictured numeric output buffer in bytes - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENVSLASHHOLD: -000581 ff05 .dw $ff05 -000582 682f -000583 6c6f -000584 0064 .db "/hold",0 -000585 0578 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVSLASHHOLD - XT_ENVSLASHHOLD: -000586 1c01 .dw DO_COLON - PFA_ENVSLASHHOLD: - .endif -000587 060a .dw XT_PAD -000588 0645 .dw XT_HERE -000589 1d93 .dw XT_MINUS -00058a 1c20 .dw XT_EXIT - .include "words/env-forthname.asm" - - ; Environment - ; flash address of the amforth name string - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENV_FORTHNAME: -00058b ff0a .dw $ff0a -00058c 6f66 -00058d 7472 -00058e 2d68 -00058f 616e -000590 656d .db "forth-name" -000591 0581 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_FORTHNAME - XT_ENV_FORTHNAME: -000592 1c01 .dw DO_COLON - PFA_EN_FORTHNAME: -000593 07f4 .dw XT_DOSLITERAL -000594 0007 .dw 7 - .endif -000595 6d61 -000596 6f66 -000597 7472 -../../common\words/env-forthname.asm(22): warning: .cseg .db misalignment - padding zero byte -000598 0068 .db "amforth" - .if cpu_msp430==1 - .endif -000599 1c20 .dw XT_EXIT - .include "words/env-forthversion.asm" - - ; Environment - ; version number of amforth - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENV_FORTHVERSION: -00059a ff07 .dw $ff07 -00059b 6576 -00059c 7372 -00059d 6f69 -00059e 006e .db "version",0 -00059f 058b .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_FORTHVERSION - XT_ENV_FORTHVERSION: -0005a0 1c01 .dw DO_COLON - PFA_EN_FORTHVERSION: - .endif -0005a1 1c3d .dw XT_DOLITERAL -0005a2 0041 .dw 65 -0005a3 1c20 .dw XT_EXIT - .include "words/env-cpu.asm" - - ; Environment - ; flash address of the CPU identification string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENV_CPU: -0005a4 ff03 .dw $ff03 -0005a5 7063 -0005a6 0075 .db "cpu",0 -0005a7 059a .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_CPU - XT_ENV_CPU: -0005a8 1c01 .dw DO_COLON - PFA_EN_CPU: - .endif -0005a9 1c3d .dw XT_DOLITERAL -0005aa 002d .dw mcu_name -0005ab 0853 .dw XT_ICOUNT -0005ac 1c20 .dw XT_EXIT - .include "words/env-mcuinfo.asm" - - ; Environment - ; flash address of some CPU specific parameters - VE_ENV_MCUINFO: -0005ad ff08 .dw $ff08 -0005ae 636d -0005af 2d75 -0005b0 6e69 -0005b1 6f66 .db "mcu-info" -0005b2 05a4 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_MCUINFO - XT_ENV_MCUINFO: -0005b3 1c01 .dw DO_COLON - PFA_EN_MCUINFO: -0005b4 1c3d .dw XT_DOLITERAL -0005b5 0029 .dw mcu_info -0005b6 1c20 .dw XT_EXIT - .include "words/env-usersize.asm" - - ; Environment - ; size of the USER area in bytes - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_ENVUSERSIZE: -0005b7 ff05 .dw $ff05 -0005b8 752f -0005b9 6573 -0005ba 0072 .db "/user",0 -0005bb 05ad .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVUSERSIZE - XT_ENVUSERSIZE: -0005bc 1c01 .dw DO_COLON - PFA_ENVUSERSIZE: - .endif -0005bd 1c3d .dw XT_DOLITERAL -0005be 002c .dw SYSUSERSIZE + APPUSERSIZE -0005bf 1c20 .dw XT_EXIT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/f_cpu.asm" - - ; System - ; put the cpu frequency in Hz on stack - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_F_CPU: -0005c0 ff05 .dw $ff05 -0005c1 5f66 -0005c2 7063 -0005c3 0075 .db "f_cpu",0 -0005c4 0563 .dw VE_HEAD - .set VE_HEAD = VE_F_CPU - XT_F_CPU: -0005c5 1c01 .dw DO_COLON - PFA_F_CPU: - .endif -0005c6 1c3d .dw XT_DOLITERAL -0005c7 1200 .dw (F_CPU % 65536) -0005c8 1c3d .dw XT_DOLITERAL -0005c9 007a .dw (F_CPU / 65536) -0005ca 1c20 .dw XT_EXIT - .include "words/state.asm" - - ; System Variable - ; system state - VE_STATE: -0005cb ff05 .dw $ff05 -0005cc 7473 -0005cd 7461 -0005ce 0065 .db "state",0 -0005cf 05c0 .dw VE_HEAD - .set VE_HEAD = VE_STATE - XT_STATE: -0005d0 1c48 .dw PFA_DOVARIABLE - PFA_STATE: -0005d1 008f .dw ram_state - - .dseg -00008f ram_state: .byte 2 - .include "words/base.asm" - - ; Numeric IO - ; location of the cell containing the number conversion radix - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BASE: -0005d2 ff04 .dw $ff04 -0005d3 6162 -0005d4 6573 .db "base" -0005d5 05cb .dw VE_HEAD - .set VE_HEAD = VE_BASE - XT_BASE: -0005d6 1c58 .dw PFA_DOUSER - PFA_BASE: - .endif -0005d7 000c .dw USER_BASE - - .include "words/cells.asm" - - ; Arithmetics - ; n2 is the size in address units of n1 cells - VE_CELLS: -0005d8 ff05 .dw $ff05 -0005d9 6563 -0005da 6c6c -0005db 0073 .db "cells",0 -0005dc 05d2 .dw VE_HEAD - .set VE_HEAD = VE_CELLS - XT_CELLS: -0005dd 1e0c .dw PFA_2STAR - .include "words/cellplus.asm" - - ; Arithmetics - ; add the size of an address-unit to a-addr1 - VE_CELLPLUS: -0005de ff05 .dw $ff05 -0005df 6563 -0005e0 6c6c -0005e1 002b .db "cell+",0 -0005e2 05d8 .dw VE_HEAD - .set VE_HEAD = VE_CELLPLUS - XT_CELLPLUS: -0005e3 05e4 .dw PFA_CELLPLUS - PFA_CELLPLUS: -0005e4 9602 adiw tosl, CELLSIZE -0005e5 940c 1c05 jmp_ DO_NEXT - - .include "words/2dup.asm" - - ; Stack - ; Duplicate the 2 top elements - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2DUP: -0005e7 ff04 .dw $ff04 -0005e8 6432 -0005e9 7075 .db "2dup" -0005ea 05de .dw VE_HEAD - .set VE_HEAD = VE_2DUP - XT_2DUP: -0005eb 1c01 .dw DO_COLON - PFA_2DUP: - .endif - -0005ec 1ccf .dw XT_OVER -0005ed 1ccf .dw XT_OVER -0005ee 1c20 .dw XT_EXIT - .include "words/2drop.asm" - - ; Stack - ; Remove the 2 top elements - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2DROP: -0005ef ff05 .dw $ff05 -0005f0 6432 -0005f1 6f72 -0005f2 0070 .db "2drop",0 -0005f3 05e7 .dw VE_HEAD - .set VE_HEAD = VE_2DROP - XT_2DROP: -0005f4 1c01 .dw DO_COLON - PFA_2DROP: - .endif -0005f5 1cd9 .dw XT_DROP -0005f6 1cd9 .dw XT_DROP -0005f7 1c20 .dw XT_EXIT - - .include "words/tuck.asm" - - ; Stack - ; Copy the first (top) stack item below the second stack item. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TUCK: -0005f8 ff04 .dw $ff04 -0005f9 7574 -0005fa 6b63 .db "tuck" -0005fb 05ef .dw VE_HEAD - .set VE_HEAD = VE_TUCK - XT_TUCK: -0005fc 1c01 .dw DO_COLON - PFA_TUCK: - .endif -0005fd 1cc4 .dw XT_SWAP -0005fe 1ccf .dw XT_OVER -0005ff 1c20 .dw XT_EXIT - - .include "words/to-in.asm" - - ; System Variable - ; pointer to current read position in input buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO_IN: -000600 ff03 .dw $ff03 -000601 693e -000602 006e .db ">in",0 -000603 05f8 .dw VE_HEAD - .set VE_HEAD = VE_TO_IN - XT_TO_IN: -000604 1c58 .dw PFA_DOUSER - PFA_TO_IN: - .endif -000605 0018 .dw USER_TO_IN - .include "words/pad.asm" - - ; System Variable - ; Address of the temporary scratch buffer. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PAD: -000606 ff03 .dw $ff03 -000607 6170 -000608 0064 .db "pad",0 -000609 0600 .dw VE_HEAD - .set VE_HEAD = VE_PAD - XT_PAD: -00060a 1c01 .dw DO_COLON - PFA_PAD: - .endif -00060b 0645 .dw XT_HERE -00060c 1c3d .dw XT_DOLITERAL -00060d 0028 .dw 40 -00060e 1d9d .dw XT_PLUS -00060f 1c20 .dw XT_EXIT - .include "words/emit.asm" - - ; Character IO - ; fetch the emit vector and execute it. should emit a character from TOS - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_EMIT: -000610 ff04 .dw $ff04 -000611 6d65 -000612 7469 .db "emit" -000613 0606 .dw VE_HEAD - .set VE_HEAD = VE_EMIT - XT_EMIT: -000614 0c9a .dw PFA_DODEFER1 - PFA_EMIT: - .endif -000615 000e .dw USER_EMIT -000616 0c63 .dw XT_UDEFERFETCH -000617 0c6f .dw XT_UDEFERSTORE - .include "words/emitq.asm" - - ; Character IO - ; fetch emit? vector and execute it. should return the ready-to-send condition - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_EMITQ: -000618 ff05 .dw $ff05 -000619 6d65 -00061a 7469 -00061b 003f .db "emit?",0 -00061c 0610 .dw VE_HEAD - .set VE_HEAD = VE_EMITQ - XT_EMITQ: -00061d 0c9a .dw PFA_DODEFER1 - PFA_EMITQ: - .endif -00061e 0010 .dw USER_EMITQ -00061f 0c63 .dw XT_UDEFERFETCH -000620 0c6f .dw XT_UDEFERSTORE - .include "words/key.asm" - - ; Character IO - ; fetch key vector and execute it, should leave a single character on TOS - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_KEY: -000621 ff03 .dw $ff03 -000622 656b -000623 0079 .db "key",0 -000624 0618 .dw VE_HEAD - .set VE_HEAD = VE_KEY - XT_KEY: -000625 0c9a .dw PFA_DODEFER1 - PFA_KEY: - .endif -000626 0012 .dw USER_KEY -000627 0c63 .dw XT_UDEFERFETCH -000628 0c6f .dw XT_UDEFERSTORE - .include "words/keyq.asm" - - ; Character IO - ; fetch key? vector and execute it. should turn on key sender, if it is disabled/stopped - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_KEYQ: -000629 ff04 .dw $ff04 -00062a 656b -00062b 3f79 .db "key?" -00062c 0621 .dw VE_HEAD - .set VE_HEAD = VE_KEYQ - XT_KEYQ: -00062d 0c9a .dw PFA_DODEFER1 - PFA_KEYQ: - .endif -00062e 0014 .dw USER_KEYQ -00062f 0c63 .dw XT_UDEFERFETCH -000630 0c6f .dw XT_UDEFERSTORE - - .include "words/dp.asm" - - ; System Value - ; address of the next free dictionary cell - VE_DP: -000631 ff02 .dw $ff02 -000632 7064 .db "dp" -000633 0629 .dw VE_HEAD - .set VE_HEAD = VE_DP - XT_DP: -000634 1c6f .dw PFA_DOVALUE1 - PFA_DP: -000635 002c .dw CFG_DP -000636 0c3b .dw XT_EDEFERFETCH -000637 0c45 .dw XT_EDEFERSTORE - .include "words/ehere.asm" - - ; System Value - ; address of the next free address in eeprom - VE_EHERE: -000638 ff05 .dw $ff05 -000639 6865 -00063a 7265 -00063b 0065 .db "ehere",0 -00063c 0631 .dw VE_HEAD - .set VE_HEAD = VE_EHERE - XT_EHERE: -00063d 1c6f .dw PFA_DOVALUE1 - PFA_EHERE: -00063e 0030 .dw EE_EHERE -00063f 0c3b .dw XT_EDEFERFETCH -000640 0c45 .dw XT_EDEFERSTORE - .include "words/here.asm" - - ; System Value - ; address of the next free data space (RAM) cell - VE_HERE: -000641 ff04 .dw $ff04 -000642 6568 -000643 6572 .db "here" -000644 0638 .dw VE_HEAD - .set VE_HEAD = VE_HERE - XT_HERE: -000645 1c6f .dw PFA_DOVALUE1 - PFA_HERE: -000646 002e .dw EE_HERE -000647 0c3b .dw XT_EDEFERFETCH -000648 0c45 .dw XT_EDEFERSTORE - .include "words/allot.asm" - - ; System - ; allocate or release memory in RAM - VE_ALLOT: -000649 ff05 .dw $ff05 -00064a 6c61 -00064b 6f6c -00064c 0074 .db "allot",0 -00064d 0641 .dw VE_HEAD - .set VE_HEAD = VE_ALLOT - XT_ALLOT: -00064e 1c01 .dw DO_COLON - PFA_ALLOT: -00064f 0645 .dw XT_HERE -000650 1d9d .dw XT_PLUS -000651 0c20 .dw XT_DOTO -000652 0646 .dw PFA_HERE -000653 1c20 .dw XT_EXIT - - .include "words/bin.asm" - - ; Numeric IO - ; set base for numeric conversion to 10 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BIN: -000654 ff03 .dw $ff03 -000655 6962 -000656 006e .db "bin",0 -000657 0649 .dw VE_HEAD - .set VE_HEAD = VE_BIN - XT_BIN: -000658 1c01 .dw DO_COLON - PFA_BIN: - .endif -000659 1fec .dw XT_TWO -00065a 05d6 .dw XT_BASE -00065b 1c81 .dw XT_STORE -00065c 1c20 .dw XT_EXIT - .include "words/decimal.asm" - - ; Numeric IO - ; set base for numeric conversion to 10 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DECIMAL: -00065d ff07 .dw $ff07 -00065e 6564 -00065f 6963 -000660 616d -000661 006c .db "decimal",0 -000662 0654 .dw VE_HEAD - .set VE_HEAD = VE_DECIMAL - XT_DECIMAL: -000663 1c01 .dw DO_COLON - PFA_DECIMAL: - .endif -000664 1c3d .dw XT_DOLITERAL -000665 000a .dw 10 -000666 05d6 .dw XT_BASE -000667 1c81 .dw XT_STORE -000668 1c20 .dw XT_EXIT - .include "words/hex.asm" - - ; Numeric IO - ; set base for numeric conversion to 10 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_HEX: -000669 ff03 .dw $ff03 -00066a 6568 -00066b 0078 .db "hex",0 -00066c 065d .dw VE_HEAD - .set VE_HEAD = VE_HEX - XT_HEX: -00066d 1c01 .dw DO_COLON - PFA_HEX: - .endif -00066e 1c3d .dw XT_DOLITERAL -00066f 0010 .dw 16 -000670 05d6 .dw XT_BASE -000671 1c81 .dw XT_STORE -000672 1c20 .dw XT_EXIT - .include "words/bl.asm" - - ; Character IO - ; put ascii code of the blank to the stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BL: -000673 ff02 .dw $ff02 -000674 6c62 .db "bl" -000675 0669 .dw VE_HEAD - .set VE_HEAD = VE_BL - XT_BL: -000676 1c48 .dw PFA_DOVARIABLE - PFA_BL: - .endif -000677 0020 .dw 32 - - .include "words/turnkey.asm" - - ; System Value - ; Deferred action during startup/reset - VE_TURNKEY: -000678 ff07 .dw $ff07 -000679 7574 -00067a 6e72 -00067b 656b -00067c 0079 .db "turnkey",0 -00067d 0673 .dw VE_HEAD - .set VE_HEAD = VE_TURNKEY - XT_TURNKEY: -00067e 0c9a .dw PFA_DODEFER1 - PFA_TURNKEY: -00067f 0038 .dw CFG_TURNKEY -000680 0c3b .dw XT_EDEFERFETCH -000681 0c45 .dw XT_EDEFERSTORE - - .include "words/slashmod.asm" - - ; Arithmetics - ; signed division n1/n2 with remainder and quotient - VE_SLASHMOD: -000682 ff04 .dw $ff04 -000683 6d2f -000684 646f .db "/mod" -000685 0678 .dw VE_HEAD - .set VE_HEAD = VE_SLASHMOD - XT_SLASHMOD: -000686 0687 .dw PFA_SLASHMOD - PFA_SLASHMOD: -000687 019c movw temp2, tosl - -000688 9109 ld temp0, Y+ -000689 9119 ld temp1, Y+ - -00068a 2f41 mov temp6,temp1 ;move dividend High to sign register -00068b 2743 eor temp6,temp3 ;xor divisor High with sign register -00068c ff17 sbrs temp1,7 ;if MSB in dividend set -00068d c004 rjmp PFA_SLASHMOD_1 -00068e 9510 com temp1 ; change sign of dividend -00068f 9500 com temp0 -000690 5f0f subi temp0,low(-1) -000691 4f1f sbci temp1,high(-1) - PFA_SLASHMOD_1: -000692 ff37 sbrs temp3,7 ;if MSB in divisor set -000693 c004 rjmp PFA_SLASHMOD_2 -000694 9530 com temp3 ; change sign of divisor -000695 9520 com temp2 -000696 5f2f subi temp2,low(-1) -000697 4f3f sbci temp3,high(-1) -000698 24ee PFA_SLASHMOD_2: clr temp4 ;clear remainder Low byte -000699 18ff sub temp5,temp5;clear remainder High byte and carry -00069a e151 ldi temp7,17 ;init loop counter - -00069b 1f00 PFA_SLASHMOD_3: rol temp0 ;shift left dividend -00069c 1f11 rol temp1 -00069d 955a dec temp7 ;decrement counter -00069e f439 brne PFA_SLASHMOD_5 ;if done -00069f ff47 sbrs temp6,7 ; if MSB in sign register set -0006a0 c004 rjmp PFA_SLASHMOD_4 -0006a1 9510 com temp1 ; change sign of result -0006a2 9500 com temp0 -0006a3 5f0f subi temp0,low(-1) -0006a4 4f1f sbci temp1,high(-1) -0006a5 c00b PFA_SLASHMOD_4: rjmp PFA_SLASHMODmod_done ; return -0006a6 1cee PFA_SLASHMOD_5: rol temp4 ;shift dividend into remainder -0006a7 1cff rol temp5 -0006a8 1ae2 sub temp4,temp2 ;remainder = remainder - divisor -0006a9 0af3 sbc temp5,temp3 ; -0006aa f420 brcc PFA_SLASHMOD_6 ;if result negative -0006ab 0ee2 add temp4,temp2 ; restore remainder -0006ac 1ef3 adc temp5,temp3 -0006ad 9488 clc ; clear carry to be shifted into result -0006ae cfec rjmp PFA_SLASHMOD_3 ;else -0006af 9408 PFA_SLASHMOD_6: sec ; set carry to be shifted into result -0006b0 cfea rjmp PFA_SLASHMOD_3 - - PFA_SLASHMODmod_done: - ; put remainder on stack -0006b1 92fa st -Y,temp5 -0006b2 92ea st -Y,temp4 - - ; put quotient on stack -0006b3 01c8 movw tosl, temp0 -0006b4 940c 1c05 jmp_ DO_NEXT - .include "words/uslashmod.asm" - - ; Arithmetics - ; unsigned division with remainder - VE_USLASHMOD: -0006b6 ff05 .dw $ff05 -0006b7 2f75 -0006b8 6f6d -0006b9 0064 .db "u/mod",0 -0006ba 0682 .dw VE_HEAD - .set VE_HEAD = VE_USLASHMOD - XT_USLASHMOD: -0006bb 1c01 .dw DO_COLON - PFA_USLASHMOD: -0006bc 1cff .dw XT_TO_R -0006bd 1d54 .dw XT_ZERO -0006be 1cf6 .dw XT_R_FROM -0006bf 1dc2 .dw XT_UMSLASHMOD -0006c0 1c20 .dw XT_EXIT - .include "words/negate.asm" - - ; Logic - ; 2-complement - VE_NEGATE: -0006c1 ff06 .dw $ff06 -0006c2 656e -0006c3 6167 -0006c4 6574 .db "negate" -0006c5 06b6 .dw VE_HEAD - .set VE_HEAD = VE_NEGATE - XT_NEGATE: -0006c6 1c01 .dw DO_COLON - PFA_NEGATE: -0006c7 1dfd .dw XT_INVERT -0006c8 1e2f .dw XT_1PLUS -0006c9 1c20 .dw XT_EXIT - .include "words/slash.asm" - - ; Arithmetics - ; divide n1 by n2. giving the quotient - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_SLASH: -0006ca ff01 .dw $ff01 -0006cb 002f .db "/",0 -0006cc 06c1 .dw VE_HEAD - .set VE_HEAD = VE_SLASH - XT_SLASH: -0006cd 1c01 .dw DO_COLON - PFA_SLASH: - .endif -0006ce 0686 .dw XT_SLASHMOD -0006cf 1cf0 .dw XT_NIP -0006d0 1c20 .dw XT_EXIT - - .include "words/mod.asm" - - ; Arithmetics - ; divide n1 by n2 giving the remainder n3 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_MOD: -0006d1 ff03 .dw $ff03 -0006d2 6f6d -0006d3 0064 .db "mod",0 -0006d4 06ca .dw VE_HEAD - .set VE_HEAD = VE_MOD - XT_MOD: -0006d5 1c01 .dw DO_COLON - PFA_MOD: - .endif -0006d6 0686 .dw XT_SLASHMOD -0006d7 1cd9 .dw XT_DROP -0006d8 1c20 .dw XT_EXIT - .include "words/abs.asm" - - ; DUP ?NEGATE ; - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ABS: -0006d9 ff03 .dw $ff03 -0006da 6261 -0006db 0073 .db "abs",0 -0006dc 06d1 .dw VE_HEAD - .set VE_HEAD = VE_ABS - XT_ABS: -0006dd 1c01 .dw DO_COLON - PFA_ABS: - - .endif - -0006de 1cb1 -0006df 1e3e -0006e0 1c20 .DW XT_DUP,XT_QNEGATE,XT_EXIT - .include "words/min.asm" - - ; Compare - ; compare two values leave the smaller one - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_MIN: -0006e1 ff03 .dw $ff03 -0006e2 696d -0006e3 006e .db "min",0 -0006e4 06d9 .dw VE_HEAD - .set VE_HEAD = VE_MIN - XT_MIN: -0006e5 1c01 .dw DO_COLON - PFA_MIN: - .endif -0006e6 05eb .dw XT_2DUP -0006e7 1d78 .dw XT_GREATER -0006e8 1c36 .dw XT_DOCONDBRANCH -0006e9 06eb DEST(PFA_MIN1) -0006ea 1cc4 .dw XT_SWAP - PFA_MIN1: -0006eb 1cd9 .dw XT_DROP -0006ec 1c20 .dw XT_EXIT - .include "words/max.asm" - - ; Compare - ; compare two values, leave the bigger one - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_MAX: -0006ed ff03 .dw $ff03 -0006ee 616d -0006ef 0078 .db "max",0 -0006f0 06e1 .dw VE_HEAD - .set VE_HEAD = VE_MAX - XT_MAX: -0006f1 1c01 .dw DO_COLON - PFA_MAX: - - .endif -0006f2 05eb .dw XT_2DUP -0006f3 1d6e .dw XT_LESS -0006f4 1c36 .dw XT_DOCONDBRANCH -0006f5 06f7 DEST(PFA_MAX1) -0006f6 1cc4 .dw XT_SWAP - PFA_MAX1: -0006f7 1cd9 .dw XT_DROP -0006f8 1c20 .dw XT_EXIT - .include "words/within.asm" - - ; Compare - ; check if n is within min..max - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_WITHIN: -0006f9 ff06 .dw $ff06 -0006fa 6977 -0006fb 6874 -0006fc 6e69 .db "within" -0006fd 06ed .dw VE_HEAD - .set VE_HEAD = VE_WITHIN - XT_WITHIN: -0006fe 1c01 .dw DO_COLON - PFA_WITHIN: - .endif -0006ff 1ccf .dw XT_OVER -000700 1d93 .dw XT_MINUS -000701 1cff .dw XT_TO_R -000702 1d93 .dw XT_MINUS -000703 1cf6 .dw XT_R_FROM -000704 1d5c .dw XT_ULESS -000705 1c20 .dw XT_EXIT - - .include "words/to-upper.asm" - - ; String - ; if c is a lowercase letter convert it to uppercase - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TOUPPER: -000706 ff07 .dw $ff07 -000707 6f74 -000708 7075 -000709 6570 -00070a 0072 .db "toupper",0 -00070b 06f9 .dw VE_HEAD - .set VE_HEAD = VE_TOUPPER - XT_TOUPPER: -00070c 1c01 .dw DO_COLON - PFA_TOUPPER: - .endif -00070d 1cb1 .dw XT_DUP -00070e 1c3d .dw XT_DOLITERAL -00070f 0061 .dw 'a' -000710 1c3d .dw XT_DOLITERAL -000711 007b .dw 'z'+1 -000712 06fe .dw XT_WITHIN -000713 1c36 .dw XT_DOCONDBRANCH -000714 0718 DEST(PFA_TOUPPER0) -000715 1c3d .dw XT_DOLITERAL -000716 00df .dw 223 ; inverse of 0x20: 0xdf -000717 1e13 .dw XT_AND - PFA_TOUPPER0: -000718 1c20 .dw XT_EXIT - .include "words/to-lower.asm" - - ; String - ; if C is an uppercase letter convert it to lowercase - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_TOLOWER: -000719 ff07 .dw $ff07 -00071a 6f74 -00071b 6f6c -00071c 6577 -00071d 0072 .db "tolower",0 -00071e 0706 .dw VE_HEAD - .set VE_HEAD = VE_TOLOWER - XT_TOLOWER: -00071f 1c01 .dw DO_COLON - PFA_TOLOWER: - .endif -000720 1cb1 .dw XT_DUP -000721 1c3d .dw XT_DOLITERAL -000722 0041 .dw 'A' -000723 1c3d .dw XT_DOLITERAL -000724 005b .dw 'Z'+1 -000725 06fe .dw XT_WITHIN -000726 1c36 .dw XT_DOCONDBRANCH -000727 072b DEST(PFA_TOLOWER0) -000728 1c3d .dw XT_DOLITERAL -000729 0020 .dw 32 -00072a 1e1c .dw XT_OR - PFA_TOLOWER0: -00072b 1c20 .dw XT_EXIT - ;;;;;;;;;;;;;;;;;;;;;; - .include "words/hld.asm" - - ; Numeric IO - ; pointer to current write position in the Pictured Numeric Output buffer - VE_HLD: -00072c ff03 .dw $ff03 -00072d 6c68 -00072e 0064 .db "hld",0 -00072f 0719 .dw VE_HEAD - .set VE_HEAD = VE_HLD - XT_HLD: -000730 1c48 .dw PFA_DOVARIABLE - PFA_HLD: -000731 0091 .dw ram_hld - - .dseg -000091 ram_hld: .byte 2 - .cseg - .include "words/hold.asm" - - ; Numeric IO - ; prepend character to pictured numeric output buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_HOLD: -000732 ff04 .dw $ff04 -000733 6f68 -000734 646c .db "hold" -000735 072c .dw VE_HEAD - .set VE_HEAD = VE_HOLD - XT_HOLD: -000736 1c01 .dw DO_COLON - PFA_HOLD: - .endif -000737 0730 .dw XT_HLD -000738 1cb1 .dw XT_DUP -000739 1c79 .dw XT_FETCH -00073a 1e35 .dw XT_1MINUS -00073b 1cb1 .dw XT_DUP -00073c 1cff .dw XT_TO_R -00073d 1cc4 .dw XT_SWAP -00073e 1c81 .dw XT_STORE -00073f 1cf6 .dw XT_R_FROM -000740 1c8d .dw XT_CSTORE -000741 1c20 .dw XT_EXIT - .include "words/less-sharp.asm" ; <# - - ; Numeric IO - ; initialize the pictured numeric output conversion process - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_L_SHARP: -000742 ff02 .dw $ff02 -000743 233c .db "<#" -000744 0732 .dw VE_HEAD - .set VE_HEAD = VE_L_SHARP - XT_L_SHARP: -000745 1c01 .dw DO_COLON - PFA_L_SHARP: - .endif -000746 060a .dw XT_PAD -000747 0730 .dw XT_HLD -000748 1c81 .dw XT_STORE -000749 1c20 .dw XT_EXIT - .include "words/sharp.asm" - - ; Numeric IO - ; pictured numeric output: convert one digit - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_SHARP: -00074a ff01 .dw $ff01 -00074b 0023 .db "#",0 -00074c 0742 .dw VE_HEAD - .set VE_HEAD = VE_SHARP - XT_SHARP: -00074d 1c01 .dw DO_COLON - PFA_SHARP: - .endif -00074e 05d6 .dw XT_BASE -00074f 1c79 .dw XT_FETCH -000750 07ca .dw XT_UDSLASHMOD -000751 1ce1 .dw XT_ROT -000752 1c3d .dw XT_DOLITERAL -000753 0009 .dw 9 -000754 1ccf .dw XT_OVER -000755 1d6e .dw XT_LESS -000756 1c36 .dw XT_DOCONDBRANCH -000757 075b DEST(PFA_SHARP1) -000758 1c3d .dw XT_DOLITERAL -000759 0007 .dw 7 -00075a 1d9d .dw XT_PLUS - PFA_SHARP1: -00075b 1c3d .dw XT_DOLITERAL -00075c 0030 .dw 48 ; ASCII 0 -00075d 1d9d .dw XT_PLUS -00075e 0736 .dw XT_HOLD -00075f 1c20 .dw XT_EXIT - ; : # ( ud1 -- ud2 ) - ; base @ ud/mod rot 9 over < if 7 + then 30 + hold ; - .include "words/sharp-s.asm" - - ; Numeric IO - ; pictured numeric output: convert all digits until 0 (zero) is reached - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SHARP_S: -000760 ff02 .dw $ff02 -000761 7323 .db "#s" -000762 074a .dw VE_HEAD - .set VE_HEAD = VE_SHARP_S - XT_SHARP_S: -000763 1c01 .dw DO_COLON - PFA_SHARP_S: - .endif - NUMS1: -000764 074d .dw XT_SHARP -000765 05eb .dw XT_2DUP -000766 1e1c .dw XT_OR -000767 1d1a .dw XT_ZEROEQUAL -000768 1c36 .dw XT_DOCONDBRANCH -000769 0764 DEST(NUMS1) ; PFA_SHARP_S -00076a 1c20 .dw XT_EXIT - .include "words/sharp-greater.asm" ; #> - - ; Numeric IO - ; Pictured Numeric Output: convert PNO buffer into an string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SHARP_G: -00076b ff02 .dw $ff02 -00076c 3e23 .db "#>" -00076d 0760 .dw VE_HEAD - .set VE_HEAD = VE_SHARP_G - XT_SHARP_G: -00076e 1c01 .dw DO_COLON - PFA_SHARP_G: - .endif -00076f 05f4 .dw XT_2DROP -000770 0730 .dw XT_HLD -000771 1c79 .dw XT_FETCH -000772 060a .dw XT_PAD -000773 1ccf .dw XT_OVER -000774 1d93 .dw XT_MINUS -000775 1c20 .dw XT_EXIT - .include "words/sign.asm" - - ; Numeric IO - ; place a - in HLD if n is negative - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SIGN: -000776 ff04 .dw $ff04 -000777 6973 -000778 6e67 .db "sign" -000779 076b .dw VE_HEAD - .set VE_HEAD = VE_SIGN - XT_SIGN: -00077a 1c01 .dw DO_COLON - PFA_SIGN: - .endif -00077b 1d21 .dw XT_ZEROLESS -00077c 1c36 .dw XT_DOCONDBRANCH -00077d 0781 DEST(PFA_SIGN1) -00077e 1c3d .dw XT_DOLITERAL -00077f 002d .dw 45 ; ascii - -000780 0736 .dw XT_HOLD - PFA_SIGN1: -000781 1c20 .dw XT_EXIT - .include "words/d-dot-r.asm" - - ; Numeric IO - ; singed PNO with double cell numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DDOTR: -000782 ff03 .dw $ff03 -000783 2e64 -000784 0072 .db "d.r",0 -000785 0776 .dw VE_HEAD - .set VE_HEAD = VE_DDOTR - XT_DDOTR: -000786 1c01 .dw DO_COLON - PFA_DDOTR: - - .endif -000787 1cff .dw XT_TO_R -000788 05fc .dw XT_TUCK -000789 0d5b .dw XT_DABS -00078a 0745 .dw XT_L_SHARP -00078b 0763 .dw XT_SHARP_S -00078c 1ce1 .dw XT_ROT -00078d 077a .dw XT_SIGN -00078e 076e .dw XT_SHARP_G -00078f 1cf6 .dw XT_R_FROM -000790 1ccf .dw XT_OVER -000791 1d93 .dw XT_MINUS -000792 0872 .dw XT_SPACES -000793 0882 .dw XT_TYPE -000794 1c20 .dw XT_EXIT - ; : d.r ( d n -- ) - ; >r swap over dabs <# #s rot sign #> r> over - spaces type ; - .include "words/dot-r.asm" - - ; Numeric IO - ; singed PNO with single cell numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOTR: -000795 ff02 .dw $ff02 -000796 722e .db ".r" -000797 0782 .dw VE_HEAD - .set VE_HEAD = VE_DOTR - XT_DOTR: -000798 1c01 .dw DO_COLON - PFA_DOTR: - - .endif -000799 1cff .dw XT_TO_R -00079a 0dee .dw XT_S2D -00079b 1cf6 .dw XT_R_FROM -00079c 0786 .dw XT_DDOTR -00079d 1c20 .dw XT_EXIT - ; : .r ( s n -- ) >r s>d r> d.r ; - .include "words/d-dot.asm" - - ; Numeric IO - ; singed PNO with double cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DDOT: -00079e ff02 .dw $ff02 -00079f 2e64 .db "d." -0007a0 0795 .dw VE_HEAD - .set VE_HEAD = VE_DDOT - XT_DDOT: -0007a1 1c01 .dw DO_COLON - PFA_DDOT: - - .endif -0007a2 1d54 .dw XT_ZERO -0007a3 0786 .dw XT_DDOTR -0007a4 0869 .dw XT_SPACE -0007a5 1c20 .dw XT_EXIT - ; : d. ( d -- ) 0 d.r space ; - .include "words/dot.asm" - - ; Numeric IO - ; singed PNO with single cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_DOT: -0007a6 ff01 .dw $ff01 -0007a7 002e .db ".",0 -0007a8 079e .dw VE_HEAD - .set VE_HEAD = VE_DOT - XT_DOT: -0007a9 1c01 .dw DO_COLON - PFA_DOT: - .endif -0007aa 0dee .dw XT_S2D -0007ab 07a1 .dw XT_DDOT -0007ac 1c20 .dw XT_EXIT - ; : . ( s -- ) s>d d. ; - .include "words/ud-dot.asm" - - ; Numeric IO - ; unsigned PNO with double cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDDOT: -0007ad ff03 .dw $ff03 -0007ae 6475 -0007af 002e .db "ud.",0 -0007b0 07a6 .dw VE_HEAD - .set VE_HEAD = VE_UDDOT - XT_UDDOT: -0007b1 1c01 .dw DO_COLON - PFA_UDDOT: - .endif -0007b2 1d54 .dw XT_ZERO -0007b3 07ba .dw XT_UDDOTR -0007b4 0869 .dw XT_SPACE -0007b5 1c20 .dw XT_EXIT - .include "words/ud-dot-r.asm" - - ; Numeric IO - ; unsigned PNO with double cell numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_UDDOTR: -0007b6 ff04 .dw $ff04 -0007b7 6475 -0007b8 722e .db "ud.r" -0007b9 07ad .dw VE_HEAD - .set VE_HEAD = VE_UDDOTR - XT_UDDOTR: -0007ba 1c01 .dw DO_COLON - PFA_UDDOTR: - .endif -0007bb 1cff .dw XT_TO_R -0007bc 0745 .dw XT_L_SHARP -0007bd 0763 .dw XT_SHARP_S -0007be 076e .dw XT_SHARP_G -0007bf 1cf6 .dw XT_R_FROM -0007c0 1ccf .dw XT_OVER -0007c1 1d93 .dw XT_MINUS -0007c2 0872 .dw XT_SPACES -0007c3 0882 .dw XT_TYPE -0007c4 1c20 .dw XT_EXIT - .include "words/ud-slash-mod.asm" - - ; Arithmetics - ; unsigned double cell division with remainder - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDSLASHMOD: -0007c5 ff06 .dw $ff06 -0007c6 6475 -0007c7 6d2f -0007c8 646f .db "ud/mod" -0007c9 07b6 .dw VE_HEAD - .set VE_HEAD = VE_UDSLASHMOD - XT_UDSLASHMOD: -0007ca 1c01 .dw DO_COLON - PFA_UDSLASHMOD: - .endif -0007cb 1cff .dw XT_TO_R -0007cc 1d54 .dw XT_ZERO -0007cd 1d08 .dw XT_R_FETCH -0007ce 1dc2 .dw XT_UMSLASHMOD -0007cf 1cf6 .dw XT_R_FROM -0007d0 1cc4 .dw XT_SWAP -0007d1 1cff .dw XT_TO_R -0007d2 1dc2 .dw XT_UMSLASHMOD -0007d3 1cf6 .dw XT_R_FROM -0007d4 1c20 .dw XT_EXIT - .include "words/digit-q.asm" - - ; Numeric IO - ; tries to convert a character to a number, set flag accordingly - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DIGITQ: -0007d5 ff06 .dw $ff06 -0007d6 6964 -0007d7 6967 -0007d8 3f74 .db "digit?" -0007d9 07c5 .dw VE_HEAD - .set VE_HEAD = VE_DIGITQ - XT_DIGITQ: -0007da 1c01 .dw DO_COLON - PFA_DIGITQ: - .endif -0007db 070c .dw XT_TOUPPER -0007dc 1cb1 -0007dd 1c3d -0007de 0039 -0007df 1d78 -0007e0 1c3d -0007e1 0100 .DW XT_DUP,XT_DOLITERAL,57,XT_GREATER,XT_DOLITERAL,256 -0007e2 1e13 -0007e3 1d9d -0007e4 1cb1 -0007e5 1c3d -0007e6 0140 -0007e7 1d78 .DW XT_AND,XT_PLUS,XT_DUP,XT_DOLITERAL,320,XT_GREATER -0007e8 1c3d -0007e9 0107 -0007ea 1e13 -0007eb 1d93 -0007ec 1c3d -0007ed 0030 .DW XT_DOLITERAL,263,XT_AND,XT_MINUS,XT_DOLITERAL,48 -0007ee 1d93 -0007ef 1cb1 -0007f0 05d6 -0007f1 1c79 -0007f2 1d5c .DW XT_MINUS,XT_DUP,XT_BASE,XT_FETCH,XT_ULESS -0007f3 1c20 .DW XT_EXIT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/do-sliteral.asm" - - ; String - ; runtime portion of sliteral - ;VE_DOSLITERAL: - ; .dw $ff0a - ; .db "(sliteral)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOSLITERAL - XT_DOSLITERAL: -0007f4 1c01 .dw DO_COLON - PFA_DOSLITERAL: -0007f5 1d08 .dw XT_R_FETCH ; ( -- addr ) -0007f6 0853 .dw XT_ICOUNT -0007f7 1cf6 .dw XT_R_FROM -0007f8 1ccf .dw XT_OVER ; ( -- addr' n addr n) -0007f9 1e2f .dw XT_1PLUS -0007fa 1e04 .dw XT_2SLASH ; ( -- addr' n addr k ) -0007fb 1d9d .dw XT_PLUS ; ( -- addr' n addr'' ) -0007fc 1e2f .dw XT_1PLUS -0007fd 1cff .dw XT_TO_R ; ( -- ) -0007fe 1c20 .dw XT_EXIT - .include "words/scomma.asm" - - ; Compiler - ; compiles a string from RAM to Flash - VE_SCOMMA: -0007ff ff02 .dw $ff02 -000800 2c73 .db "s",$2c -000801 07d5 .dw VE_HEAD - .set VE_HEAD = VE_SCOMMA - XT_SCOMMA: -000802 1c01 .dw DO_COLON - PFA_SCOMMA: -000803 1cb1 .dw XT_DUP -000804 0806 .dw XT_DOSCOMMA -000805 1c20 .dw XT_EXIT - - ; ( addr len len' -- ) - ; Compiler - ; compiles a string from RAM to Flash - ;VE_DOSCOMMA: - ; .dw $ff04 - ; .db "(s",$2c,")" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOSCOMMA - XT_DOSCOMMA: -000806 1c01 .dw DO_COLON - PFA_DOSCOMMA: -000807 02ae .dw XT_COMMA -000808 1cb1 .dw XT_DUP ; ( --addr len len) -000809 1e04 .dw XT_2SLASH ; ( -- addr len len/2 -00080a 05fc .dw XT_TUCK ; ( -- addr len/2 len len/2 -00080b 1e0b .dw XT_2STAR ; ( -- addr len/2 len len' -00080c 1d93 .dw XT_MINUS ; ( -- addr len/2 rem -00080d 1cff .dw XT_TO_R -00080e 1d54 .dw XT_ZERO -00080f 036d .dw XT_QDOCHECK -000810 1c36 .dw XT_DOCONDBRANCH -000811 0819 .dw PFA_SCOMMA2 -000812 1e9b .dw XT_DODO - PFA_SCOMMA1: -000813 1cb1 .dw XT_DUP ; ( -- addr addr ) -000814 1c79 .dw XT_FETCH ; ( -- addr c1c2 ) -000815 02ae .dw XT_COMMA ; ( -- addr ) -000816 05e3 .dw XT_CELLPLUS ; ( -- addr+cell ) -000817 1ec9 .dw XT_DOLOOP -000818 0813 .dw PFA_SCOMMA1 - PFA_SCOMMA2: -000819 1cf6 .dw XT_R_FROM -00081a 1d28 .dw XT_GREATERZERO -00081b 1c36 .dw XT_DOCONDBRANCH -00081c 0820 .dw PFA_SCOMMA3 -00081d 1cb1 .dw XT_DUP ; well, tricky -00081e 1c98 .dw XT_CFETCH -00081f 02ae .dw XT_COMMA - PFA_SCOMMA3: -000820 1cd9 .dw XT_DROP ; ( -- ) -000821 1c20 .dw XT_EXIT - .include "words/itype.asm" - - ; Tools - ; reads string from flash and prints it - VE_ITYPE: -000822 ff05 .dw $ff05 -000823 7469 -000824 7079 -000825 0065 .db "itype",0 -000826 07ff .dw VE_HEAD - .set VE_HEAD = VE_ITYPE - XT_ITYPE: -000827 1c01 .dw DO_COLON - PFA_ITYPE: -000828 1cb1 .dw XT_DUP ; ( --addr len len) -000829 1e04 .dw XT_2SLASH ; ( -- addr len len/2 -00082a 05fc .dw XT_TUCK ; ( -- addr len/2 len len/2 -00082b 1e0b .dw XT_2STAR ; ( -- addr len/2 len len' -00082c 1d93 .dw XT_MINUS ; ( -- addr len/2 rem -00082d 1cff .dw XT_TO_R -00082e 1d54 .dw XT_ZERO -00082f 036d .dw XT_QDOCHECK -000830 1c36 .dw XT_DOCONDBRANCH -000831 083b .dw PFA_ITYPE2 -000832 1e9b .dw XT_DODO - PFA_ITYPE1: -000833 1cb1 .dw XT_DUP ; ( -- addr addr ) -000834 1fcb .dw XT_FETCHI ; ( -- addr c1c2 ) -000835 1cb1 .dw XT_DUP -000836 0848 .dw XT_LOWEMIT -000837 0844 .dw XT_HIEMIT -000838 1e2f .dw XT_1PLUS ; ( -- addr+cell ) -000839 1ec9 .dw XT_DOLOOP -00083a 0833 .dw PFA_ITYPE1 - PFA_ITYPE2: -00083b 1cf6 .dw XT_R_FROM -00083c 1d28 .dw XT_GREATERZERO -00083d 1c36 .dw XT_DOCONDBRANCH -00083e 0842 .dw PFA_ITYPE3 -00083f 1cb1 .dw XT_DUP ; make sure the drop below has always something to do -000840 1fcb .dw XT_FETCHI -000841 0848 .dw XT_LOWEMIT - PFA_ITYPE3: -000842 1cd9 .dw XT_DROP -000843 1c20 .dw XT_EXIT - - ; ( w -- ) - ; R( -- ) - ; content of cell fetched on stack. - ;VE_HIEMIT: - ; .dw $ff06 - ; .db "hiemit" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_HIEMIT - XT_HIEMIT: -000844 1c01 .dw DO_COLON - PFA_HIEMIT: -000845 1ef9 .dw XT_BYTESWAP -000846 0848 .dw XT_LOWEMIT -000847 1c20 .dw XT_EXIT - - ; ( w -- ) - ; R( -- ) - ; content of cell fetched on stack. - ;VE_LOWEMIT: - ; .dw $ff07 - ; .db "lowemit" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_LOWEMIT - XT_LOWEMIT: -000848 1c01 .dw DO_COLON - PFA_LOWEMIT: -000849 1c3d .dw XT_DOLITERAL -00084a 00ff .dw $00ff -00084b 1e13 .dw XT_AND -00084c 0614 .dw XT_EMIT -00084d 1c20 .dw XT_EXIT - .include "words/icount.asm" - - ; Tools - ; get count information out of a counted string in flash - VE_ICOUNT: -00084e ff06 .dw $ff06 -00084f 6369 -000850 756f -000851 746e .db "icount" -000852 0822 .dw VE_HEAD - .set VE_HEAD = VE_ICOUNT - XT_ICOUNT: -000853 1c01 .dw DO_COLON - PFA_ICOUNT: -000854 1cb1 .dw XT_DUP -000855 1e2f .dw XT_1PLUS -000856 1cc4 .dw XT_SWAP -000857 1fcb .dw XT_FETCHI -000858 1c20 .dw XT_EXIT - .include "words/cr.asm" - - ; Character IO - ; cause subsequent output appear at the beginning of the next line - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CR: -000859 ff02 .dw 0xff02 -00085a 7263 .db "cr" -00085b 084e .dw VE_HEAD - .set VE_HEAD = VE_CR - XT_CR: -00085c 1c01 .dw DO_COLON - PFA_CR: - .endif - -00085d 1c3d .dw XT_DOLITERAL -00085e 000d .dw 13 -00085f 0614 .dw XT_EMIT -000860 1c3d .dw XT_DOLITERAL -000861 000a .dw 10 -000862 0614 .dw XT_EMIT -000863 1c20 .dw XT_EXIT - .include "words/space.asm" - - ; Character IO - ; emits a space (bl) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SPACE: -000864 ff05 .dw $ff05 -000865 7073 -000866 6361 -000867 0065 .db "space",0 -000868 0859 .dw VE_HEAD - .set VE_HEAD = VE_SPACE - XT_SPACE: -000869 1c01 .dw DO_COLON - PFA_SPACE: - .endif -00086a 0676 .dw XT_BL -00086b 0614 .dw XT_EMIT -00086c 1c20 .dw XT_EXIT - .include "words/spaces.asm" - - ; Character IO - ; emits n space(s) (bl) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SPACES: -00086d ff06 .dw $ff06 -00086e 7073 -00086f 6361 -000870 7365 .db "spaces" -000871 0864 .dw VE_HEAD - .set VE_HEAD = VE_SPACES - XT_SPACES: -000872 1c01 .dw DO_COLON - PFA_SPACES: - - .endif - ;C SPACES n -- output n spaces - ; BEGIN DUP 0> WHILE SPACE 1- REPEAT DROP ; -000873 1d54 -000874 06f1 .DW XT_ZERO, XT_MAX -000875 1cb1 -000876 1c36 SPCS1: .DW XT_DUP,XT_DOCONDBRANCH -000877 087c DEST(SPCS2) -000878 0869 -000879 1e35 -00087a 1c2f .DW XT_SPACE,XT_1MINUS,XT_DOBRANCH -00087b 0875 DEST(SPCS1) -00087c 1cd9 -00087d 1c20 SPCS2: .DW XT_DROP,XT_EXIT - .include "words/type.asm" - - ; Character IO - ; print a RAM based string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TYPE: -00087e ff04 .dw $ff04 -00087f 7974 -000880 6570 .db "type" -000881 086d .dw VE_HEAD - .set VE_HEAD = VE_TYPE - XT_TYPE: -000882 1c01 .dw DO_COLON - PFA_TYPE: - - .endif -000883 0de5 .dw XT_BOUNDS -000884 036d .dw XT_QDOCHECK -000885 1c36 .dw XT_DOCONDBRANCH -000886 088d DEST(PFA_TYPE2) -000887 1e9b .dw XT_DODO - PFA_TYPE1: -000888 1eac .dw XT_I -000889 1c98 .dw XT_CFETCH -00088a 0614 .dw XT_EMIT -00088b 1ec9 .dw XT_DOLOOP -00088c 0888 DEST(PFA_TYPE1) - PFA_TYPE2: -00088d 1c20 .dw XT_EXIT - .include "words/tick.asm" - - ; Dictionary - ; search dictionary for name, return XT or throw an exception -13 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TICK: -00088e ff01 .dw $ff01 -00088f 0027 .db "'",0 -000890 087e .dw VE_HEAD - .set VE_HEAD = VE_TICK - XT_TICK: -000891 1c01 .dw DO_COLON - PFA_TICK: - .endif -000892 0a3b .dw XT_PARSENAME -000893 0b60 .dw XT_FORTHRECOGNIZER -000894 0b36 .dw XT_RECOGNIZE - ; a word is tickable unless DT:TOKEN is DT:NULL or - ; the interpret action is a NOOP -000895 1cb1 .dw XT_DUP -000896 0bd1 .dw XT_DT_NULL -000897 1fe0 .dw XT_EQUAL -000898 1cc4 .dw XT_SWAP -000899 1fcb .dw XT_FETCHI -00089a 1c3d .dw XT_DOLITERAL -00089b 0c06 .dw XT_NOOP -00089c 1fe0 .dw XT_EQUAL -00089d 1e1c .dw XT_OR -00089e 1c36 .dw XT_DOCONDBRANCH -00089f 08a3 DEST(PFA_TICK1) -0008a0 1c3d .dw XT_DOLITERAL -0008a1 fff3 .dw -13 -0008a2 08c8 .dw XT_THROW - PFA_TICK1: -0008a3 1cd9 .dw XT_DROP -0008a4 1c20 .dw XT_EXIT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/handler.asm" - - ; Exceptions - ; USER variable used by catch/throw - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_HANDLER: -0008a5 ff07 .dw $ff07 -0008a6 6168 -0008a7 646e -0008a8 656c -0008a9 0072 .db "handler",0 -0008aa 088e .dw VE_HEAD - .set VE_HEAD = VE_HANDLER - XT_HANDLER: -0008ab 1c58 .dw PFA_DOUSER - PFA_HANDLER: - .endif -0008ac 000a .dw USER_HANDLER - .include "words/catch.asm" - - ; Exceptions - ; execute XT and check for exceptions. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CATCH: -0008ad ff05 .dw $ff05 -0008ae 6163 -0008af 6374 -0008b0 0068 .db "catch",0 -0008b1 08a5 .dw VE_HEAD - .set VE_HEAD = VE_CATCH - XT_CATCH: -0008b2 1c01 .dw DO_COLON - PFA_CATCH: - .endif - - ; sp@ >r -0008b3 1e8d .dw XT_SP_FETCH -0008b4 1cff .dw XT_TO_R - ; handler @ >r -0008b5 08ab .dw XT_HANDLER -0008b6 1c79 .dw XT_FETCH -0008b7 1cff .dw XT_TO_R - ; rp@ handler ! -0008b8 1e76 .dw XT_RP_FETCH -0008b9 08ab .dw XT_HANDLER -0008ba 1c81 .dw XT_STORE -0008bb 1c2a .dw XT_EXECUTE - ; r> handler ! -0008bc 1cf6 .dw XT_R_FROM -0008bd 08ab .dw XT_HANDLER -0008be 1c81 .dw XT_STORE -0008bf 1cf6 .dw XT_R_FROM -0008c0 1cd9 .dw XT_DROP -0008c1 1d54 .dw XT_ZERO -0008c2 1c20 .dw XT_EXIT - .include "words/throw.asm" - - ; Exceptions - ; throw an exception - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_THROW: -0008c3 ff05 .dw $ff05 -0008c4 6874 -0008c5 6f72 -0008c6 0077 .db "throw",0 -0008c7 08ad .dw VE_HEAD - .set VE_HEAD = VE_THROW - XT_THROW: -0008c8 1c01 .dw DO_COLON - PFA_THROW: - .endif -0008c9 1cb1 .dw XT_DUP -0008ca 1d1a .dw XT_ZEROEQUAL -0008cb 1c36 .dw XT_DOCONDBRANCH -0008cc 08cf DEST(PFA_THROW1) -0008cd 1cd9 .dw XT_DROP -0008ce 1c20 .dw XT_EXIT - PFA_THROW1: -0008cf 08ab .dw XT_HANDLER -0008d0 1c79 .dw XT_FETCH -0008d1 1e80 .dw XT_RP_STORE -0008d2 1cf6 .dw XT_R_FROM -0008d3 08ab .dw XT_HANDLER -0008d4 1c81 .dw XT_STORE -0008d5 1cf6 .dw XT_R_FROM -0008d6 1cc4 .dw XT_SWAP -0008d7 1cff .dw XT_TO_R -0008d8 1e96 .dw XT_SP_STORE -0008d9 1cd9 .dw XT_DROP -0008da 1cf6 .dw XT_R_FROM -0008db 1c20 .dw XT_EXIT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/cskip.asm" - - ; String - ; skips leading occurancies in string at addr1/n1 leaving addr2/n2 pointing to the 1st non-c character - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CSKIP: -0008dc ff05 .dw $ff05 -0008dd 7363 -0008de 696b -0008df 0070 .db "cskip",0 -0008e0 08c3 .dw VE_HEAD - .set VE_HEAD = VE_CSKIP - XT_CSKIP: -0008e1 1c01 .dw DO_COLON - PFA_CSKIP: - .endif -0008e2 1cff .dw XT_TO_R ; ( -- addr1 n1 ) - PFA_CSKIP1: -0008e3 1cb1 .dw XT_DUP ; ( -- addr' n' n' ) -0008e4 1c36 .dw XT_DOCONDBRANCH ; ( -- addr' n') -0008e5 08f0 DEST(PFA_CSKIP2) -0008e6 1ccf .dw XT_OVER ; ( -- addr' n' addr' ) -0008e7 1c98 .dw XT_CFETCH ; ( -- addr' n' c' ) -0008e8 1d08 .dw XT_R_FETCH ; ( -- addr' n' c' c ) -0008e9 1fe0 .dw XT_EQUAL ; ( -- addr' n' f ) -0008ea 1c36 .dw XT_DOCONDBRANCH ; ( -- addr' n') -0008eb 08f0 DEST(PFA_CSKIP2) -0008ec 1fe7 .dw XT_ONE -0008ed 0a2c .dw XT_SLASHSTRING -0008ee 1c2f .dw XT_DOBRANCH -0008ef 08e3 DEST(PFA_CSKIP1) - PFA_CSKIP2: -0008f0 1cf6 .dw XT_R_FROM -0008f1 1cd9 .dw XT_DROP ; ( -- addr2 n2) -0008f2 1c20 .dw XT_EXIT - .include "words/cscan.asm" - - ; String - ; Scan string at addr1/n1 for the first occurance of c, leaving addr1/n2, char at n2 is first non-c character - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CSCAN: -0008f3 ff05 .dw $ff05 -0008f4 7363 -0008f5 6163 -../../common\words/cscan.asm(12): warning: .cseg .db misalignment - padding zero byte -0008f6 006e .db "cscan" -0008f7 08dc .dw VE_HEAD - .set VE_HEAD = VE_CSCAN - XT_CSCAN: -0008f8 1c01 .dw DO_COLON - PFA_CSCAN: - .endif -0008f9 1cff .dw XT_TO_R -0008fa 1ccf .dw XT_OVER - PFA_CSCAN1: -0008fb 1cb1 .dw XT_DUP -0008fc 1c98 .dw XT_CFETCH -0008fd 1d08 .dw XT_R_FETCH -0008fe 1fe0 .dw XT_EQUAL -0008ff 1d1a .dw XT_ZEROEQUAL -000900 1c36 .dw XT_DOCONDBRANCH -000901 090d DEST(PFA_CSCAN2) -000902 1cc4 .dw XT_SWAP -000903 1e35 .dw XT_1MINUS -000904 1cc4 .dw XT_SWAP -000905 1ccf .dw XT_OVER -000906 1d21 .dw XT_ZEROLESS ; not negative -000907 1d1a .dw XT_ZEROEQUAL -000908 1c36 .dw XT_DOCONDBRANCH -000909 090d DEST(PFA_CSCAN2) -00090a 1e2f .dw XT_1PLUS -00090b 1c2f .dw XT_DOBRANCH -00090c 08fb DEST(PFA_CSCAN1) - PFA_CSCAN2: -00090d 1cf0 .dw XT_NIP -00090e 1ccf .dw XT_OVER -00090f 1d93 .dw XT_MINUS -000910 1cf6 .dw XT_R_FROM -000911 1cd9 .dw XT_DROP -000912 1c20 .dw XT_EXIT - - ; : my-cscan ( addr len c -- addr len' ) - ; >r over ( -- addr len addr ) - ; begin - ; dup c@ r@ <> while - ; swap 1- swap over 0 >= while - ; 1+ - ; repeat then - ; nip over - r> drop - ; ; - .include "words/accept.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ACCEPT: -000913 ff06 .dw $ff06 -000914 6361 -000915 6563 -000916 7470 .db "accept" -000917 08f3 .dw VE_HEAD - .set VE_HEAD = VE_ACCEPT - XT_ACCEPT: -000918 1c01 .dw DO_COLON - PFA_ACCEPT: - - .endif -000919 1ccf -00091a 1d9d -00091b 1e35 -00091c 1ccf .DW XT_OVER,XT_PLUS,XT_1MINUS,XT_OVER -00091d 0625 -00091e 1cb1 -00091f 0959 -000920 1d1a -000921 1c36 ACC1: .DW XT_KEY,XT_DUP,XT_CRLFQ,XT_ZEROEQUAL,XT_DOCONDBRANCH -000922 094b DEST(ACC5) -000923 1cb1 -000924 1c3d -000925 0008 -000926 1fe0 -000927 1c36 .DW XT_DUP,XT_DOLITERAL,8,XT_EQUAL,XT_DOCONDBRANCH -000928 093b DEST(ACC3) -000929 1cd9 -00092a 1ce1 -00092b 05eb -00092c 1d78 -00092d 1cff -00092e 1ce1 -00092f 1ce1 -000930 1cf6 -000931 1c36 .DW XT_DROP,XT_ROT,XT_2DUP,XT_GREATER,XT_TO_R,XT_ROT,XT_ROT,XT_R_FROM,XT_DOCONDBRANCH -000932 0939 DEST(ACC6) -000933 0951 -000934 1e35 -000935 1cff -000936 1ccf -000937 1cf6 -000938 014f .DW XT_BS,XT_1MINUS,XT_TO_R,XT_OVER,XT_R_FROM,XT_UMAX -000939 1c2f ACC6: .DW XT_DOBRANCH -00093a 0949 DEST(ACC4) - - - ACC3: ; check for remaining control characters, replace them with blank -00093b 1cb1 .dw XT_DUP ; ( -- addr k k ) -00093c 0676 .dw XT_BL -00093d 1d6e .dw XT_LESS -00093e 1c36 .dw XT_DOCONDBRANCH -00093f 0942 DEST(PFA_ACCEPT6) -000940 1cd9 .dw XT_DROP -000941 0676 .dw XT_BL - PFA_ACCEPT6: -000942 1cb1 -000943 0614 -000944 1ccf -000945 1c8d -000946 1e2f -000947 1ccf -000948 015b .DW XT_DUP,XT_EMIT,XT_OVER,XT_CSTORE,XT_1PLUS,XT_OVER,XT_UMIN -000949 1c2f ACC4: .DW XT_DOBRANCH -00094a 091d DEST(ACC1) -00094b 1cd9 -00094c 1cf0 -00094d 1cc4 -00094e 1d93 -00094f 085c -000950 1c20 ACC5: .DW XT_DROP,XT_NIP,XT_SWAP,XT_MINUS,XT_CR,XT_EXIT - - - ; ( -- ) - ; System - ; send a backspace character to overwrite the current char - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - ;VE_BS: - ; .dw $ff02 - ; .db "bs" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_BS - XT_BS: -000951 1c01 .dw DO_COLON - .endif -000952 1c3d .dw XT_DOLITERAL -000953 0008 .dw 8 -000954 1cb1 .dw XT_DUP -000955 0614 .dw XT_EMIT -000956 0869 .dw XT_SPACE -000957 0614 .dw XT_EMIT -000958 1c20 .dw XT_EXIT - - - ; ( c -- f ) - ; System - ; is the character a line end character? - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_CRLFQ: - ; .dw $ff02 - ; .db "crlf?" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_CRLFQ - XT_CRLFQ: -000959 1c01 .dw DO_COLON - .endif -00095a 1cb1 .dw XT_DUP -00095b 1c3d .dw XT_DOLITERAL -00095c 000d .dw 13 -00095d 1fe0 .dw XT_EQUAL -00095e 1cc4 .dw XT_SWAP -00095f 1c3d .dw XT_DOLITERAL -000960 000a .dw 10 -000961 1fe0 .dw XT_EQUAL -000962 1e1c .dw XT_OR -000963 1c20 .dw XT_EXIT - .include "words/refill.asm" - - ; System - ; refills the input buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_REFILL: -000964 ff06 .dw $ff06 -000965 6572 -000966 6966 -000967 6c6c .db "refill" -000968 0913 .dw VE_HEAD - .set VE_HEAD = VE_REFILL - XT_REFILL: -000969 0c9a .dw PFA_DODEFER1 - PFA_REFILL: - .endif -00096a 001a .dw USER_REFILL -00096b 0c63 .dw XT_UDEFERFETCH -00096c 0c6f .dw XT_UDEFERSTORE - .include "words/char.asm" - - ; Tools - ; copy the first character of the next word onto the stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CHAR: -00096d ff04 .dw $ff04 -00096e 6863 -00096f 7261 .db "char" -000970 0964 .dw VE_HEAD - .set VE_HEAD = VE_CHAR - XT_CHAR: -000971 1c01 .dw DO_COLON - PFA_CHAR: - .endif -000972 0a3b .dw XT_PARSENAME -000973 1cd9 .dw XT_DROP -000974 1c98 .dw XT_CFETCH -000975 1c20 .dw XT_EXIT - .include "words/number.asm" - - ; Numeric IO - ; convert a string at addr to a number - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NUMBER: -000976 ff06 .dw $ff06 -000977 756e -000978 626d -000979 7265 .db "number" -00097a 096d .dw VE_HEAD - .set VE_HEAD = VE_NUMBER - XT_NUMBER: -00097b 1c01 .dw DO_COLON - PFA_NUMBER: - .endif -00097c 05d6 .dw XT_BASE -00097d 1c79 .dw XT_FETCH -00097e 1cff .dw XT_TO_R -00097f 09bf .dw XT_QSIGN -000980 1cff .dw XT_TO_R -000981 09d2 .dw XT_SET_BASE -000982 09bf .dw XT_QSIGN -000983 1cf6 .dw XT_R_FROM -000984 1e1c .dw XT_OR -000985 1cff .dw XT_TO_R - ; check whether something is left -000986 1cb1 .dw XT_DUP -000987 1d1a .dw XT_ZEROEQUAL -000988 1c36 .dw XT_DOCONDBRANCH -000989 0992 DEST(PFA_NUMBER0) - ; nothing is left. It cannot be a number at all -00098a 05f4 .dw XT_2DROP -00098b 1cf6 .dw XT_R_FROM -00098c 1cd9 .dw XT_DROP -00098d 1cf6 .dw XT_R_FROM -00098e 05d6 .dw XT_BASE -00098f 1c81 .dw XT_STORE -000990 1d54 .dw XT_ZERO -000991 1c20 .dw XT_EXIT - PFA_NUMBER0: -000992 1f1e .dw XT_2TO_R -000993 1d54 .dw XT_ZERO ; starting value -000994 1d54 .dw XT_ZERO -000995 1f2d .dw XT_2R_FROM -000996 09f0 .dw XT_TO_NUMBER ; ( 0. addr len -- d addr' len' - ; check length of the remaining string. - ; if zero: a single cell number is entered -000997 1cb9 .dw XT_QDUP -000998 1c36 .dw XT_DOCONDBRANCH -000999 09b4 DEST(PFA_NUMBER1) - ; if equal 1: mayba a trailing dot? --> double cell number -00099a 1fe7 .dw XT_ONE -00099b 1fe0 .dw XT_EQUAL -00099c 1c36 .dw XT_DOCONDBRANCH -00099d 09ab DEST(PFA_NUMBER2) - ; excatly one character is left -00099e 1c98 .dw XT_CFETCH -00099f 1c3d .dw XT_DOLITERAL -0009a0 002e .dw 46 ; . -0009a1 1fe0 .dw XT_EQUAL -0009a2 1c36 .dw XT_DOCONDBRANCH -0009a3 09ac DEST(PFA_NUMBER6) - ; its a double cell number - ; incorporate sign into number -0009a4 1cf6 .dw XT_R_FROM -0009a5 1c36 .dw XT_DOCONDBRANCH -0009a6 09a8 DEST(PFA_NUMBER3) -0009a7 0d68 .dw XT_DNEGATE - PFA_NUMBER3: -0009a8 1fec .dw XT_TWO -0009a9 1c2f .dw XT_DOBRANCH -0009aa 09ba DEST(PFA_NUMBER5) - PFA_NUMBER2: -0009ab 1cd9 .dw XT_DROP - PFA_NUMBER6: -0009ac 05f4 .dw XT_2DROP -0009ad 1cf6 .dw XT_R_FROM -0009ae 1cd9 .dw XT_DROP -0009af 1cf6 .dw XT_R_FROM -0009b0 05d6 .dw XT_BASE -0009b1 1c81 .dw XT_STORE -0009b2 1d54 .dw XT_ZERO -0009b3 1c20 .dw XT_EXIT - PFA_NUMBER1: -0009b4 05f4 .dw XT_2DROP ; remove the address - ; incorporate sign into number -0009b5 1cf6 .dw XT_R_FROM -0009b6 1c36 .dw XT_DOCONDBRANCH -0009b7 09b9 DEST(PFA_NUMBER4) -0009b8 06c6 .dw XT_NEGATE - PFA_NUMBER4: -0009b9 1fe7 .dw XT_ONE - PFA_NUMBER5: -0009ba 1cf6 .dw XT_R_FROM -0009bb 05d6 .dw XT_BASE -0009bc 1c81 .dw XT_STORE -0009bd 1d4b .dw XT_TRUE -0009be 1c20 .dw XT_EXIT - .include "words/q-sign.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_QSIGN: -0009bf 1c01 .dw DO_COLON - PFA_QSIGN: ; ( c -- ) - .endif -0009c0 1ccf .dw XT_OVER ; ( -- addr len addr ) -0009c1 1c98 .dw XT_CFETCH -0009c2 1c3d .dw XT_DOLITERAL -0009c3 002d .dw '-' -0009c4 1fe0 .dw XT_EQUAL ; ( -- addr len flag ) -0009c5 1cb1 .dw XT_DUP -0009c6 1cff .dw XT_TO_R -0009c7 1c36 .dw XT_DOCONDBRANCH -0009c8 09cb DEST(PFA_NUMBERSIGN_DONE) -0009c9 1fe7 .dw XT_ONE ; skip sign character -0009ca 0a2c .dw XT_SLASHSTRING - PFA_NUMBERSIGN_DONE: -0009cb 1cf6 .dw XT_R_FROM -0009cc 1c20 .dw XT_EXIT - .include "words/set-base.asm" - - ; Numeric IO - ; skip a numeric prefix character - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_BASES: -0009cd 1c52 .dw PFA_DOCONSTANT - .endif -0009ce 000a -0009cf 0010 -0009d0 0002 -0009d1 000a .dw 10,16,2,10 ; last one could a 8 instead. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_SET_BASE: -0009d2 1c01 .dw DO_COLON - PFA_SET_BASE: ; ( adr1 len1 -- adr2 len2 ) - .endif -0009d3 1ccf .dw XT_OVER -0009d4 1c98 .dw XT_CFETCH -0009d5 1c3d .dw XT_DOLITERAL -0009d6 0023 .dw 35 -0009d7 1d93 .dw XT_MINUS -0009d8 1cb1 .dw XT_DUP -0009d9 1d54 .dw XT_ZERO -0009da 1c3d .dw XT_DOLITERAL -0009db 0004 .dw 4 -0009dc 06fe .dw XT_WITHIN -0009dd 1c36 .dw XT_DOCONDBRANCH -0009de 09e8 DEST(SET_BASE1) - .if cpu_msp430==1 - .endif -0009df 09cd .dw XT_BASES -0009e0 1d9d .dw XT_PLUS -0009e1 1fcb .dw XT_FETCHI -0009e2 05d6 .dw XT_BASE -0009e3 1c81 .dw XT_STORE -0009e4 1fe7 .dw XT_ONE -0009e5 0a2c .dw XT_SLASHSTRING -0009e6 1c2f .dw XT_DOBRANCH -0009e7 09e9 DEST(SET_BASE2) - SET_BASE1: -0009e8 1cd9 .dw XT_DROP - SET_BASE2: -0009e9 1c20 .dw XT_EXIT - - ; create bases 10 , 16 , 2 , 8 , - ; : set-base 35 - dup 0 4 within if - ; bases + @i base ! 1 /string - ; else - ; drop - ; then ; - .include "words/to-number.asm" - - ; Numeric IO - ; convert a string to a number c-addr2/u2 is the unconverted string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO_NUMBER: -0009ea ff07 .dw $ff07 -0009eb 6e3e -0009ec 6d75 -0009ed 6562 -0009ee 0072 .db ">number",0 -0009ef 0976 .dw VE_HEAD - .set VE_HEAD = VE_TO_NUMBER - XT_TO_NUMBER: -0009f0 1c01 .dw DO_COLON - - .endif - -0009f1 1cb1 -0009f2 1c36 TONUM1: .DW XT_DUP,XT_DOCONDBRANCH -0009f3 0a08 DEST(TONUM3) -0009f4 1ccf -0009f5 1c98 -0009f6 07da .DW XT_OVER,XT_CFETCH,XT_DIGITQ -0009f7 1d1a -0009f8 1c36 .DW XT_ZEROEQUAL,XT_DOCONDBRANCH -0009f9 09fc DEST(TONUM2) -0009fa 1cd9 -0009fb 1c20 .DW XT_DROP,XT_EXIT -0009fc 1cff -0009fd 0d8c -0009fe 05d6 -0009ff 1c79 -000a00 0140 TONUM2: .DW XT_TO_R,XT_2SWAP,XT_BASE,XT_FETCH,XT_UDSTAR -000a01 1cf6 -000a02 0138 -000a03 0d8c .DW XT_R_FROM,XT_MPLUS,XT_2SWAP -000a04 1fe7 -000a05 0a2c -000a06 1c2f .DW XT_ONE,XT_SLASHSTRING,XT_DOBRANCH -000a07 09f1 DEST(TONUM1) -000a08 1c20 TONUM3: .DW XT_EXIT - - ;C >NUMBER ud adr u -- ud' adr' u' - ;C convert string to number - ; BEGIN - ; DUP WHILE - ; OVER C@ DIGIT? - ; 0= IF DROP EXIT THEN - ; >R 2SWAP BASE @ UD* - ; R> M+ 2SWAP - ; 1 /STRING - ; REPEAT ; - .include "words/parse.asm" - - ; String - ; in input buffer parse ccc delimited string by the delimiter char. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PARSE: -000a09 ff05 .dw $ff05 -000a0a 6170 -000a0b 7372 -000a0c 0065 .db "parse",0 -000a0d 09ea .dw VE_HEAD - .set VE_HEAD = VE_PARSE - XT_PARSE: -000a0e 1c01 .dw DO_COLON - PFA_PARSE: - .endif -000a0f 1cff .dw XT_TO_R ; ( -- ) -000a10 0a22 .dw XT_SOURCE ; ( -- addr len) -000a11 0604 .dw XT_TO_IN ; ( -- addr len >in) -000a12 1c79 .dw XT_FETCH -000a13 0a2c .dw XT_SLASHSTRING ; ( -- addr' len' ) - -000a14 1cf6 .dw XT_R_FROM ; ( -- addr' len' c) -000a15 08f8 .dw XT_CSCAN ; ( -- addr' len'') -000a16 1cb1 .dw XT_DUP ; ( -- addr' len'' len'') -000a17 1e2f .dw XT_1PLUS -000a18 0604 .dw XT_TO_IN ; ( -- addr' len'' len'' >in) -000a19 1e65 .dw XT_PLUSSTORE ; ( -- addr' len') -000a1a 1fe7 .dw XT_ONE -000a1b 0a2c .dw XT_SLASHSTRING -000a1c 1c20 .dw XT_EXIT - .include "words/source.asm" - - ; System - ; address and current length of the input buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SOURCE: -000a1d ff06 .dw $FF06 -000a1e 6f73 -000a1f 7275 -000a20 6563 .db "source" -000a21 0a09 .dw VE_HEAD - .set VE_HEAD = VE_SOURCE - XT_SOURCE: -000a22 0c9a .dw PFA_DODEFER1 - PFA_SOURCE: - .endif -000a23 0016 .dw USER_SOURCE -000a24 0c63 .dw XT_UDEFERFETCH -000a25 0c6f .dw XT_UDEFERSTORE - - - .include "words/slash-string.asm" - - ; String - ; adjust string from addr1 to addr1+n, reduce length from u1 to u2 by n - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SLASHSTRING: -000a26 ff07 .dw $ff07 -000a27 732f -000a28 7274 -000a29 6e69 -000a2a 0067 .db "/string",0 -000a2b 0a1d .dw VE_HEAD - .set VE_HEAD = VE_SLASHSTRING - XT_SLASHSTRING: -000a2c 1c01 .dw DO_COLON - PFA_SLASHSTRING: - .endif -000a2d 1ce1 .dw XT_ROT -000a2e 1ccf .dw XT_OVER -000a2f 1d9d .dw XT_PLUS -000a30 1ce1 .dw XT_ROT -000a31 1ce1 .dw XT_ROT -000a32 1d93 .dw XT_MINUS -000a33 1c20 .dw XT_EXIT - - .include "words/parse-name.asm" - - ; String - ; In the SOURCE buffer parse whitespace delimited string. Returns string address within SOURCE. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_PARSENAME: -000a34 ff0a .dw $FF0A -000a35 6170 -000a36 7372 -000a37 2d65 -000a38 616e -000a39 656d .db "parse-name" -000a3a 0a26 .dw VE_HEAD - .set VE_HEAD = VE_PARSENAME - XT_PARSENAME: -000a3b 1c01 .dw DO_COLON - PFA_PARSENAME: - .endif -000a3c 0676 .dw XT_BL -000a3d 0a3f .dw XT_SKIPSCANCHAR -000a3e 1c20 .dw XT_EXIT - - ; ( c -- addr2 len2 ) - ; String - ; skips char and scan what's left in source for char - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_SKIPSCANCHAR: - ; .dw $FF0A - ; .db "skipscanchar" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_SKIPSCANCHAR - XT_SKIPSCANCHAR: -000a3f 1c01 .dw DO_COLON - PFA_SKIPSCANCHAR: - .endif -000a40 1cff .dw XT_TO_R -000a41 0a22 .dw XT_SOURCE -000a42 0604 .dw XT_TO_IN -000a43 1c79 .dw XT_FETCH -000a44 0a2c .dw XT_SLASHSTRING - -000a45 1d08 .dw XT_R_FETCH -000a46 08e1 .dw XT_CSKIP -000a47 1cf6 .dw XT_R_FROM -000a48 08f8 .dw XT_CSCAN - - ; adjust >IN -000a49 05eb .dw XT_2DUP -000a4a 1d9d .dw XT_PLUS -000a4b 0a22 .dw XT_SOURCE -000a4c 1cd9 .dw XT_DROP -000a4d 1d93 .dw XT_MINUS -000a4e 0604 .dw XT_TO_IN -000a4f 1c81 .dw XT_STORE -000a50 1c20 .dw XT_EXIT - .include "words/find-xt.asm" - - ; Tools - ; search wordlists for an entry with the xt from c-addr/len - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_FINDXT: -000a51 ff07 .dw $ff07 -000a52 6966 -000a53 646e -000a54 782d -000a55 0074 .db "find-xt",0 -000a56 0a34 .dw VE_HEAD - .set VE_HEAD = VE_FINDXT - XT_FINDXT: -000a57 1c01 .dw DO_COLON - PFA_FINDXT: - .endif -000a58 1c3d .dw XT_DOLITERAL -000a59 0a63 .dw XT_FINDXTA -000a5a 1c3d .dw XT_DOLITERAL -000a5b 0040 .dw CFG_ORDERLISTLEN -000a5c 04ee .dw XT_MAPSTACK -000a5d 1d1a .dw XT_ZEROEQUAL -000a5e 1c36 .dw XT_DOCONDBRANCH -000a5f 0a62 DEST(PFA_FINDXT1) -000a60 05f4 .dw XT_2DROP -000a61 1d54 .dw XT_ZERO - PFA_FINDXT1: -000a62 1c20 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - XT_FINDXTA: -000a63 1c01 .dw DO_COLON - PFA_FINDXTA: - .endif -000a64 1cff .dw XT_TO_R -000a65 05eb .dw XT_2DUP -000a66 1cf6 .dw XT_R_FROM -000a67 0cac .dw XT_SEARCH_WORDLIST -000a68 1cb1 .dw XT_DUP -000a69 1c36 .dw XT_DOCONDBRANCH -000a6a 0a70 DEST(PFA_FINDXTA1) -000a6b 1cff .dw XT_TO_R -000a6c 1cf0 .dw XT_NIP -000a6d 1cf0 .dw XT_NIP -000a6e 1cf6 .dw XT_R_FROM -000a6f 1d4b .dw XT_TRUE - PFA_FINDXTA1: -000a70 1c20 .dw XT_EXIT - - .include "words/quit.asm" - - ; System - ; main loop of amforth. accept - interpret in an endless loop - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QUIT: -000a71 ff04 .dw $ff04 -000a72 7571 -000a73 7469 .db "quit" -000a74 0a51 .dw VE_HEAD - .set VE_HEAD = VE_QUIT - XT_QUIT: -000a75 1c01 .dw DO_COLON - .endif - PFA_QUIT: -000a76 03a3 -000a77 03aa -000a78 1c81 .dw XT_LP0,XT_LP,XT_STORE -000a79 0b10 .dw XT_SP0 -000a7a 1e96 .dw XT_SP_STORE -000a7b 0b1d .dw XT_RP0 -000a7c 1e80 .dw XT_RP_STORE -000a7d 0438 .dw XT_LBRACKET - - PFA_QUIT2: -000a7e 05d0 .dw XT_STATE -000a7f 1c79 .dw XT_FETCH -000a80 1d1a .dw XT_ZEROEQUAL -000a81 1c36 .dw XT_DOCONDBRANCH -000a82 0a84 DEST(PFA_QUIT4) -000a83 0ab4 .dw XT_PROMPTREADY - PFA_QUIT4: -000a84 0969 .dw XT_REFILL -000a85 1c36 .dw XT_DOCONDBRANCH -000a86 0a96 DEST(PFA_QUIT3) -000a87 1c3d .dw XT_DOLITERAL -000a88 0b6b .dw XT_INTERPRET -000a89 08b2 .dw XT_CATCH -000a8a 1cb9 .dw XT_QDUP -000a8b 1c36 .dw XT_DOCONDBRANCH -000a8c 0a96 DEST(PFA_QUIT3) -000a8d 1cb1 .dw XT_DUP -000a8e 1c3d .dw XT_DOLITERAL -000a8f fffe .dw -2 -000a90 1d6e .dw XT_LESS -000a91 1c36 .dw XT_DOCONDBRANCH -000a92 0a94 DEST(PFA_QUIT5) -000a93 0acf .dw XT_PROMPTERROR - PFA_QUIT5: -000a94 1c2f .dw XT_DOBRANCH -000a95 0a76 DEST(PFA_QUIT) - PFA_QUIT3: -000a96 0aa4 .dw XT_PROMPTOK -000a97 1c2f .dw XT_DOBRANCH -000a98 0a7e DEST(PFA_QUIT2) - ; .dw XT_EXIT ; never reached - - .include "words/prompt-ok.asm" - - ; System - ; send the READY prompt to the command line - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_PROMPTOK: - ; .dw $ff02 - ; .db "ok" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_PROMPTOK - XT_DEFAULT_PROMPTOK: -000a99 1c01 .dw DO_COLON - PFA_DEFAULT_PROMPTOK: -000a9a 07f4 .dw XT_DOSLITERAL -000a9b 0003 .dw 3 -000a9c 6f20 -000a9d 006b .db " ok",0 - .endif -000a9e 0827 .dw XT_ITYPE -000a9f 1c20 .dw XT_EXIT - - ; ------------------------ - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PROMPTOK: -000aa0 ff03 .dw $FF03 -000aa1 6f2e -../../common\words/prompt-ok.asm(43): warning: .cseg .db misalignment - padding zero byte -000aa2 006b .db ".ok" -000aa3 0a71 .dw VE_HEAD - .set VE_HEAD = VE_PROMPTOK - XT_PROMPTOK: -000aa4 0c9a .dw PFA_DODEFER1 - PFA_PROMPTOK: - .endif -000aa5 001c .dw USER_P_OK -000aa6 0c63 .dw XT_UDEFERFETCH -000aa7 0c6f .dw XT_UDEFERSTORE - .include "words/prompt-ready.asm" - - ; System - ; process the error prompt - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_PROMPTRDY: - ; .dw $ff04 - ; .db "p_er" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_PROMPTRDY - XT_DEFAULT_PROMPTREADY: -000aa8 1c01 .dw DO_COLON - PFA_DEFAULT_PROMPTREADY: -000aa9 07f4 .dw XT_DOSLITERAL -000aaa 0002 .dw 2 -000aab 203e .db "> " - .endif -000aac 085c .dw XT_CR -000aad 0827 .dw XT_ITYPE -000aae 1c20 .dw XT_EXIT - - ; ------------------------ - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PROMPTREADY: -000aaf ff06 .dw $FF06 -000ab0 722e -000ab1 6165 -000ab2 7964 .db ".ready" -000ab3 0aa0 .dw VE_HEAD - .set VE_HEAD = VE_PROMPTREADY - XT_PROMPTREADY: -000ab4 0c9a .dw PFA_DODEFER1 - PFA_PROMPTREADY: - .endif -000ab5 0020 .dw USER_P_RDY -000ab6 0c63 .dw XT_UDEFERFETCH -000ab7 0c6f .dw XT_UDEFERSTORE - .include "words/prompt-error.asm" - - ; System - ; process the error prompt - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_PROMPTERROR: - ; .dw $ff04 - ; .db "p_er" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_PROMPTERROR - XT_DEFAULT_PROMPTERROR: -000ab8 1c01 .dw DO_COLON - PFA_DEFAULT_PROMPTERROR: -000ab9 07f4 .dw XT_DOSLITERAL -000aba 0004 .dw 4 -000abb 3f20 -000abc 203f .db " ?? " - .endif -000abd 0827 .dw XT_ITYPE -000abe 05d6 .dw XT_BASE -000abf 1c79 .dw XT_FETCH -000ac0 1cff .dw XT_TO_R -000ac1 0663 .dw XT_DECIMAL -000ac2 07a9 .dw XT_DOT -000ac3 0604 .dw XT_TO_IN -000ac4 1c79 .dw XT_FETCH -000ac5 07a9 .dw XT_DOT -000ac6 1cf6 .dw XT_R_FROM -000ac7 05d6 .dw XT_BASE -000ac8 1c81 .dw XT_STORE -000ac9 1c20 .dw XT_EXIT - - ; ------------------------ - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PROMPTERROR: -000aca ff06 .dw $FF06 -000acb 652e -000acc 7272 -000acd 726f .db ".error" -000ace 0aaf .dw VE_HEAD - .set VE_HEAD = VE_PROMPTERROR - XT_PROMPTERROR: -000acf 0c9a .dw PFA_DODEFER1 - PFA_PROMPTERROR: - .endif -000ad0 001e .dw USER_P_ERR -000ad1 0c63 .dw XT_UDEFERFETCH -000ad2 0c6f .dw XT_UDEFERSTORE - .include "words/pause.asm" - - ; Multitasking - ; Fetch pause vector and execute it. may make a context/task switch - VE_PAUSE: -000ad3 ff05 .dw $ff05 -000ad4 6170 -000ad5 7375 -000ad6 0065 .db "pause",0 -000ad7 0aca .dw VE_HEAD - .set VE_HEAD = VE_PAUSE - XT_PAUSE: -000ad8 0c9a .dw PFA_DODEFER1 - PFA_PAUSE: -000ad9 0093 .dw ram_pause -000ada 0c4f .dw XT_RDEFERFETCH -000adb 0c59 .dw XT_RDEFERSTORE - - .dseg -000093 ram_pause: .byte 2 - .cseg - .include "words/cold.asm" - - ; System - ; start up amforth. - VE_COLD: -000adc ff04 .dw $ff04 -000add 6f63 -000ade 646c .db "cold" -000adf 0ad3 .dw VE_HEAD - .set VE_HEAD = VE_COLD - XT_COLD: -000ae0 0ae1 .dw PFA_COLD - PFA_COLD: -000ae1 b6a4 in_ mcu_boot, MCUSR -000ae2 2422 clr zerol -000ae3 2433 clr zeroh -000ae4 24bb clr isrflag -000ae5 be24 out_ MCUSR, zerol - ; clear RAM -000ae6 e6e0 ldi zl, low(ramstart) -000ae7 e0f0 ldi zh, high(ramstart) - clearloop: -000ae8 9221 st Z+, zerol -000ae9 36e0 cpi zl, low(sram_size+ramstart) -000aea f7e9 brne clearloop -000aeb 30f4 cpi zh, high(sram_size+ramstart) -000aec f7d9 brne clearloop - ; init first user data area - ; allocate space for User Area - .dseg -000095 ram_user1: .byte SYSUSERSIZE + APPUSERSIZE - .cseg -000aed e9e5 ldi zl, low(ram_user1) -000aee e0f0 ldi zh, high(ram_user1) -000aef 012f movw upl, zl - ; init return stack pointer -000af0 e50f ldi temp0,low(rstackstart) -000af1 bf0d out_ SPL,temp0 -000af2 8304 std Z+4, temp0 -000af3 e014 ldi temp1,high(rstackstart) -000af4 bf1e out_ SPH,temp1 -000af5 8315 std Z+5, temp1 - - ; init parameter stack pointer -000af6 e0cf ldi yl,low(stackstart) -000af7 83c6 std Z+6, yl -000af8 e0d4 ldi yh,high(stackstart) -000af9 83d7 std Z+7, yh - - ; load Forth IP with starting word -000afa e0a3 ldi XL, low(PFA_WARM) -000afb e0bb ldi XH, high(PFA_WARM) - ; its a far jump... -000afc 940c 1c05 jmp_ DO_NEXT - .include "words/warm.asm" - - ; System - ; initialize amforth further. executes turnkey operation and go to quit - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_WARM: -000afe ff04 .dw $ff04 -000aff 6177 -000b00 6d72 .db "warm" -000b01 0adc .dw VE_HEAD - .set VE_HEAD = VE_WARM - XT_WARM: -000b02 1c01 .dw DO_COLON - PFA_WARM: - .endif -000b03 0dd7 .dw XT_INIT_RAM -000b04 1c3d .dw XT_DOLITERAL -000b05 0c06 .dw XT_NOOP -000b06 1c3d .dw XT_DOLITERAL -000b07 0ad8 .dw XT_PAUSE -000b08 0c7a .dw XT_DEFERSTORE -000b09 0438 .dw XT_LBRACKET -000b0a 067e .dw XT_TURNKEY -000b0b 0a75 .dw XT_QUIT ; never returns - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/sp0.asm" - - ; Stack - ; start address of the data stack - VE_SP0: -000b0c ff03 .dw $ff03 -000b0d 7073 -000b0e 0030 .db "sp0",0 -000b0f 0afe .dw VE_HEAD - .set VE_HEAD = VE_SP0 - XT_SP0: -000b10 1c6f .dw PFA_DOVALUE1 - PFA_SP0: -000b11 0006 .dw USER_SP0 -000b12 0c63 .dw XT_UDEFERFETCH -000b13 0c6f .dw XT_UDEFERSTORE - - ; ( -- addr) - ; Stack - ; address of user variable to store top-of-stack for inactive tasks - VE_SP: -000b14 ff02 .dw $ff02 -000b15 7073 .db "sp" -000b16 0b0c .dw VE_HEAD - .set VE_HEAD = VE_SP - XT_SP: -000b17 1c58 .dw PFA_DOUSER - PFA_SP: -000b18 0008 .dw USER_SP - .include "words/rp0.asm" - - ; Stack - ; start address of return stack - VE_RP0: -000b19 ff03 .dw $ff03 -000b1a 7072 -000b1b 0030 .db "rp0",0 -000b1c 0b14 .dw VE_HEAD - .set VE_HEAD = VE_RP0 - XT_RP0: -000b1d 1c01 .dw DO_COLON - PFA_RP0: -000b1e 0b21 .dw XT_DORP0 -000b1f 1c79 .dw XT_FETCH -000b20 1c20 .dw XT_EXIT - - ; ( -- addr) - ; Stack - ; user variable of the address of the initial return stack - ;VE_DORP0: - ; .dw $ff05 - ; .db "(rp0)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DORP0 - XT_DORP0: -000b21 1c58 .dw PFA_DOUSER - PFA_DORP0: -000b22 0004 .dw USER_RP - .include "words/depth.asm" - - ; Stack - ; number of single-cell values contained in the data stack before n was placed on the stack. - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DEPTH: -000b23 ff05 .dw $ff05 -000b24 6564 -000b25 7470 -000b26 0068 .db "depth",0 -000b27 0b19 .dw VE_HEAD - .set VE_HEAD = VE_DEPTH - XT_DEPTH: -000b28 1c01 .dw DO_COLON - PFA_DEPTH: - .endif -000b29 0b10 .dw XT_SP0 -000b2a 1e8d .dw XT_SP_FETCH -000b2b 1d93 .dw XT_MINUS -000b2c 1e04 .dw XT_2SLASH -000b2d 1e35 .dw XT_1MINUS -000b2e 1c20 .dw XT_EXIT - .include "words/recognize.asm" - - ; System - ; walk the recognizer stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RECOGNIZE: -000b2f ff09 .dw $ff09 -000b30 6572 -000b31 6f63 -000b32 6e67 -000b33 7a69 -000b34 0065 .db "recognize",0 -000b35 0b23 .dw VE_HEAD - .set VE_HEAD = VE_RECOGNIZE - XT_RECOGNIZE: -000b36 1c01 .dw DO_COLON - PFA_RECOGNIZE: - .endif -000b37 1c3d .dw XT_DOLITERAL -000b38 0b41 .dw XT_RECOGNIZE_A -000b39 1cc4 .dw XT_SWAP -000b3a 04ee .dw XT_MAPSTACK -000b3b 1d1a .dw XT_ZEROEQUAL -000b3c 1c36 .dw XT_DOCONDBRANCH -000b3d 0b40 DEST(PFA_RECOGNIZE1) -000b3e 05f4 .dw XT_2DROP -000b3f 0bd1 .dw XT_DT_NULL - PFA_RECOGNIZE1: -000b40 1c20 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ; ( addr len XT -- addr len [ dt:xt -1 | 0 ] ) - XT_RECOGNIZE_A: -000b41 1c01 .dw DO_COLON - PFA_RECOGNIZE_A: - .endif -000b42 1ce1 .dw XT_ROT ; -- len xt addr -000b43 1ce1 .dw XT_ROT ; -- xt addr len -000b44 05eb .dw XT_2DUP -000b45 1f1e .dw XT_2TO_R -000b46 1ce1 .dw XT_ROT ; -- addr len xt -000b47 1c2a .dw XT_EXECUTE ; -- i*x dt:* | dt:null -000b48 1f2d .dw XT_2R_FROM -000b49 1ce1 .dw XT_ROT -000b4a 1cb1 .dw XT_DUP -000b4b 0bd1 .dw XT_DT_NULL -000b4c 1fe0 .dw XT_EQUAL -000b4d 1c36 .dw XT_DOCONDBRANCH -000b4e 0b52 DEST(PFA_RECOGNIZE_A1) -000b4f 1cd9 .dw XT_DROP -000b50 1d54 .dw XT_ZERO -000b51 1c20 .dw XT_EXIT - PFA_RECOGNIZE_A1: -000b52 1cf0 .dw XT_NIP -000b53 1cf0 .dw XT_NIP -000b54 1d4b .dw XT_TRUE -000b55 1c20 .dw XT_EXIT - - ; : recognize ( addr len stack-id -- i*x dt:* | dt:null ) - ; [: ( addr len -- addr len 0 | i*x dt:* -1 ) - ; rot rot 2dup 2>r rot execute 2r> rot - ; dup dt:null = ( -- addr len dt:* f ) - ; if drop 0 else nip nip -1 then - ; ;] - ; map-stack ( -- i*x addr len dt:* f ) - ; 0= if \ a recognizer did the job, remove addr/len - ; 2drop dt:null - ; then ; - ; - .include "words/forth-recognizer.asm" - - ; System Value - ; address of the next free data space (RAM) cell - VE_FORTHRECOGNIZER: -000b56 ff10 .dw $ff10 -000b57 6f66 -000b58 7472 -000b59 2d68 -000b5a 6572 -000b5b 6f63 -000b5c 6e67 -000b5d 7a69 -000b5e 7265 .db "forth-recognizer" -000b5f 0b2f .dw VE_HEAD - .set VE_HEAD = VE_FORTHRECOGNIZER - XT_FORTHRECOGNIZER: -000b60 1c6f .dw PFA_DOVALUE1 - PFA_FORTHRECOGNIZER: -000b61 0034 .dw CFG_FORTHRECOGNIZER -000b62 0c3b .dw XT_EDEFERFETCH -000b63 0c45 .dw XT_EDEFERSTORE - .include "words/interpret.asm" - - ; System - ; Interpret SOURCE word by word. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_INTERPRET: -000b64 ff09 .dw $ff09 -000b65 6e69 -000b66 6574 -000b67 7072 -000b68 6572 -000b69 0074 .db "interpret",0 -000b6a 0b56 .dw VE_HEAD - .set VE_HEAD = VE_INTERPRET - XT_INTERPRET: -000b6b 1c01 .dw DO_COLON - .endif - PFA_INTERPRET: -000b6c 0a3b .dw XT_PARSENAME ; ( -- addr len ) -000b6d 1cb1 .dw XT_DUP ; ( -- addr len flag) -000b6e 1c36 .dw XT_DOCONDBRANCH -000b6f 0b7c DEST(PFA_INTERPRET2) -000b70 0b60 .dw XT_FORTHRECOGNIZER -000b71 0b36 .dw XT_RECOGNIZE -000b72 05d0 .dw XT_STATE -000b73 1c79 .dw XT_FETCH -000b74 1c36 .dw XT_DOCONDBRANCH -000b75 0b77 DEST(PFA_INTERPRET1) -000b76 0c32 .dw XT_ICELLPLUS ; we need the compile action - PFA_INTERPRET1: -000b77 1fcb .dw XT_FETCHI -000b78 1c2a .dw XT_EXECUTE -000b79 0bde .dw XT_QSTACK -000b7a 1c2f .dw XT_DOBRANCH -000b7b 0b6c DEST(PFA_INTERPRET) - PFA_INTERPRET2: -000b7c 05f4 .dw XT_2DROP -000b7d 1c20 .dw XT_EXIT - .include "words/rec-intnum.asm" - - ; Interpreter - ; Method table for single cell integers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_NUM: -000b7e ff06 .dw $ff06 -000b7f 7464 -000b80 6e3a -000b81 6d75 .db "dt:num" -000b82 0b64 .dw VE_HEAD - .set VE_HEAD = VE_DT_NUM - XT_DT_NUM: -000b83 1c52 .dw PFA_DOCONSTANT - PFA_DT_NUM: - .endif -000b84 0c06 .dw XT_NOOP ; interpret -000b85 02c4 .dw XT_LITERAL ; compile -000b86 02c4 .dw XT_LITERAL ; postpone - - ; ( -- addr ) - ; Interpreter - ; Method table for double cell integers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_DNUM: -000b87 ff07 .dw $ff07 -000b88 7464 -000b89 643a -000b8a 756e -000b8b 006d .db "dt:dnum",0 -000b8c 0b7e .dw VE_HEAD - .set VE_HEAD = VE_DT_DNUM - XT_DT_DNUM: -000b8d 1c52 .dw PFA_DOCONSTANT - PFA_DT_DNUM: - .endif -000b8e 0c06 .dw XT_NOOP ; interpret -000b8f 1fd8 .dw XT_2LITERAL ; compile -000b90 1fd8 .dw XT_2LITERAL ; postpone - - ; ( addr len -- f ) - ; Interpreter - ; recognizer for integer numbers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_REC_NUM: -000b91 ff07 .dw $ff07 -000b92 6572 -000b93 3a63 -000b94 756e -000b95 006d .db "rec:num",0 -000b96 0b87 .dw VE_HEAD - .set VE_HEAD = VE_REC_NUM - XT_REC_NUM: -000b97 1c01 .dw DO_COLON - PFA_REC_NUM: - .endif - ; try converting to a number -000b98 097b .dw XT_NUMBER -000b99 1c36 .dw XT_DOCONDBRANCH -000b9a 0ba3 DEST(PFA_REC_NONUMBER) -000b9b 1fe7 .dw XT_ONE -000b9c 1fe0 .dw XT_EQUAL -000b9d 1c36 .dw XT_DOCONDBRANCH -000b9e 0ba1 DEST(PFA_REC_INTNUM2) -000b9f 0b83 .dw XT_DT_NUM -000ba0 1c20 .dw XT_EXIT - PFA_REC_INTNUM2: -000ba1 0b8d .dw XT_DT_DNUM -000ba2 1c20 .dw XT_EXIT - PFA_REC_NONUMBER: -000ba3 0bd1 .dw XT_DT_NULL -000ba4 1c20 .dw XT_EXIT - .include "words/rec-find.asm" - - ; Interpreter - ; search for a word - .if cpu_msp430==1 - .endif - .if cpu_avr8==1 - VE_REC_FIND: -000ba5 ff08 .dw $ff08 -000ba6 6572 -000ba7 3a63 -000ba8 6966 -000ba9 646e .db "rec:find" -000baa 0b91 .dw VE_HEAD - .set VE_HEAD = VE_REC_FIND - XT_REC_FIND: -000bab 1c01 .dw DO_COLON - PFA_REC_FIND: - .endif -000bac 0a57 .DW XT_FINDXT -000bad 1cb1 .dw XT_DUP -000bae 1d1a .dw XT_ZEROEQUAL -000baf 1c36 .dw XT_DOCONDBRANCH -000bb0 0bb4 DEST(PFA_REC_WORD_FOUND) -000bb1 1cd9 .dw XT_DROP -000bb2 0bd1 .dw XT_DT_NULL -000bb3 1c20 .dw XT_EXIT - PFA_REC_WORD_FOUND: -000bb4 0bbb .dw XT_DT_XT - -000bb5 1c20 .dw XT_EXIT - - ; ( -- addr ) - ; Interpreter - ; actions to handle execution tokens and their flags - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_XT: -000bb6 ff05 .dw $ff05 -000bb7 7464 -000bb8 783a -000bb9 0074 .db "dt:xt",0 -000bba 0ba5 .dw VE_HEAD - .set VE_HEAD = VE_DT_XT - XT_DT_XT: -000bbb 1c52 .dw PFA_DOCONSTANT - PFA_DT_XT: - .endif -000bbc 0bbf .dw XT_R_WORD_INTERPRET -000bbd 0bc3 .dw XT_R_WORD_COMPILE -000bbe 1fd8 .dw XT_2LITERAL - - ; ( XT flags -- ) - ; Interpreter - ; interpret method for WORD recognizer - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_R_WORD_INTERPRET: -000bbf 1c01 .dw DO_COLON - PFA_R_WORD_INTERPRET: - .endif -000bc0 1cd9 .dw XT_DROP ; the flags are in the way -000bc1 1c2a .dw XT_EXECUTE -000bc2 1c20 .dw XT_EXIT - - ; ( XT flags -- ) - ; Interpreter - ; Compile method for WORD recognizer - .if cpu_msp430==1 - .endif - .if cpu_avr8==1 - XT_R_WORD_COMPILE: -000bc3 1c01 .dw DO_COLON - PFA_R_WORD_COMPILE: - .endif -000bc4 1d21 .dw XT_ZEROLESS -000bc5 1c36 .dw XT_DOCONDBRANCH -000bc6 0bc9 DEST(PFA_R_WORD_COMPILE1) -000bc7 02ae .dw XT_COMMA -000bc8 1c20 .dw XT_EXIT - PFA_R_WORD_COMPILE1: -000bc9 1c2a .dw XT_EXECUTE -000bca 1c20 .dw XT_EXIT - .include "words/dt-null.asm" - - ; Interpreter - ; there is no parser for this recognizer, this is the default and failsafe part - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_NULL: -000bcb ff07 .dw $ff07 -000bcc 7464 -000bcd 6e3a -000bce 6c75 -../../common\words/dt-null.asm(12): warning: .cseg .db misalignment - padding zero byte -000bcf 006c .db "dt:null" -000bd0 0bb6 .dw VE_HEAD - .set VE_HEAD = VE_DT_NULL - XT_DT_NULL: -000bd1 1c52 .dw PFA_DOCONSTANT - PFA_DT_NULL: - .endif -000bd2 0bd5 .dw XT_FAIL ; interpret -000bd3 0bd5 .dw XT_FAIL ; compile -000bd4 0bd5 .dw XT_FAIL ; postpone - - ; ( addr len -- ) - ; Interpreter - ; default failure action: throw exception -13. - .if cpu_msp430==1 - .endif - .if cpu_avr8==1 - ;VE_FAIL: - ; .dw $ff04 - ; .db "fail" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_FAIL - XT_FAIL: -000bd5 1c01 .dw DO_COLON - PFA_FAIL: - .endif -000bd6 1c3d .dw XT_DOLITERAL -000bd7 fff3 .dw -13 -000bd8 08c8 .dw XT_THROW - - .include "words/q-stack.asm" - - ; Tools - ; check data stack depth and exit to quit if underrun - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QSTACK: -000bd9 ff06 .dw $ff06 -000bda 733f -000bdb 6174 -000bdc 6b63 .db "?stack" -000bdd 0bcb .dw VE_HEAD - .set VE_HEAD = VE_QSTACK - XT_QSTACK: -000bde 1c01 .dw DO_COLON - PFA_QSTACK: - .endif -000bdf 0b28 .dw XT_DEPTH -000be0 1d21 .dw XT_ZEROLESS -000be1 1c36 .dw XT_DOCONDBRANCH -000be2 0be6 DEST(PFA_QSTACK1) -000be3 1c3d .dw XT_DOLITERAL -000be4 fffc .dw -4 -000be5 08c8 .dw XT_THROW - PFA_QSTACK1: -000be6 1c20 .dw XT_EXIT - .include "words/ver.asm" - - ; Tools - ; print the version string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOT_VER: -000be7 ff03 .dw $ff03 -000be8 6576 -../../common\words/ver.asm(12): warning: .cseg .db misalignment - padding zero byte -000be9 0072 .db "ver" -000bea 0bd9 .dw VE_HEAD - .set VE_HEAD = VE_DOT_VER - XT_DOT_VER: -000beb 1c01 .dw DO_COLON - PFA_DOT_VER: - .endif -000bec 0592 .dw XT_ENV_FORTHNAME -000bed 0827 .dw XT_ITYPE -000bee 0869 .dw XT_SPACE -000bef 05d6 .dw XT_BASE -000bf0 1c79 .dw XT_FETCH - -000bf1 05a0 .dw XT_ENV_FORTHVERSION -000bf2 0663 .dw XT_DECIMAL -000bf3 0dee .dw XT_S2D -000bf4 0745 .dw XT_L_SHARP -000bf5 074d .dw XT_SHARP -000bf6 1c3d .dw XT_DOLITERAL -000bf7 002e .dw '.' -000bf8 0736 .dw XT_HOLD -000bf9 0763 .dw XT_SHARP_S -000bfa 076e .dw XT_SHARP_G -000bfb 0882 .dw XT_TYPE -000bfc 05d6 .dw XT_BASE -000bfd 1c81 .dw XT_STORE -000bfe 0869 .dw XT_SPACE -000bff 05a8 .dw XT_ENV_CPU -000c00 0827 .dw XT_ITYPE - -000c01 1c20 .dw XT_EXIT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/noop.asm" - - ; Tools - ; do nothing - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NOOP: -000c02 ff04 .dw $ff04 -000c03 6f6e -000c04 706f .db "noop" -000c05 0be7 .dw VE_HEAD - .set VE_HEAD = VE_NOOP - XT_NOOP: -000c06 1c01 .dw DO_COLON - PFA_NOOP: - .endif -000c07 1c20 .DW XT_EXIT - .include "words/unused.asm" - - ; Tools - ; Amount of available RAM (incl. PAD) - VE_UNUSED: -000c08 ff06 .dw $ff06 -000c09 6e75 -000c0a 7375 -000c0b 6465 .db "unused" -000c0c 0c02 .dw VE_HEAD - .set VE_HEAD = VE_UNUSED - XT_UNUSED: -000c0d 1c01 .dw DO_COLON - PFA_UNUSED: -000c0e 1e8d .dw XT_SP_FETCH -000c0f 0645 .dw XT_HERE -000c10 1d93 .dw XT_MINUS -000c11 1c20 .dw XT_EXIT - - .include "words/to.asm" - - ; Tools - ; store the TOS to the named value (eeprom cell) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO: -000c12 0002 .dw $0002 -000c13 6f74 .db "to" -000c14 0c08 .dw VE_HEAD - .set VE_HEAD = VE_TO - XT_TO: -000c15 1c01 .dw DO_COLON - PFA_TO: - .endif -000c16 0891 .dw XT_TICK -000c17 0df7 .dw XT_TO_BODY -000c18 05d0 .dw XT_STATE -000c19 1c79 .dw XT_FETCH -000c1a 1c36 .dw XT_DOCONDBRANCH -000c1b 0c26 DEST(PFA_TO1) -000c1c 02a3 .dw XT_COMPILE -000c1d 0c20 .dw XT_DOTO -000c1e 02ae .dw XT_COMMA -000c1f 1c20 .dw XT_EXIT - - ; ( n -- ) (R: IP -- IP+1) - ; Tools - ; runtime portion of to - ;VE_DOTO: - ; .dw $ff04 - ; .db "(to)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOTO - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - XT_DOTO: -000c20 1c01 .dw DO_COLON - PFA_DOTO: - .endif -000c21 1cf6 .dw XT_R_FROM -000c22 1cb1 .dw XT_DUP -000c23 0c32 .dw XT_ICELLPLUS -000c24 1cff .dw XT_TO_R -000c25 1fcb .dw XT_FETCHI - PFA_TO1: -000c26 1cb1 .dw XT_DUP -000c27 0c32 .dw XT_ICELLPLUS -000c28 0c32 .dw XT_ICELLPLUS -000c29 1fcb .dw XT_FETCHI -000c2a 1c2a .dw XT_EXECUTE -000c2b 1c20 .dw XT_EXIT - .include "words/i-cellplus.asm" - - ; Compiler - ; skip to the next cell in flash - VE_ICELLPLUS: -000c2c ff07 .dw $FF07 -000c2d 2d69 -000c2e 6563 -000c2f 6c6c -000c30 002b .db "i-cell+",0 -000c31 0c12 .dw VE_HEAD - .set VE_HEAD = VE_ICELLPLUS - XT_ICELLPLUS: -000c32 1c01 .dw DO_COLON - PFA_ICELLPLUS: -000c33 1e2f .dw XT_1PLUS -000c34 1c20 .dw XT_EXIT - - .include "words/edefer-fetch.asm" - - ; System - ; does the real defer@ for eeprom defers - VE_EDEFERFETCH: -000c35 ff07 .dw $ff07 -000c36 6445 -000c37 6665 -000c38 7265 -000c39 0040 .db "Edefer@",0 -000c3a 0c2c .dw VE_HEAD - .set VE_HEAD = VE_EDEFERFETCH - XT_EDEFERFETCH: -000c3b 1c01 .dw DO_COLON - PFA_EDEFERFETCH: -000c3c 1fcb .dw XT_FETCHI -000c3d 1f5f .dw XT_FETCHE -000c3e 1c20 .dw XT_EXIT - .include "words/edefer-store.asm" - - ; System - ; does the real defer! for eeprom defers - VE_EDEFERSTORE: -000c3f ff07 .dw $ff07 -000c40 6445 -000c41 6665 -000c42 7265 -000c43 0021 .db "Edefer!",0 -000c44 0c35 .dw VE_HEAD - .set VE_HEAD = VE_EDEFERSTORE - XT_EDEFERSTORE: -000c45 1c01 .dw DO_COLON - PFA_EDEFERSTORE: -000c46 1fcb .dw XT_FETCHI -000c47 1f3b .dw XT_STOREE -000c48 1c20 .dw XT_EXIT - .include "words/rdefer-fetch.asm" - - ; System - ; The defer@ for ram defers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RDEFERFETCH: -000c49 ff07 .dw $ff07 -000c4a 6452 -000c4b 6665 -000c4c 7265 -000c4d 0040 .db "Rdefer@",0 -000c4e 0c3f .dw VE_HEAD - .set VE_HEAD = VE_RDEFERFETCH - XT_RDEFERFETCH: -000c4f 1c01 .dw DO_COLON - PFA_RDEFERFETCH: - .endif -000c50 1fcb .dw XT_FETCHI -000c51 1c79 .dw XT_FETCH -000c52 1c20 .dw XT_EXIT - .include "words/rdefer-store.asm" - - ; System - ; The defer! for ram defers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RDEFERSTORE: -000c53 ff07 .dw $ff07 -000c54 6452 -000c55 6665 -000c56 7265 -000c57 0021 .db "Rdefer!",0 -000c58 0c49 .dw VE_HEAD - .set VE_HEAD = VE_RDEFERSTORE - XT_RDEFERSTORE: -000c59 1c01 .dw DO_COLON - PFA_RDEFERSTORE: - .endif -000c5a 1fcb .dw XT_FETCHI -000c5b 1c81 .dw XT_STORE -000c5c 1c20 .dw XT_EXIT - - .include "words/udefer-fetch.asm" - - ; System - ; does the real defer@ for user based defers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDEFERFETCH: -000c5d ff07 .dw $ff07 -000c5e 6455 -000c5f 6665 -000c60 7265 -000c61 0040 .db "Udefer@",0 -000c62 0c53 .dw VE_HEAD - .set VE_HEAD = VE_UDEFERFETCH - XT_UDEFERFETCH: -000c63 1c01 .dw DO_COLON - PFA_UDEFERFETCH: - .endif -000c64 1fcb .dw XT_FETCHI -000c65 1f02 .dw XT_UP_FETCH -000c66 1d9d .dw XT_PLUS -000c67 1c79 .dw XT_FETCH -000c68 1c20 .dw XT_EXIT - .include "words/udefer-store.asm" - - ; System - ; does the real defer! for user based defers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDEFERSTORE: -000c69 ff07 .dw $ff07 -000c6a 6455 -000c6b 6665 -000c6c 7265 -000c6d 0021 .db "Udefer!",0 -000c6e 0c5d .dw VE_HEAD - .set VE_HEAD = VE_UDEFERSTORE - XT_UDEFERSTORE: -000c6f 1c01 .dw DO_COLON - PFA_UDEFERSTORE: - .endif - -000c70 1fcb .dw XT_FETCHI -000c71 1f02 .dw XT_UP_FETCH -000c72 1d9d .dw XT_PLUS -000c73 1c81 .dw XT_STORE -000c74 1c20 .dw XT_EXIT - - .include "words/defer-store.asm" - - ; System - ; stores xt1 as the xt to be executed when xt2 is called - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DEFERSTORE: -000c75 ff06 .dw $ff06 -000c76 6564 -000c77 6566 -000c78 2172 .db "defer!" -000c79 0c69 .dw VE_HEAD - .set VE_HEAD = VE_DEFERSTORE - XT_DEFERSTORE: -000c7a 1c01 .dw DO_COLON - PFA_DEFERSTORE: - .endif -000c7b 0df7 .dw XT_TO_BODY -000c7c 1cb1 .dw XT_DUP -000c7d 0c32 .dw XT_ICELLPLUS -000c7e 0c32 .dw XT_ICELLPLUS -000c7f 1fcb .dw XT_FETCHI -000c80 1c2a .dw XT_EXECUTE -000c81 1c20 .dw XT_EXIT - - .include "words/defer-fetch.asm" - - ; System - ; returns the XT associated with the given XT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DEFERFETCH: -000c82 ff06 .dw $ff06 -000c83 6564 -000c84 6566 -000c85 4072 .db "defer@" -000c86 0c75 .dw VE_HEAD - .set VE_HEAD = VE_DEFERFETCH - XT_DEFERFETCH: -000c87 1c01 .dw DO_COLON - PFA_DEFERFETCH: - .endif -000c88 0df7 .dw XT_TO_BODY -000c89 1cb1 .dw XT_DUP -000c8a 0c32 .dw XT_ICELLPLUS -000c8b 1fcb .dw XT_FETCHI -000c8c 1c2a .dw XT_EXECUTE -000c8d 1c20 .dw XT_EXIT - .include "words/do-defer.asm" - - ; System - ; runtime of defer - VE_DODEFER: -000c8e ff07 .dw $ff07 -000c8f 6428 -000c90 6665 -000c91 7265 -000c92 0029 .db "(defer)", 0 -000c93 0c82 .dw VE_HEAD - .set VE_HEAD = VE_DODEFER - XT_DODEFER: -000c94 1c01 .dw DO_COLON - PFA_DODEFER: -000c95 0280 .dw XT_DOCREATE -000c96 03e0 .dw XT_REVEAL -000c97 02a3 .dw XT_COMPILE -000c98 0c9a .dw PFA_DODEFER1 -000c99 1c20 .dw XT_EXIT - PFA_DODEFER1: -000c9a 940e 03f9 call_ DO_DODOES -000c9c 1cb1 .dw XT_DUP -000c9d 0c32 .dw XT_ICELLPLUS -000c9e 1fcb .dw XT_FETCHI -000c9f 1c2a .dw XT_EXECUTE -000ca0 1c2a .dw XT_EXECUTE -000ca1 1c20 .dw XT_EXIT - - ; : (defer) dup i-cell+ @i execute execute ; - - - .include "words/search-wordlist.asm" - - ; Search Order - ; searches the word list wid for the word at c-addr/len - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SEARCH_WORDLIST: -000ca2 ff0f .dw $ff0f -000ca3 6573 -000ca4 7261 -000ca5 6863 -000ca6 772d -000ca7 726f -000ca8 6c64 -000ca9 7369 -000caa 0074 .db "search-wordlist",0 -000cab 0c8e .dw VE_HEAD - .set VE_HEAD = VE_SEARCH_WORDLIST - XT_SEARCH_WORDLIST: -000cac 1c01 .dw DO_COLON - PFA_SEARCH_WORDLIST: - .endif -000cad 1cff .dw XT_TO_R -000cae 1d54 .dw XT_ZERO -000caf 1c3d .dw XT_DOLITERAL -000cb0 0cc1 .dw XT_ISWORD -000cb1 1cf6 .dw XT_R_FROM -000cb2 0cde .dw XT_TRAVERSEWORDLIST -000cb3 1cb1 .dw XT_DUP -000cb4 1d1a .dw XT_ZEROEQUAL -000cb5 1c36 .dw XT_DOCONDBRANCH -000cb6 0cbb DEST(PFA_SEARCH_WORDLIST1) -000cb7 05f4 .dw XT_2DROP -000cb8 1cd9 .dw XT_DROP -000cb9 1d54 .dw XT_ZERO -000cba 1c20 .dw XT_EXIT - PFA_SEARCH_WORDLIST1: - ; ... get the XT ... -000cbb 1cb1 .dw XT_DUP -000cbc 0d05 .dw XT_NFA2CFA - ; .. and get the header flag -000cbd 1cc4 .dw XT_SWAP -000cbe 0175 .dw XT_NAME2FLAGS -000cbf 0163 .dw XT_IMMEDIATEQ -000cc0 1c20 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_ISWORD: -000cc1 1c01 .dw DO_COLON - PFA_ISWORD: - .endif - ; ( c-addr len 0 nt -- c-addr len 0 true| nt false ) -000cc2 1cff .dw XT_TO_R -000cc3 1cd9 .dw XT_DROP -000cc4 05eb .dw XT_2DUP -000cc5 1d08 .dw XT_R_FETCH ; -- addr len addr len nt -000cc6 0cf9 .dw XT_NAME2STRING -000cc7 0d0f .dw XT_ICOMPARE ; (-- addr len f ) -000cc8 1c36 .dw XT_DOCONDBRANCH -000cc9 0ccf DEST(PFA_ISWORD3) - ; not now -000cca 1cf6 .dw XT_R_FROM -000ccb 1cd9 .dw XT_DROP -000ccc 1d54 .dw XT_ZERO -000ccd 1d4b .dw XT_TRUE ; maybe next word -000cce 1c20 .dw XT_EXIT - PFA_ISWORD3: - ; we found the word, now clean up iteration data ... -000ccf 05f4 .dw XT_2DROP -000cd0 1cf6 .dw XT_R_FROM -000cd1 1d54 .dw XT_ZERO ; finish traverse-wordlist -000cd2 1c20 .dw XT_EXIT - .include "words/traverse-wordlist.asm" - - ; Tools Ext (2012) - ; call the xt for every member of the wordlist wid until xt returns false - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TRAVERSEWORDLIST: -000cd3 ff11 .dw $ff11 -000cd4 7274 -000cd5 7661 -000cd6 7265 -000cd7 6573 -000cd8 772d -000cd9 726f -000cda 6c64 -000cdb 7369 -000cdc 0074 .db "traverse-wordlist",0 -000cdd 0ca2 .dw VE_HEAD - .set VE_HEAD = VE_TRAVERSEWORDLIST - XT_TRAVERSEWORDLIST: -000cde 1c01 .dw DO_COLON - PFA_TRAVERSEWORDLIST: - - .endif -000cdf 1f5f .dw XT_FETCHE - PFA_TRAVERSEWORDLIST1: -000ce0 1cb1 .dw XT_DUP ; ( -- xt nt nt ) -000ce1 1c36 .dw XT_DOCONDBRANCH ; ( -- nt ) is nfa = counted string -000ce2 0cef DEST(PFA_TRAVERSEWORDLIST2) -000ce3 05eb .dw XT_2DUP -000ce4 1f1e .dw XT_2TO_R -000ce5 1cc4 .dw XT_SWAP -000ce6 1c2a .dw XT_EXECUTE -000ce7 1f2d .dw XT_2R_FROM -000ce8 1ce1 .dw XT_ROT -000ce9 1c36 .dw XT_DOCONDBRANCH -000cea 0cef DEST(PFA_TRAVERSEWORDLIST2) -000ceb 055d .dw XT_NFA2LFA -000cec 1fcb .dw XT_FETCHI -000ced 1c2f .dw XT_DOBRANCH ; ( -- addr ) -000cee 0ce0 DEST(PFA_TRAVERSEWORDLIST1) ; ( -- addr ) - PFA_TRAVERSEWORDLIST2: -000cef 05f4 .dw XT_2DROP -000cf0 1c20 .dw XT_EXIT - - ; : traverse-wordlist ( i*x xt wid -- i*x' ) - ; begin @ dup - ; while - ; 2dup 2>r - ; swap execute ( i*x nt -- i*x' f ) - ; 2r> rot - ; while - ; nfa>lfa @i - ; repeat then 2drop ; - .include "words/name2string.asm" - - ; Tools Ext (2012) - ; get a (flash) string from a name token nt - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NAME2STRING: -000cf1 ff0b .dw $ff0b -000cf2 616e -000cf3 656d -000cf4 733e -000cf5 7274 -000cf6 6e69 -000cf7 0067 .db "name>string",0 -000cf8 0cd3 .dw VE_HEAD - .set VE_HEAD = VE_NAME2STRING - XT_NAME2STRING: -000cf9 1c01 .dw DO_COLON - PFA_NAME2STRING: - - .endif -000cfa 0853 .dw XT_ICOUNT ; ( -- addr n ) -000cfb 1c3d .dw XT_DOLITERAL -000cfc 00ff .dw 255 -000cfd 1e13 .dw XT_AND ; mask immediate bit -000cfe 1c20 .dw XT_EXIT - .include "words/nfa2cfa.asm" - - ; Tools - ; get the XT from a name token - VE_NFA2CFA: -000cff ff07 .dw $ff07 -000d00 666e -000d01 3e61 -000d02 6663 -../../avr8\words/nfa2cfa.asm(6): warning: .cseg .db misalignment - padding zero byte -000d03 0061 .db "nfa>cfa" -000d04 0cf1 .dw VE_HEAD - .set VE_HEAD = VE_NFA2CFA - XT_NFA2CFA: -000d05 1c01 .dw DO_COLON - PFA_NFA2CFA: -000d06 055d .dw XT_NFA2LFA ; skip to link field -000d07 1e2f .dw XT_1PLUS ; next is the execution token -000d08 1c20 .dw XT_EXIT - .include "words/icompare.asm" - - ; Tools - ; compares string in RAM with string in flash. f is zero if equal like COMPARE - VE_ICOMPARE: -000d09 ff08 .dw $ff08 -000d0a 6369 -000d0b 6d6f -000d0c 6170 -000d0d 6572 .db "icompare" -000d0e 0cff .dw VE_HEAD - .set VE_HEAD = VE_ICOMPARE - XT_ICOMPARE: -000d0f 1c01 .dw DO_COLON - PFA_ICOMPARE: -000d10 1cff .dw XT_TO_R ; ( -- r-addr r-len f-addr) -000d11 1ccf .dw XT_OVER ; ( -- r-addr r-len f-addr r-len) -000d12 1cf6 .dw XT_R_FROM ; ( -- r-addr r-len f-addr r-len f-len ) -000d13 1d13 .dw XT_NOTEQUAL ; ( -- r-addr r-len f-addr flag ) -000d14 1c36 .dw XT_DOCONDBRANCH -000d15 0d1a .dw PFA_ICOMPARE_SAMELEN -000d16 05f4 .dw XT_2DROP -000d17 1cd9 .dw XT_DROP -000d18 1d4b .dw XT_TRUE -000d19 1c20 .dw XT_EXIT - PFA_ICOMPARE_SAMELEN: -000d1a 1cc4 .dw XT_SWAP ; ( -- r-addr f-addr len ) -000d1b 1d54 .dw XT_ZERO -000d1c 036d .dw XT_QDOCHECK -000d1d 1c36 .dw XT_DOCONDBRANCH -000d1e 0d3d .dw PFA_ICOMPARE_DONE -000d1f 1e9b .dw XT_DODO - PFA_ICOMPARE_LOOP: - ; ( r-addr f-addr --) -000d20 1ccf .dw XT_OVER -000d21 1c79 .dw XT_FETCH - .if WANT_IGNORECASE == 1 - .endif -000d22 1ccf .dw XT_OVER -000d23 1fcb .dw XT_FETCHI ; ( -- r-addr f-addr r-cc f- cc) - .if WANT_IGNORECASE == 1 - .endif - ; flash strings are zero-padded at the last cell - ; that means: if the flash cell is less $0100, than mask the - ; high byte in the ram cell -000d24 1cb1 .dw XT_DUP - ;.dw XT_BYTESWAP -000d25 1c3d .dw XT_DOLITERAL -000d26 0100 .dw $100 -000d27 1d5c .dw XT_ULESS -000d28 1c36 .dw XT_DOCONDBRANCH -000d29 0d2e .dw PFA_ICOMPARE_LASTCELL -000d2a 1cc4 .dw XT_SWAP -000d2b 1c3d .dw XT_DOLITERAL -000d2c 00ff .dw $00FF -000d2d 1e13 .dw XT_AND ; the final swap can be omitted - PFA_ICOMPARE_LASTCELL: -000d2e 1d13 .dw XT_NOTEQUAL -000d2f 1c36 .dw XT_DOCONDBRANCH -000d30 0d35 .dw PFA_ICOMPARE_NEXTLOOP -000d31 05f4 .dw XT_2DROP -000d32 1d4b .dw XT_TRUE -000d33 1ed4 .dw XT_UNLOOP -000d34 1c20 .dw XT_EXIT - PFA_ICOMPARE_NEXTLOOP: -000d35 1e2f .dw XT_1PLUS -000d36 1cc4 .dw XT_SWAP -000d37 05e3 .dw XT_CELLPLUS -000d38 1cc4 .dw XT_SWAP -000d39 1c3d .dw XT_DOLITERAL -000d3a 0002 .dw 2 -000d3b 1eba .dw XT_DOPLUSLOOP -000d3c 0d20 .dw PFA_ICOMPARE_LOOP - PFA_ICOMPARE_DONE: -000d3d 05f4 .dw XT_2DROP -000d3e 1d54 .dw XT_ZERO -000d3f 1c20 .dw XT_EXIT - - .if WANT_IGNORECASE == 1 - .endif - - .include "words/star.asm" - - ; Arithmetics - ; multiply routine - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_STAR: -000d40 ff01 .dw $ff01 -000d41 002a .db "*",0 -000d42 0d09 .dw VE_HEAD - .set VE_HEAD = VE_STAR - XT_STAR: -000d43 1c01 .dw DO_COLON - PFA_STAR: - .endif - -000d44 1da6 .dw XT_MSTAR -000d45 1cd9 .dw XT_DROP -000d46 1c20 .dw XT_EXIT - .include "words/j.asm" - - ; Compiler - ; loop counter of outer loop - VE_J: -000d47 ff01 .dw $FF01 -000d48 006a .db "j",0 -000d49 0d40 .dw VE_HEAD - .set VE_HEAD = VE_J - XT_J: -000d4a 1c01 .dw DO_COLON - PFA_J: -000d4b 1e76 .dw XT_RP_FETCH -000d4c 1c3d .dw XT_DOLITERAL -000d4d 0007 .dw 7 -000d4e 1d9d .dw XT_PLUS -000d4f 1c79 .dw XT_FETCH -000d50 1e76 .dw XT_RP_FETCH -000d51 1c3d .dw XT_DOLITERAL -000d52 0009 .dw 9 -000d53 1d9d .dw XT_PLUS -000d54 1c79 .dw XT_FETCH -000d55 1d9d .dw XT_PLUS -000d56 1c20 .dw XT_EXIT - - .include "words/dabs.asm" - - ; Arithmetics - ; double cell absolute value - VE_DABS: -000d57 ff04 .dw $ff04 -000d58 6164 -000d59 7362 .db "dabs" -000d5a 0d47 .dw VE_HEAD - .set VE_HEAD = VE_DABS - XT_DABS: -000d5b 1c01 .dw DO_COLON - PFA_DABS: -000d5c 1cb1 .dw XT_DUP -000d5d 1d21 .dw XT_ZEROLESS -000d5e 1c36 .dw XT_DOCONDBRANCH -000d5f 0d61 .dw PFA_DABS1 -000d60 0d68 .dw XT_DNEGATE - PFA_DABS1: -000d61 1c20 .dw XT_EXIT - ; : dabs ( ud1 -- +d2 ) dup 0< if dnegate then ; - .include "words/dnegate.asm" - - ; Arithmetics - ; double cell negation - VE_DNEGATE: -000d62 ff07 .dw $ff07 -000d63 6e64 -000d64 6765 -000d65 7461 -000d66 0065 .db "dnegate",0 -000d67 0d57 .dw VE_HEAD - .set VE_HEAD = VE_DNEGATE - XT_DNEGATE: -000d68 1c01 .dw DO_COLON - PFA_DNEGATE: -000d69 01c4 .dw XT_DINVERT -000d6a 1fe7 .dw XT_ONE -000d6b 1d54 .dw XT_ZERO -000d6c 019c .dw XT_DPLUS -000d6d 1c20 .dw XT_EXIT - ; : dnegate ( ud1 -- ud2 ) dinvert 1. d+ ; - .include "words/cmove.asm" - - ; Memory - ; copy data in RAM, from lower to higher addresses - VE_CMOVE: -000d6e ff05 .dw $ff05 -000d6f 6d63 -000d70 766f -000d71 0065 .db "cmove",0 -000d72 0d62 .dw VE_HEAD - .set VE_HEAD = VE_CMOVE - XT_CMOVE: -000d73 0d74 .dw PFA_CMOVE - PFA_CMOVE: -000d74 93bf push xh -000d75 93af push xl -000d76 91e9 ld zl, Y+ -000d77 91f9 ld zh, Y+ ; addr-to -000d78 91a9 ld xl, Y+ -000d79 91b9 ld xh, Y+ ; addr-from -000d7a 2f09 mov temp0, tosh -000d7b 2b08 or temp0, tosl -000d7c f021 brbs 1, PFA_CMOVE1 - PFA_CMOVE2: -000d7d 911d ld temp1, X+ -000d7e 9311 st Z+, temp1 -000d7f 9701 sbiw tosl, 1 -000d80 f7e1 brbc 1, PFA_CMOVE2 - PFA_CMOVE1: -000d81 91af pop xl -000d82 91bf pop xh -000d83 9189 -000d84 9199 loadtos -000d85 940c 1c05 jmp_ DO_NEXT - .include "words/2swap.asm" - - ; Stack - ; Exchange the two top cell pairs - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2SWAP: -000d87 ff05 .dw $ff05 -000d88 7332 -000d89 6177 -000d8a 0070 .db "2swap",0 -000d8b 0d6e .dw VE_HEAD - .set VE_HEAD = VE_2SWAP - XT_2SWAP: -000d8c 1c01 .dw DO_COLON - PFA_2SWAP: - - .endif -000d8d 1ce1 .dw XT_ROT -000d8e 1cff .dw XT_TO_R -000d8f 1ce1 .dw XT_ROT -000d90 1cf6 .dw XT_R_FROM -000d91 1c20 .dw XT_EXIT - - .include "words/tib.asm" - - ; System - ; refills the input buffer - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_REFILLTIB: -000d92 ff0a .dw $ff0a -000d93 6572 -000d94 6966 -000d95 6c6c -000d96 742d -000d97 6269 .db "refill-tib" -000d98 0d87 .dw VE_HEAD - .set VE_HEAD = VE_REFILLTIB - XT_REFILLTIB: -000d99 1c01 .dw DO_COLON - PFA_REFILLTIB: - .endif -000d9a 0db5 .dw XT_TIB -000d9b 1c3d .dw XT_DOLITERAL -000d9c 005a .dw TIB_SIZE -000d9d 0918 .dw XT_ACCEPT -000d9e 0dbb .dw XT_NUMBERTIB -000d9f 1c81 .dw XT_STORE -000da0 1d54 .dw XT_ZERO -000da1 0604 .dw XT_TO_IN -000da2 1c81 .dw XT_STORE -000da3 1d4b .dw XT_TRUE ; -1 -000da4 1c20 .dw XT_EXIT - - ; ( -- addr n ) - ; System - ; address and current length of the input buffer - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SOURCETIB: -000da5 ff0a .dw $FF0A -000da6 6f73 -000da7 7275 -000da8 6563 -000da9 742d -000daa 6269 .db "source-tib" -000dab 0d92 .dw VE_HEAD - .set VE_HEAD = VE_SOURCETIB - XT_SOURCETIB: -000dac 1c01 .dw DO_COLON - PFA_SOURCETIB: - .endif -000dad 0db5 .dw XT_TIB -000dae 0dbb .dw XT_NUMBERTIB -000daf 1c79 .dw XT_FETCH -000db0 1c20 .dw XT_EXIT - - ; ( -- addr ) - ; System Variable - ; terminal input buffer address - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TIB: -000db1 ff03 .dw $ff03 -000db2 6974 -000db3 0062 .db "tib",0 -000db4 0da5 .dw VE_HEAD - .set VE_HEAD = VE_TIB - XT_TIB: -000db5 1c48 .dw PFA_DOVARIABLE - PFA_TIB: -000db6 00c1 .dw ram_tib - .dseg -0000c1 ram_tib: .byte TIB_SIZE - .cseg - .endif - - ; ( -- addr ) - ; System Variable - ; variable holding the number of characters in TIB - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NUMBERTIB: -000db7 ff04 .dw $ff04 -000db8 7423 -000db9 6269 .db "#tib" -000dba 0db1 .dw VE_HEAD - .set VE_HEAD = VE_NUMBERTIB - XT_NUMBERTIB: -000dbb 1c48 .dw PFA_DOVARIABLE - PFA_NUMBERTIB: -000dbc 011b .dw ram_sharptib - .dseg -00011b ram_sharptib: .byte 2 - .cseg - .endif - - .include "words/init-ram.asm" - - ; Tools - ; copy len cells from eeprom to ram - VE_EE2RAM: -000dbd ff06 .dw $ff06 -000dbe 6565 -000dbf 723e -000dc0 6d61 .db "ee>ram" -000dc1 0db7 .dw VE_HEAD - .set VE_HEAD = VE_EE2RAM - XT_EE2RAM: -000dc2 1c01 .dw DO_COLON - PFA_EE2RAM: ; ( -- ) -000dc3 1d54 .dw XT_ZERO -000dc4 1e9b .dw XT_DODO - PFA_EE2RAM_1: - ; ( -- e-addr r-addr ) -000dc5 1ccf .dw XT_OVER -000dc6 1f5f .dw XT_FETCHE -000dc7 1ccf .dw XT_OVER -000dc8 1c81 .dw XT_STORE -000dc9 05e3 .dw XT_CELLPLUS -000dca 1cc4 .dw XT_SWAP -000dcb 05e3 .dw XT_CELLPLUS -000dcc 1cc4 .dw XT_SWAP -000dcd 1ec9 .dw XT_DOLOOP -000dce 0dc5 .dw PFA_EE2RAM_1 - PFA_EE2RAM_2: -000dcf 05f4 .dw XT_2DROP -000dd0 1c20 .dw XT_EXIT - - ; ( -- ) - ; Tools - ; setup the default user area from eeprom - VE_INIT_RAM: -000dd1 ff08 .dw $ff08 -000dd2 6e69 -000dd3 7469 -000dd4 722d -000dd5 6d61 .db "init-ram" -000dd6 0dbd .dw VE_HEAD - .set VE_HEAD = VE_INIT_RAM - XT_INIT_RAM: -000dd7 1c01 .dw DO_COLON - PFA_INI_RAM: ; ( -- ) -000dd8 1c3d .dw XT_DOLITERAL -000dd9 0060 .dw EE_INITUSER -000dda 1f02 .dw XT_UP_FETCH -000ddb 1c3d .dw XT_DOLITERAL -000ddc 0022 .dw SYSUSERSIZE -000ddd 1e04 .dw XT_2SLASH -000dde 0dc2 .dw XT_EE2RAM -000ddf 1c20 .dw XT_EXIT - .include "words/bounds.asm" - - ; Tools - ; convert a string to an address range - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BOUNDS: -000de0 ff06 .dw $ff06 -000de1 6f62 -000de2 6e75 -000de3 7364 .db "bounds" -000de4 0dd1 .dw VE_HEAD - .set VE_HEAD = VE_BOUNDS - XT_BOUNDS: -000de5 1c01 .dw DO_COLON - PFA_BOUNDS: - .endif -000de6 1ccf .dw XT_OVER -000de7 1d9d .dw XT_PLUS -000de8 1cc4 .dw XT_SWAP -000de9 1c20 .dw XT_EXIT - .include "words/s-to-d.asm" - - ; Conversion - ; extend (signed) single cell value to double cell - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_S2D: -000dea ff03 .dw $ff03 -000deb 3e73 -000dec 0064 .db "s>d",0 -000ded 0de0 .dw VE_HEAD - .set VE_HEAD = VE_S2D - XT_S2D: -000dee 1c01 .dw DO_COLON - PFA_S2D: - .endif -000def 1cb1 .dw XT_DUP -000df0 1d21 .dw XT_ZEROLESS -000df1 1c20 .dw XT_EXIT - .include "words/to-body.asm" - - ; Core - ; get body from XT - VE_TO_BODY: -000df2 ff05 .dw $ff05 -000df3 623e -000df4 646f -000df5 0079 .db ">body",0 -000df6 0dea .dw VE_HEAD - .set VE_HEAD = VE_TO_BODY - XT_TO_BODY: -000df7 1e30 .dw PFA_1PLUS - .else - .endif - .include "dict_appl.inc" - - ; they may be moved to the core dictionary if needed - .include "words/dot-s.asm" - - ; Tools - ; stack dump - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOTS: -000df8 ff02 .dw $ff02 -000df9 732e .db ".s" -000dfa 0df2 .dw VE_HEAD - .set VE_HEAD = VE_DOTS - XT_DOTS: -000dfb 1c01 .dw DO_COLON - PFA_DOTS: - .endif -000dfc 0b28 .dw XT_DEPTH -000dfd 01d2 .dw XT_UDOT -000dfe 0869 .dw XT_SPACE -000dff 0b28 .dw XT_DEPTH -000e00 1d54 .dw XT_ZERO -000e01 036d .dw XT_QDOCHECK -000e02 1c36 .dw XT_DOCONDBRANCH -000e03 0e0a DEST(PFA_DOTS2) -000e04 1e9b .dw XT_DODO - PFA_DOTS1: -000e05 1eac .dw XT_I -000e06 023d .dw XT_PICK -000e07 01d2 .dw XT_UDOT -000e08 1ec9 .dw XT_DOLOOP -000e09 0e05 DEST(PFA_DOTS1) - PFA_DOTS2: -000e0a 1c20 .dw XT_EXIT - .include "words/spirw.asm" - - ; MCU - ; SPI exchange of 1 byte - VE_SPIRW: -000e0b ff06 .dw $ff06 -000e0c 2163 -000e0d 7340 -000e0e 6970 .db "c!@spi" -000e0f 0df8 .dw VE_HEAD - .set VE_HEAD = VE_SPIRW - XT_SPIRW: -000e10 0e11 .dw PFA_SPIRW - PFA_SPIRW: -000e11 d003 rcall do_spirw -000e12 2799 clr tosh -000e13 940c 1c05 jmp_ DO_NEXT - - do_spirw: -000e15 b98f out_ SPDR, tosl - do_spirw1: -000e16 b10e in_ temp0, SPSR -000e17 7f08 cbr temp0,7 -000e18 b90e out_ SPSR, temp0 -000e19 b10e in_ temp0, SPSR -000e1a ff07 sbrs temp0, 7 -000e1b cffa rjmp do_spirw1 ; wait until complete -000e1c b18f in_ tosl, SPDR -000e1d 9508 ret - .include "words/n-spi.asm" - - ; MCU - ; read len bytes from SPI to addr - VE_N_SPIR: -000e1e ff05 .dw $ff05 -000e1f 406e -000e20 7073 -000e21 0069 .db "n@spi",0 -000e22 0e0b .dw VE_HEAD - .set VE_HEAD = VE_N_SPIR - XT_N_SPIR: -000e23 0e24 .dw PFA_N_SPIR - PFA_N_SPIR: -000e24 018c movw temp0, tosl -000e25 9189 -000e26 9199 loadtos -000e27 01fc movw zl, tosl -000e28 01c8 movw tosl, temp0 - PFA_N_SPIR_LOOP: -000e29 b82f out_ SPDR, zerol - PFA_N_SPIR_LOOP1: -000e2a b12e in_ temp2, SPSR -000e2b ff27 sbrs temp2, SPIF -000e2c cffd rjmp PFA_N_SPIR_LOOP1 -000e2d b12f in_ temp2, SPDR -000e2e 9321 st Z+, temp2 -000e2f 9701 sbiw tosl, 1 -000e30 f7c1 brne PFA_N_SPIR_LOOP -000e31 9189 -000e32 9199 loadtos -000e33 940c 1c05 jmp_ DO_NEXT - - ; ( addr len -- ) - ; MCU - ; write len bytes to SPI from addr - VE_N_SPIW: -000e35 ff05 .dw $ff05 -000e36 216e -000e37 7073 -000e38 0069 .db "n!spi",0 -000e39 0e1e .dw VE_HEAD - .set VE_HEAD = VE_N_SPIW - XT_N_SPIW: -000e3a 0e3b .dw PFA_N_SPIW - PFA_N_SPIW: -000e3b 018c movw temp0, tosl -000e3c 9189 -000e3d 9199 loadtos -000e3e 01fc movw zl, tosl -000e3f 01c8 movw tosl, temp0 - PFA_N_SPIW_LOOP: -000e40 9121 ld temp2, Z+ -000e41 b92f out_ SPDR, temp2 - PFA_N_SPIW_LOOP1: -000e42 b12e in_ temp2, SPSR -000e43 ff27 sbrs temp2, SPIF -000e44 cffd rjmp PFA_N_SPIW_LOOP1 -000e45 b12f in_ temp2, SPDR ; ignore the data -000e46 9701 sbiw tosl, 1 -000e47 f7c1 brne PFA_N_SPIW_LOOP -000e48 9189 -000e49 9199 loadtos -000e4a 940c 1c05 jmp_ DO_NEXT - .include "words/applturnkey.asm" - - ; R( -- ) - ; application specific turnkey action - VE_APPLTURNKEY: -000e4c ff0b .dw $ff0b -000e4d 7061 -000e4e 6c70 -000e4f 7574 -000e50 6e72 -000e51 656b -000e52 0079 .db "applturnkey",0 -000e53 0e35 .dw VE_HEAD - .set VE_HEAD = VE_APPLTURNKEY - XT_APPLTURNKEY: -000e54 1c01 .dw DO_COLON - PFA_APPLTURNKEY: -000e55 00bc .dw XT_USART - - .if WANT_INTERRUPTS == 1 -000e56 0203 .dw XT_INTON - .endif -000e57 0beb .dw XT_DOT_VER -000e58 0869 .dw XT_SPACE -000e59 05c5 .dw XT_F_CPU -000e5a 1c3d .dw XT_DOLITERAL -000e5b 03e8 .dw 1000 -000e5c 1dc2 .dw XT_UMSLASHMOD -000e5d 1cf0 .dw XT_NIP -000e5e 0663 .dw XT_DECIMAL -000e5f 07a9 .dw XT_DOT -000e60 07f4 .dw XT_DOSLITERAL -000e61 0004 .dw 4 -000e62 486b -000e63 207a .db "kHz " -000e64 0827 .dw XT_ITYPE -000e65 1c20 .dw XT_EXIT - .include "dict/compiler2.inc" - - ; included almost independently from each other - ; on a include-per-use basis - ; - .if DICT_COMPILER2 == 0 - .set DICT_COMPILER2 = 1 - - .include "words/set-current.asm" - - ; Search Order - ; set current word list to the given word list wid - VE_SET_CURRENT: -000e66 ff0b .dw $ff0b -000e67 6573 -000e68 2d74 -000e69 7563 -000e6a 7272 -000e6b 6e65 -000e6c 0074 .db "set-current",0 -000e6d 0e4c .dw VE_HEAD - .set VE_HEAD = VE_SET_CURRENT - XT_SET_CURRENT: -000e6e 1c01 .dw DO_COLON - PFA_SET_CURRENT: -000e6f 1c3d .dw XT_DOLITERAL -000e70 003c .dw CFG_CURRENT -000e71 1f3b .dw XT_STOREE -000e72 1c20 .dw XT_EXIT - .include "words/wordlist.asm" - - ; Search Order - ; create a new, empty wordlist - VE_WORDLIST: -000e73 ff08 .dw $ff08 -000e74 6f77 -000e75 6472 -000e76 696c -000e77 7473 .db "wordlist" -000e78 0e66 .dw VE_HEAD - .set VE_HEAD = VE_WORDLIST - XT_WORDLIST: -000e79 1c01 .dw DO_COLON - PFA_WORDLIST: -000e7a 063d .dw XT_EHERE -000e7b 1d54 .dw XT_ZERO -000e7c 1ccf .dw XT_OVER -000e7d 1f3b .dw XT_STOREE -000e7e 1cb1 .dw XT_DUP -000e7f 05e3 .dw XT_CELLPLUS -000e80 0c20 .dw XT_DOTO -000e81 063e .dw PFA_EHERE -000e82 1c20 .dw XT_EXIT - - .include "words/forth-wordlist.asm" - - ; Search Order - ; get the system default word list - VE_FORTHWORDLIST: -000e83 ff0e .dw $ff0e -000e84 6f66 -000e85 7472 -000e86 2d68 -000e87 6f77 -000e88 6472 -000e89 696c -000e8a 7473 .db "forth-wordlist" -000e8b 0e73 .dw VE_HEAD - .set VE_HEAD = VE_FORTHWORDLIST - XT_FORTHWORDLIST: -000e8c 1c48 .dw PFA_DOVARIABLE - PFA_FORTHWORDLIST: -000e8d 003e .dw CFG_FORTHWORDLIST - .include "words/set-order.asm" - - ; Search Order - ; replace the search order list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SET_ORDER: -000e8e ff09 .dw $ff09 -000e8f 6573 -000e90 2d74 -000e91 726f -000e92 6564 -000e93 0072 .db "set-order",0 -000e94 0e83 .dw VE_HEAD - .set VE_HEAD = VE_SET_ORDER - XT_SET_ORDER: -000e95 1c01 .dw DO_COLON - PFA_SET_ORDER: - .endif -000e96 1c3d .dw XT_DOLITERAL -000e97 0040 .dw CFG_ORDERLISTLEN -000e98 04d0 .dw XT_SET_STACK -000e99 1c20 .dw XT_EXIT - - .include "words/set-recognizer.asm" - - ; Interpreter - ; replace the recognizer list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SET_RECOGNIZERS: -000e9a ff0f .dw $ff0f -000e9b 6573 -000e9c 2d74 -000e9d 6572 -000e9e 6f63 -000e9f 6e67 -000ea0 7a69 -000ea1 7265 -000ea2 0073 .db "set-recognizers",0 -000ea3 0e8e .dw VE_HEAD - .set VE_HEAD = VE_SET_RECOGNIZERS - XT_SET_RECOGNIZERS: -000ea4 1c01 .dw DO_COLON - PFA_SET_RECOGNIZERS: - .endif -000ea5 1c3d .dw XT_DOLITERAL -000ea6 0052 .dw CFG_RECOGNIZERLISTLEN -000ea7 04d0 .dw XT_SET_STACK -000ea8 1c20 .dw XT_EXIT - - .include "words/get-recognizer.asm" - - ; Interpreter - ; Get the current recognizer list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_GET_RECOGNIZERS: -000ea9 ff0f .dw $ff0f -000eaa 6567 -000eab 2d74 -000eac 6572 -000ead 6f63 -000eae 6e67 -000eaf 7a69 -000eb0 7265 -000eb1 0073 .db "get-recognizers",0 -000eb2 0e9a .dw VE_HEAD - .set VE_HEAD = VE_GET_RECOGNIZERS - XT_GET_RECOGNIZERS: -000eb3 1c01 .dw DO_COLON - PFA_GET_RECOGNIZERS: - .endif -000eb4 1c3d .dw XT_DOLITERAL -000eb5 0052 .dw CFG_RECOGNIZERLISTLEN -000eb6 04af .dw XT_GET_STACK -000eb7 1c20 .dw XT_EXIT - .include "words/code.asm" - - ; Compiler - ; create named entry in the dictionary, XT is the data field - VE_CODE: -000eb8 ff04 .dw $ff04 -000eb9 6f63 -000eba 6564 .db "code" -000ebb 0ea9 .dw VE_HEAD - .set VE_HEAD = VE_CODE - XT_CODE: -000ebc 1c01 .dw DO_COLON - PFA_CODE: -000ebd 0280 .dw XT_DOCREATE -000ebe 03e0 .dw XT_REVEAL -000ebf 0634 .dw XT_DP -000ec0 0c32 .dw XT_ICELLPLUS -000ec1 02ae .dw XT_COMMA -000ec2 1c20 .dw XT_EXIT - .include "words/end-code.asm" - - ; Compiler - ; finish a code definition - VE_ENDCODE: -000ec3 ff08 .dw $ff08 -000ec4 6e65 -000ec5 2d64 -000ec6 6f63 -000ec7 6564 .db "end-code" -000ec8 0eb8 .dw VE_HEAD - .set VE_HEAD = VE_ENDCODE - XT_ENDCODE: -000ec9 1c01 .dw DO_COLON - PFA_ENDCODE: -000eca 02a3 .dw XT_COMPILE -000ecb 940c .dw $940c -000ecc 02a3 .dw XT_COMPILE -000ecd 1c05 .dw DO_NEXT -000ece 1c20 .dw XT_EXIT - .include "words/marker.asm" - - ; System Value - ; The eeprom address until which MARKER saves and restores the eeprom data. - VE_MARKER: -000ecf ff08 .dw $ff08 -000ed0 6d28 -000ed1 7261 -000ed2 656b -000ed3 2972 .db "(marker)" -000ed4 0ec3 .dw VE_HEAD - .set VE_HEAD = VE_MARKER - XT_MARKER: -000ed5 1c6f .dw PFA_DOVALUE1 - PFA_MARKER: -000ed6 005e .dw EE_MARKER -000ed7 0c3b .dw XT_EDEFERFETCH -000ed8 0c45 .dw XT_EDEFERSTORE - .include "words/postpone.asm" - - ; Compiler - ; Append the compilation semantics of "name" to the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_POSTPONE: -000ed9 0008 .dw $0008 -000eda 6f70 -000edb 7473 -000edc 6f70 -000edd 656e .db "postpone" -000ede 0ecf .dw VE_HEAD - .set VE_HEAD = VE_POSTPONE - XT_POSTPONE: -000edf 1c01 .dw DO_COLON - PFA_POSTPONE: - .endif -000ee0 0a3b .dw XT_PARSENAME -000ee1 0b60 .dw XT_FORTHRECOGNIZER -000ee2 0b36 .dw XT_RECOGNIZE -000ee3 1cb1 .dw XT_DUP -000ee4 1cff .dw XT_TO_R -000ee5 0c32 .dw XT_ICELLPLUS -000ee6 0c32 .dw XT_ICELLPLUS -000ee7 1fcb .dw XT_FETCHI -000ee8 1c2a .dw XT_EXECUTE -000ee9 1cf6 .dw XT_R_FROM -000eea 0c32 .dw XT_ICELLPLUS -000eeb 1fcb .dw XT_FETCHI -000eec 02ae .dw XT_COMMA -000eed 1c20 .dw XT_EXIT - .endif - .include "words/2r_fetch.asm" - - ; Stack - ; fetch content of TOR - VE_2R_FETCH: -000eee ff03 .dw $ff03 -000eef 7232 -000ef0 0040 .db "2r@",0 -000ef1 0ed9 .dw VE_HEAD - .set VE_HEAD = VE_2R_FETCH - XT_2R_FETCH: -000ef2 0ef3 .dw PFA_2R_FETCH - PFA_2R_FETCH: -000ef3 939a -000ef4 938a savetos -000ef5 91ef pop zl -000ef6 91ff pop zh -000ef7 918f pop tosl -000ef8 919f pop tosh -000ef9 939f push tosh -000efa 938f push tosl -000efb 93ff push zh -000efc 93ef push zl -000efd 939a -000efe 938a savetos -000eff 01cf movw tosl, zl -000f00 940c 1c05 jmp_ DO_NEXT - - .set DPSTART = pc - .if(pc>AMFORTH_RO_SEG) - .endif - - .org AMFORTH_RO_SEG - .include "amforth-interpreter.asm" - - - DO_COLON: -001c01 93bf push XH -001c02 93af push XL ; PUSH IP -001c03 01db movw XL, wl -001c04 9611 adiw xl, 1 - DO_NEXT: - .if WANT_INTERRUPTS == 1 -001c05 14b2 cp isrflag, zerol -001c06 f469 brne DO_INTERRUPT - .endif -001c07 01fd movw zl, XL ; READ IP -001c08 0fee -001c09 1fff -001c0a 9165 -001c0b 9175 readflashcell wl, wh -001c0c 9611 adiw XL, 1 ; INC IP - - DO_EXECUTE: -001c0d 01fb movw zl, wl -001c0e 0fee -001c0f 1fff -001c10 9105 -001c11 9115 readflashcell temp0,temp1 -001c12 01f8 movw zl, temp0 -001c13 9409 ijmp - - .if WANT_INTERRUPTS == 1 - DO_INTERRUPT: - ; here we deal with interrupts the forth way -001c14 939a -001c15 938a savetos -001c16 2d8b mov tosl, isrflag -001c17 2799 clr tosh -001c18 24bb clr isrflag -001c19 e26f ldi wl, LOW(XT_ISREXEC) -001c1a e072 ldi wh, HIGH(XT_ISREXEC) -001c1b cff1 rjmp DO_EXECUTE - .include "dict/nrww.inc" - - ; section together with the forth inner interpreter - - .include "words/exit.asm" - - ; Compiler - ; end of current colon word - VE_EXIT: -001c1c ff04 .dw $ff04 -001c1d 7865 -001c1e 7469 .db "exit" -001c1f 0eee .dw VE_HEAD - .set VE_HEAD = VE_EXIT - XT_EXIT: -001c20 1c21 .dw PFA_EXIT - PFA_EXIT: -001c21 91af pop XL -001c22 91bf pop XH -001c23 cfe1 jmp_ DO_NEXT - .include "words/execute.asm" - - ; System - ; execute XT - VE_EXECUTE: -001c24 ff07 .dw $ff07 -001c25 7865 -001c26 6365 -001c27 7475 -001c28 0065 .db "execute",0 -001c29 1c1c .dw VE_HEAD - .set VE_HEAD = VE_EXECUTE - XT_EXECUTE: -001c2a 1c2b .dw PFA_EXECUTE - PFA_EXECUTE: -001c2b 01bc movw wl, tosl -001c2c 9189 -001c2d 9199 loadtos -001c2e cfde jmp_ DO_EXECUTE - .include "words/dobranch.asm" - - ; System - ; runtime of branch - ;VE_DOBRANCH: - ; .dw $ff08 - ; .db "(branch)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOBRANCH - XT_DOBRANCH: -001c2f 1c30 .dw PFA_DOBRANCH - PFA_DOBRANCH: -001c30 01fd movw zl, XL -001c31 0fee -001c32 1fff -001c33 91a5 -001c34 91b5 readflashcell XL,XH -001c35 cfcf jmp_ DO_NEXT - .include "words/docondbranch.asm" - - ; System - ; runtime of ?branch - ;VE_DOCONDBRANCH: - ; .dw $ff09 - ; .db "(?branch)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOCONDBRANCH - XT_DOCONDBRANCH: -001c36 1c37 .dw PFA_DOCONDBRANCH - PFA_DOCONDBRANCH: -001c37 2b98 or tosh, tosl -001c38 9189 -001c39 9199 loadtos -001c3a f3a9 brbs 1, PFA_DOBRANCH ; 1 is z flag; if tos is zero (false), do the branch -001c3b 9611 adiw XL, 1 -001c3c cfc8 jmp_ DO_NEXT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/doliteral.asm" - - ; System - ; runtime of literal - ;VE_DOLITERAL: - ; .dw $ff09 - ; .db "(literal)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOLITERAL - XT_DOLITERAL: -001c3d 1c3e .dw PFA_DOLITERAL - PFA_DOLITERAL: -001c3e 939a -001c3f 938a savetos -001c40 01fd movw zl, xl -001c41 0fee -001c42 1fff -001c43 9185 -001c44 9195 readflashcell tosl,tosh -001c45 9611 adiw xl, 1 -001c46 cfbe jmp_ DO_NEXT - - .include "words/dovariable.asm" - - ; System - ; puts content of parameter field (1 cell) to TOS - ;VE_DOVARIABLE: - ; .dw $ff0a - ; .db "(variable)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOVARIABLE - XT_DOVARIABLE: -001c47 1c48 .dw PFA_DOVARIABLE - PFA_DOVARIABLE: -001c48 939a -001c49 938a savetos -001c4a 01fb movw zl, wl -001c4b 9631 adiw zl,1 -001c4c 0fee -001c4d 1fff -001c4e 9185 -001c4f 9195 readflashcell tosl,tosh -001c50 cfb4 jmp_ DO_NEXT - .include "words/doconstant.asm" - - ; System - ; place data field address on TOS - ;VE_DOCONSTANT: - ; .dw $ff0a - ; .db "(constant)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOCONSTANT - XT_DOCONSTANT: -001c51 1c52 .dw PFA_DOCONSTANT - PFA_DOCONSTANT: -001c52 939a -001c53 938a savetos -001c54 01cb movw tosl, wl -001c55 9601 adiw tosl, 1 -001c56 cfae jmp_ DO_NEXT - .include "words/douser.asm" - - ; System - ; runtime part of user - ;VE_DOUSER: - ; .dw $ff06 - ; .db "(user)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOUSER - XT_DOUSER: -001c57 1c58 .dw PFA_DOUSER - PFA_DOUSER: -001c58 939a -001c59 938a savetos -001c5a 01fb movw zl, wl -001c5b 9631 adiw zl, 1 -001c5c 0fee -001c5d 1fff -001c5e 9185 -001c5f 9195 readflashcell tosl,tosh -001c60 0d84 add tosl, upl -001c61 1d95 adc tosh, uph -001c62 cfa2 jmp_ DO_NEXT - .include "words/do-value.asm" - - ; System - ; runtime of value - VE_DOVALUE: -001c63 ff07 .dw $ff07 -001c64 7628 -001c65 6c61 -001c66 6575 -001c67 0029 .db "(value)", 0 -001c68 1c24 .dw VE_HEAD - .set VE_HEAD = VE_DOVALUE - XT_DOVALUE: -001c69 1c01 .dw DO_COLON - PFA_DOVALUE: -001c6a 0280 .dw XT_DOCREATE -001c6b 03e0 .dw XT_REVEAL -001c6c 02a3 .dw XT_COMPILE -001c6d 1c6f .dw PFA_DOVALUE1 -001c6e 1c20 .dw XT_EXIT - PFA_DOVALUE1: -001c6f 940e 03f9 call_ DO_DODOES -001c71 1cb1 .dw XT_DUP -001c72 0c32 .dw XT_ICELLPLUS -001c73 1fcb .dw XT_FETCHI -001c74 1c2a .dw XT_EXECUTE -001c75 1c20 .dw XT_EXIT - - ; : (value) dup icell+ @i execute ; - .include "words/fetch.asm" - - ; Memory - ; read 1 cell from RAM address - VE_FETCH: -001c76 ff01 .dw $ff01 -001c77 0040 .db "@",0 -001c78 1c63 .dw VE_HEAD - .set VE_HEAD = VE_FETCH - XT_FETCH: -001c79 1c7a .dw PFA_FETCH - PFA_FETCH: - .if WANT_UNIFIED == 1 - .endif - PFA_FETCHRAM: -001c7a 01fc movw zl, tosl - ; low byte is read before the high byte -001c7b 9181 ld tosl, z+ -001c7c 9191 ld tosh, z+ -001c7d cf87 jmp_ DO_NEXT - .if WANT_UNIFIED == 1 - .endif - .include "words/store.asm" - - ; Memory - ; write n to RAM memory at addr, low byte first - VE_STORE: -001c7e ff01 .dw $ff01 -001c7f 0021 .db "!",0 -001c80 1c76 .dw VE_HEAD - .set VE_HEAD = VE_STORE - XT_STORE: -001c81 1c82 .dw PFA_STORE - PFA_STORE: - .if WANT_UNIFIED == 1 - .endif - PFA_STORERAM: -001c82 01fc movw zl, tosl -001c83 9189 -001c84 9199 loadtos - ; the high byte is written before the low byte -001c85 8391 std Z+1, tosh -001c86 8380 std Z+0, tosl -001c87 9189 -001c88 9199 loadtos -001c89 cf7b jmp_ DO_NEXT - .if WANT_UNIFIED == 1 - .endif - .include "words/cstore.asm" - - ; Memory - ; store a single byte to RAM address - VE_CSTORE: -001c8a ff02 .dw $ff02 -001c8b 2163 .db "c!" -001c8c 1c7e .dw VE_HEAD - .set VE_HEAD = VE_CSTORE - XT_CSTORE: -001c8d 1c8e .dw PFA_CSTORE - PFA_CSTORE: -001c8e 01fc movw zl, tosl -001c8f 9189 -001c90 9199 loadtos -001c91 8380 st Z, tosl -001c92 9189 -001c93 9199 loadtos -001c94 cf70 jmp_ DO_NEXT - .include "words/cfetch.asm" - - ; Memory - ; fetch a single byte from memory mapped locations - VE_CFETCH: -001c95 ff02 .dw $ff02 -001c96 4063 .db "c@" -001c97 1c8a .dw VE_HEAD - .set VE_HEAD = VE_CFETCH - XT_CFETCH: -001c98 1c99 .dw PFA_CFETCH - PFA_CFETCH: -001c99 01fc movw zl, tosl -001c9a 2799 clr tosh -001c9b 8180 ld tosl, Z -001c9c cf68 jmp_ DO_NEXT - .include "words/fetch-u.asm" - - ; Memory - ; read 1 cell from USER area - VE_FETCHU: -001c9d ff02 .dw $ff02 -001c9e 7540 .db "@u" -001c9f 1c95 .dw VE_HEAD - .set VE_HEAD = VE_FETCHU - XT_FETCHU: -001ca0 1c01 .dw DO_COLON - PFA_FETCHU: -001ca1 1f02 .dw XT_UP_FETCH -001ca2 1d9d .dw XT_PLUS -001ca3 1c79 .dw XT_FETCH -001ca4 1c20 .dw XT_EXIT - .include "words/store-u.asm" - - ; Memory - ; write n to USER area at offset - VE_STOREU: -001ca5 ff02 .dw $ff02 -001ca6 7521 .db "!u" -001ca7 1c9d .dw VE_HEAD - .set VE_HEAD = VE_STOREU - XT_STOREU: -001ca8 1c01 .dw DO_COLON - PFA_STOREU: -001ca9 1f02 .dw XT_UP_FETCH -001caa 1d9d .dw XT_PLUS -001cab 1c81 .dw XT_STORE -001cac 1c20 .dw XT_EXIT - - ;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/dup.asm" - - ; Stack - ; duplicate TOS - VE_DUP: -001cad ff03 .dw $ff03 -001cae 7564 -001caf 0070 .db "dup",0 -001cb0 1ca5 .dw VE_HEAD - .set VE_HEAD = VE_DUP - XT_DUP: -001cb1 1cb2 .dw PFA_DUP - PFA_DUP: -001cb2 939a -001cb3 938a savetos -001cb4 cf50 jmp_ DO_NEXT - .include "words/qdup.asm" - - ; Stack - ; duplicate TOS if non-zero - VE_QDUP: -001cb5 ff04 .dw $ff04 -001cb6 643f -001cb7 7075 .db "?dup" -001cb8 1cad .dw VE_HEAD - .set VE_HEAD = VE_QDUP - XT_QDUP: -001cb9 1cba .dw PFA_QDUP - PFA_QDUP: -001cba 2f08 mov temp0, tosl -001cbb 2b09 or temp0, tosh -001cbc f011 breq PFA_QDUP1 -001cbd 939a -001cbe 938a savetos - PFA_QDUP1: -001cbf cf45 jmp_ DO_NEXT - .include "words/swap.asm" - - ; Stack - ; swaps the two top level stack cells - VE_SWAP: -001cc0 ff04 .dw $ff04 -001cc1 7773 -001cc2 7061 .db "swap" -001cc3 1cb5 .dw VE_HEAD - .set VE_HEAD = VE_SWAP - XT_SWAP: -001cc4 1cc5 .dw PFA_SWAP - PFA_SWAP: -001cc5 018c movw temp0, tosl -001cc6 9189 -001cc7 9199 loadtos -001cc8 931a st -Y, temp1 -001cc9 930a st -Y, temp0 -001cca cf3a jmp_ DO_NEXT - .include "words/over.asm" - - ; Stack - ; Place a copy of x1 on top of the stack - VE_OVER: -001ccb ff04 .dw $ff04 -001ccc 766f -001ccd 7265 .db "over" -001cce 1cc0 .dw VE_HEAD - .set VE_HEAD = VE_OVER - XT_OVER: -001ccf 1cd0 .dw PFA_OVER - PFA_OVER: -001cd0 939a -001cd1 938a savetos -001cd2 818a ldd tosl, Y+2 -001cd3 819b ldd tosh, Y+3 - -001cd4 cf30 jmp_ DO_NEXT - .include "words/drop.asm" - - ; Stack - ; drop TOS - VE_DROP: -001cd5 ff04 .dw $ff04 -001cd6 7264 -001cd7 706f .db "drop" -001cd8 1ccb .dw VE_HEAD - .set VE_HEAD = VE_DROP - XT_DROP: -001cd9 1cda .dw PFA_DROP - PFA_DROP: -001cda 9189 -001cdb 9199 loadtos -001cdc cf28 jmp_ DO_NEXT - .include "words/rot.asm" - - ; Stack - ; rotate the three top level cells - VE_ROT: -001cdd ff03 .dw $ff03 -001cde 6f72 -001cdf 0074 .db "rot",0 -001ce0 1cd5 .dw VE_HEAD - .set VE_HEAD = VE_ROT - XT_ROT: -001ce1 1ce2 .dw PFA_ROT - PFA_ROT: -001ce2 018c movw temp0, tosl -001ce3 9129 ld temp2, Y+ -001ce4 9139 ld temp3, Y+ -001ce5 9189 -001ce6 9199 loadtos - -001ce7 933a st -Y, temp3 -001ce8 932a st -Y, temp2 -001ce9 931a st -Y, temp1 -001cea 930a st -Y, temp0 - -001ceb cf19 jmp_ DO_NEXT - .include "words/nip.asm" - - ; Stack - ; Remove Second of Stack - VE_NIP: -001cec ff03 .dw $ff03 -001ced 696e -001cee 0070 .db "nip",0 -001cef 1cdd .dw VE_HEAD - .set VE_HEAD = VE_NIP - XT_NIP: -001cf0 1cf1 .dw PFA_NIP - PFA_NIP: -001cf1 9622 adiw yl, 2 -001cf2 cf12 jmp_ DO_NEXT - ;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/r_from.asm" - - ; Stack - ; move TOR to TOS - VE_R_FROM: -001cf3 ff02 .dw $ff02 -001cf4 3e72 .db "r>" -001cf5 1cec .dw VE_HEAD - .set VE_HEAD = VE_R_FROM - XT_R_FROM: -001cf6 1cf7 .dw PFA_R_FROM - PFA_R_FROM: -001cf7 939a -001cf8 938a savetos -001cf9 918f pop tosl -001cfa 919f pop tosh -001cfb cf09 jmp_ DO_NEXT - .include "words/to_r.asm" - - ; Stack - ; move TOS to TOR - VE_TO_R: -001cfc ff02 .dw $ff02 -001cfd 723e .db ">r" -001cfe 1cf3 .dw VE_HEAD - .set VE_HEAD = VE_TO_R - XT_TO_R: -001cff 1d00 .dw PFA_TO_R - PFA_TO_R: -001d00 939f push tosh -001d01 938f push tosl -001d02 9189 -001d03 9199 loadtos -001d04 cf00 jmp_ DO_NEXT - .include "words/r_fetch.asm" - - ; Stack - ; fetch content of TOR - VE_R_FETCH: -001d05 ff02 .dw $ff02 -001d06 4072 .db "r@" -001d07 1cfc .dw VE_HEAD - .set VE_HEAD = VE_R_FETCH - XT_R_FETCH: -001d08 1d09 .dw PFA_R_FETCH - PFA_R_FETCH: -001d09 939a -001d0a 938a savetos -001d0b 918f pop tosl -001d0c 919f pop tosh -001d0d 939f push tosh -001d0e 938f push tosl -001d0f cef5 jmp_ DO_NEXT - - - .include "words/not-equal.asm" - - ; Compare - ; true if n1 is not equal to n2 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NOTEQUAL: -001d10 ff02 .dw $ff02 -001d11 3e3c .db "<>" -001d12 1d05 .dw VE_HEAD - .set VE_HEAD = VE_NOTEQUAL - XT_NOTEQUAL: -001d13 1c01 .dw DO_COLON - PFA_NOTEQUAL: - .endif - -001d14 1fe0 -001d15 1d1a -001d16 1c20 .DW XT_EQUAL,XT_ZEROEQUAL,XT_EXIT - .include "words/equalzero.asm" - - ; Compare - ; compare with 0 (zero) - VE_ZEROEQUAL: -001d17 ff02 .dw $ff02 -001d18 3d30 .db "0=" -001d19 1d10 .dw VE_HEAD - .set VE_HEAD = VE_ZEROEQUAL - XT_ZEROEQUAL: -001d1a 1d1b .dw PFA_ZEROEQUAL - PFA_ZEROEQUAL: -001d1b 2b98 or tosh, tosl -001d1c f5d1 brne PFA_ZERO1 -001d1d c030 rjmp PFA_TRUE1 - .include "words/lesszero.asm" - - ; Compare - ; compare with zero - VE_ZEROLESS: -001d1e ff02 .dw $ff02 -001d1f 3c30 .db "0<" -001d20 1d17 .dw VE_HEAD - .set VE_HEAD = VE_ZEROLESS - XT_ZEROLESS: -001d21 1d22 .dw PFA_ZEROLESS - PFA_ZEROLESS: -001d22 fd97 sbrc tosh,7 -001d23 c02a rjmp PFA_TRUE1 -001d24 c032 rjmp PFA_ZERO1 - .include "words/greaterzero.asm" - - ; Compare - ; true if n1 is greater than 0 - VE_GREATERZERO: -001d25 ff02 .dw $ff02 -001d26 3e30 .db "0>" -001d27 1d1e .dw VE_HEAD - .set VE_HEAD = VE_GREATERZERO - XT_GREATERZERO: -001d28 1d29 .dw PFA_GREATERZERO - PFA_GREATERZERO: -001d29 1582 cp tosl, zerol -001d2a 0593 cpc tosh, zeroh -001d2b f15c brlt PFA_ZERO1 -001d2c f151 brbs 1, PFA_ZERO1 -001d2d c020 rjmp PFA_TRUE1 - .include "words/d-greaterzero.asm" - - ; Compare - ; compares if a double double cell number is greater 0 - VE_DGREATERZERO: -001d2e ff03 .dw $ff03 -001d2f 3064 -001d30 003e .db "d0>",0 -001d31 1d25 .dw VE_HEAD - .set VE_HEAD = VE_DGREATERZERO - XT_DGREATERZERO: -001d32 1d33 .dw PFA_DGREATERZERO - PFA_DGREATERZERO: -001d33 1582 cp tosl, zerol -001d34 0593 cpc tosh, zeroh -001d35 9189 -001d36 9199 loadtos -001d37 0582 cpc tosl, zerol -001d38 0593 cpc tosh, zeroh -001d39 f0ec brlt PFA_ZERO1 -001d3a f0e1 brbs 1, PFA_ZERO1 -001d3b c012 rjmp PFA_TRUE1 - .include "words/d-lesszero.asm" - - ; Compare - ; compares if a double double cell number is less than 0 - VE_DXT_ZEROLESS: -001d3c ff03 .dw $ff03 -001d3d 3064 -001d3e 003c .db "d0<",0 -001d3f 1d2e .dw VE_HEAD - .set VE_HEAD = VE_DXT_ZEROLESS - XT_DXT_ZEROLESS: -001d40 1d41 .dw PFA_DXT_ZEROLESS - PFA_DXT_ZEROLESS: -001d41 9622 adiw Y,2 -001d42 fd97 sbrc tosh,7 -001d43 940c 1d4e jmp PFA_TRUE1 -001d45 940c 1d57 jmp PFA_ZERO1 - - .include "words/true.asm" - - ; Arithmetics - ; leaves the value -1 (true) on TOS - VE_TRUE: -001d47 ff04 .dw $ff04 -001d48 7274 -001d49 6575 .db "true" -001d4a 1d3c .dw VE_HEAD - .set VE_HEAD = VE_TRUE - XT_TRUE: -001d4b 1d4c .dw PFA_TRUE - PFA_TRUE: -001d4c 939a -001d4d 938a savetos - PFA_TRUE1: -001d4e ef8f ser tosl -001d4f ef9f ser tosh -001d50 ceb4 jmp_ DO_NEXT - .include "words/zero.asm" - - ; Arithmetics - ; place a value 0 on TOS - VE_ZERO: -001d51 ff01 .dw $ff01 -001d52 0030 .db "0",0 -001d53 1d47 .dw VE_HEAD - .set VE_HEAD = VE_ZERO - XT_ZERO: -001d54 1d55 .dw PFA_ZERO - PFA_ZERO: -001d55 939a -001d56 938a savetos - PFA_ZERO1: -001d57 01c1 movw tosl, zerol -001d58 ceac jmp_ DO_NEXT - .include "words/uless.asm" - - ; Compare - ; true if u1 < u2 (unsigned) - VE_ULESS: -001d59 ff02 .dw $ff02 -001d5a 3c75 .db "u<" -001d5b 1d51 .dw VE_HEAD - .set VE_HEAD = VE_ULESS - XT_ULESS: -001d5c 1d5d .dw PFA_ULESS - PFA_ULESS: -001d5d 9129 ld temp2, Y+ -001d5e 9139 ld temp3, Y+ -001d5f 1782 cp tosl, temp2 -001d60 0793 cpc tosh, temp3 -001d61 f3a8 brlo PFA_ZERO1 -001d62 f3a1 brbs 1, PFA_ZERO1 -001d63 cfea jmp_ PFA_TRUE1 - .include "words/u-greater.asm" - - ; Compare - ; true if u1 > u2 (unsigned) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UGREATER: -001d64 ff02 .dw $ff02 -001d65 3e75 .db "u>" -001d66 1d59 .dw VE_HEAD - .set VE_HEAD = VE_UGREATER - XT_UGREATER: -001d67 1c01 .dw DO_COLON - PFA_UGREATER: - .endif -001d68 1cc4 .DW XT_SWAP -001d69 1d5c .dw XT_ULESS -001d6a 1c20 .dw XT_EXIT - .include "words/less.asm" - - ; Compare - ; true if n1 is less than n2 - VE_LESS: -001d6b ff01 .dw $ff01 -001d6c 003c .db "<",0 -001d6d 1d64 .dw VE_HEAD - .set VE_HEAD = VE_LESS - XT_LESS: -001d6e 1d6f .dw PFA_LESS - PFA_LESS: -001d6f 9129 ld temp2, Y+ -001d70 9139 ld temp3, Y+ -001d71 1728 cp temp2, tosl -001d72 0739 cpc temp3, tosh - PFA_LESSDONE: -001d73 f71c brge PFA_ZERO1 -001d74 cfd9 rjmp PFA_TRUE1 - .include "words/greater.asm" - - ; Compare - ; flag is true if n1 is greater than n2 - VE_GREATER: -001d75 ff01 .dw $ff01 -001d76 003e .db ">",0 -001d77 1d6b .dw VE_HEAD - .set VE_HEAD = VE_GREATER - XT_GREATER: -001d78 1d79 .dw PFA_GREATER - PFA_GREATER: -001d79 9129 ld temp2, Y+ -001d7a 9139 ld temp3, Y+ -001d7b 1728 cp temp2, tosl -001d7c 0739 cpc temp3, tosh - PFA_GREATERDONE: -001d7d f2cc brlt PFA_ZERO1 -001d7e f2c1 brbs 1, PFA_ZERO1 -001d7f cfce rjmp PFA_TRUE1 - - .include "words/log2.asm" - - ; Arithmetics - ; logarithm to base 2 or highest set bitnumber - VE_LOG2: -001d80 ff04 .dw $ff04 -001d81 6f6c -001d82 3267 .db "log2" -001d83 1d75 .dw VE_HEAD - .set VE_HEAD = VE_LOG2 - XT_LOG2: -001d84 1d85 .dw PFA_LOG2 - PFA_LOG2: -001d85 01fc movw zl, tosl -001d86 2799 clr tosh -001d87 e180 ldi tosl, 16 - PFA_LOG2_1: -001d88 958a dec tosl -001d89 f022 brmi PFA_LOG2_2 ; wrong data -001d8a 0fee lsl zl -001d8b 1fff rol zh -001d8c f7d8 brcc PFA_LOG2_1 -001d8d ce77 jmp_ DO_NEXT - - PFA_LOG2_2: -001d8e 959a dec tosh -001d8f ce75 jmp_ DO_NEXT - .include "words/minus.asm" - - ; Arithmetics - ; subtract n2 from n1 - VE_MINUS: -001d90 ff01 .dw $ff01 -001d91 002d .db "-",0 -001d92 1d80 .dw VE_HEAD - .set VE_HEAD = VE_MINUS - XT_MINUS: -001d93 1d94 .dw PFA_MINUS - PFA_MINUS: -001d94 9109 ld temp0, Y+ -001d95 9119 ld temp1, Y+ -001d96 1b08 sub temp0, tosl -001d97 0b19 sbc temp1, tosh -001d98 01c8 movw tosl, temp0 -001d99 ce6b jmp_ DO_NEXT - .include "words/plus.asm" - - ; Arithmetics - ; add n1 and n2 - VE_PLUS: -001d9a ff01 .dw $ff01 -001d9b 002b .db "+",0 -001d9c 1d90 .dw VE_HEAD - .set VE_HEAD = VE_PLUS - XT_PLUS: -001d9d 1d9e .dw PFA_PLUS - PFA_PLUS: -001d9e 9109 ld temp0, Y+ -001d9f 9119 ld temp1, Y+ -001da0 0f80 add tosl, temp0 -001da1 1f91 adc tosh, temp1 -001da2 ce62 jmp_ DO_NEXT - .include "words/mstar.asm" - - ; Arithmetics - ; multiply 2 cells to a double cell - VE_MSTAR: -001da3 ff02 .dw $ff02 -001da4 2a6d .db "m*" -001da5 1d9a .dw VE_HEAD - .set VE_HEAD = VE_MSTAR - XT_MSTAR: -001da6 1da7 .dw PFA_MSTAR - PFA_MSTAR: -001da7 018c movw temp0, tosl -001da8 9189 -001da9 9199 loadtos -001daa 019c movw temp2, tosl - ; high cell ah*bh -001dab 0231 muls temp3, temp1 -001dac 0170 movw temp4, r0 - ; low cell al*bl -001dad 9f20 mul temp2, temp0 -001dae 01c0 movw tosl, r0 - ; signed ah*bl -001daf 0330 mulsu temp3, temp0 -001db0 08f3 sbc temp5, zeroh -001db1 0d90 add tosh, r0 -001db2 1ce1 adc temp4, r1 -001db3 1cf3 adc temp5, zeroh - - ; signed al*bh -001db4 0312 mulsu temp1, temp2 -001db5 08f3 sbc temp5, zeroh -001db6 0d90 add tosh, r0 -001db7 1ce1 adc temp4, r1 -001db8 1cf3 adc temp5, zeroh - -001db9 939a -001dba 938a savetos -001dbb 01c7 movw tosl, temp4 -001dbc ce48 jmp_ DO_NEXT - .include "words/umslashmod.asm" - - ; Arithmetics - ; unsigned division ud / u2 with remainder - VE_UMSLASHMOD: -001dbd ff06 .dw $ff06 -001dbe 6d75 -001dbf 6d2f -001dc0 646f .db "um/mod" -001dc1 1da3 .dw VE_HEAD - .set VE_HEAD = VE_UMSLASHMOD - XT_UMSLASHMOD: -001dc2 1dc3 .dw PFA_UMSLASHMOD - PFA_UMSLASHMOD: -001dc3 017c movw temp4, tosl - -001dc4 9129 ld temp2, Y+ -001dc5 9139 ld temp3, Y+ - -001dc6 9109 ld temp0, Y+ -001dc7 9119 ld temp1, Y+ - - ;; unsigned 32/16 -> 16r16 divide - - PFA_UMSLASHMODmod: - - ; set loop counter -001dc8 e140 ldi temp6,$10 - - PFA_UMSLASHMODmod_loop: - ; shift left, saving high bit -001dc9 2755 clr temp7 -001dca 0f00 lsl temp0 -001dcb 1f11 rol temp1 -001dcc 1f22 rol temp2 -001dcd 1f33 rol temp3 -001dce 1f55 rol temp7 - - ; try subtracting divisor -001dcf 152e cp temp2, temp4 -001dd0 053f cpc temp3, temp5 -001dd1 0552 cpc temp7,zerol - -001dd2 f018 brcs PFA_UMSLASHMODmod_loop_control - - PFA_UMSLASHMODmod_subtract: - ; dividend is large enough - ; do the subtraction for real - ; and set lowest bit -001dd3 9503 inc temp0 -001dd4 192e sub temp2, temp4 -001dd5 093f sbc temp3, temp5 - - PFA_UMSLASHMODmod_loop_control: -001dd6 954a dec temp6 -001dd7 f789 brne PFA_UMSLASHMODmod_loop - - PFA_UMSLASHMODmod_done: - ; put remainder on stack -001dd8 933a st -Y,temp3 -001dd9 932a st -Y,temp2 - - ; put quotient on stack -001dda 01c8 movw tosl, temp0 -001ddb ce29 jmp_ DO_NEXT - .include "words/umstar.asm" - - ; Arithmetics - ; multiply 2 unsigned cells to a double cell - VE_UMSTAR: -001ddc ff03 .dw $ff03 -001ddd 6d75 -001dde 002a .db "um*",0 -001ddf 1dbd .dw VE_HEAD - .set VE_HEAD = VE_UMSTAR - XT_UMSTAR: -001de0 1de1 .dw PFA_UMSTAR - PFA_UMSTAR: -001de1 018c movw temp0, tosl -001de2 9189 -001de3 9199 loadtos - ; result: (temp3*temp1)* 65536 + (temp3*temp0 + temp1*temp2) * 256 + (temp0 * temp2) - ; low bytes -001de4 9f80 mul tosl,temp0 -001de5 01f0 movw zl, r0 -001de6 2722 clr temp2 -001de7 2733 clr temp3 - ; middle bytes -001de8 9f90 mul tosh, temp0 -001de9 0df0 add zh, r0 -001dea 1d21 adc temp2, r1 -001deb 1d33 adc temp3, zeroh - -001dec 9f81 mul tosl, temp1 -001ded 0df0 add zh, r0 -001dee 1d21 adc temp2, r1 -001def 1d33 adc temp3, zeroh - -001df0 9f91 mul tosh, temp1 -001df1 0d20 add temp2, r0 -001df2 1d31 adc temp3, r1 -001df3 01cf movw tosl, zl -001df4 939a -001df5 938a savetos -001df6 01c9 movw tosl, temp2 -001df7 ce0d jmp_ DO_NEXT - - .include "words/invert.asm" - - ; Arithmetics - ; 1-complement of TOS - VE_INVERT: -001df8 ff06 .dw $ff06 -001df9 6e69 -001dfa 6576 -001dfb 7472 .db "invert" -001dfc 1ddc .dw VE_HEAD - .set VE_HEAD = VE_INVERT - XT_INVERT: -001dfd 1dfe .dw PFA_INVERT - PFA_INVERT: -001dfe 9580 com tosl -001dff 9590 com tosh -001e00 ce04 jmp_ DO_NEXT - .include "words/2slash.asm" - - ; Arithmetics - ; arithmetic shift right - VE_2SLASH: -001e01 ff02 .dw $ff02 -001e02 2f32 .db "2/" -001e03 1df8 .dw VE_HEAD - .set VE_HEAD = VE_2SLASH - XT_2SLASH: -001e04 1e05 .dw PFA_2SLASH - PFA_2SLASH: -001e05 9595 asr tosh -001e06 9587 ror tosl -001e07 cdfd jmp_ DO_NEXT - .include "words/2star.asm" - - ; Arithmetics - ; arithmetic shift left, filling with zero - VE_2STAR: -001e08 ff02 .dw $ff02 -001e09 2a32 .db "2*" -001e0a 1e01 .dw VE_HEAD - .set VE_HEAD = VE_2STAR - XT_2STAR: -001e0b 1e0c .dw PFA_2STAR - PFA_2STAR: -001e0c 0f88 lsl tosl -001e0d 1f99 rol tosh -001e0e cdf6 jmp_ DO_NEXT - .include "words/and.asm" - - ; Logic - ; bitwise and - VE_AND: -001e0f ff03 .dw $ff03 -001e10 6e61 -001e11 0064 .db "and",0 -001e12 1e08 .dw VE_HEAD - .set VE_HEAD = VE_AND - XT_AND: -001e13 1e14 .dw PFA_AND - PFA_AND: -001e14 9109 ld temp0, Y+ -001e15 9119 ld temp1, Y+ -001e16 2380 and tosl, temp0 -001e17 2391 and tosh, temp1 -001e18 cdec jmp_ DO_NEXT - .include "words/or.asm" - - ; Logic - ; logical or - VE_OR: -001e19 ff02 .dw $ff02 -001e1a 726f .db "or" -001e1b 1e0f .dw VE_HEAD - .set VE_HEAD = VE_OR - XT_OR: -001e1c 1e1d .dw PFA_OR - PFA_OR: -001e1d 9109 ld temp0, Y+ -001e1e 9119 ld temp1, Y+ -001e1f 2b80 or tosl, temp0 -001e20 2b91 or tosh, temp1 -001e21 cde3 jmp_ DO_NEXT - - .include "words/xor.asm" - - ; Logic - ; exclusive or - VE_XOR: -001e22 ff03 .dw $ff03 -001e23 6f78 -001e24 0072 .db "xor",0 -001e25 1e19 .dw VE_HEAD - .set VE_HEAD = VE_XOR - XT_XOR: -001e26 1e27 .dw PFA_XOR - PFA_XOR: -001e27 9109 ld temp0, Y+ -001e28 9119 ld temp1, Y+ -001e29 2780 eor tosl, temp0 -001e2a 2791 eor tosh, temp1 -001e2b cdd9 jmp_ DO_NEXT - - .include "words/1plus.asm" - - ; Arithmetics - ; optimized increment - VE_1PLUS: -001e2c ff02 .dw $ff02 -001e2d 2b31 .db "1+" -001e2e 1e22 .dw VE_HEAD - .set VE_HEAD = VE_1PLUS - XT_1PLUS: -001e2f 1e30 .dw PFA_1PLUS - PFA_1PLUS: -001e30 9601 adiw tosl,1 -001e31 cdd3 jmp_ DO_NEXT - .include "words/1minus.asm" - - ; Arithmetics - ; optimized decrement - VE_1MINUS: -001e32 ff02 .dw $ff02 -001e33 2d31 .db "1-" -001e34 1e2c .dw VE_HEAD - .set VE_HEAD = VE_1MINUS - XT_1MINUS: -001e35 1e36 .dw PFA_1MINUS - PFA_1MINUS: -001e36 9701 sbiw tosl, 1 -001e37 cdcd jmp_ DO_NEXT - .include "words/q-negate.asm" - - ; 0< IF NEGATE THEN ; ...a common factor - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QNEGATE: -001e38 ff07 .dw $ff07 -001e39 6e3f -001e3a 6765 -001e3b 7461 -../../common\words/q-negate.asm(11): warning: .cseg .db misalignment - padding zero byte -001e3c 0065 .db "?negate" -001e3d 1e32 .dw VE_HEAD - .set VE_HEAD = VE_QNEGATE - XT_QNEGATE: -001e3e 1c01 .dw DO_COLON - PFA_QNEGATE: - - .endif -001e3f 1d21 -001e40 1c36 .DW XT_ZEROLESS,XT_DOCONDBRANCH -001e41 1e43 DEST(QNEG1) -001e42 06c6 .DW XT_NEGATE -001e43 1c20 QNEG1: .DW XT_EXIT - .include "words/lshift.asm" - - ; Arithmetics - ; logically shift n1 left n2 times - VE_LSHIFT: -001e44 ff06 .dw $ff06 -001e45 736c -001e46 6968 -001e47 7466 .db "lshift" -001e48 1e38 .dw VE_HEAD - .set VE_HEAD = VE_LSHIFT - XT_LSHIFT: -001e49 1e4a .dw PFA_LSHIFT - PFA_LSHIFT: -001e4a 01fc movw zl, tosl -001e4b 9189 -001e4c 9199 loadtos - PFA_LSHIFT1: -001e4d 9731 sbiw zl, 1 -001e4e f01a brmi PFA_LSHIFT2 -001e4f 0f88 lsl tosl -001e50 1f99 rol tosh -001e51 cffb rjmp PFA_LSHIFT1 - PFA_LSHIFT2: -001e52 cdb2 jmp_ DO_NEXT - - .include "words/rshift.asm" - - ; Arithmetics - ; shift n1 n2-times logically right - VE_RSHIFT: -001e53 ff06 .dw $ff06 -001e54 7372 -001e55 6968 -001e56 7466 .db "rshift" -001e57 1e44 .dw VE_HEAD - .set VE_HEAD = VE_RSHIFT - XT_RSHIFT: -001e58 1e59 .dw PFA_RSHIFT - PFA_RSHIFT: -001e59 01fc movw zl, tosl -001e5a 9189 -001e5b 9199 loadtos - PFA_RSHIFT1: -001e5c 9731 sbiw zl, 1 -001e5d f01a brmi PFA_RSHIFT2 -001e5e 9596 lsr tosh -001e5f 9587 ror tosl -001e60 cffb rjmp PFA_RSHIFT1 - PFA_RSHIFT2: -001e61 cda3 jmp_ DO_NEXT - - .include "words/plusstore.asm" - - ; Arithmetics - ; add n to content of RAM address a-addr - VE_PLUSSTORE: -001e62 ff02 .dw $ff02 -001e63 212b .db "+!" -001e64 1e53 .dw VE_HEAD - .set VE_HEAD = VE_PLUSSTORE - XT_PLUSSTORE: -001e65 1e66 .dw PFA_PLUSSTORE - PFA_PLUSSTORE: -001e66 01fc movw zl, tosl -001e67 9189 -001e68 9199 loadtos -001e69 8120 ldd temp2, Z+0 -001e6a 8131 ldd temp3, Z+1 -001e6b 0f82 add tosl, temp2 -001e6c 1f93 adc tosh, temp3 -001e6d 8380 std Z+0, tosl -001e6e 8391 std Z+1, tosh -001e6f 9189 -001e70 9199 loadtos -001e71 cd93 jmp_ DO_NEXT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/rpfetch.asm" - - ; Stack - ; current return stack pointer address - VE_RP_FETCH: -001e72 ff03 .dw $ff03 -001e73 7072 -001e74 0040 .db "rp@",0 -001e75 1e62 .dw VE_HEAD - .set VE_HEAD = VE_RP_FETCH - XT_RP_FETCH: -001e76 1e77 .dw PFA_RP_FETCH - PFA_RP_FETCH: -001e77 939a -001e78 938a savetos -001e79 b78d in tosl, SPL -001e7a b79e in tosh, SPH -001e7b cd89 jmp_ DO_NEXT - .include "words/rpstore.asm" - - ; Stack - ; set return stack pointer - VE_RP_STORE: -001e7c ff03 .dw $ff03 -001e7d 7072 -001e7e 0021 .db "rp!",0 -001e7f 1e72 .dw VE_HEAD - .set VE_HEAD = VE_RP_STORE - XT_RP_STORE: -001e80 1e81 .dw PFA_RP_STORE - PFA_RP_STORE: -001e81 b72f in temp2, SREG -001e82 94f8 cli -001e83 bf8d out SPL, tosl -001e84 bf9e out SPH, tosh -001e85 bf2f out SREG, temp2 -001e86 9189 -001e87 9199 loadtos -001e88 cd7c jmp_ DO_NEXT - .include "words/spfetch.asm" - - ; Stack - ; current data stack pointer - VE_SP_FETCH: -001e89 ff03 .dw $ff03 -001e8a 7073 -001e8b 0040 .db "sp@",0 -001e8c 1e7c .dw VE_HEAD - .set VE_HEAD = VE_SP_FETCH - XT_SP_FETCH: -001e8d 1e8e .dw PFA_SP_FETCH - PFA_SP_FETCH: -001e8e 939a -001e8f 938a savetos -001e90 01ce movw tosl, yl -001e91 cd73 jmp_ DO_NEXT - .include "words/spstore.asm" - - ; Stack - ; set data stack pointer to addr - VE_SP_STORE: -001e92 ff03 .dw $ff03 -001e93 7073 -001e94 0021 .db "sp!",0 -001e95 1e89 .dw VE_HEAD - .set VE_HEAD = VE_SP_STORE - XT_SP_STORE: -001e96 1e97 .dw PFA_SP_STORE - PFA_SP_STORE: -001e97 01ec movw yl, tosl -001e98 9189 -001e99 9199 loadtos -001e9a cd6a jmp_ DO_NEXT - - .include "words/dodo.asm" - - ; System - ; runtime of do - ;VE_DODO: - ; .dw $ff04 - ; .db "(do)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DODO - XT_DODO: -001e9b 1e9c .dw PFA_DODO - PFA_DODO: -001e9c 9129 ld temp2, Y+ -001e9d 9139 ld temp3, Y+ ; limit - PFA_DODO1: -001e9e e8e0 ldi zl, $80 -001e9f 0f3e add temp3, zl -001ea0 1b82 sub tosl, temp2 -001ea1 0b93 sbc tosh, temp3 - -001ea2 933f push temp3 -001ea3 932f push temp2 ; limit ( --> limit + $8000) -001ea4 939f push tosh -001ea5 938f push tosl ; start -> index ( --> index - (limit - $8000) -001ea6 9189 -001ea7 9199 loadtos -001ea8 cd5c jmp_ DO_NEXT - .include "words/i.asm" - - ; Compiler - ; current loop counter - VE_I: -001ea9 ff01 .dw $FF01 -001eaa 0069 .db "i",0 -001eab 1e92 .dw VE_HEAD - .set VE_HEAD = VE_I - XT_I: -001eac 1ead .dw PFA_I - PFA_I: -001ead 939a -001eae 938a savetos -001eaf 918f pop tosl -001eb0 919f pop tosh ; index -001eb1 91ef pop zl -001eb2 91ff pop zh ; limit -001eb3 93ff push zh -001eb4 93ef push zl -001eb5 939f push tosh -001eb6 938f push tosl -001eb7 0f8e add tosl, zl -001eb8 1f9f adc tosh, zh -001eb9 cd4b jmp_ DO_NEXT - .include "words/doplusloop.asm" - - ; System - ; runtime of +loop - ;VE_DOPLUSLOOP: - ; .dw $ff07 - ; .db "(+loop)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOPLUSLOOP - XT_DOPLUSLOOP: -001eba 1ebb .dw PFA_DOPLUSLOOP - PFA_DOPLUSLOOP: -001ebb 91ef pop zl -001ebc 91ff pop zh -001ebd 0fe8 add zl, tosl -001ebe 1ff9 adc zh, tosh -001ebf 9189 -001ec0 9199 loadtos -001ec1 f01b brvs PFA_DOPLUSLOOP_LEAVE - ; next cycle - PFA_DOPLUSLOOP_NEXT: - ; next iteration -001ec2 93ff push zh -001ec3 93ef push zl -001ec4 cd6b rjmp PFA_DOBRANCH ; read next cell from dictionary and jump to its destination - PFA_DOPLUSLOOP_LEAVE: -001ec5 910f pop temp0 -001ec6 911f pop temp1 ; remove limit -001ec7 9611 adiw xl, 1 ; skip branch-back address -001ec8 cd3c jmp_ DO_NEXT - .include "words/doloop.asm" - - ; System - ; runtime of loop - ;VE_DOLOOP: - ; .dw $ff06 - ; .db "(loop)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOLOOP - XT_DOLOOP: -001ec9 1eca .dw PFA_DOLOOP - PFA_DOLOOP: -001eca 91ef pop zl -001ecb 91ff pop zh -001ecc 9631 adiw zl,1 -001ecd f3bb brvs PFA_DOPLUSLOOP_LEAVE -001ece cff3 jmp_ PFA_DOPLUSLOOP_NEXT - .include "words/unloop.asm" - - ; Compiler - ; remove loop-sys, exit the loop and continue execution after it - VE_UNLOOP: -001ecf ff06 .dw $ff06 -001ed0 6e75 -001ed1 6f6c -001ed2 706f .db "unloop" -001ed3 1ea9 .dw VE_HEAD - .set VE_HEAD = VE_UNLOOP - XT_UNLOOP: -001ed4 1ed5 .dw PFA_UNLOOP - PFA_UNLOOP: -001ed5 911f pop temp1 -001ed6 910f pop temp0 -001ed7 911f pop temp1 -001ed8 910f pop temp0 -001ed9 cd2b jmp_ DO_NEXT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;; - - .include "words/cmove_g.asm" - - ; Memory - ; copy data in RAM from higher to lower addresses. - VE_CMOVE_G: -001eda ff06 .dw $ff06 -001edb 6d63 -001edc 766f -001edd 3e65 .db "cmove>" -001ede 1ecf .dw VE_HEAD - .set VE_HEAD = VE_CMOVE_G - XT_CMOVE_G: -001edf 1ee0 .dw PFA_CMOVE_G - PFA_CMOVE_G: -001ee0 93bf push xh -001ee1 93af push xl -001ee2 91e9 ld zl, Y+ -001ee3 91f9 ld zh, Y+ ; addr-to -001ee4 91a9 ld xl, Y+ -001ee5 91b9 ld xh, Y+ ; addr-from -001ee6 2f09 mov temp0, tosh -001ee7 2b08 or temp0, tosl -001ee8 f041 brbs 1, PFA_CMOVE_G1 -001ee9 0fe8 add zl, tosl -001eea 1ff9 adc zh, tosh -001eeb 0fa8 add xl, tosl -001eec 1fb9 adc xh, tosh - PFA_CMOVE_G2: -001eed 911e ld temp1, -X -001eee 9312 st -Z, temp1 -001eef 9701 sbiw tosl, 1 -001ef0 f7e1 brbc 1, PFA_CMOVE_G2 - PFA_CMOVE_G1: -001ef1 91af pop xl -001ef2 91bf pop xh -001ef3 9189 -001ef4 9199 loadtos -001ef5 cd0f jmp_ DO_NEXT - .include "words/byteswap.asm" - - ; Arithmetics - ; exchange the bytes of the TOS - VE_BYTESWAP: -001ef6 ff02 .dw $ff02 -001ef7 3c3e .db "><" -001ef8 1eda .dw VE_HEAD - .set VE_HEAD = VE_BYTESWAP - XT_BYTESWAP: -001ef9 1efa .dw PFA_BYTESWAP - PFA_BYTESWAP: -001efa 2f09 mov temp0, tosh -001efb 2f98 mov tosh, tosl -001efc 2f80 mov tosl, temp0 -001efd cd07 jmp_ DO_NEXT - .include "words/up.asm" - - ; System Variable - ; get user area pointer - VE_UP_FETCH: -001efe ff03 .dw $ff03 -001eff 7075 -001f00 0040 .db "up@",0 -001f01 1ef6 .dw VE_HEAD - .set VE_HEAD = VE_UP_FETCH - XT_UP_FETCH: -001f02 1f03 .dw PFA_UP_FETCH - PFA_UP_FETCH: -001f03 939a -001f04 938a savetos -001f05 01c2 movw tosl, upl -001f06 ccfe jmp_ DO_NEXT - - ; ( addr -- ) - ; System Variable - ; set user area pointer - VE_UP_STORE: -001f07 ff03 .dw $ff03 -001f08 7075 -001f09 0021 .db "up!",0 -001f0a 1efe .dw VE_HEAD - .set VE_HEAD = VE_UP_STORE - XT_UP_STORE: -001f0b 1f0c .dw PFA_UP_STORE - PFA_UP_STORE: -001f0c 012c movw upl, tosl -001f0d 9189 -001f0e 9199 loadtos -001f0f ccf5 jmp_ DO_NEXT - .include "words/1ms.asm" - - ; Time - ; busy waits (almost) exactly 1 millisecond - VE_1MS: -001f10 ff03 .dw $ff03 -001f11 6d31 -001f12 0073 .db "1ms",0 -001f13 1f07 .dw VE_HEAD - .set VE_HEAD = VE_1MS - XT_1MS: -001f14 1f15 .dw PFA_1MS - PFA_1MS: -001f15 ede0 -001f16 e0f7 -001f17 9731 -001f18 f7f1 delay 1000 -001f19 cceb jmp_ DO_NEXT - .include "words/2to_r.asm" - - ; Stack - ; move DTOS to TOR - VE_2TO_R: -001f1a ff03 .dw $ff03 -001f1b 3e32 -001f1c 0072 .db "2>r",0 -001f1d 1f10 .dw VE_HEAD - .set VE_HEAD = VE_2TO_R - XT_2TO_R: -001f1e 1f1f .dw PFA_2TO_R - PFA_2TO_R: -001f1f 01fc movw zl, tosl -001f20 9189 -001f21 9199 loadtos -001f22 939f push tosh -001f23 938f push tosl -001f24 93ff push zh -001f25 93ef push zl -001f26 9189 -001f27 9199 loadtos -001f28 ccdc jmp_ DO_NEXT - .include "words/2r_from.asm" - - ; Stack - ; move DTOR to TOS - VE_2R_FROM: -001f29 ff03 .dw $ff03 -001f2a 7232 -001f2b 003e .db "2r>",0 -001f2c 1f1a .dw VE_HEAD - .set VE_HEAD = VE_2R_FROM - XT_2R_FROM: -001f2d 1f2e .dw PFA_2R_FROM - PFA_2R_FROM: -001f2e 939a -001f2f 938a savetos -001f30 91ef pop zl -001f31 91ff pop zh -001f32 918f pop tosl -001f33 919f pop tosh -001f34 939a -001f35 938a savetos -001f36 01cf movw tosl, zl -001f37 cccd jmp_ DO_NEXT - - .include "words/store-e.asm" - - ; Memory - ; write n (2bytes) to eeprom address - VE_STOREE: -001f38 ff02 .dw $ff02 -001f39 6521 .db "!e" -001f3a 1f29 .dw VE_HEAD - .set VE_HEAD = VE_STOREE - XT_STOREE: -001f3b 1f3c .dw PFA_STOREE - PFA_STOREE: - .if WANT_UNIFIED == 1 - .endif - PFA_STOREE0: -001f3c 01fc movw zl, tosl -001f3d 9189 -001f3e 9199 loadtos -001f3f b72f in_ temp2, SREG -001f40 94f8 cli -001f41 d028 rcall PFA_FETCHE2 -001f42 b30d in_ temp0, EEDR -001f43 1708 cp temp0,tosl -001f44 f009 breq PFA_STOREE3 -001f45 d00b rcall PFA_STOREE1 - PFA_STOREE3: -001f46 9631 adiw zl,1 -001f47 d022 rcall PFA_FETCHE2 -001f48 b30d in_ temp0, EEDR -001f49 1709 cp temp0,tosh -001f4a f011 breq PFA_STOREE4 -001f4b 2f89 mov tosl, tosh -001f4c d004 rcall PFA_STOREE1 - PFA_STOREE4: -001f4d bf2f out_ SREG, temp2 -001f4e 9189 -001f4f 9199 loadtos -001f50 ccb4 jmp_ DO_NEXT - - PFA_STOREE1: -001f51 99e1 sbic EECR, EEPE -001f52 cffe rjmp PFA_STOREE1 - - PFA_STOREE2: ; estore_wait_low_spm: -001f53 b707 in_ temp0, SPMCSR -001f54 fd00 sbrc temp0,SPMEN -001f55 cffd rjmp PFA_STOREE2 - -001f56 bbff out_ EEARH,zh -001f57 bbee out_ EEARL,zl -001f58 bb8d out_ EEDR, tosl -001f59 9ae2 sbi EECR,EEMPE -001f5a 9ae1 sbi EECR,EEPE - -001f5b 9508 ret - .if WANT_UNIFIED == 1 - .endif - .include "words/fetch-e.asm" - - ; Memory - ; read 1 cell from eeprom - VE_FETCHE: -001f5c ff02 .dw $ff02 -001f5d 6540 .db "@e" -001f5e 1f38 .dw VE_HEAD - .set VE_HEAD = VE_FETCHE - XT_FETCHE: -001f5f 1f60 .dw PFA_FETCHE - PFA_FETCHE: - .if WANT_UNIFIED == 1 - .endif - PFA_FETCHE1: -001f60 b72f in_ temp2, SREG -001f61 94f8 cli -001f62 01fc movw zl, tosl -001f63 d006 rcall PFA_FETCHE2 -001f64 b38d in_ tosl, EEDR - -001f65 9631 adiw zl,1 - -001f66 d003 rcall PFA_FETCHE2 -001f67 b39d in_ tosh, EEDR -001f68 bf2f out_ SREG, temp2 -001f69 cc9b jmp_ DO_NEXT - - PFA_FETCHE2: -001f6a 99e1 sbic EECR, EEPE -001f6b cffe rjmp PFA_FETCHE2 - -001f6c bbff out_ EEARH,zh -001f6d bbee out_ EEARL,zl - -001f6e 9ae0 sbi EECR,EERE -001f6f 9508 ret - - .if WANT_UNIFIED == 1 - .endif - .include "words/store-i.asm" - - ; System Value - ; Deferred action to write a single 16bit cell to flash - VE_STOREI: -001f70 ff02 .dw $ff02 -001f71 6921 .db "!i" -001f72 1f5c .dw VE_HEAD - .set VE_HEAD = VE_STOREI - XT_STOREI: -001f73 0c9a .dw PFA_DODEFER1 - PFA_STOREI: -001f74 005c .dw EE_STOREI -001f75 0c3b .dw XT_EDEFERFETCH -001f76 0c45 .dw XT_EDEFERSTORE - .if FLASHEND > $10000 - .else - .include "words/store-i_nrww.asm" - - ; Memory - ; writes n to flash memory using assembly code (code to be placed in boot loader section) - VE_DO_STOREI_NRWW: -001f77 ff09 .dw $ff09 -001f78 2128 -001f79 2d69 -001f7a 726e -001f7b 7777 -001f7c 0029 .db "(!i-nrww)",0 -001f7d 1f70 .dw VE_HEAD - .set VE_HEAD = VE_DO_STOREI_NRWW - XT_DO_STOREI: -001f7e 1f7f .dw PFA_DO_STOREI_NRWW - PFA_DO_STOREI_NRWW: - ; store status register -001f7f b71f in temp1,SREG -001f80 931f push temp1 -001f81 94f8 cli - -001f82 019c movw temp2, tosl ; save the (word) address -001f83 9189 -001f84 9199 loadtos ; get the new value for the flash cell -001f85 93af push xl -001f86 93bf push xh -001f87 93cf push yl -001f88 93df push yh -001f89 d009 rcall DO_STOREI_atmega -001f8a 91df pop yh -001f8b 91cf pop yl -001f8c 91bf pop xh -001f8d 91af pop xl - ; finally clear the stack -001f8e 9189 -001f8f 9199 loadtos -001f90 911f pop temp1 - ; restore status register (and interrupt enable flag) -001f91 bf1f out SREG,temp1 - -001f92 cc72 jmp_ DO_NEXT - - ; - DO_STOREI_atmega: - ; write data to temp page buffer - ; use the values in tosl/tosh at the - ; appropiate place -001f93 d010 rcall pageload - - ; erase page if needed - ; it is needed if a bit goes from 0 to 1 -001f94 94e0 com temp4 -001f95 94f0 com temp5 -001f96 218e and tosl, temp4 -001f97 219f and tosh, temp5 -001f98 2b98 or tosh, tosl -001f99 f019 breq DO_STOREI_writepage -001f9a 01f9 movw zl, temp2 -001f9b e002 ldi temp0,(1<8000 - .elif AMFORTH_NRWW_SIZE>4000 - .elif AMFORTH_NRWW_SIZE>2000 - .include "dict/core_2k.inc" - - .else - .endif - ; now colon words - ;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/2literal.asm" - - ; Compiler - ; compile a cell pair literal in colon definitions - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2LITERAL: -001fd2 0008 .dw $0008 -001fd3 6c32 -001fd4 7469 -001fd5 7265 -001fd6 6c61 .db "2literal" -001fd7 1fc8 .dw VE_HEAD - .set VE_HEAD = VE_2LITERAL - XT_2LITERAL: -001fd8 1c01 .dw DO_COLON - PFA_2LITERAL: - .endif -001fd9 1cc4 .dw XT_SWAP -001fda 02c4 .dw XT_LITERAL -001fdb 02c4 .dw XT_LITERAL -001fdc 1c20 .dw XT_EXIT - .include "words/equal.asm" - - ; Compare - ; compares two values for equality - VE_EQUAL: -001fdd ff01 .dw $ff01 -001fde 003d .db "=",0 -001fdf 1fd2 .dw VE_HEAD - .set VE_HEAD = VE_EQUAL - XT_EQUAL: -001fe0 1c01 .dw DO_COLON - PFA_EQUAL: -001fe1 1d93 .dw XT_MINUS -001fe2 1d1a .dw XT_ZEROEQUAL -001fe3 1c20 .dw XT_EXIT - .include "words/num-constants.asm" - - .endif - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ONE: -001fe4 ff01 .dw $ff01 -001fe5 0031 .db "1",0 -001fe6 1fdd .dw VE_HEAD - .set VE_HEAD = VE_ONE - XT_ONE: -001fe7 1c48 .dw PFA_DOVARIABLE - PFA_ONE: - .endif -001fe8 0001 .DW 1 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TWO: -001fe9 ff01 .dw $ff01 -001fea 0032 .db "2",0 -001feb 1fe4 .dw VE_HEAD - .set VE_HEAD = VE_TWO - XT_TWO: -001fec 1c48 .dw PFA_DOVARIABLE - PFA_TWO: - .endif -001fed 0002 .DW 2 - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_MINUSONE: -001fee ff02 .dw $ff02 -001fef 312d .db "-1" -001ff0 1fe9 .dw VE_HEAD - .set VE_HEAD = VE_MINUSONE - XT_MINUSONE: -001ff1 1c48 .dw PFA_DOVARIABLE - PFA_MINUSONE: - .endif -001ff2 ffff .DW -1 - .include "dict_appl_core.inc" - - ; do not delete it! - - .set flashlast = pc - .if (pc>FLASHEND) - .endif - - .dseg - ; define a label for the 1st free ram address - HERESTART: - .eseg - .include "amforth-eeprom.inc" -00002a ff ff - ; some configs -00002c 02 0f CFG_DP: .dw DPSTART ; Dictionary Pointer -00002e 1d 01 EE_HERE: .dw HERESTART ; Memory Allocation -000030 84 00 EE_EHERE: .dw EHERESTART ; EEProm Memory Allocation -000032 15 05 CFG_WLSCOPE: .dw XT_GET_CURRENT ; default wordlist scope -000034 52 00 CFG_FORTHRECOGNIZER: .dw CFG_RECOGNIZERLISTLEN ; Recognizer word set - ; LEAVE stack is between data stack and return stack. -000036 10 04 CFG_LP0: .dw stackstart+1 -000038 54 0e CFG_TURNKEY: .dw XT_APPLTURNKEY ; TURNKEY -00003a b7 05 CFG_ENVIRONMENT:.dw VE_ENVHEAD ; environmental queries -00003c 3e 00 CFG_CURRENT: .dw CFG_FORTHWORDLIST ; forth-wordlist -00003e ee 1f CFG_FORTHWORDLIST:.dw VE_HEAD ; pre-defined (compiled in) wordlist - CFG_ORDERLISTLEN: -000040 01 00 .dw 1 - CFG_ORDERLIST: ; list of wordlist id, exactly numwordlist entries -000042 3e 00 .dw CFG_FORTHWORDLIST ; get/set-order -000044 .byte (NUMWORDLISTS-1)*CELLSIZE ; one slot is already used - CFG_RECOGNIZERLISTLEN: -000052 02 00 .dw 2 - CFG_RECOGNIZERLIST: -000054 ab 0b .dw XT_REC_FIND -000056 97 0b .dw XT_REC_NUM -000058 .byte (NUMRECOGNIZERS-2)*CELLSIZE ; two slots are already used - - EE_STOREI: -00005c 7e 1f .dw XT_DO_STOREI ; Store a cell into flash - - ; MARKER saves everything up to here. Nothing beyond gets saved - EE_MARKER: -00005e 5e 00 .dw EE_MARKER - - ; default user area - EE_INITUSER: -000060 00 00 .dw 0 ; USER_STATE -000062 00 00 .dw 0 ; USER_FOLLOWER -000064 5f 04 .dw rstackstart ; USER_RP -000066 0f 04 .dw stackstart ; USER_SP0 -000068 0f 04 .dw stackstart ; USER_SP - -00006a 00 00 .dw 0 ; USER_HANDLER -00006c 0a 00 .dw 10 ; USER_BASE - -00006e 98 00 .dw XT_TX ; USER_EMIT -000070 a6 00 .dw XT_TXQ ; USER_EMITQ -000072 6d 00 .dw XT_RX ; USER_KEY -000074 88 00 .dw XT_RXQ ; USER_KEYQ -000076 ac 0d .dw XT_SOURCETIB ; USER_SOURCE -000078 00 00 .dw 0 ; USER_G_IN -00007a 99 0d .dw XT_REFILLTIB ; USER_REFILL -00007c 99 0a .dw XT_DEFAULT_PROMPTOK -00007e b8 0a .dw XT_DEFAULT_PROMPTERROR -000080 a8 0a .dw XT_DEFAULT_PROMPTREADY - - ; calculate baud rate error - .equ UBRR_VAL = ((F_CPU+BAUD*8)/(BAUD*16)-1) ; smart round - .equ BAUD_REAL = (F_CPU/(16*(UBRR_VAL+1))) ; effective baud rate - .equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000) ; error in pro mille - - .if ((BAUD_ERROR>BAUD_MAXERROR) || (BAUD_ERROR<-BAUD_MAXERROR)) - .endif - EE_UBRRVAL: -000082 0c 00 .dw UBRR_VAL ; BAUDRATE - ; 1st free address in EEPROM. - EHERESTART: - .cseg - - -RESOURCE USE INFORMATION ------------------------- - -Notice: -The register and instruction counts are symbol table hit counts, -and hence implicitly used resources are not counted, eg, the -'lpm' instruction without operands implicitly uses r0 and z, -none of which are counted. - -x,y,z are separate entities in the symbol table and are -counted separately from r26..r31 here. - -.dseg memory usage only counts static data declared with .byte - -"ATmega16" register use summary: -r0 : 25 r1 : 5 r2 : 10 r3 : 12 r4 : 4 r5 : 1 r6 : 0 r7 : 0 -r8 : 0 r9 : 0 r10: 1 r11: 6 r12: 0 r13: 0 r14: 22 r15: 20 -r16: 85 r17: 61 r18: 61 r19: 37 r20: 13 r21: 11 r22: 11 r23: 3 -r24: 203 r25: 139 r26: 28 r27: 17 r28: 7 r29: 4 r30: 85 r31: 47 -x : 4 y : 209 z : 50 -Registers used: 29 out of 35 (82.9%) - -"ATmega16" instruction use summary: -.lds : 0 .sts : 0 adc : 22 add : 17 adiw : 17 and : 4 -andi : 3 asr : 2 bclr : 0 bld : 0 brbc : 2 brbs : 7 -brcc : 3 brcs : 1 break : 0 breq : 6 brge : 1 brhc : 0 -brhs : 0 brid : 0 brie : 0 brlo : 1 brlt : 3 brmi : 3 -brne : 20 brpl : 0 brsh : 0 brtc : 0 brts : 0 brvc : 0 -brvs : 2 bset : 0 bst : 0 call : 2 cbi : 7 cbr : 1 -clc : 2 clh : 0 cli : 7 cln : 0 clr : 14 cls : 0 -clt : 0 clv : 0 clz : 0 com : 14 cp : 11 cpc : 10 -cpi : 2 cpse : 0 dec : 8 eor : 3 fmul : 0 fmuls : 0 -fmulsu: 0 icall : 0 ijmp : 1 in : 25 inc : 3 jmp : 25 -ld : 141 ldd : 4 ldi : 41 lds : 1 lpm : 16 lsl : 14 -lsr : 2 mov : 14 movw : 70 mul : 5 muls : 1 mulsu : 2 -neg : 0 nop : 0 or : 9 ori : 2 out : 22 pop : 45 -push : 39 rcall : 34 ret : 7 reti : 1 rjmp : 92 rol : 23 -ror : 6 sbc : 9 sbci : 3 sbi : 8 sbic : 3 sbis : 0 -sbiw : 16 sbr : 0 sbrc : 5 sbrs : 7 sec : 1 seh : 0 -sei : 1 sen : 0 ser : 4 ses : 0 set : 0 sev : 0 -sez : 0 sleep : 0 spm : 2 st : 77 std : 8 sts : 1 -sub : 6 subi : 3 swap : 0 tst : 0 wdr : 0 -Instructions used: 72 out of 113 (63.7%) - -"ATmega16" memory use summary [bytes]: -Segment Begin End Code Data Used Size Use% ---------------------------------------------------------------- -[.cseg] 0x000000 0x003fe6 2044 9642 11686 16384 71.3% -[.dseg] 0x000060 0x00011d 0 189 189 1024 18.5% -[.eseg] 0x000000 0x000084 0 132 132 512 25.8% - -Assembly complete, 0 errors, 8 warnings diff --git a/amforth-6.5/appl/eval-pollin/p16-8.map b/amforth-6.5/appl/eval-pollin/p16-8.map deleted file mode 100644 index 8e30021..0000000 --- a/amforth-6.5/appl/eval-pollin/p16-8.map +++ /dev/null @@ -1,1961 +0,0 @@ - -AVRASM ver. 2.1.52 p16-8.asm Sun Apr 30 20:10:14 2017 - - -SET DICT_COMPILER2 00000001 -SET cpu_msp430 00000000 -SET cpu_avr8 00000001 -SET USER_STATE 00000000 -SET USER_FOLLOWER 00000002 -SET USER_RP 00000004 -SET USER_SP0 00000006 -SET USER_SP 00000008 -SET USER_HANDLER 0000000a -SET USER_BASE 0000000c -SET USER_EMIT 0000000e -SET USER_EMITQ 00000010 -SET USER_KEY 00000012 -SET USER_KEYQ 00000014 -SET USER_SOURCE 00000016 -SET USER_TO_IN 00000018 -SET USER_REFILL 0000001a -SET USER_P_OK 0000001c -SET USER_P_ERR 0000001e -SET USER_P_RDY 00000020 -SET SYSUSERSIZE 00000022 -DEF zerol r2 -DEF zeroh r3 -DEF upl r4 -DEF uph r5 -DEF al r6 -DEF ah r7 -DEF bl r8 -DEF bh r9 -DEF mcu_boot r10 -DEF isrflag r11 -DEF temp4 r14 -DEF temp5 r15 -DEF temp0 r16 -DEF temp1 r17 -DEF temp2 r18 -DEF temp3 r19 -DEF temp6 r20 -DEF temp7 r21 -DEF tosl r24 -DEF tosh r25 -DEF wl r22 -DEF wh r23 -EQU SIGNATURE_000 0000001e -EQU SIGNATURE_001 00000094 -EQU SIGNATURE_002 00000003 -EQU SREG 0000003f -EQU SPL 0000003d -EQU SPH 0000003e -EQU OCR0 0000003c -EQU GICR 0000003b -EQU GIFR 0000003a -EQU TIMSK 00000039 -EQU TIFR 00000038 -EQU SPMCSR 00000037 -EQU TWCR 00000036 -EQU MCUCR 00000035 -EQU MCUCSR 00000034 -EQU TCCR0 00000033 -EQU TCNT0 00000032 -EQU OSCCAL 00000031 -EQU OCDR 00000031 -EQU SFIOR 00000030 -EQU TCCR1A 0000002f -EQU TCCR1B 0000002e -EQU TCNT1L 0000002c -EQU TCNT1H 0000002d -EQU OCR1AL 0000002a -EQU OCR1AH 0000002b -EQU OCR1BL 00000028 -EQU OCR1BH 00000029 -EQU ICR1L 00000026 -EQU ICR1H 00000027 -EQU TCCR2 00000025 -EQU TCNT2 00000024 -EQU OCR2 00000023 -EQU ASSR 00000022 -EQU WDTCR 00000021 -EQU UBRRH 00000020 -EQU UCSRC 00000020 -EQU EEARL 0000001e -EQU EEARH 0000001f -EQU EEDR 0000001d -EQU EECR 0000001c -EQU PORTA 0000001b -EQU DDRA 0000001a -EQU PINA 00000019 -EQU PORTB 00000018 -EQU DDRB 00000017 -EQU PINB 00000016 -EQU PORTC 00000015 -EQU DDRC 00000014 -EQU PINC 00000013 -EQU PORTD 00000012 -EQU DDRD 00000011 -EQU PIND 00000010 -EQU SPDR 0000000f -EQU SPSR 0000000e -EQU SPCR 0000000d -EQU UDR 0000000c -EQU UCSRA 0000000b -EQU UCSRB 0000000a -EQU UBRRL 00000009 -EQU ACSR 00000008 -EQU ADMUX 00000007 -EQU ADCSRA 00000006 -EQU ADCH 00000005 -EQU ADCL 00000004 -EQU TWDR 00000003 -EQU TWAR 00000002 -EQU TWSR 00000001 -EQU TWBR 00000000 -EQU CS00 00000000 -EQU CS01 00000001 -EQU CS02 00000002 -EQU WGM01 00000003 -EQU CTC0 00000003 -EQU COM00 00000004 -EQU COM01 00000005 -EQU WGM00 00000006 -EQU PWM0 00000006 -EQU FOC0 00000007 -EQU TCNT0_0 00000000 -EQU TCNT0_1 00000001 -EQU TCNT0_2 00000002 -EQU TCNT0_3 00000003 -EQU TCNT0_4 00000004 -EQU TCNT0_5 00000005 -EQU TCNT0_6 00000006 -EQU TCNT0_7 00000007 -EQU OCR0_0 00000000 -EQU OCR0_1 00000001 -EQU OCR0_2 00000002 -EQU OCR0_3 00000003 -EQU OCR0_4 00000004 -EQU OCR0_5 00000005 -EQU OCR0_6 00000006 -EQU OCR0_7 00000007 -EQU TOIE0 00000000 -EQU OCIE0 00000001 -EQU TOV0 00000000 -EQU OCF0 00000001 -EQU PSR10 00000000 -EQU TOIE1 00000002 -EQU OCIE1B 00000003 -EQU OCIE1A 00000004 -EQU TICIE1 00000005 -EQU TOV1 00000002 -EQU OCF1B 00000003 -EQU OCF1A 00000004 -EQU ICF1 00000005 -EQU WGM10 00000000 -EQU PWM10 00000000 -EQU WGM11 00000001 -EQU PWM11 00000001 -EQU FOC1B 00000002 -EQU FOC1A 00000003 -EQU COM1B0 00000004 -EQU COM1B1 00000005 -EQU COM1A0 00000006 -EQU COM1A1 00000007 -EQU CS10 00000000 -EQU CS11 00000001 -EQU CS12 00000002 -EQU WGM12 00000003 -EQU CTC10 00000003 -EQU CTC1 00000003 -EQU WGM13 00000004 -EQU CTC11 00000004 -EQU ICES1 00000006 -EQU ICNC1 00000007 -EQU GIMSK 0000003b -EQU IVCE 00000000 -EQU IVSEL 00000001 -EQU INT2 00000005 -EQU INT0 00000006 -EQU INT1 00000007 -EQU INTF2 00000005 -EQU INTF0 00000006 -EQU INTF1 00000007 -EQU ISC00 00000000 -EQU ISC01 00000001 -EQU ISC10 00000002 -EQU ISC11 00000003 -EQU ISC2 00000006 -EQU EEDR0 00000000 -EQU EEDR1 00000001 -EQU EEDR2 00000002 -EQU EEDR3 00000003 -EQU EEDR4 00000004 -EQU EEDR5 00000005 -EQU EEDR6 00000006 -EQU EEDR7 00000007 -EQU EERE 00000000 -EQU EEWE 00000001 -EQU EEMWE 00000002 -EQU EEWEE 00000002 -EQU EERIE 00000003 -EQU SREG_C 00000000 -EQU SREG_Z 00000001 -EQU SREG_N 00000002 -EQU SREG_V 00000003 -EQU SREG_S 00000004 -EQU SREG_H 00000005 -EQU SREG_T 00000006 -EQU SREG_I 00000007 -EQU SM0 00000004 -EQU SM1 00000005 -EQU SE 00000006 -EQU SM2 00000007 -EQU MCUSR 00000034 -EQU PORF 00000000 -EQU EXTRF 00000001 -EQU EXTREF 00000001 -EQU BORF 00000002 -EQU WDRF 00000003 -EQU JTRF 00000004 -EQU JTD 00000007 -EQU CAL0 00000000 -EQU CAL1 00000001 -EQU CAL2 00000002 -EQU CAL3 00000003 -EQU CAL4 00000004 -EQU CAL5 00000005 -EQU CAL6 00000006 -EQU CAL7 00000007 -EQU PSR2 00000001 -EQU PUD 00000002 -EQU TOIE2 00000006 -EQU OCIE2 00000007 -EQU TOV2 00000006 -EQU OCF2 00000007 -EQU CS20 00000000 -EQU CS21 00000001 -EQU CS22 00000002 -EQU WGM21 00000003 -EQU CTC2 00000003 -EQU COM20 00000004 -EQU COM21 00000005 -EQU WGM20 00000006 -EQU PWM2 00000006 -EQU FOC2 00000007 -EQU TCNT2_0 00000000 -EQU TCNT2_1 00000001 -EQU TCNT2_2 00000002 -EQU TCNT2_3 00000003 -EQU TCNT2_4 00000004 -EQU TCNT2_5 00000005 -EQU TCNT2_6 00000006 -EQU TCNT2_7 00000007 -EQU OCR2_0 00000000 -EQU OCR2_1 00000001 -EQU OCR2_2 00000002 -EQU OCR2_3 00000003 -EQU OCR2_4 00000004 -EQU OCR2_5 00000005 -EQU OCR2_6 00000006 -EQU OCR2_7 00000007 -EQU TCR2UB 00000000 -EQU OCR2UB 00000001 -EQU TCN2UB 00000002 -EQU AS2 00000003 -EQU SPDR0 00000000 -EQU SPDR1 00000001 -EQU SPDR2 00000002 -EQU SPDR3 00000003 -EQU SPDR4 00000004 -EQU SPDR5 00000005 -EQU SPDR6 00000006 -EQU SPDR7 00000007 -EQU SPI2X 00000000 -EQU WCOL 00000006 -EQU SPIF 00000007 -EQU SPR0 00000000 -EQU SPR1 00000001 -EQU CPHA 00000002 -EQU CPOL 00000003 -EQU MSTR 00000004 -EQU DORD 00000005 -EQU SPE 00000006 -EQU SPIE 00000007 -EQU UDR0 00000000 -EQU UDR1 00000001 -EQU UDR2 00000002 -EQU UDR3 00000003 -EQU UDR4 00000004 -EQU UDR5 00000005 -EQU UDR6 00000006 -EQU UDR7 00000007 -EQU USR 0000000b -EQU MPCM 00000000 -EQU U2X 00000001 -EQU UPE 00000002 -EQU PE 00000002 -EQU DOR 00000003 -EQU FE 00000004 -EQU UDRE 00000005 -EQU TXC 00000006 -EQU RXC 00000007 -EQU UCR 0000000a -EQU TXB8 00000000 -EQU RXB8 00000001 -EQU UCSZ2 00000002 -EQU CHR9 00000002 -EQU TXEN 00000003 -EQU RXEN 00000004 -EQU UDRIE 00000005 -EQU TXCIE 00000006 -EQU RXCIE 00000007 -EQU UCPOL 00000000 -EQU UCSZ0 00000001 -EQU UCSZ1 00000002 -EQU USBS 00000003 -EQU UPM0 00000004 -EQU UPM1 00000005 -EQU UMSEL 00000006 -EQU URSEL 00000007 -EQU UBRRHI 00000020 -EQU I2BR 00000000 -EQU TWBR0 00000000 -EQU TWBR1 00000001 -EQU TWBR2 00000002 -EQU TWBR3 00000003 -EQU TWBR4 00000004 -EQU TWBR5 00000005 -EQU TWBR6 00000006 -EQU TWBR7 00000007 -EQU I2CR 00000036 -EQU TWIE 00000000 -EQU I2IE 00000000 -EQU TWEN 00000002 -EQU I2EN 00000002 -EQU ENI2C 00000002 -EQU TWWC 00000003 -EQU I2WC 00000003 -EQU TWSTO 00000004 -EQU I2STO 00000004 -EQU TWSTA 00000005 -EQU I2STA 00000005 -EQU TWEA 00000006 -EQU I2EA 00000006 -EQU TWINT 00000007 -EQU I2INT 00000007 -EQU I2SR 00000001 -EQU TWPS0 00000000 -EQU TWS0 00000000 -EQU I2GCE 00000000 -EQU TWPS1 00000001 -EQU TWS1 00000001 -EQU TWS3 00000003 -EQU I2S3 00000003 -EQU TWS4 00000004 -EQU I2S4 00000004 -EQU TWS5 00000005 -EQU I2S5 00000005 -EQU TWS6 00000006 -EQU I2S6 00000006 -EQU TWS7 00000007 -EQU I2S7 00000007 -EQU I2DR 00000003 -EQU TWD0 00000000 -EQU TWD1 00000001 -EQU TWD2 00000002 -EQU TWD3 00000003 -EQU TWD4 00000004 -EQU TWD5 00000005 -EQU TWD6 00000006 -EQU TWD7 00000007 -EQU I2AR 00000002 -EQU TWGCE 00000000 -EQU TWA0 00000001 -EQU TWA1 00000002 -EQU TWA2 00000003 -EQU TWA3 00000004 -EQU TWA4 00000005 -EQU TWA5 00000006 -EQU TWA6 00000007 -EQU ACME 00000003 -EQU ACIS0 00000000 -EQU ACIS1 00000001 -EQU ACIC 00000002 -EQU ACIE 00000003 -EQU ACI 00000004 -EQU ACO 00000005 -EQU ACBG 00000006 -EQU ACD 00000007 -EQU MUX0 00000000 -EQU MUX1 00000001 -EQU MUX2 00000002 -EQU MUX3 00000003 -EQU MUX4 00000004 -EQU ADLAR 00000005 -EQU REFS0 00000006 -EQU REFS1 00000007 -EQU ADCSR 00000006 -EQU ADPS0 00000000 -EQU ADPS1 00000001 -EQU ADPS2 00000002 -EQU ADIE 00000003 -EQU ADIF 00000004 -EQU ADATE 00000005 -EQU ADFR 00000005 -EQU ADSC 00000006 -EQU ADEN 00000007 -EQU ADCH0 00000000 -EQU ADCH1 00000001 -EQU ADCH2 00000002 -EQU ADCH3 00000003 -EQU ADCH4 00000004 -EQU ADCH5 00000005 -EQU ADCH6 00000006 -EQU ADCH7 00000007 -EQU ADCL0 00000000 -EQU ADCL1 00000001 -EQU ADCL2 00000002 -EQU ADCL3 00000003 -EQU ADCL4 00000004 -EQU ADCL5 00000005 -EQU ADCL6 00000006 -EQU ADCL7 00000007 -EQU ADTS0 00000005 -EQU ADTS1 00000006 -EQU ADTS2 00000007 -EQU OCDR0 00000000 -EQU OCDR1 00000001 -EQU OCDR2 00000002 -EQU OCDR3 00000003 -EQU OCDR4 00000004 -EQU OCDR5 00000005 -EQU OCDR6 00000006 -EQU OCDR7 00000007 -EQU IDRD 00000007 -EQU SPMCR 00000037 -EQU SPMEN 00000000 -EQU PGERS 00000001 -EQU PGWRT 00000002 -EQU BLBSET 00000003 -EQU RWWSRE 00000004 -EQU ASRE 00000004 -EQU RWWSB 00000006 -EQU ASB 00000006 -EQU SPMIE 00000007 -EQU PORTA0 00000000 -EQU PA0 00000000 -EQU PORTA1 00000001 -EQU PA1 00000001 -EQU PORTA2 00000002 -EQU PA2 00000002 -EQU PORTA3 00000003 -EQU PA3 00000003 -EQU PORTA4 00000004 -EQU PA4 00000004 -EQU PORTA5 00000005 -EQU PA5 00000005 -EQU PORTA6 00000006 -EQU PA6 00000006 -EQU PORTA7 00000007 -EQU PA7 00000007 -EQU DDA0 00000000 -EQU DDA1 00000001 -EQU DDA2 00000002 -EQU DDA3 00000003 -EQU DDA4 00000004 -EQU DDA5 00000005 -EQU DDA6 00000006 -EQU DDA7 00000007 -EQU PINA0 00000000 -EQU PINA1 00000001 -EQU PINA2 00000002 -EQU PINA3 00000003 -EQU PINA4 00000004 -EQU PINA5 00000005 -EQU PINA6 00000006 -EQU PINA7 00000007 -EQU PORTB0 00000000 -EQU PB0 00000000 -EQU PORTB1 00000001 -EQU PB1 00000001 -EQU PORTB2 00000002 -EQU PB2 00000002 -EQU PORTB3 00000003 -EQU PB3 00000003 -EQU PORTB4 00000004 -EQU PB4 00000004 -EQU PORTB5 00000005 -EQU PB5 00000005 -EQU PORTB6 00000006 -EQU PB6 00000006 -EQU PORTB7 00000007 -EQU PB7 00000007 -EQU DDB0 00000000 -EQU DDB1 00000001 -EQU DDB2 00000002 -EQU DDB3 00000003 -EQU DDB4 00000004 -EQU DDB5 00000005 -EQU DDB6 00000006 -EQU DDB7 00000007 -EQU PINB0 00000000 -EQU PINB1 00000001 -EQU PINB2 00000002 -EQU PINB3 00000003 -EQU PINB4 00000004 -EQU PINB5 00000005 -EQU PINB6 00000006 -EQU PINB7 00000007 -EQU PORTC0 00000000 -EQU PC0 00000000 -EQU PORTC1 00000001 -EQU PC1 00000001 -EQU PORTC2 00000002 -EQU PC2 00000002 -EQU PORTC3 00000003 -EQU PC3 00000003 -EQU PORTC4 00000004 -EQU PC4 00000004 -EQU PORTC5 00000005 -EQU PC5 00000005 -EQU PORTC6 00000006 -EQU PC6 00000006 -EQU PORTC7 00000007 -EQU PC7 00000007 -EQU DDC0 00000000 -EQU DDC1 00000001 -EQU DDC2 00000002 -EQU DDC3 00000003 -EQU DDC4 00000004 -EQU DDC5 00000005 -EQU DDC6 00000006 -EQU DDC7 00000007 -EQU PINC0 00000000 -EQU PINC1 00000001 -EQU PINC2 00000002 -EQU PINC3 00000003 -EQU PINC4 00000004 -EQU PINC5 00000005 -EQU PINC6 00000006 -EQU PINC7 00000007 -EQU PORTD0 00000000 -EQU PD0 00000000 -EQU PORTD1 00000001 -EQU PD1 00000001 -EQU PORTD2 00000002 -EQU PD2 00000002 -EQU PORTD3 00000003 -EQU PD3 00000003 -EQU PORTD4 00000004 -EQU PD4 00000004 -EQU PORTD5 00000005 -EQU PD5 00000005 -EQU PORTD6 00000006 -EQU PD6 00000006 -EQU PORTD7 00000007 -EQU PD7 00000007 -EQU DDD0 00000000 -EQU DDD1 00000001 -EQU DDD2 00000002 -EQU DDD3 00000003 -EQU DDD4 00000004 -EQU DDD5 00000005 -EQU DDD6 00000006 -EQU DDD7 00000007 -EQU PIND0 00000000 -EQU PIND1 00000001 -EQU PIND2 00000002 -EQU PIND3 00000003 -EQU PIND4 00000004 -EQU PIND5 00000005 -EQU PIND6 00000006 -EQU PIND7 00000007 -EQU WDP0 00000000 -EQU WDP1 00000001 -EQU WDP2 00000002 -EQU WDE 00000003 -EQU WDTOE 00000004 -EQU WDDE 00000004 -EQU LB1 00000000 -EQU LB2 00000001 -EQU BLB01 00000002 -EQU BLB02 00000003 -EQU BLB11 00000004 -EQU BLB12 00000005 -EQU CKSEL0 00000000 -EQU CKSEL1 00000001 -EQU CKSEL2 00000002 -EQU CKSEL3 00000003 -EQU SUT0 00000004 -EQU SUT1 00000005 -EQU BODEN 00000006 -EQU BODLEVEL 00000007 -EQU BOOTRST 00000000 -EQU BOOTSZ0 00000001 -EQU BOOTSZ1 00000002 -EQU EESAVE 00000003 -EQU CKOPT 00000004 -EQU SPIEN 00000005 -EQU JTAGEN 00000006 -EQU OCDEN 00000007 -DEF XH r27 -DEF XL r26 -DEF YH r29 -DEF YL r28 -DEF ZH r31 -DEF ZL r30 -EQU FLASHEND 00001fff -EQU IOEND 0000003f -EQU SRAM_START 00000060 -EQU SRAM_SIZE 00000400 -EQU RAMEND 0000045f -EQU XRAMEND 00000000 -EQU E2END 000001ff -EQU EEPROMEND 000001ff -EQU EEADRBITS 00000009 -EQU NRWW_START_ADDR 00001c00 -EQU NRWW_STOP_ADDR 00001fff -EQU RWW_START_ADDR 00000000 -EQU RWW_STOP_ADDR 00001bff -EQU PAGESIZE 00000040 -EQU FIRSTBOOTSTART 00001f80 -EQU SECONDBOOTSTART 00001f00 -EQU THIRDBOOTSTART 00001e00 -EQU FOURTHBOOTSTART 00001c00 -EQU SMALLBOOTSTART 00001f80 -EQU LARGEBOOTSTART 00001c00 -EQU INT0addr 00000002 -EQU INT1addr 00000004 -EQU OC2addr 00000006 -EQU OVF2addr 00000008 -EQU ICP1addr 0000000a -EQU OC1Aaddr 0000000c -EQU OC1Baddr 0000000e -EQU OVF1addr 00000010 -EQU OVF0addr 00000012 -EQU SPIaddr 00000014 -EQU URXCaddr 00000016 -EQU UDREaddr 00000018 -EQU UTXCaddr 0000001a -EQU ADCCaddr 0000001c -EQU ERDYaddr 0000001e -EQU ACIaddr 00000020 -EQU TWIaddr 00000022 -EQU INT2addr 00000024 -EQU OC0addr 00000026 -EQU SPMRaddr 00000028 -EQU INT_VECTORS_SIZE 0000002a -EQU ramstart 00000060 -EQU CELLSIZE 00000002 -SET WANT_TIMER_COUNTER_0 00000000 -SET WANT_TIMER_COUNTER_1 00000000 -SET WANT_EXTERNAL_INTERRUPT 00000000 -SET WANT_EEPROM 00000000 -SET WANT_CPU 00000000 -SET WANT_TIMER_COUNTER_2 00000000 -SET WANT_SPI 00000000 -SET WANT_USART 00000000 -SET WANT_TWI 00000000 -SET WANT_ANALOG_COMPARATOR 00000000 -SET WANT_AD_CONVERTER 00000000 -SET WANT_JTAG 00000000 -SET WANT_BOOT_LOAD 00000000 -SET WANT_PORTA 00000000 -SET WANT_PORTB 00000000 -SET WANT_PORTC 00000000 -SET WANT_PORTD 00000000 -SET WANT_WATCHDOG 00000000 -EQU intvecsize 00000002 -EQU pclen 00000002 -CSEG isr 0000011e -EQU INTVECTORS 00000015 -EQU EEPE 00000001 -EQU EEMPE 00000002 -CSEG mcu_info 00000029 -CSEG mcu_ramsize 00000029 -CSEG mcu_eepromsize 0000002a -CSEG mcu_maxdp 0000002b -CSEG mcu_numints 0000002c -CSEG mcu_name 0000002d -SET codestart 00000032 -SET WANT_INTERRUPTS 00000001 -SET WANT_INTERRUPT_COUNTERS 00000000 -SET WANT_ISR_RX 00000001 -SET WANT_IGNORECASE 00000000 -SET WANT_UNIFIED 00000000 -SET TIB_SIZE 0000005a -SET APPUSERSIZE 0000000a -SET rstackstart 0000045f -SET stackstart 0000040f -SET NUMWORDLISTS 00000008 -SET NUMRECOGNIZERS 00000004 -SET BAUD 00009600 -SET BAUD_MAXERROR 0000001e -SET VE_HEAD 00001fee -SET VE_ENVHEAD 000005b7 -SET AMFORTH_RO_SEG 00001c01 -EQU F_CPU 007a1200 -EQU TIMER_INT 00000008 -EQU BAUDRATE_LOW 00000029 -EQU BAUDRATE_HIGH 00000040 -EQU USART_C 00000040 -EQU USART_B 0000002a -EQU USART_A 0000002b -EQU USART_DATA 0000002c -EQU bm_USARTC_en 00000080 -EQU bm_USART_RXRD 00000080 -EQU bm_USART_TXRD 00000020 -EQU bm_ENABLE_TX 00000008 -EQU bm_ENABLE_RX 00000010 -EQU bm_ENABLE_INT_RX 00000080 -EQU bm_ENABLE_INT_TX 00000020 -EQU bm_ASYNC 00000000 -EQU bm_SYNC 00000040 -EQU bm_NO_PARITY 00000000 -EQU bm_EVEN_PARITY 00000020 -EQU bm_ODD_PARITY 00000030 -EQU bm_1STOPBIT 00000000 -EQU bm_2STOPBIT 00000008 -EQU bm_5BIT 00000000 -EQU bm_6BIT 00000002 -EQU bm_7BIT 00000004 -EQU bm_8BIT 00000006 -SET USART_C_VALUE 00000006 -SET USART_B_VALUE 00000098 -EQU usart_rx_size 00000010 -EQU usart_rx_mask 0000000f -DSEG usart_rx_data 00000060 -DSEG usart_rx_in 00000070 -DSEG usart_rx_out 00000071 -CSEG VE_TO_RXBUF 00000032 -CSEG XT_TO_RXBUF 00000038 -CSEG PFA_rx_tobuf 00000039 -CSEG DO_NEXT 00001c05 -CSEG VE_ISR_RX 00000049 -CSEG XT_ISR_RX 0000004e -CSEG DO_COLON 00001c01 -CSEG usart_rx_isr 0000004f -CSEG XT_DOLITERAL 00001c3d -CSEG XT_CFETCH 00001c98 -CSEG XT_DUP 00001cb1 -CSEG XT_EQUAL 00001fe0 -CSEG XT_DOCONDBRANCH 00001c36 -CSEG usart_rx_isr1 00000059 -CSEG XT_COLD 00000ae0 -CSEG XT_EXIT 00001c20 -CSEG XT_USART_INIT_RX_BUFFER 0000005b -CSEG PFA_USART_INIT_RX_BUFFER 0000005c -CSEG XT_INTSTORE 00000213 -CSEG XT_ZERO 00001d54 -CSEG XT_FILL 0000025d -CSEG VE_RX_BUFFER 00000068 -CSEG XT_RX_BUFFER 0000006d -CSEG PFA_RX_BUFFER 0000006e -CSEG XT_RXQ_BUFFER 00000088 -CSEG XT_PLUS 00001d9d -CSEG XT_SWAP 00001cc4 -CSEG XT_1PLUS 00001e2f -CSEG XT_AND 00001e13 -CSEG XT_CSTORE 00001c8d -CSEG VE_RXQ_BUFFER 00000082 -CSEG PFA_RXQ_BUFFER 00000089 -CSEG XT_PAUSE 00000ad8 -CSEG XT_NOTEQUAL 00001d13 -SET XT_RX 0000006d -SET XT_RXQ 00000088 -SET XT_USART_INIT_RX 0000005b -CSEG VE_TX_POLL 00000092 -CSEG XT_TX_POLL 00000098 -CSEG PFA_TX_POLL 00000099 -CSEG XT_TXQ_POLL 000000a6 -CSEG VE_TXQ_POLL 000000a0 -CSEG PFA_TXQ_POLL 000000a7 -SET XT_TX 00000098 -SET XT_TXQ 000000a6 -SET XT_USART_INIT_TX 00000000 -CSEG VE_UBRR 000000af -CSEG XT_UBRR 000000b3 -CSEG PFA_DOVALUE1 00001c6f -CSEG PFA_UBRR 000000b4 -ESEG EE_UBRRVAL 00000082 -CSEG XT_EDEFERFETCH 00000c3b -CSEG XT_EDEFERSTORE 00000c45 -CSEG VE_USART 000000b7 -CSEG XT_USART 000000bc -CSEG PFA_USART 000000bd -CSEG XT_BYTESWAP 00001ef9 -EQU OW_PORT 00000018 -EQU OW_BIT 00000004 -SET OW_DDR 00000017 -SET OW_PIN 00000016 -CSEG VE_OW_RESET 000000d2 -CSEG XT_OW_RESET 000000d8 -CSEG PFA_OW_RESET 000000d9 -SET cycles 00000000 -SET loop_cycles 000007d0 -CSEG VE_OW_SLOT 000000f6 -CSEG XT_OW_SLOT 000000fc -CSEG PFA_OW_SLOT 000000fd -CSEG PFA_OW_SLOT0 0000010a -SET AMFORTH_NRWW_SIZE 000007fc -SET corepc 0000011e -CSEG PFA_COLD 00000ae1 -ESEG intvec 00000000 -DSEG intcnt 00000072 -CSEG VE_MPLUS 00000135 -CSEG XT_MPLUS 00000138 -CSEG PFA_MPLUS 00000139 -CSEG XT_S2D 00000dee -CSEG XT_DPLUS 0000019c -CSEG VE_UDSTAR 0000013c -CSEG XT_UDSTAR 00000140 -CSEG PFA_UDSTAR 00000141 -CSEG XT_TO_R 00001cff -CSEG XT_UMSTAR 00001de0 -CSEG XT_DROP 00001cd9 -CSEG XT_R_FROM 00001cf6 -CSEG XT_ROT 00001ce1 -CSEG VE_UMAX 0000014b -CSEG XT_UMAX 0000014f -CSEG PFA_UMAX 00000150 -CSEG XT_2DUP 000005eb -CSEG XT_ULESS 00001d5c -CSEG UMAX1 00000155 -CSEG VE_UMIN 00000157 -CSEG XT_UMIN 0000015b -CSEG PFA_UMIN 0000015c -CSEG XT_UGREATER 00001d67 -CSEG UMIN1 00000161 -CSEG XT_IMMEDIATEQ 00000163 -CSEG PFA_IMMEDIATEQ 00000164 -CSEG XT_ZEROEQUAL 00001d1a -CSEG IMMEDIATEQ1 0000016c -CSEG XT_ONE 00001fe7 -CSEG XT_TRUE 00001d4b -CSEG VE_NAME2FLAGS 0000016e -CSEG XT_NAME2FLAGS 00000175 -CSEG PFA_NAME2FLAGS 00000176 -CSEG XT_FETCHI 00001fcb -CSEG VE_D2STAR 0000017b -CSEG XT_D2STAR 0000017f -CSEG PFA_D2STAR 00000180 -CSEG VE_D2SLASH 0000018a -CSEG XT_D2SLASH 0000018e -CSEG PFA_D2SLASH 0000018f -CSEG VE_DPLUS 00000199 -CSEG PFA_DPLUS 0000019d -CSEG VE_DMINUS 000001ab -CSEG XT_DMINUS 000001ae -CSEG PFA_DMINUS 000001af -CSEG VE_DINVERT 000001be -CSEG XT_DINVERT 000001c4 -CSEG PFA_DINVERT 000001c5 -CSEG VE_UDOT 000001cf -CSEG XT_UDOT 000001d2 -CSEG PFA_UDOT 000001d3 -CSEG XT_UDDOT 000007b1 -CSEG VE_UDOTR 000001d6 -CSEG XT_UDOTR 000001da -CSEG PFA_UDOTR 000001db -CSEG XT_UDDOTR 000007ba -CSEG VE_SHOWWORDLIST 000001df -CSEG XT_SHOWWORDLIST 000001e8 -CSEG PFA_SHOWWORDLIST 000001e9 -CSEG XT_SHOWWORD 000001ee -CSEG XT_TRAVERSEWORDLIST 00000cde -CSEG PFA_SHOWWORD 000001ef -CSEG XT_NAME2STRING 00000cf9 -CSEG XT_ITYPE 00000827 -CSEG XT_SPACE 00000869 -CSEG VE_WORDS 000001f4 -CSEG XT_WORDS 000001f9 -CSEG PFA_WORDS 000001fa -ESEG CFG_ORDERLISTLEN 00000040 -CSEG XT_FETCHE 00001f5f -CSEG VE_INTON 000001ff -CSEG XT_INTON 00000203 -CSEG PFA_INTON 00000204 -CSEG VE_INTOFF 00000207 -CSEG XT_INTOFF 0000020b -CSEG PFA_INTOFF 0000020c -CSEG VE_INTSTORE 0000020f -CSEG PFA_INTSTORE 00000214 -CSEG XT_STOREE 00001f3b -CSEG VE_INTFETCH 00000219 -CSEG XT_INTFETCH 0000021d -CSEG PFA_INTFETCH 0000021e -CSEG VE_INTTRAP 00000223 -CSEG XT_INTTRAP 00000229 -CSEG PFA_INTTRAP 0000022a -CSEG XT_ISREXEC 0000022f -CSEG PFA_ISREXEC 00000230 -CSEG XT_EXECUTE 00001c2a -CSEG XT_ISREND 00000234 -CSEG PFA_ISREND 00000235 -CSEG PFA_ISREND1 00000238 -CSEG VE_PICK 00000239 -CSEG XT_PICK 0000023d -CSEG PFA_PICK 0000023e -CSEG XT_CELLS 000005dd -CSEG XT_SP_FETCH 00001e8d -CSEG XT_FETCH 00001c79 -CSEG VE_DOTSTRING 00000244 -CSEG XT_DOTSTRING 00000247 -CSEG PFA_DOTSTRING 00000248 -CSEG XT_SQUOTE 0000024f -CSEG XT_COMPILE 000002a3 -CSEG VE_SQUOTE 0000024c -CSEG PFA_SQUOTE 00000250 -CSEG XT_PARSE 00000a0e -CSEG XT_STATE 000005d0 -CSEG PFA_SQUOTE1 00000258 -CSEG XT_SLITERAL 000002cf -CSEG VE_FILL 00000259 -CSEG PFA_FILL 0000025e -CSEG XT_QDUP 00001cb9 -CSEG PFA_FILL2 0000026a -CSEG XT_BOUNDS 00000de5 -CSEG XT_DODO 00001e9b -CSEG PFA_FILL1 00000265 -CSEG XT_I 00001eac -CSEG XT_DOLOOP 00001ec9 -CSEG VE_NEWEST 0000026c -CSEG XT_NEWEST 00000271 -CSEG PFA_DOVARIABLE 00001c48 -CSEG PFA_NEWEST 00000272 -DSEG ram_newest 00000087 -CSEG VE_LATEST 00000273 -CSEG XT_LATEST 00000278 -CSEG PFA_LATEST 00000279 -DSEG ram_latest 0000008b -CSEG VE_DOCREATE 0000027a -CSEG XT_DOCREATE 00000280 -CSEG PFA_DOCREATE 00000281 -CSEG XT_PARSENAME 00000a3b -CSEG XT_WLSCOPE 000003d7 -CSEG XT_CELLPLUS 000005e3 -CSEG XT_STORE 00001c81 -CSEG XT_HEADER 000003bc -CSEG VE_BACKSLASH 0000028b -CSEG XT_BACKSLASH 0000028e -CSEG PFA_BACKSLASH 0000028f -CSEG XT_SOURCE 00000a22 -CSEG XT_NIP 00001cf0 -CSEG XT_TO_IN 00000604 -CSEG VE_LPAREN 00000294 -CSEG XT_LPAREN 00000297 -CSEG PFA_LPAREN 00000298 -CSEG XT_2DROP 000005f4 -CSEG VE_COMPILE 0000029d -CSEG PFA_COMPILE 000002a4 -CSEG XT_ICELLPLUS 00000c32 -CSEG XT_COMMA 000002ae -CSEG VE_COMMA 000002ab -CSEG PFA_COMMA 000002af -CSEG XT_DP 00000634 -CSEG XT_STOREI 00001f73 -CSEG XT_DOTO 00000c20 -CSEG PFA_DP 00000635 -CSEG VE_BRACKETTICK 000002b6 -CSEG XT_BRACKETTICK 000002ba -CSEG PFA_BRACKETTICK 000002bb -CSEG XT_TICK 00000891 -CSEG XT_LITERAL 000002c4 -CSEG VE_LITERAL 000002be -CSEG PFA_LITERAL 000002c5 -CSEG VE_SLITERAL 000002c9 -CSEG PFA_SLITERAL 000002d0 -CSEG XT_DOSLITERAL 000007f4 -CSEG XT_SCOMMA 00000802 -CSEG XT_GMARK 000002d4 -CSEG PFA_GMARK 000002d5 -CSEG XT_GRESOLVE 000002d9 -CSEG PFA_GRESOLVE 000002da -CSEG XT_QSTACK 00000bde -CSEG XT_LMARK 000002df -CSEG PFA_LMARK 000002e0 -CSEG XT_LRESOLVE 000002e2 -CSEG PFA_LRESOLVE 000002e3 -CSEG VE_AHEAD 000002e6 -CSEG XT_AHEAD 000002eb -CSEG PFA_AHEAD 000002ec -CSEG XT_DOBRANCH 00001c2f -CSEG VE_IF 000002f0 -CSEG XT_IF 000002f3 -CSEG PFA_IF 000002f4 -CSEG VE_ELSE 000002f8 -CSEG XT_ELSE 000002fc -CSEG PFA_ELSE 000002fd -CSEG VE_THEN 00000303 -CSEG XT_THEN 00000307 -CSEG PFA_THEN 00000308 -CSEG VE_BEGIN 0000030a -CSEG XT_BEGIN 0000030f -CSEG PFA_BEGIN 00000310 -CSEG VE_WHILE 00000312 -CSEG XT_WHILE 00000317 -CSEG PFA_WHILE 00000318 -CSEG VE_REPEAT 0000031b -CSEG XT_REPEAT 00000320 -CSEG PFA_REPEAT 00000321 -CSEG XT_AGAIN 00000334 -CSEG VE_UNTIL 00000324 -CSEG XT_UNTIL 00000329 -CSEG PFA_UNTIL 0000032a -CSEG VE_AGAIN 0000032f -CSEG PFA_AGAIN 00000335 -CSEG VE_DO 00000339 -CSEG XT_DO 0000033c -CSEG PFA_DO 0000033d -CSEG XT_TO_L 00000397 -CSEG VE_LOOP 00000343 -CSEG XT_LOOP 00000347 -CSEG PFA_LOOP 00000348 -CSEG XT_ENDLOOP 0000037e -CSEG VE_PLUSLOOP 0000034c -CSEG XT_PLUSLOOP 00000351 -CSEG PFA_PLUSLOOP 00000352 -CSEG XT_DOPLUSLOOP 00001eba -CSEG VE_LEAVE 00000356 -CSEG XT_LEAVE 0000035b -CSEG PFA_LEAVE 0000035c -CSEG XT_UNLOOP 00001ed4 -CSEG VE_QDO 00000361 -CSEG XT_QDO 00000365 -CSEG PFA_QDO 00000366 -CSEG XT_QDOCHECK 0000036d -CSEG PFA_QDOCHECK 0000036e -CSEG PFA_QDOCHECK1 00000375 -CSEG XT_INVERT 00001dfd -CSEG VE_ENDLOOP 00000378 -CSEG PFA_ENDLOOP 0000037f -CSEG LOOP1 00000380 -CSEG XT_L_FROM 0000038b -CSEG LOOP2 00000387 -CSEG VE_L_FROM 00000388 -CSEG PFA_L_FROM 0000038c -CSEG XT_LP 000003aa -CSEG XT_PLUSSTORE 00001e65 -CSEG VE_TO_L 00000394 -CSEG PFA_TO_L 00000398 -CSEG XT_TWO 00001fec -CSEG VE_LP0 0000039f -CSEG XT_LP0 000003a3 -CSEG PFA_LP0 000003a4 -ESEG CFG_LP0 00000036 -CSEG VE_LP 000003a7 -CSEG PFA_LP 000003ab -DSEG ram_lp 0000008d -CSEG VE_CREATE 000003ac -CSEG XT_CREATE 000003b1 -CSEG PFA_CREATE 000003b2 -CSEG XT_REVEAL 000003e0 -CSEG PFA_DOCONSTANT 00001c52 -CSEG VE_HEADER 000003b7 -CSEG PFA_HEADER 000003bd -CSEG XT_GREATERZERO 00001d28 -CSEG PFA_HEADER1 000003ce -CSEG XT_OR 00001e1c -CSEG XT_DOSCOMMA 00000806 -CSEG XT_THROW 000008c8 -CSEG VE_WLSCOPE 000003d1 -CSEG PFA_DODEFER1 00000c9a -CSEG PFA_WLSCOPE 000003d8 -ESEG CFG_WLSCOPE 00000032 -CSEG VE_REVEAL 000003db -CSEG PFA_REVEAL 000003e1 -CSEG REVEAL1 000003eb -CSEG VE_DOES 000003ec -CSEG XT_DOES 000003f1 -CSEG PFA_DOES 000003f2 -CSEG XT_DODOES 00000404 -CSEG DO_DODOES 000003f9 -CSEG PFA_DODOES 00000405 -CSEG XT_NFA2CFA 00000d05 -CSEG VE_COLON 0000040d -CSEG XT_COLON 00000410 -CSEG PFA_COLON 00000411 -CSEG XT_COLONNONAME 0000041b -CSEG VE_COLONNONAME 00000415 -CSEG PFA_COLONNONAME 0000041c -CSEG XT_RBRACKET 00000430 -CSEG VE_SEMICOLON 00000424 -CSEG XT_SEMICOLON 00000427 -CSEG PFA_SEMICOLON 00000428 -CSEG XT_LBRACKET 00000438 -CSEG VE_RBRACKET 0000042d -CSEG PFA_RBRACKET 00000431 -CSEG VE_LBRACKET 00000435 -CSEG PFA_LBRACKET 00000439 -CSEG VE_VARIABLE 0000043d -CSEG XT_VARIABLE 00000443 -CSEG PFA_VARIABLE 00000444 -CSEG XT_HERE 00000645 -CSEG XT_CONSTANT 0000044f -CSEG XT_ALLOT 0000064e -CSEG VE_CONSTANT 00000449 -CSEG PFA_CONSTANT 00000450 -CSEG VE_USER 00000456 -CSEG XT_USER 0000045a -CSEG PFA_USER 0000045b -CSEG PFA_DOUSER 00001c58 -CSEG VE_RECURSE 00000461 -CSEG XT_RECURSE 00000467 -CSEG PFA_RECURSE 00000468 -CSEG VE_IMMEDIATE 0000046c -CSEG XT_IMMEDIATE 00000473 -CSEG PFA_IMMEDIATE 00000474 -CSEG XT_GET_CURRENT 00000515 -CSEG VE_BRACKETCHAR 0000047e -CSEG XT_BRACKETCHAR 00000483 -CSEG PFA_BRACKETCHAR 00000484 -CSEG XT_CHAR 00000971 -CSEG VE_ABORTQUOTE 00000489 -CSEG XT_ABORTQUOTE 0000048e -CSEG PFA_ABORTQUOTE 0000048f -CSEG XT_QABORT 000004a0 -CSEG VE_ABORT 00000493 -CSEG XT_ABORT 00000498 -CSEG PFA_ABORT 00000499 -CSEG VE_QABORT 0000049b -CSEG PFA_QABORT 000004a1 -CSEG QABO1 000004a6 -CSEG VE_GET_STACK 000004a8 -CSEG XT_GET_STACK 000004af -CSEG PFA_N_FETCH_E2 000004c6 -CSEG PFA_N_FETCH_E1 000004bc -CSEG XT_1MINUS 00001e35 -CSEG XT_OVER 00001ccf -CSEG VE_SET_STACK 000004c9 -CSEG XT_SET_STACK 000004d0 -CSEG PFA_SET_STACK 000004d1 -CSEG XT_ZEROLESS 00001d21 -CSEG PFA_SET_STACK0 000004d8 -CSEG PFA_SET_STACK2 000004e5 -CSEG PFA_SET_STACK1 000004e0 -CSEG XT_TUCK 000005fc -CSEG VE_MAPSTACK 000004e7 -CSEG XT_MAPSTACK 000004ee -CSEG PFA_MAPSTACK 000004ef -CSEG PFA_MAPSTACK3 0000050a -CSEG PFA_MAPSTACK1 000004f9 -CSEG XT_R_FETCH 00001d08 -CSEG PFA_MAPSTACK2 00000506 -CSEG VE_GET_CURRENT 0000050d -CSEG PFA_GET_CURRENT 00000516 -ESEG CFG_CURRENT 0000003c -CSEG VE_GET_ORDER 0000051a -CSEG XT_GET_ORDER 00000521 -CSEG PFA_GET_ORDER 00000522 -CSEG VE_CFG_ORDER 00000526 -CSEG XT_CFG_ORDER 0000052d -CSEG PFA_CFG_ORDER 0000052e -CSEG VE_COMPARE 0000052f -CSEG XT_COMPARE 00000535 -CSEG PFA_COMPARE 00000536 -CSEG PFA_COMPARE_LOOP 00000542 -CSEG PFA_COMPARE_NOTEQUAL 00000550 -CSEG PFA_COMPARE_ENDREACHED2 0000054b -CSEG PFA_COMPARE_ENDREACHED 0000054c -CSEG PFA_COMPARE_CHECKLASTCHAR 00000550 -CSEG PFA_COMPARE_DONE 00000552 -CSEG VE_NFA2LFA 00000557 -CSEG XT_NFA2LFA 0000055d -CSEG PFA_NFA2LFA 0000055e -CSEG XT_2SLASH 00001e04 -CSEG VE_ENVIRONMENT 00000563 -CSEG XT_ENVIRONMENT 0000056b -CSEG PFA_ENVIRONMENT 0000056c -ESEG CFG_ENVIRONMENT 0000003a -CSEG VE_ENVWORDLISTS 0000056d -CSEG XT_ENVWORDLISTS 00000574 -CSEG PFA_ENVWORDLISTS 00000575 -CSEG VE_ENVSLASHPAD 00000578 -CSEG XT_ENVSLASHPAD 0000057c -CSEG PFA_ENVSLASHPAD 0000057d -CSEG XT_PAD 0000060a -CSEG XT_MINUS 00001d93 -CSEG VE_ENVSLASHHOLD 00000581 -CSEG XT_ENVSLASHHOLD 00000586 -CSEG PFA_ENVSLASHHOLD 00000587 -CSEG VE_ENV_FORTHNAME 0000058b -CSEG XT_ENV_FORTHNAME 00000592 -CSEG PFA_EN_FORTHNAME 00000593 -CSEG VE_ENV_FORTHVERSION 0000059a -CSEG XT_ENV_FORTHVERSION 000005a0 -CSEG PFA_EN_FORTHVERSION 000005a1 -CSEG VE_ENV_CPU 000005a4 -CSEG XT_ENV_CPU 000005a8 -CSEG PFA_EN_CPU 000005a9 -CSEG XT_ICOUNT 00000853 -CSEG VE_ENV_MCUINFO 000005ad -CSEG XT_ENV_MCUINFO 000005b3 -CSEG PFA_EN_MCUINFO 000005b4 -CSEG VE_ENVUSERSIZE 000005b7 -CSEG XT_ENVUSERSIZE 000005bc -CSEG PFA_ENVUSERSIZE 000005bd -CSEG VE_F_CPU 000005c0 -CSEG XT_F_CPU 000005c5 -CSEG PFA_F_CPU 000005c6 -CSEG VE_STATE 000005cb -CSEG PFA_STATE 000005d1 -DSEG ram_state 0000008f -CSEG VE_BASE 000005d2 -CSEG XT_BASE 000005d6 -CSEG PFA_BASE 000005d7 -CSEG VE_CELLS 000005d8 -CSEG PFA_2STAR 00001e0c -CSEG VE_CELLPLUS 000005de -CSEG PFA_CELLPLUS 000005e4 -CSEG VE_2DUP 000005e7 -CSEG PFA_2DUP 000005ec -CSEG VE_2DROP 000005ef -CSEG PFA_2DROP 000005f5 -CSEG VE_TUCK 000005f8 -CSEG PFA_TUCK 000005fd -CSEG VE_TO_IN 00000600 -CSEG PFA_TO_IN 00000605 -CSEG VE_PAD 00000606 -CSEG PFA_PAD 0000060b -CSEG VE_EMIT 00000610 -CSEG XT_EMIT 00000614 -CSEG PFA_EMIT 00000615 -CSEG XT_UDEFERFETCH 00000c63 -CSEG XT_UDEFERSTORE 00000c6f -CSEG VE_EMITQ 00000618 -CSEG XT_EMITQ 0000061d -CSEG PFA_EMITQ 0000061e -CSEG VE_KEY 00000621 -CSEG XT_KEY 00000625 -CSEG PFA_KEY 00000626 -CSEG VE_KEYQ 00000629 -CSEG XT_KEYQ 0000062d -CSEG PFA_KEYQ 0000062e -CSEG VE_DP 00000631 -ESEG CFG_DP 0000002c -CSEG VE_EHERE 00000638 -CSEG XT_EHERE 0000063d -CSEG PFA_EHERE 0000063e -ESEG EE_EHERE 00000030 -CSEG VE_HERE 00000641 -CSEG PFA_HERE 00000646 -ESEG EE_HERE 0000002e -CSEG VE_ALLOT 00000649 -CSEG PFA_ALLOT 0000064f -CSEG VE_BIN 00000654 -CSEG XT_BIN 00000658 -CSEG PFA_BIN 00000659 -CSEG VE_DECIMAL 0000065d -CSEG XT_DECIMAL 00000663 -CSEG PFA_DECIMAL 00000664 -CSEG VE_HEX 00000669 -CSEG XT_HEX 0000066d -CSEG PFA_HEX 0000066e -CSEG VE_BL 00000673 -CSEG XT_BL 00000676 -CSEG PFA_BL 00000677 -CSEG VE_TURNKEY 00000678 -CSEG XT_TURNKEY 0000067e -CSEG PFA_TURNKEY 0000067f -ESEG CFG_TURNKEY 00000038 -CSEG VE_SLASHMOD 00000682 -CSEG XT_SLASHMOD 00000686 -CSEG PFA_SLASHMOD 00000687 -CSEG PFA_SLASHMOD_1 00000692 -CSEG PFA_SLASHMOD_2 00000698 -CSEG PFA_SLASHMOD_3 0000069b -CSEG PFA_SLASHMOD_5 000006a6 -CSEG PFA_SLASHMOD_4 000006a5 -CSEG PFA_SLASHMODmod_done 000006b1 -CSEG PFA_SLASHMOD_6 000006af -CSEG VE_USLASHMOD 000006b6 -CSEG XT_USLASHMOD 000006bb -CSEG PFA_USLASHMOD 000006bc -CSEG XT_UMSLASHMOD 00001dc2 -CSEG VE_NEGATE 000006c1 -CSEG XT_NEGATE 000006c6 -CSEG PFA_NEGATE 000006c7 -CSEG VE_SLASH 000006ca -CSEG XT_SLASH 000006cd -CSEG PFA_SLASH 000006ce -CSEG VE_MOD 000006d1 -CSEG XT_MOD 000006d5 -CSEG PFA_MOD 000006d6 -CSEG VE_ABS 000006d9 -CSEG XT_ABS 000006dd -CSEG PFA_ABS 000006de -CSEG XT_QNEGATE 00001e3e -CSEG VE_MIN 000006e1 -CSEG XT_MIN 000006e5 -CSEG PFA_MIN 000006e6 -CSEG XT_GREATER 00001d78 -CSEG PFA_MIN1 000006eb -CSEG VE_MAX 000006ed -CSEG XT_MAX 000006f1 -CSEG PFA_MAX 000006f2 -CSEG XT_LESS 00001d6e -CSEG PFA_MAX1 000006f7 -CSEG VE_WITHIN 000006f9 -CSEG XT_WITHIN 000006fe -CSEG PFA_WITHIN 000006ff -CSEG VE_TOUPPER 00000706 -CSEG XT_TOUPPER 0000070c -CSEG PFA_TOUPPER 0000070d -CSEG PFA_TOUPPER0 00000718 -CSEG VE_TOLOWER 00000719 -CSEG XT_TOLOWER 0000071f -CSEG PFA_TOLOWER 00000720 -CSEG PFA_TOLOWER0 0000072b -CSEG VE_HLD 0000072c -CSEG XT_HLD 00000730 -CSEG PFA_HLD 00000731 -DSEG ram_hld 00000091 -CSEG VE_HOLD 00000732 -CSEG XT_HOLD 00000736 -CSEG PFA_HOLD 00000737 -CSEG VE_L_SHARP 00000742 -CSEG XT_L_SHARP 00000745 -CSEG PFA_L_SHARP 00000746 -CSEG VE_SHARP 0000074a -CSEG XT_SHARP 0000074d -CSEG PFA_SHARP 0000074e -CSEG XT_UDSLASHMOD 000007ca -CSEG PFA_SHARP1 0000075b -CSEG VE_SHARP_S 00000760 -CSEG XT_SHARP_S 00000763 -CSEG PFA_SHARP_S 00000764 -CSEG NUMS1 00000764 -CSEG VE_SHARP_G 0000076b -CSEG XT_SHARP_G 0000076e -CSEG PFA_SHARP_G 0000076f -CSEG VE_SIGN 00000776 -CSEG XT_SIGN 0000077a -CSEG PFA_SIGN 0000077b -CSEG PFA_SIGN1 00000781 -CSEG VE_DDOTR 00000782 -CSEG XT_DDOTR 00000786 -CSEG PFA_DDOTR 00000787 -CSEG XT_DABS 00000d5b -CSEG XT_SPACES 00000872 -CSEG XT_TYPE 00000882 -CSEG VE_DOTR 00000795 -CSEG XT_DOTR 00000798 -CSEG PFA_DOTR 00000799 -CSEG VE_DDOT 0000079e -CSEG XT_DDOT 000007a1 -CSEG PFA_DDOT 000007a2 -CSEG VE_DOT 000007a6 -CSEG XT_DOT 000007a9 -CSEG PFA_DOT 000007aa -CSEG VE_UDDOT 000007ad -CSEG PFA_UDDOT 000007b2 -CSEG VE_UDDOTR 000007b6 -CSEG PFA_UDDOTR 000007bb -CSEG VE_UDSLASHMOD 000007c5 -CSEG PFA_UDSLASHMOD 000007cb -CSEG VE_DIGITQ 000007d5 -CSEG XT_DIGITQ 000007da -CSEG PFA_DIGITQ 000007db -CSEG PFA_DOSLITERAL 000007f5 -CSEG VE_SCOMMA 000007ff -CSEG PFA_SCOMMA 00000803 -CSEG PFA_DOSCOMMA 00000807 -CSEG XT_2STAR 00001e0b -CSEG PFA_SCOMMA2 00000819 -CSEG PFA_SCOMMA1 00000813 -CSEG PFA_SCOMMA3 00000820 -CSEG VE_ITYPE 00000822 -CSEG PFA_ITYPE 00000828 -CSEG PFA_ITYPE2 0000083b -CSEG PFA_ITYPE1 00000833 -CSEG XT_LOWEMIT 00000848 -CSEG XT_HIEMIT 00000844 -CSEG PFA_ITYPE3 00000842 -CSEG PFA_HIEMIT 00000845 -CSEG PFA_LOWEMIT 00000849 -CSEG VE_ICOUNT 0000084e -CSEG PFA_ICOUNT 00000854 -CSEG VE_CR 00000859 -CSEG XT_CR 0000085c -CSEG PFA_CR 0000085d -CSEG VE_SPACE 00000864 -CSEG PFA_SPACE 0000086a -CSEG VE_SPACES 0000086d -CSEG PFA_SPACES 00000873 -CSEG SPCS1 00000875 -CSEG SPCS2 0000087c -CSEG VE_TYPE 0000087e -CSEG PFA_TYPE 00000883 -CSEG PFA_TYPE2 0000088d -CSEG PFA_TYPE1 00000888 -CSEG VE_TICK 0000088e -CSEG PFA_TICK 00000892 -CSEG XT_FORTHRECOGNIZER 00000b60 -CSEG XT_RECOGNIZE 00000b36 -CSEG XT_DT_NULL 00000bd1 -CSEG XT_NOOP 00000c06 -CSEG PFA_TICK1 000008a3 -CSEG VE_HANDLER 000008a5 -CSEG XT_HANDLER 000008ab -CSEG PFA_HANDLER 000008ac -CSEG VE_CATCH 000008ad -CSEG XT_CATCH 000008b2 -CSEG PFA_CATCH 000008b3 -CSEG XT_RP_FETCH 00001e76 -CSEG VE_THROW 000008c3 -CSEG PFA_THROW 000008c9 -CSEG PFA_THROW1 000008cf -CSEG XT_RP_STORE 00001e80 -CSEG XT_SP_STORE 00001e96 -CSEG VE_CSKIP 000008dc -CSEG XT_CSKIP 000008e1 -CSEG PFA_CSKIP 000008e2 -CSEG PFA_CSKIP1 000008e3 -CSEG PFA_CSKIP2 000008f0 -CSEG XT_SLASHSTRING 00000a2c -CSEG VE_CSCAN 000008f3 -CSEG XT_CSCAN 000008f8 -CSEG PFA_CSCAN 000008f9 -CSEG PFA_CSCAN1 000008fb -CSEG PFA_CSCAN2 0000090d -CSEG VE_ACCEPT 00000913 -CSEG XT_ACCEPT 00000918 -CSEG PFA_ACCEPT 00000919 -CSEG ACC1 0000091d -CSEG XT_CRLFQ 00000959 -CSEG ACC5 0000094b -CSEG ACC3 0000093b -CSEG ACC6 00000939 -CSEG XT_BS 00000951 -CSEG ACC4 00000949 -CSEG PFA_ACCEPT6 00000942 -CSEG VE_REFILL 00000964 -CSEG XT_REFILL 00000969 -CSEG PFA_REFILL 0000096a -CSEG VE_CHAR 0000096d -CSEG PFA_CHAR 00000972 -CSEG VE_NUMBER 00000976 -CSEG XT_NUMBER 0000097b -CSEG PFA_NUMBER 0000097c -CSEG XT_QSIGN 000009bf -CSEG XT_SET_BASE 000009d2 -CSEG PFA_NUMBER0 00000992 -CSEG XT_2TO_R 00001f1e -CSEG XT_2R_FROM 00001f2d -CSEG XT_TO_NUMBER 000009f0 -CSEG PFA_NUMBER1 000009b4 -CSEG PFA_NUMBER2 000009ab -CSEG PFA_NUMBER6 000009ac -CSEG PFA_NUMBER3 000009a8 -CSEG XT_DNEGATE 00000d68 -CSEG PFA_NUMBER5 000009ba -CSEG PFA_NUMBER4 000009b9 -CSEG PFA_QSIGN 000009c0 -CSEG PFA_NUMBERSIGN_DONE 000009cb -CSEG XT_BASES 000009cd -CSEG PFA_SET_BASE 000009d3 -CSEG SET_BASE1 000009e8 -CSEG SET_BASE2 000009e9 -CSEG VE_TO_NUMBER 000009ea -CSEG TONUM1 000009f1 -CSEG TONUM3 00000a08 -CSEG TONUM2 000009fc -CSEG XT_2SWAP 00000d8c -CSEG VE_PARSE 00000a09 -CSEG PFA_PARSE 00000a0f -CSEG VE_SOURCE 00000a1d -CSEG PFA_SOURCE 00000a23 -CSEG VE_SLASHSTRING 00000a26 -CSEG PFA_SLASHSTRING 00000a2d -CSEG VE_PARSENAME 00000a34 -CSEG PFA_PARSENAME 00000a3c -CSEG XT_SKIPSCANCHAR 00000a3f -CSEG PFA_SKIPSCANCHAR 00000a40 -CSEG VE_FINDXT 00000a51 -CSEG XT_FINDXT 00000a57 -CSEG PFA_FINDXT 00000a58 -CSEG XT_FINDXTA 00000a63 -CSEG PFA_FINDXT1 00000a62 -CSEG PFA_FINDXTA 00000a64 -CSEG XT_SEARCH_WORDLIST 00000cac -CSEG PFA_FINDXTA1 00000a70 -CSEG VE_QUIT 00000a71 -CSEG XT_QUIT 00000a75 -CSEG PFA_QUIT 00000a76 -CSEG XT_SP0 00000b10 -CSEG XT_RP0 00000b1d -CSEG PFA_QUIT2 00000a7e -CSEG PFA_QUIT4 00000a84 -CSEG XT_PROMPTREADY 00000ab4 -CSEG PFA_QUIT3 00000a96 -CSEG XT_INTERPRET 00000b6b -CSEG PFA_QUIT5 00000a94 -CSEG XT_PROMPTERROR 00000acf -CSEG XT_PROMPTOK 00000aa4 -CSEG XT_DEFAULT_PROMPTOK 00000a99 -CSEG PFA_DEFAULT_PROMPTOK 00000a9a -CSEG VE_PROMPTOK 00000aa0 -CSEG PFA_PROMPTOK 00000aa5 -CSEG XT_DEFAULT_PROMPTREADY 00000aa8 -CSEG PFA_DEFAULT_PROMPTREADY 00000aa9 -CSEG VE_PROMPTREADY 00000aaf -CSEG PFA_PROMPTREADY 00000ab5 -CSEG XT_DEFAULT_PROMPTERROR 00000ab8 -CSEG PFA_DEFAULT_PROMPTERROR 00000ab9 -CSEG VE_PROMPTERROR 00000aca -CSEG PFA_PROMPTERROR 00000ad0 -CSEG VE_PAUSE 00000ad3 -CSEG PFA_PAUSE 00000ad9 -DSEG ram_pause 00000093 -CSEG XT_RDEFERFETCH 00000c4f -CSEG XT_RDEFERSTORE 00000c59 -CSEG VE_COLD 00000adc -CSEG clearloop 00000ae8 -DSEG ram_user1 00000095 -CSEG PFA_WARM 00000b03 -CSEG VE_WARM 00000afe -CSEG XT_WARM 00000b02 -CSEG XT_INIT_RAM 00000dd7 -CSEG XT_DEFERSTORE 00000c7a -CSEG VE_SP0 00000b0c -CSEG PFA_SP0 00000b11 -CSEG VE_SP 00000b14 -CSEG XT_SP 00000b17 -CSEG PFA_SP 00000b18 -CSEG VE_RP0 00000b19 -CSEG PFA_RP0 00000b1e -CSEG XT_DORP0 00000b21 -CSEG PFA_DORP0 00000b22 -CSEG VE_DEPTH 00000b23 -CSEG XT_DEPTH 00000b28 -CSEG PFA_DEPTH 00000b29 -CSEG VE_RECOGNIZE 00000b2f -CSEG PFA_RECOGNIZE 00000b37 -CSEG XT_RECOGNIZE_A 00000b41 -CSEG PFA_RECOGNIZE1 00000b40 -CSEG PFA_RECOGNIZE_A 00000b42 -CSEG PFA_RECOGNIZE_A1 00000b52 -CSEG VE_FORTHRECOGNIZER 00000b56 -CSEG PFA_FORTHRECOGNIZER 00000b61 -ESEG CFG_FORTHRECOGNIZER 00000034 -CSEG VE_INTERPRET 00000b64 -CSEG PFA_INTERPRET 00000b6c -CSEG PFA_INTERPRET2 00000b7c -CSEG PFA_INTERPRET1 00000b77 -CSEG VE_DT_NUM 00000b7e -CSEG XT_DT_NUM 00000b83 -CSEG PFA_DT_NUM 00000b84 -CSEG VE_DT_DNUM 00000b87 -CSEG XT_DT_DNUM 00000b8d -CSEG PFA_DT_DNUM 00000b8e -CSEG XT_2LITERAL 00001fd8 -CSEG VE_REC_NUM 00000b91 -CSEG XT_REC_NUM 00000b97 -CSEG PFA_REC_NUM 00000b98 -CSEG PFA_REC_NONUMBER 00000ba3 -CSEG PFA_REC_INTNUM2 00000ba1 -CSEG VE_REC_FIND 00000ba5 -CSEG XT_REC_FIND 00000bab -CSEG PFA_REC_FIND 00000bac -CSEG PFA_REC_WORD_FOUND 00000bb4 -CSEG XT_DT_XT 00000bbb -CSEG VE_DT_XT 00000bb6 -CSEG PFA_DT_XT 00000bbc -CSEG XT_R_WORD_INTERPRET 00000bbf -CSEG XT_R_WORD_COMPILE 00000bc3 -CSEG PFA_R_WORD_INTERPRET 00000bc0 -CSEG PFA_R_WORD_COMPILE 00000bc4 -CSEG PFA_R_WORD_COMPILE1 00000bc9 -CSEG VE_DT_NULL 00000bcb -CSEG PFA_DT_NULL 00000bd2 -CSEG XT_FAIL 00000bd5 -CSEG PFA_FAIL 00000bd6 -CSEG VE_QSTACK 00000bd9 -CSEG PFA_QSTACK 00000bdf -CSEG PFA_QSTACK1 00000be6 -CSEG VE_DOT_VER 00000be7 -CSEG XT_DOT_VER 00000beb -CSEG PFA_DOT_VER 00000bec -CSEG VE_NOOP 00000c02 -CSEG PFA_NOOP 00000c07 -CSEG VE_UNUSED 00000c08 -CSEG XT_UNUSED 00000c0d -CSEG PFA_UNUSED 00000c0e -CSEG VE_TO 00000c12 -CSEG XT_TO 00000c15 -CSEG PFA_TO 00000c16 -CSEG XT_TO_BODY 00000df7 -CSEG PFA_TO1 00000c26 -CSEG PFA_DOTO 00000c21 -CSEG VE_ICELLPLUS 00000c2c -CSEG PFA_ICELLPLUS 00000c33 -CSEG VE_EDEFERFETCH 00000c35 -CSEG PFA_EDEFERFETCH 00000c3c -CSEG VE_EDEFERSTORE 00000c3f -CSEG PFA_EDEFERSTORE 00000c46 -CSEG VE_RDEFERFETCH 00000c49 -CSEG PFA_RDEFERFETCH 00000c50 -CSEG VE_RDEFERSTORE 00000c53 -CSEG PFA_RDEFERSTORE 00000c5a -CSEG VE_UDEFERFETCH 00000c5d -CSEG PFA_UDEFERFETCH 00000c64 -CSEG XT_UP_FETCH 00001f02 -CSEG VE_UDEFERSTORE 00000c69 -CSEG PFA_UDEFERSTORE 00000c70 -CSEG VE_DEFERSTORE 00000c75 -CSEG PFA_DEFERSTORE 00000c7b -CSEG VE_DEFERFETCH 00000c82 -CSEG XT_DEFERFETCH 00000c87 -CSEG PFA_DEFERFETCH 00000c88 -CSEG VE_DODEFER 00000c8e -CSEG XT_DODEFER 00000c94 -CSEG PFA_DODEFER 00000c95 -CSEG VE_SEARCH_WORDLIST 00000ca2 -CSEG PFA_SEARCH_WORDLIST 00000cad -CSEG XT_ISWORD 00000cc1 -CSEG PFA_SEARCH_WORDLIST1 00000cbb -CSEG PFA_ISWORD 00000cc2 -CSEG XT_ICOMPARE 00000d0f -CSEG PFA_ISWORD3 00000ccf -CSEG VE_TRAVERSEWORDLIST 00000cd3 -CSEG PFA_TRAVERSEWORDLIST 00000cdf -CSEG PFA_TRAVERSEWORDLIST1 00000ce0 -CSEG PFA_TRAVERSEWORDLIST2 00000cef -CSEG VE_NAME2STRING 00000cf1 -CSEG PFA_NAME2STRING 00000cfa -CSEG VE_NFA2CFA 00000cff -CSEG PFA_NFA2CFA 00000d06 -CSEG VE_ICOMPARE 00000d09 -CSEG PFA_ICOMPARE 00000d10 -CSEG PFA_ICOMPARE_SAMELEN 00000d1a -CSEG PFA_ICOMPARE_DONE 00000d3d -CSEG PFA_ICOMPARE_LOOP 00000d20 -CSEG PFA_ICOMPARE_LASTCELL 00000d2e -CSEG PFA_ICOMPARE_NEXTLOOP 00000d35 -CSEG VE_STAR 00000d40 -CSEG XT_STAR 00000d43 -CSEG PFA_STAR 00000d44 -CSEG XT_MSTAR 00001da6 -CSEG VE_J 00000d47 -CSEG XT_J 00000d4a -CSEG PFA_J 00000d4b -CSEG VE_DABS 00000d57 -CSEG PFA_DABS 00000d5c -CSEG PFA_DABS1 00000d61 -CSEG VE_DNEGATE 00000d62 -CSEG PFA_DNEGATE 00000d69 -CSEG VE_CMOVE 00000d6e -CSEG XT_CMOVE 00000d73 -CSEG PFA_CMOVE 00000d74 -CSEG PFA_CMOVE1 00000d81 -CSEG PFA_CMOVE2 00000d7d -CSEG VE_2SWAP 00000d87 -CSEG PFA_2SWAP 00000d8d -CSEG VE_REFILLTIB 00000d92 -CSEG XT_REFILLTIB 00000d99 -CSEG PFA_REFILLTIB 00000d9a -CSEG XT_TIB 00000db5 -CSEG XT_NUMBERTIB 00000dbb -CSEG VE_SOURCETIB 00000da5 -CSEG XT_SOURCETIB 00000dac -CSEG PFA_SOURCETIB 00000dad -CSEG VE_TIB 00000db1 -CSEG PFA_TIB 00000db6 -DSEG ram_tib 000000c1 -CSEG VE_NUMBERTIB 00000db7 -CSEG PFA_NUMBERTIB 00000dbc -DSEG ram_sharptib 0000011b -CSEG VE_EE2RAM 00000dbd -CSEG XT_EE2RAM 00000dc2 -CSEG PFA_EE2RAM 00000dc3 -CSEG PFA_EE2RAM_1 00000dc5 -CSEG PFA_EE2RAM_2 00000dcf -CSEG VE_INIT_RAM 00000dd1 -CSEG PFA_INI_RAM 00000dd8 -ESEG EE_INITUSER 00000060 -CSEG VE_BOUNDS 00000de0 -CSEG PFA_BOUNDS 00000de6 -CSEG VE_S2D 00000dea -CSEG PFA_S2D 00000def -CSEG VE_TO_BODY 00000df2 -CSEG PFA_1PLUS 00001e30 -CSEG VE_DOTS 00000df8 -CSEG XT_DOTS 00000dfb -CSEG PFA_DOTS 00000dfc -CSEG PFA_DOTS2 00000e0a -CSEG PFA_DOTS1 00000e05 -CSEG VE_SPIRW 00000e0b -CSEG XT_SPIRW 00000e10 -CSEG PFA_SPIRW 00000e11 -CSEG do_spirw 00000e15 -CSEG do_spirw1 00000e16 -CSEG VE_N_SPIR 00000e1e -CSEG XT_N_SPIR 00000e23 -CSEG PFA_N_SPIR 00000e24 -CSEG PFA_N_SPIR_LOOP 00000e29 -CSEG PFA_N_SPIR_LOOP1 00000e2a -CSEG VE_N_SPIW 00000e35 -CSEG XT_N_SPIW 00000e3a -CSEG PFA_N_SPIW 00000e3b -CSEG PFA_N_SPIW_LOOP 00000e40 -CSEG PFA_N_SPIW_LOOP1 00000e42 -CSEG VE_APPLTURNKEY 00000e4c -CSEG XT_APPLTURNKEY 00000e54 -CSEG PFA_APPLTURNKEY 00000e55 -CSEG VE_SET_CURRENT 00000e66 -CSEG XT_SET_CURRENT 00000e6e -CSEG PFA_SET_CURRENT 00000e6f -CSEG VE_WORDLIST 00000e73 -CSEG XT_WORDLIST 00000e79 -CSEG PFA_WORDLIST 00000e7a -CSEG VE_FORTHWORDLIST 00000e83 -CSEG XT_FORTHWORDLIST 00000e8c -CSEG PFA_FORTHWORDLIST 00000e8d -ESEG CFG_FORTHWORDLIST 0000003e -CSEG VE_SET_ORDER 00000e8e -CSEG XT_SET_ORDER 00000e95 -CSEG PFA_SET_ORDER 00000e96 -CSEG VE_SET_RECOGNIZERS 00000e9a -CSEG XT_SET_RECOGNIZERS 00000ea4 -CSEG PFA_SET_RECOGNIZERS 00000ea5 -ESEG CFG_RECOGNIZERLISTLEN 00000052 -CSEG VE_GET_RECOGNIZERS 00000ea9 -CSEG XT_GET_RECOGNIZERS 00000eb3 -CSEG PFA_GET_RECOGNIZERS 00000eb4 -CSEG VE_CODE 00000eb8 -CSEG XT_CODE 00000ebc -CSEG PFA_CODE 00000ebd -CSEG VE_ENDCODE 00000ec3 -CSEG XT_ENDCODE 00000ec9 -CSEG PFA_ENDCODE 00000eca -CSEG VE_MARKER 00000ecf -CSEG XT_MARKER 00000ed5 -CSEG PFA_MARKER 00000ed6 -ESEG EE_MARKER 0000005e -CSEG VE_POSTPONE 00000ed9 -CSEG XT_POSTPONE 00000edf -CSEG PFA_POSTPONE 00000ee0 -CSEG VE_2R_FETCH 00000eee -CSEG XT_2R_FETCH 00000ef2 -CSEG PFA_2R_FETCH 00000ef3 -SET DPSTART 00000f02 -CSEG DO_INTERRUPT 00001c14 -CSEG DO_EXECUTE 00001c0d -CSEG VE_EXIT 00001c1c -CSEG PFA_EXIT 00001c21 -CSEG VE_EXECUTE 00001c24 -CSEG PFA_EXECUTE 00001c2b -CSEG PFA_DOBRANCH 00001c30 -CSEG PFA_DOCONDBRANCH 00001c37 -CSEG PFA_DOLITERAL 00001c3e -CSEG XT_DOVARIABLE 00001c47 -CSEG XT_DOCONSTANT 00001c51 -CSEG XT_DOUSER 00001c57 -CSEG VE_DOVALUE 00001c63 -CSEG XT_DOVALUE 00001c69 -CSEG PFA_DOVALUE 00001c6a -CSEG VE_FETCH 00001c76 -CSEG PFA_FETCH 00001c7a -CSEG PFA_FETCHRAM 00001c7a -CSEG VE_STORE 00001c7e -CSEG PFA_STORE 00001c82 -CSEG PFA_STORERAM 00001c82 -CSEG VE_CSTORE 00001c8a -CSEG PFA_CSTORE 00001c8e -CSEG VE_CFETCH 00001c95 -CSEG PFA_CFETCH 00001c99 -CSEG VE_FETCHU 00001c9d -CSEG XT_FETCHU 00001ca0 -CSEG PFA_FETCHU 00001ca1 -CSEG VE_STOREU 00001ca5 -CSEG XT_STOREU 00001ca8 -CSEG PFA_STOREU 00001ca9 -CSEG VE_DUP 00001cad -CSEG PFA_DUP 00001cb2 -CSEG VE_QDUP 00001cb5 -CSEG PFA_QDUP 00001cba -CSEG PFA_QDUP1 00001cbf -CSEG VE_SWAP 00001cc0 -CSEG PFA_SWAP 00001cc5 -CSEG VE_OVER 00001ccb -CSEG PFA_OVER 00001cd0 -CSEG VE_DROP 00001cd5 -CSEG PFA_DROP 00001cda -CSEG VE_ROT 00001cdd -CSEG PFA_ROT 00001ce2 -CSEG VE_NIP 00001cec -CSEG PFA_NIP 00001cf1 -CSEG VE_R_FROM 00001cf3 -CSEG PFA_R_FROM 00001cf7 -CSEG VE_TO_R 00001cfc -CSEG PFA_TO_R 00001d00 -CSEG VE_R_FETCH 00001d05 -CSEG PFA_R_FETCH 00001d09 -CSEG VE_NOTEQUAL 00001d10 -CSEG PFA_NOTEQUAL 00001d14 -CSEG VE_ZEROEQUAL 00001d17 -CSEG PFA_ZEROEQUAL 00001d1b -CSEG PFA_ZERO1 00001d57 -CSEG PFA_TRUE1 00001d4e -CSEG VE_ZEROLESS 00001d1e -CSEG PFA_ZEROLESS 00001d22 -CSEG VE_GREATERZERO 00001d25 -CSEG PFA_GREATERZERO 00001d29 -CSEG VE_DGREATERZERO 00001d2e -CSEG XT_DGREATERZERO 00001d32 -CSEG PFA_DGREATERZERO 00001d33 -CSEG VE_DXT_ZEROLESS 00001d3c -CSEG XT_DXT_ZEROLESS 00001d40 -CSEG PFA_DXT_ZEROLESS 00001d41 -CSEG VE_TRUE 00001d47 -CSEG PFA_TRUE 00001d4c -CSEG VE_ZERO 00001d51 -CSEG PFA_ZERO 00001d55 -CSEG VE_ULESS 00001d59 -CSEG PFA_ULESS 00001d5d -CSEG VE_UGREATER 00001d64 -CSEG PFA_UGREATER 00001d68 -CSEG VE_LESS 00001d6b -CSEG PFA_LESS 00001d6f -CSEG PFA_LESSDONE 00001d73 -CSEG VE_GREATER 00001d75 -CSEG PFA_GREATER 00001d79 -CSEG PFA_GREATERDONE 00001d7d -CSEG VE_LOG2 00001d80 -CSEG XT_LOG2 00001d84 -CSEG PFA_LOG2 00001d85 -CSEG PFA_LOG2_1 00001d88 -CSEG PFA_LOG2_2 00001d8e -CSEG VE_MINUS 00001d90 -CSEG PFA_MINUS 00001d94 -CSEG VE_PLUS 00001d9a -CSEG PFA_PLUS 00001d9e -CSEG VE_MSTAR 00001da3 -CSEG PFA_MSTAR 00001da7 -CSEG VE_UMSLASHMOD 00001dbd -CSEG PFA_UMSLASHMOD 00001dc3 -CSEG PFA_UMSLASHMODmod 00001dc8 -CSEG PFA_UMSLASHMODmod_loop 00001dc9 -CSEG PFA_UMSLASHMODmod_loop_control 00001dd6 -CSEG PFA_UMSLASHMODmod_subtract 00001dd3 -CSEG PFA_UMSLASHMODmod_done 00001dd8 -CSEG VE_UMSTAR 00001ddc -CSEG PFA_UMSTAR 00001de1 -CSEG VE_INVERT 00001df8 -CSEG PFA_INVERT 00001dfe -CSEG VE_2SLASH 00001e01 -CSEG PFA_2SLASH 00001e05 -CSEG VE_2STAR 00001e08 -CSEG VE_AND 00001e0f -CSEG PFA_AND 00001e14 -CSEG VE_OR 00001e19 -CSEG PFA_OR 00001e1d -CSEG VE_XOR 00001e22 -CSEG XT_XOR 00001e26 -CSEG PFA_XOR 00001e27 -CSEG VE_1PLUS 00001e2c -CSEG VE_1MINUS 00001e32 -CSEG PFA_1MINUS 00001e36 -CSEG VE_QNEGATE 00001e38 -CSEG PFA_QNEGATE 00001e3f -CSEG QNEG1 00001e43 -CSEG VE_LSHIFT 00001e44 -CSEG XT_LSHIFT 00001e49 -CSEG PFA_LSHIFT 00001e4a -CSEG PFA_LSHIFT1 00001e4d -CSEG PFA_LSHIFT2 00001e52 -CSEG VE_RSHIFT 00001e53 -CSEG XT_RSHIFT 00001e58 -CSEG PFA_RSHIFT 00001e59 -CSEG PFA_RSHIFT1 00001e5c -CSEG PFA_RSHIFT2 00001e61 -CSEG VE_PLUSSTORE 00001e62 -CSEG PFA_PLUSSTORE 00001e66 -CSEG VE_RP_FETCH 00001e72 -CSEG PFA_RP_FETCH 00001e77 -CSEG VE_RP_STORE 00001e7c -CSEG PFA_RP_STORE 00001e81 -CSEG VE_SP_FETCH 00001e89 -CSEG PFA_SP_FETCH 00001e8e -CSEG VE_SP_STORE 00001e92 -CSEG PFA_SP_STORE 00001e97 -CSEG PFA_DODO 00001e9c -CSEG PFA_DODO1 00001e9e -CSEG VE_I 00001ea9 -CSEG PFA_I 00001ead -CSEG PFA_DOPLUSLOOP 00001ebb -CSEG PFA_DOPLUSLOOP_LEAVE 00001ec5 -CSEG PFA_DOPLUSLOOP_NEXT 00001ec2 -CSEG PFA_DOLOOP 00001eca -CSEG VE_UNLOOP 00001ecf -CSEG PFA_UNLOOP 00001ed5 -CSEG VE_CMOVE_G 00001eda -CSEG XT_CMOVE_G 00001edf -CSEG PFA_CMOVE_G 00001ee0 -CSEG PFA_CMOVE_G1 00001ef1 -CSEG PFA_CMOVE_G2 00001eed -CSEG VE_BYTESWAP 00001ef6 -CSEG PFA_BYTESWAP 00001efa -CSEG VE_UP_FETCH 00001efe -CSEG PFA_UP_FETCH 00001f03 -CSEG VE_UP_STORE 00001f07 -CSEG XT_UP_STORE 00001f0b -CSEG PFA_UP_STORE 00001f0c -CSEG VE_1MS 00001f10 -CSEG XT_1MS 00001f14 -CSEG PFA_1MS 00001f15 -CSEG VE_2TO_R 00001f1a -CSEG PFA_2TO_R 00001f1f -CSEG VE_2R_FROM 00001f29 -CSEG PFA_2R_FROM 00001f2e -CSEG VE_STOREE 00001f38 -CSEG PFA_STOREE 00001f3c -CSEG PFA_STOREE0 00001f3c -CSEG PFA_FETCHE2 00001f6a -CSEG PFA_STOREE3 00001f46 -CSEG PFA_STOREE1 00001f51 -CSEG PFA_STOREE4 00001f4d -CSEG PFA_STOREE2 00001f53 -CSEG VE_FETCHE 00001f5c -CSEG PFA_FETCHE 00001f60 -CSEG PFA_FETCHE1 00001f60 -CSEG VE_STOREI 00001f70 -CSEG PFA_STOREI 00001f74 -ESEG EE_STOREI 0000005c -CSEG VE_DO_STOREI_NRWW 00001f77 -CSEG XT_DO_STOREI 00001f7e -CSEG PFA_DO_STOREI_NRWW 00001f7f -CSEG DO_STOREI_atmega 00001f93 -CSEG pageload 00001fa4 -CSEG DO_STOREI_writepage 00001f9d -CSEG dospm 00001fbd -EQU pagemask ffffffc0 -CSEG pageload_loop 00001faa -CSEG pageload_newdata 00001fb5 -CSEG pageload_cont 00001fb7 -CSEG pageload_done 00001fbc -CSEG dospm_wait_ee 00001fbd -CSEG dospm_wait_spm 00001fbf -CSEG VE_FETCHI 00001fc8 -CSEG PFA_FETCHI 00001fcc -CSEG VE_2LITERAL 00001fd2 -CSEG PFA_2LITERAL 00001fd9 -CSEG VE_EQUAL 00001fdd -CSEG PFA_EQUAL 00001fe1 -CSEG VE_ONE 00001fe4 -CSEG PFA_ONE 00001fe8 -CSEG VE_TWO 00001fe9 -CSEG PFA_TWO 00001fed -CSEG VE_MINUSONE 00001fee -CSEG XT_MINUSONE 00001ff1 -CSEG PFA_MINUSONE 00001ff2 -SET flashlast 00001ff3 -DSEG HERESTART 0000011d -ESEG EHERESTART 00000084 -ESEG CFG_ORDERLIST 00000042 -ESEG CFG_RECOGNIZERLIST 00000054 -EQU UBRR_VAL 0000000c -EQU BAUD_REAL 0000963d -EQU BAUD_ERROR 00000001 diff --git a/amforth-6.5/appl/eval-pollin/p16-8.xml b/amforth-6.5/appl/eval-pollin/p16-8.xml deleted file mode 100644 index eba211c..0000000 --- a/amforth-6.5/appl/eval-pollin/p16-8.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - Uploading Hexfiles for p16-8 - - - - Writing fuses - - - - diff --git a/amforth-6.5/appl/eval-pollin/p32-16.xml b/amforth-6.5/appl/eval-pollin/p32-16.xml deleted file mode 100644 index 59444f3..0000000 --- a/amforth-6.5/appl/eval-pollin/p32-16.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - Uploading Hexfiles for p32-16 - - - - Download Hexfiles from p32-16 - - - - Writing fuses - - - - diff --git a/amforth-6.5/appl/eval-pollin/p32-8.eep.hex b/amforth-6.5/appl/eval-pollin/p32-8.eep.hex deleted file mode 100644 index a59fb2c..0000000 --- a/amforth-6.5/appl/eval-pollin/p32-8.eep.hex +++ /dev/null @@ -1,7 +0,0 @@ -:10002A00FFFF1B0B1D018400C309520010086D0A53 -:0A003A00F4023E00ED3F01003E001D -:06005200020065065106E4 -:10005C007E3B5E00000000005F080F080F080000E8 -:10006C000A009800A6006D0088006C02000059027E -:08007C00C93CE83CD83C0C0033 -:00000001FF diff --git a/amforth-6.5/appl/eval-pollin/p32-8.hex b/amforth-6.5/appl/eval-pollin/p32-8.hex deleted file mode 100644 index 91b0f2b..0000000 --- a/amforth-6.5/appl/eval-pollin/p32-8.hex +++ /dev/null @@ -1,628 +0,0 @@ -:020000020000FC -:020004001BD10E -:0200080019D10C -:02000C0017D10A -:0200100015D108 -:0200140013D106 -:0200180011D104 -:02001C000FD102 -:020020000DD100 -:020024000BD1FE -:0200280009D1FC -:02002C0007D1FA -:0200300005D1F8 -:0200340003D1F6 -:0200380001D1F4 -:02003C00FFD0F3 -:02004000FDD0F1 -:02004400FBD0EF -:02004800F9D0ED -:02004C00F7D0EB -:10005000F5D00008000400701500080041546D65DB -:100060006761333207FF3E72782D627566000000CB -:100070003900082F10917000E0E6F0E0E10FF31D69 -:10008000008313951F7010937000899199910C94BF -:10009000053806FF6973722D7278320001383D38D9 -:1000A0002C009838B1383D380300DF3F363859000E -:1000B000383D3800203801383D384E003D381A00B0 -:1000C000A53C3D3860003D3816005439983E203834 -:1000D00006FF72782D62756649000138880036384F -:1000E0006E003D3871009838B1383D3860009D3958 -:1000F0009838C4382F3A3D380F00133A3D38710014 -:100100008D38203807FF72783F2D627566006800D1 -:100110000138303D3D38710098383D3870009838CE -:100120001339203807FF74782D706F6C6C008200D3 -:100130000138A600363899003D382C008D3820381B -:1001400008FF74783F2D706F6C6C92000138303D61 -:100150003D382B0098383D382000133A203804FFF2 -:1001600075627272A0006F388200A03DAA3D06FF42 -:100170002B7573617274AF0001383D3898003D38BB -:100180002A008D383D3806003D38C0008D38B30058 -:10019000B138F93A3D3840008D383D3829008D3866 -:1001A0005B00203808FF31772E7265736574B700E5 -:1001B000D9009A938A93BC9AC498E0ECF3E0319703 -:1001C000F1F71FB7F894C49ABC98E0E8F0E03197D3 -:1001D000F1F786B384FF9FEF1FBFBC98C498E0E49B -:1001E000F3E03197F1F7892F0C94053807FF317749 -:1001F0002E736C6F7400D200FD00C498BC9A1FB7B8 -:10020000F894ECE0F0E03197F1F78894879510F4DA -:10021000C49ABC98E2E1F0E03197F1F706B304FD2F -:100220008068E6E6F0E03197F1F7C49ABC98E4E024 -:0C023000F0E03197F1F71FBF0C94053887 -:040000000C94393DE6 -:10023C000A920FB60A920F900F900A94B02CFF936B -:10024C00EF93E2E7F0E00694E00DF31D00800394D9 -:10025C000082EF91FF9109900FBE0990089502FF63 -:10026C006D2BF6000138C73F153C203803FF756431 -:10027C002A0035010138B138FF38E039D938C43893 -:10028C00F638E039E1389D39203804FF756D617816 -:10029C003C010138C93E5C3936385501C438D9386F -:1002AC00203804FF756D696E4B010138C93E673902 -:1002BC0036386101C438D938203801383D380080CF -:1002CC00133A1A3936386C01E63F20384B3920384E -:1002DC000AFF6E616D653E666C616773570101388C -:1002EC00CB3B3D3800FF133A203803FF7665720094 -:1002FC006E010138CF02F803AE3FBD3E7938DD0206 -:10030C00413FC73F16031E033D382E00070334033D -:10031C003F032E04BD3E8138AE3FE502F803203882 -:10032C0004FF6E6F6F707B010138203806FF756E0D -:10033C0075736564960101388D3A233F93392038E3 -:10034C000200746F9C0101383D04D03FB73E7938F0 -:10035C003638BA015107B4015C0720380138F63839 -:10036C00B138C601FF38CB3BB138C601C601CB3B17 -:10037C002A38203807FF692D63656C6C2B00A601A9 -:10038C0001382F3A203808FF69636F6D7061726510 -:10039C00C0010138FF38CF38F63813393638DA0156 -:1003AC00D23ED9384B392038C43854391B0836382A -:1003BC00FD019B3ACF387938CF38CB3BB1383D383B -:1003CC0000015C393638EE01C4383D38FF00133A71 -:1003DC0013393638F501D23E4B39D43A20382F3AFE -:1003EC00C438903CC4383D380200BA3AE001D23EE1 -:1003FC005439203801FF2A00C9010138A639D938EF -:10040C00203801FF6A0000020138763A3D380700B7 -:10041C009D397938763A3D3809009D3979389D39BE -:10042C00203804FF6461627307020138B138213946 -:10043C00363821022802203807FF646E6567617424 -:10044C006500170201383B3CE63F5439153C203817 -:10045C0005FF636D6F76650022023402BF93AF9384 -:10046C00E991F991A991B991092F082B21F01D91CE -:10047C0011930197E1F7AF91BF91899199910C94E8 -:10048C00053805FF3273776170002E020138E138B0 -:10049C00FF38E138F63820380AFF726566696C6CF3 -:1004AC002D7469624702013875023D385A008D047B -:1004BC007B0281385439E23E81384B3920380AFFAF -:1004CC00736F757263652D7469625202013875021F -:1004DC007B027938203803FF746962006502483862 -:1004EC00870004FF2374696271024838E10006FF3B -:1004FC0065653E72616D7702013854399B3ACF388D -:10050C005F3BCF388138903CC438903CC438C93AF2 -:10051C008502D23E203808FF696E69742D72616DB8 -:10052C007D0201383D386000023B3D382200043A20 -:10053C00820220380BFF656E7669726F6E6D656E88 -:10054C007400910248383A0009FF776F72646C6945 -:10055C0073747300000001383D380800203804FF24 -:10056C002F706164AA0201388D3AE83E9339203825 -:10057C0005FF2F686F6C6400B5020138E83E233F1D -:10058C00933920380AFF666F7274682D6E616D6541 -:10059C00BE020138C5030700616D666F7274680096 -:1005AC00203807FF76657273696F6E00C8020138D8 -:1005BC003D384100203803FF63707500D7020138C5 -:1005CC003D382D002404203808FF6D63752D696EAD -:1005DC00666FE10201383D382900203805FF2F7580 -:1005EC0073657200EA0201383D382C00203803FF95 -:1005FC00686C6400A0024838E30004FF686F6C6408 -:10060C00FD0201380103B1387938353AB138FF3879 -:10061C00C4388138F6388D38203802FF3C23030368 -:10062C000138E83E01038138203801FF2300130311 -:10063C000138BD3E79389B03E1383D380900CF388D -:10064C006E3936382C033D3807009D393D38300063 -:10065C009D390703203802FF23731B0301381E0347 -:10066C00C93E1C3A1A3936383503203802FF233E6E -:10067C0031030138D23E01037938E83ECF38933943 -:10068C00203804FF7369676E3C0301382139363812 -:10069C0052033D382D000703203803FF642E7200EF -:1006AC0047030138FF38DA3E1B0216033403E138E6 -:1006BC004B033F03F638CF389339B73F2E0420381D -:1006CC0002FF2E7253030138FF38C73FF638570329 -:1006DC00203802FF642E6603013854395703AE3FAD -:1006EC00203801FF2E006F030138C73F72032038FA -:1006FC0003FF75642E007703013854398B03AE3F2A -:10070C00203804FF75642E727E030138FF381603FF -:10071C0034033F03F638CF389339B73F2E042038D3 -:10072C0006FF75642F6D6F6487030138FF385439E9 -:10073C000839C239F638C438FF38C239F63820388F -:10074C0006FF64696769743F96030138663FB138E8 -:10075C003D38390078393D380001133A9D39B138AC -:10076C003D38400178393D380701133A93393D380B -:10077C0030009339B138BD3E79385C3920380138B6 -:10078C0008392404F638CF382F3A043A9D392F3AD9 -:10079C00FF38203802FF732CA6030138B138D70379 -:1007AC00203801385C07B138043ADA3E0B3A9339F9 -:1007BC00FF3854391B083638EA039B3AB13879387C -:1007CC005C07903CC93AE403F63828393638F10313 -:1007DC00B13898385C07D938203805FF69747970BE -:1007EC006500D0030138B138043ADA3E0B3A93393C -:1007FC00FF3854391B0836380C049B3AB138CB3BC4 -:10080C00B138190415042F3AC93A0404F6382839BA -:10081C0036381304B138CB3B1904D9382038013899 -:10082C00F93A1904203801383D38FF00133AF23EEA -:10083C00203806FF69636F756E74F3030138B138A5 -:10084C002F3AC438CB3B203804FF747970651F04F1 -:10085C000138993F1B08363839049B3AAC3A983822 -:10086C00F23EC93A3404203801FF27002A0401382B -:10087C00B005F305FE05B1388B06DF3FC438CB3B22 -:10088C003D389A01DF3F1C3A36384F043D38F3FFB0 -:10089C00863DD938203805FF63736B6970003A04C4 -:1008AC000138FF38B13836386504CF3898380839F4 -:1008BC00DF3F36386504E63FA1052F385804F6387B -:1008CC00D938203805FF637363616E005104013819 -:1008DC00FF38CF38B13898380839DF3F1A393638F5 -:1008EC008204C438353AC438CF3821391A393638ED -:1008FC0082042F3A2F387004F038CF389339F638F9 -:10090C00D938203806FF6163636570746804013858 -:10091C00CF389D39353ACF38033FB138CE041A3928 -:10092C003638C004B1383D380800DF3F3638B004E3 -:10093C00D938E138C93E7839FF38E138E138F63832 -:10094C003638AE04C604353AFF38CF38F6384F0186 -:10095C002F38BE04B138543F6E393638B704D93805 -:10096C00543FB138F23ECF388D382F3ACF385B0137 -:10097C002F389204D938F038C4389339A13F203835 -:10098C0001383D380800B138F23EAE3FF23E203817 -:10099C000138B1383D380D00DF3FC4383D380A000E -:1009AC00DF3F1C3A203806FF726566696C6C880460 -:1009BC00FF3D1A00C83DD43D04FF63686172D90441 -:1009CC000138B005D9389838203806FF6E756D623D -:1009DC006572E2040138BD3E7938FF383405FF38C2 -:1009EC0047053405F6381C3AFF38B1381A39363811 -:1009FC000705D23EF638D938F638BD3E8138543921 -:100A0C0020381E3B543954392D3B6505B9383638DE -:100A1C002905E63FDF3F3638200598383D382E0053 -:100A2C00DF3F36382105F63836381D052802EB3FF6 -:100A3C002F382F05D938D23EF638D938F638BD3E86 -:100A4C00813854392038D23EF63836382E05273EB8 -:100A5C00E63FF638BD3E81384B3920380138CF3867 -:100A6C0098383D382D00DF3FB138FF383638400517 -:100A7C00E63FA105F638203852380A001000020073 -:100A8C000A000138CF3898383D3823009339B138F3 -:100A9C0054393D380400573E36385D0542059D39C2 -:100AAC00CB3BBD3E8138E63FA1052F385E05D938DA -:100ABC00203807FF3E6E756D62657200EB040138DD -:100ACC00B13836387D05CF389838AB031A393638FB -:100ADC007105D9382038FF384C02BD3E79384001B9 -:100AEC00F63838014C02E63FA1052F386605203850 -:100AFC0005FF7061727365005F050138FF3897055B -:100B0C00E23E7938A105F6386D04B1382F3AE23E51 -:100B1C00653AE63FA105203806FF736F7572636571 -:100B2C007E05FF3D1600C83DD43D07FF2F73747240 -:100B3C00696E670092050138E138CF389D39E1388C -:100B4C00E138933920380AFF70617273652D6E613C -:100B5C006D659B050138543FB40520380138FF38CA -:100B6C009705E23E7938A10508395604F6386D042C -:100B7C00C93E9D399705D9389339E23E81382038E2 -:100B8C0003FF73703000A9056F380600C83DD43DD3 -:100B9C0002FF7370C6055838080003FF72703000EE -:100BAC00CE050138DB05793820385838040005FFAC -:100BBC00646570746800D3050138CA058D3A9339A1 -:100BCC00043A353A203810FF666F7274682D7265DE -:100BDC00636F676E697A6572DD056F383400A03D0E -:100BEC00AA3D09FF7265636F676E697A6500E90556 -:100BFC0001383D380906C4389C091A3936380806BC -:100C0C00D23E8B0620380138E138E138C93E1E3B14 -:100C1C00E1382A382D3BE138B1388B06DF3F3638C6 -:100C2C001A06D93854392038F038F0384B39203876 -:100C3C0009FF696E7465727072657400F70501388E -:100C4C00B005B13836383606F305FE05B73E7938AF -:100C5C0036383106C601CB3B2A388B3F2F38260657 -:100C6C00D23E203806FF64743A6E756D1E065238FB -:100C7C009A017207720707FF64743A646E756D000F -:100C8C00380652389A01D73FD73F07FF7265633A4F -:100C9C006E756D0041060138F00436385D06E63F8E -:100CAC00DF3F36385B063D062038470620388B067A -:100CBC00203808FF7265633A66696E644B0601382A -:100CCC000007B1381A3936386E06D9388B062038F9 -:100CDC007506203805FF64743A7874005F06523844 -:100CEC0079067D06D73F0138D9382A3820380138A3 -:100CFC002139363883065C0720382A38203807FF1C -:100D0C0064743A6E756C6C00700652388F068F06E0 -:100D1C008F0601383D38F3FF863D0FFF7365617216 -:100D2C0063682D776F72646C697374008506013883 -:100D3C00FF3854393D38B206F638CF06B1381A3977 -:100D4C003638AC06D23ED93854392038B138F6068C -:100D5C00C4387501630120380138FF38D938C93ED1 -:100D6C000839EA06CF013638C006F638D938543976 -:100D7C004B392038D23EF6385439203811FF747272 -:100D8C006176657273652D776F72646C697374002C -:100D9C00930601385F3BB1383638E006C93E1E3B3E -:100DAC00C4382A382D3BE1383638E0060B0ACB3BE9 -:100DBC002F38D106D23E20380BFF6E616D653E7325 -:100DCC007472696E6700C406013824043D38FF0054 -:100DDC00133A203807FF6E66613E63666100E206D7 -:100DEC0001380B0A2F3A203807FF66696E642D789C -:100DFC007400F00601383D380C073D3840009C0962 -:100E0C001A3936380B07D23E543920380138FF389E -:100E1C00C93EF6389D06B13836381907FF38F03818 -:100E2C00F038F6384B39203806FF6E6577657374E9 -:100E3C00FA064838E50006FF6C61746573741A078E -:100E4C004838E90008FF2863726561746529210739 -:100E5C000138B0058508B1381F07903C81386A0805 -:100E6C001F078138203801005C00280701389705DE -:100E7C00F038E23E8138203801002800390701386B -:100E8C003D3829008305D23E203807FF636F6D7013 -:100E9C00696C650042070138F638B138C601FF3875 -:100EAC00CB3B5C07203801FF2C004B070138123F6D -:100EBC00733B123F2F3AB401133F203803005B27DA -:100ECC005D00590701383D047207203807006C6932 -:100EDC00746572616C006407013851073D385C071A -:100EEC0020380800736C69746572616C6C0701388A -:100EFC005107C503D30320380138123F5107FFFFB8 -:100F0C00203801388B3F123FC438733B20380138EE -:100F1C00123F203801388B3F5C0720380500616890 -:100F2C00656164007707013851072F388207203834 -:100F3C000200696694070138510736388207203859 -:100F4C000400656C73659E07013851072F388207C2 -:100F5C00C4388707203804007468656EA60701380A -:100F6C00870720380500626567696E00B107013894 -:100F7C008D07203805007768696C6500B807013863 -:100F8C00A107C43820380600726570656174C0070B -:100F9C000138E207B50720380500756E74696C00DE -:100FAC00C90701383D3836385C07900720380500F2 -:100FBC00616761696E00D207013851072F389007BD -:100FCC0020380200646FDD07013851079B3A8D070A -:100FDC0054394508203804006C6F6F70E7070138EE -:100FEC005107C93A2C08203805002B6C6F6F700024 -:100FFC00F10701385107BA3A2C08203805006C6506 -:10100C0061766500FA0701385107D43A990745080B -:10101C00203803003F646F000408013851071B0897 -:10102C00A107EA07C438450820380138C93EDF3F1C -:10103C00B138FF3836382308D23EF638FD3920381F -:10104C0007FF656E646C6F6F70000F0801389007B6 -:10105C003908B93836383508B5072F382E082038F6 -:10106C0002FF6C3E260801385808793879383D382B -:10107C00FEFF5808653A203802FF3E6C36080138EE -:10108C00EB3F5808653A580879388138203803FF07 -:10109C006C70300042086F383600A03DAA3D02FF4C -:1010AC006C704D084838EB0006FF6372656174651F -:1010BC00550801382E078E0851075238203806FF84 -:1010CC006865616465725A080138123FFF38FF3851 -:1010DC00B138283936387C08B1383D3800FF1C3A15 -:1010EC00D703F6385F3B5C07F63820383D38F0FF05 -:1010FC00863D07FF776C73636F7065006508FF3D75 -:10110C003200A03DAA3D06FF72657665616C7F08D2 -:10111C0001381F07903C7938B938363899081F07C1 -:10112C007938C4383B3B20380500646F65733E004A -:10113C00890801385107B20851070E945107A708C6 -:10114C0020389A938A93CB0101967F916F91BF932C -:10115C00AF93DB010C9405380138F6381F07903C2F -:10116C0079385F3BF606733B203801FF3A009A084A -:10117C0001382E07C908D938203807FF3A6E6F6E30 -:10118C00616D6500BB080138123FB1382607813804 -:10119C0051070138DE08203801003B00C308013834 -:1011AC0051072038E6088E08203801FF5D00D20870 -:1011BC000138E63FB73E8138203801005B00DB0880 -:1011CC0001385439B73E8138203808FF766172698E -:1011DC0061626C65E3080138233FFD08EB3F2C3F4F -:1011EC00203808FF636F6E7374616E74EB080138FE -:1011FC002E078E08510748385C07203804FF75739A -:10120C006572F70801382E078E08510758385C07AD -:10121C002038070072656375727365000409013824 -:10122C00260779385C07203809FF696D6D6564699C -:10123C00617465000F090138C3095F3BB138CB3BC2 -:10124C003D38FF7F133AC438733B203806005B638C -:10125C006861725D1A09013851073D38E6045C0774 -:10126C002038060061626F7274222C0901388A3EA4 -:10127C0051074E09203805FF61626F7274003709FF -:10128C0001384B39863D06FF3F61626F727441092C -:10129C000138E13836385409F8034609D23E203873 -:1012AC0009FF6765742D737461636B00490901381C -:1012BC00B138903CC4385F3BB138FF385439C4382E -:1012CC001B08363874099B3AAC3A353AC43ECF38D1 -:1012DC009D395F3BC4384B39BA3A6A09D23EF6386D -:1012EC00203809FF7365742D737461636B005609A4 -:1012FC000138CF382139363886093D38FCFF863D18 -:10130C00C93E3B3BC43854391B08363893099B3AC9 -:10131C00903CDA3E3B3BC93A8E09D938203809FF5C -:10132C006D61702D737461636B0077090138B1388E -:10133C00903CC4385F3BC43E993F1B083638B80913 -:10134C009B3AAC3A5F3BC438FF3808392A38B93875 -:10135C003638B409F638D938D43A2038F638EB3F59 -:10136C00BA3AA709D938543920380BFF6765742D60 -:10137C0063757272656E7400950901383D383C00D6 -:10138C005F3B203809FF6765742D6F7264657200CE -:10139C00BB0901383D3840005D09203809FF636600 -:1013AC00672D6F7264657200C8094838400007FFEA -:1013BC00636F6D7061726500D409E409BF93AF93DC -:1013CC008C0189919991DC01899199919C01899168 -:1013DC009991FC01ED90F190EF1451F40A9519F0EC -:1013EC002A95C1F701C02A95022B11F4882702C057 -:1013FC008FEF00C0982FAF91BF910C94053807FF69 -:10140C006E66613E6C666100DD090138EA062F3AB2 -:10141C00043A9D39203802FF2E73050A0138E20583 -:10142C000A3EAE3FE20554391B083638230A9B3A74 -:10143C00AC3A843C0A3EC93A1E0A203806FF6321A6 -:10144C0040737069110A2A0A03D099270C94053845 -:10145C008FB90EB1087F0EB90EB107FFFACF8FB15D -:10146C00089505FF6E4073706900240A3D0A8C01D3 -:10147C0089919991FC01C8012FB82EB127FFFDCF9E -:10148C002FB121930197C1F7899199910C9405384B -:10149C0005FF6E2173706900370A540A8C0189911B -:1014AC009991FC01C80121912FB92EB127FFFDCFD5 -:1014BC002FB10197C1F7899199910C9405380BFFC5 -:1014CC006170706C7475726E6B6579004E0A0138C0 -:1014DC00BC00973C7F01AE3FAC3E3D38E803C239BF -:1014EC00F038413F7A03C50304006B487A20F803B7 -:1014FC0020380BFF7365742D63757272656E740002 -:10150C00650A01383D383C003B3B203808FF776FBB -:10151C0072646C6973747F0A01381B3F5439CF387D -:10152C003B3BB138903CB4011C3F20380EFF666F3A -:10153C007274682D776F72646C6973748C0A483896 -:10154C003E0009FF7365742D6F72646572009C0A0E -:10155C0001383D3840007E0920380FFF7365742D2B -:10156C007265636F676E697A65727300A70A0138DA -:10157C003D3852007E0920380FFF6765742D726567 -:10158C00636F676E697A65727300B30A01383D3810 -:10159C0052005D09203804FF636F6465C20A01388C -:1015AC002E078E08123FC6015C07203808FF656EB7 -:1015BC00642D636F6465D10A013851070C9451078F -:1015CC000538203808FF286D61726B657229DC0ABA -:1015DC006F385E00A03DAA3D0800706F7374706F89 -:1015EC006E65E80A0138B005F305FE05B138FF3821 -:1015FC00C601C601CB3B2A38F638C601CB3B5C078B -:10160C00203803FF32724000F20A0C0B9A938A9333 -:10161C00EF91FF918F919F919F938F93FF93EF93F6 -:0A162C009A938A93CF010C940538BD -:10700200BF93AF93DB011196B21469F4FD01EE0F49 -:10701200FF1F659175911196FB01EE0FFF1F059100 -:107022001591F80109949A938A938B2D9927BB2481 -:1070320060EC7CE3F1CF04FF65786974070B2138BB -:10704200AF91BF91E1CF07FF657865637574650005 -:107052001C382B38BC0189919991DECF3038FD0163 -:10706200EE0FFF1FA591B591CFCF3738982B89919D -:107072009991A9F31196C8CF3E389A938A93FD014C -:10708200EE0FFF1F859195911196BECF48389A93C6 -:107092008A93FB013196EE0FFF1F85919591B4CF34 -:1070A20052389A938A93CB010196AECF58389A936D -:1070B2008A93FB013196EE0FFF1F85919591840D06 -:1070C200951DA2CF07FF2876616C756529002438CB -:1070D20001382E078E0851076F3820380E94A70802 -:1070E200B138C601CB3B2A38203801FF4000633853 -:1070F2007A38FC018191919187CF01FF2100763886 -:107102008238FC0189919991918380838991999127 -:107112007BCF02FF63217E388E38FC0189919991E1 -:1071220080838991999170CF02FF63408A389938A0 -:10713200FC019927808168CF02FF4075953801389C -:10714200023B9D397938203802FF21759D3801387C -:10715200023B9D398138203803FF64757000A538E1 -:10716200B2389A938A9350CF04FF3F647570AD385A -:10717200BA38082F092B11F09A938A9345CF04FF4E -:1071820073776170B538C5388C01899199911A93DA -:107192000A933ACF04FF6F766572C038D0389A935B -:1071A2008A938A819B8130CF04FF64726F70CB38DF -:1071B200DA388991999128CF03FF726F7400D5381C -:1071C200E2388C0129913991899199913A932A93C4 -:1071D2001A930A9319CF03FF6E697000DD38F138F4 -:1071E200229612CF02FF723EEC38F7389A938A93B6 -:1071F2008F919F9109CF02FF3E72F33800399F931E -:107202008F938991999100CF02FF7240FC3809391E -:107212009A938A938F919F919F938F93F5CE02FFBA -:107222003C3E05390138DF3F1A39203802FF303D34 -:1072320010391B39982BD1F530C002FF303C173979 -:10724200223997FD2AC032C002FF303E1E39293949 -:10725200821593055CF151F120C003FF64303E00BA -:1072620025393339821593058991999182059305C0 -:10727200ECF0E1F012C003FF64303C002E394139DA -:10728200229697FD0C944E390C94573904FF747270 -:1072920075653C394C399A938A938FEF9FEFB4CE40 -:1072A20001FF3000473955399A938A93C101ACCE18 -:1072B20002FF753C51395D39299139918217930743 -:1072C200A8F3A1F3EACF02FF753E59390138C43859 -:1072D2005C39203801FF3C0064396F3929913991BA -:1072E200281739071CF7D9CF01FF3E006B397939CE -:1072F2002991399128173907CCF2C1F2CECF04FF78 -:107302006C6F673275398539FC01992780E18A955E -:1073120022F0EE0FFF1FD8F777CE9A9575CE01FFB8 -:107322002D008039943909911991081B190BC80154 -:107332006BCE01FF2B0090399E3909911991800F74 -:10734200911F62CE02FF6D2A9A39A7398C01899169 -:1073520099919C0131027001209FC0013003F30812 -:10736200900DE11CF31C1203F308900DE11CF31CB9 -:107372009A938A93C70148CE06FF756D2F6D6F648D -:10738200A339C3397C01299139910991199140E1BD -:107392005527000F111F221F331F551F2E153F05A2 -:1073A200520518F003952E193F094A9589F73A9329 -:1073B2002A93C80129CE03FF756D2A00BD39E13930 -:1073C2008C0189919991809FF00122273327909F08 -:1073D200F00D211D331D819FF00D211D331D919F45 -:1073E200200D311DCF019A938A93C9010DCE06FF5C -:1073F200696E76657274DC39FE398095909504CE9B -:1074020002FF322FF839053A95958795FDCD02FF97 -:10741200322A013A0C3A880F991FF6CD03FF616EAA -:107422006400083A143A0991199180239123ECCD12 -:1074320002FF6F720F3A1D3A09911991802B912B1D -:10744200E3CD03FF786F7200193A273A0991199137 -:1074520080279127D9CD02FF312B223A303A01966B -:10746200D3CD02FF312D2C3A363A0197CDCD07FF0D -:107472003F6E656761746500323A013821393638EA -:10748200433A273E203806FF6C7368696674383ABF -:107492004A3AFC018991999131971AF0880F991F04 -:1074A200FBCFB2CD06FF727368696674443A593AEB -:1074B200FC018991999131971AF096958795FBCFA6 -:1074C200A3CD02FF2B21533A663AFC01899199918F -:1074D20020813181820F931F8083918389919991B9 -:1074E20093CD03FF72704000623A773A9A938A937F -:1074F2008DB79EB789CD03FF72702100723A813A2F -:107502002FB7F8948DBF9EBF2FBF899199917CCDE3 -:1075120003FF737040007C3A8E3A9A938A93CE01AD -:1075220073CD03FF73702100893A973AEC01899178 -:1075320099916ACD9C3A29913991E0E83E0F821BDC -:10754200930B3F932F939F938F93899199915CCD46 -:1075520001FF6900923AAD3A9A938A938F919F9173 -:10756200EF91FF91FF93EF939F938F938E0F9F1F46 -:107572004BCDBB3AEF91FF91E80FF91F8991999199 -:107582001BF0FF93EF936BCD0F911F9111963CCDA2 -:10759200CA3AEF91FF913196BBF3F3CF06FF756EB6 -:1075A2006C6F6F70A93AD53A1F910F911F910F918D -:1075B2002BCD06FF636D6F76653ECF3AE03ABF93FF -:1075C200AF93E991F991A991B991092F082B41F053 -:1075D200E80FF91FA80FB91F1E9112930197E1F747 -:1075E200AF91BF91899199910FCD02FF3E3CDA3A5A -:1075F200FA3A092F982F802F07CD03FF75704000AC -:10760200F63A033B9A938A93C201FECC03FF75704C -:107612002100FE3A0C3B2C0189919991F5CC03FF94 -:10762200316D7300073B153BE0EDF7E03197F1F761 -:10763200EBCC03FF323E7200103B1F3BFC018991F1 -:1076420099919F938F93FF93EF9389919991DCCCBA -:1076520003FF32723E001A3B2E3B9A938A93EF91BC -:10766200FF918F919F919A938A93CF01CDCC02FF84 -:107672002165293B3C3BFC01899199912FB7F894F4 -:1076820028D00DB3081709F00BD0319622D00DB3D4 -:10769200091711F0892F04D02FBF89919991B4CC89 -:1076A200E199FECF07B700FDFDCFFFBBEEBB8DBB5F -:1076B200E29AE19A089502FF4065383B603B2FB79A -:1076C200F894FC0106D08DB3319603D09DB32FBF41 -:1076D2009BCCE199FECFFFBBEEBBE09A089502FF7F -:1076E20021695C3BFF3D5C00A03DAA3D09FF2821CA -:1076F200692D6E7277772900703B7F3B1FB71F930E -:10770200F8949C0189919991AF93BF93CF93DF93A2 -:1077120009D0DF91CF91BF91AF91899199911F913A -:107722001FBF72CC10D0E094F0948E219F21982B31 -:1077320019F0F90102E020D0F90104E01DD0F901AD -:1077420000E11AD00895F901E07CFF7FEF01A0E487 -:10775200B0E0FE01EE0FFF1F45915591FE01E217C9 -:10776200F30711F00A0102C07A010C01002704D0CC -:107772002196119771F70895E199FECF17B710FD81 -:10778200FDCFEE0FFF1F016007BFE895089502FFCE -:107792004069773BCC3BFC01EE0FFF1F8591959131 -:1077A20033CC03FF6E3E7200C83BD73BFC01082F6F -:1077B200899199919F938F930A95D1F7EF93FF93B4 -:1077C2008991999121CC03FF6E723E00D23BE93B35 -:1077D2009A938A93FF91EF910E2F8F919F919A9393 -:1077E2008A930A95D1F7CF010FCC03FF64322A00A6 -:1077F200E43BFB3B09911991000F111F881F991F50 -:107802001A930A9301CC03FF64322F00F63B093C22 -:107812000991199195958795179507951A930A934A -:10782200F3CB02FF642B043C163C29913991E99079 -:10783200F99049915991240F351F8E1D9F1D3A933E -:107842002A93E2CB02FF642D123C273C2991399105 -:10785200E990F99049915991421B530BE80AF90AB0 -:107862005A934A93C701D0CB07FF64696E7665725B -:107872007400233C3C3C09911991809590950095A8 -:1078820010951A930A93C0CB04FF2F6D6F64353C99 -:107892004A3C9C0109911991412F432717FF04C0CB -:1078A200109500950F5F1F4F37FF04C0309520954C -:1078B2002F5F3F4FEE24FF1851E1001F111F5A9511 -:1078C20039F447FF04C0109500950F5F1F4F0BC09E -:1078D200EE1CFF1CE21AF30A20F4E20EF31E889457 -:1078E200ECCF0894EACFFA92EA92C8018DCB03FF5B -:1078F20061627300453C0138B1383E3A203804FFDA -:107902007069636B783C01382F3AC43E8D3A9D39D9 -:107912007938203805FF63656C6C2B00803C913C04 -:10792200029672CB04FF2B696E748B3C983C789460 -:107932006BCB04FF2D696E74933C9F3CF89464CB2F -:1079420004FF696E74219A3C01383D3800009D396C -:107952003B3B203804FF696E7440A13C01383D383E -:1079620000009D395F3B203808FF696E742D7472E8 -:107972006170AB3CBC3CB82E8991999145CB0138E2 -:10798200AF3C2A38C53C2038C63C01D03DCB1895C7 -:107992000138C5030300206F6B00F803203803FF92 -:1079A2002E6F6B00B53CFF3D1C00C83DD43D013835 -:1079B200C50302003E20A13FF803203806FF2E72C5 -:1079C20065616479D03CFF3D2000C83DD43D01385B -:1079D200C5030400203F3F20F803BD3E7938FF383D -:1079E200413F7A03E23E79387A03F638BD3E813868 -:1079F200203806FF2E6572726F72DF3CFF3D1E005B -:107A0200C83DD43D04FF71756974FA3C01385108D0 -:107A120058088138CA05963AD705803AE608B73E33 -:107A220079381A393638163DE43CDE043638283DBA -:107A32003D382506703DB9383638283DB1383D38D5 -:107A4200FEFF6E393638263DFF3C2F38083DD43CC8 -:107A52002F38103D05FF706175736500033DFF3DD2 -:107A6200ED00B43DBE3D04FF636F6C642B3D393DB8 -:107A7200A4B622243324BB2424BEE0E6F0E0219203 -:107A8200E036E9F7F830D9F7EFEEF0E02F010FE535 -:107A92000DBF048318E01EBF1583CFE0C683D8E074 -:107AA200D783AAE5BDE3B0CA04FF7761726D343DA6 -:107AB200013897023D389A013D38303DDF3DE608F6 -:107AC2005C3F073D07FF68616E646C657200553D5F -:107AD20058380A0005FF636174636800633D01382A -:107AE2008D3AFF38693D7938FF38763A693D8138F9 -:107AF2002A38F638693D8138F638D9385439203871 -:107B020005FF7468726F77006B3D0138B1381A391E -:107B120036388D3DD9382038693D7938803AF63883 -:107B2200693D8138F638C438FF38963AD938F63884 -:107B3200203807FF4564656665724000813D013863 -:107B4200CB3B5F3B203807FF4564656665722100C9 -:107B52009A3D0138CB3B3B3B203807FF52646566B8 -:107B620065724000A43D0138CB3B7938203807FFCD -:107B72005264656665722100AE3D0138CB3B8138A7 -:107B8200203807FF5564656665724000B83D0138CC -:107B9200CB3B023B9D397938203807FF5564656637 -:107BA20065722100C23D0138CB3B023B9D398138D1 -:107BB200203806FF646566657221CE3D0138D03FEC -:107BC200B138C601C601CB3B2A38203806FF6465AE -:107BD20066657240DA3D0138D03FB138C601CB3B11 -:107BE2002A38203807FF2864656665722900E73D58 -:107BF20001382E078E085107FF3D20380E94A70842 -:107C0200B138C601CB3B2A382A38203802FF752EFC -:107C1200F33D013854398203203803FF752E720078 -:107C2200073E01385439C4388B03203805FF752FBD -:107C32006D6F64000E3E0138FF385439F638C23990 -:107C4200203806FF6E6567617465173E0138FD399D -:107C52002F3A203801FF2F00223E0138493CF038EC -:107C6200203803FF6D6F64002B3E0138493CD93840 -:107C7200203803FF6D696E00323E0138C93E783903 -:107C82003638443EC438D938203803FF6D61780055 -:107C92003A3E0138C93E6E393638503EC438D9387A -:107CA200203806FF77697468696E463E0138CF381E -:107CB2009339FF389339F6385C3920380DFF7368F1 -:107CC2006F772D776F72646C69737400523E01385E -:107CD2003D386E3EC438CF0620380138EA06F80334 -:107CE200AE3F4B39203805FF776F726473005F3EF9 -:107CF20001383D3842005F3B683E203802002E22A8 -:107D0200743E01388A3E5107F8032038020073227C -:107D12007F3E01383D3822008305B73E7938363838 -:107D2200933E7D07203804FF66696C6C873E0138FC -:107D3200E138E138B9383638A53E993F9B3AB13837 -:107D4200AC3A8D38C93AA03ED938203805FF665F73 -:107D520063707500943E01383D3800123D387A0058 -:107D6200203805FF737461746500A73E48381B0113 -:107D720004FF62617365B23E58380C0005FF63650B -:107D82006C6C7300B93E0C3A04FF32647570BF3EEE -:107D92000138CF38CF38203805FF3264726F700057 -:107DA200C53E0138D938D938203804FF7475636B61 -:107DB200CD3E0138C438CF38203803FF3E696E000B -:107DC200D63E5838180003FF70616400DE3E013869 -:107DD200233F3D3828009D39203804FF656D6974C2 -:107DE200E43EFF3D0E00C83DD43D05FF656D69745C -:107DF2003F00EE3EFF3D1000C83DD43D03FF6B65E2 -:107E02007900F63EFF3D1200C83DD43D04FF6B658C -:107E1200793FFF3EFF3D1400C83DD43D02FF647030 -:107E2200073F6F382C00A03DAA3D05FF65686572CB -:107E320065000F3F6F383000A03DAA3D04FF686522 -:107E42007265163F6F382E00A03DAA3D05FF616C9A -:107E52006C6F74001F3F0138233F9D39B401243FEA -:107E6200203803FF62696E00273F0138EB3FBD3EB9 -:107E72008138203807FF646563696D616C00323FA9 -:107E820001383D380A00BD3E8138203803FF68655D -:107E920078003B3F01383D381000BD3E8138203824 -:107EA20002FF626C473F4838200007FF7475726E0C -:107EB2006B657900513FFF3D3800A03DAA3D07FFA9 -:107EC200746F757070657200563F0138B1383D3875 -:107ED20061003D387B00573E3638723F3D38DF0047 -:107EE200133A203807FF746F6C6F77657200603F3A -:107EF2000138B1383D3841003D385B00573E3638D5 -:107F0200853F3D3820001C3A203806FF3F737461DC -:107F1200636B733F0138E20521393638933F3D38B0 -:107F2200FCFF863D203806FF626F756E6473863FE4 -:107F32000138CF389D39C438203802FF6372943F2C -:107F420001383D380D00F23E3D380A00F23E20383D -:107F520005FF7370616365009E3F0138543FF23E36 -:107F6200203806FF737061636573A93F0138543985 -:107F72004A3EB1383638C13FAE3F353A2F38BA3F64 -:107F8200D938203803FF733E6400B23F0138B1385C -:107F92002139203805FF3E626F647900C33F303AD1 -:107FA2000800326C69746572616CCB3F0138C43869 -:107FB20072077207203801FF3D00D13F0138933923 -:107FC2001A39203801FF3100DC3F4838010001FF37 -:107FD2003200E33F4838020002FF2D31E83F4838C3 -:027FE200FFFF9F -:00000001FF diff --git a/amforth-6.5/appl/eval-pollin/p32-8.lst b/amforth-6.5/appl/eval-pollin/p32-8.lst deleted file mode 100644 index 0922f73..0000000 --- a/amforth-6.5/appl/eval-pollin/p32-8.lst +++ /dev/null @@ -1,10420 +0,0 @@ - -AVRASM ver. 2.1.52 p32-8.asm Sun Apr 30 20:10:14 2017 - -p32-8.asm(5): Including file '../../avr8\preamble.inc' -../../avr8\preamble.inc(2): Including file '../../avr8\macros.asm' -../../avr8\macros.asm(6): Including file '../../avr8\user.inc' -../../avr8\preamble.inc(6): Including file '../../avr8/devices/atmega32\device.asm' -../../avr8/devices/atmega32\device.asm(5): Including file '../../avr8/Atmel/Appnotes2\m32def.inc' -p32-8.asm(14): Including file '../../avr8\drivers/usart.asm' -../../avr8\drivers/usart.asm(30): Including file '../../avr8\drivers/usart_common.asm' -../../avr8\drivers/usart_common.asm(11): Including file '../../avr8\drivers/usart-rx-buffer.asm' -../../avr8\drivers/usart_common.asm(24): Including file '../../avr8\words/usart-tx-poll.asm' -../../avr8\drivers/usart_common.asm(29): Including file '../../avr8\words/ubrr.asm' -../../avr8\drivers/usart_common.asm(30): Including file '../../avr8\words/usart.asm' -p32-8.asm(19): Including file '../../avr8\drivers/1wire.asm' -p32-8.asm(21): Including file '../../avr8\amforth.asm' -../../avr8\amforth.asm(12): Including file '../../avr8\drivers/generic-isr.asm' -../../avr8\amforth.asm(14): Including file '../../avr8\dict/rww.inc' -../../avr8\dict/rww.inc(1): Including file '../../avr8\words/mplus.asm' -../../avr8\dict/rww.inc(2): Including file '../../common\words/ud-star.asm' -../../avr8\dict/rww.inc(3): Including file '../../common\words/umax.asm' -../../avr8\dict/rww.inc(4): Including file '../../common\words/umin.asm' -../../avr8\dict/rww.inc(5): Including file '../../avr8\words/immediate-q.asm' -../../avr8\dict/rww.inc(6): Including file '../../avr8\words/name2flags.asm' -../../avr8\dict/rww.inc(11): Including file '../../avr8\dict/appl_4k.inc' -../../avr8\dict/appl_4k.inc(1): Including file '../../common\words/ver.asm' -../../avr8\dict/appl_4k.inc(4): Including file '../../common\words/noop.asm' -../../avr8\dict/appl_4k.inc(5): Including file '../../avr8\words/unused.asm' -../../avr8\dict/appl_4k.inc(6): Including file '../../common\words/to.asm' -../../avr8\dict/appl_4k.inc(7): Including file '../../avr8\words/i-cellplus.asm' -../../avr8\dict/appl_4k.inc(8): Including file '../../avr8\words/icompare.asm' -../../avr8\dict/appl_4k.inc(9): Including file '../../common\words/star.asm' -../../avr8\dict/appl_4k.inc(10): Including file '../../avr8\words/j.asm' -../../avr8\dict/appl_4k.inc(11): Including file '../../avr8\words/dabs.asm' -../../avr8\dict/appl_4k.inc(12): Including file '../../avr8\words/dnegate.asm' -../../avr8\dict/appl_4k.inc(13): Including file '../../avr8\words/cmove.asm' -../../avr8\dict/appl_4k.inc(14): Including file '../../common\words/2swap.asm' -../../avr8\dict/appl_4k.inc(15): Including file '../../common\words/tib.asm' -../../avr8\dict/appl_4k.inc(16): Including file '../../avr8\words/init-ram.asm' -../../avr8\dict/appl_4k.inc(20): Including file '../../avr8\words/environment.asm' -../../avr8\dict/appl_4k.inc(21): Including file '../../avr8\words/env-wordlists.asm' -../../avr8\dict/appl_4k.inc(22): Including file '../../avr8\words/env-slashpad.asm' -../../avr8\dict/appl_4k.inc(23): Including file '../../common\words/env-slashhold.asm' -../../avr8\dict/appl_4k.inc(24): Including file '../../common\words/env-forthname.asm' -../../avr8\dict/appl_4k.inc(25): Including file '../../common\words/env-forthversion.asm' -../../avr8\dict/appl_4k.inc(26): Including file '../../common\words/env-cpu.asm' -../../avr8\dict/appl_4k.inc(27): Including file '../../avr8\words/env-mcuinfo.asm' -../../avr8\dict/appl_4k.inc(28): Including file '../../common\words/env-usersize.asm' -../../avr8\dict/appl_4k.inc(30): Including file '../../avr8\words/hld.asm' -../../avr8\dict/appl_4k.inc(31): Including file '../../common\words/hold.asm' -../../avr8\dict/appl_4k.inc(32): Including file '../../common\words/less-sharp.asm' -../../avr8\dict/appl_4k.inc(33): Including file '../../common\words/sharp.asm' -../../avr8\dict/appl_4k.inc(34): Including file '../../common\words/sharp-s.asm' -../../avr8\dict/appl_4k.inc(35): Including file '../../common\words/sharp-greater.asm' -../../avr8\dict/appl_4k.inc(36): Including file '../../common\words/sign.asm' -../../avr8\dict/appl_4k.inc(37): Including file '../../common\words/d-dot-r.asm' -../../avr8\dict/appl_4k.inc(38): Including file '../../common\words/dot-r.asm' -../../avr8\dict/appl_4k.inc(39): Including file '../../common\words/d-dot.asm' -../../avr8\dict/appl_4k.inc(40): Including file '../../common\words/dot.asm' -../../avr8\dict/appl_4k.inc(41): Including file '../../common\words/ud-dot.asm' -../../avr8\dict/appl_4k.inc(42): Including file '../../common\words/ud-dot-r.asm' -../../avr8\dict/appl_4k.inc(43): Including file '../../common\words/ud-slash-mod.asm' -../../avr8\dict/appl_4k.inc(44): Including file '../../common\words/digit-q.asm' -../../avr8\dict/appl_4k.inc(46): Including file '../../avr8\words/do-sliteral.asm' -../../avr8\dict/appl_4k.inc(47): Including file '../../avr8\words/scomma.asm' -../../avr8\dict/appl_4k.inc(48): Including file '../../avr8\words/itype.asm' -../../avr8\dict/appl_4k.inc(49): Including file '../../avr8\words/icount.asm' -../../avr8\dict/appl_4k.inc(50): Including file '../../common\words/type.asm' -../../avr8\dict/appl_4k.inc(51): Including file '../../common\words/tick.asm' -../../avr8\dict/appl_4k.inc(53): Including file '../../common\words/cskip.asm' -../../avr8\dict/appl_4k.inc(54): Including file '../../common\words/cscan.asm' -../../avr8\dict/appl_4k.inc(55): Including file '../../common\words/accept.asm' -../../avr8\dict/appl_4k.inc(56): Including file '../../common\words/refill.asm' -../../avr8\dict/appl_4k.inc(57): Including file '../../common\words/char.asm' -../../avr8\dict/appl_4k.inc(58): Including file '../../common\words/number.asm' -../../avr8\dict/appl_4k.inc(59): Including file '../../common\words/q-sign.asm' -../../avr8\dict/appl_4k.inc(60): Including file '../../common\words/set-base.asm' -../../avr8\dict/appl_4k.inc(61): Including file '../../common\words/to-number.asm' -../../avr8\dict/appl_4k.inc(62): Including file '../../common\words/parse.asm' -../../avr8\dict/appl_4k.inc(63): Including file '../../common\words/source.asm' -../../avr8\dict/appl_4k.inc(64): Including file '../../common\words/slash-string.asm' -../../avr8\dict/appl_4k.inc(65): Including file '../../common\words/parse-name.asm' -../../avr8\dict/appl_4k.inc(66): Including file '../../avr8\words/sp0.asm' -../../avr8\dict/appl_4k.inc(67): Including file '../../avr8\words/rp0.asm' -../../avr8\dict/appl_4k.inc(68): Including file '../../common\words/depth.asm' -../../avr8\dict/appl_4k.inc(69): Including file '../../avr8\words/forth-recognizer.asm' -../../avr8\dict/appl_4k.inc(70): Including file '../../common\words/recognize.asm' -../../avr8\dict/appl_4k.inc(71): Including file '../../common\words/interpret.asm' -../../avr8\dict/appl_4k.inc(72): Including file '../../common\words/rec-intnum.asm' -../../avr8\dict/appl_4k.inc(73): Including file '../../common\words/rec-find.asm' -../../avr8\dict/appl_4k.inc(74): Including file '../../common\words/dt-null.asm' -../../avr8\dict/appl_4k.inc(75): Including file '../../common\words/search-wordlist.asm' -../../avr8\dict/appl_4k.inc(76): Including file '../../common\words/traverse-wordlist.asm' -../../avr8\dict/appl_4k.inc(77): Including file '../../common\words/name2string.asm' -../../avr8\dict/appl_4k.inc(78): Including file '../../avr8\words/nfa2cfa.asm' -../../avr8\dict/appl_4k.inc(79): Including file '../../common\words/find-xt.asm' -../../avr8\dict/appl_4k.inc(81): Including file '../../avr8\dict/compiler1.inc' -../../avr8\dict/compiler1.inc(2): Including file '../../avr8\words/newest.asm' -../../avr8\dict/compiler1.inc(3): Including file '../../avr8\words/latest.asm' -../../avr8\dict/compiler1.inc(4): Including file '../../common\words/do-create.asm' -../../avr8\dict/compiler1.inc(5): Including file '../../common\words/backslash.asm' -../../avr8\dict/compiler1.inc(6): Including file '../../common\words/l-paren.asm' -../../avr8\dict/compiler1.inc(8): Including file '../../common\words/compile.asm' -../../avr8\dict/compiler1.inc(9): Including file '../../avr8\words/comma.asm' -../../avr8\dict/compiler1.inc(10): Including file '../../common\words/brackettick.asm' -../../avr8\dict/compiler1.inc(13): Including file '../../common\words/literal.asm' -../../avr8\dict/compiler1.inc(14): Including file '../../common\words/sliteral.asm' -../../avr8\dict/compiler1.inc(15): Including file '../../avr8\words/g-mark.asm' -../../avr8\dict/compiler1.inc(16): Including file '../../avr8\words/g-resolve.asm' -../../avr8\dict/compiler1.inc(17): Including file '../../avr8\words/l_mark.asm' -../../avr8\dict/compiler1.inc(18): Including file '../../avr8\words/l_resolve.asm' -../../avr8\dict/compiler1.inc(20): Including file '../../common\words/ahead.asm' -../../avr8\dict/compiler1.inc(21): Including file '../../common\words/if.asm' -../../avr8\dict/compiler1.inc(22): Including file '../../common\words/else.asm' -../../avr8\dict/compiler1.inc(23): Including file '../../common\words/then.asm' -../../avr8\dict/compiler1.inc(24): Including file '../../common\words/begin.asm' -../../avr8\dict/compiler1.inc(25): Including file '../../common\words/while.asm' -../../avr8\dict/compiler1.inc(26): Including file '../../common\words/repeat.asm' -../../avr8\dict/compiler1.inc(27): Including file '../../common\words/until.asm' -../../avr8\dict/compiler1.inc(28): Including file '../../common\words/again.asm' -../../avr8\dict/compiler1.inc(29): Including file '../../common\words/do.asm' -../../avr8\dict/compiler1.inc(30): Including file '../../common\words/loop.asm' -../../avr8\dict/compiler1.inc(31): Including file '../../common\words/plusloop.asm' -../../avr8\dict/compiler1.inc(32): Including file '../../common\words/leave.asm' -../../avr8\dict/compiler1.inc(33): Including file '../../common\words/qdo.asm' -../../avr8\dict/compiler1.inc(34): Including file '../../common\words/endloop.asm' -../../avr8\dict/compiler1.inc(36): Including file '../../common\words/l-from.asm' -../../avr8\dict/compiler1.inc(37): Including file '../../common\words/to-l.asm' -../../avr8\dict/compiler1.inc(38): Including file '../../avr8\words/lp0.asm' -../../avr8\dict/compiler1.inc(39): Including file '../../avr8\words/lp.asm' -../../avr8\dict/compiler1.inc(41): Including file '../../common\words/create.asm' -../../avr8\dict/compiler1.inc(42): Including file '../../avr8\words/header.asm' -../../avr8\dict/compiler1.inc(43): Including file '../../avr8\words/wlscope.asm' -../../avr8\dict/compiler1.inc(44): Including file '../../common\words/reveal.asm' -../../avr8\dict/compiler1.inc(45): Including file '../../avr8\words/does.asm' -../../avr8\dict/compiler1.inc(46): Including file '../../common\words/colon.asm' -../../avr8\dict/compiler1.inc(47): Including file '../../avr8\words/colon-noname.asm' -../../avr8\dict/compiler1.inc(48): Including file '../../common\words/semicolon.asm' -../../avr8\dict/compiler1.inc(49): Including file '../../common\words/right-bracket.asm' -../../avr8\dict/compiler1.inc(50): Including file '../../common\words/left-bracket.asm' -../../avr8\dict/compiler1.inc(51): Including file '../../common\words/variable.asm' -../../avr8\dict/compiler1.inc(52): Including file '../../common\words/constant.asm' -../../avr8\dict/compiler1.inc(53): Including file '../../avr8\words/user.asm' -../../avr8\dict/compiler1.inc(55): Including file '../../common\words/recurse.asm' -../../avr8\dict/compiler1.inc(56): Including file '../../avr8\words/immediate.asm' -../../avr8\dict/compiler1.inc(58): Including file '../../common\words/bracketchar.asm' -../../avr8\dict/compiler1.inc(59): Including file '../../common\words/abort-string.asm' -../../avr8\dict/compiler1.inc(60): Including file '../../common\words/abort.asm' -../../avr8\dict/compiler1.inc(61): Including file '../../common\words/q-abort.asm' -../../avr8\dict/compiler1.inc(63): Including file '../../common\words/get-stack.asm' -../../avr8\dict/compiler1.inc(64): Including file '../../common\words/set-stack.asm' -../../avr8\dict/compiler1.inc(65): Including file '../../common\words/map-stack.asm' -../../avr8\dict/compiler1.inc(66): Including file '../../avr8\words/get-current.asm' -../../avr8\dict/compiler1.inc(67): Including file '../../common\words/get-order.asm' -../../avr8\dict/compiler1.inc(68): Including file '../../common\words/cfg-order.asm' -../../avr8\dict/compiler1.inc(69): Including file '../../avr8\words/compare.asm' -../../avr8\dict/compiler1.inc(70): Including file '../../avr8\words/nfa2lfa.asm' -../../avr8\amforth.asm(15): Including file 'dict_appl.inc' -dict_appl.inc(3): Including file '../../common\words/dot-s.asm' -dict_appl.inc(4): Including file '../../avr8\words/spirw.asm' -dict_appl.inc(5): Including file '../../avr8\words/n-spi.asm' -dict_appl.inc(6): Including file 'words/applturnkey.asm' -dict_appl.inc(7): Including file '../../avr8\dict/compiler2.inc' -../../avr8\dict/compiler2.inc(8): Including file '../../avr8\words/set-current.asm' -../../avr8\dict/compiler2.inc(9): Including file '../../avr8\words/wordlist.asm' -../../avr8\dict/compiler2.inc(11): Including file '../../avr8\words/forth-wordlist.asm' -../../avr8\dict/compiler2.inc(12): Including file '../../common\words/set-order.asm' -../../avr8\dict/compiler2.inc(13): Including file '../../common\words/set-recognizer.asm' -../../avr8\dict/compiler2.inc(14): Including file '../../common\words/get-recognizer.asm' -../../avr8\dict/compiler2.inc(15): Including file '../../avr8\words/code.asm' -../../avr8\dict/compiler2.inc(16): Including file '../../avr8\words/end-code.asm' -../../avr8\dict/compiler2.inc(17): Including file '../../avr8\words/marker.asm' -../../avr8\dict/compiler2.inc(18): Including file '../../common\words/postpone.asm' -dict_appl.inc(8): Including file '../../avr8\words/2r_fetch.asm' -../../avr8\amforth.asm(23): Including file '../../avr8\amforth-interpreter.asm' -../../avr8\amforth.asm(24): Including file '../../avr8\dict/nrww.inc' -../../avr8\dict/nrww.inc(4): Including file '../../avr8\words/exit.asm' -../../avr8\dict/nrww.inc(5): Including file '../../avr8\words/execute.asm' -../../avr8\dict/nrww.inc(6): Including file '../../avr8\words/dobranch.asm' -../../avr8\dict/nrww.inc(7): Including file '../../avr8\words/docondbranch.asm' -../../avr8\dict/nrww.inc(10): Including file '../../avr8\words/doliteral.asm' -../../avr8\dict/nrww.inc(11): Including file '../../avr8\words/dovariable.asm' -../../avr8\dict/nrww.inc(12): Including file '../../avr8\words/doconstant.asm' -../../avr8\dict/nrww.inc(13): Including file '../../avr8\words/douser.asm' -../../avr8\dict/nrww.inc(14): Including file '../../avr8\words/do-value.asm' -../../avr8\dict/nrww.inc(15): Including file '../../avr8\words/fetch.asm' -../../avr8\dict/nrww.inc(16): Including file '../../avr8\words/store.asm' -../../avr8\dict/nrww.inc(17): Including file '../../avr8\words/cstore.asm' -../../avr8\dict/nrww.inc(18): Including file '../../avr8\words/cfetch.asm' -../../avr8\dict/nrww.inc(19): Including file '../../avr8\words/fetch-u.asm' -../../avr8\dict/nrww.inc(20): Including file '../../avr8\words/store-u.asm' -../../avr8\dict/nrww.inc(23): Including file '../../avr8\words/dup.asm' -../../avr8\dict/nrww.inc(24): Including file '../../avr8\words/qdup.asm' -../../avr8\dict/nrww.inc(25): Including file '../../avr8\words/swap.asm' -../../avr8\dict/nrww.inc(26): Including file '../../avr8\words/over.asm' -../../avr8\dict/nrww.inc(27): Including file '../../avr8\words/drop.asm' -../../avr8\dict/nrww.inc(28): Including file '../../avr8\words/rot.asm' -../../avr8\dict/nrww.inc(29): Including file '../../avr8\words/nip.asm' -../../avr8\dict/nrww.inc(31): Including file '../../avr8\words/r_from.asm' -../../avr8\dict/nrww.inc(32): Including file '../../avr8\words/to_r.asm' -../../avr8\dict/nrww.inc(33): Including file '../../avr8\words/r_fetch.asm' -../../avr8\dict/nrww.inc(36): Including file '../../common\words/not-equal.asm' -../../avr8\dict/nrww.inc(37): Including file '../../avr8\words/equalzero.asm' -../../avr8\dict/nrww.inc(38): Including file '../../avr8\words/lesszero.asm' -../../avr8\dict/nrww.inc(39): Including file '../../avr8\words/greaterzero.asm' -../../avr8\dict/nrww.inc(40): Including file '../../avr8\words/d-greaterzero.asm' -../../avr8\dict/nrww.inc(41): Including file '../../avr8\words/d-lesszero.asm' -../../avr8\dict/nrww.inc(43): Including file '../../avr8\words/true.asm' -../../avr8\dict/nrww.inc(44): Including file '../../avr8\words/zero.asm' -../../avr8\dict/nrww.inc(45): Including file '../../avr8\words/uless.asm' -../../avr8\dict/nrww.inc(46): Including file '../../common\words/u-greater.asm' -../../avr8\dict/nrww.inc(47): Including file '../../avr8\words/less.asm' -../../avr8\dict/nrww.inc(48): Including file '../../avr8\words/greater.asm' -../../avr8\dict/nrww.inc(50): Including file '../../avr8\words/log2.asm' -../../avr8\dict/nrww.inc(51): Including file '../../avr8\words/minus.asm' -../../avr8\dict/nrww.inc(52): Including file '../../avr8\words/plus.asm' -../../avr8\dict/nrww.inc(53): Including file '../../avr8\words/mstar.asm' -../../avr8\dict/nrww.inc(54): Including file '../../avr8\words/umslashmod.asm' -../../avr8\dict/nrww.inc(55): Including file '../../avr8\words/umstar.asm' -../../avr8\dict/nrww.inc(57): Including file '../../avr8\words/invert.asm' -../../avr8\dict/nrww.inc(58): Including file '../../avr8\words/2slash.asm' -../../avr8\dict/nrww.inc(59): Including file '../../avr8\words/2star.asm' -../../avr8\dict/nrww.inc(60): Including file '../../avr8\words/and.asm' -../../avr8\dict/nrww.inc(61): Including file '../../avr8\words/or.asm' -../../avr8\dict/nrww.inc(62): Including file '../../avr8\words/xor.asm' -../../avr8\dict/nrww.inc(64): Including file '../../avr8\words/1plus.asm' -../../avr8\dict/nrww.inc(65): Including file '../../avr8\words/1minus.asm' -../../avr8\dict/nrww.inc(66): Including file '../../common\words/q-negate.asm' -../../avr8\dict/nrww.inc(67): Including file '../../avr8\words/lshift.asm' -../../avr8\dict/nrww.inc(68): Including file '../../avr8\words/rshift.asm' -../../avr8\dict/nrww.inc(69): Including file '../../avr8\words/plusstore.asm' -../../avr8\dict/nrww.inc(71): Including file '../../avr8\words/rpfetch.asm' -../../avr8\dict/nrww.inc(72): Including file '../../avr8\words/rpstore.asm' -../../avr8\dict/nrww.inc(73): Including file '../../avr8\words/spfetch.asm' -../../avr8\dict/nrww.inc(74): Including file '../../avr8\words/spstore.asm' -../../avr8\dict/nrww.inc(76): Including file '../../avr8\words/dodo.asm' -../../avr8\dict/nrww.inc(77): Including file '../../avr8\words/i.asm' -../../avr8\dict/nrww.inc(78): Including file '../../avr8\words/doplusloop.asm' -../../avr8\dict/nrww.inc(79): Including file '../../avr8\words/doloop.asm' -../../avr8\dict/nrww.inc(80): Including file '../../avr8\words/unloop.asm' -../../avr8\dict/nrww.inc(84): Including file '../../avr8\words/cmove_g.asm' -../../avr8\dict/nrww.inc(85): Including file '../../avr8\words/byteswap.asm' -../../avr8\dict/nrww.inc(86): Including file '../../avr8\words/up.asm' -../../avr8\dict/nrww.inc(87): Including file '../../avr8\words/1ms.asm' -../../avr8\dict/nrww.inc(88): Including file '../../avr8\words/2to_r.asm' -../../avr8\dict/nrww.inc(89): Including file '../../avr8\words/2r_from.asm' -../../avr8\dict/nrww.inc(91): Including file '../../avr8\words/store-e.asm' -../../avr8\dict/nrww.inc(92): Including file '../../avr8\words/fetch-e.asm' -../../avr8\dict/nrww.inc(93): Including file '../../avr8\words/store-i.asm' -../../avr8\dict/nrww.inc(97): Including file '../../avr8\words/store-i_nrww.asm' -../../avr8\dict/nrww.inc(99): Including file '../../avr8\words/fetch-i.asm' -../../avr8\dict/nrww.inc(104): Including file '../../avr8\dict/core_4k.inc' -../../avr8\dict/core_4k.inc(3): Including file '../../avr8\words/n_to_r.asm' -../../avr8\dict/core_4k.inc(4): Including file '../../avr8\words/n_r_from.asm' -../../avr8\dict/core_4k.inc(5): Including file '../../avr8\words/d-2star.asm' -../../avr8\dict/core_4k.inc(6): Including file '../../avr8\words/d-2slash.asm' -../../avr8\dict/core_4k.inc(7): Including file '../../avr8\words/d-plus.asm' -../../avr8\dict/core_4k.inc(8): Including file '../../avr8\words/d-minus.asm' -../../avr8\dict/core_4k.inc(9): Including file '../../avr8\words/d-invert.asm' -../../avr8\dict/core_4k.inc(10): Including file '../../avr8\words/slashmod.asm' -../../avr8\dict/core_4k.inc(11): Including file '../../common\words/abs.asm' -../../avr8\dict/core_4k.inc(12): Including file '../../common\words/pick.asm' -../../avr8\dict/core_4k.inc(13): Including file '../../avr8\words/cellplus.asm' -../../avr8\dict/core_4k.inc(14): Including file '../../avr8\dict/interrupt.inc' -../../avr8\dict/interrupt.inc(8): Including file '../../avr8\words/int-on.asm' -../../avr8\dict/interrupt.inc(9): Including file '../../avr8\words/int-off.asm' -../../avr8\dict/interrupt.inc(10): Including file '../../avr8\words/int-store.asm' -../../avr8\dict/interrupt.inc(11): Including file '../../avr8\words/int-fetch.asm' -../../avr8\dict/interrupt.inc(12): Including file '../../avr8\words/int-trap.asm' -../../avr8\dict/interrupt.inc(14): Including file '../../avr8\words/isr-exec.asm' -../../avr8\dict/interrupt.inc(15): Including file '../../avr8\words/isr-end.asm' -../../avr8\dict/core_4k.inc(17): Including file '../../common\words/prompt-ok.asm' -../../avr8\dict/core_4k.inc(18): Including file '../../common\words/prompt-ready.asm' -../../avr8\dict/core_4k.inc(19): Including file '../../common\words/prompt-error.asm' -../../avr8\dict/core_4k.inc(21): Including file '../../common\words/quit.asm' -../../avr8\dict/core_4k.inc(22): Including file '../../avr8\words/pause.asm' -../../avr8\dict/core_4k.inc(23): Including file '../../avr8\words/cold.asm' -../../avr8\dict/core_4k.inc(24): Including file '../../common\words/warm.asm' -../../avr8\dict/core_4k.inc(26): Including file '../../common\words/handler.asm' -../../avr8\dict/core_4k.inc(27): Including file '../../common\words/catch.asm' -../../avr8\dict/core_4k.inc(28): Including file '../../common\words/throw.asm' -../../avr8\dict/core_4k.inc(31): Including file '../../avr8\words/edefer-fetch.asm' -../../avr8\dict/core_4k.inc(32): Including file '../../avr8\words/edefer-store.asm' -../../avr8\dict/core_4k.inc(33): Including file '../../common\words/rdefer-fetch.asm' -../../avr8\dict/core_4k.inc(34): Including file '../../common\words/rdefer-store.asm' -../../avr8\dict/core_4k.inc(35): Including file '../../common\words/udefer-fetch.asm' -../../avr8\dict/core_4k.inc(36): Including file '../../common\words/udefer-store.asm' -../../avr8\dict/core_4k.inc(37): Including file '../../common\words/defer-store.asm' -../../avr8\dict/core_4k.inc(38): Including file '../../common\words/defer-fetch.asm' -../../avr8\dict/core_4k.inc(39): Including file '../../avr8\words/do-defer.asm' -../../avr8\dict/core_4k.inc(41): Including file '../../common\words/u-dot.asm' -../../avr8\dict/core_4k.inc(42): Including file '../../common\words/u-dot-r.asm' -../../avr8\dict/core_4k.inc(45): Including file '../../avr8\words/uslashmod.asm' -../../avr8\dict/core_4k.inc(46): Including file '../../avr8\words/negate.asm' -../../avr8\dict/core_4k.inc(47): Including file '../../common\words/slash.asm' -../../avr8\dict/core_4k.inc(48): Including file '../../common\words/mod.asm' -../../avr8\dict/core_4k.inc(50): Including file '../../common\words/min.asm' -../../avr8\dict/core_4k.inc(51): Including file '../../common\words/max.asm' -../../avr8\dict/core_4k.inc(52): Including file '../../common\words/within.asm' -../../avr8\dict/core_4k.inc(54): Including file '../../common\words/show-wordlist.asm' -../../avr8\dict/core_4k.inc(55): Including file '../../common\words/words.asm' -../../avr8\dict/core_4k.inc(57): Including file '../../common\words/dot-quote.asm' -../../avr8\dict/core_4k.inc(58): Including file '../../common\words/squote.asm' -../../avr8\dict/core_4k.inc(59): Including file '../../avr8\words/fill.asm' -../../avr8\dict/core_4k.inc(61): Including file '../../common\words/f_cpu.asm' -../../avr8\dict/core_4k.inc(62): Including file '../../avr8\words/state.asm' -../../avr8\dict/core_4k.inc(63): Including file '../../common\words/base.asm' -../../avr8\dict/core_4k.inc(65): Including file '../../avr8\words/cells.asm' -../../avr8\dict/core_4k.inc(67): Including file '../../common\words/2dup.asm' -../../avr8\dict/core_4k.inc(68): Including file '../../common\words/2drop.asm' -../../avr8\dict/core_4k.inc(69): Including file '../../common\words/tuck.asm' -../../avr8\dict/core_4k.inc(71): Including file '../../common\words/to-in.asm' -../../avr8\dict/core_4k.inc(72): Including file '../../common\words/pad.asm' -../../avr8\dict/core_4k.inc(73): Including file '../../common\words/emit.asm' -../../avr8\dict/core_4k.inc(74): Including file '../../common\words/emitq.asm' -../../avr8\dict/core_4k.inc(75): Including file '../../common\words/key.asm' -../../avr8\dict/core_4k.inc(76): Including file '../../common\words/keyq.asm' -../../avr8\dict/core_4k.inc(78): Including file '../../avr8\words/dp.asm' -../../avr8\dict/core_4k.inc(79): Including file '../../avr8\words/ehere.asm' -../../avr8\dict/core_4k.inc(80): Including file '../../avr8\words/here.asm' -../../avr8\dict/core_4k.inc(81): Including file '../../avr8\words/allot.asm' -../../avr8\dict/core_4k.inc(83): Including file '../../common\words/bin.asm' -../../avr8\dict/core_4k.inc(84): Including file '../../common\words/decimal.asm' -../../avr8\dict/core_4k.inc(85): Including file '../../common\words/hex.asm' -../../avr8\dict/core_4k.inc(86): Including file '../../common\words/bl.asm' -../../avr8\dict/core_4k.inc(88): Including file '../../avr8\words/turnkey.asm' -../../avr8\dict/core_4k.inc(89): Including file '../../common\words/to-upper.asm' -../../avr8\dict/core_4k.inc(90): Including file '../../common\words/to-lower.asm' -../../avr8\dict/core_4k.inc(92): Including file '../../common\words/q-stack.asm' -../../avr8\dict/core_4k.inc(93): Including file '../../common\words/bounds.asm' -../../avr8\dict/core_4k.inc(94): Including file '../../common\words/cr.asm' -../../avr8\dict/core_4k.inc(95): Including file '../../common\words/space.asm' -../../avr8\dict/core_4k.inc(96): Including file '../../common\words/spaces.asm' -../../avr8\dict/core_4k.inc(97): Including file '../../common\words/s-to-d.asm' -../../avr8\dict/core_4k.inc(98): Including file '../../avr8\words/to-body.asm' -../../avr8\dict/nrww.inc(112): Including file '../../common\words/2literal.asm' -../../avr8\dict/nrww.inc(113): Including file '../../avr8\words/equal.asm' -../../avr8\dict/nrww.inc(114): Including file '../../common\words/num-constants.asm' -../../avr8\amforth.asm(25): Including file 'dict_appl_core.inc' -../../avr8\amforth.asm(36): Including file '../../avr8\amforth-eeprom.inc' - - - ; file see ../template/template.asm. You may want to - ; copy that file to this one and edit it afterwards. - - .include "preamble.inc" - - .include "macros.asm" - - .set DICT_COMPILER2 = 0 ; - .set cpu_msp430 = 0 - .set cpu_avr8 = 1 - - .include "user.inc" - - ; - - ; used by the multitasker - .set USER_STATE = 0 - .set USER_FOLLOWER = 2 - - ; stackpointer, used by mulitasker - .set USER_RP = 4 - .set USER_SP0 = 6 - .set USER_SP = 8 - - ; excpection handling - .set USER_HANDLER = 10 - - ; numeric IO - .set USER_BASE = 12 - - ; character IO - .set USER_EMIT = 14 - .set USER_EMITQ = 16 - .set USER_KEY = 18 - .set USER_KEYQ = 20 - - .set USER_SOURCE = 22 - .set USER_TO_IN = 24 - .set USER_REFILL = 26 - - .set USER_P_OK = 28 - .set USER_P_ERR = 30 - .set USER_P_RDY = 32 - - .set SYSUSERSIZE = 34 - ; - - .def zerol = r2 - .def zeroh = r3 - .def upl = r4 - .def uph = r5 - - .def al = r6 - .def ah = r7 - .def bl = r8 - .def bh = r9 - - ; internal - .def mcu_boot = r10 - .def isrflag = r11 - - .def temp4 = r14 - .def temp5 = r15 - - .def temp0 = r16 - .def temp1 = r17 - .def temp2 = r18 - .def temp3 = r19 - - .def temp6 = r20 - .def temp7 = r21 - - .def tosl = r24 - .def tosh = r25 - - .def wl = r22 - .def wh = r23 - - .macro loadtos - ld tosl, Y+ - ld tosh, Y+ - .endmacro - - .macro savetos - st -Y, tosh - st -Y, tosl - .endmacro - - .macro in_ - .if (@1 < $40) - in @0,@1 - .else - lds @0,@1 - .endif - .endmacro - - .macro out_ - .if (@0 < $40) - out @0,@1 - .else - sts @0,@1 - .endif - .endmacro - - .macro sbi_ - .if (@0 < $40) - sbi @0,@1 - .else - in_ @2,@0 - ori @2,exp2(@1) - out_ @0,@2 - .endif - .endmacro - - .macro cbi_ - .if (@0 < $40) - cbi @0,@1 - .else - in_ @2,@0 - andi @2,~(exp2(@1)) - out_ @0,@2 - .endif - .endmacro - - .macro jmp_ - ; a more flexible macro - .ifdef @0 - .if (@0-pc > 2040) || (pc-@0>2040) - jmp @0 - .else - rjmp @0 - .endif - .else - jmp @0 - .endif - .endmacro - .macro call_ - ; a more flexible macro - .ifdef @0 - .if (@0-pc > 2040) || (pc-@0>2040) - call @0 - .else - rcall @0 - .endif - .else - call @0 - .endif - .endmacro - - ; F_CPU - ; µsec 16000000 14745600 8000000 1000000 - ; 1 16 14,74 8 1 - ; 10 160 147,45 80 10 - ; 100 1600 1474,56 800 100 - ; 1000 16000 14745,6 8000 1000 - ; - ; cycles = µsec * f_cpu / 1e6 - ; n_loops=cycles/5 - ; - ; cycles already used will be subtracted from the delay - ; the waittime resolution is 1 cycle (delay from exact to +1 cycle) - ; the maximum delay at 20MHz (50ns/clock) is 38350ns - ; waitcount register must specify an immediate register - ; - ; busy waits a specfied amount of microseconds - .macro delay - .set cycles = ( ( @0 * F_CPU ) / 1000000 ) - .if (cycles > ( 256 * 255 * 4 + 2)) - .error "MACRO delay - too many cycles to burn" - .else - .if (cycles > 6) - .set loop_cycles = (cycles / 4) - ldi zl,low(loop_cycles) - ldi zh,high(loop_cycles) - sbiw Z, 1 - brne pc-1 - .set cycles = (cycles - (loop_cycles * 4)) - .endif - .if (cycles > 0) - .if (cycles & 4) - rjmp pc+1 - rjmp pc+1 - .endif - .if (cycles & 2) - rjmp pc+1 - .endif - .if (cycles & 1) - nop - .endif - .endif - .endif - .endmacro - - ; portability macros, they come from the msp430 branches - - .macro DEST - .dw @0 - .endm - - ; controller specific file selected via include - ; directory definition when calling the assembler (-I) - .include "device.asm" - - ; generated automatically, do not edit - - .list - - .equ ramstart = 96 - .equ CELLSIZE = 2 - .macro readflashcell - lsl zl - rol zh - lpm @0, Z+ - lpm @1, Z+ - .endmacro - .macro writeflashcell - lsl zl - rol zh - .endmacro - .set WANT_EEPROM = 0 - .set WANT_WATCHDOG = 0 - .set WANT_EXTERNAL_INTERRUPT = 0 - .set WANT_TIMER_COUNTER_0 = 0 - .set WANT_TIMER_COUNTER_2 = 0 - .set WANT_TIMER_COUNTER_1 = 0 - .set WANT_SPI = 0 - .set WANT_USART = 0 - .set WANT_ANALOG_COMPARATOR = 0 - .set WANT_AD_CONVERTER = 0 - .set WANT_PORTA = 0 - .set WANT_PORTB = 0 - .set WANT_PORTC = 0 - .set WANT_PORTD = 0 - .set WANT_CPU = 0 - .set WANT_BOOT_LOAD = 0 - .set WANT_TWI = 0 - .equ intvecsize = 2 ; please verify; flash size: 32768 bytes - .equ pclen = 2 ; please verify - .overlap - .org 2 -000002 d11b rcall isr ; External Interrupt Request 0 - .org 4 -000004 d119 rcall isr ; External Interrupt Request 1 - .org 6 -000006 d117 rcall isr ; External Interrupt Request 2 - .org 8 -000008 d115 rcall isr ; Timer/Counter2 Compare Match - .org 10 -00000a d113 rcall isr ; Timer/Counter2 Overflow - .org 12 -00000c d111 rcall isr ; Timer/Counter1 Capture Event - .org 14 -00000e d10f rcall isr ; Timer/Counter1 Compare Match A - .org 16 -000010 d10d rcall isr ; Timer/Counter1 Compare Match B - .org 18 -000012 d10b rcall isr ; Timer/Counter1 Overflow - .org 20 -000014 d109 rcall isr ; Timer/Counter0 Compare Match - .org 22 -000016 d107 rcall isr ; Timer/Counter0 Overflow - .org 24 -000018 d105 rcall isr ; Serial Transfer Complete - .org 26 -00001a d103 rcall isr ; USART, Rx Complete - .org 28 -00001c d101 rcall isr ; USART Data Register Empty - .org 30 -00001e d0ff rcall isr ; USART, Tx Complete - .org 32 -000020 d0fd rcall isr ; ADC Conversion Complete - .org 34 -000022 d0fb rcall isr ; EEPROM Ready - .org 36 -000024 d0f9 rcall isr ; Analog Comparator - .org 38 -000026 d0f7 rcall isr ; 2-wire Serial Interface - .org 40 -000028 d0f5 rcall isr ; Store Program Memory Ready - .equ INTVECTORS = 21 - .nooverlap - - ; compatability layer (maybe empty) - .equ SPMCSR = SPMCR - .equ EEPE = EEWE - .equ EEMPE = EEMWE - - ; controller data area, environment query mcu-info - mcu_info: - mcu_ramsize: -000029 0800 .dw 2048 - mcu_eepromsize: -00002a 0400 .dw 1024 - mcu_maxdp: -00002b 7000 .dw 28672 - mcu_numints: -00002c 0015 .dw 21 - mcu_name: -00002d 0008 .dw 8 -00002e 5441 -00002f 656d -000030 6167 -000031 3233 .db "ATmega32" - .set codestart=pc - - ; some defaults, change them in your application master file - ; see template.asm for an example - - ; enabling Interrupts, disabling them affects - ; other settings as well. - .set WANT_INTERRUPTS = 1 - - ; count the number of interrupts individually. - ; requires a lot of RAM (one byte per interrupt) - ; disabled by default. - .set WANT_INTERRUPT_COUNTERS = 0 - - ; receiving is asynchronously, so an interrupt queue is useful. - .set WANT_ISR_RX = 1 - - ; case insensitve dictionary lookup. - .set WANT_IGNORECASE = 0 - - ; map all memories to one address space. Details in the - ; technical guide - .set WANT_UNIFIED = 0 - - ; terminal input buffer - .set TIB_SIZE = 90 ; ANS94 needs at least 80 characters per line - - ; USER variables *in addition* to system ones - .set APPUSERSIZE = 10 ; size of application specific user area in bytes - - ; addresses of various data segments - .set rstackstart = RAMEND ; start address of return stack, grows downward - .set stackstart = RAMEND - 80 ; start address of data stack, grows downward - ; change only if you know what to you do - .set NUMWORDLISTS = 8 ; number of word lists in the searh order, at least 8 - .set NUMRECOGNIZERS = 4 ; total number of recognizers, two are always used. - - ; 10 per mille (1 per cent) is ok. - .set BAUD = 38400 - .set BAUD_MAXERROR = 10 - - ; Dictionary setup - .set VE_HEAD = $0000 - .set VE_ENVHEAD = $0000 - - .set AMFORTH_RO_SEG = NRWW_START_ADDR+1 - - ; cpu clock in hertz - .equ F_CPU = 8000000 - .set BAUD_MAXERROR = 30 - .equ TIMER_INT = OVF2addr - - .include "drivers/usart.asm" - - .equ BAUDRATE_LOW = UBRRL+$20 - .equ BAUDRATE_HIGH = UBRRH+$20 - .equ USART_C = UCSRC+$20 - .equ USART_B = UCSRB+$20 - .equ USART_A = UCSRA+$20 - .equ USART_DATA = UDR+$20 - .equ bm_USARTC_en = 1 << 7 - - ; some generic constants - .equ bm_USART_RXRD = 1 << RXC - .equ bm_USART_TXRD = 1 << UDRE - .equ bm_ENABLE_TX = 1 << TXEN - .equ bm_ENABLE_RX = 1 << RXEN - .equ bm_ENABLE_INT_RX = 1<rx-buf",0 -000037 0000 .dw VE_HEAD - .set VE_HEAD = VE_TO_RXBUF - XT_TO_RXBUF: -000038 0039 .dw PFA_rx_tobuf - PFA_rx_tobuf: -000039 2f08 mov temp0, tosl -00003a 9110 0070 lds temp1, usart_rx_in -00003c e6e0 ldi zl, low(usart_rx_data) -00003d e0f0 ldi zh, high(usart_rx_data) -00003e 0fe1 add zl, temp1 -00003f 1df3 adc zh, zeroh -000040 8300 st Z, temp0 -000041 9513 inc temp1 -000042 701f andi temp1,usart_rx_mask -000043 9310 0070 sts usart_rx_in, temp1 -000045 9189 -000046 9199 loadtos -000047 940c 3805 jmp_ DO_NEXT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ; setup with - ; ' isr-rx URXCaddr int! - VE_ISR_RX: -000049 ff06 .dw $ff06 -00004a 7369 -00004b 2d72 -00004c 7872 .db "isr-rx" -00004d 0032 .dw VE_HEAD - .set VE_HEAD = VE_ISR_RX - XT_ISR_RX: -00004e 3801 .dw DO_COLON - usart_rx_isr: -00004f 383d .dw XT_DOLITERAL -000050 002c .dw usart_data -000051 3898 .dw XT_CFETCH -000052 38b1 .dw XT_DUP -000053 383d .dw XT_DOLITERAL -000054 0003 .dw 3 -000055 3fdf .dw XT_EQUAL -000056 3836 .dw XT_DOCONDBRANCH -000057 0059 .dw usart_rx_isr1 -000058 3d38 .dw XT_COLD - usart_rx_isr1: -000059 0038 .dw XT_TO_RXBUF -00005a 3820 .dw XT_EXIT - - ; ( -- ) Hardware Access - ; R( --) - ; initialize usart - ;VE_USART_INIT_RXBUFFER: - ; .dw $ff0x - ; .db "+usart-buffer" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_USART_INIT_RXBUFFER - XT_USART_INIT_RX_BUFFER: -00005b 3801 .dw DO_COLON - PFA_USART_INIT_RX_BUFFER: ; ( -- ) -00005c 383d -00005d 004e .dw XT_DOLITERAL, XT_ISR_RX -00005e 383d -00005f 001a .dw XT_DOLITERAL, URXCaddr -000060 3ca5 .dw XT_INTSTORE - -000061 383d .dw XT_DOLITERAL -000062 0060 .dw usart_rx_data -000063 383d .dw XT_DOLITERAL -000064 0016 .dw usart_rx_size + 6 -000065 3954 .dw XT_ZERO -000066 3e98 .dw XT_FILL -000067 3820 .dw XT_EXIT - - ; ( -- c) - ; MCU - ; get 1 character from input queue, wait if needed using interrupt driver - VE_RX_BUFFER: -000068 ff06 .dw $ff06 -000069 7872 -00006a 622d -00006b 6675 .db "rx-buf" -00006c 0049 .dw VE_HEAD - .set VE_HEAD = VE_RX_BUFFER - XT_RX_BUFFER: -00006d 3801 .dw DO_COLON - PFA_RX_BUFFER: -00006e 0088 .dw XT_RXQ_BUFFER -00006f 3836 .dw XT_DOCONDBRANCH -000070 006e .dw PFA_RX_BUFFER -000071 383d .dw XT_DOLITERAL -000072 0071 .dw usart_rx_out -000073 3898 .dw XT_CFETCH -000074 38b1 .dw XT_DUP -000075 383d .dw XT_DOLITERAL -000076 0060 .dw usart_rx_data -000077 399d .dw XT_PLUS -000078 3898 .dw XT_CFETCH -000079 38c4 .dw XT_SWAP -00007a 3a2f .dw XT_1PLUS -00007b 383d .dw XT_DOLITERAL -00007c 000f .dw usart_rx_mask -00007d 3a13 .dw XT_AND -00007e 383d .dw XT_DOLITERAL -00007f 0071 .dw usart_rx_out -000080 388d .dw XT_CSTORE -000081 3820 .dw XT_EXIT - - ; ( -- f) - ; MCU - ; check if unread characters are in the input queue - VE_RXQ_BUFFER: -000082 ff07 .dw $ff07 -000083 7872 -000084 2d3f -000085 7562 -000086 0066 .db "rx?-buf",0 -000087 0068 .dw VE_HEAD - .set VE_HEAD = VE_RXQ_BUFFER - XT_RXQ_BUFFER: -000088 3801 .dw DO_COLON - PFA_RXQ_BUFFER: -000089 3d30 .dw XT_PAUSE -00008a 383d .dw XT_DOLITERAL -00008b 0071 .dw usart_rx_out -00008c 3898 .dw XT_CFETCH -00008d 383d .dw XT_DOLITERAL -00008e 0070 .dw usart_rx_in -00008f 3898 .dw XT_CFETCH -000090 3913 .dw XT_NOTEQUAL -000091 3820 .dw XT_EXIT - ; .include "drivers/timer-usart-isr.asm" - .set XT_RX = XT_RX_BUFFER - .set XT_RXQ = XT_RXQ_BUFFER - .set XT_USART_INIT_RX = XT_USART_INIT_RX_BUFFER - .else - .endif - - .include "words/usart-tx-poll.asm" - - ; MCU - ; check availability and send one character to the terminal using register poll - VE_TX_POLL: -000092 ff07 .dw $ff07 -000093 7874 -000094 702d -000095 6c6f -000096 006c .db "tx-poll",0 -000097 0082 .dw VE_HEAD - .set VE_HEAD = VE_TX_POLL - XT_TX_POLL: -000098 3801 .dw DO_COLON - PFA_TX_POLL: - ; wait for data ready -000099 00a6 .dw XT_TXQ_POLL -00009a 3836 .dw XT_DOCONDBRANCH -00009b 0099 .dw PFA_TX_POLL - ; send to usart -00009c 383d .dw XT_DOLITERAL -00009d 002c .dw USART_DATA -00009e 388d .dw XT_CSTORE -00009f 3820 .dw XT_EXIT - - ; ( -- f) MCU - ; MCU - ; check if a character can be send using register poll - VE_TXQ_POLL: -0000a0 ff08 .dw $ff08 -0000a1 7874 -0000a2 2d3f -0000a3 6f70 -0000a4 6c6c .db "tx?-poll" -0000a5 0092 .dw VE_HEAD - .set VE_HEAD = VE_TXQ_POLL - XT_TXQ_POLL: -0000a6 3801 .dw DO_COLON - PFA_TXQ_POLL: -0000a7 3d30 .dw XT_PAUSE -0000a8 383d .dw XT_DOLITERAL -0000a9 002b .dw USART_A -0000aa 3898 .dw XT_CFETCH -0000ab 383d .dw XT_DOLITERAL -0000ac 0020 .dw bm_USART_TXRD -0000ad 3a13 .dw XT_AND -0000ae 3820 .dw XT_EXIT - .set XT_TX = XT_TX_POLL - .set XT_TXQ = XT_TXQ_POLL - .set XT_USART_INIT_TX = 0 - - .include "words/ubrr.asm" - - ; MCU - ; returns usart UBRR settings - VE_UBRR: -0000af ff04 .dw $ff04 -0000b0 6275 -0000b1 7272 .db "ubrr" -0000b2 00a0 .dw VE_HEAD - .set VE_HEAD = VE_UBRR - XT_UBRR: -0000b3 386f .dw PFA_DOVALUE1 - PFA_UBRR: ; ( -- ) -0000b4 0082 .dw EE_UBRRVAL -0000b5 3da0 .dw XT_EDEFERFETCH -0000b6 3daa .dw XT_EDEFERSTORE - .include "words/usart.asm" - - ; MCU - ; initialize usart - VE_USART: -0000b7 ff06 .dw $ff06 -0000b8 752b -0000b9 6173 -0000ba 7472 .db "+usart" -0000bb 00af .dw VE_HEAD - .set VE_HEAD = VE_USART - XT_USART: -0000bc 3801 .dw DO_COLON - PFA_USART: ; ( -- ) - -0000bd 383d .dw XT_DOLITERAL -0000be 0098 .dw USART_B_VALUE -0000bf 383d .dw XT_DOLITERAL -0000c0 002a .dw USART_B -0000c1 388d .dw XT_CSTORE - -0000c2 383d .dw XT_DOLITERAL -0000c3 0006 .dw USART_C_VALUE -0000c4 383d .dw XT_DOLITERAL -0000c5 00c0 .dw USART_C | bm_USARTC_en -0000c6 388d .dw XT_CSTORE - -0000c7 00b3 .dw XT_UBRR -0000c8 38b1 .dw XT_DUP -0000c9 3af9 .dw XT_BYTESWAP -0000ca 383d .dw XT_DOLITERAL -0000cb 0040 .dw BAUDRATE_HIGH -0000cc 388d .dw XT_CSTORE -0000cd 383d .dw XT_DOLITERAL -0000ce 0029 .dw BAUDRATE_LOW -0000cf 388d .dw XT_CSTORE - .if XT_USART_INIT_RX!=0 -0000d0 005b .dw XT_USART_INIT_RX - .endif - .if XT_USART_INIT_TX!=0 - .endif - -0000d1 3820 .dw XT_EXIT - - ; settings for 1wire interface - .equ OW_PORT=PORTB - .EQU OW_BIT=4 - .include "drivers/1wire.asm" - - ; B. J. Rodriguez (MSP 430) - ; Matthias Trute (AVR Atmega) - ; COPYRIGHT - ; (c) 2012 Bradford J. Rodriguez for the 430 code and API - - ; adapted 430 assembly code to AVR - ; wishlist: - ; use a configurable pin at runtime, compatible with bitnames.frt - ; no external pull up, no external power supply for devices - ; ??? - ; - ;.EQU OW_BIT=4 - ;.equ OW_PORT=PORTE - .set OW_DDR=(OW_PORT-1) - .set OW_PIN=(OW_DDR-1) - - ;****f* 1W.RESET - ; NAME - ; 1W.RESET - ; SYNOPSIS - ; 1W.RESET ( -- f ) Initialize 1-wire devices; return true if present - ; DESCRIPTION - ; This configures the port pin used by the 1-wire interface, and then - ; sends an "initialize" sequence to the 1-wire devices. If any device - ; is present, it will be detected. - ; - ; Timing, per DS18B20 data sheet: - ; a) Output "0" (drive output low) for >480 usec. - ; b) Output "1" (let output float). - ; c) After 15 to 60 usec, device will drive pin low for 60 to 240 usec. - ; So, wait 75 usec and sample input. - ; d) Leave output high (floating) for at least 480 usec. - ;****** - ; ( -- f ) - ; Hardware - ; Initialize 1-wire devices; return true if present - VE_OW_RESET: -0000d2 ff08 .dw $ff08 -0000d3 7731 -0000d4 722e -0000d5 7365 -0000d6 7465 .db "1w.reset" -0000d7 00b7 .dw VE_HEAD - .set VE_HEAD = VE_OW_RESET - XT_OW_RESET: -0000d8 00d9 .dw PFA_OW_RESET - PFA_OW_RESET: -0000d9 939a -0000da 938a savetos - ; setup to output -0000db 9abc sbi OW_DDR, OW_BIT - ; Pull output low -0000dc 98c4 cbi OW_PORT, OW_BIT - ; Delay >480 usec -0000dd ece0 -0000de e0f3 -0000df 9731 -0000e0 f7f1 DELAY 480 - ; Critical timing period, disable interrupts. -0000e1 b71f in temp1, SREG -0000e2 94f8 cli - ; Pull output high -0000e3 9ac4 sbi OW_PORT, OW_BIT - ; make pin input, sends "1" -0000e4 98bc cbi OW_DDR, OW_BIT -0000e5 e8e0 -0000e6 e0f0 -0000e7 9731 -0000e8 f7f1 DELAY 64 ; delayB - ; Sample input pin, set TOS if input is zero -0000e9 b386 in tosl, OW_PIN -0000ea ff84 sbrs tosl, OW_BIT -0000eb ef9f ser tosh - ; End critical timing period, enable interrupts -0000ec bf1f out SREG, temp1 - ; release bus -0000ed 98bc cbi OW_DDR, OW_BIT -0000ee 98c4 cbi OW_PORT, OW_BIT - - ; Delay rest of 480 usec -0000ef e4e0 -0000f0 e0f3 -0000f1 9731 -0000f2 f7f1 DELAY 416 - ; we now have the result flag in TOS -0000f3 2f89 mov tosl, tosh -0000f4 940c 3805 jmp_ DO_NEXT - - ;****f* 1W.SLOT - ; NAME - ; 1W.SLOT - ; SYNOPSIS - ; 1W.SLOT ( c -- c' ) Write and read one bit to/from 1-wire. - ; DESCRIPTION - ; The "touch byte" function is described in Dallas App Note 74. - ; It outputs a byte to the 1-wire pin, LSB first, and reads back - ; the state of the 1-wire pin after a suitable delay. - ; To read a byte, output $FF and read the reply data. - ; To write a byte, output that byte and discard the reply. - ; - ; This function performs one bit of the "touch" operation -- - ; one read/write "slot" in Dallas jargon. Perform this eight - ; times in a row to get the "touch byte" function. - ; - ; PARAMETERS - ; The input parameter is xxxxxxxxbbbbbbbo where - ; 'xxxxxxxx' are don't cares, - ; 'bbbbbbb' are bits to be shifted down, and - ; 'o' is the bit to be output in the slot. This must be 1 - ; to create a read slot. - ; - ; The returned value is xxxxxxxxibbbbbbb where - ; 'xxxxxxxx' are not known (the input shifted down 1 position), - ; 'i' is the bit read during the slot. This has no meaning - ; if it was a write slot. - ; 'bbbbbbb' are the 7 input bits, shifted down one position. - ; - ; This peculiar parameter usage allows OWTOUCH to be written as - ; OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT - ; - ; NOTES - ; Interrupts are disabled during each bit. - - ; Timing, per DS18B20 data sheet: - ; a) Output "0" for start period. (> 1 us, < 15 us, typ. 6 us*) - ; b) Output data bit (0 or 1), open drain - ; c) After MS from start of cycle, sample input (15 to 60 us, typ. 25 us*) - ; d) After write-0 period from start of cycle, output "1" (>60 us) - ; e) After recovery period, loop or return. (> 1 us) - ; For writes, DS18B20 samples input 15 to 60 usec from start of cycle. - ; * "Typical" values are per App Note 132 for a 300m cable length. - - ; --------- ------------------------------- - ; \ / / - ; ------------------------------- - ; a b c d e - ; | 6us | 19us | 35us | 2us | - ;****** - ; ( c -- c' ) - ; Hardware - ; Write and read one bit to/from 1-wire. - VE_OW_SLOT: -0000f6 ff07 .dw $ff07 -0000f7 7731 -0000f8 732e -0000f9 6f6c -0000fa 0074 .db "1w.slot",0 -0000fb 00d2 .dw VE_HEAD - .set VE_HEAD = VE_OW_SLOT - XT_OW_SLOT: -0000fc 00fd .dw PFA_OW_SLOT - PFA_OW_SLOT: - ; pull low -0000fd 98c4 cbi OW_PORT, OW_BIT -0000fe 9abc sbi OW_DDR, OW_BIT - ; disable interrupts -0000ff b71f in temp1, SREG -000100 94f8 cli -000101 e0ec -000102 e0f0 -000103 9731 -000104 f7f1 DELAY 6 ; DELAY A - ; check bit -000105 9488 clc -000106 9587 ror tosl -000107 f410 brcc PFA_OW_SLOT0 ; a 0 keeps the bus low - ; release bus, a 1 is written -000108 9ac4 sbi OW_PORT, OW_BIT -000109 98bc cbi OW_DDR, OW_BIT - PFA_OW_SLOT0: - ; sample the input (no action required if zero) -00010a e1e2 -00010b e0f0 -00010c 9731 -00010d f7f1 DELAY 9 ; wait DELAY E to sample -00010e b306 in temp0, OW_PIN -00010f fd04 sbrc temp0, OW_BIT -000110 6880 ori tosl, $80 - -000111 e6e6 -000112 e0f0 -000113 9731 -000114 f7f1 DELAY 51 ; DELAY B -000115 9ac4 sbi OW_PORT, OW_BIT ; release bus -000116 98bc cbi OW_DDR, OW_BIT -000117 e0e4 -000118 e0f0 -000119 9731 -00011a f7f1 delay 2 - ; re-enable interrupts -00011b bf1f out SREG, temp1 -00011c 940c 3805 jmp_ DO_NEXT - - .include "amforth.asm" - - ;;;; - ;;;; GPL V2 (only) - - .set AMFORTH_NRWW_SIZE=(FLASHEND-AMFORTH_RO_SEG)*2 - - .set corepc = pc - .org $0000 -000000 940c 3d39 jmp_ PFA_COLD - - .org corepc - .include "drivers/generic-isr.asm" - - .eseg -000000 intvec: .byte INTVECTORS * CELLSIZE - .dseg -000072 intcnt: .byte INTVECTORS - .cseg - - ; interrupt routine gets called (again) by rcall! This gives the - ; address of the int-vector on the stack. - isr: -00011e 920a st -Y, r0 -00011f b60f in r0, SREG -000120 920a st -Y, r0 - .if (pclen==3) - .endif -000121 900f pop r0 -000122 900f pop r0 ; = intnum * intvectorsize + 1 (address following the rcall) -000123 940a dec r0 - .if intvecsize == 1 ; - .endif -000124 2cb0 mov isrflag, r0 -000125 93ff push zh -000126 93ef push zl -000127 e7e2 ldi zl, low(intcnt) -000128 e0f0 ldi zh, high(intcnt) -000129 9406 lsr r0 ; we use byte addresses in the counter array, not words -00012a 0de0 add zl, r0 -00012b 1df3 adc zh, zeroh -00012c 8000 ld r0, Z -00012d 9403 inc r0 -00012e 8200 st Z, r0 -00012f 91ef pop zl -000130 91ff pop zh - -000131 9009 ld r0, Y+ -000132 be0f out SREG, r0 -000133 9009 ld r0, Y+ -000134 9508 ret ; returns the interrupt, the rcall stack frame is removed! - ; no reti here, see words/isr-end.asm - ; lower part of the dictionary - .include "dict/rww.inc" - - - ; Arithmetics - ; add a number to a double cell - VE_MPLUS: -000135 ff02 .dw $ff02 -000136 2b6d .db "m+" -000137 00f6 .dw VE_HEAD - .set VE_HEAD = VE_MPLUS - XT_MPLUS: -000138 3801 .dw DO_COLON - PFA_MPLUS: -000139 3fc7 .dw XT_S2D -00013a 3c15 .dw XT_DPLUS -00013b 3820 .dw XT_EXIT - .include "words/ud-star.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDSTAR: -00013c ff03 .dw $ff03 -00013d 6475 -../../common\words/ud-star.asm(9): warning: .cseg .db misalignment - padding zero byte -00013e 002a .db "ud*" -00013f 0135 .dw VE_HEAD - .set VE_HEAD = VE_UDSTAR - XT_UDSTAR: -000140 3801 .dw DO_COLON - PFA_UDSTAR: - - .endif - ;Z UD* ud1 d2 -- ud3 32*16->32 multiply - ; XT_DUP >R UM* DROP XT_SWAP R> UM* ROT + ; - -000141 38b1 -000142 38ff -000143 39e0 -000144 38d9 .DW XT_DUP,XT_TO_R,XT_UMSTAR,XT_DROP -000145 38c4 -000146 38f6 -000147 39e0 -000148 38e1 -000149 399d -00014a 3820 .DW XT_SWAP,XT_R_FROM,XT_UMSTAR,XT_ROT,XT_PLUS,XT_EXIT - .include "words/umax.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UMAX: -00014b ff04 .dw $ff04 -00014c 6d75 -00014d 7861 .db "umax" -00014e 013c .dw VE_HEAD - .set VE_HEAD = VE_UMAX - XT_UMAX: -00014f 3801 .dw DO_COLON - PFA_UMAX: - .endif - -000150 3ec9 -000151 395c .DW XT_2DUP,XT_ULESS -000152 3836 .dw XT_DOCONDBRANCH -000153 0155 DEST(UMAX1) -000154 38c4 .DW XT_SWAP -000155 38d9 UMAX1: .DW XT_DROP -000156 3820 .dw XT_EXIT - .include "words/umin.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UMIN: -000157 ff04 .dw $ff04 -000158 6d75 -000159 6e69 .db "umin" -00015a 014b .dw VE_HEAD - .set VE_HEAD = VE_UMIN - XT_UMIN: -00015b 3801 .dw DO_COLON - PFA_UMIN: - .endif -00015c 3ec9 -00015d 3967 .DW XT_2DUP,XT_UGREATER -00015e 3836 .dw XT_DOCONDBRANCH -00015f 0161 DEST(UMIN1) -000160 38c4 .DW XT_SWAP -000161 38d9 UMIN1: .DW XT_DROP -000162 3820 .dw XT_EXIT - .include "words/immediate-q.asm" - - ; Tools - ; return +1 if immediate, -1 otherwise, flag from name>flags - ;VE_IMMEDIATEQ: - ; .dw $ff06 - ; .db "immediate?" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_IMMEDIATEQ - XT_IMMEDIATEQ: -000163 3801 .dw DO_COLON - PFA_IMMEDIATEQ: -000164 383d .dw XT_DOLITERAL -000165 8000 .dw $8000 -000166 3a13 .dw XT_AND -000167 391a .dw XT_ZEROEQUAL -000168 3836 .dw XT_DOCONDBRANCH -000169 016c DEST(IMMEDIATEQ1) -00016a 3fe6 .dw XT_ONE -00016b 3820 .dw XT_EXIT - IMMEDIATEQ1: - ; not immediate -00016c 394b .dw XT_TRUE -00016d 3820 .dw XT_EXIT - .include "words/name2flags.asm" - - ; Tools - ; get the flags from a name token - VE_NAME2FLAGS: -00016e ff0a .dw $ff0a -00016f 616e -000170 656d -000171 663e -000172 616c -000173 7367 .db "name>flags" -000174 0157 .dw VE_HEAD - .set VE_HEAD = VE_NAME2FLAGS - XT_NAME2FLAGS: -000175 3801 .dw DO_COLON - PFA_NAME2FLAGS: -000176 3bcb .dw XT_FETCHI ; skip to link field -000177 383d .dw XT_DOLITERAL -000178 ff00 .dw $ff00 -000179 3a13 .dw XT_AND -00017a 3820 .dw XT_EXIT - - .if AMFORTH_NRWW_SIZE > 8000 - .elif AMFORTH_NRWW_SIZE > 4000 - .include "dict/appl_4k.inc" - - - ; Tools - ; print the version string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOT_VER: -00017b ff03 .dw $ff03 -00017c 6576 -../../common\words/ver.asm(12): warning: .cseg .db misalignment - padding zero byte -00017d 0072 .db "ver" -00017e 016e .dw VE_HEAD - .set VE_HEAD = VE_DOT_VER - XT_DOT_VER: -00017f 3801 .dw DO_COLON - PFA_DOT_VER: - .endif -000180 02cf .dw XT_ENV_FORTHNAME -000181 03f8 .dw XT_ITYPE -000182 3fae .dw XT_SPACE -000183 3ebd .dw XT_BASE -000184 3879 .dw XT_FETCH - -000185 02dd .dw XT_ENV_FORTHVERSION -000186 3f41 .dw XT_DECIMAL -000187 3fc7 .dw XT_S2D -000188 0316 .dw XT_L_SHARP -000189 031e .dw XT_SHARP -00018a 383d .dw XT_DOLITERAL -00018b 002e .dw '.' -00018c 0307 .dw XT_HOLD -00018d 0334 .dw XT_SHARP_S -00018e 033f .dw XT_SHARP_G -00018f 042e .dw XT_TYPE -000190 3ebd .dw XT_BASE -000191 3881 .dw XT_STORE -000192 3fae .dw XT_SPACE -000193 02e5 .dw XT_ENV_CPU -000194 03f8 .dw XT_ITYPE - -000195 3820 .dw XT_EXIT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/noop.asm" - - ; Tools - ; do nothing - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NOOP: -000196 ff04 .dw $ff04 -000197 6f6e -000198 706f .db "noop" -000199 017b .dw VE_HEAD - .set VE_HEAD = VE_NOOP - XT_NOOP: -00019a 3801 .dw DO_COLON - PFA_NOOP: - .endif -00019b 3820 .DW XT_EXIT - .include "words/unused.asm" - - ; Tools - ; Amount of available RAM (incl. PAD) - VE_UNUSED: -00019c ff06 .dw $ff06 -00019d 6e75 -00019e 7375 -00019f 6465 .db "unused" -0001a0 0196 .dw VE_HEAD - .set VE_HEAD = VE_UNUSED - XT_UNUSED: -0001a1 3801 .dw DO_COLON - PFA_UNUSED: -0001a2 3a8d .dw XT_SP_FETCH -0001a3 3f23 .dw XT_HERE -0001a4 3993 .dw XT_MINUS -0001a5 3820 .dw XT_EXIT - .include "words/to.asm" - - ; Tools - ; store the TOS to the named value (eeprom cell) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO: -0001a6 0002 .dw $0002 -0001a7 6f74 .db "to" -0001a8 019c .dw VE_HEAD - .set VE_HEAD = VE_TO - XT_TO: -0001a9 3801 .dw DO_COLON - PFA_TO: - .endif -0001aa 043d .dw XT_TICK -0001ab 3fd0 .dw XT_TO_BODY -0001ac 3eb7 .dw XT_STATE -0001ad 3879 .dw XT_FETCH -0001ae 3836 .dw XT_DOCONDBRANCH -0001af 01ba DEST(PFA_TO1) -0001b0 0751 .dw XT_COMPILE -0001b1 01b4 .dw XT_DOTO -0001b2 075c .dw XT_COMMA -0001b3 3820 .dw XT_EXIT - - ; ( n -- ) (R: IP -- IP+1) - ; Tools - ; runtime portion of to - ;VE_DOTO: - ; .dw $ff04 - ; .db "(to)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOTO - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - XT_DOTO: -0001b4 3801 .dw DO_COLON - PFA_DOTO: - .endif -0001b5 38f6 .dw XT_R_FROM -0001b6 38b1 .dw XT_DUP -0001b7 01c6 .dw XT_ICELLPLUS -0001b8 38ff .dw XT_TO_R -0001b9 3bcb .dw XT_FETCHI - PFA_TO1: -0001ba 38b1 .dw XT_DUP -0001bb 01c6 .dw XT_ICELLPLUS -0001bc 01c6 .dw XT_ICELLPLUS -0001bd 3bcb .dw XT_FETCHI -0001be 382a .dw XT_EXECUTE -0001bf 3820 .dw XT_EXIT - .include "words/i-cellplus.asm" - - ; Compiler - ; skip to the next cell in flash - VE_ICELLPLUS: -0001c0 ff07 .dw $FF07 -0001c1 2d69 -0001c2 6563 -0001c3 6c6c -0001c4 002b .db "i-cell+",0 -0001c5 01a6 .dw VE_HEAD - .set VE_HEAD = VE_ICELLPLUS - XT_ICELLPLUS: -0001c6 3801 .dw DO_COLON - PFA_ICELLPLUS: -0001c7 3a2f .dw XT_1PLUS -0001c8 3820 .dw XT_EXIT - .include "words/icompare.asm" - - ; Tools - ; compares string in RAM with string in flash. f is zero if equal like COMPARE - VE_ICOMPARE: -0001c9 ff08 .dw $ff08 -0001ca 6369 -0001cb 6d6f -0001cc 6170 -0001cd 6572 .db "icompare" -0001ce 01c0 .dw VE_HEAD - .set VE_HEAD = VE_ICOMPARE - XT_ICOMPARE: -0001cf 3801 .dw DO_COLON - PFA_ICOMPARE: -0001d0 38ff .dw XT_TO_R ; ( -- r-addr r-len f-addr) -0001d1 38cf .dw XT_OVER ; ( -- r-addr r-len f-addr r-len) -0001d2 38f6 .dw XT_R_FROM ; ( -- r-addr r-len f-addr r-len f-len ) -0001d3 3913 .dw XT_NOTEQUAL ; ( -- r-addr r-len f-addr flag ) -0001d4 3836 .dw XT_DOCONDBRANCH -0001d5 01da .dw PFA_ICOMPARE_SAMELEN -0001d6 3ed2 .dw XT_2DROP -0001d7 38d9 .dw XT_DROP -0001d8 394b .dw XT_TRUE -0001d9 3820 .dw XT_EXIT - PFA_ICOMPARE_SAMELEN: -0001da 38c4 .dw XT_SWAP ; ( -- r-addr f-addr len ) -0001db 3954 .dw XT_ZERO -0001dc 081b .dw XT_QDOCHECK -0001dd 3836 .dw XT_DOCONDBRANCH -0001de 01fd .dw PFA_ICOMPARE_DONE -0001df 3a9b .dw XT_DODO - PFA_ICOMPARE_LOOP: - ; ( r-addr f-addr --) -0001e0 38cf .dw XT_OVER -0001e1 3879 .dw XT_FETCH - .if WANT_IGNORECASE == 1 - .endif -0001e2 38cf .dw XT_OVER -0001e3 3bcb .dw XT_FETCHI ; ( -- r-addr f-addr r-cc f- cc) - .if WANT_IGNORECASE == 1 - .endif - ; flash strings are zero-padded at the last cell - ; that means: if the flash cell is less $0100, than mask the - ; high byte in the ram cell -0001e4 38b1 .dw XT_DUP - ;.dw XT_BYTESWAP -0001e5 383d .dw XT_DOLITERAL -0001e6 0100 .dw $100 -0001e7 395c .dw XT_ULESS -0001e8 3836 .dw XT_DOCONDBRANCH -0001e9 01ee .dw PFA_ICOMPARE_LASTCELL -0001ea 38c4 .dw XT_SWAP -0001eb 383d .dw XT_DOLITERAL -0001ec 00ff .dw $00FF -0001ed 3a13 .dw XT_AND ; the final swap can be omitted - PFA_ICOMPARE_LASTCELL: -0001ee 3913 .dw XT_NOTEQUAL -0001ef 3836 .dw XT_DOCONDBRANCH -0001f0 01f5 .dw PFA_ICOMPARE_NEXTLOOP -0001f1 3ed2 .dw XT_2DROP -0001f2 394b .dw XT_TRUE -0001f3 3ad4 .dw XT_UNLOOP -0001f4 3820 .dw XT_EXIT - PFA_ICOMPARE_NEXTLOOP: -0001f5 3a2f .dw XT_1PLUS -0001f6 38c4 .dw XT_SWAP -0001f7 3c90 .dw XT_CELLPLUS -0001f8 38c4 .dw XT_SWAP -0001f9 383d .dw XT_DOLITERAL -0001fa 0002 .dw 2 -0001fb 3aba .dw XT_DOPLUSLOOP -0001fc 01e0 .dw PFA_ICOMPARE_LOOP - PFA_ICOMPARE_DONE: -0001fd 3ed2 .dw XT_2DROP -0001fe 3954 .dw XT_ZERO -0001ff 3820 .dw XT_EXIT - - .if WANT_IGNORECASE == 1 - .endif - .include "words/star.asm" - - ; Arithmetics - ; multiply routine - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_STAR: -000200 ff01 .dw $ff01 -000201 002a .db "*",0 -000202 01c9 .dw VE_HEAD - .set VE_HEAD = VE_STAR - XT_STAR: -000203 3801 .dw DO_COLON - PFA_STAR: - .endif - -000204 39a6 .dw XT_MSTAR -000205 38d9 .dw XT_DROP -000206 3820 .dw XT_EXIT - .include "words/j.asm" - - ; Compiler - ; loop counter of outer loop - VE_J: -000207 ff01 .dw $FF01 -000208 006a .db "j",0 -000209 0200 .dw VE_HEAD - .set VE_HEAD = VE_J - XT_J: -00020a 3801 .dw DO_COLON - PFA_J: -00020b 3a76 .dw XT_RP_FETCH -00020c 383d .dw XT_DOLITERAL -00020d 0007 .dw 7 -00020e 399d .dw XT_PLUS -00020f 3879 .dw XT_FETCH -000210 3a76 .dw XT_RP_FETCH -000211 383d .dw XT_DOLITERAL -000212 0009 .dw 9 -000213 399d .dw XT_PLUS -000214 3879 .dw XT_FETCH -000215 399d .dw XT_PLUS -000216 3820 .dw XT_EXIT - .include "words/dabs.asm" - - ; Arithmetics - ; double cell absolute value - VE_DABS: -000217 ff04 .dw $ff04 -000218 6164 -000219 7362 .db "dabs" -00021a 0207 .dw VE_HEAD - .set VE_HEAD = VE_DABS - XT_DABS: -00021b 3801 .dw DO_COLON - PFA_DABS: -00021c 38b1 .dw XT_DUP -00021d 3921 .dw XT_ZEROLESS -00021e 3836 .dw XT_DOCONDBRANCH -00021f 0221 .dw PFA_DABS1 -000220 0228 .dw XT_DNEGATE - PFA_DABS1: -000221 3820 .dw XT_EXIT - ; : dabs ( ud1 -- +d2 ) dup 0< if dnegate then ; - .include "words/dnegate.asm" - - ; Arithmetics - ; double cell negation - VE_DNEGATE: -000222 ff07 .dw $ff07 -000223 6e64 -000224 6765 -000225 7461 -000226 0065 .db "dnegate",0 -000227 0217 .dw VE_HEAD - .set VE_HEAD = VE_DNEGATE - XT_DNEGATE: -000228 3801 .dw DO_COLON - PFA_DNEGATE: -000229 3c3b .dw XT_DINVERT -00022a 3fe6 .dw XT_ONE -00022b 3954 .dw XT_ZERO -00022c 3c15 .dw XT_DPLUS -00022d 3820 .dw XT_EXIT - ; : dnegate ( ud1 -- ud2 ) dinvert 1. d+ ; - .include "words/cmove.asm" - - ; Memory - ; copy data in RAM, from lower to higher addresses - VE_CMOVE: -00022e ff05 .dw $ff05 -00022f 6d63 -000230 766f -000231 0065 .db "cmove",0 -000232 0222 .dw VE_HEAD - .set VE_HEAD = VE_CMOVE - XT_CMOVE: -000233 0234 .dw PFA_CMOVE - PFA_CMOVE: -000234 93bf push xh -000235 93af push xl -000236 91e9 ld zl, Y+ -000237 91f9 ld zh, Y+ ; addr-to -000238 91a9 ld xl, Y+ -000239 91b9 ld xh, Y+ ; addr-from -00023a 2f09 mov temp0, tosh -00023b 2b08 or temp0, tosl -00023c f021 brbs 1, PFA_CMOVE1 - PFA_CMOVE2: -00023d 911d ld temp1, X+ -00023e 9311 st Z+, temp1 -00023f 9701 sbiw tosl, 1 -000240 f7e1 brbc 1, PFA_CMOVE2 - PFA_CMOVE1: -000241 91af pop xl -000242 91bf pop xh -000243 9189 -000244 9199 loadtos -000245 940c 3805 jmp_ DO_NEXT - .include "words/2swap.asm" - - ; Stack - ; Exchange the two top cell pairs - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2SWAP: -000247 ff05 .dw $ff05 -000248 7332 -000249 6177 -00024a 0070 .db "2swap",0 -00024b 022e .dw VE_HEAD - .set VE_HEAD = VE_2SWAP - XT_2SWAP: -00024c 3801 .dw DO_COLON - PFA_2SWAP: - - .endif -00024d 38e1 .dw XT_ROT -00024e 38ff .dw XT_TO_R -00024f 38e1 .dw XT_ROT -000250 38f6 .dw XT_R_FROM -000251 3820 .dw XT_EXIT - .include "words/tib.asm" - - ; System - ; refills the input buffer - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_REFILLTIB: -000252 ff0a .dw $ff0a -000253 6572 -000254 6966 -000255 6c6c -000256 742d -000257 6269 .db "refill-tib" -000258 0247 .dw VE_HEAD - .set VE_HEAD = VE_REFILLTIB - XT_REFILLTIB: -000259 3801 .dw DO_COLON - PFA_REFILLTIB: - .endif -00025a 0275 .dw XT_TIB -00025b 383d .dw XT_DOLITERAL -00025c 005a .dw TIB_SIZE -00025d 048d .dw XT_ACCEPT -00025e 027b .dw XT_NUMBERTIB -00025f 3881 .dw XT_STORE -000260 3954 .dw XT_ZERO -000261 3ee2 .dw XT_TO_IN -000262 3881 .dw XT_STORE -000263 394b .dw XT_TRUE ; -1 -000264 3820 .dw XT_EXIT - - ; ( -- addr n ) - ; System - ; address and current length of the input buffer - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SOURCETIB: -000265 ff0a .dw $FF0A -000266 6f73 -000267 7275 -000268 6563 -000269 742d -00026a 6269 .db "source-tib" -00026b 0252 .dw VE_HEAD - .set VE_HEAD = VE_SOURCETIB - XT_SOURCETIB: -00026c 3801 .dw DO_COLON - PFA_SOURCETIB: - .endif -00026d 0275 .dw XT_TIB -00026e 027b .dw XT_NUMBERTIB -00026f 3879 .dw XT_FETCH -000270 3820 .dw XT_EXIT - - ; ( -- addr ) - ; System Variable - ; terminal input buffer address - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TIB: -000271 ff03 .dw $ff03 -000272 6974 -000273 0062 .db "tib",0 -000274 0265 .dw VE_HEAD - .set VE_HEAD = VE_TIB - XT_TIB: -000275 3848 .dw PFA_DOVARIABLE - PFA_TIB: -000276 0087 .dw ram_tib - .dseg -000087 ram_tib: .byte TIB_SIZE - .cseg - .endif - - ; ( -- addr ) - ; System Variable - ; variable holding the number of characters in TIB - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NUMBERTIB: -000277 ff04 .dw $ff04 -000278 7423 -000279 6269 .db "#tib" -00027a 0271 .dw VE_HEAD - .set VE_HEAD = VE_NUMBERTIB - XT_NUMBERTIB: -00027b 3848 .dw PFA_DOVARIABLE - PFA_NUMBERTIB: -00027c 00e1 .dw ram_sharptib - .dseg -0000e1 ram_sharptib: .byte 2 - .cseg - .endif - .include "words/init-ram.asm" - - ; Tools - ; copy len cells from eeprom to ram - VE_EE2RAM: -00027d ff06 .dw $ff06 -00027e 6565 -00027f 723e -000280 6d61 .db "ee>ram" -000281 0277 .dw VE_HEAD - .set VE_HEAD = VE_EE2RAM - XT_EE2RAM: -000282 3801 .dw DO_COLON - PFA_EE2RAM: ; ( -- ) -000283 3954 .dw XT_ZERO -000284 3a9b .dw XT_DODO - PFA_EE2RAM_1: - ; ( -- e-addr r-addr ) -000285 38cf .dw XT_OVER -000286 3b5f .dw XT_FETCHE -000287 38cf .dw XT_OVER -000288 3881 .dw XT_STORE -000289 3c90 .dw XT_CELLPLUS -00028a 38c4 .dw XT_SWAP -00028b 3c90 .dw XT_CELLPLUS -00028c 38c4 .dw XT_SWAP -00028d 3ac9 .dw XT_DOLOOP -00028e 0285 .dw PFA_EE2RAM_1 - PFA_EE2RAM_2: -00028f 3ed2 .dw XT_2DROP -000290 3820 .dw XT_EXIT - - ; ( -- ) - ; Tools - ; setup the default user area from eeprom - VE_INIT_RAM: -000291 ff08 .dw $ff08 -000292 6e69 -000293 7469 -000294 722d -000295 6d61 .db "init-ram" -000296 027d .dw VE_HEAD - .set VE_HEAD = VE_INIT_RAM - XT_INIT_RAM: -000297 3801 .dw DO_COLON - PFA_INI_RAM: ; ( -- ) -000298 383d .dw XT_DOLITERAL -000299 0060 .dw EE_INITUSER -00029a 3b02 .dw XT_UP_FETCH -00029b 383d .dw XT_DOLITERAL -00029c 0022 .dw SYSUSERSIZE -00029d 3a04 .dw XT_2SLASH -00029e 0282 .dw XT_EE2RAM -00029f 3820 .dw XT_EXIT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - - - .include "words/environment.asm" - - ; System Value - ; word list identifier of the environmental search list - VE_ENVIRONMENT: -0002a0 ff0b .dw $ff0b -0002a1 6e65 -0002a2 6976 -0002a3 6f72 -0002a4 6d6e -0002a5 6e65 -0002a6 0074 .db "environment",0 -0002a7 0291 .dw VE_HEAD - .set VE_HEAD = VE_ENVIRONMENT - XT_ENVIRONMENT: -0002a8 3848 .dw PFA_DOVARIABLE - PFA_ENVIRONMENT: -0002a9 003a .dw CFG_ENVIRONMENT - .include "words/env-wordlists.asm" - - ; Environment - ; maximum number of wordlists in the dictionary search order - VE_ENVWORDLISTS: -0002aa ff09 .dw $ff09 -0002ab 6f77 -0002ac 6472 -0002ad 696c -0002ae 7473 -0002af 0073 .db "wordlists",0 -0002b0 0000 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVWORDLISTS - XT_ENVWORDLISTS: -0002b1 3801 .dw DO_COLON - PFA_ENVWORDLISTS: -0002b2 383d .dw XT_DOLITERAL -0002b3 0008 .dw NUMWORDLISTS -0002b4 3820 .dw XT_EXIT - .include "words/env-slashpad.asm" - - ; Environment - ; Size of the PAD buffer in bytes - VE_ENVSLASHPAD: -0002b5 ff04 .dw $ff04 -0002b6 702f -0002b7 6461 .db "/pad" -0002b8 02aa .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVSLASHPAD - XT_ENVSLASHPAD: -0002b9 3801 .dw DO_COLON - PFA_ENVSLASHPAD: -0002ba 3a8d .dw XT_SP_FETCH -0002bb 3ee8 .dw XT_PAD -0002bc 3993 .dw XT_MINUS -0002bd 3820 .dw XT_EXIT - .include "words/env-slashhold.asm" - - ; Environment - ; size of the pictured numeric output buffer in bytes - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENVSLASHHOLD: -0002be ff05 .dw $ff05 -0002bf 682f -0002c0 6c6f -0002c1 0064 .db "/hold",0 -0002c2 02b5 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVSLASHHOLD - XT_ENVSLASHHOLD: -0002c3 3801 .dw DO_COLON - PFA_ENVSLASHHOLD: - .endif -0002c4 3ee8 .dw XT_PAD -0002c5 3f23 .dw XT_HERE -0002c6 3993 .dw XT_MINUS -0002c7 3820 .dw XT_EXIT - .include "words/env-forthname.asm" - - ; Environment - ; flash address of the amforth name string - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENV_FORTHNAME: -0002c8 ff0a .dw $ff0a -0002c9 6f66 -0002ca 7472 -0002cb 2d68 -0002cc 616e -0002cd 656d .db "forth-name" -0002ce 02be .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_FORTHNAME - XT_ENV_FORTHNAME: -0002cf 3801 .dw DO_COLON - PFA_EN_FORTHNAME: -0002d0 03c5 .dw XT_DOSLITERAL -0002d1 0007 .dw 7 - .endif -0002d2 6d61 -0002d3 6f66 -0002d4 7472 -../../common\words/env-forthname.asm(22): warning: .cseg .db misalignment - padding zero byte -0002d5 0068 .db "amforth" - .if cpu_msp430==1 - .endif -0002d6 3820 .dw XT_EXIT - .include "words/env-forthversion.asm" - - ; Environment - ; version number of amforth - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENV_FORTHVERSION: -0002d7 ff07 .dw $ff07 -0002d8 6576 -0002d9 7372 -0002da 6f69 -0002db 006e .db "version",0 -0002dc 02c8 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_FORTHVERSION - XT_ENV_FORTHVERSION: -0002dd 3801 .dw DO_COLON - PFA_EN_FORTHVERSION: - .endif -0002de 383d .dw XT_DOLITERAL -0002df 0041 .dw 65 -0002e0 3820 .dw XT_EXIT - .include "words/env-cpu.asm" - - ; Environment - ; flash address of the CPU identification string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENV_CPU: -0002e1 ff03 .dw $ff03 -0002e2 7063 -0002e3 0075 .db "cpu",0 -0002e4 02d7 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_CPU - XT_ENV_CPU: -0002e5 3801 .dw DO_COLON - PFA_EN_CPU: - .endif -0002e6 383d .dw XT_DOLITERAL -0002e7 002d .dw mcu_name -0002e8 0424 .dw XT_ICOUNT -0002e9 3820 .dw XT_EXIT - .include "words/env-mcuinfo.asm" - - ; Environment - ; flash address of some CPU specific parameters - VE_ENV_MCUINFO: -0002ea ff08 .dw $ff08 -0002eb 636d -0002ec 2d75 -0002ed 6e69 -0002ee 6f66 .db "mcu-info" -0002ef 02e1 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_MCUINFO - XT_ENV_MCUINFO: -0002f0 3801 .dw DO_COLON - PFA_EN_MCUINFO: -0002f1 383d .dw XT_DOLITERAL -0002f2 0029 .dw mcu_info -0002f3 3820 .dw XT_EXIT - .include "words/env-usersize.asm" - - ; Environment - ; size of the USER area in bytes - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_ENVUSERSIZE: -0002f4 ff05 .dw $ff05 -0002f5 752f -0002f6 6573 -0002f7 0072 .db "/user",0 -0002f8 02ea .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVUSERSIZE - XT_ENVUSERSIZE: -0002f9 3801 .dw DO_COLON - PFA_ENVUSERSIZE: - .endif -0002fa 383d .dw XT_DOLITERAL -0002fb 002c .dw SYSUSERSIZE + APPUSERSIZE -0002fc 3820 .dw XT_EXIT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/hld.asm" - - ; Numeric IO - ; pointer to current write position in the Pictured Numeric Output buffer - VE_HLD: -0002fd ff03 .dw $ff03 -0002fe 6c68 -0002ff 0064 .db "hld",0 -000300 02a0 .dw VE_HEAD - .set VE_HEAD = VE_HLD - XT_HLD: -000301 3848 .dw PFA_DOVARIABLE - PFA_HLD: -000302 00e3 .dw ram_hld - - .dseg -0000e3 ram_hld: .byte 2 - .cseg - .include "words/hold.asm" - - ; Numeric IO - ; prepend character to pictured numeric output buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_HOLD: -000303 ff04 .dw $ff04 -000304 6f68 -000305 646c .db "hold" -000306 02fd .dw VE_HEAD - .set VE_HEAD = VE_HOLD - XT_HOLD: -000307 3801 .dw DO_COLON - PFA_HOLD: - .endif -000308 0301 .dw XT_HLD -000309 38b1 .dw XT_DUP -00030a 3879 .dw XT_FETCH -00030b 3a35 .dw XT_1MINUS -00030c 38b1 .dw XT_DUP -00030d 38ff .dw XT_TO_R -00030e 38c4 .dw XT_SWAP -00030f 3881 .dw XT_STORE -000310 38f6 .dw XT_R_FROM -000311 388d .dw XT_CSTORE -000312 3820 .dw XT_EXIT - .include "words/less-sharp.asm" ; <# - - ; Numeric IO - ; initialize the pictured numeric output conversion process - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_L_SHARP: -000313 ff02 .dw $ff02 -000314 233c .db "<#" -000315 0303 .dw VE_HEAD - .set VE_HEAD = VE_L_SHARP - XT_L_SHARP: -000316 3801 .dw DO_COLON - PFA_L_SHARP: - .endif -000317 3ee8 .dw XT_PAD -000318 0301 .dw XT_HLD -000319 3881 .dw XT_STORE -00031a 3820 .dw XT_EXIT - .include "words/sharp.asm" - - ; Numeric IO - ; pictured numeric output: convert one digit - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_SHARP: -00031b ff01 .dw $ff01 -00031c 0023 .db "#",0 -00031d 0313 .dw VE_HEAD - .set VE_HEAD = VE_SHARP - XT_SHARP: -00031e 3801 .dw DO_COLON - PFA_SHARP: - .endif -00031f 3ebd .dw XT_BASE -000320 3879 .dw XT_FETCH -000321 039b .dw XT_UDSLASHMOD -000322 38e1 .dw XT_ROT -000323 383d .dw XT_DOLITERAL -000324 0009 .dw 9 -000325 38cf .dw XT_OVER -000326 396e .dw XT_LESS -000327 3836 .dw XT_DOCONDBRANCH -000328 032c DEST(PFA_SHARP1) -000329 383d .dw XT_DOLITERAL -00032a 0007 .dw 7 -00032b 399d .dw XT_PLUS - PFA_SHARP1: -00032c 383d .dw XT_DOLITERAL -00032d 0030 .dw 48 ; ASCII 0 -00032e 399d .dw XT_PLUS -00032f 0307 .dw XT_HOLD -000330 3820 .dw XT_EXIT - ; : # ( ud1 -- ud2 ) - ; base @ ud/mod rot 9 over < if 7 + then 30 + hold ; - .include "words/sharp-s.asm" - - ; Numeric IO - ; pictured numeric output: convert all digits until 0 (zero) is reached - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SHARP_S: -000331 ff02 .dw $ff02 -000332 7323 .db "#s" -000333 031b .dw VE_HEAD - .set VE_HEAD = VE_SHARP_S - XT_SHARP_S: -000334 3801 .dw DO_COLON - PFA_SHARP_S: - .endif - NUMS1: -000335 031e .dw XT_SHARP -000336 3ec9 .dw XT_2DUP -000337 3a1c .dw XT_OR -000338 391a .dw XT_ZEROEQUAL -000339 3836 .dw XT_DOCONDBRANCH -00033a 0335 DEST(NUMS1) ; PFA_SHARP_S -00033b 3820 .dw XT_EXIT - .include "words/sharp-greater.asm" ; #> - - ; Numeric IO - ; Pictured Numeric Output: convert PNO buffer into an string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SHARP_G: -00033c ff02 .dw $ff02 -00033d 3e23 .db "#>" -00033e 0331 .dw VE_HEAD - .set VE_HEAD = VE_SHARP_G - XT_SHARP_G: -00033f 3801 .dw DO_COLON - PFA_SHARP_G: - .endif -000340 3ed2 .dw XT_2DROP -000341 0301 .dw XT_HLD -000342 3879 .dw XT_FETCH -000343 3ee8 .dw XT_PAD -000344 38cf .dw XT_OVER -000345 3993 .dw XT_MINUS -000346 3820 .dw XT_EXIT - .include "words/sign.asm" - - ; Numeric IO - ; place a - in HLD if n is negative - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SIGN: -000347 ff04 .dw $ff04 -000348 6973 -000349 6e67 .db "sign" -00034a 033c .dw VE_HEAD - .set VE_HEAD = VE_SIGN - XT_SIGN: -00034b 3801 .dw DO_COLON - PFA_SIGN: - .endif -00034c 3921 .dw XT_ZEROLESS -00034d 3836 .dw XT_DOCONDBRANCH -00034e 0352 DEST(PFA_SIGN1) -00034f 383d .dw XT_DOLITERAL -000350 002d .dw 45 ; ascii - -000351 0307 .dw XT_HOLD - PFA_SIGN1: -000352 3820 .dw XT_EXIT - .include "words/d-dot-r.asm" - - ; Numeric IO - ; singed PNO with double cell numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DDOTR: -000353 ff03 .dw $ff03 -000354 2e64 -000355 0072 .db "d.r",0 -000356 0347 .dw VE_HEAD - .set VE_HEAD = VE_DDOTR - XT_DDOTR: -000357 3801 .dw DO_COLON - PFA_DDOTR: - - .endif -000358 38ff .dw XT_TO_R -000359 3eda .dw XT_TUCK -00035a 021b .dw XT_DABS -00035b 0316 .dw XT_L_SHARP -00035c 0334 .dw XT_SHARP_S -00035d 38e1 .dw XT_ROT -00035e 034b .dw XT_SIGN -00035f 033f .dw XT_SHARP_G -000360 38f6 .dw XT_R_FROM -000361 38cf .dw XT_OVER -000362 3993 .dw XT_MINUS -000363 3fb7 .dw XT_SPACES -000364 042e .dw XT_TYPE -000365 3820 .dw XT_EXIT - ; : d.r ( d n -- ) - ; >r swap over dabs <# #s rot sign #> r> over - spaces type ; - .include "words/dot-r.asm" - - ; Numeric IO - ; singed PNO with single cell numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOTR: -000366 ff02 .dw $ff02 -000367 722e .db ".r" -000368 0353 .dw VE_HEAD - .set VE_HEAD = VE_DOTR - XT_DOTR: -000369 3801 .dw DO_COLON - PFA_DOTR: - - .endif -00036a 38ff .dw XT_TO_R -00036b 3fc7 .dw XT_S2D -00036c 38f6 .dw XT_R_FROM -00036d 0357 .dw XT_DDOTR -00036e 3820 .dw XT_EXIT - ; : .r ( s n -- ) >r s>d r> d.r ; - .include "words/d-dot.asm" - - ; Numeric IO - ; singed PNO with double cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DDOT: -00036f ff02 .dw $ff02 -000370 2e64 .db "d." -000371 0366 .dw VE_HEAD - .set VE_HEAD = VE_DDOT - XT_DDOT: -000372 3801 .dw DO_COLON - PFA_DDOT: - - .endif -000373 3954 .dw XT_ZERO -000374 0357 .dw XT_DDOTR -000375 3fae .dw XT_SPACE -000376 3820 .dw XT_EXIT - ; : d. ( d -- ) 0 d.r space ; - .include "words/dot.asm" - - ; Numeric IO - ; singed PNO with single cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_DOT: -000377 ff01 .dw $ff01 -000378 002e .db ".",0 -000379 036f .dw VE_HEAD - .set VE_HEAD = VE_DOT - XT_DOT: -00037a 3801 .dw DO_COLON - PFA_DOT: - .endif -00037b 3fc7 .dw XT_S2D -00037c 0372 .dw XT_DDOT -00037d 3820 .dw XT_EXIT - ; : . ( s -- ) s>d d. ; - .include "words/ud-dot.asm" - - ; Numeric IO - ; unsigned PNO with double cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDDOT: -00037e ff03 .dw $ff03 -00037f 6475 -000380 002e .db "ud.",0 -000381 0377 .dw VE_HEAD - .set VE_HEAD = VE_UDDOT - XT_UDDOT: -000382 3801 .dw DO_COLON - PFA_UDDOT: - .endif -000383 3954 .dw XT_ZERO -000384 038b .dw XT_UDDOTR -000385 3fae .dw XT_SPACE -000386 3820 .dw XT_EXIT - .include "words/ud-dot-r.asm" - - ; Numeric IO - ; unsigned PNO with double cell numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_UDDOTR: -000387 ff04 .dw $ff04 -000388 6475 -000389 722e .db "ud.r" -00038a 037e .dw VE_HEAD - .set VE_HEAD = VE_UDDOTR - XT_UDDOTR: -00038b 3801 .dw DO_COLON - PFA_UDDOTR: - .endif -00038c 38ff .dw XT_TO_R -00038d 0316 .dw XT_L_SHARP -00038e 0334 .dw XT_SHARP_S -00038f 033f .dw XT_SHARP_G -000390 38f6 .dw XT_R_FROM -000391 38cf .dw XT_OVER -000392 3993 .dw XT_MINUS -000393 3fb7 .dw XT_SPACES -000394 042e .dw XT_TYPE -000395 3820 .dw XT_EXIT - .include "words/ud-slash-mod.asm" - - ; Arithmetics - ; unsigned double cell division with remainder - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDSLASHMOD: -000396 ff06 .dw $ff06 -000397 6475 -000398 6d2f -000399 646f .db "ud/mod" -00039a 0387 .dw VE_HEAD - .set VE_HEAD = VE_UDSLASHMOD - XT_UDSLASHMOD: -00039b 3801 .dw DO_COLON - PFA_UDSLASHMOD: - .endif -00039c 38ff .dw XT_TO_R -00039d 3954 .dw XT_ZERO -00039e 3908 .dw XT_R_FETCH -00039f 39c2 .dw XT_UMSLASHMOD -0003a0 38f6 .dw XT_R_FROM -0003a1 38c4 .dw XT_SWAP -0003a2 38ff .dw XT_TO_R -0003a3 39c2 .dw XT_UMSLASHMOD -0003a4 38f6 .dw XT_R_FROM -0003a5 3820 .dw XT_EXIT - .include "words/digit-q.asm" - - ; Numeric IO - ; tries to convert a character to a number, set flag accordingly - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DIGITQ: -0003a6 ff06 .dw $ff06 -0003a7 6964 -0003a8 6967 -0003a9 3f74 .db "digit?" -0003aa 0396 .dw VE_HEAD - .set VE_HEAD = VE_DIGITQ - XT_DIGITQ: -0003ab 3801 .dw DO_COLON - PFA_DIGITQ: - .endif -0003ac 3f66 .dw XT_TOUPPER -0003ad 38b1 -0003ae 383d -0003af 0039 -0003b0 3978 -0003b1 383d -0003b2 0100 .DW XT_DUP,XT_DOLITERAL,57,XT_GREATER,XT_DOLITERAL,256 -0003b3 3a13 -0003b4 399d -0003b5 38b1 -0003b6 383d -0003b7 0140 -0003b8 3978 .DW XT_AND,XT_PLUS,XT_DUP,XT_DOLITERAL,320,XT_GREATER -0003b9 383d -0003ba 0107 -0003bb 3a13 -0003bc 3993 -0003bd 383d -0003be 0030 .DW XT_DOLITERAL,263,XT_AND,XT_MINUS,XT_DOLITERAL,48 -0003bf 3993 -0003c0 38b1 -0003c1 3ebd -0003c2 3879 -0003c3 395c .DW XT_MINUS,XT_DUP,XT_BASE,XT_FETCH,XT_ULESS -0003c4 3820 .DW XT_EXIT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/do-sliteral.asm" - - ; String - ; runtime portion of sliteral - ;VE_DOSLITERAL: - ; .dw $ff0a - ; .db "(sliteral)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOSLITERAL - XT_DOSLITERAL: -0003c5 3801 .dw DO_COLON - PFA_DOSLITERAL: -0003c6 3908 .dw XT_R_FETCH ; ( -- addr ) -0003c7 0424 .dw XT_ICOUNT -0003c8 38f6 .dw XT_R_FROM -0003c9 38cf .dw XT_OVER ; ( -- addr' n addr n) -0003ca 3a2f .dw XT_1PLUS -0003cb 3a04 .dw XT_2SLASH ; ( -- addr' n addr k ) -0003cc 399d .dw XT_PLUS ; ( -- addr' n addr'' ) -0003cd 3a2f .dw XT_1PLUS -0003ce 38ff .dw XT_TO_R ; ( -- ) -0003cf 3820 .dw XT_EXIT - .include "words/scomma.asm" - - ; Compiler - ; compiles a string from RAM to Flash - VE_SCOMMA: -0003d0 ff02 .dw $ff02 -0003d1 2c73 .db "s",$2c -0003d2 03a6 .dw VE_HEAD - .set VE_HEAD = VE_SCOMMA - XT_SCOMMA: -0003d3 3801 .dw DO_COLON - PFA_SCOMMA: -0003d4 38b1 .dw XT_DUP -0003d5 03d7 .dw XT_DOSCOMMA -0003d6 3820 .dw XT_EXIT - - ; ( addr len len' -- ) - ; Compiler - ; compiles a string from RAM to Flash - ;VE_DOSCOMMA: - ; .dw $ff04 - ; .db "(s",$2c,")" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOSCOMMA - XT_DOSCOMMA: -0003d7 3801 .dw DO_COLON - PFA_DOSCOMMA: -0003d8 075c .dw XT_COMMA -0003d9 38b1 .dw XT_DUP ; ( --addr len len) -0003da 3a04 .dw XT_2SLASH ; ( -- addr len len/2 -0003db 3eda .dw XT_TUCK ; ( -- addr len/2 len len/2 -0003dc 3a0b .dw XT_2STAR ; ( -- addr len/2 len len' -0003dd 3993 .dw XT_MINUS ; ( -- addr len/2 rem -0003de 38ff .dw XT_TO_R -0003df 3954 .dw XT_ZERO -0003e0 081b .dw XT_QDOCHECK -0003e1 3836 .dw XT_DOCONDBRANCH -0003e2 03ea .dw PFA_SCOMMA2 -0003e3 3a9b .dw XT_DODO - PFA_SCOMMA1: -0003e4 38b1 .dw XT_DUP ; ( -- addr addr ) -0003e5 3879 .dw XT_FETCH ; ( -- addr c1c2 ) -0003e6 075c .dw XT_COMMA ; ( -- addr ) -0003e7 3c90 .dw XT_CELLPLUS ; ( -- addr+cell ) -0003e8 3ac9 .dw XT_DOLOOP -0003e9 03e4 .dw PFA_SCOMMA1 - PFA_SCOMMA2: -0003ea 38f6 .dw XT_R_FROM -0003eb 3928 .dw XT_GREATERZERO -0003ec 3836 .dw XT_DOCONDBRANCH -0003ed 03f1 .dw PFA_SCOMMA3 -0003ee 38b1 .dw XT_DUP ; well, tricky -0003ef 3898 .dw XT_CFETCH -0003f0 075c .dw XT_COMMA - PFA_SCOMMA3: -0003f1 38d9 .dw XT_DROP ; ( -- ) -0003f2 3820 .dw XT_EXIT - .include "words/itype.asm" - - ; Tools - ; reads string from flash and prints it - VE_ITYPE: -0003f3 ff05 .dw $ff05 -0003f4 7469 -0003f5 7079 -0003f6 0065 .db "itype",0 -0003f7 03d0 .dw VE_HEAD - .set VE_HEAD = VE_ITYPE - XT_ITYPE: -0003f8 3801 .dw DO_COLON - PFA_ITYPE: -0003f9 38b1 .dw XT_DUP ; ( --addr len len) -0003fa 3a04 .dw XT_2SLASH ; ( -- addr len len/2 -0003fb 3eda .dw XT_TUCK ; ( -- addr len/2 len len/2 -0003fc 3a0b .dw XT_2STAR ; ( -- addr len/2 len len' -0003fd 3993 .dw XT_MINUS ; ( -- addr len/2 rem -0003fe 38ff .dw XT_TO_R -0003ff 3954 .dw XT_ZERO -000400 081b .dw XT_QDOCHECK -000401 3836 .dw XT_DOCONDBRANCH -000402 040c .dw PFA_ITYPE2 -000403 3a9b .dw XT_DODO - PFA_ITYPE1: -000404 38b1 .dw XT_DUP ; ( -- addr addr ) -000405 3bcb .dw XT_FETCHI ; ( -- addr c1c2 ) -000406 38b1 .dw XT_DUP -000407 0419 .dw XT_LOWEMIT -000408 0415 .dw XT_HIEMIT -000409 3a2f .dw XT_1PLUS ; ( -- addr+cell ) -00040a 3ac9 .dw XT_DOLOOP -00040b 0404 .dw PFA_ITYPE1 - PFA_ITYPE2: -00040c 38f6 .dw XT_R_FROM -00040d 3928 .dw XT_GREATERZERO -00040e 3836 .dw XT_DOCONDBRANCH -00040f 0413 .dw PFA_ITYPE3 -000410 38b1 .dw XT_DUP ; make sure the drop below has always something to do -000411 3bcb .dw XT_FETCHI -000412 0419 .dw XT_LOWEMIT - PFA_ITYPE3: -000413 38d9 .dw XT_DROP -000414 3820 .dw XT_EXIT - - ; ( w -- ) - ; R( -- ) - ; content of cell fetched on stack. - ;VE_HIEMIT: - ; .dw $ff06 - ; .db "hiemit" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_HIEMIT - XT_HIEMIT: -000415 3801 .dw DO_COLON - PFA_HIEMIT: -000416 3af9 .dw XT_BYTESWAP -000417 0419 .dw XT_LOWEMIT -000418 3820 .dw XT_EXIT - - ; ( w -- ) - ; R( -- ) - ; content of cell fetched on stack. - ;VE_LOWEMIT: - ; .dw $ff07 - ; .db "lowemit" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_LOWEMIT - XT_LOWEMIT: -000419 3801 .dw DO_COLON - PFA_LOWEMIT: -00041a 383d .dw XT_DOLITERAL -00041b 00ff .dw $00ff -00041c 3a13 .dw XT_AND -00041d 3ef2 .dw XT_EMIT -00041e 3820 .dw XT_EXIT - .include "words/icount.asm" - - ; Tools - ; get count information out of a counted string in flash - VE_ICOUNT: -00041f ff06 .dw $ff06 -000420 6369 -000421 756f -000422 746e .db "icount" -000423 03f3 .dw VE_HEAD - .set VE_HEAD = VE_ICOUNT - XT_ICOUNT: -000424 3801 .dw DO_COLON - PFA_ICOUNT: -000425 38b1 .dw XT_DUP -000426 3a2f .dw XT_1PLUS -000427 38c4 .dw XT_SWAP -000428 3bcb .dw XT_FETCHI -000429 3820 .dw XT_EXIT - .include "words/type.asm" - - ; Character IO - ; print a RAM based string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TYPE: -00042a ff04 .dw $ff04 -00042b 7974 -00042c 6570 .db "type" -00042d 041f .dw VE_HEAD - .set VE_HEAD = VE_TYPE - XT_TYPE: -00042e 3801 .dw DO_COLON - PFA_TYPE: - - .endif -00042f 3f99 .dw XT_BOUNDS -000430 081b .dw XT_QDOCHECK -000431 3836 .dw XT_DOCONDBRANCH -000432 0439 DEST(PFA_TYPE2) -000433 3a9b .dw XT_DODO - PFA_TYPE1: -000434 3aac .dw XT_I -000435 3898 .dw XT_CFETCH -000436 3ef2 .dw XT_EMIT -000437 3ac9 .dw XT_DOLOOP -000438 0434 DEST(PFA_TYPE1) - PFA_TYPE2: -000439 3820 .dw XT_EXIT - .include "words/tick.asm" - - ; Dictionary - ; search dictionary for name, return XT or throw an exception -13 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TICK: -00043a ff01 .dw $ff01 -00043b 0027 .db "'",0 -00043c 042a .dw VE_HEAD - .set VE_HEAD = VE_TICK - XT_TICK: -00043d 3801 .dw DO_COLON - PFA_TICK: - .endif -00043e 05b0 .dw XT_PARSENAME -00043f 05f3 .dw XT_FORTHRECOGNIZER -000440 05fe .dw XT_RECOGNIZE - ; a word is tickable unless DT:TOKEN is DT:NULL or - ; the interpret action is a NOOP -000441 38b1 .dw XT_DUP -000442 068b .dw XT_DT_NULL -000443 3fdf .dw XT_EQUAL -000444 38c4 .dw XT_SWAP -000445 3bcb .dw XT_FETCHI -000446 383d .dw XT_DOLITERAL -000447 019a .dw XT_NOOP -000448 3fdf .dw XT_EQUAL -000449 3a1c .dw XT_OR -00044a 3836 .dw XT_DOCONDBRANCH -00044b 044f DEST(PFA_TICK1) -00044c 383d .dw XT_DOLITERAL -00044d fff3 .dw -13 -00044e 3d86 .dw XT_THROW - PFA_TICK1: -00044f 38d9 .dw XT_DROP -000450 3820 .dw XT_EXIT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/cskip.asm" - - ; String - ; skips leading occurancies in string at addr1/n1 leaving addr2/n2 pointing to the 1st non-c character - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CSKIP: -000451 ff05 .dw $ff05 -000452 7363 -000453 696b -000454 0070 .db "cskip",0 -000455 043a .dw VE_HEAD - .set VE_HEAD = VE_CSKIP - XT_CSKIP: -000456 3801 .dw DO_COLON - PFA_CSKIP: - .endif -000457 38ff .dw XT_TO_R ; ( -- addr1 n1 ) - PFA_CSKIP1: -000458 38b1 .dw XT_DUP ; ( -- addr' n' n' ) -000459 3836 .dw XT_DOCONDBRANCH ; ( -- addr' n') -00045a 0465 DEST(PFA_CSKIP2) -00045b 38cf .dw XT_OVER ; ( -- addr' n' addr' ) -00045c 3898 .dw XT_CFETCH ; ( -- addr' n' c' ) -00045d 3908 .dw XT_R_FETCH ; ( -- addr' n' c' c ) -00045e 3fdf .dw XT_EQUAL ; ( -- addr' n' f ) -00045f 3836 .dw XT_DOCONDBRANCH ; ( -- addr' n') -000460 0465 DEST(PFA_CSKIP2) -000461 3fe6 .dw XT_ONE -000462 05a1 .dw XT_SLASHSTRING -000463 382f .dw XT_DOBRANCH -000464 0458 DEST(PFA_CSKIP1) - PFA_CSKIP2: -000465 38f6 .dw XT_R_FROM -000466 38d9 .dw XT_DROP ; ( -- addr2 n2) -000467 3820 .dw XT_EXIT - .include "words/cscan.asm" - - ; String - ; Scan string at addr1/n1 for the first occurance of c, leaving addr1/n2, char at n2 is first non-c character - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CSCAN: -000468 ff05 .dw $ff05 -000469 7363 -00046a 6163 -../../common\words/cscan.asm(12): warning: .cseg .db misalignment - padding zero byte -00046b 006e .db "cscan" -00046c 0451 .dw VE_HEAD - .set VE_HEAD = VE_CSCAN - XT_CSCAN: -00046d 3801 .dw DO_COLON - PFA_CSCAN: - .endif -00046e 38ff .dw XT_TO_R -00046f 38cf .dw XT_OVER - PFA_CSCAN1: -000470 38b1 .dw XT_DUP -000471 3898 .dw XT_CFETCH -000472 3908 .dw XT_R_FETCH -000473 3fdf .dw XT_EQUAL -000474 391a .dw XT_ZEROEQUAL -000475 3836 .dw XT_DOCONDBRANCH -000476 0482 DEST(PFA_CSCAN2) -000477 38c4 .dw XT_SWAP -000478 3a35 .dw XT_1MINUS -000479 38c4 .dw XT_SWAP -00047a 38cf .dw XT_OVER -00047b 3921 .dw XT_ZEROLESS ; not negative -00047c 391a .dw XT_ZEROEQUAL -00047d 3836 .dw XT_DOCONDBRANCH -00047e 0482 DEST(PFA_CSCAN2) -00047f 3a2f .dw XT_1PLUS -000480 382f .dw XT_DOBRANCH -000481 0470 DEST(PFA_CSCAN1) - PFA_CSCAN2: -000482 38f0 .dw XT_NIP -000483 38cf .dw XT_OVER -000484 3993 .dw XT_MINUS -000485 38f6 .dw XT_R_FROM -000486 38d9 .dw XT_DROP -000487 3820 .dw XT_EXIT - - ; : my-cscan ( addr len c -- addr len' ) - ; >r over ( -- addr len addr ) - ; begin - ; dup c@ r@ <> while - ; swap 1- swap over 0 >= while - ; 1+ - ; repeat then - ; nip over - r> drop - ; ; - .include "words/accept.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ACCEPT: -000488 ff06 .dw $ff06 -000489 6361 -00048a 6563 -00048b 7470 .db "accept" -00048c 0468 .dw VE_HEAD - .set VE_HEAD = VE_ACCEPT - XT_ACCEPT: -00048d 3801 .dw DO_COLON - PFA_ACCEPT: - - .endif -00048e 38cf -00048f 399d -000490 3a35 -000491 38cf .DW XT_OVER,XT_PLUS,XT_1MINUS,XT_OVER -000492 3f03 -000493 38b1 -000494 04ce -000495 391a -000496 3836 ACC1: .DW XT_KEY,XT_DUP,XT_CRLFQ,XT_ZEROEQUAL,XT_DOCONDBRANCH -000497 04c0 DEST(ACC5) -000498 38b1 -000499 383d -00049a 0008 -00049b 3fdf -00049c 3836 .DW XT_DUP,XT_DOLITERAL,8,XT_EQUAL,XT_DOCONDBRANCH -00049d 04b0 DEST(ACC3) -00049e 38d9 -00049f 38e1 -0004a0 3ec9 -0004a1 3978 -0004a2 38ff -0004a3 38e1 -0004a4 38e1 -0004a5 38f6 -0004a6 3836 .DW XT_DROP,XT_ROT,XT_2DUP,XT_GREATER,XT_TO_R,XT_ROT,XT_ROT,XT_R_FROM,XT_DOCONDBRANCH -0004a7 04ae DEST(ACC6) -0004a8 04c6 -0004a9 3a35 -0004aa 38ff -0004ab 38cf -0004ac 38f6 -0004ad 014f .DW XT_BS,XT_1MINUS,XT_TO_R,XT_OVER,XT_R_FROM,XT_UMAX -0004ae 382f ACC6: .DW XT_DOBRANCH -0004af 04be DEST(ACC4) - - - ACC3: ; check for remaining control characters, replace them with blank -0004b0 38b1 .dw XT_DUP ; ( -- addr k k ) -0004b1 3f54 .dw XT_BL -0004b2 396e .dw XT_LESS -0004b3 3836 .dw XT_DOCONDBRANCH -0004b4 04b7 DEST(PFA_ACCEPT6) -0004b5 38d9 .dw XT_DROP -0004b6 3f54 .dw XT_BL - PFA_ACCEPT6: -0004b7 38b1 -0004b8 3ef2 -0004b9 38cf -0004ba 388d -0004bb 3a2f -0004bc 38cf -0004bd 015b .DW XT_DUP,XT_EMIT,XT_OVER,XT_CSTORE,XT_1PLUS,XT_OVER,XT_UMIN -0004be 382f ACC4: .DW XT_DOBRANCH -0004bf 0492 DEST(ACC1) -0004c0 38d9 -0004c1 38f0 -0004c2 38c4 -0004c3 3993 -0004c4 3fa1 -0004c5 3820 ACC5: .DW XT_DROP,XT_NIP,XT_SWAP,XT_MINUS,XT_CR,XT_EXIT - - - ; ( -- ) - ; System - ; send a backspace character to overwrite the current char - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - ;VE_BS: - ; .dw $ff02 - ; .db "bs" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_BS - XT_BS: -0004c6 3801 .dw DO_COLON - .endif -0004c7 383d .dw XT_DOLITERAL -0004c8 0008 .dw 8 -0004c9 38b1 .dw XT_DUP -0004ca 3ef2 .dw XT_EMIT -0004cb 3fae .dw XT_SPACE -0004cc 3ef2 .dw XT_EMIT -0004cd 3820 .dw XT_EXIT - - - ; ( c -- f ) - ; System - ; is the character a line end character? - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_CRLFQ: - ; .dw $ff02 - ; .db "crlf?" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_CRLFQ - XT_CRLFQ: -0004ce 3801 .dw DO_COLON - .endif -0004cf 38b1 .dw XT_DUP -0004d0 383d .dw XT_DOLITERAL -0004d1 000d .dw 13 -0004d2 3fdf .dw XT_EQUAL -0004d3 38c4 .dw XT_SWAP -0004d4 383d .dw XT_DOLITERAL -0004d5 000a .dw 10 -0004d6 3fdf .dw XT_EQUAL -0004d7 3a1c .dw XT_OR -0004d8 3820 .dw XT_EXIT - .include "words/refill.asm" - - ; System - ; refills the input buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_REFILL: -0004d9 ff06 .dw $ff06 -0004da 6572 -0004db 6966 -0004dc 6c6c .db "refill" -0004dd 0488 .dw VE_HEAD - .set VE_HEAD = VE_REFILL - XT_REFILL: -0004de 3dff .dw PFA_DODEFER1 - PFA_REFILL: - .endif -0004df 001a .dw USER_REFILL -0004e0 3dc8 .dw XT_UDEFERFETCH -0004e1 3dd4 .dw XT_UDEFERSTORE - .include "words/char.asm" - - ; Tools - ; copy the first character of the next word onto the stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CHAR: -0004e2 ff04 .dw $ff04 -0004e3 6863 -0004e4 7261 .db "char" -0004e5 04d9 .dw VE_HEAD - .set VE_HEAD = VE_CHAR - XT_CHAR: -0004e6 3801 .dw DO_COLON - PFA_CHAR: - .endif -0004e7 05b0 .dw XT_PARSENAME -0004e8 38d9 .dw XT_DROP -0004e9 3898 .dw XT_CFETCH -0004ea 3820 .dw XT_EXIT - .include "words/number.asm" - - ; Numeric IO - ; convert a string at addr to a number - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NUMBER: -0004eb ff06 .dw $ff06 -0004ec 756e -0004ed 626d -0004ee 7265 .db "number" -0004ef 04e2 .dw VE_HEAD - .set VE_HEAD = VE_NUMBER - XT_NUMBER: -0004f0 3801 .dw DO_COLON - PFA_NUMBER: - .endif -0004f1 3ebd .dw XT_BASE -0004f2 3879 .dw XT_FETCH -0004f3 38ff .dw XT_TO_R -0004f4 0534 .dw XT_QSIGN -0004f5 38ff .dw XT_TO_R -0004f6 0547 .dw XT_SET_BASE -0004f7 0534 .dw XT_QSIGN -0004f8 38f6 .dw XT_R_FROM -0004f9 3a1c .dw XT_OR -0004fa 38ff .dw XT_TO_R - ; check whether something is left -0004fb 38b1 .dw XT_DUP -0004fc 391a .dw XT_ZEROEQUAL -0004fd 3836 .dw XT_DOCONDBRANCH -0004fe 0507 DEST(PFA_NUMBER0) - ; nothing is left. It cannot be a number at all -0004ff 3ed2 .dw XT_2DROP -000500 38f6 .dw XT_R_FROM -000501 38d9 .dw XT_DROP -000502 38f6 .dw XT_R_FROM -000503 3ebd .dw XT_BASE -000504 3881 .dw XT_STORE -000505 3954 .dw XT_ZERO -000506 3820 .dw XT_EXIT - PFA_NUMBER0: -000507 3b1e .dw XT_2TO_R -000508 3954 .dw XT_ZERO ; starting value -000509 3954 .dw XT_ZERO -00050a 3b2d .dw XT_2R_FROM -00050b 0565 .dw XT_TO_NUMBER ; ( 0. addr len -- d addr' len' - ; check length of the remaining string. - ; if zero: a single cell number is entered -00050c 38b9 .dw XT_QDUP -00050d 3836 .dw XT_DOCONDBRANCH -00050e 0529 DEST(PFA_NUMBER1) - ; if equal 1: mayba a trailing dot? --> double cell number -00050f 3fe6 .dw XT_ONE -000510 3fdf .dw XT_EQUAL -000511 3836 .dw XT_DOCONDBRANCH -000512 0520 DEST(PFA_NUMBER2) - ; excatly one character is left -000513 3898 .dw XT_CFETCH -000514 383d .dw XT_DOLITERAL -000515 002e .dw 46 ; . -000516 3fdf .dw XT_EQUAL -000517 3836 .dw XT_DOCONDBRANCH -000518 0521 DEST(PFA_NUMBER6) - ; its a double cell number - ; incorporate sign into number -000519 38f6 .dw XT_R_FROM -00051a 3836 .dw XT_DOCONDBRANCH -00051b 051d DEST(PFA_NUMBER3) -00051c 0228 .dw XT_DNEGATE - PFA_NUMBER3: -00051d 3feb .dw XT_TWO -00051e 382f .dw XT_DOBRANCH -00051f 052f DEST(PFA_NUMBER5) - PFA_NUMBER2: -000520 38d9 .dw XT_DROP - PFA_NUMBER6: -000521 3ed2 .dw XT_2DROP -000522 38f6 .dw XT_R_FROM -000523 38d9 .dw XT_DROP -000524 38f6 .dw XT_R_FROM -000525 3ebd .dw XT_BASE -000526 3881 .dw XT_STORE -000527 3954 .dw XT_ZERO -000528 3820 .dw XT_EXIT - PFA_NUMBER1: -000529 3ed2 .dw XT_2DROP ; remove the address - ; incorporate sign into number -00052a 38f6 .dw XT_R_FROM -00052b 3836 .dw XT_DOCONDBRANCH -00052c 052e DEST(PFA_NUMBER4) -00052d 3e27 .dw XT_NEGATE - PFA_NUMBER4: -00052e 3fe6 .dw XT_ONE - PFA_NUMBER5: -00052f 38f6 .dw XT_R_FROM -000530 3ebd .dw XT_BASE -000531 3881 .dw XT_STORE -000532 394b .dw XT_TRUE -000533 3820 .dw XT_EXIT - .include "words/q-sign.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_QSIGN: -000534 3801 .dw DO_COLON - PFA_QSIGN: ; ( c -- ) - .endif -000535 38cf .dw XT_OVER ; ( -- addr len addr ) -000536 3898 .dw XT_CFETCH -000537 383d .dw XT_DOLITERAL -000538 002d .dw '-' -000539 3fdf .dw XT_EQUAL ; ( -- addr len flag ) -00053a 38b1 .dw XT_DUP -00053b 38ff .dw XT_TO_R -00053c 3836 .dw XT_DOCONDBRANCH -00053d 0540 DEST(PFA_NUMBERSIGN_DONE) -00053e 3fe6 .dw XT_ONE ; skip sign character -00053f 05a1 .dw XT_SLASHSTRING - PFA_NUMBERSIGN_DONE: -000540 38f6 .dw XT_R_FROM -000541 3820 .dw XT_EXIT - .include "words/set-base.asm" - - ; Numeric IO - ; skip a numeric prefix character - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_BASES: -000542 3852 .dw PFA_DOCONSTANT - .endif -000543 000a -000544 0010 -000545 0002 -000546 000a .dw 10,16,2,10 ; last one could a 8 instead. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_SET_BASE: -000547 3801 .dw DO_COLON - PFA_SET_BASE: ; ( adr1 len1 -- adr2 len2 ) - .endif -000548 38cf .dw XT_OVER -000549 3898 .dw XT_CFETCH -00054a 383d .dw XT_DOLITERAL -00054b 0023 .dw 35 -00054c 3993 .dw XT_MINUS -00054d 38b1 .dw XT_DUP -00054e 3954 .dw XT_ZERO -00054f 383d .dw XT_DOLITERAL -000550 0004 .dw 4 -000551 3e57 .dw XT_WITHIN -000552 3836 .dw XT_DOCONDBRANCH -000553 055d DEST(SET_BASE1) - .if cpu_msp430==1 - .endif -000554 0542 .dw XT_BASES -000555 399d .dw XT_PLUS -000556 3bcb .dw XT_FETCHI -000557 3ebd .dw XT_BASE -000558 3881 .dw XT_STORE -000559 3fe6 .dw XT_ONE -00055a 05a1 .dw XT_SLASHSTRING -00055b 382f .dw XT_DOBRANCH -00055c 055e DEST(SET_BASE2) - SET_BASE1: -00055d 38d9 .dw XT_DROP - SET_BASE2: -00055e 3820 .dw XT_EXIT - - ; create bases 10 , 16 , 2 , 8 , - ; : set-base 35 - dup 0 4 within if - ; bases + @i base ! 1 /string - ; else - ; drop - ; then ; - .include "words/to-number.asm" - - ; Numeric IO - ; convert a string to a number c-addr2/u2 is the unconverted string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO_NUMBER: -00055f ff07 .dw $ff07 -000560 6e3e -000561 6d75 -000562 6562 -000563 0072 .db ">number",0 -000564 04eb .dw VE_HEAD - .set VE_HEAD = VE_TO_NUMBER - XT_TO_NUMBER: -000565 3801 .dw DO_COLON - - .endif - -000566 38b1 -000567 3836 TONUM1: .DW XT_DUP,XT_DOCONDBRANCH -000568 057d DEST(TONUM3) -000569 38cf -00056a 3898 -00056b 03ab .DW XT_OVER,XT_CFETCH,XT_DIGITQ -00056c 391a -00056d 3836 .DW XT_ZEROEQUAL,XT_DOCONDBRANCH -00056e 0571 DEST(TONUM2) -00056f 38d9 -000570 3820 .DW XT_DROP,XT_EXIT -000571 38ff -000572 024c -000573 3ebd -000574 3879 -000575 0140 TONUM2: .DW XT_TO_R,XT_2SWAP,XT_BASE,XT_FETCH,XT_UDSTAR -000576 38f6 -000577 0138 -000578 024c .DW XT_R_FROM,XT_MPLUS,XT_2SWAP -000579 3fe6 -00057a 05a1 -00057b 382f .DW XT_ONE,XT_SLASHSTRING,XT_DOBRANCH -00057c 0566 DEST(TONUM1) -00057d 3820 TONUM3: .DW XT_EXIT - - ;C >NUMBER ud adr u -- ud' adr' u' - ;C convert string to number - ; BEGIN - ; DUP WHILE - ; OVER C@ DIGIT? - ; 0= IF DROP EXIT THEN - ; >R 2SWAP BASE @ UD* - ; R> M+ 2SWAP - ; 1 /STRING - ; REPEAT ; - .include "words/parse.asm" - - ; String - ; in input buffer parse ccc delimited string by the delimiter char. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PARSE: -00057e ff05 .dw $ff05 -00057f 6170 -000580 7372 -000581 0065 .db "parse",0 -000582 055f .dw VE_HEAD - .set VE_HEAD = VE_PARSE - XT_PARSE: -000583 3801 .dw DO_COLON - PFA_PARSE: - .endif -000584 38ff .dw XT_TO_R ; ( -- ) -000585 0597 .dw XT_SOURCE ; ( -- addr len) -000586 3ee2 .dw XT_TO_IN ; ( -- addr len >in) -000587 3879 .dw XT_FETCH -000588 05a1 .dw XT_SLASHSTRING ; ( -- addr' len' ) - -000589 38f6 .dw XT_R_FROM ; ( -- addr' len' c) -00058a 046d .dw XT_CSCAN ; ( -- addr' len'') -00058b 38b1 .dw XT_DUP ; ( -- addr' len'' len'') -00058c 3a2f .dw XT_1PLUS -00058d 3ee2 .dw XT_TO_IN ; ( -- addr' len'' len'' >in) -00058e 3a65 .dw XT_PLUSSTORE ; ( -- addr' len') -00058f 3fe6 .dw XT_ONE -000590 05a1 .dw XT_SLASHSTRING -000591 3820 .dw XT_EXIT - .include "words/source.asm" - - ; System - ; address and current length of the input buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SOURCE: -000592 ff06 .dw $FF06 -000593 6f73 -000594 7275 -000595 6563 .db "source" -000596 057e .dw VE_HEAD - .set VE_HEAD = VE_SOURCE - XT_SOURCE: -000597 3dff .dw PFA_DODEFER1 - PFA_SOURCE: - .endif -000598 0016 .dw USER_SOURCE -000599 3dc8 .dw XT_UDEFERFETCH -00059a 3dd4 .dw XT_UDEFERSTORE - - - .include "words/slash-string.asm" - - ; String - ; adjust string from addr1 to addr1+n, reduce length from u1 to u2 by n - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SLASHSTRING: -00059b ff07 .dw $ff07 -00059c 732f -00059d 7274 -00059e 6e69 -00059f 0067 .db "/string",0 -0005a0 0592 .dw VE_HEAD - .set VE_HEAD = VE_SLASHSTRING - XT_SLASHSTRING: -0005a1 3801 .dw DO_COLON - PFA_SLASHSTRING: - .endif -0005a2 38e1 .dw XT_ROT -0005a3 38cf .dw XT_OVER -0005a4 399d .dw XT_PLUS -0005a5 38e1 .dw XT_ROT -0005a6 38e1 .dw XT_ROT -0005a7 3993 .dw XT_MINUS -0005a8 3820 .dw XT_EXIT - - .include "words/parse-name.asm" - - ; String - ; In the SOURCE buffer parse whitespace delimited string. Returns string address within SOURCE. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_PARSENAME: -0005a9 ff0a .dw $FF0A -0005aa 6170 -0005ab 7372 -0005ac 2d65 -0005ad 616e -0005ae 656d .db "parse-name" -0005af 059b .dw VE_HEAD - .set VE_HEAD = VE_PARSENAME - XT_PARSENAME: -0005b0 3801 .dw DO_COLON - PFA_PARSENAME: - .endif -0005b1 3f54 .dw XT_BL -0005b2 05b4 .dw XT_SKIPSCANCHAR -0005b3 3820 .dw XT_EXIT - - ; ( c -- addr2 len2 ) - ; String - ; skips char and scan what's left in source for char - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_SKIPSCANCHAR: - ; .dw $FF0A - ; .db "skipscanchar" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_SKIPSCANCHAR - XT_SKIPSCANCHAR: -0005b4 3801 .dw DO_COLON - PFA_SKIPSCANCHAR: - .endif -0005b5 38ff .dw XT_TO_R -0005b6 0597 .dw XT_SOURCE -0005b7 3ee2 .dw XT_TO_IN -0005b8 3879 .dw XT_FETCH -0005b9 05a1 .dw XT_SLASHSTRING - -0005ba 3908 .dw XT_R_FETCH -0005bb 0456 .dw XT_CSKIP -0005bc 38f6 .dw XT_R_FROM -0005bd 046d .dw XT_CSCAN - - ; adjust >IN -0005be 3ec9 .dw XT_2DUP -0005bf 399d .dw XT_PLUS -0005c0 0597 .dw XT_SOURCE -0005c1 38d9 .dw XT_DROP -0005c2 3993 .dw XT_MINUS -0005c3 3ee2 .dw XT_TO_IN -0005c4 3881 .dw XT_STORE -0005c5 3820 .dw XT_EXIT - .include "words/sp0.asm" - - ; Stack - ; start address of the data stack - VE_SP0: -0005c6 ff03 .dw $ff03 -0005c7 7073 -0005c8 0030 .db "sp0",0 -0005c9 05a9 .dw VE_HEAD - .set VE_HEAD = VE_SP0 - XT_SP0: -0005ca 386f .dw PFA_DOVALUE1 - PFA_SP0: -0005cb 0006 .dw USER_SP0 -0005cc 3dc8 .dw XT_UDEFERFETCH -0005cd 3dd4 .dw XT_UDEFERSTORE - - ; ( -- addr) - ; Stack - ; address of user variable to store top-of-stack for inactive tasks - VE_SP: -0005ce ff02 .dw $ff02 -0005cf 7073 .db "sp" -0005d0 05c6 .dw VE_HEAD - .set VE_HEAD = VE_SP - XT_SP: -0005d1 3858 .dw PFA_DOUSER - PFA_SP: -0005d2 0008 .dw USER_SP - .include "words/rp0.asm" - - ; Stack - ; start address of return stack - VE_RP0: -0005d3 ff03 .dw $ff03 -0005d4 7072 -0005d5 0030 .db "rp0",0 -0005d6 05ce .dw VE_HEAD - .set VE_HEAD = VE_RP0 - XT_RP0: -0005d7 3801 .dw DO_COLON - PFA_RP0: -0005d8 05db .dw XT_DORP0 -0005d9 3879 .dw XT_FETCH -0005da 3820 .dw XT_EXIT - - ; ( -- addr) - ; Stack - ; user variable of the address of the initial return stack - ;VE_DORP0: - ; .dw $ff05 - ; .db "(rp0)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DORP0 - XT_DORP0: -0005db 3858 .dw PFA_DOUSER - PFA_DORP0: -0005dc 0004 .dw USER_RP - .include "words/depth.asm" - - ; Stack - ; number of single-cell values contained in the data stack before n was placed on the stack. - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DEPTH: -0005dd ff05 .dw $ff05 -0005de 6564 -0005df 7470 -0005e0 0068 .db "depth",0 -0005e1 05d3 .dw VE_HEAD - .set VE_HEAD = VE_DEPTH - XT_DEPTH: -0005e2 3801 .dw DO_COLON - PFA_DEPTH: - .endif -0005e3 05ca .dw XT_SP0 -0005e4 3a8d .dw XT_SP_FETCH -0005e5 3993 .dw XT_MINUS -0005e6 3a04 .dw XT_2SLASH -0005e7 3a35 .dw XT_1MINUS -0005e8 3820 .dw XT_EXIT - .include "words/forth-recognizer.asm" - - ; System Value - ; address of the next free data space (RAM) cell - VE_FORTHRECOGNIZER: -0005e9 ff10 .dw $ff10 -0005ea 6f66 -0005eb 7472 -0005ec 2d68 -0005ed 6572 -0005ee 6f63 -0005ef 6e67 -0005f0 7a69 -0005f1 7265 .db "forth-recognizer" -0005f2 05dd .dw VE_HEAD - .set VE_HEAD = VE_FORTHRECOGNIZER - XT_FORTHRECOGNIZER: -0005f3 386f .dw PFA_DOVALUE1 - PFA_FORTHRECOGNIZER: -0005f4 0034 .dw CFG_FORTHRECOGNIZER -0005f5 3da0 .dw XT_EDEFERFETCH -0005f6 3daa .dw XT_EDEFERSTORE - .include "words/recognize.asm" - - ; System - ; walk the recognizer stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RECOGNIZE: -0005f7 ff09 .dw $ff09 -0005f8 6572 -0005f9 6f63 -0005fa 6e67 -0005fb 7a69 -0005fc 0065 .db "recognize",0 -0005fd 05e9 .dw VE_HEAD - .set VE_HEAD = VE_RECOGNIZE - XT_RECOGNIZE: -0005fe 3801 .dw DO_COLON - PFA_RECOGNIZE: - .endif -0005ff 383d .dw XT_DOLITERAL -000600 0609 .dw XT_RECOGNIZE_A -000601 38c4 .dw XT_SWAP -000602 099c .dw XT_MAPSTACK -000603 391a .dw XT_ZEROEQUAL -000604 3836 .dw XT_DOCONDBRANCH -000605 0608 DEST(PFA_RECOGNIZE1) -000606 3ed2 .dw XT_2DROP -000607 068b .dw XT_DT_NULL - PFA_RECOGNIZE1: -000608 3820 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ; ( addr len XT -- addr len [ dt:xt -1 | 0 ] ) - XT_RECOGNIZE_A: -000609 3801 .dw DO_COLON - PFA_RECOGNIZE_A: - .endif -00060a 38e1 .dw XT_ROT ; -- len xt addr -00060b 38e1 .dw XT_ROT ; -- xt addr len -00060c 3ec9 .dw XT_2DUP -00060d 3b1e .dw XT_2TO_R -00060e 38e1 .dw XT_ROT ; -- addr len xt -00060f 382a .dw XT_EXECUTE ; -- i*x dt:* | dt:null -000610 3b2d .dw XT_2R_FROM -000611 38e1 .dw XT_ROT -000612 38b1 .dw XT_DUP -000613 068b .dw XT_DT_NULL -000614 3fdf .dw XT_EQUAL -000615 3836 .dw XT_DOCONDBRANCH -000616 061a DEST(PFA_RECOGNIZE_A1) -000617 38d9 .dw XT_DROP -000618 3954 .dw XT_ZERO -000619 3820 .dw XT_EXIT - PFA_RECOGNIZE_A1: -00061a 38f0 .dw XT_NIP -00061b 38f0 .dw XT_NIP -00061c 394b .dw XT_TRUE -00061d 3820 .dw XT_EXIT - - ; : recognize ( addr len stack-id -- i*x dt:* | dt:null ) - ; [: ( addr len -- addr len 0 | i*x dt:* -1 ) - ; rot rot 2dup 2>r rot execute 2r> rot - ; dup dt:null = ( -- addr len dt:* f ) - ; if drop 0 else nip nip -1 then - ; ;] - ; map-stack ( -- i*x addr len dt:* f ) - ; 0= if \ a recognizer did the job, remove addr/len - ; 2drop dt:null - ; then ; - ; - .include "words/interpret.asm" - - ; System - ; Interpret SOURCE word by word. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_INTERPRET: -00061e ff09 .dw $ff09 -00061f 6e69 -000620 6574 -000621 7072 -000622 6572 -000623 0074 .db "interpret",0 -000624 05f7 .dw VE_HEAD - .set VE_HEAD = VE_INTERPRET - XT_INTERPRET: -000625 3801 .dw DO_COLON - .endif - PFA_INTERPRET: -000626 05b0 .dw XT_PARSENAME ; ( -- addr len ) -000627 38b1 .dw XT_DUP ; ( -- addr len flag) -000628 3836 .dw XT_DOCONDBRANCH -000629 0636 DEST(PFA_INTERPRET2) -00062a 05f3 .dw XT_FORTHRECOGNIZER -00062b 05fe .dw XT_RECOGNIZE -00062c 3eb7 .dw XT_STATE -00062d 3879 .dw XT_FETCH -00062e 3836 .dw XT_DOCONDBRANCH -00062f 0631 DEST(PFA_INTERPRET1) -000630 01c6 .dw XT_ICELLPLUS ; we need the compile action - PFA_INTERPRET1: -000631 3bcb .dw XT_FETCHI -000632 382a .dw XT_EXECUTE -000633 3f8b .dw XT_QSTACK -000634 382f .dw XT_DOBRANCH -000635 0626 DEST(PFA_INTERPRET) - PFA_INTERPRET2: -000636 3ed2 .dw XT_2DROP -000637 3820 .dw XT_EXIT - .include "words/rec-intnum.asm" - - ; Interpreter - ; Method table for single cell integers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_NUM: -000638 ff06 .dw $ff06 -000639 7464 -00063a 6e3a -00063b 6d75 .db "dt:num" -00063c 061e .dw VE_HEAD - .set VE_HEAD = VE_DT_NUM - XT_DT_NUM: -00063d 3852 .dw PFA_DOCONSTANT - PFA_DT_NUM: - .endif -00063e 019a .dw XT_NOOP ; interpret -00063f 0772 .dw XT_LITERAL ; compile -000640 0772 .dw XT_LITERAL ; postpone - - ; ( -- addr ) - ; Interpreter - ; Method table for double cell integers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_DNUM: -000641 ff07 .dw $ff07 -000642 7464 -000643 643a -000644 756e -000645 006d .db "dt:dnum",0 -000646 0638 .dw VE_HEAD - .set VE_HEAD = VE_DT_DNUM - XT_DT_DNUM: -000647 3852 .dw PFA_DOCONSTANT - PFA_DT_DNUM: - .endif -000648 019a .dw XT_NOOP ; interpret -000649 3fd7 .dw XT_2LITERAL ; compile -00064a 3fd7 .dw XT_2LITERAL ; postpone - - ; ( addr len -- f ) - ; Interpreter - ; recognizer for integer numbers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_REC_NUM: -00064b ff07 .dw $ff07 -00064c 6572 -00064d 3a63 -00064e 756e -00064f 006d .db "rec:num",0 -000650 0641 .dw VE_HEAD - .set VE_HEAD = VE_REC_NUM - XT_REC_NUM: -000651 3801 .dw DO_COLON - PFA_REC_NUM: - .endif - ; try converting to a number -000652 04f0 .dw XT_NUMBER -000653 3836 .dw XT_DOCONDBRANCH -000654 065d DEST(PFA_REC_NONUMBER) -000655 3fe6 .dw XT_ONE -000656 3fdf .dw XT_EQUAL -000657 3836 .dw XT_DOCONDBRANCH -000658 065b DEST(PFA_REC_INTNUM2) -000659 063d .dw XT_DT_NUM -00065a 3820 .dw XT_EXIT - PFA_REC_INTNUM2: -00065b 0647 .dw XT_DT_DNUM -00065c 3820 .dw XT_EXIT - PFA_REC_NONUMBER: -00065d 068b .dw XT_DT_NULL -00065e 3820 .dw XT_EXIT - .include "words/rec-find.asm" - - ; Interpreter - ; search for a word - .if cpu_msp430==1 - .endif - .if cpu_avr8==1 - VE_REC_FIND: -00065f ff08 .dw $ff08 -000660 6572 -000661 3a63 -000662 6966 -000663 646e .db "rec:find" -000664 064b .dw VE_HEAD - .set VE_HEAD = VE_REC_FIND - XT_REC_FIND: -000665 3801 .dw DO_COLON - PFA_REC_FIND: - .endif -000666 0700 .DW XT_FINDXT -000667 38b1 .dw XT_DUP -000668 391a .dw XT_ZEROEQUAL -000669 3836 .dw XT_DOCONDBRANCH -00066a 066e DEST(PFA_REC_WORD_FOUND) -00066b 38d9 .dw XT_DROP -00066c 068b .dw XT_DT_NULL -00066d 3820 .dw XT_EXIT - PFA_REC_WORD_FOUND: -00066e 0675 .dw XT_DT_XT - -00066f 3820 .dw XT_EXIT - - ; ( -- addr ) - ; Interpreter - ; actions to handle execution tokens and their flags - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_XT: -000670 ff05 .dw $ff05 -000671 7464 -000672 783a -000673 0074 .db "dt:xt",0 -000674 065f .dw VE_HEAD - .set VE_HEAD = VE_DT_XT - XT_DT_XT: -000675 3852 .dw PFA_DOCONSTANT - PFA_DT_XT: - .endif -000676 0679 .dw XT_R_WORD_INTERPRET -000677 067d .dw XT_R_WORD_COMPILE -000678 3fd7 .dw XT_2LITERAL - - ; ( XT flags -- ) - ; Interpreter - ; interpret method for WORD recognizer - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_R_WORD_INTERPRET: -000679 3801 .dw DO_COLON - PFA_R_WORD_INTERPRET: - .endif -00067a 38d9 .dw XT_DROP ; the flags are in the way -00067b 382a .dw XT_EXECUTE -00067c 3820 .dw XT_EXIT - - ; ( XT flags -- ) - ; Interpreter - ; Compile method for WORD recognizer - .if cpu_msp430==1 - .endif - .if cpu_avr8==1 - XT_R_WORD_COMPILE: -00067d 3801 .dw DO_COLON - PFA_R_WORD_COMPILE: - .endif -00067e 3921 .dw XT_ZEROLESS -00067f 3836 .dw XT_DOCONDBRANCH -000680 0683 DEST(PFA_R_WORD_COMPILE1) -000681 075c .dw XT_COMMA -000682 3820 .dw XT_EXIT - PFA_R_WORD_COMPILE1: -000683 382a .dw XT_EXECUTE -000684 3820 .dw XT_EXIT - .include "words/dt-null.asm" - - ; Interpreter - ; there is no parser for this recognizer, this is the default and failsafe part - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_NULL: -000685 ff07 .dw $ff07 -000686 7464 -000687 6e3a -000688 6c75 -../../common\words/dt-null.asm(12): warning: .cseg .db misalignment - padding zero byte -000689 006c .db "dt:null" -00068a 0670 .dw VE_HEAD - .set VE_HEAD = VE_DT_NULL - XT_DT_NULL: -00068b 3852 .dw PFA_DOCONSTANT - PFA_DT_NULL: - .endif -00068c 068f .dw XT_FAIL ; interpret -00068d 068f .dw XT_FAIL ; compile -00068e 068f .dw XT_FAIL ; postpone - - ; ( addr len -- ) - ; Interpreter - ; default failure action: throw exception -13. - .if cpu_msp430==1 - .endif - .if cpu_avr8==1 - ;VE_FAIL: - ; .dw $ff04 - ; .db "fail" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_FAIL - XT_FAIL: -00068f 3801 .dw DO_COLON - PFA_FAIL: - .endif -000690 383d .dw XT_DOLITERAL -000691 fff3 .dw -13 -000692 3d86 .dw XT_THROW - .include "words/search-wordlist.asm" - - ; Search Order - ; searches the word list wid for the word at c-addr/len - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SEARCH_WORDLIST: -000693 ff0f .dw $ff0f -000694 6573 -000695 7261 -000696 6863 -000697 772d -000698 726f -000699 6c64 -00069a 7369 -00069b 0074 .db "search-wordlist",0 -00069c 0685 .dw VE_HEAD - .set VE_HEAD = VE_SEARCH_WORDLIST - XT_SEARCH_WORDLIST: -00069d 3801 .dw DO_COLON - PFA_SEARCH_WORDLIST: - .endif -00069e 38ff .dw XT_TO_R -00069f 3954 .dw XT_ZERO -0006a0 383d .dw XT_DOLITERAL -0006a1 06b2 .dw XT_ISWORD -0006a2 38f6 .dw XT_R_FROM -0006a3 06cf .dw XT_TRAVERSEWORDLIST -0006a4 38b1 .dw XT_DUP -0006a5 391a .dw XT_ZEROEQUAL -0006a6 3836 .dw XT_DOCONDBRANCH -0006a7 06ac DEST(PFA_SEARCH_WORDLIST1) -0006a8 3ed2 .dw XT_2DROP -0006a9 38d9 .dw XT_DROP -0006aa 3954 .dw XT_ZERO -0006ab 3820 .dw XT_EXIT - PFA_SEARCH_WORDLIST1: - ; ... get the XT ... -0006ac 38b1 .dw XT_DUP -0006ad 06f6 .dw XT_NFA2CFA - ; .. and get the header flag -0006ae 38c4 .dw XT_SWAP -0006af 0175 .dw XT_NAME2FLAGS -0006b0 0163 .dw XT_IMMEDIATEQ -0006b1 3820 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_ISWORD: -0006b2 3801 .dw DO_COLON - PFA_ISWORD: - .endif - ; ( c-addr len 0 nt -- c-addr len 0 true| nt false ) -0006b3 38ff .dw XT_TO_R -0006b4 38d9 .dw XT_DROP -0006b5 3ec9 .dw XT_2DUP -0006b6 3908 .dw XT_R_FETCH ; -- addr len addr len nt -0006b7 06ea .dw XT_NAME2STRING -0006b8 01cf .dw XT_ICOMPARE ; (-- addr len f ) -0006b9 3836 .dw XT_DOCONDBRANCH -0006ba 06c0 DEST(PFA_ISWORD3) - ; not now -0006bb 38f6 .dw XT_R_FROM -0006bc 38d9 .dw XT_DROP -0006bd 3954 .dw XT_ZERO -0006be 394b .dw XT_TRUE ; maybe next word -0006bf 3820 .dw XT_EXIT - PFA_ISWORD3: - ; we found the word, now clean up iteration data ... -0006c0 3ed2 .dw XT_2DROP -0006c1 38f6 .dw XT_R_FROM -0006c2 3954 .dw XT_ZERO ; finish traverse-wordlist -0006c3 3820 .dw XT_EXIT - .include "words/traverse-wordlist.asm" - - ; Tools Ext (2012) - ; call the xt for every member of the wordlist wid until xt returns false - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TRAVERSEWORDLIST: -0006c4 ff11 .dw $ff11 -0006c5 7274 -0006c6 7661 -0006c7 7265 -0006c8 6573 -0006c9 772d -0006ca 726f -0006cb 6c64 -0006cc 7369 -0006cd 0074 .db "traverse-wordlist",0 -0006ce 0693 .dw VE_HEAD - .set VE_HEAD = VE_TRAVERSEWORDLIST - XT_TRAVERSEWORDLIST: -0006cf 3801 .dw DO_COLON - PFA_TRAVERSEWORDLIST: - - .endif -0006d0 3b5f .dw XT_FETCHE - PFA_TRAVERSEWORDLIST1: -0006d1 38b1 .dw XT_DUP ; ( -- xt nt nt ) -0006d2 3836 .dw XT_DOCONDBRANCH ; ( -- nt ) is nfa = counted string -0006d3 06e0 DEST(PFA_TRAVERSEWORDLIST2) -0006d4 3ec9 .dw XT_2DUP -0006d5 3b1e .dw XT_2TO_R -0006d6 38c4 .dw XT_SWAP -0006d7 382a .dw XT_EXECUTE -0006d8 3b2d .dw XT_2R_FROM -0006d9 38e1 .dw XT_ROT -0006da 3836 .dw XT_DOCONDBRANCH -0006db 06e0 DEST(PFA_TRAVERSEWORDLIST2) -0006dc 0a0b .dw XT_NFA2LFA -0006dd 3bcb .dw XT_FETCHI -0006de 382f .dw XT_DOBRANCH ; ( -- addr ) -0006df 06d1 DEST(PFA_TRAVERSEWORDLIST1) ; ( -- addr ) - PFA_TRAVERSEWORDLIST2: -0006e0 3ed2 .dw XT_2DROP -0006e1 3820 .dw XT_EXIT - - ; : traverse-wordlist ( i*x xt wid -- i*x' ) - ; begin @ dup - ; while - ; 2dup 2>r - ; swap execute ( i*x nt -- i*x' f ) - ; 2r> rot - ; while - ; nfa>lfa @i - ; repeat then 2drop ; - .include "words/name2string.asm" - - ; Tools Ext (2012) - ; get a (flash) string from a name token nt - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NAME2STRING: -0006e2 ff0b .dw $ff0b -0006e3 616e -0006e4 656d -0006e5 733e -0006e6 7274 -0006e7 6e69 -0006e8 0067 .db "name>string",0 -0006e9 06c4 .dw VE_HEAD - .set VE_HEAD = VE_NAME2STRING - XT_NAME2STRING: -0006ea 3801 .dw DO_COLON - PFA_NAME2STRING: - - .endif -0006eb 0424 .dw XT_ICOUNT ; ( -- addr n ) -0006ec 383d .dw XT_DOLITERAL -0006ed 00ff .dw 255 -0006ee 3a13 .dw XT_AND ; mask immediate bit -0006ef 3820 .dw XT_EXIT - .include "words/nfa2cfa.asm" - - ; Tools - ; get the XT from a name token - VE_NFA2CFA: -0006f0 ff07 .dw $ff07 -0006f1 666e -0006f2 3e61 -0006f3 6663 -../../avr8\words/nfa2cfa.asm(6): warning: .cseg .db misalignment - padding zero byte -0006f4 0061 .db "nfa>cfa" -0006f5 06e2 .dw VE_HEAD - .set VE_HEAD = VE_NFA2CFA - XT_NFA2CFA: -0006f6 3801 .dw DO_COLON - PFA_NFA2CFA: -0006f7 0a0b .dw XT_NFA2LFA ; skip to link field -0006f8 3a2f .dw XT_1PLUS ; next is the execution token -0006f9 3820 .dw XT_EXIT - .include "words/find-xt.asm" - - ; Tools - ; search wordlists for an entry with the xt from c-addr/len - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_FINDXT: -0006fa ff07 .dw $ff07 -0006fb 6966 -0006fc 646e -0006fd 782d -0006fe 0074 .db "find-xt",0 -0006ff 06f0 .dw VE_HEAD - .set VE_HEAD = VE_FINDXT - XT_FINDXT: -000700 3801 .dw DO_COLON - PFA_FINDXT: - .endif -000701 383d .dw XT_DOLITERAL -000702 070c .dw XT_FINDXTA -000703 383d .dw XT_DOLITERAL -000704 0040 .dw CFG_ORDERLISTLEN -000705 099c .dw XT_MAPSTACK -000706 391a .dw XT_ZEROEQUAL -000707 3836 .dw XT_DOCONDBRANCH -000708 070b DEST(PFA_FINDXT1) -000709 3ed2 .dw XT_2DROP -00070a 3954 .dw XT_ZERO - PFA_FINDXT1: -00070b 3820 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - XT_FINDXTA: -00070c 3801 .dw DO_COLON - PFA_FINDXTA: - .endif -00070d 38ff .dw XT_TO_R -00070e 3ec9 .dw XT_2DUP -00070f 38f6 .dw XT_R_FROM -000710 069d .dw XT_SEARCH_WORDLIST -000711 38b1 .dw XT_DUP -000712 3836 .dw XT_DOCONDBRANCH -000713 0719 DEST(PFA_FINDXTA1) -000714 38ff .dw XT_TO_R -000715 38f0 .dw XT_NIP -000716 38f0 .dw XT_NIP -000717 38f6 .dw XT_R_FROM -000718 394b .dw XT_TRUE - PFA_FINDXTA1: -000719 3820 .dw XT_EXIT - - .include "dict/compiler1.inc" - - .include "words/newest.asm" - - ; System Variable - ; system state - VE_NEWEST: -00071a ff06 .dw $ff06 -00071b 656e -00071c 6577 -00071d 7473 .db "newest" -00071e 06fa .dw VE_HEAD - .set VE_HEAD = VE_NEWEST - XT_NEWEST: -00071f 3848 .dw PFA_DOVARIABLE - PFA_NEWEST: -000720 00e5 .dw ram_newest - - .dseg -0000e5 ram_newest: .byte 4 - .include "words/latest.asm" - - ; System Variable - ; system state - VE_LATEST: -000721 ff06 .dw $ff06 -000722 616c -000723 6574 -000724 7473 .db "latest" -000725 071a .dw VE_HEAD - .set VE_HEAD = VE_LATEST - XT_LATEST: -000726 3848 .dw PFA_DOVARIABLE - PFA_LATEST: -000727 00e9 .dw ram_latest - - .dseg -0000e9 ram_latest: .byte 2 - .include "words/do-create.asm" - - ; Compiler - ; parse the input and create an empty vocabulary entry without XT and data field (PF) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOCREATE: -000728 ff08 .dw $ff08 -000729 6328 -00072a 6572 -00072b 7461 -00072c 2965 .db "(create)" -00072d 0721 .dw VE_HEAD - .set VE_HEAD = VE_DOCREATE - XT_DOCREATE: -00072e 3801 .dw DO_COLON - PFA_DOCREATE: - .endif -00072f 05b0 -000730 0885 .DW XT_PARSENAME,XT_WLSCOPE ; ( -- addr len wid) -000731 38b1 -000732 071f -000733 3c90 -000734 3881 .DW XT_DUP,XT_NEWEST,XT_CELLPLUS,XT_STORE ; save the wid -000735 086a -000736 071f -000737 3881 .DW XT_HEADER,XT_NEWEST,XT_STORE ; save the nt -000738 3820 .DW XT_EXIT - .include "words/backslash.asm" - - ; Compiler - ; everything up to the end of the current line is a comment - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BACKSLASH: -000739 0001 .dw $0001 -00073a 005c .db $5c,0 -00073b 0728 .dw VE_HEAD - .set VE_HEAD = VE_BACKSLASH - XT_BACKSLASH: -00073c 3801 .dw DO_COLON - PFA_BACKSLASH: - .endif -00073d 0597 .dw XT_SOURCE -00073e 38f0 .dw XT_NIP -00073f 3ee2 .dw XT_TO_IN -000740 3881 .dw XT_STORE -000741 3820 .dw XT_EXIT - .include "words/l-paren.asm" - - ; Compiler - ; skip everything up to the closing bracket on the same line - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_LPAREN: -000742 0001 .dw $0001 -000743 0028 .db "(" ,0 -000744 0739 .dw VE_HEAD - .set VE_HEAD = VE_LPAREN - XT_LPAREN: -000745 3801 .dw DO_COLON - PFA_LPAREN: - .endif -000746 383d .dw XT_DOLITERAL -000747 0029 .dw ')' -000748 0583 .dw XT_PARSE -000749 3ed2 .dw XT_2DROP -00074a 3820 .dw XT_EXIT - - .include "words/compile.asm" - - ; Dictionary - ; read the following cell from the dictionary and append it to the current dictionary position. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_COMPILE: -00074b ff07 .dw $ff07 -00074c 6f63 -00074d 706d -00074e 6c69 -00074f 0065 .db "compile",0 -000750 0742 .dw VE_HEAD - .set VE_HEAD = VE_COMPILE - XT_COMPILE: -000751 3801 .dw DO_COLON - PFA_COMPILE: - .endif -000752 38f6 .dw XT_R_FROM -000753 38b1 .dw XT_DUP -000754 01c6 .dw XT_ICELLPLUS -000755 38ff .dw XT_TO_R -000756 3bcb .dw XT_FETCHI -000757 075c .dw XT_COMMA -000758 3820 .dw XT_EXIT - .include "words/comma.asm" - - ; Dictionary - ; compile 16 bit into flash at DP - VE_COMMA: -000759 ff01 .dw $ff01 -00075a 002c .db ',',0 ; , -00075b 074b .dw VE_HEAD - .set VE_HEAD = VE_COMMA - XT_COMMA: -00075c 3801 .dw DO_COLON - PFA_COMMA: -00075d 3f12 .dw XT_DP -00075e 3b73 .dw XT_STOREI -00075f 3f12 .dw XT_DP -000760 3a2f .dw XT_1PLUS -000761 01b4 .dw XT_DOTO -000762 3f13 .dw PFA_DP -000763 3820 .dw XT_EXIT - .include "words/brackettick.asm" - - ; Compiler - ; what ' does in the interpreter mode, do in colon definitions - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BRACKETTICK: -000764 0003 .dw $0003 -000765 275b -000766 005d .db "[']",0 -000767 0759 .dw VE_HEAD - .set VE_HEAD = VE_BRACKETTICK - XT_BRACKETTICK: -000768 3801 .dw DO_COLON - PFA_BRACKETTICK: - .endif -000769 043d .dw XT_TICK -00076a 0772 .dw XT_LITERAL -00076b 3820 .dw XT_EXIT - - - .include "words/literal.asm" - - ; Compiler - ; compile a literal in colon defintions - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_LITERAL: -00076c 0007 .dw $0007 -00076d 696c -00076e 6574 -00076f 6172 -000770 006c .db "literal",0 -000771 0764 .dw VE_HEAD - .set VE_HEAD = VE_LITERAL - XT_LITERAL: -000772 3801 .dw DO_COLON - PFA_LITERAL: - .endif -000773 0751 .DW XT_COMPILE -000774 383d .DW XT_DOLITERAL -000775 075c .DW XT_COMMA -000776 3820 .DW XT_EXIT - .include "words/sliteral.asm" - - ; String - ; compiles a string to flash, at runtime leaves ( -- flash-addr count) on stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SLITERAL: -000777 0008 .dw $0008 -000778 6c73 -000779 7469 -00077a 7265 -00077b 6c61 .db "sliteral" -00077c 076c .dw VE_HEAD - .set VE_HEAD = VE_SLITERAL - XT_SLITERAL: -00077d 3801 .dw DO_COLON - PFA_SLITERAL: - .endif -00077e 0751 .dw XT_COMPILE -00077f 03c5 .dw XT_DOSLITERAL ; ( -- addr n) -000780 03d3 .dw XT_SCOMMA -000781 3820 .dw XT_EXIT - .include "words/g-mark.asm" - - ; Compiler - ; places current dictionary position for backward resolves - ;VE_GMARK: - ; .dw $ff05 - ; .db ">mark" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_GMARK - XT_GMARK: -000782 3801 .dw DO_COLON - PFA_GMARK: -000783 3f12 .dw XT_DP -000784 0751 .dw XT_COMPILE -000785 ffff .dw -1 ; ffff does not erase flash -000786 3820 .dw XT_EXIT - .include "words/g-resolve.asm" - - ; Compiler - ; resolve backward jumps - ;VE_GRESOLVE: - ; .dw $ff08 - ; .db ">resolve" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_GRESOLVE - XT_GRESOLVE: -000787 3801 .dw DO_COLON - PFA_GRESOLVE: -000788 3f8b .dw XT_QSTACK -000789 3f12 .dw XT_DP -00078a 38c4 .dw XT_SWAP -00078b 3b73 .dw XT_STOREI -00078c 3820 .dw XT_EXIT - .include "words/l_mark.asm" - - ; Compiler - ; place destination for backward branch - ;VE_LMARK: - ; .dw $ff05 - ; .db "r if 2drop then r> invert ; - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_QDOCHECK: -00081b 3801 .dw DO_COLON - PFA_QDOCHECK: - .endif -00081c 3ec9 .dw XT_2DUP -00081d 3fdf .dw XT_EQUAL -00081e 38b1 .dw XT_DUP -00081f 38ff .dw XT_TO_R -000820 3836 .dw XT_DOCONDBRANCH -000821 0823 DEST(PFA_QDOCHECK1) -000822 3ed2 .dw XT_2DROP - PFA_QDOCHECK1: -000823 38f6 .dw XT_R_FROM -000824 39fd .dw XT_INVERT -000825 3820 .dw XT_EXIT - .include "words/endloop.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENDLOOP: -000826 ff07 .dw $ff07 -000827 6e65 -000828 6c64 -000829 6f6f -00082a 0070 .db "endloop",0 -00082b 080f .dw VE_HEAD - .set VE_HEAD = VE_ENDLOOP - XT_ENDLOOP: -00082c 3801 .dw DO_COLON - PFA_ENDLOOP: - .endif - ;Z ENDLOOP adrs xt -- L: 0 a1 a2 .. aN -- - ; ?DUP WHILE POSTPONE THEN REPEAT ; - ; resolve LEAVEs - ; This is a common factor of LOOP and +LOOP. - -00082d 0790 .DW XT_LRESOLVE -00082e 0839 -00082f 38b9 -000830 3836 LOOP1: .DW XT_L_FROM,XT_QDUP,XT_DOCONDBRANCH -000831 0835 DEST(LOOP2) -000832 07b5 .DW XT_THEN -000833 382f .dw XT_DOBRANCH -000834 082e DEST(LOOP1) -000835 3820 LOOP2: .DW XT_EXIT - ; leave address stack - .include "words/l-from.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_L_FROM: -000836 ff02 .dw $ff02 -000837 3e6c .db "l>" -000838 0826 .dw VE_HEAD - .set VE_HEAD = VE_L_FROM - XT_L_FROM: -000839 3801 .dw DO_COLON - PFA_L_FROM: - - .endif - ;Z L> -- x L: x -- move from leave stack - ; LP @ @ -2 LP +! ; - -00083a 0858 .dw XT_LP -00083b 3879 .dw XT_FETCH -00083c 3879 .dw XT_FETCH -00083d 383d .dw XT_DOLITERAL -00083e fffe .dw -2 -00083f 0858 .dw XT_LP -000840 3a65 .dw XT_PLUSSTORE -000841 3820 .dw XT_EXIT - .include "words/to-l.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO_L: -000842 ff02 .dw $ff02 -000843 6c3e .db ">l" -000844 0836 .dw VE_HEAD - .set VE_HEAD = VE_TO_L - XT_TO_L: -000845 3801 .dw DO_COLON - PFA_TO_L: - .endif - ;Z >L x -- L: -- x move to leave stack - ; CELL LP +! LP @ ! ; (L stack grows up) - -000846 3feb .dw XT_TWO -000847 0858 .dw XT_LP -000848 3a65 .dw XT_PLUSSTORE -000849 0858 .dw XT_LP -00084a 3879 .dw XT_FETCH -00084b 3881 .dw XT_STORE -00084c 3820 .dw XT_EXIT - .include "words/lp0.asm" - - ; Stack - ; start address of leave stack - VE_LP0: -00084d ff03 .dw $ff03 -00084e 706c -00084f 0030 .db "lp0",0 -000850 0842 .dw VE_HEAD - .set VE_HEAD = VE_LP0 - XT_LP0: -000851 386f .dw PFA_DOVALUE1 - PFA_LP0: -000852 0036 .dw CFG_LP0 -000853 3da0 .dw XT_EDEFERFETCH -000854 3daa .dw XT_EDEFERSTORE - .include "words/lp.asm" - - ; System Variable - ; leave stack pointer - VE_LP: -000855 ff02 .dw $ff02 -000856 706c .db "lp" -000857 084d .dw VE_HEAD - .set VE_HEAD = VE_LP - XT_LP: -000858 3848 .dw PFA_DOVARIABLE - PFA_LP: -000859 00eb .dw ram_lp - - .dseg -0000eb ram_lp: .byte 2 - .cseg - - - .include "words/create.asm" - - ; Dictionary - ; create a dictionary header. XT is (constant), with the address of the data field of name - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CREATE: -00085a ff06 .dw $ff06 -00085b 7263 -00085c 6165 -00085d 6574 .db "create" -00085e 0855 .dw VE_HEAD - .set VE_HEAD = VE_CREATE - XT_CREATE: -00085f 3801 .dw DO_COLON - PFA_CREATE: - .endif -000860 072e .dw XT_DOCREATE -000861 088e .dw XT_REVEAL -000862 0751 .dw XT_COMPILE -000863 3852 .dw PFA_DOCONSTANT -000864 3820 .dw XT_EXIT - .include "words/header.asm" - - ; Compiler - ; creates the vocabulary header without XT and data field (PF) in the wordlist wid - VE_HEADER: -000865 ff06 .dw $ff06 -000866 6568 -000867 6461 -000868 7265 .db "header" -000869 085a .dw VE_HEAD - .set VE_HEAD = VE_HEADER - XT_HEADER: -00086a 3801 .dw DO_COLON - PFA_HEADER: -00086b 3f12 .dw XT_DP ; the new Name Field -00086c 38ff .dw XT_TO_R -00086d 38ff .dw XT_TO_R ; ( R: NFA WID ) -00086e 38b1 .dw XT_DUP -00086f 3928 .dw XT_GREATERZERO -000870 3836 .dw XT_DOCONDBRANCH -000871 087c .dw PFA_HEADER1 -000872 38b1 .dw XT_DUP -000873 383d .dw XT_DOLITERAL -000874 ff00 .dw $ff00 ; all flags are off (e.g. immediate) -000875 3a1c .dw XT_OR -000876 03d7 .dw XT_DOSCOMMA - ; make the link to the previous entry in this wordlist -000877 38f6 .dw XT_R_FROM -000878 3b5f .dw XT_FETCHE -000879 075c .dw XT_COMMA -00087a 38f6 .dw XT_R_FROM -00087b 3820 .dw XT_EXIT - - PFA_HEADER1: - ; -16: attempt to use zero length string as a name -00087c 383d .dw XT_DOLITERAL -00087d fff0 .dw -16 -00087e 3d86 .dw XT_THROW - - .include "words/wlscope.asm" - - ; Compiler - ; dynamically place a word in a wordlist. The word name may be changed. - VE_WLSCOPE: -00087f ff07 .dw $ff07 -000880 6c77 -000881 6373 -000882 706f -000883 0065 .db "wlscope",0 -000884 0865 .dw VE_HEAD - .set VE_HEAD = VE_WLSCOPE - XT_WLSCOPE: -000885 3dff .dw PFA_DODEFER1 - PFA_WLSCOPE: -000886 0032 .dw CFG_WLSCOPE -000887 3da0 .dw XT_EDEFERFETCH -000888 3daa .dw XT_EDEFERSTORE - - ; wlscope, "wordlist scope" ( addr len -- addr' len' wid ), is a deferred word - ; which enables the AmForth application to choose the wordlist ( wid ) for the - ; new voc entry based on the input ( addr len ) string. The name of the new voc - ; entry ( addr' len' ) may be different from the input string. Note that all - ; created voc entry types pass through the wlscope mechanism. The default - ; wlscope action passes the input string to the output without modification and - ; uses get-current to select the wid. - .include "words/reveal.asm" - - ; Dictionary - ; makes an entry in a wordlist visible, if not already done. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_REVEAL: -000889 ff06 .dw $ff06 -00088a 6572 -00088b 6576 -00088c 6c61 .db "reveal" -00088d 087f .dw VE_HEAD - .set VE_HEAD = VE_REVEAL - XT_REVEAL: -00088e 3801 .dw DO_COLON - PFA_REVEAL: - .endif -00088f 071f -000890 3c90 -000891 3879 .DW XT_NEWEST,XT_CELLPLUS,XT_FETCH ; only if wordlist is in use -000892 38b9 -000893 3836 .DW XT_QDUP,XT_DOCONDBRANCH -000894 0899 DEST(REVEAL1) -000895 071f -000896 3879 -000897 38c4 -000898 3b3b .DW XT_NEWEST,XT_FETCH,XT_SWAP,XT_STOREE - ; .DW XT_ZERO,XT_NEWEST,XT_CELLPLUS,XT_STORE ; clean wordlist entry - REVEAL1: -000899 3820 .DW XT_EXIT - .include "words/does.asm" - - ; Compiler - ; organize the XT replacement to call other colon code - VE_DOES: -00089a 0005 .dw $0005 -00089b 6f64 -00089c 7365 -00089d 003e .db "does>",0 -00089e 0889 .dw VE_HEAD - .set VE_HEAD = VE_DOES - XT_DOES: -00089f 3801 .dw DO_COLON - PFA_DOES: -0008a0 0751 .dw XT_COMPILE -0008a1 08b2 .dw XT_DODOES -0008a2 0751 .dw XT_COMPILE ; create a code snippet to be used in an embedded XT -0008a3 940e .dw $940e ; the address of this compiled -0008a4 0751 .dw XT_COMPILE ; code will replace the XT of the -0008a5 08a7 .dw DO_DODOES ; word that CREATE created -0008a6 3820 .dw XT_EXIT ; - - DO_DODOES: ; ( -- PFA ) -0008a7 939a -0008a8 938a savetos -0008a9 01cb movw tosl, wl -0008aa 9601 adiw tosl, 1 - ; the following takes the address from a real uC-call - .if (pclen==3) - .endif -0008ab 917f pop wh -0008ac 916f pop wl - -0008ad 93bf push XH -0008ae 93af push XL -0008af 01db movw XL, wl -0008b0 940c 3805 jmp_ DO_NEXT - - ; ( -- ) - ; System - ; replace the XT written by CREATE to call the code that follows does> - ;VE_DODOES: - ; .dw $ff07 - ; .db "(does>)" - ; .set VE_HEAD = VE_DODOES - XT_DODOES: -0008b2 3801 .dw DO_COLON - PFA_DODOES: -0008b3 38f6 .dw XT_R_FROM -0008b4 071f .dw XT_NEWEST -0008b5 3c90 .dw XT_CELLPLUS -0008b6 3879 .dw XT_FETCH -0008b7 3b5f .dw XT_FETCHE -0008b8 06f6 .dw XT_NFA2CFA -0008b9 3b73 .dw XT_STOREI -0008ba 3820 .dw XT_EXIT - .include "words/colon.asm" - - ; Compiler - ; create a named entry in the dictionary, XT is DO_COLON - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_COLON: -0008bb ff01 .dw $ff01 -0008bc 003a .db ":",0 -0008bd 089a .dw VE_HEAD - .set VE_HEAD = VE_COLON - XT_COLON: -0008be 3801 .dw DO_COLON - PFA_COLON: - .endif -0008bf 072e .dw XT_DOCREATE -0008c0 08c9 .dw XT_COLONNONAME -0008c1 38d9 .dw XT_DROP -0008c2 3820 .dw XT_EXIT - .include "words/colon-noname.asm" - - ; Compiler - ; create an unnamed entry in the dictionary, XT is DO_COLON - VE_COLONNONAME: -0008c3 ff07 .dw $ff07 -0008c4 6e3a -0008c5 6e6f -0008c6 6d61 -0008c7 0065 .db ":noname",0 -0008c8 08bb .dw VE_HEAD - .set VE_HEAD = VE_COLONNONAME - XT_COLONNONAME: -0008c9 3801 .dw DO_COLON - PFA_COLONNONAME: -0008ca 3f12 .dw XT_DP -0008cb 38b1 .dw XT_DUP -0008cc 0726 .dw XT_LATEST -0008cd 3881 .dw XT_STORE - -0008ce 0751 .dw XT_COMPILE -0008cf 3801 .dw DO_COLON - -0008d0 08de .dw XT_RBRACKET -0008d1 3820 .dw XT_EXIT - .include "words/semicolon.asm" - - ; Compiler - ; finish colon defintion, compiles (exit) and returns to interpret state - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_SEMICOLON: -0008d2 0001 .dw $0001 -0008d3 003b .db $3b,0 -0008d4 08c3 .dw VE_HEAD - .set VE_HEAD = VE_SEMICOLON - XT_SEMICOLON: -0008d5 3801 .dw DO_COLON - PFA_SEMICOLON: - .endif -0008d6 0751 .dw XT_COMPILE -0008d7 3820 .dw XT_EXIT -0008d8 08e6 .dw XT_LBRACKET -0008d9 088e .dw XT_REVEAL -0008da 3820 .dw XT_EXIT - .include "words/right-bracket.asm" - - ; Compiler - ; enter compiler mode - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RBRACKET: -0008db ff01 .dw $ff01 -0008dc 005d .db "]",0 -0008dd 08d2 .dw VE_HEAD - .set VE_HEAD = VE_RBRACKET - XT_RBRACKET: -0008de 3801 .dw DO_COLON - PFA_RBRACKET: - .endif -0008df 3fe6 .dw XT_ONE -0008e0 3eb7 .dw XT_STATE -0008e1 3881 .dw XT_STORE -0008e2 3820 .dw XT_EXIT - .include "words/left-bracket.asm" - - ; Compiler - ; enter interpreter mode - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_LBRACKET: -0008e3 0001 .dw $0001 -0008e4 005b .db "[",0 -0008e5 08db .dw VE_HEAD - .set VE_HEAD = VE_LBRACKET - XT_LBRACKET: -0008e6 3801 .dw DO_COLON - PFA_LBRACKET: - .endif -0008e7 3954 .dw XT_ZERO -0008e8 3eb7 .dw XT_STATE -0008e9 3881 .dw XT_STORE -0008ea 3820 .dw XT_EXIT - .include "words/variable.asm" - - ; Compiler - ; create a dictionary entry for a variable and allocate 1 cell RAM - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_VARIABLE: -0008eb ff08 .dw $ff08 -0008ec 6176 -0008ed 6972 -0008ee 6261 -0008ef 656c .db "variable" -0008f0 08e3 .dw VE_HEAD - .set VE_HEAD = VE_VARIABLE - XT_VARIABLE: -0008f1 3801 .dw DO_COLON - PFA_VARIABLE: - .endif -0008f2 3f23 .dw XT_HERE -0008f3 08fd .dw XT_CONSTANT -0008f4 3feb .dw XT_TWO -0008f5 3f2c .dw XT_ALLOT -0008f6 3820 .dw XT_EXIT - .include "words/constant.asm" - - ; Compiler - ; create a constant in the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_CONSTANT: -0008f7 ff08 .dw $ff08 -0008f8 6f63 -0008f9 736e -0008fa 6174 -0008fb 746e .db "constant" -0008fc 08eb .dw VE_HEAD - .set VE_HEAD = VE_CONSTANT - XT_CONSTANT: -0008fd 3801 .dw DO_COLON - PFA_CONSTANT: - .endif -0008fe 072e .dw XT_DOCREATE -0008ff 088e .dw XT_REVEAL -000900 0751 .dw XT_COMPILE -000901 3848 .dw PFA_DOVARIABLE -000902 075c .dw XT_COMMA -000903 3820 .dw XT_EXIT - .include "words/user.asm" - - ; Compiler - ; create a dictionary entry for a user variable at offset n - VE_USER: -000904 ff04 .dw $ff04 -000905 7375 -000906 7265 .db "user" -000907 08f7 .dw VE_HEAD - .set VE_HEAD = VE_USER - XT_USER: -000908 3801 .dw DO_COLON - PFA_USER: -000909 072e .dw XT_DOCREATE -00090a 088e .dw XT_REVEAL - -00090b 0751 .dw XT_COMPILE -00090c 3858 .dw PFA_DOUSER -00090d 075c .dw XT_COMMA -00090e 3820 .dw XT_EXIT - - .include "words/recurse.asm" - - ; Compiler - ; compile the XT of the word currently being defined into the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RECURSE: -00090f 0007 .dw $0007 -000910 6572 -000911 7563 -000912 7372 -000913 0065 .db "recurse",0 -000914 0904 .dw VE_HEAD - .set VE_HEAD = VE_RECURSE - XT_RECURSE: -000915 3801 .dw DO_COLON - PFA_RECURSE: - .endif -000916 0726 .dw XT_LATEST -000917 3879 .dw XT_FETCH -000918 075c .dw XT_COMMA -000919 3820 .dw XT_EXIT - .include "words/immediate.asm" - - ; Compiler - ; set immediate flag for the most recent word definition - VE_IMMEDIATE: -00091a ff09 .dw $ff09 -00091b 6d69 -00091c 656d -00091d 6964 -00091e 7461 -00091f 0065 .db "immediate",0 -000920 090f .dw VE_HEAD - .set VE_HEAD = VE_IMMEDIATE - XT_IMMEDIATE: -000921 3801 .dw DO_COLON - PFA_IMMEDIATE: -000922 09c3 .dw XT_GET_CURRENT -000923 3b5f .dw XT_FETCHE -000924 38b1 .dw XT_DUP -000925 3bcb .dw XT_FETCHI -000926 383d .dw XT_DOLITERAL -000927 7fff .dw $7fff -000928 3a13 .dw XT_AND -000929 38c4 .dw XT_SWAP -00092a 3b73 .dw XT_STOREI -00092b 3820 .dw XT_EXIT - - .include "words/bracketchar.asm" - - ; Tools - ; skip leading space delimites, place the first character of the word on the stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BRACKETCHAR: -00092c 0006 .dw $0006 -00092d 635b -00092e 6168 -00092f 5d72 .db "[char]" -000930 091a .dw VE_HEAD - .set VE_HEAD = VE_BRACKETCHAR - XT_BRACKETCHAR: -000931 3801 .dw DO_COLON - PFA_BRACKETCHAR: - .endif -000932 0751 .dw XT_COMPILE -000933 383d .dw XT_DOLITERAL -000934 04e6 .dw XT_CHAR -000935 075c .dw XT_COMMA -000936 3820 .dw XT_EXIT - .include "words/abort-string.asm" - - ;C i*x x1 -- R: j*x -- x1<>0 - ; POSTPONE IS" POSTPONE ?ABORT ; IMMEDIATE - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ABORTQUOTE: -000937 0006 .dw $0006 -000938 6261 -000939 726f -00093a 2274 .db "abort",'"' -00093b 092c .dw VE_HEAD - .set VE_HEAD = VE_ABORTQUOTE - XT_ABORTQUOTE: -00093c 3801 .dw DO_COLON - PFA_ABORTQUOTE: - .endif -00093d 3e8a .dw XT_SQUOTE -00093e 0751 .dw XT_COMPILE -00093f 094e .dw XT_QABORT -000940 3820 .DW XT_EXIT - .include "words/abort.asm" - - ; Exceptions - ; send an exception -1 - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ABORT: -000941 ff05 .dw $ff05 -000942 6261 -000943 726f -000944 0074 .db "abort",0 -000945 0937 .dw VE_HEAD - .set VE_HEAD = VE_ABORT - XT_ABORT: -000946 3801 .dw DO_COLON - PFA_ABORT: - .endif -000947 394b .dw XT_TRUE -000948 3d86 .dw XT_THROW - .include "words/q-abort.asm" - - ; ROT IF ITYPE ABORT THEN 2DROP ; - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QABORT: -000949 ff06 .dw $ff06 -00094a 613f -00094b 6f62 -00094c 7472 .db "?abort" -00094d 0941 .dw VE_HEAD - .set VE_HEAD = VE_QABORT - XT_QABORT: -00094e 3801 .dw DO_COLON - PFA_QABORT: - - .endif -00094f 38e1 -000950 3836 .DW XT_ROT,XT_DOCONDBRANCH -000951 0954 DEST(QABO1) -000952 03f8 -000953 0946 .DW XT_ITYPE,XT_ABORT -000954 3ed2 -000955 3820 QABO1: .DW XT_2DROP,XT_EXIT - - .include "words/get-stack.asm" - - ; Tools - ; Get a stack from EEPROM - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_GET_STACK: -000956 ff09 .dw $ff09 -000957 6567 -000958 2d74 -000959 7473 -00095a 6361 -00095b 006b .db "get-stack",0 -00095c 0949 .dw VE_HEAD - .set VE_HEAD = VE_GET_STACK - XT_GET_STACK: -00095d 3801 .dw DO_COLON - .endif -00095e 38b1 .dw XT_DUP -00095f 3c90 .dw XT_CELLPLUS -000960 38c4 .dw XT_SWAP -000961 3b5f .dw XT_FETCHE -000962 38b1 .dw XT_DUP -000963 38ff .dw XT_TO_R -000964 3954 .dw XT_ZERO -000965 38c4 .dw XT_SWAP ; go from bigger to smaller addresses -000966 081b .dw XT_QDOCHECK -000967 3836 .dw XT_DOCONDBRANCH -000968 0974 DEST(PFA_N_FETCH_E2) -000969 3a9b .dw XT_DODO - PFA_N_FETCH_E1: - ; ( ee-addr ) -00096a 3aac .dw XT_I -00096b 3a35 .dw XT_1MINUS -00096c 3ec4 .dw XT_CELLS ; ( -- ee-addr i*2 ) -00096d 38cf .dw XT_OVER ; ( -- ee-addr i*2 ee-addr ) -00096e 399d .dw XT_PLUS ; ( -- ee-addr ee-addr+i -00096f 3b5f .dw XT_FETCHE ;( -- ee-addr item_i ) -000970 38c4 .dw XT_SWAP ;( -- item_i ee-addr ) -000971 394b .dw XT_TRUE ; shortcut for -1 -000972 3aba .dw XT_DOPLUSLOOP -000973 096a DEST(PFA_N_FETCH_E1) - PFA_N_FETCH_E2: -000974 3ed2 .dw XT_2DROP -000975 38f6 .dw XT_R_FROM -000976 3820 .dw XT_EXIT - - .include "words/set-stack.asm" - - ; Tools - ; Write a stack to EEPROM - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SET_STACK: -000977 ff09 .dw $ff09 -000978 6573 -000979 2d74 -00097a 7473 -00097b 6361 -00097c 006b .db "set-stack",0 -00097d 0956 .dw VE_HEAD - .set VE_HEAD = VE_SET_STACK - XT_SET_STACK: -00097e 3801 .dw DO_COLON - PFA_SET_STACK: - .endif -00097f 38cf .dw XT_OVER -000980 3921 .dw XT_ZEROLESS -000981 3836 .dw XT_DOCONDBRANCH -000982 0986 DEST(PFA_SET_STACK0) -000983 383d .dw XT_DOLITERAL -000984 fffc .dw -4 -000985 3d86 .dw XT_THROW - PFA_SET_STACK0: -000986 3ec9 .dw XT_2DUP -000987 3b3b .dw XT_STOREE ; ( -- i_n .. i_0 n e-addr ) -000988 38c4 .dw XT_SWAP -000989 3954 .dw XT_ZERO -00098a 081b .dw XT_QDOCHECK -00098b 3836 .dw XT_DOCONDBRANCH -00098c 0993 DEST(PFA_SET_STACK2) -00098d 3a9b .dw XT_DODO - PFA_SET_STACK1: -00098e 3c90 .dw XT_CELLPLUS ; ( -- i_x e-addr ) -00098f 3eda .dw XT_TUCK ; ( -- e-addr i_x e-addr -000990 3b3b .dw XT_STOREE -000991 3ac9 .dw XT_DOLOOP -000992 098e DEST(PFA_SET_STACK1) - PFA_SET_STACK2: -000993 38d9 .dw XT_DROP -000994 3820 .dw XT_EXIT - - .include "words/map-stack.asm" - - ; Tools - ; Iterate over a stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_MAPSTACK: -000995 ff09 .dw $ff09 -000996 616d -000997 2d70 -000998 7473 -000999 6361 -00099a 006b .db "map-stack",0 -00099b 0977 .dw VE_HEAD - .set VE_HEAD = VE_MAPSTACK - XT_MAPSTACK: -00099c 3801 .dw DO_COLON - PFA_MAPSTACK: - .endif -00099d 38b1 .dw XT_DUP -00099e 3c90 .dw XT_CELLPLUS -00099f 38c4 .dw XT_SWAP -0009a0 3b5f .dw XT_FETCHE -0009a1 3ec4 .dw XT_CELLS -0009a2 3f99 .dw XT_BOUNDS -0009a3 081b .dw XT_QDOCHECK -0009a4 3836 .dw XT_DOCONDBRANCH -0009a5 09b8 DEST(PFA_MAPSTACK3) -0009a6 3a9b .dw XT_DODO - PFA_MAPSTACK1: -0009a7 3aac .dw XT_I -0009a8 3b5f .dw XT_FETCHE ; -- i*x XT id -0009a9 38c4 .dw XT_SWAP -0009aa 38ff .dw XT_TO_R -0009ab 3908 .dw XT_R_FETCH -0009ac 382a .dw XT_EXECUTE ; i*x id -- j*y true | i*x false -0009ad 38b9 .dw XT_QDUP -0009ae 3836 .dw XT_DOCONDBRANCH -0009af 09b4 DEST(PFA_MAPSTACK2) -0009b0 38f6 .dw XT_R_FROM -0009b1 38d9 .dw XT_DROP -0009b2 3ad4 .dw XT_UNLOOP -0009b3 3820 .dw XT_EXIT - PFA_MAPSTACK2: -0009b4 38f6 .dw XT_R_FROM -0009b5 3feb .dw XT_TWO -0009b6 3aba .dw XT_DOPLUSLOOP -0009b7 09a7 DEST(PFA_MAPSTACK1) - PFA_MAPSTACK3: -0009b8 38d9 .dw XT_DROP -0009b9 3954 .dw XT_ZERO -0009ba 3820 .dw XT_EXIT - - ; - ; : map-stack ( i*x XT e-addr -- j*y ) - ; dup cell+ swap @e cells bounds ?do - ; ( -- i*x XT ) - ; i @e swap >r r@ execute - ; ?dup if r> drop unloop exit then - ; r> - ; 2 +loop drop 0 - ; ; - .include "words/get-current.asm" - - ; Search Order - ; get the wid of the current compilation word list - VE_GET_CURRENT: -0009bb ff0b .dw $ff0b -0009bc 6567 -0009bd 2d74 -0009be 7563 -0009bf 7272 -0009c0 6e65 -0009c1 0074 .db "get-current",0 -0009c2 0995 .dw VE_HEAD - .set VE_HEAD = VE_GET_CURRENT - XT_GET_CURRENT: -0009c3 3801 .dw DO_COLON - PFA_GET_CURRENT: -0009c4 383d .dw XT_DOLITERAL -0009c5 003c .dw CFG_CURRENT -0009c6 3b5f .dw XT_FETCHE -0009c7 3820 .dw XT_EXIT - .include "words/get-order.asm" - - ; Search Order - ; Get the current search order word list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_GET_ORDER: -0009c8 ff09 .dw $ff09 -0009c9 6567 -0009ca 2d74 -0009cb 726f -0009cc 6564 -0009cd 0072 .db "get-order",0 -0009ce 09bb .dw VE_HEAD - .set VE_HEAD = VE_GET_ORDER - XT_GET_ORDER: -0009cf 3801 .dw DO_COLON - PFA_GET_ORDER: - .endif -0009d0 383d .dw XT_DOLITERAL -0009d1 0040 .dw CFG_ORDERLISTLEN -0009d2 095d .dw XT_GET_STACK -0009d3 3820 .dw XT_EXIT - .include "words/cfg-order.asm" - - ; Search Order - ; Get the current search order word list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CFG_ORDER: -0009d4 ff09 .dw $ff09 -0009d5 6663 -0009d6 2d67 -0009d7 726f -0009d8 6564 -0009d9 0072 .db "cfg-order",0 -0009da 09c8 .dw VE_HEAD - .set VE_HEAD = VE_CFG_ORDER - XT_CFG_ORDER: -0009db 3848 .dw PFA_DOVARIABLE - PFA_CFG_ORDER: - .endif -0009dc 0040 .dw CFG_ORDERLISTLEN - .include "words/compare.asm" - - ; String - ; compares two strings in RAM - VE_COMPARE: -0009dd ff07 .dw $ff07 -0009de 6f63 -0009df 706d -0009e0 7261 -0009e1 0065 .db "compare",0 -0009e2 09d4 .dw VE_HEAD - .set VE_HEAD = VE_COMPARE - XT_COMPARE: -0009e3 09e4 .dw PFA_COMPARE - PFA_COMPARE: -0009e4 93bf push xh -0009e5 93af push xl -0009e6 018c movw temp0, tosl -0009e7 9189 -0009e8 9199 loadtos -0009e9 01dc movw xl, tosl -0009ea 9189 -0009eb 9199 loadtos -0009ec 019c movw temp2, tosl -0009ed 9189 -0009ee 9199 loadtos -0009ef 01fc movw zl, tosl - PFA_COMPARE_LOOP: -0009f0 90ed ld temp4, X+ -0009f1 90f1 ld temp5, Z+ -0009f2 14ef cp temp4, temp5 -0009f3 f451 brne PFA_COMPARE_NOTEQUAL -0009f4 950a dec temp0 -0009f5 f019 breq PFA_COMPARE_ENDREACHED2 -0009f6 952a dec temp2 -0009f7 f7c1 brne PFA_COMPARE_LOOP -0009f8 c001 rjmp PFA_COMPARE_ENDREACHED - PFA_COMPARE_ENDREACHED2: -0009f9 952a dec temp2 - PFA_COMPARE_ENDREACHED: -0009fa 2b02 or temp0, temp2 -0009fb f411 brne PFA_COMPARE_CHECKLASTCHAR -0009fc 2788 clr tosl -0009fd c002 rjmp PFA_COMPARE_DONE - PFA_COMPARE_CHECKLASTCHAR: - PFA_COMPARE_NOTEQUAL: -0009fe ef8f ser tosl -0009ff c000 rjmp PFA_COMPARE_DONE - - PFA_COMPARE_DONE: -000a00 2f98 mov tosh, tosl -000a01 91af pop xl -000a02 91bf pop xh -000a03 940c 3805 jmp_ DO_NEXT - .include "words/nfa2lfa.asm" - - ; System - ; get the link field address from the name field address - VE_NFA2LFA: -000a05 ff07 .dw $ff07 -000a06 666e -000a07 3e61 -000a08 666c -000a09 0061 .db "nfa>lfa",0 -000a0a 09dd .dw VE_HEAD - .set VE_HEAD = VE_NFA2LFA - XT_NFA2LFA: -000a0b 3801 .dw DO_COLON - PFA_NFA2LFA: -000a0c 06ea .dw XT_NAME2STRING -000a0d 3a2f .dw XT_1PLUS -000a0e 3a04 .dw XT_2SLASH -000a0f 399d .dw XT_PLUS -000a10 3820 .dw XT_EXIT - .elif AMFORTH_NRWW_SIZE > 2000 - .else - .endif - .include "dict_appl.inc" - - ; they may be moved to the core dictionary if needed - .include "words/dot-s.asm" - - ; Tools - ; stack dump - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOTS: -000a11 ff02 .dw $ff02 -000a12 732e .db ".s" -000a13 0a05 .dw VE_HEAD - .set VE_HEAD = VE_DOTS - XT_DOTS: -000a14 3801 .dw DO_COLON - PFA_DOTS: - .endif -000a15 05e2 .dw XT_DEPTH -000a16 3e0a .dw XT_UDOT -000a17 3fae .dw XT_SPACE -000a18 05e2 .dw XT_DEPTH -000a19 3954 .dw XT_ZERO -000a1a 081b .dw XT_QDOCHECK -000a1b 3836 .dw XT_DOCONDBRANCH -000a1c 0a23 DEST(PFA_DOTS2) -000a1d 3a9b .dw XT_DODO - PFA_DOTS1: -000a1e 3aac .dw XT_I -000a1f 3c84 .dw XT_PICK -000a20 3e0a .dw XT_UDOT -000a21 3ac9 .dw XT_DOLOOP -000a22 0a1e DEST(PFA_DOTS1) - PFA_DOTS2: -000a23 3820 .dw XT_EXIT - .include "words/spirw.asm" - - ; MCU - ; SPI exchange of 1 byte - VE_SPIRW: -000a24 ff06 .dw $ff06 -000a25 2163 -000a26 7340 -000a27 6970 .db "c!@spi" -000a28 0a11 .dw VE_HEAD - .set VE_HEAD = VE_SPIRW - XT_SPIRW: -000a29 0a2a .dw PFA_SPIRW - PFA_SPIRW: -000a2a d003 rcall do_spirw -000a2b 2799 clr tosh -000a2c 940c 3805 jmp_ DO_NEXT - - do_spirw: -000a2e b98f out_ SPDR, tosl - do_spirw1: -000a2f b10e in_ temp0, SPSR -000a30 7f08 cbr temp0,7 -000a31 b90e out_ SPSR, temp0 -000a32 b10e in_ temp0, SPSR -000a33 ff07 sbrs temp0, 7 -000a34 cffa rjmp do_spirw1 ; wait until complete -000a35 b18f in_ tosl, SPDR -000a36 9508 ret - .include "words/n-spi.asm" - - ; MCU - ; read len bytes from SPI to addr - VE_N_SPIR: -000a37 ff05 .dw $ff05 -000a38 406e -000a39 7073 -000a3a 0069 .db "n@spi",0 -000a3b 0a24 .dw VE_HEAD - .set VE_HEAD = VE_N_SPIR - XT_N_SPIR: -000a3c 0a3d .dw PFA_N_SPIR - PFA_N_SPIR: -000a3d 018c movw temp0, tosl -000a3e 9189 -000a3f 9199 loadtos -000a40 01fc movw zl, tosl -000a41 01c8 movw tosl, temp0 - PFA_N_SPIR_LOOP: -000a42 b82f out_ SPDR, zerol - PFA_N_SPIR_LOOP1: -000a43 b12e in_ temp2, SPSR -000a44 ff27 sbrs temp2, SPIF -000a45 cffd rjmp PFA_N_SPIR_LOOP1 -000a46 b12f in_ temp2, SPDR -000a47 9321 st Z+, temp2 -000a48 9701 sbiw tosl, 1 -000a49 f7c1 brne PFA_N_SPIR_LOOP -000a4a 9189 -000a4b 9199 loadtos -000a4c 940c 3805 jmp_ DO_NEXT - - ; ( addr len -- ) - ; MCU - ; write len bytes to SPI from addr - VE_N_SPIW: -000a4e ff05 .dw $ff05 -000a4f 216e -000a50 7073 -000a51 0069 .db "n!spi",0 -000a52 0a37 .dw VE_HEAD - .set VE_HEAD = VE_N_SPIW - XT_N_SPIW: -000a53 0a54 .dw PFA_N_SPIW - PFA_N_SPIW: -000a54 018c movw temp0, tosl -000a55 9189 -000a56 9199 loadtos -000a57 01fc movw zl, tosl -000a58 01c8 movw tosl, temp0 - PFA_N_SPIW_LOOP: -000a59 9121 ld temp2, Z+ -000a5a b92f out_ SPDR, temp2 - PFA_N_SPIW_LOOP1: -000a5b b12e in_ temp2, SPSR -000a5c ff27 sbrs temp2, SPIF -000a5d cffd rjmp PFA_N_SPIW_LOOP1 -000a5e b12f in_ temp2, SPDR ; ignore the data -000a5f 9701 sbiw tosl, 1 -000a60 f7c1 brne PFA_N_SPIW_LOOP -000a61 9189 -000a62 9199 loadtos -000a63 940c 3805 jmp_ DO_NEXT - .include "words/applturnkey.asm" - - ; R( -- ) - ; application specific turnkey action - VE_APPLTURNKEY: -000a65 ff0b .dw $ff0b -000a66 7061 -000a67 6c70 -000a68 7574 -000a69 6e72 -000a6a 656b -000a6b 0079 .db "applturnkey",0 -000a6c 0a4e .dw VE_HEAD - .set VE_HEAD = VE_APPLTURNKEY - XT_APPLTURNKEY: -000a6d 3801 .dw DO_COLON - PFA_APPLTURNKEY: -000a6e 00bc .dw XT_USART - - .if WANT_INTERRUPTS == 1 -000a6f 3c97 .dw XT_INTON - .endif -000a70 017f .dw XT_DOT_VER -000a71 3fae .dw XT_SPACE -000a72 3eac .dw XT_F_CPU -000a73 383d .dw XT_DOLITERAL -000a74 03e8 .dw 1000 -000a75 39c2 .dw XT_UMSLASHMOD -000a76 38f0 .dw XT_NIP -000a77 3f41 .dw XT_DECIMAL -000a78 037a .dw XT_DOT -000a79 03c5 .dw XT_DOSLITERAL -000a7a 0004 .dw 4 -000a7b 486b -000a7c 207a .db "kHz " -000a7d 03f8 .dw XT_ITYPE -000a7e 3820 .dw XT_EXIT - .include "dict/compiler2.inc" - - ; included almost independently from each other - ; on a include-per-use basis - ; - .if DICT_COMPILER2 == 0 - .set DICT_COMPILER2 = 1 - - .include "words/set-current.asm" - - ; Search Order - ; set current word list to the given word list wid - VE_SET_CURRENT: -000a7f ff0b .dw $ff0b -000a80 6573 -000a81 2d74 -000a82 7563 -000a83 7272 -000a84 6e65 -000a85 0074 .db "set-current",0 -000a86 0a65 .dw VE_HEAD - .set VE_HEAD = VE_SET_CURRENT - XT_SET_CURRENT: -000a87 3801 .dw DO_COLON - PFA_SET_CURRENT: -000a88 383d .dw XT_DOLITERAL -000a89 003c .dw CFG_CURRENT -000a8a 3b3b .dw XT_STOREE -000a8b 3820 .dw XT_EXIT - .include "words/wordlist.asm" - - ; Search Order - ; create a new, empty wordlist - VE_WORDLIST: -000a8c ff08 .dw $ff08 -000a8d 6f77 -000a8e 6472 -000a8f 696c -000a90 7473 .db "wordlist" -000a91 0a7f .dw VE_HEAD - .set VE_HEAD = VE_WORDLIST - XT_WORDLIST: -000a92 3801 .dw DO_COLON - PFA_WORDLIST: -000a93 3f1b .dw XT_EHERE -000a94 3954 .dw XT_ZERO -000a95 38cf .dw XT_OVER -000a96 3b3b .dw XT_STOREE -000a97 38b1 .dw XT_DUP -000a98 3c90 .dw XT_CELLPLUS -000a99 01b4 .dw XT_DOTO -000a9a 3f1c .dw PFA_EHERE -000a9b 3820 .dw XT_EXIT - - .include "words/forth-wordlist.asm" - - ; Search Order - ; get the system default word list - VE_FORTHWORDLIST: -000a9c ff0e .dw $ff0e -000a9d 6f66 -000a9e 7472 -000a9f 2d68 -000aa0 6f77 -000aa1 6472 -000aa2 696c -000aa3 7473 .db "forth-wordlist" -000aa4 0a8c .dw VE_HEAD - .set VE_HEAD = VE_FORTHWORDLIST - XT_FORTHWORDLIST: -000aa5 3848 .dw PFA_DOVARIABLE - PFA_FORTHWORDLIST: -000aa6 003e .dw CFG_FORTHWORDLIST - .include "words/set-order.asm" - - ; Search Order - ; replace the search order list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SET_ORDER: -000aa7 ff09 .dw $ff09 -000aa8 6573 -000aa9 2d74 -000aaa 726f -000aab 6564 -000aac 0072 .db "set-order",0 -000aad 0a9c .dw VE_HEAD - .set VE_HEAD = VE_SET_ORDER - XT_SET_ORDER: -000aae 3801 .dw DO_COLON - PFA_SET_ORDER: - .endif -000aaf 383d .dw XT_DOLITERAL -000ab0 0040 .dw CFG_ORDERLISTLEN -000ab1 097e .dw XT_SET_STACK -000ab2 3820 .dw XT_EXIT - - .include "words/set-recognizer.asm" - - ; Interpreter - ; replace the recognizer list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SET_RECOGNIZERS: -000ab3 ff0f .dw $ff0f -000ab4 6573 -000ab5 2d74 -000ab6 6572 -000ab7 6f63 -000ab8 6e67 -000ab9 7a69 -000aba 7265 -000abb 0073 .db "set-recognizers",0 -000abc 0aa7 .dw VE_HEAD - .set VE_HEAD = VE_SET_RECOGNIZERS - XT_SET_RECOGNIZERS: -000abd 3801 .dw DO_COLON - PFA_SET_RECOGNIZERS: - .endif -000abe 383d .dw XT_DOLITERAL -000abf 0052 .dw CFG_RECOGNIZERLISTLEN -000ac0 097e .dw XT_SET_STACK -000ac1 3820 .dw XT_EXIT - - .include "words/get-recognizer.asm" - - ; Interpreter - ; Get the current recognizer list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_GET_RECOGNIZERS: -000ac2 ff0f .dw $ff0f -000ac3 6567 -000ac4 2d74 -000ac5 6572 -000ac6 6f63 -000ac7 6e67 -000ac8 7a69 -000ac9 7265 -000aca 0073 .db "get-recognizers",0 -000acb 0ab3 .dw VE_HEAD - .set VE_HEAD = VE_GET_RECOGNIZERS - XT_GET_RECOGNIZERS: -000acc 3801 .dw DO_COLON - PFA_GET_RECOGNIZERS: - .endif -000acd 383d .dw XT_DOLITERAL -000ace 0052 .dw CFG_RECOGNIZERLISTLEN -000acf 095d .dw XT_GET_STACK -000ad0 3820 .dw XT_EXIT - .include "words/code.asm" - - ; Compiler - ; create named entry in the dictionary, XT is the data field - VE_CODE: -000ad1 ff04 .dw $ff04 -000ad2 6f63 -000ad3 6564 .db "code" -000ad4 0ac2 .dw VE_HEAD - .set VE_HEAD = VE_CODE - XT_CODE: -000ad5 3801 .dw DO_COLON - PFA_CODE: -000ad6 072e .dw XT_DOCREATE -000ad7 088e .dw XT_REVEAL -000ad8 3f12 .dw XT_DP -000ad9 01c6 .dw XT_ICELLPLUS -000ada 075c .dw XT_COMMA -000adb 3820 .dw XT_EXIT - .include "words/end-code.asm" - - ; Compiler - ; finish a code definition - VE_ENDCODE: -000adc ff08 .dw $ff08 -000add 6e65 -000ade 2d64 -000adf 6f63 -000ae0 6564 .db "end-code" -000ae1 0ad1 .dw VE_HEAD - .set VE_HEAD = VE_ENDCODE - XT_ENDCODE: -000ae2 3801 .dw DO_COLON - PFA_ENDCODE: -000ae3 0751 .dw XT_COMPILE -000ae4 940c .dw $940c -000ae5 0751 .dw XT_COMPILE -000ae6 3805 .dw DO_NEXT -000ae7 3820 .dw XT_EXIT - .include "words/marker.asm" - - ; System Value - ; The eeprom address until which MARKER saves and restores the eeprom data. - VE_MARKER: -000ae8 ff08 .dw $ff08 -000ae9 6d28 -000aea 7261 -000aeb 656b -000aec 2972 .db "(marker)" -000aed 0adc .dw VE_HEAD - .set VE_HEAD = VE_MARKER - XT_MARKER: -000aee 386f .dw PFA_DOVALUE1 - PFA_MARKER: -000aef 005e .dw EE_MARKER -000af0 3da0 .dw XT_EDEFERFETCH -000af1 3daa .dw XT_EDEFERSTORE - .include "words/postpone.asm" - - ; Compiler - ; Append the compilation semantics of "name" to the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_POSTPONE: -000af2 0008 .dw $0008 -000af3 6f70 -000af4 7473 -000af5 6f70 -000af6 656e .db "postpone" -000af7 0ae8 .dw VE_HEAD - .set VE_HEAD = VE_POSTPONE - XT_POSTPONE: -000af8 3801 .dw DO_COLON - PFA_POSTPONE: - .endif -000af9 05b0 .dw XT_PARSENAME -000afa 05f3 .dw XT_FORTHRECOGNIZER -000afb 05fe .dw XT_RECOGNIZE -000afc 38b1 .dw XT_DUP -000afd 38ff .dw XT_TO_R -000afe 01c6 .dw XT_ICELLPLUS -000aff 01c6 .dw XT_ICELLPLUS -000b00 3bcb .dw XT_FETCHI -000b01 382a .dw XT_EXECUTE -000b02 38f6 .dw XT_R_FROM -000b03 01c6 .dw XT_ICELLPLUS -000b04 3bcb .dw XT_FETCHI -000b05 075c .dw XT_COMMA -000b06 3820 .dw XT_EXIT - .endif - .include "words/2r_fetch.asm" - - ; Stack - ; fetch content of TOR - VE_2R_FETCH: -000b07 ff03 .dw $ff03 -000b08 7232 -000b09 0040 .db "2r@",0 -000b0a 0af2 .dw VE_HEAD - .set VE_HEAD = VE_2R_FETCH - XT_2R_FETCH: -000b0b 0b0c .dw PFA_2R_FETCH - PFA_2R_FETCH: -000b0c 939a -000b0d 938a savetos -000b0e 91ef pop zl -000b0f 91ff pop zh -000b10 918f pop tosl -000b11 919f pop tosh -000b12 939f push tosh -000b13 938f push tosl -000b14 93ff push zh -000b15 93ef push zl -000b16 939a -000b17 938a savetos -000b18 01cf movw tosl, zl -000b19 940c 3805 jmp_ DO_NEXT - - .set DPSTART = pc - .if(pc>AMFORTH_RO_SEG) - .endif - - .org AMFORTH_RO_SEG - .include "amforth-interpreter.asm" - - - DO_COLON: -003801 93bf push XH -003802 93af push XL ; PUSH IP -003803 01db movw XL, wl -003804 9611 adiw xl, 1 - DO_NEXT: - .if WANT_INTERRUPTS == 1 -003805 14b2 cp isrflag, zerol -003806 f469 brne DO_INTERRUPT - .endif -003807 01fd movw zl, XL ; READ IP -003808 0fee -003809 1fff -00380a 9165 -00380b 9175 readflashcell wl, wh -00380c 9611 adiw XL, 1 ; INC IP - - DO_EXECUTE: -00380d 01fb movw zl, wl -00380e 0fee -00380f 1fff -003810 9105 -003811 9115 readflashcell temp0,temp1 -003812 01f8 movw zl, temp0 -003813 9409 ijmp - - .if WANT_INTERRUPTS == 1 - DO_INTERRUPT: - ; here we deal with interrupts the forth way -003814 939a -003815 938a savetos -003816 2d8b mov tosl, isrflag -003817 2799 clr tosh -003818 24bb clr isrflag -003819 ec60 ldi wl, LOW(XT_ISREXEC) -00381a e37c ldi wh, HIGH(XT_ISREXEC) -00381b cff1 rjmp DO_EXECUTE - .include "dict/nrww.inc" - - ; section together with the forth inner interpreter - - .include "words/exit.asm" - - ; Compiler - ; end of current colon word - VE_EXIT: -00381c ff04 .dw $ff04 -00381d 7865 -00381e 7469 .db "exit" -00381f 0b07 .dw VE_HEAD - .set VE_HEAD = VE_EXIT - XT_EXIT: -003820 3821 .dw PFA_EXIT - PFA_EXIT: -003821 91af pop XL -003822 91bf pop XH -003823 cfe1 jmp_ DO_NEXT - .include "words/execute.asm" - - ; System - ; execute XT - VE_EXECUTE: -003824 ff07 .dw $ff07 -003825 7865 -003826 6365 -003827 7475 -003828 0065 .db "execute",0 -003829 381c .dw VE_HEAD - .set VE_HEAD = VE_EXECUTE - XT_EXECUTE: -00382a 382b .dw PFA_EXECUTE - PFA_EXECUTE: -00382b 01bc movw wl, tosl -00382c 9189 -00382d 9199 loadtos -00382e cfde jmp_ DO_EXECUTE - .include "words/dobranch.asm" - - ; System - ; runtime of branch - ;VE_DOBRANCH: - ; .dw $ff08 - ; .db "(branch)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOBRANCH - XT_DOBRANCH: -00382f 3830 .dw PFA_DOBRANCH - PFA_DOBRANCH: -003830 01fd movw zl, XL -003831 0fee -003832 1fff -003833 91a5 -003834 91b5 readflashcell XL,XH -003835 cfcf jmp_ DO_NEXT - .include "words/docondbranch.asm" - - ; System - ; runtime of ?branch - ;VE_DOCONDBRANCH: - ; .dw $ff09 - ; .db "(?branch)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOCONDBRANCH - XT_DOCONDBRANCH: -003836 3837 .dw PFA_DOCONDBRANCH - PFA_DOCONDBRANCH: -003837 2b98 or tosh, tosl -003838 9189 -003839 9199 loadtos -00383a f3a9 brbs 1, PFA_DOBRANCH ; 1 is z flag; if tos is zero (false), do the branch -00383b 9611 adiw XL, 1 -00383c cfc8 jmp_ DO_NEXT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/doliteral.asm" - - ; System - ; runtime of literal - ;VE_DOLITERAL: - ; .dw $ff09 - ; .db "(literal)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOLITERAL - XT_DOLITERAL: -00383d 383e .dw PFA_DOLITERAL - PFA_DOLITERAL: -00383e 939a -00383f 938a savetos -003840 01fd movw zl, xl -003841 0fee -003842 1fff -003843 9185 -003844 9195 readflashcell tosl,tosh -003845 9611 adiw xl, 1 -003846 cfbe jmp_ DO_NEXT - - .include "words/dovariable.asm" - - ; System - ; puts content of parameter field (1 cell) to TOS - ;VE_DOVARIABLE: - ; .dw $ff0a - ; .db "(variable)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOVARIABLE - XT_DOVARIABLE: -003847 3848 .dw PFA_DOVARIABLE - PFA_DOVARIABLE: -003848 939a -003849 938a savetos -00384a 01fb movw zl, wl -00384b 9631 adiw zl,1 -00384c 0fee -00384d 1fff -00384e 9185 -00384f 9195 readflashcell tosl,tosh -003850 cfb4 jmp_ DO_NEXT - .include "words/doconstant.asm" - - ; System - ; place data field address on TOS - ;VE_DOCONSTANT: - ; .dw $ff0a - ; .db "(constant)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOCONSTANT - XT_DOCONSTANT: -003851 3852 .dw PFA_DOCONSTANT - PFA_DOCONSTANT: -003852 939a -003853 938a savetos -003854 01cb movw tosl, wl -003855 9601 adiw tosl, 1 -003856 cfae jmp_ DO_NEXT - .include "words/douser.asm" - - ; System - ; runtime part of user - ;VE_DOUSER: - ; .dw $ff06 - ; .db "(user)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOUSER - XT_DOUSER: -003857 3858 .dw PFA_DOUSER - PFA_DOUSER: -003858 939a -003859 938a savetos -00385a 01fb movw zl, wl -00385b 9631 adiw zl, 1 -00385c 0fee -00385d 1fff -00385e 9185 -00385f 9195 readflashcell tosl,tosh -003860 0d84 add tosl, upl -003861 1d95 adc tosh, uph -003862 cfa2 jmp_ DO_NEXT - .include "words/do-value.asm" - - ; System - ; runtime of value - VE_DOVALUE: -003863 ff07 .dw $ff07 -003864 7628 -003865 6c61 -003866 6575 -003867 0029 .db "(value)", 0 -003868 3824 .dw VE_HEAD - .set VE_HEAD = VE_DOVALUE - XT_DOVALUE: -003869 3801 .dw DO_COLON - PFA_DOVALUE: -00386a 072e .dw XT_DOCREATE -00386b 088e .dw XT_REVEAL -00386c 0751 .dw XT_COMPILE -00386d 386f .dw PFA_DOVALUE1 -00386e 3820 .dw XT_EXIT - PFA_DOVALUE1: -00386f 940e 08a7 call_ DO_DODOES -003871 38b1 .dw XT_DUP -003872 01c6 .dw XT_ICELLPLUS -003873 3bcb .dw XT_FETCHI -003874 382a .dw XT_EXECUTE -003875 3820 .dw XT_EXIT - - ; : (value) dup icell+ @i execute ; - .include "words/fetch.asm" - - ; Memory - ; read 1 cell from RAM address - VE_FETCH: -003876 ff01 .dw $ff01 -003877 0040 .db "@",0 -003878 3863 .dw VE_HEAD - .set VE_HEAD = VE_FETCH - XT_FETCH: -003879 387a .dw PFA_FETCH - PFA_FETCH: - .if WANT_UNIFIED == 1 - .endif - PFA_FETCHRAM: -00387a 01fc movw zl, tosl - ; low byte is read before the high byte -00387b 9181 ld tosl, z+ -00387c 9191 ld tosh, z+ -00387d cf87 jmp_ DO_NEXT - .if WANT_UNIFIED == 1 - .endif - .include "words/store.asm" - - ; Memory - ; write n to RAM memory at addr, low byte first - VE_STORE: -00387e ff01 .dw $ff01 -00387f 0021 .db "!",0 -003880 3876 .dw VE_HEAD - .set VE_HEAD = VE_STORE - XT_STORE: -003881 3882 .dw PFA_STORE - PFA_STORE: - .if WANT_UNIFIED == 1 - .endif - PFA_STORERAM: -003882 01fc movw zl, tosl -003883 9189 -003884 9199 loadtos - ; the high byte is written before the low byte -003885 8391 std Z+1, tosh -003886 8380 std Z+0, tosl -003887 9189 -003888 9199 loadtos -003889 cf7b jmp_ DO_NEXT - .if WANT_UNIFIED == 1 - .endif - .include "words/cstore.asm" - - ; Memory - ; store a single byte to RAM address - VE_CSTORE: -00388a ff02 .dw $ff02 -00388b 2163 .db "c!" -00388c 387e .dw VE_HEAD - .set VE_HEAD = VE_CSTORE - XT_CSTORE: -00388d 388e .dw PFA_CSTORE - PFA_CSTORE: -00388e 01fc movw zl, tosl -00388f 9189 -003890 9199 loadtos -003891 8380 st Z, tosl -003892 9189 -003893 9199 loadtos -003894 cf70 jmp_ DO_NEXT - .include "words/cfetch.asm" - - ; Memory - ; fetch a single byte from memory mapped locations - VE_CFETCH: -003895 ff02 .dw $ff02 -003896 4063 .db "c@" -003897 388a .dw VE_HEAD - .set VE_HEAD = VE_CFETCH - XT_CFETCH: -003898 3899 .dw PFA_CFETCH - PFA_CFETCH: -003899 01fc movw zl, tosl -00389a 2799 clr tosh -00389b 8180 ld tosl, Z -00389c cf68 jmp_ DO_NEXT - .include "words/fetch-u.asm" - - ; Memory - ; read 1 cell from USER area - VE_FETCHU: -00389d ff02 .dw $ff02 -00389e 7540 .db "@u" -00389f 3895 .dw VE_HEAD - .set VE_HEAD = VE_FETCHU - XT_FETCHU: -0038a0 3801 .dw DO_COLON - PFA_FETCHU: -0038a1 3b02 .dw XT_UP_FETCH -0038a2 399d .dw XT_PLUS -0038a3 3879 .dw XT_FETCH -0038a4 3820 .dw XT_EXIT - .include "words/store-u.asm" - - ; Memory - ; write n to USER area at offset - VE_STOREU: -0038a5 ff02 .dw $ff02 -0038a6 7521 .db "!u" -0038a7 389d .dw VE_HEAD - .set VE_HEAD = VE_STOREU - XT_STOREU: -0038a8 3801 .dw DO_COLON - PFA_STOREU: -0038a9 3b02 .dw XT_UP_FETCH -0038aa 399d .dw XT_PLUS -0038ab 3881 .dw XT_STORE -0038ac 3820 .dw XT_EXIT - - ;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/dup.asm" - - ; Stack - ; duplicate TOS - VE_DUP: -0038ad ff03 .dw $ff03 -0038ae 7564 -0038af 0070 .db "dup",0 -0038b0 38a5 .dw VE_HEAD - .set VE_HEAD = VE_DUP - XT_DUP: -0038b1 38b2 .dw PFA_DUP - PFA_DUP: -0038b2 939a -0038b3 938a savetos -0038b4 cf50 jmp_ DO_NEXT - .include "words/qdup.asm" - - ; Stack - ; duplicate TOS if non-zero - VE_QDUP: -0038b5 ff04 .dw $ff04 -0038b6 643f -0038b7 7075 .db "?dup" -0038b8 38ad .dw VE_HEAD - .set VE_HEAD = VE_QDUP - XT_QDUP: -0038b9 38ba .dw PFA_QDUP - PFA_QDUP: -0038ba 2f08 mov temp0, tosl -0038bb 2b09 or temp0, tosh -0038bc f011 breq PFA_QDUP1 -0038bd 939a -0038be 938a savetos - PFA_QDUP1: -0038bf cf45 jmp_ DO_NEXT - .include "words/swap.asm" - - ; Stack - ; swaps the two top level stack cells - VE_SWAP: -0038c0 ff04 .dw $ff04 -0038c1 7773 -0038c2 7061 .db "swap" -0038c3 38b5 .dw VE_HEAD - .set VE_HEAD = VE_SWAP - XT_SWAP: -0038c4 38c5 .dw PFA_SWAP - PFA_SWAP: -0038c5 018c movw temp0, tosl -0038c6 9189 -0038c7 9199 loadtos -0038c8 931a st -Y, temp1 -0038c9 930a st -Y, temp0 -0038ca cf3a jmp_ DO_NEXT - .include "words/over.asm" - - ; Stack - ; Place a copy of x1 on top of the stack - VE_OVER: -0038cb ff04 .dw $ff04 -0038cc 766f -0038cd 7265 .db "over" -0038ce 38c0 .dw VE_HEAD - .set VE_HEAD = VE_OVER - XT_OVER: -0038cf 38d0 .dw PFA_OVER - PFA_OVER: -0038d0 939a -0038d1 938a savetos -0038d2 818a ldd tosl, Y+2 -0038d3 819b ldd tosh, Y+3 - -0038d4 cf30 jmp_ DO_NEXT - .include "words/drop.asm" - - ; Stack - ; drop TOS - VE_DROP: -0038d5 ff04 .dw $ff04 -0038d6 7264 -0038d7 706f .db "drop" -0038d8 38cb .dw VE_HEAD - .set VE_HEAD = VE_DROP - XT_DROP: -0038d9 38da .dw PFA_DROP - PFA_DROP: -0038da 9189 -0038db 9199 loadtos -0038dc cf28 jmp_ DO_NEXT - .include "words/rot.asm" - - ; Stack - ; rotate the three top level cells - VE_ROT: -0038dd ff03 .dw $ff03 -0038de 6f72 -0038df 0074 .db "rot",0 -0038e0 38d5 .dw VE_HEAD - .set VE_HEAD = VE_ROT - XT_ROT: -0038e1 38e2 .dw PFA_ROT - PFA_ROT: -0038e2 018c movw temp0, tosl -0038e3 9129 ld temp2, Y+ -0038e4 9139 ld temp3, Y+ -0038e5 9189 -0038e6 9199 loadtos - -0038e7 933a st -Y, temp3 -0038e8 932a st -Y, temp2 -0038e9 931a st -Y, temp1 -0038ea 930a st -Y, temp0 - -0038eb cf19 jmp_ DO_NEXT - .include "words/nip.asm" - - ; Stack - ; Remove Second of Stack - VE_NIP: -0038ec ff03 .dw $ff03 -0038ed 696e -0038ee 0070 .db "nip",0 -0038ef 38dd .dw VE_HEAD - .set VE_HEAD = VE_NIP - XT_NIP: -0038f0 38f1 .dw PFA_NIP - PFA_NIP: -0038f1 9622 adiw yl, 2 -0038f2 cf12 jmp_ DO_NEXT - ;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/r_from.asm" - - ; Stack - ; move TOR to TOS - VE_R_FROM: -0038f3 ff02 .dw $ff02 -0038f4 3e72 .db "r>" -0038f5 38ec .dw VE_HEAD - .set VE_HEAD = VE_R_FROM - XT_R_FROM: -0038f6 38f7 .dw PFA_R_FROM - PFA_R_FROM: -0038f7 939a -0038f8 938a savetos -0038f9 918f pop tosl -0038fa 919f pop tosh -0038fb cf09 jmp_ DO_NEXT - .include "words/to_r.asm" - - ; Stack - ; move TOS to TOR - VE_TO_R: -0038fc ff02 .dw $ff02 -0038fd 723e .db ">r" -0038fe 38f3 .dw VE_HEAD - .set VE_HEAD = VE_TO_R - XT_TO_R: -0038ff 3900 .dw PFA_TO_R - PFA_TO_R: -003900 939f push tosh -003901 938f push tosl -003902 9189 -003903 9199 loadtos -003904 cf00 jmp_ DO_NEXT - .include "words/r_fetch.asm" - - ; Stack - ; fetch content of TOR - VE_R_FETCH: -003905 ff02 .dw $ff02 -003906 4072 .db "r@" -003907 38fc .dw VE_HEAD - .set VE_HEAD = VE_R_FETCH - XT_R_FETCH: -003908 3909 .dw PFA_R_FETCH - PFA_R_FETCH: -003909 939a -00390a 938a savetos -00390b 918f pop tosl -00390c 919f pop tosh -00390d 939f push tosh -00390e 938f push tosl -00390f cef5 jmp_ DO_NEXT - - - .include "words/not-equal.asm" - - ; Compare - ; true if n1 is not equal to n2 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NOTEQUAL: -003910 ff02 .dw $ff02 -003911 3e3c .db "<>" -003912 3905 .dw VE_HEAD - .set VE_HEAD = VE_NOTEQUAL - XT_NOTEQUAL: -003913 3801 .dw DO_COLON - PFA_NOTEQUAL: - .endif - -003914 3fdf -003915 391a -003916 3820 .DW XT_EQUAL,XT_ZEROEQUAL,XT_EXIT - .include "words/equalzero.asm" - - ; Compare - ; compare with 0 (zero) - VE_ZEROEQUAL: -003917 ff02 .dw $ff02 -003918 3d30 .db "0=" -003919 3910 .dw VE_HEAD - .set VE_HEAD = VE_ZEROEQUAL - XT_ZEROEQUAL: -00391a 391b .dw PFA_ZEROEQUAL - PFA_ZEROEQUAL: -00391b 2b98 or tosh, tosl -00391c f5d1 brne PFA_ZERO1 -00391d c030 rjmp PFA_TRUE1 - .include "words/lesszero.asm" - - ; Compare - ; compare with zero - VE_ZEROLESS: -00391e ff02 .dw $ff02 -00391f 3c30 .db "0<" -003920 3917 .dw VE_HEAD - .set VE_HEAD = VE_ZEROLESS - XT_ZEROLESS: -003921 3922 .dw PFA_ZEROLESS - PFA_ZEROLESS: -003922 fd97 sbrc tosh,7 -003923 c02a rjmp PFA_TRUE1 -003924 c032 rjmp PFA_ZERO1 - .include "words/greaterzero.asm" - - ; Compare - ; true if n1 is greater than 0 - VE_GREATERZERO: -003925 ff02 .dw $ff02 -003926 3e30 .db "0>" -003927 391e .dw VE_HEAD - .set VE_HEAD = VE_GREATERZERO - XT_GREATERZERO: -003928 3929 .dw PFA_GREATERZERO - PFA_GREATERZERO: -003929 1582 cp tosl, zerol -00392a 0593 cpc tosh, zeroh -00392b f15c brlt PFA_ZERO1 -00392c f151 brbs 1, PFA_ZERO1 -00392d c020 rjmp PFA_TRUE1 - .include "words/d-greaterzero.asm" - - ; Compare - ; compares if a double double cell number is greater 0 - VE_DGREATERZERO: -00392e ff03 .dw $ff03 -00392f 3064 -003930 003e .db "d0>",0 -003931 3925 .dw VE_HEAD - .set VE_HEAD = VE_DGREATERZERO - XT_DGREATERZERO: -003932 3933 .dw PFA_DGREATERZERO - PFA_DGREATERZERO: -003933 1582 cp tosl, zerol -003934 0593 cpc tosh, zeroh -003935 9189 -003936 9199 loadtos -003937 0582 cpc tosl, zerol -003938 0593 cpc tosh, zeroh -003939 f0ec brlt PFA_ZERO1 -00393a f0e1 brbs 1, PFA_ZERO1 -00393b c012 rjmp PFA_TRUE1 - .include "words/d-lesszero.asm" - - ; Compare - ; compares if a double double cell number is less than 0 - VE_DXT_ZEROLESS: -00393c ff03 .dw $ff03 -00393d 3064 -00393e 003c .db "d0<",0 -00393f 392e .dw VE_HEAD - .set VE_HEAD = VE_DXT_ZEROLESS - XT_DXT_ZEROLESS: -003940 3941 .dw PFA_DXT_ZEROLESS - PFA_DXT_ZEROLESS: -003941 9622 adiw Y,2 -003942 fd97 sbrc tosh,7 -003943 940c 394e jmp PFA_TRUE1 -003945 940c 3957 jmp PFA_ZERO1 - - .include "words/true.asm" - - ; Arithmetics - ; leaves the value -1 (true) on TOS - VE_TRUE: -003947 ff04 .dw $ff04 -003948 7274 -003949 6575 .db "true" -00394a 393c .dw VE_HEAD - .set VE_HEAD = VE_TRUE - XT_TRUE: -00394b 394c .dw PFA_TRUE - PFA_TRUE: -00394c 939a -00394d 938a savetos - PFA_TRUE1: -00394e ef8f ser tosl -00394f ef9f ser tosh -003950 ceb4 jmp_ DO_NEXT - .include "words/zero.asm" - - ; Arithmetics - ; place a value 0 on TOS - VE_ZERO: -003951 ff01 .dw $ff01 -003952 0030 .db "0",0 -003953 3947 .dw VE_HEAD - .set VE_HEAD = VE_ZERO - XT_ZERO: -003954 3955 .dw PFA_ZERO - PFA_ZERO: -003955 939a -003956 938a savetos - PFA_ZERO1: -003957 01c1 movw tosl, zerol -003958 ceac jmp_ DO_NEXT - .include "words/uless.asm" - - ; Compare - ; true if u1 < u2 (unsigned) - VE_ULESS: -003959 ff02 .dw $ff02 -00395a 3c75 .db "u<" -00395b 3951 .dw VE_HEAD - .set VE_HEAD = VE_ULESS - XT_ULESS: -00395c 395d .dw PFA_ULESS - PFA_ULESS: -00395d 9129 ld temp2, Y+ -00395e 9139 ld temp3, Y+ -00395f 1782 cp tosl, temp2 -003960 0793 cpc tosh, temp3 -003961 f3a8 brlo PFA_ZERO1 -003962 f3a1 brbs 1, PFA_ZERO1 -003963 cfea jmp_ PFA_TRUE1 - .include "words/u-greater.asm" - - ; Compare - ; true if u1 > u2 (unsigned) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UGREATER: -003964 ff02 .dw $ff02 -003965 3e75 .db "u>" -003966 3959 .dw VE_HEAD - .set VE_HEAD = VE_UGREATER - XT_UGREATER: -003967 3801 .dw DO_COLON - PFA_UGREATER: - .endif -003968 38c4 .DW XT_SWAP -003969 395c .dw XT_ULESS -00396a 3820 .dw XT_EXIT - .include "words/less.asm" - - ; Compare - ; true if n1 is less than n2 - VE_LESS: -00396b ff01 .dw $ff01 -00396c 003c .db "<",0 -00396d 3964 .dw VE_HEAD - .set VE_HEAD = VE_LESS - XT_LESS: -00396e 396f .dw PFA_LESS - PFA_LESS: -00396f 9129 ld temp2, Y+ -003970 9139 ld temp3, Y+ -003971 1728 cp temp2, tosl -003972 0739 cpc temp3, tosh - PFA_LESSDONE: -003973 f71c brge PFA_ZERO1 -003974 cfd9 rjmp PFA_TRUE1 - .include "words/greater.asm" - - ; Compare - ; flag is true if n1 is greater than n2 - VE_GREATER: -003975 ff01 .dw $ff01 -003976 003e .db ">",0 -003977 396b .dw VE_HEAD - .set VE_HEAD = VE_GREATER - XT_GREATER: -003978 3979 .dw PFA_GREATER - PFA_GREATER: -003979 9129 ld temp2, Y+ -00397a 9139 ld temp3, Y+ -00397b 1728 cp temp2, tosl -00397c 0739 cpc temp3, tosh - PFA_GREATERDONE: -00397d f2cc brlt PFA_ZERO1 -00397e f2c1 brbs 1, PFA_ZERO1 -00397f cfce rjmp PFA_TRUE1 - - .include "words/log2.asm" - - ; Arithmetics - ; logarithm to base 2 or highest set bitnumber - VE_LOG2: -003980 ff04 .dw $ff04 -003981 6f6c -003982 3267 .db "log2" -003983 3975 .dw VE_HEAD - .set VE_HEAD = VE_LOG2 - XT_LOG2: -003984 3985 .dw PFA_LOG2 - PFA_LOG2: -003985 01fc movw zl, tosl -003986 2799 clr tosh -003987 e180 ldi tosl, 16 - PFA_LOG2_1: -003988 958a dec tosl -003989 f022 brmi PFA_LOG2_2 ; wrong data -00398a 0fee lsl zl -00398b 1fff rol zh -00398c f7d8 brcc PFA_LOG2_1 -00398d ce77 jmp_ DO_NEXT - - PFA_LOG2_2: -00398e 959a dec tosh -00398f ce75 jmp_ DO_NEXT - .include "words/minus.asm" - - ; Arithmetics - ; subtract n2 from n1 - VE_MINUS: -003990 ff01 .dw $ff01 -003991 002d .db "-",0 -003992 3980 .dw VE_HEAD - .set VE_HEAD = VE_MINUS - XT_MINUS: -003993 3994 .dw PFA_MINUS - PFA_MINUS: -003994 9109 ld temp0, Y+ -003995 9119 ld temp1, Y+ -003996 1b08 sub temp0, tosl -003997 0b19 sbc temp1, tosh -003998 01c8 movw tosl, temp0 -003999 ce6b jmp_ DO_NEXT - .include "words/plus.asm" - - ; Arithmetics - ; add n1 and n2 - VE_PLUS: -00399a ff01 .dw $ff01 -00399b 002b .db "+",0 -00399c 3990 .dw VE_HEAD - .set VE_HEAD = VE_PLUS - XT_PLUS: -00399d 399e .dw PFA_PLUS - PFA_PLUS: -00399e 9109 ld temp0, Y+ -00399f 9119 ld temp1, Y+ -0039a0 0f80 add tosl, temp0 -0039a1 1f91 adc tosh, temp1 -0039a2 ce62 jmp_ DO_NEXT - .include "words/mstar.asm" - - ; Arithmetics - ; multiply 2 cells to a double cell - VE_MSTAR: -0039a3 ff02 .dw $ff02 -0039a4 2a6d .db "m*" -0039a5 399a .dw VE_HEAD - .set VE_HEAD = VE_MSTAR - XT_MSTAR: -0039a6 39a7 .dw PFA_MSTAR - PFA_MSTAR: -0039a7 018c movw temp0, tosl -0039a8 9189 -0039a9 9199 loadtos -0039aa 019c movw temp2, tosl - ; high cell ah*bh -0039ab 0231 muls temp3, temp1 -0039ac 0170 movw temp4, r0 - ; low cell al*bl -0039ad 9f20 mul temp2, temp0 -0039ae 01c0 movw tosl, r0 - ; signed ah*bl -0039af 0330 mulsu temp3, temp0 -0039b0 08f3 sbc temp5, zeroh -0039b1 0d90 add tosh, r0 -0039b2 1ce1 adc temp4, r1 -0039b3 1cf3 adc temp5, zeroh - - ; signed al*bh -0039b4 0312 mulsu temp1, temp2 -0039b5 08f3 sbc temp5, zeroh -0039b6 0d90 add tosh, r0 -0039b7 1ce1 adc temp4, r1 -0039b8 1cf3 adc temp5, zeroh - -0039b9 939a -0039ba 938a savetos -0039bb 01c7 movw tosl, temp4 -0039bc ce48 jmp_ DO_NEXT - .include "words/umslashmod.asm" - - ; Arithmetics - ; unsigned division ud / u2 with remainder - VE_UMSLASHMOD: -0039bd ff06 .dw $ff06 -0039be 6d75 -0039bf 6d2f -0039c0 646f .db "um/mod" -0039c1 39a3 .dw VE_HEAD - .set VE_HEAD = VE_UMSLASHMOD - XT_UMSLASHMOD: -0039c2 39c3 .dw PFA_UMSLASHMOD - PFA_UMSLASHMOD: -0039c3 017c movw temp4, tosl - -0039c4 9129 ld temp2, Y+ -0039c5 9139 ld temp3, Y+ - -0039c6 9109 ld temp0, Y+ -0039c7 9119 ld temp1, Y+ - - ;; unsigned 32/16 -> 16r16 divide - - PFA_UMSLASHMODmod: - - ; set loop counter -0039c8 e140 ldi temp6,$10 - - PFA_UMSLASHMODmod_loop: - ; shift left, saving high bit -0039c9 2755 clr temp7 -0039ca 0f00 lsl temp0 -0039cb 1f11 rol temp1 -0039cc 1f22 rol temp2 -0039cd 1f33 rol temp3 -0039ce 1f55 rol temp7 - - ; try subtracting divisor -0039cf 152e cp temp2, temp4 -0039d0 053f cpc temp3, temp5 -0039d1 0552 cpc temp7,zerol - -0039d2 f018 brcs PFA_UMSLASHMODmod_loop_control - - PFA_UMSLASHMODmod_subtract: - ; dividend is large enough - ; do the subtraction for real - ; and set lowest bit -0039d3 9503 inc temp0 -0039d4 192e sub temp2, temp4 -0039d5 093f sbc temp3, temp5 - - PFA_UMSLASHMODmod_loop_control: -0039d6 954a dec temp6 -0039d7 f789 brne PFA_UMSLASHMODmod_loop - - PFA_UMSLASHMODmod_done: - ; put remainder on stack -0039d8 933a st -Y,temp3 -0039d9 932a st -Y,temp2 - - ; put quotient on stack -0039da 01c8 movw tosl, temp0 -0039db ce29 jmp_ DO_NEXT - .include "words/umstar.asm" - - ; Arithmetics - ; multiply 2 unsigned cells to a double cell - VE_UMSTAR: -0039dc ff03 .dw $ff03 -0039dd 6d75 -0039de 002a .db "um*",0 -0039df 39bd .dw VE_HEAD - .set VE_HEAD = VE_UMSTAR - XT_UMSTAR: -0039e0 39e1 .dw PFA_UMSTAR - PFA_UMSTAR: -0039e1 018c movw temp0, tosl -0039e2 9189 -0039e3 9199 loadtos - ; result: (temp3*temp1)* 65536 + (temp3*temp0 + temp1*temp2) * 256 + (temp0 * temp2) - ; low bytes -0039e4 9f80 mul tosl,temp0 -0039e5 01f0 movw zl, r0 -0039e6 2722 clr temp2 -0039e7 2733 clr temp3 - ; middle bytes -0039e8 9f90 mul tosh, temp0 -0039e9 0df0 add zh, r0 -0039ea 1d21 adc temp2, r1 -0039eb 1d33 adc temp3, zeroh - -0039ec 9f81 mul tosl, temp1 -0039ed 0df0 add zh, r0 -0039ee 1d21 adc temp2, r1 -0039ef 1d33 adc temp3, zeroh - -0039f0 9f91 mul tosh, temp1 -0039f1 0d20 add temp2, r0 -0039f2 1d31 adc temp3, r1 -0039f3 01cf movw tosl, zl -0039f4 939a -0039f5 938a savetos -0039f6 01c9 movw tosl, temp2 -0039f7 ce0d jmp_ DO_NEXT - - .include "words/invert.asm" - - ; Arithmetics - ; 1-complement of TOS - VE_INVERT: -0039f8 ff06 .dw $ff06 -0039f9 6e69 -0039fa 6576 -0039fb 7472 .db "invert" -0039fc 39dc .dw VE_HEAD - .set VE_HEAD = VE_INVERT - XT_INVERT: -0039fd 39fe .dw PFA_INVERT - PFA_INVERT: -0039fe 9580 com tosl -0039ff 9590 com tosh -003a00 ce04 jmp_ DO_NEXT - .include "words/2slash.asm" - - ; Arithmetics - ; arithmetic shift right - VE_2SLASH: -003a01 ff02 .dw $ff02 -003a02 2f32 .db "2/" -003a03 39f8 .dw VE_HEAD - .set VE_HEAD = VE_2SLASH - XT_2SLASH: -003a04 3a05 .dw PFA_2SLASH - PFA_2SLASH: -003a05 9595 asr tosh -003a06 9587 ror tosl -003a07 cdfd jmp_ DO_NEXT - .include "words/2star.asm" - - ; Arithmetics - ; arithmetic shift left, filling with zero - VE_2STAR: -003a08 ff02 .dw $ff02 -003a09 2a32 .db "2*" -003a0a 3a01 .dw VE_HEAD - .set VE_HEAD = VE_2STAR - XT_2STAR: -003a0b 3a0c .dw PFA_2STAR - PFA_2STAR: -003a0c 0f88 lsl tosl -003a0d 1f99 rol tosh -003a0e cdf6 jmp_ DO_NEXT - .include "words/and.asm" - - ; Logic - ; bitwise and - VE_AND: -003a0f ff03 .dw $ff03 -003a10 6e61 -003a11 0064 .db "and",0 -003a12 3a08 .dw VE_HEAD - .set VE_HEAD = VE_AND - XT_AND: -003a13 3a14 .dw PFA_AND - PFA_AND: -003a14 9109 ld temp0, Y+ -003a15 9119 ld temp1, Y+ -003a16 2380 and tosl, temp0 -003a17 2391 and tosh, temp1 -003a18 cdec jmp_ DO_NEXT - .include "words/or.asm" - - ; Logic - ; logical or - VE_OR: -003a19 ff02 .dw $ff02 -003a1a 726f .db "or" -003a1b 3a0f .dw VE_HEAD - .set VE_HEAD = VE_OR - XT_OR: -003a1c 3a1d .dw PFA_OR - PFA_OR: -003a1d 9109 ld temp0, Y+ -003a1e 9119 ld temp1, Y+ -003a1f 2b80 or tosl, temp0 -003a20 2b91 or tosh, temp1 -003a21 cde3 jmp_ DO_NEXT - - .include "words/xor.asm" - - ; Logic - ; exclusive or - VE_XOR: -003a22 ff03 .dw $ff03 -003a23 6f78 -003a24 0072 .db "xor",0 -003a25 3a19 .dw VE_HEAD - .set VE_HEAD = VE_XOR - XT_XOR: -003a26 3a27 .dw PFA_XOR - PFA_XOR: -003a27 9109 ld temp0, Y+ -003a28 9119 ld temp1, Y+ -003a29 2780 eor tosl, temp0 -003a2a 2791 eor tosh, temp1 -003a2b cdd9 jmp_ DO_NEXT - - .include "words/1plus.asm" - - ; Arithmetics - ; optimized increment - VE_1PLUS: -003a2c ff02 .dw $ff02 -003a2d 2b31 .db "1+" -003a2e 3a22 .dw VE_HEAD - .set VE_HEAD = VE_1PLUS - XT_1PLUS: -003a2f 3a30 .dw PFA_1PLUS - PFA_1PLUS: -003a30 9601 adiw tosl,1 -003a31 cdd3 jmp_ DO_NEXT - .include "words/1minus.asm" - - ; Arithmetics - ; optimized decrement - VE_1MINUS: -003a32 ff02 .dw $ff02 -003a33 2d31 .db "1-" -003a34 3a2c .dw VE_HEAD - .set VE_HEAD = VE_1MINUS - XT_1MINUS: -003a35 3a36 .dw PFA_1MINUS - PFA_1MINUS: -003a36 9701 sbiw tosl, 1 -003a37 cdcd jmp_ DO_NEXT - .include "words/q-negate.asm" - - ; 0< IF NEGATE THEN ; ...a common factor - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QNEGATE: -003a38 ff07 .dw $ff07 -003a39 6e3f -003a3a 6765 -003a3b 7461 -../../common\words/q-negate.asm(11): warning: .cseg .db misalignment - padding zero byte -003a3c 0065 .db "?negate" -003a3d 3a32 .dw VE_HEAD - .set VE_HEAD = VE_QNEGATE - XT_QNEGATE: -003a3e 3801 .dw DO_COLON - PFA_QNEGATE: - - .endif -003a3f 3921 -003a40 3836 .DW XT_ZEROLESS,XT_DOCONDBRANCH -003a41 3a43 DEST(QNEG1) -003a42 3e27 .DW XT_NEGATE -003a43 3820 QNEG1: .DW XT_EXIT - .include "words/lshift.asm" - - ; Arithmetics - ; logically shift n1 left n2 times - VE_LSHIFT: -003a44 ff06 .dw $ff06 -003a45 736c -003a46 6968 -003a47 7466 .db "lshift" -003a48 3a38 .dw VE_HEAD - .set VE_HEAD = VE_LSHIFT - XT_LSHIFT: -003a49 3a4a .dw PFA_LSHIFT - PFA_LSHIFT: -003a4a 01fc movw zl, tosl -003a4b 9189 -003a4c 9199 loadtos - PFA_LSHIFT1: -003a4d 9731 sbiw zl, 1 -003a4e f01a brmi PFA_LSHIFT2 -003a4f 0f88 lsl tosl -003a50 1f99 rol tosh -003a51 cffb rjmp PFA_LSHIFT1 - PFA_LSHIFT2: -003a52 cdb2 jmp_ DO_NEXT - - .include "words/rshift.asm" - - ; Arithmetics - ; shift n1 n2-times logically right - VE_RSHIFT: -003a53 ff06 .dw $ff06 -003a54 7372 -003a55 6968 -003a56 7466 .db "rshift" -003a57 3a44 .dw VE_HEAD - .set VE_HEAD = VE_RSHIFT - XT_RSHIFT: -003a58 3a59 .dw PFA_RSHIFT - PFA_RSHIFT: -003a59 01fc movw zl, tosl -003a5a 9189 -003a5b 9199 loadtos - PFA_RSHIFT1: -003a5c 9731 sbiw zl, 1 -003a5d f01a brmi PFA_RSHIFT2 -003a5e 9596 lsr tosh -003a5f 9587 ror tosl -003a60 cffb rjmp PFA_RSHIFT1 - PFA_RSHIFT2: -003a61 cda3 jmp_ DO_NEXT - - .include "words/plusstore.asm" - - ; Arithmetics - ; add n to content of RAM address a-addr - VE_PLUSSTORE: -003a62 ff02 .dw $ff02 -003a63 212b .db "+!" -003a64 3a53 .dw VE_HEAD - .set VE_HEAD = VE_PLUSSTORE - XT_PLUSSTORE: -003a65 3a66 .dw PFA_PLUSSTORE - PFA_PLUSSTORE: -003a66 01fc movw zl, tosl -003a67 9189 -003a68 9199 loadtos -003a69 8120 ldd temp2, Z+0 -003a6a 8131 ldd temp3, Z+1 -003a6b 0f82 add tosl, temp2 -003a6c 1f93 adc tosh, temp3 -003a6d 8380 std Z+0, tosl -003a6e 8391 std Z+1, tosh -003a6f 9189 -003a70 9199 loadtos -003a71 cd93 jmp_ DO_NEXT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/rpfetch.asm" - - ; Stack - ; current return stack pointer address - VE_RP_FETCH: -003a72 ff03 .dw $ff03 -003a73 7072 -003a74 0040 .db "rp@",0 -003a75 3a62 .dw VE_HEAD - .set VE_HEAD = VE_RP_FETCH - XT_RP_FETCH: -003a76 3a77 .dw PFA_RP_FETCH - PFA_RP_FETCH: -003a77 939a -003a78 938a savetos -003a79 b78d in tosl, SPL -003a7a b79e in tosh, SPH -003a7b cd89 jmp_ DO_NEXT - .include "words/rpstore.asm" - - ; Stack - ; set return stack pointer - VE_RP_STORE: -003a7c ff03 .dw $ff03 -003a7d 7072 -003a7e 0021 .db "rp!",0 -003a7f 3a72 .dw VE_HEAD - .set VE_HEAD = VE_RP_STORE - XT_RP_STORE: -003a80 3a81 .dw PFA_RP_STORE - PFA_RP_STORE: -003a81 b72f in temp2, SREG -003a82 94f8 cli -003a83 bf8d out SPL, tosl -003a84 bf9e out SPH, tosh -003a85 bf2f out SREG, temp2 -003a86 9189 -003a87 9199 loadtos -003a88 cd7c jmp_ DO_NEXT - .include "words/spfetch.asm" - - ; Stack - ; current data stack pointer - VE_SP_FETCH: -003a89 ff03 .dw $ff03 -003a8a 7073 -003a8b 0040 .db "sp@",0 -003a8c 3a7c .dw VE_HEAD - .set VE_HEAD = VE_SP_FETCH - XT_SP_FETCH: -003a8d 3a8e .dw PFA_SP_FETCH - PFA_SP_FETCH: -003a8e 939a -003a8f 938a savetos -003a90 01ce movw tosl, yl -003a91 cd73 jmp_ DO_NEXT - .include "words/spstore.asm" - - ; Stack - ; set data stack pointer to addr - VE_SP_STORE: -003a92 ff03 .dw $ff03 -003a93 7073 -003a94 0021 .db "sp!",0 -003a95 3a89 .dw VE_HEAD - .set VE_HEAD = VE_SP_STORE - XT_SP_STORE: -003a96 3a97 .dw PFA_SP_STORE - PFA_SP_STORE: -003a97 01ec movw yl, tosl -003a98 9189 -003a99 9199 loadtos -003a9a cd6a jmp_ DO_NEXT - - .include "words/dodo.asm" - - ; System - ; runtime of do - ;VE_DODO: - ; .dw $ff04 - ; .db "(do)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DODO - XT_DODO: -003a9b 3a9c .dw PFA_DODO - PFA_DODO: -003a9c 9129 ld temp2, Y+ -003a9d 9139 ld temp3, Y+ ; limit - PFA_DODO1: -003a9e e8e0 ldi zl, $80 -003a9f 0f3e add temp3, zl -003aa0 1b82 sub tosl, temp2 -003aa1 0b93 sbc tosh, temp3 - -003aa2 933f push temp3 -003aa3 932f push temp2 ; limit ( --> limit + $8000) -003aa4 939f push tosh -003aa5 938f push tosl ; start -> index ( --> index - (limit - $8000) -003aa6 9189 -003aa7 9199 loadtos -003aa8 cd5c jmp_ DO_NEXT - .include "words/i.asm" - - ; Compiler - ; current loop counter - VE_I: -003aa9 ff01 .dw $FF01 -003aaa 0069 .db "i",0 -003aab 3a92 .dw VE_HEAD - .set VE_HEAD = VE_I - XT_I: -003aac 3aad .dw PFA_I - PFA_I: -003aad 939a -003aae 938a savetos -003aaf 918f pop tosl -003ab0 919f pop tosh ; index -003ab1 91ef pop zl -003ab2 91ff pop zh ; limit -003ab3 93ff push zh -003ab4 93ef push zl -003ab5 939f push tosh -003ab6 938f push tosl -003ab7 0f8e add tosl, zl -003ab8 1f9f adc tosh, zh -003ab9 cd4b jmp_ DO_NEXT - .include "words/doplusloop.asm" - - ; System - ; runtime of +loop - ;VE_DOPLUSLOOP: - ; .dw $ff07 - ; .db "(+loop)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOPLUSLOOP - XT_DOPLUSLOOP: -003aba 3abb .dw PFA_DOPLUSLOOP - PFA_DOPLUSLOOP: -003abb 91ef pop zl -003abc 91ff pop zh -003abd 0fe8 add zl, tosl -003abe 1ff9 adc zh, tosh -003abf 9189 -003ac0 9199 loadtos -003ac1 f01b brvs PFA_DOPLUSLOOP_LEAVE - ; next cycle - PFA_DOPLUSLOOP_NEXT: - ; next iteration -003ac2 93ff push zh -003ac3 93ef push zl -003ac4 cd6b rjmp PFA_DOBRANCH ; read next cell from dictionary and jump to its destination - PFA_DOPLUSLOOP_LEAVE: -003ac5 910f pop temp0 -003ac6 911f pop temp1 ; remove limit -003ac7 9611 adiw xl, 1 ; skip branch-back address -003ac8 cd3c jmp_ DO_NEXT - .include "words/doloop.asm" - - ; System - ; runtime of loop - ;VE_DOLOOP: - ; .dw $ff06 - ; .db "(loop)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOLOOP - XT_DOLOOP: -003ac9 3aca .dw PFA_DOLOOP - PFA_DOLOOP: -003aca 91ef pop zl -003acb 91ff pop zh -003acc 9631 adiw zl,1 -003acd f3bb brvs PFA_DOPLUSLOOP_LEAVE -003ace cff3 jmp_ PFA_DOPLUSLOOP_NEXT - .include "words/unloop.asm" - - ; Compiler - ; remove loop-sys, exit the loop and continue execution after it - VE_UNLOOP: -003acf ff06 .dw $ff06 -003ad0 6e75 -003ad1 6f6c -003ad2 706f .db "unloop" -003ad3 3aa9 .dw VE_HEAD - .set VE_HEAD = VE_UNLOOP - XT_UNLOOP: -003ad4 3ad5 .dw PFA_UNLOOP - PFA_UNLOOP: -003ad5 911f pop temp1 -003ad6 910f pop temp0 -003ad7 911f pop temp1 -003ad8 910f pop temp0 -003ad9 cd2b jmp_ DO_NEXT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;; - - .include "words/cmove_g.asm" - - ; Memory - ; copy data in RAM from higher to lower addresses. - VE_CMOVE_G: -003ada ff06 .dw $ff06 -003adb 6d63 -003adc 766f -003add 3e65 .db "cmove>" -003ade 3acf .dw VE_HEAD - .set VE_HEAD = VE_CMOVE_G - XT_CMOVE_G: -003adf 3ae0 .dw PFA_CMOVE_G - PFA_CMOVE_G: -003ae0 93bf push xh -003ae1 93af push xl -003ae2 91e9 ld zl, Y+ -003ae3 91f9 ld zh, Y+ ; addr-to -003ae4 91a9 ld xl, Y+ -003ae5 91b9 ld xh, Y+ ; addr-from -003ae6 2f09 mov temp0, tosh -003ae7 2b08 or temp0, tosl -003ae8 f041 brbs 1, PFA_CMOVE_G1 -003ae9 0fe8 add zl, tosl -003aea 1ff9 adc zh, tosh -003aeb 0fa8 add xl, tosl -003aec 1fb9 adc xh, tosh - PFA_CMOVE_G2: -003aed 911e ld temp1, -X -003aee 9312 st -Z, temp1 -003aef 9701 sbiw tosl, 1 -003af0 f7e1 brbc 1, PFA_CMOVE_G2 - PFA_CMOVE_G1: -003af1 91af pop xl -003af2 91bf pop xh -003af3 9189 -003af4 9199 loadtos -003af5 cd0f jmp_ DO_NEXT - .include "words/byteswap.asm" - - ; Arithmetics - ; exchange the bytes of the TOS - VE_BYTESWAP: -003af6 ff02 .dw $ff02 -003af7 3c3e .db "><" -003af8 3ada .dw VE_HEAD - .set VE_HEAD = VE_BYTESWAP - XT_BYTESWAP: -003af9 3afa .dw PFA_BYTESWAP - PFA_BYTESWAP: -003afa 2f09 mov temp0, tosh -003afb 2f98 mov tosh, tosl -003afc 2f80 mov tosl, temp0 -003afd cd07 jmp_ DO_NEXT - .include "words/up.asm" - - ; System Variable - ; get user area pointer - VE_UP_FETCH: -003afe ff03 .dw $ff03 -003aff 7075 -003b00 0040 .db "up@",0 -003b01 3af6 .dw VE_HEAD - .set VE_HEAD = VE_UP_FETCH - XT_UP_FETCH: -003b02 3b03 .dw PFA_UP_FETCH - PFA_UP_FETCH: -003b03 939a -003b04 938a savetos -003b05 01c2 movw tosl, upl -003b06 ccfe jmp_ DO_NEXT - - ; ( addr -- ) - ; System Variable - ; set user area pointer - VE_UP_STORE: -003b07 ff03 .dw $ff03 -003b08 7075 -003b09 0021 .db "up!",0 -003b0a 3afe .dw VE_HEAD - .set VE_HEAD = VE_UP_STORE - XT_UP_STORE: -003b0b 3b0c .dw PFA_UP_STORE - PFA_UP_STORE: -003b0c 012c movw upl, tosl -003b0d 9189 -003b0e 9199 loadtos -003b0f ccf5 jmp_ DO_NEXT - .include "words/1ms.asm" - - ; Time - ; busy waits (almost) exactly 1 millisecond - VE_1MS: -003b10 ff03 .dw $ff03 -003b11 6d31 -003b12 0073 .db "1ms",0 -003b13 3b07 .dw VE_HEAD - .set VE_HEAD = VE_1MS - XT_1MS: -003b14 3b15 .dw PFA_1MS - PFA_1MS: -003b15 ede0 -003b16 e0f7 -003b17 9731 -003b18 f7f1 delay 1000 -003b19 cceb jmp_ DO_NEXT - .include "words/2to_r.asm" - - ; Stack - ; move DTOS to TOR - VE_2TO_R: -003b1a ff03 .dw $ff03 -003b1b 3e32 -003b1c 0072 .db "2>r",0 -003b1d 3b10 .dw VE_HEAD - .set VE_HEAD = VE_2TO_R - XT_2TO_R: -003b1e 3b1f .dw PFA_2TO_R - PFA_2TO_R: -003b1f 01fc movw zl, tosl -003b20 9189 -003b21 9199 loadtos -003b22 939f push tosh -003b23 938f push tosl -003b24 93ff push zh -003b25 93ef push zl -003b26 9189 -003b27 9199 loadtos -003b28 ccdc jmp_ DO_NEXT - .include "words/2r_from.asm" - - ; Stack - ; move DTOR to TOS - VE_2R_FROM: -003b29 ff03 .dw $ff03 -003b2a 7232 -003b2b 003e .db "2r>",0 -003b2c 3b1a .dw VE_HEAD - .set VE_HEAD = VE_2R_FROM - XT_2R_FROM: -003b2d 3b2e .dw PFA_2R_FROM - PFA_2R_FROM: -003b2e 939a -003b2f 938a savetos -003b30 91ef pop zl -003b31 91ff pop zh -003b32 918f pop tosl -003b33 919f pop tosh -003b34 939a -003b35 938a savetos -003b36 01cf movw tosl, zl -003b37 cccd jmp_ DO_NEXT - - .include "words/store-e.asm" - - ; Memory - ; write n (2bytes) to eeprom address - VE_STOREE: -003b38 ff02 .dw $ff02 -003b39 6521 .db "!e" -003b3a 3b29 .dw VE_HEAD - .set VE_HEAD = VE_STOREE - XT_STOREE: -003b3b 3b3c .dw PFA_STOREE - PFA_STOREE: - .if WANT_UNIFIED == 1 - .endif - PFA_STOREE0: -003b3c 01fc movw zl, tosl -003b3d 9189 -003b3e 9199 loadtos -003b3f b72f in_ temp2, SREG -003b40 94f8 cli -003b41 d028 rcall PFA_FETCHE2 -003b42 b30d in_ temp0, EEDR -003b43 1708 cp temp0,tosl -003b44 f009 breq PFA_STOREE3 -003b45 d00b rcall PFA_STOREE1 - PFA_STOREE3: -003b46 9631 adiw zl,1 -003b47 d022 rcall PFA_FETCHE2 -003b48 b30d in_ temp0, EEDR -003b49 1709 cp temp0,tosh -003b4a f011 breq PFA_STOREE4 -003b4b 2f89 mov tosl, tosh -003b4c d004 rcall PFA_STOREE1 - PFA_STOREE4: -003b4d bf2f out_ SREG, temp2 -003b4e 9189 -003b4f 9199 loadtos -003b50 ccb4 jmp_ DO_NEXT - - PFA_STOREE1: -003b51 99e1 sbic EECR, EEPE -003b52 cffe rjmp PFA_STOREE1 - - PFA_STOREE2: ; estore_wait_low_spm: -003b53 b707 in_ temp0, SPMCSR -003b54 fd00 sbrc temp0,SPMEN -003b55 cffd rjmp PFA_STOREE2 - -003b56 bbff out_ EEARH,zh -003b57 bbee out_ EEARL,zl -003b58 bb8d out_ EEDR, tosl -003b59 9ae2 sbi EECR,EEMPE -003b5a 9ae1 sbi EECR,EEPE - -003b5b 9508 ret - .if WANT_UNIFIED == 1 - .endif - .include "words/fetch-e.asm" - - ; Memory - ; read 1 cell from eeprom - VE_FETCHE: -003b5c ff02 .dw $ff02 -003b5d 6540 .db "@e" -003b5e 3b38 .dw VE_HEAD - .set VE_HEAD = VE_FETCHE - XT_FETCHE: -003b5f 3b60 .dw PFA_FETCHE - PFA_FETCHE: - .if WANT_UNIFIED == 1 - .endif - PFA_FETCHE1: -003b60 b72f in_ temp2, SREG -003b61 94f8 cli -003b62 01fc movw zl, tosl -003b63 d006 rcall PFA_FETCHE2 -003b64 b38d in_ tosl, EEDR - -003b65 9631 adiw zl,1 - -003b66 d003 rcall PFA_FETCHE2 -003b67 b39d in_ tosh, EEDR -003b68 bf2f out_ SREG, temp2 -003b69 cc9b jmp_ DO_NEXT - - PFA_FETCHE2: -003b6a 99e1 sbic EECR, EEPE -003b6b cffe rjmp PFA_FETCHE2 - -003b6c bbff out_ EEARH,zh -003b6d bbee out_ EEARL,zl - -003b6e 9ae0 sbi EECR,EERE -003b6f 9508 ret - - .if WANT_UNIFIED == 1 - .endif - .include "words/store-i.asm" - - ; System Value - ; Deferred action to write a single 16bit cell to flash - VE_STOREI: -003b70 ff02 .dw $ff02 -003b71 6921 .db "!i" -003b72 3b5c .dw VE_HEAD - .set VE_HEAD = VE_STOREI - XT_STOREI: -003b73 3dff .dw PFA_DODEFER1 - PFA_STOREI: -003b74 005c .dw EE_STOREI -003b75 3da0 .dw XT_EDEFERFETCH -003b76 3daa .dw XT_EDEFERSTORE - .if FLASHEND > $10000 - .else - .include "words/store-i_nrww.asm" - - ; Memory - ; writes n to flash memory using assembly code (code to be placed in boot loader section) - VE_DO_STOREI_NRWW: -003b77 ff09 .dw $ff09 -003b78 2128 -003b79 2d69 -003b7a 726e -003b7b 7777 -003b7c 0029 .db "(!i-nrww)",0 -003b7d 3b70 .dw VE_HEAD - .set VE_HEAD = VE_DO_STOREI_NRWW - XT_DO_STOREI: -003b7e 3b7f .dw PFA_DO_STOREI_NRWW - PFA_DO_STOREI_NRWW: - ; store status register -003b7f b71f in temp1,SREG -003b80 931f push temp1 -003b81 94f8 cli - -003b82 019c movw temp2, tosl ; save the (word) address -003b83 9189 -003b84 9199 loadtos ; get the new value for the flash cell -003b85 93af push xl -003b86 93bf push xh -003b87 93cf push yl -003b88 93df push yh -003b89 d009 rcall DO_STOREI_atmega -003b8a 91df pop yh -003b8b 91cf pop yl -003b8c 91bf pop xh -003b8d 91af pop xl - ; finally clear the stack -003b8e 9189 -003b8f 9199 loadtos -003b90 911f pop temp1 - ; restore status register (and interrupt enable flag) -003b91 bf1f out SREG,temp1 - -003b92 cc72 jmp_ DO_NEXT - - ; - DO_STOREI_atmega: - ; write data to temp page buffer - ; use the values in tosl/tosh at the - ; appropiate place -003b93 d010 rcall pageload - - ; erase page if needed - ; it is needed if a bit goes from 0 to 1 -003b94 94e0 com temp4 -003b95 94f0 com temp5 -003b96 218e and tosl, temp4 -003b97 219f and tosh, temp5 -003b98 2b98 or tosh, tosl -003b99 f019 breq DO_STOREI_writepage -003b9a 01f9 movw zl, temp2 -003b9b e002 ldi temp0,(1<8000 - .elif AMFORTH_NRWW_SIZE>4000 - .include "dict/core_4k.inc" - - ; in a short distance to DO_NEXT - .include "words/n_to_r.asm" - - ; Stack - ; move n items from data stack to return stack - VE_N_TO_R: -003bd2 ff03 .dw $ff03 -003bd3 3e6e -003bd4 0072 .db "n>r",0 -003bd5 3bc8 .dw VE_HEAD - .set VE_HEAD = VE_N_TO_R - XT_N_TO_R: -003bd6 3bd7 .dw PFA_N_TO_R - PFA_N_TO_R: -003bd7 01fc movw zl, tosl -003bd8 2f08 mov temp0, tosl - PFA_N_TO_R1: -003bd9 9189 -003bda 9199 loadtos -003bdb 939f push tosh -003bdc 938f push tosl -003bdd 950a dec temp0 -003bde f7d1 brne PFA_N_TO_R1 -003bdf 93ef push zl -003be0 93ff push zh -003be1 9189 -003be2 9199 loadtos -003be3 cc21 jmp_ DO_NEXT - .include "words/n_r_from.asm" - - ; Stack - ; move n items from return stack to data stack - VE_N_R_FROM: -003be4 ff03 .dw $ff03 -003be5 726e -003be6 003e .db "nr>",0 -003be7 3bd2 .dw VE_HEAD - .set VE_HEAD = VE_N_R_FROM - XT_N_R_FROM: -003be8 3be9 .dw PFA_N_R_FROM - PFA_N_R_FROM: -003be9 939a -003bea 938a savetos -003beb 91ff pop zh -003bec 91ef pop zl -003bed 2f0e mov temp0, zl - PFA_N_R_FROM1: -003bee 918f pop tosl -003bef 919f pop tosh -003bf0 939a -003bf1 938a savetos -003bf2 950a dec temp0 -003bf3 f7d1 brne PFA_N_R_FROM1 -003bf4 01cf movw tosl, zl -003bf5 cc0f jmp_ DO_NEXT - .include "words/d-2star.asm" - - ; Arithmetics - ; shift a double cell left - VE_D2STAR: -003bf6 ff03 .dw $ff03 -003bf7 3264 -003bf8 002a .db "d2*",0 -003bf9 3be4 .dw VE_HEAD - .set VE_HEAD = VE_D2STAR - XT_D2STAR: -003bfa 3bfb .dw PFA_D2STAR - PFA_D2STAR: -003bfb 9109 ld temp0, Y+ -003bfc 9119 ld temp1, Y+ -003bfd 0f00 lsl temp0 -003bfe 1f11 rol temp1 -003bff 1f88 rol tosl -003c00 1f99 rol tosh -003c01 931a st -Y, temp1 -003c02 930a st -Y, temp0 -003c03 cc01 jmp_ DO_NEXT - .include "words/d-2slash.asm" - - ; Arithmetics - ; shift a double cell value right - VE_D2SLASH: -003c04 ff03 .dw $ff03 -003c05 3264 -003c06 002f .db "d2/",0 -003c07 3bf6 .dw VE_HEAD - .set VE_HEAD = VE_D2SLASH - XT_D2SLASH: -003c08 3c09 .dw PFA_D2SLASH - PFA_D2SLASH: -003c09 9109 ld temp0, Y+ -003c0a 9119 ld temp1, Y+ -003c0b 9595 asr tosh -003c0c 9587 ror tosl -003c0d 9517 ror temp1 -003c0e 9507 ror temp0 -003c0f 931a st -Y, temp1 -003c10 930a st -Y, temp0 -003c11 cbf3 jmp_ DO_NEXT - .include "words/d-plus.asm" - - ; Arithmetics - ; add 2 double cell values - VE_DPLUS: -003c12 ff02 .dw $ff02 -003c13 2b64 .db "d+" -003c14 3c04 .dw VE_HEAD - .set VE_HEAD = VE_DPLUS - XT_DPLUS: -003c15 3c16 .dw PFA_DPLUS - PFA_DPLUS: -003c16 9129 ld temp2, Y+ -003c17 9139 ld temp3, Y+ - -003c18 90e9 ld temp4, Y+ -003c19 90f9 ld temp5, Y+ -003c1a 9149 ld temp6, Y+ -003c1b 9159 ld temp7, Y+ - -003c1c 0f24 add temp2, temp6 -003c1d 1f35 adc temp3, temp7 -003c1e 1d8e adc tosl, temp4 -003c1f 1d9f adc tosh, temp5 - -003c20 933a st -Y, temp3 -003c21 932a st -Y, temp2 -003c22 cbe2 jmp_ DO_NEXT - .include "words/d-minus.asm" - - ; Arithmetics - ; subtract d2 from d1 - VE_DMINUS: -003c23 ff02 .dw $ff02 -003c24 2d64 .db "d-" -003c25 3c12 .dw VE_HEAD - .set VE_HEAD = VE_DMINUS - XT_DMINUS: -003c26 3c27 .dw PFA_DMINUS - PFA_DMINUS: -003c27 9129 ld temp2, Y+ -003c28 9139 ld temp3, Y+ - -003c29 90e9 ld temp4, Y+ -003c2a 90f9 ld temp5, Y+ -003c2b 9149 ld temp6, Y+ -003c2c 9159 ld temp7, Y+ - -003c2d 1b42 sub temp6, temp2 -003c2e 0b53 sbc temp7, temp3 -003c2f 0ae8 sbc temp4, tosl -003c30 0af9 sbc temp5, tosh - -003c31 935a st -Y, temp7 -003c32 934a st -Y, temp6 -003c33 01c7 movw tosl, temp4 -003c34 cbd0 jmp_ DO_NEXT - .include "words/d-invert.asm" - - ; Arithmetics - ; invert all bits in the double cell value - VE_DINVERT: -003c35 ff07 .dw $ff07 -003c36 6964 -003c37 766e -003c38 7265 -003c39 0074 .db "dinvert",0 -003c3a 3c23 .dw VE_HEAD - .set VE_HEAD = VE_DINVERT - XT_DINVERT: -003c3b 3c3c .dw PFA_DINVERT - PFA_DINVERT: -003c3c 9109 ld temp0, Y+ -003c3d 9119 ld temp1, Y+ -003c3e 9580 com tosl -003c3f 9590 com tosh -003c40 9500 com temp0 -003c41 9510 com temp1 -003c42 931a st -Y, temp1 -003c43 930a st -Y, temp0 -003c44 cbc0 jmp_ DO_NEXT - .include "words/slashmod.asm" - - ; Arithmetics - ; signed division n1/n2 with remainder and quotient - VE_SLASHMOD: -003c45 ff04 .dw $ff04 -003c46 6d2f -003c47 646f .db "/mod" -003c48 3c35 .dw VE_HEAD - .set VE_HEAD = VE_SLASHMOD - XT_SLASHMOD: -003c49 3c4a .dw PFA_SLASHMOD - PFA_SLASHMOD: -003c4a 019c movw temp2, tosl - -003c4b 9109 ld temp0, Y+ -003c4c 9119 ld temp1, Y+ - -003c4d 2f41 mov temp6,temp1 ;move dividend High to sign register -003c4e 2743 eor temp6,temp3 ;xor divisor High with sign register -003c4f ff17 sbrs temp1,7 ;if MSB in dividend set -003c50 c004 rjmp PFA_SLASHMOD_1 -003c51 9510 com temp1 ; change sign of dividend -003c52 9500 com temp0 -003c53 5f0f subi temp0,low(-1) -003c54 4f1f sbci temp1,high(-1) - PFA_SLASHMOD_1: -003c55 ff37 sbrs temp3,7 ;if MSB in divisor set -003c56 c004 rjmp PFA_SLASHMOD_2 -003c57 9530 com temp3 ; change sign of divisor -003c58 9520 com temp2 -003c59 5f2f subi temp2,low(-1) -003c5a 4f3f sbci temp3,high(-1) -003c5b 24ee PFA_SLASHMOD_2: clr temp4 ;clear remainder Low byte -003c5c 18ff sub temp5,temp5;clear remainder High byte and carry -003c5d e151 ldi temp7,17 ;init loop counter - -003c5e 1f00 PFA_SLASHMOD_3: rol temp0 ;shift left dividend -003c5f 1f11 rol temp1 -003c60 955a dec temp7 ;decrement counter -003c61 f439 brne PFA_SLASHMOD_5 ;if done -003c62 ff47 sbrs temp6,7 ; if MSB in sign register set -003c63 c004 rjmp PFA_SLASHMOD_4 -003c64 9510 com temp1 ; change sign of result -003c65 9500 com temp0 -003c66 5f0f subi temp0,low(-1) -003c67 4f1f sbci temp1,high(-1) -003c68 c00b PFA_SLASHMOD_4: rjmp PFA_SLASHMODmod_done ; return -003c69 1cee PFA_SLASHMOD_5: rol temp4 ;shift dividend into remainder -003c6a 1cff rol temp5 -003c6b 1ae2 sub temp4,temp2 ;remainder = remainder - divisor -003c6c 0af3 sbc temp5,temp3 ; -003c6d f420 brcc PFA_SLASHMOD_6 ;if result negative -003c6e 0ee2 add temp4,temp2 ; restore remainder -003c6f 1ef3 adc temp5,temp3 -003c70 9488 clc ; clear carry to be shifted into result -003c71 cfec rjmp PFA_SLASHMOD_3 ;else -003c72 9408 PFA_SLASHMOD_6: sec ; set carry to be shifted into result -003c73 cfea rjmp PFA_SLASHMOD_3 - - PFA_SLASHMODmod_done: - ; put remainder on stack -003c74 92fa st -Y,temp5 -003c75 92ea st -Y,temp4 - - ; put quotient on stack -003c76 01c8 movw tosl, temp0 -003c77 cb8d jmp_ DO_NEXT - .include "words/abs.asm" - - ; DUP ?NEGATE ; - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ABS: -003c78 ff03 .dw $ff03 -003c79 6261 -003c7a 0073 .db "abs",0 -003c7b 3c45 .dw VE_HEAD - .set VE_HEAD = VE_ABS - XT_ABS: -003c7c 3801 .dw DO_COLON - PFA_ABS: - - .endif - -003c7d 38b1 -003c7e 3a3e -003c7f 3820 .DW XT_DUP,XT_QNEGATE,XT_EXIT - .include "words/pick.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PICK: -003c80 ff04 .dw $ff04 -003c81 6970 -003c82 6b63 .db "pick" -003c83 3c78 .dw VE_HEAD - .set VE_HEAD = VE_PICK - XT_PICK: -003c84 3801 .dw DO_COLON - PFA_PICK: - .endif -003c85 3a2f .dw XT_1PLUS -003c86 3ec4 .dw XT_CELLS -003c87 3a8d .dw XT_SP_FETCH -003c88 399d .dw XT_PLUS -003c89 3879 .dw XT_FETCH -003c8a 3820 .dw XT_EXIT - .include "words/cellplus.asm" - - ; Arithmetics - ; add the size of an address-unit to a-addr1 - VE_CELLPLUS: -003c8b ff05 .dw $ff05 -003c8c 6563 -003c8d 6c6c -003c8e 002b .db "cell+",0 -003c8f 3c80 .dw VE_HEAD - .set VE_HEAD = VE_CELLPLUS - XT_CELLPLUS: -003c90 3c91 .dw PFA_CELLPLUS - PFA_CELLPLUS: -003c91 9602 adiw tosl, CELLSIZE -003c92 cb72 jmp_ DO_NEXT - .include "dict/interrupt.inc" - - .if WANT_INTERRUPTS == 1 - - .if WANT_INTERRUPT_COUNTERS == 1 - .endif - - .include "words/int-on.asm" - - ; Interrupt - ; turns on all interrupts - VE_INTON: -003c93 ff04 .dw $ff04 -003c94 692b -003c95 746e .db "+int" -003c96 3c8b .dw VE_HEAD - .set VE_HEAD = VE_INTON - XT_INTON: -003c97 3c98 .dw PFA_INTON - PFA_INTON: -003c98 9478 sei -003c99 cb6b jmp_ DO_NEXT - .include "words/int-off.asm" - - ; Interrupt - ; turns off all interrupts - VE_INTOFF: -003c9a ff04 .dw $ff04 -003c9b 692d -003c9c 746e .db "-int" -003c9d 3c93 .dw VE_HEAD - .set VE_HEAD = VE_INTOFF - XT_INTOFF: -003c9e 3c9f .dw PFA_INTOFF - PFA_INTOFF: -003c9f 94f8 cli -003ca0 cb64 jmp_ DO_NEXT - .include "words/int-store.asm" - - ; Interrupt - ; stores XT as interrupt vector i - VE_INTSTORE: -003ca1 ff04 .dw $ff04 -003ca2 6e69 -003ca3 2174 .db "int!" -003ca4 3c9a .dw VE_HEAD - .set VE_HEAD = VE_INTSTORE - XT_INTSTORE: -003ca5 3801 .dw DO_COLON - PFA_INTSTORE: -003ca6 383d .dw XT_DOLITERAL -003ca7 0000 .dw intvec -003ca8 399d .dw XT_PLUS -003ca9 3b3b .dw XT_STOREE -003caa 3820 .dw XT_EXIT - .include "words/int-fetch.asm" - - ; Interrupt - ; fetches XT from interrupt vector i - VE_INTFETCH: -003cab ff04 .dw $ff04 -003cac 6e69 -003cad 4074 .db "int@" -003cae 3ca1 .dw VE_HEAD - .set VE_HEAD = VE_INTFETCH - XT_INTFETCH: -003caf 3801 .dw DO_COLON - PFA_INTFETCH: -003cb0 383d .dw XT_DOLITERAL -003cb1 0000 .dw intvec -003cb2 399d .dw XT_PLUS -003cb3 3b5f .dw XT_FETCHE -003cb4 3820 .dw XT_EXIT - .include "words/int-trap.asm" - - ; Interrupt - ; trigger an interrupt - VE_INTTRAP: -003cb5 ff08 .dw $ff08 -003cb6 6e69 -003cb7 2d74 -003cb8 7274 -003cb9 7061 .db "int-trap" -003cba 3cab .dw VE_HEAD - .set VE_HEAD = VE_INTTRAP - XT_INTTRAP: -003cbb 3cbc .dw PFA_INTTRAP - PFA_INTTRAP: -003cbc 2eb8 mov isrflag, tosl -003cbd 9189 -003cbe 9199 loadtos -003cbf cb45 jmp_ DO_NEXT - - .include "words/isr-exec.asm" - - ; Interrupt - ; executes an interrupt service routine - ;VE_ISREXEC: - ; .dw $ff08 - ; .db "isr-exec" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_ISREXEC - XT_ISREXEC: -003cc0 3801 .dw DO_COLON - PFA_ISREXEC: -003cc1 3caf .dw XT_INTFETCH -003cc2 382a .dw XT_EXECUTE -003cc3 3cc5 .dw XT_ISREND -003cc4 3820 .dw XT_EXIT - .include "words/isr-end.asm" - - ; Interrupt - ; re-enables interrupts in an ISR - ;VE_ISREND: - ; .dw $ff07 - ; .db "isr-end",0 - ; .dw VE_HEAD - ; .set VE_HEAD = VE_ISREND - XT_ISREND: -003cc5 3cc6 .dw PFA_ISREND - PFA_ISREND: -003cc6 d001 rcall PFA_ISREND1 ; clear the interrupt flag for the controller -003cc7 cb3d jmp_ DO_NEXT - PFA_ISREND1: -003cc8 9518 reti - .endif - - ; now the relocatable colon words - .include "words/prompt-ok.asm" - - ; System - ; send the READY prompt to the command line - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_PROMPTOK: - ; .dw $ff02 - ; .db "ok" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_PROMPTOK - XT_DEFAULT_PROMPTOK: -003cc9 3801 .dw DO_COLON - PFA_DEFAULT_PROMPTOK: -003cca 03c5 .dw XT_DOSLITERAL -003ccb 0003 .dw 3 -003ccc 6f20 -003ccd 006b .db " ok",0 - .endif -003cce 03f8 .dw XT_ITYPE -003ccf 3820 .dw XT_EXIT - - ; ------------------------ - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PROMPTOK: -003cd0 ff03 .dw $FF03 -003cd1 6f2e -../../common\words/prompt-ok.asm(43): warning: .cseg .db misalignment - padding zero byte -003cd2 006b .db ".ok" -003cd3 3cb5 .dw VE_HEAD - .set VE_HEAD = VE_PROMPTOK - XT_PROMPTOK: -003cd4 3dff .dw PFA_DODEFER1 - PFA_PROMPTOK: - .endif -003cd5 001c .dw USER_P_OK -003cd6 3dc8 .dw XT_UDEFERFETCH -003cd7 3dd4 .dw XT_UDEFERSTORE - .include "words/prompt-ready.asm" - - ; System - ; process the error prompt - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_PROMPTRDY: - ; .dw $ff04 - ; .db "p_er" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_PROMPTRDY - XT_DEFAULT_PROMPTREADY: -003cd8 3801 .dw DO_COLON - PFA_DEFAULT_PROMPTREADY: -003cd9 03c5 .dw XT_DOSLITERAL -003cda 0002 .dw 2 -003cdb 203e .db "> " - .endif -003cdc 3fa1 .dw XT_CR -003cdd 03f8 .dw XT_ITYPE -003cde 3820 .dw XT_EXIT - - ; ------------------------ - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PROMPTREADY: -003cdf ff06 .dw $FF06 -003ce0 722e -003ce1 6165 -003ce2 7964 .db ".ready" -003ce3 3cd0 .dw VE_HEAD - .set VE_HEAD = VE_PROMPTREADY - XT_PROMPTREADY: -003ce4 3dff .dw PFA_DODEFER1 - PFA_PROMPTREADY: - .endif -003ce5 0020 .dw USER_P_RDY -003ce6 3dc8 .dw XT_UDEFERFETCH -003ce7 3dd4 .dw XT_UDEFERSTORE - .include "words/prompt-error.asm" - - ; System - ; process the error prompt - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_PROMPTERROR: - ; .dw $ff04 - ; .db "p_er" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_PROMPTERROR - XT_DEFAULT_PROMPTERROR: -003ce8 3801 .dw DO_COLON - PFA_DEFAULT_PROMPTERROR: -003ce9 03c5 .dw XT_DOSLITERAL -003cea 0004 .dw 4 -003ceb 3f20 -003cec 203f .db " ?? " - .endif -003ced 03f8 .dw XT_ITYPE -003cee 3ebd .dw XT_BASE -003cef 3879 .dw XT_FETCH -003cf0 38ff .dw XT_TO_R -003cf1 3f41 .dw XT_DECIMAL -003cf2 037a .dw XT_DOT -003cf3 3ee2 .dw XT_TO_IN -003cf4 3879 .dw XT_FETCH -003cf5 037a .dw XT_DOT -003cf6 38f6 .dw XT_R_FROM -003cf7 3ebd .dw XT_BASE -003cf8 3881 .dw XT_STORE -003cf9 3820 .dw XT_EXIT - - ; ------------------------ - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PROMPTERROR: -003cfa ff06 .dw $FF06 -003cfb 652e -003cfc 7272 -003cfd 726f .db ".error" -003cfe 3cdf .dw VE_HEAD - .set VE_HEAD = VE_PROMPTERROR - XT_PROMPTERROR: -003cff 3dff .dw PFA_DODEFER1 - PFA_PROMPTERROR: - .endif -003d00 001e .dw USER_P_ERR -003d01 3dc8 .dw XT_UDEFERFETCH -003d02 3dd4 .dw XT_UDEFERSTORE - - .include "words/quit.asm" - - ; System - ; main loop of amforth. accept - interpret in an endless loop - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QUIT: -003d03 ff04 .dw $ff04 -003d04 7571 -003d05 7469 .db "quit" -003d06 3cfa .dw VE_HEAD - .set VE_HEAD = VE_QUIT - XT_QUIT: -003d07 3801 .dw DO_COLON - .endif - PFA_QUIT: -003d08 0851 -003d09 0858 -003d0a 3881 .dw XT_LP0,XT_LP,XT_STORE -003d0b 05ca .dw XT_SP0 -003d0c 3a96 .dw XT_SP_STORE -003d0d 05d7 .dw XT_RP0 -003d0e 3a80 .dw XT_RP_STORE -003d0f 08e6 .dw XT_LBRACKET - - PFA_QUIT2: -003d10 3eb7 .dw XT_STATE -003d11 3879 .dw XT_FETCH -003d12 391a .dw XT_ZEROEQUAL -003d13 3836 .dw XT_DOCONDBRANCH -003d14 3d16 DEST(PFA_QUIT4) -003d15 3ce4 .dw XT_PROMPTREADY - PFA_QUIT4: -003d16 04de .dw XT_REFILL -003d17 3836 .dw XT_DOCONDBRANCH -003d18 3d28 DEST(PFA_QUIT3) -003d19 383d .dw XT_DOLITERAL -003d1a 0625 .dw XT_INTERPRET -003d1b 3d70 .dw XT_CATCH -003d1c 38b9 .dw XT_QDUP -003d1d 3836 .dw XT_DOCONDBRANCH -003d1e 3d28 DEST(PFA_QUIT3) -003d1f 38b1 .dw XT_DUP -003d20 383d .dw XT_DOLITERAL -003d21 fffe .dw -2 -003d22 396e .dw XT_LESS -003d23 3836 .dw XT_DOCONDBRANCH -003d24 3d26 DEST(PFA_QUIT5) -003d25 3cff .dw XT_PROMPTERROR - PFA_QUIT5: -003d26 382f .dw XT_DOBRANCH -003d27 3d08 DEST(PFA_QUIT) - PFA_QUIT3: -003d28 3cd4 .dw XT_PROMPTOK -003d29 382f .dw XT_DOBRANCH -003d2a 3d10 DEST(PFA_QUIT2) - ; .dw XT_EXIT ; never reached - - .include "words/pause.asm" - - ; Multitasking - ; Fetch pause vector and execute it. may make a context/task switch - VE_PAUSE: -003d2b ff05 .dw $ff05 -003d2c 6170 -003d2d 7375 -003d2e 0065 .db "pause",0 -003d2f 3d03 .dw VE_HEAD - .set VE_HEAD = VE_PAUSE - XT_PAUSE: -003d30 3dff .dw PFA_DODEFER1 - PFA_PAUSE: -003d31 00ed .dw ram_pause -003d32 3db4 .dw XT_RDEFERFETCH -003d33 3dbe .dw XT_RDEFERSTORE - - .dseg -0000ed ram_pause: .byte 2 - .cseg - .include "words/cold.asm" - - ; System - ; start up amforth. - VE_COLD: -003d34 ff04 .dw $ff04 -003d35 6f63 -003d36 646c .db "cold" -003d37 3d2b .dw VE_HEAD - .set VE_HEAD = VE_COLD - XT_COLD: -003d38 3d39 .dw PFA_COLD - PFA_COLD: -003d39 b6a4 in_ mcu_boot, MCUSR -003d3a 2422 clr zerol -003d3b 2433 clr zeroh -003d3c 24bb clr isrflag -003d3d be24 out_ MCUSR, zerol - ; clear RAM -003d3e e6e0 ldi zl, low(ramstart) -003d3f e0f0 ldi zh, high(ramstart) - clearloop: -003d40 9221 st Z+, zerol -003d41 36e0 cpi zl, low(sram_size+ramstart) -003d42 f7e9 brne clearloop -003d43 30f8 cpi zh, high(sram_size+ramstart) -003d44 f7d9 brne clearloop - ; init first user data area - ; allocate space for User Area - .dseg -0000ef ram_user1: .byte SYSUSERSIZE + APPUSERSIZE - .cseg -003d45 eeef ldi zl, low(ram_user1) -003d46 e0f0 ldi zh, high(ram_user1) -003d47 012f movw upl, zl - ; init return stack pointer -003d48 e50f ldi temp0,low(rstackstart) -003d49 bf0d out_ SPL,temp0 -003d4a 8304 std Z+4, temp0 -003d4b e018 ldi temp1,high(rstackstart) -003d4c bf1e out_ SPH,temp1 -003d4d 8315 std Z+5, temp1 - - ; init parameter stack pointer -003d4e e0cf ldi yl,low(stackstart) -003d4f 83c6 std Z+6, yl -003d50 e0d8 ldi yh,high(stackstart) -003d51 83d7 std Z+7, yh - - ; load Forth IP with starting word -003d52 e5aa ldi XL, low(PFA_WARM) -003d53 e3bd ldi XH, high(PFA_WARM) - ; its a far jump... -003d54 cab0 jmp_ DO_NEXT - .include "words/warm.asm" - - ; System - ; initialize amforth further. executes turnkey operation and go to quit - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_WARM: -003d55 ff04 .dw $ff04 -003d56 6177 -003d57 6d72 .db "warm" -003d58 3d34 .dw VE_HEAD - .set VE_HEAD = VE_WARM - XT_WARM: -003d59 3801 .dw DO_COLON - PFA_WARM: - .endif -003d5a 0297 .dw XT_INIT_RAM -003d5b 383d .dw XT_DOLITERAL -003d5c 019a .dw XT_NOOP -003d5d 383d .dw XT_DOLITERAL -003d5e 3d30 .dw XT_PAUSE -003d5f 3ddf .dw XT_DEFERSTORE -003d60 08e6 .dw XT_LBRACKET -003d61 3f5c .dw XT_TURNKEY -003d62 3d07 .dw XT_QUIT ; never returns - - .include "words/handler.asm" - - ; Exceptions - ; USER variable used by catch/throw - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_HANDLER: -003d63 ff07 .dw $ff07 -003d64 6168 -003d65 646e -003d66 656c -003d67 0072 .db "handler",0 -003d68 3d55 .dw VE_HEAD - .set VE_HEAD = VE_HANDLER - XT_HANDLER: -003d69 3858 .dw PFA_DOUSER - PFA_HANDLER: - .endif -003d6a 000a .dw USER_HANDLER - .include "words/catch.asm" - - ; Exceptions - ; execute XT and check for exceptions. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CATCH: -003d6b ff05 .dw $ff05 -003d6c 6163 -003d6d 6374 -003d6e 0068 .db "catch",0 -003d6f 3d63 .dw VE_HEAD - .set VE_HEAD = VE_CATCH - XT_CATCH: -003d70 3801 .dw DO_COLON - PFA_CATCH: - .endif - - ; sp@ >r -003d71 3a8d .dw XT_SP_FETCH -003d72 38ff .dw XT_TO_R - ; handler @ >r -003d73 3d69 .dw XT_HANDLER -003d74 3879 .dw XT_FETCH -003d75 38ff .dw XT_TO_R - ; rp@ handler ! -003d76 3a76 .dw XT_RP_FETCH -003d77 3d69 .dw XT_HANDLER -003d78 3881 .dw XT_STORE -003d79 382a .dw XT_EXECUTE - ; r> handler ! -003d7a 38f6 .dw XT_R_FROM -003d7b 3d69 .dw XT_HANDLER -003d7c 3881 .dw XT_STORE -003d7d 38f6 .dw XT_R_FROM -003d7e 38d9 .dw XT_DROP -003d7f 3954 .dw XT_ZERO -003d80 3820 .dw XT_EXIT - .include "words/throw.asm" - - ; Exceptions - ; throw an exception - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_THROW: -003d81 ff05 .dw $ff05 -003d82 6874 -003d83 6f72 -003d84 0077 .db "throw",0 -003d85 3d6b .dw VE_HEAD - .set VE_HEAD = VE_THROW - XT_THROW: -003d86 3801 .dw DO_COLON - PFA_THROW: - .endif -003d87 38b1 .dw XT_DUP -003d88 391a .dw XT_ZEROEQUAL -003d89 3836 .dw XT_DOCONDBRANCH -003d8a 3d8d DEST(PFA_THROW1) -003d8b 38d9 .dw XT_DROP -003d8c 3820 .dw XT_EXIT - PFA_THROW1: -003d8d 3d69 .dw XT_HANDLER -003d8e 3879 .dw XT_FETCH -003d8f 3a80 .dw XT_RP_STORE -003d90 38f6 .dw XT_R_FROM -003d91 3d69 .dw XT_HANDLER -003d92 3881 .dw XT_STORE -003d93 38f6 .dw XT_R_FROM -003d94 38c4 .dw XT_SWAP -003d95 38ff .dw XT_TO_R -003d96 3a96 .dw XT_SP_STORE -003d97 38d9 .dw XT_DROP -003d98 38f6 .dw XT_R_FROM -003d99 3820 .dw XT_EXIT - - - - .include "words/edefer-fetch.asm" - - ; System - ; does the real defer@ for eeprom defers - VE_EDEFERFETCH: -003d9a ff07 .dw $ff07 -003d9b 6445 -003d9c 6665 -003d9d 7265 -003d9e 0040 .db "Edefer@",0 -003d9f 3d81 .dw VE_HEAD - .set VE_HEAD = VE_EDEFERFETCH - XT_EDEFERFETCH: -003da0 3801 .dw DO_COLON - PFA_EDEFERFETCH: -003da1 3bcb .dw XT_FETCHI -003da2 3b5f .dw XT_FETCHE -003da3 3820 .dw XT_EXIT - .include "words/edefer-store.asm" - - ; System - ; does the real defer! for eeprom defers - VE_EDEFERSTORE: -003da4 ff07 .dw $ff07 -003da5 6445 -003da6 6665 -003da7 7265 -003da8 0021 .db "Edefer!",0 -003da9 3d9a .dw VE_HEAD - .set VE_HEAD = VE_EDEFERSTORE - XT_EDEFERSTORE: -003daa 3801 .dw DO_COLON - PFA_EDEFERSTORE: -003dab 3bcb .dw XT_FETCHI -003dac 3b3b .dw XT_STOREE -003dad 3820 .dw XT_EXIT - .include "words/rdefer-fetch.asm" - - ; System - ; The defer@ for ram defers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RDEFERFETCH: -003dae ff07 .dw $ff07 -003daf 6452 -003db0 6665 -003db1 7265 -003db2 0040 .db "Rdefer@",0 -003db3 3da4 .dw VE_HEAD - .set VE_HEAD = VE_RDEFERFETCH - XT_RDEFERFETCH: -003db4 3801 .dw DO_COLON - PFA_RDEFERFETCH: - .endif -003db5 3bcb .dw XT_FETCHI -003db6 3879 .dw XT_FETCH -003db7 3820 .dw XT_EXIT - .include "words/rdefer-store.asm" - - ; System - ; The defer! for ram defers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RDEFERSTORE: -003db8 ff07 .dw $ff07 -003db9 6452 -003dba 6665 -003dbb 7265 -003dbc 0021 .db "Rdefer!",0 -003dbd 3dae .dw VE_HEAD - .set VE_HEAD = VE_RDEFERSTORE - XT_RDEFERSTORE: -003dbe 3801 .dw DO_COLON - PFA_RDEFERSTORE: - .endif -003dbf 3bcb .dw XT_FETCHI -003dc0 3881 .dw XT_STORE -003dc1 3820 .dw XT_EXIT - - .include "words/udefer-fetch.asm" - - ; System - ; does the real defer@ for user based defers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDEFERFETCH: -003dc2 ff07 .dw $ff07 -003dc3 6455 -003dc4 6665 -003dc5 7265 -003dc6 0040 .db "Udefer@",0 -003dc7 3db8 .dw VE_HEAD - .set VE_HEAD = VE_UDEFERFETCH - XT_UDEFERFETCH: -003dc8 3801 .dw DO_COLON - PFA_UDEFERFETCH: - .endif -003dc9 3bcb .dw XT_FETCHI -003dca 3b02 .dw XT_UP_FETCH -003dcb 399d .dw XT_PLUS -003dcc 3879 .dw XT_FETCH -003dcd 3820 .dw XT_EXIT - .include "words/udefer-store.asm" - - ; System - ; does the real defer! for user based defers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDEFERSTORE: -003dce ff07 .dw $ff07 -003dcf 6455 -003dd0 6665 -003dd1 7265 -003dd2 0021 .db "Udefer!",0 -003dd3 3dc2 .dw VE_HEAD - .set VE_HEAD = VE_UDEFERSTORE - XT_UDEFERSTORE: -003dd4 3801 .dw DO_COLON - PFA_UDEFERSTORE: - .endif - -003dd5 3bcb .dw XT_FETCHI -003dd6 3b02 .dw XT_UP_FETCH -003dd7 399d .dw XT_PLUS -003dd8 3881 .dw XT_STORE -003dd9 3820 .dw XT_EXIT - - .include "words/defer-store.asm" - - ; System - ; stores xt1 as the xt to be executed when xt2 is called - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DEFERSTORE: -003dda ff06 .dw $ff06 -003ddb 6564 -003ddc 6566 -003ddd 2172 .db "defer!" -003dde 3dce .dw VE_HEAD - .set VE_HEAD = VE_DEFERSTORE - XT_DEFERSTORE: -003ddf 3801 .dw DO_COLON - PFA_DEFERSTORE: - .endif -003de0 3fd0 .dw XT_TO_BODY -003de1 38b1 .dw XT_DUP -003de2 01c6 .dw XT_ICELLPLUS -003de3 01c6 .dw XT_ICELLPLUS -003de4 3bcb .dw XT_FETCHI -003de5 382a .dw XT_EXECUTE -003de6 3820 .dw XT_EXIT - - .include "words/defer-fetch.asm" - - ; System - ; returns the XT associated with the given XT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DEFERFETCH: -003de7 ff06 .dw $ff06 -003de8 6564 -003de9 6566 -003dea 4072 .db "defer@" -003deb 3dda .dw VE_HEAD - .set VE_HEAD = VE_DEFERFETCH - XT_DEFERFETCH: -003dec 3801 .dw DO_COLON - PFA_DEFERFETCH: - .endif -003ded 3fd0 .dw XT_TO_BODY -003dee 38b1 .dw XT_DUP -003def 01c6 .dw XT_ICELLPLUS -003df0 3bcb .dw XT_FETCHI -003df1 382a .dw XT_EXECUTE -003df2 3820 .dw XT_EXIT - .include "words/do-defer.asm" - - ; System - ; runtime of defer - VE_DODEFER: -003df3 ff07 .dw $ff07 -003df4 6428 -003df5 6665 -003df6 7265 -003df7 0029 .db "(defer)", 0 -003df8 3de7 .dw VE_HEAD - .set VE_HEAD = VE_DODEFER - XT_DODEFER: -003df9 3801 .dw DO_COLON - PFA_DODEFER: -003dfa 072e .dw XT_DOCREATE -003dfb 088e .dw XT_REVEAL -003dfc 0751 .dw XT_COMPILE -003dfd 3dff .dw PFA_DODEFER1 -003dfe 3820 .dw XT_EXIT - PFA_DODEFER1: -003dff 940e 08a7 call_ DO_DODOES -003e01 38b1 .dw XT_DUP -003e02 01c6 .dw XT_ICELLPLUS -003e03 3bcb .dw XT_FETCHI -003e04 382a .dw XT_EXECUTE -003e05 382a .dw XT_EXECUTE -003e06 3820 .dw XT_EXIT - - ; : (defer) dup i-cell+ @i execute execute ; - - - .include "words/u-dot.asm" - - ; Numeric IO - ; unsigned PNO with single cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDOT: -003e07 ff02 .dw $ff02 -003e08 2e75 .db "u." -003e09 3df3 .dw VE_HEAD - .set VE_HEAD = VE_UDOT - XT_UDOT: -003e0a 3801 .dw DO_COLON - PFA_UDOT: - .endif -003e0b 3954 .dw XT_ZERO -003e0c 0382 .dw XT_UDDOT -003e0d 3820 .dw XT_EXIT - ; : u. ( us -- ) 0 ud. ; - .include "words/u-dot-r.asm" - - ; Numeric IO - ; unsigned PNO with single cells numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_UDOTR: -003e0e ff03 .dw $ff03 -003e0f 2e75 -003e10 0072 .db "u.r",0 -003e11 3e07 .dw VE_HEAD - .set VE_HEAD = VE_UDOTR - XT_UDOTR: -003e12 3801 .dw DO_COLON - PFA_UDOTR: - .endif -003e13 3954 .dw XT_ZERO -003e14 38c4 .dw XT_SWAP -003e15 038b .dw XT_UDDOTR -003e16 3820 .dw XT_EXIT - ; : u.r ( s n -- ) 0 swap ud.r ; - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/uslashmod.asm" - - ; Arithmetics - ; unsigned division with remainder - VE_USLASHMOD: -003e17 ff05 .dw $ff05 -003e18 2f75 -003e19 6f6d -003e1a 0064 .db "u/mod",0 -003e1b 3e0e .dw VE_HEAD - .set VE_HEAD = VE_USLASHMOD - XT_USLASHMOD: -003e1c 3801 .dw DO_COLON - PFA_USLASHMOD: -003e1d 38ff .dw XT_TO_R -003e1e 3954 .dw XT_ZERO -003e1f 38f6 .dw XT_R_FROM -003e20 39c2 .dw XT_UMSLASHMOD -003e21 3820 .dw XT_EXIT - .include "words/negate.asm" - - ; Logic - ; 2-complement - VE_NEGATE: -003e22 ff06 .dw $ff06 -003e23 656e -003e24 6167 -003e25 6574 .db "negate" -003e26 3e17 .dw VE_HEAD - .set VE_HEAD = VE_NEGATE - XT_NEGATE: -003e27 3801 .dw DO_COLON - PFA_NEGATE: -003e28 39fd .dw XT_INVERT -003e29 3a2f .dw XT_1PLUS -003e2a 3820 .dw XT_EXIT - .include "words/slash.asm" - - ; Arithmetics - ; divide n1 by n2. giving the quotient - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_SLASH: -003e2b ff01 .dw $ff01 -003e2c 002f .db "/",0 -003e2d 3e22 .dw VE_HEAD - .set VE_HEAD = VE_SLASH - XT_SLASH: -003e2e 3801 .dw DO_COLON - PFA_SLASH: - .endif -003e2f 3c49 .dw XT_SLASHMOD -003e30 38f0 .dw XT_NIP -003e31 3820 .dw XT_EXIT - - .include "words/mod.asm" - - ; Arithmetics - ; divide n1 by n2 giving the remainder n3 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_MOD: -003e32 ff03 .dw $ff03 -003e33 6f6d -003e34 0064 .db "mod",0 -003e35 3e2b .dw VE_HEAD - .set VE_HEAD = VE_MOD - XT_MOD: -003e36 3801 .dw DO_COLON - PFA_MOD: - .endif -003e37 3c49 .dw XT_SLASHMOD -003e38 38d9 .dw XT_DROP -003e39 3820 .dw XT_EXIT - - .include "words/min.asm" - - ; Compare - ; compare two values leave the smaller one - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_MIN: -003e3a ff03 .dw $ff03 -003e3b 696d -003e3c 006e .db "min",0 -003e3d 3e32 .dw VE_HEAD - .set VE_HEAD = VE_MIN - XT_MIN: -003e3e 3801 .dw DO_COLON - PFA_MIN: - .endif -003e3f 3ec9 .dw XT_2DUP -003e40 3978 .dw XT_GREATER -003e41 3836 .dw XT_DOCONDBRANCH -003e42 3e44 DEST(PFA_MIN1) -003e43 38c4 .dw XT_SWAP - PFA_MIN1: -003e44 38d9 .dw XT_DROP -003e45 3820 .dw XT_EXIT - .include "words/max.asm" - - ; Compare - ; compare two values, leave the bigger one - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_MAX: -003e46 ff03 .dw $ff03 -003e47 616d -003e48 0078 .db "max",0 -003e49 3e3a .dw VE_HEAD - .set VE_HEAD = VE_MAX - XT_MAX: -003e4a 3801 .dw DO_COLON - PFA_MAX: - - .endif -003e4b 3ec9 .dw XT_2DUP -003e4c 396e .dw XT_LESS -003e4d 3836 .dw XT_DOCONDBRANCH -003e4e 3e50 DEST(PFA_MAX1) -003e4f 38c4 .dw XT_SWAP - PFA_MAX1: -003e50 38d9 .dw XT_DROP -003e51 3820 .dw XT_EXIT - .include "words/within.asm" - - ; Compare - ; check if n is within min..max - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_WITHIN: -003e52 ff06 .dw $ff06 -003e53 6977 -003e54 6874 -003e55 6e69 .db "within" -003e56 3e46 .dw VE_HEAD - .set VE_HEAD = VE_WITHIN - XT_WITHIN: -003e57 3801 .dw DO_COLON - PFA_WITHIN: - .endif -003e58 38cf .dw XT_OVER -003e59 3993 .dw XT_MINUS -003e5a 38ff .dw XT_TO_R -003e5b 3993 .dw XT_MINUS -003e5c 38f6 .dw XT_R_FROM -003e5d 395c .dw XT_ULESS -003e5e 3820 .dw XT_EXIT - - .include "words/show-wordlist.asm" - - ; Tools - ; prints the name of the words in a wordlist - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SHOWWORDLIST: -003e5f ff0d .dw $ff0d -003e60 6873 -003e61 776f -003e62 772d -003e63 726f -003e64 6c64 -003e65 7369 -003e66 0074 .db "show-wordlist",0 -003e67 3e52 .dw VE_HEAD - .set VE_HEAD = VE_SHOWWORDLIST - XT_SHOWWORDLIST: -003e68 3801 .dw DO_COLON - PFA_SHOWWORDLIST: - .endif -003e69 383d .dw XT_DOLITERAL -003e6a 3e6e .dw XT_SHOWWORD -003e6b 38c4 .dw XT_SWAP -003e6c 06cf .dw XT_TRAVERSEWORDLIST -003e6d 3820 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_SHOWWORD: -003e6e 3801 .dw DO_COLON - PFA_SHOWWORD: - .endif -003e6f 06ea .dw XT_NAME2STRING -003e70 03f8 .dw XT_ITYPE -003e71 3fae .dw XT_SPACE ; ( -- addr n) -003e72 394b .dw XT_TRUE -003e73 3820 .dw XT_EXIT - .include "words/words.asm" - - ; Tools - ; prints a list of all (visible) words in the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_WORDS: -003e74 ff05 .dw $ff05 -003e75 6f77 -003e76 6472 -003e77 0073 .db "words",0 -003e78 3e5f .dw VE_HEAD - .set VE_HEAD = VE_WORDS - XT_WORDS: -003e79 3801 .dw DO_COLON - PFA_WORDS: - .endif -003e7a 383d .dw XT_DOLITERAL -003e7b 0042 .dw CFG_ORDERLISTLEN+2 -003e7c 3b5f .dw XT_FETCHE -003e7d 3e68 .dw XT_SHOWWORDLIST -003e7e 3820 .dw XT_EXIT - - .include "words/dot-quote.asm" - - ; Compiler - ; compiles string into dictionary to be printed at runtime - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_DOTSTRING: -003e7f 0002 .dw $0002 -003e80 222e .db ".",$22 -003e81 3e74 .dw VE_HEAD - .set VE_HEAD = VE_DOTSTRING - XT_DOTSTRING: -003e82 3801 .dw DO_COLON - PFA_DOTSTRING: - .endif -003e83 3e8a .dw XT_SQUOTE -003e84 0751 .dw XT_COMPILE -003e85 03f8 .dw XT_ITYPE -003e86 3820 .dw XT_EXIT - .include "words/squote.asm" - - ; Compiler - ; compiles a string to flash, at runtime leaves ( -- flash-addr count) on stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SQUOTE: -003e87 0002 .dw $0002 -003e88 2273 .db "s",$22 -003e89 3e7f .dw VE_HEAD - .set VE_HEAD = VE_SQUOTE - XT_SQUOTE: -003e8a 3801 .dw DO_COLON - PFA_SQUOTE: - .endif -003e8b 383d .dw XT_DOLITERAL -003e8c 0022 .dw 34 ; 0x22 -003e8d 0583 .dw XT_PARSE ; ( -- addr n) -003e8e 3eb7 .dw XT_STATE -003e8f 3879 .dw XT_FETCH -003e90 3836 .dw XT_DOCONDBRANCH -003e91 3e93 DEST(PFA_SQUOTE1) -003e92 077d .dw XT_SLITERAL - PFA_SQUOTE1: -003e93 3820 .dw XT_EXIT - .include "words/fill.asm" - - ; Memory - ; fill u bytes memory beginning at a-addr with character c - VE_FILL: -003e94 ff04 .dw $ff04 -003e95 6966 -003e96 6c6c .db "fill" -003e97 3e87 .dw VE_HEAD - .set VE_HEAD = VE_FILL - XT_FILL: -003e98 3801 .dw DO_COLON - PFA_FILL: -003e99 38e1 .dw XT_ROT -003e9a 38e1 .dw XT_ROT -003e9b 38b9 -003e9c 3836 .dw XT_QDUP,XT_DOCONDBRANCH -003e9d 3ea5 DEST(PFA_FILL2) -003e9e 3f99 .dw XT_BOUNDS -003e9f 3a9b .dw XT_DODO - PFA_FILL1: -003ea0 38b1 .dw XT_DUP -003ea1 3aac .dw XT_I -003ea2 388d .dw XT_CSTORE ; ( -- c c-addr) -003ea3 3ac9 .dw XT_DOLOOP -003ea4 3ea0 .dw PFA_FILL1 - PFA_FILL2: -003ea5 38d9 .dw XT_DROP -003ea6 3820 .dw XT_EXIT - - .include "words/f_cpu.asm" - - ; System - ; put the cpu frequency in Hz on stack - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_F_CPU: -003ea7 ff05 .dw $ff05 -003ea8 5f66 -003ea9 7063 -003eaa 0075 .db "f_cpu",0 -003eab 3e94 .dw VE_HEAD - .set VE_HEAD = VE_F_CPU - XT_F_CPU: -003eac 3801 .dw DO_COLON - PFA_F_CPU: - .endif -003ead 383d .dw XT_DOLITERAL -003eae 1200 .dw (F_CPU % 65536) -003eaf 383d .dw XT_DOLITERAL -003eb0 007a .dw (F_CPU / 65536) -003eb1 3820 .dw XT_EXIT - .include "words/state.asm" - - ; System Variable - ; system state - VE_STATE: -003eb2 ff05 .dw $ff05 -003eb3 7473 -003eb4 7461 -003eb5 0065 .db "state",0 -003eb6 3ea7 .dw VE_HEAD - .set VE_HEAD = VE_STATE - XT_STATE: -003eb7 3848 .dw PFA_DOVARIABLE - PFA_STATE: -003eb8 011b .dw ram_state - - .dseg -00011b ram_state: .byte 2 - .include "words/base.asm" - - ; Numeric IO - ; location of the cell containing the number conversion radix - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BASE: -003eb9 ff04 .dw $ff04 -003eba 6162 -003ebb 6573 .db "base" -003ebc 3eb2 .dw VE_HEAD - .set VE_HEAD = VE_BASE - XT_BASE: -003ebd 3858 .dw PFA_DOUSER - PFA_BASE: - .endif -003ebe 000c .dw USER_BASE - - .include "words/cells.asm" - - ; Arithmetics - ; n2 is the size in address units of n1 cells - VE_CELLS: -003ebf ff05 .dw $ff05 -003ec0 6563 -003ec1 6c6c -003ec2 0073 .db "cells",0 -003ec3 3eb9 .dw VE_HEAD - .set VE_HEAD = VE_CELLS - XT_CELLS: -003ec4 3a0c .dw PFA_2STAR - - .include "words/2dup.asm" - - ; Stack - ; Duplicate the 2 top elements - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2DUP: -003ec5 ff04 .dw $ff04 -003ec6 6432 -003ec7 7075 .db "2dup" -003ec8 3ebf .dw VE_HEAD - .set VE_HEAD = VE_2DUP - XT_2DUP: -003ec9 3801 .dw DO_COLON - PFA_2DUP: - .endif - -003eca 38cf .dw XT_OVER -003ecb 38cf .dw XT_OVER -003ecc 3820 .dw XT_EXIT - .include "words/2drop.asm" - - ; Stack - ; Remove the 2 top elements - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2DROP: -003ecd ff05 .dw $ff05 -003ece 6432 -003ecf 6f72 -003ed0 0070 .db "2drop",0 -003ed1 3ec5 .dw VE_HEAD - .set VE_HEAD = VE_2DROP - XT_2DROP: -003ed2 3801 .dw DO_COLON - PFA_2DROP: - .endif -003ed3 38d9 .dw XT_DROP -003ed4 38d9 .dw XT_DROP -003ed5 3820 .dw XT_EXIT - .include "words/tuck.asm" - - ; Stack - ; Copy the first (top) stack item below the second stack item. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TUCK: -003ed6 ff04 .dw $ff04 -003ed7 7574 -003ed8 6b63 .db "tuck" -003ed9 3ecd .dw VE_HEAD - .set VE_HEAD = VE_TUCK - XT_TUCK: -003eda 3801 .dw DO_COLON - PFA_TUCK: - .endif -003edb 38c4 .dw XT_SWAP -003edc 38cf .dw XT_OVER -003edd 3820 .dw XT_EXIT - - .include "words/to-in.asm" - - ; System Variable - ; pointer to current read position in input buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO_IN: -003ede ff03 .dw $ff03 -003edf 693e -003ee0 006e .db ">in",0 -003ee1 3ed6 .dw VE_HEAD - .set VE_HEAD = VE_TO_IN - XT_TO_IN: -003ee2 3858 .dw PFA_DOUSER - PFA_TO_IN: - .endif -003ee3 0018 .dw USER_TO_IN - .include "words/pad.asm" - - ; System Variable - ; Address of the temporary scratch buffer. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PAD: -003ee4 ff03 .dw $ff03 -003ee5 6170 -003ee6 0064 .db "pad",0 -003ee7 3ede .dw VE_HEAD - .set VE_HEAD = VE_PAD - XT_PAD: -003ee8 3801 .dw DO_COLON - PFA_PAD: - .endif -003ee9 3f23 .dw XT_HERE -003eea 383d .dw XT_DOLITERAL -003eeb 0028 .dw 40 -003eec 399d .dw XT_PLUS -003eed 3820 .dw XT_EXIT - .include "words/emit.asm" - - ; Character IO - ; fetch the emit vector and execute it. should emit a character from TOS - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_EMIT: -003eee ff04 .dw $ff04 -003eef 6d65 -003ef0 7469 .db "emit" -003ef1 3ee4 .dw VE_HEAD - .set VE_HEAD = VE_EMIT - XT_EMIT: -003ef2 3dff .dw PFA_DODEFER1 - PFA_EMIT: - .endif -003ef3 000e .dw USER_EMIT -003ef4 3dc8 .dw XT_UDEFERFETCH -003ef5 3dd4 .dw XT_UDEFERSTORE - .include "words/emitq.asm" - - ; Character IO - ; fetch emit? vector and execute it. should return the ready-to-send condition - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_EMITQ: -003ef6 ff05 .dw $ff05 -003ef7 6d65 -003ef8 7469 -003ef9 003f .db "emit?",0 -003efa 3eee .dw VE_HEAD - .set VE_HEAD = VE_EMITQ - XT_EMITQ: -003efb 3dff .dw PFA_DODEFER1 - PFA_EMITQ: - .endif -003efc 0010 .dw USER_EMITQ -003efd 3dc8 .dw XT_UDEFERFETCH -003efe 3dd4 .dw XT_UDEFERSTORE - .include "words/key.asm" - - ; Character IO - ; fetch key vector and execute it, should leave a single character on TOS - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_KEY: -003eff ff03 .dw $ff03 -003f00 656b -003f01 0079 .db "key",0 -003f02 3ef6 .dw VE_HEAD - .set VE_HEAD = VE_KEY - XT_KEY: -003f03 3dff .dw PFA_DODEFER1 - PFA_KEY: - .endif -003f04 0012 .dw USER_KEY -003f05 3dc8 .dw XT_UDEFERFETCH -003f06 3dd4 .dw XT_UDEFERSTORE - .include "words/keyq.asm" - - ; Character IO - ; fetch key? vector and execute it. should turn on key sender, if it is disabled/stopped - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_KEYQ: -003f07 ff04 .dw $ff04 -003f08 656b -003f09 3f79 .db "key?" -003f0a 3eff .dw VE_HEAD - .set VE_HEAD = VE_KEYQ - XT_KEYQ: -003f0b 3dff .dw PFA_DODEFER1 - PFA_KEYQ: - .endif -003f0c 0014 .dw USER_KEYQ -003f0d 3dc8 .dw XT_UDEFERFETCH -003f0e 3dd4 .dw XT_UDEFERSTORE - - .include "words/dp.asm" - - ; System Value - ; address of the next free dictionary cell - VE_DP: -003f0f ff02 .dw $ff02 -003f10 7064 .db "dp" -003f11 3f07 .dw VE_HEAD - .set VE_HEAD = VE_DP - XT_DP: -003f12 386f .dw PFA_DOVALUE1 - PFA_DP: -003f13 002c .dw CFG_DP -003f14 3da0 .dw XT_EDEFERFETCH -003f15 3daa .dw XT_EDEFERSTORE - .include "words/ehere.asm" - - ; System Value - ; address of the next free address in eeprom - VE_EHERE: -003f16 ff05 .dw $ff05 -003f17 6865 -003f18 7265 -003f19 0065 .db "ehere",0 -003f1a 3f0f .dw VE_HEAD - .set VE_HEAD = VE_EHERE - XT_EHERE: -003f1b 386f .dw PFA_DOVALUE1 - PFA_EHERE: -003f1c 0030 .dw EE_EHERE -003f1d 3da0 .dw XT_EDEFERFETCH -003f1e 3daa .dw XT_EDEFERSTORE - .include "words/here.asm" - - ; System Value - ; address of the next free data space (RAM) cell - VE_HERE: -003f1f ff04 .dw $ff04 -003f20 6568 -003f21 6572 .db "here" -003f22 3f16 .dw VE_HEAD - .set VE_HEAD = VE_HERE - XT_HERE: -003f23 386f .dw PFA_DOVALUE1 - PFA_HERE: -003f24 002e .dw EE_HERE -003f25 3da0 .dw XT_EDEFERFETCH -003f26 3daa .dw XT_EDEFERSTORE - .include "words/allot.asm" - - ; System - ; allocate or release memory in RAM - VE_ALLOT: -003f27 ff05 .dw $ff05 -003f28 6c61 -003f29 6f6c -003f2a 0074 .db "allot",0 -003f2b 3f1f .dw VE_HEAD - .set VE_HEAD = VE_ALLOT - XT_ALLOT: -003f2c 3801 .dw DO_COLON - PFA_ALLOT: -003f2d 3f23 .dw XT_HERE -003f2e 399d .dw XT_PLUS -003f2f 01b4 .dw XT_DOTO -003f30 3f24 .dw PFA_HERE -003f31 3820 .dw XT_EXIT - - .include "words/bin.asm" - - ; Numeric IO - ; set base for numeric conversion to 10 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BIN: -003f32 ff03 .dw $ff03 -003f33 6962 -003f34 006e .db "bin",0 -003f35 3f27 .dw VE_HEAD - .set VE_HEAD = VE_BIN - XT_BIN: -003f36 3801 .dw DO_COLON - PFA_BIN: - .endif -003f37 3feb .dw XT_TWO -003f38 3ebd .dw XT_BASE -003f39 3881 .dw XT_STORE -003f3a 3820 .dw XT_EXIT - .include "words/decimal.asm" - - ; Numeric IO - ; set base for numeric conversion to 10 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DECIMAL: -003f3b ff07 .dw $ff07 -003f3c 6564 -003f3d 6963 -003f3e 616d -003f3f 006c .db "decimal",0 -003f40 3f32 .dw VE_HEAD - .set VE_HEAD = VE_DECIMAL - XT_DECIMAL: -003f41 3801 .dw DO_COLON - PFA_DECIMAL: - .endif -003f42 383d .dw XT_DOLITERAL -003f43 000a .dw 10 -003f44 3ebd .dw XT_BASE -003f45 3881 .dw XT_STORE -003f46 3820 .dw XT_EXIT - .include "words/hex.asm" - - ; Numeric IO - ; set base for numeric conversion to 10 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_HEX: -003f47 ff03 .dw $ff03 -003f48 6568 -003f49 0078 .db "hex",0 -003f4a 3f3b .dw VE_HEAD - .set VE_HEAD = VE_HEX - XT_HEX: -003f4b 3801 .dw DO_COLON - PFA_HEX: - .endif -003f4c 383d .dw XT_DOLITERAL -003f4d 0010 .dw 16 -003f4e 3ebd .dw XT_BASE -003f4f 3881 .dw XT_STORE -003f50 3820 .dw XT_EXIT - .include "words/bl.asm" - - ; Character IO - ; put ascii code of the blank to the stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BL: -003f51 ff02 .dw $ff02 -003f52 6c62 .db "bl" -003f53 3f47 .dw VE_HEAD - .set VE_HEAD = VE_BL - XT_BL: -003f54 3848 .dw PFA_DOVARIABLE - PFA_BL: - .endif -003f55 0020 .dw 32 - - .include "words/turnkey.asm" - - ; System Value - ; Deferred action during startup/reset - VE_TURNKEY: -003f56 ff07 .dw $ff07 -003f57 7574 -003f58 6e72 -003f59 656b -003f5a 0079 .db "turnkey",0 -003f5b 3f51 .dw VE_HEAD - .set VE_HEAD = VE_TURNKEY - XT_TURNKEY: -003f5c 3dff .dw PFA_DODEFER1 - PFA_TURNKEY: -003f5d 0038 .dw CFG_TURNKEY -003f5e 3da0 .dw XT_EDEFERFETCH -003f5f 3daa .dw XT_EDEFERSTORE - .include "words/to-upper.asm" - - ; String - ; if c is a lowercase letter convert it to uppercase - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TOUPPER: -003f60 ff07 .dw $ff07 -003f61 6f74 -003f62 7075 -003f63 6570 -003f64 0072 .db "toupper",0 -003f65 3f56 .dw VE_HEAD - .set VE_HEAD = VE_TOUPPER - XT_TOUPPER: -003f66 3801 .dw DO_COLON - PFA_TOUPPER: - .endif -003f67 38b1 .dw XT_DUP -003f68 383d .dw XT_DOLITERAL -003f69 0061 .dw 'a' -003f6a 383d .dw XT_DOLITERAL -003f6b 007b .dw 'z'+1 -003f6c 3e57 .dw XT_WITHIN -003f6d 3836 .dw XT_DOCONDBRANCH -003f6e 3f72 DEST(PFA_TOUPPER0) -003f6f 383d .dw XT_DOLITERAL -003f70 00df .dw 223 ; inverse of 0x20: 0xdf -003f71 3a13 .dw XT_AND - PFA_TOUPPER0: -003f72 3820 .dw XT_EXIT - .include "words/to-lower.asm" - - ; String - ; if C is an uppercase letter convert it to lowercase - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_TOLOWER: -003f73 ff07 .dw $ff07 -003f74 6f74 -003f75 6f6c -003f76 6577 -003f77 0072 .db "tolower",0 -003f78 3f60 .dw VE_HEAD - .set VE_HEAD = VE_TOLOWER - XT_TOLOWER: -003f79 3801 .dw DO_COLON - PFA_TOLOWER: - .endif -003f7a 38b1 .dw XT_DUP -003f7b 383d .dw XT_DOLITERAL -003f7c 0041 .dw 'A' -003f7d 383d .dw XT_DOLITERAL -003f7e 005b .dw 'Z'+1 -003f7f 3e57 .dw XT_WITHIN -003f80 3836 .dw XT_DOCONDBRANCH -003f81 3f85 DEST(PFA_TOLOWER0) -003f82 383d .dw XT_DOLITERAL -003f83 0020 .dw 32 -003f84 3a1c .dw XT_OR - PFA_TOLOWER0: -003f85 3820 .dw XT_EXIT - - .include "words/q-stack.asm" - - ; Tools - ; check data stack depth and exit to quit if underrun - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QSTACK: -003f86 ff06 .dw $ff06 -003f87 733f -003f88 6174 -003f89 6b63 .db "?stack" -003f8a 3f73 .dw VE_HEAD - .set VE_HEAD = VE_QSTACK - XT_QSTACK: -003f8b 3801 .dw DO_COLON - PFA_QSTACK: - .endif -003f8c 05e2 .dw XT_DEPTH -003f8d 3921 .dw XT_ZEROLESS -003f8e 3836 .dw XT_DOCONDBRANCH -003f8f 3f93 DEST(PFA_QSTACK1) -003f90 383d .dw XT_DOLITERAL -003f91 fffc .dw -4 -003f92 3d86 .dw XT_THROW - PFA_QSTACK1: -003f93 3820 .dw XT_EXIT - .include "words/bounds.asm" - - ; Tools - ; convert a string to an address range - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BOUNDS: -003f94 ff06 .dw $ff06 -003f95 6f62 -003f96 6e75 -003f97 7364 .db "bounds" -003f98 3f86 .dw VE_HEAD - .set VE_HEAD = VE_BOUNDS - XT_BOUNDS: -003f99 3801 .dw DO_COLON - PFA_BOUNDS: - .endif -003f9a 38cf .dw XT_OVER -003f9b 399d .dw XT_PLUS -003f9c 38c4 .dw XT_SWAP -003f9d 3820 .dw XT_EXIT - .include "words/cr.asm" - - ; Character IO - ; cause subsequent output appear at the beginning of the next line - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CR: -003f9e ff02 .dw 0xff02 -003f9f 7263 .db "cr" -003fa0 3f94 .dw VE_HEAD - .set VE_HEAD = VE_CR - XT_CR: -003fa1 3801 .dw DO_COLON - PFA_CR: - .endif - -003fa2 383d .dw XT_DOLITERAL -003fa3 000d .dw 13 -003fa4 3ef2 .dw XT_EMIT -003fa5 383d .dw XT_DOLITERAL -003fa6 000a .dw 10 -003fa7 3ef2 .dw XT_EMIT -003fa8 3820 .dw XT_EXIT - .include "words/space.asm" - - ; Character IO - ; emits a space (bl) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SPACE: -003fa9 ff05 .dw $ff05 -003faa 7073 -003fab 6361 -003fac 0065 .db "space",0 -003fad 3f9e .dw VE_HEAD - .set VE_HEAD = VE_SPACE - XT_SPACE: -003fae 3801 .dw DO_COLON - PFA_SPACE: - .endif -003faf 3f54 .dw XT_BL -003fb0 3ef2 .dw XT_EMIT -003fb1 3820 .dw XT_EXIT - .include "words/spaces.asm" - - ; Character IO - ; emits n space(s) (bl) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SPACES: -003fb2 ff06 .dw $ff06 -003fb3 7073 -003fb4 6361 -003fb5 7365 .db "spaces" -003fb6 3fa9 .dw VE_HEAD - .set VE_HEAD = VE_SPACES - XT_SPACES: -003fb7 3801 .dw DO_COLON - PFA_SPACES: - - .endif - ;C SPACES n -- output n spaces - ; BEGIN DUP 0> WHILE SPACE 1- REPEAT DROP ; -003fb8 3954 -003fb9 3e4a .DW XT_ZERO, XT_MAX -003fba 38b1 -003fbb 3836 SPCS1: .DW XT_DUP,XT_DOCONDBRANCH -003fbc 3fc1 DEST(SPCS2) -003fbd 3fae -003fbe 3a35 -003fbf 382f .DW XT_SPACE,XT_1MINUS,XT_DOBRANCH -003fc0 3fba DEST(SPCS1) -003fc1 38d9 -003fc2 3820 SPCS2: .DW XT_DROP,XT_EXIT - .include "words/s-to-d.asm" - - ; Conversion - ; extend (signed) single cell value to double cell - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_S2D: -003fc3 ff03 .dw $ff03 -003fc4 3e73 -003fc5 0064 .db "s>d",0 -003fc6 3fb2 .dw VE_HEAD - .set VE_HEAD = VE_S2D - XT_S2D: -003fc7 3801 .dw DO_COLON - PFA_S2D: - .endif -003fc8 38b1 .dw XT_DUP -003fc9 3921 .dw XT_ZEROLESS -003fca 3820 .dw XT_EXIT - .include "words/to-body.asm" - - ; Core - ; get body from XT - VE_TO_BODY: -003fcb ff05 .dw $ff05 -003fcc 623e -003fcd 646f -003fce 0079 .db ">body",0 -003fcf 3fc3 .dw VE_HEAD - .set VE_HEAD = VE_TO_BODY - XT_TO_BODY: -003fd0 3a30 .dw PFA_1PLUS - .elif AMFORTH_NRWW_SIZE>2000 - .else - .endif - ; now colon words - ;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/2literal.asm" - - ; Compiler - ; compile a cell pair literal in colon definitions - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2LITERAL: -003fd1 0008 .dw $0008 -003fd2 6c32 -003fd3 7469 -003fd4 7265 -003fd5 6c61 .db "2literal" -003fd6 3fcb .dw VE_HEAD - .set VE_HEAD = VE_2LITERAL - XT_2LITERAL: -003fd7 3801 .dw DO_COLON - PFA_2LITERAL: - .endif -003fd8 38c4 .dw XT_SWAP -003fd9 0772 .dw XT_LITERAL -003fda 0772 .dw XT_LITERAL -003fdb 3820 .dw XT_EXIT - .include "words/equal.asm" - - ; Compare - ; compares two values for equality - VE_EQUAL: -003fdc ff01 .dw $ff01 -003fdd 003d .db "=",0 -003fde 3fd1 .dw VE_HEAD - .set VE_HEAD = VE_EQUAL - XT_EQUAL: -003fdf 3801 .dw DO_COLON - PFA_EQUAL: -003fe0 3993 .dw XT_MINUS -003fe1 391a .dw XT_ZEROEQUAL -003fe2 3820 .dw XT_EXIT - .include "words/num-constants.asm" - - .endif - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ONE: -003fe3 ff01 .dw $ff01 -003fe4 0031 .db "1",0 -003fe5 3fdc .dw VE_HEAD - .set VE_HEAD = VE_ONE - XT_ONE: -003fe6 3848 .dw PFA_DOVARIABLE - PFA_ONE: - .endif -003fe7 0001 .DW 1 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TWO: -003fe8 ff01 .dw $ff01 -003fe9 0032 .db "2",0 -003fea 3fe3 .dw VE_HEAD - .set VE_HEAD = VE_TWO - XT_TWO: -003feb 3848 .dw PFA_DOVARIABLE - PFA_TWO: - .endif -003fec 0002 .DW 2 - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_MINUSONE: -003fed ff02 .dw $ff02 -003fee 312d .db "-1" -003fef 3fe8 .dw VE_HEAD - .set VE_HEAD = VE_MINUSONE - XT_MINUSONE: -003ff0 3848 .dw PFA_DOVARIABLE - PFA_MINUSONE: - .endif -003ff1 ffff .DW -1 - .include "dict_appl_core.inc" - - ; do not delete it! - - .set flashlast = pc - .if (pc>FLASHEND) - .endif - - .dseg - ; define a label for the 1st free ram address - HERESTART: - .eseg - .include "amforth-eeprom.inc" -00002a ff ff - ; some configs -00002c 1b 0b CFG_DP: .dw DPSTART ; Dictionary Pointer -00002e 1d 01 EE_HERE: .dw HERESTART ; Memory Allocation -000030 84 00 EE_EHERE: .dw EHERESTART ; EEProm Memory Allocation -000032 c3 09 CFG_WLSCOPE: .dw XT_GET_CURRENT ; default wordlist scope -000034 52 00 CFG_FORTHRECOGNIZER: .dw CFG_RECOGNIZERLISTLEN ; Recognizer word set - ; LEAVE stack is between data stack and return stack. -000036 10 08 CFG_LP0: .dw stackstart+1 -000038 6d 0a CFG_TURNKEY: .dw XT_APPLTURNKEY ; TURNKEY -00003a f4 02 CFG_ENVIRONMENT:.dw VE_ENVHEAD ; environmental queries -00003c 3e 00 CFG_CURRENT: .dw CFG_FORTHWORDLIST ; forth-wordlist -00003e ed 3f CFG_FORTHWORDLIST:.dw VE_HEAD ; pre-defined (compiled in) wordlist - CFG_ORDERLISTLEN: -000040 01 00 .dw 1 - CFG_ORDERLIST: ; list of wordlist id, exactly numwordlist entries -000042 3e 00 .dw CFG_FORTHWORDLIST ; get/set-order -000044 .byte (NUMWORDLISTS-1)*CELLSIZE ; one slot is already used - CFG_RECOGNIZERLISTLEN: -000052 02 00 .dw 2 - CFG_RECOGNIZERLIST: -000054 65 06 .dw XT_REC_FIND -000056 51 06 .dw XT_REC_NUM -000058 .byte (NUMRECOGNIZERS-2)*CELLSIZE ; two slots are already used - - EE_STOREI: -00005c 7e 3b .dw XT_DO_STOREI ; Store a cell into flash - - ; MARKER saves everything up to here. Nothing beyond gets saved - EE_MARKER: -00005e 5e 00 .dw EE_MARKER - - ; default user area - EE_INITUSER: -000060 00 00 .dw 0 ; USER_STATE -000062 00 00 .dw 0 ; USER_FOLLOWER -000064 5f 08 .dw rstackstart ; USER_RP -000066 0f 08 .dw stackstart ; USER_SP0 -000068 0f 08 .dw stackstart ; USER_SP - -00006a 00 00 .dw 0 ; USER_HANDLER -00006c 0a 00 .dw 10 ; USER_BASE - -00006e 98 00 .dw XT_TX ; USER_EMIT -000070 a6 00 .dw XT_TXQ ; USER_EMITQ -000072 6d 00 .dw XT_RX ; USER_KEY -000074 88 00 .dw XT_RXQ ; USER_KEYQ -000076 6c 02 .dw XT_SOURCETIB ; USER_SOURCE -000078 00 00 .dw 0 ; USER_G_IN -00007a 59 02 .dw XT_REFILLTIB ; USER_REFILL -00007c c9 3c .dw XT_DEFAULT_PROMPTOK -00007e e8 3c .dw XT_DEFAULT_PROMPTERROR -000080 d8 3c .dw XT_DEFAULT_PROMPTREADY - - ; calculate baud rate error - .equ UBRR_VAL = ((F_CPU+BAUD*8)/(BAUD*16)-1) ; smart round - .equ BAUD_REAL = (F_CPU/(16*(UBRR_VAL+1))) ; effective baud rate - .equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000) ; error in pro mille - - .if ((BAUD_ERROR>BAUD_MAXERROR) || (BAUD_ERROR<-BAUD_MAXERROR)) - .endif - EE_UBRRVAL: -000082 0c 00 .dw UBRR_VAL ; BAUDRATE - ; 1st free address in EEPROM. - EHERESTART: - .cseg - - -RESOURCE USE INFORMATION ------------------------- - -Notice: -The register and instruction counts are symbol table hit counts, -and hence implicitly used resources are not counted, eg, the -'lpm' instruction without operands implicitly uses r0 and z, -none of which are counted. - -x,y,z are separate entities in the symbol table and are -counted separately from r26..r31 here. - -.dseg memory usage only counts static data declared with .byte - -"ATmega32" register use summary: -r0 : 25 r1 : 5 r2 : 10 r3 : 12 r4 : 4 r5 : 1 r6 : 0 r7 : 0 -r8 : 0 r9 : 0 r10: 1 r11: 6 r12: 0 r13: 0 r14: 22 r15: 20 -r16: 89 r17: 61 r18: 61 r19: 37 r20: 13 r21: 11 r22: 11 r23: 3 -r24: 212 r25: 145 r26: 28 r27: 17 r28: 7 r29: 4 r30: 90 r31: 49 -x : 4 y : 217 z : 50 -Registers used: 29 out of 35 (82.9%) - -"ATmega32" instruction use summary: -.lds : 0 .sts : 0 adc : 22 add : 17 adiw : 17 and : 4 -andi : 3 asr : 2 bclr : 0 bld : 0 brbc : 2 brbs : 7 -brcc : 3 brcs : 1 break : 0 breq : 6 brge : 1 brhc : 0 -brhs : 0 brid : 0 brie : 0 brlo : 1 brlt : 3 brmi : 3 -brne : 22 brpl : 0 brsh : 0 brtc : 0 brts : 0 brvc : 0 -brvs : 2 bset : 0 bst : 0 call : 2 cbi : 7 cbr : 1 -clc : 2 clh : 0 cli : 7 cln : 0 clr : 14 cls : 0 -clt : 0 clv : 0 clz : 0 com : 14 cp : 11 cpc : 10 -cpi : 2 cpse : 0 dec : 10 eor : 3 fmul : 0 fmuls : 0 -fmulsu: 0 icall : 0 ijmp : 1 in : 25 inc : 3 jmp : 13 -ld : 145 ldd : 4 ldi : 41 lds : 1 lpm : 16 lsl : 14 -lsr : 2 mov : 16 movw : 72 mul : 5 muls : 1 mulsu : 2 -neg : 0 nop : 0 or : 9 ori : 2 out : 22 pop : 49 -push : 43 rcall : 34 ret : 7 reti : 1 rjmp : 106 rol : 23 -ror : 6 sbc : 9 sbci : 3 sbi : 8 sbic : 3 sbis : 0 -sbiw : 16 sbr : 0 sbrc : 5 sbrs : 7 sec : 1 seh : 0 -sei : 1 sen : 0 ser : 4 ses : 0 set : 0 sev : 0 -sez : 0 sleep : 0 spm : 2 st : 81 std : 8 sts : 1 -sub : 6 subi : 3 swap : 0 tst : 0 wdr : 0 -Instructions used: 72 out of 113 (63.7%) - -"ATmega32" memory use summary [bytes]: -Segment Begin End Code Data Used Size Use% ---------------------------------------------------------------- -[.cseg] 0x000000 0x007fe4 2072 11708 13780 32768 42.1% -[.dseg] 0x000060 0x00011d 0 189 189 2048 9.2% -[.eseg] 0x000000 0x000084 0 132 132 1024 12.9% - -Assembly complete, 0 errors, 8 warnings diff --git a/amforth-6.5/appl/eval-pollin/p32-8.map b/amforth-6.5/appl/eval-pollin/p32-8.map deleted file mode 100644 index 8968a65..0000000 --- a/amforth-6.5/appl/eval-pollin/p32-8.map +++ /dev/null @@ -1,1933 +0,0 @@ - -AVRASM ver. 2.1.52 p32-8.asm Sun Apr 30 20:10:14 2017 - - -SET DICT_COMPILER2 00000001 -SET cpu_msp430 00000000 -SET cpu_avr8 00000001 -SET USER_STATE 00000000 -SET USER_FOLLOWER 00000002 -SET USER_RP 00000004 -SET USER_SP0 00000006 -SET USER_SP 00000008 -SET USER_HANDLER 0000000a -SET USER_BASE 0000000c -SET USER_EMIT 0000000e -SET USER_EMITQ 00000010 -SET USER_KEY 00000012 -SET USER_KEYQ 00000014 -SET USER_SOURCE 00000016 -SET USER_TO_IN 00000018 -SET USER_REFILL 0000001a -SET USER_P_OK 0000001c -SET USER_P_ERR 0000001e -SET USER_P_RDY 00000020 -SET SYSUSERSIZE 00000022 -DEF zerol r2 -DEF zeroh r3 -DEF upl r4 -DEF uph r5 -DEF al r6 -DEF ah r7 -DEF bl r8 -DEF bh r9 -DEF mcu_boot r10 -DEF isrflag r11 -DEF temp4 r14 -DEF temp5 r15 -DEF temp0 r16 -DEF temp1 r17 -DEF temp2 r18 -DEF temp3 r19 -DEF temp6 r20 -DEF temp7 r21 -DEF tosl r24 -DEF tosh r25 -DEF wl r22 -DEF wh r23 -EQU SIGNATURE_000 0000001e -EQU SIGNATURE_001 00000095 -EQU SIGNATURE_002 00000002 -EQU SREG 0000003f -EQU SPL 0000003d -EQU SPH 0000003e -EQU OCR0 0000003c -EQU GICR 0000003b -EQU GIFR 0000003a -EQU TIMSK 00000039 -EQU TIFR 00000038 -EQU SPMCR 00000037 -EQU TWCR 00000036 -EQU MCUCR 00000035 -EQU MCUCSR 00000034 -EQU TCCR0 00000033 -EQU TCNT0 00000032 -EQU OSCCAL 00000031 -EQU OCDR 00000031 -EQU SFIOR 00000030 -EQU TCCR1A 0000002f -EQU TCCR1B 0000002e -EQU TCNT1L 0000002c -EQU TCNT1H 0000002d -EQU OCR1AL 0000002a -EQU OCR1AH 0000002b -EQU OCR1BL 00000028 -EQU OCR1BH 00000029 -EQU ICR1L 00000026 -EQU ICR1H 00000027 -EQU TCCR2 00000025 -EQU TCNT2 00000024 -EQU OCR2 00000023 -EQU ASSR 00000022 -EQU WDTCR 00000021 -EQU UBRRH 00000020 -EQU UCSRC 00000020 -EQU EEARL 0000001e -EQU EEARH 0000001f -EQU EEDR 0000001d -EQU EECR 0000001c -EQU PORTA 0000001b -EQU DDRA 0000001a -EQU PINA 00000019 -EQU PORTB 00000018 -EQU DDRB 00000017 -EQU PINB 00000016 -EQU PORTC 00000015 -EQU DDRC 00000014 -EQU PINC 00000013 -EQU PORTD 00000012 -EQU DDRD 00000011 -EQU PIND 00000010 -EQU SPDR 0000000f -EQU SPSR 0000000e -EQU SPCR 0000000d -EQU UDR 0000000c -EQU UCSRA 0000000b -EQU UCSRB 0000000a -EQU UBRRL 00000009 -EQU ACSR 00000008 -EQU ADMUX 00000007 -EQU ADCSRA 00000006 -EQU ADCH 00000005 -EQU ADCL 00000004 -EQU TWDR 00000003 -EQU TWAR 00000002 -EQU TWSR 00000001 -EQU TWBR 00000000 -EQU EEDR0 00000000 -EQU EEDR1 00000001 -EQU EEDR2 00000002 -EQU EEDR3 00000003 -EQU EEDR4 00000004 -EQU EEDR5 00000005 -EQU EEDR6 00000006 -EQU EEDR7 00000007 -EQU EERE 00000000 -EQU EEWE 00000001 -EQU EEMWE 00000002 -EQU EERIE 00000003 -EQU WDP0 00000000 -EQU WDP1 00000001 -EQU WDP2 00000002 -EQU WDE 00000003 -EQU WDTOE 00000004 -EQU WDDE 00000004 -EQU GIMSK 0000003b -EQU IVCE 00000000 -EQU IVSEL 00000001 -EQU INT2 00000005 -EQU INT0 00000006 -EQU INT1 00000007 -EQU INTF2 00000005 -EQU INTF0 00000006 -EQU INTF1 00000007 -EQU ISC00 00000000 -EQU ISC01 00000001 -EQU ISC10 00000002 -EQU ISC11 00000003 -EQU ISC2 00000006 -EQU CS00 00000000 -EQU CS01 00000001 -EQU CS02 00000002 -EQU WGM01 00000003 -EQU CTC0 00000003 -EQU COM00 00000004 -EQU COM01 00000005 -EQU WGM00 00000006 -EQU PWM0 00000006 -EQU FOC0 00000007 -EQU TCNT0_0 00000000 -EQU TCNT0_1 00000001 -EQU TCNT0_2 00000002 -EQU TCNT0_3 00000003 -EQU TCNT0_4 00000004 -EQU TCNT0_5 00000005 -EQU TCNT0_6 00000006 -EQU TCNT0_7 00000007 -EQU OCR0_0 00000000 -EQU OCR0_1 00000001 -EQU OCR0_2 00000002 -EQU OCR0_3 00000003 -EQU OCR0_4 00000004 -EQU OCR0_5 00000005 -EQU OCR0_6 00000006 -EQU OCR0_7 00000007 -EQU TOIE0 00000000 -EQU OCIE0 00000001 -EQU TOV0 00000000 -EQU OCF0 00000001 -EQU TOIE2 00000006 -EQU OCIE2 00000007 -EQU TOV2 00000006 -EQU OCF2 00000007 -EQU CS20 00000000 -EQU CS21 00000001 -EQU CS22 00000002 -EQU WGM21 00000003 -EQU CTC2 00000003 -EQU COM20 00000004 -EQU COM21 00000005 -EQU WGM20 00000006 -EQU PWM2 00000006 -EQU FOC2 00000007 -EQU TCNT2_0 00000000 -EQU TCNT2_1 00000001 -EQU TCNT2_2 00000002 -EQU TCNT2_3 00000003 -EQU TCNT2_4 00000004 -EQU TCNT2_5 00000005 -EQU TCNT2_6 00000006 -EQU TCNT2_7 00000007 -EQU OCR2_0 00000000 -EQU OCR2_1 00000001 -EQU OCR2_2 00000002 -EQU OCR2_3 00000003 -EQU OCR2_4 00000004 -EQU OCR2_5 00000005 -EQU OCR2_6 00000006 -EQU OCR2_7 00000007 -EQU TCR2UB 00000000 -EQU OCR2UB 00000001 -EQU TCN2UB 00000002 -EQU AS2 00000003 -EQU TOIE1 00000002 -EQU OCIE1B 00000003 -EQU OCIE1A 00000004 -EQU TICIE1 00000005 -EQU TOV1 00000002 -EQU OCF1B 00000003 -EQU OCF1A 00000004 -EQU ICF1 00000005 -EQU WGM10 00000000 -EQU PWM10 00000000 -EQU WGM11 00000001 -EQU PWM11 00000001 -EQU FOC1B 00000002 -EQU FOC1A 00000003 -EQU COM1B0 00000004 -EQU COM1B1 00000005 -EQU COM1A0 00000006 -EQU COM1A1 00000007 -EQU CS10 00000000 -EQU CS11 00000001 -EQU CS12 00000002 -EQU WGM12 00000003 -EQU CTC10 00000003 -EQU CTC1 00000003 -EQU WGM13 00000004 -EQU CTC11 00000004 -EQU ICES1 00000006 -EQU ICNC1 00000007 -EQU SPDR0 00000000 -EQU SPDR1 00000001 -EQU SPDR2 00000002 -EQU SPDR3 00000003 -EQU SPDR4 00000004 -EQU SPDR5 00000005 -EQU SPDR6 00000006 -EQU SPDR7 00000007 -EQU SPI2X 00000000 -EQU WCOL 00000006 -EQU SPIF 00000007 -EQU SPR0 00000000 -EQU SPR1 00000001 -EQU CPHA 00000002 -EQU CPOL 00000003 -EQU MSTR 00000004 -EQU DORD 00000005 -EQU SPE 00000006 -EQU SPIE 00000007 -EQU UDR0 00000000 -EQU UDR1 00000001 -EQU UDR2 00000002 -EQU UDR3 00000003 -EQU UDR4 00000004 -EQU UDR5 00000005 -EQU UDR6 00000006 -EQU UDR7 00000007 -EQU USR 0000000b -EQU MPCM 00000000 -EQU U2X 00000001 -EQU UPE 00000002 -EQU PE 00000002 -EQU DOR 00000003 -EQU FE 00000004 -EQU UDRE 00000005 -EQU TXC 00000006 -EQU RXC 00000007 -EQU UCR 0000000a -EQU TXB8 00000000 -EQU RXB8 00000001 -EQU UCSZ2 00000002 -EQU CHR9 00000002 -EQU TXEN 00000003 -EQU RXEN 00000004 -EQU UDRIE 00000005 -EQU TXCIE 00000006 -EQU RXCIE 00000007 -EQU UCPOL 00000000 -EQU UCSZ0 00000001 -EQU UCSZ1 00000002 -EQU USBS 00000003 -EQU UPM0 00000004 -EQU UPM1 00000005 -EQU UMSEL 00000006 -EQU URSEL 00000007 -EQU UBRRHI 00000020 -EQU ACME 00000003 -EQU ACIS0 00000000 -EQU ACIS1 00000001 -EQU ACIC 00000002 -EQU ACIE 00000003 -EQU ACI 00000004 -EQU ACO 00000005 -EQU ACBG 00000006 -EQU ACD 00000007 -EQU MUX0 00000000 -EQU MUX1 00000001 -EQU MUX2 00000002 -EQU MUX3 00000003 -EQU MUX4 00000004 -EQU ADLAR 00000005 -EQU REFS0 00000006 -EQU REFS1 00000007 -EQU ADCSR 00000006 -EQU ADPS0 00000000 -EQU ADPS1 00000001 -EQU ADPS2 00000002 -EQU ADIE 00000003 -EQU ADIF 00000004 -EQU ADATE 00000005 -EQU ADFR 00000005 -EQU ADSC 00000006 -EQU ADEN 00000007 -EQU ADCH0 00000000 -EQU ADCH1 00000001 -EQU ADCH2 00000002 -EQU ADCH3 00000003 -EQU ADCH4 00000004 -EQU ADCH5 00000005 -EQU ADCH6 00000006 -EQU ADCH7 00000007 -EQU ADCL0 00000000 -EQU ADCL1 00000001 -EQU ADCL2 00000002 -EQU ADCL3 00000003 -EQU ADCL4 00000004 -EQU ADCL5 00000005 -EQU ADCL6 00000006 -EQU ADCL7 00000007 -EQU ADTS0 00000005 -EQU ADTS1 00000006 -EQU ADTS2 00000007 -EQU PORTA0 00000000 -EQU PA0 00000000 -EQU PORTA1 00000001 -EQU PA1 00000001 -EQU PORTA2 00000002 -EQU PA2 00000002 -EQU PORTA3 00000003 -EQU PA3 00000003 -EQU PORTA4 00000004 -EQU PA4 00000004 -EQU PORTA5 00000005 -EQU PA5 00000005 -EQU PORTA6 00000006 -EQU PA6 00000006 -EQU PORTA7 00000007 -EQU PA7 00000007 -EQU DDA0 00000000 -EQU DDA1 00000001 -EQU DDA2 00000002 -EQU DDA3 00000003 -EQU DDA4 00000004 -EQU DDA5 00000005 -EQU DDA6 00000006 -EQU DDA7 00000007 -EQU PINA0 00000000 -EQU PINA1 00000001 -EQU PINA2 00000002 -EQU PINA3 00000003 -EQU PINA4 00000004 -EQU PINA5 00000005 -EQU PINA6 00000006 -EQU PINA7 00000007 -EQU PORTB0 00000000 -EQU PB0 00000000 -EQU PORTB1 00000001 -EQU PB1 00000001 -EQU PORTB2 00000002 -EQU PB2 00000002 -EQU PORTB3 00000003 -EQU PB3 00000003 -EQU PORTB4 00000004 -EQU PB4 00000004 -EQU PORTB5 00000005 -EQU PB5 00000005 -EQU PORTB6 00000006 -EQU PB6 00000006 -EQU PORTB7 00000007 -EQU PB7 00000007 -EQU DDB0 00000000 -EQU DDB1 00000001 -EQU DDB2 00000002 -EQU DDB3 00000003 -EQU DDB4 00000004 -EQU DDB5 00000005 -EQU DDB6 00000006 -EQU DDB7 00000007 -EQU PINB0 00000000 -EQU PINB1 00000001 -EQU PINB2 00000002 -EQU PINB3 00000003 -EQU PINB4 00000004 -EQU PINB5 00000005 -EQU PINB6 00000006 -EQU PINB7 00000007 -EQU PORTC0 00000000 -EQU PC0 00000000 -EQU PORTC1 00000001 -EQU PC1 00000001 -EQU PORTC2 00000002 -EQU PC2 00000002 -EQU PORTC3 00000003 -EQU PC3 00000003 -EQU PORTC4 00000004 -EQU PC4 00000004 -EQU PORTC5 00000005 -EQU PC5 00000005 -EQU PORTC6 00000006 -EQU PC6 00000006 -EQU PORTC7 00000007 -EQU PC7 00000007 -EQU DDC0 00000000 -EQU DDC1 00000001 -EQU DDC2 00000002 -EQU DDC3 00000003 -EQU DDC4 00000004 -EQU DDC5 00000005 -EQU DDC6 00000006 -EQU DDC7 00000007 -EQU PINC0 00000000 -EQU PINC1 00000001 -EQU PINC2 00000002 -EQU PINC3 00000003 -EQU PINC4 00000004 -EQU PINC5 00000005 -EQU PINC6 00000006 -EQU PINC7 00000007 -EQU PORTD0 00000000 -EQU PD0 00000000 -EQU PORTD1 00000001 -EQU PD1 00000001 -EQU PORTD2 00000002 -EQU PD2 00000002 -EQU PORTD3 00000003 -EQU PD3 00000003 -EQU PORTD4 00000004 -EQU PD4 00000004 -EQU PORTD5 00000005 -EQU PD5 00000005 -EQU PORTD6 00000006 -EQU PD6 00000006 -EQU PORTD7 00000007 -EQU PD7 00000007 -EQU DDD0 00000000 -EQU DDD1 00000001 -EQU DDD2 00000002 -EQU DDD3 00000003 -EQU DDD4 00000004 -EQU DDD5 00000005 -EQU DDD6 00000006 -EQU DDD7 00000007 -EQU PIND0 00000000 -EQU PIND1 00000001 -EQU PIND2 00000002 -EQU PIND3 00000003 -EQU PIND4 00000004 -EQU PIND5 00000005 -EQU PIND6 00000006 -EQU PIND7 00000007 -EQU SREG_C 00000000 -EQU SREG_Z 00000001 -EQU SREG_N 00000002 -EQU SREG_V 00000003 -EQU SREG_S 00000004 -EQU SREG_H 00000005 -EQU SREG_T 00000006 -EQU SREG_I 00000007 -EQU SM0 00000004 -EQU SM1 00000005 -EQU SM2 00000006 -EQU SE 00000007 -EQU MCUSR 00000034 -EQU PORF 00000000 -EQU EXTRF 00000001 -EQU BORF 00000002 -EQU WDRF 00000003 -EQU JTRF 00000004 -EQU JTD 00000007 -EQU CAL0 00000000 -EQU CAL1 00000001 -EQU CAL2 00000002 -EQU CAL3 00000003 -EQU CAL4 00000004 -EQU CAL5 00000005 -EQU CAL6 00000006 -EQU CAL7 00000007 -EQU PSR10 00000000 -EQU PSR2 00000001 -EQU PUD 00000002 -EQU SPMEN 00000000 -EQU PGERS 00000001 -EQU PGWRT 00000002 -EQU BLBSET 00000003 -EQU RWWSRE 00000004 -EQU ASRE 00000004 -EQU RWWSB 00000006 -EQU ASB 00000006 -EQU SPMIE 00000007 -EQU TWBR0 00000000 -EQU TWBR1 00000001 -EQU TWBR2 00000002 -EQU TWBR3 00000003 -EQU TWBR4 00000004 -EQU TWBR5 00000005 -EQU TWBR6 00000006 -EQU TWBR7 00000007 -EQU TWIE 00000000 -EQU TWEN 00000002 -EQU TWWC 00000003 -EQU TWSTO 00000004 -EQU TWSTA 00000005 -EQU TWEA 00000006 -EQU TWINT 00000007 -EQU TWPS0 00000000 -EQU TWPS1 00000001 -EQU TWS3 00000003 -EQU TWS4 00000004 -EQU TWS5 00000005 -EQU TWS6 00000006 -EQU TWS7 00000007 -EQU TWD0 00000000 -EQU TWD1 00000001 -EQU TWD2 00000002 -EQU TWD3 00000003 -EQU TWD4 00000004 -EQU TWD5 00000005 -EQU TWD6 00000006 -EQU TWD7 00000007 -EQU TWGCE 00000000 -EQU TWA0 00000001 -EQU TWA1 00000002 -EQU TWA2 00000003 -EQU TWA3 00000004 -EQU TWA4 00000005 -EQU TWA5 00000006 -EQU TWA6 00000007 -EQU LB1 00000000 -EQU LB2 00000001 -EQU BLB01 00000002 -EQU BLB02 00000003 -EQU BLB11 00000004 -EQU BLB12 00000005 -EQU CKSEL0 00000000 -EQU CKSEL1 00000001 -EQU CKSEL2 00000002 -EQU CKSEL3 00000003 -EQU BODEN 00000006 -EQU BODLEVEL 00000007 -EQU BOOTRST 00000000 -EQU BOOTSZ0 00000001 -EQU BOOTSZ1 00000002 -EQU EESAVE 00000003 -EQU SPIEN 00000005 -EQU JTAGEN 00000006 -EQU OCDEN 00000007 -DEF XH r27 -DEF XL r26 -DEF YH r29 -DEF YL r28 -DEF ZH r31 -DEF ZL r30 -EQU FLASHEND 00003fff -EQU IOEND 0000003f -EQU SRAM_START 00000060 -EQU SRAM_SIZE 00000800 -EQU RAMEND 0000085f -EQU XRAMEND 00000000 -EQU E2END 000003ff -EQU EEPROMEND 000003ff -EQU EEADRBITS 0000000a -EQU NRWW_START_ADDR 00003800 -EQU NRWW_STOP_ADDR 00003fff -EQU RWW_START_ADDR 00000000 -EQU RWW_STOP_ADDR 000037ff -EQU PAGESIZE 00000040 -EQU FIRSTBOOTSTART 00003f00 -EQU SECONDBOOTSTART 00003e00 -EQU THIRDBOOTSTART 00003c00 -EQU FOURTHBOOTSTART 00003800 -EQU SMALLBOOTSTART 00003f00 -EQU LARGEBOOTSTART 00003800 -EQU INT0addr 00000002 -EQU INT1addr 00000004 -EQU INT2addr 00000006 -EQU OC2addr 00000008 -EQU OVF2addr 0000000a -EQU ICP1addr 0000000c -EQU OC1Aaddr 0000000e -EQU OC1Baddr 00000010 -EQU OVF1addr 00000012 -EQU OC0addr 00000014 -EQU OVF0addr 00000016 -EQU SPIaddr 00000018 -EQU URXCaddr 0000001a -EQU UDREaddr 0000001c -EQU UTXCaddr 0000001e -EQU ADCCaddr 00000020 -EQU ERDYaddr 00000022 -EQU ACIaddr 00000024 -EQU TWIaddr 00000026 -EQU SPMRaddr 00000028 -EQU INT_VECTORS_SIZE 0000002a -EQU ramstart 00000060 -EQU CELLSIZE 00000002 -SET WANT_EEPROM 00000000 -SET WANT_WATCHDOG 00000000 -SET WANT_EXTERNAL_INTERRUPT 00000000 -SET WANT_TIMER_COUNTER_0 00000000 -SET WANT_TIMER_COUNTER_2 00000000 -SET WANT_TIMER_COUNTER_1 00000000 -SET WANT_SPI 00000000 -SET WANT_USART 00000000 -SET WANT_ANALOG_COMPARATOR 00000000 -SET WANT_AD_CONVERTER 00000000 -SET WANT_PORTA 00000000 -SET WANT_PORTB 00000000 -SET WANT_PORTC 00000000 -SET WANT_PORTD 00000000 -SET WANT_CPU 00000000 -SET WANT_BOOT_LOAD 00000000 -SET WANT_TWI 00000000 -EQU intvecsize 00000002 -EQU pclen 00000002 -CSEG isr 0000011e -EQU INTVECTORS 00000015 -EQU SPMCSR 00000037 -EQU EEPE 00000001 -EQU EEMPE 00000002 -CSEG mcu_info 00000029 -CSEG mcu_ramsize 00000029 -CSEG mcu_eepromsize 0000002a -CSEG mcu_maxdp 0000002b -CSEG mcu_numints 0000002c -CSEG mcu_name 0000002d -SET codestart 00000032 -SET WANT_INTERRUPTS 00000001 -SET WANT_INTERRUPT_COUNTERS 00000000 -SET WANT_ISR_RX 00000001 -SET WANT_IGNORECASE 00000000 -SET WANT_UNIFIED 00000000 -SET TIB_SIZE 0000005a -SET APPUSERSIZE 0000000a -SET rstackstart 0000085f -SET stackstart 0000080f -SET NUMWORDLISTS 00000008 -SET NUMRECOGNIZERS 00000004 -SET BAUD 00009600 -SET BAUD_MAXERROR 0000001e -SET VE_HEAD 00003fed -SET VE_ENVHEAD 000002f4 -SET AMFORTH_RO_SEG 00003801 -EQU F_CPU 007a1200 -EQU TIMER_INT 0000000a -EQU BAUDRATE_LOW 00000029 -EQU BAUDRATE_HIGH 00000040 -EQU USART_C 00000040 -EQU USART_B 0000002a -EQU USART_A 0000002b -EQU USART_DATA 0000002c -EQU bm_USARTC_en 00000080 -EQU bm_USART_RXRD 00000080 -EQU bm_USART_TXRD 00000020 -EQU bm_ENABLE_TX 00000008 -EQU bm_ENABLE_RX 00000010 -EQU bm_ENABLE_INT_RX 00000080 -EQU bm_ENABLE_INT_TX 00000020 -EQU bm_ASYNC 00000000 -EQU bm_SYNC 00000040 -EQU bm_NO_PARITY 00000000 -EQU bm_EVEN_PARITY 00000020 -EQU bm_ODD_PARITY 00000030 -EQU bm_1STOPBIT 00000000 -EQU bm_2STOPBIT 00000008 -EQU bm_5BIT 00000000 -EQU bm_6BIT 00000002 -EQU bm_7BIT 00000004 -EQU bm_8BIT 00000006 -SET USART_C_VALUE 00000006 -SET USART_B_VALUE 00000098 -EQU usart_rx_size 00000010 -EQU usart_rx_mask 0000000f -DSEG usart_rx_data 00000060 -DSEG usart_rx_in 00000070 -DSEG usart_rx_out 00000071 -CSEG VE_TO_RXBUF 00000032 -CSEG XT_TO_RXBUF 00000038 -CSEG PFA_rx_tobuf 00000039 -CSEG DO_NEXT 00003805 -CSEG VE_ISR_RX 00000049 -CSEG XT_ISR_RX 0000004e -CSEG DO_COLON 00003801 -CSEG usart_rx_isr 0000004f -CSEG XT_DOLITERAL 0000383d -CSEG XT_CFETCH 00003898 -CSEG XT_DUP 000038b1 -CSEG XT_EQUAL 00003fdf -CSEG XT_DOCONDBRANCH 00003836 -CSEG usart_rx_isr1 00000059 -CSEG XT_COLD 00003d38 -CSEG XT_EXIT 00003820 -CSEG XT_USART_INIT_RX_BUFFER 0000005b -CSEG PFA_USART_INIT_RX_BUFFER 0000005c -CSEG XT_INTSTORE 00003ca5 -CSEG XT_ZERO 00003954 -CSEG XT_FILL 00003e98 -CSEG VE_RX_BUFFER 00000068 -CSEG XT_RX_BUFFER 0000006d -CSEG PFA_RX_BUFFER 0000006e -CSEG XT_RXQ_BUFFER 00000088 -CSEG XT_PLUS 0000399d -CSEG XT_SWAP 000038c4 -CSEG XT_1PLUS 00003a2f -CSEG XT_AND 00003a13 -CSEG XT_CSTORE 0000388d -CSEG VE_RXQ_BUFFER 00000082 -CSEG PFA_RXQ_BUFFER 00000089 -CSEG XT_PAUSE 00003d30 -CSEG XT_NOTEQUAL 00003913 -SET XT_RX 0000006d -SET XT_RXQ 00000088 -SET XT_USART_INIT_RX 0000005b -CSEG VE_TX_POLL 00000092 -CSEG XT_TX_POLL 00000098 -CSEG PFA_TX_POLL 00000099 -CSEG XT_TXQ_POLL 000000a6 -CSEG VE_TXQ_POLL 000000a0 -CSEG PFA_TXQ_POLL 000000a7 -SET XT_TX 00000098 -SET XT_TXQ 000000a6 -SET XT_USART_INIT_TX 00000000 -CSEG VE_UBRR 000000af -CSEG XT_UBRR 000000b3 -CSEG PFA_DOVALUE1 0000386f -CSEG PFA_UBRR 000000b4 -ESEG EE_UBRRVAL 00000082 -CSEG XT_EDEFERFETCH 00003da0 -CSEG XT_EDEFERSTORE 00003daa -CSEG VE_USART 000000b7 -CSEG XT_USART 000000bc -CSEG PFA_USART 000000bd -CSEG XT_BYTESWAP 00003af9 -EQU OW_PORT 00000018 -EQU OW_BIT 00000004 -SET OW_DDR 00000017 -SET OW_PIN 00000016 -CSEG VE_OW_RESET 000000d2 -CSEG XT_OW_RESET 000000d8 -CSEG PFA_OW_RESET 000000d9 -SET cycles 00000000 -SET loop_cycles 000007d0 -CSEG VE_OW_SLOT 000000f6 -CSEG XT_OW_SLOT 000000fc -CSEG PFA_OW_SLOT 000000fd -CSEG PFA_OW_SLOT0 0000010a -SET AMFORTH_NRWW_SIZE 00000ffc -SET corepc 0000011e -CSEG PFA_COLD 00003d39 -ESEG intvec 00000000 -DSEG intcnt 00000072 -CSEG VE_MPLUS 00000135 -CSEG XT_MPLUS 00000138 -CSEG PFA_MPLUS 00000139 -CSEG XT_S2D 00003fc7 -CSEG XT_DPLUS 00003c15 -CSEG VE_UDSTAR 0000013c -CSEG XT_UDSTAR 00000140 -CSEG PFA_UDSTAR 00000141 -CSEG XT_TO_R 000038ff -CSEG XT_UMSTAR 000039e0 -CSEG XT_DROP 000038d9 -CSEG XT_R_FROM 000038f6 -CSEG XT_ROT 000038e1 -CSEG VE_UMAX 0000014b -CSEG XT_UMAX 0000014f -CSEG PFA_UMAX 00000150 -CSEG XT_2DUP 00003ec9 -CSEG XT_ULESS 0000395c -CSEG UMAX1 00000155 -CSEG VE_UMIN 00000157 -CSEG XT_UMIN 0000015b -CSEG PFA_UMIN 0000015c -CSEG XT_UGREATER 00003967 -CSEG UMIN1 00000161 -CSEG XT_IMMEDIATEQ 00000163 -CSEG PFA_IMMEDIATEQ 00000164 -CSEG XT_ZEROEQUAL 0000391a -CSEG IMMEDIATEQ1 0000016c -CSEG XT_ONE 00003fe6 -CSEG XT_TRUE 0000394b -CSEG VE_NAME2FLAGS 0000016e -CSEG XT_NAME2FLAGS 00000175 -CSEG PFA_NAME2FLAGS 00000176 -CSEG XT_FETCHI 00003bcb -CSEG VE_DOT_VER 0000017b -CSEG XT_DOT_VER 0000017f -CSEG PFA_DOT_VER 00000180 -CSEG XT_ENV_FORTHNAME 000002cf -CSEG XT_ITYPE 000003f8 -CSEG XT_SPACE 00003fae -CSEG XT_BASE 00003ebd -CSEG XT_FETCH 00003879 -CSEG XT_ENV_FORTHVERSION 000002dd -CSEG XT_DECIMAL 00003f41 -CSEG XT_L_SHARP 00000316 -CSEG XT_SHARP 0000031e -CSEG XT_HOLD 00000307 -CSEG XT_SHARP_S 00000334 -CSEG XT_SHARP_G 0000033f -CSEG XT_TYPE 0000042e -CSEG XT_STORE 00003881 -CSEG XT_ENV_CPU 000002e5 -CSEG VE_NOOP 00000196 -CSEG XT_NOOP 0000019a -CSEG PFA_NOOP 0000019b -CSEG VE_UNUSED 0000019c -CSEG XT_UNUSED 000001a1 -CSEG PFA_UNUSED 000001a2 -CSEG XT_SP_FETCH 00003a8d -CSEG XT_HERE 00003f23 -CSEG XT_MINUS 00003993 -CSEG VE_TO 000001a6 -CSEG XT_TO 000001a9 -CSEG PFA_TO 000001aa -CSEG XT_TICK 0000043d -CSEG XT_TO_BODY 00003fd0 -CSEG XT_STATE 00003eb7 -CSEG PFA_TO1 000001ba -CSEG XT_COMPILE 00000751 -CSEG XT_DOTO 000001b4 -CSEG XT_COMMA 0000075c -CSEG PFA_DOTO 000001b5 -CSEG XT_ICELLPLUS 000001c6 -CSEG XT_EXECUTE 0000382a -CSEG VE_ICELLPLUS 000001c0 -CSEG PFA_ICELLPLUS 000001c7 -CSEG VE_ICOMPARE 000001c9 -CSEG XT_ICOMPARE 000001cf -CSEG PFA_ICOMPARE 000001d0 -CSEG XT_OVER 000038cf -CSEG PFA_ICOMPARE_SAMELEN 000001da -CSEG XT_2DROP 00003ed2 -CSEG XT_QDOCHECK 0000081b -CSEG PFA_ICOMPARE_DONE 000001fd -CSEG XT_DODO 00003a9b -CSEG PFA_ICOMPARE_LOOP 000001e0 -CSEG PFA_ICOMPARE_LASTCELL 000001ee -CSEG PFA_ICOMPARE_NEXTLOOP 000001f5 -CSEG XT_UNLOOP 00003ad4 -CSEG XT_CELLPLUS 00003c90 -CSEG XT_DOPLUSLOOP 00003aba -CSEG VE_STAR 00000200 -CSEG XT_STAR 00000203 -CSEG PFA_STAR 00000204 -CSEG XT_MSTAR 000039a6 -CSEG VE_J 00000207 -CSEG XT_J 0000020a -CSEG PFA_J 0000020b -CSEG XT_RP_FETCH 00003a76 -CSEG VE_DABS 00000217 -CSEG XT_DABS 0000021b -CSEG PFA_DABS 0000021c -CSEG XT_ZEROLESS 00003921 -CSEG PFA_DABS1 00000221 -CSEG XT_DNEGATE 00000228 -CSEG VE_DNEGATE 00000222 -CSEG PFA_DNEGATE 00000229 -CSEG XT_DINVERT 00003c3b -CSEG VE_CMOVE 0000022e -CSEG XT_CMOVE 00000233 -CSEG PFA_CMOVE 00000234 -CSEG PFA_CMOVE1 00000241 -CSEG PFA_CMOVE2 0000023d -CSEG VE_2SWAP 00000247 -CSEG XT_2SWAP 0000024c -CSEG PFA_2SWAP 0000024d -CSEG VE_REFILLTIB 00000252 -CSEG XT_REFILLTIB 00000259 -CSEG PFA_REFILLTIB 0000025a -CSEG XT_TIB 00000275 -CSEG XT_ACCEPT 0000048d -CSEG XT_NUMBERTIB 0000027b -CSEG XT_TO_IN 00003ee2 -CSEG VE_SOURCETIB 00000265 -CSEG XT_SOURCETIB 0000026c -CSEG PFA_SOURCETIB 0000026d -CSEG VE_TIB 00000271 -CSEG PFA_DOVARIABLE 00003848 -CSEG PFA_TIB 00000276 -DSEG ram_tib 00000087 -CSEG VE_NUMBERTIB 00000277 -CSEG PFA_NUMBERTIB 0000027c -DSEG ram_sharptib 000000e1 -CSEG VE_EE2RAM 0000027d -CSEG XT_EE2RAM 00000282 -CSEG PFA_EE2RAM 00000283 -CSEG PFA_EE2RAM_1 00000285 -CSEG XT_FETCHE 00003b5f -CSEG XT_DOLOOP 00003ac9 -CSEG PFA_EE2RAM_2 0000028f -CSEG VE_INIT_RAM 00000291 -CSEG XT_INIT_RAM 00000297 -CSEG PFA_INI_RAM 00000298 -ESEG EE_INITUSER 00000060 -CSEG XT_UP_FETCH 00003b02 -CSEG XT_2SLASH 00003a04 -CSEG VE_ENVIRONMENT 000002a0 -CSEG XT_ENVIRONMENT 000002a8 -CSEG PFA_ENVIRONMENT 000002a9 -ESEG CFG_ENVIRONMENT 0000003a -CSEG VE_ENVWORDLISTS 000002aa -CSEG XT_ENVWORDLISTS 000002b1 -CSEG PFA_ENVWORDLISTS 000002b2 -CSEG VE_ENVSLASHPAD 000002b5 -CSEG XT_ENVSLASHPAD 000002b9 -CSEG PFA_ENVSLASHPAD 000002ba -CSEG XT_PAD 00003ee8 -CSEG VE_ENVSLASHHOLD 000002be -CSEG XT_ENVSLASHHOLD 000002c3 -CSEG PFA_ENVSLASHHOLD 000002c4 -CSEG VE_ENV_FORTHNAME 000002c8 -CSEG PFA_EN_FORTHNAME 000002d0 -CSEG XT_DOSLITERAL 000003c5 -CSEG VE_ENV_FORTHVERSION 000002d7 -CSEG PFA_EN_FORTHVERSION 000002de -CSEG VE_ENV_CPU 000002e1 -CSEG PFA_EN_CPU 000002e6 -CSEG XT_ICOUNT 00000424 -CSEG VE_ENV_MCUINFO 000002ea -CSEG XT_ENV_MCUINFO 000002f0 -CSEG PFA_EN_MCUINFO 000002f1 -CSEG VE_ENVUSERSIZE 000002f4 -CSEG XT_ENVUSERSIZE 000002f9 -CSEG PFA_ENVUSERSIZE 000002fa -CSEG VE_HLD 000002fd -CSEG XT_HLD 00000301 -CSEG PFA_HLD 00000302 -DSEG ram_hld 000000e3 -CSEG VE_HOLD 00000303 -CSEG PFA_HOLD 00000308 -CSEG XT_1MINUS 00003a35 -CSEG VE_L_SHARP 00000313 -CSEG PFA_L_SHARP 00000317 -CSEG VE_SHARP 0000031b -CSEG PFA_SHARP 0000031f -CSEG XT_UDSLASHMOD 0000039b -CSEG XT_LESS 0000396e -CSEG PFA_SHARP1 0000032c -CSEG VE_SHARP_S 00000331 -CSEG PFA_SHARP_S 00000335 -CSEG NUMS1 00000335 -CSEG XT_OR 00003a1c -CSEG VE_SHARP_G 0000033c -CSEG PFA_SHARP_G 00000340 -CSEG VE_SIGN 00000347 -CSEG XT_SIGN 0000034b -CSEG PFA_SIGN 0000034c -CSEG PFA_SIGN1 00000352 -CSEG VE_DDOTR 00000353 -CSEG XT_DDOTR 00000357 -CSEG PFA_DDOTR 00000358 -CSEG XT_TUCK 00003eda -CSEG XT_SPACES 00003fb7 -CSEG VE_DOTR 00000366 -CSEG XT_DOTR 00000369 -CSEG PFA_DOTR 0000036a -CSEG VE_DDOT 0000036f -CSEG XT_DDOT 00000372 -CSEG PFA_DDOT 00000373 -CSEG VE_DOT 00000377 -CSEG XT_DOT 0000037a -CSEG PFA_DOT 0000037b -CSEG VE_UDDOT 0000037e -CSEG XT_UDDOT 00000382 -CSEG PFA_UDDOT 00000383 -CSEG XT_UDDOTR 0000038b -CSEG VE_UDDOTR 00000387 -CSEG PFA_UDDOTR 0000038c -CSEG VE_UDSLASHMOD 00000396 -CSEG PFA_UDSLASHMOD 0000039c -CSEG XT_R_FETCH 00003908 -CSEG XT_UMSLASHMOD 000039c2 -CSEG VE_DIGITQ 000003a6 -CSEG XT_DIGITQ 000003ab -CSEG PFA_DIGITQ 000003ac -CSEG XT_TOUPPER 00003f66 -CSEG XT_GREATER 00003978 -CSEG PFA_DOSLITERAL 000003c6 -CSEG VE_SCOMMA 000003d0 -CSEG XT_SCOMMA 000003d3 -CSEG PFA_SCOMMA 000003d4 -CSEG XT_DOSCOMMA 000003d7 -CSEG PFA_DOSCOMMA 000003d8 -CSEG XT_2STAR 00003a0b -CSEG PFA_SCOMMA2 000003ea -CSEG PFA_SCOMMA1 000003e4 -CSEG XT_GREATERZERO 00003928 -CSEG PFA_SCOMMA3 000003f1 -CSEG VE_ITYPE 000003f3 -CSEG PFA_ITYPE 000003f9 -CSEG PFA_ITYPE2 0000040c -CSEG PFA_ITYPE1 00000404 -CSEG XT_LOWEMIT 00000419 -CSEG XT_HIEMIT 00000415 -CSEG PFA_ITYPE3 00000413 -CSEG PFA_HIEMIT 00000416 -CSEG PFA_LOWEMIT 0000041a -CSEG XT_EMIT 00003ef2 -CSEG VE_ICOUNT 0000041f -CSEG PFA_ICOUNT 00000425 -CSEG VE_TYPE 0000042a -CSEG PFA_TYPE 0000042f -CSEG XT_BOUNDS 00003f99 -CSEG PFA_TYPE2 00000439 -CSEG PFA_TYPE1 00000434 -CSEG XT_I 00003aac -CSEG VE_TICK 0000043a -CSEG PFA_TICK 0000043e -CSEG XT_PARSENAME 000005b0 -CSEG XT_FORTHRECOGNIZER 000005f3 -CSEG XT_RECOGNIZE 000005fe -CSEG XT_DT_NULL 0000068b -CSEG PFA_TICK1 0000044f -CSEG XT_THROW 00003d86 -CSEG VE_CSKIP 00000451 -CSEG XT_CSKIP 00000456 -CSEG PFA_CSKIP 00000457 -CSEG PFA_CSKIP1 00000458 -CSEG PFA_CSKIP2 00000465 -CSEG XT_SLASHSTRING 000005a1 -CSEG XT_DOBRANCH 0000382f -CSEG VE_CSCAN 00000468 -CSEG XT_CSCAN 0000046d -CSEG PFA_CSCAN 0000046e -CSEG PFA_CSCAN1 00000470 -CSEG PFA_CSCAN2 00000482 -CSEG XT_NIP 000038f0 -CSEG VE_ACCEPT 00000488 -CSEG PFA_ACCEPT 0000048e -CSEG ACC1 00000492 -CSEG XT_KEY 00003f03 -CSEG XT_CRLFQ 000004ce -CSEG ACC5 000004c0 -CSEG ACC3 000004b0 -CSEG ACC6 000004ae -CSEG XT_BS 000004c6 -CSEG ACC4 000004be -CSEG XT_BL 00003f54 -CSEG PFA_ACCEPT6 000004b7 -CSEG XT_CR 00003fa1 -CSEG VE_REFILL 000004d9 -CSEG XT_REFILL 000004de -CSEG PFA_DODEFER1 00003dff -CSEG PFA_REFILL 000004df -CSEG XT_UDEFERFETCH 00003dc8 -CSEG XT_UDEFERSTORE 00003dd4 -CSEG VE_CHAR 000004e2 -CSEG XT_CHAR 000004e6 -CSEG PFA_CHAR 000004e7 -CSEG VE_NUMBER 000004eb -CSEG XT_NUMBER 000004f0 -CSEG PFA_NUMBER 000004f1 -CSEG XT_QSIGN 00000534 -CSEG XT_SET_BASE 00000547 -CSEG PFA_NUMBER0 00000507 -CSEG XT_2TO_R 00003b1e -CSEG XT_2R_FROM 00003b2d -CSEG XT_TO_NUMBER 00000565 -CSEG XT_QDUP 000038b9 -CSEG PFA_NUMBER1 00000529 -CSEG PFA_NUMBER2 00000520 -CSEG PFA_NUMBER6 00000521 -CSEG PFA_NUMBER3 0000051d -CSEG XT_TWO 00003feb -CSEG PFA_NUMBER5 0000052f -CSEG PFA_NUMBER4 0000052e -CSEG XT_NEGATE 00003e27 -CSEG PFA_QSIGN 00000535 -CSEG PFA_NUMBERSIGN_DONE 00000540 -CSEG XT_BASES 00000542 -CSEG PFA_DOCONSTANT 00003852 -CSEG PFA_SET_BASE 00000548 -CSEG XT_WITHIN 00003e57 -CSEG SET_BASE1 0000055d -CSEG SET_BASE2 0000055e -CSEG VE_TO_NUMBER 0000055f -CSEG TONUM1 00000566 -CSEG TONUM3 0000057d -CSEG TONUM2 00000571 -CSEG VE_PARSE 0000057e -CSEG XT_PARSE 00000583 -CSEG PFA_PARSE 00000584 -CSEG XT_SOURCE 00000597 -CSEG XT_PLUSSTORE 00003a65 -CSEG VE_SOURCE 00000592 -CSEG PFA_SOURCE 00000598 -CSEG VE_SLASHSTRING 0000059b -CSEG PFA_SLASHSTRING 000005a2 -CSEG VE_PARSENAME 000005a9 -CSEG PFA_PARSENAME 000005b1 -CSEG XT_SKIPSCANCHAR 000005b4 -CSEG PFA_SKIPSCANCHAR 000005b5 -CSEG VE_SP0 000005c6 -CSEG XT_SP0 000005ca -CSEG PFA_SP0 000005cb -CSEG VE_SP 000005ce -CSEG XT_SP 000005d1 -CSEG PFA_DOUSER 00003858 -CSEG PFA_SP 000005d2 -CSEG VE_RP0 000005d3 -CSEG XT_RP0 000005d7 -CSEG PFA_RP0 000005d8 -CSEG XT_DORP0 000005db -CSEG PFA_DORP0 000005dc -CSEG VE_DEPTH 000005dd -CSEG XT_DEPTH 000005e2 -CSEG PFA_DEPTH 000005e3 -CSEG VE_FORTHRECOGNIZER 000005e9 -CSEG PFA_FORTHRECOGNIZER 000005f4 -ESEG CFG_FORTHRECOGNIZER 00000034 -CSEG VE_RECOGNIZE 000005f7 -CSEG PFA_RECOGNIZE 000005ff -CSEG XT_RECOGNIZE_A 00000609 -CSEG XT_MAPSTACK 0000099c -CSEG PFA_RECOGNIZE1 00000608 -CSEG PFA_RECOGNIZE_A 0000060a -CSEG PFA_RECOGNIZE_A1 0000061a -CSEG VE_INTERPRET 0000061e -CSEG XT_INTERPRET 00000625 -CSEG PFA_INTERPRET 00000626 -CSEG PFA_INTERPRET2 00000636 -CSEG PFA_INTERPRET1 00000631 -CSEG XT_QSTACK 00003f8b -CSEG VE_DT_NUM 00000638 -CSEG XT_DT_NUM 0000063d -CSEG PFA_DT_NUM 0000063e -CSEG XT_LITERAL 00000772 -CSEG VE_DT_DNUM 00000641 -CSEG XT_DT_DNUM 00000647 -CSEG PFA_DT_DNUM 00000648 -CSEG XT_2LITERAL 00003fd7 -CSEG VE_REC_NUM 0000064b -CSEG XT_REC_NUM 00000651 -CSEG PFA_REC_NUM 00000652 -CSEG PFA_REC_NONUMBER 0000065d -CSEG PFA_REC_INTNUM2 0000065b -CSEG VE_REC_FIND 0000065f -CSEG XT_REC_FIND 00000665 -CSEG PFA_REC_FIND 00000666 -CSEG XT_FINDXT 00000700 -CSEG PFA_REC_WORD_FOUND 0000066e -CSEG XT_DT_XT 00000675 -CSEG VE_DT_XT 00000670 -CSEG PFA_DT_XT 00000676 -CSEG XT_R_WORD_INTERPRET 00000679 -CSEG XT_R_WORD_COMPILE 0000067d -CSEG PFA_R_WORD_INTERPRET 0000067a -CSEG PFA_R_WORD_COMPILE 0000067e -CSEG PFA_R_WORD_COMPILE1 00000683 -CSEG VE_DT_NULL 00000685 -CSEG PFA_DT_NULL 0000068c -CSEG XT_FAIL 0000068f -CSEG PFA_FAIL 00000690 -CSEG VE_SEARCH_WORDLIST 00000693 -CSEG XT_SEARCH_WORDLIST 0000069d -CSEG PFA_SEARCH_WORDLIST 0000069e -CSEG XT_ISWORD 000006b2 -CSEG XT_TRAVERSEWORDLIST 000006cf -CSEG PFA_SEARCH_WORDLIST1 000006ac -CSEG XT_NFA2CFA 000006f6 -CSEG PFA_ISWORD 000006b3 -CSEG XT_NAME2STRING 000006ea -CSEG PFA_ISWORD3 000006c0 -CSEG VE_TRAVERSEWORDLIST 000006c4 -CSEG PFA_TRAVERSEWORDLIST 000006d0 -CSEG PFA_TRAVERSEWORDLIST1 000006d1 -CSEG PFA_TRAVERSEWORDLIST2 000006e0 -CSEG XT_NFA2LFA 00000a0b -CSEG VE_NAME2STRING 000006e2 -CSEG PFA_NAME2STRING 000006eb -CSEG VE_NFA2CFA 000006f0 -CSEG PFA_NFA2CFA 000006f7 -CSEG VE_FINDXT 000006fa -CSEG PFA_FINDXT 00000701 -CSEG XT_FINDXTA 0000070c -ESEG CFG_ORDERLISTLEN 00000040 -CSEG PFA_FINDXT1 0000070b -CSEG PFA_FINDXTA 0000070d -CSEG PFA_FINDXTA1 00000719 -CSEG VE_NEWEST 0000071a -CSEG XT_NEWEST 0000071f -CSEG PFA_NEWEST 00000720 -DSEG ram_newest 000000e5 -CSEG VE_LATEST 00000721 -CSEG XT_LATEST 00000726 -CSEG PFA_LATEST 00000727 -DSEG ram_latest 000000e9 -CSEG VE_DOCREATE 00000728 -CSEG XT_DOCREATE 0000072e -CSEG PFA_DOCREATE 0000072f -CSEG XT_WLSCOPE 00000885 -CSEG XT_HEADER 0000086a -CSEG VE_BACKSLASH 00000739 -CSEG XT_BACKSLASH 0000073c -CSEG PFA_BACKSLASH 0000073d -CSEG VE_LPAREN 00000742 -CSEG XT_LPAREN 00000745 -CSEG PFA_LPAREN 00000746 -CSEG VE_COMPILE 0000074b -CSEG PFA_COMPILE 00000752 -CSEG VE_COMMA 00000759 -CSEG PFA_COMMA 0000075d -CSEG XT_DP 00003f12 -CSEG XT_STOREI 00003b73 -CSEG PFA_DP 00003f13 -CSEG VE_BRACKETTICK 00000764 -CSEG XT_BRACKETTICK 00000768 -CSEG PFA_BRACKETTICK 00000769 -CSEG VE_LITERAL 0000076c -CSEG PFA_LITERAL 00000773 -CSEG VE_SLITERAL 00000777 -CSEG XT_SLITERAL 0000077d -CSEG PFA_SLITERAL 0000077e -CSEG XT_GMARK 00000782 -CSEG PFA_GMARK 00000783 -CSEG XT_GRESOLVE 00000787 -CSEG PFA_GRESOLVE 00000788 -CSEG XT_LMARK 0000078d -CSEG PFA_LMARK 0000078e -CSEG XT_LRESOLVE 00000790 -CSEG PFA_LRESOLVE 00000791 -CSEG VE_AHEAD 00000794 -CSEG XT_AHEAD 00000799 -CSEG PFA_AHEAD 0000079a -CSEG VE_IF 0000079e -CSEG XT_IF 000007a1 -CSEG PFA_IF 000007a2 -CSEG VE_ELSE 000007a6 -CSEG XT_ELSE 000007aa -CSEG PFA_ELSE 000007ab -CSEG VE_THEN 000007b1 -CSEG XT_THEN 000007b5 -CSEG PFA_THEN 000007b6 -CSEG VE_BEGIN 000007b8 -CSEG XT_BEGIN 000007bd -CSEG PFA_BEGIN 000007be -CSEG VE_WHILE 000007c0 -CSEG XT_WHILE 000007c5 -CSEG PFA_WHILE 000007c6 -CSEG VE_REPEAT 000007c9 -CSEG XT_REPEAT 000007ce -CSEG PFA_REPEAT 000007cf -CSEG XT_AGAIN 000007e2 -CSEG VE_UNTIL 000007d2 -CSEG XT_UNTIL 000007d7 -CSEG PFA_UNTIL 000007d8 -CSEG VE_AGAIN 000007dd -CSEG PFA_AGAIN 000007e3 -CSEG VE_DO 000007e7 -CSEG XT_DO 000007ea -CSEG PFA_DO 000007eb -CSEG XT_TO_L 00000845 -CSEG VE_LOOP 000007f1 -CSEG XT_LOOP 000007f5 -CSEG PFA_LOOP 000007f6 -CSEG XT_ENDLOOP 0000082c -CSEG VE_PLUSLOOP 000007fa -CSEG XT_PLUSLOOP 000007ff -CSEG PFA_PLUSLOOP 00000800 -CSEG VE_LEAVE 00000804 -CSEG XT_LEAVE 00000809 -CSEG PFA_LEAVE 0000080a -CSEG VE_QDO 0000080f -CSEG XT_QDO 00000813 -CSEG PFA_QDO 00000814 -CSEG PFA_QDOCHECK 0000081c -CSEG PFA_QDOCHECK1 00000823 -CSEG XT_INVERT 000039fd -CSEG VE_ENDLOOP 00000826 -CSEG PFA_ENDLOOP 0000082d -CSEG LOOP1 0000082e -CSEG XT_L_FROM 00000839 -CSEG LOOP2 00000835 -CSEG VE_L_FROM 00000836 -CSEG PFA_L_FROM 0000083a -CSEG XT_LP 00000858 -CSEG VE_TO_L 00000842 -CSEG PFA_TO_L 00000846 -CSEG VE_LP0 0000084d -CSEG XT_LP0 00000851 -CSEG PFA_LP0 00000852 -ESEG CFG_LP0 00000036 -CSEG VE_LP 00000855 -CSEG PFA_LP 00000859 -DSEG ram_lp 000000eb -CSEG VE_CREATE 0000085a -CSEG XT_CREATE 0000085f -CSEG PFA_CREATE 00000860 -CSEG XT_REVEAL 0000088e -CSEG VE_HEADER 00000865 -CSEG PFA_HEADER 0000086b -CSEG PFA_HEADER1 0000087c -CSEG VE_WLSCOPE 0000087f -CSEG PFA_WLSCOPE 00000886 -ESEG CFG_WLSCOPE 00000032 -CSEG VE_REVEAL 00000889 -CSEG PFA_REVEAL 0000088f -CSEG REVEAL1 00000899 -CSEG XT_STOREE 00003b3b -CSEG VE_DOES 0000089a -CSEG XT_DOES 0000089f -CSEG PFA_DOES 000008a0 -CSEG XT_DODOES 000008b2 -CSEG DO_DODOES 000008a7 -CSEG PFA_DODOES 000008b3 -CSEG VE_COLON 000008bb -CSEG XT_COLON 000008be -CSEG PFA_COLON 000008bf -CSEG XT_COLONNONAME 000008c9 -CSEG VE_COLONNONAME 000008c3 -CSEG PFA_COLONNONAME 000008ca -CSEG XT_RBRACKET 000008de -CSEG VE_SEMICOLON 000008d2 -CSEG XT_SEMICOLON 000008d5 -CSEG PFA_SEMICOLON 000008d6 -CSEG XT_LBRACKET 000008e6 -CSEG VE_RBRACKET 000008db -CSEG PFA_RBRACKET 000008df -CSEG VE_LBRACKET 000008e3 -CSEG PFA_LBRACKET 000008e7 -CSEG VE_VARIABLE 000008eb -CSEG XT_VARIABLE 000008f1 -CSEG PFA_VARIABLE 000008f2 -CSEG XT_CONSTANT 000008fd -CSEG XT_ALLOT 00003f2c -CSEG VE_CONSTANT 000008f7 -CSEG PFA_CONSTANT 000008fe -CSEG VE_USER 00000904 -CSEG XT_USER 00000908 -CSEG PFA_USER 00000909 -CSEG VE_RECURSE 0000090f -CSEG XT_RECURSE 00000915 -CSEG PFA_RECURSE 00000916 -CSEG VE_IMMEDIATE 0000091a -CSEG XT_IMMEDIATE 00000921 -CSEG PFA_IMMEDIATE 00000922 -CSEG XT_GET_CURRENT 000009c3 -CSEG VE_BRACKETCHAR 0000092c -CSEG XT_BRACKETCHAR 00000931 -CSEG PFA_BRACKETCHAR 00000932 -CSEG VE_ABORTQUOTE 00000937 -CSEG XT_ABORTQUOTE 0000093c -CSEG PFA_ABORTQUOTE 0000093d -CSEG XT_SQUOTE 00003e8a -CSEG XT_QABORT 0000094e -CSEG VE_ABORT 00000941 -CSEG XT_ABORT 00000946 -CSEG PFA_ABORT 00000947 -CSEG VE_QABORT 00000949 -CSEG PFA_QABORT 0000094f -CSEG QABO1 00000954 -CSEG VE_GET_STACK 00000956 -CSEG XT_GET_STACK 0000095d -CSEG PFA_N_FETCH_E2 00000974 -CSEG PFA_N_FETCH_E1 0000096a -CSEG XT_CELLS 00003ec4 -CSEG VE_SET_STACK 00000977 -CSEG XT_SET_STACK 0000097e -CSEG PFA_SET_STACK 0000097f -CSEG PFA_SET_STACK0 00000986 -CSEG PFA_SET_STACK2 00000993 -CSEG PFA_SET_STACK1 0000098e -CSEG VE_MAPSTACK 00000995 -CSEG PFA_MAPSTACK 0000099d -CSEG PFA_MAPSTACK3 000009b8 -CSEG PFA_MAPSTACK1 000009a7 -CSEG PFA_MAPSTACK2 000009b4 -CSEG VE_GET_CURRENT 000009bb -CSEG PFA_GET_CURRENT 000009c4 -ESEG CFG_CURRENT 0000003c -CSEG VE_GET_ORDER 000009c8 -CSEG XT_GET_ORDER 000009cf -CSEG PFA_GET_ORDER 000009d0 -CSEG VE_CFG_ORDER 000009d4 -CSEG XT_CFG_ORDER 000009db -CSEG PFA_CFG_ORDER 000009dc -CSEG VE_COMPARE 000009dd -CSEG XT_COMPARE 000009e3 -CSEG PFA_COMPARE 000009e4 -CSEG PFA_COMPARE_LOOP 000009f0 -CSEG PFA_COMPARE_NOTEQUAL 000009fe -CSEG PFA_COMPARE_ENDREACHED2 000009f9 -CSEG PFA_COMPARE_ENDREACHED 000009fa -CSEG PFA_COMPARE_CHECKLASTCHAR 000009fe -CSEG PFA_COMPARE_DONE 00000a00 -CSEG VE_NFA2LFA 00000a05 -CSEG PFA_NFA2LFA 00000a0c -CSEG VE_DOTS 00000a11 -CSEG XT_DOTS 00000a14 -CSEG PFA_DOTS 00000a15 -CSEG XT_UDOT 00003e0a -CSEG PFA_DOTS2 00000a23 -CSEG PFA_DOTS1 00000a1e -CSEG XT_PICK 00003c84 -CSEG VE_SPIRW 00000a24 -CSEG XT_SPIRW 00000a29 -CSEG PFA_SPIRW 00000a2a -CSEG do_spirw 00000a2e -CSEG do_spirw1 00000a2f -CSEG VE_N_SPIR 00000a37 -CSEG XT_N_SPIR 00000a3c -CSEG PFA_N_SPIR 00000a3d -CSEG PFA_N_SPIR_LOOP 00000a42 -CSEG PFA_N_SPIR_LOOP1 00000a43 -CSEG VE_N_SPIW 00000a4e -CSEG XT_N_SPIW 00000a53 -CSEG PFA_N_SPIW 00000a54 -CSEG PFA_N_SPIW_LOOP 00000a59 -CSEG PFA_N_SPIW_LOOP1 00000a5b -CSEG VE_APPLTURNKEY 00000a65 -CSEG XT_APPLTURNKEY 00000a6d -CSEG PFA_APPLTURNKEY 00000a6e -CSEG XT_INTON 00003c97 -CSEG XT_F_CPU 00003eac -CSEG VE_SET_CURRENT 00000a7f -CSEG XT_SET_CURRENT 00000a87 -CSEG PFA_SET_CURRENT 00000a88 -CSEG VE_WORDLIST 00000a8c -CSEG XT_WORDLIST 00000a92 -CSEG PFA_WORDLIST 00000a93 -CSEG XT_EHERE 00003f1b -CSEG PFA_EHERE 00003f1c -CSEG VE_FORTHWORDLIST 00000a9c -CSEG XT_FORTHWORDLIST 00000aa5 -CSEG PFA_FORTHWORDLIST 00000aa6 -ESEG CFG_FORTHWORDLIST 0000003e -CSEG VE_SET_ORDER 00000aa7 -CSEG XT_SET_ORDER 00000aae -CSEG PFA_SET_ORDER 00000aaf -CSEG VE_SET_RECOGNIZERS 00000ab3 -CSEG XT_SET_RECOGNIZERS 00000abd -CSEG PFA_SET_RECOGNIZERS 00000abe -ESEG CFG_RECOGNIZERLISTLEN 00000052 -CSEG VE_GET_RECOGNIZERS 00000ac2 -CSEG XT_GET_RECOGNIZERS 00000acc -CSEG PFA_GET_RECOGNIZERS 00000acd -CSEG VE_CODE 00000ad1 -CSEG XT_CODE 00000ad5 -CSEG PFA_CODE 00000ad6 -CSEG VE_ENDCODE 00000adc -CSEG XT_ENDCODE 00000ae2 -CSEG PFA_ENDCODE 00000ae3 -CSEG VE_MARKER 00000ae8 -CSEG XT_MARKER 00000aee -CSEG PFA_MARKER 00000aef -ESEG EE_MARKER 0000005e -CSEG VE_POSTPONE 00000af2 -CSEG XT_POSTPONE 00000af8 -CSEG PFA_POSTPONE 00000af9 -CSEG VE_2R_FETCH 00000b07 -CSEG XT_2R_FETCH 00000b0b -CSEG PFA_2R_FETCH 00000b0c -SET DPSTART 00000b1b -CSEG DO_INTERRUPT 00003814 -CSEG DO_EXECUTE 0000380d -CSEG XT_ISREXEC 00003cc0 -CSEG VE_EXIT 0000381c -CSEG PFA_EXIT 00003821 -CSEG VE_EXECUTE 00003824 -CSEG PFA_EXECUTE 0000382b -CSEG PFA_DOBRANCH 00003830 -CSEG PFA_DOCONDBRANCH 00003837 -CSEG PFA_DOLITERAL 0000383e -CSEG XT_DOVARIABLE 00003847 -CSEG XT_DOCONSTANT 00003851 -CSEG XT_DOUSER 00003857 -CSEG VE_DOVALUE 00003863 -CSEG XT_DOVALUE 00003869 -CSEG PFA_DOVALUE 0000386a -CSEG VE_FETCH 00003876 -CSEG PFA_FETCH 0000387a -CSEG PFA_FETCHRAM 0000387a -CSEG VE_STORE 0000387e -CSEG PFA_STORE 00003882 -CSEG PFA_STORERAM 00003882 -CSEG VE_CSTORE 0000388a -CSEG PFA_CSTORE 0000388e -CSEG VE_CFETCH 00003895 -CSEG PFA_CFETCH 00003899 -CSEG VE_FETCHU 0000389d -CSEG XT_FETCHU 000038a0 -CSEG PFA_FETCHU 000038a1 -CSEG VE_STOREU 000038a5 -CSEG XT_STOREU 000038a8 -CSEG PFA_STOREU 000038a9 -CSEG VE_DUP 000038ad -CSEG PFA_DUP 000038b2 -CSEG VE_QDUP 000038b5 -CSEG PFA_QDUP 000038ba -CSEG PFA_QDUP1 000038bf -CSEG VE_SWAP 000038c0 -CSEG PFA_SWAP 000038c5 -CSEG VE_OVER 000038cb -CSEG PFA_OVER 000038d0 -CSEG VE_DROP 000038d5 -CSEG PFA_DROP 000038da -CSEG VE_ROT 000038dd -CSEG PFA_ROT 000038e2 -CSEG VE_NIP 000038ec -CSEG PFA_NIP 000038f1 -CSEG VE_R_FROM 000038f3 -CSEG PFA_R_FROM 000038f7 -CSEG VE_TO_R 000038fc -CSEG PFA_TO_R 00003900 -CSEG VE_R_FETCH 00003905 -CSEG PFA_R_FETCH 00003909 -CSEG VE_NOTEQUAL 00003910 -CSEG PFA_NOTEQUAL 00003914 -CSEG VE_ZEROEQUAL 00003917 -CSEG PFA_ZEROEQUAL 0000391b -CSEG PFA_ZERO1 00003957 -CSEG PFA_TRUE1 0000394e -CSEG VE_ZEROLESS 0000391e -CSEG PFA_ZEROLESS 00003922 -CSEG VE_GREATERZERO 00003925 -CSEG PFA_GREATERZERO 00003929 -CSEG VE_DGREATERZERO 0000392e -CSEG XT_DGREATERZERO 00003932 -CSEG PFA_DGREATERZERO 00003933 -CSEG VE_DXT_ZEROLESS 0000393c -CSEG XT_DXT_ZEROLESS 00003940 -CSEG PFA_DXT_ZEROLESS 00003941 -CSEG VE_TRUE 00003947 -CSEG PFA_TRUE 0000394c -CSEG VE_ZERO 00003951 -CSEG PFA_ZERO 00003955 -CSEG VE_ULESS 00003959 -CSEG PFA_ULESS 0000395d -CSEG VE_UGREATER 00003964 -CSEG PFA_UGREATER 00003968 -CSEG VE_LESS 0000396b -CSEG PFA_LESS 0000396f -CSEG PFA_LESSDONE 00003973 -CSEG VE_GREATER 00003975 -CSEG PFA_GREATER 00003979 -CSEG PFA_GREATERDONE 0000397d -CSEG VE_LOG2 00003980 -CSEG XT_LOG2 00003984 -CSEG PFA_LOG2 00003985 -CSEG PFA_LOG2_1 00003988 -CSEG PFA_LOG2_2 0000398e -CSEG VE_MINUS 00003990 -CSEG PFA_MINUS 00003994 -CSEG VE_PLUS 0000399a -CSEG PFA_PLUS 0000399e -CSEG VE_MSTAR 000039a3 -CSEG PFA_MSTAR 000039a7 -CSEG VE_UMSLASHMOD 000039bd -CSEG PFA_UMSLASHMOD 000039c3 -CSEG PFA_UMSLASHMODmod 000039c8 -CSEG PFA_UMSLASHMODmod_loop 000039c9 -CSEG PFA_UMSLASHMODmod_loop_control 000039d6 -CSEG PFA_UMSLASHMODmod_subtract 000039d3 -CSEG PFA_UMSLASHMODmod_done 000039d8 -CSEG VE_UMSTAR 000039dc -CSEG PFA_UMSTAR 000039e1 -CSEG VE_INVERT 000039f8 -CSEG PFA_INVERT 000039fe -CSEG VE_2SLASH 00003a01 -CSEG PFA_2SLASH 00003a05 -CSEG VE_2STAR 00003a08 -CSEG PFA_2STAR 00003a0c -CSEG VE_AND 00003a0f -CSEG PFA_AND 00003a14 -CSEG VE_OR 00003a19 -CSEG PFA_OR 00003a1d -CSEG VE_XOR 00003a22 -CSEG XT_XOR 00003a26 -CSEG PFA_XOR 00003a27 -CSEG VE_1PLUS 00003a2c -CSEG PFA_1PLUS 00003a30 -CSEG VE_1MINUS 00003a32 -CSEG PFA_1MINUS 00003a36 -CSEG VE_QNEGATE 00003a38 -CSEG XT_QNEGATE 00003a3e -CSEG PFA_QNEGATE 00003a3f -CSEG QNEG1 00003a43 -CSEG VE_LSHIFT 00003a44 -CSEG XT_LSHIFT 00003a49 -CSEG PFA_LSHIFT 00003a4a -CSEG PFA_LSHIFT1 00003a4d -CSEG PFA_LSHIFT2 00003a52 -CSEG VE_RSHIFT 00003a53 -CSEG XT_RSHIFT 00003a58 -CSEG PFA_RSHIFT 00003a59 -CSEG PFA_RSHIFT1 00003a5c -CSEG PFA_RSHIFT2 00003a61 -CSEG VE_PLUSSTORE 00003a62 -CSEG PFA_PLUSSTORE 00003a66 -CSEG VE_RP_FETCH 00003a72 -CSEG PFA_RP_FETCH 00003a77 -CSEG VE_RP_STORE 00003a7c -CSEG XT_RP_STORE 00003a80 -CSEG PFA_RP_STORE 00003a81 -CSEG VE_SP_FETCH 00003a89 -CSEG PFA_SP_FETCH 00003a8e -CSEG VE_SP_STORE 00003a92 -CSEG XT_SP_STORE 00003a96 -CSEG PFA_SP_STORE 00003a97 -CSEG PFA_DODO 00003a9c -CSEG PFA_DODO1 00003a9e -CSEG VE_I 00003aa9 -CSEG PFA_I 00003aad -CSEG PFA_DOPLUSLOOP 00003abb -CSEG PFA_DOPLUSLOOP_LEAVE 00003ac5 -CSEG PFA_DOPLUSLOOP_NEXT 00003ac2 -CSEG PFA_DOLOOP 00003aca -CSEG VE_UNLOOP 00003acf -CSEG PFA_UNLOOP 00003ad5 -CSEG VE_CMOVE_G 00003ada -CSEG XT_CMOVE_G 00003adf -CSEG PFA_CMOVE_G 00003ae0 -CSEG PFA_CMOVE_G1 00003af1 -CSEG PFA_CMOVE_G2 00003aed -CSEG VE_BYTESWAP 00003af6 -CSEG PFA_BYTESWAP 00003afa -CSEG VE_UP_FETCH 00003afe -CSEG PFA_UP_FETCH 00003b03 -CSEG VE_UP_STORE 00003b07 -CSEG XT_UP_STORE 00003b0b -CSEG PFA_UP_STORE 00003b0c -CSEG VE_1MS 00003b10 -CSEG XT_1MS 00003b14 -CSEG PFA_1MS 00003b15 -CSEG VE_2TO_R 00003b1a -CSEG PFA_2TO_R 00003b1f -CSEG VE_2R_FROM 00003b29 -CSEG PFA_2R_FROM 00003b2e -CSEG VE_STOREE 00003b38 -CSEG PFA_STOREE 00003b3c -CSEG PFA_STOREE0 00003b3c -CSEG PFA_FETCHE2 00003b6a -CSEG PFA_STOREE3 00003b46 -CSEG PFA_STOREE1 00003b51 -CSEG PFA_STOREE4 00003b4d -CSEG PFA_STOREE2 00003b53 -CSEG VE_FETCHE 00003b5c -CSEG PFA_FETCHE 00003b60 -CSEG PFA_FETCHE1 00003b60 -CSEG VE_STOREI 00003b70 -CSEG PFA_STOREI 00003b74 -ESEG EE_STOREI 0000005c -CSEG VE_DO_STOREI_NRWW 00003b77 -CSEG XT_DO_STOREI 00003b7e -CSEG PFA_DO_STOREI_NRWW 00003b7f -CSEG DO_STOREI_atmega 00003b93 -CSEG pageload 00003ba4 -CSEG DO_STOREI_writepage 00003b9d -CSEG dospm 00003bbd -EQU pagemask ffffffc0 -CSEG pageload_loop 00003baa -CSEG pageload_newdata 00003bb5 -CSEG pageload_cont 00003bb7 -CSEG pageload_done 00003bbc -CSEG dospm_wait_ee 00003bbd -CSEG dospm_wait_spm 00003bbf -CSEG VE_FETCHI 00003bc8 -CSEG PFA_FETCHI 00003bcc -CSEG VE_N_TO_R 00003bd2 -CSEG XT_N_TO_R 00003bd6 -CSEG PFA_N_TO_R 00003bd7 -CSEG PFA_N_TO_R1 00003bd9 -CSEG VE_N_R_FROM 00003be4 -CSEG XT_N_R_FROM 00003be8 -CSEG PFA_N_R_FROM 00003be9 -CSEG PFA_N_R_FROM1 00003bee -CSEG VE_D2STAR 00003bf6 -CSEG XT_D2STAR 00003bfa -CSEG PFA_D2STAR 00003bfb -CSEG VE_D2SLASH 00003c04 -CSEG XT_D2SLASH 00003c08 -CSEG PFA_D2SLASH 00003c09 -CSEG VE_DPLUS 00003c12 -CSEG PFA_DPLUS 00003c16 -CSEG VE_DMINUS 00003c23 -CSEG XT_DMINUS 00003c26 -CSEG PFA_DMINUS 00003c27 -CSEG VE_DINVERT 00003c35 -CSEG PFA_DINVERT 00003c3c -CSEG VE_SLASHMOD 00003c45 -CSEG XT_SLASHMOD 00003c49 -CSEG PFA_SLASHMOD 00003c4a -CSEG PFA_SLASHMOD_1 00003c55 -CSEG PFA_SLASHMOD_2 00003c5b -CSEG PFA_SLASHMOD_3 00003c5e -CSEG PFA_SLASHMOD_5 00003c69 -CSEG PFA_SLASHMOD_4 00003c68 -CSEG PFA_SLASHMODmod_done 00003c74 -CSEG PFA_SLASHMOD_6 00003c72 -CSEG VE_ABS 00003c78 -CSEG XT_ABS 00003c7c -CSEG PFA_ABS 00003c7d -CSEG VE_PICK 00003c80 -CSEG PFA_PICK 00003c85 -CSEG VE_CELLPLUS 00003c8b -CSEG PFA_CELLPLUS 00003c91 -CSEG VE_INTON 00003c93 -CSEG PFA_INTON 00003c98 -CSEG VE_INTOFF 00003c9a -CSEG XT_INTOFF 00003c9e -CSEG PFA_INTOFF 00003c9f -CSEG VE_INTSTORE 00003ca1 -CSEG PFA_INTSTORE 00003ca6 -CSEG VE_INTFETCH 00003cab -CSEG XT_INTFETCH 00003caf -CSEG PFA_INTFETCH 00003cb0 -CSEG VE_INTTRAP 00003cb5 -CSEG XT_INTTRAP 00003cbb -CSEG PFA_INTTRAP 00003cbc -CSEG PFA_ISREXEC 00003cc1 -CSEG XT_ISREND 00003cc5 -CSEG PFA_ISREND 00003cc6 -CSEG PFA_ISREND1 00003cc8 -CSEG XT_DEFAULT_PROMPTOK 00003cc9 -CSEG PFA_DEFAULT_PROMPTOK 00003cca -CSEG VE_PROMPTOK 00003cd0 -CSEG XT_PROMPTOK 00003cd4 -CSEG PFA_PROMPTOK 00003cd5 -CSEG XT_DEFAULT_PROMPTREADY 00003cd8 -CSEG PFA_DEFAULT_PROMPTREADY 00003cd9 -CSEG VE_PROMPTREADY 00003cdf -CSEG XT_PROMPTREADY 00003ce4 -CSEG PFA_PROMPTREADY 00003ce5 -CSEG XT_DEFAULT_PROMPTERROR 00003ce8 -CSEG PFA_DEFAULT_PROMPTERROR 00003ce9 -CSEG VE_PROMPTERROR 00003cfa -CSEG XT_PROMPTERROR 00003cff -CSEG PFA_PROMPTERROR 00003d00 -CSEG VE_QUIT 00003d03 -CSEG XT_QUIT 00003d07 -CSEG PFA_QUIT 00003d08 -CSEG PFA_QUIT2 00003d10 -CSEG PFA_QUIT4 00003d16 -CSEG PFA_QUIT3 00003d28 -CSEG XT_CATCH 00003d70 -CSEG PFA_QUIT5 00003d26 -CSEG VE_PAUSE 00003d2b -CSEG PFA_PAUSE 00003d31 -DSEG ram_pause 000000ed -CSEG XT_RDEFERFETCH 00003db4 -CSEG XT_RDEFERSTORE 00003dbe -CSEG VE_COLD 00003d34 -CSEG clearloop 00003d40 -DSEG ram_user1 000000ef -CSEG PFA_WARM 00003d5a -CSEG VE_WARM 00003d55 -CSEG XT_WARM 00003d59 -CSEG XT_DEFERSTORE 00003ddf -CSEG XT_TURNKEY 00003f5c -CSEG VE_HANDLER 00003d63 -CSEG XT_HANDLER 00003d69 -CSEG PFA_HANDLER 00003d6a -CSEG VE_CATCH 00003d6b -CSEG PFA_CATCH 00003d71 -CSEG VE_THROW 00003d81 -CSEG PFA_THROW 00003d87 -CSEG PFA_THROW1 00003d8d -CSEG VE_EDEFERFETCH 00003d9a -CSEG PFA_EDEFERFETCH 00003da1 -CSEG VE_EDEFERSTORE 00003da4 -CSEG PFA_EDEFERSTORE 00003dab -CSEG VE_RDEFERFETCH 00003dae -CSEG PFA_RDEFERFETCH 00003db5 -CSEG VE_RDEFERSTORE 00003db8 -CSEG PFA_RDEFERSTORE 00003dbf -CSEG VE_UDEFERFETCH 00003dc2 -CSEG PFA_UDEFERFETCH 00003dc9 -CSEG VE_UDEFERSTORE 00003dce -CSEG PFA_UDEFERSTORE 00003dd5 -CSEG VE_DEFERSTORE 00003dda -CSEG PFA_DEFERSTORE 00003de0 -CSEG VE_DEFERFETCH 00003de7 -CSEG XT_DEFERFETCH 00003dec -CSEG PFA_DEFERFETCH 00003ded -CSEG VE_DODEFER 00003df3 -CSEG XT_DODEFER 00003df9 -CSEG PFA_DODEFER 00003dfa -CSEG VE_UDOT 00003e07 -CSEG PFA_UDOT 00003e0b -CSEG VE_UDOTR 00003e0e -CSEG XT_UDOTR 00003e12 -CSEG PFA_UDOTR 00003e13 -CSEG VE_USLASHMOD 00003e17 -CSEG XT_USLASHMOD 00003e1c -CSEG PFA_USLASHMOD 00003e1d -CSEG VE_NEGATE 00003e22 -CSEG PFA_NEGATE 00003e28 -CSEG VE_SLASH 00003e2b -CSEG XT_SLASH 00003e2e -CSEG PFA_SLASH 00003e2f -CSEG VE_MOD 00003e32 -CSEG XT_MOD 00003e36 -CSEG PFA_MOD 00003e37 -CSEG VE_MIN 00003e3a -CSEG XT_MIN 00003e3e -CSEG PFA_MIN 00003e3f -CSEG PFA_MIN1 00003e44 -CSEG VE_MAX 00003e46 -CSEG XT_MAX 00003e4a -CSEG PFA_MAX 00003e4b -CSEG PFA_MAX1 00003e50 -CSEG VE_WITHIN 00003e52 -CSEG PFA_WITHIN 00003e58 -CSEG VE_SHOWWORDLIST 00003e5f -CSEG XT_SHOWWORDLIST 00003e68 -CSEG PFA_SHOWWORDLIST 00003e69 -CSEG XT_SHOWWORD 00003e6e -CSEG PFA_SHOWWORD 00003e6f -CSEG VE_WORDS 00003e74 -CSEG XT_WORDS 00003e79 -CSEG PFA_WORDS 00003e7a -CSEG VE_DOTSTRING 00003e7f -CSEG XT_DOTSTRING 00003e82 -CSEG PFA_DOTSTRING 00003e83 -CSEG VE_SQUOTE 00003e87 -CSEG PFA_SQUOTE 00003e8b -CSEG PFA_SQUOTE1 00003e93 -CSEG VE_FILL 00003e94 -CSEG PFA_FILL 00003e99 -CSEG PFA_FILL2 00003ea5 -CSEG PFA_FILL1 00003ea0 -CSEG VE_F_CPU 00003ea7 -CSEG PFA_F_CPU 00003ead -CSEG VE_STATE 00003eb2 -CSEG PFA_STATE 00003eb8 -DSEG ram_state 0000011b -CSEG VE_BASE 00003eb9 -CSEG PFA_BASE 00003ebe -CSEG VE_CELLS 00003ebf -CSEG VE_2DUP 00003ec5 -CSEG PFA_2DUP 00003eca -CSEG VE_2DROP 00003ecd -CSEG PFA_2DROP 00003ed3 -CSEG VE_TUCK 00003ed6 -CSEG PFA_TUCK 00003edb -CSEG VE_TO_IN 00003ede -CSEG PFA_TO_IN 00003ee3 -CSEG VE_PAD 00003ee4 -CSEG PFA_PAD 00003ee9 -CSEG VE_EMIT 00003eee -CSEG PFA_EMIT 00003ef3 -CSEG VE_EMITQ 00003ef6 -CSEG XT_EMITQ 00003efb -CSEG PFA_EMITQ 00003efc -CSEG VE_KEY 00003eff -CSEG PFA_KEY 00003f04 -CSEG VE_KEYQ 00003f07 -CSEG XT_KEYQ 00003f0b -CSEG PFA_KEYQ 00003f0c -CSEG VE_DP 00003f0f -ESEG CFG_DP 0000002c -CSEG VE_EHERE 00003f16 -ESEG EE_EHERE 00000030 -CSEG VE_HERE 00003f1f -CSEG PFA_HERE 00003f24 -ESEG EE_HERE 0000002e -CSEG VE_ALLOT 00003f27 -CSEG PFA_ALLOT 00003f2d -CSEG VE_BIN 00003f32 -CSEG XT_BIN 00003f36 -CSEG PFA_BIN 00003f37 -CSEG VE_DECIMAL 00003f3b -CSEG PFA_DECIMAL 00003f42 -CSEG VE_HEX 00003f47 -CSEG XT_HEX 00003f4b -CSEG PFA_HEX 00003f4c -CSEG VE_BL 00003f51 -CSEG PFA_BL 00003f55 -CSEG VE_TURNKEY 00003f56 -CSEG PFA_TURNKEY 00003f5d -ESEG CFG_TURNKEY 00000038 -CSEG VE_TOUPPER 00003f60 -CSEG PFA_TOUPPER 00003f67 -CSEG PFA_TOUPPER0 00003f72 -CSEG VE_TOLOWER 00003f73 -CSEG XT_TOLOWER 00003f79 -CSEG PFA_TOLOWER 00003f7a -CSEG PFA_TOLOWER0 00003f85 -CSEG VE_QSTACK 00003f86 -CSEG PFA_QSTACK 00003f8c -CSEG PFA_QSTACK1 00003f93 -CSEG VE_BOUNDS 00003f94 -CSEG PFA_BOUNDS 00003f9a -CSEG VE_CR 00003f9e -CSEG PFA_CR 00003fa2 -CSEG VE_SPACE 00003fa9 -CSEG PFA_SPACE 00003faf -CSEG VE_SPACES 00003fb2 -CSEG PFA_SPACES 00003fb8 -CSEG SPCS1 00003fba -CSEG SPCS2 00003fc1 -CSEG VE_S2D 00003fc3 -CSEG PFA_S2D 00003fc8 -CSEG VE_TO_BODY 00003fcb -CSEG VE_2LITERAL 00003fd1 -CSEG PFA_2LITERAL 00003fd8 -CSEG VE_EQUAL 00003fdc -CSEG PFA_EQUAL 00003fe0 -CSEG VE_ONE 00003fe3 -CSEG PFA_ONE 00003fe7 -CSEG VE_TWO 00003fe8 -CSEG PFA_TWO 00003fec -CSEG VE_MINUSONE 00003fed -CSEG XT_MINUSONE 00003ff0 -CSEG PFA_MINUSONE 00003ff1 -SET flashlast 00003ff2 -DSEG HERESTART 0000011d -ESEG EHERESTART 00000084 -ESEG CFG_ORDERLIST 00000042 -ESEG CFG_RECOGNIZERLIST 00000054 -EQU UBRR_VAL 0000000c -EQU BAUD_REAL 0000963d -EQU BAUD_ERROR 00000001 diff --git a/amforth-6.5/appl/eval-pollin/p32-8.xml b/amforth-6.5/appl/eval-pollin/p32-8.xml deleted file mode 100644 index 1fa114a..0000000 --- a/amforth-6.5/appl/eval-pollin/p32-8.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - Uploading Hexfiles for p32-8 - - - - Writing fuses - - - - diff --git a/amforth-6.5/appl/eval-pollin/p328-16.eep.hex b/amforth-6.5/appl/eval-pollin/p328-16.eep.hex deleted file mode 100644 index ae05b64..0000000 --- a/amforth-6.5/appl/eval-pollin/p328-16.eep.hex +++ /dev/null @@ -1,7 +0,0 @@ -:10003400FFFF260BC2018E00CE095C00B008780ACF -:0A004400FF024800ED3F01004800F4 -:06005C00020070065C06C4 -:100066007E3B680000000000FF08AF08AF080000F4 -:100076000A00A300B1007800930077020000640232 -:08008600C93CE83CD83C19001C -:00000001FF diff --git a/amforth-6.5/appl/eval-pollin/p328-16.hex b/amforth-6.5/appl/eval-pollin/p328-16.hex deleted file mode 100644 index b754f68..0000000 --- a/amforth-6.5/appl/eval-pollin/p328-16.hex +++ /dev/null @@ -1,633 +0,0 @@ -:020000020000FC -:0200040026D103 -:0200080024D101 -:02000C0022D1FF -:0200100020D1FD -:020014001ED1FB -:020018001CD1F9 -:02001C001AD1F7 -:0200200018D1F5 -:0200240016D1F3 -:0200280014D1F1 -:02002C0012D1EF -:0200300010D1ED -:020034000ED1EB -:020038000CD1E9 -:02003C000AD1E7 -:0200400008D1E5 -:0200440006D1E3 -:0200480004D1E1 -:02004C0002D1DF -:0200500000D1DD -:02005400FED0DC -:02005800FCD0DA -:02005C00FAD0D8 -:02006000F8D0D6 -:10006400F6D00008000400701A000A0041546D65BF -:1000740067613332385007FF3E72782D627566002F -:1000840000004400082F10911001E0E0F1E0E10FBE -:10009400F31D008313951F7010931001899199919A -:1000A4000C94053806FF6973722D72783D0001388F -:1000B4003D38C6009838B1383D380300DF3F363844 -:1000C4006400383D4300203801383D3859003D383C -:1000D4002400A53C3D3800013D3816005439983EB3 -:1000E400203806FF72782D6275665400013893003B -:1000F400363879003D3811019838B1383D3800015F -:100104009D399838C4382F3A3D380F00133A3D389A -:1001140011018D38203807FF72783F2D6275660013 -:1001240073000138303D3D38110198383D381001D5 -:1001340098381339203807FF74782D706F6C6C0071 -:100144008D000138B1003638A4003D38C6008D3822 -:10015400203808FF74783F2D706F6C6C9D00013857 -:10016400303D3D38C00098383D382000133A2038DF -:1001740004FF75627272AB006F388C00A03DAA3D1B -:1001840006FF2B7573617274BA0001383D3898000C -:100194003D38C1008D383D3806003D38C2008D38E9 -:1001A400BE00B138F93A3D38C5008D383D38C40039 -:1001B4008D386600203808FF31772E7265736574B8 -:1001C400C200E4009A938A93249A2C98E0E8F7E01A -:1001D4003197F1F71FB7F8942C9A2498E0E0F1E0F6 -:1001E4003197F1F783B184FF9FEF1FBF24982C98B8 -:1001F400E0E8F6E03197F1F7892F0C94053807FF12 -:1002040031772E736C6F7400DD0008012C98249AEA -:100214001FB7F894E8E1F0E03197F1F788948795F7 -:1002240010F42C9A2498E4E2F0E03197F1F703B14A -:1002340004FD8068ECECF0E03197F1F72C9A2498F7 -:0E024400E8E0F0E03197F1F71FBF0C940538A9 -:040000000C94393DE6 -:100252000A920FB60A920F900F900A94B02CFF9355 -:10026200EF93E2E1F1E00694E00DF31D00800394C8 -:100272000082EF91FF9109900FBE0990089502FF4D -:100282006D2B01010138C73F153C203803FF75640F -:100292002A0040010138B138FF38E039D938C43872 -:1002A200F638E039E1389D39203804FF756D617800 -:1002B20047010138C93E5C3936386001C438D93843 -:1002C200203804FF756D696E56010138C93E6739E1 -:1002D20036386C01C438D938203801383D380080AE -:1002E200133A1A3936387701E63F20384B3920382D -:1002F2000AFF6E616D653E666C616773620101386B -:10030200CB3B3D3800FF133A203803FF766572007D -:1003120079010138DA020304AE3FBD3E7938E802C2 -:10032200413FC73F210329033D382E0012033F03FB -:100332004A033904BD3E8138AE3FF002030420383F -:1003420004FF6E6F6F7086010138203806FF756EEC -:1003520075736564A10101388D3A233F93392038C2 -:100362000200746FA70101384804D03FB73E7938C4 -:100372003638C5015C07BF01670720380138F638F7 -:10038200B138D101FF38CB3BB138D101D101CB3BE0 -:100392002A38203807FF692D63656C6C2B00B10188 -:1003A20001382F3A203808FF69636F6D70617265FA -:1003B200CB010138FF38CF38F63813393638E5012A -:1003C200D23ED9384B392038C43854392608363809 -:1003D20008029B3ACF387938CF38CB3BB1383D3819 -:1003E20000015C393638F901C4383D38FF00133A50 -:1003F200133936380002D23E4B39D43A20382F3ADC -:10040200C438903CC4383D380200BA3AEB01D23EBF -:100412005439203801FF2A00D4010138A639D938CD -:10042200203801FF6A000B020138763A3D38070096 -:100432009D397938763A3D3809009D3979389D39A8 -:10044200203804FF6461627312020138B138213925 -:1004520036382C023302203807FF646E65676174F8 -:100462006500220201383B3CE63F5439153C2038F6 -:1004720005FF636D6F7665002D023F02BF93AF9358 -:10048200E991F991A991B991092F082B21F01D91B8 -:1004920011930197E1F7AF91BF91899199910C94D2 -:1004A200053805FF32737761700039020138E1388F -:1004B200FF38E138F63820380AFF726566696C6CDD -:1004C2002D7469625202013880023D385A00980444 -:1004D200860281385439E23E81384B3920380AFF8E -:1004E200736F757263652D7469625D0201388002F3 -:1004F20086027938203803FF746962007002483836 -:100502002C0104FF237469627C024838860106FFCD -:1005120065653E72616D8202013854399B3ACF386B -:100522005F3BCF388138903CC438903CC438C93ADC -:100532009002D23E203808FF696E69742D72616D97 -:10054200880201383D386A00023B3D382200043AF5 -:100552008D0220380BFF656E7669726F6E6D656E67 -:1005620074009C024838440009FF776F72646C691A -:1005720073747300000001383D380800203804FF0E -:100582002F706164B50201388D3AE83E9339203804 -:1005920005FF2F686F6C6400C0020138E83E233FFC -:1005A200933920380AFF666F7274682D6E616D652B -:1005B200C9020138D0030700616D666F727468006A -:1005C200203807FF76657273696F6E00D3020138B7 -:1005D2003D384100203803FF63707500E2020138A4 -:1005E2003D3837002F04203808FF6D63752D696E82 -:1005F200666FEC0201383D383300203805FF2F7555 -:1006020073657200F50201383D382C00203803FF73 -:10061200686C6400AB024838880104FF686F6C6440 -:10062200080301380C03B1387938353AB138FF384C -:10063200C4388138F6388D38203802FF3C230E0347 -:100642000138E83E0C038138203801FF23001E03E5 -:100652000138BD3E7938A603E1383D380900CF386C -:100662006E39363837033D3807009D393D38300042 -:100672009D391203203802FF237326030138290310 -:10068200C93E1C3A1A3936384003203802FF233E4D -:100692003C030138D23E0C037938E83ECF38933917 -:1006A200203804FF7369676E4703013821393638F1 -:1006B2005D033D382D001203203803FF642E7200C3 -:1006C20052030138FF38DA3E260221033F03E138A4 -:1006D20056034A03F638CF389339B73F39042038E6 -:1006E20002FF2E725E030138FF38C73FF6386203FD -:1006F200203802FF642E7103013854396203AE3F81 -:10070200203801FF2E007A030138C73F7D032038CD -:1007120003FF75642E008203013854399603AE3FFD -:10072200203804FF75642E7289030138FF382103D3 -:100732003F034A03F638CF389339B73F390420389C -:1007420006FF75642F6D6F6492030138FF385439C8 -:100752000839C239F638C438FF38C239F638203879 -:1007620006FF64696769743FA1030138663FB138C7 -:100772003D38390078393D380001133A9D39B13896 -:100782003D38400178393D380701133A93393D38F5 -:1007920030009339B138BD3E79385C3920380138A0 -:1007A20008392F04F638CF382F3A043A9D392F3AB8 -:1007B200FF38203802FF732CB1030138B138E2034D -:1007C200203801386707B138043ADA3E0B3A9339D8 -:1007D200FF38543926083638F5039B3AB138793850 -:1007E2006707903CC93AEF03F63828393638FC03DC -:1007F200B13898386707D938203805FF697479709D -:100802006500DB030138B138043ADA3E0B3A93391A -:10081200FF3854392608363817049B3AB138CB3B97 -:10082200B138240420042F3AC93A0F04F638283983 -:1008320036381E04B138CB3B2404D938203801386D -:10084200F93A2404203801383D38FF00133AF23EC9 -:10085200203806FF69636F756E74FE030138B13884 -:100862002F3AC438CB3B203804FF747970652A04D0 -:100872000138993F2608363844049B3AAC3A9838F6 -:10088200F23EC93A3F04203801FF270035040138FF -:10089200BB05FE050906B1389606DF3FC438CB3BDF -:1008A2003D38A501DF3F1C3A36385A043D38F3FF84 -:1008B200863DD938203805FF63736B6970004504A3 -:1008C2000138FF38B13836387004CF3898380839D3 -:1008D200DF3F36387004E63FAC052F386304F63844 -:1008E200D938203805FF637363616E005C040138F8 -:1008F200FF38CF38B13898380839DF3F1A393638DF -:100902008D04C438353AC438CF3821391A393638CB -:100912008D042F3A2F387B04F038CF389339F638CC -:10092200D938203806FF6163636570747304013837 -:10093200CF389D39353ACF38033FB138D9041A3907 -:100942003638CB04B1383D380800DF3F3638BB04B7 -:10095200D938E138C93E7839FF38E138E138F6381C -:100962003638B904D104353AFF38CF38F6385A014F -:100972002F38C904B138543F6E393638C204D938D9 -:10098200543FB138F23ECF388D382F3ACF38660116 -:100992002F389D04D938F038C4389339A13F203814 -:1009A20001383D380800B138F23EAE3FF23E203801 -:1009B2000138B1383D380D00DF3FC4383D380A00F8 -:1009C200DF3F1C3A203806FF726566696C6C93043F -:1009D200FF3D1A00C83DD43D04FF63686172E40420 -:1009E2000138BB05D9389838203806FF6E756D621C -:1009F2006572ED040138BD3E7938FF383F05FF3896 -:100A020052053F05F6381C3AFF38B1381A393638E4 -:100A12001205D23EF638D938F638BD3E81385439FF -:100A220020381E3B543954392D3B7005B9383638BD -:100A32003405E63FDF3F36382B0598383D382E0027 -:100A4200DF3F36382C05F638363828053302EB3FBF -:100A52002F383A05D938D23EF638D938F638BD3E65 -:100A6200813854392038D23EF63836383905273E97 -:100A7200E63FF638BD3E81384B3920380138CF3851 -:100A820098383D382D00DF3FB138FF3836384B05F6 -:100A9200E63FAC05F638203852380A001000020052 -:100AA2000A000138CF3898383D3823009339B138DD -:100AB20054393D380400573E363868054D059D3996 -:100AC200CB3BBD3E8138E63FAC052F386905D938AE -:100AD200203807FF3E6E756D62657200F6040138BC -:100AE200B13836388805CF389838B6031A393638CF -:100AF2007C05D9382038FF385702BD3E79384B0182 -:100B0200F63843015702E63FAC052F38710520380D -:100B120005FF7061727365006A050138FF38A2052E -:100B2200E23E7938AC05F6387804B1382F3AE23E25 -:100B3200653AE63FAC05203806FF736F7572636550 -:100B42008905FF3D1600C83DD43D07FF2F7374721F -:100B5200696E67009D050138E138CF389D39E1386B -:100B6200E138933920380AFF70617273652D6E6126 -:100B72006D65A6050138543FBF0520380138FF389E -:100B8200A205E23E7938AC0508396104F6387804EA -:100B9200C93E9D39A205D9389339E23E81382038C1 -:100BA20003FF73703000B4056F380600C83DD43DB2 -:100BB20002FF7370D1055838080003FF72703000CD -:100BC200D9050138E605793820385838040005FF80 -:100BD200646570746800DE050138D5058D3A933975 -:100BE200043A353A203810FF666F7274682D7265C8 -:100BF200636F676E697A6572E8056F383E00A03DE3 -:100C0200AA3D09FF7265636F676E697A6500F40534 -:100C120001383D381406C438A7091A393638130684 -:100C2200D23E960620380138E138E138C93E1E3BF3 -:100C3200E1382A382D3BE138B1389606DF3F3638A5 -:100C42002506D93854392038F038F0384B39203855 -:100C520009FF696E7465727072657400020601386C -:100C6200BB05B13836384106FE050906B73E79386C -:100C720036383C06D101CB3B2A388B3F2F38310620 -:100C8200D23E203806FF64743A6E756D29065238DA -:100C9200A5017D077D0707FF64743A646E756D00D8 -:100CA20043065238A501D73FD73F07FF7265633A23 -:100CB2006E756D004C060138FB0436386806E63F57 -:100CC200DF3F363866064806203852062038960638 -:100CD200203808FF7265633A66696E645606013809 -:100CE2000B07B1381A3936387906D93896062038C2 -:100CF2008006203805FF64743A7874006A06523818 -:100D020084068806D73F0138D9382A382038013876 -:100D1200213936388E06670720382A38203807FFEF -:100D220064743A6E756C6C007B0652389A069A06A9 -:100D32009A0601383D38F3FF863D0FFF73656172F5 -:100D420063682D776F72646C697374009006013862 -:100D5200FF3854393D38BD06F638DA06B1381A394B -:100D62003638B706D23ED93854392038B13801075F -:100D7200C43880016E0120380138FF38D938C93EA5 -:100D82000839F506DA013638CB06F638D93854393F -:100D92004B392038D23EF6385439203811FF74725C -:100DA2006176657273652D776F72646C6973740016 -:100DB2009E0601385F3BB1383638EB06C93E1E3B12 -:100DC200C4382A382D3BE1383638EB06160ACB3BBD -:100DD2002F38DC06D23E20380BFF6E616D653E7304 -:100DE2007472696E6700CF0601382F043D38FF0028 -:100DF200133A203807FF6E66613E63666100ED06B6 -:100E02000138160A2F3A203807FF66696E642D787A -:100E12007400FB0601383D3817073D384A00A70920 -:100E22001A3936381607D23E543920380138FF387D -:100E3200C93EF638A806B13836382407FF38F038EC -:100E4200F038F6384B39203806FF6E6577657374D3 -:100E5200050748388A0106FF6C61746573742507BB -:100E620048388E0108FF28637265617465292C0772 -:100E72000138BB059008B1382A07903C81387508C3 -:100E82002A078138203801005C0033070138A205A7 -:100E9200F038E23E8138203801002800440701384A -:100EA2003D3829008E05D23E203807FF636F6D70F2 -:100EB200696C65004D070138F638B138D101FF3849 -:100EC200CB3B6707203801FF2C0056070138123F41 -:100ED200733B123F2F3ABF01133F203803005B27B9 -:100EE2005D006407013848047D07203807006C69FB -:100EF200746572616C006F0701385C073D386707E3 -:100F020020380800736C69746572616C7707013868 -:100F12005C07D003DE0320380138123F5C07FFFF75 -:100F2200203801388B3F123FC438733B20380138D8 -:100F3200123F203801388B3F67072038050061686F -:100F420065616400820701385C072F388D072038FD -:100F5200020069669F0701385C0736388D07203822 -:100F62000400656C7365A90701385C072F388D078B -:100F7200C4389207203804007468656EB1070138DE -:100F8200920720380500626567696E00BC07013868 -:100F92009807203805007768696C6500C307013837 -:100FA200AC07C43820380600726570656174CB07DF -:100FB2000138ED07C00720380500756E74696C00B2 -:100FC200D40701383D38363867079B0720380500BB -:100FD200616761696E00DD0701385C072F389B0786 -:100FE20020380200646FE80701385C079B3A9807D3 -:100FF20054395008203804006C6F6F70F2070138C2 -:101002005C07C93A3708203805002B6C6F6F7000F7 -:10101200FC0701385C07BA3A3708203805006C65CE -:1010220061766500050801385C07D43AA4075008C8 -:10103200203803003F646F000F0801385C07260860 -:10104200AC07F507C438500820380138C93EDF3FE5 -:10105200B138FF3836382E08D23EF638FD392038FE -:1010620007FF656E646C6F6F70001A0801389B078A -:101072004408B93836384008C0072F3839082038B4 -:1010820002FF6C3E310801386308793879383D38FF -:10109200FEFF6308653A203802FF3E6C41080138C2 -:1010A200EB3F6308653A630879388138203803FFDB -:1010B2006C7030004D086F384000A03DAA3D02FF21 -:1010C2006C7058084838900106FF63726561746558 -:1010D20060080138390799085C075238203806FF42 -:1010E20068656164657265080138123FFF38FF3830 -:1010F200B138283936388708B1383D3800FF1C3AF4 -:10110200E203F6385F3B6707F63820383D38F0FFD8 -:10111200863D07FF776C73636F7065007008FF3D53 -:101122003C00A03DAA3D06FF72657665616C8A08A7 -:1011320001382A07903C7938B9383638A4082A078A -:101142007938C4383B3B20380500646F65733E0034 -:10115200940801385C07BD085C070E945C07B2086E -:1011620020389A938A93CB0101967F916F91BF9316 -:10117200AF93DB010C9405380138F6382A07903C0E -:1011820079385F3B0107733B203801FF3A00A5081D -:1011920001383907D408D938203807FF3A6E6F6E04 -:1011A200616D6500C6080138123FB13831078138D8 -:1011B2005C070138E908203801003B00CE080138FD -:1011C2005C072038F1089908203801FF5D00DD082E -:1011D2000138E63FB73E8138203801005B00E6085F -:1011E20001385439B73E8138203808FF7661726978 -:1011F20061626C65EE080138233F0809EB3F2C3F22 -:10120200203808FF636F6E7374616E74F6080138DC -:10121200390799085C0748386707203804FF757357 -:10122200657202090138390799085C07583867075F -:101232002038070072656375727365000F09013803 -:10124200310779386707203809FF696D6D65646970 -:10125200617465001A090138CE095F3BB138CB3B96 -:101262003D38FF7F133AC438733B203806005B6376 -:101272006861725D250901385C073D38F104670732 -:101282002038060061626F727422370901388A3E83 -:101292005C075909203805FF61626F7274004209C8 -:1012A20001384B39863D06FF3F61626F72744C090B -:1012B2000138E13836385F0903045109D23E20383B -:1012C20009FF6765742D737461636B0054090138FB -:1012D200B138903CC4385F3BB138FF385439C43818 -:1012E200260836387F099B3AAC3A353AC43ECF38A5 -:1012F2009D395F3BC4384B39BA3A7509D23EF6384C -:10130200203809FF7365742D737461636B00610982 -:101312000138CF382139363891093D38FCFF863DF6 -:10132200C93E3B3BC4385439260836389E099B3A9D -:10133200903CDA3E3B3BC93A9909D938203809FF3B -:101342006D61702D737461636B0082090138B1386D -:10135200903CC4385F3BC43E993F26083638C309E7 -:101362009B3AAC3A5F3BC438FF3808392A38B9385F -:101372003638BF09F638D938D43A2038F638EB3F38 -:10138200BA3AB209D938543920380BFF6765742D3F -:1013920063757272656E7400A00901383D384600AB -:1013A2005F3B203809FF6765742D6F7264657200B8 -:1013B200C60901383D384A006809203809FF6366CA -:1013C200672D6F7264657200D30948384A0007FFBF -:1013D200636F6D7061726500DF09EF09BF93AF93B0 -:1013E2008C0189919991DC01899199919C01899152 -:1013F2009991FC01ED90F190EF1451F40A9519F0D6 -:101402002A95C1F701C02A95022B11F4882702C040 -:101412008FEF00C0982FAF91BF910C94053807FF52 -:101422006E66613E6C666100E8090138F5062F3A86 -:10143200043A9D39203802FF2E73100A0138ED0557 -:101442000A3EAE3FED055439260836382E0A9B3A3D -:10145200AC3A843C0A3EC93A290A203806FF632185 -:10146200407370691C0A350A03D099270C94053819 -:101472008EBD0DB5087F0DBD0DB507FFFACF8EB538 -:10148200089505FF6E40737069002F0A480A8C01A7 -:1014920089919991FC01C8012EBC2DB527FFFDCF82 -:1014A2002EB521930197C1F7899199910C94053832 -:1014B20005FF6E2173706900420A5F0A8C018991EF -:1014C2009991FC01C80121912EBD2DB527FFFDCFB9 -:1014D2002EB50197C1F7899199910C9405380BFFAC -:1014E2006170706C7475726E6B657900590A01389F -:1014F200C700973C8A01AE3FAC3E3D38E803C23993 -:10150200F038413F8503D00304006B487A2003047E -:1015120020380BFF7365742D63757272656E7400EB -:10152200700A01383D3846003B3B203808FF776F90 -:1015320072646C6973748A0A01381B3F5439CF385C -:101542003B3BB138903CBF011C3F20380EFF666F19 -:101552007274682D776F72646C697374970A483875 -:10156200480009FF7365742D6F7264657200A70AE3 -:1015720001383D384A00890920380FFF7365742D00 -:101582007265636F676E697A65727300B20A0138B9 -:101592003D385C00890920380FFF6765742D72653C -:1015A200636F676E697A65727300BE0A01383D38EF -:1015B2005C006809203804FF636F6465CD0A013856 -:1015C20039079908123FD1016707203808FF656E75 -:1015D200642D636F6465DC0A01385C070C945C0758 -:1015E2000538203808FF286D61726B657229E70A99 -:1015F2006F386800A03DAA3D0800706F7374706F69 -:101602006E65F30A0138BB05FE050906B138FF38DD -:10161200D101D101CB3B2A38F638D101CB3B670748 -:10162200203803FF32724000FD0A170B9A938A9307 -:10163200EF91FF918F919F919F938F93FF93EF93E0 -:0A1642009A938A93CF010C940538A7 -:10700200BF93AF93DB011196B21469F4FD01EE0F49 -:10701200FF1F659175911196FB01EE0FFF1F059100 -:107022001591F80109949A938A938B2D9927BB2481 -:1070320060EC7CE3F1CF04FF65786974120B2138B0 -:10704200AF91BF91E1CF07FF657865637574650005 -:107052001C382B38BC0189919991DECF3038FD0163 -:10706200EE0FFF1FA591B591CFCF3738982B89919D -:107072009991A9F31196C8CF3E389A938A93FD014C -:10708200EE0FFF1F859195911196BECF48389A93C6 -:107092008A93FB013196EE0FFF1F85919591B4CF34 -:1070A20052389A938A93CB010196AECF58389A936D -:1070B2008A93FB013196EE0FFF1F85919591840D06 -:1070C200951DA2CF07FF2876616C756529002438CB -:1070D2000138390799085C076F3820380E94B208D6 -:1070E200B138D101CB3B2A38203801FF4000633848 -:1070F2007A38FC018191919187CF01FF2100763886 -:107102008238FC0189919991918380838991999127 -:107112007BCF02FF63217E388E38FC0189919991E1 -:1071220080838991999170CF02FF63408A389938A0 -:10713200FC019927808168CF02FF4075953801389C -:10714200023B9D397938203802FF21759D3801387C -:10715200023B9D398138203803FF64757000A538E1 -:10716200B2389A938A9350CF04FF3F647570AD385A -:10717200BA38082F092B11F09A938A9345CF04FF4E -:1071820073776170B538C5388C01899199911A93DA -:107192000A933ACF04FF6F766572C038D0389A935B -:1071A2008A938A819B8130CF04FF64726F70CB38DF -:1071B200DA388991999128CF03FF726F7400D5381C -:1071C200E2388C0129913991899199913A932A93C4 -:1071D2001A930A9319CF03FF6E697000DD38F138F4 -:1071E200229612CF02FF723EEC38F7389A938A93B6 -:1071F2008F919F9109CF02FF3E72F33800399F931E -:107202008F938991999100CF02FF7240FC3809391E -:107212009A938A938F919F919F938F93F5CE02FFBA -:107222003C3E05390138DF3F1A39203802FF303D34 -:1072320010391B39982BD1F530C002FF303C173979 -:10724200223997FD2AC032C002FF303E1E39293949 -:10725200821593055CF151F120C003FF64303E00BA -:1072620025393339821593058991999182059305C0 -:10727200ECF0E1F012C003FF64303C002E394139DA -:10728200229697FD0C944E390C94573904FF747270 -:1072920075653C394C399A938A938FEF9FEFB4CE40 -:1072A20001FF3000473955399A938A93C101ACCE18 -:1072B20002FF753C51395D39299139918217930743 -:1072C200A8F3A1F3EACF02FF753E59390138C43859 -:1072D2005C39203801FF3C0064396F3929913991BA -:1072E200281739071CF7D9CF01FF3E006B397939CE -:1072F2002991399128173907CCF2C1F2CECF04FF78 -:107302006C6F673275398539FC01992780E18A955E -:1073120022F0EE0FFF1FD8F777CE9A9575CE01FFB8 -:107322002D008039943909911991081B190BC80154 -:107332006BCE01FF2B0090399E3909911991800F74 -:10734200911F62CE02FF6D2A9A39A7398C01899169 -:1073520099919C0131027001209FC0013003F30812 -:10736200900DE11CF31C1203F308900DE11CF31CB9 -:107372009A938A93C70148CE06FF756D2F6D6F648D -:10738200A339C3397C01299139910991199140E1BD -:107392005527000F111F221F331F551F2E153F05A2 -:1073A200520518F003952E193F094A9589F73A9329 -:1073B2002A93C80129CE03FF756D2A00BD39E13930 -:1073C2008C0189919991809FF00122273327909F08 -:1073D200F00D211D331D819FF00D211D331D919F45 -:1073E200200D311DCF019A938A93C9010DCE06FF5C -:1073F200696E76657274DC39FE398095909504CE9B -:1074020002FF322FF839053A95958795FDCD02FF97 -:10741200322A013A0C3A880F991FF6CD03FF616EAA -:107422006400083A143A0991199180239123ECCD12 -:1074320002FF6F720F3A1D3A09911991802B912B1D -:10744200E3CD03FF786F7200193A273A0991199137 -:1074520080279127D9CD02FF312B223A303A01966B -:10746200D3CD02FF312D2C3A363A0197CDCD07FF0D -:107472003F6E656761746500323A013821393638EA -:10748200433A273E203806FF6C7368696674383ABF -:107492004A3AFC018991999131971AF0880F991F04 -:1074A200FBCFB2CD06FF727368696674443A593AEB -:1074B200FC018991999131971AF096958795FBCFA6 -:1074C200A3CD02FF2B21533A663AFC01899199918F -:1074D20020813181820F931F8083918389919991B9 -:1074E20093CD03FF72704000623A773A9A938A937F -:1074F2008DB79EB789CD03FF72702100723A813A2F -:107502002FB7F8948DBF9EBF2FBF899199917CCDE3 -:1075120003FF737040007C3A8E3A9A938A93CE01AD -:1075220073CD03FF73702100893A973AEC01899178 -:1075320099916ACD9C3A29913991E0E83E0F821BDC -:10754200930B3F932F939F938F93899199915CCD46 -:1075520001FF6900923AAD3A9A938A938F919F9173 -:10756200EF91FF91FF93EF939F938F938E0F9F1F46 -:107572004BCDBB3AEF91FF91E80FF91F8991999199 -:107582001BF0FF93EF936BCD0F911F9111963CCDA2 -:10759200CA3AEF91FF913196BBF3F3CF06FF756EB6 -:1075A2006C6F6F70A93AD53A1F910F911F910F918D -:1075B2002BCD06FF636D6F76653ECF3AE03ABF93FF -:1075C200AF93E991F991A991B991092F082B41F053 -:1075D200E80FF91FA80FB91F1E9112930197E1F747 -:1075E200AF91BF91899199910FCD02FF3E3CDA3A5A -:1075F200FA3A092F982F802F07CD03FF75704000AC -:10760200F63A033B9A938A93C201FECC03FF75704C -:107612002100FE3A0C3B2C0189919991F5CC03FF94 -:10762200316D7300073B153BE0EAFFE03197F1F75C -:10763200EBCC03FF323E7200103B1F3BFC018991F1 -:1076420099919F938F93FF93EF9389919991DCCCBA -:1076520003FF32723E001A3B2E3B9A938A93EF91BC -:10766200FF918F919F919A938A93CF01CDCC02FF84 -:107672002165293B3C3BFC01899199912FB7F894F4 -:1076820028D000B5081709F00BD0319622D000B5EA -:10769200091711F0892F04D02FBF89919991B4CC89 -:1076A200F999FECF07B700FDFDCFF2BDE1BD80BD68 -:1076B200FA9AF99A089502FF4065383B603B2FB76A -:1076C200F894FC0106D080B5319603D090B52FBF57 -:1076D2009BCCF999FECFF2BDE1BDF89A089502FF65 -:1076E20021695C3BFF3D6600A03DAA3D09FF2821C0 -:1076F200692D6E7277772900703B7F3B1FB71F930E -:10770200F8949C0189919991AF93BF93CF93DF93A2 -:1077120009D0DF91CF91BF91AF91899199911F913A -:107722001FBF72CC10D0E094F0948E219F21982B31 -:1077320019F0F90102E020D0F90104E01DD0F901AD -:1077420000E11AD00895F901E07CFF7FEF01A0E487 -:10775200B0E0FE01EE0FFF1F45915591FE01E217C9 -:10776200F30711F00A0102C07A010C01002704D0CC -:107772002196119771F70895F999FECF17B710FD69 -:10778200FDCFEE0FFF1F016007BFE895089502FFCE -:107792004069773BCC3BFC01EE0FFF1F8591959131 -:1077A20033CC03FF6E3E7200C83BD73BFC01082F6F -:1077B200899199919F938F930A95D1F7EF93FF93B4 -:1077C2008991999121CC03FF6E723E00D23BE93B35 -:1077D2009A938A93FF91EF910E2F8F919F919A9393 -:1077E2008A930A95D1F7CF010FCC03FF64322A00A6 -:1077F200E43BFB3B09911991000F111F881F991F50 -:107802001A930A9301CC03FF64322F00F63B093C22 -:107812000991199195958795179507951A930A934A -:10782200F3CB02FF642B043C163C29913991E99079 -:10783200F99049915991240F351F8E1D9F1D3A933E -:107842002A93E2CB02FF642D123C273C2991399105 -:10785200E990F99049915991421B530BE80AF90AB0 -:107862005A934A93C701D0CB07FF64696E7665725B -:107872007400233C3C3C09911991809590950095A8 -:1078820010951A930A93C0CB04FF2F6D6F64353C99 -:107892004A3C9C0109911991412F432717FF04C0CB -:1078A200109500950F5F1F4F37FF04C0309520954C -:1078B2002F5F3F4FEE24FF1851E1001F111F5A9511 -:1078C20039F447FF04C0109500950F5F1F4F0BC09E -:1078D200EE1CFF1CE21AF30A20F4E20EF31E889457 -:1078E200ECCF0894EACFFA92EA92C8018DCB03FF5B -:1078F20061627300453C0138B1383E3A203804FFDA -:107902007069636B783C01382F3AC43E8D3A9D39D9 -:107912007938203805FF63656C6C2B00803C913C04 -:10792200029672CB04FF2B696E748B3C983C789460 -:107932006BCB04FF2D696E74933C9F3CF89464CB2F -:1079420004FF696E74219A3C01383D3800009D396C -:107952003B3B203804FF696E7440A13C01383D383E -:1079620000009D395F3B203808FF696E742D7472E8 -:107972006170AB3CBC3CB82E8991999145CB0138E2 -:10798200AF3C2A38C53C2038C63C01D03DCB1895C7 -:107992000138D0030300206F6B000304203803FF7B -:1079A2002E6F6B00B53CFF3D1C00C83DD43D013835 -:1079B200D00302003E20A13F0304203806FF2E72AE -:1079C20065616479D03CFF3D2000C83DD43D01385B -:1079D200D0030400203F3F200304BD3E7938FF3826 -:1079E200413F8503E23E79388503F638BD3E813852 -:1079F200203806FF2E6572726F72DF3CFF3D1E005B -:107A0200C83DD43D04FF71756974FA3C01385C08C5 -:107A120063088138D505963AE205803AF108B73E07 -:107A220079381A393638163DE43CE9043638283DAF -:107A32003D383006703DB9383638283DB1383D38CA -:107A4200FEFF6E393638263DFF3C2F38083DD43CC8 -:107A52002F38103D05FF706175736500033DFF3DD2 -:107A62009201B43DBE3D04FF636F6C642B3D393D12 -:107A7200A4B622243324BB2424BEE0E0F1E0219208 -:107A8200E030E9F7F930D9F7E4E9F1E02F010FEF3F -:107A92000DBF048318E01EBF1583CFEAC683D8E06A -:107AA200D783AAE5BDE3B0CA04FF7761726D343DA6 -:107AB2000138A2023D38A5013D38303DDF3DF108D5 -:107AC2005C3F073D07FF68616E646C657200553D5F -:107AD20058380A0005FF636174636800633D01382A -:107AE2008D3AFF38693D7938FF38763A693D8138F9 -:107AF2002A38F638693D8138F638D9385439203871 -:107B020005FF7468726F77006B3D0138B1381A391E -:107B120036388D3DD9382038693D7938803AF63883 -:107B2200693D8138F638C438FF38963AD938F63884 -:107B3200203807FF4564656665724000813D013863 -:107B4200CB3B5F3B203807FF4564656665722100C9 -:107B52009A3D0138CB3B3B3B203807FF52646566B8 -:107B620065724000A43D0138CB3B7938203807FFCD -:107B72005264656665722100AE3D0138CB3B8138A7 -:107B8200203807FF5564656665724000B83D0138CC -:107B9200CB3B023B9D397938203807FF5564656637 -:107BA20065722100C23D0138CB3B023B9D398138D1 -:107BB200203806FF646566657221CE3D0138D03FEC -:107BC200B138D101D101CB3B2A38203806FF646598 -:107BD20066657240DA3D0138D03FB138D101CB3B06 -:107BE2002A38203807FF2864656665722900E73D58 -:107BF2000138390799085C07FF3D20380E94B20816 -:107C0200B138D101CB3B2A382A38203802FF752EF1 -:107C1200F33D013854398D03203803FF752E72006D -:107C2200073E01385439C4389603203805FF752FB2 -:107C32006D6F64000E3E0138FF385439F638C23990 -:107C4200203806FF6E6567617465173E0138FD399D -:107C52002F3A203801FF2F00223E0138493CF038EC -:107C6200203803FF6D6F64002B3E0138493CD93840 -:107C7200203803FF6D696E00323E0138C93E783903 -:107C82003638443EC438D938203803FF6D61780055 -:107C92003A3E0138C93E6E393638503EC438D9387A -:107CA200203806FF77697468696E463E0138CF381E -:107CB2009339FF389339F6385C3920380DFF7368F1 -:107CC2006F772D776F72646C69737400523E01385E -:107CD2003D386E3EC438DA0620380138F506030412 -:107CE200AE3F4B39203805FF776F726473005F3EF9 -:107CF20001383D384C005F3B683E203802002E229E -:107D0200743E01388A3E5C07030420380200732265 -:107D12007F3E01383D3822008E05B73E793836382D -:107D2200933E8807203804FF66696C6C873E0138F1 -:107D3200E138E138B9383638A53E993F9B3AB13837 -:107D4200AC3A8D38C93AA03ED938203805FF665F73 -:107D520063707500943E01383D3800243D38F400CC -:107D6200203805FF737461746500A73E4838C0016E -:107D720004FF62617365B23E58380C0005FF63650B -:107D82006C6C7300B93E0C3A04FF32647570BF3EEE -:107D92000138CF38CF38203805FF3264726F700057 -:107DA200C53E0138D938D938203804FF7475636B61 -:107DB200CD3E0138C438CF38203803FF3E696E000B -:107DC200D63E5838180003FF70616400DE3E013869 -:107DD200233F3D3828009D39203804FF656D6974C2 -:107DE200E43EFF3D0E00C83DD43D05FF656D69745C -:107DF2003F00EE3EFF3D1000C83DD43D03FF6B65E2 -:107E02007900F63EFF3D1200C83DD43D04FF6B658C -:107E1200793FFF3EFF3D1400C83DD43D02FF647030 -:107E2200073F6F383600A03DAA3D05FF65686572C1 -:107E320065000F3F6F383A00A03DAA3D04FF686518 -:107E42007265163F6F383800A03DAA3D05FF616C90 -:107E52006C6F74001F3F0138233F9D39BF01243FDF -:107E6200203803FF62696E00273F0138EB3FBD3EB9 -:107E72008138203807FF646563696D616C00323FA9 -:107E820001383D380A00BD3E8138203803FF68655D -:107E920078003B3F01383D381000BD3E8138203824 -:107EA20002FF626C473F4838200007FF7475726E0C -:107EB2006B657900513FFF3D4200A03DAA3D07FF9F -:107EC200746F757070657200563F0138B1383D3875 -:107ED20061003D387B00573E3638723F3D38DF0047 -:107EE200133A203807FF746F6C6F77657200603F3A -:107EF2000138B1383D3841003D385B00573E3638D5 -:107F0200853F3D3820001C3A203806FF3F737461DC -:107F1200636B733F0138ED0521393638933F3D38A5 -:107F2200FCFF863D203806FF626F756E6473863FE4 -:107F32000138CF389D39C438203802FF6372943F2C -:107F420001383D380D00F23E3D380A00F23E20383D -:107F520005FF7370616365009E3F0138543FF23E36 -:107F6200203806FF737061636573A93F0138543985 -:107F72004A3EB1383638C13FAE3F353A2F38BA3F64 -:107F8200D938203803FF733E6400B23F0138B1385C -:107F92002139203805FF3E626F647900C33F303AD1 -:107FA2000800326C69746572616CCB3F0138C43869 -:107FB2007D077D07203801FF3D00D13F013893390D -:107FC2001A39203801FF3100DC3F4838010001FF37 -:107FD2003200E33F4838020002FF2D31E83F4838C3 -:027FE200FFFF9F -:00000001FF diff --git a/amforth-6.5/appl/eval-pollin/p328-16.lst b/amforth-6.5/appl/eval-pollin/p328-16.lst deleted file mode 100644 index da486f0..0000000 --- a/amforth-6.5/appl/eval-pollin/p328-16.lst +++ /dev/null @@ -1,10427 +0,0 @@ - -AVRASM ver. 2.1.52 p328-16.asm Sun Apr 30 20:10:15 2017 - -p328-16.asm(5): Including file '../../avr8\preamble.inc' -../../avr8\preamble.inc(2): Including file '../../avr8\macros.asm' -../../avr8\macros.asm(6): Including file '../../avr8\user.inc' -../../avr8\preamble.inc(6): Including file '../../avr8/devices/atmega328p\device.asm' -../../avr8/devices/atmega328p\device.asm(5): Including file '../../avr8/Atmel/Appnotes2\m328Pdef.inc' -p328-16.asm(14): Including file '../../avr8\drivers/usart_0.asm' -../../avr8\drivers/usart_0.asm(32): Including file '../../avr8\drivers/usart_common.asm' -../../avr8\drivers/usart_common.asm(11): Including file '../../avr8\drivers/usart-rx-buffer.asm' -../../avr8\drivers/usart_common.asm(24): Including file '../../avr8\words/usart-tx-poll.asm' -../../avr8\drivers/usart_common.asm(29): Including file '../../avr8\words/ubrr.asm' -../../avr8\drivers/usart_common.asm(30): Including file '../../avr8\words/usart.asm' -p328-16.asm(19): Including file '../../avr8\drivers/1wire.asm' -p328-16.asm(21): Including file '../../avr8\amforth.asm' -../../avr8\amforth.asm(12): Including file '../../avr8\drivers/generic-isr.asm' -../../avr8\amforth.asm(14): Including file '../../avr8\dict/rww.inc' -../../avr8\dict/rww.inc(1): Including file '../../avr8\words/mplus.asm' -../../avr8\dict/rww.inc(2): Including file '../../common\words/ud-star.asm' -../../avr8\dict/rww.inc(3): Including file '../../common\words/umax.asm' -../../avr8\dict/rww.inc(4): Including file '../../common\words/umin.asm' -../../avr8\dict/rww.inc(5): Including file '../../avr8\words/immediate-q.asm' -../../avr8\dict/rww.inc(6): Including file '../../avr8\words/name2flags.asm' -../../avr8\dict/rww.inc(11): Including file '../../avr8\dict/appl_4k.inc' -../../avr8\dict/appl_4k.inc(1): Including file '../../common\words/ver.asm' -../../avr8\dict/appl_4k.inc(4): Including file '../../common\words/noop.asm' -../../avr8\dict/appl_4k.inc(5): Including file '../../avr8\words/unused.asm' -../../avr8\dict/appl_4k.inc(6): Including file '../../common\words/to.asm' -../../avr8\dict/appl_4k.inc(7): Including file '../../avr8\words/i-cellplus.asm' -../../avr8\dict/appl_4k.inc(8): Including file '../../avr8\words/icompare.asm' -../../avr8\dict/appl_4k.inc(9): Including file '../../common\words/star.asm' -../../avr8\dict/appl_4k.inc(10): Including file '../../avr8\words/j.asm' -../../avr8\dict/appl_4k.inc(11): Including file '../../avr8\words/dabs.asm' -../../avr8\dict/appl_4k.inc(12): Including file '../../avr8\words/dnegate.asm' -../../avr8\dict/appl_4k.inc(13): Including file '../../avr8\words/cmove.asm' -../../avr8\dict/appl_4k.inc(14): Including file '../../common\words/2swap.asm' -../../avr8\dict/appl_4k.inc(15): Including file '../../common\words/tib.asm' -../../avr8\dict/appl_4k.inc(16): Including file '../../avr8\words/init-ram.asm' -../../avr8\dict/appl_4k.inc(20): Including file '../../avr8\words/environment.asm' -../../avr8\dict/appl_4k.inc(21): Including file '../../avr8\words/env-wordlists.asm' -../../avr8\dict/appl_4k.inc(22): Including file '../../avr8\words/env-slashpad.asm' -../../avr8\dict/appl_4k.inc(23): Including file '../../common\words/env-slashhold.asm' -../../avr8\dict/appl_4k.inc(24): Including file '../../common\words/env-forthname.asm' -../../avr8\dict/appl_4k.inc(25): Including file '../../common\words/env-forthversion.asm' -../../avr8\dict/appl_4k.inc(26): Including file '../../common\words/env-cpu.asm' -../../avr8\dict/appl_4k.inc(27): Including file '../../avr8\words/env-mcuinfo.asm' -../../avr8\dict/appl_4k.inc(28): Including file '../../common\words/env-usersize.asm' -../../avr8\dict/appl_4k.inc(30): Including file '../../avr8\words/hld.asm' -../../avr8\dict/appl_4k.inc(31): Including file '../../common\words/hold.asm' -../../avr8\dict/appl_4k.inc(32): Including file '../../common\words/less-sharp.asm' -../../avr8\dict/appl_4k.inc(33): Including file '../../common\words/sharp.asm' -../../avr8\dict/appl_4k.inc(34): Including file '../../common\words/sharp-s.asm' -../../avr8\dict/appl_4k.inc(35): Including file '../../common\words/sharp-greater.asm' -../../avr8\dict/appl_4k.inc(36): Including file '../../common\words/sign.asm' -../../avr8\dict/appl_4k.inc(37): Including file '../../common\words/d-dot-r.asm' -../../avr8\dict/appl_4k.inc(38): Including file '../../common\words/dot-r.asm' -../../avr8\dict/appl_4k.inc(39): Including file '../../common\words/d-dot.asm' -../../avr8\dict/appl_4k.inc(40): Including file '../../common\words/dot.asm' -../../avr8\dict/appl_4k.inc(41): Including file '../../common\words/ud-dot.asm' -../../avr8\dict/appl_4k.inc(42): Including file '../../common\words/ud-dot-r.asm' -../../avr8\dict/appl_4k.inc(43): Including file '../../common\words/ud-slash-mod.asm' -../../avr8\dict/appl_4k.inc(44): Including file '../../common\words/digit-q.asm' -../../avr8\dict/appl_4k.inc(46): Including file '../../avr8\words/do-sliteral.asm' -../../avr8\dict/appl_4k.inc(47): Including file '../../avr8\words/scomma.asm' -../../avr8\dict/appl_4k.inc(48): Including file '../../avr8\words/itype.asm' -../../avr8\dict/appl_4k.inc(49): Including file '../../avr8\words/icount.asm' -../../avr8\dict/appl_4k.inc(50): Including file '../../common\words/type.asm' -../../avr8\dict/appl_4k.inc(51): Including file '../../common\words/tick.asm' -../../avr8\dict/appl_4k.inc(53): Including file '../../common\words/cskip.asm' -../../avr8\dict/appl_4k.inc(54): Including file '../../common\words/cscan.asm' -../../avr8\dict/appl_4k.inc(55): Including file '../../common\words/accept.asm' -../../avr8\dict/appl_4k.inc(56): Including file '../../common\words/refill.asm' -../../avr8\dict/appl_4k.inc(57): Including file '../../common\words/char.asm' -../../avr8\dict/appl_4k.inc(58): Including file '../../common\words/number.asm' -../../avr8\dict/appl_4k.inc(59): Including file '../../common\words/q-sign.asm' -../../avr8\dict/appl_4k.inc(60): Including file '../../common\words/set-base.asm' -../../avr8\dict/appl_4k.inc(61): Including file '../../common\words/to-number.asm' -../../avr8\dict/appl_4k.inc(62): Including file '../../common\words/parse.asm' -../../avr8\dict/appl_4k.inc(63): Including file '../../common\words/source.asm' -../../avr8\dict/appl_4k.inc(64): Including file '../../common\words/slash-string.asm' -../../avr8\dict/appl_4k.inc(65): Including file '../../common\words/parse-name.asm' -../../avr8\dict/appl_4k.inc(66): Including file '../../avr8\words/sp0.asm' -../../avr8\dict/appl_4k.inc(67): Including file '../../avr8\words/rp0.asm' -../../avr8\dict/appl_4k.inc(68): Including file '../../common\words/depth.asm' -../../avr8\dict/appl_4k.inc(69): Including file '../../avr8\words/forth-recognizer.asm' -../../avr8\dict/appl_4k.inc(70): Including file '../../common\words/recognize.asm' -../../avr8\dict/appl_4k.inc(71): Including file '../../common\words/interpret.asm' -../../avr8\dict/appl_4k.inc(72): Including file '../../common\words/rec-intnum.asm' -../../avr8\dict/appl_4k.inc(73): Including file '../../common\words/rec-find.asm' -../../avr8\dict/appl_4k.inc(74): Including file '../../common\words/dt-null.asm' -../../avr8\dict/appl_4k.inc(75): Including file '../../common\words/search-wordlist.asm' -../../avr8\dict/appl_4k.inc(76): Including file '../../common\words/traverse-wordlist.asm' -../../avr8\dict/appl_4k.inc(77): Including file '../../common\words/name2string.asm' -../../avr8\dict/appl_4k.inc(78): Including file '../../avr8\words/nfa2cfa.asm' -../../avr8\dict/appl_4k.inc(79): Including file '../../common\words/find-xt.asm' -../../avr8\dict/appl_4k.inc(81): Including file '../../avr8\dict/compiler1.inc' -../../avr8\dict/compiler1.inc(2): Including file '../../avr8\words/newest.asm' -../../avr8\dict/compiler1.inc(3): Including file '../../avr8\words/latest.asm' -../../avr8\dict/compiler1.inc(4): Including file '../../common\words/do-create.asm' -../../avr8\dict/compiler1.inc(5): Including file '../../common\words/backslash.asm' -../../avr8\dict/compiler1.inc(6): Including file '../../common\words/l-paren.asm' -../../avr8\dict/compiler1.inc(8): Including file '../../common\words/compile.asm' -../../avr8\dict/compiler1.inc(9): Including file '../../avr8\words/comma.asm' -../../avr8\dict/compiler1.inc(10): Including file '../../common\words/brackettick.asm' -../../avr8\dict/compiler1.inc(13): Including file '../../common\words/literal.asm' -../../avr8\dict/compiler1.inc(14): Including file '../../common\words/sliteral.asm' -../../avr8\dict/compiler1.inc(15): Including file '../../avr8\words/g-mark.asm' -../../avr8\dict/compiler1.inc(16): Including file '../../avr8\words/g-resolve.asm' -../../avr8\dict/compiler1.inc(17): Including file '../../avr8\words/l_mark.asm' -../../avr8\dict/compiler1.inc(18): Including file '../../avr8\words/l_resolve.asm' -../../avr8\dict/compiler1.inc(20): Including file '../../common\words/ahead.asm' -../../avr8\dict/compiler1.inc(21): Including file '../../common\words/if.asm' -../../avr8\dict/compiler1.inc(22): Including file '../../common\words/else.asm' -../../avr8\dict/compiler1.inc(23): Including file '../../common\words/then.asm' -../../avr8\dict/compiler1.inc(24): Including file '../../common\words/begin.asm' -../../avr8\dict/compiler1.inc(25): Including file '../../common\words/while.asm' -../../avr8\dict/compiler1.inc(26): Including file '../../common\words/repeat.asm' -../../avr8\dict/compiler1.inc(27): Including file '../../common\words/until.asm' -../../avr8\dict/compiler1.inc(28): Including file '../../common\words/again.asm' -../../avr8\dict/compiler1.inc(29): Including file '../../common\words/do.asm' -../../avr8\dict/compiler1.inc(30): Including file '../../common\words/loop.asm' -../../avr8\dict/compiler1.inc(31): Including file '../../common\words/plusloop.asm' -../../avr8\dict/compiler1.inc(32): Including file '../../common\words/leave.asm' -../../avr8\dict/compiler1.inc(33): Including file '../../common\words/qdo.asm' -../../avr8\dict/compiler1.inc(34): Including file '../../common\words/endloop.asm' -../../avr8\dict/compiler1.inc(36): Including file '../../common\words/l-from.asm' -../../avr8\dict/compiler1.inc(37): Including file '../../common\words/to-l.asm' -../../avr8\dict/compiler1.inc(38): Including file '../../avr8\words/lp0.asm' -../../avr8\dict/compiler1.inc(39): Including file '../../avr8\words/lp.asm' -../../avr8\dict/compiler1.inc(41): Including file '../../common\words/create.asm' -../../avr8\dict/compiler1.inc(42): Including file '../../avr8\words/header.asm' -../../avr8\dict/compiler1.inc(43): Including file '../../avr8\words/wlscope.asm' -../../avr8\dict/compiler1.inc(44): Including file '../../common\words/reveal.asm' -../../avr8\dict/compiler1.inc(45): Including file '../../avr8\words/does.asm' -../../avr8\dict/compiler1.inc(46): Including file '../../common\words/colon.asm' -../../avr8\dict/compiler1.inc(47): Including file '../../avr8\words/colon-noname.asm' -../../avr8\dict/compiler1.inc(48): Including file '../../common\words/semicolon.asm' -../../avr8\dict/compiler1.inc(49): Including file '../../common\words/right-bracket.asm' -../../avr8\dict/compiler1.inc(50): Including file '../../common\words/left-bracket.asm' -../../avr8\dict/compiler1.inc(51): Including file '../../common\words/variable.asm' -../../avr8\dict/compiler1.inc(52): Including file '../../common\words/constant.asm' -../../avr8\dict/compiler1.inc(53): Including file '../../avr8\words/user.asm' -../../avr8\dict/compiler1.inc(55): Including file '../../common\words/recurse.asm' -../../avr8\dict/compiler1.inc(56): Including file '../../avr8\words/immediate.asm' -../../avr8\dict/compiler1.inc(58): Including file '../../common\words/bracketchar.asm' -../../avr8\dict/compiler1.inc(59): Including file '../../common\words/abort-string.asm' -../../avr8\dict/compiler1.inc(60): Including file '../../common\words/abort.asm' -../../avr8\dict/compiler1.inc(61): Including file '../../common\words/q-abort.asm' -../../avr8\dict/compiler1.inc(63): Including file '../../common\words/get-stack.asm' -../../avr8\dict/compiler1.inc(64): Including file '../../common\words/set-stack.asm' -../../avr8\dict/compiler1.inc(65): Including file '../../common\words/map-stack.asm' -../../avr8\dict/compiler1.inc(66): Including file '../../avr8\words/get-current.asm' -../../avr8\dict/compiler1.inc(67): Including file '../../common\words/get-order.asm' -../../avr8\dict/compiler1.inc(68): Including file '../../common\words/cfg-order.asm' -../../avr8\dict/compiler1.inc(69): Including file '../../avr8\words/compare.asm' -../../avr8\dict/compiler1.inc(70): Including file '../../avr8\words/nfa2lfa.asm' -../../avr8\amforth.asm(15): Including file 'dict_appl.inc' -dict_appl.inc(3): Including file '../../common\words/dot-s.asm' -dict_appl.inc(4): Including file '../../avr8\words/spirw.asm' -dict_appl.inc(5): Including file '../../avr8\words/n-spi.asm' -dict_appl.inc(6): Including file 'words/applturnkey.asm' -dict_appl.inc(7): Including file '../../avr8\dict/compiler2.inc' -../../avr8\dict/compiler2.inc(8): Including file '../../avr8\words/set-current.asm' -../../avr8\dict/compiler2.inc(9): Including file '../../avr8\words/wordlist.asm' -../../avr8\dict/compiler2.inc(11): Including file '../../avr8\words/forth-wordlist.asm' -../../avr8\dict/compiler2.inc(12): Including file '../../common\words/set-order.asm' -../../avr8\dict/compiler2.inc(13): Including file '../../common\words/set-recognizer.asm' -../../avr8\dict/compiler2.inc(14): Including file '../../common\words/get-recognizer.asm' -../../avr8\dict/compiler2.inc(15): Including file '../../avr8\words/code.asm' -../../avr8\dict/compiler2.inc(16): Including file '../../avr8\words/end-code.asm' -../../avr8\dict/compiler2.inc(17): Including file '../../avr8\words/marker.asm' -../../avr8\dict/compiler2.inc(18): Including file '../../common\words/postpone.asm' -dict_appl.inc(8): Including file '../../avr8\words/2r_fetch.asm' -../../avr8\amforth.asm(23): Including file '../../avr8\amforth-interpreter.asm' -../../avr8\amforth.asm(24): Including file '../../avr8\dict/nrww.inc' -../../avr8\dict/nrww.inc(4): Including file '../../avr8\words/exit.asm' -../../avr8\dict/nrww.inc(5): Including file '../../avr8\words/execute.asm' -../../avr8\dict/nrww.inc(6): Including file '../../avr8\words/dobranch.asm' -../../avr8\dict/nrww.inc(7): Including file '../../avr8\words/docondbranch.asm' -../../avr8\dict/nrww.inc(10): Including file '../../avr8\words/doliteral.asm' -../../avr8\dict/nrww.inc(11): Including file '../../avr8\words/dovariable.asm' -../../avr8\dict/nrww.inc(12): Including file '../../avr8\words/doconstant.asm' -../../avr8\dict/nrww.inc(13): Including file '../../avr8\words/douser.asm' -../../avr8\dict/nrww.inc(14): Including file '../../avr8\words/do-value.asm' -../../avr8\dict/nrww.inc(15): Including file '../../avr8\words/fetch.asm' -../../avr8\dict/nrww.inc(16): Including file '../../avr8\words/store.asm' -../../avr8\dict/nrww.inc(17): Including file '../../avr8\words/cstore.asm' -../../avr8\dict/nrww.inc(18): Including file '../../avr8\words/cfetch.asm' -../../avr8\dict/nrww.inc(19): Including file '../../avr8\words/fetch-u.asm' -../../avr8\dict/nrww.inc(20): Including file '../../avr8\words/store-u.asm' -../../avr8\dict/nrww.inc(23): Including file '../../avr8\words/dup.asm' -../../avr8\dict/nrww.inc(24): Including file '../../avr8\words/qdup.asm' -../../avr8\dict/nrww.inc(25): Including file '../../avr8\words/swap.asm' -../../avr8\dict/nrww.inc(26): Including file '../../avr8\words/over.asm' -../../avr8\dict/nrww.inc(27): Including file '../../avr8\words/drop.asm' -../../avr8\dict/nrww.inc(28): Including file '../../avr8\words/rot.asm' -../../avr8\dict/nrww.inc(29): Including file '../../avr8\words/nip.asm' -../../avr8\dict/nrww.inc(31): Including file '../../avr8\words/r_from.asm' -../../avr8\dict/nrww.inc(32): Including file '../../avr8\words/to_r.asm' -../../avr8\dict/nrww.inc(33): Including file '../../avr8\words/r_fetch.asm' -../../avr8\dict/nrww.inc(36): Including file '../../common\words/not-equal.asm' -../../avr8\dict/nrww.inc(37): Including file '../../avr8\words/equalzero.asm' -../../avr8\dict/nrww.inc(38): Including file '../../avr8\words/lesszero.asm' -../../avr8\dict/nrww.inc(39): Including file '../../avr8\words/greaterzero.asm' -../../avr8\dict/nrww.inc(40): Including file '../../avr8\words/d-greaterzero.asm' -../../avr8\dict/nrww.inc(41): Including file '../../avr8\words/d-lesszero.asm' -../../avr8\dict/nrww.inc(43): Including file '../../avr8\words/true.asm' -../../avr8\dict/nrww.inc(44): Including file '../../avr8\words/zero.asm' -../../avr8\dict/nrww.inc(45): Including file '../../avr8\words/uless.asm' -../../avr8\dict/nrww.inc(46): Including file '../../common\words/u-greater.asm' -../../avr8\dict/nrww.inc(47): Including file '../../avr8\words/less.asm' -../../avr8\dict/nrww.inc(48): Including file '../../avr8\words/greater.asm' -../../avr8\dict/nrww.inc(50): Including file '../../avr8\words/log2.asm' -../../avr8\dict/nrww.inc(51): Including file '../../avr8\words/minus.asm' -../../avr8\dict/nrww.inc(52): Including file '../../avr8\words/plus.asm' -../../avr8\dict/nrww.inc(53): Including file '../../avr8\words/mstar.asm' -../../avr8\dict/nrww.inc(54): Including file '../../avr8\words/umslashmod.asm' -../../avr8\dict/nrww.inc(55): Including file '../../avr8\words/umstar.asm' -../../avr8\dict/nrww.inc(57): Including file '../../avr8\words/invert.asm' -../../avr8\dict/nrww.inc(58): Including file '../../avr8\words/2slash.asm' -../../avr8\dict/nrww.inc(59): Including file '../../avr8\words/2star.asm' -../../avr8\dict/nrww.inc(60): Including file '../../avr8\words/and.asm' -../../avr8\dict/nrww.inc(61): Including file '../../avr8\words/or.asm' -../../avr8\dict/nrww.inc(62): Including file '../../avr8\words/xor.asm' -../../avr8\dict/nrww.inc(64): Including file '../../avr8\words/1plus.asm' -../../avr8\dict/nrww.inc(65): Including file '../../avr8\words/1minus.asm' -../../avr8\dict/nrww.inc(66): Including file '../../common\words/q-negate.asm' -../../avr8\dict/nrww.inc(67): Including file '../../avr8\words/lshift.asm' -../../avr8\dict/nrww.inc(68): Including file '../../avr8\words/rshift.asm' -../../avr8\dict/nrww.inc(69): Including file '../../avr8\words/plusstore.asm' -../../avr8\dict/nrww.inc(71): Including file '../../avr8\words/rpfetch.asm' -../../avr8\dict/nrww.inc(72): Including file '../../avr8\words/rpstore.asm' -../../avr8\dict/nrww.inc(73): Including file '../../avr8\words/spfetch.asm' -../../avr8\dict/nrww.inc(74): Including file '../../avr8\words/spstore.asm' -../../avr8\dict/nrww.inc(76): Including file '../../avr8\words/dodo.asm' -../../avr8\dict/nrww.inc(77): Including file '../../avr8\words/i.asm' -../../avr8\dict/nrww.inc(78): Including file '../../avr8\words/doplusloop.asm' -../../avr8\dict/nrww.inc(79): Including file '../../avr8\words/doloop.asm' -../../avr8\dict/nrww.inc(80): Including file '../../avr8\words/unloop.asm' -../../avr8\dict/nrww.inc(84): Including file '../../avr8\words/cmove_g.asm' -../../avr8\dict/nrww.inc(85): Including file '../../avr8\words/byteswap.asm' -../../avr8\dict/nrww.inc(86): Including file '../../avr8\words/up.asm' -../../avr8\dict/nrww.inc(87): Including file '../../avr8\words/1ms.asm' -../../avr8\dict/nrww.inc(88): Including file '../../avr8\words/2to_r.asm' -../../avr8\dict/nrww.inc(89): Including file '../../avr8\words/2r_from.asm' -../../avr8\dict/nrww.inc(91): Including file '../../avr8\words/store-e.asm' -../../avr8\dict/nrww.inc(92): Including file '../../avr8\words/fetch-e.asm' -../../avr8\dict/nrww.inc(93): Including file '../../avr8\words/store-i.asm' -../../avr8\dict/nrww.inc(97): Including file '../../avr8\words/store-i_nrww.asm' -../../avr8\dict/nrww.inc(99): Including file '../../avr8\words/fetch-i.asm' -../../avr8\dict/nrww.inc(104): Including file '../../avr8\dict/core_4k.inc' -../../avr8\dict/core_4k.inc(3): Including file '../../avr8\words/n_to_r.asm' -../../avr8\dict/core_4k.inc(4): Including file '../../avr8\words/n_r_from.asm' -../../avr8\dict/core_4k.inc(5): Including file '../../avr8\words/d-2star.asm' -../../avr8\dict/core_4k.inc(6): Including file '../../avr8\words/d-2slash.asm' -../../avr8\dict/core_4k.inc(7): Including file '../../avr8\words/d-plus.asm' -../../avr8\dict/core_4k.inc(8): Including file '../../avr8\words/d-minus.asm' -../../avr8\dict/core_4k.inc(9): Including file '../../avr8\words/d-invert.asm' -../../avr8\dict/core_4k.inc(10): Including file '../../avr8\words/slashmod.asm' -../../avr8\dict/core_4k.inc(11): Including file '../../common\words/abs.asm' -../../avr8\dict/core_4k.inc(12): Including file '../../common\words/pick.asm' -../../avr8\dict/core_4k.inc(13): Including file '../../avr8\words/cellplus.asm' -../../avr8\dict/core_4k.inc(14): Including file '../../avr8\dict/interrupt.inc' -../../avr8\dict/interrupt.inc(8): Including file '../../avr8\words/int-on.asm' -../../avr8\dict/interrupt.inc(9): Including file '../../avr8\words/int-off.asm' -../../avr8\dict/interrupt.inc(10): Including file '../../avr8\words/int-store.asm' -../../avr8\dict/interrupt.inc(11): Including file '../../avr8\words/int-fetch.asm' -../../avr8\dict/interrupt.inc(12): Including file '../../avr8\words/int-trap.asm' -../../avr8\dict/interrupt.inc(14): Including file '../../avr8\words/isr-exec.asm' -../../avr8\dict/interrupt.inc(15): Including file '../../avr8\words/isr-end.asm' -../../avr8\dict/core_4k.inc(17): Including file '../../common\words/prompt-ok.asm' -../../avr8\dict/core_4k.inc(18): Including file '../../common\words/prompt-ready.asm' -../../avr8\dict/core_4k.inc(19): Including file '../../common\words/prompt-error.asm' -../../avr8\dict/core_4k.inc(21): Including file '../../common\words/quit.asm' -../../avr8\dict/core_4k.inc(22): Including file '../../avr8\words/pause.asm' -../../avr8\dict/core_4k.inc(23): Including file '../../avr8\words/cold.asm' -../../avr8\dict/core_4k.inc(24): Including file '../../common\words/warm.asm' -../../avr8\dict/core_4k.inc(26): Including file '../../common\words/handler.asm' -../../avr8\dict/core_4k.inc(27): Including file '../../common\words/catch.asm' -../../avr8\dict/core_4k.inc(28): Including file '../../common\words/throw.asm' -../../avr8\dict/core_4k.inc(31): Including file '../../avr8\words/edefer-fetch.asm' -../../avr8\dict/core_4k.inc(32): Including file '../../avr8\words/edefer-store.asm' -../../avr8\dict/core_4k.inc(33): Including file '../../common\words/rdefer-fetch.asm' -../../avr8\dict/core_4k.inc(34): Including file '../../common\words/rdefer-store.asm' -../../avr8\dict/core_4k.inc(35): Including file '../../common\words/udefer-fetch.asm' -../../avr8\dict/core_4k.inc(36): Including file '../../common\words/udefer-store.asm' -../../avr8\dict/core_4k.inc(37): Including file '../../common\words/defer-store.asm' -../../avr8\dict/core_4k.inc(38): Including file '../../common\words/defer-fetch.asm' -../../avr8\dict/core_4k.inc(39): Including file '../../avr8\words/do-defer.asm' -../../avr8\dict/core_4k.inc(41): Including file '../../common\words/u-dot.asm' -../../avr8\dict/core_4k.inc(42): Including file '../../common\words/u-dot-r.asm' -../../avr8\dict/core_4k.inc(45): Including file '../../avr8\words/uslashmod.asm' -../../avr8\dict/core_4k.inc(46): Including file '../../avr8\words/negate.asm' -../../avr8\dict/core_4k.inc(47): Including file '../../common\words/slash.asm' -../../avr8\dict/core_4k.inc(48): Including file '../../common\words/mod.asm' -../../avr8\dict/core_4k.inc(50): Including file '../../common\words/min.asm' -../../avr8\dict/core_4k.inc(51): Including file '../../common\words/max.asm' -../../avr8\dict/core_4k.inc(52): Including file '../../common\words/within.asm' -../../avr8\dict/core_4k.inc(54): Including file '../../common\words/show-wordlist.asm' -../../avr8\dict/core_4k.inc(55): Including file '../../common\words/words.asm' -../../avr8\dict/core_4k.inc(57): Including file '../../common\words/dot-quote.asm' -../../avr8\dict/core_4k.inc(58): Including file '../../common\words/squote.asm' -../../avr8\dict/core_4k.inc(59): Including file '../../avr8\words/fill.asm' -../../avr8\dict/core_4k.inc(61): Including file '../../common\words/f_cpu.asm' -../../avr8\dict/core_4k.inc(62): Including file '../../avr8\words/state.asm' -../../avr8\dict/core_4k.inc(63): Including file '../../common\words/base.asm' -../../avr8\dict/core_4k.inc(65): Including file '../../avr8\words/cells.asm' -../../avr8\dict/core_4k.inc(67): Including file '../../common\words/2dup.asm' -../../avr8\dict/core_4k.inc(68): Including file '../../common\words/2drop.asm' -../../avr8\dict/core_4k.inc(69): Including file '../../common\words/tuck.asm' -../../avr8\dict/core_4k.inc(71): Including file '../../common\words/to-in.asm' -../../avr8\dict/core_4k.inc(72): Including file '../../common\words/pad.asm' -../../avr8\dict/core_4k.inc(73): Including file '../../common\words/emit.asm' -../../avr8\dict/core_4k.inc(74): Including file '../../common\words/emitq.asm' -../../avr8\dict/core_4k.inc(75): Including file '../../common\words/key.asm' -../../avr8\dict/core_4k.inc(76): Including file '../../common\words/keyq.asm' -../../avr8\dict/core_4k.inc(78): Including file '../../avr8\words/dp.asm' -../../avr8\dict/core_4k.inc(79): Including file '../../avr8\words/ehere.asm' -../../avr8\dict/core_4k.inc(80): Including file '../../avr8\words/here.asm' -../../avr8\dict/core_4k.inc(81): Including file '../../avr8\words/allot.asm' -../../avr8\dict/core_4k.inc(83): Including file '../../common\words/bin.asm' -../../avr8\dict/core_4k.inc(84): Including file '../../common\words/decimal.asm' -../../avr8\dict/core_4k.inc(85): Including file '../../common\words/hex.asm' -../../avr8\dict/core_4k.inc(86): Including file '../../common\words/bl.asm' -../../avr8\dict/core_4k.inc(88): Including file '../../avr8\words/turnkey.asm' -../../avr8\dict/core_4k.inc(89): Including file '../../common\words/to-upper.asm' -../../avr8\dict/core_4k.inc(90): Including file '../../common\words/to-lower.asm' -../../avr8\dict/core_4k.inc(92): Including file '../../common\words/q-stack.asm' -../../avr8\dict/core_4k.inc(93): Including file '../../common\words/bounds.asm' -../../avr8\dict/core_4k.inc(94): Including file '../../common\words/cr.asm' -../../avr8\dict/core_4k.inc(95): Including file '../../common\words/space.asm' -../../avr8\dict/core_4k.inc(96): Including file '../../common\words/spaces.asm' -../../avr8\dict/core_4k.inc(97): Including file '../../common\words/s-to-d.asm' -../../avr8\dict/core_4k.inc(98): Including file '../../avr8\words/to-body.asm' -../../avr8\dict/nrww.inc(112): Including file '../../common\words/2literal.asm' -../../avr8\dict/nrww.inc(113): Including file '../../avr8\words/equal.asm' -../../avr8\dict/nrww.inc(114): Including file '../../common\words/num-constants.asm' -../../avr8\amforth.asm(25): Including file 'dict_appl_core.inc' -../../avr8\amforth.asm(36): Including file '../../avr8\amforth-eeprom.inc' - - - ; file see ../template/template.asm. You may want to - ; copy that file to this one and edit it afterwards. - - .include "preamble.inc" - - .include "macros.asm" - - .set DICT_COMPILER2 = 0 ; - .set cpu_msp430 = 0 - .set cpu_avr8 = 1 - - .include "user.inc" - - ; - - ; used by the multitasker - .set USER_STATE = 0 - .set USER_FOLLOWER = 2 - - ; stackpointer, used by mulitasker - .set USER_RP = 4 - .set USER_SP0 = 6 - .set USER_SP = 8 - - ; excpection handling - .set USER_HANDLER = 10 - - ; numeric IO - .set USER_BASE = 12 - - ; character IO - .set USER_EMIT = 14 - .set USER_EMITQ = 16 - .set USER_KEY = 18 - .set USER_KEYQ = 20 - - .set USER_SOURCE = 22 - .set USER_TO_IN = 24 - .set USER_REFILL = 26 - - .set USER_P_OK = 28 - .set USER_P_ERR = 30 - .set USER_P_RDY = 32 - - .set SYSUSERSIZE = 34 - ; - - .def zerol = r2 - .def zeroh = r3 - .def upl = r4 - .def uph = r5 - - .def al = r6 - .def ah = r7 - .def bl = r8 - .def bh = r9 - - ; internal - .def mcu_boot = r10 - .def isrflag = r11 - - .def temp4 = r14 - .def temp5 = r15 - - .def temp0 = r16 - .def temp1 = r17 - .def temp2 = r18 - .def temp3 = r19 - - .def temp6 = r20 - .def temp7 = r21 - - .def tosl = r24 - .def tosh = r25 - - .def wl = r22 - .def wh = r23 - - .macro loadtos - ld tosl, Y+ - ld tosh, Y+ - .endmacro - - .macro savetos - st -Y, tosh - st -Y, tosl - .endmacro - - .macro in_ - .if (@1 < $40) - in @0,@1 - .else - lds @0,@1 - .endif - .endmacro - - .macro out_ - .if (@0 < $40) - out @0,@1 - .else - sts @0,@1 - .endif - .endmacro - - .macro sbi_ - .if (@0 < $40) - sbi @0,@1 - .else - in_ @2,@0 - ori @2,exp2(@1) - out_ @0,@2 - .endif - .endmacro - - .macro cbi_ - .if (@0 < $40) - cbi @0,@1 - .else - in_ @2,@0 - andi @2,~(exp2(@1)) - out_ @0,@2 - .endif - .endmacro - - .macro jmp_ - ; a more flexible macro - .ifdef @0 - .if (@0-pc > 2040) || (pc-@0>2040) - jmp @0 - .else - rjmp @0 - .endif - .else - jmp @0 - .endif - .endmacro - .macro call_ - ; a more flexible macro - .ifdef @0 - .if (@0-pc > 2040) || (pc-@0>2040) - call @0 - .else - rcall @0 - .endif - .else - call @0 - .endif - .endmacro - - ; F_CPU - ; µsec 16000000 14745600 8000000 1000000 - ; 1 16 14,74 8 1 - ; 10 160 147,45 80 10 - ; 100 1600 1474,56 800 100 - ; 1000 16000 14745,6 8000 1000 - ; - ; cycles = µsec * f_cpu / 1e6 - ; n_loops=cycles/5 - ; - ; cycles already used will be subtracted from the delay - ; the waittime resolution is 1 cycle (delay from exact to +1 cycle) - ; the maximum delay at 20MHz (50ns/clock) is 38350ns - ; waitcount register must specify an immediate register - ; - ; busy waits a specfied amount of microseconds - .macro delay - .set cycles = ( ( @0 * F_CPU ) / 1000000 ) - .if (cycles > ( 256 * 255 * 4 + 2)) - .error "MACRO delay - too many cycles to burn" - .else - .if (cycles > 6) - .set loop_cycles = (cycles / 4) - ldi zl,low(loop_cycles) - ldi zh,high(loop_cycles) - sbiw Z, 1 - brne pc-1 - .set cycles = (cycles - (loop_cycles * 4)) - .endif - .if (cycles > 0) - .if (cycles & 4) - rjmp pc+1 - rjmp pc+1 - .endif - .if (cycles & 2) - rjmp pc+1 - .endif - .if (cycles & 1) - nop - .endif - .endif - .endif - .endmacro - - ; portability macros, they come from the msp430 branches - - .macro DEST - .dw @0 - .endm - - ; controller specific file selected via include - ; directory definition when calling the assembler (-I) - .include "device.asm" - - ; generated automatically, do not edit - - .list - - .equ ramstart = 256 - .equ CELLSIZE = 2 - .macro readflashcell - lsl zl - rol zh - lpm @0, Z+ - lpm @1, Z+ - .endmacro - .macro writeflashcell - lsl zl - rol zh - .endmacro - .set WANT_USART0 = 0 - .set WANT_TWI = 0 - .set WANT_TIMER_COUNTER_1 = 0 - .set WANT_TIMER_COUNTER_2 = 0 - .set WANT_AD_CONVERTER = 0 - .set WANT_ANALOG_COMPARATOR = 0 - .set WANT_PORTB = 0 - .set WANT_PORTC = 0 - .set WANT_PORTD = 0 - .set WANT_TIMER_COUNTER_0 = 0 - .set WANT_EXTERNAL_INTERRUPT = 0 - .set WANT_SPI = 0 - .set WANT_WATCHDOG = 0 - .set WANT_CPU = 0 - .set WANT_EEPROM = 0 - .equ intvecsize = 2 ; please verify; flash size: 32768 bytes - .equ pclen = 2 ; please verify - .overlap - .org 2 -000002 d126 rcall isr ; External Interrupt Request 0 - .org 4 -000004 d124 rcall isr ; External Interrupt Request 1 - .org 6 -000006 d122 rcall isr ; Pin Change Interrupt Request 0 - .org 8 -000008 d120 rcall isr ; Pin Change Interrupt Request 0 - .org 10 -00000a d11e rcall isr ; Pin Change Interrupt Request 1 - .org 12 -00000c d11c rcall isr ; Watchdog Time-out Interrupt - .org 14 -00000e d11a rcall isr ; Timer/Counter2 Compare Match A - .org 16 -000010 d118 rcall isr ; Timer/Counter2 Compare Match A - .org 18 -000012 d116 rcall isr ; Timer/Counter2 Overflow - .org 20 -000014 d114 rcall isr ; Timer/Counter1 Capture Event - .org 22 -000016 d112 rcall isr ; Timer/Counter1 Compare Match A - .org 24 -000018 d110 rcall isr ; Timer/Counter1 Compare Match B - .org 26 -00001a d10e rcall isr ; Timer/Counter1 Overflow - .org 28 -00001c d10c rcall isr ; TimerCounter0 Compare Match A - .org 30 -00001e d10a rcall isr ; TimerCounter0 Compare Match B - .org 32 -000020 d108 rcall isr ; Timer/Couner0 Overflow - .org 34 -000022 d106 rcall isr ; SPI Serial Transfer Complete - .org 36 -000024 d104 rcall isr ; USART Rx Complete - .org 38 -000026 d102 rcall isr ; USART, Data Register Empty - .org 40 -000028 d100 rcall isr ; USART Tx Complete - .org 42 -00002a d0fe rcall isr ; ADC Conversion Complete - .org 44 -00002c d0fc rcall isr ; EEPROM Ready - .org 46 -00002e d0fa rcall isr ; Analog Comparator - .org 48 -000030 d0f8 rcall isr ; Two-wire Serial Interface - .org 50 -000032 d0f6 rcall isr ; Store Program Memory Read - .equ INTVECTORS = 26 - .nooverlap - - ; compatability layer (maybe empty) - .equ SPMEN = SELFPRGEN - - ; controller data area, environment query mcu-info - mcu_info: - mcu_ramsize: -000033 0800 .dw 2048 - mcu_eepromsize: -000034 0400 .dw 1024 - mcu_maxdp: -000035 7000 .dw 28672 - mcu_numints: -000036 001a .dw 26 - mcu_name: -000037 000a .dw 10 -000038 5441 -000039 656d -00003a 6167 -00003b 3233 -00003c 5038 .db "ATmega328P" - .set codestart=pc - - ; some defaults, change them in your application master file - ; see template.asm for an example - - ; enabling Interrupts, disabling them affects - ; other settings as well. - .set WANT_INTERRUPTS = 1 - - ; count the number of interrupts individually. - ; requires a lot of RAM (one byte per interrupt) - ; disabled by default. - .set WANT_INTERRUPT_COUNTERS = 0 - - ; receiving is asynchronously, so an interrupt queue is useful. - .set WANT_ISR_RX = 1 - - ; case insensitve dictionary lookup. - .set WANT_IGNORECASE = 0 - - ; map all memories to one address space. Details in the - ; technical guide - .set WANT_UNIFIED = 0 - - ; terminal input buffer - .set TIB_SIZE = 90 ; ANS94 needs at least 80 characters per line - - ; USER variables *in addition* to system ones - .set APPUSERSIZE = 10 ; size of application specific user area in bytes - - ; addresses of various data segments - .set rstackstart = RAMEND ; start address of return stack, grows downward - .set stackstart = RAMEND - 80 ; start address of data stack, grows downward - ; change only if you know what to you do - .set NUMWORDLISTS = 8 ; number of word lists in the searh order, at least 8 - .set NUMRECOGNIZERS = 4 ; total number of recognizers, two are always used. - - ; 10 per mille (1 per cent) is ok. - .set BAUD = 38400 - .set BAUD_MAXERROR = 10 - - ; Dictionary setup - .set VE_HEAD = $0000 - .set VE_ENVHEAD = $0000 - - .set AMFORTH_RO_SEG = NRWW_START_ADDR+1 - - ; cpu clock in hertz - .equ F_CPU = 16000000 - .set BAUD_MAXERROR = 30 - .equ TIMER_INT = OVF2addr - - .include "drivers/usart_0.asm" - - .equ BAUDRATE_HIGH = UBRR0H - .equ USART_C = UCSR0C - .equ USART_B = UCSR0B - .equ USART_A = UCSR0A - .equ USART_DATA = UDR0 - .ifndef URXCaddr - .endif - - .equ bm_USART_RXRD = 1 << RXC0 - .equ bm_USART_TXRD = 1 << UDRE0 - .equ bm_ENABLE_TX = 1 << TXEN0 - .equ bm_ENABLE_RX = 1 << RXEN0 - .equ bm_ENABLE_INT_RX = 1<rx-buf",0 -000042 0000 .dw VE_HEAD - .set VE_HEAD = VE_TO_RXBUF - XT_TO_RXBUF: -000043 0044 .dw PFA_rx_tobuf - PFA_rx_tobuf: -000044 2f08 mov temp0, tosl -000045 9110 0110 lds temp1, usart_rx_in -000047 e0e0 ldi zl, low(usart_rx_data) -000048 e0f1 ldi zh, high(usart_rx_data) -000049 0fe1 add zl, temp1 -00004a 1df3 adc zh, zeroh -00004b 8300 st Z, temp0 -00004c 9513 inc temp1 -00004d 701f andi temp1,usart_rx_mask -00004e 9310 0110 sts usart_rx_in, temp1 -000050 9189 -000051 9199 loadtos -000052 940c 3805 jmp_ DO_NEXT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ; setup with - ; ' isr-rx URXCaddr int! - VE_ISR_RX: -000054 ff06 .dw $ff06 -000055 7369 -000056 2d72 -000057 7872 .db "isr-rx" -000058 003d .dw VE_HEAD - .set VE_HEAD = VE_ISR_RX - XT_ISR_RX: -000059 3801 .dw DO_COLON - usart_rx_isr: -00005a 383d .dw XT_DOLITERAL -00005b 00c6 .dw usart_data -00005c 3898 .dw XT_CFETCH -00005d 38b1 .dw XT_DUP -00005e 383d .dw XT_DOLITERAL -00005f 0003 .dw 3 -000060 3fdf .dw XT_EQUAL -000061 3836 .dw XT_DOCONDBRANCH -000062 0064 .dw usart_rx_isr1 -000063 3d38 .dw XT_COLD - usart_rx_isr1: -000064 0043 .dw XT_TO_RXBUF -000065 3820 .dw XT_EXIT - - ; ( -- ) Hardware Access - ; R( --) - ; initialize usart - ;VE_USART_INIT_RXBUFFER: - ; .dw $ff0x - ; .db "+usart-buffer" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_USART_INIT_RXBUFFER - XT_USART_INIT_RX_BUFFER: -000066 3801 .dw DO_COLON - PFA_USART_INIT_RX_BUFFER: ; ( -- ) -000067 383d -000068 0059 .dw XT_DOLITERAL, XT_ISR_RX -000069 383d -00006a 0024 .dw XT_DOLITERAL, URXCaddr -00006b 3ca5 .dw XT_INTSTORE - -00006c 383d .dw XT_DOLITERAL -00006d 0100 .dw usart_rx_data -00006e 383d .dw XT_DOLITERAL -00006f 0016 .dw usart_rx_size + 6 -000070 3954 .dw XT_ZERO -000071 3e98 .dw XT_FILL -000072 3820 .dw XT_EXIT - - ; ( -- c) - ; MCU - ; get 1 character from input queue, wait if needed using interrupt driver - VE_RX_BUFFER: -000073 ff06 .dw $ff06 -000074 7872 -000075 622d -000076 6675 .db "rx-buf" -000077 0054 .dw VE_HEAD - .set VE_HEAD = VE_RX_BUFFER - XT_RX_BUFFER: -000078 3801 .dw DO_COLON - PFA_RX_BUFFER: -000079 0093 .dw XT_RXQ_BUFFER -00007a 3836 .dw XT_DOCONDBRANCH -00007b 0079 .dw PFA_RX_BUFFER -00007c 383d .dw XT_DOLITERAL -00007d 0111 .dw usart_rx_out -00007e 3898 .dw XT_CFETCH -00007f 38b1 .dw XT_DUP -000080 383d .dw XT_DOLITERAL -000081 0100 .dw usart_rx_data -000082 399d .dw XT_PLUS -000083 3898 .dw XT_CFETCH -000084 38c4 .dw XT_SWAP -000085 3a2f .dw XT_1PLUS -000086 383d .dw XT_DOLITERAL -000087 000f .dw usart_rx_mask -000088 3a13 .dw XT_AND -000089 383d .dw XT_DOLITERAL -00008a 0111 .dw usart_rx_out -00008b 388d .dw XT_CSTORE -00008c 3820 .dw XT_EXIT - - ; ( -- f) - ; MCU - ; check if unread characters are in the input queue - VE_RXQ_BUFFER: -00008d ff07 .dw $ff07 -00008e 7872 -00008f 2d3f -000090 7562 -000091 0066 .db "rx?-buf",0 -000092 0073 .dw VE_HEAD - .set VE_HEAD = VE_RXQ_BUFFER - XT_RXQ_BUFFER: -000093 3801 .dw DO_COLON - PFA_RXQ_BUFFER: -000094 3d30 .dw XT_PAUSE -000095 383d .dw XT_DOLITERAL -000096 0111 .dw usart_rx_out -000097 3898 .dw XT_CFETCH -000098 383d .dw XT_DOLITERAL -000099 0110 .dw usart_rx_in -00009a 3898 .dw XT_CFETCH -00009b 3913 .dw XT_NOTEQUAL -00009c 3820 .dw XT_EXIT - ; .include "drivers/timer-usart-isr.asm" - .set XT_RX = XT_RX_BUFFER - .set XT_RXQ = XT_RXQ_BUFFER - .set XT_USART_INIT_RX = XT_USART_INIT_RX_BUFFER - .else - .endif - - .include "words/usart-tx-poll.asm" - - ; MCU - ; check availability and send one character to the terminal using register poll - VE_TX_POLL: -00009d ff07 .dw $ff07 -00009e 7874 -00009f 702d -0000a0 6c6f -0000a1 006c .db "tx-poll",0 -0000a2 008d .dw VE_HEAD - .set VE_HEAD = VE_TX_POLL - XT_TX_POLL: -0000a3 3801 .dw DO_COLON - PFA_TX_POLL: - ; wait for data ready -0000a4 00b1 .dw XT_TXQ_POLL -0000a5 3836 .dw XT_DOCONDBRANCH -0000a6 00a4 .dw PFA_TX_POLL - ; send to usart -0000a7 383d .dw XT_DOLITERAL -0000a8 00c6 .dw USART_DATA -0000a9 388d .dw XT_CSTORE -0000aa 3820 .dw XT_EXIT - - ; ( -- f) MCU - ; MCU - ; check if a character can be send using register poll - VE_TXQ_POLL: -0000ab ff08 .dw $ff08 -0000ac 7874 -0000ad 2d3f -0000ae 6f70 -0000af 6c6c .db "tx?-poll" -0000b0 009d .dw VE_HEAD - .set VE_HEAD = VE_TXQ_POLL - XT_TXQ_POLL: -0000b1 3801 .dw DO_COLON - PFA_TXQ_POLL: -0000b2 3d30 .dw XT_PAUSE -0000b3 383d .dw XT_DOLITERAL -0000b4 00c0 .dw USART_A -0000b5 3898 .dw XT_CFETCH -0000b6 383d .dw XT_DOLITERAL -0000b7 0020 .dw bm_USART_TXRD -0000b8 3a13 .dw XT_AND -0000b9 3820 .dw XT_EXIT - .set XT_TX = XT_TX_POLL - .set XT_TXQ = XT_TXQ_POLL - .set XT_USART_INIT_TX = 0 - - .include "words/ubrr.asm" - - ; MCU - ; returns usart UBRR settings - VE_UBRR: -0000ba ff04 .dw $ff04 -0000bb 6275 -0000bc 7272 .db "ubrr" -0000bd 00ab .dw VE_HEAD - .set VE_HEAD = VE_UBRR - XT_UBRR: -0000be 386f .dw PFA_DOVALUE1 - PFA_UBRR: ; ( -- ) -0000bf 008c .dw EE_UBRRVAL -0000c0 3da0 .dw XT_EDEFERFETCH -0000c1 3daa .dw XT_EDEFERSTORE - .include "words/usart.asm" - - ; MCU - ; initialize usart - VE_USART: -0000c2 ff06 .dw $ff06 -0000c3 752b -0000c4 6173 -0000c5 7472 .db "+usart" -0000c6 00ba .dw VE_HEAD - .set VE_HEAD = VE_USART - XT_USART: -0000c7 3801 .dw DO_COLON - PFA_USART: ; ( -- ) - -0000c8 383d .dw XT_DOLITERAL -0000c9 0098 .dw USART_B_VALUE -0000ca 383d .dw XT_DOLITERAL -0000cb 00c1 .dw USART_B -0000cc 388d .dw XT_CSTORE - -0000cd 383d .dw XT_DOLITERAL -0000ce 0006 .dw USART_C_VALUE -0000cf 383d .dw XT_DOLITERAL -0000d0 00c2 .dw USART_C | bm_USARTC_en -0000d1 388d .dw XT_CSTORE - -0000d2 00be .dw XT_UBRR -0000d3 38b1 .dw XT_DUP -0000d4 3af9 .dw XT_BYTESWAP -0000d5 383d .dw XT_DOLITERAL -0000d6 00c5 .dw BAUDRATE_HIGH -0000d7 388d .dw XT_CSTORE -0000d8 383d .dw XT_DOLITERAL -0000d9 00c4 .dw BAUDRATE_LOW -0000da 388d .dw XT_CSTORE - .if XT_USART_INIT_RX!=0 -0000db 0066 .dw XT_USART_INIT_RX - .endif - .if XT_USART_INIT_TX!=0 - .endif - -0000dc 3820 .dw XT_EXIT - - ; settings for 1wire interface - .equ OW_PORT=PORTB - .EQU OW_BIT=4 - .include "drivers/1wire.asm" - - ; B. J. Rodriguez (MSP 430) - ; Matthias Trute (AVR Atmega) - ; COPYRIGHT - ; (c) 2012 Bradford J. Rodriguez for the 430 code and API - - ; adapted 430 assembly code to AVR - ; wishlist: - ; use a configurable pin at runtime, compatible with bitnames.frt - ; no external pull up, no external power supply for devices - ; ??? - ; - ;.EQU OW_BIT=4 - ;.equ OW_PORT=PORTE - .set OW_DDR=(OW_PORT-1) - .set OW_PIN=(OW_DDR-1) - - ;****f* 1W.RESET - ; NAME - ; 1W.RESET - ; SYNOPSIS - ; 1W.RESET ( -- f ) Initialize 1-wire devices; return true if present - ; DESCRIPTION - ; This configures the port pin used by the 1-wire interface, and then - ; sends an "initialize" sequence to the 1-wire devices. If any device - ; is present, it will be detected. - ; - ; Timing, per DS18B20 data sheet: - ; a) Output "0" (drive output low) for >480 usec. - ; b) Output "1" (let output float). - ; c) After 15 to 60 usec, device will drive pin low for 60 to 240 usec. - ; So, wait 75 usec and sample input. - ; d) Leave output high (floating) for at least 480 usec. - ;****** - ; ( -- f ) - ; Hardware - ; Initialize 1-wire devices; return true if present - VE_OW_RESET: -0000dd ff08 .dw $ff08 -0000de 7731 -0000df 722e -0000e0 7365 -0000e1 7465 .db "1w.reset" -0000e2 00c2 .dw VE_HEAD - .set VE_HEAD = VE_OW_RESET - XT_OW_RESET: -0000e3 00e4 .dw PFA_OW_RESET - PFA_OW_RESET: -0000e4 939a -0000e5 938a savetos - ; setup to output -0000e6 9a24 sbi OW_DDR, OW_BIT - ; Pull output low -0000e7 982c cbi OW_PORT, OW_BIT - ; Delay >480 usec -0000e8 e8e0 -0000e9 e0f7 -0000ea 9731 -0000eb f7f1 DELAY 480 - ; Critical timing period, disable interrupts. -0000ec b71f in temp1, SREG -0000ed 94f8 cli - ; Pull output high -0000ee 9a2c sbi OW_PORT, OW_BIT - ; make pin input, sends "1" -0000ef 9824 cbi OW_DDR, OW_BIT -0000f0 e0e0 -0000f1 e0f1 -0000f2 9731 -0000f3 f7f1 DELAY 64 ; delayB - ; Sample input pin, set TOS if input is zero -0000f4 b183 in tosl, OW_PIN -0000f5 ff84 sbrs tosl, OW_BIT -0000f6 ef9f ser tosh - ; End critical timing period, enable interrupts -0000f7 bf1f out SREG, temp1 - ; release bus -0000f8 9824 cbi OW_DDR, OW_BIT -0000f9 982c cbi OW_PORT, OW_BIT - - ; Delay rest of 480 usec -0000fa e8e0 -0000fb e0f6 -0000fc 9731 -0000fd f7f1 DELAY 416 - ; we now have the result flag in TOS -0000fe 2f89 mov tosl, tosh -0000ff 940c 3805 jmp_ DO_NEXT - - ;****f* 1W.SLOT - ; NAME - ; 1W.SLOT - ; SYNOPSIS - ; 1W.SLOT ( c -- c' ) Write and read one bit to/from 1-wire. - ; DESCRIPTION - ; The "touch byte" function is described in Dallas App Note 74. - ; It outputs a byte to the 1-wire pin, LSB first, and reads back - ; the state of the 1-wire pin after a suitable delay. - ; To read a byte, output $FF and read the reply data. - ; To write a byte, output that byte and discard the reply. - ; - ; This function performs one bit of the "touch" operation -- - ; one read/write "slot" in Dallas jargon. Perform this eight - ; times in a row to get the "touch byte" function. - ; - ; PARAMETERS - ; The input parameter is xxxxxxxxbbbbbbbo where - ; 'xxxxxxxx' are don't cares, - ; 'bbbbbbb' are bits to be shifted down, and - ; 'o' is the bit to be output in the slot. This must be 1 - ; to create a read slot. - ; - ; The returned value is xxxxxxxxibbbbbbb where - ; 'xxxxxxxx' are not known (the input shifted down 1 position), - ; 'i' is the bit read during the slot. This has no meaning - ; if it was a write slot. - ; 'bbbbbbb' are the 7 input bits, shifted down one position. - ; - ; This peculiar parameter usage allows OWTOUCH to be written as - ; OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT - ; - ; NOTES - ; Interrupts are disabled during each bit. - - ; Timing, per DS18B20 data sheet: - ; a) Output "0" for start period. (> 1 us, < 15 us, typ. 6 us*) - ; b) Output data bit (0 or 1), open drain - ; c) After MS from start of cycle, sample input (15 to 60 us, typ. 25 us*) - ; d) After write-0 period from start of cycle, output "1" (>60 us) - ; e) After recovery period, loop or return. (> 1 us) - ; For writes, DS18B20 samples input 15 to 60 usec from start of cycle. - ; * "Typical" values are per App Note 132 for a 300m cable length. - - ; --------- ------------------------------- - ; \ / / - ; ------------------------------- - ; a b c d e - ; | 6us | 19us | 35us | 2us | - ;****** - ; ( c -- c' ) - ; Hardware - ; Write and read one bit to/from 1-wire. - VE_OW_SLOT: -000101 ff07 .dw $ff07 -000102 7731 -000103 732e -000104 6f6c -000105 0074 .db "1w.slot",0 -000106 00dd .dw VE_HEAD - .set VE_HEAD = VE_OW_SLOT - XT_OW_SLOT: -000107 0108 .dw PFA_OW_SLOT - PFA_OW_SLOT: - ; pull low -000108 982c cbi OW_PORT, OW_BIT -000109 9a24 sbi OW_DDR, OW_BIT - ; disable interrupts -00010a b71f in temp1, SREG -00010b 94f8 cli -00010c e1e8 -00010d e0f0 -00010e 9731 -00010f f7f1 DELAY 6 ; DELAY A - ; check bit -000110 9488 clc -000111 9587 ror tosl -000112 f410 brcc PFA_OW_SLOT0 ; a 0 keeps the bus low - ; release bus, a 1 is written -000113 9a2c sbi OW_PORT, OW_BIT -000114 9824 cbi OW_DDR, OW_BIT - PFA_OW_SLOT0: - ; sample the input (no action required if zero) -000115 e2e4 -000116 e0f0 -000117 9731 -000118 f7f1 DELAY 9 ; wait DELAY E to sample -000119 b103 in temp0, OW_PIN -00011a fd04 sbrc temp0, OW_BIT -00011b 6880 ori tosl, $80 - -00011c ecec -00011d e0f0 -00011e 9731 -00011f f7f1 DELAY 51 ; DELAY B -000120 9a2c sbi OW_PORT, OW_BIT ; release bus -000121 9824 cbi OW_DDR, OW_BIT -000122 e0e8 -000123 e0f0 -000124 9731 -000125 f7f1 delay 2 - ; re-enable interrupts -000126 bf1f out SREG, temp1 -000127 940c 3805 jmp_ DO_NEXT - - .include "amforth.asm" - - ;;;; - ;;;; GPL V2 (only) - - .set AMFORTH_NRWW_SIZE=(FLASHEND-AMFORTH_RO_SEG)*2 - - .set corepc = pc - .org $0000 -000000 940c 3d39 jmp_ PFA_COLD - - .org corepc - .include "drivers/generic-isr.asm" - - .eseg -000000 intvec: .byte INTVECTORS * CELLSIZE - .dseg -000112 intcnt: .byte INTVECTORS - .cseg - - ; interrupt routine gets called (again) by rcall! This gives the - ; address of the int-vector on the stack. - isr: -000129 920a st -Y, r0 -00012a b60f in r0, SREG -00012b 920a st -Y, r0 - .if (pclen==3) - .endif -00012c 900f pop r0 -00012d 900f pop r0 ; = intnum * intvectorsize + 1 (address following the rcall) -00012e 940a dec r0 - .if intvecsize == 1 ; - .endif -00012f 2cb0 mov isrflag, r0 -000130 93ff push zh -000131 93ef push zl -000132 e1e2 ldi zl, low(intcnt) -000133 e0f1 ldi zh, high(intcnt) -000134 9406 lsr r0 ; we use byte addresses in the counter array, not words -000135 0de0 add zl, r0 -000136 1df3 adc zh, zeroh -000137 8000 ld r0, Z -000138 9403 inc r0 -000139 8200 st Z, r0 -00013a 91ef pop zl -00013b 91ff pop zh - -00013c 9009 ld r0, Y+ -00013d be0f out SREG, r0 -00013e 9009 ld r0, Y+ -00013f 9508 ret ; returns the interrupt, the rcall stack frame is removed! - ; no reti here, see words/isr-end.asm - ; lower part of the dictionary - .include "dict/rww.inc" - - - ; Arithmetics - ; add a number to a double cell - VE_MPLUS: -000140 ff02 .dw $ff02 -000141 2b6d .db "m+" -000142 0101 .dw VE_HEAD - .set VE_HEAD = VE_MPLUS - XT_MPLUS: -000143 3801 .dw DO_COLON - PFA_MPLUS: -000144 3fc7 .dw XT_S2D -000145 3c15 .dw XT_DPLUS -000146 3820 .dw XT_EXIT - .include "words/ud-star.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDSTAR: -000147 ff03 .dw $ff03 -000148 6475 -../../common\words/ud-star.asm(9): warning: .cseg .db misalignment - padding zero byte -000149 002a .db "ud*" -00014a 0140 .dw VE_HEAD - .set VE_HEAD = VE_UDSTAR - XT_UDSTAR: -00014b 3801 .dw DO_COLON - PFA_UDSTAR: - - .endif - ;Z UD* ud1 d2 -- ud3 32*16->32 multiply - ; XT_DUP >R UM* DROP XT_SWAP R> UM* ROT + ; - -00014c 38b1 -00014d 38ff -00014e 39e0 -00014f 38d9 .DW XT_DUP,XT_TO_R,XT_UMSTAR,XT_DROP -000150 38c4 -000151 38f6 -000152 39e0 -000153 38e1 -000154 399d -000155 3820 .DW XT_SWAP,XT_R_FROM,XT_UMSTAR,XT_ROT,XT_PLUS,XT_EXIT - .include "words/umax.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UMAX: -000156 ff04 .dw $ff04 -000157 6d75 -000158 7861 .db "umax" -000159 0147 .dw VE_HEAD - .set VE_HEAD = VE_UMAX - XT_UMAX: -00015a 3801 .dw DO_COLON - PFA_UMAX: - .endif - -00015b 3ec9 -00015c 395c .DW XT_2DUP,XT_ULESS -00015d 3836 .dw XT_DOCONDBRANCH -00015e 0160 DEST(UMAX1) -00015f 38c4 .DW XT_SWAP -000160 38d9 UMAX1: .DW XT_DROP -000161 3820 .dw XT_EXIT - .include "words/umin.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UMIN: -000162 ff04 .dw $ff04 -000163 6d75 -000164 6e69 .db "umin" -000165 0156 .dw VE_HEAD - .set VE_HEAD = VE_UMIN - XT_UMIN: -000166 3801 .dw DO_COLON - PFA_UMIN: - .endif -000167 3ec9 -000168 3967 .DW XT_2DUP,XT_UGREATER -000169 3836 .dw XT_DOCONDBRANCH -00016a 016c DEST(UMIN1) -00016b 38c4 .DW XT_SWAP -00016c 38d9 UMIN1: .DW XT_DROP -00016d 3820 .dw XT_EXIT - .include "words/immediate-q.asm" - - ; Tools - ; return +1 if immediate, -1 otherwise, flag from name>flags - ;VE_IMMEDIATEQ: - ; .dw $ff06 - ; .db "immediate?" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_IMMEDIATEQ - XT_IMMEDIATEQ: -00016e 3801 .dw DO_COLON - PFA_IMMEDIATEQ: -00016f 383d .dw XT_DOLITERAL -000170 8000 .dw $8000 -000171 3a13 .dw XT_AND -000172 391a .dw XT_ZEROEQUAL -000173 3836 .dw XT_DOCONDBRANCH -000174 0177 DEST(IMMEDIATEQ1) -000175 3fe6 .dw XT_ONE -000176 3820 .dw XT_EXIT - IMMEDIATEQ1: - ; not immediate -000177 394b .dw XT_TRUE -000178 3820 .dw XT_EXIT - .include "words/name2flags.asm" - - ; Tools - ; get the flags from a name token - VE_NAME2FLAGS: -000179 ff0a .dw $ff0a -00017a 616e -00017b 656d -00017c 663e -00017d 616c -00017e 7367 .db "name>flags" -00017f 0162 .dw VE_HEAD - .set VE_HEAD = VE_NAME2FLAGS - XT_NAME2FLAGS: -000180 3801 .dw DO_COLON - PFA_NAME2FLAGS: -000181 3bcb .dw XT_FETCHI ; skip to link field -000182 383d .dw XT_DOLITERAL -000183 ff00 .dw $ff00 -000184 3a13 .dw XT_AND -000185 3820 .dw XT_EXIT - - .if AMFORTH_NRWW_SIZE > 8000 - .elif AMFORTH_NRWW_SIZE > 4000 - .include "dict/appl_4k.inc" - - - ; Tools - ; print the version string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOT_VER: -000186 ff03 .dw $ff03 -000187 6576 -../../common\words/ver.asm(12): warning: .cseg .db misalignment - padding zero byte -000188 0072 .db "ver" -000189 0179 .dw VE_HEAD - .set VE_HEAD = VE_DOT_VER - XT_DOT_VER: -00018a 3801 .dw DO_COLON - PFA_DOT_VER: - .endif -00018b 02da .dw XT_ENV_FORTHNAME -00018c 0403 .dw XT_ITYPE -00018d 3fae .dw XT_SPACE -00018e 3ebd .dw XT_BASE -00018f 3879 .dw XT_FETCH - -000190 02e8 .dw XT_ENV_FORTHVERSION -000191 3f41 .dw XT_DECIMAL -000192 3fc7 .dw XT_S2D -000193 0321 .dw XT_L_SHARP -000194 0329 .dw XT_SHARP -000195 383d .dw XT_DOLITERAL -000196 002e .dw '.' -000197 0312 .dw XT_HOLD -000198 033f .dw XT_SHARP_S -000199 034a .dw XT_SHARP_G -00019a 0439 .dw XT_TYPE -00019b 3ebd .dw XT_BASE -00019c 3881 .dw XT_STORE -00019d 3fae .dw XT_SPACE -00019e 02f0 .dw XT_ENV_CPU -00019f 0403 .dw XT_ITYPE - -0001a0 3820 .dw XT_EXIT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/noop.asm" - - ; Tools - ; do nothing - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NOOP: -0001a1 ff04 .dw $ff04 -0001a2 6f6e -0001a3 706f .db "noop" -0001a4 0186 .dw VE_HEAD - .set VE_HEAD = VE_NOOP - XT_NOOP: -0001a5 3801 .dw DO_COLON - PFA_NOOP: - .endif -0001a6 3820 .DW XT_EXIT - .include "words/unused.asm" - - ; Tools - ; Amount of available RAM (incl. PAD) - VE_UNUSED: -0001a7 ff06 .dw $ff06 -0001a8 6e75 -0001a9 7375 -0001aa 6465 .db "unused" -0001ab 01a1 .dw VE_HEAD - .set VE_HEAD = VE_UNUSED - XT_UNUSED: -0001ac 3801 .dw DO_COLON - PFA_UNUSED: -0001ad 3a8d .dw XT_SP_FETCH -0001ae 3f23 .dw XT_HERE -0001af 3993 .dw XT_MINUS -0001b0 3820 .dw XT_EXIT - .include "words/to.asm" - - ; Tools - ; store the TOS to the named value (eeprom cell) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO: -0001b1 0002 .dw $0002 -0001b2 6f74 .db "to" -0001b3 01a7 .dw VE_HEAD - .set VE_HEAD = VE_TO - XT_TO: -0001b4 3801 .dw DO_COLON - PFA_TO: - .endif -0001b5 0448 .dw XT_TICK -0001b6 3fd0 .dw XT_TO_BODY -0001b7 3eb7 .dw XT_STATE -0001b8 3879 .dw XT_FETCH -0001b9 3836 .dw XT_DOCONDBRANCH -0001ba 01c5 DEST(PFA_TO1) -0001bb 075c .dw XT_COMPILE -0001bc 01bf .dw XT_DOTO -0001bd 0767 .dw XT_COMMA -0001be 3820 .dw XT_EXIT - - ; ( n -- ) (R: IP -- IP+1) - ; Tools - ; runtime portion of to - ;VE_DOTO: - ; .dw $ff04 - ; .db "(to)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOTO - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - XT_DOTO: -0001bf 3801 .dw DO_COLON - PFA_DOTO: - .endif -0001c0 38f6 .dw XT_R_FROM -0001c1 38b1 .dw XT_DUP -0001c2 01d1 .dw XT_ICELLPLUS -0001c3 38ff .dw XT_TO_R -0001c4 3bcb .dw XT_FETCHI - PFA_TO1: -0001c5 38b1 .dw XT_DUP -0001c6 01d1 .dw XT_ICELLPLUS -0001c7 01d1 .dw XT_ICELLPLUS -0001c8 3bcb .dw XT_FETCHI -0001c9 382a .dw XT_EXECUTE -0001ca 3820 .dw XT_EXIT - .include "words/i-cellplus.asm" - - ; Compiler - ; skip to the next cell in flash - VE_ICELLPLUS: -0001cb ff07 .dw $FF07 -0001cc 2d69 -0001cd 6563 -0001ce 6c6c -0001cf 002b .db "i-cell+",0 -0001d0 01b1 .dw VE_HEAD - .set VE_HEAD = VE_ICELLPLUS - XT_ICELLPLUS: -0001d1 3801 .dw DO_COLON - PFA_ICELLPLUS: -0001d2 3a2f .dw XT_1PLUS -0001d3 3820 .dw XT_EXIT - .include "words/icompare.asm" - - ; Tools - ; compares string in RAM with string in flash. f is zero if equal like COMPARE - VE_ICOMPARE: -0001d4 ff08 .dw $ff08 -0001d5 6369 -0001d6 6d6f -0001d7 6170 -0001d8 6572 .db "icompare" -0001d9 01cb .dw VE_HEAD - .set VE_HEAD = VE_ICOMPARE - XT_ICOMPARE: -0001da 3801 .dw DO_COLON - PFA_ICOMPARE: -0001db 38ff .dw XT_TO_R ; ( -- r-addr r-len f-addr) -0001dc 38cf .dw XT_OVER ; ( -- r-addr r-len f-addr r-len) -0001dd 38f6 .dw XT_R_FROM ; ( -- r-addr r-len f-addr r-len f-len ) -0001de 3913 .dw XT_NOTEQUAL ; ( -- r-addr r-len f-addr flag ) -0001df 3836 .dw XT_DOCONDBRANCH -0001e0 01e5 .dw PFA_ICOMPARE_SAMELEN -0001e1 3ed2 .dw XT_2DROP -0001e2 38d9 .dw XT_DROP -0001e3 394b .dw XT_TRUE -0001e4 3820 .dw XT_EXIT - PFA_ICOMPARE_SAMELEN: -0001e5 38c4 .dw XT_SWAP ; ( -- r-addr f-addr len ) -0001e6 3954 .dw XT_ZERO -0001e7 0826 .dw XT_QDOCHECK -0001e8 3836 .dw XT_DOCONDBRANCH -0001e9 0208 .dw PFA_ICOMPARE_DONE -0001ea 3a9b .dw XT_DODO - PFA_ICOMPARE_LOOP: - ; ( r-addr f-addr --) -0001eb 38cf .dw XT_OVER -0001ec 3879 .dw XT_FETCH - .if WANT_IGNORECASE == 1 - .endif -0001ed 38cf .dw XT_OVER -0001ee 3bcb .dw XT_FETCHI ; ( -- r-addr f-addr r-cc f- cc) - .if WANT_IGNORECASE == 1 - .endif - ; flash strings are zero-padded at the last cell - ; that means: if the flash cell is less $0100, than mask the - ; high byte in the ram cell -0001ef 38b1 .dw XT_DUP - ;.dw XT_BYTESWAP -0001f0 383d .dw XT_DOLITERAL -0001f1 0100 .dw $100 -0001f2 395c .dw XT_ULESS -0001f3 3836 .dw XT_DOCONDBRANCH -0001f4 01f9 .dw PFA_ICOMPARE_LASTCELL -0001f5 38c4 .dw XT_SWAP -0001f6 383d .dw XT_DOLITERAL -0001f7 00ff .dw $00FF -0001f8 3a13 .dw XT_AND ; the final swap can be omitted - PFA_ICOMPARE_LASTCELL: -0001f9 3913 .dw XT_NOTEQUAL -0001fa 3836 .dw XT_DOCONDBRANCH -0001fb 0200 .dw PFA_ICOMPARE_NEXTLOOP -0001fc 3ed2 .dw XT_2DROP -0001fd 394b .dw XT_TRUE -0001fe 3ad4 .dw XT_UNLOOP -0001ff 3820 .dw XT_EXIT - PFA_ICOMPARE_NEXTLOOP: -000200 3a2f .dw XT_1PLUS -000201 38c4 .dw XT_SWAP -000202 3c90 .dw XT_CELLPLUS -000203 38c4 .dw XT_SWAP -000204 383d .dw XT_DOLITERAL -000205 0002 .dw 2 -000206 3aba .dw XT_DOPLUSLOOP -000207 01eb .dw PFA_ICOMPARE_LOOP - PFA_ICOMPARE_DONE: -000208 3ed2 .dw XT_2DROP -000209 3954 .dw XT_ZERO -00020a 3820 .dw XT_EXIT - - .if WANT_IGNORECASE == 1 - .endif - .include "words/star.asm" - - ; Arithmetics - ; multiply routine - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_STAR: -00020b ff01 .dw $ff01 -00020c 002a .db "*",0 -00020d 01d4 .dw VE_HEAD - .set VE_HEAD = VE_STAR - XT_STAR: -00020e 3801 .dw DO_COLON - PFA_STAR: - .endif - -00020f 39a6 .dw XT_MSTAR -000210 38d9 .dw XT_DROP -000211 3820 .dw XT_EXIT - .include "words/j.asm" - - ; Compiler - ; loop counter of outer loop - VE_J: -000212 ff01 .dw $FF01 -000213 006a .db "j",0 -000214 020b .dw VE_HEAD - .set VE_HEAD = VE_J - XT_J: -000215 3801 .dw DO_COLON - PFA_J: -000216 3a76 .dw XT_RP_FETCH -000217 383d .dw XT_DOLITERAL -000218 0007 .dw 7 -000219 399d .dw XT_PLUS -00021a 3879 .dw XT_FETCH -00021b 3a76 .dw XT_RP_FETCH -00021c 383d .dw XT_DOLITERAL -00021d 0009 .dw 9 -00021e 399d .dw XT_PLUS -00021f 3879 .dw XT_FETCH -000220 399d .dw XT_PLUS -000221 3820 .dw XT_EXIT - .include "words/dabs.asm" - - ; Arithmetics - ; double cell absolute value - VE_DABS: -000222 ff04 .dw $ff04 -000223 6164 -000224 7362 .db "dabs" -000225 0212 .dw VE_HEAD - .set VE_HEAD = VE_DABS - XT_DABS: -000226 3801 .dw DO_COLON - PFA_DABS: -000227 38b1 .dw XT_DUP -000228 3921 .dw XT_ZEROLESS -000229 3836 .dw XT_DOCONDBRANCH -00022a 022c .dw PFA_DABS1 -00022b 0233 .dw XT_DNEGATE - PFA_DABS1: -00022c 3820 .dw XT_EXIT - ; : dabs ( ud1 -- +d2 ) dup 0< if dnegate then ; - .include "words/dnegate.asm" - - ; Arithmetics - ; double cell negation - VE_DNEGATE: -00022d ff07 .dw $ff07 -00022e 6e64 -00022f 6765 -000230 7461 -000231 0065 .db "dnegate",0 -000232 0222 .dw VE_HEAD - .set VE_HEAD = VE_DNEGATE - XT_DNEGATE: -000233 3801 .dw DO_COLON - PFA_DNEGATE: -000234 3c3b .dw XT_DINVERT -000235 3fe6 .dw XT_ONE -000236 3954 .dw XT_ZERO -000237 3c15 .dw XT_DPLUS -000238 3820 .dw XT_EXIT - ; : dnegate ( ud1 -- ud2 ) dinvert 1. d+ ; - .include "words/cmove.asm" - - ; Memory - ; copy data in RAM, from lower to higher addresses - VE_CMOVE: -000239 ff05 .dw $ff05 -00023a 6d63 -00023b 766f -00023c 0065 .db "cmove",0 -00023d 022d .dw VE_HEAD - .set VE_HEAD = VE_CMOVE - XT_CMOVE: -00023e 023f .dw PFA_CMOVE - PFA_CMOVE: -00023f 93bf push xh -000240 93af push xl -000241 91e9 ld zl, Y+ -000242 91f9 ld zh, Y+ ; addr-to -000243 91a9 ld xl, Y+ -000244 91b9 ld xh, Y+ ; addr-from -000245 2f09 mov temp0, tosh -000246 2b08 or temp0, tosl -000247 f021 brbs 1, PFA_CMOVE1 - PFA_CMOVE2: -000248 911d ld temp1, X+ -000249 9311 st Z+, temp1 -00024a 9701 sbiw tosl, 1 -00024b f7e1 brbc 1, PFA_CMOVE2 - PFA_CMOVE1: -00024c 91af pop xl -00024d 91bf pop xh -00024e 9189 -00024f 9199 loadtos -000250 940c 3805 jmp_ DO_NEXT - .include "words/2swap.asm" - - ; Stack - ; Exchange the two top cell pairs - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2SWAP: -000252 ff05 .dw $ff05 -000253 7332 -000254 6177 -000255 0070 .db "2swap",0 -000256 0239 .dw VE_HEAD - .set VE_HEAD = VE_2SWAP - XT_2SWAP: -000257 3801 .dw DO_COLON - PFA_2SWAP: - - .endif -000258 38e1 .dw XT_ROT -000259 38ff .dw XT_TO_R -00025a 38e1 .dw XT_ROT -00025b 38f6 .dw XT_R_FROM -00025c 3820 .dw XT_EXIT - .include "words/tib.asm" - - ; System - ; refills the input buffer - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_REFILLTIB: -00025d ff0a .dw $ff0a -00025e 6572 -00025f 6966 -000260 6c6c -000261 742d -000262 6269 .db "refill-tib" -000263 0252 .dw VE_HEAD - .set VE_HEAD = VE_REFILLTIB - XT_REFILLTIB: -000264 3801 .dw DO_COLON - PFA_REFILLTIB: - .endif -000265 0280 .dw XT_TIB -000266 383d .dw XT_DOLITERAL -000267 005a .dw TIB_SIZE -000268 0498 .dw XT_ACCEPT -000269 0286 .dw XT_NUMBERTIB -00026a 3881 .dw XT_STORE -00026b 3954 .dw XT_ZERO -00026c 3ee2 .dw XT_TO_IN -00026d 3881 .dw XT_STORE -00026e 394b .dw XT_TRUE ; -1 -00026f 3820 .dw XT_EXIT - - ; ( -- addr n ) - ; System - ; address and current length of the input buffer - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SOURCETIB: -000270 ff0a .dw $FF0A -000271 6f73 -000272 7275 -000273 6563 -000274 742d -000275 6269 .db "source-tib" -000276 025d .dw VE_HEAD - .set VE_HEAD = VE_SOURCETIB - XT_SOURCETIB: -000277 3801 .dw DO_COLON - PFA_SOURCETIB: - .endif -000278 0280 .dw XT_TIB -000279 0286 .dw XT_NUMBERTIB -00027a 3879 .dw XT_FETCH -00027b 3820 .dw XT_EXIT - - ; ( -- addr ) - ; System Variable - ; terminal input buffer address - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TIB: -00027c ff03 .dw $ff03 -00027d 6974 -00027e 0062 .db "tib",0 -00027f 0270 .dw VE_HEAD - .set VE_HEAD = VE_TIB - XT_TIB: -000280 3848 .dw PFA_DOVARIABLE - PFA_TIB: -000281 012c .dw ram_tib - .dseg -00012c ram_tib: .byte TIB_SIZE - .cseg - .endif - - ; ( -- addr ) - ; System Variable - ; variable holding the number of characters in TIB - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NUMBERTIB: -000282 ff04 .dw $ff04 -000283 7423 -000284 6269 .db "#tib" -000285 027c .dw VE_HEAD - .set VE_HEAD = VE_NUMBERTIB - XT_NUMBERTIB: -000286 3848 .dw PFA_DOVARIABLE - PFA_NUMBERTIB: -000287 0186 .dw ram_sharptib - .dseg -000186 ram_sharptib: .byte 2 - .cseg - .endif - .include "words/init-ram.asm" - - ; Tools - ; copy len cells from eeprom to ram - VE_EE2RAM: -000288 ff06 .dw $ff06 -000289 6565 -00028a 723e -00028b 6d61 .db "ee>ram" -00028c 0282 .dw VE_HEAD - .set VE_HEAD = VE_EE2RAM - XT_EE2RAM: -00028d 3801 .dw DO_COLON - PFA_EE2RAM: ; ( -- ) -00028e 3954 .dw XT_ZERO -00028f 3a9b .dw XT_DODO - PFA_EE2RAM_1: - ; ( -- e-addr r-addr ) -000290 38cf .dw XT_OVER -000291 3b5f .dw XT_FETCHE -000292 38cf .dw XT_OVER -000293 3881 .dw XT_STORE -000294 3c90 .dw XT_CELLPLUS -000295 38c4 .dw XT_SWAP -000296 3c90 .dw XT_CELLPLUS -000297 38c4 .dw XT_SWAP -000298 3ac9 .dw XT_DOLOOP -000299 0290 .dw PFA_EE2RAM_1 - PFA_EE2RAM_2: -00029a 3ed2 .dw XT_2DROP -00029b 3820 .dw XT_EXIT - - ; ( -- ) - ; Tools - ; setup the default user area from eeprom - VE_INIT_RAM: -00029c ff08 .dw $ff08 -00029d 6e69 -00029e 7469 -00029f 722d -0002a0 6d61 .db "init-ram" -0002a1 0288 .dw VE_HEAD - .set VE_HEAD = VE_INIT_RAM - XT_INIT_RAM: -0002a2 3801 .dw DO_COLON - PFA_INI_RAM: ; ( -- ) -0002a3 383d .dw XT_DOLITERAL -0002a4 006a .dw EE_INITUSER -0002a5 3b02 .dw XT_UP_FETCH -0002a6 383d .dw XT_DOLITERAL -0002a7 0022 .dw SYSUSERSIZE -0002a8 3a04 .dw XT_2SLASH -0002a9 028d .dw XT_EE2RAM -0002aa 3820 .dw XT_EXIT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - - - .include "words/environment.asm" - - ; System Value - ; word list identifier of the environmental search list - VE_ENVIRONMENT: -0002ab ff0b .dw $ff0b -0002ac 6e65 -0002ad 6976 -0002ae 6f72 -0002af 6d6e -0002b0 6e65 -0002b1 0074 .db "environment",0 -0002b2 029c .dw VE_HEAD - .set VE_HEAD = VE_ENVIRONMENT - XT_ENVIRONMENT: -0002b3 3848 .dw PFA_DOVARIABLE - PFA_ENVIRONMENT: -0002b4 0044 .dw CFG_ENVIRONMENT - .include "words/env-wordlists.asm" - - ; Environment - ; maximum number of wordlists in the dictionary search order - VE_ENVWORDLISTS: -0002b5 ff09 .dw $ff09 -0002b6 6f77 -0002b7 6472 -0002b8 696c -0002b9 7473 -0002ba 0073 .db "wordlists",0 -0002bb 0000 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVWORDLISTS - XT_ENVWORDLISTS: -0002bc 3801 .dw DO_COLON - PFA_ENVWORDLISTS: -0002bd 383d .dw XT_DOLITERAL -0002be 0008 .dw NUMWORDLISTS -0002bf 3820 .dw XT_EXIT - .include "words/env-slashpad.asm" - - ; Environment - ; Size of the PAD buffer in bytes - VE_ENVSLASHPAD: -0002c0 ff04 .dw $ff04 -0002c1 702f -0002c2 6461 .db "/pad" -0002c3 02b5 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVSLASHPAD - XT_ENVSLASHPAD: -0002c4 3801 .dw DO_COLON - PFA_ENVSLASHPAD: -0002c5 3a8d .dw XT_SP_FETCH -0002c6 3ee8 .dw XT_PAD -0002c7 3993 .dw XT_MINUS -0002c8 3820 .dw XT_EXIT - .include "words/env-slashhold.asm" - - ; Environment - ; size of the pictured numeric output buffer in bytes - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENVSLASHHOLD: -0002c9 ff05 .dw $ff05 -0002ca 682f -0002cb 6c6f -0002cc 0064 .db "/hold",0 -0002cd 02c0 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVSLASHHOLD - XT_ENVSLASHHOLD: -0002ce 3801 .dw DO_COLON - PFA_ENVSLASHHOLD: - .endif -0002cf 3ee8 .dw XT_PAD -0002d0 3f23 .dw XT_HERE -0002d1 3993 .dw XT_MINUS -0002d2 3820 .dw XT_EXIT - .include "words/env-forthname.asm" - - ; Environment - ; flash address of the amforth name string - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENV_FORTHNAME: -0002d3 ff0a .dw $ff0a -0002d4 6f66 -0002d5 7472 -0002d6 2d68 -0002d7 616e -0002d8 656d .db "forth-name" -0002d9 02c9 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_FORTHNAME - XT_ENV_FORTHNAME: -0002da 3801 .dw DO_COLON - PFA_EN_FORTHNAME: -0002db 03d0 .dw XT_DOSLITERAL -0002dc 0007 .dw 7 - .endif -0002dd 6d61 -0002de 6f66 -0002df 7472 -../../common\words/env-forthname.asm(22): warning: .cseg .db misalignment - padding zero byte -0002e0 0068 .db "amforth" - .if cpu_msp430==1 - .endif -0002e1 3820 .dw XT_EXIT - .include "words/env-forthversion.asm" - - ; Environment - ; version number of amforth - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENV_FORTHVERSION: -0002e2 ff07 .dw $ff07 -0002e3 6576 -0002e4 7372 -0002e5 6f69 -0002e6 006e .db "version",0 -0002e7 02d3 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_FORTHVERSION - XT_ENV_FORTHVERSION: -0002e8 3801 .dw DO_COLON - PFA_EN_FORTHVERSION: - .endif -0002e9 383d .dw XT_DOLITERAL -0002ea 0041 .dw 65 -0002eb 3820 .dw XT_EXIT - .include "words/env-cpu.asm" - - ; Environment - ; flash address of the CPU identification string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENV_CPU: -0002ec ff03 .dw $ff03 -0002ed 7063 -0002ee 0075 .db "cpu",0 -0002ef 02e2 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_CPU - XT_ENV_CPU: -0002f0 3801 .dw DO_COLON - PFA_EN_CPU: - .endif -0002f1 383d .dw XT_DOLITERAL -0002f2 0037 .dw mcu_name -0002f3 042f .dw XT_ICOUNT -0002f4 3820 .dw XT_EXIT - .include "words/env-mcuinfo.asm" - - ; Environment - ; flash address of some CPU specific parameters - VE_ENV_MCUINFO: -0002f5 ff08 .dw $ff08 -0002f6 636d -0002f7 2d75 -0002f8 6e69 -0002f9 6f66 .db "mcu-info" -0002fa 02ec .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_MCUINFO - XT_ENV_MCUINFO: -0002fb 3801 .dw DO_COLON - PFA_EN_MCUINFO: -0002fc 383d .dw XT_DOLITERAL -0002fd 0033 .dw mcu_info -0002fe 3820 .dw XT_EXIT - .include "words/env-usersize.asm" - - ; Environment - ; size of the USER area in bytes - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_ENVUSERSIZE: -0002ff ff05 .dw $ff05 -000300 752f -000301 6573 -000302 0072 .db "/user",0 -000303 02f5 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVUSERSIZE - XT_ENVUSERSIZE: -000304 3801 .dw DO_COLON - PFA_ENVUSERSIZE: - .endif -000305 383d .dw XT_DOLITERAL -000306 002c .dw SYSUSERSIZE + APPUSERSIZE -000307 3820 .dw XT_EXIT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/hld.asm" - - ; Numeric IO - ; pointer to current write position in the Pictured Numeric Output buffer - VE_HLD: -000308 ff03 .dw $ff03 -000309 6c68 -00030a 0064 .db "hld",0 -00030b 02ab .dw VE_HEAD - .set VE_HEAD = VE_HLD - XT_HLD: -00030c 3848 .dw PFA_DOVARIABLE - PFA_HLD: -00030d 0188 .dw ram_hld - - .dseg -000188 ram_hld: .byte 2 - .cseg - .include "words/hold.asm" - - ; Numeric IO - ; prepend character to pictured numeric output buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_HOLD: -00030e ff04 .dw $ff04 -00030f 6f68 -000310 646c .db "hold" -000311 0308 .dw VE_HEAD - .set VE_HEAD = VE_HOLD - XT_HOLD: -000312 3801 .dw DO_COLON - PFA_HOLD: - .endif -000313 030c .dw XT_HLD -000314 38b1 .dw XT_DUP -000315 3879 .dw XT_FETCH -000316 3a35 .dw XT_1MINUS -000317 38b1 .dw XT_DUP -000318 38ff .dw XT_TO_R -000319 38c4 .dw XT_SWAP -00031a 3881 .dw XT_STORE -00031b 38f6 .dw XT_R_FROM -00031c 388d .dw XT_CSTORE -00031d 3820 .dw XT_EXIT - .include "words/less-sharp.asm" ; <# - - ; Numeric IO - ; initialize the pictured numeric output conversion process - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_L_SHARP: -00031e ff02 .dw $ff02 -00031f 233c .db "<#" -000320 030e .dw VE_HEAD - .set VE_HEAD = VE_L_SHARP - XT_L_SHARP: -000321 3801 .dw DO_COLON - PFA_L_SHARP: - .endif -000322 3ee8 .dw XT_PAD -000323 030c .dw XT_HLD -000324 3881 .dw XT_STORE -000325 3820 .dw XT_EXIT - .include "words/sharp.asm" - - ; Numeric IO - ; pictured numeric output: convert one digit - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_SHARP: -000326 ff01 .dw $ff01 -000327 0023 .db "#",0 -000328 031e .dw VE_HEAD - .set VE_HEAD = VE_SHARP - XT_SHARP: -000329 3801 .dw DO_COLON - PFA_SHARP: - .endif -00032a 3ebd .dw XT_BASE -00032b 3879 .dw XT_FETCH -00032c 03a6 .dw XT_UDSLASHMOD -00032d 38e1 .dw XT_ROT -00032e 383d .dw XT_DOLITERAL -00032f 0009 .dw 9 -000330 38cf .dw XT_OVER -000331 396e .dw XT_LESS -000332 3836 .dw XT_DOCONDBRANCH -000333 0337 DEST(PFA_SHARP1) -000334 383d .dw XT_DOLITERAL -000335 0007 .dw 7 -000336 399d .dw XT_PLUS - PFA_SHARP1: -000337 383d .dw XT_DOLITERAL -000338 0030 .dw 48 ; ASCII 0 -000339 399d .dw XT_PLUS -00033a 0312 .dw XT_HOLD -00033b 3820 .dw XT_EXIT - ; : # ( ud1 -- ud2 ) - ; base @ ud/mod rot 9 over < if 7 + then 30 + hold ; - .include "words/sharp-s.asm" - - ; Numeric IO - ; pictured numeric output: convert all digits until 0 (zero) is reached - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SHARP_S: -00033c ff02 .dw $ff02 -00033d 7323 .db "#s" -00033e 0326 .dw VE_HEAD - .set VE_HEAD = VE_SHARP_S - XT_SHARP_S: -00033f 3801 .dw DO_COLON - PFA_SHARP_S: - .endif - NUMS1: -000340 0329 .dw XT_SHARP -000341 3ec9 .dw XT_2DUP -000342 3a1c .dw XT_OR -000343 391a .dw XT_ZEROEQUAL -000344 3836 .dw XT_DOCONDBRANCH -000345 0340 DEST(NUMS1) ; PFA_SHARP_S -000346 3820 .dw XT_EXIT - .include "words/sharp-greater.asm" ; #> - - ; Numeric IO - ; Pictured Numeric Output: convert PNO buffer into an string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SHARP_G: -000347 ff02 .dw $ff02 -000348 3e23 .db "#>" -000349 033c .dw VE_HEAD - .set VE_HEAD = VE_SHARP_G - XT_SHARP_G: -00034a 3801 .dw DO_COLON - PFA_SHARP_G: - .endif -00034b 3ed2 .dw XT_2DROP -00034c 030c .dw XT_HLD -00034d 3879 .dw XT_FETCH -00034e 3ee8 .dw XT_PAD -00034f 38cf .dw XT_OVER -000350 3993 .dw XT_MINUS -000351 3820 .dw XT_EXIT - .include "words/sign.asm" - - ; Numeric IO - ; place a - in HLD if n is negative - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SIGN: -000352 ff04 .dw $ff04 -000353 6973 -000354 6e67 .db "sign" -000355 0347 .dw VE_HEAD - .set VE_HEAD = VE_SIGN - XT_SIGN: -000356 3801 .dw DO_COLON - PFA_SIGN: - .endif -000357 3921 .dw XT_ZEROLESS -000358 3836 .dw XT_DOCONDBRANCH -000359 035d DEST(PFA_SIGN1) -00035a 383d .dw XT_DOLITERAL -00035b 002d .dw 45 ; ascii - -00035c 0312 .dw XT_HOLD - PFA_SIGN1: -00035d 3820 .dw XT_EXIT - .include "words/d-dot-r.asm" - - ; Numeric IO - ; singed PNO with double cell numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DDOTR: -00035e ff03 .dw $ff03 -00035f 2e64 -000360 0072 .db "d.r",0 -000361 0352 .dw VE_HEAD - .set VE_HEAD = VE_DDOTR - XT_DDOTR: -000362 3801 .dw DO_COLON - PFA_DDOTR: - - .endif -000363 38ff .dw XT_TO_R -000364 3eda .dw XT_TUCK -000365 0226 .dw XT_DABS -000366 0321 .dw XT_L_SHARP -000367 033f .dw XT_SHARP_S -000368 38e1 .dw XT_ROT -000369 0356 .dw XT_SIGN -00036a 034a .dw XT_SHARP_G -00036b 38f6 .dw XT_R_FROM -00036c 38cf .dw XT_OVER -00036d 3993 .dw XT_MINUS -00036e 3fb7 .dw XT_SPACES -00036f 0439 .dw XT_TYPE -000370 3820 .dw XT_EXIT - ; : d.r ( d n -- ) - ; >r swap over dabs <# #s rot sign #> r> over - spaces type ; - .include "words/dot-r.asm" - - ; Numeric IO - ; singed PNO with single cell numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOTR: -000371 ff02 .dw $ff02 -000372 722e .db ".r" -000373 035e .dw VE_HEAD - .set VE_HEAD = VE_DOTR - XT_DOTR: -000374 3801 .dw DO_COLON - PFA_DOTR: - - .endif -000375 38ff .dw XT_TO_R -000376 3fc7 .dw XT_S2D -000377 38f6 .dw XT_R_FROM -000378 0362 .dw XT_DDOTR -000379 3820 .dw XT_EXIT - ; : .r ( s n -- ) >r s>d r> d.r ; - .include "words/d-dot.asm" - - ; Numeric IO - ; singed PNO with double cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DDOT: -00037a ff02 .dw $ff02 -00037b 2e64 .db "d." -00037c 0371 .dw VE_HEAD - .set VE_HEAD = VE_DDOT - XT_DDOT: -00037d 3801 .dw DO_COLON - PFA_DDOT: - - .endif -00037e 3954 .dw XT_ZERO -00037f 0362 .dw XT_DDOTR -000380 3fae .dw XT_SPACE -000381 3820 .dw XT_EXIT - ; : d. ( d -- ) 0 d.r space ; - .include "words/dot.asm" - - ; Numeric IO - ; singed PNO with single cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_DOT: -000382 ff01 .dw $ff01 -000383 002e .db ".",0 -000384 037a .dw VE_HEAD - .set VE_HEAD = VE_DOT - XT_DOT: -000385 3801 .dw DO_COLON - PFA_DOT: - .endif -000386 3fc7 .dw XT_S2D -000387 037d .dw XT_DDOT -000388 3820 .dw XT_EXIT - ; : . ( s -- ) s>d d. ; - .include "words/ud-dot.asm" - - ; Numeric IO - ; unsigned PNO with double cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDDOT: -000389 ff03 .dw $ff03 -00038a 6475 -00038b 002e .db "ud.",0 -00038c 0382 .dw VE_HEAD - .set VE_HEAD = VE_UDDOT - XT_UDDOT: -00038d 3801 .dw DO_COLON - PFA_UDDOT: - .endif -00038e 3954 .dw XT_ZERO -00038f 0396 .dw XT_UDDOTR -000390 3fae .dw XT_SPACE -000391 3820 .dw XT_EXIT - .include "words/ud-dot-r.asm" - - ; Numeric IO - ; unsigned PNO with double cell numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_UDDOTR: -000392 ff04 .dw $ff04 -000393 6475 -000394 722e .db "ud.r" -000395 0389 .dw VE_HEAD - .set VE_HEAD = VE_UDDOTR - XT_UDDOTR: -000396 3801 .dw DO_COLON - PFA_UDDOTR: - .endif -000397 38ff .dw XT_TO_R -000398 0321 .dw XT_L_SHARP -000399 033f .dw XT_SHARP_S -00039a 034a .dw XT_SHARP_G -00039b 38f6 .dw XT_R_FROM -00039c 38cf .dw XT_OVER -00039d 3993 .dw XT_MINUS -00039e 3fb7 .dw XT_SPACES -00039f 0439 .dw XT_TYPE -0003a0 3820 .dw XT_EXIT - .include "words/ud-slash-mod.asm" - - ; Arithmetics - ; unsigned double cell division with remainder - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDSLASHMOD: -0003a1 ff06 .dw $ff06 -0003a2 6475 -0003a3 6d2f -0003a4 646f .db "ud/mod" -0003a5 0392 .dw VE_HEAD - .set VE_HEAD = VE_UDSLASHMOD - XT_UDSLASHMOD: -0003a6 3801 .dw DO_COLON - PFA_UDSLASHMOD: - .endif -0003a7 38ff .dw XT_TO_R -0003a8 3954 .dw XT_ZERO -0003a9 3908 .dw XT_R_FETCH -0003aa 39c2 .dw XT_UMSLASHMOD -0003ab 38f6 .dw XT_R_FROM -0003ac 38c4 .dw XT_SWAP -0003ad 38ff .dw XT_TO_R -0003ae 39c2 .dw XT_UMSLASHMOD -0003af 38f6 .dw XT_R_FROM -0003b0 3820 .dw XT_EXIT - .include "words/digit-q.asm" - - ; Numeric IO - ; tries to convert a character to a number, set flag accordingly - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DIGITQ: -0003b1 ff06 .dw $ff06 -0003b2 6964 -0003b3 6967 -0003b4 3f74 .db "digit?" -0003b5 03a1 .dw VE_HEAD - .set VE_HEAD = VE_DIGITQ - XT_DIGITQ: -0003b6 3801 .dw DO_COLON - PFA_DIGITQ: - .endif -0003b7 3f66 .dw XT_TOUPPER -0003b8 38b1 -0003b9 383d -0003ba 0039 -0003bb 3978 -0003bc 383d -0003bd 0100 .DW XT_DUP,XT_DOLITERAL,57,XT_GREATER,XT_DOLITERAL,256 -0003be 3a13 -0003bf 399d -0003c0 38b1 -0003c1 383d -0003c2 0140 -0003c3 3978 .DW XT_AND,XT_PLUS,XT_DUP,XT_DOLITERAL,320,XT_GREATER -0003c4 383d -0003c5 0107 -0003c6 3a13 -0003c7 3993 -0003c8 383d -0003c9 0030 .DW XT_DOLITERAL,263,XT_AND,XT_MINUS,XT_DOLITERAL,48 -0003ca 3993 -0003cb 38b1 -0003cc 3ebd -0003cd 3879 -0003ce 395c .DW XT_MINUS,XT_DUP,XT_BASE,XT_FETCH,XT_ULESS -0003cf 3820 .DW XT_EXIT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/do-sliteral.asm" - - ; String - ; runtime portion of sliteral - ;VE_DOSLITERAL: - ; .dw $ff0a - ; .db "(sliteral)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOSLITERAL - XT_DOSLITERAL: -0003d0 3801 .dw DO_COLON - PFA_DOSLITERAL: -0003d1 3908 .dw XT_R_FETCH ; ( -- addr ) -0003d2 042f .dw XT_ICOUNT -0003d3 38f6 .dw XT_R_FROM -0003d4 38cf .dw XT_OVER ; ( -- addr' n addr n) -0003d5 3a2f .dw XT_1PLUS -0003d6 3a04 .dw XT_2SLASH ; ( -- addr' n addr k ) -0003d7 399d .dw XT_PLUS ; ( -- addr' n addr'' ) -0003d8 3a2f .dw XT_1PLUS -0003d9 38ff .dw XT_TO_R ; ( -- ) -0003da 3820 .dw XT_EXIT - .include "words/scomma.asm" - - ; Compiler - ; compiles a string from RAM to Flash - VE_SCOMMA: -0003db ff02 .dw $ff02 -0003dc 2c73 .db "s",$2c -0003dd 03b1 .dw VE_HEAD - .set VE_HEAD = VE_SCOMMA - XT_SCOMMA: -0003de 3801 .dw DO_COLON - PFA_SCOMMA: -0003df 38b1 .dw XT_DUP -0003e0 03e2 .dw XT_DOSCOMMA -0003e1 3820 .dw XT_EXIT - - ; ( addr len len' -- ) - ; Compiler - ; compiles a string from RAM to Flash - ;VE_DOSCOMMA: - ; .dw $ff04 - ; .db "(s",$2c,")" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOSCOMMA - XT_DOSCOMMA: -0003e2 3801 .dw DO_COLON - PFA_DOSCOMMA: -0003e3 0767 .dw XT_COMMA -0003e4 38b1 .dw XT_DUP ; ( --addr len len) -0003e5 3a04 .dw XT_2SLASH ; ( -- addr len len/2 -0003e6 3eda .dw XT_TUCK ; ( -- addr len/2 len len/2 -0003e7 3a0b .dw XT_2STAR ; ( -- addr len/2 len len' -0003e8 3993 .dw XT_MINUS ; ( -- addr len/2 rem -0003e9 38ff .dw XT_TO_R -0003ea 3954 .dw XT_ZERO -0003eb 0826 .dw XT_QDOCHECK -0003ec 3836 .dw XT_DOCONDBRANCH -0003ed 03f5 .dw PFA_SCOMMA2 -0003ee 3a9b .dw XT_DODO - PFA_SCOMMA1: -0003ef 38b1 .dw XT_DUP ; ( -- addr addr ) -0003f0 3879 .dw XT_FETCH ; ( -- addr c1c2 ) -0003f1 0767 .dw XT_COMMA ; ( -- addr ) -0003f2 3c90 .dw XT_CELLPLUS ; ( -- addr+cell ) -0003f3 3ac9 .dw XT_DOLOOP -0003f4 03ef .dw PFA_SCOMMA1 - PFA_SCOMMA2: -0003f5 38f6 .dw XT_R_FROM -0003f6 3928 .dw XT_GREATERZERO -0003f7 3836 .dw XT_DOCONDBRANCH -0003f8 03fc .dw PFA_SCOMMA3 -0003f9 38b1 .dw XT_DUP ; well, tricky -0003fa 3898 .dw XT_CFETCH -0003fb 0767 .dw XT_COMMA - PFA_SCOMMA3: -0003fc 38d9 .dw XT_DROP ; ( -- ) -0003fd 3820 .dw XT_EXIT - .include "words/itype.asm" - - ; Tools - ; reads string from flash and prints it - VE_ITYPE: -0003fe ff05 .dw $ff05 -0003ff 7469 -000400 7079 -000401 0065 .db "itype",0 -000402 03db .dw VE_HEAD - .set VE_HEAD = VE_ITYPE - XT_ITYPE: -000403 3801 .dw DO_COLON - PFA_ITYPE: -000404 38b1 .dw XT_DUP ; ( --addr len len) -000405 3a04 .dw XT_2SLASH ; ( -- addr len len/2 -000406 3eda .dw XT_TUCK ; ( -- addr len/2 len len/2 -000407 3a0b .dw XT_2STAR ; ( -- addr len/2 len len' -000408 3993 .dw XT_MINUS ; ( -- addr len/2 rem -000409 38ff .dw XT_TO_R -00040a 3954 .dw XT_ZERO -00040b 0826 .dw XT_QDOCHECK -00040c 3836 .dw XT_DOCONDBRANCH -00040d 0417 .dw PFA_ITYPE2 -00040e 3a9b .dw XT_DODO - PFA_ITYPE1: -00040f 38b1 .dw XT_DUP ; ( -- addr addr ) -000410 3bcb .dw XT_FETCHI ; ( -- addr c1c2 ) -000411 38b1 .dw XT_DUP -000412 0424 .dw XT_LOWEMIT -000413 0420 .dw XT_HIEMIT -000414 3a2f .dw XT_1PLUS ; ( -- addr+cell ) -000415 3ac9 .dw XT_DOLOOP -000416 040f .dw PFA_ITYPE1 - PFA_ITYPE2: -000417 38f6 .dw XT_R_FROM -000418 3928 .dw XT_GREATERZERO -000419 3836 .dw XT_DOCONDBRANCH -00041a 041e .dw PFA_ITYPE3 -00041b 38b1 .dw XT_DUP ; make sure the drop below has always something to do -00041c 3bcb .dw XT_FETCHI -00041d 0424 .dw XT_LOWEMIT - PFA_ITYPE3: -00041e 38d9 .dw XT_DROP -00041f 3820 .dw XT_EXIT - - ; ( w -- ) - ; R( -- ) - ; content of cell fetched on stack. - ;VE_HIEMIT: - ; .dw $ff06 - ; .db "hiemit" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_HIEMIT - XT_HIEMIT: -000420 3801 .dw DO_COLON - PFA_HIEMIT: -000421 3af9 .dw XT_BYTESWAP -000422 0424 .dw XT_LOWEMIT -000423 3820 .dw XT_EXIT - - ; ( w -- ) - ; R( -- ) - ; content of cell fetched on stack. - ;VE_LOWEMIT: - ; .dw $ff07 - ; .db "lowemit" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_LOWEMIT - XT_LOWEMIT: -000424 3801 .dw DO_COLON - PFA_LOWEMIT: -000425 383d .dw XT_DOLITERAL -000426 00ff .dw $00ff -000427 3a13 .dw XT_AND -000428 3ef2 .dw XT_EMIT -000429 3820 .dw XT_EXIT - .include "words/icount.asm" - - ; Tools - ; get count information out of a counted string in flash - VE_ICOUNT: -00042a ff06 .dw $ff06 -00042b 6369 -00042c 756f -00042d 746e .db "icount" -00042e 03fe .dw VE_HEAD - .set VE_HEAD = VE_ICOUNT - XT_ICOUNT: -00042f 3801 .dw DO_COLON - PFA_ICOUNT: -000430 38b1 .dw XT_DUP -000431 3a2f .dw XT_1PLUS -000432 38c4 .dw XT_SWAP -000433 3bcb .dw XT_FETCHI -000434 3820 .dw XT_EXIT - .include "words/type.asm" - - ; Character IO - ; print a RAM based string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TYPE: -000435 ff04 .dw $ff04 -000436 7974 -000437 6570 .db "type" -000438 042a .dw VE_HEAD - .set VE_HEAD = VE_TYPE - XT_TYPE: -000439 3801 .dw DO_COLON - PFA_TYPE: - - .endif -00043a 3f99 .dw XT_BOUNDS -00043b 0826 .dw XT_QDOCHECK -00043c 3836 .dw XT_DOCONDBRANCH -00043d 0444 DEST(PFA_TYPE2) -00043e 3a9b .dw XT_DODO - PFA_TYPE1: -00043f 3aac .dw XT_I -000440 3898 .dw XT_CFETCH -000441 3ef2 .dw XT_EMIT -000442 3ac9 .dw XT_DOLOOP -000443 043f DEST(PFA_TYPE1) - PFA_TYPE2: -000444 3820 .dw XT_EXIT - .include "words/tick.asm" - - ; Dictionary - ; search dictionary for name, return XT or throw an exception -13 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TICK: -000445 ff01 .dw $ff01 -000446 0027 .db "'",0 -000447 0435 .dw VE_HEAD - .set VE_HEAD = VE_TICK - XT_TICK: -000448 3801 .dw DO_COLON - PFA_TICK: - .endif -000449 05bb .dw XT_PARSENAME -00044a 05fe .dw XT_FORTHRECOGNIZER -00044b 0609 .dw XT_RECOGNIZE - ; a word is tickable unless DT:TOKEN is DT:NULL or - ; the interpret action is a NOOP -00044c 38b1 .dw XT_DUP -00044d 0696 .dw XT_DT_NULL -00044e 3fdf .dw XT_EQUAL -00044f 38c4 .dw XT_SWAP -000450 3bcb .dw XT_FETCHI -000451 383d .dw XT_DOLITERAL -000452 01a5 .dw XT_NOOP -000453 3fdf .dw XT_EQUAL -000454 3a1c .dw XT_OR -000455 3836 .dw XT_DOCONDBRANCH -000456 045a DEST(PFA_TICK1) -000457 383d .dw XT_DOLITERAL -000458 fff3 .dw -13 -000459 3d86 .dw XT_THROW - PFA_TICK1: -00045a 38d9 .dw XT_DROP -00045b 3820 .dw XT_EXIT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/cskip.asm" - - ; String - ; skips leading occurancies in string at addr1/n1 leaving addr2/n2 pointing to the 1st non-c character - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CSKIP: -00045c ff05 .dw $ff05 -00045d 7363 -00045e 696b -00045f 0070 .db "cskip",0 -000460 0445 .dw VE_HEAD - .set VE_HEAD = VE_CSKIP - XT_CSKIP: -000461 3801 .dw DO_COLON - PFA_CSKIP: - .endif -000462 38ff .dw XT_TO_R ; ( -- addr1 n1 ) - PFA_CSKIP1: -000463 38b1 .dw XT_DUP ; ( -- addr' n' n' ) -000464 3836 .dw XT_DOCONDBRANCH ; ( -- addr' n') -000465 0470 DEST(PFA_CSKIP2) -000466 38cf .dw XT_OVER ; ( -- addr' n' addr' ) -000467 3898 .dw XT_CFETCH ; ( -- addr' n' c' ) -000468 3908 .dw XT_R_FETCH ; ( -- addr' n' c' c ) -000469 3fdf .dw XT_EQUAL ; ( -- addr' n' f ) -00046a 3836 .dw XT_DOCONDBRANCH ; ( -- addr' n') -00046b 0470 DEST(PFA_CSKIP2) -00046c 3fe6 .dw XT_ONE -00046d 05ac .dw XT_SLASHSTRING -00046e 382f .dw XT_DOBRANCH -00046f 0463 DEST(PFA_CSKIP1) - PFA_CSKIP2: -000470 38f6 .dw XT_R_FROM -000471 38d9 .dw XT_DROP ; ( -- addr2 n2) -000472 3820 .dw XT_EXIT - .include "words/cscan.asm" - - ; String - ; Scan string at addr1/n1 for the first occurance of c, leaving addr1/n2, char at n2 is first non-c character - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CSCAN: -000473 ff05 .dw $ff05 -000474 7363 -000475 6163 -../../common\words/cscan.asm(12): warning: .cseg .db misalignment - padding zero byte -000476 006e .db "cscan" -000477 045c .dw VE_HEAD - .set VE_HEAD = VE_CSCAN - XT_CSCAN: -000478 3801 .dw DO_COLON - PFA_CSCAN: - .endif -000479 38ff .dw XT_TO_R -00047a 38cf .dw XT_OVER - PFA_CSCAN1: -00047b 38b1 .dw XT_DUP -00047c 3898 .dw XT_CFETCH -00047d 3908 .dw XT_R_FETCH -00047e 3fdf .dw XT_EQUAL -00047f 391a .dw XT_ZEROEQUAL -000480 3836 .dw XT_DOCONDBRANCH -000481 048d DEST(PFA_CSCAN2) -000482 38c4 .dw XT_SWAP -000483 3a35 .dw XT_1MINUS -000484 38c4 .dw XT_SWAP -000485 38cf .dw XT_OVER -000486 3921 .dw XT_ZEROLESS ; not negative -000487 391a .dw XT_ZEROEQUAL -000488 3836 .dw XT_DOCONDBRANCH -000489 048d DEST(PFA_CSCAN2) -00048a 3a2f .dw XT_1PLUS -00048b 382f .dw XT_DOBRANCH -00048c 047b DEST(PFA_CSCAN1) - PFA_CSCAN2: -00048d 38f0 .dw XT_NIP -00048e 38cf .dw XT_OVER -00048f 3993 .dw XT_MINUS -000490 38f6 .dw XT_R_FROM -000491 38d9 .dw XT_DROP -000492 3820 .dw XT_EXIT - - ; : my-cscan ( addr len c -- addr len' ) - ; >r over ( -- addr len addr ) - ; begin - ; dup c@ r@ <> while - ; swap 1- swap over 0 >= while - ; 1+ - ; repeat then - ; nip over - r> drop - ; ; - .include "words/accept.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ACCEPT: -000493 ff06 .dw $ff06 -000494 6361 -000495 6563 -000496 7470 .db "accept" -000497 0473 .dw VE_HEAD - .set VE_HEAD = VE_ACCEPT - XT_ACCEPT: -000498 3801 .dw DO_COLON - PFA_ACCEPT: - - .endif -000499 38cf -00049a 399d -00049b 3a35 -00049c 38cf .DW XT_OVER,XT_PLUS,XT_1MINUS,XT_OVER -00049d 3f03 -00049e 38b1 -00049f 04d9 -0004a0 391a -0004a1 3836 ACC1: .DW XT_KEY,XT_DUP,XT_CRLFQ,XT_ZEROEQUAL,XT_DOCONDBRANCH -0004a2 04cb DEST(ACC5) -0004a3 38b1 -0004a4 383d -0004a5 0008 -0004a6 3fdf -0004a7 3836 .DW XT_DUP,XT_DOLITERAL,8,XT_EQUAL,XT_DOCONDBRANCH -0004a8 04bb DEST(ACC3) -0004a9 38d9 -0004aa 38e1 -0004ab 3ec9 -0004ac 3978 -0004ad 38ff -0004ae 38e1 -0004af 38e1 -0004b0 38f6 -0004b1 3836 .DW XT_DROP,XT_ROT,XT_2DUP,XT_GREATER,XT_TO_R,XT_ROT,XT_ROT,XT_R_FROM,XT_DOCONDBRANCH -0004b2 04b9 DEST(ACC6) -0004b3 04d1 -0004b4 3a35 -0004b5 38ff -0004b6 38cf -0004b7 38f6 -0004b8 015a .DW XT_BS,XT_1MINUS,XT_TO_R,XT_OVER,XT_R_FROM,XT_UMAX -0004b9 382f ACC6: .DW XT_DOBRANCH -0004ba 04c9 DEST(ACC4) - - - ACC3: ; check for remaining control characters, replace them with blank -0004bb 38b1 .dw XT_DUP ; ( -- addr k k ) -0004bc 3f54 .dw XT_BL -0004bd 396e .dw XT_LESS -0004be 3836 .dw XT_DOCONDBRANCH -0004bf 04c2 DEST(PFA_ACCEPT6) -0004c0 38d9 .dw XT_DROP -0004c1 3f54 .dw XT_BL - PFA_ACCEPT6: -0004c2 38b1 -0004c3 3ef2 -0004c4 38cf -0004c5 388d -0004c6 3a2f -0004c7 38cf -0004c8 0166 .DW XT_DUP,XT_EMIT,XT_OVER,XT_CSTORE,XT_1PLUS,XT_OVER,XT_UMIN -0004c9 382f ACC4: .DW XT_DOBRANCH -0004ca 049d DEST(ACC1) -0004cb 38d9 -0004cc 38f0 -0004cd 38c4 -0004ce 3993 -0004cf 3fa1 -0004d0 3820 ACC5: .DW XT_DROP,XT_NIP,XT_SWAP,XT_MINUS,XT_CR,XT_EXIT - - - ; ( -- ) - ; System - ; send a backspace character to overwrite the current char - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - ;VE_BS: - ; .dw $ff02 - ; .db "bs" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_BS - XT_BS: -0004d1 3801 .dw DO_COLON - .endif -0004d2 383d .dw XT_DOLITERAL -0004d3 0008 .dw 8 -0004d4 38b1 .dw XT_DUP -0004d5 3ef2 .dw XT_EMIT -0004d6 3fae .dw XT_SPACE -0004d7 3ef2 .dw XT_EMIT -0004d8 3820 .dw XT_EXIT - - - ; ( c -- f ) - ; System - ; is the character a line end character? - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_CRLFQ: - ; .dw $ff02 - ; .db "crlf?" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_CRLFQ - XT_CRLFQ: -0004d9 3801 .dw DO_COLON - .endif -0004da 38b1 .dw XT_DUP -0004db 383d .dw XT_DOLITERAL -0004dc 000d .dw 13 -0004dd 3fdf .dw XT_EQUAL -0004de 38c4 .dw XT_SWAP -0004df 383d .dw XT_DOLITERAL -0004e0 000a .dw 10 -0004e1 3fdf .dw XT_EQUAL -0004e2 3a1c .dw XT_OR -0004e3 3820 .dw XT_EXIT - .include "words/refill.asm" - - ; System - ; refills the input buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_REFILL: -0004e4 ff06 .dw $ff06 -0004e5 6572 -0004e6 6966 -0004e7 6c6c .db "refill" -0004e8 0493 .dw VE_HEAD - .set VE_HEAD = VE_REFILL - XT_REFILL: -0004e9 3dff .dw PFA_DODEFER1 - PFA_REFILL: - .endif -0004ea 001a .dw USER_REFILL -0004eb 3dc8 .dw XT_UDEFERFETCH -0004ec 3dd4 .dw XT_UDEFERSTORE - .include "words/char.asm" - - ; Tools - ; copy the first character of the next word onto the stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CHAR: -0004ed ff04 .dw $ff04 -0004ee 6863 -0004ef 7261 .db "char" -0004f0 04e4 .dw VE_HEAD - .set VE_HEAD = VE_CHAR - XT_CHAR: -0004f1 3801 .dw DO_COLON - PFA_CHAR: - .endif -0004f2 05bb .dw XT_PARSENAME -0004f3 38d9 .dw XT_DROP -0004f4 3898 .dw XT_CFETCH -0004f5 3820 .dw XT_EXIT - .include "words/number.asm" - - ; Numeric IO - ; convert a string at addr to a number - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NUMBER: -0004f6 ff06 .dw $ff06 -0004f7 756e -0004f8 626d -0004f9 7265 .db "number" -0004fa 04ed .dw VE_HEAD - .set VE_HEAD = VE_NUMBER - XT_NUMBER: -0004fb 3801 .dw DO_COLON - PFA_NUMBER: - .endif -0004fc 3ebd .dw XT_BASE -0004fd 3879 .dw XT_FETCH -0004fe 38ff .dw XT_TO_R -0004ff 053f .dw XT_QSIGN -000500 38ff .dw XT_TO_R -000501 0552 .dw XT_SET_BASE -000502 053f .dw XT_QSIGN -000503 38f6 .dw XT_R_FROM -000504 3a1c .dw XT_OR -000505 38ff .dw XT_TO_R - ; check whether something is left -000506 38b1 .dw XT_DUP -000507 391a .dw XT_ZEROEQUAL -000508 3836 .dw XT_DOCONDBRANCH -000509 0512 DEST(PFA_NUMBER0) - ; nothing is left. It cannot be a number at all -00050a 3ed2 .dw XT_2DROP -00050b 38f6 .dw XT_R_FROM -00050c 38d9 .dw XT_DROP -00050d 38f6 .dw XT_R_FROM -00050e 3ebd .dw XT_BASE -00050f 3881 .dw XT_STORE -000510 3954 .dw XT_ZERO -000511 3820 .dw XT_EXIT - PFA_NUMBER0: -000512 3b1e .dw XT_2TO_R -000513 3954 .dw XT_ZERO ; starting value -000514 3954 .dw XT_ZERO -000515 3b2d .dw XT_2R_FROM -000516 0570 .dw XT_TO_NUMBER ; ( 0. addr len -- d addr' len' - ; check length of the remaining string. - ; if zero: a single cell number is entered -000517 38b9 .dw XT_QDUP -000518 3836 .dw XT_DOCONDBRANCH -000519 0534 DEST(PFA_NUMBER1) - ; if equal 1: mayba a trailing dot? --> double cell number -00051a 3fe6 .dw XT_ONE -00051b 3fdf .dw XT_EQUAL -00051c 3836 .dw XT_DOCONDBRANCH -00051d 052b DEST(PFA_NUMBER2) - ; excatly one character is left -00051e 3898 .dw XT_CFETCH -00051f 383d .dw XT_DOLITERAL -000520 002e .dw 46 ; . -000521 3fdf .dw XT_EQUAL -000522 3836 .dw XT_DOCONDBRANCH -000523 052c DEST(PFA_NUMBER6) - ; its a double cell number - ; incorporate sign into number -000524 38f6 .dw XT_R_FROM -000525 3836 .dw XT_DOCONDBRANCH -000526 0528 DEST(PFA_NUMBER3) -000527 0233 .dw XT_DNEGATE - PFA_NUMBER3: -000528 3feb .dw XT_TWO -000529 382f .dw XT_DOBRANCH -00052a 053a DEST(PFA_NUMBER5) - PFA_NUMBER2: -00052b 38d9 .dw XT_DROP - PFA_NUMBER6: -00052c 3ed2 .dw XT_2DROP -00052d 38f6 .dw XT_R_FROM -00052e 38d9 .dw XT_DROP -00052f 38f6 .dw XT_R_FROM -000530 3ebd .dw XT_BASE -000531 3881 .dw XT_STORE -000532 3954 .dw XT_ZERO -000533 3820 .dw XT_EXIT - PFA_NUMBER1: -000534 3ed2 .dw XT_2DROP ; remove the address - ; incorporate sign into number -000535 38f6 .dw XT_R_FROM -000536 3836 .dw XT_DOCONDBRANCH -000537 0539 DEST(PFA_NUMBER4) -000538 3e27 .dw XT_NEGATE - PFA_NUMBER4: -000539 3fe6 .dw XT_ONE - PFA_NUMBER5: -00053a 38f6 .dw XT_R_FROM -00053b 3ebd .dw XT_BASE -00053c 3881 .dw XT_STORE -00053d 394b .dw XT_TRUE -00053e 3820 .dw XT_EXIT - .include "words/q-sign.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_QSIGN: -00053f 3801 .dw DO_COLON - PFA_QSIGN: ; ( c -- ) - .endif -000540 38cf .dw XT_OVER ; ( -- addr len addr ) -000541 3898 .dw XT_CFETCH -000542 383d .dw XT_DOLITERAL -000543 002d .dw '-' -000544 3fdf .dw XT_EQUAL ; ( -- addr len flag ) -000545 38b1 .dw XT_DUP -000546 38ff .dw XT_TO_R -000547 3836 .dw XT_DOCONDBRANCH -000548 054b DEST(PFA_NUMBERSIGN_DONE) -000549 3fe6 .dw XT_ONE ; skip sign character -00054a 05ac .dw XT_SLASHSTRING - PFA_NUMBERSIGN_DONE: -00054b 38f6 .dw XT_R_FROM -00054c 3820 .dw XT_EXIT - .include "words/set-base.asm" - - ; Numeric IO - ; skip a numeric prefix character - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_BASES: -00054d 3852 .dw PFA_DOCONSTANT - .endif -00054e 000a -00054f 0010 -000550 0002 -000551 000a .dw 10,16,2,10 ; last one could a 8 instead. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_SET_BASE: -000552 3801 .dw DO_COLON - PFA_SET_BASE: ; ( adr1 len1 -- adr2 len2 ) - .endif -000553 38cf .dw XT_OVER -000554 3898 .dw XT_CFETCH -000555 383d .dw XT_DOLITERAL -000556 0023 .dw 35 -000557 3993 .dw XT_MINUS -000558 38b1 .dw XT_DUP -000559 3954 .dw XT_ZERO -00055a 383d .dw XT_DOLITERAL -00055b 0004 .dw 4 -00055c 3e57 .dw XT_WITHIN -00055d 3836 .dw XT_DOCONDBRANCH -00055e 0568 DEST(SET_BASE1) - .if cpu_msp430==1 - .endif -00055f 054d .dw XT_BASES -000560 399d .dw XT_PLUS -000561 3bcb .dw XT_FETCHI -000562 3ebd .dw XT_BASE -000563 3881 .dw XT_STORE -000564 3fe6 .dw XT_ONE -000565 05ac .dw XT_SLASHSTRING -000566 382f .dw XT_DOBRANCH -000567 0569 DEST(SET_BASE2) - SET_BASE1: -000568 38d9 .dw XT_DROP - SET_BASE2: -000569 3820 .dw XT_EXIT - - ; create bases 10 , 16 , 2 , 8 , - ; : set-base 35 - dup 0 4 within if - ; bases + @i base ! 1 /string - ; else - ; drop - ; then ; - .include "words/to-number.asm" - - ; Numeric IO - ; convert a string to a number c-addr2/u2 is the unconverted string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO_NUMBER: -00056a ff07 .dw $ff07 -00056b 6e3e -00056c 6d75 -00056d 6562 -00056e 0072 .db ">number",0 -00056f 04f6 .dw VE_HEAD - .set VE_HEAD = VE_TO_NUMBER - XT_TO_NUMBER: -000570 3801 .dw DO_COLON - - .endif - -000571 38b1 -000572 3836 TONUM1: .DW XT_DUP,XT_DOCONDBRANCH -000573 0588 DEST(TONUM3) -000574 38cf -000575 3898 -000576 03b6 .DW XT_OVER,XT_CFETCH,XT_DIGITQ -000577 391a -000578 3836 .DW XT_ZEROEQUAL,XT_DOCONDBRANCH -000579 057c DEST(TONUM2) -00057a 38d9 -00057b 3820 .DW XT_DROP,XT_EXIT -00057c 38ff -00057d 0257 -00057e 3ebd -00057f 3879 -000580 014b TONUM2: .DW XT_TO_R,XT_2SWAP,XT_BASE,XT_FETCH,XT_UDSTAR -000581 38f6 -000582 0143 -000583 0257 .DW XT_R_FROM,XT_MPLUS,XT_2SWAP -000584 3fe6 -000585 05ac -000586 382f .DW XT_ONE,XT_SLASHSTRING,XT_DOBRANCH -000587 0571 DEST(TONUM1) -000588 3820 TONUM3: .DW XT_EXIT - - ;C >NUMBER ud adr u -- ud' adr' u' - ;C convert string to number - ; BEGIN - ; DUP WHILE - ; OVER C@ DIGIT? - ; 0= IF DROP EXIT THEN - ; >R 2SWAP BASE @ UD* - ; R> M+ 2SWAP - ; 1 /STRING - ; REPEAT ; - .include "words/parse.asm" - - ; String - ; in input buffer parse ccc delimited string by the delimiter char. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PARSE: -000589 ff05 .dw $ff05 -00058a 6170 -00058b 7372 -00058c 0065 .db "parse",0 -00058d 056a .dw VE_HEAD - .set VE_HEAD = VE_PARSE - XT_PARSE: -00058e 3801 .dw DO_COLON - PFA_PARSE: - .endif -00058f 38ff .dw XT_TO_R ; ( -- ) -000590 05a2 .dw XT_SOURCE ; ( -- addr len) -000591 3ee2 .dw XT_TO_IN ; ( -- addr len >in) -000592 3879 .dw XT_FETCH -000593 05ac .dw XT_SLASHSTRING ; ( -- addr' len' ) - -000594 38f6 .dw XT_R_FROM ; ( -- addr' len' c) -000595 0478 .dw XT_CSCAN ; ( -- addr' len'') -000596 38b1 .dw XT_DUP ; ( -- addr' len'' len'') -000597 3a2f .dw XT_1PLUS -000598 3ee2 .dw XT_TO_IN ; ( -- addr' len'' len'' >in) -000599 3a65 .dw XT_PLUSSTORE ; ( -- addr' len') -00059a 3fe6 .dw XT_ONE -00059b 05ac .dw XT_SLASHSTRING -00059c 3820 .dw XT_EXIT - .include "words/source.asm" - - ; System - ; address and current length of the input buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SOURCE: -00059d ff06 .dw $FF06 -00059e 6f73 -00059f 7275 -0005a0 6563 .db "source" -0005a1 0589 .dw VE_HEAD - .set VE_HEAD = VE_SOURCE - XT_SOURCE: -0005a2 3dff .dw PFA_DODEFER1 - PFA_SOURCE: - .endif -0005a3 0016 .dw USER_SOURCE -0005a4 3dc8 .dw XT_UDEFERFETCH -0005a5 3dd4 .dw XT_UDEFERSTORE - - - .include "words/slash-string.asm" - - ; String - ; adjust string from addr1 to addr1+n, reduce length from u1 to u2 by n - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SLASHSTRING: -0005a6 ff07 .dw $ff07 -0005a7 732f -0005a8 7274 -0005a9 6e69 -0005aa 0067 .db "/string",0 -0005ab 059d .dw VE_HEAD - .set VE_HEAD = VE_SLASHSTRING - XT_SLASHSTRING: -0005ac 3801 .dw DO_COLON - PFA_SLASHSTRING: - .endif -0005ad 38e1 .dw XT_ROT -0005ae 38cf .dw XT_OVER -0005af 399d .dw XT_PLUS -0005b0 38e1 .dw XT_ROT -0005b1 38e1 .dw XT_ROT -0005b2 3993 .dw XT_MINUS -0005b3 3820 .dw XT_EXIT - - .include "words/parse-name.asm" - - ; String - ; In the SOURCE buffer parse whitespace delimited string. Returns string address within SOURCE. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_PARSENAME: -0005b4 ff0a .dw $FF0A -0005b5 6170 -0005b6 7372 -0005b7 2d65 -0005b8 616e -0005b9 656d .db "parse-name" -0005ba 05a6 .dw VE_HEAD - .set VE_HEAD = VE_PARSENAME - XT_PARSENAME: -0005bb 3801 .dw DO_COLON - PFA_PARSENAME: - .endif -0005bc 3f54 .dw XT_BL -0005bd 05bf .dw XT_SKIPSCANCHAR -0005be 3820 .dw XT_EXIT - - ; ( c -- addr2 len2 ) - ; String - ; skips char and scan what's left in source for char - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_SKIPSCANCHAR: - ; .dw $FF0A - ; .db "skipscanchar" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_SKIPSCANCHAR - XT_SKIPSCANCHAR: -0005bf 3801 .dw DO_COLON - PFA_SKIPSCANCHAR: - .endif -0005c0 38ff .dw XT_TO_R -0005c1 05a2 .dw XT_SOURCE -0005c2 3ee2 .dw XT_TO_IN -0005c3 3879 .dw XT_FETCH -0005c4 05ac .dw XT_SLASHSTRING - -0005c5 3908 .dw XT_R_FETCH -0005c6 0461 .dw XT_CSKIP -0005c7 38f6 .dw XT_R_FROM -0005c8 0478 .dw XT_CSCAN - - ; adjust >IN -0005c9 3ec9 .dw XT_2DUP -0005ca 399d .dw XT_PLUS -0005cb 05a2 .dw XT_SOURCE -0005cc 38d9 .dw XT_DROP -0005cd 3993 .dw XT_MINUS -0005ce 3ee2 .dw XT_TO_IN -0005cf 3881 .dw XT_STORE -0005d0 3820 .dw XT_EXIT - .include "words/sp0.asm" - - ; Stack - ; start address of the data stack - VE_SP0: -0005d1 ff03 .dw $ff03 -0005d2 7073 -0005d3 0030 .db "sp0",0 -0005d4 05b4 .dw VE_HEAD - .set VE_HEAD = VE_SP0 - XT_SP0: -0005d5 386f .dw PFA_DOVALUE1 - PFA_SP0: -0005d6 0006 .dw USER_SP0 -0005d7 3dc8 .dw XT_UDEFERFETCH -0005d8 3dd4 .dw XT_UDEFERSTORE - - ; ( -- addr) - ; Stack - ; address of user variable to store top-of-stack for inactive tasks - VE_SP: -0005d9 ff02 .dw $ff02 -0005da 7073 .db "sp" -0005db 05d1 .dw VE_HEAD - .set VE_HEAD = VE_SP - XT_SP: -0005dc 3858 .dw PFA_DOUSER - PFA_SP: -0005dd 0008 .dw USER_SP - .include "words/rp0.asm" - - ; Stack - ; start address of return stack - VE_RP0: -0005de ff03 .dw $ff03 -0005df 7072 -0005e0 0030 .db "rp0",0 -0005e1 05d9 .dw VE_HEAD - .set VE_HEAD = VE_RP0 - XT_RP0: -0005e2 3801 .dw DO_COLON - PFA_RP0: -0005e3 05e6 .dw XT_DORP0 -0005e4 3879 .dw XT_FETCH -0005e5 3820 .dw XT_EXIT - - ; ( -- addr) - ; Stack - ; user variable of the address of the initial return stack - ;VE_DORP0: - ; .dw $ff05 - ; .db "(rp0)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DORP0 - XT_DORP0: -0005e6 3858 .dw PFA_DOUSER - PFA_DORP0: -0005e7 0004 .dw USER_RP - .include "words/depth.asm" - - ; Stack - ; number of single-cell values contained in the data stack before n was placed on the stack. - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DEPTH: -0005e8 ff05 .dw $ff05 -0005e9 6564 -0005ea 7470 -0005eb 0068 .db "depth",0 -0005ec 05de .dw VE_HEAD - .set VE_HEAD = VE_DEPTH - XT_DEPTH: -0005ed 3801 .dw DO_COLON - PFA_DEPTH: - .endif -0005ee 05d5 .dw XT_SP0 -0005ef 3a8d .dw XT_SP_FETCH -0005f0 3993 .dw XT_MINUS -0005f1 3a04 .dw XT_2SLASH -0005f2 3a35 .dw XT_1MINUS -0005f3 3820 .dw XT_EXIT - .include "words/forth-recognizer.asm" - - ; System Value - ; address of the next free data space (RAM) cell - VE_FORTHRECOGNIZER: -0005f4 ff10 .dw $ff10 -0005f5 6f66 -0005f6 7472 -0005f7 2d68 -0005f8 6572 -0005f9 6f63 -0005fa 6e67 -0005fb 7a69 -0005fc 7265 .db "forth-recognizer" -0005fd 05e8 .dw VE_HEAD - .set VE_HEAD = VE_FORTHRECOGNIZER - XT_FORTHRECOGNIZER: -0005fe 386f .dw PFA_DOVALUE1 - PFA_FORTHRECOGNIZER: -0005ff 003e .dw CFG_FORTHRECOGNIZER -000600 3da0 .dw XT_EDEFERFETCH -000601 3daa .dw XT_EDEFERSTORE - .include "words/recognize.asm" - - ; System - ; walk the recognizer stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RECOGNIZE: -000602 ff09 .dw $ff09 -000603 6572 -000604 6f63 -000605 6e67 -000606 7a69 -000607 0065 .db "recognize",0 -000608 05f4 .dw VE_HEAD - .set VE_HEAD = VE_RECOGNIZE - XT_RECOGNIZE: -000609 3801 .dw DO_COLON - PFA_RECOGNIZE: - .endif -00060a 383d .dw XT_DOLITERAL -00060b 0614 .dw XT_RECOGNIZE_A -00060c 38c4 .dw XT_SWAP -00060d 09a7 .dw XT_MAPSTACK -00060e 391a .dw XT_ZEROEQUAL -00060f 3836 .dw XT_DOCONDBRANCH -000610 0613 DEST(PFA_RECOGNIZE1) -000611 3ed2 .dw XT_2DROP -000612 0696 .dw XT_DT_NULL - PFA_RECOGNIZE1: -000613 3820 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ; ( addr len XT -- addr len [ dt:xt -1 | 0 ] ) - XT_RECOGNIZE_A: -000614 3801 .dw DO_COLON - PFA_RECOGNIZE_A: - .endif -000615 38e1 .dw XT_ROT ; -- len xt addr -000616 38e1 .dw XT_ROT ; -- xt addr len -000617 3ec9 .dw XT_2DUP -000618 3b1e .dw XT_2TO_R -000619 38e1 .dw XT_ROT ; -- addr len xt -00061a 382a .dw XT_EXECUTE ; -- i*x dt:* | dt:null -00061b 3b2d .dw XT_2R_FROM -00061c 38e1 .dw XT_ROT -00061d 38b1 .dw XT_DUP -00061e 0696 .dw XT_DT_NULL -00061f 3fdf .dw XT_EQUAL -000620 3836 .dw XT_DOCONDBRANCH -000621 0625 DEST(PFA_RECOGNIZE_A1) -000622 38d9 .dw XT_DROP -000623 3954 .dw XT_ZERO -000624 3820 .dw XT_EXIT - PFA_RECOGNIZE_A1: -000625 38f0 .dw XT_NIP -000626 38f0 .dw XT_NIP -000627 394b .dw XT_TRUE -000628 3820 .dw XT_EXIT - - ; : recognize ( addr len stack-id -- i*x dt:* | dt:null ) - ; [: ( addr len -- addr len 0 | i*x dt:* -1 ) - ; rot rot 2dup 2>r rot execute 2r> rot - ; dup dt:null = ( -- addr len dt:* f ) - ; if drop 0 else nip nip -1 then - ; ;] - ; map-stack ( -- i*x addr len dt:* f ) - ; 0= if \ a recognizer did the job, remove addr/len - ; 2drop dt:null - ; then ; - ; - .include "words/interpret.asm" - - ; System - ; Interpret SOURCE word by word. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_INTERPRET: -000629 ff09 .dw $ff09 -00062a 6e69 -00062b 6574 -00062c 7072 -00062d 6572 -00062e 0074 .db "interpret",0 -00062f 0602 .dw VE_HEAD - .set VE_HEAD = VE_INTERPRET - XT_INTERPRET: -000630 3801 .dw DO_COLON - .endif - PFA_INTERPRET: -000631 05bb .dw XT_PARSENAME ; ( -- addr len ) -000632 38b1 .dw XT_DUP ; ( -- addr len flag) -000633 3836 .dw XT_DOCONDBRANCH -000634 0641 DEST(PFA_INTERPRET2) -000635 05fe .dw XT_FORTHRECOGNIZER -000636 0609 .dw XT_RECOGNIZE -000637 3eb7 .dw XT_STATE -000638 3879 .dw XT_FETCH -000639 3836 .dw XT_DOCONDBRANCH -00063a 063c DEST(PFA_INTERPRET1) -00063b 01d1 .dw XT_ICELLPLUS ; we need the compile action - PFA_INTERPRET1: -00063c 3bcb .dw XT_FETCHI -00063d 382a .dw XT_EXECUTE -00063e 3f8b .dw XT_QSTACK -00063f 382f .dw XT_DOBRANCH -000640 0631 DEST(PFA_INTERPRET) - PFA_INTERPRET2: -000641 3ed2 .dw XT_2DROP -000642 3820 .dw XT_EXIT - .include "words/rec-intnum.asm" - - ; Interpreter - ; Method table for single cell integers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_NUM: -000643 ff06 .dw $ff06 -000644 7464 -000645 6e3a -000646 6d75 .db "dt:num" -000647 0629 .dw VE_HEAD - .set VE_HEAD = VE_DT_NUM - XT_DT_NUM: -000648 3852 .dw PFA_DOCONSTANT - PFA_DT_NUM: - .endif -000649 01a5 .dw XT_NOOP ; interpret -00064a 077d .dw XT_LITERAL ; compile -00064b 077d .dw XT_LITERAL ; postpone - - ; ( -- addr ) - ; Interpreter - ; Method table for double cell integers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_DNUM: -00064c ff07 .dw $ff07 -00064d 7464 -00064e 643a -00064f 756e -000650 006d .db "dt:dnum",0 -000651 0643 .dw VE_HEAD - .set VE_HEAD = VE_DT_DNUM - XT_DT_DNUM: -000652 3852 .dw PFA_DOCONSTANT - PFA_DT_DNUM: - .endif -000653 01a5 .dw XT_NOOP ; interpret -000654 3fd7 .dw XT_2LITERAL ; compile -000655 3fd7 .dw XT_2LITERAL ; postpone - - ; ( addr len -- f ) - ; Interpreter - ; recognizer for integer numbers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_REC_NUM: -000656 ff07 .dw $ff07 -000657 6572 -000658 3a63 -000659 756e -00065a 006d .db "rec:num",0 -00065b 064c .dw VE_HEAD - .set VE_HEAD = VE_REC_NUM - XT_REC_NUM: -00065c 3801 .dw DO_COLON - PFA_REC_NUM: - .endif - ; try converting to a number -00065d 04fb .dw XT_NUMBER -00065e 3836 .dw XT_DOCONDBRANCH -00065f 0668 DEST(PFA_REC_NONUMBER) -000660 3fe6 .dw XT_ONE -000661 3fdf .dw XT_EQUAL -000662 3836 .dw XT_DOCONDBRANCH -000663 0666 DEST(PFA_REC_INTNUM2) -000664 0648 .dw XT_DT_NUM -000665 3820 .dw XT_EXIT - PFA_REC_INTNUM2: -000666 0652 .dw XT_DT_DNUM -000667 3820 .dw XT_EXIT - PFA_REC_NONUMBER: -000668 0696 .dw XT_DT_NULL -000669 3820 .dw XT_EXIT - .include "words/rec-find.asm" - - ; Interpreter - ; search for a word - .if cpu_msp430==1 - .endif - .if cpu_avr8==1 - VE_REC_FIND: -00066a ff08 .dw $ff08 -00066b 6572 -00066c 3a63 -00066d 6966 -00066e 646e .db "rec:find" -00066f 0656 .dw VE_HEAD - .set VE_HEAD = VE_REC_FIND - XT_REC_FIND: -000670 3801 .dw DO_COLON - PFA_REC_FIND: - .endif -000671 070b .DW XT_FINDXT -000672 38b1 .dw XT_DUP -000673 391a .dw XT_ZEROEQUAL -000674 3836 .dw XT_DOCONDBRANCH -000675 0679 DEST(PFA_REC_WORD_FOUND) -000676 38d9 .dw XT_DROP -000677 0696 .dw XT_DT_NULL -000678 3820 .dw XT_EXIT - PFA_REC_WORD_FOUND: -000679 0680 .dw XT_DT_XT - -00067a 3820 .dw XT_EXIT - - ; ( -- addr ) - ; Interpreter - ; actions to handle execution tokens and their flags - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_XT: -00067b ff05 .dw $ff05 -00067c 7464 -00067d 783a -00067e 0074 .db "dt:xt",0 -00067f 066a .dw VE_HEAD - .set VE_HEAD = VE_DT_XT - XT_DT_XT: -000680 3852 .dw PFA_DOCONSTANT - PFA_DT_XT: - .endif -000681 0684 .dw XT_R_WORD_INTERPRET -000682 0688 .dw XT_R_WORD_COMPILE -000683 3fd7 .dw XT_2LITERAL - - ; ( XT flags -- ) - ; Interpreter - ; interpret method for WORD recognizer - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_R_WORD_INTERPRET: -000684 3801 .dw DO_COLON - PFA_R_WORD_INTERPRET: - .endif -000685 38d9 .dw XT_DROP ; the flags are in the way -000686 382a .dw XT_EXECUTE -000687 3820 .dw XT_EXIT - - ; ( XT flags -- ) - ; Interpreter - ; Compile method for WORD recognizer - .if cpu_msp430==1 - .endif - .if cpu_avr8==1 - XT_R_WORD_COMPILE: -000688 3801 .dw DO_COLON - PFA_R_WORD_COMPILE: - .endif -000689 3921 .dw XT_ZEROLESS -00068a 3836 .dw XT_DOCONDBRANCH -00068b 068e DEST(PFA_R_WORD_COMPILE1) -00068c 0767 .dw XT_COMMA -00068d 3820 .dw XT_EXIT - PFA_R_WORD_COMPILE1: -00068e 382a .dw XT_EXECUTE -00068f 3820 .dw XT_EXIT - .include "words/dt-null.asm" - - ; Interpreter - ; there is no parser for this recognizer, this is the default and failsafe part - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_NULL: -000690 ff07 .dw $ff07 -000691 7464 -000692 6e3a -000693 6c75 -../../common\words/dt-null.asm(12): warning: .cseg .db misalignment - padding zero byte -000694 006c .db "dt:null" -000695 067b .dw VE_HEAD - .set VE_HEAD = VE_DT_NULL - XT_DT_NULL: -000696 3852 .dw PFA_DOCONSTANT - PFA_DT_NULL: - .endif -000697 069a .dw XT_FAIL ; interpret -000698 069a .dw XT_FAIL ; compile -000699 069a .dw XT_FAIL ; postpone - - ; ( addr len -- ) - ; Interpreter - ; default failure action: throw exception -13. - .if cpu_msp430==1 - .endif - .if cpu_avr8==1 - ;VE_FAIL: - ; .dw $ff04 - ; .db "fail" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_FAIL - XT_FAIL: -00069a 3801 .dw DO_COLON - PFA_FAIL: - .endif -00069b 383d .dw XT_DOLITERAL -00069c fff3 .dw -13 -00069d 3d86 .dw XT_THROW - .include "words/search-wordlist.asm" - - ; Search Order - ; searches the word list wid for the word at c-addr/len - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SEARCH_WORDLIST: -00069e ff0f .dw $ff0f -00069f 6573 -0006a0 7261 -0006a1 6863 -0006a2 772d -0006a3 726f -0006a4 6c64 -0006a5 7369 -0006a6 0074 .db "search-wordlist",0 -0006a7 0690 .dw VE_HEAD - .set VE_HEAD = VE_SEARCH_WORDLIST - XT_SEARCH_WORDLIST: -0006a8 3801 .dw DO_COLON - PFA_SEARCH_WORDLIST: - .endif -0006a9 38ff .dw XT_TO_R -0006aa 3954 .dw XT_ZERO -0006ab 383d .dw XT_DOLITERAL -0006ac 06bd .dw XT_ISWORD -0006ad 38f6 .dw XT_R_FROM -0006ae 06da .dw XT_TRAVERSEWORDLIST -0006af 38b1 .dw XT_DUP -0006b0 391a .dw XT_ZEROEQUAL -0006b1 3836 .dw XT_DOCONDBRANCH -0006b2 06b7 DEST(PFA_SEARCH_WORDLIST1) -0006b3 3ed2 .dw XT_2DROP -0006b4 38d9 .dw XT_DROP -0006b5 3954 .dw XT_ZERO -0006b6 3820 .dw XT_EXIT - PFA_SEARCH_WORDLIST1: - ; ... get the XT ... -0006b7 38b1 .dw XT_DUP -0006b8 0701 .dw XT_NFA2CFA - ; .. and get the header flag -0006b9 38c4 .dw XT_SWAP -0006ba 0180 .dw XT_NAME2FLAGS -0006bb 016e .dw XT_IMMEDIATEQ -0006bc 3820 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_ISWORD: -0006bd 3801 .dw DO_COLON - PFA_ISWORD: - .endif - ; ( c-addr len 0 nt -- c-addr len 0 true| nt false ) -0006be 38ff .dw XT_TO_R -0006bf 38d9 .dw XT_DROP -0006c0 3ec9 .dw XT_2DUP -0006c1 3908 .dw XT_R_FETCH ; -- addr len addr len nt -0006c2 06f5 .dw XT_NAME2STRING -0006c3 01da .dw XT_ICOMPARE ; (-- addr len f ) -0006c4 3836 .dw XT_DOCONDBRANCH -0006c5 06cb DEST(PFA_ISWORD3) - ; not now -0006c6 38f6 .dw XT_R_FROM -0006c7 38d9 .dw XT_DROP -0006c8 3954 .dw XT_ZERO -0006c9 394b .dw XT_TRUE ; maybe next word -0006ca 3820 .dw XT_EXIT - PFA_ISWORD3: - ; we found the word, now clean up iteration data ... -0006cb 3ed2 .dw XT_2DROP -0006cc 38f6 .dw XT_R_FROM -0006cd 3954 .dw XT_ZERO ; finish traverse-wordlist -0006ce 3820 .dw XT_EXIT - .include "words/traverse-wordlist.asm" - - ; Tools Ext (2012) - ; call the xt for every member of the wordlist wid until xt returns false - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TRAVERSEWORDLIST: -0006cf ff11 .dw $ff11 -0006d0 7274 -0006d1 7661 -0006d2 7265 -0006d3 6573 -0006d4 772d -0006d5 726f -0006d6 6c64 -0006d7 7369 -0006d8 0074 .db "traverse-wordlist",0 -0006d9 069e .dw VE_HEAD - .set VE_HEAD = VE_TRAVERSEWORDLIST - XT_TRAVERSEWORDLIST: -0006da 3801 .dw DO_COLON - PFA_TRAVERSEWORDLIST: - - .endif -0006db 3b5f .dw XT_FETCHE - PFA_TRAVERSEWORDLIST1: -0006dc 38b1 .dw XT_DUP ; ( -- xt nt nt ) -0006dd 3836 .dw XT_DOCONDBRANCH ; ( -- nt ) is nfa = counted string -0006de 06eb DEST(PFA_TRAVERSEWORDLIST2) -0006df 3ec9 .dw XT_2DUP -0006e0 3b1e .dw XT_2TO_R -0006e1 38c4 .dw XT_SWAP -0006e2 382a .dw XT_EXECUTE -0006e3 3b2d .dw XT_2R_FROM -0006e4 38e1 .dw XT_ROT -0006e5 3836 .dw XT_DOCONDBRANCH -0006e6 06eb DEST(PFA_TRAVERSEWORDLIST2) -0006e7 0a16 .dw XT_NFA2LFA -0006e8 3bcb .dw XT_FETCHI -0006e9 382f .dw XT_DOBRANCH ; ( -- addr ) -0006ea 06dc DEST(PFA_TRAVERSEWORDLIST1) ; ( -- addr ) - PFA_TRAVERSEWORDLIST2: -0006eb 3ed2 .dw XT_2DROP -0006ec 3820 .dw XT_EXIT - - ; : traverse-wordlist ( i*x xt wid -- i*x' ) - ; begin @ dup - ; while - ; 2dup 2>r - ; swap execute ( i*x nt -- i*x' f ) - ; 2r> rot - ; while - ; nfa>lfa @i - ; repeat then 2drop ; - .include "words/name2string.asm" - - ; Tools Ext (2012) - ; get a (flash) string from a name token nt - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NAME2STRING: -0006ed ff0b .dw $ff0b -0006ee 616e -0006ef 656d -0006f0 733e -0006f1 7274 -0006f2 6e69 -0006f3 0067 .db "name>string",0 -0006f4 06cf .dw VE_HEAD - .set VE_HEAD = VE_NAME2STRING - XT_NAME2STRING: -0006f5 3801 .dw DO_COLON - PFA_NAME2STRING: - - .endif -0006f6 042f .dw XT_ICOUNT ; ( -- addr n ) -0006f7 383d .dw XT_DOLITERAL -0006f8 00ff .dw 255 -0006f9 3a13 .dw XT_AND ; mask immediate bit -0006fa 3820 .dw XT_EXIT - .include "words/nfa2cfa.asm" - - ; Tools - ; get the XT from a name token - VE_NFA2CFA: -0006fb ff07 .dw $ff07 -0006fc 666e -0006fd 3e61 -0006fe 6663 -../../avr8\words/nfa2cfa.asm(6): warning: .cseg .db misalignment - padding zero byte -0006ff 0061 .db "nfa>cfa" -000700 06ed .dw VE_HEAD - .set VE_HEAD = VE_NFA2CFA - XT_NFA2CFA: -000701 3801 .dw DO_COLON - PFA_NFA2CFA: -000702 0a16 .dw XT_NFA2LFA ; skip to link field -000703 3a2f .dw XT_1PLUS ; next is the execution token -000704 3820 .dw XT_EXIT - .include "words/find-xt.asm" - - ; Tools - ; search wordlists for an entry with the xt from c-addr/len - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_FINDXT: -000705 ff07 .dw $ff07 -000706 6966 -000707 646e -000708 782d -000709 0074 .db "find-xt",0 -00070a 06fb .dw VE_HEAD - .set VE_HEAD = VE_FINDXT - XT_FINDXT: -00070b 3801 .dw DO_COLON - PFA_FINDXT: - .endif -00070c 383d .dw XT_DOLITERAL -00070d 0717 .dw XT_FINDXTA -00070e 383d .dw XT_DOLITERAL -00070f 004a .dw CFG_ORDERLISTLEN -000710 09a7 .dw XT_MAPSTACK -000711 391a .dw XT_ZEROEQUAL -000712 3836 .dw XT_DOCONDBRANCH -000713 0716 DEST(PFA_FINDXT1) -000714 3ed2 .dw XT_2DROP -000715 3954 .dw XT_ZERO - PFA_FINDXT1: -000716 3820 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - XT_FINDXTA: -000717 3801 .dw DO_COLON - PFA_FINDXTA: - .endif -000718 38ff .dw XT_TO_R -000719 3ec9 .dw XT_2DUP -00071a 38f6 .dw XT_R_FROM -00071b 06a8 .dw XT_SEARCH_WORDLIST -00071c 38b1 .dw XT_DUP -00071d 3836 .dw XT_DOCONDBRANCH -00071e 0724 DEST(PFA_FINDXTA1) -00071f 38ff .dw XT_TO_R -000720 38f0 .dw XT_NIP -000721 38f0 .dw XT_NIP -000722 38f6 .dw XT_R_FROM -000723 394b .dw XT_TRUE - PFA_FINDXTA1: -000724 3820 .dw XT_EXIT - - .include "dict/compiler1.inc" - - .include "words/newest.asm" - - ; System Variable - ; system state - VE_NEWEST: -000725 ff06 .dw $ff06 -000726 656e -000727 6577 -000728 7473 .db "newest" -000729 0705 .dw VE_HEAD - .set VE_HEAD = VE_NEWEST - XT_NEWEST: -00072a 3848 .dw PFA_DOVARIABLE - PFA_NEWEST: -00072b 018a .dw ram_newest - - .dseg -00018a ram_newest: .byte 4 - .include "words/latest.asm" - - ; System Variable - ; system state - VE_LATEST: -00072c ff06 .dw $ff06 -00072d 616c -00072e 6574 -00072f 7473 .db "latest" -000730 0725 .dw VE_HEAD - .set VE_HEAD = VE_LATEST - XT_LATEST: -000731 3848 .dw PFA_DOVARIABLE - PFA_LATEST: -000732 018e .dw ram_latest - - .dseg -00018e ram_latest: .byte 2 - .include "words/do-create.asm" - - ; Compiler - ; parse the input and create an empty vocabulary entry without XT and data field (PF) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOCREATE: -000733 ff08 .dw $ff08 -000734 6328 -000735 6572 -000736 7461 -000737 2965 .db "(create)" -000738 072c .dw VE_HEAD - .set VE_HEAD = VE_DOCREATE - XT_DOCREATE: -000739 3801 .dw DO_COLON - PFA_DOCREATE: - .endif -00073a 05bb -00073b 0890 .DW XT_PARSENAME,XT_WLSCOPE ; ( -- addr len wid) -00073c 38b1 -00073d 072a -00073e 3c90 -00073f 3881 .DW XT_DUP,XT_NEWEST,XT_CELLPLUS,XT_STORE ; save the wid -000740 0875 -000741 072a -000742 3881 .DW XT_HEADER,XT_NEWEST,XT_STORE ; save the nt -000743 3820 .DW XT_EXIT - .include "words/backslash.asm" - - ; Compiler - ; everything up to the end of the current line is a comment - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BACKSLASH: -000744 0001 .dw $0001 -000745 005c .db $5c,0 -000746 0733 .dw VE_HEAD - .set VE_HEAD = VE_BACKSLASH - XT_BACKSLASH: -000747 3801 .dw DO_COLON - PFA_BACKSLASH: - .endif -000748 05a2 .dw XT_SOURCE -000749 38f0 .dw XT_NIP -00074a 3ee2 .dw XT_TO_IN -00074b 3881 .dw XT_STORE -00074c 3820 .dw XT_EXIT - .include "words/l-paren.asm" - - ; Compiler - ; skip everything up to the closing bracket on the same line - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_LPAREN: -00074d 0001 .dw $0001 -00074e 0028 .db "(" ,0 -00074f 0744 .dw VE_HEAD - .set VE_HEAD = VE_LPAREN - XT_LPAREN: -000750 3801 .dw DO_COLON - PFA_LPAREN: - .endif -000751 383d .dw XT_DOLITERAL -000752 0029 .dw ')' -000753 058e .dw XT_PARSE -000754 3ed2 .dw XT_2DROP -000755 3820 .dw XT_EXIT - - .include "words/compile.asm" - - ; Dictionary - ; read the following cell from the dictionary and append it to the current dictionary position. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_COMPILE: -000756 ff07 .dw $ff07 -000757 6f63 -000758 706d -000759 6c69 -00075a 0065 .db "compile",0 -00075b 074d .dw VE_HEAD - .set VE_HEAD = VE_COMPILE - XT_COMPILE: -00075c 3801 .dw DO_COLON - PFA_COMPILE: - .endif -00075d 38f6 .dw XT_R_FROM -00075e 38b1 .dw XT_DUP -00075f 01d1 .dw XT_ICELLPLUS -000760 38ff .dw XT_TO_R -000761 3bcb .dw XT_FETCHI -000762 0767 .dw XT_COMMA -000763 3820 .dw XT_EXIT - .include "words/comma.asm" - - ; Dictionary - ; compile 16 bit into flash at DP - VE_COMMA: -000764 ff01 .dw $ff01 -000765 002c .db ',',0 ; , -000766 0756 .dw VE_HEAD - .set VE_HEAD = VE_COMMA - XT_COMMA: -000767 3801 .dw DO_COLON - PFA_COMMA: -000768 3f12 .dw XT_DP -000769 3b73 .dw XT_STOREI -00076a 3f12 .dw XT_DP -00076b 3a2f .dw XT_1PLUS -00076c 01bf .dw XT_DOTO -00076d 3f13 .dw PFA_DP -00076e 3820 .dw XT_EXIT - .include "words/brackettick.asm" - - ; Compiler - ; what ' does in the interpreter mode, do in colon definitions - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BRACKETTICK: -00076f 0003 .dw $0003 -000770 275b -000771 005d .db "[']",0 -000772 0764 .dw VE_HEAD - .set VE_HEAD = VE_BRACKETTICK - XT_BRACKETTICK: -000773 3801 .dw DO_COLON - PFA_BRACKETTICK: - .endif -000774 0448 .dw XT_TICK -000775 077d .dw XT_LITERAL -000776 3820 .dw XT_EXIT - - - .include "words/literal.asm" - - ; Compiler - ; compile a literal in colon defintions - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_LITERAL: -000777 0007 .dw $0007 -000778 696c -000779 6574 -00077a 6172 -00077b 006c .db "literal",0 -00077c 076f .dw VE_HEAD - .set VE_HEAD = VE_LITERAL - XT_LITERAL: -00077d 3801 .dw DO_COLON - PFA_LITERAL: - .endif -00077e 075c .DW XT_COMPILE -00077f 383d .DW XT_DOLITERAL -000780 0767 .DW XT_COMMA -000781 3820 .DW XT_EXIT - .include "words/sliteral.asm" - - ; String - ; compiles a string to flash, at runtime leaves ( -- flash-addr count) on stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SLITERAL: -000782 0008 .dw $0008 -000783 6c73 -000784 7469 -000785 7265 -000786 6c61 .db "sliteral" -000787 0777 .dw VE_HEAD - .set VE_HEAD = VE_SLITERAL - XT_SLITERAL: -000788 3801 .dw DO_COLON - PFA_SLITERAL: - .endif -000789 075c .dw XT_COMPILE -00078a 03d0 .dw XT_DOSLITERAL ; ( -- addr n) -00078b 03de .dw XT_SCOMMA -00078c 3820 .dw XT_EXIT - .include "words/g-mark.asm" - - ; Compiler - ; places current dictionary position for backward resolves - ;VE_GMARK: - ; .dw $ff05 - ; .db ">mark" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_GMARK - XT_GMARK: -00078d 3801 .dw DO_COLON - PFA_GMARK: -00078e 3f12 .dw XT_DP -00078f 075c .dw XT_COMPILE -000790 ffff .dw -1 ; ffff does not erase flash -000791 3820 .dw XT_EXIT - .include "words/g-resolve.asm" - - ; Compiler - ; resolve backward jumps - ;VE_GRESOLVE: - ; .dw $ff08 - ; .db ">resolve" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_GRESOLVE - XT_GRESOLVE: -000792 3801 .dw DO_COLON - PFA_GRESOLVE: -000793 3f8b .dw XT_QSTACK -000794 3f12 .dw XT_DP -000795 38c4 .dw XT_SWAP -000796 3b73 .dw XT_STOREI -000797 3820 .dw XT_EXIT - .include "words/l_mark.asm" - - ; Compiler - ; place destination for backward branch - ;VE_LMARK: - ; .dw $ff05 - ; .db "r if 2drop then r> invert ; - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_QDOCHECK: -000826 3801 .dw DO_COLON - PFA_QDOCHECK: - .endif -000827 3ec9 .dw XT_2DUP -000828 3fdf .dw XT_EQUAL -000829 38b1 .dw XT_DUP -00082a 38ff .dw XT_TO_R -00082b 3836 .dw XT_DOCONDBRANCH -00082c 082e DEST(PFA_QDOCHECK1) -00082d 3ed2 .dw XT_2DROP - PFA_QDOCHECK1: -00082e 38f6 .dw XT_R_FROM -00082f 39fd .dw XT_INVERT -000830 3820 .dw XT_EXIT - .include "words/endloop.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENDLOOP: -000831 ff07 .dw $ff07 -000832 6e65 -000833 6c64 -000834 6f6f -000835 0070 .db "endloop",0 -000836 081a .dw VE_HEAD - .set VE_HEAD = VE_ENDLOOP - XT_ENDLOOP: -000837 3801 .dw DO_COLON - PFA_ENDLOOP: - .endif - ;Z ENDLOOP adrs xt -- L: 0 a1 a2 .. aN -- - ; ?DUP WHILE POSTPONE THEN REPEAT ; - ; resolve LEAVEs - ; This is a common factor of LOOP and +LOOP. - -000838 079b .DW XT_LRESOLVE -000839 0844 -00083a 38b9 -00083b 3836 LOOP1: .DW XT_L_FROM,XT_QDUP,XT_DOCONDBRANCH -00083c 0840 DEST(LOOP2) -00083d 07c0 .DW XT_THEN -00083e 382f .dw XT_DOBRANCH -00083f 0839 DEST(LOOP1) -000840 3820 LOOP2: .DW XT_EXIT - ; leave address stack - .include "words/l-from.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_L_FROM: -000841 ff02 .dw $ff02 -000842 3e6c .db "l>" -000843 0831 .dw VE_HEAD - .set VE_HEAD = VE_L_FROM - XT_L_FROM: -000844 3801 .dw DO_COLON - PFA_L_FROM: - - .endif - ;Z L> -- x L: x -- move from leave stack - ; LP @ @ -2 LP +! ; - -000845 0863 .dw XT_LP -000846 3879 .dw XT_FETCH -000847 3879 .dw XT_FETCH -000848 383d .dw XT_DOLITERAL -000849 fffe .dw -2 -00084a 0863 .dw XT_LP -00084b 3a65 .dw XT_PLUSSTORE -00084c 3820 .dw XT_EXIT - .include "words/to-l.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO_L: -00084d ff02 .dw $ff02 -00084e 6c3e .db ">l" -00084f 0841 .dw VE_HEAD - .set VE_HEAD = VE_TO_L - XT_TO_L: -000850 3801 .dw DO_COLON - PFA_TO_L: - .endif - ;Z >L x -- L: -- x move to leave stack - ; CELL LP +! LP @ ! ; (L stack grows up) - -000851 3feb .dw XT_TWO -000852 0863 .dw XT_LP -000853 3a65 .dw XT_PLUSSTORE -000854 0863 .dw XT_LP -000855 3879 .dw XT_FETCH -000856 3881 .dw XT_STORE -000857 3820 .dw XT_EXIT - .include "words/lp0.asm" - - ; Stack - ; start address of leave stack - VE_LP0: -000858 ff03 .dw $ff03 -000859 706c -00085a 0030 .db "lp0",0 -00085b 084d .dw VE_HEAD - .set VE_HEAD = VE_LP0 - XT_LP0: -00085c 386f .dw PFA_DOVALUE1 - PFA_LP0: -00085d 0040 .dw CFG_LP0 -00085e 3da0 .dw XT_EDEFERFETCH -00085f 3daa .dw XT_EDEFERSTORE - .include "words/lp.asm" - - ; System Variable - ; leave stack pointer - VE_LP: -000860 ff02 .dw $ff02 -000861 706c .db "lp" -000862 0858 .dw VE_HEAD - .set VE_HEAD = VE_LP - XT_LP: -000863 3848 .dw PFA_DOVARIABLE - PFA_LP: -000864 0190 .dw ram_lp - - .dseg -000190 ram_lp: .byte 2 - .cseg - - - .include "words/create.asm" - - ; Dictionary - ; create a dictionary header. XT is (constant), with the address of the data field of name - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CREATE: -000865 ff06 .dw $ff06 -000866 7263 -000867 6165 -000868 6574 .db "create" -000869 0860 .dw VE_HEAD - .set VE_HEAD = VE_CREATE - XT_CREATE: -00086a 3801 .dw DO_COLON - PFA_CREATE: - .endif -00086b 0739 .dw XT_DOCREATE -00086c 0899 .dw XT_REVEAL -00086d 075c .dw XT_COMPILE -00086e 3852 .dw PFA_DOCONSTANT -00086f 3820 .dw XT_EXIT - .include "words/header.asm" - - ; Compiler - ; creates the vocabulary header without XT and data field (PF) in the wordlist wid - VE_HEADER: -000870 ff06 .dw $ff06 -000871 6568 -000872 6461 -000873 7265 .db "header" -000874 0865 .dw VE_HEAD - .set VE_HEAD = VE_HEADER - XT_HEADER: -000875 3801 .dw DO_COLON - PFA_HEADER: -000876 3f12 .dw XT_DP ; the new Name Field -000877 38ff .dw XT_TO_R -000878 38ff .dw XT_TO_R ; ( R: NFA WID ) -000879 38b1 .dw XT_DUP -00087a 3928 .dw XT_GREATERZERO -00087b 3836 .dw XT_DOCONDBRANCH -00087c 0887 .dw PFA_HEADER1 -00087d 38b1 .dw XT_DUP -00087e 383d .dw XT_DOLITERAL -00087f ff00 .dw $ff00 ; all flags are off (e.g. immediate) -000880 3a1c .dw XT_OR -000881 03e2 .dw XT_DOSCOMMA - ; make the link to the previous entry in this wordlist -000882 38f6 .dw XT_R_FROM -000883 3b5f .dw XT_FETCHE -000884 0767 .dw XT_COMMA -000885 38f6 .dw XT_R_FROM -000886 3820 .dw XT_EXIT - - PFA_HEADER1: - ; -16: attempt to use zero length string as a name -000887 383d .dw XT_DOLITERAL -000888 fff0 .dw -16 -000889 3d86 .dw XT_THROW - - .include "words/wlscope.asm" - - ; Compiler - ; dynamically place a word in a wordlist. The word name may be changed. - VE_WLSCOPE: -00088a ff07 .dw $ff07 -00088b 6c77 -00088c 6373 -00088d 706f -00088e 0065 .db "wlscope",0 -00088f 0870 .dw VE_HEAD - .set VE_HEAD = VE_WLSCOPE - XT_WLSCOPE: -000890 3dff .dw PFA_DODEFER1 - PFA_WLSCOPE: -000891 003c .dw CFG_WLSCOPE -000892 3da0 .dw XT_EDEFERFETCH -000893 3daa .dw XT_EDEFERSTORE - - ; wlscope, "wordlist scope" ( addr len -- addr' len' wid ), is a deferred word - ; which enables the AmForth application to choose the wordlist ( wid ) for the - ; new voc entry based on the input ( addr len ) string. The name of the new voc - ; entry ( addr' len' ) may be different from the input string. Note that all - ; created voc entry types pass through the wlscope mechanism. The default - ; wlscope action passes the input string to the output without modification and - ; uses get-current to select the wid. - .include "words/reveal.asm" - - ; Dictionary - ; makes an entry in a wordlist visible, if not already done. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_REVEAL: -000894 ff06 .dw $ff06 -000895 6572 -000896 6576 -000897 6c61 .db "reveal" -000898 088a .dw VE_HEAD - .set VE_HEAD = VE_REVEAL - XT_REVEAL: -000899 3801 .dw DO_COLON - PFA_REVEAL: - .endif -00089a 072a -00089b 3c90 -00089c 3879 .DW XT_NEWEST,XT_CELLPLUS,XT_FETCH ; only if wordlist is in use -00089d 38b9 -00089e 3836 .DW XT_QDUP,XT_DOCONDBRANCH -00089f 08a4 DEST(REVEAL1) -0008a0 072a -0008a1 3879 -0008a2 38c4 -0008a3 3b3b .DW XT_NEWEST,XT_FETCH,XT_SWAP,XT_STOREE - ; .DW XT_ZERO,XT_NEWEST,XT_CELLPLUS,XT_STORE ; clean wordlist entry - REVEAL1: -0008a4 3820 .DW XT_EXIT - .include "words/does.asm" - - ; Compiler - ; organize the XT replacement to call other colon code - VE_DOES: -0008a5 0005 .dw $0005 -0008a6 6f64 -0008a7 7365 -0008a8 003e .db "does>",0 -0008a9 0894 .dw VE_HEAD - .set VE_HEAD = VE_DOES - XT_DOES: -0008aa 3801 .dw DO_COLON - PFA_DOES: -0008ab 075c .dw XT_COMPILE -0008ac 08bd .dw XT_DODOES -0008ad 075c .dw XT_COMPILE ; create a code snippet to be used in an embedded XT -0008ae 940e .dw $940e ; the address of this compiled -0008af 075c .dw XT_COMPILE ; code will replace the XT of the -0008b0 08b2 .dw DO_DODOES ; word that CREATE created -0008b1 3820 .dw XT_EXIT ; - - DO_DODOES: ; ( -- PFA ) -0008b2 939a -0008b3 938a savetos -0008b4 01cb movw tosl, wl -0008b5 9601 adiw tosl, 1 - ; the following takes the address from a real uC-call - .if (pclen==3) - .endif -0008b6 917f pop wh -0008b7 916f pop wl - -0008b8 93bf push XH -0008b9 93af push XL -0008ba 01db movw XL, wl -0008bb 940c 3805 jmp_ DO_NEXT - - ; ( -- ) - ; System - ; replace the XT written by CREATE to call the code that follows does> - ;VE_DODOES: - ; .dw $ff07 - ; .db "(does>)" - ; .set VE_HEAD = VE_DODOES - XT_DODOES: -0008bd 3801 .dw DO_COLON - PFA_DODOES: -0008be 38f6 .dw XT_R_FROM -0008bf 072a .dw XT_NEWEST -0008c0 3c90 .dw XT_CELLPLUS -0008c1 3879 .dw XT_FETCH -0008c2 3b5f .dw XT_FETCHE -0008c3 0701 .dw XT_NFA2CFA -0008c4 3b73 .dw XT_STOREI -0008c5 3820 .dw XT_EXIT - .include "words/colon.asm" - - ; Compiler - ; create a named entry in the dictionary, XT is DO_COLON - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_COLON: -0008c6 ff01 .dw $ff01 -0008c7 003a .db ":",0 -0008c8 08a5 .dw VE_HEAD - .set VE_HEAD = VE_COLON - XT_COLON: -0008c9 3801 .dw DO_COLON - PFA_COLON: - .endif -0008ca 0739 .dw XT_DOCREATE -0008cb 08d4 .dw XT_COLONNONAME -0008cc 38d9 .dw XT_DROP -0008cd 3820 .dw XT_EXIT - .include "words/colon-noname.asm" - - ; Compiler - ; create an unnamed entry in the dictionary, XT is DO_COLON - VE_COLONNONAME: -0008ce ff07 .dw $ff07 -0008cf 6e3a -0008d0 6e6f -0008d1 6d61 -0008d2 0065 .db ":noname",0 -0008d3 08c6 .dw VE_HEAD - .set VE_HEAD = VE_COLONNONAME - XT_COLONNONAME: -0008d4 3801 .dw DO_COLON - PFA_COLONNONAME: -0008d5 3f12 .dw XT_DP -0008d6 38b1 .dw XT_DUP -0008d7 0731 .dw XT_LATEST -0008d8 3881 .dw XT_STORE - -0008d9 075c .dw XT_COMPILE -0008da 3801 .dw DO_COLON - -0008db 08e9 .dw XT_RBRACKET -0008dc 3820 .dw XT_EXIT - .include "words/semicolon.asm" - - ; Compiler - ; finish colon defintion, compiles (exit) and returns to interpret state - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_SEMICOLON: -0008dd 0001 .dw $0001 -0008de 003b .db $3b,0 -0008df 08ce .dw VE_HEAD - .set VE_HEAD = VE_SEMICOLON - XT_SEMICOLON: -0008e0 3801 .dw DO_COLON - PFA_SEMICOLON: - .endif -0008e1 075c .dw XT_COMPILE -0008e2 3820 .dw XT_EXIT -0008e3 08f1 .dw XT_LBRACKET -0008e4 0899 .dw XT_REVEAL -0008e5 3820 .dw XT_EXIT - .include "words/right-bracket.asm" - - ; Compiler - ; enter compiler mode - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RBRACKET: -0008e6 ff01 .dw $ff01 -0008e7 005d .db "]",0 -0008e8 08dd .dw VE_HEAD - .set VE_HEAD = VE_RBRACKET - XT_RBRACKET: -0008e9 3801 .dw DO_COLON - PFA_RBRACKET: - .endif -0008ea 3fe6 .dw XT_ONE -0008eb 3eb7 .dw XT_STATE -0008ec 3881 .dw XT_STORE -0008ed 3820 .dw XT_EXIT - .include "words/left-bracket.asm" - - ; Compiler - ; enter interpreter mode - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_LBRACKET: -0008ee 0001 .dw $0001 -0008ef 005b .db "[",0 -0008f0 08e6 .dw VE_HEAD - .set VE_HEAD = VE_LBRACKET - XT_LBRACKET: -0008f1 3801 .dw DO_COLON - PFA_LBRACKET: - .endif -0008f2 3954 .dw XT_ZERO -0008f3 3eb7 .dw XT_STATE -0008f4 3881 .dw XT_STORE -0008f5 3820 .dw XT_EXIT - .include "words/variable.asm" - - ; Compiler - ; create a dictionary entry for a variable and allocate 1 cell RAM - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_VARIABLE: -0008f6 ff08 .dw $ff08 -0008f7 6176 -0008f8 6972 -0008f9 6261 -0008fa 656c .db "variable" -0008fb 08ee .dw VE_HEAD - .set VE_HEAD = VE_VARIABLE - XT_VARIABLE: -0008fc 3801 .dw DO_COLON - PFA_VARIABLE: - .endif -0008fd 3f23 .dw XT_HERE -0008fe 0908 .dw XT_CONSTANT -0008ff 3feb .dw XT_TWO -000900 3f2c .dw XT_ALLOT -000901 3820 .dw XT_EXIT - .include "words/constant.asm" - - ; Compiler - ; create a constant in the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_CONSTANT: -000902 ff08 .dw $ff08 -000903 6f63 -000904 736e -000905 6174 -000906 746e .db "constant" -000907 08f6 .dw VE_HEAD - .set VE_HEAD = VE_CONSTANT - XT_CONSTANT: -000908 3801 .dw DO_COLON - PFA_CONSTANT: - .endif -000909 0739 .dw XT_DOCREATE -00090a 0899 .dw XT_REVEAL -00090b 075c .dw XT_COMPILE -00090c 3848 .dw PFA_DOVARIABLE -00090d 0767 .dw XT_COMMA -00090e 3820 .dw XT_EXIT - .include "words/user.asm" - - ; Compiler - ; create a dictionary entry for a user variable at offset n - VE_USER: -00090f ff04 .dw $ff04 -000910 7375 -000911 7265 .db "user" -000912 0902 .dw VE_HEAD - .set VE_HEAD = VE_USER - XT_USER: -000913 3801 .dw DO_COLON - PFA_USER: -000914 0739 .dw XT_DOCREATE -000915 0899 .dw XT_REVEAL - -000916 075c .dw XT_COMPILE -000917 3858 .dw PFA_DOUSER -000918 0767 .dw XT_COMMA -000919 3820 .dw XT_EXIT - - .include "words/recurse.asm" - - ; Compiler - ; compile the XT of the word currently being defined into the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RECURSE: -00091a 0007 .dw $0007 -00091b 6572 -00091c 7563 -00091d 7372 -00091e 0065 .db "recurse",0 -00091f 090f .dw VE_HEAD - .set VE_HEAD = VE_RECURSE - XT_RECURSE: -000920 3801 .dw DO_COLON - PFA_RECURSE: - .endif -000921 0731 .dw XT_LATEST -000922 3879 .dw XT_FETCH -000923 0767 .dw XT_COMMA -000924 3820 .dw XT_EXIT - .include "words/immediate.asm" - - ; Compiler - ; set immediate flag for the most recent word definition - VE_IMMEDIATE: -000925 ff09 .dw $ff09 -000926 6d69 -000927 656d -000928 6964 -000929 7461 -00092a 0065 .db "immediate",0 -00092b 091a .dw VE_HEAD - .set VE_HEAD = VE_IMMEDIATE - XT_IMMEDIATE: -00092c 3801 .dw DO_COLON - PFA_IMMEDIATE: -00092d 09ce .dw XT_GET_CURRENT -00092e 3b5f .dw XT_FETCHE -00092f 38b1 .dw XT_DUP -000930 3bcb .dw XT_FETCHI -000931 383d .dw XT_DOLITERAL -000932 7fff .dw $7fff -000933 3a13 .dw XT_AND -000934 38c4 .dw XT_SWAP -000935 3b73 .dw XT_STOREI -000936 3820 .dw XT_EXIT - - .include "words/bracketchar.asm" - - ; Tools - ; skip leading space delimites, place the first character of the word on the stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BRACKETCHAR: -000937 0006 .dw $0006 -000938 635b -000939 6168 -00093a 5d72 .db "[char]" -00093b 0925 .dw VE_HEAD - .set VE_HEAD = VE_BRACKETCHAR - XT_BRACKETCHAR: -00093c 3801 .dw DO_COLON - PFA_BRACKETCHAR: - .endif -00093d 075c .dw XT_COMPILE -00093e 383d .dw XT_DOLITERAL -00093f 04f1 .dw XT_CHAR -000940 0767 .dw XT_COMMA -000941 3820 .dw XT_EXIT - .include "words/abort-string.asm" - - ;C i*x x1 -- R: j*x -- x1<>0 - ; POSTPONE IS" POSTPONE ?ABORT ; IMMEDIATE - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ABORTQUOTE: -000942 0006 .dw $0006 -000943 6261 -000944 726f -000945 2274 .db "abort",'"' -000946 0937 .dw VE_HEAD - .set VE_HEAD = VE_ABORTQUOTE - XT_ABORTQUOTE: -000947 3801 .dw DO_COLON - PFA_ABORTQUOTE: - .endif -000948 3e8a .dw XT_SQUOTE -000949 075c .dw XT_COMPILE -00094a 0959 .dw XT_QABORT -00094b 3820 .DW XT_EXIT - .include "words/abort.asm" - - ; Exceptions - ; send an exception -1 - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ABORT: -00094c ff05 .dw $ff05 -00094d 6261 -00094e 726f -00094f 0074 .db "abort",0 -000950 0942 .dw VE_HEAD - .set VE_HEAD = VE_ABORT - XT_ABORT: -000951 3801 .dw DO_COLON - PFA_ABORT: - .endif -000952 394b .dw XT_TRUE -000953 3d86 .dw XT_THROW - .include "words/q-abort.asm" - - ; ROT IF ITYPE ABORT THEN 2DROP ; - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QABORT: -000954 ff06 .dw $ff06 -000955 613f -000956 6f62 -000957 7472 .db "?abort" -000958 094c .dw VE_HEAD - .set VE_HEAD = VE_QABORT - XT_QABORT: -000959 3801 .dw DO_COLON - PFA_QABORT: - - .endif -00095a 38e1 -00095b 3836 .DW XT_ROT,XT_DOCONDBRANCH -00095c 095f DEST(QABO1) -00095d 0403 -00095e 0951 .DW XT_ITYPE,XT_ABORT -00095f 3ed2 -000960 3820 QABO1: .DW XT_2DROP,XT_EXIT - - .include "words/get-stack.asm" - - ; Tools - ; Get a stack from EEPROM - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_GET_STACK: -000961 ff09 .dw $ff09 -000962 6567 -000963 2d74 -000964 7473 -000965 6361 -000966 006b .db "get-stack",0 -000967 0954 .dw VE_HEAD - .set VE_HEAD = VE_GET_STACK - XT_GET_STACK: -000968 3801 .dw DO_COLON - .endif -000969 38b1 .dw XT_DUP -00096a 3c90 .dw XT_CELLPLUS -00096b 38c4 .dw XT_SWAP -00096c 3b5f .dw XT_FETCHE -00096d 38b1 .dw XT_DUP -00096e 38ff .dw XT_TO_R -00096f 3954 .dw XT_ZERO -000970 38c4 .dw XT_SWAP ; go from bigger to smaller addresses -000971 0826 .dw XT_QDOCHECK -000972 3836 .dw XT_DOCONDBRANCH -000973 097f DEST(PFA_N_FETCH_E2) -000974 3a9b .dw XT_DODO - PFA_N_FETCH_E1: - ; ( ee-addr ) -000975 3aac .dw XT_I -000976 3a35 .dw XT_1MINUS -000977 3ec4 .dw XT_CELLS ; ( -- ee-addr i*2 ) -000978 38cf .dw XT_OVER ; ( -- ee-addr i*2 ee-addr ) -000979 399d .dw XT_PLUS ; ( -- ee-addr ee-addr+i -00097a 3b5f .dw XT_FETCHE ;( -- ee-addr item_i ) -00097b 38c4 .dw XT_SWAP ;( -- item_i ee-addr ) -00097c 394b .dw XT_TRUE ; shortcut for -1 -00097d 3aba .dw XT_DOPLUSLOOP -00097e 0975 DEST(PFA_N_FETCH_E1) - PFA_N_FETCH_E2: -00097f 3ed2 .dw XT_2DROP -000980 38f6 .dw XT_R_FROM -000981 3820 .dw XT_EXIT - - .include "words/set-stack.asm" - - ; Tools - ; Write a stack to EEPROM - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SET_STACK: -000982 ff09 .dw $ff09 -000983 6573 -000984 2d74 -000985 7473 -000986 6361 -000987 006b .db "set-stack",0 -000988 0961 .dw VE_HEAD - .set VE_HEAD = VE_SET_STACK - XT_SET_STACK: -000989 3801 .dw DO_COLON - PFA_SET_STACK: - .endif -00098a 38cf .dw XT_OVER -00098b 3921 .dw XT_ZEROLESS -00098c 3836 .dw XT_DOCONDBRANCH -00098d 0991 DEST(PFA_SET_STACK0) -00098e 383d .dw XT_DOLITERAL -00098f fffc .dw -4 -000990 3d86 .dw XT_THROW - PFA_SET_STACK0: -000991 3ec9 .dw XT_2DUP -000992 3b3b .dw XT_STOREE ; ( -- i_n .. i_0 n e-addr ) -000993 38c4 .dw XT_SWAP -000994 3954 .dw XT_ZERO -000995 0826 .dw XT_QDOCHECK -000996 3836 .dw XT_DOCONDBRANCH -000997 099e DEST(PFA_SET_STACK2) -000998 3a9b .dw XT_DODO - PFA_SET_STACK1: -000999 3c90 .dw XT_CELLPLUS ; ( -- i_x e-addr ) -00099a 3eda .dw XT_TUCK ; ( -- e-addr i_x e-addr -00099b 3b3b .dw XT_STOREE -00099c 3ac9 .dw XT_DOLOOP -00099d 0999 DEST(PFA_SET_STACK1) - PFA_SET_STACK2: -00099e 38d9 .dw XT_DROP -00099f 3820 .dw XT_EXIT - - .include "words/map-stack.asm" - - ; Tools - ; Iterate over a stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_MAPSTACK: -0009a0 ff09 .dw $ff09 -0009a1 616d -0009a2 2d70 -0009a3 7473 -0009a4 6361 -0009a5 006b .db "map-stack",0 -0009a6 0982 .dw VE_HEAD - .set VE_HEAD = VE_MAPSTACK - XT_MAPSTACK: -0009a7 3801 .dw DO_COLON - PFA_MAPSTACK: - .endif -0009a8 38b1 .dw XT_DUP -0009a9 3c90 .dw XT_CELLPLUS -0009aa 38c4 .dw XT_SWAP -0009ab 3b5f .dw XT_FETCHE -0009ac 3ec4 .dw XT_CELLS -0009ad 3f99 .dw XT_BOUNDS -0009ae 0826 .dw XT_QDOCHECK -0009af 3836 .dw XT_DOCONDBRANCH -0009b0 09c3 DEST(PFA_MAPSTACK3) -0009b1 3a9b .dw XT_DODO - PFA_MAPSTACK1: -0009b2 3aac .dw XT_I -0009b3 3b5f .dw XT_FETCHE ; -- i*x XT id -0009b4 38c4 .dw XT_SWAP -0009b5 38ff .dw XT_TO_R -0009b6 3908 .dw XT_R_FETCH -0009b7 382a .dw XT_EXECUTE ; i*x id -- j*y true | i*x false -0009b8 38b9 .dw XT_QDUP -0009b9 3836 .dw XT_DOCONDBRANCH -0009ba 09bf DEST(PFA_MAPSTACK2) -0009bb 38f6 .dw XT_R_FROM -0009bc 38d9 .dw XT_DROP -0009bd 3ad4 .dw XT_UNLOOP -0009be 3820 .dw XT_EXIT - PFA_MAPSTACK2: -0009bf 38f6 .dw XT_R_FROM -0009c0 3feb .dw XT_TWO -0009c1 3aba .dw XT_DOPLUSLOOP -0009c2 09b2 DEST(PFA_MAPSTACK1) - PFA_MAPSTACK3: -0009c3 38d9 .dw XT_DROP -0009c4 3954 .dw XT_ZERO -0009c5 3820 .dw XT_EXIT - - ; - ; : map-stack ( i*x XT e-addr -- j*y ) - ; dup cell+ swap @e cells bounds ?do - ; ( -- i*x XT ) - ; i @e swap >r r@ execute - ; ?dup if r> drop unloop exit then - ; r> - ; 2 +loop drop 0 - ; ; - .include "words/get-current.asm" - - ; Search Order - ; get the wid of the current compilation word list - VE_GET_CURRENT: -0009c6 ff0b .dw $ff0b -0009c7 6567 -0009c8 2d74 -0009c9 7563 -0009ca 7272 -0009cb 6e65 -0009cc 0074 .db "get-current",0 -0009cd 09a0 .dw VE_HEAD - .set VE_HEAD = VE_GET_CURRENT - XT_GET_CURRENT: -0009ce 3801 .dw DO_COLON - PFA_GET_CURRENT: -0009cf 383d .dw XT_DOLITERAL -0009d0 0046 .dw CFG_CURRENT -0009d1 3b5f .dw XT_FETCHE -0009d2 3820 .dw XT_EXIT - .include "words/get-order.asm" - - ; Search Order - ; Get the current search order word list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_GET_ORDER: -0009d3 ff09 .dw $ff09 -0009d4 6567 -0009d5 2d74 -0009d6 726f -0009d7 6564 -0009d8 0072 .db "get-order",0 -0009d9 09c6 .dw VE_HEAD - .set VE_HEAD = VE_GET_ORDER - XT_GET_ORDER: -0009da 3801 .dw DO_COLON - PFA_GET_ORDER: - .endif -0009db 383d .dw XT_DOLITERAL -0009dc 004a .dw CFG_ORDERLISTLEN -0009dd 0968 .dw XT_GET_STACK -0009de 3820 .dw XT_EXIT - .include "words/cfg-order.asm" - - ; Search Order - ; Get the current search order word list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CFG_ORDER: -0009df ff09 .dw $ff09 -0009e0 6663 -0009e1 2d67 -0009e2 726f -0009e3 6564 -0009e4 0072 .db "cfg-order",0 -0009e5 09d3 .dw VE_HEAD - .set VE_HEAD = VE_CFG_ORDER - XT_CFG_ORDER: -0009e6 3848 .dw PFA_DOVARIABLE - PFA_CFG_ORDER: - .endif -0009e7 004a .dw CFG_ORDERLISTLEN - .include "words/compare.asm" - - ; String - ; compares two strings in RAM - VE_COMPARE: -0009e8 ff07 .dw $ff07 -0009e9 6f63 -0009ea 706d -0009eb 7261 -0009ec 0065 .db "compare",0 -0009ed 09df .dw VE_HEAD - .set VE_HEAD = VE_COMPARE - XT_COMPARE: -0009ee 09ef .dw PFA_COMPARE - PFA_COMPARE: -0009ef 93bf push xh -0009f0 93af push xl -0009f1 018c movw temp0, tosl -0009f2 9189 -0009f3 9199 loadtos -0009f4 01dc movw xl, tosl -0009f5 9189 -0009f6 9199 loadtos -0009f7 019c movw temp2, tosl -0009f8 9189 -0009f9 9199 loadtos -0009fa 01fc movw zl, tosl - PFA_COMPARE_LOOP: -0009fb 90ed ld temp4, X+ -0009fc 90f1 ld temp5, Z+ -0009fd 14ef cp temp4, temp5 -0009fe f451 brne PFA_COMPARE_NOTEQUAL -0009ff 950a dec temp0 -000a00 f019 breq PFA_COMPARE_ENDREACHED2 -000a01 952a dec temp2 -000a02 f7c1 brne PFA_COMPARE_LOOP -000a03 c001 rjmp PFA_COMPARE_ENDREACHED - PFA_COMPARE_ENDREACHED2: -000a04 952a dec temp2 - PFA_COMPARE_ENDREACHED: -000a05 2b02 or temp0, temp2 -000a06 f411 brne PFA_COMPARE_CHECKLASTCHAR -000a07 2788 clr tosl -000a08 c002 rjmp PFA_COMPARE_DONE - PFA_COMPARE_CHECKLASTCHAR: - PFA_COMPARE_NOTEQUAL: -000a09 ef8f ser tosl -000a0a c000 rjmp PFA_COMPARE_DONE - - PFA_COMPARE_DONE: -000a0b 2f98 mov tosh, tosl -000a0c 91af pop xl -000a0d 91bf pop xh -000a0e 940c 3805 jmp_ DO_NEXT - .include "words/nfa2lfa.asm" - - ; System - ; get the link field address from the name field address - VE_NFA2LFA: -000a10 ff07 .dw $ff07 -000a11 666e -000a12 3e61 -000a13 666c -000a14 0061 .db "nfa>lfa",0 -000a15 09e8 .dw VE_HEAD - .set VE_HEAD = VE_NFA2LFA - XT_NFA2LFA: -000a16 3801 .dw DO_COLON - PFA_NFA2LFA: -000a17 06f5 .dw XT_NAME2STRING -000a18 3a2f .dw XT_1PLUS -000a19 3a04 .dw XT_2SLASH -000a1a 399d .dw XT_PLUS -000a1b 3820 .dw XT_EXIT - .elif AMFORTH_NRWW_SIZE > 2000 - .else - .endif - .include "dict_appl.inc" - - ; they may be moved to the core dictionary if needed - .include "words/dot-s.asm" - - ; Tools - ; stack dump - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOTS: -000a1c ff02 .dw $ff02 -000a1d 732e .db ".s" -000a1e 0a10 .dw VE_HEAD - .set VE_HEAD = VE_DOTS - XT_DOTS: -000a1f 3801 .dw DO_COLON - PFA_DOTS: - .endif -000a20 05ed .dw XT_DEPTH -000a21 3e0a .dw XT_UDOT -000a22 3fae .dw XT_SPACE -000a23 05ed .dw XT_DEPTH -000a24 3954 .dw XT_ZERO -000a25 0826 .dw XT_QDOCHECK -000a26 3836 .dw XT_DOCONDBRANCH -000a27 0a2e DEST(PFA_DOTS2) -000a28 3a9b .dw XT_DODO - PFA_DOTS1: -000a29 3aac .dw XT_I -000a2a 3c84 .dw XT_PICK -000a2b 3e0a .dw XT_UDOT -000a2c 3ac9 .dw XT_DOLOOP -000a2d 0a29 DEST(PFA_DOTS1) - PFA_DOTS2: -000a2e 3820 .dw XT_EXIT - .include "words/spirw.asm" - - ; MCU - ; SPI exchange of 1 byte - VE_SPIRW: -000a2f ff06 .dw $ff06 -000a30 2163 -000a31 7340 -000a32 6970 .db "c!@spi" -000a33 0a1c .dw VE_HEAD - .set VE_HEAD = VE_SPIRW - XT_SPIRW: -000a34 0a35 .dw PFA_SPIRW - PFA_SPIRW: -000a35 d003 rcall do_spirw -000a36 2799 clr tosh -000a37 940c 3805 jmp_ DO_NEXT - - do_spirw: -000a39 bd8e out_ SPDR, tosl - do_spirw1: -000a3a b50d in_ temp0, SPSR -000a3b 7f08 cbr temp0,7 -000a3c bd0d out_ SPSR, temp0 -000a3d b50d in_ temp0, SPSR -000a3e ff07 sbrs temp0, 7 -000a3f cffa rjmp do_spirw1 ; wait until complete -000a40 b58e in_ tosl, SPDR -000a41 9508 ret - .include "words/n-spi.asm" - - ; MCU - ; read len bytes from SPI to addr - VE_N_SPIR: -000a42 ff05 .dw $ff05 -000a43 406e -000a44 7073 -000a45 0069 .db "n@spi",0 -000a46 0a2f .dw VE_HEAD - .set VE_HEAD = VE_N_SPIR - XT_N_SPIR: -000a47 0a48 .dw PFA_N_SPIR - PFA_N_SPIR: -000a48 018c movw temp0, tosl -000a49 9189 -000a4a 9199 loadtos -000a4b 01fc movw zl, tosl -000a4c 01c8 movw tosl, temp0 - PFA_N_SPIR_LOOP: -000a4d bc2e out_ SPDR, zerol - PFA_N_SPIR_LOOP1: -000a4e b52d in_ temp2, SPSR -000a4f ff27 sbrs temp2, SPIF -000a50 cffd rjmp PFA_N_SPIR_LOOP1 -000a51 b52e in_ temp2, SPDR -000a52 9321 st Z+, temp2 -000a53 9701 sbiw tosl, 1 -000a54 f7c1 brne PFA_N_SPIR_LOOP -000a55 9189 -000a56 9199 loadtos -000a57 940c 3805 jmp_ DO_NEXT - - ; ( addr len -- ) - ; MCU - ; write len bytes to SPI from addr - VE_N_SPIW: -000a59 ff05 .dw $ff05 -000a5a 216e -000a5b 7073 -000a5c 0069 .db "n!spi",0 -000a5d 0a42 .dw VE_HEAD - .set VE_HEAD = VE_N_SPIW - XT_N_SPIW: -000a5e 0a5f .dw PFA_N_SPIW - PFA_N_SPIW: -000a5f 018c movw temp0, tosl -000a60 9189 -000a61 9199 loadtos -000a62 01fc movw zl, tosl -000a63 01c8 movw tosl, temp0 - PFA_N_SPIW_LOOP: -000a64 9121 ld temp2, Z+ -000a65 bd2e out_ SPDR, temp2 - PFA_N_SPIW_LOOP1: -000a66 b52d in_ temp2, SPSR -000a67 ff27 sbrs temp2, SPIF -000a68 cffd rjmp PFA_N_SPIW_LOOP1 -000a69 b52e in_ temp2, SPDR ; ignore the data -000a6a 9701 sbiw tosl, 1 -000a6b f7c1 brne PFA_N_SPIW_LOOP -000a6c 9189 -000a6d 9199 loadtos -000a6e 940c 3805 jmp_ DO_NEXT - .include "words/applturnkey.asm" - - ; R( -- ) - ; application specific turnkey action - VE_APPLTURNKEY: -000a70 ff0b .dw $ff0b -000a71 7061 -000a72 6c70 -000a73 7574 -000a74 6e72 -000a75 656b -000a76 0079 .db "applturnkey",0 -000a77 0a59 .dw VE_HEAD - .set VE_HEAD = VE_APPLTURNKEY - XT_APPLTURNKEY: -000a78 3801 .dw DO_COLON - PFA_APPLTURNKEY: -000a79 00c7 .dw XT_USART - - .if WANT_INTERRUPTS == 1 -000a7a 3c97 .dw XT_INTON - .endif -000a7b 018a .dw XT_DOT_VER -000a7c 3fae .dw XT_SPACE -000a7d 3eac .dw XT_F_CPU -000a7e 383d .dw XT_DOLITERAL -000a7f 03e8 .dw 1000 -000a80 39c2 .dw XT_UMSLASHMOD -000a81 38f0 .dw XT_NIP -000a82 3f41 .dw XT_DECIMAL -000a83 0385 .dw XT_DOT -000a84 03d0 .dw XT_DOSLITERAL -000a85 0004 .dw 4 -000a86 486b -000a87 207a .db "kHz " -000a88 0403 .dw XT_ITYPE -000a89 3820 .dw XT_EXIT - .include "dict/compiler2.inc" - - ; included almost independently from each other - ; on a include-per-use basis - ; - .if DICT_COMPILER2 == 0 - .set DICT_COMPILER2 = 1 - - .include "words/set-current.asm" - - ; Search Order - ; set current word list to the given word list wid - VE_SET_CURRENT: -000a8a ff0b .dw $ff0b -000a8b 6573 -000a8c 2d74 -000a8d 7563 -000a8e 7272 -000a8f 6e65 -000a90 0074 .db "set-current",0 -000a91 0a70 .dw VE_HEAD - .set VE_HEAD = VE_SET_CURRENT - XT_SET_CURRENT: -000a92 3801 .dw DO_COLON - PFA_SET_CURRENT: -000a93 383d .dw XT_DOLITERAL -000a94 0046 .dw CFG_CURRENT -000a95 3b3b .dw XT_STOREE -000a96 3820 .dw XT_EXIT - .include "words/wordlist.asm" - - ; Search Order - ; create a new, empty wordlist - VE_WORDLIST: -000a97 ff08 .dw $ff08 -000a98 6f77 -000a99 6472 -000a9a 696c -000a9b 7473 .db "wordlist" -000a9c 0a8a .dw VE_HEAD - .set VE_HEAD = VE_WORDLIST - XT_WORDLIST: -000a9d 3801 .dw DO_COLON - PFA_WORDLIST: -000a9e 3f1b .dw XT_EHERE -000a9f 3954 .dw XT_ZERO -000aa0 38cf .dw XT_OVER -000aa1 3b3b .dw XT_STOREE -000aa2 38b1 .dw XT_DUP -000aa3 3c90 .dw XT_CELLPLUS -000aa4 01bf .dw XT_DOTO -000aa5 3f1c .dw PFA_EHERE -000aa6 3820 .dw XT_EXIT - - .include "words/forth-wordlist.asm" - - ; Search Order - ; get the system default word list - VE_FORTHWORDLIST: -000aa7 ff0e .dw $ff0e -000aa8 6f66 -000aa9 7472 -000aaa 2d68 -000aab 6f77 -000aac 6472 -000aad 696c -000aae 7473 .db "forth-wordlist" -000aaf 0a97 .dw VE_HEAD - .set VE_HEAD = VE_FORTHWORDLIST - XT_FORTHWORDLIST: -000ab0 3848 .dw PFA_DOVARIABLE - PFA_FORTHWORDLIST: -000ab1 0048 .dw CFG_FORTHWORDLIST - .include "words/set-order.asm" - - ; Search Order - ; replace the search order list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SET_ORDER: -000ab2 ff09 .dw $ff09 -000ab3 6573 -000ab4 2d74 -000ab5 726f -000ab6 6564 -000ab7 0072 .db "set-order",0 -000ab8 0aa7 .dw VE_HEAD - .set VE_HEAD = VE_SET_ORDER - XT_SET_ORDER: -000ab9 3801 .dw DO_COLON - PFA_SET_ORDER: - .endif -000aba 383d .dw XT_DOLITERAL -000abb 004a .dw CFG_ORDERLISTLEN -000abc 0989 .dw XT_SET_STACK -000abd 3820 .dw XT_EXIT - - .include "words/set-recognizer.asm" - - ; Interpreter - ; replace the recognizer list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SET_RECOGNIZERS: -000abe ff0f .dw $ff0f -000abf 6573 -000ac0 2d74 -000ac1 6572 -000ac2 6f63 -000ac3 6e67 -000ac4 7a69 -000ac5 7265 -000ac6 0073 .db "set-recognizers",0 -000ac7 0ab2 .dw VE_HEAD - .set VE_HEAD = VE_SET_RECOGNIZERS - XT_SET_RECOGNIZERS: -000ac8 3801 .dw DO_COLON - PFA_SET_RECOGNIZERS: - .endif -000ac9 383d .dw XT_DOLITERAL -000aca 005c .dw CFG_RECOGNIZERLISTLEN -000acb 0989 .dw XT_SET_STACK -000acc 3820 .dw XT_EXIT - - .include "words/get-recognizer.asm" - - ; Interpreter - ; Get the current recognizer list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_GET_RECOGNIZERS: -000acd ff0f .dw $ff0f -000ace 6567 -000acf 2d74 -000ad0 6572 -000ad1 6f63 -000ad2 6e67 -000ad3 7a69 -000ad4 7265 -000ad5 0073 .db "get-recognizers",0 -000ad6 0abe .dw VE_HEAD - .set VE_HEAD = VE_GET_RECOGNIZERS - XT_GET_RECOGNIZERS: -000ad7 3801 .dw DO_COLON - PFA_GET_RECOGNIZERS: - .endif -000ad8 383d .dw XT_DOLITERAL -000ad9 005c .dw CFG_RECOGNIZERLISTLEN -000ada 0968 .dw XT_GET_STACK -000adb 3820 .dw XT_EXIT - .include "words/code.asm" - - ; Compiler - ; create named entry in the dictionary, XT is the data field - VE_CODE: -000adc ff04 .dw $ff04 -000add 6f63 -000ade 6564 .db "code" -000adf 0acd .dw VE_HEAD - .set VE_HEAD = VE_CODE - XT_CODE: -000ae0 3801 .dw DO_COLON - PFA_CODE: -000ae1 0739 .dw XT_DOCREATE -000ae2 0899 .dw XT_REVEAL -000ae3 3f12 .dw XT_DP -000ae4 01d1 .dw XT_ICELLPLUS -000ae5 0767 .dw XT_COMMA -000ae6 3820 .dw XT_EXIT - .include "words/end-code.asm" - - ; Compiler - ; finish a code definition - VE_ENDCODE: -000ae7 ff08 .dw $ff08 -000ae8 6e65 -000ae9 2d64 -000aea 6f63 -000aeb 6564 .db "end-code" -000aec 0adc .dw VE_HEAD - .set VE_HEAD = VE_ENDCODE - XT_ENDCODE: -000aed 3801 .dw DO_COLON - PFA_ENDCODE: -000aee 075c .dw XT_COMPILE -000aef 940c .dw $940c -000af0 075c .dw XT_COMPILE -000af1 3805 .dw DO_NEXT -000af2 3820 .dw XT_EXIT - .include "words/marker.asm" - - ; System Value - ; The eeprom address until which MARKER saves and restores the eeprom data. - VE_MARKER: -000af3 ff08 .dw $ff08 -000af4 6d28 -000af5 7261 -000af6 656b -000af7 2972 .db "(marker)" -000af8 0ae7 .dw VE_HEAD - .set VE_HEAD = VE_MARKER - XT_MARKER: -000af9 386f .dw PFA_DOVALUE1 - PFA_MARKER: -000afa 0068 .dw EE_MARKER -000afb 3da0 .dw XT_EDEFERFETCH -000afc 3daa .dw XT_EDEFERSTORE - .include "words/postpone.asm" - - ; Compiler - ; Append the compilation semantics of "name" to the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_POSTPONE: -000afd 0008 .dw $0008 -000afe 6f70 -000aff 7473 -000b00 6f70 -000b01 656e .db "postpone" -000b02 0af3 .dw VE_HEAD - .set VE_HEAD = VE_POSTPONE - XT_POSTPONE: -000b03 3801 .dw DO_COLON - PFA_POSTPONE: - .endif -000b04 05bb .dw XT_PARSENAME -000b05 05fe .dw XT_FORTHRECOGNIZER -000b06 0609 .dw XT_RECOGNIZE -000b07 38b1 .dw XT_DUP -000b08 38ff .dw XT_TO_R -000b09 01d1 .dw XT_ICELLPLUS -000b0a 01d1 .dw XT_ICELLPLUS -000b0b 3bcb .dw XT_FETCHI -000b0c 382a .dw XT_EXECUTE -000b0d 38f6 .dw XT_R_FROM -000b0e 01d1 .dw XT_ICELLPLUS -000b0f 3bcb .dw XT_FETCHI -000b10 0767 .dw XT_COMMA -000b11 3820 .dw XT_EXIT - .endif - .include "words/2r_fetch.asm" - - ; Stack - ; fetch content of TOR - VE_2R_FETCH: -000b12 ff03 .dw $ff03 -000b13 7232 -000b14 0040 .db "2r@",0 -000b15 0afd .dw VE_HEAD - .set VE_HEAD = VE_2R_FETCH - XT_2R_FETCH: -000b16 0b17 .dw PFA_2R_FETCH - PFA_2R_FETCH: -000b17 939a -000b18 938a savetos -000b19 91ef pop zl -000b1a 91ff pop zh -000b1b 918f pop tosl -000b1c 919f pop tosh -000b1d 939f push tosh -000b1e 938f push tosl -000b1f 93ff push zh -000b20 93ef push zl -000b21 939a -000b22 938a savetos -000b23 01cf movw tosl, zl -000b24 940c 3805 jmp_ DO_NEXT - - .set DPSTART = pc - .if(pc>AMFORTH_RO_SEG) - .endif - - .org AMFORTH_RO_SEG - .include "amforth-interpreter.asm" - - - DO_COLON: -003801 93bf push XH -003802 93af push XL ; PUSH IP -003803 01db movw XL, wl -003804 9611 adiw xl, 1 - DO_NEXT: - .if WANT_INTERRUPTS == 1 -003805 14b2 cp isrflag, zerol -003806 f469 brne DO_INTERRUPT - .endif -003807 01fd movw zl, XL ; READ IP -003808 0fee -003809 1fff -00380a 9165 -00380b 9175 readflashcell wl, wh -00380c 9611 adiw XL, 1 ; INC IP - - DO_EXECUTE: -00380d 01fb movw zl, wl -00380e 0fee -00380f 1fff -003810 9105 -003811 9115 readflashcell temp0,temp1 -003812 01f8 movw zl, temp0 -003813 9409 ijmp - - .if WANT_INTERRUPTS == 1 - DO_INTERRUPT: - ; here we deal with interrupts the forth way -003814 939a -003815 938a savetos -003816 2d8b mov tosl, isrflag -003817 2799 clr tosh -003818 24bb clr isrflag -003819 ec60 ldi wl, LOW(XT_ISREXEC) -00381a e37c ldi wh, HIGH(XT_ISREXEC) -00381b cff1 rjmp DO_EXECUTE - .include "dict/nrww.inc" - - ; section together with the forth inner interpreter - - .include "words/exit.asm" - - ; Compiler - ; end of current colon word - VE_EXIT: -00381c ff04 .dw $ff04 -00381d 7865 -00381e 7469 .db "exit" -00381f 0b12 .dw VE_HEAD - .set VE_HEAD = VE_EXIT - XT_EXIT: -003820 3821 .dw PFA_EXIT - PFA_EXIT: -003821 91af pop XL -003822 91bf pop XH -003823 cfe1 jmp_ DO_NEXT - .include "words/execute.asm" - - ; System - ; execute XT - VE_EXECUTE: -003824 ff07 .dw $ff07 -003825 7865 -003826 6365 -003827 7475 -003828 0065 .db "execute",0 -003829 381c .dw VE_HEAD - .set VE_HEAD = VE_EXECUTE - XT_EXECUTE: -00382a 382b .dw PFA_EXECUTE - PFA_EXECUTE: -00382b 01bc movw wl, tosl -00382c 9189 -00382d 9199 loadtos -00382e cfde jmp_ DO_EXECUTE - .include "words/dobranch.asm" - - ; System - ; runtime of branch - ;VE_DOBRANCH: - ; .dw $ff08 - ; .db "(branch)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOBRANCH - XT_DOBRANCH: -00382f 3830 .dw PFA_DOBRANCH - PFA_DOBRANCH: -003830 01fd movw zl, XL -003831 0fee -003832 1fff -003833 91a5 -003834 91b5 readflashcell XL,XH -003835 cfcf jmp_ DO_NEXT - .include "words/docondbranch.asm" - - ; System - ; runtime of ?branch - ;VE_DOCONDBRANCH: - ; .dw $ff09 - ; .db "(?branch)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOCONDBRANCH - XT_DOCONDBRANCH: -003836 3837 .dw PFA_DOCONDBRANCH - PFA_DOCONDBRANCH: -003837 2b98 or tosh, tosl -003838 9189 -003839 9199 loadtos -00383a f3a9 brbs 1, PFA_DOBRANCH ; 1 is z flag; if tos is zero (false), do the branch -00383b 9611 adiw XL, 1 -00383c cfc8 jmp_ DO_NEXT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/doliteral.asm" - - ; System - ; runtime of literal - ;VE_DOLITERAL: - ; .dw $ff09 - ; .db "(literal)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOLITERAL - XT_DOLITERAL: -00383d 383e .dw PFA_DOLITERAL - PFA_DOLITERAL: -00383e 939a -00383f 938a savetos -003840 01fd movw zl, xl -003841 0fee -003842 1fff -003843 9185 -003844 9195 readflashcell tosl,tosh -003845 9611 adiw xl, 1 -003846 cfbe jmp_ DO_NEXT - - .include "words/dovariable.asm" - - ; System - ; puts content of parameter field (1 cell) to TOS - ;VE_DOVARIABLE: - ; .dw $ff0a - ; .db "(variable)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOVARIABLE - XT_DOVARIABLE: -003847 3848 .dw PFA_DOVARIABLE - PFA_DOVARIABLE: -003848 939a -003849 938a savetos -00384a 01fb movw zl, wl -00384b 9631 adiw zl,1 -00384c 0fee -00384d 1fff -00384e 9185 -00384f 9195 readflashcell tosl,tosh -003850 cfb4 jmp_ DO_NEXT - .include "words/doconstant.asm" - - ; System - ; place data field address on TOS - ;VE_DOCONSTANT: - ; .dw $ff0a - ; .db "(constant)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOCONSTANT - XT_DOCONSTANT: -003851 3852 .dw PFA_DOCONSTANT - PFA_DOCONSTANT: -003852 939a -003853 938a savetos -003854 01cb movw tosl, wl -003855 9601 adiw tosl, 1 -003856 cfae jmp_ DO_NEXT - .include "words/douser.asm" - - ; System - ; runtime part of user - ;VE_DOUSER: - ; .dw $ff06 - ; .db "(user)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOUSER - XT_DOUSER: -003857 3858 .dw PFA_DOUSER - PFA_DOUSER: -003858 939a -003859 938a savetos -00385a 01fb movw zl, wl -00385b 9631 adiw zl, 1 -00385c 0fee -00385d 1fff -00385e 9185 -00385f 9195 readflashcell tosl,tosh -003860 0d84 add tosl, upl -003861 1d95 adc tosh, uph -003862 cfa2 jmp_ DO_NEXT - .include "words/do-value.asm" - - ; System - ; runtime of value - VE_DOVALUE: -003863 ff07 .dw $ff07 -003864 7628 -003865 6c61 -003866 6575 -003867 0029 .db "(value)", 0 -003868 3824 .dw VE_HEAD - .set VE_HEAD = VE_DOVALUE - XT_DOVALUE: -003869 3801 .dw DO_COLON - PFA_DOVALUE: -00386a 0739 .dw XT_DOCREATE -00386b 0899 .dw XT_REVEAL -00386c 075c .dw XT_COMPILE -00386d 386f .dw PFA_DOVALUE1 -00386e 3820 .dw XT_EXIT - PFA_DOVALUE1: -00386f 940e 08b2 call_ DO_DODOES -003871 38b1 .dw XT_DUP -003872 01d1 .dw XT_ICELLPLUS -003873 3bcb .dw XT_FETCHI -003874 382a .dw XT_EXECUTE -003875 3820 .dw XT_EXIT - - ; : (value) dup icell+ @i execute ; - .include "words/fetch.asm" - - ; Memory - ; read 1 cell from RAM address - VE_FETCH: -003876 ff01 .dw $ff01 -003877 0040 .db "@",0 -003878 3863 .dw VE_HEAD - .set VE_HEAD = VE_FETCH - XT_FETCH: -003879 387a .dw PFA_FETCH - PFA_FETCH: - .if WANT_UNIFIED == 1 - .endif - PFA_FETCHRAM: -00387a 01fc movw zl, tosl - ; low byte is read before the high byte -00387b 9181 ld tosl, z+ -00387c 9191 ld tosh, z+ -00387d cf87 jmp_ DO_NEXT - .if WANT_UNIFIED == 1 - .endif - .include "words/store.asm" - - ; Memory - ; write n to RAM memory at addr, low byte first - VE_STORE: -00387e ff01 .dw $ff01 -00387f 0021 .db "!",0 -003880 3876 .dw VE_HEAD - .set VE_HEAD = VE_STORE - XT_STORE: -003881 3882 .dw PFA_STORE - PFA_STORE: - .if WANT_UNIFIED == 1 - .endif - PFA_STORERAM: -003882 01fc movw zl, tosl -003883 9189 -003884 9199 loadtos - ; the high byte is written before the low byte -003885 8391 std Z+1, tosh -003886 8380 std Z+0, tosl -003887 9189 -003888 9199 loadtos -003889 cf7b jmp_ DO_NEXT - .if WANT_UNIFIED == 1 - .endif - .include "words/cstore.asm" - - ; Memory - ; store a single byte to RAM address - VE_CSTORE: -00388a ff02 .dw $ff02 -00388b 2163 .db "c!" -00388c 387e .dw VE_HEAD - .set VE_HEAD = VE_CSTORE - XT_CSTORE: -00388d 388e .dw PFA_CSTORE - PFA_CSTORE: -00388e 01fc movw zl, tosl -00388f 9189 -003890 9199 loadtos -003891 8380 st Z, tosl -003892 9189 -003893 9199 loadtos -003894 cf70 jmp_ DO_NEXT - .include "words/cfetch.asm" - - ; Memory - ; fetch a single byte from memory mapped locations - VE_CFETCH: -003895 ff02 .dw $ff02 -003896 4063 .db "c@" -003897 388a .dw VE_HEAD - .set VE_HEAD = VE_CFETCH - XT_CFETCH: -003898 3899 .dw PFA_CFETCH - PFA_CFETCH: -003899 01fc movw zl, tosl -00389a 2799 clr tosh -00389b 8180 ld tosl, Z -00389c cf68 jmp_ DO_NEXT - .include "words/fetch-u.asm" - - ; Memory - ; read 1 cell from USER area - VE_FETCHU: -00389d ff02 .dw $ff02 -00389e 7540 .db "@u" -00389f 3895 .dw VE_HEAD - .set VE_HEAD = VE_FETCHU - XT_FETCHU: -0038a0 3801 .dw DO_COLON - PFA_FETCHU: -0038a1 3b02 .dw XT_UP_FETCH -0038a2 399d .dw XT_PLUS -0038a3 3879 .dw XT_FETCH -0038a4 3820 .dw XT_EXIT - .include "words/store-u.asm" - - ; Memory - ; write n to USER area at offset - VE_STOREU: -0038a5 ff02 .dw $ff02 -0038a6 7521 .db "!u" -0038a7 389d .dw VE_HEAD - .set VE_HEAD = VE_STOREU - XT_STOREU: -0038a8 3801 .dw DO_COLON - PFA_STOREU: -0038a9 3b02 .dw XT_UP_FETCH -0038aa 399d .dw XT_PLUS -0038ab 3881 .dw XT_STORE -0038ac 3820 .dw XT_EXIT - - ;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/dup.asm" - - ; Stack - ; duplicate TOS - VE_DUP: -0038ad ff03 .dw $ff03 -0038ae 7564 -0038af 0070 .db "dup",0 -0038b0 38a5 .dw VE_HEAD - .set VE_HEAD = VE_DUP - XT_DUP: -0038b1 38b2 .dw PFA_DUP - PFA_DUP: -0038b2 939a -0038b3 938a savetos -0038b4 cf50 jmp_ DO_NEXT - .include "words/qdup.asm" - - ; Stack - ; duplicate TOS if non-zero - VE_QDUP: -0038b5 ff04 .dw $ff04 -0038b6 643f -0038b7 7075 .db "?dup" -0038b8 38ad .dw VE_HEAD - .set VE_HEAD = VE_QDUP - XT_QDUP: -0038b9 38ba .dw PFA_QDUP - PFA_QDUP: -0038ba 2f08 mov temp0, tosl -0038bb 2b09 or temp0, tosh -0038bc f011 breq PFA_QDUP1 -0038bd 939a -0038be 938a savetos - PFA_QDUP1: -0038bf cf45 jmp_ DO_NEXT - .include "words/swap.asm" - - ; Stack - ; swaps the two top level stack cells - VE_SWAP: -0038c0 ff04 .dw $ff04 -0038c1 7773 -0038c2 7061 .db "swap" -0038c3 38b5 .dw VE_HEAD - .set VE_HEAD = VE_SWAP - XT_SWAP: -0038c4 38c5 .dw PFA_SWAP - PFA_SWAP: -0038c5 018c movw temp0, tosl -0038c6 9189 -0038c7 9199 loadtos -0038c8 931a st -Y, temp1 -0038c9 930a st -Y, temp0 -0038ca cf3a jmp_ DO_NEXT - .include "words/over.asm" - - ; Stack - ; Place a copy of x1 on top of the stack - VE_OVER: -0038cb ff04 .dw $ff04 -0038cc 766f -0038cd 7265 .db "over" -0038ce 38c0 .dw VE_HEAD - .set VE_HEAD = VE_OVER - XT_OVER: -0038cf 38d0 .dw PFA_OVER - PFA_OVER: -0038d0 939a -0038d1 938a savetos -0038d2 818a ldd tosl, Y+2 -0038d3 819b ldd tosh, Y+3 - -0038d4 cf30 jmp_ DO_NEXT - .include "words/drop.asm" - - ; Stack - ; drop TOS - VE_DROP: -0038d5 ff04 .dw $ff04 -0038d6 7264 -0038d7 706f .db "drop" -0038d8 38cb .dw VE_HEAD - .set VE_HEAD = VE_DROP - XT_DROP: -0038d9 38da .dw PFA_DROP - PFA_DROP: -0038da 9189 -0038db 9199 loadtos -0038dc cf28 jmp_ DO_NEXT - .include "words/rot.asm" - - ; Stack - ; rotate the three top level cells - VE_ROT: -0038dd ff03 .dw $ff03 -0038de 6f72 -0038df 0074 .db "rot",0 -0038e0 38d5 .dw VE_HEAD - .set VE_HEAD = VE_ROT - XT_ROT: -0038e1 38e2 .dw PFA_ROT - PFA_ROT: -0038e2 018c movw temp0, tosl -0038e3 9129 ld temp2, Y+ -0038e4 9139 ld temp3, Y+ -0038e5 9189 -0038e6 9199 loadtos - -0038e7 933a st -Y, temp3 -0038e8 932a st -Y, temp2 -0038e9 931a st -Y, temp1 -0038ea 930a st -Y, temp0 - -0038eb cf19 jmp_ DO_NEXT - .include "words/nip.asm" - - ; Stack - ; Remove Second of Stack - VE_NIP: -0038ec ff03 .dw $ff03 -0038ed 696e -0038ee 0070 .db "nip",0 -0038ef 38dd .dw VE_HEAD - .set VE_HEAD = VE_NIP - XT_NIP: -0038f0 38f1 .dw PFA_NIP - PFA_NIP: -0038f1 9622 adiw yl, 2 -0038f2 cf12 jmp_ DO_NEXT - ;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/r_from.asm" - - ; Stack - ; move TOR to TOS - VE_R_FROM: -0038f3 ff02 .dw $ff02 -0038f4 3e72 .db "r>" -0038f5 38ec .dw VE_HEAD - .set VE_HEAD = VE_R_FROM - XT_R_FROM: -0038f6 38f7 .dw PFA_R_FROM - PFA_R_FROM: -0038f7 939a -0038f8 938a savetos -0038f9 918f pop tosl -0038fa 919f pop tosh -0038fb cf09 jmp_ DO_NEXT - .include "words/to_r.asm" - - ; Stack - ; move TOS to TOR - VE_TO_R: -0038fc ff02 .dw $ff02 -0038fd 723e .db ">r" -0038fe 38f3 .dw VE_HEAD - .set VE_HEAD = VE_TO_R - XT_TO_R: -0038ff 3900 .dw PFA_TO_R - PFA_TO_R: -003900 939f push tosh -003901 938f push tosl -003902 9189 -003903 9199 loadtos -003904 cf00 jmp_ DO_NEXT - .include "words/r_fetch.asm" - - ; Stack - ; fetch content of TOR - VE_R_FETCH: -003905 ff02 .dw $ff02 -003906 4072 .db "r@" -003907 38fc .dw VE_HEAD - .set VE_HEAD = VE_R_FETCH - XT_R_FETCH: -003908 3909 .dw PFA_R_FETCH - PFA_R_FETCH: -003909 939a -00390a 938a savetos -00390b 918f pop tosl -00390c 919f pop tosh -00390d 939f push tosh -00390e 938f push tosl -00390f cef5 jmp_ DO_NEXT - - - .include "words/not-equal.asm" - - ; Compare - ; true if n1 is not equal to n2 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NOTEQUAL: -003910 ff02 .dw $ff02 -003911 3e3c .db "<>" -003912 3905 .dw VE_HEAD - .set VE_HEAD = VE_NOTEQUAL - XT_NOTEQUAL: -003913 3801 .dw DO_COLON - PFA_NOTEQUAL: - .endif - -003914 3fdf -003915 391a -003916 3820 .DW XT_EQUAL,XT_ZEROEQUAL,XT_EXIT - .include "words/equalzero.asm" - - ; Compare - ; compare with 0 (zero) - VE_ZEROEQUAL: -003917 ff02 .dw $ff02 -003918 3d30 .db "0=" -003919 3910 .dw VE_HEAD - .set VE_HEAD = VE_ZEROEQUAL - XT_ZEROEQUAL: -00391a 391b .dw PFA_ZEROEQUAL - PFA_ZEROEQUAL: -00391b 2b98 or tosh, tosl -00391c f5d1 brne PFA_ZERO1 -00391d c030 rjmp PFA_TRUE1 - .include "words/lesszero.asm" - - ; Compare - ; compare with zero - VE_ZEROLESS: -00391e ff02 .dw $ff02 -00391f 3c30 .db "0<" -003920 3917 .dw VE_HEAD - .set VE_HEAD = VE_ZEROLESS - XT_ZEROLESS: -003921 3922 .dw PFA_ZEROLESS - PFA_ZEROLESS: -003922 fd97 sbrc tosh,7 -003923 c02a rjmp PFA_TRUE1 -003924 c032 rjmp PFA_ZERO1 - .include "words/greaterzero.asm" - - ; Compare - ; true if n1 is greater than 0 - VE_GREATERZERO: -003925 ff02 .dw $ff02 -003926 3e30 .db "0>" -003927 391e .dw VE_HEAD - .set VE_HEAD = VE_GREATERZERO - XT_GREATERZERO: -003928 3929 .dw PFA_GREATERZERO - PFA_GREATERZERO: -003929 1582 cp tosl, zerol -00392a 0593 cpc tosh, zeroh -00392b f15c brlt PFA_ZERO1 -00392c f151 brbs 1, PFA_ZERO1 -00392d c020 rjmp PFA_TRUE1 - .include "words/d-greaterzero.asm" - - ; Compare - ; compares if a double double cell number is greater 0 - VE_DGREATERZERO: -00392e ff03 .dw $ff03 -00392f 3064 -003930 003e .db "d0>",0 -003931 3925 .dw VE_HEAD - .set VE_HEAD = VE_DGREATERZERO - XT_DGREATERZERO: -003932 3933 .dw PFA_DGREATERZERO - PFA_DGREATERZERO: -003933 1582 cp tosl, zerol -003934 0593 cpc tosh, zeroh -003935 9189 -003936 9199 loadtos -003937 0582 cpc tosl, zerol -003938 0593 cpc tosh, zeroh -003939 f0ec brlt PFA_ZERO1 -00393a f0e1 brbs 1, PFA_ZERO1 -00393b c012 rjmp PFA_TRUE1 - .include "words/d-lesszero.asm" - - ; Compare - ; compares if a double double cell number is less than 0 - VE_DXT_ZEROLESS: -00393c ff03 .dw $ff03 -00393d 3064 -00393e 003c .db "d0<",0 -00393f 392e .dw VE_HEAD - .set VE_HEAD = VE_DXT_ZEROLESS - XT_DXT_ZEROLESS: -003940 3941 .dw PFA_DXT_ZEROLESS - PFA_DXT_ZEROLESS: -003941 9622 adiw Y,2 -003942 fd97 sbrc tosh,7 -003943 940c 394e jmp PFA_TRUE1 -003945 940c 3957 jmp PFA_ZERO1 - - .include "words/true.asm" - - ; Arithmetics - ; leaves the value -1 (true) on TOS - VE_TRUE: -003947 ff04 .dw $ff04 -003948 7274 -003949 6575 .db "true" -00394a 393c .dw VE_HEAD - .set VE_HEAD = VE_TRUE - XT_TRUE: -00394b 394c .dw PFA_TRUE - PFA_TRUE: -00394c 939a -00394d 938a savetos - PFA_TRUE1: -00394e ef8f ser tosl -00394f ef9f ser tosh -003950 ceb4 jmp_ DO_NEXT - .include "words/zero.asm" - - ; Arithmetics - ; place a value 0 on TOS - VE_ZERO: -003951 ff01 .dw $ff01 -003952 0030 .db "0",0 -003953 3947 .dw VE_HEAD - .set VE_HEAD = VE_ZERO - XT_ZERO: -003954 3955 .dw PFA_ZERO - PFA_ZERO: -003955 939a -003956 938a savetos - PFA_ZERO1: -003957 01c1 movw tosl, zerol -003958 ceac jmp_ DO_NEXT - .include "words/uless.asm" - - ; Compare - ; true if u1 < u2 (unsigned) - VE_ULESS: -003959 ff02 .dw $ff02 -00395a 3c75 .db "u<" -00395b 3951 .dw VE_HEAD - .set VE_HEAD = VE_ULESS - XT_ULESS: -00395c 395d .dw PFA_ULESS - PFA_ULESS: -00395d 9129 ld temp2, Y+ -00395e 9139 ld temp3, Y+ -00395f 1782 cp tosl, temp2 -003960 0793 cpc tosh, temp3 -003961 f3a8 brlo PFA_ZERO1 -003962 f3a1 brbs 1, PFA_ZERO1 -003963 cfea jmp_ PFA_TRUE1 - .include "words/u-greater.asm" - - ; Compare - ; true if u1 > u2 (unsigned) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UGREATER: -003964 ff02 .dw $ff02 -003965 3e75 .db "u>" -003966 3959 .dw VE_HEAD - .set VE_HEAD = VE_UGREATER - XT_UGREATER: -003967 3801 .dw DO_COLON - PFA_UGREATER: - .endif -003968 38c4 .DW XT_SWAP -003969 395c .dw XT_ULESS -00396a 3820 .dw XT_EXIT - .include "words/less.asm" - - ; Compare - ; true if n1 is less than n2 - VE_LESS: -00396b ff01 .dw $ff01 -00396c 003c .db "<",0 -00396d 3964 .dw VE_HEAD - .set VE_HEAD = VE_LESS - XT_LESS: -00396e 396f .dw PFA_LESS - PFA_LESS: -00396f 9129 ld temp2, Y+ -003970 9139 ld temp3, Y+ -003971 1728 cp temp2, tosl -003972 0739 cpc temp3, tosh - PFA_LESSDONE: -003973 f71c brge PFA_ZERO1 -003974 cfd9 rjmp PFA_TRUE1 - .include "words/greater.asm" - - ; Compare - ; flag is true if n1 is greater than n2 - VE_GREATER: -003975 ff01 .dw $ff01 -003976 003e .db ">",0 -003977 396b .dw VE_HEAD - .set VE_HEAD = VE_GREATER - XT_GREATER: -003978 3979 .dw PFA_GREATER - PFA_GREATER: -003979 9129 ld temp2, Y+ -00397a 9139 ld temp3, Y+ -00397b 1728 cp temp2, tosl -00397c 0739 cpc temp3, tosh - PFA_GREATERDONE: -00397d f2cc brlt PFA_ZERO1 -00397e f2c1 brbs 1, PFA_ZERO1 -00397f cfce rjmp PFA_TRUE1 - - .include "words/log2.asm" - - ; Arithmetics - ; logarithm to base 2 or highest set bitnumber - VE_LOG2: -003980 ff04 .dw $ff04 -003981 6f6c -003982 3267 .db "log2" -003983 3975 .dw VE_HEAD - .set VE_HEAD = VE_LOG2 - XT_LOG2: -003984 3985 .dw PFA_LOG2 - PFA_LOG2: -003985 01fc movw zl, tosl -003986 2799 clr tosh -003987 e180 ldi tosl, 16 - PFA_LOG2_1: -003988 958a dec tosl -003989 f022 brmi PFA_LOG2_2 ; wrong data -00398a 0fee lsl zl -00398b 1fff rol zh -00398c f7d8 brcc PFA_LOG2_1 -00398d ce77 jmp_ DO_NEXT - - PFA_LOG2_2: -00398e 959a dec tosh -00398f ce75 jmp_ DO_NEXT - .include "words/minus.asm" - - ; Arithmetics - ; subtract n2 from n1 - VE_MINUS: -003990 ff01 .dw $ff01 -003991 002d .db "-",0 -003992 3980 .dw VE_HEAD - .set VE_HEAD = VE_MINUS - XT_MINUS: -003993 3994 .dw PFA_MINUS - PFA_MINUS: -003994 9109 ld temp0, Y+ -003995 9119 ld temp1, Y+ -003996 1b08 sub temp0, tosl -003997 0b19 sbc temp1, tosh -003998 01c8 movw tosl, temp0 -003999 ce6b jmp_ DO_NEXT - .include "words/plus.asm" - - ; Arithmetics - ; add n1 and n2 - VE_PLUS: -00399a ff01 .dw $ff01 -00399b 002b .db "+",0 -00399c 3990 .dw VE_HEAD - .set VE_HEAD = VE_PLUS - XT_PLUS: -00399d 399e .dw PFA_PLUS - PFA_PLUS: -00399e 9109 ld temp0, Y+ -00399f 9119 ld temp1, Y+ -0039a0 0f80 add tosl, temp0 -0039a1 1f91 adc tosh, temp1 -0039a2 ce62 jmp_ DO_NEXT - .include "words/mstar.asm" - - ; Arithmetics - ; multiply 2 cells to a double cell - VE_MSTAR: -0039a3 ff02 .dw $ff02 -0039a4 2a6d .db "m*" -0039a5 399a .dw VE_HEAD - .set VE_HEAD = VE_MSTAR - XT_MSTAR: -0039a6 39a7 .dw PFA_MSTAR - PFA_MSTAR: -0039a7 018c movw temp0, tosl -0039a8 9189 -0039a9 9199 loadtos -0039aa 019c movw temp2, tosl - ; high cell ah*bh -0039ab 0231 muls temp3, temp1 -0039ac 0170 movw temp4, r0 - ; low cell al*bl -0039ad 9f20 mul temp2, temp0 -0039ae 01c0 movw tosl, r0 - ; signed ah*bl -0039af 0330 mulsu temp3, temp0 -0039b0 08f3 sbc temp5, zeroh -0039b1 0d90 add tosh, r0 -0039b2 1ce1 adc temp4, r1 -0039b3 1cf3 adc temp5, zeroh - - ; signed al*bh -0039b4 0312 mulsu temp1, temp2 -0039b5 08f3 sbc temp5, zeroh -0039b6 0d90 add tosh, r0 -0039b7 1ce1 adc temp4, r1 -0039b8 1cf3 adc temp5, zeroh - -0039b9 939a -0039ba 938a savetos -0039bb 01c7 movw tosl, temp4 -0039bc ce48 jmp_ DO_NEXT - .include "words/umslashmod.asm" - - ; Arithmetics - ; unsigned division ud / u2 with remainder - VE_UMSLASHMOD: -0039bd ff06 .dw $ff06 -0039be 6d75 -0039bf 6d2f -0039c0 646f .db "um/mod" -0039c1 39a3 .dw VE_HEAD - .set VE_HEAD = VE_UMSLASHMOD - XT_UMSLASHMOD: -0039c2 39c3 .dw PFA_UMSLASHMOD - PFA_UMSLASHMOD: -0039c3 017c movw temp4, tosl - -0039c4 9129 ld temp2, Y+ -0039c5 9139 ld temp3, Y+ - -0039c6 9109 ld temp0, Y+ -0039c7 9119 ld temp1, Y+ - - ;; unsigned 32/16 -> 16r16 divide - - PFA_UMSLASHMODmod: - - ; set loop counter -0039c8 e140 ldi temp6,$10 - - PFA_UMSLASHMODmod_loop: - ; shift left, saving high bit -0039c9 2755 clr temp7 -0039ca 0f00 lsl temp0 -0039cb 1f11 rol temp1 -0039cc 1f22 rol temp2 -0039cd 1f33 rol temp3 -0039ce 1f55 rol temp7 - - ; try subtracting divisor -0039cf 152e cp temp2, temp4 -0039d0 053f cpc temp3, temp5 -0039d1 0552 cpc temp7,zerol - -0039d2 f018 brcs PFA_UMSLASHMODmod_loop_control - - PFA_UMSLASHMODmod_subtract: - ; dividend is large enough - ; do the subtraction for real - ; and set lowest bit -0039d3 9503 inc temp0 -0039d4 192e sub temp2, temp4 -0039d5 093f sbc temp3, temp5 - - PFA_UMSLASHMODmod_loop_control: -0039d6 954a dec temp6 -0039d7 f789 brne PFA_UMSLASHMODmod_loop - - PFA_UMSLASHMODmod_done: - ; put remainder on stack -0039d8 933a st -Y,temp3 -0039d9 932a st -Y,temp2 - - ; put quotient on stack -0039da 01c8 movw tosl, temp0 -0039db ce29 jmp_ DO_NEXT - .include "words/umstar.asm" - - ; Arithmetics - ; multiply 2 unsigned cells to a double cell - VE_UMSTAR: -0039dc ff03 .dw $ff03 -0039dd 6d75 -0039de 002a .db "um*",0 -0039df 39bd .dw VE_HEAD - .set VE_HEAD = VE_UMSTAR - XT_UMSTAR: -0039e0 39e1 .dw PFA_UMSTAR - PFA_UMSTAR: -0039e1 018c movw temp0, tosl -0039e2 9189 -0039e3 9199 loadtos - ; result: (temp3*temp1)* 65536 + (temp3*temp0 + temp1*temp2) * 256 + (temp0 * temp2) - ; low bytes -0039e4 9f80 mul tosl,temp0 -0039e5 01f0 movw zl, r0 -0039e6 2722 clr temp2 -0039e7 2733 clr temp3 - ; middle bytes -0039e8 9f90 mul tosh, temp0 -0039e9 0df0 add zh, r0 -0039ea 1d21 adc temp2, r1 -0039eb 1d33 adc temp3, zeroh - -0039ec 9f81 mul tosl, temp1 -0039ed 0df0 add zh, r0 -0039ee 1d21 adc temp2, r1 -0039ef 1d33 adc temp3, zeroh - -0039f0 9f91 mul tosh, temp1 -0039f1 0d20 add temp2, r0 -0039f2 1d31 adc temp3, r1 -0039f3 01cf movw tosl, zl -0039f4 939a -0039f5 938a savetos -0039f6 01c9 movw tosl, temp2 -0039f7 ce0d jmp_ DO_NEXT - - .include "words/invert.asm" - - ; Arithmetics - ; 1-complement of TOS - VE_INVERT: -0039f8 ff06 .dw $ff06 -0039f9 6e69 -0039fa 6576 -0039fb 7472 .db "invert" -0039fc 39dc .dw VE_HEAD - .set VE_HEAD = VE_INVERT - XT_INVERT: -0039fd 39fe .dw PFA_INVERT - PFA_INVERT: -0039fe 9580 com tosl -0039ff 9590 com tosh -003a00 ce04 jmp_ DO_NEXT - .include "words/2slash.asm" - - ; Arithmetics - ; arithmetic shift right - VE_2SLASH: -003a01 ff02 .dw $ff02 -003a02 2f32 .db "2/" -003a03 39f8 .dw VE_HEAD - .set VE_HEAD = VE_2SLASH - XT_2SLASH: -003a04 3a05 .dw PFA_2SLASH - PFA_2SLASH: -003a05 9595 asr tosh -003a06 9587 ror tosl -003a07 cdfd jmp_ DO_NEXT - .include "words/2star.asm" - - ; Arithmetics - ; arithmetic shift left, filling with zero - VE_2STAR: -003a08 ff02 .dw $ff02 -003a09 2a32 .db "2*" -003a0a 3a01 .dw VE_HEAD - .set VE_HEAD = VE_2STAR - XT_2STAR: -003a0b 3a0c .dw PFA_2STAR - PFA_2STAR: -003a0c 0f88 lsl tosl -003a0d 1f99 rol tosh -003a0e cdf6 jmp_ DO_NEXT - .include "words/and.asm" - - ; Logic - ; bitwise and - VE_AND: -003a0f ff03 .dw $ff03 -003a10 6e61 -003a11 0064 .db "and",0 -003a12 3a08 .dw VE_HEAD - .set VE_HEAD = VE_AND - XT_AND: -003a13 3a14 .dw PFA_AND - PFA_AND: -003a14 9109 ld temp0, Y+ -003a15 9119 ld temp1, Y+ -003a16 2380 and tosl, temp0 -003a17 2391 and tosh, temp1 -003a18 cdec jmp_ DO_NEXT - .include "words/or.asm" - - ; Logic - ; logical or - VE_OR: -003a19 ff02 .dw $ff02 -003a1a 726f .db "or" -003a1b 3a0f .dw VE_HEAD - .set VE_HEAD = VE_OR - XT_OR: -003a1c 3a1d .dw PFA_OR - PFA_OR: -003a1d 9109 ld temp0, Y+ -003a1e 9119 ld temp1, Y+ -003a1f 2b80 or tosl, temp0 -003a20 2b91 or tosh, temp1 -003a21 cde3 jmp_ DO_NEXT - - .include "words/xor.asm" - - ; Logic - ; exclusive or - VE_XOR: -003a22 ff03 .dw $ff03 -003a23 6f78 -003a24 0072 .db "xor",0 -003a25 3a19 .dw VE_HEAD - .set VE_HEAD = VE_XOR - XT_XOR: -003a26 3a27 .dw PFA_XOR - PFA_XOR: -003a27 9109 ld temp0, Y+ -003a28 9119 ld temp1, Y+ -003a29 2780 eor tosl, temp0 -003a2a 2791 eor tosh, temp1 -003a2b cdd9 jmp_ DO_NEXT - - .include "words/1plus.asm" - - ; Arithmetics - ; optimized increment - VE_1PLUS: -003a2c ff02 .dw $ff02 -003a2d 2b31 .db "1+" -003a2e 3a22 .dw VE_HEAD - .set VE_HEAD = VE_1PLUS - XT_1PLUS: -003a2f 3a30 .dw PFA_1PLUS - PFA_1PLUS: -003a30 9601 adiw tosl,1 -003a31 cdd3 jmp_ DO_NEXT - .include "words/1minus.asm" - - ; Arithmetics - ; optimized decrement - VE_1MINUS: -003a32 ff02 .dw $ff02 -003a33 2d31 .db "1-" -003a34 3a2c .dw VE_HEAD - .set VE_HEAD = VE_1MINUS - XT_1MINUS: -003a35 3a36 .dw PFA_1MINUS - PFA_1MINUS: -003a36 9701 sbiw tosl, 1 -003a37 cdcd jmp_ DO_NEXT - .include "words/q-negate.asm" - - ; 0< IF NEGATE THEN ; ...a common factor - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QNEGATE: -003a38 ff07 .dw $ff07 -003a39 6e3f -003a3a 6765 -003a3b 7461 -../../common\words/q-negate.asm(11): warning: .cseg .db misalignment - padding zero byte -003a3c 0065 .db "?negate" -003a3d 3a32 .dw VE_HEAD - .set VE_HEAD = VE_QNEGATE - XT_QNEGATE: -003a3e 3801 .dw DO_COLON - PFA_QNEGATE: - - .endif -003a3f 3921 -003a40 3836 .DW XT_ZEROLESS,XT_DOCONDBRANCH -003a41 3a43 DEST(QNEG1) -003a42 3e27 .DW XT_NEGATE -003a43 3820 QNEG1: .DW XT_EXIT - .include "words/lshift.asm" - - ; Arithmetics - ; logically shift n1 left n2 times - VE_LSHIFT: -003a44 ff06 .dw $ff06 -003a45 736c -003a46 6968 -003a47 7466 .db "lshift" -003a48 3a38 .dw VE_HEAD - .set VE_HEAD = VE_LSHIFT - XT_LSHIFT: -003a49 3a4a .dw PFA_LSHIFT - PFA_LSHIFT: -003a4a 01fc movw zl, tosl -003a4b 9189 -003a4c 9199 loadtos - PFA_LSHIFT1: -003a4d 9731 sbiw zl, 1 -003a4e f01a brmi PFA_LSHIFT2 -003a4f 0f88 lsl tosl -003a50 1f99 rol tosh -003a51 cffb rjmp PFA_LSHIFT1 - PFA_LSHIFT2: -003a52 cdb2 jmp_ DO_NEXT - - .include "words/rshift.asm" - - ; Arithmetics - ; shift n1 n2-times logically right - VE_RSHIFT: -003a53 ff06 .dw $ff06 -003a54 7372 -003a55 6968 -003a56 7466 .db "rshift" -003a57 3a44 .dw VE_HEAD - .set VE_HEAD = VE_RSHIFT - XT_RSHIFT: -003a58 3a59 .dw PFA_RSHIFT - PFA_RSHIFT: -003a59 01fc movw zl, tosl -003a5a 9189 -003a5b 9199 loadtos - PFA_RSHIFT1: -003a5c 9731 sbiw zl, 1 -003a5d f01a brmi PFA_RSHIFT2 -003a5e 9596 lsr tosh -003a5f 9587 ror tosl -003a60 cffb rjmp PFA_RSHIFT1 - PFA_RSHIFT2: -003a61 cda3 jmp_ DO_NEXT - - .include "words/plusstore.asm" - - ; Arithmetics - ; add n to content of RAM address a-addr - VE_PLUSSTORE: -003a62 ff02 .dw $ff02 -003a63 212b .db "+!" -003a64 3a53 .dw VE_HEAD - .set VE_HEAD = VE_PLUSSTORE - XT_PLUSSTORE: -003a65 3a66 .dw PFA_PLUSSTORE - PFA_PLUSSTORE: -003a66 01fc movw zl, tosl -003a67 9189 -003a68 9199 loadtos -003a69 8120 ldd temp2, Z+0 -003a6a 8131 ldd temp3, Z+1 -003a6b 0f82 add tosl, temp2 -003a6c 1f93 adc tosh, temp3 -003a6d 8380 std Z+0, tosl -003a6e 8391 std Z+1, tosh -003a6f 9189 -003a70 9199 loadtos -003a71 cd93 jmp_ DO_NEXT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/rpfetch.asm" - - ; Stack - ; current return stack pointer address - VE_RP_FETCH: -003a72 ff03 .dw $ff03 -003a73 7072 -003a74 0040 .db "rp@",0 -003a75 3a62 .dw VE_HEAD - .set VE_HEAD = VE_RP_FETCH - XT_RP_FETCH: -003a76 3a77 .dw PFA_RP_FETCH - PFA_RP_FETCH: -003a77 939a -003a78 938a savetos -003a79 b78d in tosl, SPL -003a7a b79e in tosh, SPH -003a7b cd89 jmp_ DO_NEXT - .include "words/rpstore.asm" - - ; Stack - ; set return stack pointer - VE_RP_STORE: -003a7c ff03 .dw $ff03 -003a7d 7072 -003a7e 0021 .db "rp!",0 -003a7f 3a72 .dw VE_HEAD - .set VE_HEAD = VE_RP_STORE - XT_RP_STORE: -003a80 3a81 .dw PFA_RP_STORE - PFA_RP_STORE: -003a81 b72f in temp2, SREG -003a82 94f8 cli -003a83 bf8d out SPL, tosl -003a84 bf9e out SPH, tosh -003a85 bf2f out SREG, temp2 -003a86 9189 -003a87 9199 loadtos -003a88 cd7c jmp_ DO_NEXT - .include "words/spfetch.asm" - - ; Stack - ; current data stack pointer - VE_SP_FETCH: -003a89 ff03 .dw $ff03 -003a8a 7073 -003a8b 0040 .db "sp@",0 -003a8c 3a7c .dw VE_HEAD - .set VE_HEAD = VE_SP_FETCH - XT_SP_FETCH: -003a8d 3a8e .dw PFA_SP_FETCH - PFA_SP_FETCH: -003a8e 939a -003a8f 938a savetos -003a90 01ce movw tosl, yl -003a91 cd73 jmp_ DO_NEXT - .include "words/spstore.asm" - - ; Stack - ; set data stack pointer to addr - VE_SP_STORE: -003a92 ff03 .dw $ff03 -003a93 7073 -003a94 0021 .db "sp!",0 -003a95 3a89 .dw VE_HEAD - .set VE_HEAD = VE_SP_STORE - XT_SP_STORE: -003a96 3a97 .dw PFA_SP_STORE - PFA_SP_STORE: -003a97 01ec movw yl, tosl -003a98 9189 -003a99 9199 loadtos -003a9a cd6a jmp_ DO_NEXT - - .include "words/dodo.asm" - - ; System - ; runtime of do - ;VE_DODO: - ; .dw $ff04 - ; .db "(do)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DODO - XT_DODO: -003a9b 3a9c .dw PFA_DODO - PFA_DODO: -003a9c 9129 ld temp2, Y+ -003a9d 9139 ld temp3, Y+ ; limit - PFA_DODO1: -003a9e e8e0 ldi zl, $80 -003a9f 0f3e add temp3, zl -003aa0 1b82 sub tosl, temp2 -003aa1 0b93 sbc tosh, temp3 - -003aa2 933f push temp3 -003aa3 932f push temp2 ; limit ( --> limit + $8000) -003aa4 939f push tosh -003aa5 938f push tosl ; start -> index ( --> index - (limit - $8000) -003aa6 9189 -003aa7 9199 loadtos -003aa8 cd5c jmp_ DO_NEXT - .include "words/i.asm" - - ; Compiler - ; current loop counter - VE_I: -003aa9 ff01 .dw $FF01 -003aaa 0069 .db "i",0 -003aab 3a92 .dw VE_HEAD - .set VE_HEAD = VE_I - XT_I: -003aac 3aad .dw PFA_I - PFA_I: -003aad 939a -003aae 938a savetos -003aaf 918f pop tosl -003ab0 919f pop tosh ; index -003ab1 91ef pop zl -003ab2 91ff pop zh ; limit -003ab3 93ff push zh -003ab4 93ef push zl -003ab5 939f push tosh -003ab6 938f push tosl -003ab7 0f8e add tosl, zl -003ab8 1f9f adc tosh, zh -003ab9 cd4b jmp_ DO_NEXT - .include "words/doplusloop.asm" - - ; System - ; runtime of +loop - ;VE_DOPLUSLOOP: - ; .dw $ff07 - ; .db "(+loop)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOPLUSLOOP - XT_DOPLUSLOOP: -003aba 3abb .dw PFA_DOPLUSLOOP - PFA_DOPLUSLOOP: -003abb 91ef pop zl -003abc 91ff pop zh -003abd 0fe8 add zl, tosl -003abe 1ff9 adc zh, tosh -003abf 9189 -003ac0 9199 loadtos -003ac1 f01b brvs PFA_DOPLUSLOOP_LEAVE - ; next cycle - PFA_DOPLUSLOOP_NEXT: - ; next iteration -003ac2 93ff push zh -003ac3 93ef push zl -003ac4 cd6b rjmp PFA_DOBRANCH ; read next cell from dictionary and jump to its destination - PFA_DOPLUSLOOP_LEAVE: -003ac5 910f pop temp0 -003ac6 911f pop temp1 ; remove limit -003ac7 9611 adiw xl, 1 ; skip branch-back address -003ac8 cd3c jmp_ DO_NEXT - .include "words/doloop.asm" - - ; System - ; runtime of loop - ;VE_DOLOOP: - ; .dw $ff06 - ; .db "(loop)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOLOOP - XT_DOLOOP: -003ac9 3aca .dw PFA_DOLOOP - PFA_DOLOOP: -003aca 91ef pop zl -003acb 91ff pop zh -003acc 9631 adiw zl,1 -003acd f3bb brvs PFA_DOPLUSLOOP_LEAVE -003ace cff3 jmp_ PFA_DOPLUSLOOP_NEXT - .include "words/unloop.asm" - - ; Compiler - ; remove loop-sys, exit the loop and continue execution after it - VE_UNLOOP: -003acf ff06 .dw $ff06 -003ad0 6e75 -003ad1 6f6c -003ad2 706f .db "unloop" -003ad3 3aa9 .dw VE_HEAD - .set VE_HEAD = VE_UNLOOP - XT_UNLOOP: -003ad4 3ad5 .dw PFA_UNLOOP - PFA_UNLOOP: -003ad5 911f pop temp1 -003ad6 910f pop temp0 -003ad7 911f pop temp1 -003ad8 910f pop temp0 -003ad9 cd2b jmp_ DO_NEXT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;; - - .include "words/cmove_g.asm" - - ; Memory - ; copy data in RAM from higher to lower addresses. - VE_CMOVE_G: -003ada ff06 .dw $ff06 -003adb 6d63 -003adc 766f -003add 3e65 .db "cmove>" -003ade 3acf .dw VE_HEAD - .set VE_HEAD = VE_CMOVE_G - XT_CMOVE_G: -003adf 3ae0 .dw PFA_CMOVE_G - PFA_CMOVE_G: -003ae0 93bf push xh -003ae1 93af push xl -003ae2 91e9 ld zl, Y+ -003ae3 91f9 ld zh, Y+ ; addr-to -003ae4 91a9 ld xl, Y+ -003ae5 91b9 ld xh, Y+ ; addr-from -003ae6 2f09 mov temp0, tosh -003ae7 2b08 or temp0, tosl -003ae8 f041 brbs 1, PFA_CMOVE_G1 -003ae9 0fe8 add zl, tosl -003aea 1ff9 adc zh, tosh -003aeb 0fa8 add xl, tosl -003aec 1fb9 adc xh, tosh - PFA_CMOVE_G2: -003aed 911e ld temp1, -X -003aee 9312 st -Z, temp1 -003aef 9701 sbiw tosl, 1 -003af0 f7e1 brbc 1, PFA_CMOVE_G2 - PFA_CMOVE_G1: -003af1 91af pop xl -003af2 91bf pop xh -003af3 9189 -003af4 9199 loadtos -003af5 cd0f jmp_ DO_NEXT - .include "words/byteswap.asm" - - ; Arithmetics - ; exchange the bytes of the TOS - VE_BYTESWAP: -003af6 ff02 .dw $ff02 -003af7 3c3e .db "><" -003af8 3ada .dw VE_HEAD - .set VE_HEAD = VE_BYTESWAP - XT_BYTESWAP: -003af9 3afa .dw PFA_BYTESWAP - PFA_BYTESWAP: -003afa 2f09 mov temp0, tosh -003afb 2f98 mov tosh, tosl -003afc 2f80 mov tosl, temp0 -003afd cd07 jmp_ DO_NEXT - .include "words/up.asm" - - ; System Variable - ; get user area pointer - VE_UP_FETCH: -003afe ff03 .dw $ff03 -003aff 7075 -003b00 0040 .db "up@",0 -003b01 3af6 .dw VE_HEAD - .set VE_HEAD = VE_UP_FETCH - XT_UP_FETCH: -003b02 3b03 .dw PFA_UP_FETCH - PFA_UP_FETCH: -003b03 939a -003b04 938a savetos -003b05 01c2 movw tosl, upl -003b06 ccfe jmp_ DO_NEXT - - ; ( addr -- ) - ; System Variable - ; set user area pointer - VE_UP_STORE: -003b07 ff03 .dw $ff03 -003b08 7075 -003b09 0021 .db "up!",0 -003b0a 3afe .dw VE_HEAD - .set VE_HEAD = VE_UP_STORE - XT_UP_STORE: -003b0b 3b0c .dw PFA_UP_STORE - PFA_UP_STORE: -003b0c 012c movw upl, tosl -003b0d 9189 -003b0e 9199 loadtos -003b0f ccf5 jmp_ DO_NEXT - .include "words/1ms.asm" - - ; Time - ; busy waits (almost) exactly 1 millisecond - VE_1MS: -003b10 ff03 .dw $ff03 -003b11 6d31 -003b12 0073 .db "1ms",0 -003b13 3b07 .dw VE_HEAD - .set VE_HEAD = VE_1MS - XT_1MS: -003b14 3b15 .dw PFA_1MS - PFA_1MS: -003b15 eae0 -003b16 e0ff -003b17 9731 -003b18 f7f1 delay 1000 -003b19 cceb jmp_ DO_NEXT - .include "words/2to_r.asm" - - ; Stack - ; move DTOS to TOR - VE_2TO_R: -003b1a ff03 .dw $ff03 -003b1b 3e32 -003b1c 0072 .db "2>r",0 -003b1d 3b10 .dw VE_HEAD - .set VE_HEAD = VE_2TO_R - XT_2TO_R: -003b1e 3b1f .dw PFA_2TO_R - PFA_2TO_R: -003b1f 01fc movw zl, tosl -003b20 9189 -003b21 9199 loadtos -003b22 939f push tosh -003b23 938f push tosl -003b24 93ff push zh -003b25 93ef push zl -003b26 9189 -003b27 9199 loadtos -003b28 ccdc jmp_ DO_NEXT - .include "words/2r_from.asm" - - ; Stack - ; move DTOR to TOS - VE_2R_FROM: -003b29 ff03 .dw $ff03 -003b2a 7232 -003b2b 003e .db "2r>",0 -003b2c 3b1a .dw VE_HEAD - .set VE_HEAD = VE_2R_FROM - XT_2R_FROM: -003b2d 3b2e .dw PFA_2R_FROM - PFA_2R_FROM: -003b2e 939a -003b2f 938a savetos -003b30 91ef pop zl -003b31 91ff pop zh -003b32 918f pop tosl -003b33 919f pop tosh -003b34 939a -003b35 938a savetos -003b36 01cf movw tosl, zl -003b37 cccd jmp_ DO_NEXT - - .include "words/store-e.asm" - - ; Memory - ; write n (2bytes) to eeprom address - VE_STOREE: -003b38 ff02 .dw $ff02 -003b39 6521 .db "!e" -003b3a 3b29 .dw VE_HEAD - .set VE_HEAD = VE_STOREE - XT_STOREE: -003b3b 3b3c .dw PFA_STOREE - PFA_STOREE: - .if WANT_UNIFIED == 1 - .endif - PFA_STOREE0: -003b3c 01fc movw zl, tosl -003b3d 9189 -003b3e 9199 loadtos -003b3f b72f in_ temp2, SREG -003b40 94f8 cli -003b41 d028 rcall PFA_FETCHE2 -003b42 b500 in_ temp0, EEDR -003b43 1708 cp temp0,tosl -003b44 f009 breq PFA_STOREE3 -003b45 d00b rcall PFA_STOREE1 - PFA_STOREE3: -003b46 9631 adiw zl,1 -003b47 d022 rcall PFA_FETCHE2 -003b48 b500 in_ temp0, EEDR -003b49 1709 cp temp0,tosh -003b4a f011 breq PFA_STOREE4 -003b4b 2f89 mov tosl, tosh -003b4c d004 rcall PFA_STOREE1 - PFA_STOREE4: -003b4d bf2f out_ SREG, temp2 -003b4e 9189 -003b4f 9199 loadtos -003b50 ccb4 jmp_ DO_NEXT - - PFA_STOREE1: -003b51 99f9 sbic EECR, EEPE -003b52 cffe rjmp PFA_STOREE1 - - PFA_STOREE2: ; estore_wait_low_spm: -003b53 b707 in_ temp0, SPMCSR -003b54 fd00 sbrc temp0,SPMEN -003b55 cffd rjmp PFA_STOREE2 - -003b56 bdf2 out_ EEARH,zh -003b57 bde1 out_ EEARL,zl -003b58 bd80 out_ EEDR, tosl -003b59 9afa sbi EECR,EEMPE -003b5a 9af9 sbi EECR,EEPE - -003b5b 9508 ret - .if WANT_UNIFIED == 1 - .endif - .include "words/fetch-e.asm" - - ; Memory - ; read 1 cell from eeprom - VE_FETCHE: -003b5c ff02 .dw $ff02 -003b5d 6540 .db "@e" -003b5e 3b38 .dw VE_HEAD - .set VE_HEAD = VE_FETCHE - XT_FETCHE: -003b5f 3b60 .dw PFA_FETCHE - PFA_FETCHE: - .if WANT_UNIFIED == 1 - .endif - PFA_FETCHE1: -003b60 b72f in_ temp2, SREG -003b61 94f8 cli -003b62 01fc movw zl, tosl -003b63 d006 rcall PFA_FETCHE2 -003b64 b580 in_ tosl, EEDR - -003b65 9631 adiw zl,1 - -003b66 d003 rcall PFA_FETCHE2 -003b67 b590 in_ tosh, EEDR -003b68 bf2f out_ SREG, temp2 -003b69 cc9b jmp_ DO_NEXT - - PFA_FETCHE2: -003b6a 99f9 sbic EECR, EEPE -003b6b cffe rjmp PFA_FETCHE2 - -003b6c bdf2 out_ EEARH,zh -003b6d bde1 out_ EEARL,zl - -003b6e 9af8 sbi EECR,EERE -003b6f 9508 ret - - .if WANT_UNIFIED == 1 - .endif - .include "words/store-i.asm" - - ; System Value - ; Deferred action to write a single 16bit cell to flash - VE_STOREI: -003b70 ff02 .dw $ff02 -003b71 6921 .db "!i" -003b72 3b5c .dw VE_HEAD - .set VE_HEAD = VE_STOREI - XT_STOREI: -003b73 3dff .dw PFA_DODEFER1 - PFA_STOREI: -003b74 0066 .dw EE_STOREI -003b75 3da0 .dw XT_EDEFERFETCH -003b76 3daa .dw XT_EDEFERSTORE - .if FLASHEND > $10000 - .else - .include "words/store-i_nrww.asm" - - ; Memory - ; writes n to flash memory using assembly code (code to be placed in boot loader section) - VE_DO_STOREI_NRWW: -003b77 ff09 .dw $ff09 -003b78 2128 -003b79 2d69 -003b7a 726e -003b7b 7777 -003b7c 0029 .db "(!i-nrww)",0 -003b7d 3b70 .dw VE_HEAD - .set VE_HEAD = VE_DO_STOREI_NRWW - XT_DO_STOREI: -003b7e 3b7f .dw PFA_DO_STOREI_NRWW - PFA_DO_STOREI_NRWW: - ; store status register -003b7f b71f in temp1,SREG -003b80 931f push temp1 -003b81 94f8 cli - -003b82 019c movw temp2, tosl ; save the (word) address -003b83 9189 -003b84 9199 loadtos ; get the new value for the flash cell -003b85 93af push xl -003b86 93bf push xh -003b87 93cf push yl -003b88 93df push yh -003b89 d009 rcall DO_STOREI_atmega -003b8a 91df pop yh -003b8b 91cf pop yl -003b8c 91bf pop xh -003b8d 91af pop xl - ; finally clear the stack -003b8e 9189 -003b8f 9199 loadtos -003b90 911f pop temp1 - ; restore status register (and interrupt enable flag) -003b91 bf1f out SREG,temp1 - -003b92 cc72 jmp_ DO_NEXT - - ; - DO_STOREI_atmega: - ; write data to temp page buffer - ; use the values in tosl/tosh at the - ; appropiate place -003b93 d010 rcall pageload - - ; erase page if needed - ; it is needed if a bit goes from 0 to 1 -003b94 94e0 com temp4 -003b95 94f0 com temp5 -003b96 218e and tosl, temp4 -003b97 219f and tosh, temp5 -003b98 2b98 or tosh, tosl -003b99 f019 breq DO_STOREI_writepage -003b9a 01f9 movw zl, temp2 -003b9b e002 ldi temp0,(1<8000 - .elif AMFORTH_NRWW_SIZE>4000 - .include "dict/core_4k.inc" - - ; in a short distance to DO_NEXT - .include "words/n_to_r.asm" - - ; Stack - ; move n items from data stack to return stack - VE_N_TO_R: -003bd2 ff03 .dw $ff03 -003bd3 3e6e -003bd4 0072 .db "n>r",0 -003bd5 3bc8 .dw VE_HEAD - .set VE_HEAD = VE_N_TO_R - XT_N_TO_R: -003bd6 3bd7 .dw PFA_N_TO_R - PFA_N_TO_R: -003bd7 01fc movw zl, tosl -003bd8 2f08 mov temp0, tosl - PFA_N_TO_R1: -003bd9 9189 -003bda 9199 loadtos -003bdb 939f push tosh -003bdc 938f push tosl -003bdd 950a dec temp0 -003bde f7d1 brne PFA_N_TO_R1 -003bdf 93ef push zl -003be0 93ff push zh -003be1 9189 -003be2 9199 loadtos -003be3 cc21 jmp_ DO_NEXT - .include "words/n_r_from.asm" - - ; Stack - ; move n items from return stack to data stack - VE_N_R_FROM: -003be4 ff03 .dw $ff03 -003be5 726e -003be6 003e .db "nr>",0 -003be7 3bd2 .dw VE_HEAD - .set VE_HEAD = VE_N_R_FROM - XT_N_R_FROM: -003be8 3be9 .dw PFA_N_R_FROM - PFA_N_R_FROM: -003be9 939a -003bea 938a savetos -003beb 91ff pop zh -003bec 91ef pop zl -003bed 2f0e mov temp0, zl - PFA_N_R_FROM1: -003bee 918f pop tosl -003bef 919f pop tosh -003bf0 939a -003bf1 938a savetos -003bf2 950a dec temp0 -003bf3 f7d1 brne PFA_N_R_FROM1 -003bf4 01cf movw tosl, zl -003bf5 cc0f jmp_ DO_NEXT - .include "words/d-2star.asm" - - ; Arithmetics - ; shift a double cell left - VE_D2STAR: -003bf6 ff03 .dw $ff03 -003bf7 3264 -003bf8 002a .db "d2*",0 -003bf9 3be4 .dw VE_HEAD - .set VE_HEAD = VE_D2STAR - XT_D2STAR: -003bfa 3bfb .dw PFA_D2STAR - PFA_D2STAR: -003bfb 9109 ld temp0, Y+ -003bfc 9119 ld temp1, Y+ -003bfd 0f00 lsl temp0 -003bfe 1f11 rol temp1 -003bff 1f88 rol tosl -003c00 1f99 rol tosh -003c01 931a st -Y, temp1 -003c02 930a st -Y, temp0 -003c03 cc01 jmp_ DO_NEXT - .include "words/d-2slash.asm" - - ; Arithmetics - ; shift a double cell value right - VE_D2SLASH: -003c04 ff03 .dw $ff03 -003c05 3264 -003c06 002f .db "d2/",0 -003c07 3bf6 .dw VE_HEAD - .set VE_HEAD = VE_D2SLASH - XT_D2SLASH: -003c08 3c09 .dw PFA_D2SLASH - PFA_D2SLASH: -003c09 9109 ld temp0, Y+ -003c0a 9119 ld temp1, Y+ -003c0b 9595 asr tosh -003c0c 9587 ror tosl -003c0d 9517 ror temp1 -003c0e 9507 ror temp0 -003c0f 931a st -Y, temp1 -003c10 930a st -Y, temp0 -003c11 cbf3 jmp_ DO_NEXT - .include "words/d-plus.asm" - - ; Arithmetics - ; add 2 double cell values - VE_DPLUS: -003c12 ff02 .dw $ff02 -003c13 2b64 .db "d+" -003c14 3c04 .dw VE_HEAD - .set VE_HEAD = VE_DPLUS - XT_DPLUS: -003c15 3c16 .dw PFA_DPLUS - PFA_DPLUS: -003c16 9129 ld temp2, Y+ -003c17 9139 ld temp3, Y+ - -003c18 90e9 ld temp4, Y+ -003c19 90f9 ld temp5, Y+ -003c1a 9149 ld temp6, Y+ -003c1b 9159 ld temp7, Y+ - -003c1c 0f24 add temp2, temp6 -003c1d 1f35 adc temp3, temp7 -003c1e 1d8e adc tosl, temp4 -003c1f 1d9f adc tosh, temp5 - -003c20 933a st -Y, temp3 -003c21 932a st -Y, temp2 -003c22 cbe2 jmp_ DO_NEXT - .include "words/d-minus.asm" - - ; Arithmetics - ; subtract d2 from d1 - VE_DMINUS: -003c23 ff02 .dw $ff02 -003c24 2d64 .db "d-" -003c25 3c12 .dw VE_HEAD - .set VE_HEAD = VE_DMINUS - XT_DMINUS: -003c26 3c27 .dw PFA_DMINUS - PFA_DMINUS: -003c27 9129 ld temp2, Y+ -003c28 9139 ld temp3, Y+ - -003c29 90e9 ld temp4, Y+ -003c2a 90f9 ld temp5, Y+ -003c2b 9149 ld temp6, Y+ -003c2c 9159 ld temp7, Y+ - -003c2d 1b42 sub temp6, temp2 -003c2e 0b53 sbc temp7, temp3 -003c2f 0ae8 sbc temp4, tosl -003c30 0af9 sbc temp5, tosh - -003c31 935a st -Y, temp7 -003c32 934a st -Y, temp6 -003c33 01c7 movw tosl, temp4 -003c34 cbd0 jmp_ DO_NEXT - .include "words/d-invert.asm" - - ; Arithmetics - ; invert all bits in the double cell value - VE_DINVERT: -003c35 ff07 .dw $ff07 -003c36 6964 -003c37 766e -003c38 7265 -003c39 0074 .db "dinvert",0 -003c3a 3c23 .dw VE_HEAD - .set VE_HEAD = VE_DINVERT - XT_DINVERT: -003c3b 3c3c .dw PFA_DINVERT - PFA_DINVERT: -003c3c 9109 ld temp0, Y+ -003c3d 9119 ld temp1, Y+ -003c3e 9580 com tosl -003c3f 9590 com tosh -003c40 9500 com temp0 -003c41 9510 com temp1 -003c42 931a st -Y, temp1 -003c43 930a st -Y, temp0 -003c44 cbc0 jmp_ DO_NEXT - .include "words/slashmod.asm" - - ; Arithmetics - ; signed division n1/n2 with remainder and quotient - VE_SLASHMOD: -003c45 ff04 .dw $ff04 -003c46 6d2f -003c47 646f .db "/mod" -003c48 3c35 .dw VE_HEAD - .set VE_HEAD = VE_SLASHMOD - XT_SLASHMOD: -003c49 3c4a .dw PFA_SLASHMOD - PFA_SLASHMOD: -003c4a 019c movw temp2, tosl - -003c4b 9109 ld temp0, Y+ -003c4c 9119 ld temp1, Y+ - -003c4d 2f41 mov temp6,temp1 ;move dividend High to sign register -003c4e 2743 eor temp6,temp3 ;xor divisor High with sign register -003c4f ff17 sbrs temp1,7 ;if MSB in dividend set -003c50 c004 rjmp PFA_SLASHMOD_1 -003c51 9510 com temp1 ; change sign of dividend -003c52 9500 com temp0 -003c53 5f0f subi temp0,low(-1) -003c54 4f1f sbci temp1,high(-1) - PFA_SLASHMOD_1: -003c55 ff37 sbrs temp3,7 ;if MSB in divisor set -003c56 c004 rjmp PFA_SLASHMOD_2 -003c57 9530 com temp3 ; change sign of divisor -003c58 9520 com temp2 -003c59 5f2f subi temp2,low(-1) -003c5a 4f3f sbci temp3,high(-1) -003c5b 24ee PFA_SLASHMOD_2: clr temp4 ;clear remainder Low byte -003c5c 18ff sub temp5,temp5;clear remainder High byte and carry -003c5d e151 ldi temp7,17 ;init loop counter - -003c5e 1f00 PFA_SLASHMOD_3: rol temp0 ;shift left dividend -003c5f 1f11 rol temp1 -003c60 955a dec temp7 ;decrement counter -003c61 f439 brne PFA_SLASHMOD_5 ;if done -003c62 ff47 sbrs temp6,7 ; if MSB in sign register set -003c63 c004 rjmp PFA_SLASHMOD_4 -003c64 9510 com temp1 ; change sign of result -003c65 9500 com temp0 -003c66 5f0f subi temp0,low(-1) -003c67 4f1f sbci temp1,high(-1) -003c68 c00b PFA_SLASHMOD_4: rjmp PFA_SLASHMODmod_done ; return -003c69 1cee PFA_SLASHMOD_5: rol temp4 ;shift dividend into remainder -003c6a 1cff rol temp5 -003c6b 1ae2 sub temp4,temp2 ;remainder = remainder - divisor -003c6c 0af3 sbc temp5,temp3 ; -003c6d f420 brcc PFA_SLASHMOD_6 ;if result negative -003c6e 0ee2 add temp4,temp2 ; restore remainder -003c6f 1ef3 adc temp5,temp3 -003c70 9488 clc ; clear carry to be shifted into result -003c71 cfec rjmp PFA_SLASHMOD_3 ;else -003c72 9408 PFA_SLASHMOD_6: sec ; set carry to be shifted into result -003c73 cfea rjmp PFA_SLASHMOD_3 - - PFA_SLASHMODmod_done: - ; put remainder on stack -003c74 92fa st -Y,temp5 -003c75 92ea st -Y,temp4 - - ; put quotient on stack -003c76 01c8 movw tosl, temp0 -003c77 cb8d jmp_ DO_NEXT - .include "words/abs.asm" - - ; DUP ?NEGATE ; - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ABS: -003c78 ff03 .dw $ff03 -003c79 6261 -003c7a 0073 .db "abs",0 -003c7b 3c45 .dw VE_HEAD - .set VE_HEAD = VE_ABS - XT_ABS: -003c7c 3801 .dw DO_COLON - PFA_ABS: - - .endif - -003c7d 38b1 -003c7e 3a3e -003c7f 3820 .DW XT_DUP,XT_QNEGATE,XT_EXIT - .include "words/pick.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PICK: -003c80 ff04 .dw $ff04 -003c81 6970 -003c82 6b63 .db "pick" -003c83 3c78 .dw VE_HEAD - .set VE_HEAD = VE_PICK - XT_PICK: -003c84 3801 .dw DO_COLON - PFA_PICK: - .endif -003c85 3a2f .dw XT_1PLUS -003c86 3ec4 .dw XT_CELLS -003c87 3a8d .dw XT_SP_FETCH -003c88 399d .dw XT_PLUS -003c89 3879 .dw XT_FETCH -003c8a 3820 .dw XT_EXIT - .include "words/cellplus.asm" - - ; Arithmetics - ; add the size of an address-unit to a-addr1 - VE_CELLPLUS: -003c8b ff05 .dw $ff05 -003c8c 6563 -003c8d 6c6c -003c8e 002b .db "cell+",0 -003c8f 3c80 .dw VE_HEAD - .set VE_HEAD = VE_CELLPLUS - XT_CELLPLUS: -003c90 3c91 .dw PFA_CELLPLUS - PFA_CELLPLUS: -003c91 9602 adiw tosl, CELLSIZE -003c92 cb72 jmp_ DO_NEXT - .include "dict/interrupt.inc" - - .if WANT_INTERRUPTS == 1 - - .if WANT_INTERRUPT_COUNTERS == 1 - .endif - - .include "words/int-on.asm" - - ; Interrupt - ; turns on all interrupts - VE_INTON: -003c93 ff04 .dw $ff04 -003c94 692b -003c95 746e .db "+int" -003c96 3c8b .dw VE_HEAD - .set VE_HEAD = VE_INTON - XT_INTON: -003c97 3c98 .dw PFA_INTON - PFA_INTON: -003c98 9478 sei -003c99 cb6b jmp_ DO_NEXT - .include "words/int-off.asm" - - ; Interrupt - ; turns off all interrupts - VE_INTOFF: -003c9a ff04 .dw $ff04 -003c9b 692d -003c9c 746e .db "-int" -003c9d 3c93 .dw VE_HEAD - .set VE_HEAD = VE_INTOFF - XT_INTOFF: -003c9e 3c9f .dw PFA_INTOFF - PFA_INTOFF: -003c9f 94f8 cli -003ca0 cb64 jmp_ DO_NEXT - .include "words/int-store.asm" - - ; Interrupt - ; stores XT as interrupt vector i - VE_INTSTORE: -003ca1 ff04 .dw $ff04 -003ca2 6e69 -003ca3 2174 .db "int!" -003ca4 3c9a .dw VE_HEAD - .set VE_HEAD = VE_INTSTORE - XT_INTSTORE: -003ca5 3801 .dw DO_COLON - PFA_INTSTORE: -003ca6 383d .dw XT_DOLITERAL -003ca7 0000 .dw intvec -003ca8 399d .dw XT_PLUS -003ca9 3b3b .dw XT_STOREE -003caa 3820 .dw XT_EXIT - .include "words/int-fetch.asm" - - ; Interrupt - ; fetches XT from interrupt vector i - VE_INTFETCH: -003cab ff04 .dw $ff04 -003cac 6e69 -003cad 4074 .db "int@" -003cae 3ca1 .dw VE_HEAD - .set VE_HEAD = VE_INTFETCH - XT_INTFETCH: -003caf 3801 .dw DO_COLON - PFA_INTFETCH: -003cb0 383d .dw XT_DOLITERAL -003cb1 0000 .dw intvec -003cb2 399d .dw XT_PLUS -003cb3 3b5f .dw XT_FETCHE -003cb4 3820 .dw XT_EXIT - .include "words/int-trap.asm" - - ; Interrupt - ; trigger an interrupt - VE_INTTRAP: -003cb5 ff08 .dw $ff08 -003cb6 6e69 -003cb7 2d74 -003cb8 7274 -003cb9 7061 .db "int-trap" -003cba 3cab .dw VE_HEAD - .set VE_HEAD = VE_INTTRAP - XT_INTTRAP: -003cbb 3cbc .dw PFA_INTTRAP - PFA_INTTRAP: -003cbc 2eb8 mov isrflag, tosl -003cbd 9189 -003cbe 9199 loadtos -003cbf cb45 jmp_ DO_NEXT - - .include "words/isr-exec.asm" - - ; Interrupt - ; executes an interrupt service routine - ;VE_ISREXEC: - ; .dw $ff08 - ; .db "isr-exec" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_ISREXEC - XT_ISREXEC: -003cc0 3801 .dw DO_COLON - PFA_ISREXEC: -003cc1 3caf .dw XT_INTFETCH -003cc2 382a .dw XT_EXECUTE -003cc3 3cc5 .dw XT_ISREND -003cc4 3820 .dw XT_EXIT - .include "words/isr-end.asm" - - ; Interrupt - ; re-enables interrupts in an ISR - ;VE_ISREND: - ; .dw $ff07 - ; .db "isr-end",0 - ; .dw VE_HEAD - ; .set VE_HEAD = VE_ISREND - XT_ISREND: -003cc5 3cc6 .dw PFA_ISREND - PFA_ISREND: -003cc6 d001 rcall PFA_ISREND1 ; clear the interrupt flag for the controller -003cc7 cb3d jmp_ DO_NEXT - PFA_ISREND1: -003cc8 9518 reti - .endif - - ; now the relocatable colon words - .include "words/prompt-ok.asm" - - ; System - ; send the READY prompt to the command line - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_PROMPTOK: - ; .dw $ff02 - ; .db "ok" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_PROMPTOK - XT_DEFAULT_PROMPTOK: -003cc9 3801 .dw DO_COLON - PFA_DEFAULT_PROMPTOK: -003cca 03d0 .dw XT_DOSLITERAL -003ccb 0003 .dw 3 -003ccc 6f20 -003ccd 006b .db " ok",0 - .endif -003cce 0403 .dw XT_ITYPE -003ccf 3820 .dw XT_EXIT - - ; ------------------------ - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PROMPTOK: -003cd0 ff03 .dw $FF03 -003cd1 6f2e -../../common\words/prompt-ok.asm(43): warning: .cseg .db misalignment - padding zero byte -003cd2 006b .db ".ok" -003cd3 3cb5 .dw VE_HEAD - .set VE_HEAD = VE_PROMPTOK - XT_PROMPTOK: -003cd4 3dff .dw PFA_DODEFER1 - PFA_PROMPTOK: - .endif -003cd5 001c .dw USER_P_OK -003cd6 3dc8 .dw XT_UDEFERFETCH -003cd7 3dd4 .dw XT_UDEFERSTORE - .include "words/prompt-ready.asm" - - ; System - ; process the error prompt - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_PROMPTRDY: - ; .dw $ff04 - ; .db "p_er" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_PROMPTRDY - XT_DEFAULT_PROMPTREADY: -003cd8 3801 .dw DO_COLON - PFA_DEFAULT_PROMPTREADY: -003cd9 03d0 .dw XT_DOSLITERAL -003cda 0002 .dw 2 -003cdb 203e .db "> " - .endif -003cdc 3fa1 .dw XT_CR -003cdd 0403 .dw XT_ITYPE -003cde 3820 .dw XT_EXIT - - ; ------------------------ - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PROMPTREADY: -003cdf ff06 .dw $FF06 -003ce0 722e -003ce1 6165 -003ce2 7964 .db ".ready" -003ce3 3cd0 .dw VE_HEAD - .set VE_HEAD = VE_PROMPTREADY - XT_PROMPTREADY: -003ce4 3dff .dw PFA_DODEFER1 - PFA_PROMPTREADY: - .endif -003ce5 0020 .dw USER_P_RDY -003ce6 3dc8 .dw XT_UDEFERFETCH -003ce7 3dd4 .dw XT_UDEFERSTORE - .include "words/prompt-error.asm" - - ; System - ; process the error prompt - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_PROMPTERROR: - ; .dw $ff04 - ; .db "p_er" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_PROMPTERROR - XT_DEFAULT_PROMPTERROR: -003ce8 3801 .dw DO_COLON - PFA_DEFAULT_PROMPTERROR: -003ce9 03d0 .dw XT_DOSLITERAL -003cea 0004 .dw 4 -003ceb 3f20 -003cec 203f .db " ?? " - .endif -003ced 0403 .dw XT_ITYPE -003cee 3ebd .dw XT_BASE -003cef 3879 .dw XT_FETCH -003cf0 38ff .dw XT_TO_R -003cf1 3f41 .dw XT_DECIMAL -003cf2 0385 .dw XT_DOT -003cf3 3ee2 .dw XT_TO_IN -003cf4 3879 .dw XT_FETCH -003cf5 0385 .dw XT_DOT -003cf6 38f6 .dw XT_R_FROM -003cf7 3ebd .dw XT_BASE -003cf8 3881 .dw XT_STORE -003cf9 3820 .dw XT_EXIT - - ; ------------------------ - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PROMPTERROR: -003cfa ff06 .dw $FF06 -003cfb 652e -003cfc 7272 -003cfd 726f .db ".error" -003cfe 3cdf .dw VE_HEAD - .set VE_HEAD = VE_PROMPTERROR - XT_PROMPTERROR: -003cff 3dff .dw PFA_DODEFER1 - PFA_PROMPTERROR: - .endif -003d00 001e .dw USER_P_ERR -003d01 3dc8 .dw XT_UDEFERFETCH -003d02 3dd4 .dw XT_UDEFERSTORE - - .include "words/quit.asm" - - ; System - ; main loop of amforth. accept - interpret in an endless loop - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QUIT: -003d03 ff04 .dw $ff04 -003d04 7571 -003d05 7469 .db "quit" -003d06 3cfa .dw VE_HEAD - .set VE_HEAD = VE_QUIT - XT_QUIT: -003d07 3801 .dw DO_COLON - .endif - PFA_QUIT: -003d08 085c -003d09 0863 -003d0a 3881 .dw XT_LP0,XT_LP,XT_STORE -003d0b 05d5 .dw XT_SP0 -003d0c 3a96 .dw XT_SP_STORE -003d0d 05e2 .dw XT_RP0 -003d0e 3a80 .dw XT_RP_STORE -003d0f 08f1 .dw XT_LBRACKET - - PFA_QUIT2: -003d10 3eb7 .dw XT_STATE -003d11 3879 .dw XT_FETCH -003d12 391a .dw XT_ZEROEQUAL -003d13 3836 .dw XT_DOCONDBRANCH -003d14 3d16 DEST(PFA_QUIT4) -003d15 3ce4 .dw XT_PROMPTREADY - PFA_QUIT4: -003d16 04e9 .dw XT_REFILL -003d17 3836 .dw XT_DOCONDBRANCH -003d18 3d28 DEST(PFA_QUIT3) -003d19 383d .dw XT_DOLITERAL -003d1a 0630 .dw XT_INTERPRET -003d1b 3d70 .dw XT_CATCH -003d1c 38b9 .dw XT_QDUP -003d1d 3836 .dw XT_DOCONDBRANCH -003d1e 3d28 DEST(PFA_QUIT3) -003d1f 38b1 .dw XT_DUP -003d20 383d .dw XT_DOLITERAL -003d21 fffe .dw -2 -003d22 396e .dw XT_LESS -003d23 3836 .dw XT_DOCONDBRANCH -003d24 3d26 DEST(PFA_QUIT5) -003d25 3cff .dw XT_PROMPTERROR - PFA_QUIT5: -003d26 382f .dw XT_DOBRANCH -003d27 3d08 DEST(PFA_QUIT) - PFA_QUIT3: -003d28 3cd4 .dw XT_PROMPTOK -003d29 382f .dw XT_DOBRANCH -003d2a 3d10 DEST(PFA_QUIT2) - ; .dw XT_EXIT ; never reached - - .include "words/pause.asm" - - ; Multitasking - ; Fetch pause vector and execute it. may make a context/task switch - VE_PAUSE: -003d2b ff05 .dw $ff05 -003d2c 6170 -003d2d 7375 -003d2e 0065 .db "pause",0 -003d2f 3d03 .dw VE_HEAD - .set VE_HEAD = VE_PAUSE - XT_PAUSE: -003d30 3dff .dw PFA_DODEFER1 - PFA_PAUSE: -003d31 0192 .dw ram_pause -003d32 3db4 .dw XT_RDEFERFETCH -003d33 3dbe .dw XT_RDEFERSTORE - - .dseg -000192 ram_pause: .byte 2 - .cseg - .include "words/cold.asm" - - ; System - ; start up amforth. - VE_COLD: -003d34 ff04 .dw $ff04 -003d35 6f63 -003d36 646c .db "cold" -003d37 3d2b .dw VE_HEAD - .set VE_HEAD = VE_COLD - XT_COLD: -003d38 3d39 .dw PFA_COLD - PFA_COLD: -003d39 b6a4 in_ mcu_boot, MCUSR -003d3a 2422 clr zerol -003d3b 2433 clr zeroh -003d3c 24bb clr isrflag -003d3d be24 out_ MCUSR, zerol - ; clear RAM -003d3e e0e0 ldi zl, low(ramstart) -003d3f e0f1 ldi zh, high(ramstart) - clearloop: -003d40 9221 st Z+, zerol -003d41 30e0 cpi zl, low(sram_size+ramstart) -003d42 f7e9 brne clearloop -003d43 30f9 cpi zh, high(sram_size+ramstart) -003d44 f7d9 brne clearloop - ; init first user data area - ; allocate space for User Area - .dseg -000194 ram_user1: .byte SYSUSERSIZE + APPUSERSIZE - .cseg -003d45 e9e4 ldi zl, low(ram_user1) -003d46 e0f1 ldi zh, high(ram_user1) -003d47 012f movw upl, zl - ; init return stack pointer -003d48 ef0f ldi temp0,low(rstackstart) -003d49 bf0d out_ SPL,temp0 -003d4a 8304 std Z+4, temp0 -003d4b e018 ldi temp1,high(rstackstart) -003d4c bf1e out_ SPH,temp1 -003d4d 8315 std Z+5, temp1 - - ; init parameter stack pointer -003d4e eacf ldi yl,low(stackstart) -003d4f 83c6 std Z+6, yl -003d50 e0d8 ldi yh,high(stackstart) -003d51 83d7 std Z+7, yh - - ; load Forth IP with starting word -003d52 e5aa ldi XL, low(PFA_WARM) -003d53 e3bd ldi XH, high(PFA_WARM) - ; its a far jump... -003d54 cab0 jmp_ DO_NEXT - .include "words/warm.asm" - - ; System - ; initialize amforth further. executes turnkey operation and go to quit - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_WARM: -003d55 ff04 .dw $ff04 -003d56 6177 -003d57 6d72 .db "warm" -003d58 3d34 .dw VE_HEAD - .set VE_HEAD = VE_WARM - XT_WARM: -003d59 3801 .dw DO_COLON - PFA_WARM: - .endif -003d5a 02a2 .dw XT_INIT_RAM -003d5b 383d .dw XT_DOLITERAL -003d5c 01a5 .dw XT_NOOP -003d5d 383d .dw XT_DOLITERAL -003d5e 3d30 .dw XT_PAUSE -003d5f 3ddf .dw XT_DEFERSTORE -003d60 08f1 .dw XT_LBRACKET -003d61 3f5c .dw XT_TURNKEY -003d62 3d07 .dw XT_QUIT ; never returns - - .include "words/handler.asm" - - ; Exceptions - ; USER variable used by catch/throw - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_HANDLER: -003d63 ff07 .dw $ff07 -003d64 6168 -003d65 646e -003d66 656c -003d67 0072 .db "handler",0 -003d68 3d55 .dw VE_HEAD - .set VE_HEAD = VE_HANDLER - XT_HANDLER: -003d69 3858 .dw PFA_DOUSER - PFA_HANDLER: - .endif -003d6a 000a .dw USER_HANDLER - .include "words/catch.asm" - - ; Exceptions - ; execute XT and check for exceptions. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CATCH: -003d6b ff05 .dw $ff05 -003d6c 6163 -003d6d 6374 -003d6e 0068 .db "catch",0 -003d6f 3d63 .dw VE_HEAD - .set VE_HEAD = VE_CATCH - XT_CATCH: -003d70 3801 .dw DO_COLON - PFA_CATCH: - .endif - - ; sp@ >r -003d71 3a8d .dw XT_SP_FETCH -003d72 38ff .dw XT_TO_R - ; handler @ >r -003d73 3d69 .dw XT_HANDLER -003d74 3879 .dw XT_FETCH -003d75 38ff .dw XT_TO_R - ; rp@ handler ! -003d76 3a76 .dw XT_RP_FETCH -003d77 3d69 .dw XT_HANDLER -003d78 3881 .dw XT_STORE -003d79 382a .dw XT_EXECUTE - ; r> handler ! -003d7a 38f6 .dw XT_R_FROM -003d7b 3d69 .dw XT_HANDLER -003d7c 3881 .dw XT_STORE -003d7d 38f6 .dw XT_R_FROM -003d7e 38d9 .dw XT_DROP -003d7f 3954 .dw XT_ZERO -003d80 3820 .dw XT_EXIT - .include "words/throw.asm" - - ; Exceptions - ; throw an exception - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_THROW: -003d81 ff05 .dw $ff05 -003d82 6874 -003d83 6f72 -003d84 0077 .db "throw",0 -003d85 3d6b .dw VE_HEAD - .set VE_HEAD = VE_THROW - XT_THROW: -003d86 3801 .dw DO_COLON - PFA_THROW: - .endif -003d87 38b1 .dw XT_DUP -003d88 391a .dw XT_ZEROEQUAL -003d89 3836 .dw XT_DOCONDBRANCH -003d8a 3d8d DEST(PFA_THROW1) -003d8b 38d9 .dw XT_DROP -003d8c 3820 .dw XT_EXIT - PFA_THROW1: -003d8d 3d69 .dw XT_HANDLER -003d8e 3879 .dw XT_FETCH -003d8f 3a80 .dw XT_RP_STORE -003d90 38f6 .dw XT_R_FROM -003d91 3d69 .dw XT_HANDLER -003d92 3881 .dw XT_STORE -003d93 38f6 .dw XT_R_FROM -003d94 38c4 .dw XT_SWAP -003d95 38ff .dw XT_TO_R -003d96 3a96 .dw XT_SP_STORE -003d97 38d9 .dw XT_DROP -003d98 38f6 .dw XT_R_FROM -003d99 3820 .dw XT_EXIT - - - - .include "words/edefer-fetch.asm" - - ; System - ; does the real defer@ for eeprom defers - VE_EDEFERFETCH: -003d9a ff07 .dw $ff07 -003d9b 6445 -003d9c 6665 -003d9d 7265 -003d9e 0040 .db "Edefer@",0 -003d9f 3d81 .dw VE_HEAD - .set VE_HEAD = VE_EDEFERFETCH - XT_EDEFERFETCH: -003da0 3801 .dw DO_COLON - PFA_EDEFERFETCH: -003da1 3bcb .dw XT_FETCHI -003da2 3b5f .dw XT_FETCHE -003da3 3820 .dw XT_EXIT - .include "words/edefer-store.asm" - - ; System - ; does the real defer! for eeprom defers - VE_EDEFERSTORE: -003da4 ff07 .dw $ff07 -003da5 6445 -003da6 6665 -003da7 7265 -003da8 0021 .db "Edefer!",0 -003da9 3d9a .dw VE_HEAD - .set VE_HEAD = VE_EDEFERSTORE - XT_EDEFERSTORE: -003daa 3801 .dw DO_COLON - PFA_EDEFERSTORE: -003dab 3bcb .dw XT_FETCHI -003dac 3b3b .dw XT_STOREE -003dad 3820 .dw XT_EXIT - .include "words/rdefer-fetch.asm" - - ; System - ; The defer@ for ram defers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RDEFERFETCH: -003dae ff07 .dw $ff07 -003daf 6452 -003db0 6665 -003db1 7265 -003db2 0040 .db "Rdefer@",0 -003db3 3da4 .dw VE_HEAD - .set VE_HEAD = VE_RDEFERFETCH - XT_RDEFERFETCH: -003db4 3801 .dw DO_COLON - PFA_RDEFERFETCH: - .endif -003db5 3bcb .dw XT_FETCHI -003db6 3879 .dw XT_FETCH -003db7 3820 .dw XT_EXIT - .include "words/rdefer-store.asm" - - ; System - ; The defer! for ram defers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RDEFERSTORE: -003db8 ff07 .dw $ff07 -003db9 6452 -003dba 6665 -003dbb 7265 -003dbc 0021 .db "Rdefer!",0 -003dbd 3dae .dw VE_HEAD - .set VE_HEAD = VE_RDEFERSTORE - XT_RDEFERSTORE: -003dbe 3801 .dw DO_COLON - PFA_RDEFERSTORE: - .endif -003dbf 3bcb .dw XT_FETCHI -003dc0 3881 .dw XT_STORE -003dc1 3820 .dw XT_EXIT - - .include "words/udefer-fetch.asm" - - ; System - ; does the real defer@ for user based defers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDEFERFETCH: -003dc2 ff07 .dw $ff07 -003dc3 6455 -003dc4 6665 -003dc5 7265 -003dc6 0040 .db "Udefer@",0 -003dc7 3db8 .dw VE_HEAD - .set VE_HEAD = VE_UDEFERFETCH - XT_UDEFERFETCH: -003dc8 3801 .dw DO_COLON - PFA_UDEFERFETCH: - .endif -003dc9 3bcb .dw XT_FETCHI -003dca 3b02 .dw XT_UP_FETCH -003dcb 399d .dw XT_PLUS -003dcc 3879 .dw XT_FETCH -003dcd 3820 .dw XT_EXIT - .include "words/udefer-store.asm" - - ; System - ; does the real defer! for user based defers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDEFERSTORE: -003dce ff07 .dw $ff07 -003dcf 6455 -003dd0 6665 -003dd1 7265 -003dd2 0021 .db "Udefer!",0 -003dd3 3dc2 .dw VE_HEAD - .set VE_HEAD = VE_UDEFERSTORE - XT_UDEFERSTORE: -003dd4 3801 .dw DO_COLON - PFA_UDEFERSTORE: - .endif - -003dd5 3bcb .dw XT_FETCHI -003dd6 3b02 .dw XT_UP_FETCH -003dd7 399d .dw XT_PLUS -003dd8 3881 .dw XT_STORE -003dd9 3820 .dw XT_EXIT - - .include "words/defer-store.asm" - - ; System - ; stores xt1 as the xt to be executed when xt2 is called - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DEFERSTORE: -003dda ff06 .dw $ff06 -003ddb 6564 -003ddc 6566 -003ddd 2172 .db "defer!" -003dde 3dce .dw VE_HEAD - .set VE_HEAD = VE_DEFERSTORE - XT_DEFERSTORE: -003ddf 3801 .dw DO_COLON - PFA_DEFERSTORE: - .endif -003de0 3fd0 .dw XT_TO_BODY -003de1 38b1 .dw XT_DUP -003de2 01d1 .dw XT_ICELLPLUS -003de3 01d1 .dw XT_ICELLPLUS -003de4 3bcb .dw XT_FETCHI -003de5 382a .dw XT_EXECUTE -003de6 3820 .dw XT_EXIT - - .include "words/defer-fetch.asm" - - ; System - ; returns the XT associated with the given XT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DEFERFETCH: -003de7 ff06 .dw $ff06 -003de8 6564 -003de9 6566 -003dea 4072 .db "defer@" -003deb 3dda .dw VE_HEAD - .set VE_HEAD = VE_DEFERFETCH - XT_DEFERFETCH: -003dec 3801 .dw DO_COLON - PFA_DEFERFETCH: - .endif -003ded 3fd0 .dw XT_TO_BODY -003dee 38b1 .dw XT_DUP -003def 01d1 .dw XT_ICELLPLUS -003df0 3bcb .dw XT_FETCHI -003df1 382a .dw XT_EXECUTE -003df2 3820 .dw XT_EXIT - .include "words/do-defer.asm" - - ; System - ; runtime of defer - VE_DODEFER: -003df3 ff07 .dw $ff07 -003df4 6428 -003df5 6665 -003df6 7265 -003df7 0029 .db "(defer)", 0 -003df8 3de7 .dw VE_HEAD - .set VE_HEAD = VE_DODEFER - XT_DODEFER: -003df9 3801 .dw DO_COLON - PFA_DODEFER: -003dfa 0739 .dw XT_DOCREATE -003dfb 0899 .dw XT_REVEAL -003dfc 075c .dw XT_COMPILE -003dfd 3dff .dw PFA_DODEFER1 -003dfe 3820 .dw XT_EXIT - PFA_DODEFER1: -003dff 940e 08b2 call_ DO_DODOES -003e01 38b1 .dw XT_DUP -003e02 01d1 .dw XT_ICELLPLUS -003e03 3bcb .dw XT_FETCHI -003e04 382a .dw XT_EXECUTE -003e05 382a .dw XT_EXECUTE -003e06 3820 .dw XT_EXIT - - ; : (defer) dup i-cell+ @i execute execute ; - - - .include "words/u-dot.asm" - - ; Numeric IO - ; unsigned PNO with single cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDOT: -003e07 ff02 .dw $ff02 -003e08 2e75 .db "u." -003e09 3df3 .dw VE_HEAD - .set VE_HEAD = VE_UDOT - XT_UDOT: -003e0a 3801 .dw DO_COLON - PFA_UDOT: - .endif -003e0b 3954 .dw XT_ZERO -003e0c 038d .dw XT_UDDOT -003e0d 3820 .dw XT_EXIT - ; : u. ( us -- ) 0 ud. ; - .include "words/u-dot-r.asm" - - ; Numeric IO - ; unsigned PNO with single cells numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_UDOTR: -003e0e ff03 .dw $ff03 -003e0f 2e75 -003e10 0072 .db "u.r",0 -003e11 3e07 .dw VE_HEAD - .set VE_HEAD = VE_UDOTR - XT_UDOTR: -003e12 3801 .dw DO_COLON - PFA_UDOTR: - .endif -003e13 3954 .dw XT_ZERO -003e14 38c4 .dw XT_SWAP -003e15 0396 .dw XT_UDDOTR -003e16 3820 .dw XT_EXIT - ; : u.r ( s n -- ) 0 swap ud.r ; - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/uslashmod.asm" - - ; Arithmetics - ; unsigned division with remainder - VE_USLASHMOD: -003e17 ff05 .dw $ff05 -003e18 2f75 -003e19 6f6d -003e1a 0064 .db "u/mod",0 -003e1b 3e0e .dw VE_HEAD - .set VE_HEAD = VE_USLASHMOD - XT_USLASHMOD: -003e1c 3801 .dw DO_COLON - PFA_USLASHMOD: -003e1d 38ff .dw XT_TO_R -003e1e 3954 .dw XT_ZERO -003e1f 38f6 .dw XT_R_FROM -003e20 39c2 .dw XT_UMSLASHMOD -003e21 3820 .dw XT_EXIT - .include "words/negate.asm" - - ; Logic - ; 2-complement - VE_NEGATE: -003e22 ff06 .dw $ff06 -003e23 656e -003e24 6167 -003e25 6574 .db "negate" -003e26 3e17 .dw VE_HEAD - .set VE_HEAD = VE_NEGATE - XT_NEGATE: -003e27 3801 .dw DO_COLON - PFA_NEGATE: -003e28 39fd .dw XT_INVERT -003e29 3a2f .dw XT_1PLUS -003e2a 3820 .dw XT_EXIT - .include "words/slash.asm" - - ; Arithmetics - ; divide n1 by n2. giving the quotient - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_SLASH: -003e2b ff01 .dw $ff01 -003e2c 002f .db "/",0 -003e2d 3e22 .dw VE_HEAD - .set VE_HEAD = VE_SLASH - XT_SLASH: -003e2e 3801 .dw DO_COLON - PFA_SLASH: - .endif -003e2f 3c49 .dw XT_SLASHMOD -003e30 38f0 .dw XT_NIP -003e31 3820 .dw XT_EXIT - - .include "words/mod.asm" - - ; Arithmetics - ; divide n1 by n2 giving the remainder n3 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_MOD: -003e32 ff03 .dw $ff03 -003e33 6f6d -003e34 0064 .db "mod",0 -003e35 3e2b .dw VE_HEAD - .set VE_HEAD = VE_MOD - XT_MOD: -003e36 3801 .dw DO_COLON - PFA_MOD: - .endif -003e37 3c49 .dw XT_SLASHMOD -003e38 38d9 .dw XT_DROP -003e39 3820 .dw XT_EXIT - - .include "words/min.asm" - - ; Compare - ; compare two values leave the smaller one - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_MIN: -003e3a ff03 .dw $ff03 -003e3b 696d -003e3c 006e .db "min",0 -003e3d 3e32 .dw VE_HEAD - .set VE_HEAD = VE_MIN - XT_MIN: -003e3e 3801 .dw DO_COLON - PFA_MIN: - .endif -003e3f 3ec9 .dw XT_2DUP -003e40 3978 .dw XT_GREATER -003e41 3836 .dw XT_DOCONDBRANCH -003e42 3e44 DEST(PFA_MIN1) -003e43 38c4 .dw XT_SWAP - PFA_MIN1: -003e44 38d9 .dw XT_DROP -003e45 3820 .dw XT_EXIT - .include "words/max.asm" - - ; Compare - ; compare two values, leave the bigger one - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_MAX: -003e46 ff03 .dw $ff03 -003e47 616d -003e48 0078 .db "max",0 -003e49 3e3a .dw VE_HEAD - .set VE_HEAD = VE_MAX - XT_MAX: -003e4a 3801 .dw DO_COLON - PFA_MAX: - - .endif -003e4b 3ec9 .dw XT_2DUP -003e4c 396e .dw XT_LESS -003e4d 3836 .dw XT_DOCONDBRANCH -003e4e 3e50 DEST(PFA_MAX1) -003e4f 38c4 .dw XT_SWAP - PFA_MAX1: -003e50 38d9 .dw XT_DROP -003e51 3820 .dw XT_EXIT - .include "words/within.asm" - - ; Compare - ; check if n is within min..max - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_WITHIN: -003e52 ff06 .dw $ff06 -003e53 6977 -003e54 6874 -003e55 6e69 .db "within" -003e56 3e46 .dw VE_HEAD - .set VE_HEAD = VE_WITHIN - XT_WITHIN: -003e57 3801 .dw DO_COLON - PFA_WITHIN: - .endif -003e58 38cf .dw XT_OVER -003e59 3993 .dw XT_MINUS -003e5a 38ff .dw XT_TO_R -003e5b 3993 .dw XT_MINUS -003e5c 38f6 .dw XT_R_FROM -003e5d 395c .dw XT_ULESS -003e5e 3820 .dw XT_EXIT - - .include "words/show-wordlist.asm" - - ; Tools - ; prints the name of the words in a wordlist - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SHOWWORDLIST: -003e5f ff0d .dw $ff0d -003e60 6873 -003e61 776f -003e62 772d -003e63 726f -003e64 6c64 -003e65 7369 -003e66 0074 .db "show-wordlist",0 -003e67 3e52 .dw VE_HEAD - .set VE_HEAD = VE_SHOWWORDLIST - XT_SHOWWORDLIST: -003e68 3801 .dw DO_COLON - PFA_SHOWWORDLIST: - .endif -003e69 383d .dw XT_DOLITERAL -003e6a 3e6e .dw XT_SHOWWORD -003e6b 38c4 .dw XT_SWAP -003e6c 06da .dw XT_TRAVERSEWORDLIST -003e6d 3820 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_SHOWWORD: -003e6e 3801 .dw DO_COLON - PFA_SHOWWORD: - .endif -003e6f 06f5 .dw XT_NAME2STRING -003e70 0403 .dw XT_ITYPE -003e71 3fae .dw XT_SPACE ; ( -- addr n) -003e72 394b .dw XT_TRUE -003e73 3820 .dw XT_EXIT - .include "words/words.asm" - - ; Tools - ; prints a list of all (visible) words in the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_WORDS: -003e74 ff05 .dw $ff05 -003e75 6f77 -003e76 6472 -003e77 0073 .db "words",0 -003e78 3e5f .dw VE_HEAD - .set VE_HEAD = VE_WORDS - XT_WORDS: -003e79 3801 .dw DO_COLON - PFA_WORDS: - .endif -003e7a 383d .dw XT_DOLITERAL -003e7b 004c .dw CFG_ORDERLISTLEN+2 -003e7c 3b5f .dw XT_FETCHE -003e7d 3e68 .dw XT_SHOWWORDLIST -003e7e 3820 .dw XT_EXIT - - .include "words/dot-quote.asm" - - ; Compiler - ; compiles string into dictionary to be printed at runtime - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_DOTSTRING: -003e7f 0002 .dw $0002 -003e80 222e .db ".",$22 -003e81 3e74 .dw VE_HEAD - .set VE_HEAD = VE_DOTSTRING - XT_DOTSTRING: -003e82 3801 .dw DO_COLON - PFA_DOTSTRING: - .endif -003e83 3e8a .dw XT_SQUOTE -003e84 075c .dw XT_COMPILE -003e85 0403 .dw XT_ITYPE -003e86 3820 .dw XT_EXIT - .include "words/squote.asm" - - ; Compiler - ; compiles a string to flash, at runtime leaves ( -- flash-addr count) on stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SQUOTE: -003e87 0002 .dw $0002 -003e88 2273 .db "s",$22 -003e89 3e7f .dw VE_HEAD - .set VE_HEAD = VE_SQUOTE - XT_SQUOTE: -003e8a 3801 .dw DO_COLON - PFA_SQUOTE: - .endif -003e8b 383d .dw XT_DOLITERAL -003e8c 0022 .dw 34 ; 0x22 -003e8d 058e .dw XT_PARSE ; ( -- addr n) -003e8e 3eb7 .dw XT_STATE -003e8f 3879 .dw XT_FETCH -003e90 3836 .dw XT_DOCONDBRANCH -003e91 3e93 DEST(PFA_SQUOTE1) -003e92 0788 .dw XT_SLITERAL - PFA_SQUOTE1: -003e93 3820 .dw XT_EXIT - .include "words/fill.asm" - - ; Memory - ; fill u bytes memory beginning at a-addr with character c - VE_FILL: -003e94 ff04 .dw $ff04 -003e95 6966 -003e96 6c6c .db "fill" -003e97 3e87 .dw VE_HEAD - .set VE_HEAD = VE_FILL - XT_FILL: -003e98 3801 .dw DO_COLON - PFA_FILL: -003e99 38e1 .dw XT_ROT -003e9a 38e1 .dw XT_ROT -003e9b 38b9 -003e9c 3836 .dw XT_QDUP,XT_DOCONDBRANCH -003e9d 3ea5 DEST(PFA_FILL2) -003e9e 3f99 .dw XT_BOUNDS -003e9f 3a9b .dw XT_DODO - PFA_FILL1: -003ea0 38b1 .dw XT_DUP -003ea1 3aac .dw XT_I -003ea2 388d .dw XT_CSTORE ; ( -- c c-addr) -003ea3 3ac9 .dw XT_DOLOOP -003ea4 3ea0 .dw PFA_FILL1 - PFA_FILL2: -003ea5 38d9 .dw XT_DROP -003ea6 3820 .dw XT_EXIT - - .include "words/f_cpu.asm" - - ; System - ; put the cpu frequency in Hz on stack - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_F_CPU: -003ea7 ff05 .dw $ff05 -003ea8 5f66 -003ea9 7063 -003eaa 0075 .db "f_cpu",0 -003eab 3e94 .dw VE_HEAD - .set VE_HEAD = VE_F_CPU - XT_F_CPU: -003eac 3801 .dw DO_COLON - PFA_F_CPU: - .endif -003ead 383d .dw XT_DOLITERAL -003eae 2400 .dw (F_CPU % 65536) -003eaf 383d .dw XT_DOLITERAL -003eb0 00f4 .dw (F_CPU / 65536) -003eb1 3820 .dw XT_EXIT - .include "words/state.asm" - - ; System Variable - ; system state - VE_STATE: -003eb2 ff05 .dw $ff05 -003eb3 7473 -003eb4 7461 -003eb5 0065 .db "state",0 -003eb6 3ea7 .dw VE_HEAD - .set VE_HEAD = VE_STATE - XT_STATE: -003eb7 3848 .dw PFA_DOVARIABLE - PFA_STATE: -003eb8 01c0 .dw ram_state - - .dseg -0001c0 ram_state: .byte 2 - .include "words/base.asm" - - ; Numeric IO - ; location of the cell containing the number conversion radix - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BASE: -003eb9 ff04 .dw $ff04 -003eba 6162 -003ebb 6573 .db "base" -003ebc 3eb2 .dw VE_HEAD - .set VE_HEAD = VE_BASE - XT_BASE: -003ebd 3858 .dw PFA_DOUSER - PFA_BASE: - .endif -003ebe 000c .dw USER_BASE - - .include "words/cells.asm" - - ; Arithmetics - ; n2 is the size in address units of n1 cells - VE_CELLS: -003ebf ff05 .dw $ff05 -003ec0 6563 -003ec1 6c6c -003ec2 0073 .db "cells",0 -003ec3 3eb9 .dw VE_HEAD - .set VE_HEAD = VE_CELLS - XT_CELLS: -003ec4 3a0c .dw PFA_2STAR - - .include "words/2dup.asm" - - ; Stack - ; Duplicate the 2 top elements - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2DUP: -003ec5 ff04 .dw $ff04 -003ec6 6432 -003ec7 7075 .db "2dup" -003ec8 3ebf .dw VE_HEAD - .set VE_HEAD = VE_2DUP - XT_2DUP: -003ec9 3801 .dw DO_COLON - PFA_2DUP: - .endif - -003eca 38cf .dw XT_OVER -003ecb 38cf .dw XT_OVER -003ecc 3820 .dw XT_EXIT - .include "words/2drop.asm" - - ; Stack - ; Remove the 2 top elements - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2DROP: -003ecd ff05 .dw $ff05 -003ece 6432 -003ecf 6f72 -003ed0 0070 .db "2drop",0 -003ed1 3ec5 .dw VE_HEAD - .set VE_HEAD = VE_2DROP - XT_2DROP: -003ed2 3801 .dw DO_COLON - PFA_2DROP: - .endif -003ed3 38d9 .dw XT_DROP -003ed4 38d9 .dw XT_DROP -003ed5 3820 .dw XT_EXIT - .include "words/tuck.asm" - - ; Stack - ; Copy the first (top) stack item below the second stack item. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TUCK: -003ed6 ff04 .dw $ff04 -003ed7 7574 -003ed8 6b63 .db "tuck" -003ed9 3ecd .dw VE_HEAD - .set VE_HEAD = VE_TUCK - XT_TUCK: -003eda 3801 .dw DO_COLON - PFA_TUCK: - .endif -003edb 38c4 .dw XT_SWAP -003edc 38cf .dw XT_OVER -003edd 3820 .dw XT_EXIT - - .include "words/to-in.asm" - - ; System Variable - ; pointer to current read position in input buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO_IN: -003ede ff03 .dw $ff03 -003edf 693e -003ee0 006e .db ">in",0 -003ee1 3ed6 .dw VE_HEAD - .set VE_HEAD = VE_TO_IN - XT_TO_IN: -003ee2 3858 .dw PFA_DOUSER - PFA_TO_IN: - .endif -003ee3 0018 .dw USER_TO_IN - .include "words/pad.asm" - - ; System Variable - ; Address of the temporary scratch buffer. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PAD: -003ee4 ff03 .dw $ff03 -003ee5 6170 -003ee6 0064 .db "pad",0 -003ee7 3ede .dw VE_HEAD - .set VE_HEAD = VE_PAD - XT_PAD: -003ee8 3801 .dw DO_COLON - PFA_PAD: - .endif -003ee9 3f23 .dw XT_HERE -003eea 383d .dw XT_DOLITERAL -003eeb 0028 .dw 40 -003eec 399d .dw XT_PLUS -003eed 3820 .dw XT_EXIT - .include "words/emit.asm" - - ; Character IO - ; fetch the emit vector and execute it. should emit a character from TOS - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_EMIT: -003eee ff04 .dw $ff04 -003eef 6d65 -003ef0 7469 .db "emit" -003ef1 3ee4 .dw VE_HEAD - .set VE_HEAD = VE_EMIT - XT_EMIT: -003ef2 3dff .dw PFA_DODEFER1 - PFA_EMIT: - .endif -003ef3 000e .dw USER_EMIT -003ef4 3dc8 .dw XT_UDEFERFETCH -003ef5 3dd4 .dw XT_UDEFERSTORE - .include "words/emitq.asm" - - ; Character IO - ; fetch emit? vector and execute it. should return the ready-to-send condition - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_EMITQ: -003ef6 ff05 .dw $ff05 -003ef7 6d65 -003ef8 7469 -003ef9 003f .db "emit?",0 -003efa 3eee .dw VE_HEAD - .set VE_HEAD = VE_EMITQ - XT_EMITQ: -003efb 3dff .dw PFA_DODEFER1 - PFA_EMITQ: - .endif -003efc 0010 .dw USER_EMITQ -003efd 3dc8 .dw XT_UDEFERFETCH -003efe 3dd4 .dw XT_UDEFERSTORE - .include "words/key.asm" - - ; Character IO - ; fetch key vector and execute it, should leave a single character on TOS - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_KEY: -003eff ff03 .dw $ff03 -003f00 656b -003f01 0079 .db "key",0 -003f02 3ef6 .dw VE_HEAD - .set VE_HEAD = VE_KEY - XT_KEY: -003f03 3dff .dw PFA_DODEFER1 - PFA_KEY: - .endif -003f04 0012 .dw USER_KEY -003f05 3dc8 .dw XT_UDEFERFETCH -003f06 3dd4 .dw XT_UDEFERSTORE - .include "words/keyq.asm" - - ; Character IO - ; fetch key? vector and execute it. should turn on key sender, if it is disabled/stopped - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_KEYQ: -003f07 ff04 .dw $ff04 -003f08 656b -003f09 3f79 .db "key?" -003f0a 3eff .dw VE_HEAD - .set VE_HEAD = VE_KEYQ - XT_KEYQ: -003f0b 3dff .dw PFA_DODEFER1 - PFA_KEYQ: - .endif -003f0c 0014 .dw USER_KEYQ -003f0d 3dc8 .dw XT_UDEFERFETCH -003f0e 3dd4 .dw XT_UDEFERSTORE - - .include "words/dp.asm" - - ; System Value - ; address of the next free dictionary cell - VE_DP: -003f0f ff02 .dw $ff02 -003f10 7064 .db "dp" -003f11 3f07 .dw VE_HEAD - .set VE_HEAD = VE_DP - XT_DP: -003f12 386f .dw PFA_DOVALUE1 - PFA_DP: -003f13 0036 .dw CFG_DP -003f14 3da0 .dw XT_EDEFERFETCH -003f15 3daa .dw XT_EDEFERSTORE - .include "words/ehere.asm" - - ; System Value - ; address of the next free address in eeprom - VE_EHERE: -003f16 ff05 .dw $ff05 -003f17 6865 -003f18 7265 -003f19 0065 .db "ehere",0 -003f1a 3f0f .dw VE_HEAD - .set VE_HEAD = VE_EHERE - XT_EHERE: -003f1b 386f .dw PFA_DOVALUE1 - PFA_EHERE: -003f1c 003a .dw EE_EHERE -003f1d 3da0 .dw XT_EDEFERFETCH -003f1e 3daa .dw XT_EDEFERSTORE - .include "words/here.asm" - - ; System Value - ; address of the next free data space (RAM) cell - VE_HERE: -003f1f ff04 .dw $ff04 -003f20 6568 -003f21 6572 .db "here" -003f22 3f16 .dw VE_HEAD - .set VE_HEAD = VE_HERE - XT_HERE: -003f23 386f .dw PFA_DOVALUE1 - PFA_HERE: -003f24 0038 .dw EE_HERE -003f25 3da0 .dw XT_EDEFERFETCH -003f26 3daa .dw XT_EDEFERSTORE - .include "words/allot.asm" - - ; System - ; allocate or release memory in RAM - VE_ALLOT: -003f27 ff05 .dw $ff05 -003f28 6c61 -003f29 6f6c -003f2a 0074 .db "allot",0 -003f2b 3f1f .dw VE_HEAD - .set VE_HEAD = VE_ALLOT - XT_ALLOT: -003f2c 3801 .dw DO_COLON - PFA_ALLOT: -003f2d 3f23 .dw XT_HERE -003f2e 399d .dw XT_PLUS -003f2f 01bf .dw XT_DOTO -003f30 3f24 .dw PFA_HERE -003f31 3820 .dw XT_EXIT - - .include "words/bin.asm" - - ; Numeric IO - ; set base for numeric conversion to 10 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BIN: -003f32 ff03 .dw $ff03 -003f33 6962 -003f34 006e .db "bin",0 -003f35 3f27 .dw VE_HEAD - .set VE_HEAD = VE_BIN - XT_BIN: -003f36 3801 .dw DO_COLON - PFA_BIN: - .endif -003f37 3feb .dw XT_TWO -003f38 3ebd .dw XT_BASE -003f39 3881 .dw XT_STORE -003f3a 3820 .dw XT_EXIT - .include "words/decimal.asm" - - ; Numeric IO - ; set base for numeric conversion to 10 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DECIMAL: -003f3b ff07 .dw $ff07 -003f3c 6564 -003f3d 6963 -003f3e 616d -003f3f 006c .db "decimal",0 -003f40 3f32 .dw VE_HEAD - .set VE_HEAD = VE_DECIMAL - XT_DECIMAL: -003f41 3801 .dw DO_COLON - PFA_DECIMAL: - .endif -003f42 383d .dw XT_DOLITERAL -003f43 000a .dw 10 -003f44 3ebd .dw XT_BASE -003f45 3881 .dw XT_STORE -003f46 3820 .dw XT_EXIT - .include "words/hex.asm" - - ; Numeric IO - ; set base for numeric conversion to 10 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_HEX: -003f47 ff03 .dw $ff03 -003f48 6568 -003f49 0078 .db "hex",0 -003f4a 3f3b .dw VE_HEAD - .set VE_HEAD = VE_HEX - XT_HEX: -003f4b 3801 .dw DO_COLON - PFA_HEX: - .endif -003f4c 383d .dw XT_DOLITERAL -003f4d 0010 .dw 16 -003f4e 3ebd .dw XT_BASE -003f4f 3881 .dw XT_STORE -003f50 3820 .dw XT_EXIT - .include "words/bl.asm" - - ; Character IO - ; put ascii code of the blank to the stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BL: -003f51 ff02 .dw $ff02 -003f52 6c62 .db "bl" -003f53 3f47 .dw VE_HEAD - .set VE_HEAD = VE_BL - XT_BL: -003f54 3848 .dw PFA_DOVARIABLE - PFA_BL: - .endif -003f55 0020 .dw 32 - - .include "words/turnkey.asm" - - ; System Value - ; Deferred action during startup/reset - VE_TURNKEY: -003f56 ff07 .dw $ff07 -003f57 7574 -003f58 6e72 -003f59 656b -003f5a 0079 .db "turnkey",0 -003f5b 3f51 .dw VE_HEAD - .set VE_HEAD = VE_TURNKEY - XT_TURNKEY: -003f5c 3dff .dw PFA_DODEFER1 - PFA_TURNKEY: -003f5d 0042 .dw CFG_TURNKEY -003f5e 3da0 .dw XT_EDEFERFETCH -003f5f 3daa .dw XT_EDEFERSTORE - .include "words/to-upper.asm" - - ; String - ; if c is a lowercase letter convert it to uppercase - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TOUPPER: -003f60 ff07 .dw $ff07 -003f61 6f74 -003f62 7075 -003f63 6570 -003f64 0072 .db "toupper",0 -003f65 3f56 .dw VE_HEAD - .set VE_HEAD = VE_TOUPPER - XT_TOUPPER: -003f66 3801 .dw DO_COLON - PFA_TOUPPER: - .endif -003f67 38b1 .dw XT_DUP -003f68 383d .dw XT_DOLITERAL -003f69 0061 .dw 'a' -003f6a 383d .dw XT_DOLITERAL -003f6b 007b .dw 'z'+1 -003f6c 3e57 .dw XT_WITHIN -003f6d 3836 .dw XT_DOCONDBRANCH -003f6e 3f72 DEST(PFA_TOUPPER0) -003f6f 383d .dw XT_DOLITERAL -003f70 00df .dw 223 ; inverse of 0x20: 0xdf -003f71 3a13 .dw XT_AND - PFA_TOUPPER0: -003f72 3820 .dw XT_EXIT - .include "words/to-lower.asm" - - ; String - ; if C is an uppercase letter convert it to lowercase - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_TOLOWER: -003f73 ff07 .dw $ff07 -003f74 6f74 -003f75 6f6c -003f76 6577 -003f77 0072 .db "tolower",0 -003f78 3f60 .dw VE_HEAD - .set VE_HEAD = VE_TOLOWER - XT_TOLOWER: -003f79 3801 .dw DO_COLON - PFA_TOLOWER: - .endif -003f7a 38b1 .dw XT_DUP -003f7b 383d .dw XT_DOLITERAL -003f7c 0041 .dw 'A' -003f7d 383d .dw XT_DOLITERAL -003f7e 005b .dw 'Z'+1 -003f7f 3e57 .dw XT_WITHIN -003f80 3836 .dw XT_DOCONDBRANCH -003f81 3f85 DEST(PFA_TOLOWER0) -003f82 383d .dw XT_DOLITERAL -003f83 0020 .dw 32 -003f84 3a1c .dw XT_OR - PFA_TOLOWER0: -003f85 3820 .dw XT_EXIT - - .include "words/q-stack.asm" - - ; Tools - ; check data stack depth and exit to quit if underrun - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QSTACK: -003f86 ff06 .dw $ff06 -003f87 733f -003f88 6174 -003f89 6b63 .db "?stack" -003f8a 3f73 .dw VE_HEAD - .set VE_HEAD = VE_QSTACK - XT_QSTACK: -003f8b 3801 .dw DO_COLON - PFA_QSTACK: - .endif -003f8c 05ed .dw XT_DEPTH -003f8d 3921 .dw XT_ZEROLESS -003f8e 3836 .dw XT_DOCONDBRANCH -003f8f 3f93 DEST(PFA_QSTACK1) -003f90 383d .dw XT_DOLITERAL -003f91 fffc .dw -4 -003f92 3d86 .dw XT_THROW - PFA_QSTACK1: -003f93 3820 .dw XT_EXIT - .include "words/bounds.asm" - - ; Tools - ; convert a string to an address range - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BOUNDS: -003f94 ff06 .dw $ff06 -003f95 6f62 -003f96 6e75 -003f97 7364 .db "bounds" -003f98 3f86 .dw VE_HEAD - .set VE_HEAD = VE_BOUNDS - XT_BOUNDS: -003f99 3801 .dw DO_COLON - PFA_BOUNDS: - .endif -003f9a 38cf .dw XT_OVER -003f9b 399d .dw XT_PLUS -003f9c 38c4 .dw XT_SWAP -003f9d 3820 .dw XT_EXIT - .include "words/cr.asm" - - ; Character IO - ; cause subsequent output appear at the beginning of the next line - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CR: -003f9e ff02 .dw 0xff02 -003f9f 7263 .db "cr" -003fa0 3f94 .dw VE_HEAD - .set VE_HEAD = VE_CR - XT_CR: -003fa1 3801 .dw DO_COLON - PFA_CR: - .endif - -003fa2 383d .dw XT_DOLITERAL -003fa3 000d .dw 13 -003fa4 3ef2 .dw XT_EMIT -003fa5 383d .dw XT_DOLITERAL -003fa6 000a .dw 10 -003fa7 3ef2 .dw XT_EMIT -003fa8 3820 .dw XT_EXIT - .include "words/space.asm" - - ; Character IO - ; emits a space (bl) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SPACE: -003fa9 ff05 .dw $ff05 -003faa 7073 -003fab 6361 -003fac 0065 .db "space",0 -003fad 3f9e .dw VE_HEAD - .set VE_HEAD = VE_SPACE - XT_SPACE: -003fae 3801 .dw DO_COLON - PFA_SPACE: - .endif -003faf 3f54 .dw XT_BL -003fb0 3ef2 .dw XT_EMIT -003fb1 3820 .dw XT_EXIT - .include "words/spaces.asm" - - ; Character IO - ; emits n space(s) (bl) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SPACES: -003fb2 ff06 .dw $ff06 -003fb3 7073 -003fb4 6361 -003fb5 7365 .db "spaces" -003fb6 3fa9 .dw VE_HEAD - .set VE_HEAD = VE_SPACES - XT_SPACES: -003fb7 3801 .dw DO_COLON - PFA_SPACES: - - .endif - ;C SPACES n -- output n spaces - ; BEGIN DUP 0> WHILE SPACE 1- REPEAT DROP ; -003fb8 3954 -003fb9 3e4a .DW XT_ZERO, XT_MAX -003fba 38b1 -003fbb 3836 SPCS1: .DW XT_DUP,XT_DOCONDBRANCH -003fbc 3fc1 DEST(SPCS2) -003fbd 3fae -003fbe 3a35 -003fbf 382f .DW XT_SPACE,XT_1MINUS,XT_DOBRANCH -003fc0 3fba DEST(SPCS1) -003fc1 38d9 -003fc2 3820 SPCS2: .DW XT_DROP,XT_EXIT - .include "words/s-to-d.asm" - - ; Conversion - ; extend (signed) single cell value to double cell - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_S2D: -003fc3 ff03 .dw $ff03 -003fc4 3e73 -003fc5 0064 .db "s>d",0 -003fc6 3fb2 .dw VE_HEAD - .set VE_HEAD = VE_S2D - XT_S2D: -003fc7 3801 .dw DO_COLON - PFA_S2D: - .endif -003fc8 38b1 .dw XT_DUP -003fc9 3921 .dw XT_ZEROLESS -003fca 3820 .dw XT_EXIT - .include "words/to-body.asm" - - ; Core - ; get body from XT - VE_TO_BODY: -003fcb ff05 .dw $ff05 -003fcc 623e -003fcd 646f -003fce 0079 .db ">body",0 -003fcf 3fc3 .dw VE_HEAD - .set VE_HEAD = VE_TO_BODY - XT_TO_BODY: -003fd0 3a30 .dw PFA_1PLUS - .elif AMFORTH_NRWW_SIZE>2000 - .else - .endif - ; now colon words - ;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/2literal.asm" - - ; Compiler - ; compile a cell pair literal in colon definitions - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2LITERAL: -003fd1 0008 .dw $0008 -003fd2 6c32 -003fd3 7469 -003fd4 7265 -003fd5 6c61 .db "2literal" -003fd6 3fcb .dw VE_HEAD - .set VE_HEAD = VE_2LITERAL - XT_2LITERAL: -003fd7 3801 .dw DO_COLON - PFA_2LITERAL: - .endif -003fd8 38c4 .dw XT_SWAP -003fd9 077d .dw XT_LITERAL -003fda 077d .dw XT_LITERAL -003fdb 3820 .dw XT_EXIT - .include "words/equal.asm" - - ; Compare - ; compares two values for equality - VE_EQUAL: -003fdc ff01 .dw $ff01 -003fdd 003d .db "=",0 -003fde 3fd1 .dw VE_HEAD - .set VE_HEAD = VE_EQUAL - XT_EQUAL: -003fdf 3801 .dw DO_COLON - PFA_EQUAL: -003fe0 3993 .dw XT_MINUS -003fe1 391a .dw XT_ZEROEQUAL -003fe2 3820 .dw XT_EXIT - .include "words/num-constants.asm" - - .endif - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ONE: -003fe3 ff01 .dw $ff01 -003fe4 0031 .db "1",0 -003fe5 3fdc .dw VE_HEAD - .set VE_HEAD = VE_ONE - XT_ONE: -003fe6 3848 .dw PFA_DOVARIABLE - PFA_ONE: - .endif -003fe7 0001 .DW 1 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TWO: -003fe8 ff01 .dw $ff01 -003fe9 0032 .db "2",0 -003fea 3fe3 .dw VE_HEAD - .set VE_HEAD = VE_TWO - XT_TWO: -003feb 3848 .dw PFA_DOVARIABLE - PFA_TWO: - .endif -003fec 0002 .DW 2 - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_MINUSONE: -003fed ff02 .dw $ff02 -003fee 312d .db "-1" -003fef 3fe8 .dw VE_HEAD - .set VE_HEAD = VE_MINUSONE - XT_MINUSONE: -003ff0 3848 .dw PFA_DOVARIABLE - PFA_MINUSONE: - .endif -003ff1 ffff .DW -1 - .include "dict_appl_core.inc" - - ; do not delete it! - - .set flashlast = pc - .if (pc>FLASHEND) - .endif - - .dseg - ; define a label for the 1st free ram address - HERESTART: - .eseg - .include "amforth-eeprom.inc" -000034 ff ff - ; some configs -000036 26 0b CFG_DP: .dw DPSTART ; Dictionary Pointer -000038 c2 01 EE_HERE: .dw HERESTART ; Memory Allocation -00003a 8e 00 EE_EHERE: .dw EHERESTART ; EEProm Memory Allocation -00003c ce 09 CFG_WLSCOPE: .dw XT_GET_CURRENT ; default wordlist scope -00003e 5c 00 CFG_FORTHRECOGNIZER: .dw CFG_RECOGNIZERLISTLEN ; Recognizer word set - ; LEAVE stack is between data stack and return stack. -000040 b0 08 CFG_LP0: .dw stackstart+1 -000042 78 0a CFG_TURNKEY: .dw XT_APPLTURNKEY ; TURNKEY -000044 ff 02 CFG_ENVIRONMENT:.dw VE_ENVHEAD ; environmental queries -000046 48 00 CFG_CURRENT: .dw CFG_FORTHWORDLIST ; forth-wordlist -000048 ed 3f CFG_FORTHWORDLIST:.dw VE_HEAD ; pre-defined (compiled in) wordlist - CFG_ORDERLISTLEN: -00004a 01 00 .dw 1 - CFG_ORDERLIST: ; list of wordlist id, exactly numwordlist entries -00004c 48 00 .dw CFG_FORTHWORDLIST ; get/set-order -00004e .byte (NUMWORDLISTS-1)*CELLSIZE ; one slot is already used - CFG_RECOGNIZERLISTLEN: -00005c 02 00 .dw 2 - CFG_RECOGNIZERLIST: -00005e 70 06 .dw XT_REC_FIND -000060 5c 06 .dw XT_REC_NUM -000062 .byte (NUMRECOGNIZERS-2)*CELLSIZE ; two slots are already used - - EE_STOREI: -000066 7e 3b .dw XT_DO_STOREI ; Store a cell into flash - - ; MARKER saves everything up to here. Nothing beyond gets saved - EE_MARKER: -000068 68 00 .dw EE_MARKER - - ; default user area - EE_INITUSER: -00006a 00 00 .dw 0 ; USER_STATE -00006c 00 00 .dw 0 ; USER_FOLLOWER -00006e ff 08 .dw rstackstart ; USER_RP -000070 af 08 .dw stackstart ; USER_SP0 -000072 af 08 .dw stackstart ; USER_SP - -000074 00 00 .dw 0 ; USER_HANDLER -000076 0a 00 .dw 10 ; USER_BASE - -000078 a3 00 .dw XT_TX ; USER_EMIT -00007a b1 00 .dw XT_TXQ ; USER_EMITQ -00007c 78 00 .dw XT_RX ; USER_KEY -00007e 93 00 .dw XT_RXQ ; USER_KEYQ -000080 77 02 .dw XT_SOURCETIB ; USER_SOURCE -000082 00 00 .dw 0 ; USER_G_IN -000084 64 02 .dw XT_REFILLTIB ; USER_REFILL -000086 c9 3c .dw XT_DEFAULT_PROMPTOK -000088 e8 3c .dw XT_DEFAULT_PROMPTERROR -00008a d8 3c .dw XT_DEFAULT_PROMPTREADY - - ; calculate baud rate error - .equ UBRR_VAL = ((F_CPU+BAUD*8)/(BAUD*16)-1) ; smart round - .equ BAUD_REAL = (F_CPU/(16*(UBRR_VAL+1))) ; effective baud rate - .equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000) ; error in pro mille - - .if ((BAUD_ERROR>BAUD_MAXERROR) || (BAUD_ERROR<-BAUD_MAXERROR)) - .endif - EE_UBRRVAL: -00008c 19 00 .dw UBRR_VAL ; BAUDRATE - ; 1st free address in EEPROM. - EHERESTART: - .cseg - - -RESOURCE USE INFORMATION ------------------------- - -Notice: -The register and instruction counts are symbol table hit counts, -and hence implicitly used resources are not counted, eg, the -'lpm' instruction without operands implicitly uses r0 and z, -none of which are counted. - -x,y,z are separate entities in the symbol table and are -counted separately from r26..r31 here. - -.dseg memory usage only counts static data declared with .byte - -"ATmega328P" register use summary: -r0 : 25 r1 : 5 r2 : 10 r3 : 12 r4 : 4 r5 : 1 r6 : 0 r7 : 0 -r8 : 0 r9 : 0 r10: 1 r11: 6 r12: 0 r13: 0 r14: 22 r15: 20 -r16: 89 r17: 61 r18: 61 r19: 37 r20: 13 r21: 11 r22: 11 r23: 3 -r24: 212 r25: 145 r26: 28 r27: 17 r28: 7 r29: 4 r30: 90 r31: 49 -x : 4 y : 217 z : 50 -Registers used: 29 out of 35 (82.9%) - -"ATmega328P" instruction use summary: -.lds : 0 .sts : 0 adc : 22 add : 17 adiw : 17 and : 4 -andi : 3 asr : 2 bclr : 0 bld : 0 brbc : 2 brbs : 7 -brcc : 3 brcs : 1 break : 0 breq : 6 brge : 1 brhc : 0 -brhs : 0 brid : 0 brie : 0 brlo : 1 brlt : 3 brmi : 3 -brne : 22 brpl : 0 brsh : 0 brtc : 0 brts : 0 brvc : 0 -brvs : 2 bset : 0 bst : 0 call : 2 cbi : 7 cbr : 1 -clc : 2 clh : 0 cli : 7 cln : 0 clr : 14 cls : 0 -clt : 0 clv : 0 clz : 0 com : 14 cp : 11 cpc : 10 -cpi : 2 cpse : 0 dec : 10 eor : 3 fmul : 0 fmuls : 0 -fmulsu: 0 icall : 0 ijmp : 1 in : 25 inc : 3 jmp : 13 -ld : 145 ldd : 4 ldi : 41 lds : 1 lpm : 16 lsl : 14 -lsr : 2 mov : 16 movw : 72 mul : 5 muls : 1 mulsu : 2 -neg : 0 nop : 0 or : 9 ori : 2 out : 22 pop : 49 -push : 43 rcall : 39 ret : 7 reti : 1 rjmp : 106 rol : 23 -ror : 6 sbc : 9 sbci : 3 sbi : 8 sbic : 3 sbis : 0 -sbiw : 16 sbr : 0 sbrc : 5 sbrs : 7 sec : 1 seh : 0 -sei : 1 sen : 0 ser : 4 ses : 0 set : 0 sev : 0 -sez : 0 sleep : 0 spm : 2 st : 81 std : 8 sts : 1 -sub : 6 subi : 3 swap : 0 tst : 0 wdr : 0 -Instructions used: 72 out of 113 (63.7%) - -"ATmega328P" memory use summary [bytes]: -Segment Begin End Code Data Used Size Use% ---------------------------------------------------------------- -[.cseg] 0x000000 0x007fe4 2082 11710 13792 32768 42.1% -[.dseg] 0x000100 0x0001c2 0 194 194 2048 9.5% -[.eseg] 0x000000 0x00008e 0 142 142 1024 13.9% - -Assembly complete, 0 errors, 8 warnings diff --git a/amforth-6.5/appl/eval-pollin/p328-16.map b/amforth-6.5/appl/eval-pollin/p328-16.map deleted file mode 100644 index 4d9ad44..0000000 --- a/amforth-6.5/appl/eval-pollin/p328-16.map +++ /dev/null @@ -1,2054 +0,0 @@ - -AVRASM ver. 2.1.52 p328-16.asm Sun Apr 30 20:10:15 2017 - - -SET DICT_COMPILER2 00000001 -SET cpu_msp430 00000000 -SET cpu_avr8 00000001 -SET USER_STATE 00000000 -SET USER_FOLLOWER 00000002 -SET USER_RP 00000004 -SET USER_SP0 00000006 -SET USER_SP 00000008 -SET USER_HANDLER 0000000a -SET USER_BASE 0000000c -SET USER_EMIT 0000000e -SET USER_EMITQ 00000010 -SET USER_KEY 00000012 -SET USER_KEYQ 00000014 -SET USER_SOURCE 00000016 -SET USER_TO_IN 00000018 -SET USER_REFILL 0000001a -SET USER_P_OK 0000001c -SET USER_P_ERR 0000001e -SET USER_P_RDY 00000020 -SET SYSUSERSIZE 00000022 -DEF zerol r2 -DEF zeroh r3 -DEF upl r4 -DEF uph r5 -DEF al r6 -DEF ah r7 -DEF bl r8 -DEF bh r9 -DEF mcu_boot r10 -DEF isrflag r11 -DEF temp4 r14 -DEF temp5 r15 -DEF temp0 r16 -DEF temp1 r17 -DEF temp2 r18 -DEF temp3 r19 -DEF temp6 r20 -DEF temp7 r21 -DEF tosl r24 -DEF tosh r25 -DEF wl r22 -DEF wh r23 -EQU SIGNATURE_000 0000001e -EQU SIGNATURE_001 00000095 -EQU SIGNATURE_002 0000000f -EQU UDR0 000000c6 -EQU UBRR0L 000000c4 -EQU UBRR0H 000000c5 -EQU UCSR0C 000000c2 -EQU UCSR0B 000000c1 -EQU UCSR0A 000000c0 -EQU TWAMR 000000bd -EQU TWCR 000000bc -EQU TWDR 000000bb -EQU TWAR 000000ba -EQU TWSR 000000b9 -EQU TWBR 000000b8 -EQU ASSR 000000b6 -EQU OCR2B 000000b4 -EQU OCR2A 000000b3 -EQU TCNT2 000000b2 -EQU TCCR2B 000000b1 -EQU TCCR2A 000000b0 -EQU OCR1BL 0000008a -EQU OCR1BH 0000008b -EQU OCR1AL 00000088 -EQU OCR1AH 00000089 -EQU ICR1L 00000086 -EQU ICR1H 00000087 -EQU TCNT1L 00000084 -EQU TCNT1H 00000085 -EQU TCCR1C 00000082 -EQU TCCR1B 00000081 -EQU TCCR1A 00000080 -EQU DIDR1 0000007f -EQU DIDR0 0000007e -EQU ADMUX 0000007c -EQU ADCSRB 0000007b -EQU ADCSRA 0000007a -EQU ADCH 00000079 -EQU ADCL 00000078 -EQU TIMSK2 00000070 -EQU TIMSK1 0000006f -EQU TIMSK0 0000006e -EQU PCMSK1 0000006c -EQU PCMSK2 0000006d -EQU PCMSK0 0000006b -EQU EICRA 00000069 -EQU PCICR 00000068 -EQU OSCCAL 00000066 -EQU PRR 00000064 -EQU CLKPR 00000061 -EQU WDTCSR 00000060 -EQU SREG 0000003f -EQU SPL 0000003d -EQU SPH 0000003e -EQU SPMCSR 00000037 -EQU MCUCR 00000035 -EQU MCUSR 00000034 -EQU SMCR 00000033 -EQU ACSR 00000030 -EQU SPDR 0000002e -EQU SPSR 0000002d -EQU SPCR 0000002c -EQU GPIOR2 0000002b -EQU GPIOR1 0000002a -EQU OCR0B 00000028 -EQU OCR0A 00000027 -EQU TCNT0 00000026 -EQU TCCR0B 00000025 -EQU TCCR0A 00000024 -EQU GTCCR 00000023 -EQU EEARH 00000022 -EQU EEARL 00000021 -EQU EEDR 00000020 -EQU EECR 0000001f -EQU GPIOR0 0000001e -EQU EIMSK 0000001d -EQU EIFR 0000001c -EQU PCIFR 0000001b -EQU TIFR2 00000017 -EQU TIFR1 00000016 -EQU TIFR0 00000015 -EQU PORTD 0000000b -EQU DDRD 0000000a -EQU PIND 00000009 -EQU PORTC 00000008 -EQU DDRC 00000007 -EQU PINC 00000006 -EQU PORTB 00000005 -EQU DDRB 00000004 -EQU PINB 00000003 -EQU UDR0_0 00000000 -EQU UDR0_1 00000001 -EQU UDR0_2 00000002 -EQU UDR0_3 00000003 -EQU UDR0_4 00000004 -EQU UDR0_5 00000005 -EQU UDR0_6 00000006 -EQU UDR0_7 00000007 -EQU MPCM0 00000000 -EQU U2X0 00000001 -EQU UPE0 00000002 -EQU DOR0 00000003 -EQU FE0 00000004 -EQU UDRE0 00000005 -EQU TXC0 00000006 -EQU RXC0 00000007 -EQU TXB80 00000000 -EQU RXB80 00000001 -EQU UCSZ02 00000002 -EQU TXEN0 00000003 -EQU RXEN0 00000004 -EQU UDRIE0 00000005 -EQU TXCIE0 00000006 -EQU RXCIE0 00000007 -EQU UCPOL0 00000000 -EQU UCSZ00 00000001 -EQU UCPHA0 00000001 -EQU UCSZ01 00000002 -EQU UDORD0 00000002 -EQU USBS0 00000003 -EQU UPM00 00000004 -EQU UPM01 00000005 -EQU UMSEL00 00000006 -EQU UMSEL0 00000006 -EQU UMSEL01 00000007 -EQU UMSEL1 00000007 -EQU UBRR8 00000000 -EQU UBRR9 00000001 -EQU UBRR10 00000002 -EQU UBRR11 00000003 -EQU _UBRR0 00000000 -EQU _UBRR1 00000001 -EQU UBRR2 00000002 -EQU UBRR3 00000003 -EQU UBRR4 00000004 -EQU UBRR5 00000005 -EQU UBRR6 00000006 -EQU UBRR7 00000007 -EQU TWAM0 00000001 -EQU TWAMR0 00000001 -EQU TWAM1 00000002 -EQU TWAMR1 00000002 -EQU TWAM2 00000003 -EQU TWAMR2 00000003 -EQU TWAM3 00000004 -EQU TWAMR3 00000004 -EQU TWAM4 00000005 -EQU TWAMR4 00000005 -EQU TWAM5 00000006 -EQU TWAMR5 00000006 -EQU TWAM6 00000007 -EQU TWAMR6 00000007 -EQU TWBR0 00000000 -EQU TWBR1 00000001 -EQU TWBR2 00000002 -EQU TWBR3 00000003 -EQU TWBR4 00000004 -EQU TWBR5 00000005 -EQU TWBR6 00000006 -EQU TWBR7 00000007 -EQU TWIE 00000000 -EQU TWEN 00000002 -EQU TWWC 00000003 -EQU TWSTO 00000004 -EQU TWSTA 00000005 -EQU TWEA 00000006 -EQU TWINT 00000007 -EQU TWPS0 00000000 -EQU TWPS1 00000001 -EQU TWS3 00000003 -EQU TWS4 00000004 -EQU TWS5 00000005 -EQU TWS6 00000006 -EQU TWS7 00000007 -EQU TWD0 00000000 -EQU TWD1 00000001 -EQU TWD2 00000002 -EQU TWD3 00000003 -EQU TWD4 00000004 -EQU TWD5 00000005 -EQU TWD6 00000006 -EQU TWD7 00000007 -EQU TWGCE 00000000 -EQU TWA0 00000001 -EQU TWA1 00000002 -EQU TWA2 00000003 -EQU TWA3 00000004 -EQU TWA4 00000005 -EQU TWA5 00000006 -EQU TWA6 00000007 -EQU TOIE1 00000000 -EQU OCIE1A 00000001 -EQU OCIE1B 00000002 -EQU ICIE1 00000005 -EQU TOV1 00000000 -EQU OCF1A 00000001 -EQU OCF1B 00000002 -EQU ICF1 00000005 -EQU WGM10 00000000 -EQU WGM11 00000001 -EQU COM1B0 00000004 -EQU COM1B1 00000005 -EQU COM1A0 00000006 -EQU COM1A1 00000007 -EQU CS10 00000000 -EQU CS11 00000001 -EQU CS12 00000002 -EQU WGM12 00000003 -EQU WGM13 00000004 -EQU ICES1 00000006 -EQU ICNC1 00000007 -EQU FOC1B 00000006 -EQU FOC1A 00000007 -EQU PSRSYNC 00000000 -EQU TSM 00000007 -EQU TOIE2 00000000 -EQU TOIE2A 00000000 -EQU OCIE2A 00000001 -EQU OCIE2B 00000002 -EQU TOV2 00000000 -EQU OCF2A 00000001 -EQU OCF2B 00000002 -EQU WGM20 00000000 -EQU WGM21 00000001 -EQU COM2B0 00000004 -EQU COM2B1 00000005 -EQU COM2A0 00000006 -EQU COM2A1 00000007 -EQU CS20 00000000 -EQU CS21 00000001 -EQU CS22 00000002 -EQU WGM22 00000003 -EQU FOC2B 00000006 -EQU FOC2A 00000007 -EQU TCNT2_0 00000000 -EQU TCNT2_1 00000001 -EQU TCNT2_2 00000002 -EQU TCNT2_3 00000003 -EQU TCNT2_4 00000004 -EQU TCNT2_5 00000005 -EQU TCNT2_6 00000006 -EQU TCNT2_7 00000007 -EQU OCR2A_0 00000000 -EQU OCR2A_1 00000001 -EQU OCR2A_2 00000002 -EQU OCR2A_3 00000003 -EQU OCR2A_4 00000004 -EQU OCR2A_5 00000005 -EQU OCR2A_6 00000006 -EQU OCR2A_7 00000007 -EQU OCR2B_0 00000000 -EQU OCR2B_1 00000001 -EQU OCR2B_2 00000002 -EQU OCR2B_3 00000003 -EQU OCR2B_4 00000004 -EQU OCR2B_5 00000005 -EQU OCR2B_6 00000006 -EQU OCR2B_7 00000007 -EQU TCR2BUB 00000000 -EQU TCR2AUB 00000001 -EQU OCR2BUB 00000002 -EQU OCR2AUB 00000003 -EQU TCN2UB 00000004 -EQU AS2 00000005 -EQU EXCLK 00000006 -EQU PSRASY 00000001 -EQU PSR2 00000001 -EQU MUX0 00000000 -EQU MUX1 00000001 -EQU MUX2 00000002 -EQU MUX3 00000003 -EQU ADLAR 00000005 -EQU REFS0 00000006 -EQU REFS1 00000007 -EQU ADPS0 00000000 -EQU ADPS1 00000001 -EQU ADPS2 00000002 -EQU ADIE 00000003 -EQU ADIF 00000004 -EQU ADATE 00000005 -EQU ADSC 00000006 -EQU ADEN 00000007 -EQU ADTS0 00000000 -EQU ADTS1 00000001 -EQU ADTS2 00000002 -EQU ACME 00000006 -EQU ADCH0 00000000 -EQU ADCH1 00000001 -EQU ADCH2 00000002 -EQU ADCH3 00000003 -EQU ADCH4 00000004 -EQU ADCH5 00000005 -EQU ADCH6 00000006 -EQU ADCH7 00000007 -EQU ADCL0 00000000 -EQU ADCL1 00000001 -EQU ADCL2 00000002 -EQU ADCL3 00000003 -EQU ADCL4 00000004 -EQU ADCL5 00000005 -EQU ADCL6 00000006 -EQU ADCL7 00000007 -EQU ADC0D 00000000 -EQU ADC1D 00000001 -EQU ADC2D 00000002 -EQU ADC3D 00000003 -EQU ADC4D 00000004 -EQU ADC5D 00000005 -EQU ACIS0 00000000 -EQU ACIS1 00000001 -EQU ACIC 00000002 -EQU ACIE 00000003 -EQU ACI 00000004 -EQU ACO 00000005 -EQU ACBG 00000006 -EQU ACD 00000007 -EQU AIN0D 00000000 -EQU AIN1D 00000001 -EQU PORTB0 00000000 -EQU PB0 00000000 -EQU PORTB1 00000001 -EQU PB1 00000001 -EQU PORTB2 00000002 -EQU PB2 00000002 -EQU PORTB3 00000003 -EQU PB3 00000003 -EQU PORTB4 00000004 -EQU PB4 00000004 -EQU PORTB5 00000005 -EQU PB5 00000005 -EQU PORTB6 00000006 -EQU PB6 00000006 -EQU PORTB7 00000007 -EQU PB7 00000007 -EQU DDB0 00000000 -EQU DDB1 00000001 -EQU DDB2 00000002 -EQU DDB3 00000003 -EQU DDB4 00000004 -EQU DDB5 00000005 -EQU DDB6 00000006 -EQU DDB7 00000007 -EQU PINB0 00000000 -EQU PINB1 00000001 -EQU PINB2 00000002 -EQU PINB3 00000003 -EQU PINB4 00000004 -EQU PINB5 00000005 -EQU PINB6 00000006 -EQU PINB7 00000007 -EQU PORTC0 00000000 -EQU PC0 00000000 -EQU PORTC1 00000001 -EQU PC1 00000001 -EQU PORTC2 00000002 -EQU PC2 00000002 -EQU PORTC3 00000003 -EQU PC3 00000003 -EQU PORTC4 00000004 -EQU PC4 00000004 -EQU PORTC5 00000005 -EQU PC5 00000005 -EQU PORTC6 00000006 -EQU PC6 00000006 -EQU DDC0 00000000 -EQU DDC1 00000001 -EQU DDC2 00000002 -EQU DDC3 00000003 -EQU DDC4 00000004 -EQU DDC5 00000005 -EQU DDC6 00000006 -EQU PINC0 00000000 -EQU PINC1 00000001 -EQU PINC2 00000002 -EQU PINC3 00000003 -EQU PINC4 00000004 -EQU PINC5 00000005 -EQU PINC6 00000006 -EQU PORTD0 00000000 -EQU PD0 00000000 -EQU PORTD1 00000001 -EQU PD1 00000001 -EQU PORTD2 00000002 -EQU PD2 00000002 -EQU PORTD3 00000003 -EQU PD3 00000003 -EQU PORTD4 00000004 -EQU PD4 00000004 -EQU PORTD5 00000005 -EQU PD5 00000005 -EQU PORTD6 00000006 -EQU PD6 00000006 -EQU PORTD7 00000007 -EQU PD7 00000007 -EQU DDD0 00000000 -EQU DDD1 00000001 -EQU DDD2 00000002 -EQU DDD3 00000003 -EQU DDD4 00000004 -EQU DDD5 00000005 -EQU DDD6 00000006 -EQU DDD7 00000007 -EQU PIND0 00000000 -EQU PIND1 00000001 -EQU PIND2 00000002 -EQU PIND3 00000003 -EQU PIND4 00000004 -EQU PIND5 00000005 -EQU PIND6 00000006 -EQU PIND7 00000007 -EQU TOIE0 00000000 -EQU OCIE0A 00000001 -EQU OCIE0B 00000002 -EQU TOV0 00000000 -EQU OCF0A 00000001 -EQU OCF0B 00000002 -EQU WGM00 00000000 -EQU WGM01 00000001 -EQU COM0B0 00000004 -EQU COM0B1 00000005 -EQU COM0A0 00000006 -EQU COM0A1 00000007 -EQU CS00 00000000 -EQU CS01 00000001 -EQU CS02 00000002 -EQU WGM02 00000003 -EQU FOC0B 00000006 -EQU FOC0A 00000007 -EQU TCNT0_0 00000000 -EQU TCNT0_1 00000001 -EQU TCNT0_2 00000002 -EQU TCNT0_3 00000003 -EQU TCNT0_4 00000004 -EQU TCNT0_5 00000005 -EQU TCNT0_6 00000006 -EQU TCNT0_7 00000007 -EQU OCR0A_0 00000000 -EQU OCR0A_1 00000001 -EQU OCR0A_2 00000002 -EQU OCR0A_3 00000003 -EQU OCR0A_4 00000004 -EQU OCR0A_5 00000005 -EQU OCR0A_6 00000006 -EQU OCR0A_7 00000007 -EQU OCR0B_0 00000000 -EQU OCR0B_1 00000001 -EQU OCR0B_2 00000002 -EQU OCR0B_3 00000003 -EQU OCR0B_4 00000004 -EQU OCR0B_5 00000005 -EQU OCR0B_6 00000006 -EQU OCR0B_7 00000007 -EQU PSR10 00000000 -EQU ISC00 00000000 -EQU ISC01 00000001 -EQU ISC10 00000002 -EQU ISC11 00000003 -EQU INT0 00000000 -EQU INT1 00000001 -EQU INTF0 00000000 -EQU INTF1 00000001 -EQU PCIE0 00000000 -EQU PCIE1 00000001 -EQU PCIE2 00000002 -EQU PCINT16 00000000 -EQU PCINT17 00000001 -EQU PCINT18 00000002 -EQU PCINT19 00000003 -EQU PCINT20 00000004 -EQU PCINT21 00000005 -EQU PCINT22 00000006 -EQU PCINT23 00000007 -EQU PCINT8 00000000 -EQU PCINT9 00000001 -EQU PCINT10 00000002 -EQU PCINT11 00000003 -EQU PCINT12 00000004 -EQU PCINT13 00000005 -EQU PCINT14 00000006 -EQU PCINT0 00000000 -EQU PCINT1 00000001 -EQU PCINT2 00000002 -EQU PCINT3 00000003 -EQU PCINT4 00000004 -EQU PCINT5 00000005 -EQU PCINT6 00000006 -EQU PCINT7 00000007 -EQU PCIF0 00000000 -EQU PCIF1 00000001 -EQU PCIF2 00000002 -EQU SPDR0 00000000 -EQU SPDR1 00000001 -EQU SPDR2 00000002 -EQU SPDR3 00000003 -EQU SPDR4 00000004 -EQU SPDR5 00000005 -EQU SPDR6 00000006 -EQU SPDR7 00000007 -EQU SPI2X 00000000 -EQU WCOL 00000006 -EQU SPIF 00000007 -EQU SPR0 00000000 -EQU SPR1 00000001 -EQU CPHA 00000002 -EQU CPOL 00000003 -EQU MSTR 00000004 -EQU DORD 00000005 -EQU SPE 00000006 -EQU SPIE 00000007 -EQU WDP0 00000000 -EQU WDP1 00000001 -EQU WDP2 00000002 -EQU WDE 00000003 -EQU WDCE 00000004 -EQU WDP3 00000005 -EQU WDIE 00000006 -EQU WDIF 00000007 -EQU SREG_C 00000000 -EQU SREG_Z 00000001 -EQU SREG_N 00000002 -EQU SREG_V 00000003 -EQU SREG_S 00000004 -EQU SREG_H 00000005 -EQU SREG_T 00000006 -EQU SREG_I 00000007 -EQU CAL0 00000000 -EQU CAL1 00000001 -EQU CAL2 00000002 -EQU CAL3 00000003 -EQU CAL4 00000004 -EQU CAL5 00000005 -EQU CAL6 00000006 -EQU CAL7 00000007 -EQU CLKPS0 00000000 -EQU CLKPS1 00000001 -EQU CLKPS2 00000002 -EQU CLKPS3 00000003 -EQU CLKPCE 00000007 -EQU SELFPRGEN 00000000 -EQU PGERS 00000001 -EQU PGWRT 00000002 -EQU BLBSET 00000003 -EQU RWWSRE 00000004 -EQU RWWSB 00000006 -EQU SPMIE 00000007 -EQU IVCE 00000000 -EQU IVSEL 00000001 -EQU PUD 00000004 -EQU BODSE 00000005 -EQU BODS 00000006 -EQU PORF 00000000 -EQU EXTRF 00000001 -EQU EXTREF 00000001 -EQU BORF 00000002 -EQU WDRF 00000003 -EQU SE 00000000 -EQU SM0 00000001 -EQU SM1 00000002 -EQU SM2 00000003 -EQU GPIOR20 00000000 -EQU GPIOR21 00000001 -EQU GPIOR22 00000002 -EQU GPIOR23 00000003 -EQU GPIOR24 00000004 -EQU GPIOR25 00000005 -EQU GPIOR26 00000006 -EQU GPIOR27 00000007 -EQU GPIOR10 00000000 -EQU GPIOR11 00000001 -EQU GPIOR12 00000002 -EQU GPIOR13 00000003 -EQU GPIOR14 00000004 -EQU GPIOR15 00000005 -EQU GPIOR16 00000006 -EQU GPIOR17 00000007 -EQU GPIOR00 00000000 -EQU GPIOR01 00000001 -EQU GPIOR02 00000002 -EQU GPIOR03 00000003 -EQU GPIOR04 00000004 -EQU GPIOR05 00000005 -EQU GPIOR06 00000006 -EQU GPIOR07 00000007 -EQU PRADC 00000000 -EQU PRUSART0 00000001 -EQU PRSPI 00000002 -EQU PRTIM1 00000003 -EQU PRTIM0 00000005 -EQU PRTIM2 00000006 -EQU PRTWI 00000007 -EQU EEAR0 00000000 -EQU EEAR1 00000001 -EQU EEAR2 00000002 -EQU EEAR3 00000003 -EQU EEAR4 00000004 -EQU EEAR5 00000005 -EQU EEAR6 00000006 -EQU EEAR7 00000007 -EQU EEAR8 00000000 -EQU EEAR9 00000001 -EQU EEDR0 00000000 -EQU EEDR1 00000001 -EQU EEDR2 00000002 -EQU EEDR3 00000003 -EQU EEDR4 00000004 -EQU EEDR5 00000005 -EQU EEDR6 00000006 -EQU EEDR7 00000007 -EQU EERE 00000000 -EQU EEPE 00000001 -EQU EEMPE 00000002 -EQU EERIE 00000003 -EQU EEPM0 00000004 -EQU EEPM1 00000005 -EQU LB1 00000000 -EQU LB2 00000001 -EQU BLB01 00000002 -EQU BLB02 00000003 -EQU BLB11 00000004 -EQU BLB12 00000005 -EQU CKSEL0 00000000 -EQU CKSEL1 00000001 -EQU CKSEL2 00000002 -EQU CKSEL3 00000003 -EQU SUT0 00000004 -EQU SUT1 00000005 -EQU CKOUT 00000006 -EQU CKDIV8 00000007 -EQU BOOTRST 00000000 -EQU BOOTSZ0 00000001 -EQU BOOTSZ1 00000002 -EQU EESAVE 00000003 -EQU WDTON 00000004 -EQU SPIEN 00000005 -EQU DWEN 00000006 -EQU RSTDISBL 00000007 -EQU BODLEVEL0 00000000 -EQU BODLEVEL1 00000001 -EQU BODLEVEL2 00000002 -DEF XH r27 -DEF XL r26 -DEF YH r29 -DEF YL r28 -DEF ZH r31 -DEF ZL r30 -EQU FLASHEND 00003fff -EQU IOEND 000000ff -EQU SRAM_START 00000100 -EQU SRAM_SIZE 00000800 -EQU RAMEND 000008ff -EQU XRAMEND 00000000 -EQU E2END 000003ff -EQU EEPROMEND 000003ff -EQU EEADRBITS 0000000a -EQU NRWW_START_ADDR 00003800 -EQU NRWW_STOP_ADDR 00003fff -EQU RWW_START_ADDR 00000000 -EQU RWW_STOP_ADDR 000037ff -EQU PAGESIZE 00000040 -EQU FIRSTBOOTSTART 00003f00 -EQU SECONDBOOTSTART 00003e00 -EQU THIRDBOOTSTART 00003c00 -EQU FOURTHBOOTSTART 00003800 -EQU SMALLBOOTSTART 00003f00 -EQU LARGEBOOTSTART 00003800 -EQU INT0addr 00000002 -EQU INT1addr 00000004 -EQU PCI0addr 00000006 -EQU PCI1addr 00000008 -EQU PCI2addr 0000000a -EQU WDTaddr 0000000c -EQU OC2Aaddr 0000000e -EQU OC2Baddr 00000010 -EQU OVF2addr 00000012 -EQU ICP1addr 00000014 -EQU OC1Aaddr 00000016 -EQU OC1Baddr 00000018 -EQU OVF1addr 0000001a -EQU OC0Aaddr 0000001c -EQU OC0Baddr 0000001e -EQU OVF0addr 00000020 -EQU SPIaddr 00000022 -EQU URXCaddr 00000024 -EQU UDREaddr 00000026 -EQU UTXCaddr 00000028 -EQU ADCCaddr 0000002a -EQU ERDYaddr 0000002c -EQU ACIaddr 0000002e -EQU TWIaddr 00000030 -EQU SPMRaddr 00000032 -EQU INT_VECTORS_SIZE 00000034 -EQU ramstart 00000100 -EQU CELLSIZE 00000002 -SET WANT_USART0 00000000 -SET WANT_TWI 00000000 -SET WANT_TIMER_COUNTER_1 00000000 -SET WANT_TIMER_COUNTER_2 00000000 -SET WANT_AD_CONVERTER 00000000 -SET WANT_ANALOG_COMPARATOR 00000000 -SET WANT_PORTB 00000000 -SET WANT_PORTC 00000000 -SET WANT_PORTD 00000000 -SET WANT_TIMER_COUNTER_0 00000000 -SET WANT_EXTERNAL_INTERRUPT 00000000 -SET WANT_SPI 00000000 -SET WANT_WATCHDOG 00000000 -SET WANT_CPU 00000000 -SET WANT_EEPROM 00000000 -EQU intvecsize 00000002 -EQU pclen 00000002 -CSEG isr 00000129 -EQU INTVECTORS 0000001a -EQU SPMEN 00000000 -CSEG mcu_info 00000033 -CSEG mcu_ramsize 00000033 -CSEG mcu_eepromsize 00000034 -CSEG mcu_maxdp 00000035 -CSEG mcu_numints 00000036 -CSEG mcu_name 00000037 -SET codestart 0000003d -SET WANT_INTERRUPTS 00000001 -SET WANT_INTERRUPT_COUNTERS 00000000 -SET WANT_ISR_RX 00000001 -SET WANT_IGNORECASE 00000000 -SET WANT_UNIFIED 00000000 -SET TIB_SIZE 0000005a -SET APPUSERSIZE 0000000a -SET rstackstart 000008ff -SET stackstart 000008af -SET NUMWORDLISTS 00000008 -SET NUMRECOGNIZERS 00000004 -SET BAUD 00009600 -SET BAUD_MAXERROR 0000001e -SET VE_HEAD 00003fed -SET VE_ENVHEAD 000002ff -SET AMFORTH_RO_SEG 00003801 -EQU F_CPU 00f42400 -EQU TIMER_INT 00000012 -EQU BAUDRATE_LOW 000000c4 -EQU BAUDRATE_HIGH 000000c5 -EQU USART_C 000000c2 -EQU USART_B 000000c1 -EQU USART_A 000000c0 -EQU USART_DATA 000000c6 -EQU bm_USART_RXRD 00000080 -EQU bm_USART_TXRD 00000020 -EQU bm_ENABLE_TX 00000008 -EQU bm_ENABLE_RX 00000010 -EQU bm_ENABLE_INT_RX 00000080 -EQU bm_ENABLE_INT_TX 00000020 -EQU bm_USARTC_en 00000000 -EQU bm_ASYNC 00000000 -EQU bm_SYNC 00000040 -EQU bm_NO_PARITY 00000000 -EQU bm_EVEN_PARITY 00000020 -EQU bm_ODD_PARITY 00000030 -EQU bm_1STOPBIT 00000000 -EQU bm_2STOPBIT 00000008 -EQU bm_5BIT 00000000 -EQU bm_6BIT 00000002 -EQU bm_7BIT 00000004 -EQU bm_8BIT 00000006 -SET USART_C_VALUE 00000006 -SET USART_B_VALUE 00000098 -EQU usart_rx_size 00000010 -EQU usart_rx_mask 0000000f -DSEG usart_rx_data 00000100 -DSEG usart_rx_in 00000110 -DSEG usart_rx_out 00000111 -CSEG VE_TO_RXBUF 0000003d -CSEG XT_TO_RXBUF 00000043 -CSEG PFA_rx_tobuf 00000044 -CSEG DO_NEXT 00003805 -CSEG VE_ISR_RX 00000054 -CSEG XT_ISR_RX 00000059 -CSEG DO_COLON 00003801 -CSEG usart_rx_isr 0000005a -CSEG XT_DOLITERAL 0000383d -CSEG XT_CFETCH 00003898 -CSEG XT_DUP 000038b1 -CSEG XT_EQUAL 00003fdf -CSEG XT_DOCONDBRANCH 00003836 -CSEG usart_rx_isr1 00000064 -CSEG XT_COLD 00003d38 -CSEG XT_EXIT 00003820 -CSEG XT_USART_INIT_RX_BUFFER 00000066 -CSEG PFA_USART_INIT_RX_BUFFER 00000067 -CSEG XT_INTSTORE 00003ca5 -CSEG XT_ZERO 00003954 -CSEG XT_FILL 00003e98 -CSEG VE_RX_BUFFER 00000073 -CSEG XT_RX_BUFFER 00000078 -CSEG PFA_RX_BUFFER 00000079 -CSEG XT_RXQ_BUFFER 00000093 -CSEG XT_PLUS 0000399d -CSEG XT_SWAP 000038c4 -CSEG XT_1PLUS 00003a2f -CSEG XT_AND 00003a13 -CSEG XT_CSTORE 0000388d -CSEG VE_RXQ_BUFFER 0000008d -CSEG PFA_RXQ_BUFFER 00000094 -CSEG XT_PAUSE 00003d30 -CSEG XT_NOTEQUAL 00003913 -SET XT_RX 00000078 -SET XT_RXQ 00000093 -SET XT_USART_INIT_RX 00000066 -CSEG VE_TX_POLL 0000009d -CSEG XT_TX_POLL 000000a3 -CSEG PFA_TX_POLL 000000a4 -CSEG XT_TXQ_POLL 000000b1 -CSEG VE_TXQ_POLL 000000ab -CSEG PFA_TXQ_POLL 000000b2 -SET XT_TX 000000a3 -SET XT_TXQ 000000b1 -SET XT_USART_INIT_TX 00000000 -CSEG VE_UBRR 000000ba -CSEG XT_UBRR 000000be -CSEG PFA_DOVALUE1 0000386f -CSEG PFA_UBRR 000000bf -ESEG EE_UBRRVAL 0000008c -CSEG XT_EDEFERFETCH 00003da0 -CSEG XT_EDEFERSTORE 00003daa -CSEG VE_USART 000000c2 -CSEG XT_USART 000000c7 -CSEG PFA_USART 000000c8 -CSEG XT_BYTESWAP 00003af9 -EQU OW_PORT 00000005 -EQU OW_BIT 00000004 -SET OW_DDR 00000004 -SET OW_PIN 00000003 -CSEG VE_OW_RESET 000000dd -CSEG XT_OW_RESET 000000e3 -CSEG PFA_OW_RESET 000000e4 -SET cycles 00000000 -SET loop_cycles 00000fa0 -CSEG VE_OW_SLOT 00000101 -CSEG XT_OW_SLOT 00000107 -CSEG PFA_OW_SLOT 00000108 -CSEG PFA_OW_SLOT0 00000115 -SET AMFORTH_NRWW_SIZE 00000ffc -SET corepc 00000129 -CSEG PFA_COLD 00003d39 -ESEG intvec 00000000 -DSEG intcnt 00000112 -CSEG VE_MPLUS 00000140 -CSEG XT_MPLUS 00000143 -CSEG PFA_MPLUS 00000144 -CSEG XT_S2D 00003fc7 -CSEG XT_DPLUS 00003c15 -CSEG VE_UDSTAR 00000147 -CSEG XT_UDSTAR 0000014b -CSEG PFA_UDSTAR 0000014c -CSEG XT_TO_R 000038ff -CSEG XT_UMSTAR 000039e0 -CSEG XT_DROP 000038d9 -CSEG XT_R_FROM 000038f6 -CSEG XT_ROT 000038e1 -CSEG VE_UMAX 00000156 -CSEG XT_UMAX 0000015a -CSEG PFA_UMAX 0000015b -CSEG XT_2DUP 00003ec9 -CSEG XT_ULESS 0000395c -CSEG UMAX1 00000160 -CSEG VE_UMIN 00000162 -CSEG XT_UMIN 00000166 -CSEG PFA_UMIN 00000167 -CSEG XT_UGREATER 00003967 -CSEG UMIN1 0000016c -CSEG XT_IMMEDIATEQ 0000016e -CSEG PFA_IMMEDIATEQ 0000016f -CSEG XT_ZEROEQUAL 0000391a -CSEG IMMEDIATEQ1 00000177 -CSEG XT_ONE 00003fe6 -CSEG XT_TRUE 0000394b -CSEG VE_NAME2FLAGS 00000179 -CSEG XT_NAME2FLAGS 00000180 -CSEG PFA_NAME2FLAGS 00000181 -CSEG XT_FETCHI 00003bcb -CSEG VE_DOT_VER 00000186 -CSEG XT_DOT_VER 0000018a -CSEG PFA_DOT_VER 0000018b -CSEG XT_ENV_FORTHNAME 000002da -CSEG XT_ITYPE 00000403 -CSEG XT_SPACE 00003fae -CSEG XT_BASE 00003ebd -CSEG XT_FETCH 00003879 -CSEG XT_ENV_FORTHVERSION 000002e8 -CSEG XT_DECIMAL 00003f41 -CSEG XT_L_SHARP 00000321 -CSEG XT_SHARP 00000329 -CSEG XT_HOLD 00000312 -CSEG XT_SHARP_S 0000033f -CSEG XT_SHARP_G 0000034a -CSEG XT_TYPE 00000439 -CSEG XT_STORE 00003881 -CSEG XT_ENV_CPU 000002f0 -CSEG VE_NOOP 000001a1 -CSEG XT_NOOP 000001a5 -CSEG PFA_NOOP 000001a6 -CSEG VE_UNUSED 000001a7 -CSEG XT_UNUSED 000001ac -CSEG PFA_UNUSED 000001ad -CSEG XT_SP_FETCH 00003a8d -CSEG XT_HERE 00003f23 -CSEG XT_MINUS 00003993 -CSEG VE_TO 000001b1 -CSEG XT_TO 000001b4 -CSEG PFA_TO 000001b5 -CSEG XT_TICK 00000448 -CSEG XT_TO_BODY 00003fd0 -CSEG XT_STATE 00003eb7 -CSEG PFA_TO1 000001c5 -CSEG XT_COMPILE 0000075c -CSEG XT_DOTO 000001bf -CSEG XT_COMMA 00000767 -CSEG PFA_DOTO 000001c0 -CSEG XT_ICELLPLUS 000001d1 -CSEG XT_EXECUTE 0000382a -CSEG VE_ICELLPLUS 000001cb -CSEG PFA_ICELLPLUS 000001d2 -CSEG VE_ICOMPARE 000001d4 -CSEG XT_ICOMPARE 000001da -CSEG PFA_ICOMPARE 000001db -CSEG XT_OVER 000038cf -CSEG PFA_ICOMPARE_SAMELEN 000001e5 -CSEG XT_2DROP 00003ed2 -CSEG XT_QDOCHECK 00000826 -CSEG PFA_ICOMPARE_DONE 00000208 -CSEG XT_DODO 00003a9b -CSEG PFA_ICOMPARE_LOOP 000001eb -CSEG PFA_ICOMPARE_LASTCELL 000001f9 -CSEG PFA_ICOMPARE_NEXTLOOP 00000200 -CSEG XT_UNLOOP 00003ad4 -CSEG XT_CELLPLUS 00003c90 -CSEG XT_DOPLUSLOOP 00003aba -CSEG VE_STAR 0000020b -CSEG XT_STAR 0000020e -CSEG PFA_STAR 0000020f -CSEG XT_MSTAR 000039a6 -CSEG VE_J 00000212 -CSEG XT_J 00000215 -CSEG PFA_J 00000216 -CSEG XT_RP_FETCH 00003a76 -CSEG VE_DABS 00000222 -CSEG XT_DABS 00000226 -CSEG PFA_DABS 00000227 -CSEG XT_ZEROLESS 00003921 -CSEG PFA_DABS1 0000022c -CSEG XT_DNEGATE 00000233 -CSEG VE_DNEGATE 0000022d -CSEG PFA_DNEGATE 00000234 -CSEG XT_DINVERT 00003c3b -CSEG VE_CMOVE 00000239 -CSEG XT_CMOVE 0000023e -CSEG PFA_CMOVE 0000023f -CSEG PFA_CMOVE1 0000024c -CSEG PFA_CMOVE2 00000248 -CSEG VE_2SWAP 00000252 -CSEG XT_2SWAP 00000257 -CSEG PFA_2SWAP 00000258 -CSEG VE_REFILLTIB 0000025d -CSEG XT_REFILLTIB 00000264 -CSEG PFA_REFILLTIB 00000265 -CSEG XT_TIB 00000280 -CSEG XT_ACCEPT 00000498 -CSEG XT_NUMBERTIB 00000286 -CSEG XT_TO_IN 00003ee2 -CSEG VE_SOURCETIB 00000270 -CSEG XT_SOURCETIB 00000277 -CSEG PFA_SOURCETIB 00000278 -CSEG VE_TIB 0000027c -CSEG PFA_DOVARIABLE 00003848 -CSEG PFA_TIB 00000281 -DSEG ram_tib 0000012c -CSEG VE_NUMBERTIB 00000282 -CSEG PFA_NUMBERTIB 00000287 -DSEG ram_sharptib 00000186 -CSEG VE_EE2RAM 00000288 -CSEG XT_EE2RAM 0000028d -CSEG PFA_EE2RAM 0000028e -CSEG PFA_EE2RAM_1 00000290 -CSEG XT_FETCHE 00003b5f -CSEG XT_DOLOOP 00003ac9 -CSEG PFA_EE2RAM_2 0000029a -CSEG VE_INIT_RAM 0000029c -CSEG XT_INIT_RAM 000002a2 -CSEG PFA_INI_RAM 000002a3 -ESEG EE_INITUSER 0000006a -CSEG XT_UP_FETCH 00003b02 -CSEG XT_2SLASH 00003a04 -CSEG VE_ENVIRONMENT 000002ab -CSEG XT_ENVIRONMENT 000002b3 -CSEG PFA_ENVIRONMENT 000002b4 -ESEG CFG_ENVIRONMENT 00000044 -CSEG VE_ENVWORDLISTS 000002b5 -CSEG XT_ENVWORDLISTS 000002bc -CSEG PFA_ENVWORDLISTS 000002bd -CSEG VE_ENVSLASHPAD 000002c0 -CSEG XT_ENVSLASHPAD 000002c4 -CSEG PFA_ENVSLASHPAD 000002c5 -CSEG XT_PAD 00003ee8 -CSEG VE_ENVSLASHHOLD 000002c9 -CSEG XT_ENVSLASHHOLD 000002ce -CSEG PFA_ENVSLASHHOLD 000002cf -CSEG VE_ENV_FORTHNAME 000002d3 -CSEG PFA_EN_FORTHNAME 000002db -CSEG XT_DOSLITERAL 000003d0 -CSEG VE_ENV_FORTHVERSION 000002e2 -CSEG PFA_EN_FORTHVERSION 000002e9 -CSEG VE_ENV_CPU 000002ec -CSEG PFA_EN_CPU 000002f1 -CSEG XT_ICOUNT 0000042f -CSEG VE_ENV_MCUINFO 000002f5 -CSEG XT_ENV_MCUINFO 000002fb -CSEG PFA_EN_MCUINFO 000002fc -CSEG VE_ENVUSERSIZE 000002ff -CSEG XT_ENVUSERSIZE 00000304 -CSEG PFA_ENVUSERSIZE 00000305 -CSEG VE_HLD 00000308 -CSEG XT_HLD 0000030c -CSEG PFA_HLD 0000030d -DSEG ram_hld 00000188 -CSEG VE_HOLD 0000030e -CSEG PFA_HOLD 00000313 -CSEG XT_1MINUS 00003a35 -CSEG VE_L_SHARP 0000031e -CSEG PFA_L_SHARP 00000322 -CSEG VE_SHARP 00000326 -CSEG PFA_SHARP 0000032a -CSEG XT_UDSLASHMOD 000003a6 -CSEG XT_LESS 0000396e -CSEG PFA_SHARP1 00000337 -CSEG VE_SHARP_S 0000033c -CSEG PFA_SHARP_S 00000340 -CSEG NUMS1 00000340 -CSEG XT_OR 00003a1c -CSEG VE_SHARP_G 00000347 -CSEG PFA_SHARP_G 0000034b -CSEG VE_SIGN 00000352 -CSEG XT_SIGN 00000356 -CSEG PFA_SIGN 00000357 -CSEG PFA_SIGN1 0000035d -CSEG VE_DDOTR 0000035e -CSEG XT_DDOTR 00000362 -CSEG PFA_DDOTR 00000363 -CSEG XT_TUCK 00003eda -CSEG XT_SPACES 00003fb7 -CSEG VE_DOTR 00000371 -CSEG XT_DOTR 00000374 -CSEG PFA_DOTR 00000375 -CSEG VE_DDOT 0000037a -CSEG XT_DDOT 0000037d -CSEG PFA_DDOT 0000037e -CSEG VE_DOT 00000382 -CSEG XT_DOT 00000385 -CSEG PFA_DOT 00000386 -CSEG VE_UDDOT 00000389 -CSEG XT_UDDOT 0000038d -CSEG PFA_UDDOT 0000038e -CSEG XT_UDDOTR 00000396 -CSEG VE_UDDOTR 00000392 -CSEG PFA_UDDOTR 00000397 -CSEG VE_UDSLASHMOD 000003a1 -CSEG PFA_UDSLASHMOD 000003a7 -CSEG XT_R_FETCH 00003908 -CSEG XT_UMSLASHMOD 000039c2 -CSEG VE_DIGITQ 000003b1 -CSEG XT_DIGITQ 000003b6 -CSEG PFA_DIGITQ 000003b7 -CSEG XT_TOUPPER 00003f66 -CSEG XT_GREATER 00003978 -CSEG PFA_DOSLITERAL 000003d1 -CSEG VE_SCOMMA 000003db -CSEG XT_SCOMMA 000003de -CSEG PFA_SCOMMA 000003df -CSEG XT_DOSCOMMA 000003e2 -CSEG PFA_DOSCOMMA 000003e3 -CSEG XT_2STAR 00003a0b -CSEG PFA_SCOMMA2 000003f5 -CSEG PFA_SCOMMA1 000003ef -CSEG XT_GREATERZERO 00003928 -CSEG PFA_SCOMMA3 000003fc -CSEG VE_ITYPE 000003fe -CSEG PFA_ITYPE 00000404 -CSEG PFA_ITYPE2 00000417 -CSEG PFA_ITYPE1 0000040f -CSEG XT_LOWEMIT 00000424 -CSEG XT_HIEMIT 00000420 -CSEG PFA_ITYPE3 0000041e -CSEG PFA_HIEMIT 00000421 -CSEG PFA_LOWEMIT 00000425 -CSEG XT_EMIT 00003ef2 -CSEG VE_ICOUNT 0000042a -CSEG PFA_ICOUNT 00000430 -CSEG VE_TYPE 00000435 -CSEG PFA_TYPE 0000043a -CSEG XT_BOUNDS 00003f99 -CSEG PFA_TYPE2 00000444 -CSEG PFA_TYPE1 0000043f -CSEG XT_I 00003aac -CSEG VE_TICK 00000445 -CSEG PFA_TICK 00000449 -CSEG XT_PARSENAME 000005bb -CSEG XT_FORTHRECOGNIZER 000005fe -CSEG XT_RECOGNIZE 00000609 -CSEG XT_DT_NULL 00000696 -CSEG PFA_TICK1 0000045a -CSEG XT_THROW 00003d86 -CSEG VE_CSKIP 0000045c -CSEG XT_CSKIP 00000461 -CSEG PFA_CSKIP 00000462 -CSEG PFA_CSKIP1 00000463 -CSEG PFA_CSKIP2 00000470 -CSEG XT_SLASHSTRING 000005ac -CSEG XT_DOBRANCH 0000382f -CSEG VE_CSCAN 00000473 -CSEG XT_CSCAN 00000478 -CSEG PFA_CSCAN 00000479 -CSEG PFA_CSCAN1 0000047b -CSEG PFA_CSCAN2 0000048d -CSEG XT_NIP 000038f0 -CSEG VE_ACCEPT 00000493 -CSEG PFA_ACCEPT 00000499 -CSEG ACC1 0000049d -CSEG XT_KEY 00003f03 -CSEG XT_CRLFQ 000004d9 -CSEG ACC5 000004cb -CSEG ACC3 000004bb -CSEG ACC6 000004b9 -CSEG XT_BS 000004d1 -CSEG ACC4 000004c9 -CSEG XT_BL 00003f54 -CSEG PFA_ACCEPT6 000004c2 -CSEG XT_CR 00003fa1 -CSEG VE_REFILL 000004e4 -CSEG XT_REFILL 000004e9 -CSEG PFA_DODEFER1 00003dff -CSEG PFA_REFILL 000004ea -CSEG XT_UDEFERFETCH 00003dc8 -CSEG XT_UDEFERSTORE 00003dd4 -CSEG VE_CHAR 000004ed -CSEG XT_CHAR 000004f1 -CSEG PFA_CHAR 000004f2 -CSEG VE_NUMBER 000004f6 -CSEG XT_NUMBER 000004fb -CSEG PFA_NUMBER 000004fc -CSEG XT_QSIGN 0000053f -CSEG XT_SET_BASE 00000552 -CSEG PFA_NUMBER0 00000512 -CSEG XT_2TO_R 00003b1e -CSEG XT_2R_FROM 00003b2d -CSEG XT_TO_NUMBER 00000570 -CSEG XT_QDUP 000038b9 -CSEG PFA_NUMBER1 00000534 -CSEG PFA_NUMBER2 0000052b -CSEG PFA_NUMBER6 0000052c -CSEG PFA_NUMBER3 00000528 -CSEG XT_TWO 00003feb -CSEG PFA_NUMBER5 0000053a -CSEG PFA_NUMBER4 00000539 -CSEG XT_NEGATE 00003e27 -CSEG PFA_QSIGN 00000540 -CSEG PFA_NUMBERSIGN_DONE 0000054b -CSEG XT_BASES 0000054d -CSEG PFA_DOCONSTANT 00003852 -CSEG PFA_SET_BASE 00000553 -CSEG XT_WITHIN 00003e57 -CSEG SET_BASE1 00000568 -CSEG SET_BASE2 00000569 -CSEG VE_TO_NUMBER 0000056a -CSEG TONUM1 00000571 -CSEG TONUM3 00000588 -CSEG TONUM2 0000057c -CSEG VE_PARSE 00000589 -CSEG XT_PARSE 0000058e -CSEG PFA_PARSE 0000058f -CSEG XT_SOURCE 000005a2 -CSEG XT_PLUSSTORE 00003a65 -CSEG VE_SOURCE 0000059d -CSEG PFA_SOURCE 000005a3 -CSEG VE_SLASHSTRING 000005a6 -CSEG PFA_SLASHSTRING 000005ad -CSEG VE_PARSENAME 000005b4 -CSEG PFA_PARSENAME 000005bc -CSEG XT_SKIPSCANCHAR 000005bf -CSEG PFA_SKIPSCANCHAR 000005c0 -CSEG VE_SP0 000005d1 -CSEG XT_SP0 000005d5 -CSEG PFA_SP0 000005d6 -CSEG VE_SP 000005d9 -CSEG XT_SP 000005dc -CSEG PFA_DOUSER 00003858 -CSEG PFA_SP 000005dd -CSEG VE_RP0 000005de -CSEG XT_RP0 000005e2 -CSEG PFA_RP0 000005e3 -CSEG XT_DORP0 000005e6 -CSEG PFA_DORP0 000005e7 -CSEG VE_DEPTH 000005e8 -CSEG XT_DEPTH 000005ed -CSEG PFA_DEPTH 000005ee -CSEG VE_FORTHRECOGNIZER 000005f4 -CSEG PFA_FORTHRECOGNIZER 000005ff -ESEG CFG_FORTHRECOGNIZER 0000003e -CSEG VE_RECOGNIZE 00000602 -CSEG PFA_RECOGNIZE 0000060a -CSEG XT_RECOGNIZE_A 00000614 -CSEG XT_MAPSTACK 000009a7 -CSEG PFA_RECOGNIZE1 00000613 -CSEG PFA_RECOGNIZE_A 00000615 -CSEG PFA_RECOGNIZE_A1 00000625 -CSEG VE_INTERPRET 00000629 -CSEG XT_INTERPRET 00000630 -CSEG PFA_INTERPRET 00000631 -CSEG PFA_INTERPRET2 00000641 -CSEG PFA_INTERPRET1 0000063c -CSEG XT_QSTACK 00003f8b -CSEG VE_DT_NUM 00000643 -CSEG XT_DT_NUM 00000648 -CSEG PFA_DT_NUM 00000649 -CSEG XT_LITERAL 0000077d -CSEG VE_DT_DNUM 0000064c -CSEG XT_DT_DNUM 00000652 -CSEG PFA_DT_DNUM 00000653 -CSEG XT_2LITERAL 00003fd7 -CSEG VE_REC_NUM 00000656 -CSEG XT_REC_NUM 0000065c -CSEG PFA_REC_NUM 0000065d -CSEG PFA_REC_NONUMBER 00000668 -CSEG PFA_REC_INTNUM2 00000666 -CSEG VE_REC_FIND 0000066a -CSEG XT_REC_FIND 00000670 -CSEG PFA_REC_FIND 00000671 -CSEG XT_FINDXT 0000070b -CSEG PFA_REC_WORD_FOUND 00000679 -CSEG XT_DT_XT 00000680 -CSEG VE_DT_XT 0000067b -CSEG PFA_DT_XT 00000681 -CSEG XT_R_WORD_INTERPRET 00000684 -CSEG XT_R_WORD_COMPILE 00000688 -CSEG PFA_R_WORD_INTERPRET 00000685 -CSEG PFA_R_WORD_COMPILE 00000689 -CSEG PFA_R_WORD_COMPILE1 0000068e -CSEG VE_DT_NULL 00000690 -CSEG PFA_DT_NULL 00000697 -CSEG XT_FAIL 0000069a -CSEG PFA_FAIL 0000069b -CSEG VE_SEARCH_WORDLIST 0000069e -CSEG XT_SEARCH_WORDLIST 000006a8 -CSEG PFA_SEARCH_WORDLIST 000006a9 -CSEG XT_ISWORD 000006bd -CSEG XT_TRAVERSEWORDLIST 000006da -CSEG PFA_SEARCH_WORDLIST1 000006b7 -CSEG XT_NFA2CFA 00000701 -CSEG PFA_ISWORD 000006be -CSEG XT_NAME2STRING 000006f5 -CSEG PFA_ISWORD3 000006cb -CSEG VE_TRAVERSEWORDLIST 000006cf -CSEG PFA_TRAVERSEWORDLIST 000006db -CSEG PFA_TRAVERSEWORDLIST1 000006dc -CSEG PFA_TRAVERSEWORDLIST2 000006eb -CSEG XT_NFA2LFA 00000a16 -CSEG VE_NAME2STRING 000006ed -CSEG PFA_NAME2STRING 000006f6 -CSEG VE_NFA2CFA 000006fb -CSEG PFA_NFA2CFA 00000702 -CSEG VE_FINDXT 00000705 -CSEG PFA_FINDXT 0000070c -CSEG XT_FINDXTA 00000717 -ESEG CFG_ORDERLISTLEN 0000004a -CSEG PFA_FINDXT1 00000716 -CSEG PFA_FINDXTA 00000718 -CSEG PFA_FINDXTA1 00000724 -CSEG VE_NEWEST 00000725 -CSEG XT_NEWEST 0000072a -CSEG PFA_NEWEST 0000072b -DSEG ram_newest 0000018a -CSEG VE_LATEST 0000072c -CSEG XT_LATEST 00000731 -CSEG PFA_LATEST 00000732 -DSEG ram_latest 0000018e -CSEG VE_DOCREATE 00000733 -CSEG XT_DOCREATE 00000739 -CSEG PFA_DOCREATE 0000073a -CSEG XT_WLSCOPE 00000890 -CSEG XT_HEADER 00000875 -CSEG VE_BACKSLASH 00000744 -CSEG XT_BACKSLASH 00000747 -CSEG PFA_BACKSLASH 00000748 -CSEG VE_LPAREN 0000074d -CSEG XT_LPAREN 00000750 -CSEG PFA_LPAREN 00000751 -CSEG VE_COMPILE 00000756 -CSEG PFA_COMPILE 0000075d -CSEG VE_COMMA 00000764 -CSEG PFA_COMMA 00000768 -CSEG XT_DP 00003f12 -CSEG XT_STOREI 00003b73 -CSEG PFA_DP 00003f13 -CSEG VE_BRACKETTICK 0000076f -CSEG XT_BRACKETTICK 00000773 -CSEG PFA_BRACKETTICK 00000774 -CSEG VE_LITERAL 00000777 -CSEG PFA_LITERAL 0000077e -CSEG VE_SLITERAL 00000782 -CSEG XT_SLITERAL 00000788 -CSEG PFA_SLITERAL 00000789 -CSEG XT_GMARK 0000078d -CSEG PFA_GMARK 0000078e -CSEG XT_GRESOLVE 00000792 -CSEG PFA_GRESOLVE 00000793 -CSEG XT_LMARK 00000798 -CSEG PFA_LMARK 00000799 -CSEG XT_LRESOLVE 0000079b -CSEG PFA_LRESOLVE 0000079c -CSEG VE_AHEAD 0000079f -CSEG XT_AHEAD 000007a4 -CSEG PFA_AHEAD 000007a5 -CSEG VE_IF 000007a9 -CSEG XT_IF 000007ac -CSEG PFA_IF 000007ad -CSEG VE_ELSE 000007b1 -CSEG XT_ELSE 000007b5 -CSEG PFA_ELSE 000007b6 -CSEG VE_THEN 000007bc -CSEG XT_THEN 000007c0 -CSEG PFA_THEN 000007c1 -CSEG VE_BEGIN 000007c3 -CSEG XT_BEGIN 000007c8 -CSEG PFA_BEGIN 000007c9 -CSEG VE_WHILE 000007cb -CSEG XT_WHILE 000007d0 -CSEG PFA_WHILE 000007d1 -CSEG VE_REPEAT 000007d4 -CSEG XT_REPEAT 000007d9 -CSEG PFA_REPEAT 000007da -CSEG XT_AGAIN 000007ed -CSEG VE_UNTIL 000007dd -CSEG XT_UNTIL 000007e2 -CSEG PFA_UNTIL 000007e3 -CSEG VE_AGAIN 000007e8 -CSEG PFA_AGAIN 000007ee -CSEG VE_DO 000007f2 -CSEG XT_DO 000007f5 -CSEG PFA_DO 000007f6 -CSEG XT_TO_L 00000850 -CSEG VE_LOOP 000007fc -CSEG XT_LOOP 00000800 -CSEG PFA_LOOP 00000801 -CSEG XT_ENDLOOP 00000837 -CSEG VE_PLUSLOOP 00000805 -CSEG XT_PLUSLOOP 0000080a -CSEG PFA_PLUSLOOP 0000080b -CSEG VE_LEAVE 0000080f -CSEG XT_LEAVE 00000814 -CSEG PFA_LEAVE 00000815 -CSEG VE_QDO 0000081a -CSEG XT_QDO 0000081e -CSEG PFA_QDO 0000081f -CSEG PFA_QDOCHECK 00000827 -CSEG PFA_QDOCHECK1 0000082e -CSEG XT_INVERT 000039fd -CSEG VE_ENDLOOP 00000831 -CSEG PFA_ENDLOOP 00000838 -CSEG LOOP1 00000839 -CSEG XT_L_FROM 00000844 -CSEG LOOP2 00000840 -CSEG VE_L_FROM 00000841 -CSEG PFA_L_FROM 00000845 -CSEG XT_LP 00000863 -CSEG VE_TO_L 0000084d -CSEG PFA_TO_L 00000851 -CSEG VE_LP0 00000858 -CSEG XT_LP0 0000085c -CSEG PFA_LP0 0000085d -ESEG CFG_LP0 00000040 -CSEG VE_LP 00000860 -CSEG PFA_LP 00000864 -DSEG ram_lp 00000190 -CSEG VE_CREATE 00000865 -CSEG XT_CREATE 0000086a -CSEG PFA_CREATE 0000086b -CSEG XT_REVEAL 00000899 -CSEG VE_HEADER 00000870 -CSEG PFA_HEADER 00000876 -CSEG PFA_HEADER1 00000887 -CSEG VE_WLSCOPE 0000088a -CSEG PFA_WLSCOPE 00000891 -ESEG CFG_WLSCOPE 0000003c -CSEG VE_REVEAL 00000894 -CSEG PFA_REVEAL 0000089a -CSEG REVEAL1 000008a4 -CSEG XT_STOREE 00003b3b -CSEG VE_DOES 000008a5 -CSEG XT_DOES 000008aa -CSEG PFA_DOES 000008ab -CSEG XT_DODOES 000008bd -CSEG DO_DODOES 000008b2 -CSEG PFA_DODOES 000008be -CSEG VE_COLON 000008c6 -CSEG XT_COLON 000008c9 -CSEG PFA_COLON 000008ca -CSEG XT_COLONNONAME 000008d4 -CSEG VE_COLONNONAME 000008ce -CSEG PFA_COLONNONAME 000008d5 -CSEG XT_RBRACKET 000008e9 -CSEG VE_SEMICOLON 000008dd -CSEG XT_SEMICOLON 000008e0 -CSEG PFA_SEMICOLON 000008e1 -CSEG XT_LBRACKET 000008f1 -CSEG VE_RBRACKET 000008e6 -CSEG PFA_RBRACKET 000008ea -CSEG VE_LBRACKET 000008ee -CSEG PFA_LBRACKET 000008f2 -CSEG VE_VARIABLE 000008f6 -CSEG XT_VARIABLE 000008fc -CSEG PFA_VARIABLE 000008fd -CSEG XT_CONSTANT 00000908 -CSEG XT_ALLOT 00003f2c -CSEG VE_CONSTANT 00000902 -CSEG PFA_CONSTANT 00000909 -CSEG VE_USER 0000090f -CSEG XT_USER 00000913 -CSEG PFA_USER 00000914 -CSEG VE_RECURSE 0000091a -CSEG XT_RECURSE 00000920 -CSEG PFA_RECURSE 00000921 -CSEG VE_IMMEDIATE 00000925 -CSEG XT_IMMEDIATE 0000092c -CSEG PFA_IMMEDIATE 0000092d -CSEG XT_GET_CURRENT 000009ce -CSEG VE_BRACKETCHAR 00000937 -CSEG XT_BRACKETCHAR 0000093c -CSEG PFA_BRACKETCHAR 0000093d -CSEG VE_ABORTQUOTE 00000942 -CSEG XT_ABORTQUOTE 00000947 -CSEG PFA_ABORTQUOTE 00000948 -CSEG XT_SQUOTE 00003e8a -CSEG XT_QABORT 00000959 -CSEG VE_ABORT 0000094c -CSEG XT_ABORT 00000951 -CSEG PFA_ABORT 00000952 -CSEG VE_QABORT 00000954 -CSEG PFA_QABORT 0000095a -CSEG QABO1 0000095f -CSEG VE_GET_STACK 00000961 -CSEG XT_GET_STACK 00000968 -CSEG PFA_N_FETCH_E2 0000097f -CSEG PFA_N_FETCH_E1 00000975 -CSEG XT_CELLS 00003ec4 -CSEG VE_SET_STACK 00000982 -CSEG XT_SET_STACK 00000989 -CSEG PFA_SET_STACK 0000098a -CSEG PFA_SET_STACK0 00000991 -CSEG PFA_SET_STACK2 0000099e -CSEG PFA_SET_STACK1 00000999 -CSEG VE_MAPSTACK 000009a0 -CSEG PFA_MAPSTACK 000009a8 -CSEG PFA_MAPSTACK3 000009c3 -CSEG PFA_MAPSTACK1 000009b2 -CSEG PFA_MAPSTACK2 000009bf -CSEG VE_GET_CURRENT 000009c6 -CSEG PFA_GET_CURRENT 000009cf -ESEG CFG_CURRENT 00000046 -CSEG VE_GET_ORDER 000009d3 -CSEG XT_GET_ORDER 000009da -CSEG PFA_GET_ORDER 000009db -CSEG VE_CFG_ORDER 000009df -CSEG XT_CFG_ORDER 000009e6 -CSEG PFA_CFG_ORDER 000009e7 -CSEG VE_COMPARE 000009e8 -CSEG XT_COMPARE 000009ee -CSEG PFA_COMPARE 000009ef -CSEG PFA_COMPARE_LOOP 000009fb -CSEG PFA_COMPARE_NOTEQUAL 00000a09 -CSEG PFA_COMPARE_ENDREACHED2 00000a04 -CSEG PFA_COMPARE_ENDREACHED 00000a05 -CSEG PFA_COMPARE_CHECKLASTCHAR 00000a09 -CSEG PFA_COMPARE_DONE 00000a0b -CSEG VE_NFA2LFA 00000a10 -CSEG PFA_NFA2LFA 00000a17 -CSEG VE_DOTS 00000a1c -CSEG XT_DOTS 00000a1f -CSEG PFA_DOTS 00000a20 -CSEG XT_UDOT 00003e0a -CSEG PFA_DOTS2 00000a2e -CSEG PFA_DOTS1 00000a29 -CSEG XT_PICK 00003c84 -CSEG VE_SPIRW 00000a2f -CSEG XT_SPIRW 00000a34 -CSEG PFA_SPIRW 00000a35 -CSEG do_spirw 00000a39 -CSEG do_spirw1 00000a3a -CSEG VE_N_SPIR 00000a42 -CSEG XT_N_SPIR 00000a47 -CSEG PFA_N_SPIR 00000a48 -CSEG PFA_N_SPIR_LOOP 00000a4d -CSEG PFA_N_SPIR_LOOP1 00000a4e -CSEG VE_N_SPIW 00000a59 -CSEG XT_N_SPIW 00000a5e -CSEG PFA_N_SPIW 00000a5f -CSEG PFA_N_SPIW_LOOP 00000a64 -CSEG PFA_N_SPIW_LOOP1 00000a66 -CSEG VE_APPLTURNKEY 00000a70 -CSEG XT_APPLTURNKEY 00000a78 -CSEG PFA_APPLTURNKEY 00000a79 -CSEG XT_INTON 00003c97 -CSEG XT_F_CPU 00003eac -CSEG VE_SET_CURRENT 00000a8a -CSEG XT_SET_CURRENT 00000a92 -CSEG PFA_SET_CURRENT 00000a93 -CSEG VE_WORDLIST 00000a97 -CSEG XT_WORDLIST 00000a9d -CSEG PFA_WORDLIST 00000a9e -CSEG XT_EHERE 00003f1b -CSEG PFA_EHERE 00003f1c -CSEG VE_FORTHWORDLIST 00000aa7 -CSEG XT_FORTHWORDLIST 00000ab0 -CSEG PFA_FORTHWORDLIST 00000ab1 -ESEG CFG_FORTHWORDLIST 00000048 -CSEG VE_SET_ORDER 00000ab2 -CSEG XT_SET_ORDER 00000ab9 -CSEG PFA_SET_ORDER 00000aba -CSEG VE_SET_RECOGNIZERS 00000abe -CSEG XT_SET_RECOGNIZERS 00000ac8 -CSEG PFA_SET_RECOGNIZERS 00000ac9 -ESEG CFG_RECOGNIZERLISTLEN 0000005c -CSEG VE_GET_RECOGNIZERS 00000acd -CSEG XT_GET_RECOGNIZERS 00000ad7 -CSEG PFA_GET_RECOGNIZERS 00000ad8 -CSEG VE_CODE 00000adc -CSEG XT_CODE 00000ae0 -CSEG PFA_CODE 00000ae1 -CSEG VE_ENDCODE 00000ae7 -CSEG XT_ENDCODE 00000aed -CSEG PFA_ENDCODE 00000aee -CSEG VE_MARKER 00000af3 -CSEG XT_MARKER 00000af9 -CSEG PFA_MARKER 00000afa -ESEG EE_MARKER 00000068 -CSEG VE_POSTPONE 00000afd -CSEG XT_POSTPONE 00000b03 -CSEG PFA_POSTPONE 00000b04 -CSEG VE_2R_FETCH 00000b12 -CSEG XT_2R_FETCH 00000b16 -CSEG PFA_2R_FETCH 00000b17 -SET DPSTART 00000b26 -CSEG DO_INTERRUPT 00003814 -CSEG DO_EXECUTE 0000380d -CSEG XT_ISREXEC 00003cc0 -CSEG VE_EXIT 0000381c -CSEG PFA_EXIT 00003821 -CSEG VE_EXECUTE 00003824 -CSEG PFA_EXECUTE 0000382b -CSEG PFA_DOBRANCH 00003830 -CSEG PFA_DOCONDBRANCH 00003837 -CSEG PFA_DOLITERAL 0000383e -CSEG XT_DOVARIABLE 00003847 -CSEG XT_DOCONSTANT 00003851 -CSEG XT_DOUSER 00003857 -CSEG VE_DOVALUE 00003863 -CSEG XT_DOVALUE 00003869 -CSEG PFA_DOVALUE 0000386a -CSEG VE_FETCH 00003876 -CSEG PFA_FETCH 0000387a -CSEG PFA_FETCHRAM 0000387a -CSEG VE_STORE 0000387e -CSEG PFA_STORE 00003882 -CSEG PFA_STORERAM 00003882 -CSEG VE_CSTORE 0000388a -CSEG PFA_CSTORE 0000388e -CSEG VE_CFETCH 00003895 -CSEG PFA_CFETCH 00003899 -CSEG VE_FETCHU 0000389d -CSEG XT_FETCHU 000038a0 -CSEG PFA_FETCHU 000038a1 -CSEG VE_STOREU 000038a5 -CSEG XT_STOREU 000038a8 -CSEG PFA_STOREU 000038a9 -CSEG VE_DUP 000038ad -CSEG PFA_DUP 000038b2 -CSEG VE_QDUP 000038b5 -CSEG PFA_QDUP 000038ba -CSEG PFA_QDUP1 000038bf -CSEG VE_SWAP 000038c0 -CSEG PFA_SWAP 000038c5 -CSEG VE_OVER 000038cb -CSEG PFA_OVER 000038d0 -CSEG VE_DROP 000038d5 -CSEG PFA_DROP 000038da -CSEG VE_ROT 000038dd -CSEG PFA_ROT 000038e2 -CSEG VE_NIP 000038ec -CSEG PFA_NIP 000038f1 -CSEG VE_R_FROM 000038f3 -CSEG PFA_R_FROM 000038f7 -CSEG VE_TO_R 000038fc -CSEG PFA_TO_R 00003900 -CSEG VE_R_FETCH 00003905 -CSEG PFA_R_FETCH 00003909 -CSEG VE_NOTEQUAL 00003910 -CSEG PFA_NOTEQUAL 00003914 -CSEG VE_ZEROEQUAL 00003917 -CSEG PFA_ZEROEQUAL 0000391b -CSEG PFA_ZERO1 00003957 -CSEG PFA_TRUE1 0000394e -CSEG VE_ZEROLESS 0000391e -CSEG PFA_ZEROLESS 00003922 -CSEG VE_GREATERZERO 00003925 -CSEG PFA_GREATERZERO 00003929 -CSEG VE_DGREATERZERO 0000392e -CSEG XT_DGREATERZERO 00003932 -CSEG PFA_DGREATERZERO 00003933 -CSEG VE_DXT_ZEROLESS 0000393c -CSEG XT_DXT_ZEROLESS 00003940 -CSEG PFA_DXT_ZEROLESS 00003941 -CSEG VE_TRUE 00003947 -CSEG PFA_TRUE 0000394c -CSEG VE_ZERO 00003951 -CSEG PFA_ZERO 00003955 -CSEG VE_ULESS 00003959 -CSEG PFA_ULESS 0000395d -CSEG VE_UGREATER 00003964 -CSEG PFA_UGREATER 00003968 -CSEG VE_LESS 0000396b -CSEG PFA_LESS 0000396f -CSEG PFA_LESSDONE 00003973 -CSEG VE_GREATER 00003975 -CSEG PFA_GREATER 00003979 -CSEG PFA_GREATERDONE 0000397d -CSEG VE_LOG2 00003980 -CSEG XT_LOG2 00003984 -CSEG PFA_LOG2 00003985 -CSEG PFA_LOG2_1 00003988 -CSEG PFA_LOG2_2 0000398e -CSEG VE_MINUS 00003990 -CSEG PFA_MINUS 00003994 -CSEG VE_PLUS 0000399a -CSEG PFA_PLUS 0000399e -CSEG VE_MSTAR 000039a3 -CSEG PFA_MSTAR 000039a7 -CSEG VE_UMSLASHMOD 000039bd -CSEG PFA_UMSLASHMOD 000039c3 -CSEG PFA_UMSLASHMODmod 000039c8 -CSEG PFA_UMSLASHMODmod_loop 000039c9 -CSEG PFA_UMSLASHMODmod_loop_control 000039d6 -CSEG PFA_UMSLASHMODmod_subtract 000039d3 -CSEG PFA_UMSLASHMODmod_done 000039d8 -CSEG VE_UMSTAR 000039dc -CSEG PFA_UMSTAR 000039e1 -CSEG VE_INVERT 000039f8 -CSEG PFA_INVERT 000039fe -CSEG VE_2SLASH 00003a01 -CSEG PFA_2SLASH 00003a05 -CSEG VE_2STAR 00003a08 -CSEG PFA_2STAR 00003a0c -CSEG VE_AND 00003a0f -CSEG PFA_AND 00003a14 -CSEG VE_OR 00003a19 -CSEG PFA_OR 00003a1d -CSEG VE_XOR 00003a22 -CSEG XT_XOR 00003a26 -CSEG PFA_XOR 00003a27 -CSEG VE_1PLUS 00003a2c -CSEG PFA_1PLUS 00003a30 -CSEG VE_1MINUS 00003a32 -CSEG PFA_1MINUS 00003a36 -CSEG VE_QNEGATE 00003a38 -CSEG XT_QNEGATE 00003a3e -CSEG PFA_QNEGATE 00003a3f -CSEG QNEG1 00003a43 -CSEG VE_LSHIFT 00003a44 -CSEG XT_LSHIFT 00003a49 -CSEG PFA_LSHIFT 00003a4a -CSEG PFA_LSHIFT1 00003a4d -CSEG PFA_LSHIFT2 00003a52 -CSEG VE_RSHIFT 00003a53 -CSEG XT_RSHIFT 00003a58 -CSEG PFA_RSHIFT 00003a59 -CSEG PFA_RSHIFT1 00003a5c -CSEG PFA_RSHIFT2 00003a61 -CSEG VE_PLUSSTORE 00003a62 -CSEG PFA_PLUSSTORE 00003a66 -CSEG VE_RP_FETCH 00003a72 -CSEG PFA_RP_FETCH 00003a77 -CSEG VE_RP_STORE 00003a7c -CSEG XT_RP_STORE 00003a80 -CSEG PFA_RP_STORE 00003a81 -CSEG VE_SP_FETCH 00003a89 -CSEG PFA_SP_FETCH 00003a8e -CSEG VE_SP_STORE 00003a92 -CSEG XT_SP_STORE 00003a96 -CSEG PFA_SP_STORE 00003a97 -CSEG PFA_DODO 00003a9c -CSEG PFA_DODO1 00003a9e -CSEG VE_I 00003aa9 -CSEG PFA_I 00003aad -CSEG PFA_DOPLUSLOOP 00003abb -CSEG PFA_DOPLUSLOOP_LEAVE 00003ac5 -CSEG PFA_DOPLUSLOOP_NEXT 00003ac2 -CSEG PFA_DOLOOP 00003aca -CSEG VE_UNLOOP 00003acf -CSEG PFA_UNLOOP 00003ad5 -CSEG VE_CMOVE_G 00003ada -CSEG XT_CMOVE_G 00003adf -CSEG PFA_CMOVE_G 00003ae0 -CSEG PFA_CMOVE_G1 00003af1 -CSEG PFA_CMOVE_G2 00003aed -CSEG VE_BYTESWAP 00003af6 -CSEG PFA_BYTESWAP 00003afa -CSEG VE_UP_FETCH 00003afe -CSEG PFA_UP_FETCH 00003b03 -CSEG VE_UP_STORE 00003b07 -CSEG XT_UP_STORE 00003b0b -CSEG PFA_UP_STORE 00003b0c -CSEG VE_1MS 00003b10 -CSEG XT_1MS 00003b14 -CSEG PFA_1MS 00003b15 -CSEG VE_2TO_R 00003b1a -CSEG PFA_2TO_R 00003b1f -CSEG VE_2R_FROM 00003b29 -CSEG PFA_2R_FROM 00003b2e -CSEG VE_STOREE 00003b38 -CSEG PFA_STOREE 00003b3c -CSEG PFA_STOREE0 00003b3c -CSEG PFA_FETCHE2 00003b6a -CSEG PFA_STOREE3 00003b46 -CSEG PFA_STOREE1 00003b51 -CSEG PFA_STOREE4 00003b4d -CSEG PFA_STOREE2 00003b53 -CSEG VE_FETCHE 00003b5c -CSEG PFA_FETCHE 00003b60 -CSEG PFA_FETCHE1 00003b60 -CSEG VE_STOREI 00003b70 -CSEG PFA_STOREI 00003b74 -ESEG EE_STOREI 00000066 -CSEG VE_DO_STOREI_NRWW 00003b77 -CSEG XT_DO_STOREI 00003b7e -CSEG PFA_DO_STOREI_NRWW 00003b7f -CSEG DO_STOREI_atmega 00003b93 -CSEG pageload 00003ba4 -CSEG DO_STOREI_writepage 00003b9d -CSEG dospm 00003bbd -EQU pagemask ffffffc0 -CSEG pageload_loop 00003baa -CSEG pageload_newdata 00003bb5 -CSEG pageload_cont 00003bb7 -CSEG pageload_done 00003bbc -CSEG dospm_wait_ee 00003bbd -CSEG dospm_wait_spm 00003bbf -CSEG VE_FETCHI 00003bc8 -CSEG PFA_FETCHI 00003bcc -CSEG VE_N_TO_R 00003bd2 -CSEG XT_N_TO_R 00003bd6 -CSEG PFA_N_TO_R 00003bd7 -CSEG PFA_N_TO_R1 00003bd9 -CSEG VE_N_R_FROM 00003be4 -CSEG XT_N_R_FROM 00003be8 -CSEG PFA_N_R_FROM 00003be9 -CSEG PFA_N_R_FROM1 00003bee -CSEG VE_D2STAR 00003bf6 -CSEG XT_D2STAR 00003bfa -CSEG PFA_D2STAR 00003bfb -CSEG VE_D2SLASH 00003c04 -CSEG XT_D2SLASH 00003c08 -CSEG PFA_D2SLASH 00003c09 -CSEG VE_DPLUS 00003c12 -CSEG PFA_DPLUS 00003c16 -CSEG VE_DMINUS 00003c23 -CSEG XT_DMINUS 00003c26 -CSEG PFA_DMINUS 00003c27 -CSEG VE_DINVERT 00003c35 -CSEG PFA_DINVERT 00003c3c -CSEG VE_SLASHMOD 00003c45 -CSEG XT_SLASHMOD 00003c49 -CSEG PFA_SLASHMOD 00003c4a -CSEG PFA_SLASHMOD_1 00003c55 -CSEG PFA_SLASHMOD_2 00003c5b -CSEG PFA_SLASHMOD_3 00003c5e -CSEG PFA_SLASHMOD_5 00003c69 -CSEG PFA_SLASHMOD_4 00003c68 -CSEG PFA_SLASHMODmod_done 00003c74 -CSEG PFA_SLASHMOD_6 00003c72 -CSEG VE_ABS 00003c78 -CSEG XT_ABS 00003c7c -CSEG PFA_ABS 00003c7d -CSEG VE_PICK 00003c80 -CSEG PFA_PICK 00003c85 -CSEG VE_CELLPLUS 00003c8b -CSEG PFA_CELLPLUS 00003c91 -CSEG VE_INTON 00003c93 -CSEG PFA_INTON 00003c98 -CSEG VE_INTOFF 00003c9a -CSEG XT_INTOFF 00003c9e -CSEG PFA_INTOFF 00003c9f -CSEG VE_INTSTORE 00003ca1 -CSEG PFA_INTSTORE 00003ca6 -CSEG VE_INTFETCH 00003cab -CSEG XT_INTFETCH 00003caf -CSEG PFA_INTFETCH 00003cb0 -CSEG VE_INTTRAP 00003cb5 -CSEG XT_INTTRAP 00003cbb -CSEG PFA_INTTRAP 00003cbc -CSEG PFA_ISREXEC 00003cc1 -CSEG XT_ISREND 00003cc5 -CSEG PFA_ISREND 00003cc6 -CSEG PFA_ISREND1 00003cc8 -CSEG XT_DEFAULT_PROMPTOK 00003cc9 -CSEG PFA_DEFAULT_PROMPTOK 00003cca -CSEG VE_PROMPTOK 00003cd0 -CSEG XT_PROMPTOK 00003cd4 -CSEG PFA_PROMPTOK 00003cd5 -CSEG XT_DEFAULT_PROMPTREADY 00003cd8 -CSEG PFA_DEFAULT_PROMPTREADY 00003cd9 -CSEG VE_PROMPTREADY 00003cdf -CSEG XT_PROMPTREADY 00003ce4 -CSEG PFA_PROMPTREADY 00003ce5 -CSEG XT_DEFAULT_PROMPTERROR 00003ce8 -CSEG PFA_DEFAULT_PROMPTERROR 00003ce9 -CSEG VE_PROMPTERROR 00003cfa -CSEG XT_PROMPTERROR 00003cff -CSEG PFA_PROMPTERROR 00003d00 -CSEG VE_QUIT 00003d03 -CSEG XT_QUIT 00003d07 -CSEG PFA_QUIT 00003d08 -CSEG PFA_QUIT2 00003d10 -CSEG PFA_QUIT4 00003d16 -CSEG PFA_QUIT3 00003d28 -CSEG XT_CATCH 00003d70 -CSEG PFA_QUIT5 00003d26 -CSEG VE_PAUSE 00003d2b -CSEG PFA_PAUSE 00003d31 -DSEG ram_pause 00000192 -CSEG XT_RDEFERFETCH 00003db4 -CSEG XT_RDEFERSTORE 00003dbe -CSEG VE_COLD 00003d34 -CSEG clearloop 00003d40 -DSEG ram_user1 00000194 -CSEG PFA_WARM 00003d5a -CSEG VE_WARM 00003d55 -CSEG XT_WARM 00003d59 -CSEG XT_DEFERSTORE 00003ddf -CSEG XT_TURNKEY 00003f5c -CSEG VE_HANDLER 00003d63 -CSEG XT_HANDLER 00003d69 -CSEG PFA_HANDLER 00003d6a -CSEG VE_CATCH 00003d6b -CSEG PFA_CATCH 00003d71 -CSEG VE_THROW 00003d81 -CSEG PFA_THROW 00003d87 -CSEG PFA_THROW1 00003d8d -CSEG VE_EDEFERFETCH 00003d9a -CSEG PFA_EDEFERFETCH 00003da1 -CSEG VE_EDEFERSTORE 00003da4 -CSEG PFA_EDEFERSTORE 00003dab -CSEG VE_RDEFERFETCH 00003dae -CSEG PFA_RDEFERFETCH 00003db5 -CSEG VE_RDEFERSTORE 00003db8 -CSEG PFA_RDEFERSTORE 00003dbf -CSEG VE_UDEFERFETCH 00003dc2 -CSEG PFA_UDEFERFETCH 00003dc9 -CSEG VE_UDEFERSTORE 00003dce -CSEG PFA_UDEFERSTORE 00003dd5 -CSEG VE_DEFERSTORE 00003dda -CSEG PFA_DEFERSTORE 00003de0 -CSEG VE_DEFERFETCH 00003de7 -CSEG XT_DEFERFETCH 00003dec -CSEG PFA_DEFERFETCH 00003ded -CSEG VE_DODEFER 00003df3 -CSEG XT_DODEFER 00003df9 -CSEG PFA_DODEFER 00003dfa -CSEG VE_UDOT 00003e07 -CSEG PFA_UDOT 00003e0b -CSEG VE_UDOTR 00003e0e -CSEG XT_UDOTR 00003e12 -CSEG PFA_UDOTR 00003e13 -CSEG VE_USLASHMOD 00003e17 -CSEG XT_USLASHMOD 00003e1c -CSEG PFA_USLASHMOD 00003e1d -CSEG VE_NEGATE 00003e22 -CSEG PFA_NEGATE 00003e28 -CSEG VE_SLASH 00003e2b -CSEG XT_SLASH 00003e2e -CSEG PFA_SLASH 00003e2f -CSEG VE_MOD 00003e32 -CSEG XT_MOD 00003e36 -CSEG PFA_MOD 00003e37 -CSEG VE_MIN 00003e3a -CSEG XT_MIN 00003e3e -CSEG PFA_MIN 00003e3f -CSEG PFA_MIN1 00003e44 -CSEG VE_MAX 00003e46 -CSEG XT_MAX 00003e4a -CSEG PFA_MAX 00003e4b -CSEG PFA_MAX1 00003e50 -CSEG VE_WITHIN 00003e52 -CSEG PFA_WITHIN 00003e58 -CSEG VE_SHOWWORDLIST 00003e5f -CSEG XT_SHOWWORDLIST 00003e68 -CSEG PFA_SHOWWORDLIST 00003e69 -CSEG XT_SHOWWORD 00003e6e -CSEG PFA_SHOWWORD 00003e6f -CSEG VE_WORDS 00003e74 -CSEG XT_WORDS 00003e79 -CSEG PFA_WORDS 00003e7a -CSEG VE_DOTSTRING 00003e7f -CSEG XT_DOTSTRING 00003e82 -CSEG PFA_DOTSTRING 00003e83 -CSEG VE_SQUOTE 00003e87 -CSEG PFA_SQUOTE 00003e8b -CSEG PFA_SQUOTE1 00003e93 -CSEG VE_FILL 00003e94 -CSEG PFA_FILL 00003e99 -CSEG PFA_FILL2 00003ea5 -CSEG PFA_FILL1 00003ea0 -CSEG VE_F_CPU 00003ea7 -CSEG PFA_F_CPU 00003ead -CSEG VE_STATE 00003eb2 -CSEG PFA_STATE 00003eb8 -DSEG ram_state 000001c0 -CSEG VE_BASE 00003eb9 -CSEG PFA_BASE 00003ebe -CSEG VE_CELLS 00003ebf -CSEG VE_2DUP 00003ec5 -CSEG PFA_2DUP 00003eca -CSEG VE_2DROP 00003ecd -CSEG PFA_2DROP 00003ed3 -CSEG VE_TUCK 00003ed6 -CSEG PFA_TUCK 00003edb -CSEG VE_TO_IN 00003ede -CSEG PFA_TO_IN 00003ee3 -CSEG VE_PAD 00003ee4 -CSEG PFA_PAD 00003ee9 -CSEG VE_EMIT 00003eee -CSEG PFA_EMIT 00003ef3 -CSEG VE_EMITQ 00003ef6 -CSEG XT_EMITQ 00003efb -CSEG PFA_EMITQ 00003efc -CSEG VE_KEY 00003eff -CSEG PFA_KEY 00003f04 -CSEG VE_KEYQ 00003f07 -CSEG XT_KEYQ 00003f0b -CSEG PFA_KEYQ 00003f0c -CSEG VE_DP 00003f0f -ESEG CFG_DP 00000036 -CSEG VE_EHERE 00003f16 -ESEG EE_EHERE 0000003a -CSEG VE_HERE 00003f1f -CSEG PFA_HERE 00003f24 -ESEG EE_HERE 00000038 -CSEG VE_ALLOT 00003f27 -CSEG PFA_ALLOT 00003f2d -CSEG VE_BIN 00003f32 -CSEG XT_BIN 00003f36 -CSEG PFA_BIN 00003f37 -CSEG VE_DECIMAL 00003f3b -CSEG PFA_DECIMAL 00003f42 -CSEG VE_HEX 00003f47 -CSEG XT_HEX 00003f4b -CSEG PFA_HEX 00003f4c -CSEG VE_BL 00003f51 -CSEG PFA_BL 00003f55 -CSEG VE_TURNKEY 00003f56 -CSEG PFA_TURNKEY 00003f5d -ESEG CFG_TURNKEY 00000042 -CSEG VE_TOUPPER 00003f60 -CSEG PFA_TOUPPER 00003f67 -CSEG PFA_TOUPPER0 00003f72 -CSEG VE_TOLOWER 00003f73 -CSEG XT_TOLOWER 00003f79 -CSEG PFA_TOLOWER 00003f7a -CSEG PFA_TOLOWER0 00003f85 -CSEG VE_QSTACK 00003f86 -CSEG PFA_QSTACK 00003f8c -CSEG PFA_QSTACK1 00003f93 -CSEG VE_BOUNDS 00003f94 -CSEG PFA_BOUNDS 00003f9a -CSEG VE_CR 00003f9e -CSEG PFA_CR 00003fa2 -CSEG VE_SPACE 00003fa9 -CSEG PFA_SPACE 00003faf -CSEG VE_SPACES 00003fb2 -CSEG PFA_SPACES 00003fb8 -CSEG SPCS1 00003fba -CSEG SPCS2 00003fc1 -CSEG VE_S2D 00003fc3 -CSEG PFA_S2D 00003fc8 -CSEG VE_TO_BODY 00003fcb -CSEG VE_2LITERAL 00003fd1 -CSEG PFA_2LITERAL 00003fd8 -CSEG VE_EQUAL 00003fdc -CSEG PFA_EQUAL 00003fe0 -CSEG VE_ONE 00003fe3 -CSEG PFA_ONE 00003fe7 -CSEG VE_TWO 00003fe8 -CSEG PFA_TWO 00003fec -CSEG VE_MINUSONE 00003fed -CSEG XT_MINUSONE 00003ff0 -CSEG PFA_MINUSONE 00003ff1 -SET flashlast 00003ff2 -DSEG HERESTART 000001c2 -ESEG EHERESTART 0000008e -ESEG CFG_ORDERLIST 0000004c -ESEG CFG_RECOGNIZERLIST 0000005e -EQU UBRR_VAL 00000019 -EQU BAUD_REAL 0000963d -EQU BAUD_ERROR 00000001 diff --git a/amforth-6.5/appl/eval-pollin/p328-16.xml b/amforth-6.5/appl/eval-pollin/p328-16.xml deleted file mode 100644 index 1d8cdb5..0000000 --- a/amforth-6.5/appl/eval-pollin/p328-16.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - Uploading Hexfiles for p328-16 - - - - Writing fuses - - - - diff --git a/amforth-6.5/appl/eval-pollin/p644-16.eep.hex b/amforth-6.5/appl/eval-pollin/p644-16.eep.hex deleted file mode 100644 index f9365bf..0000000 --- a/amforth-6.5/appl/eval-pollin/p644-16.eep.hex +++ /dev/null @@ -1,7 +0,0 @@ -:10003800FFFF8B05C401920033046000B010DD049B -:0A00480032754C008D7D01004C0064 -:060060000200247B107B6E -:10006A007E736C0000000000FF10AF10AF1000009C -:10007A000A00A700B5007C009700257D0000127DCC -:08008A00EA79097AF9791900FD -:00000001FF diff --git a/amforth-6.5/appl/eval-pollin/p644-16.hex b/amforth-6.5/appl/eval-pollin/p644-16.hex deleted file mode 100644 index 3da58b1..0000000 --- a/amforth-6.5/appl/eval-pollin/p644-16.hex +++ /dev/null @@ -1,635 +0,0 @@ -:020000020000FC -:020004002AD1FF -:0200080028D1FD -:02000C0026D1FB -:0200100024D1F9 -:0200140022D1F7 -:0200180020D1F5 -:02001C001ED1F3 -:020020001CD1F1 -:020024001AD1EF -:0200280018D1ED -:02002C0016D1EB -:0200300014D1E9 -:0200340012D1E7 -:0200380010D1E5 -:02003C000ED1E3 -:020040000CD1E1 -:020044000AD1DF -:0200480008D1DD -:02004C0006D1DB -:0200500004D1D9 -:0200540002D1D7 -:0200580000D1D5 -:02005C00FED0D4 -:02006000FCD0D2 -:02006400FAD0D0 -:02006800F8D0CE -:10006C00F6D00010000800E01C00090041546D653A -:10007C0067613634340007FF3E72782D6275660076 -:10008C0000004800082F10911001E0E0F1E0E10FB2 -:10009C00F31D008313951F70109310018991999192 -:1000AC000C94057006FF6973722D72784100017013 -:1000BC003D70C6009870B1703D7003007F7D367046 -:1000CC006800597A4700207001703D705D003D70EA -:1000DC00280087743D7000013D7016005471CF7478 -:1000EC00207006FF72782D627566580001709700BB -:1000FC0036707D003D7011019870B1703D7000013B -:10010C009D719870C4702F723D700F0013723D700A -:10011C0011018D70207007FF72783F2D627566009B -:10012C0077000170517A3D70110198703D7010018B -:10013C0098701371207007FF74782D706F6C6C00C1 -:10014C0091000170B5003670A8003D70C6008D702E -:10015C00207008FF74783F2D706F6C6CA1000170DB -:10016C00517A3D70C00098703D7020001372207061 -:10017C0004FF75627272AF006F709000B47BBE7B2F -:10018C0006FF2B7573617274BE0001703D70980090 -:10019C003D70C1008D703D7006003D70C2008D70C9 -:1001AC00C200B170F9723D70C5008D703D70C40015 -:1001BC008D706A00207008FF31772E72657365743C -:1001CC00C600E8009A938A93249A2C98E0E8F7E00A -:1001DC003197F1F71FB7F8942C9A2498E0E0F1E0EE -:1001EC003197F1F783B184FF9FEF1FBF24982C98B0 -:1001FC00E0E8F6E03197F1F7892F0C94057007FFD2 -:10020C0031772E736C6F7400E1000C012C98249ADA -:10021C001FB7F894E8E1F0E03197F1F788948795EF -:10022C0010F42C9A2498E4E2F0E03197F1F703B142 -:10023C0004FD8068ECECF0E03197F1F72C9A2498EF -:0E024C00E8E0F0E03197F1F71FBF0C94057069 -:040000000C945A7A88 -:10025A000A920FB60A920F900F900A94B02CFF934D -:10026A00EF93E2E1F1E00694E00DF31D00800394C0 -:10027A000082EF91FF9109900FBE0990089502FF45 -:10028A006D2B05010170677D1574207003FF75647D -:10029A002A0044010170B170FF70E071D970C47016 -:1002AA00F670E071E1709D71207004FF756D6178E0 -:1002BA004B01017065755C7136706401C470D97048 -:1002CA00207004FF756D696E5A010170657567715A -:1002DA0036707001C470D970207001703D70008052 -:1002EA0013721A7136707B01867D20704B712070F3 -:1002FA000AFF6E616D653E666C6167736601017027 -:10030A00CB733D7000FF1372207006FF6E65776530 -:10031A0073747D0148702E0106FF6C6174657374F5 -:10032A008A014870320108FF286372656174652981 -:10033A0091010170B479F502B1708F015E75817017 -:10034A00DA028F018170207001005C00980101704F -:10035A009B79F0707E758170207001002800A901D8 -:10036A0001703D70290087796E75207007FF636FF1 -:10037A006D70696C6500B2010170F670B170AB7B8B -:10038A00FF70CB73CC01207001FF2C00BB01017000 -:10039A00AE757373AE752F72997BAF7520700300BB -:1003AA005B275D00C90101700A78E201207007002D -:1003BA006C69746572616C00D4010170C1013D7091 -:1003CA00CC0120700800736C69746572616CDC0181 -:1003DA000170C1016D777B7720700170AE75C10124 -:1003EA00FFFF20700170577BAE75C4707373207065 -:1003FA000170AE7520700170577BCC01207005002A -:10040A00616865616400E7010170C1012F70F20142 -:10041A0020700200696604020170C1013670F2019F -:10042A0020700400656C73650E020170C1012F70A3 -:10043A00F201C470F701207004007468656E160238 -:10044A000170F70120700500626567696E0021027C -:10045A000170FD01207005007768696C650028024B -:10046A0001701102C47020700600726570656174B3 -:10047A00300201705202250220700500756E7469FF -:10048A006C00390201703D703670CC010002207098 -:10049A000500616761696E0042020170C1012F7037 -:1004AA00000220700200646F4D020170C1019B724C -:1004BA00FD015471B502207004006C6F6F70570211 -:1004CA000170C101C9729C02207005002B6C6F6F0C -:1004DA00700061020170C101BA729C0220700500AD -:1004EA006C65617665006A020170C101D472090205 -:1004FA00B502207003003F646F0074020170C101ED -:10050A008B0211025A02C470B5022070017065751F -:10051A007F7DB170FF70367093026E75F670FD7153 -:10052A00207007FF656E646C6F6F70007F02017048 -:10053A000002A902B9703670A50225022F709E0228 -:10054A00207002FF6C3E96020170C80279707970C1 -:10055A003D70FEFFC8026572207002FF3E6CA60263 -:10056A0001708B7DC8026572C80279708170207033 -:10057A0003FF6C703000B2026F704400B47BBE7B24 -:10058A0002FF6C70BD024870340106FF6372656138 -:10059A007465C50201709E01FE02C101527020708D -:1005AA0006FF686561646572CA020170AE75FF7004 -:1005BA00FF70B17028713670EC02B1703D7000FFA7 -:1005CA001C727F77F6705F73CC01F67020703D70F5 -:1005DA00F0FF417807FF776C73636F706500D5028F -:1005EA00137C4000B47BBE7B06FF72657665616C46 -:1005FA00EF0201708F015E757970B9703670090368 -:10060A008F017970C4703B7320700500646F657345 -:10061A003E00F9020170C1012203C1010E94C10119 -:10062A00170320709A938A93CB0101967F916F9159 -:10063A00BF93AF93DB010C9405700170F6708F01C4 -:10064A005E7579705F737E7C7373207001FF3A0068 -:10065A000A0301709E013903D970207007FF3A6EB0 -:10066A006F6E616D65002B030170AE75B1709601F6 -:10067A008170C10101704E03207001003B003303F9 -:10068A000170C10120705603FE02207001FF5D0057 -:10069A0042030170867D4B758170207001005B00FA -:1006AA004B03017054714B758170207008FF76619D -:1006BA00726961626C6553030170BF756D038B7D4E -:1006CA00C875207008FF636F6E7374616E745B0384 -:1006DA0001709E01FE02C1014870CC01207004FF26 -:1006EA0075736572670301709E01FE02C10158703D -:1006FA00CC0120700700726563757273650074031C -:10070A00017096017970CC01207009FF696D6D65E1 -:10071A006469617465007F03017033045F73B170AB -:10072A00CB733D70FF7F1372C47073732070060021 -:10073A005B636861725D8A030170C1013D70EA788A -:10074A00CC012070060061626F7274229C030170F2 -:10075A00C174C101BE03207005FF61626F7274002B -:10076A00A70301704B71417806FF3F61626F727493 -:10077A00B1030170E1703670C403A077B6036E75D9 -:10078A00207009FF6765742D737461636B00B90388 -:10079A000170B1705E75C4705F73B170FF7054718F -:1007AA00C4708B023670E4039B72AC723572587552 -:1007BA00CF709D715F73C4704B71BA72DA036E7534 -:1007CA00F670207009FF7365742D737461636B0092 -:1007DA00C6030170CF7021713670F6033D70FCFFBD -:1007EA00417865753B73C47054718B02367003048B -:1007FA009B725E7576753B73C972FE03D970207061 -:10080A0009FF6D61702D737461636B00E7030170FA -:10081A00B1705E75C4705F7358755E7D8B023670F9 -:10082A0028049B72AC725F73C470FF7008712A70DF -:10083A00B97036702404F670D970D4722070F670CC -:10084A008B7DBA721704D970547120700BFF6765DB -:10085A00742D63757272656E7400050401703D70C3 -:10086A004A005F73207009FF6765742D6F726465B3 -:10087A0072002B0401703D704E00CD03207009FFF9 -:10088A006366672D6F7264657200380448704E00A3 -:10089A0007FF636F6D706172650044045404BF936F -:1008AA00AF938C0189919991DC01899199919C016D -:1008BA0089919991FC01ED90F190EF1451F40A9508 -:1008CA0019F02A95C1F701C02A95022B11F488273D -:1008DA0002C08FEF00C0982FAF91BF910C940570A2 -:1008EA0007FF6E66613E6C6661004D040170727CA2 -:1008FA002F7204729D71207002FF2E7375040170AD -:10090A00A17A4874E277A17A54718B023670930403 -:10091A009B72AC72AF744874C9728E04207006FF61 -:10092A0063214073706981049A0403D099270C9457 -:10093A0005708EBD0DB5087F0DBD0DB507FFFACF49 -:10094A008EB5089505FF6E40737069009404AD0476 -:10095A008C0189919991FC01C8012EBC2DB527FF04 -:10096A00FDCF2EB521930197C1F7899199910C94E6 -:10097A00057005FF6E2173706900A704C4048C0119 -:10098A0089919991FC01C80121912EBD2DB527FFAE -:10099A00FDCF2EB50197C1F7899199910C940570F5 -:1009AA000BFF6170706C7475726E6B657900BE04B2 -:1009BA000170CB007974647BE27740753D70E8037F -:1009CA00C271F070DD7522776D7704006B487A206A -:1009DA00A07720700BFF7365742D63757272656E54 -:1009EA007400D50401703D704A003B73207008FF03 -:1009FA00776F72646C697374EF040170B775547120 -:100A0A00CF703B73B1705E75997BB87520700EFF1D -:100A1A00666F7274682D776F72646C697374FC0404 -:100A2A0048704C0009FF7365742D6F72646572001B -:100A3A000C0501703D704E00EE0320700FFF7365C8 -:100A4A00742D7265636F676E697A65727300170534 -:100A5A0001703D706000EE0320700FFF6765742D12 -:100A6A007265636F676E697A657273002305017038 -:100A7A003D706000CD03207004FF636F646532052A -:100A8A0001709E01FE02AE75AB7BCC01207008FF9F -:100A9A00656E642D636F646541050170C1010C9434 -:100AAA00C1010570207008FF286D61726B6572299B -:100ABA004C056F706C00B47BBE7B0800706F73745A -:100ACA00706F6E6558050170B479CC7AD77AB170B7 -:100ADA00FF70AB7BAB7BCB732A70F670AB7BCB73AF -:100AEA00CC01207003FF3272400062057C059A93A4 -:100AFA008A93EF91FF918F919F919F938F93FF9389 -:0C0B0A00EF939A938A93CF010C9405702E -:10E00200BF93AF93DB011196B21469F4FD01EE0FD9 -:10E01200FF1F659175911196FB01EE0FFF1F059190 -:10E022001591F80109949A938A938B2D9927BB2411 -:10E0320062EA74E7F1CF04FF6578697477052170AD -:10E04200AF91BF91E1CF07FF657865637574650095 -:10E052001C702B70BC0189919991DECF3070FD014B -:10E06200EE0FFF1FA591B591CFCF3770982B8991F5 -:10E072009991A9F31196C8CF3E709A938A93FD01A4 -:10E08200EE0FFF1F859195911196BECF48709A931E -:10E092008A93FB013196EE0FFF1F85919591B4CFC4 -:10E0A20052709A938A93CB010196AECF58709A938D -:10E0B2008A93FB013196EE0FFF1F85919591840D96 -:10E0C200951DA2CF07FF2876616C75652900247023 -:10E0D20001709E01FE02C1016F7020700E94170341 -:10E0E200B170AB7BCB732A70207001FF400063706C -:10E0F2007A70FC018191919187CF01FF21007670A6 -:10E102008270FC018991999191838083899199917F -:10E112007BCF02FF63217E708E70FC018991999101 -:10E1220080838991999170CF02FF63408A709970C0 -:10E13200FC019927808168CF02FF407595700170BC -:10E1420002739D717970207002FF21759D700170BC -:10E1520002739D718170207003FF64757000A57059 -:10E16200B2709A938A9350CF04FF3F647570AD707A -:10E17200BA70082F092B11F09A938A9345CF04FFA6 -:10E1820073776170B570C5708C01899199911A93FA -:10E192000A933ACF04FF6F766572C070D0709A937B -:10E1A2008A938A819B8130CF04FF64726F70CB7037 -:10E1B200DA708991999128CF03FF726F7400D5703C -:10E1C200E2708C0129913991899199913A932A931C -:10E1D2001A930A9319CF03FF6E697000DD70F17014 -:10E1E200229612CF02FF723EEC70F7709A938A93D6 -:10E1F2008F919F9109CF02FF3E72F37000719F933E -:10E202008F938991999100CF02FF7240FC7009713E -:10E212009A938A938F919F919F938F93F5CE02FF4A -:10E222003C3E057101707F7D1A71207002FF303D06 -:10E2320010711B71982BD1F530C002FF303C177161 -:10E24200227197FD2AC032C002FF303E1E71297131 -:10E25200821593055CF151F120C003FF64303E004A -:10E2620025713371821593058991999182059305E0 -:10E27200ECF0E1F012C003FF64303C002E714171FA -:10E28200229697FD0C944E710C94577104FF747290 -:10E2920075653C714C719A938A938FEF9FEFB4CE60 -:10E2A20001FF3000477155719A938A93C101ACCE38 -:10E2B20002FF753C51715D71299139918217930763 -:10E2C200A8F3A1F3EACF02FF753E59710170C47041 -:10E2D2005C71207001FF3C0064716F71299139916A -:10E2E200281739071CF7D9CF01FF3E006B717971EE -:10E2F2002991399128173907CCF2C1F2CECF04FF08 -:10E302006C6F673275718571FC01992780E18A957E -:10E3120022F0EE0FFF1FD8F777CE9A9575CE01FF48 -:10E322002D008071947109911991081B190BC80174 -:10E332006BCE01FF2B0090719E7109911991800F94 -:10E34200911F62CE02FF6D2A9A71A7718C01899189 -:10E3520099919C0131027001209FC0013003F308A2 -:10E36200900DE11CF31C1203F308900DE11CF31C49 -:10E372009A938A93C70148CE06FF756D2F6D6F641D -:10E38200A371C3717C01299139910991199140E1DD -:10E392005527000F111F221F331F551F2E153F0532 -:10E3A200520518F003952E193F094A9589F73A93B9 -:10E3B2002A93C80129CE03FF756D2A00BD71E17150 -:10E3C2008C0189919991809FF00122273327909F98 -:10E3D200F00D211D331D819FF00D211D331D919FD5 -:10E3E200200D311DCF019A938A93C9010DCE06FFEC -:10E3F200696E76657274DC71FE718095909504CEBB -:10E4020002FF322FF871057295958795FDCD02FFB7 -:10E41200322A01720C72880F991FF6CD03FF616ECA -:10E422006400087214720991199180239123ECCD32 -:10E4320002FF6F720F721D7209911991802B912B3D -:10E44200E3CD03FF786F7200197227720991199157 -:10E4520080279127D9CD02FF312B2272307201968B -:10E46200D3CD02FF312D2C7236720197CDCD07FF2D -:10E472003F6E65676174650032720170217136709A -:10E4820043723F76207006FF6C7368696674387257 -:10E492004A72FC018991999131971AF0880F991F5C -:10E4A200FBCFB2CD06FF727368696674447259720B -:10E4B200FC018991999131971AF096958795FBCF36 -:10E4C200A3CD02FF2B2153726672FC0189919991AF -:10E4D20020813181820F931F808391838991999149 -:10E4E20093CD03FF72704000627277729A938A939F -:10E4F2008DB79EB789CD03FF72702100727281724F -:10E502002FB7F8948DBF9EBF2FBF899199917CCD73 -:10E5120003FF737040007C728E729A938A93CE01CD -:10E5220073CD03FF7370210089729772EC01899198 -:10E5320099916ACD9C7229913991E0E83E0F821B34 -:10E54200930B3F932F939F938F93899199915CCDD6 -:10E5520001FF69009272AD729A938A938F919F9193 -:10E56200EF91FF91FF93EF939F938F938E0F9F1FD6 -:10E572004BCDBB72EF91FF91E80FF91F89919991F1 -:10E582001BF0FF93EF936BCD0F911F9111963CCD32 -:10E59200CA72EF91FF913196BBF3F3CF06FF756E0E -:10E5A2006C6F6F70A972D5721F910F911F910F91AD -:10E5B2002BCD06FF636D6F76653ECF72E072BF931F -:10E5C200AF93E991F991A991B991092F082B41F0E3 -:10E5D200E80FF91FA80FB91F1E9112930197E1F7D7 -:10E5E200AF91BF91899199910FCD02FF3E3CDA72B2 -:10E5F200FA72092F982F802F07CD03FF7570400004 -:10E60200F67203739A938A93C201FECC03FF75706C -:10E612002100FE720C732C0189919991F5CC03FFB4 -:10E62200316D730007731573E0EAFFE03197F1F77C -:10E63200EBCC03FF323E720010731F73FC01899111 -:10E6420099919F938F93FF93EF9389919991DCCC4A -:10E6520003FF32723E001A732E739A938A93EF91DC -:10E66200FF918F919F919A938A93CF01CDCC02FF14 -:10E67200216529733C73FC01899199912FB7F89414 -:10E6820028D000B5081709F00BD0319622D000B57A -:10E69200091711F0892F04D02FBF89919991B4CC19 -:10E6A200F999FECF07B700FDFDCFF2BDE1BD80BDF8 -:10E6B200FA9AF99A089502FF4065387360732FB78A -:10E6C200F894FC0106D080B5319603D090B52FBFE7 -:10E6D2009BCCF999FECFF2BDE1BDF89A089502FFF5 -:10E6E20021695C73137C6A00B47BBE7B09FF28211D -:10E6F200692D6E727777290070737F731FB71F932E -:10E70200F8949C0189919991AF93BF93CF93DF9332 -:10E7120009D0DF91CF91BF91AF91899199911F91CA -:10E722001FBF72CC10D0E094F0948E219F21982BC1 -:10E7320019F0F90102E020D0F90104E01DD0F9013D -:10E7420000E11AD00895F901E078FF7FEF01A0E817 -:10E75200B0E0FE01EE0FFF1F45915591FE01E21759 -:10E76200F30711F00A0102C07A010C01002704D05C -:10E772002196119771F70895F999FECF17B710FDF9 -:10E78200FDCFEE0FFF1F016007BFE895089502FF5E -:10E7920040697773CC73FC01EE0FFF1F8591959151 -:10E7A20033CC03FF6E3E7200C873D773FC01082F8F -:10E7B200899199919F938F930A95D1F7EF93FF9344 -:10E7C2008991999121CC03FF6E723E00D273E97355 -:10E7D2009A938A93FF91EF910E2F8F919F919A9323 -:10E7E2008A930A95D1F7CF010FCC03FF64322A0036 -:10E7F200E473FB7309911991000F111F881F991F70 -:10E802001A930A9301CC03FF64322F00F673097442 -:10E812000991199195958795179507951A930A93DA -:10E82200F3CB02FF642B0474167429913991E99099 -:10E83200F99049915991240F351F8E1D9F1D3A93CE -:10E842002A93E2CB02FF642D127427742991399125 -:10E85200E990F99049915991421B530BE80AF90A40 -:10E862005A934A93C701D0CB07FF64696E766572EB -:10E87200740023743C7409911991809590950095C8 -:10E8820010951A930A93C0CB02FF752E357401704E -:10E8920054712A77207003FF752E7200457401703F -:10E8A2005471C470337720700DFF73686F772D77C2 -:10E8B2006F72646C697374004C7401703D7064749F -:10E8C200C470577C20700170727CA077E2774B7124 -:10E8D200207005FF776F72647300557401703D708C -:10E8E20050005F735E74207004FF2B696E746A744B -:10E8F2007A74789489CB04FF2D696E74757481746F -:10E90200F89482CB04FF696E74217C7401703D70AF -:10E9120000009D713B73207004FF696E7440837424 -:10E9220001703D7000009D715F73207008FF696E79 -:10E93200742D747261708D749E74B82E8991999140 -:10E9420063CB017091742A70A7742070A87401D0EF -:10E952005BCB189504FF7069636B977401702F721B -:10E9620058758D729D717970207002002E22AB74E1 -:10E972000170C174C101A077207002007322B674C5 -:10E9820001703D70220087794B7579703670CA74B8 -:10E99200ED01207004FF66696C6CBE740170E17059 -:10E9A200E170B9703670DC745E7D9B72B170AC72CE -:10E9B2008D70C972D774D97020700BFF656E76693D -:10E9C200726F6E6D656E7400CB744870480009FFFB -:10E9D200776F72646C6973747300000001703D702C -:10E9E2000800207004FF2F706164E87401708D725A -:10E9F20084759371207005FF2F686F6C6400F37447 -:10EA020001708475BF75937120700AFF666F72740E -:10EA1200682D6E616D65FC7401706D770700616D24 -:10EA2200666F72746800207007FF76657273696F93 -:10EA32006E00067501703D704100207003FF637027 -:10EA42007500157501703D703B00CC77207008FF92 -:10EA52006D63752D696E666F1F7501703D703700AD -:10EA6200207005FF2F7573657200287501703D7067 -:10EA72002C00207005FF665F63707500DE74017004 -:10EA82003D7000243D70F400207005FF73746174C2 -:10EA920065003B754870360104FF62617365467517 -:10EAA20058700C0005FF63656C6C73004D750C7239 -:10EAB20005FF63656C6C2B0053755F750296A4CAE3 -:10EAC20004FF3264757059750170CF70CF70207079 -:10EAD20005FF3264726F700061750170D970D97070 -:10EAE200207004FF7475636B69750170C470CF7018 -:10EAF200207003FF3E696E0072755870180003FFA4 -:10EB0200706164007A750170BF753D7028009D7157 -:10EB1200207004FF656D69748075137C0E00DC7BC8 -:10EB2200E87B05FF656D69743F008A75137C1000F0 -:10EB3200DC7BE87B03FF6B6579009275137C120026 -:10EB4200DC7BE87B04FF6B65793F9B75137C1400CB -:10EB5200DC7BE87B02FF6470A3756F703A00B47BC4 -:10EB6200BE7B05FF656865726500AB756F703E0020 -:10EB7200B47BBE7B04FF68657265B2756F703C0042 -:10EB8200B47BBE7B05FF616C6C6F7400BB7501705A -:10EB9200BF759D71997BC075207003FF62696E001D -:10EBA200C37501708B7D51758170207007FF64659C -:10EBB20063696D616C00CE7501703D700A0051751C -:10EBC2008170207003FF68657800D77501703D7011 -:10EBD200100051758170207002FF626CE3754870FD -:10EBE200200007FF7475726E6B657900ED75137CFA -:10EBF2004600B47BBE7B04FF2F6D6F64F275017615 -:10EC02009C0109911991412F432717FF04C01095C8 -:10EC120000950F5F1F4F37FF04C0309520952F5F7F -:10EC22003F4FEE24FF1851E1001F111F5A9539F48E -:10EC320047FF04C0109500950F5F1F4F0BC0EE1CDD -:10EC4200FF1CE21AF30A20F4E20EF31E8894ECCFC2 -:10EC52000894EACFFA92EA92C801D6C905FF752F45 -:10EC62006D6F6400FC750170FF705471F670C271B3 -:10EC7200207006FF6E65676174652F760170FD7105 -:10EC82002F72207001FF2F003A7601700076F0702B -:10EC9200207003FF6D6F6400437601700076D970B7 -:10ECA200207003FF616273004A760170B1703E7298 -:10ECB200207003FF6D696E00527601706575787180 -:10ECC20036706476C470D970207003FF6D6178006D -:10ECD2005A76017065756E7136707076C470D9702F -:10ECE200207006FF77697468696E66760170CF706E -:10ECF2009371FF709371F6705C71207007FF746FEF -:10ED020075707065720072760170B1703D7061004D -:10ED12003D707B007776367091763D70DF0013721E -:10ED2200207007FF746F6C6F776572007F760170D9 -:10ED3200B1703D7041003D705B0077763670A4760D -:10ED42003D7020001C72207003FF686C6400927694 -:10ED52004870380104FF686F6C64A5760170A9766B -:10ED6200B17079703572B170FF70C4708170F670D5 -:10ED72008D70207002FF3C23AB7601708475A976FA -:10ED82008170207001FF2300BB760170517579708C -:10ED92004377E1703D700900CF706E713670D476A2 -:10EDA2003D7007009D713D7030009D71AF762070FF -:10EDB20002FF2373C3760170C67665751C721A71E1 -:10EDC2003670DD76207002FF233ED97601706E75B3 -:10EDD200A97679708475CF709371207004FF73697E -:10EDE200676EE476017021713670FA763D702D00FF -:10EDF200AF76207003FF642E7200EF760170FF7011 -:10EE02007675D47CBE76DC76E170F376E776F670C2 -:10EE1200CF709371EB77FB77207002FF2E72FB7637 -:10EE22000170FF70677DF670FF76207002FF642E1E -:10EE32000E7701705471FF76E277207001FF2E0089 -:10EE420017770170677D1A77207003FF75642E00B3 -:10EE52001F77017054713377E277207004FF756475 -:10EE62002E7226770170FF70BE76DC76E776F6703A -:10EE7200CF709371EB77FB77207006FF75642F6D6F -:10EE82006F642F770170FF7054710871C271F67050 -:10EE9200C470FF70C271F670207006FF6469676902 -:10EEA200743F3E7701708576B1703D70390078719C -:10EEB2003D70000113729D71B1703D704001787117 -:10EEC2003D700701137293713D7030009371B17000 -:10EED200517579705C71207001700871CC77F67091 -:10EEE200CF702F7204729D712F72FF70207002FF1B -:10EEF200732C4E770170B1707F7720700170CC0156 -:10EF0200B170047276750B729371FF7054718B023B -:10EF1200367092779B72B1707970CC015E75C9724E -:10EF22008C77F670287136709977B1709870CC0131 -:10EF3200D970207005FF6974797065007877017067 -:10EF4200B170047276750B729371FF7054718B02FB -:10EF52003670B4779B72B170CB73B170C177BD77E5 -:10EF62002F72C972AC77F67028713670BB77B170A8 -:10EF7200CB73C177D97020700170F972C17720709C -:10EF820001703D70FF0013728E75207006FF696379 -:10EF92006F756E749B770170B1702F72C470CB73F2 -:10EFA200207002FF6372C77701703D700D008E758D -:10EFB2003D700A008E75207005FF737061636500F5 -:10EFC200D2770170F0758E75207006FF73706163E1 -:10EFD2006573DD77017054716A76B1703670F577BA -:10EFE200E27735722F70EE77D970207004FF747952 -:10EFF2007065E67701705E7D8B02367006789B72D3 -:10F00200AC7298708E75C9720178207001FF27006A -:10F01200F7770170B479CC7AD77AB1704A7B7F7D69 -:10F02200C470CB733D707F7B7F7D1C7236701C7801 -:10F032003D70F3FF4178D970207007FF68616E64FC -:10F042006C657200077858700A0005FF636174638B -:10F0520068001E7801708D72FF7024787970FF70DD -:10F062007672247881702A70F67024788170F67036 -:10F07200D9705471207005FF7468726F770026781A -:10F082000170B1701A7136704878D9702070247886 -:10F0920079708072F67024788170F670C470FF7097 -:10F0A2009672D970F670207005FF63736B697000F9 -:10F0B2003C780170FF70B17036706978CF709870CB -:10F0C20008717F7D36706978867DA5792F705C78AE -:10F0D200F670D970207005FF637363616E00557816 -:10F0E2000170FF70CF70B170987008717F7D1A71D6 -:10F0F20036708678C4703572C470CF7021711A71FF -:10F10200367086782F722F707478F070CF7093718A -:10F11200F670D970207006FF6163636570746C7855 -:10F122000170CF709D713572CF709F75B170D278BA -:10F132001A713670C478B1703D7008007F7D3670E8 -:10F14200B478D970E17065757871FF70E170E17023 -:10F15200F6703670B278CA783572FF70CF70F6707A -:10F162005E012F70C278B170F0756E713670BB7827 -:10F17200D970F075B1708E75CF708D702F72CF709F -:10F182006A012F709678D970F070C4709371D57738 -:10F19200207001703D700800B1708E75E2778E7537 -:10F1A20020700170B1703D700D007F7DC4703D70A4 -:10F1B2000A007F7D1C72207006FF726566696C6CA6 -:10F1C2008C78137C1A00DC7BE87B04FF6368617235 -:10F1D200DD780170B479D9709870207006FF6E7571 -:10F1E2006D626572E678017051757970FF703879D9 -:10F1F200FF704B793879F6701C72FF70B1701A711A -:10F2020036700B796E75F670D970F6705175817023 -:10F21200547120701E73547154712D736979B970D1 -:10F2220036702D79867D7F7D3670247998703D7099 -:10F232002E007F7D36702579F67036702179E17C5B -:10F242008B7D2F703379D9706E75F670D970F67028 -:10F2520051758170547120706E75F6703670327906 -:10F262003F76867DF670517581704B71207001700A -:10F27200CF7098703D702D007F7DB170FF70367039 -:10F282004479867DA579F670207052700A001000CC -:10F2920002000A000170CF7098703D7023009371D4 -:10F2A200B17054713D700400777636706179467999 -:10F2B2009D71CB7351758170867DA5792F706279AE -:10F2C200D970207007FF3E6E756D62657200EF782F -:10F2D2000170B17036708179CF70987053771A715E -:10F2E20036707579D9702070FF70057D517579700F -:10F2F2004F01F6704701057D867DA5792F706A79E9 -:10F30200207005FF70617273650063790170FF7090 -:10F312009B797E757970A579F6707178B1702F72CC -:10F322007E756572867DA579207006FF736F757292 -:10F3320063658279137C1600DC7BE87B07FF2F7301 -:10F342007472696E670096790170E170CF709D7179 -:10F35200E170E170937120700AFF70617273652D24 -:10F362006E616D659F790170F075B87920700170DA -:10F37200FF709B797E757970A57908715A78F6705D -:10F38200717865759D719B79D97093717E75817065 -:10F39200207007FF66696E642D787400AD79017084 -:10F3A2003D70DC793D704E000C041A713670DB79C9 -:10F3B2006E75547120700170FF706575F670257C52 -:10F3C200B1703670E979FF70F070F070F6704B71C1 -:10F3D200207001706D770300206F6B00A0772070A2 -:10F3E20003FF2E6F6B00CA79137C1C00DC7BE87B69 -:10F3F20001706D7702003E20D577A077207006FF5E -:10F402002E7265616479F179137C2000DC7BE87BE4 -:10F4120001706D770400203F3F20A077517579700D -:10F42200FF70DD7522777E7579702277F6705175DF -:10F432008170207006FF2E6572726F72007A137CE3 -:10F442001E00DC7BE87B04FF717569741B7A017016 -:10F45200C102C8028170897A9672967A80725603C6 -:10F462004B7579701A713670377A057AE278367090 -:10F47200497A3D70AF7A2B78B9703670497AB1709B -:10F482003D70FEFF6E713670477A207A2F70297AAE -:10F49200F5792F70317A05FF706175736500247AF2 -:10F4A200137C3A01C87BD27B04FF636F6C644C7A95 -:10F4B2005A7AA4B622243324BB2424BEE0E0F1E02D -:10F4C2002192E030E9F7F131D9F7ECE3F1E02F01D5 -:10F4D2000FEF0DBF048310E11EBF1583CFEAC68371 -:10F4E200D0E1D783ACE7BAE70C94057004FF7761EB -:10F4F200726D557A0170507D3D707F7B3D70517AFF -:10F50200F37B5603F875287A03FF73703000777A1D -:10F512006F700600DC7BE87B02FF7370857A58709F -:10F52200080003FF727030008D7A01709A7A797048 -:10F5320020705870040005FF646570746800927A48 -:10F542000170897A8D72937104723572207009FF8D -:10F55200696E74657270726574009C7A0170B47918 -:10F56200B1703670C07ACC7AD77A4B7579703670B2 -:10F57200BB7AAB7BCB732A70577B2F70B07A6E75D8 -:10F58200207010FF666F7274682D7265636F676E0C -:10F59200697A6572A87A6F704200B47BBE7B09FFFC -:10F5A2007265636F676E697A6500C27A01703D7039 -:10F5B200E27AC4700C041A713670E17A6E754A7B75 -:10F5C20020700170E170E17065751E73E1702A7040 -:10F5D2002D73E170B1704A7B7F7D3670F37AD970FA -:10F5E20054712070F070F0704B71207006FF6474DB -:10F5F2003A6E756DD07A52707F7BE201E20107FFAD -:10F6020064743A646E756D00F77A52707F7B777D11 -:10F61200777D07FF7265633A6E756D00007B01703E -:10F62200F47836701C7B867D7F7D36701A7BFC7A7F -:10F632002070067B20704A7B207008FF7265633A57 -:10F6420066696E640A7B0170D079B1701A71367086 -:10F652002D7BD9704A7B2070347B207005FF647447 -:10F662003A7874001E7B5270387B3C7B777D017048 -:10F67200D9702A702070017021713670427BCC01E2 -:10F6820020702A70207007FF64743A6E756C6C00EB -:10F692002F7B52704E7B4E7B4E7B01703D70F3FF91 -:10F6A200417806FF3F737461636B447B0170A17AFA -:10F6B200217136705F7B3D70FCFF4178207003FF43 -:10F6C20076657200527B01700D75A077E2775175F5 -:10F6D20079701B75DD75677DBE76C6763D702E002E -:10F6E200AF76DC76E776FB7751758170E27723752A -:10F6F200A077207004FF6E6F6F70607B01702070C6 -:10F7020006FF756E757365647B7B01708D72BF75C4 -:10F71200937120700200746F817B01700A78707D92 -:10F722004B75797036709F7BC101997BCC0120703B -:10F732000170F670B170AB7BFF70CB73B170AB7BB5 -:10F74200AB7BCB732A70207007FF692D63656C6CED -:10F752002B008B7B01702F72207007FF456465665A -:10F7620065724000A57B0170CB735F73207007FF49 -:10F772004564656665722100AE7B0170CB733B7395 -:10F78200207007FF5264656665724000B87B0170A5 -:10F79200CB737970207007FF526465666572210031 -:10F7A200C27B0170CB738170207007FF5564656660 -:10F7B20065724000CC7B0170CB7302739D717970CE -:10F7C200207007FF5564656665722100D67B017063 -:10F7D200CB7302739D718170207006FF646566654C -:10F7E2007221E27B0170707DB170AB7BAB7BCB731E -:10F7F2002A70207006FF646566657240EE7B0170B8 -:10F80200707DB170AB7BCB732A70207007FF2864C8 -:10F81200656665722900FB7B01709E01FE02C101D3 -:10F82200137C20700E941703B170AB7BCB732A70DC -:10F832002A7020700FFF7365617263682D776F7293 -:10F84200646C69737400077C0170FF7054713D70C1 -:10F852003A7CF670577CB1701A713670347C6E75D2 -:10F86200D97054712070B1707E7CC47084017201B1 -:10F8720020700170FF70D97065750871727C887C88 -:10F882003670487CF670D97054714B7120706E7569 -:10F89200F6705471207011FF74726176657273652F -:10F8A2002D776F72646C697374001B7C01705F73D7 -:10F8B200B1703670687C65751E73C4702A702D73C2 -:10F8C200E1703670687C7B04CB732F70597C6E7547 -:10F8D20020700BFF6E616D653E737472696E670016 -:10F8E2004C7C0170CC773D70FF001372207007FFD3 -:10F8F2006E66613E636661006A7C01707B042F72F2 -:10F90200207008FF69636F6D70617265787C0170A9 -:10F91200FF70CF70F67013713670937C6E75D9706C -:10F922004B712070C47054718B023670B67C9B721E -:10F93200CF707970CF70CB73B1703D7000015C7184 -:10F942003670A77CC4703D70FF001372137136705D -:10F95200AE7C6E754B71D47220702F72C4705E755E -:10F96200C4703D700200BA72997C6E755471207039 -:10F9720001FF2A00827C0170A671D970207001FFFC -:10F982006A00B97C017076723D7007009D717970D2 -:10F9920076723D7009009D7179709D71207004FF2F -:10F9A20064616273C07C0170B17021713670DA7C5F -:10F9B200E17C207007FF646E656761746500D07C2E -:10F9C20001703B74867D54711574207005FF636D60 -:10F9D2006F766500DB7CED7CBF93AF93E991F99183 -:10F9E200A991B991092F082B21F01D91119301972B -:10F9F200E1F7AF91BF91899199910C94057005FF40 -:10FA0200327377617000E77C0170E170FF70E17022 -:10FA1200F67020700AFF726566696C6C2D746962FB -:10FA2200007D01702E7D3D705A009178347D817089 -:10FA320054717E7581704B7120700AFF736F7572FD -:10FA420063652D7469620B7D01702E7D347D797042 -:10FA5200207003FF746962001E7D4870680104FF14 -:10FA6200237469622A7D4870C20106FF65653E7291 -:10FA7200616D307D017054719B72CF705F73CF7076 -:10FA820081705E75C4705E75C470C9723E7D6E759C -:10FA9200207008FF696E69742D72616D367D017088 -:10FAA2003D706E0002733D70220004723B7D207037 -:10FAB20006FF626F756E64734A7D0170CF709D712F -:10FAC200C470207003FF733E6400597D0170B170F1 -:10FAD2002171207005FF3E626F647900637D307290 -:10FAE2000800326C69746572616C6B7D0170C47060 -:10FAF200E201E201207001FF3D00717D017093710E -:10FB02001A71207001FF31007C7D4870010001FFF5 -:10FB12003200837D4870020002FF2D31887D4870DB -:02FB2200FFFFE3 -:00000001FF diff --git a/amforth-6.5/appl/eval-pollin/p644-16.lst b/amforth-6.5/appl/eval-pollin/p644-16.lst deleted file mode 100644 index 2c8872a..0000000 --- a/amforth-6.5/appl/eval-pollin/p644-16.lst +++ /dev/null @@ -1,10444 +0,0 @@ - -AVRASM ver. 2.1.52 p644-16.asm Sun Apr 30 20:10:15 2017 - -p644-16.asm(5): Including file '../../avr8\preamble.inc' -../../avr8\preamble.inc(2): Including file '../../avr8\macros.asm' -../../avr8\macros.asm(6): Including file '../../avr8\user.inc' -../../avr8\preamble.inc(6): Including file '../../avr8/devices/atmega644\device.asm' -../../avr8/devices/atmega644\device.asm(5): Including file '../../avr8/Atmel/Appnotes2\m644def.inc' -p644-16.asm(14): Including file '../../avr8\drivers/usart_0.asm' -../../avr8\drivers/usart_0.asm(32): Including file '../../avr8\drivers/usart_common.asm' -../../avr8\drivers/usart_common.asm(11): Including file '../../avr8\drivers/usart-rx-buffer.asm' -../../avr8\drivers/usart_common.asm(24): Including file '../../avr8\words/usart-tx-poll.asm' -../../avr8\drivers/usart_common.asm(29): Including file '../../avr8\words/ubrr.asm' -../../avr8\drivers/usart_common.asm(30): Including file '../../avr8\words/usart.asm' -p644-16.asm(19): Including file '../../avr8\drivers/1wire.asm' -p644-16.asm(21): Including file '../../avr8\amforth.asm' -../../avr8\amforth.asm(12): Including file '../../avr8\drivers/generic-isr.asm' -../../avr8\amforth.asm(14): Including file '../../avr8\dict/rww.inc' -../../avr8\dict/rww.inc(1): Including file '../../avr8\words/mplus.asm' -../../avr8\dict/rww.inc(2): Including file '../../common\words/ud-star.asm' -../../avr8\dict/rww.inc(3): Including file '../../common\words/umax.asm' -../../avr8\dict/rww.inc(4): Including file '../../common\words/umin.asm' -../../avr8\dict/rww.inc(5): Including file '../../avr8\words/immediate-q.asm' -../../avr8\dict/rww.inc(6): Including file '../../avr8\words/name2flags.asm' -../../avr8\dict/rww.inc(9): Including file '../../avr8\dict/appl_8k.inc' -../../avr8\dict/appl_8k.inc(1): Including file '../../avr8\dict/compiler1.inc' -../../avr8\dict/compiler1.inc(2): Including file '../../avr8\words/newest.asm' -../../avr8\dict/compiler1.inc(3): Including file '../../avr8\words/latest.asm' -../../avr8\dict/compiler1.inc(4): Including file '../../common\words/do-create.asm' -../../avr8\dict/compiler1.inc(5): Including file '../../common\words/backslash.asm' -../../avr8\dict/compiler1.inc(6): Including file '../../common\words/l-paren.asm' -../../avr8\dict/compiler1.inc(8): Including file '../../common\words/compile.asm' -../../avr8\dict/compiler1.inc(9): Including file '../../avr8\words/comma.asm' -../../avr8\dict/compiler1.inc(10): Including file '../../common\words/brackettick.asm' -../../avr8\dict/compiler1.inc(13): Including file '../../common\words/literal.asm' -../../avr8\dict/compiler1.inc(14): Including file '../../common\words/sliteral.asm' -../../avr8\dict/compiler1.inc(15): Including file '../../avr8\words/g-mark.asm' -../../avr8\dict/compiler1.inc(16): Including file '../../avr8\words/g-resolve.asm' -../../avr8\dict/compiler1.inc(17): Including file '../../avr8\words/l_mark.asm' -../../avr8\dict/compiler1.inc(18): Including file '../../avr8\words/l_resolve.asm' -../../avr8\dict/compiler1.inc(20): Including file '../../common\words/ahead.asm' -../../avr8\dict/compiler1.inc(21): Including file '../../common\words/if.asm' -../../avr8\dict/compiler1.inc(22): Including file '../../common\words/else.asm' -../../avr8\dict/compiler1.inc(23): Including file '../../common\words/then.asm' -../../avr8\dict/compiler1.inc(24): Including file '../../common\words/begin.asm' -../../avr8\dict/compiler1.inc(25): Including file '../../common\words/while.asm' -../../avr8\dict/compiler1.inc(26): Including file '../../common\words/repeat.asm' -../../avr8\dict/compiler1.inc(27): Including file '../../common\words/until.asm' -../../avr8\dict/compiler1.inc(28): Including file '../../common\words/again.asm' -../../avr8\dict/compiler1.inc(29): Including file '../../common\words/do.asm' -../../avr8\dict/compiler1.inc(30): Including file '../../common\words/loop.asm' -../../avr8\dict/compiler1.inc(31): Including file '../../common\words/plusloop.asm' -../../avr8\dict/compiler1.inc(32): Including file '../../common\words/leave.asm' -../../avr8\dict/compiler1.inc(33): Including file '../../common\words/qdo.asm' -../../avr8\dict/compiler1.inc(34): Including file '../../common\words/endloop.asm' -../../avr8\dict/compiler1.inc(36): Including file '../../common\words/l-from.asm' -../../avr8\dict/compiler1.inc(37): Including file '../../common\words/to-l.asm' -../../avr8\dict/compiler1.inc(38): Including file '../../avr8\words/lp0.asm' -../../avr8\dict/compiler1.inc(39): Including file '../../avr8\words/lp.asm' -../../avr8\dict/compiler1.inc(41): Including file '../../common\words/create.asm' -../../avr8\dict/compiler1.inc(42): Including file '../../avr8\words/header.asm' -../../avr8\dict/compiler1.inc(43): Including file '../../avr8\words/wlscope.asm' -../../avr8\dict/compiler1.inc(44): Including file '../../common\words/reveal.asm' -../../avr8\dict/compiler1.inc(45): Including file '../../avr8\words/does.asm' -../../avr8\dict/compiler1.inc(46): Including file '../../common\words/colon.asm' -../../avr8\dict/compiler1.inc(47): Including file '../../avr8\words/colon-noname.asm' -../../avr8\dict/compiler1.inc(48): Including file '../../common\words/semicolon.asm' -../../avr8\dict/compiler1.inc(49): Including file '../../common\words/right-bracket.asm' -../../avr8\dict/compiler1.inc(50): Including file '../../common\words/left-bracket.asm' -../../avr8\dict/compiler1.inc(51): Including file '../../common\words/variable.asm' -../../avr8\dict/compiler1.inc(52): Including file '../../common\words/constant.asm' -../../avr8\dict/compiler1.inc(53): Including file '../../avr8\words/user.asm' -../../avr8\dict/compiler1.inc(55): Including file '../../common\words/recurse.asm' -../../avr8\dict/compiler1.inc(56): Including file '../../avr8\words/immediate.asm' -../../avr8\dict/compiler1.inc(58): Including file '../../common\words/bracketchar.asm' -../../avr8\dict/compiler1.inc(59): Including file '../../common\words/abort-string.asm' -../../avr8\dict/compiler1.inc(60): Including file '../../common\words/abort.asm' -../../avr8\dict/compiler1.inc(61): Including file '../../common\words/q-abort.asm' -../../avr8\dict/compiler1.inc(63): Including file '../../common\words/get-stack.asm' -../../avr8\dict/compiler1.inc(64): Including file '../../common\words/set-stack.asm' -../../avr8\dict/compiler1.inc(65): Including file '../../common\words/map-stack.asm' -../../avr8\dict/compiler1.inc(66): Including file '../../avr8\words/get-current.asm' -../../avr8\dict/compiler1.inc(67): Including file '../../common\words/get-order.asm' -../../avr8\dict/compiler1.inc(68): Including file '../../common\words/cfg-order.asm' -../../avr8\dict/compiler1.inc(69): Including file '../../avr8\words/compare.asm' -../../avr8\dict/compiler1.inc(70): Including file '../../avr8\words/nfa2lfa.asm' -../../avr8\amforth.asm(15): Including file 'dict_appl.inc' -dict_appl.inc(3): Including file '../../common\words/dot-s.asm' -dict_appl.inc(4): Including file '../../avr8\words/spirw.asm' -dict_appl.inc(5): Including file '../../avr8\words/n-spi.asm' -dict_appl.inc(6): Including file 'words/applturnkey.asm' -dict_appl.inc(7): Including file '../../avr8\dict/compiler2.inc' -../../avr8\dict/compiler2.inc(8): Including file '../../avr8\words/set-current.asm' -../../avr8\dict/compiler2.inc(9): Including file '../../avr8\words/wordlist.asm' -../../avr8\dict/compiler2.inc(11): Including file '../../avr8\words/forth-wordlist.asm' -../../avr8\dict/compiler2.inc(12): Including file '../../common\words/set-order.asm' -../../avr8\dict/compiler2.inc(13): Including file '../../common\words/set-recognizer.asm' -../../avr8\dict/compiler2.inc(14): Including file '../../common\words/get-recognizer.asm' -../../avr8\dict/compiler2.inc(15): Including file '../../avr8\words/code.asm' -../../avr8\dict/compiler2.inc(16): Including file '../../avr8\words/end-code.asm' -../../avr8\dict/compiler2.inc(17): Including file '../../avr8\words/marker.asm' -../../avr8\dict/compiler2.inc(18): Including file '../../common\words/postpone.asm' -dict_appl.inc(8): Including file '../../avr8\words/2r_fetch.asm' -../../avr8\amforth.asm(23): Including file '../../avr8\amforth-interpreter.asm' -../../avr8\amforth.asm(24): Including file '../../avr8\dict/nrww.inc' -../../avr8\dict/nrww.inc(4): Including file '../../avr8\words/exit.asm' -../../avr8\dict/nrww.inc(5): Including file '../../avr8\words/execute.asm' -../../avr8\dict/nrww.inc(6): Including file '../../avr8\words/dobranch.asm' -../../avr8\dict/nrww.inc(7): Including file '../../avr8\words/docondbranch.asm' -../../avr8\dict/nrww.inc(10): Including file '../../avr8\words/doliteral.asm' -../../avr8\dict/nrww.inc(11): Including file '../../avr8\words/dovariable.asm' -../../avr8\dict/nrww.inc(12): Including file '../../avr8\words/doconstant.asm' -../../avr8\dict/nrww.inc(13): Including file '../../avr8\words/douser.asm' -../../avr8\dict/nrww.inc(14): Including file '../../avr8\words/do-value.asm' -../../avr8\dict/nrww.inc(15): Including file '../../avr8\words/fetch.asm' -../../avr8\dict/nrww.inc(16): Including file '../../avr8\words/store.asm' -../../avr8\dict/nrww.inc(17): Including file '../../avr8\words/cstore.asm' -../../avr8\dict/nrww.inc(18): Including file '../../avr8\words/cfetch.asm' -../../avr8\dict/nrww.inc(19): Including file '../../avr8\words/fetch-u.asm' -../../avr8\dict/nrww.inc(20): Including file '../../avr8\words/store-u.asm' -../../avr8\dict/nrww.inc(23): Including file '../../avr8\words/dup.asm' -../../avr8\dict/nrww.inc(24): Including file '../../avr8\words/qdup.asm' -../../avr8\dict/nrww.inc(25): Including file '../../avr8\words/swap.asm' -../../avr8\dict/nrww.inc(26): Including file '../../avr8\words/over.asm' -../../avr8\dict/nrww.inc(27): Including file '../../avr8\words/drop.asm' -../../avr8\dict/nrww.inc(28): Including file '../../avr8\words/rot.asm' -../../avr8\dict/nrww.inc(29): Including file '../../avr8\words/nip.asm' -../../avr8\dict/nrww.inc(31): Including file '../../avr8\words/r_from.asm' -../../avr8\dict/nrww.inc(32): Including file '../../avr8\words/to_r.asm' -../../avr8\dict/nrww.inc(33): Including file '../../avr8\words/r_fetch.asm' -../../avr8\dict/nrww.inc(36): Including file '../../common\words/not-equal.asm' -../../avr8\dict/nrww.inc(37): Including file '../../avr8\words/equalzero.asm' -../../avr8\dict/nrww.inc(38): Including file '../../avr8\words/lesszero.asm' -../../avr8\dict/nrww.inc(39): Including file '../../avr8\words/greaterzero.asm' -../../avr8\dict/nrww.inc(40): Including file '../../avr8\words/d-greaterzero.asm' -../../avr8\dict/nrww.inc(41): Including file '../../avr8\words/d-lesszero.asm' -../../avr8\dict/nrww.inc(43): Including file '../../avr8\words/true.asm' -../../avr8\dict/nrww.inc(44): Including file '../../avr8\words/zero.asm' -../../avr8\dict/nrww.inc(45): Including file '../../avr8\words/uless.asm' -../../avr8\dict/nrww.inc(46): Including file '../../common\words/u-greater.asm' -../../avr8\dict/nrww.inc(47): Including file '../../avr8\words/less.asm' -../../avr8\dict/nrww.inc(48): Including file '../../avr8\words/greater.asm' -../../avr8\dict/nrww.inc(50): Including file '../../avr8\words/log2.asm' -../../avr8\dict/nrww.inc(51): Including file '../../avr8\words/minus.asm' -../../avr8\dict/nrww.inc(52): Including file '../../avr8\words/plus.asm' -../../avr8\dict/nrww.inc(53): Including file '../../avr8\words/mstar.asm' -../../avr8\dict/nrww.inc(54): Including file '../../avr8\words/umslashmod.asm' -../../avr8\dict/nrww.inc(55): Including file '../../avr8\words/umstar.asm' -../../avr8\dict/nrww.inc(57): Including file '../../avr8\words/invert.asm' -../../avr8\dict/nrww.inc(58): Including file '../../avr8\words/2slash.asm' -../../avr8\dict/nrww.inc(59): Including file '../../avr8\words/2star.asm' -../../avr8\dict/nrww.inc(60): Including file '../../avr8\words/and.asm' -../../avr8\dict/nrww.inc(61): Including file '../../avr8\words/or.asm' -../../avr8\dict/nrww.inc(62): Including file '../../avr8\words/xor.asm' -../../avr8\dict/nrww.inc(64): Including file '../../avr8\words/1plus.asm' -../../avr8\dict/nrww.inc(65): Including file '../../avr8\words/1minus.asm' -../../avr8\dict/nrww.inc(66): Including file '../../common\words/q-negate.asm' -../../avr8\dict/nrww.inc(67): Including file '../../avr8\words/lshift.asm' -../../avr8\dict/nrww.inc(68): Including file '../../avr8\words/rshift.asm' -../../avr8\dict/nrww.inc(69): Including file '../../avr8\words/plusstore.asm' -../../avr8\dict/nrww.inc(71): Including file '../../avr8\words/rpfetch.asm' -../../avr8\dict/nrww.inc(72): Including file '../../avr8\words/rpstore.asm' -../../avr8\dict/nrww.inc(73): Including file '../../avr8\words/spfetch.asm' -../../avr8\dict/nrww.inc(74): Including file '../../avr8\words/spstore.asm' -../../avr8\dict/nrww.inc(76): Including file '../../avr8\words/dodo.asm' -../../avr8\dict/nrww.inc(77): Including file '../../avr8\words/i.asm' -../../avr8\dict/nrww.inc(78): Including file '../../avr8\words/doplusloop.asm' -../../avr8\dict/nrww.inc(79): Including file '../../avr8\words/doloop.asm' -../../avr8\dict/nrww.inc(80): Including file '../../avr8\words/unloop.asm' -../../avr8\dict/nrww.inc(84): Including file '../../avr8\words/cmove_g.asm' -../../avr8\dict/nrww.inc(85): Including file '../../avr8\words/byteswap.asm' -../../avr8\dict/nrww.inc(86): Including file '../../avr8\words/up.asm' -../../avr8\dict/nrww.inc(87): Including file '../../avr8\words/1ms.asm' -../../avr8\dict/nrww.inc(88): Including file '../../avr8\words/2to_r.asm' -../../avr8\dict/nrww.inc(89): Including file '../../avr8\words/2r_from.asm' -../../avr8\dict/nrww.inc(91): Including file '../../avr8\words/store-e.asm' -../../avr8\dict/nrww.inc(92): Including file '../../avr8\words/fetch-e.asm' -../../avr8\dict/nrww.inc(93): Including file '../../avr8\words/store-i.asm' -../../avr8\dict/nrww.inc(97): Including file '../../avr8\words/store-i_nrww.asm' -../../avr8\dict/nrww.inc(99): Including file '../../avr8\words/fetch-i.asm' -../../avr8\dict/nrww.inc(102): Including file '../../avr8\dict/core_8k.inc' -../../avr8\dict/core_8k.inc(2): Including file '../../avr8\words/n_to_r.asm' -../../avr8\dict/core_8k.inc(3): Including file '../../avr8\words/n_r_from.asm' -../../avr8\dict/core_8k.inc(5): Including file '../../avr8\words/d-2star.asm' -../../avr8\dict/core_8k.inc(6): Including file '../../avr8\words/d-2slash.asm' -../../avr8\dict/core_8k.inc(7): Including file '../../avr8\words/d-plus.asm' -../../avr8\dict/core_8k.inc(8): Including file '../../avr8\words/d-minus.asm' -../../avr8\dict/core_8k.inc(9): Including file '../../avr8\words/d-invert.asm' -../../avr8\dict/core_8k.inc(10): Including file '../../common\words/u-dot.asm' -../../avr8\dict/core_8k.inc(11): Including file '../../common\words/u-dot-r.asm' -../../avr8\dict/core_8k.inc(13): Including file '../../common\words/show-wordlist.asm' -../../avr8\dict/core_8k.inc(14): Including file '../../common\words/words.asm' -../../avr8\dict/core_8k.inc(15): Including file '../../avr8\dict/interrupt.inc' -../../avr8\dict/interrupt.inc(8): Including file '../../avr8\words/int-on.asm' -../../avr8\dict/interrupt.inc(9): Including file '../../avr8\words/int-off.asm' -../../avr8\dict/interrupt.inc(10): Including file '../../avr8\words/int-store.asm' -../../avr8\dict/interrupt.inc(11): Including file '../../avr8\words/int-fetch.asm' -../../avr8\dict/interrupt.inc(12): Including file '../../avr8\words/int-trap.asm' -../../avr8\dict/interrupt.inc(14): Including file '../../avr8\words/isr-exec.asm' -../../avr8\dict/interrupt.inc(15): Including file '../../avr8\words/isr-end.asm' -../../avr8\dict/core_8k.inc(17): Including file '../../common\words/pick.asm' -../../avr8\dict/core_8k.inc(18): Including file '../../common\words/dot-quote.asm' -../../avr8\dict/core_8k.inc(19): Including file '../../common\words/squote.asm' -../../avr8\dict/core_8k.inc(21): Including file '../../avr8\words/fill.asm' -../../avr8\dict/core_8k.inc(23): Including file '../../avr8\words/environment.asm' -../../avr8\dict/core_8k.inc(24): Including file '../../avr8\words/env-wordlists.asm' -../../avr8\dict/core_8k.inc(25): Including file '../../avr8\words/env-slashpad.asm' -../../avr8\dict/core_8k.inc(26): Including file '../../common\words/env-slashhold.asm' -../../avr8\dict/core_8k.inc(27): Including file '../../common\words/env-forthname.asm' -../../avr8\dict/core_8k.inc(28): Including file '../../common\words/env-forthversion.asm' -../../avr8\dict/core_8k.inc(29): Including file '../../common\words/env-cpu.asm' -../../avr8\dict/core_8k.inc(30): Including file '../../avr8\words/env-mcuinfo.asm' -../../avr8\dict/core_8k.inc(31): Including file '../../common\words/env-usersize.asm' -../../avr8\dict/core_8k.inc(33): Including file '../../common\words/f_cpu.asm' -../../avr8\dict/core_8k.inc(34): Including file '../../avr8\words/state.asm' -../../avr8\dict/core_8k.inc(35): Including file '../../common\words/base.asm' -../../avr8\dict/core_8k.inc(37): Including file '../../avr8\words/cells.asm' -../../avr8\dict/core_8k.inc(38): Including file '../../avr8\words/cellplus.asm' -../../avr8\dict/core_8k.inc(40): Including file '../../common\words/2dup.asm' -../../avr8\dict/core_8k.inc(41): Including file '../../common\words/2drop.asm' -../../avr8\dict/core_8k.inc(43): Including file '../../common\words/tuck.asm' -../../avr8\dict/core_8k.inc(45): Including file '../../common\words/to-in.asm' -../../avr8\dict/core_8k.inc(46): Including file '../../common\words/pad.asm' -../../avr8\dict/core_8k.inc(47): Including file '../../common\words/emit.asm' -../../avr8\dict/core_8k.inc(48): Including file '../../common\words/emitq.asm' -../../avr8\dict/core_8k.inc(49): Including file '../../common\words/key.asm' -../../avr8\dict/core_8k.inc(50): Including file '../../common\words/keyq.asm' -../../avr8\dict/core_8k.inc(52): Including file '../../avr8\words/dp.asm' -../../avr8\dict/core_8k.inc(53): Including file '../../avr8\words/ehere.asm' -../../avr8\dict/core_8k.inc(54): Including file '../../avr8\words/here.asm' -../../avr8\dict/core_8k.inc(55): Including file '../../avr8\words/allot.asm' -../../avr8\dict/core_8k.inc(57): Including file '../../common\words/bin.asm' -../../avr8\dict/core_8k.inc(58): Including file '../../common\words/decimal.asm' -../../avr8\dict/core_8k.inc(59): Including file '../../common\words/hex.asm' -../../avr8\dict/core_8k.inc(60): Including file '../../common\words/bl.asm' -../../avr8\dict/core_8k.inc(62): Including file '../../avr8\words/turnkey.asm' -../../avr8\dict/core_8k.inc(64): Including file '../../avr8\words/slashmod.asm' -../../avr8\dict/core_8k.inc(65): Including file '../../avr8\words/uslashmod.asm' -../../avr8\dict/core_8k.inc(66): Including file '../../avr8\words/negate.asm' -../../avr8\dict/core_8k.inc(67): Including file '../../common\words/slash.asm' -../../avr8\dict/core_8k.inc(68): Including file '../../common\words/mod.asm' -../../avr8\dict/core_8k.inc(69): Including file '../../common\words/abs.asm' -../../avr8\dict/core_8k.inc(70): Including file '../../common\words/min.asm' -../../avr8\dict/core_8k.inc(71): Including file '../../common\words/max.asm' -../../avr8\dict/core_8k.inc(72): Including file '../../common\words/within.asm' -../../avr8\dict/core_8k.inc(74): Including file '../../common\words/to-upper.asm' -../../avr8\dict/core_8k.inc(75): Including file '../../common\words/to-lower.asm' -../../avr8\dict/core_8k.inc(77): Including file '../../avr8\words/hld.asm' -../../avr8\dict/core_8k.inc(78): Including file '../../common\words/hold.asm' -../../avr8\dict/core_8k.inc(79): Including file '../../common\words/less-sharp.asm' -../../avr8\dict/core_8k.inc(80): Including file '../../common\words/sharp.asm' -../../avr8\dict/core_8k.inc(81): Including file '../../common\words/sharp-s.asm' -../../avr8\dict/core_8k.inc(82): Including file '../../common\words/sharp-greater.asm' -../../avr8\dict/core_8k.inc(83): Including file '../../common\words/sign.asm' -../../avr8\dict/core_8k.inc(84): Including file '../../common\words/d-dot-r.asm' -../../avr8\dict/core_8k.inc(85): Including file '../../common\words/dot-r.asm' -../../avr8\dict/core_8k.inc(86): Including file '../../common\words/d-dot.asm' -../../avr8\dict/core_8k.inc(87): Including file '../../common\words/dot.asm' -../../avr8\dict/core_8k.inc(88): Including file '../../common\words/ud-dot.asm' -../../avr8\dict/core_8k.inc(89): Including file '../../common\words/ud-dot-r.asm' -../../avr8\dict/core_8k.inc(90): Including file '../../common\words/ud-slash-mod.asm' -../../avr8\dict/core_8k.inc(91): Including file '../../common\words/digit-q.asm' -../../avr8\dict/core_8k.inc(93): Including file '../../avr8\words/do-sliteral.asm' -../../avr8\dict/core_8k.inc(94): Including file '../../avr8\words/scomma.asm' -../../avr8\dict/core_8k.inc(95): Including file '../../avr8\words/itype.asm' -../../avr8\dict/core_8k.inc(96): Including file '../../avr8\words/icount.asm' -../../avr8\dict/core_8k.inc(97): Including file '../../common\words/cr.asm' -../../avr8\dict/core_8k.inc(98): Including file '../../common\words/space.asm' -../../avr8\dict/core_8k.inc(99): Including file '../../common\words/spaces.asm' -../../avr8\dict/core_8k.inc(100): Including file '../../common\words/type.asm' -../../avr8\dict/core_8k.inc(101): Including file '../../common\words/tick.asm' -../../avr8\dict/core_8k.inc(103): Including file '../../common\words/handler.asm' -../../avr8\dict/core_8k.inc(104): Including file '../../common\words/catch.asm' -../../avr8\dict/core_8k.inc(105): Including file '../../common\words/throw.asm' -../../avr8\dict/core_8k.inc(107): Including file '../../common\words/cskip.asm' -../../avr8\dict/core_8k.inc(108): Including file '../../common\words/cscan.asm' -../../avr8\dict/core_8k.inc(109): Including file '../../common\words/accept.asm' -../../avr8\dict/core_8k.inc(110): Including file '../../common\words/refill.asm' -../../avr8\dict/core_8k.inc(111): Including file '../../common\words/char.asm' -../../avr8\dict/core_8k.inc(112): Including file '../../common\words/number.asm' -../../avr8\dict/core_8k.inc(113): Including file '../../common\words/q-sign.asm' -../../avr8\dict/core_8k.inc(114): Including file '../../common\words/set-base.asm' -../../avr8\dict/core_8k.inc(115): Including file '../../common\words/to-number.asm' -../../avr8\dict/core_8k.inc(116): Including file '../../common\words/parse.asm' -../../avr8\dict/core_8k.inc(117): Including file '../../common\words/source.asm' -../../avr8\dict/core_8k.inc(118): Including file '../../common\words/slash-string.asm' -../../avr8\dict/core_8k.inc(119): Including file '../../common\words/parse-name.asm' -../../avr8\dict/core_8k.inc(120): Including file '../../common\words/find-xt.asm' -../../avr8\dict/core_8k.inc(122): Including file '../../common\words/prompt-ok.asm' -../../avr8\dict/core_8k.inc(123): Including file '../../common\words/prompt-ready.asm' -../../avr8\dict/core_8k.inc(124): Including file '../../common\words/prompt-error.asm' -../../avr8\dict/core_8k.inc(126): Including file '../../common\words/quit.asm' -../../avr8\dict/core_8k.inc(127): Including file '../../avr8\words/pause.asm' -../../avr8\dict/core_8k.inc(128): Including file '../../avr8\words/cold.asm' -../../avr8\dict/core_8k.inc(129): Including file '../../common\words/warm.asm' -../../avr8\dict/core_8k.inc(131): Including file '../../avr8\words/sp0.asm' -../../avr8\dict/core_8k.inc(132): Including file '../../avr8\words/rp0.asm' -../../avr8\dict/core_8k.inc(133): Including file '../../common\words/depth.asm' -../../avr8\dict/core_8k.inc(134): Including file '../../common\words/interpret.asm' -../../avr8\dict/core_8k.inc(135): Including file '../../avr8\words/forth-recognizer.asm' -../../avr8\dict/core_8k.inc(136): Including file '../../common\words/recognize.asm' -../../avr8\dict/core_8k.inc(137): Including file '../../common\words/rec-intnum.asm' -../../avr8\dict/core_8k.inc(138): Including file '../../common\words/rec-find.asm' -../../avr8\dict/core_8k.inc(139): Including file '../../common\words/dt-null.asm' -../../avr8\dict/core_8k.inc(141): Including file '../../common\words/q-stack.asm' -../../avr8\dict/core_8k.inc(142): Including file '../../common\words/ver.asm' -../../avr8\dict/core_8k.inc(144): Including file '../../common\words/noop.asm' -../../avr8\dict/core_8k.inc(145): Including file '../../avr8\words/unused.asm' -../../avr8\dict/core_8k.inc(147): Including file '../../common\words/to.asm' -../../avr8\dict/core_8k.inc(148): Including file '../../avr8\words/i-cellplus.asm' -../../avr8\dict/core_8k.inc(150): Including file '../../avr8\words/edefer-fetch.asm' -../../avr8\dict/core_8k.inc(151): Including file '../../avr8\words/edefer-store.asm' -../../avr8\dict/core_8k.inc(152): Including file '../../common\words/rdefer-fetch.asm' -../../avr8\dict/core_8k.inc(153): Including file '../../common\words/rdefer-store.asm' -../../avr8\dict/core_8k.inc(154): Including file '../../common\words/udefer-fetch.asm' -../../avr8\dict/core_8k.inc(155): Including file '../../common\words/udefer-store.asm' -../../avr8\dict/core_8k.inc(156): Including file '../../common\words/defer-store.asm' -../../avr8\dict/core_8k.inc(157): Including file '../../common\words/defer-fetch.asm' -../../avr8\dict/core_8k.inc(158): Including file '../../avr8\words/do-defer.asm' -../../avr8\dict/core_8k.inc(160): Including file '../../common\words/search-wordlist.asm' -../../avr8\dict/core_8k.inc(161): Including file '../../common\words/traverse-wordlist.asm' -../../avr8\dict/core_8k.inc(162): Including file '../../common\words/name2string.asm' -../../avr8\dict/core_8k.inc(163): Including file '../../avr8\words/nfa2cfa.asm' -../../avr8\dict/core_8k.inc(164): Including file '../../avr8\words/icompare.asm' -../../avr8\dict/core_8k.inc(166): Including file '../../common\words/star.asm' -../../avr8\dict/core_8k.inc(167): Including file '../../avr8\words/j.asm' -../../avr8\dict/core_8k.inc(169): Including file '../../avr8\words/dabs.asm' -../../avr8\dict/core_8k.inc(170): Including file '../../avr8\words/dnegate.asm' -../../avr8\dict/core_8k.inc(171): Including file '../../avr8\words/cmove.asm' -../../avr8\dict/core_8k.inc(172): Including file '../../common\words/2swap.asm' -../../avr8\dict/core_8k.inc(174): Including file '../../common\words/tib.asm' -../../avr8\dict/core_8k.inc(176): Including file '../../avr8\words/init-ram.asm' -../../avr8\dict/core_8k.inc(177): Including file '../../avr8\dict/compiler2.inc' -../../avr8\dict/core_8k.inc(178): Including file '../../common\words/bounds.asm' -../../avr8\dict/core_8k.inc(179): Including file '../../common\words/s-to-d.asm' -../../avr8\dict/core_8k.inc(180): Including file '../../avr8\words/to-body.asm' -../../avr8\dict/nrww.inc(112): Including file '../../common\words/2literal.asm' -../../avr8\dict/nrww.inc(113): Including file '../../avr8\words/equal.asm' -../../avr8\dict/nrww.inc(114): Including file '../../common\words/num-constants.asm' -../../avr8\amforth.asm(25): Including file 'dict_appl_core.inc' -../../avr8\amforth.asm(36): Including file '../../avr8\amforth-eeprom.inc' - - - ; file see ../template/template.asm. You may want to - ; copy that file to this one and edit it afterwards. - - .include "preamble.inc" - - .include "macros.asm" - - .set DICT_COMPILER2 = 0 ; - .set cpu_msp430 = 0 - .set cpu_avr8 = 1 - - .include "user.inc" - - ; - - ; used by the multitasker - .set USER_STATE = 0 - .set USER_FOLLOWER = 2 - - ; stackpointer, used by mulitasker - .set USER_RP = 4 - .set USER_SP0 = 6 - .set USER_SP = 8 - - ; excpection handling - .set USER_HANDLER = 10 - - ; numeric IO - .set USER_BASE = 12 - - ; character IO - .set USER_EMIT = 14 - .set USER_EMITQ = 16 - .set USER_KEY = 18 - .set USER_KEYQ = 20 - - .set USER_SOURCE = 22 - .set USER_TO_IN = 24 - .set USER_REFILL = 26 - - .set USER_P_OK = 28 - .set USER_P_ERR = 30 - .set USER_P_RDY = 32 - - .set SYSUSERSIZE = 34 - ; - - .def zerol = r2 - .def zeroh = r3 - .def upl = r4 - .def uph = r5 - - .def al = r6 - .def ah = r7 - .def bl = r8 - .def bh = r9 - - ; internal - .def mcu_boot = r10 - .def isrflag = r11 - - .def temp4 = r14 - .def temp5 = r15 - - .def temp0 = r16 - .def temp1 = r17 - .def temp2 = r18 - .def temp3 = r19 - - .def temp6 = r20 - .def temp7 = r21 - - .def tosl = r24 - .def tosh = r25 - - .def wl = r22 - .def wh = r23 - - .macro loadtos - ld tosl, Y+ - ld tosh, Y+ - .endmacro - - .macro savetos - st -Y, tosh - st -Y, tosl - .endmacro - - .macro in_ - .if (@1 < $40) - in @0,@1 - .else - lds @0,@1 - .endif - .endmacro - - .macro out_ - .if (@0 < $40) - out @0,@1 - .else - sts @0,@1 - .endif - .endmacro - - .macro sbi_ - .if (@0 < $40) - sbi @0,@1 - .else - in_ @2,@0 - ori @2,exp2(@1) - out_ @0,@2 - .endif - .endmacro - - .macro cbi_ - .if (@0 < $40) - cbi @0,@1 - .else - in_ @2,@0 - andi @2,~(exp2(@1)) - out_ @0,@2 - .endif - .endmacro - - .macro jmp_ - ; a more flexible macro - .ifdef @0 - .if (@0-pc > 2040) || (pc-@0>2040) - jmp @0 - .else - rjmp @0 - .endif - .else - jmp @0 - .endif - .endmacro - .macro call_ - ; a more flexible macro - .ifdef @0 - .if (@0-pc > 2040) || (pc-@0>2040) - call @0 - .else - rcall @0 - .endif - .else - call @0 - .endif - .endmacro - - ; F_CPU - ; µsec 16000000 14745600 8000000 1000000 - ; 1 16 14,74 8 1 - ; 10 160 147,45 80 10 - ; 100 1600 1474,56 800 100 - ; 1000 16000 14745,6 8000 1000 - ; - ; cycles = µsec * f_cpu / 1e6 - ; n_loops=cycles/5 - ; - ; cycles already used will be subtracted from the delay - ; the waittime resolution is 1 cycle (delay from exact to +1 cycle) - ; the maximum delay at 20MHz (50ns/clock) is 38350ns - ; waitcount register must specify an immediate register - ; - ; busy waits a specfied amount of microseconds - .macro delay - .set cycles = ( ( @0 * F_CPU ) / 1000000 ) - .if (cycles > ( 256 * 255 * 4 + 2)) - .error "MACRO delay - too many cycles to burn" - .else - .if (cycles > 6) - .set loop_cycles = (cycles / 4) - ldi zl,low(loop_cycles) - ldi zh,high(loop_cycles) - sbiw Z, 1 - brne pc-1 - .set cycles = (cycles - (loop_cycles * 4)) - .endif - .if (cycles > 0) - .if (cycles & 4) - rjmp pc+1 - rjmp pc+1 - .endif - .if (cycles & 2) - rjmp pc+1 - .endif - .if (cycles & 1) - nop - .endif - .endif - .endif - .endmacro - - ; portability macros, they come from the msp430 branches - - .macro DEST - .dw @0 - .endm - - ; controller specific file selected via include - ; directory definition when calling the assembler (-I) - .include "device.asm" - - ; generated automatically, do not edit - - .list - - .equ ramstart = 256 - .equ CELLSIZE = 2 - .macro readflashcell - lsl zl - rol zh - lpm @0, Z+ - lpm @1, Z+ - .endmacro - .macro writeflashcell - lsl zl - rol zh - .endmacro - .set WANT_ANALOG_COMPARATOR = 0 - .set WANT_USART0 = 0 - .set WANT_PORTA = 0 - .set WANT_PORTB = 0 - .set WANT_PORTC = 0 - .set WANT_PORTD = 0 - .set WANT_TIMER_COUNTER_0 = 0 - .set WANT_TIMER_COUNTER_2 = 0 - .set WANT_WATCHDOG = 0 - .set WANT_JTAG = 0 - .set WANT_BOOT_LOAD = 0 - .set WANT_EXTERNAL_INTERRUPT = 0 - .set WANT_AD_CONVERTER = 0 - .set WANT_TIMER_COUNTER_1 = 0 - .set WANT_EEPROM = 0 - .set WANT_TWI = 0 - .set WANT_SPI = 0 - .set WANT_CPU = 0 - .equ intvecsize = 2 ; please verify; flash size: 65536 bytes - .equ pclen = 2 ; please verify - .overlap - .org 2 -000002 d12a rcall isr ; External Interrupt Request 0 - .org 4 -000004 d128 rcall isr ; External Interrupt Request 1 - .org 6 -000006 d126 rcall isr ; External Interrupt Request 2 - .org 8 -000008 d124 rcall isr ; Pin Change Interrupt Request 0 - .org 10 -00000a d122 rcall isr ; Pin Change Interrupt Request 1 - .org 12 -00000c d120 rcall isr ; Pin Change Interrupt Request 2 - .org 14 -00000e d11e rcall isr ; Pin Change Interrupt Request 3 - .org 16 -000010 d11c rcall isr ; Watchdog Time-out Interrupt - .org 18 -000012 d11a rcall isr ; Timer/Counter2 Compare Match A - .org 20 -000014 d118 rcall isr ; Timer/Counter2 Compare Match B - .org 22 -000016 d116 rcall isr ; Timer/Counter2 Overflow - .org 24 -000018 d114 rcall isr ; Timer/Counter1 Capture Event - .org 26 -00001a d112 rcall isr ; Timer/Counter1 Compare Match A - .org 28 -00001c d110 rcall isr ; Timer/Counter1 Compare Match B - .org 30 -00001e d10e rcall isr ; Timer/Counter1 Overflow - .org 32 -000020 d10c rcall isr ; Timer/Counter0 Compare Match A - .org 34 -000022 d10a rcall isr ; Timer/Counter0 Compare Match B - .org 36 -000024 d108 rcall isr ; Timer/Counter0 Overflow - .org 38 -000026 d106 rcall isr ; SPI Serial Transfer Complete - .org 40 -000028 d104 rcall isr ; USART0, Rx Complete - .org 42 -00002a d102 rcall isr ; USART0 Data register Empty - .org 44 -00002c d100 rcall isr ; USART0, Tx Complete - .org 46 -00002e d0fe rcall isr ; Analog Comparator - .org 48 -000030 d0fc rcall isr ; ADC Conversion Complete - .org 50 -000032 d0fa rcall isr ; EEPROM Ready - .org 52 -000034 d0f8 rcall isr ; 2-wire Serial Interface - .org 54 -000036 d0f6 rcall isr ; Store Program Memory Read - .equ INTVECTORS = 28 - .nooverlap - - ; compatability layer (maybe empty) - - ; controller data area, environment query mcu-info - mcu_info: - mcu_ramsize: -000037 1000 .dw 4096 - mcu_eepromsize: -000038 0800 .dw 2048 - mcu_maxdp: -000039 e000 .dw 57344 - mcu_numints: -00003a 001c .dw 28 - mcu_name: -00003b 0009 .dw 9 -00003c 5441 -00003d 656d -00003e 6167 -00003f 3436 -000040 0034 .db "ATmega644",0 - .set codestart=pc - - ; some defaults, change them in your application master file - ; see template.asm for an example - - ; enabling Interrupts, disabling them affects - ; other settings as well. - .set WANT_INTERRUPTS = 1 - - ; count the number of interrupts individually. - ; requires a lot of RAM (one byte per interrupt) - ; disabled by default. - .set WANT_INTERRUPT_COUNTERS = 0 - - ; receiving is asynchronously, so an interrupt queue is useful. - .set WANT_ISR_RX = 1 - - ; case insensitve dictionary lookup. - .set WANT_IGNORECASE = 0 - - ; map all memories to one address space. Details in the - ; technical guide - .set WANT_UNIFIED = 0 - - ; terminal input buffer - .set TIB_SIZE = 90 ; ANS94 needs at least 80 characters per line - - ; USER variables *in addition* to system ones - .set APPUSERSIZE = 10 ; size of application specific user area in bytes - - ; addresses of various data segments - .set rstackstart = RAMEND ; start address of return stack, grows downward - .set stackstart = RAMEND - 80 ; start address of data stack, grows downward - ; change only if you know what to you do - .set NUMWORDLISTS = 8 ; number of word lists in the searh order, at least 8 - .set NUMRECOGNIZERS = 4 ; total number of recognizers, two are always used. - - ; 10 per mille (1 per cent) is ok. - .set BAUD = 38400 - .set BAUD_MAXERROR = 10 - - ; Dictionary setup - .set VE_HEAD = $0000 - .set VE_ENVHEAD = $0000 - - .set AMFORTH_RO_SEG = NRWW_START_ADDR+1 - - ; cpu clock in hertz - .equ F_CPU = 16000000 - .set BAUD_MAXERROR = 30 - .equ TIMER_INT = OVF2addr - - .include "drivers/usart_0.asm" - - .equ BAUDRATE_HIGH = UBRR0H - .equ USART_C = UCSR0C - .equ USART_B = UCSR0B - .equ USART_A = UCSR0A - .equ USART_DATA = UDR0 - .ifndef URXCaddr - .equ URXCaddr = URXC0addr - .equ UDREaddr = UDRE0addr - .endif - - .equ bm_USART_RXRD = 1 << RXC0 - .equ bm_USART_TXRD = 1 << UDRE0 - .equ bm_ENABLE_TX = 1 << TXEN0 - .equ bm_ENABLE_RX = 1 << RXEN0 - .equ bm_ENABLE_INT_RX = 1<rx-buf",0 -000046 0000 .dw VE_HEAD - .set VE_HEAD = VE_TO_RXBUF - XT_TO_RXBUF: -000047 0048 .dw PFA_rx_tobuf - PFA_rx_tobuf: -000048 2f08 mov temp0, tosl -000049 9110 0110 lds temp1, usart_rx_in -00004b e0e0 ldi zl, low(usart_rx_data) -00004c e0f1 ldi zh, high(usart_rx_data) -00004d 0fe1 add zl, temp1 -00004e 1df3 adc zh, zeroh -00004f 8300 st Z, temp0 -000050 9513 inc temp1 -000051 701f andi temp1,usart_rx_mask -000052 9310 0110 sts usart_rx_in, temp1 -000054 9189 -000055 9199 loadtos -000056 940c 7005 jmp_ DO_NEXT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ; setup with - ; ' isr-rx URXCaddr int! - VE_ISR_RX: -000058 ff06 .dw $ff06 -000059 7369 -00005a 2d72 -00005b 7872 .db "isr-rx" -00005c 0041 .dw VE_HEAD - .set VE_HEAD = VE_ISR_RX - XT_ISR_RX: -00005d 7001 .dw DO_COLON - usart_rx_isr: -00005e 703d .dw XT_DOLITERAL -00005f 00c6 .dw usart_data -000060 7098 .dw XT_CFETCH -000061 70b1 .dw XT_DUP -000062 703d .dw XT_DOLITERAL -000063 0003 .dw 3 -000064 7d7f .dw XT_EQUAL -000065 7036 .dw XT_DOCONDBRANCH -000066 0068 .dw usart_rx_isr1 -000067 7a59 .dw XT_COLD - usart_rx_isr1: -000068 0047 .dw XT_TO_RXBUF -000069 7020 .dw XT_EXIT - - ; ( -- ) Hardware Access - ; R( --) - ; initialize usart - ;VE_USART_INIT_RXBUFFER: - ; .dw $ff0x - ; .db "+usart-buffer" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_USART_INIT_RXBUFFER - XT_USART_INIT_RX_BUFFER: -00006a 7001 .dw DO_COLON - PFA_USART_INIT_RX_BUFFER: ; ( -- ) -00006b 703d -00006c 005d .dw XT_DOLITERAL, XT_ISR_RX -00006d 703d -00006e 0028 .dw XT_DOLITERAL, URXCaddr -00006f 7487 .dw XT_INTSTORE - -000070 703d .dw XT_DOLITERAL -000071 0100 .dw usart_rx_data -000072 703d .dw XT_DOLITERAL -000073 0016 .dw usart_rx_size + 6 -000074 7154 .dw XT_ZERO -000075 74cf .dw XT_FILL -000076 7020 .dw XT_EXIT - - ; ( -- c) - ; MCU - ; get 1 character from input queue, wait if needed using interrupt driver - VE_RX_BUFFER: -000077 ff06 .dw $ff06 -000078 7872 -000079 622d -00007a 6675 .db "rx-buf" -00007b 0058 .dw VE_HEAD - .set VE_HEAD = VE_RX_BUFFER - XT_RX_BUFFER: -00007c 7001 .dw DO_COLON - PFA_RX_BUFFER: -00007d 0097 .dw XT_RXQ_BUFFER -00007e 7036 .dw XT_DOCONDBRANCH -00007f 007d .dw PFA_RX_BUFFER -000080 703d .dw XT_DOLITERAL -000081 0111 .dw usart_rx_out -000082 7098 .dw XT_CFETCH -000083 70b1 .dw XT_DUP -000084 703d .dw XT_DOLITERAL -000085 0100 .dw usart_rx_data -000086 719d .dw XT_PLUS -000087 7098 .dw XT_CFETCH -000088 70c4 .dw XT_SWAP -000089 722f .dw XT_1PLUS -00008a 703d .dw XT_DOLITERAL -00008b 000f .dw usart_rx_mask -00008c 7213 .dw XT_AND -00008d 703d .dw XT_DOLITERAL -00008e 0111 .dw usart_rx_out -00008f 708d .dw XT_CSTORE -000090 7020 .dw XT_EXIT - - ; ( -- f) - ; MCU - ; check if unread characters are in the input queue - VE_RXQ_BUFFER: -000091 ff07 .dw $ff07 -000092 7872 -000093 2d3f -000094 7562 -000095 0066 .db "rx?-buf",0 -000096 0077 .dw VE_HEAD - .set VE_HEAD = VE_RXQ_BUFFER - XT_RXQ_BUFFER: -000097 7001 .dw DO_COLON - PFA_RXQ_BUFFER: -000098 7a51 .dw XT_PAUSE -000099 703d .dw XT_DOLITERAL -00009a 0111 .dw usart_rx_out -00009b 7098 .dw XT_CFETCH -00009c 703d .dw XT_DOLITERAL -00009d 0110 .dw usart_rx_in -00009e 7098 .dw XT_CFETCH -00009f 7113 .dw XT_NOTEQUAL -0000a0 7020 .dw XT_EXIT - ; .include "drivers/timer-usart-isr.asm" - .set XT_RX = XT_RX_BUFFER - .set XT_RXQ = XT_RXQ_BUFFER - .set XT_USART_INIT_RX = XT_USART_INIT_RX_BUFFER - .else - .endif - - .include "words/usart-tx-poll.asm" - - ; MCU - ; check availability and send one character to the terminal using register poll - VE_TX_POLL: -0000a1 ff07 .dw $ff07 -0000a2 7874 -0000a3 702d -0000a4 6c6f -0000a5 006c .db "tx-poll",0 -0000a6 0091 .dw VE_HEAD - .set VE_HEAD = VE_TX_POLL - XT_TX_POLL: -0000a7 7001 .dw DO_COLON - PFA_TX_POLL: - ; wait for data ready -0000a8 00b5 .dw XT_TXQ_POLL -0000a9 7036 .dw XT_DOCONDBRANCH -0000aa 00a8 .dw PFA_TX_POLL - ; send to usart -0000ab 703d .dw XT_DOLITERAL -0000ac 00c6 .dw USART_DATA -0000ad 708d .dw XT_CSTORE -0000ae 7020 .dw XT_EXIT - - ; ( -- f) MCU - ; MCU - ; check if a character can be send using register poll - VE_TXQ_POLL: -0000af ff08 .dw $ff08 -0000b0 7874 -0000b1 2d3f -0000b2 6f70 -0000b3 6c6c .db "tx?-poll" -0000b4 00a1 .dw VE_HEAD - .set VE_HEAD = VE_TXQ_POLL - XT_TXQ_POLL: -0000b5 7001 .dw DO_COLON - PFA_TXQ_POLL: -0000b6 7a51 .dw XT_PAUSE -0000b7 703d .dw XT_DOLITERAL -0000b8 00c0 .dw USART_A -0000b9 7098 .dw XT_CFETCH -0000ba 703d .dw XT_DOLITERAL -0000bb 0020 .dw bm_USART_TXRD -0000bc 7213 .dw XT_AND -0000bd 7020 .dw XT_EXIT - .set XT_TX = XT_TX_POLL - .set XT_TXQ = XT_TXQ_POLL - .set XT_USART_INIT_TX = 0 - - .include "words/ubrr.asm" - - ; MCU - ; returns usart UBRR settings - VE_UBRR: -0000be ff04 .dw $ff04 -0000bf 6275 -0000c0 7272 .db "ubrr" -0000c1 00af .dw VE_HEAD - .set VE_HEAD = VE_UBRR - XT_UBRR: -0000c2 706f .dw PFA_DOVALUE1 - PFA_UBRR: ; ( -- ) -0000c3 0090 .dw EE_UBRRVAL -0000c4 7bb4 .dw XT_EDEFERFETCH -0000c5 7bbe .dw XT_EDEFERSTORE - .include "words/usart.asm" - - ; MCU - ; initialize usart - VE_USART: -0000c6 ff06 .dw $ff06 -0000c7 752b -0000c8 6173 -0000c9 7472 .db "+usart" -0000ca 00be .dw VE_HEAD - .set VE_HEAD = VE_USART - XT_USART: -0000cb 7001 .dw DO_COLON - PFA_USART: ; ( -- ) - -0000cc 703d .dw XT_DOLITERAL -0000cd 0098 .dw USART_B_VALUE -0000ce 703d .dw XT_DOLITERAL -0000cf 00c1 .dw USART_B -0000d0 708d .dw XT_CSTORE - -0000d1 703d .dw XT_DOLITERAL -0000d2 0006 .dw USART_C_VALUE -0000d3 703d .dw XT_DOLITERAL -0000d4 00c2 .dw USART_C | bm_USARTC_en -0000d5 708d .dw XT_CSTORE - -0000d6 00c2 .dw XT_UBRR -0000d7 70b1 .dw XT_DUP -0000d8 72f9 .dw XT_BYTESWAP -0000d9 703d .dw XT_DOLITERAL -0000da 00c5 .dw BAUDRATE_HIGH -0000db 708d .dw XT_CSTORE -0000dc 703d .dw XT_DOLITERAL -0000dd 00c4 .dw BAUDRATE_LOW -0000de 708d .dw XT_CSTORE - .if XT_USART_INIT_RX!=0 -0000df 006a .dw XT_USART_INIT_RX - .endif - .if XT_USART_INIT_TX!=0 - .endif - -0000e0 7020 .dw XT_EXIT - - ; settings for 1wire interface - .equ OW_PORT=PORTB - .EQU OW_BIT=4 - .include "drivers/1wire.asm" - - ; B. J. Rodriguez (MSP 430) - ; Matthias Trute (AVR Atmega) - ; COPYRIGHT - ; (c) 2012 Bradford J. Rodriguez for the 430 code and API - - ; adapted 430 assembly code to AVR - ; wishlist: - ; use a configurable pin at runtime, compatible with bitnames.frt - ; no external pull up, no external power supply for devices - ; ??? - ; - ;.EQU OW_BIT=4 - ;.equ OW_PORT=PORTE - .set OW_DDR=(OW_PORT-1) - .set OW_PIN=(OW_DDR-1) - - ;****f* 1W.RESET - ; NAME - ; 1W.RESET - ; SYNOPSIS - ; 1W.RESET ( -- f ) Initialize 1-wire devices; return true if present - ; DESCRIPTION - ; This configures the port pin used by the 1-wire interface, and then - ; sends an "initialize" sequence to the 1-wire devices. If any device - ; is present, it will be detected. - ; - ; Timing, per DS18B20 data sheet: - ; a) Output "0" (drive output low) for >480 usec. - ; b) Output "1" (let output float). - ; c) After 15 to 60 usec, device will drive pin low for 60 to 240 usec. - ; So, wait 75 usec and sample input. - ; d) Leave output high (floating) for at least 480 usec. - ;****** - ; ( -- f ) - ; Hardware - ; Initialize 1-wire devices; return true if present - VE_OW_RESET: -0000e1 ff08 .dw $ff08 -0000e2 7731 -0000e3 722e -0000e4 7365 -0000e5 7465 .db "1w.reset" -0000e6 00c6 .dw VE_HEAD - .set VE_HEAD = VE_OW_RESET - XT_OW_RESET: -0000e7 00e8 .dw PFA_OW_RESET - PFA_OW_RESET: -0000e8 939a -0000e9 938a savetos - ; setup to output -0000ea 9a24 sbi OW_DDR, OW_BIT - ; Pull output low -0000eb 982c cbi OW_PORT, OW_BIT - ; Delay >480 usec -0000ec e8e0 -0000ed e0f7 -0000ee 9731 -0000ef f7f1 DELAY 480 - ; Critical timing period, disable interrupts. -0000f0 b71f in temp1, SREG -0000f1 94f8 cli - ; Pull output high -0000f2 9a2c sbi OW_PORT, OW_BIT - ; make pin input, sends "1" -0000f3 9824 cbi OW_DDR, OW_BIT -0000f4 e0e0 -0000f5 e0f1 -0000f6 9731 -0000f7 f7f1 DELAY 64 ; delayB - ; Sample input pin, set TOS if input is zero -0000f8 b183 in tosl, OW_PIN -0000f9 ff84 sbrs tosl, OW_BIT -0000fa ef9f ser tosh - ; End critical timing period, enable interrupts -0000fb bf1f out SREG, temp1 - ; release bus -0000fc 9824 cbi OW_DDR, OW_BIT -0000fd 982c cbi OW_PORT, OW_BIT - - ; Delay rest of 480 usec -0000fe e8e0 -0000ff e0f6 -000100 9731 -000101 f7f1 DELAY 416 - ; we now have the result flag in TOS -000102 2f89 mov tosl, tosh -000103 940c 7005 jmp_ DO_NEXT - - ;****f* 1W.SLOT - ; NAME - ; 1W.SLOT - ; SYNOPSIS - ; 1W.SLOT ( c -- c' ) Write and read one bit to/from 1-wire. - ; DESCRIPTION - ; The "touch byte" function is described in Dallas App Note 74. - ; It outputs a byte to the 1-wire pin, LSB first, and reads back - ; the state of the 1-wire pin after a suitable delay. - ; To read a byte, output $FF and read the reply data. - ; To write a byte, output that byte and discard the reply. - ; - ; This function performs one bit of the "touch" operation -- - ; one read/write "slot" in Dallas jargon. Perform this eight - ; times in a row to get the "touch byte" function. - ; - ; PARAMETERS - ; The input parameter is xxxxxxxxbbbbbbbo where - ; 'xxxxxxxx' are don't cares, - ; 'bbbbbbb' are bits to be shifted down, and - ; 'o' is the bit to be output in the slot. This must be 1 - ; to create a read slot. - ; - ; The returned value is xxxxxxxxibbbbbbb where - ; 'xxxxxxxx' are not known (the input shifted down 1 position), - ; 'i' is the bit read during the slot. This has no meaning - ; if it was a write slot. - ; 'bbbbbbb' are the 7 input bits, shifted down one position. - ; - ; This peculiar parameter usage allows OWTOUCH to be written as - ; OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT - ; - ; NOTES - ; Interrupts are disabled during each bit. - - ; Timing, per DS18B20 data sheet: - ; a) Output "0" for start period. (> 1 us, < 15 us, typ. 6 us*) - ; b) Output data bit (0 or 1), open drain - ; c) After MS from start of cycle, sample input (15 to 60 us, typ. 25 us*) - ; d) After write-0 period from start of cycle, output "1" (>60 us) - ; e) After recovery period, loop or return. (> 1 us) - ; For writes, DS18B20 samples input 15 to 60 usec from start of cycle. - ; * "Typical" values are per App Note 132 for a 300m cable length. - - ; --------- ------------------------------- - ; \ / / - ; ------------------------------- - ; a b c d e - ; | 6us | 19us | 35us | 2us | - ;****** - ; ( c -- c' ) - ; Hardware - ; Write and read one bit to/from 1-wire. - VE_OW_SLOT: -000105 ff07 .dw $ff07 -000106 7731 -000107 732e -000108 6f6c -000109 0074 .db "1w.slot",0 -00010a 00e1 .dw VE_HEAD - .set VE_HEAD = VE_OW_SLOT - XT_OW_SLOT: -00010b 010c .dw PFA_OW_SLOT - PFA_OW_SLOT: - ; pull low -00010c 982c cbi OW_PORT, OW_BIT -00010d 9a24 sbi OW_DDR, OW_BIT - ; disable interrupts -00010e b71f in temp1, SREG -00010f 94f8 cli -000110 e1e8 -000111 e0f0 -000112 9731 -000113 f7f1 DELAY 6 ; DELAY A - ; check bit -000114 9488 clc -000115 9587 ror tosl -000116 f410 brcc PFA_OW_SLOT0 ; a 0 keeps the bus low - ; release bus, a 1 is written -000117 9a2c sbi OW_PORT, OW_BIT -000118 9824 cbi OW_DDR, OW_BIT - PFA_OW_SLOT0: - ; sample the input (no action required if zero) -000119 e2e4 -00011a e0f0 -00011b 9731 -00011c f7f1 DELAY 9 ; wait DELAY E to sample -00011d b103 in temp0, OW_PIN -00011e fd04 sbrc temp0, OW_BIT -00011f 6880 ori tosl, $80 - -000120 ecec -000121 e0f0 -000122 9731 -000123 f7f1 DELAY 51 ; DELAY B -000124 9a2c sbi OW_PORT, OW_BIT ; release bus -000125 9824 cbi OW_DDR, OW_BIT -000126 e0e8 -000127 e0f0 -000128 9731 -000129 f7f1 delay 2 - ; re-enable interrupts -00012a bf1f out SREG, temp1 -00012b 940c 7005 jmp_ DO_NEXT - - .include "amforth.asm" - - ;;;; - ;;;; GPL V2 (only) - - .set AMFORTH_NRWW_SIZE=(FLASHEND-AMFORTH_RO_SEG)*2 - - .set corepc = pc - .org $0000 -000000 940c 7a5a jmp_ PFA_COLD - - .org corepc - .include "drivers/generic-isr.asm" - - .eseg -000000 intvec: .byte INTVECTORS * CELLSIZE - .dseg -000112 intcnt: .byte INTVECTORS - .cseg - - ; interrupt routine gets called (again) by rcall! This gives the - ; address of the int-vector on the stack. - isr: -00012d 920a st -Y, r0 -00012e b60f in r0, SREG -00012f 920a st -Y, r0 - .if (pclen==3) - .endif -000130 900f pop r0 -000131 900f pop r0 ; = intnum * intvectorsize + 1 (address following the rcall) -000132 940a dec r0 - .if intvecsize == 1 ; - .endif -000133 2cb0 mov isrflag, r0 -000134 93ff push zh -000135 93ef push zl -000136 e1e2 ldi zl, low(intcnt) -000137 e0f1 ldi zh, high(intcnt) -000138 9406 lsr r0 ; we use byte addresses in the counter array, not words -000139 0de0 add zl, r0 -00013a 1df3 adc zh, zeroh -00013b 8000 ld r0, Z -00013c 9403 inc r0 -00013d 8200 st Z, r0 -00013e 91ef pop zl -00013f 91ff pop zh - -000140 9009 ld r0, Y+ -000141 be0f out SREG, r0 -000142 9009 ld r0, Y+ -000143 9508 ret ; returns the interrupt, the rcall stack frame is removed! - ; no reti here, see words/isr-end.asm - ; lower part of the dictionary - .include "dict/rww.inc" - - - ; Arithmetics - ; add a number to a double cell - VE_MPLUS: -000144 ff02 .dw $ff02 -000145 2b6d .db "m+" -000146 0105 .dw VE_HEAD - .set VE_HEAD = VE_MPLUS - XT_MPLUS: -000147 7001 .dw DO_COLON - PFA_MPLUS: -000148 7d67 .dw XT_S2D -000149 7415 .dw XT_DPLUS -00014a 7020 .dw XT_EXIT - .include "words/ud-star.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDSTAR: -00014b ff03 .dw $ff03 -00014c 6475 -../../common\words/ud-star.asm(9): warning: .cseg .db misalignment - padding zero byte -00014d 002a .db "ud*" -00014e 0144 .dw VE_HEAD - .set VE_HEAD = VE_UDSTAR - XT_UDSTAR: -00014f 7001 .dw DO_COLON - PFA_UDSTAR: - - .endif - ;Z UD* ud1 d2 -- ud3 32*16->32 multiply - ; XT_DUP >R UM* DROP XT_SWAP R> UM* ROT + ; - -000150 70b1 -000151 70ff -000152 71e0 -000153 70d9 .DW XT_DUP,XT_TO_R,XT_UMSTAR,XT_DROP -000154 70c4 -000155 70f6 -000156 71e0 -000157 70e1 -000158 719d -000159 7020 .DW XT_SWAP,XT_R_FROM,XT_UMSTAR,XT_ROT,XT_PLUS,XT_EXIT - .include "words/umax.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UMAX: -00015a ff04 .dw $ff04 -00015b 6d75 -00015c 7861 .db "umax" -00015d 014b .dw VE_HEAD - .set VE_HEAD = VE_UMAX - XT_UMAX: -00015e 7001 .dw DO_COLON - PFA_UMAX: - .endif - -00015f 7565 -000160 715c .DW XT_2DUP,XT_ULESS -000161 7036 .dw XT_DOCONDBRANCH -000162 0164 DEST(UMAX1) -000163 70c4 .DW XT_SWAP -000164 70d9 UMAX1: .DW XT_DROP -000165 7020 .dw XT_EXIT - .include "words/umin.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UMIN: -000166 ff04 .dw $ff04 -000167 6d75 -000168 6e69 .db "umin" -000169 015a .dw VE_HEAD - .set VE_HEAD = VE_UMIN - XT_UMIN: -00016a 7001 .dw DO_COLON - PFA_UMIN: - .endif -00016b 7565 -00016c 7167 .DW XT_2DUP,XT_UGREATER -00016d 7036 .dw XT_DOCONDBRANCH -00016e 0170 DEST(UMIN1) -00016f 70c4 .DW XT_SWAP -000170 70d9 UMIN1: .DW XT_DROP -000171 7020 .dw XT_EXIT - .include "words/immediate-q.asm" - - ; Tools - ; return +1 if immediate, -1 otherwise, flag from name>flags - ;VE_IMMEDIATEQ: - ; .dw $ff06 - ; .db "immediate?" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_IMMEDIATEQ - XT_IMMEDIATEQ: -000172 7001 .dw DO_COLON - PFA_IMMEDIATEQ: -000173 703d .dw XT_DOLITERAL -000174 8000 .dw $8000 -000175 7213 .dw XT_AND -000176 711a .dw XT_ZEROEQUAL -000177 7036 .dw XT_DOCONDBRANCH -000178 017b DEST(IMMEDIATEQ1) -000179 7d86 .dw XT_ONE -00017a 7020 .dw XT_EXIT - IMMEDIATEQ1: - ; not immediate -00017b 714b .dw XT_TRUE -00017c 7020 .dw XT_EXIT - .include "words/name2flags.asm" - - ; Tools - ; get the flags from a name token - VE_NAME2FLAGS: -00017d ff0a .dw $ff0a -00017e 616e -00017f 656d -000180 663e -000181 616c -000182 7367 .db "name>flags" -000183 0166 .dw VE_HEAD - .set VE_HEAD = VE_NAME2FLAGS - XT_NAME2FLAGS: -000184 7001 .dw DO_COLON - PFA_NAME2FLAGS: -000185 73cb .dw XT_FETCHI ; skip to link field -000186 703d .dw XT_DOLITERAL -000187 ff00 .dw $ff00 -000188 7213 .dw XT_AND -000189 7020 .dw XT_EXIT - - .if AMFORTH_NRWW_SIZE > 8000 - .include "dict/appl_8k.inc" - - - .include "words/newest.asm" - - ; System Variable - ; system state - VE_NEWEST: -00018a ff06 .dw $ff06 -00018b 656e -00018c 6577 -00018d 7473 .db "newest" -00018e 017d .dw VE_HEAD - .set VE_HEAD = VE_NEWEST - XT_NEWEST: -00018f 7048 .dw PFA_DOVARIABLE - PFA_NEWEST: -000190 012e .dw ram_newest - - .dseg -00012e ram_newest: .byte 4 - .include "words/latest.asm" - - ; System Variable - ; system state - VE_LATEST: -000191 ff06 .dw $ff06 -000192 616c -000193 6574 -000194 7473 .db "latest" -000195 018a .dw VE_HEAD - .set VE_HEAD = VE_LATEST - XT_LATEST: -000196 7048 .dw PFA_DOVARIABLE - PFA_LATEST: -000197 0132 .dw ram_latest - - .dseg -000132 ram_latest: .byte 2 - .include "words/do-create.asm" - - ; Compiler - ; parse the input and create an empty vocabulary entry without XT and data field (PF) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOCREATE: -000198 ff08 .dw $ff08 -000199 6328 -00019a 6572 -00019b 7461 -00019c 2965 .db "(create)" -00019d 0191 .dw VE_HEAD - .set VE_HEAD = VE_DOCREATE - XT_DOCREATE: -00019e 7001 .dw DO_COLON - PFA_DOCREATE: - .endif -00019f 79b4 -0001a0 02f5 .DW XT_PARSENAME,XT_WLSCOPE ; ( -- addr len wid) -0001a1 70b1 -0001a2 018f -0001a3 755e -0001a4 7081 .DW XT_DUP,XT_NEWEST,XT_CELLPLUS,XT_STORE ; save the wid -0001a5 02da -0001a6 018f -0001a7 7081 .DW XT_HEADER,XT_NEWEST,XT_STORE ; save the nt -0001a8 7020 .DW XT_EXIT - .include "words/backslash.asm" - - ; Compiler - ; everything up to the end of the current line is a comment - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BACKSLASH: -0001a9 0001 .dw $0001 -0001aa 005c .db $5c,0 -0001ab 0198 .dw VE_HEAD - .set VE_HEAD = VE_BACKSLASH - XT_BACKSLASH: -0001ac 7001 .dw DO_COLON - PFA_BACKSLASH: - .endif -0001ad 799b .dw XT_SOURCE -0001ae 70f0 .dw XT_NIP -0001af 757e .dw XT_TO_IN -0001b0 7081 .dw XT_STORE -0001b1 7020 .dw XT_EXIT - .include "words/l-paren.asm" - - ; Compiler - ; skip everything up to the closing bracket on the same line - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_LPAREN: -0001b2 0001 .dw $0001 -0001b3 0028 .db "(" ,0 -0001b4 01a9 .dw VE_HEAD - .set VE_HEAD = VE_LPAREN - XT_LPAREN: -0001b5 7001 .dw DO_COLON - PFA_LPAREN: - .endif -0001b6 703d .dw XT_DOLITERAL -0001b7 0029 .dw ')' -0001b8 7987 .dw XT_PARSE -0001b9 756e .dw XT_2DROP -0001ba 7020 .dw XT_EXIT - - .include "words/compile.asm" - - ; Dictionary - ; read the following cell from the dictionary and append it to the current dictionary position. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_COMPILE: -0001bb ff07 .dw $ff07 -0001bc 6f63 -0001bd 706d -0001be 6c69 -0001bf 0065 .db "compile",0 -0001c0 01b2 .dw VE_HEAD - .set VE_HEAD = VE_COMPILE - XT_COMPILE: -0001c1 7001 .dw DO_COLON - PFA_COMPILE: - .endif -0001c2 70f6 .dw XT_R_FROM -0001c3 70b1 .dw XT_DUP -0001c4 7bab .dw XT_ICELLPLUS -0001c5 70ff .dw XT_TO_R -0001c6 73cb .dw XT_FETCHI -0001c7 01cc .dw XT_COMMA -0001c8 7020 .dw XT_EXIT - .include "words/comma.asm" - - ; Dictionary - ; compile 16 bit into flash at DP - VE_COMMA: -0001c9 ff01 .dw $ff01 -0001ca 002c .db ',',0 ; , -0001cb 01bb .dw VE_HEAD - .set VE_HEAD = VE_COMMA - XT_COMMA: -0001cc 7001 .dw DO_COLON - PFA_COMMA: -0001cd 75ae .dw XT_DP -0001ce 7373 .dw XT_STOREI -0001cf 75ae .dw XT_DP -0001d0 722f .dw XT_1PLUS -0001d1 7b99 .dw XT_DOTO -0001d2 75af .dw PFA_DP -0001d3 7020 .dw XT_EXIT - .include "words/brackettick.asm" - - ; Compiler - ; what ' does in the interpreter mode, do in colon definitions - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BRACKETTICK: -0001d4 0003 .dw $0003 -0001d5 275b -0001d6 005d .db "[']",0 -0001d7 01c9 .dw VE_HEAD - .set VE_HEAD = VE_BRACKETTICK - XT_BRACKETTICK: -0001d8 7001 .dw DO_COLON - PFA_BRACKETTICK: - .endif -0001d9 780a .dw XT_TICK -0001da 01e2 .dw XT_LITERAL -0001db 7020 .dw XT_EXIT - - - .include "words/literal.asm" - - ; Compiler - ; compile a literal in colon defintions - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_LITERAL: -0001dc 0007 .dw $0007 -0001dd 696c -0001de 6574 -0001df 6172 -0001e0 006c .db "literal",0 -0001e1 01d4 .dw VE_HEAD - .set VE_HEAD = VE_LITERAL - XT_LITERAL: -0001e2 7001 .dw DO_COLON - PFA_LITERAL: - .endif -0001e3 01c1 .DW XT_COMPILE -0001e4 703d .DW XT_DOLITERAL -0001e5 01cc .DW XT_COMMA -0001e6 7020 .DW XT_EXIT - .include "words/sliteral.asm" - - ; String - ; compiles a string to flash, at runtime leaves ( -- flash-addr count) on stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SLITERAL: -0001e7 0008 .dw $0008 -0001e8 6c73 -0001e9 7469 -0001ea 7265 -0001eb 6c61 .db "sliteral" -0001ec 01dc .dw VE_HEAD - .set VE_HEAD = VE_SLITERAL - XT_SLITERAL: -0001ed 7001 .dw DO_COLON - PFA_SLITERAL: - .endif -0001ee 01c1 .dw XT_COMPILE -0001ef 776d .dw XT_DOSLITERAL ; ( -- addr n) -0001f0 777b .dw XT_SCOMMA -0001f1 7020 .dw XT_EXIT - .include "words/g-mark.asm" - - ; Compiler - ; places current dictionary position for backward resolves - ;VE_GMARK: - ; .dw $ff05 - ; .db ">mark" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_GMARK - XT_GMARK: -0001f2 7001 .dw DO_COLON - PFA_GMARK: -0001f3 75ae .dw XT_DP -0001f4 01c1 .dw XT_COMPILE -0001f5 ffff .dw -1 ; ffff does not erase flash -0001f6 7020 .dw XT_EXIT - .include "words/g-resolve.asm" - - ; Compiler - ; resolve backward jumps - ;VE_GRESOLVE: - ; .dw $ff08 - ; .db ">resolve" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_GRESOLVE - XT_GRESOLVE: -0001f7 7001 .dw DO_COLON - PFA_GRESOLVE: -0001f8 7b57 .dw XT_QSTACK -0001f9 75ae .dw XT_DP -0001fa 70c4 .dw XT_SWAP -0001fb 7373 .dw XT_STOREI -0001fc 7020 .dw XT_EXIT - .include "words/l_mark.asm" - - ; Compiler - ; place destination for backward branch - ;VE_LMARK: - ; .dw $ff05 - ; .db "r if 2drop then r> invert ; - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_QDOCHECK: -00028b 7001 .dw DO_COLON - PFA_QDOCHECK: - .endif -00028c 7565 .dw XT_2DUP -00028d 7d7f .dw XT_EQUAL -00028e 70b1 .dw XT_DUP -00028f 70ff .dw XT_TO_R -000290 7036 .dw XT_DOCONDBRANCH -000291 0293 DEST(PFA_QDOCHECK1) -000292 756e .dw XT_2DROP - PFA_QDOCHECK1: -000293 70f6 .dw XT_R_FROM -000294 71fd .dw XT_INVERT -000295 7020 .dw XT_EXIT - .include "words/endloop.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENDLOOP: -000296 ff07 .dw $ff07 -000297 6e65 -000298 6c64 -000299 6f6f -00029a 0070 .db "endloop",0 -00029b 027f .dw VE_HEAD - .set VE_HEAD = VE_ENDLOOP - XT_ENDLOOP: -00029c 7001 .dw DO_COLON - PFA_ENDLOOP: - .endif - ;Z ENDLOOP adrs xt -- L: 0 a1 a2 .. aN -- - ; ?DUP WHILE POSTPONE THEN REPEAT ; - ; resolve LEAVEs - ; This is a common factor of LOOP and +LOOP. - -00029d 0200 .DW XT_LRESOLVE -00029e 02a9 -00029f 70b9 -0002a0 7036 LOOP1: .DW XT_L_FROM,XT_QDUP,XT_DOCONDBRANCH -0002a1 02a5 DEST(LOOP2) -0002a2 0225 .DW XT_THEN -0002a3 702f .dw XT_DOBRANCH -0002a4 029e DEST(LOOP1) -0002a5 7020 LOOP2: .DW XT_EXIT - ; leave address stack - .include "words/l-from.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_L_FROM: -0002a6 ff02 .dw $ff02 -0002a7 3e6c .db "l>" -0002a8 0296 .dw VE_HEAD - .set VE_HEAD = VE_L_FROM - XT_L_FROM: -0002a9 7001 .dw DO_COLON - PFA_L_FROM: - - .endif - ;Z L> -- x L: x -- move from leave stack - ; LP @ @ -2 LP +! ; - -0002aa 02c8 .dw XT_LP -0002ab 7079 .dw XT_FETCH -0002ac 7079 .dw XT_FETCH -0002ad 703d .dw XT_DOLITERAL -0002ae fffe .dw -2 -0002af 02c8 .dw XT_LP -0002b0 7265 .dw XT_PLUSSTORE -0002b1 7020 .dw XT_EXIT - .include "words/to-l.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO_L: -0002b2 ff02 .dw $ff02 -0002b3 6c3e .db ">l" -0002b4 02a6 .dw VE_HEAD - .set VE_HEAD = VE_TO_L - XT_TO_L: -0002b5 7001 .dw DO_COLON - PFA_TO_L: - .endif - ;Z >L x -- L: -- x move to leave stack - ; CELL LP +! LP @ ! ; (L stack grows up) - -0002b6 7d8b .dw XT_TWO -0002b7 02c8 .dw XT_LP -0002b8 7265 .dw XT_PLUSSTORE -0002b9 02c8 .dw XT_LP -0002ba 7079 .dw XT_FETCH -0002bb 7081 .dw XT_STORE -0002bc 7020 .dw XT_EXIT - .include "words/lp0.asm" - - ; Stack - ; start address of leave stack - VE_LP0: -0002bd ff03 .dw $ff03 -0002be 706c -0002bf 0030 .db "lp0",0 -0002c0 02b2 .dw VE_HEAD - .set VE_HEAD = VE_LP0 - XT_LP0: -0002c1 706f .dw PFA_DOVALUE1 - PFA_LP0: -0002c2 0044 .dw CFG_LP0 -0002c3 7bb4 .dw XT_EDEFERFETCH -0002c4 7bbe .dw XT_EDEFERSTORE - .include "words/lp.asm" - - ; System Variable - ; leave stack pointer - VE_LP: -0002c5 ff02 .dw $ff02 -0002c6 706c .db "lp" -0002c7 02bd .dw VE_HEAD - .set VE_HEAD = VE_LP - XT_LP: -0002c8 7048 .dw PFA_DOVARIABLE - PFA_LP: -0002c9 0134 .dw ram_lp - - .dseg -000134 ram_lp: .byte 2 - .cseg - - - .include "words/create.asm" - - ; Dictionary - ; create a dictionary header. XT is (constant), with the address of the data field of name - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CREATE: -0002ca ff06 .dw $ff06 -0002cb 7263 -0002cc 6165 -0002cd 6574 .db "create" -0002ce 02c5 .dw VE_HEAD - .set VE_HEAD = VE_CREATE - XT_CREATE: -0002cf 7001 .dw DO_COLON - PFA_CREATE: - .endif -0002d0 019e .dw XT_DOCREATE -0002d1 02fe .dw XT_REVEAL -0002d2 01c1 .dw XT_COMPILE -0002d3 7052 .dw PFA_DOCONSTANT -0002d4 7020 .dw XT_EXIT - .include "words/header.asm" - - ; Compiler - ; creates the vocabulary header without XT and data field (PF) in the wordlist wid - VE_HEADER: -0002d5 ff06 .dw $ff06 -0002d6 6568 -0002d7 6461 -0002d8 7265 .db "header" -0002d9 02ca .dw VE_HEAD - .set VE_HEAD = VE_HEADER - XT_HEADER: -0002da 7001 .dw DO_COLON - PFA_HEADER: -0002db 75ae .dw XT_DP ; the new Name Field -0002dc 70ff .dw XT_TO_R -0002dd 70ff .dw XT_TO_R ; ( R: NFA WID ) -0002de 70b1 .dw XT_DUP -0002df 7128 .dw XT_GREATERZERO -0002e0 7036 .dw XT_DOCONDBRANCH -0002e1 02ec .dw PFA_HEADER1 -0002e2 70b1 .dw XT_DUP -0002e3 703d .dw XT_DOLITERAL -0002e4 ff00 .dw $ff00 ; all flags are off (e.g. immediate) -0002e5 721c .dw XT_OR -0002e6 777f .dw XT_DOSCOMMA - ; make the link to the previous entry in this wordlist -0002e7 70f6 .dw XT_R_FROM -0002e8 735f .dw XT_FETCHE -0002e9 01cc .dw XT_COMMA -0002ea 70f6 .dw XT_R_FROM -0002eb 7020 .dw XT_EXIT - - PFA_HEADER1: - ; -16: attempt to use zero length string as a name -0002ec 703d .dw XT_DOLITERAL -0002ed fff0 .dw -16 -0002ee 7841 .dw XT_THROW - - .include "words/wlscope.asm" - - ; Compiler - ; dynamically place a word in a wordlist. The word name may be changed. - VE_WLSCOPE: -0002ef ff07 .dw $ff07 -0002f0 6c77 -0002f1 6373 -0002f2 706f -0002f3 0065 .db "wlscope",0 -0002f4 02d5 .dw VE_HEAD - .set VE_HEAD = VE_WLSCOPE - XT_WLSCOPE: -0002f5 7c13 .dw PFA_DODEFER1 - PFA_WLSCOPE: -0002f6 0040 .dw CFG_WLSCOPE -0002f7 7bb4 .dw XT_EDEFERFETCH -0002f8 7bbe .dw XT_EDEFERSTORE - - ; wlscope, "wordlist scope" ( addr len -- addr' len' wid ), is a deferred word - ; which enables the AmForth application to choose the wordlist ( wid ) for the - ; new voc entry based on the input ( addr len ) string. The name of the new voc - ; entry ( addr' len' ) may be different from the input string. Note that all - ; created voc entry types pass through the wlscope mechanism. The default - ; wlscope action passes the input string to the output without modification and - ; uses get-current to select the wid. - .include "words/reveal.asm" - - ; Dictionary - ; makes an entry in a wordlist visible, if not already done. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_REVEAL: -0002f9 ff06 .dw $ff06 -0002fa 6572 -0002fb 6576 -0002fc 6c61 .db "reveal" -0002fd 02ef .dw VE_HEAD - .set VE_HEAD = VE_REVEAL - XT_REVEAL: -0002fe 7001 .dw DO_COLON - PFA_REVEAL: - .endif -0002ff 018f -000300 755e -000301 7079 .DW XT_NEWEST,XT_CELLPLUS,XT_FETCH ; only if wordlist is in use -000302 70b9 -000303 7036 .DW XT_QDUP,XT_DOCONDBRANCH -000304 0309 DEST(REVEAL1) -000305 018f -000306 7079 -000307 70c4 -000308 733b .DW XT_NEWEST,XT_FETCH,XT_SWAP,XT_STOREE - ; .DW XT_ZERO,XT_NEWEST,XT_CELLPLUS,XT_STORE ; clean wordlist entry - REVEAL1: -000309 7020 .DW XT_EXIT - .include "words/does.asm" - - ; Compiler - ; organize the XT replacement to call other colon code - VE_DOES: -00030a 0005 .dw $0005 -00030b 6f64 -00030c 7365 -00030d 003e .db "does>",0 -00030e 02f9 .dw VE_HEAD - .set VE_HEAD = VE_DOES - XT_DOES: -00030f 7001 .dw DO_COLON - PFA_DOES: -000310 01c1 .dw XT_COMPILE -000311 0322 .dw XT_DODOES -000312 01c1 .dw XT_COMPILE ; create a code snippet to be used in an embedded XT -000313 940e .dw $940e ; the address of this compiled -000314 01c1 .dw XT_COMPILE ; code will replace the XT of the -000315 0317 .dw DO_DODOES ; word that CREATE created -000316 7020 .dw XT_EXIT ; - - DO_DODOES: ; ( -- PFA ) -000317 939a -000318 938a savetos -000319 01cb movw tosl, wl -00031a 9601 adiw tosl, 1 - ; the following takes the address from a real uC-call - .if (pclen==3) - .endif -00031b 917f pop wh -00031c 916f pop wl - -00031d 93bf push XH -00031e 93af push XL -00031f 01db movw XL, wl -000320 940c 7005 jmp_ DO_NEXT - - ; ( -- ) - ; System - ; replace the XT written by CREATE to call the code that follows does> - ;VE_DODOES: - ; .dw $ff07 - ; .db "(does>)" - ; .set VE_HEAD = VE_DODOES - XT_DODOES: -000322 7001 .dw DO_COLON - PFA_DODOES: -000323 70f6 .dw XT_R_FROM -000324 018f .dw XT_NEWEST -000325 755e .dw XT_CELLPLUS -000326 7079 .dw XT_FETCH -000327 735f .dw XT_FETCHE -000328 7c7e .dw XT_NFA2CFA -000329 7373 .dw XT_STOREI -00032a 7020 .dw XT_EXIT - .include "words/colon.asm" - - ; Compiler - ; create a named entry in the dictionary, XT is DO_COLON - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_COLON: -00032b ff01 .dw $ff01 -00032c 003a .db ":",0 -00032d 030a .dw VE_HEAD - .set VE_HEAD = VE_COLON - XT_COLON: -00032e 7001 .dw DO_COLON - PFA_COLON: - .endif -00032f 019e .dw XT_DOCREATE -000330 0339 .dw XT_COLONNONAME -000331 70d9 .dw XT_DROP -000332 7020 .dw XT_EXIT - .include "words/colon-noname.asm" - - ; Compiler - ; create an unnamed entry in the dictionary, XT is DO_COLON - VE_COLONNONAME: -000333 ff07 .dw $ff07 -000334 6e3a -000335 6e6f -000336 6d61 -000337 0065 .db ":noname",0 -000338 032b .dw VE_HEAD - .set VE_HEAD = VE_COLONNONAME - XT_COLONNONAME: -000339 7001 .dw DO_COLON - PFA_COLONNONAME: -00033a 75ae .dw XT_DP -00033b 70b1 .dw XT_DUP -00033c 0196 .dw XT_LATEST -00033d 7081 .dw XT_STORE - -00033e 01c1 .dw XT_COMPILE -00033f 7001 .dw DO_COLON - -000340 034e .dw XT_RBRACKET -000341 7020 .dw XT_EXIT - .include "words/semicolon.asm" - - ; Compiler - ; finish colon defintion, compiles (exit) and returns to interpret state - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_SEMICOLON: -000342 0001 .dw $0001 -000343 003b .db $3b,0 -000344 0333 .dw VE_HEAD - .set VE_HEAD = VE_SEMICOLON - XT_SEMICOLON: -000345 7001 .dw DO_COLON - PFA_SEMICOLON: - .endif -000346 01c1 .dw XT_COMPILE -000347 7020 .dw XT_EXIT -000348 0356 .dw XT_LBRACKET -000349 02fe .dw XT_REVEAL -00034a 7020 .dw XT_EXIT - .include "words/right-bracket.asm" - - ; Compiler - ; enter compiler mode - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RBRACKET: -00034b ff01 .dw $ff01 -00034c 005d .db "]",0 -00034d 0342 .dw VE_HEAD - .set VE_HEAD = VE_RBRACKET - XT_RBRACKET: -00034e 7001 .dw DO_COLON - PFA_RBRACKET: - .endif -00034f 7d86 .dw XT_ONE -000350 754b .dw XT_STATE -000351 7081 .dw XT_STORE -000352 7020 .dw XT_EXIT - .include "words/left-bracket.asm" - - ; Compiler - ; enter interpreter mode - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_LBRACKET: -000353 0001 .dw $0001 -000354 005b .db "[",0 -000355 034b .dw VE_HEAD - .set VE_HEAD = VE_LBRACKET - XT_LBRACKET: -000356 7001 .dw DO_COLON - PFA_LBRACKET: - .endif -000357 7154 .dw XT_ZERO -000358 754b .dw XT_STATE -000359 7081 .dw XT_STORE -00035a 7020 .dw XT_EXIT - .include "words/variable.asm" - - ; Compiler - ; create a dictionary entry for a variable and allocate 1 cell RAM - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_VARIABLE: -00035b ff08 .dw $ff08 -00035c 6176 -00035d 6972 -00035e 6261 -00035f 656c .db "variable" -000360 0353 .dw VE_HEAD - .set VE_HEAD = VE_VARIABLE - XT_VARIABLE: -000361 7001 .dw DO_COLON - PFA_VARIABLE: - .endif -000362 75bf .dw XT_HERE -000363 036d .dw XT_CONSTANT -000364 7d8b .dw XT_TWO -000365 75c8 .dw XT_ALLOT -000366 7020 .dw XT_EXIT - .include "words/constant.asm" - - ; Compiler - ; create a constant in the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_CONSTANT: -000367 ff08 .dw $ff08 -000368 6f63 -000369 736e -00036a 6174 -00036b 746e .db "constant" -00036c 035b .dw VE_HEAD - .set VE_HEAD = VE_CONSTANT - XT_CONSTANT: -00036d 7001 .dw DO_COLON - PFA_CONSTANT: - .endif -00036e 019e .dw XT_DOCREATE -00036f 02fe .dw XT_REVEAL -000370 01c1 .dw XT_COMPILE -000371 7048 .dw PFA_DOVARIABLE -000372 01cc .dw XT_COMMA -000373 7020 .dw XT_EXIT - .include "words/user.asm" - - ; Compiler - ; create a dictionary entry for a user variable at offset n - VE_USER: -000374 ff04 .dw $ff04 -000375 7375 -000376 7265 .db "user" -000377 0367 .dw VE_HEAD - .set VE_HEAD = VE_USER - XT_USER: -000378 7001 .dw DO_COLON - PFA_USER: -000379 019e .dw XT_DOCREATE -00037a 02fe .dw XT_REVEAL - -00037b 01c1 .dw XT_COMPILE -00037c 7058 .dw PFA_DOUSER -00037d 01cc .dw XT_COMMA -00037e 7020 .dw XT_EXIT - - .include "words/recurse.asm" - - ; Compiler - ; compile the XT of the word currently being defined into the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RECURSE: -00037f 0007 .dw $0007 -000380 6572 -000381 7563 -000382 7372 -000383 0065 .db "recurse",0 -000384 0374 .dw VE_HEAD - .set VE_HEAD = VE_RECURSE - XT_RECURSE: -000385 7001 .dw DO_COLON - PFA_RECURSE: - .endif -000386 0196 .dw XT_LATEST -000387 7079 .dw XT_FETCH -000388 01cc .dw XT_COMMA -000389 7020 .dw XT_EXIT - .include "words/immediate.asm" - - ; Compiler - ; set immediate flag for the most recent word definition - VE_IMMEDIATE: -00038a ff09 .dw $ff09 -00038b 6d69 -00038c 656d -00038d 6964 -00038e 7461 -00038f 0065 .db "immediate",0 -000390 037f .dw VE_HEAD - .set VE_HEAD = VE_IMMEDIATE - XT_IMMEDIATE: -000391 7001 .dw DO_COLON - PFA_IMMEDIATE: -000392 0433 .dw XT_GET_CURRENT -000393 735f .dw XT_FETCHE -000394 70b1 .dw XT_DUP -000395 73cb .dw XT_FETCHI -000396 703d .dw XT_DOLITERAL -000397 7fff .dw $7fff -000398 7213 .dw XT_AND -000399 70c4 .dw XT_SWAP -00039a 7373 .dw XT_STOREI -00039b 7020 .dw XT_EXIT - - .include "words/bracketchar.asm" - - ; Tools - ; skip leading space delimites, place the first character of the word on the stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BRACKETCHAR: -00039c 0006 .dw $0006 -00039d 635b -00039e 6168 -00039f 5d72 .db "[char]" -0003a0 038a .dw VE_HEAD - .set VE_HEAD = VE_BRACKETCHAR - XT_BRACKETCHAR: -0003a1 7001 .dw DO_COLON - PFA_BRACKETCHAR: - .endif -0003a2 01c1 .dw XT_COMPILE -0003a3 703d .dw XT_DOLITERAL -0003a4 78ea .dw XT_CHAR -0003a5 01cc .dw XT_COMMA -0003a6 7020 .dw XT_EXIT - .include "words/abort-string.asm" - - ;C i*x x1 -- R: j*x -- x1<>0 - ; POSTPONE IS" POSTPONE ?ABORT ; IMMEDIATE - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ABORTQUOTE: -0003a7 0006 .dw $0006 -0003a8 6261 -0003a9 726f -0003aa 2274 .db "abort",'"' -0003ab 039c .dw VE_HEAD - .set VE_HEAD = VE_ABORTQUOTE - XT_ABORTQUOTE: -0003ac 7001 .dw DO_COLON - PFA_ABORTQUOTE: - .endif -0003ad 74c1 .dw XT_SQUOTE -0003ae 01c1 .dw XT_COMPILE -0003af 03be .dw XT_QABORT -0003b0 7020 .DW XT_EXIT - .include "words/abort.asm" - - ; Exceptions - ; send an exception -1 - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ABORT: -0003b1 ff05 .dw $ff05 -0003b2 6261 -0003b3 726f -0003b4 0074 .db "abort",0 -0003b5 03a7 .dw VE_HEAD - .set VE_HEAD = VE_ABORT - XT_ABORT: -0003b6 7001 .dw DO_COLON - PFA_ABORT: - .endif -0003b7 714b .dw XT_TRUE -0003b8 7841 .dw XT_THROW - .include "words/q-abort.asm" - - ; ROT IF ITYPE ABORT THEN 2DROP ; - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QABORT: -0003b9 ff06 .dw $ff06 -0003ba 613f -0003bb 6f62 -0003bc 7472 .db "?abort" -0003bd 03b1 .dw VE_HEAD - .set VE_HEAD = VE_QABORT - XT_QABORT: -0003be 7001 .dw DO_COLON - PFA_QABORT: - - .endif -0003bf 70e1 -0003c0 7036 .DW XT_ROT,XT_DOCONDBRANCH -0003c1 03c4 DEST(QABO1) -0003c2 77a0 -0003c3 03b6 .DW XT_ITYPE,XT_ABORT -0003c4 756e -0003c5 7020 QABO1: .DW XT_2DROP,XT_EXIT - - .include "words/get-stack.asm" - - ; Tools - ; Get a stack from EEPROM - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_GET_STACK: -0003c6 ff09 .dw $ff09 -0003c7 6567 -0003c8 2d74 -0003c9 7473 -0003ca 6361 -0003cb 006b .db "get-stack",0 -0003cc 03b9 .dw VE_HEAD - .set VE_HEAD = VE_GET_STACK - XT_GET_STACK: -0003cd 7001 .dw DO_COLON - .endif -0003ce 70b1 .dw XT_DUP -0003cf 755e .dw XT_CELLPLUS -0003d0 70c4 .dw XT_SWAP -0003d1 735f .dw XT_FETCHE -0003d2 70b1 .dw XT_DUP -0003d3 70ff .dw XT_TO_R -0003d4 7154 .dw XT_ZERO -0003d5 70c4 .dw XT_SWAP ; go from bigger to smaller addresses -0003d6 028b .dw XT_QDOCHECK -0003d7 7036 .dw XT_DOCONDBRANCH -0003d8 03e4 DEST(PFA_N_FETCH_E2) -0003d9 729b .dw XT_DODO - PFA_N_FETCH_E1: - ; ( ee-addr ) -0003da 72ac .dw XT_I -0003db 7235 .dw XT_1MINUS -0003dc 7558 .dw XT_CELLS ; ( -- ee-addr i*2 ) -0003dd 70cf .dw XT_OVER ; ( -- ee-addr i*2 ee-addr ) -0003de 719d .dw XT_PLUS ; ( -- ee-addr ee-addr+i -0003df 735f .dw XT_FETCHE ;( -- ee-addr item_i ) -0003e0 70c4 .dw XT_SWAP ;( -- item_i ee-addr ) -0003e1 714b .dw XT_TRUE ; shortcut for -1 -0003e2 72ba .dw XT_DOPLUSLOOP -0003e3 03da DEST(PFA_N_FETCH_E1) - PFA_N_FETCH_E2: -0003e4 756e .dw XT_2DROP -0003e5 70f6 .dw XT_R_FROM -0003e6 7020 .dw XT_EXIT - - .include "words/set-stack.asm" - - ; Tools - ; Write a stack to EEPROM - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SET_STACK: -0003e7 ff09 .dw $ff09 -0003e8 6573 -0003e9 2d74 -0003ea 7473 -0003eb 6361 -0003ec 006b .db "set-stack",0 -0003ed 03c6 .dw VE_HEAD - .set VE_HEAD = VE_SET_STACK - XT_SET_STACK: -0003ee 7001 .dw DO_COLON - PFA_SET_STACK: - .endif -0003ef 70cf .dw XT_OVER -0003f0 7121 .dw XT_ZEROLESS -0003f1 7036 .dw XT_DOCONDBRANCH -0003f2 03f6 DEST(PFA_SET_STACK0) -0003f3 703d .dw XT_DOLITERAL -0003f4 fffc .dw -4 -0003f5 7841 .dw XT_THROW - PFA_SET_STACK0: -0003f6 7565 .dw XT_2DUP -0003f7 733b .dw XT_STOREE ; ( -- i_n .. i_0 n e-addr ) -0003f8 70c4 .dw XT_SWAP -0003f9 7154 .dw XT_ZERO -0003fa 028b .dw XT_QDOCHECK -0003fb 7036 .dw XT_DOCONDBRANCH -0003fc 0403 DEST(PFA_SET_STACK2) -0003fd 729b .dw XT_DODO - PFA_SET_STACK1: -0003fe 755e .dw XT_CELLPLUS ; ( -- i_x e-addr ) -0003ff 7576 .dw XT_TUCK ; ( -- e-addr i_x e-addr -000400 733b .dw XT_STOREE -000401 72c9 .dw XT_DOLOOP -000402 03fe DEST(PFA_SET_STACK1) - PFA_SET_STACK2: -000403 70d9 .dw XT_DROP -000404 7020 .dw XT_EXIT - - .include "words/map-stack.asm" - - ; Tools - ; Iterate over a stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_MAPSTACK: -000405 ff09 .dw $ff09 -000406 616d -000407 2d70 -000408 7473 -000409 6361 -00040a 006b .db "map-stack",0 -00040b 03e7 .dw VE_HEAD - .set VE_HEAD = VE_MAPSTACK - XT_MAPSTACK: -00040c 7001 .dw DO_COLON - PFA_MAPSTACK: - .endif -00040d 70b1 .dw XT_DUP -00040e 755e .dw XT_CELLPLUS -00040f 70c4 .dw XT_SWAP -000410 735f .dw XT_FETCHE -000411 7558 .dw XT_CELLS -000412 7d5e .dw XT_BOUNDS -000413 028b .dw XT_QDOCHECK -000414 7036 .dw XT_DOCONDBRANCH -000415 0428 DEST(PFA_MAPSTACK3) -000416 729b .dw XT_DODO - PFA_MAPSTACK1: -000417 72ac .dw XT_I -000418 735f .dw XT_FETCHE ; -- i*x XT id -000419 70c4 .dw XT_SWAP -00041a 70ff .dw XT_TO_R -00041b 7108 .dw XT_R_FETCH -00041c 702a .dw XT_EXECUTE ; i*x id -- j*y true | i*x false -00041d 70b9 .dw XT_QDUP -00041e 7036 .dw XT_DOCONDBRANCH -00041f 0424 DEST(PFA_MAPSTACK2) -000420 70f6 .dw XT_R_FROM -000421 70d9 .dw XT_DROP -000422 72d4 .dw XT_UNLOOP -000423 7020 .dw XT_EXIT - PFA_MAPSTACK2: -000424 70f6 .dw XT_R_FROM -000425 7d8b .dw XT_TWO -000426 72ba .dw XT_DOPLUSLOOP -000427 0417 DEST(PFA_MAPSTACK1) - PFA_MAPSTACK3: -000428 70d9 .dw XT_DROP -000429 7154 .dw XT_ZERO -00042a 7020 .dw XT_EXIT - - ; - ; : map-stack ( i*x XT e-addr -- j*y ) - ; dup cell+ swap @e cells bounds ?do - ; ( -- i*x XT ) - ; i @e swap >r r@ execute - ; ?dup if r> drop unloop exit then - ; r> - ; 2 +loop drop 0 - ; ; - .include "words/get-current.asm" - - ; Search Order - ; get the wid of the current compilation word list - VE_GET_CURRENT: -00042b ff0b .dw $ff0b -00042c 6567 -00042d 2d74 -00042e 7563 -00042f 7272 -000430 6e65 -000431 0074 .db "get-current",0 -000432 0405 .dw VE_HEAD - .set VE_HEAD = VE_GET_CURRENT - XT_GET_CURRENT: -000433 7001 .dw DO_COLON - PFA_GET_CURRENT: -000434 703d .dw XT_DOLITERAL -000435 004a .dw CFG_CURRENT -000436 735f .dw XT_FETCHE -000437 7020 .dw XT_EXIT - .include "words/get-order.asm" - - ; Search Order - ; Get the current search order word list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_GET_ORDER: -000438 ff09 .dw $ff09 -000439 6567 -00043a 2d74 -00043b 726f -00043c 6564 -00043d 0072 .db "get-order",0 -00043e 042b .dw VE_HEAD - .set VE_HEAD = VE_GET_ORDER - XT_GET_ORDER: -00043f 7001 .dw DO_COLON - PFA_GET_ORDER: - .endif -000440 703d .dw XT_DOLITERAL -000441 004e .dw CFG_ORDERLISTLEN -000442 03cd .dw XT_GET_STACK -000443 7020 .dw XT_EXIT - .include "words/cfg-order.asm" - - ; Search Order - ; Get the current search order word list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CFG_ORDER: -000444 ff09 .dw $ff09 -000445 6663 -000446 2d67 -000447 726f -000448 6564 -000449 0072 .db "cfg-order",0 -00044a 0438 .dw VE_HEAD - .set VE_HEAD = VE_CFG_ORDER - XT_CFG_ORDER: -00044b 7048 .dw PFA_DOVARIABLE - PFA_CFG_ORDER: - .endif -00044c 004e .dw CFG_ORDERLISTLEN - .include "words/compare.asm" - - ; String - ; compares two strings in RAM - VE_COMPARE: -00044d ff07 .dw $ff07 -00044e 6f63 -00044f 706d -000450 7261 -000451 0065 .db "compare",0 -000452 0444 .dw VE_HEAD - .set VE_HEAD = VE_COMPARE - XT_COMPARE: -000453 0454 .dw PFA_COMPARE - PFA_COMPARE: -000454 93bf push xh -000455 93af push xl -000456 018c movw temp0, tosl -000457 9189 -000458 9199 loadtos -000459 01dc movw xl, tosl -00045a 9189 -00045b 9199 loadtos -00045c 019c movw temp2, tosl -00045d 9189 -00045e 9199 loadtos -00045f 01fc movw zl, tosl - PFA_COMPARE_LOOP: -000460 90ed ld temp4, X+ -000461 90f1 ld temp5, Z+ -000462 14ef cp temp4, temp5 -000463 f451 brne PFA_COMPARE_NOTEQUAL -000464 950a dec temp0 -000465 f019 breq PFA_COMPARE_ENDREACHED2 -000466 952a dec temp2 -000467 f7c1 brne PFA_COMPARE_LOOP -000468 c001 rjmp PFA_COMPARE_ENDREACHED - PFA_COMPARE_ENDREACHED2: -000469 952a dec temp2 - PFA_COMPARE_ENDREACHED: -00046a 2b02 or temp0, temp2 -00046b f411 brne PFA_COMPARE_CHECKLASTCHAR -00046c 2788 clr tosl -00046d c002 rjmp PFA_COMPARE_DONE - PFA_COMPARE_CHECKLASTCHAR: - PFA_COMPARE_NOTEQUAL: -00046e ef8f ser tosl -00046f c000 rjmp PFA_COMPARE_DONE - - PFA_COMPARE_DONE: -000470 2f98 mov tosh, tosl -000471 91af pop xl -000472 91bf pop xh -000473 940c 7005 jmp_ DO_NEXT - .include "words/nfa2lfa.asm" - - ; System - ; get the link field address from the name field address - VE_NFA2LFA: -000475 ff07 .dw $ff07 -000476 666e -000477 3e61 -000478 666c -000479 0061 .db "nfa>lfa",0 -00047a 044d .dw VE_HEAD - .set VE_HEAD = VE_NFA2LFA - XT_NFA2LFA: -00047b 7001 .dw DO_COLON - PFA_NFA2LFA: -00047c 7c72 .dw XT_NAME2STRING -00047d 722f .dw XT_1PLUS -00047e 7204 .dw XT_2SLASH -00047f 719d .dw XT_PLUS -000480 7020 .dw XT_EXIT - .elif AMFORTH_NRWW_SIZE > 4000 - .elif AMFORTH_NRWW_SIZE > 2000 - .else - .endif - .include "dict_appl.inc" - - ; they may be moved to the core dictionary if needed - .include "words/dot-s.asm" - - ; Tools - ; stack dump - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOTS: -000481 ff02 .dw $ff02 -000482 732e .db ".s" -000483 0475 .dw VE_HEAD - .set VE_HEAD = VE_DOTS - XT_DOTS: -000484 7001 .dw DO_COLON - PFA_DOTS: - .endif -000485 7aa1 .dw XT_DEPTH -000486 7448 .dw XT_UDOT -000487 77e2 .dw XT_SPACE -000488 7aa1 .dw XT_DEPTH -000489 7154 .dw XT_ZERO -00048a 028b .dw XT_QDOCHECK -00048b 7036 .dw XT_DOCONDBRANCH -00048c 0493 DEST(PFA_DOTS2) -00048d 729b .dw XT_DODO - PFA_DOTS1: -00048e 72ac .dw XT_I -00048f 74af .dw XT_PICK -000490 7448 .dw XT_UDOT -000491 72c9 .dw XT_DOLOOP -000492 048e DEST(PFA_DOTS1) - PFA_DOTS2: -000493 7020 .dw XT_EXIT - .include "words/spirw.asm" - - ; MCU - ; SPI exchange of 1 byte - VE_SPIRW: -000494 ff06 .dw $ff06 -000495 2163 -000496 7340 -000497 6970 .db "c!@spi" -000498 0481 .dw VE_HEAD - .set VE_HEAD = VE_SPIRW - XT_SPIRW: -000499 049a .dw PFA_SPIRW - PFA_SPIRW: -00049a d003 rcall do_spirw -00049b 2799 clr tosh -00049c 940c 7005 jmp_ DO_NEXT - - do_spirw: -00049e bd8e out_ SPDR, tosl - do_spirw1: -00049f b50d in_ temp0, SPSR -0004a0 7f08 cbr temp0,7 -0004a1 bd0d out_ SPSR, temp0 -0004a2 b50d in_ temp0, SPSR -0004a3 ff07 sbrs temp0, 7 -0004a4 cffa rjmp do_spirw1 ; wait until complete -0004a5 b58e in_ tosl, SPDR -0004a6 9508 ret - .include "words/n-spi.asm" - - ; MCU - ; read len bytes from SPI to addr - VE_N_SPIR: -0004a7 ff05 .dw $ff05 -0004a8 406e -0004a9 7073 -0004aa 0069 .db "n@spi",0 -0004ab 0494 .dw VE_HEAD - .set VE_HEAD = VE_N_SPIR - XT_N_SPIR: -0004ac 04ad .dw PFA_N_SPIR - PFA_N_SPIR: -0004ad 018c movw temp0, tosl -0004ae 9189 -0004af 9199 loadtos -0004b0 01fc movw zl, tosl -0004b1 01c8 movw tosl, temp0 - PFA_N_SPIR_LOOP: -0004b2 bc2e out_ SPDR, zerol - PFA_N_SPIR_LOOP1: -0004b3 b52d in_ temp2, SPSR -0004b4 ff27 sbrs temp2, SPIF -0004b5 cffd rjmp PFA_N_SPIR_LOOP1 -0004b6 b52e in_ temp2, SPDR -0004b7 9321 st Z+, temp2 -0004b8 9701 sbiw tosl, 1 -0004b9 f7c1 brne PFA_N_SPIR_LOOP -0004ba 9189 -0004bb 9199 loadtos -0004bc 940c 7005 jmp_ DO_NEXT - - ; ( addr len -- ) - ; MCU - ; write len bytes to SPI from addr - VE_N_SPIW: -0004be ff05 .dw $ff05 -0004bf 216e -0004c0 7073 -0004c1 0069 .db "n!spi",0 -0004c2 04a7 .dw VE_HEAD - .set VE_HEAD = VE_N_SPIW - XT_N_SPIW: -0004c3 04c4 .dw PFA_N_SPIW - PFA_N_SPIW: -0004c4 018c movw temp0, tosl -0004c5 9189 -0004c6 9199 loadtos -0004c7 01fc movw zl, tosl -0004c8 01c8 movw tosl, temp0 - PFA_N_SPIW_LOOP: -0004c9 9121 ld temp2, Z+ -0004ca bd2e out_ SPDR, temp2 - PFA_N_SPIW_LOOP1: -0004cb b52d in_ temp2, SPSR -0004cc ff27 sbrs temp2, SPIF -0004cd cffd rjmp PFA_N_SPIW_LOOP1 -0004ce b52e in_ temp2, SPDR ; ignore the data -0004cf 9701 sbiw tosl, 1 -0004d0 f7c1 brne PFA_N_SPIW_LOOP -0004d1 9189 -0004d2 9199 loadtos -0004d3 940c 7005 jmp_ DO_NEXT - .include "words/applturnkey.asm" - - ; R( -- ) - ; application specific turnkey action - VE_APPLTURNKEY: -0004d5 ff0b .dw $ff0b -0004d6 7061 -0004d7 6c70 -0004d8 7574 -0004d9 6e72 -0004da 656b -0004db 0079 .db "applturnkey",0 -0004dc 04be .dw VE_HEAD - .set VE_HEAD = VE_APPLTURNKEY - XT_APPLTURNKEY: -0004dd 7001 .dw DO_COLON - PFA_APPLTURNKEY: -0004de 00cb .dw XT_USART - - .if WANT_INTERRUPTS == 1 -0004df 7479 .dw XT_INTON - .endif -0004e0 7b64 .dw XT_DOT_VER -0004e1 77e2 .dw XT_SPACE -0004e2 7540 .dw XT_F_CPU -0004e3 703d .dw XT_DOLITERAL -0004e4 03e8 .dw 1000 -0004e5 71c2 .dw XT_UMSLASHMOD -0004e6 70f0 .dw XT_NIP -0004e7 75dd .dw XT_DECIMAL -0004e8 7722 .dw XT_DOT -0004e9 776d .dw XT_DOSLITERAL -0004ea 0004 .dw 4 -0004eb 486b -0004ec 207a .db "kHz " -0004ed 77a0 .dw XT_ITYPE -0004ee 7020 .dw XT_EXIT - .include "dict/compiler2.inc" - - ; included almost independently from each other - ; on a include-per-use basis - ; - .if DICT_COMPILER2 == 0 - .set DICT_COMPILER2 = 1 - - .include "words/set-current.asm" - - ; Search Order - ; set current word list to the given word list wid - VE_SET_CURRENT: -0004ef ff0b .dw $ff0b -0004f0 6573 -0004f1 2d74 -0004f2 7563 -0004f3 7272 -0004f4 6e65 -0004f5 0074 .db "set-current",0 -0004f6 04d5 .dw VE_HEAD - .set VE_HEAD = VE_SET_CURRENT - XT_SET_CURRENT: -0004f7 7001 .dw DO_COLON - PFA_SET_CURRENT: -0004f8 703d .dw XT_DOLITERAL -0004f9 004a .dw CFG_CURRENT -0004fa 733b .dw XT_STOREE -0004fb 7020 .dw XT_EXIT - .include "words/wordlist.asm" - - ; Search Order - ; create a new, empty wordlist - VE_WORDLIST: -0004fc ff08 .dw $ff08 -0004fd 6f77 -0004fe 6472 -0004ff 696c -000500 7473 .db "wordlist" -000501 04ef .dw VE_HEAD - .set VE_HEAD = VE_WORDLIST - XT_WORDLIST: -000502 7001 .dw DO_COLON - PFA_WORDLIST: -000503 75b7 .dw XT_EHERE -000504 7154 .dw XT_ZERO -000505 70cf .dw XT_OVER -000506 733b .dw XT_STOREE -000507 70b1 .dw XT_DUP -000508 755e .dw XT_CELLPLUS -000509 7b99 .dw XT_DOTO -00050a 75b8 .dw PFA_EHERE -00050b 7020 .dw XT_EXIT - - .include "words/forth-wordlist.asm" - - ; Search Order - ; get the system default word list - VE_FORTHWORDLIST: -00050c ff0e .dw $ff0e -00050d 6f66 -00050e 7472 -00050f 2d68 -000510 6f77 -000511 6472 -000512 696c -000513 7473 .db "forth-wordlist" -000514 04fc .dw VE_HEAD - .set VE_HEAD = VE_FORTHWORDLIST - XT_FORTHWORDLIST: -000515 7048 .dw PFA_DOVARIABLE - PFA_FORTHWORDLIST: -000516 004c .dw CFG_FORTHWORDLIST - .include "words/set-order.asm" - - ; Search Order - ; replace the search order list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SET_ORDER: -000517 ff09 .dw $ff09 -000518 6573 -000519 2d74 -00051a 726f -00051b 6564 -00051c 0072 .db "set-order",0 -00051d 050c .dw VE_HEAD - .set VE_HEAD = VE_SET_ORDER - XT_SET_ORDER: -00051e 7001 .dw DO_COLON - PFA_SET_ORDER: - .endif -00051f 703d .dw XT_DOLITERAL -000520 004e .dw CFG_ORDERLISTLEN -000521 03ee .dw XT_SET_STACK -000522 7020 .dw XT_EXIT - - .include "words/set-recognizer.asm" - - ; Interpreter - ; replace the recognizer list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SET_RECOGNIZERS: -000523 ff0f .dw $ff0f -000524 6573 -000525 2d74 -000526 6572 -000527 6f63 -000528 6e67 -000529 7a69 -00052a 7265 -00052b 0073 .db "set-recognizers",0 -00052c 0517 .dw VE_HEAD - .set VE_HEAD = VE_SET_RECOGNIZERS - XT_SET_RECOGNIZERS: -00052d 7001 .dw DO_COLON - PFA_SET_RECOGNIZERS: - .endif -00052e 703d .dw XT_DOLITERAL -00052f 0060 .dw CFG_RECOGNIZERLISTLEN -000530 03ee .dw XT_SET_STACK -000531 7020 .dw XT_EXIT - - .include "words/get-recognizer.asm" - - ; Interpreter - ; Get the current recognizer list - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_GET_RECOGNIZERS: -000532 ff0f .dw $ff0f -000533 6567 -000534 2d74 -000535 6572 -000536 6f63 -000537 6e67 -000538 7a69 -000539 7265 -00053a 0073 .db "get-recognizers",0 -00053b 0523 .dw VE_HEAD - .set VE_HEAD = VE_GET_RECOGNIZERS - XT_GET_RECOGNIZERS: -00053c 7001 .dw DO_COLON - PFA_GET_RECOGNIZERS: - .endif -00053d 703d .dw XT_DOLITERAL -00053e 0060 .dw CFG_RECOGNIZERLISTLEN -00053f 03cd .dw XT_GET_STACK -000540 7020 .dw XT_EXIT - .include "words/code.asm" - - ; Compiler - ; create named entry in the dictionary, XT is the data field - VE_CODE: -000541 ff04 .dw $ff04 -000542 6f63 -000543 6564 .db "code" -000544 0532 .dw VE_HEAD - .set VE_HEAD = VE_CODE - XT_CODE: -000545 7001 .dw DO_COLON - PFA_CODE: -000546 019e .dw XT_DOCREATE -000547 02fe .dw XT_REVEAL -000548 75ae .dw XT_DP -000549 7bab .dw XT_ICELLPLUS -00054a 01cc .dw XT_COMMA -00054b 7020 .dw XT_EXIT - .include "words/end-code.asm" - - ; Compiler - ; finish a code definition - VE_ENDCODE: -00054c ff08 .dw $ff08 -00054d 6e65 -00054e 2d64 -00054f 6f63 -000550 6564 .db "end-code" -000551 0541 .dw VE_HEAD - .set VE_HEAD = VE_ENDCODE - XT_ENDCODE: -000552 7001 .dw DO_COLON - PFA_ENDCODE: -000553 01c1 .dw XT_COMPILE -000554 940c .dw $940c -000555 01c1 .dw XT_COMPILE -000556 7005 .dw DO_NEXT -000557 7020 .dw XT_EXIT - .include "words/marker.asm" - - ; System Value - ; The eeprom address until which MARKER saves and restores the eeprom data. - VE_MARKER: -000558 ff08 .dw $ff08 -000559 6d28 -00055a 7261 -00055b 656b -00055c 2972 .db "(marker)" -00055d 054c .dw VE_HEAD - .set VE_HEAD = VE_MARKER - XT_MARKER: -00055e 706f .dw PFA_DOVALUE1 - PFA_MARKER: -00055f 006c .dw EE_MARKER -000560 7bb4 .dw XT_EDEFERFETCH -000561 7bbe .dw XT_EDEFERSTORE - .include "words/postpone.asm" - - ; Compiler - ; Append the compilation semantics of "name" to the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_POSTPONE: -000562 0008 .dw $0008 -000563 6f70 -000564 7473 -000565 6f70 -000566 656e .db "postpone" -000567 0558 .dw VE_HEAD - .set VE_HEAD = VE_POSTPONE - XT_POSTPONE: -000568 7001 .dw DO_COLON - PFA_POSTPONE: - .endif -000569 79b4 .dw XT_PARSENAME -00056a 7acc .dw XT_FORTHRECOGNIZER -00056b 7ad7 .dw XT_RECOGNIZE -00056c 70b1 .dw XT_DUP -00056d 70ff .dw XT_TO_R -00056e 7bab .dw XT_ICELLPLUS -00056f 7bab .dw XT_ICELLPLUS -000570 73cb .dw XT_FETCHI -000571 702a .dw XT_EXECUTE -000572 70f6 .dw XT_R_FROM -000573 7bab .dw XT_ICELLPLUS -000574 73cb .dw XT_FETCHI -000575 01cc .dw XT_COMMA -000576 7020 .dw XT_EXIT - .endif - .include "words/2r_fetch.asm" - - ; Stack - ; fetch content of TOR - VE_2R_FETCH: -000577 ff03 .dw $ff03 -000578 7232 -000579 0040 .db "2r@",0 -00057a 0562 .dw VE_HEAD - .set VE_HEAD = VE_2R_FETCH - XT_2R_FETCH: -00057b 057c .dw PFA_2R_FETCH - PFA_2R_FETCH: -00057c 939a -00057d 938a savetos -00057e 91ef pop zl -00057f 91ff pop zh -000580 918f pop tosl -000581 919f pop tosh -000582 939f push tosh -000583 938f push tosl -000584 93ff push zh -000585 93ef push zl -000586 939a -000587 938a savetos -000588 01cf movw tosl, zl -000589 940c 7005 jmp_ DO_NEXT - - .set DPSTART = pc - .if(pc>AMFORTH_RO_SEG) - .endif - - .org AMFORTH_RO_SEG - .include "amforth-interpreter.asm" - - - DO_COLON: -007001 93bf push XH -007002 93af push XL ; PUSH IP -007003 01db movw XL, wl -007004 9611 adiw xl, 1 - DO_NEXT: - .if WANT_INTERRUPTS == 1 -007005 14b2 cp isrflag, zerol -007006 f469 brne DO_INTERRUPT - .endif -007007 01fd movw zl, XL ; READ IP -007008 0fee -007009 1fff -00700a 9165 -00700b 9175 readflashcell wl, wh -00700c 9611 adiw XL, 1 ; INC IP - - DO_EXECUTE: -00700d 01fb movw zl, wl -00700e 0fee -00700f 1fff -007010 9105 -007011 9115 readflashcell temp0,temp1 -007012 01f8 movw zl, temp0 -007013 9409 ijmp - - .if WANT_INTERRUPTS == 1 - DO_INTERRUPT: - ; here we deal with interrupts the forth way -007014 939a -007015 938a savetos -007016 2d8b mov tosl, isrflag -007017 2799 clr tosh -007018 24bb clr isrflag -007019 ea62 ldi wl, LOW(XT_ISREXEC) -00701a e774 ldi wh, HIGH(XT_ISREXEC) -00701b cff1 rjmp DO_EXECUTE - .include "dict/nrww.inc" - - ; section together with the forth inner interpreter - - .include "words/exit.asm" - - ; Compiler - ; end of current colon word - VE_EXIT: -00701c ff04 .dw $ff04 -00701d 7865 -00701e 7469 .db "exit" -00701f 0577 .dw VE_HEAD - .set VE_HEAD = VE_EXIT - XT_EXIT: -007020 7021 .dw PFA_EXIT - PFA_EXIT: -007021 91af pop XL -007022 91bf pop XH -007023 cfe1 jmp_ DO_NEXT - .include "words/execute.asm" - - ; System - ; execute XT - VE_EXECUTE: -007024 ff07 .dw $ff07 -007025 7865 -007026 6365 -007027 7475 -007028 0065 .db "execute",0 -007029 701c .dw VE_HEAD - .set VE_HEAD = VE_EXECUTE - XT_EXECUTE: -00702a 702b .dw PFA_EXECUTE - PFA_EXECUTE: -00702b 01bc movw wl, tosl -00702c 9189 -00702d 9199 loadtos -00702e cfde jmp_ DO_EXECUTE - .include "words/dobranch.asm" - - ; System - ; runtime of branch - ;VE_DOBRANCH: - ; .dw $ff08 - ; .db "(branch)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOBRANCH - XT_DOBRANCH: -00702f 7030 .dw PFA_DOBRANCH - PFA_DOBRANCH: -007030 01fd movw zl, XL -007031 0fee -007032 1fff -007033 91a5 -007034 91b5 readflashcell XL,XH -007035 cfcf jmp_ DO_NEXT - .include "words/docondbranch.asm" - - ; System - ; runtime of ?branch - ;VE_DOCONDBRANCH: - ; .dw $ff09 - ; .db "(?branch)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOCONDBRANCH - XT_DOCONDBRANCH: -007036 7037 .dw PFA_DOCONDBRANCH - PFA_DOCONDBRANCH: -007037 2b98 or tosh, tosl -007038 9189 -007039 9199 loadtos -00703a f3a9 brbs 1, PFA_DOBRANCH ; 1 is z flag; if tos is zero (false), do the branch -00703b 9611 adiw XL, 1 -00703c cfc8 jmp_ DO_NEXT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/doliteral.asm" - - ; System - ; runtime of literal - ;VE_DOLITERAL: - ; .dw $ff09 - ; .db "(literal)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOLITERAL - XT_DOLITERAL: -00703d 703e .dw PFA_DOLITERAL - PFA_DOLITERAL: -00703e 939a -00703f 938a savetos -007040 01fd movw zl, xl -007041 0fee -007042 1fff -007043 9185 -007044 9195 readflashcell tosl,tosh -007045 9611 adiw xl, 1 -007046 cfbe jmp_ DO_NEXT - - .include "words/dovariable.asm" - - ; System - ; puts content of parameter field (1 cell) to TOS - ;VE_DOVARIABLE: - ; .dw $ff0a - ; .db "(variable)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOVARIABLE - XT_DOVARIABLE: -007047 7048 .dw PFA_DOVARIABLE - PFA_DOVARIABLE: -007048 939a -007049 938a savetos -00704a 01fb movw zl, wl -00704b 9631 adiw zl,1 -00704c 0fee -00704d 1fff -00704e 9185 -00704f 9195 readflashcell tosl,tosh -007050 cfb4 jmp_ DO_NEXT - .include "words/doconstant.asm" - - ; System - ; place data field address on TOS - ;VE_DOCONSTANT: - ; .dw $ff0a - ; .db "(constant)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOCONSTANT - XT_DOCONSTANT: -007051 7052 .dw PFA_DOCONSTANT - PFA_DOCONSTANT: -007052 939a -007053 938a savetos -007054 01cb movw tosl, wl -007055 9601 adiw tosl, 1 -007056 cfae jmp_ DO_NEXT - .include "words/douser.asm" - - ; System - ; runtime part of user - ;VE_DOUSER: - ; .dw $ff06 - ; .db "(user)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOUSER - XT_DOUSER: -007057 7058 .dw PFA_DOUSER - PFA_DOUSER: -007058 939a -007059 938a savetos -00705a 01fb movw zl, wl -00705b 9631 adiw zl, 1 -00705c 0fee -00705d 1fff -00705e 9185 -00705f 9195 readflashcell tosl,tosh -007060 0d84 add tosl, upl -007061 1d95 adc tosh, uph -007062 cfa2 jmp_ DO_NEXT - .include "words/do-value.asm" - - ; System - ; runtime of value - VE_DOVALUE: -007063 ff07 .dw $ff07 -007064 7628 -007065 6c61 -007066 6575 -007067 0029 .db "(value)", 0 -007068 7024 .dw VE_HEAD - .set VE_HEAD = VE_DOVALUE - XT_DOVALUE: -007069 7001 .dw DO_COLON - PFA_DOVALUE: -00706a 019e .dw XT_DOCREATE -00706b 02fe .dw XT_REVEAL -00706c 01c1 .dw XT_COMPILE -00706d 706f .dw PFA_DOVALUE1 -00706e 7020 .dw XT_EXIT - PFA_DOVALUE1: -00706f 940e 0317 call_ DO_DODOES -007071 70b1 .dw XT_DUP -007072 7bab .dw XT_ICELLPLUS -007073 73cb .dw XT_FETCHI -007074 702a .dw XT_EXECUTE -007075 7020 .dw XT_EXIT - - ; : (value) dup icell+ @i execute ; - .include "words/fetch.asm" - - ; Memory - ; read 1 cell from RAM address - VE_FETCH: -007076 ff01 .dw $ff01 -007077 0040 .db "@",0 -007078 7063 .dw VE_HEAD - .set VE_HEAD = VE_FETCH - XT_FETCH: -007079 707a .dw PFA_FETCH - PFA_FETCH: - .if WANT_UNIFIED == 1 - .endif - PFA_FETCHRAM: -00707a 01fc movw zl, tosl - ; low byte is read before the high byte -00707b 9181 ld tosl, z+ -00707c 9191 ld tosh, z+ -00707d cf87 jmp_ DO_NEXT - .if WANT_UNIFIED == 1 - .endif - .include "words/store.asm" - - ; Memory - ; write n to RAM memory at addr, low byte first - VE_STORE: -00707e ff01 .dw $ff01 -00707f 0021 .db "!",0 -007080 7076 .dw VE_HEAD - .set VE_HEAD = VE_STORE - XT_STORE: -007081 7082 .dw PFA_STORE - PFA_STORE: - .if WANT_UNIFIED == 1 - .endif - PFA_STORERAM: -007082 01fc movw zl, tosl -007083 9189 -007084 9199 loadtos - ; the high byte is written before the low byte -007085 8391 std Z+1, tosh -007086 8380 std Z+0, tosl -007087 9189 -007088 9199 loadtos -007089 cf7b jmp_ DO_NEXT - .if WANT_UNIFIED == 1 - .endif - .include "words/cstore.asm" - - ; Memory - ; store a single byte to RAM address - VE_CSTORE: -00708a ff02 .dw $ff02 -00708b 2163 .db "c!" -00708c 707e .dw VE_HEAD - .set VE_HEAD = VE_CSTORE - XT_CSTORE: -00708d 708e .dw PFA_CSTORE - PFA_CSTORE: -00708e 01fc movw zl, tosl -00708f 9189 -007090 9199 loadtos -007091 8380 st Z, tosl -007092 9189 -007093 9199 loadtos -007094 cf70 jmp_ DO_NEXT - .include "words/cfetch.asm" - - ; Memory - ; fetch a single byte from memory mapped locations - VE_CFETCH: -007095 ff02 .dw $ff02 -007096 4063 .db "c@" -007097 708a .dw VE_HEAD - .set VE_HEAD = VE_CFETCH - XT_CFETCH: -007098 7099 .dw PFA_CFETCH - PFA_CFETCH: -007099 01fc movw zl, tosl -00709a 2799 clr tosh -00709b 8180 ld tosl, Z -00709c cf68 jmp_ DO_NEXT - .include "words/fetch-u.asm" - - ; Memory - ; read 1 cell from USER area - VE_FETCHU: -00709d ff02 .dw $ff02 -00709e 7540 .db "@u" -00709f 7095 .dw VE_HEAD - .set VE_HEAD = VE_FETCHU - XT_FETCHU: -0070a0 7001 .dw DO_COLON - PFA_FETCHU: -0070a1 7302 .dw XT_UP_FETCH -0070a2 719d .dw XT_PLUS -0070a3 7079 .dw XT_FETCH -0070a4 7020 .dw XT_EXIT - .include "words/store-u.asm" - - ; Memory - ; write n to USER area at offset - VE_STOREU: -0070a5 ff02 .dw $ff02 -0070a6 7521 .db "!u" -0070a7 709d .dw VE_HEAD - .set VE_HEAD = VE_STOREU - XT_STOREU: -0070a8 7001 .dw DO_COLON - PFA_STOREU: -0070a9 7302 .dw XT_UP_FETCH -0070aa 719d .dw XT_PLUS -0070ab 7081 .dw XT_STORE -0070ac 7020 .dw XT_EXIT - - ;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/dup.asm" - - ; Stack - ; duplicate TOS - VE_DUP: -0070ad ff03 .dw $ff03 -0070ae 7564 -0070af 0070 .db "dup",0 -0070b0 70a5 .dw VE_HEAD - .set VE_HEAD = VE_DUP - XT_DUP: -0070b1 70b2 .dw PFA_DUP - PFA_DUP: -0070b2 939a -0070b3 938a savetos -0070b4 cf50 jmp_ DO_NEXT - .include "words/qdup.asm" - - ; Stack - ; duplicate TOS if non-zero - VE_QDUP: -0070b5 ff04 .dw $ff04 -0070b6 643f -0070b7 7075 .db "?dup" -0070b8 70ad .dw VE_HEAD - .set VE_HEAD = VE_QDUP - XT_QDUP: -0070b9 70ba .dw PFA_QDUP - PFA_QDUP: -0070ba 2f08 mov temp0, tosl -0070bb 2b09 or temp0, tosh -0070bc f011 breq PFA_QDUP1 -0070bd 939a -0070be 938a savetos - PFA_QDUP1: -0070bf cf45 jmp_ DO_NEXT - .include "words/swap.asm" - - ; Stack - ; swaps the two top level stack cells - VE_SWAP: -0070c0 ff04 .dw $ff04 -0070c1 7773 -0070c2 7061 .db "swap" -0070c3 70b5 .dw VE_HEAD - .set VE_HEAD = VE_SWAP - XT_SWAP: -0070c4 70c5 .dw PFA_SWAP - PFA_SWAP: -0070c5 018c movw temp0, tosl -0070c6 9189 -0070c7 9199 loadtos -0070c8 931a st -Y, temp1 -0070c9 930a st -Y, temp0 -0070ca cf3a jmp_ DO_NEXT - .include "words/over.asm" - - ; Stack - ; Place a copy of x1 on top of the stack - VE_OVER: -0070cb ff04 .dw $ff04 -0070cc 766f -0070cd 7265 .db "over" -0070ce 70c0 .dw VE_HEAD - .set VE_HEAD = VE_OVER - XT_OVER: -0070cf 70d0 .dw PFA_OVER - PFA_OVER: -0070d0 939a -0070d1 938a savetos -0070d2 818a ldd tosl, Y+2 -0070d3 819b ldd tosh, Y+3 - -0070d4 cf30 jmp_ DO_NEXT - .include "words/drop.asm" - - ; Stack - ; drop TOS - VE_DROP: -0070d5 ff04 .dw $ff04 -0070d6 7264 -0070d7 706f .db "drop" -0070d8 70cb .dw VE_HEAD - .set VE_HEAD = VE_DROP - XT_DROP: -0070d9 70da .dw PFA_DROP - PFA_DROP: -0070da 9189 -0070db 9199 loadtos -0070dc cf28 jmp_ DO_NEXT - .include "words/rot.asm" - - ; Stack - ; rotate the three top level cells - VE_ROT: -0070dd ff03 .dw $ff03 -0070de 6f72 -0070df 0074 .db "rot",0 -0070e0 70d5 .dw VE_HEAD - .set VE_HEAD = VE_ROT - XT_ROT: -0070e1 70e2 .dw PFA_ROT - PFA_ROT: -0070e2 018c movw temp0, tosl -0070e3 9129 ld temp2, Y+ -0070e4 9139 ld temp3, Y+ -0070e5 9189 -0070e6 9199 loadtos - -0070e7 933a st -Y, temp3 -0070e8 932a st -Y, temp2 -0070e9 931a st -Y, temp1 -0070ea 930a st -Y, temp0 - -0070eb cf19 jmp_ DO_NEXT - .include "words/nip.asm" - - ; Stack - ; Remove Second of Stack - VE_NIP: -0070ec ff03 .dw $ff03 -0070ed 696e -0070ee 0070 .db "nip",0 -0070ef 70dd .dw VE_HEAD - .set VE_HEAD = VE_NIP - XT_NIP: -0070f0 70f1 .dw PFA_NIP - PFA_NIP: -0070f1 9622 adiw yl, 2 -0070f2 cf12 jmp_ DO_NEXT - ;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/r_from.asm" - - ; Stack - ; move TOR to TOS - VE_R_FROM: -0070f3 ff02 .dw $ff02 -0070f4 3e72 .db "r>" -0070f5 70ec .dw VE_HEAD - .set VE_HEAD = VE_R_FROM - XT_R_FROM: -0070f6 70f7 .dw PFA_R_FROM - PFA_R_FROM: -0070f7 939a -0070f8 938a savetos -0070f9 918f pop tosl -0070fa 919f pop tosh -0070fb cf09 jmp_ DO_NEXT - .include "words/to_r.asm" - - ; Stack - ; move TOS to TOR - VE_TO_R: -0070fc ff02 .dw $ff02 -0070fd 723e .db ">r" -0070fe 70f3 .dw VE_HEAD - .set VE_HEAD = VE_TO_R - XT_TO_R: -0070ff 7100 .dw PFA_TO_R - PFA_TO_R: -007100 939f push tosh -007101 938f push tosl -007102 9189 -007103 9199 loadtos -007104 cf00 jmp_ DO_NEXT - .include "words/r_fetch.asm" - - ; Stack - ; fetch content of TOR - VE_R_FETCH: -007105 ff02 .dw $ff02 -007106 4072 .db "r@" -007107 70fc .dw VE_HEAD - .set VE_HEAD = VE_R_FETCH - XT_R_FETCH: -007108 7109 .dw PFA_R_FETCH - PFA_R_FETCH: -007109 939a -00710a 938a savetos -00710b 918f pop tosl -00710c 919f pop tosh -00710d 939f push tosh -00710e 938f push tosl -00710f cef5 jmp_ DO_NEXT - - - .include "words/not-equal.asm" - - ; Compare - ; true if n1 is not equal to n2 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NOTEQUAL: -007110 ff02 .dw $ff02 -007111 3e3c .db "<>" -007112 7105 .dw VE_HEAD - .set VE_HEAD = VE_NOTEQUAL - XT_NOTEQUAL: -007113 7001 .dw DO_COLON - PFA_NOTEQUAL: - .endif - -007114 7d7f -007115 711a -007116 7020 .DW XT_EQUAL,XT_ZEROEQUAL,XT_EXIT - .include "words/equalzero.asm" - - ; Compare - ; compare with 0 (zero) - VE_ZEROEQUAL: -007117 ff02 .dw $ff02 -007118 3d30 .db "0=" -007119 7110 .dw VE_HEAD - .set VE_HEAD = VE_ZEROEQUAL - XT_ZEROEQUAL: -00711a 711b .dw PFA_ZEROEQUAL - PFA_ZEROEQUAL: -00711b 2b98 or tosh, tosl -00711c f5d1 brne PFA_ZERO1 -00711d c030 rjmp PFA_TRUE1 - .include "words/lesszero.asm" - - ; Compare - ; compare with zero - VE_ZEROLESS: -00711e ff02 .dw $ff02 -00711f 3c30 .db "0<" -007120 7117 .dw VE_HEAD - .set VE_HEAD = VE_ZEROLESS - XT_ZEROLESS: -007121 7122 .dw PFA_ZEROLESS - PFA_ZEROLESS: -007122 fd97 sbrc tosh,7 -007123 c02a rjmp PFA_TRUE1 -007124 c032 rjmp PFA_ZERO1 - .include "words/greaterzero.asm" - - ; Compare - ; true if n1 is greater than 0 - VE_GREATERZERO: -007125 ff02 .dw $ff02 -007126 3e30 .db "0>" -007127 711e .dw VE_HEAD - .set VE_HEAD = VE_GREATERZERO - XT_GREATERZERO: -007128 7129 .dw PFA_GREATERZERO - PFA_GREATERZERO: -007129 1582 cp tosl, zerol -00712a 0593 cpc tosh, zeroh -00712b f15c brlt PFA_ZERO1 -00712c f151 brbs 1, PFA_ZERO1 -00712d c020 rjmp PFA_TRUE1 - .include "words/d-greaterzero.asm" - - ; Compare - ; compares if a double double cell number is greater 0 - VE_DGREATERZERO: -00712e ff03 .dw $ff03 -00712f 3064 -007130 003e .db "d0>",0 -007131 7125 .dw VE_HEAD - .set VE_HEAD = VE_DGREATERZERO - XT_DGREATERZERO: -007132 7133 .dw PFA_DGREATERZERO - PFA_DGREATERZERO: -007133 1582 cp tosl, zerol -007134 0593 cpc tosh, zeroh -007135 9189 -007136 9199 loadtos -007137 0582 cpc tosl, zerol -007138 0593 cpc tosh, zeroh -007139 f0ec brlt PFA_ZERO1 -00713a f0e1 brbs 1, PFA_ZERO1 -00713b c012 rjmp PFA_TRUE1 - .include "words/d-lesszero.asm" - - ; Compare - ; compares if a double double cell number is less than 0 - VE_DXT_ZEROLESS: -00713c ff03 .dw $ff03 -00713d 3064 -00713e 003c .db "d0<",0 -00713f 712e .dw VE_HEAD - .set VE_HEAD = VE_DXT_ZEROLESS - XT_DXT_ZEROLESS: -007140 7141 .dw PFA_DXT_ZEROLESS - PFA_DXT_ZEROLESS: -007141 9622 adiw Y,2 -007142 fd97 sbrc tosh,7 -007143 940c 714e jmp PFA_TRUE1 -007145 940c 7157 jmp PFA_ZERO1 - - .include "words/true.asm" - - ; Arithmetics - ; leaves the value -1 (true) on TOS - VE_TRUE: -007147 ff04 .dw $ff04 -007148 7274 -007149 6575 .db "true" -00714a 713c .dw VE_HEAD - .set VE_HEAD = VE_TRUE - XT_TRUE: -00714b 714c .dw PFA_TRUE - PFA_TRUE: -00714c 939a -00714d 938a savetos - PFA_TRUE1: -00714e ef8f ser tosl -00714f ef9f ser tosh -007150 ceb4 jmp_ DO_NEXT - .include "words/zero.asm" - - ; Arithmetics - ; place a value 0 on TOS - VE_ZERO: -007151 ff01 .dw $ff01 -007152 0030 .db "0",0 -007153 7147 .dw VE_HEAD - .set VE_HEAD = VE_ZERO - XT_ZERO: -007154 7155 .dw PFA_ZERO - PFA_ZERO: -007155 939a -007156 938a savetos - PFA_ZERO1: -007157 01c1 movw tosl, zerol -007158 ceac jmp_ DO_NEXT - .include "words/uless.asm" - - ; Compare - ; true if u1 < u2 (unsigned) - VE_ULESS: -007159 ff02 .dw $ff02 -00715a 3c75 .db "u<" -00715b 7151 .dw VE_HEAD - .set VE_HEAD = VE_ULESS - XT_ULESS: -00715c 715d .dw PFA_ULESS - PFA_ULESS: -00715d 9129 ld temp2, Y+ -00715e 9139 ld temp3, Y+ -00715f 1782 cp tosl, temp2 -007160 0793 cpc tosh, temp3 -007161 f3a8 brlo PFA_ZERO1 -007162 f3a1 brbs 1, PFA_ZERO1 -007163 cfea jmp_ PFA_TRUE1 - .include "words/u-greater.asm" - - ; Compare - ; true if u1 > u2 (unsigned) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UGREATER: -007164 ff02 .dw $ff02 -007165 3e75 .db "u>" -007166 7159 .dw VE_HEAD - .set VE_HEAD = VE_UGREATER - XT_UGREATER: -007167 7001 .dw DO_COLON - PFA_UGREATER: - .endif -007168 70c4 .DW XT_SWAP -007169 715c .dw XT_ULESS -00716a 7020 .dw XT_EXIT - .include "words/less.asm" - - ; Compare - ; true if n1 is less than n2 - VE_LESS: -00716b ff01 .dw $ff01 -00716c 003c .db "<",0 -00716d 7164 .dw VE_HEAD - .set VE_HEAD = VE_LESS - XT_LESS: -00716e 716f .dw PFA_LESS - PFA_LESS: -00716f 9129 ld temp2, Y+ -007170 9139 ld temp3, Y+ -007171 1728 cp temp2, tosl -007172 0739 cpc temp3, tosh - PFA_LESSDONE: -007173 f71c brge PFA_ZERO1 -007174 cfd9 rjmp PFA_TRUE1 - .include "words/greater.asm" - - ; Compare - ; flag is true if n1 is greater than n2 - VE_GREATER: -007175 ff01 .dw $ff01 -007176 003e .db ">",0 -007177 716b .dw VE_HEAD - .set VE_HEAD = VE_GREATER - XT_GREATER: -007178 7179 .dw PFA_GREATER - PFA_GREATER: -007179 9129 ld temp2, Y+ -00717a 9139 ld temp3, Y+ -00717b 1728 cp temp2, tosl -00717c 0739 cpc temp3, tosh - PFA_GREATERDONE: -00717d f2cc brlt PFA_ZERO1 -00717e f2c1 brbs 1, PFA_ZERO1 -00717f cfce rjmp PFA_TRUE1 - - .include "words/log2.asm" - - ; Arithmetics - ; logarithm to base 2 or highest set bitnumber - VE_LOG2: -007180 ff04 .dw $ff04 -007181 6f6c -007182 3267 .db "log2" -007183 7175 .dw VE_HEAD - .set VE_HEAD = VE_LOG2 - XT_LOG2: -007184 7185 .dw PFA_LOG2 - PFA_LOG2: -007185 01fc movw zl, tosl -007186 2799 clr tosh -007187 e180 ldi tosl, 16 - PFA_LOG2_1: -007188 958a dec tosl -007189 f022 brmi PFA_LOG2_2 ; wrong data -00718a 0fee lsl zl -00718b 1fff rol zh -00718c f7d8 brcc PFA_LOG2_1 -00718d ce77 jmp_ DO_NEXT - - PFA_LOG2_2: -00718e 959a dec tosh -00718f ce75 jmp_ DO_NEXT - .include "words/minus.asm" - - ; Arithmetics - ; subtract n2 from n1 - VE_MINUS: -007190 ff01 .dw $ff01 -007191 002d .db "-",0 -007192 7180 .dw VE_HEAD - .set VE_HEAD = VE_MINUS - XT_MINUS: -007193 7194 .dw PFA_MINUS - PFA_MINUS: -007194 9109 ld temp0, Y+ -007195 9119 ld temp1, Y+ -007196 1b08 sub temp0, tosl -007197 0b19 sbc temp1, tosh -007198 01c8 movw tosl, temp0 -007199 ce6b jmp_ DO_NEXT - .include "words/plus.asm" - - ; Arithmetics - ; add n1 and n2 - VE_PLUS: -00719a ff01 .dw $ff01 -00719b 002b .db "+",0 -00719c 7190 .dw VE_HEAD - .set VE_HEAD = VE_PLUS - XT_PLUS: -00719d 719e .dw PFA_PLUS - PFA_PLUS: -00719e 9109 ld temp0, Y+ -00719f 9119 ld temp1, Y+ -0071a0 0f80 add tosl, temp0 -0071a1 1f91 adc tosh, temp1 -0071a2 ce62 jmp_ DO_NEXT - .include "words/mstar.asm" - - ; Arithmetics - ; multiply 2 cells to a double cell - VE_MSTAR: -0071a3 ff02 .dw $ff02 -0071a4 2a6d .db "m*" -0071a5 719a .dw VE_HEAD - .set VE_HEAD = VE_MSTAR - XT_MSTAR: -0071a6 71a7 .dw PFA_MSTAR - PFA_MSTAR: -0071a7 018c movw temp0, tosl -0071a8 9189 -0071a9 9199 loadtos -0071aa 019c movw temp2, tosl - ; high cell ah*bh -0071ab 0231 muls temp3, temp1 -0071ac 0170 movw temp4, r0 - ; low cell al*bl -0071ad 9f20 mul temp2, temp0 -0071ae 01c0 movw tosl, r0 - ; signed ah*bl -0071af 0330 mulsu temp3, temp0 -0071b0 08f3 sbc temp5, zeroh -0071b1 0d90 add tosh, r0 -0071b2 1ce1 adc temp4, r1 -0071b3 1cf3 adc temp5, zeroh - - ; signed al*bh -0071b4 0312 mulsu temp1, temp2 -0071b5 08f3 sbc temp5, zeroh -0071b6 0d90 add tosh, r0 -0071b7 1ce1 adc temp4, r1 -0071b8 1cf3 adc temp5, zeroh - -0071b9 939a -0071ba 938a savetos -0071bb 01c7 movw tosl, temp4 -0071bc ce48 jmp_ DO_NEXT - .include "words/umslashmod.asm" - - ; Arithmetics - ; unsigned division ud / u2 with remainder - VE_UMSLASHMOD: -0071bd ff06 .dw $ff06 -0071be 6d75 -0071bf 6d2f -0071c0 646f .db "um/mod" -0071c1 71a3 .dw VE_HEAD - .set VE_HEAD = VE_UMSLASHMOD - XT_UMSLASHMOD: -0071c2 71c3 .dw PFA_UMSLASHMOD - PFA_UMSLASHMOD: -0071c3 017c movw temp4, tosl - -0071c4 9129 ld temp2, Y+ -0071c5 9139 ld temp3, Y+ - -0071c6 9109 ld temp0, Y+ -0071c7 9119 ld temp1, Y+ - - ;; unsigned 32/16 -> 16r16 divide - - PFA_UMSLASHMODmod: - - ; set loop counter -0071c8 e140 ldi temp6,$10 - - PFA_UMSLASHMODmod_loop: - ; shift left, saving high bit -0071c9 2755 clr temp7 -0071ca 0f00 lsl temp0 -0071cb 1f11 rol temp1 -0071cc 1f22 rol temp2 -0071cd 1f33 rol temp3 -0071ce 1f55 rol temp7 - - ; try subtracting divisor -0071cf 152e cp temp2, temp4 -0071d0 053f cpc temp3, temp5 -0071d1 0552 cpc temp7,zerol - -0071d2 f018 brcs PFA_UMSLASHMODmod_loop_control - - PFA_UMSLASHMODmod_subtract: - ; dividend is large enough - ; do the subtraction for real - ; and set lowest bit -0071d3 9503 inc temp0 -0071d4 192e sub temp2, temp4 -0071d5 093f sbc temp3, temp5 - - PFA_UMSLASHMODmod_loop_control: -0071d6 954a dec temp6 -0071d7 f789 brne PFA_UMSLASHMODmod_loop - - PFA_UMSLASHMODmod_done: - ; put remainder on stack -0071d8 933a st -Y,temp3 -0071d9 932a st -Y,temp2 - - ; put quotient on stack -0071da 01c8 movw tosl, temp0 -0071db ce29 jmp_ DO_NEXT - .include "words/umstar.asm" - - ; Arithmetics - ; multiply 2 unsigned cells to a double cell - VE_UMSTAR: -0071dc ff03 .dw $ff03 -0071dd 6d75 -0071de 002a .db "um*",0 -0071df 71bd .dw VE_HEAD - .set VE_HEAD = VE_UMSTAR - XT_UMSTAR: -0071e0 71e1 .dw PFA_UMSTAR - PFA_UMSTAR: -0071e1 018c movw temp0, tosl -0071e2 9189 -0071e3 9199 loadtos - ; result: (temp3*temp1)* 65536 + (temp3*temp0 + temp1*temp2) * 256 + (temp0 * temp2) - ; low bytes -0071e4 9f80 mul tosl,temp0 -0071e5 01f0 movw zl, r0 -0071e6 2722 clr temp2 -0071e7 2733 clr temp3 - ; middle bytes -0071e8 9f90 mul tosh, temp0 -0071e9 0df0 add zh, r0 -0071ea 1d21 adc temp2, r1 -0071eb 1d33 adc temp3, zeroh - -0071ec 9f81 mul tosl, temp1 -0071ed 0df0 add zh, r0 -0071ee 1d21 adc temp2, r1 -0071ef 1d33 adc temp3, zeroh - -0071f0 9f91 mul tosh, temp1 -0071f1 0d20 add temp2, r0 -0071f2 1d31 adc temp3, r1 -0071f3 01cf movw tosl, zl -0071f4 939a -0071f5 938a savetos -0071f6 01c9 movw tosl, temp2 -0071f7 ce0d jmp_ DO_NEXT - - .include "words/invert.asm" - - ; Arithmetics - ; 1-complement of TOS - VE_INVERT: -0071f8 ff06 .dw $ff06 -0071f9 6e69 -0071fa 6576 -0071fb 7472 .db "invert" -0071fc 71dc .dw VE_HEAD - .set VE_HEAD = VE_INVERT - XT_INVERT: -0071fd 71fe .dw PFA_INVERT - PFA_INVERT: -0071fe 9580 com tosl -0071ff 9590 com tosh -007200 ce04 jmp_ DO_NEXT - .include "words/2slash.asm" - - ; Arithmetics - ; arithmetic shift right - VE_2SLASH: -007201 ff02 .dw $ff02 -007202 2f32 .db "2/" -007203 71f8 .dw VE_HEAD - .set VE_HEAD = VE_2SLASH - XT_2SLASH: -007204 7205 .dw PFA_2SLASH - PFA_2SLASH: -007205 9595 asr tosh -007206 9587 ror tosl -007207 cdfd jmp_ DO_NEXT - .include "words/2star.asm" - - ; Arithmetics - ; arithmetic shift left, filling with zero - VE_2STAR: -007208 ff02 .dw $ff02 -007209 2a32 .db "2*" -00720a 7201 .dw VE_HEAD - .set VE_HEAD = VE_2STAR - XT_2STAR: -00720b 720c .dw PFA_2STAR - PFA_2STAR: -00720c 0f88 lsl tosl -00720d 1f99 rol tosh -00720e cdf6 jmp_ DO_NEXT - .include "words/and.asm" - - ; Logic - ; bitwise and - VE_AND: -00720f ff03 .dw $ff03 -007210 6e61 -007211 0064 .db "and",0 -007212 7208 .dw VE_HEAD - .set VE_HEAD = VE_AND - XT_AND: -007213 7214 .dw PFA_AND - PFA_AND: -007214 9109 ld temp0, Y+ -007215 9119 ld temp1, Y+ -007216 2380 and tosl, temp0 -007217 2391 and tosh, temp1 -007218 cdec jmp_ DO_NEXT - .include "words/or.asm" - - ; Logic - ; logical or - VE_OR: -007219 ff02 .dw $ff02 -00721a 726f .db "or" -00721b 720f .dw VE_HEAD - .set VE_HEAD = VE_OR - XT_OR: -00721c 721d .dw PFA_OR - PFA_OR: -00721d 9109 ld temp0, Y+ -00721e 9119 ld temp1, Y+ -00721f 2b80 or tosl, temp0 -007220 2b91 or tosh, temp1 -007221 cde3 jmp_ DO_NEXT - - .include "words/xor.asm" - - ; Logic - ; exclusive or - VE_XOR: -007222 ff03 .dw $ff03 -007223 6f78 -007224 0072 .db "xor",0 -007225 7219 .dw VE_HEAD - .set VE_HEAD = VE_XOR - XT_XOR: -007226 7227 .dw PFA_XOR - PFA_XOR: -007227 9109 ld temp0, Y+ -007228 9119 ld temp1, Y+ -007229 2780 eor tosl, temp0 -00722a 2791 eor tosh, temp1 -00722b cdd9 jmp_ DO_NEXT - - .include "words/1plus.asm" - - ; Arithmetics - ; optimized increment - VE_1PLUS: -00722c ff02 .dw $ff02 -00722d 2b31 .db "1+" -00722e 7222 .dw VE_HEAD - .set VE_HEAD = VE_1PLUS - XT_1PLUS: -00722f 7230 .dw PFA_1PLUS - PFA_1PLUS: -007230 9601 adiw tosl,1 -007231 cdd3 jmp_ DO_NEXT - .include "words/1minus.asm" - - ; Arithmetics - ; optimized decrement - VE_1MINUS: -007232 ff02 .dw $ff02 -007233 2d31 .db "1-" -007234 722c .dw VE_HEAD - .set VE_HEAD = VE_1MINUS - XT_1MINUS: -007235 7236 .dw PFA_1MINUS - PFA_1MINUS: -007236 9701 sbiw tosl, 1 -007237 cdcd jmp_ DO_NEXT - .include "words/q-negate.asm" - - ; 0< IF NEGATE THEN ; ...a common factor - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QNEGATE: -007238 ff07 .dw $ff07 -007239 6e3f -00723a 6765 -00723b 7461 -../../common\words/q-negate.asm(11): warning: .cseg .db misalignment - padding zero byte -00723c 0065 .db "?negate" -00723d 7232 .dw VE_HEAD - .set VE_HEAD = VE_QNEGATE - XT_QNEGATE: -00723e 7001 .dw DO_COLON - PFA_QNEGATE: - - .endif -00723f 7121 -007240 7036 .DW XT_ZEROLESS,XT_DOCONDBRANCH -007241 7243 DEST(QNEG1) -007242 763f .DW XT_NEGATE -007243 7020 QNEG1: .DW XT_EXIT - .include "words/lshift.asm" - - ; Arithmetics - ; logically shift n1 left n2 times - VE_LSHIFT: -007244 ff06 .dw $ff06 -007245 736c -007246 6968 -007247 7466 .db "lshift" -007248 7238 .dw VE_HEAD - .set VE_HEAD = VE_LSHIFT - XT_LSHIFT: -007249 724a .dw PFA_LSHIFT - PFA_LSHIFT: -00724a 01fc movw zl, tosl -00724b 9189 -00724c 9199 loadtos - PFA_LSHIFT1: -00724d 9731 sbiw zl, 1 -00724e f01a brmi PFA_LSHIFT2 -00724f 0f88 lsl tosl -007250 1f99 rol tosh -007251 cffb rjmp PFA_LSHIFT1 - PFA_LSHIFT2: -007252 cdb2 jmp_ DO_NEXT - - .include "words/rshift.asm" - - ; Arithmetics - ; shift n1 n2-times logically right - VE_RSHIFT: -007253 ff06 .dw $ff06 -007254 7372 -007255 6968 -007256 7466 .db "rshift" -007257 7244 .dw VE_HEAD - .set VE_HEAD = VE_RSHIFT - XT_RSHIFT: -007258 7259 .dw PFA_RSHIFT - PFA_RSHIFT: -007259 01fc movw zl, tosl -00725a 9189 -00725b 9199 loadtos - PFA_RSHIFT1: -00725c 9731 sbiw zl, 1 -00725d f01a brmi PFA_RSHIFT2 -00725e 9596 lsr tosh -00725f 9587 ror tosl -007260 cffb rjmp PFA_RSHIFT1 - PFA_RSHIFT2: -007261 cda3 jmp_ DO_NEXT - - .include "words/plusstore.asm" - - ; Arithmetics - ; add n to content of RAM address a-addr - VE_PLUSSTORE: -007262 ff02 .dw $ff02 -007263 212b .db "+!" -007264 7253 .dw VE_HEAD - .set VE_HEAD = VE_PLUSSTORE - XT_PLUSSTORE: -007265 7266 .dw PFA_PLUSSTORE - PFA_PLUSSTORE: -007266 01fc movw zl, tosl -007267 9189 -007268 9199 loadtos -007269 8120 ldd temp2, Z+0 -00726a 8131 ldd temp3, Z+1 -00726b 0f82 add tosl, temp2 -00726c 1f93 adc tosh, temp3 -00726d 8380 std Z+0, tosl -00726e 8391 std Z+1, tosh -00726f 9189 -007270 9199 loadtos -007271 cd93 jmp_ DO_NEXT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/rpfetch.asm" - - ; Stack - ; current return stack pointer address - VE_RP_FETCH: -007272 ff03 .dw $ff03 -007273 7072 -007274 0040 .db "rp@",0 -007275 7262 .dw VE_HEAD - .set VE_HEAD = VE_RP_FETCH - XT_RP_FETCH: -007276 7277 .dw PFA_RP_FETCH - PFA_RP_FETCH: -007277 939a -007278 938a savetos -007279 b78d in tosl, SPL -00727a b79e in tosh, SPH -00727b cd89 jmp_ DO_NEXT - .include "words/rpstore.asm" - - ; Stack - ; set return stack pointer - VE_RP_STORE: -00727c ff03 .dw $ff03 -00727d 7072 -00727e 0021 .db "rp!",0 -00727f 7272 .dw VE_HEAD - .set VE_HEAD = VE_RP_STORE - XT_RP_STORE: -007280 7281 .dw PFA_RP_STORE - PFA_RP_STORE: -007281 b72f in temp2, SREG -007282 94f8 cli -007283 bf8d out SPL, tosl -007284 bf9e out SPH, tosh -007285 bf2f out SREG, temp2 -007286 9189 -007287 9199 loadtos -007288 cd7c jmp_ DO_NEXT - .include "words/spfetch.asm" - - ; Stack - ; current data stack pointer - VE_SP_FETCH: -007289 ff03 .dw $ff03 -00728a 7073 -00728b 0040 .db "sp@",0 -00728c 727c .dw VE_HEAD - .set VE_HEAD = VE_SP_FETCH - XT_SP_FETCH: -00728d 728e .dw PFA_SP_FETCH - PFA_SP_FETCH: -00728e 939a -00728f 938a savetos -007290 01ce movw tosl, yl -007291 cd73 jmp_ DO_NEXT - .include "words/spstore.asm" - - ; Stack - ; set data stack pointer to addr - VE_SP_STORE: -007292 ff03 .dw $ff03 -007293 7073 -007294 0021 .db "sp!",0 -007295 7289 .dw VE_HEAD - .set VE_HEAD = VE_SP_STORE - XT_SP_STORE: -007296 7297 .dw PFA_SP_STORE - PFA_SP_STORE: -007297 01ec movw yl, tosl -007298 9189 -007299 9199 loadtos -00729a cd6a jmp_ DO_NEXT - - .include "words/dodo.asm" - - ; System - ; runtime of do - ;VE_DODO: - ; .dw $ff04 - ; .db "(do)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DODO - XT_DODO: -00729b 729c .dw PFA_DODO - PFA_DODO: -00729c 9129 ld temp2, Y+ -00729d 9139 ld temp3, Y+ ; limit - PFA_DODO1: -00729e e8e0 ldi zl, $80 -00729f 0f3e add temp3, zl -0072a0 1b82 sub tosl, temp2 -0072a1 0b93 sbc tosh, temp3 - -0072a2 933f push temp3 -0072a3 932f push temp2 ; limit ( --> limit + $8000) -0072a4 939f push tosh -0072a5 938f push tosl ; start -> index ( --> index - (limit - $8000) -0072a6 9189 -0072a7 9199 loadtos -0072a8 cd5c jmp_ DO_NEXT - .include "words/i.asm" - - ; Compiler - ; current loop counter - VE_I: -0072a9 ff01 .dw $FF01 -0072aa 0069 .db "i",0 -0072ab 7292 .dw VE_HEAD - .set VE_HEAD = VE_I - XT_I: -0072ac 72ad .dw PFA_I - PFA_I: -0072ad 939a -0072ae 938a savetos -0072af 918f pop tosl -0072b0 919f pop tosh ; index -0072b1 91ef pop zl -0072b2 91ff pop zh ; limit -0072b3 93ff push zh -0072b4 93ef push zl -0072b5 939f push tosh -0072b6 938f push tosl -0072b7 0f8e add tosl, zl -0072b8 1f9f adc tosh, zh -0072b9 cd4b jmp_ DO_NEXT - .include "words/doplusloop.asm" - - ; System - ; runtime of +loop - ;VE_DOPLUSLOOP: - ; .dw $ff07 - ; .db "(+loop)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOPLUSLOOP - XT_DOPLUSLOOP: -0072ba 72bb .dw PFA_DOPLUSLOOP - PFA_DOPLUSLOOP: -0072bb 91ef pop zl -0072bc 91ff pop zh -0072bd 0fe8 add zl, tosl -0072be 1ff9 adc zh, tosh -0072bf 9189 -0072c0 9199 loadtos -0072c1 f01b brvs PFA_DOPLUSLOOP_LEAVE - ; next cycle - PFA_DOPLUSLOOP_NEXT: - ; next iteration -0072c2 93ff push zh -0072c3 93ef push zl -0072c4 cd6b rjmp PFA_DOBRANCH ; read next cell from dictionary and jump to its destination - PFA_DOPLUSLOOP_LEAVE: -0072c5 910f pop temp0 -0072c6 911f pop temp1 ; remove limit -0072c7 9611 adiw xl, 1 ; skip branch-back address -0072c8 cd3c jmp_ DO_NEXT - .include "words/doloop.asm" - - ; System - ; runtime of loop - ;VE_DOLOOP: - ; .dw $ff06 - ; .db "(loop)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOLOOP - XT_DOLOOP: -0072c9 72ca .dw PFA_DOLOOP - PFA_DOLOOP: -0072ca 91ef pop zl -0072cb 91ff pop zh -0072cc 9631 adiw zl,1 -0072cd f3bb brvs PFA_DOPLUSLOOP_LEAVE -0072ce cff3 jmp_ PFA_DOPLUSLOOP_NEXT - .include "words/unloop.asm" - - ; Compiler - ; remove loop-sys, exit the loop and continue execution after it - VE_UNLOOP: -0072cf ff06 .dw $ff06 -0072d0 6e75 -0072d1 6f6c -0072d2 706f .db "unloop" -0072d3 72a9 .dw VE_HEAD - .set VE_HEAD = VE_UNLOOP - XT_UNLOOP: -0072d4 72d5 .dw PFA_UNLOOP - PFA_UNLOOP: -0072d5 911f pop temp1 -0072d6 910f pop temp0 -0072d7 911f pop temp1 -0072d8 910f pop temp0 -0072d9 cd2b jmp_ DO_NEXT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;; - - .include "words/cmove_g.asm" - - ; Memory - ; copy data in RAM from higher to lower addresses. - VE_CMOVE_G: -0072da ff06 .dw $ff06 -0072db 6d63 -0072dc 766f -0072dd 3e65 .db "cmove>" -0072de 72cf .dw VE_HEAD - .set VE_HEAD = VE_CMOVE_G - XT_CMOVE_G: -0072df 72e0 .dw PFA_CMOVE_G - PFA_CMOVE_G: -0072e0 93bf push xh -0072e1 93af push xl -0072e2 91e9 ld zl, Y+ -0072e3 91f9 ld zh, Y+ ; addr-to -0072e4 91a9 ld xl, Y+ -0072e5 91b9 ld xh, Y+ ; addr-from -0072e6 2f09 mov temp0, tosh -0072e7 2b08 or temp0, tosl -0072e8 f041 brbs 1, PFA_CMOVE_G1 -0072e9 0fe8 add zl, tosl -0072ea 1ff9 adc zh, tosh -0072eb 0fa8 add xl, tosl -0072ec 1fb9 adc xh, tosh - PFA_CMOVE_G2: -0072ed 911e ld temp1, -X -0072ee 9312 st -Z, temp1 -0072ef 9701 sbiw tosl, 1 -0072f0 f7e1 brbc 1, PFA_CMOVE_G2 - PFA_CMOVE_G1: -0072f1 91af pop xl -0072f2 91bf pop xh -0072f3 9189 -0072f4 9199 loadtos -0072f5 cd0f jmp_ DO_NEXT - .include "words/byteswap.asm" - - ; Arithmetics - ; exchange the bytes of the TOS - VE_BYTESWAP: -0072f6 ff02 .dw $ff02 -0072f7 3c3e .db "><" -0072f8 72da .dw VE_HEAD - .set VE_HEAD = VE_BYTESWAP - XT_BYTESWAP: -0072f9 72fa .dw PFA_BYTESWAP - PFA_BYTESWAP: -0072fa 2f09 mov temp0, tosh -0072fb 2f98 mov tosh, tosl -0072fc 2f80 mov tosl, temp0 -0072fd cd07 jmp_ DO_NEXT - .include "words/up.asm" - - ; System Variable - ; get user area pointer - VE_UP_FETCH: -0072fe ff03 .dw $ff03 -0072ff 7075 -007300 0040 .db "up@",0 -007301 72f6 .dw VE_HEAD - .set VE_HEAD = VE_UP_FETCH - XT_UP_FETCH: -007302 7303 .dw PFA_UP_FETCH - PFA_UP_FETCH: -007303 939a -007304 938a savetos -007305 01c2 movw tosl, upl -007306 ccfe jmp_ DO_NEXT - - ; ( addr -- ) - ; System Variable - ; set user area pointer - VE_UP_STORE: -007307 ff03 .dw $ff03 -007308 7075 -007309 0021 .db "up!",0 -00730a 72fe .dw VE_HEAD - .set VE_HEAD = VE_UP_STORE - XT_UP_STORE: -00730b 730c .dw PFA_UP_STORE - PFA_UP_STORE: -00730c 012c movw upl, tosl -00730d 9189 -00730e 9199 loadtos -00730f ccf5 jmp_ DO_NEXT - .include "words/1ms.asm" - - ; Time - ; busy waits (almost) exactly 1 millisecond - VE_1MS: -007310 ff03 .dw $ff03 -007311 6d31 -007312 0073 .db "1ms",0 -007313 7307 .dw VE_HEAD - .set VE_HEAD = VE_1MS - XT_1MS: -007314 7315 .dw PFA_1MS - PFA_1MS: -007315 eae0 -007316 e0ff -007317 9731 -007318 f7f1 delay 1000 -007319 cceb jmp_ DO_NEXT - .include "words/2to_r.asm" - - ; Stack - ; move DTOS to TOR - VE_2TO_R: -00731a ff03 .dw $ff03 -00731b 3e32 -00731c 0072 .db "2>r",0 -00731d 7310 .dw VE_HEAD - .set VE_HEAD = VE_2TO_R - XT_2TO_R: -00731e 731f .dw PFA_2TO_R - PFA_2TO_R: -00731f 01fc movw zl, tosl -007320 9189 -007321 9199 loadtos -007322 939f push tosh -007323 938f push tosl -007324 93ff push zh -007325 93ef push zl -007326 9189 -007327 9199 loadtos -007328 ccdc jmp_ DO_NEXT - .include "words/2r_from.asm" - - ; Stack - ; move DTOR to TOS - VE_2R_FROM: -007329 ff03 .dw $ff03 -00732a 7232 -00732b 003e .db "2r>",0 -00732c 731a .dw VE_HEAD - .set VE_HEAD = VE_2R_FROM - XT_2R_FROM: -00732d 732e .dw PFA_2R_FROM - PFA_2R_FROM: -00732e 939a -00732f 938a savetos -007330 91ef pop zl -007331 91ff pop zh -007332 918f pop tosl -007333 919f pop tosh -007334 939a -007335 938a savetos -007336 01cf movw tosl, zl -007337 cccd jmp_ DO_NEXT - - .include "words/store-e.asm" - - ; Memory - ; write n (2bytes) to eeprom address - VE_STOREE: -007338 ff02 .dw $ff02 -007339 6521 .db "!e" -00733a 7329 .dw VE_HEAD - .set VE_HEAD = VE_STOREE - XT_STOREE: -00733b 733c .dw PFA_STOREE - PFA_STOREE: - .if WANT_UNIFIED == 1 - .endif - PFA_STOREE0: -00733c 01fc movw zl, tosl -00733d 9189 -00733e 9199 loadtos -00733f b72f in_ temp2, SREG -007340 94f8 cli -007341 d028 rcall PFA_FETCHE2 -007342 b500 in_ temp0, EEDR -007343 1708 cp temp0,tosl -007344 f009 breq PFA_STOREE3 -007345 d00b rcall PFA_STOREE1 - PFA_STOREE3: -007346 9631 adiw zl,1 -007347 d022 rcall PFA_FETCHE2 -007348 b500 in_ temp0, EEDR -007349 1709 cp temp0,tosh -00734a f011 breq PFA_STOREE4 -00734b 2f89 mov tosl, tosh -00734c d004 rcall PFA_STOREE1 - PFA_STOREE4: -00734d bf2f out_ SREG, temp2 -00734e 9189 -00734f 9199 loadtos -007350 ccb4 jmp_ DO_NEXT - - PFA_STOREE1: -007351 99f9 sbic EECR, EEPE -007352 cffe rjmp PFA_STOREE1 - - PFA_STOREE2: ; estore_wait_low_spm: -007353 b707 in_ temp0, SPMCSR -007354 fd00 sbrc temp0,SPMEN -007355 cffd rjmp PFA_STOREE2 - -007356 bdf2 out_ EEARH,zh -007357 bde1 out_ EEARL,zl -007358 bd80 out_ EEDR, tosl -007359 9afa sbi EECR,EEMPE -00735a 9af9 sbi EECR,EEPE - -00735b 9508 ret - .if WANT_UNIFIED == 1 - .endif - .include "words/fetch-e.asm" - - ; Memory - ; read 1 cell from eeprom - VE_FETCHE: -00735c ff02 .dw $ff02 -00735d 6540 .db "@e" -00735e 7338 .dw VE_HEAD - .set VE_HEAD = VE_FETCHE - XT_FETCHE: -00735f 7360 .dw PFA_FETCHE - PFA_FETCHE: - .if WANT_UNIFIED == 1 - .endif - PFA_FETCHE1: -007360 b72f in_ temp2, SREG -007361 94f8 cli -007362 01fc movw zl, tosl -007363 d006 rcall PFA_FETCHE2 -007364 b580 in_ tosl, EEDR - -007365 9631 adiw zl,1 - -007366 d003 rcall PFA_FETCHE2 -007367 b590 in_ tosh, EEDR -007368 bf2f out_ SREG, temp2 -007369 cc9b jmp_ DO_NEXT - - PFA_FETCHE2: -00736a 99f9 sbic EECR, EEPE -00736b cffe rjmp PFA_FETCHE2 - -00736c bdf2 out_ EEARH,zh -00736d bde1 out_ EEARL,zl - -00736e 9af8 sbi EECR,EERE -00736f 9508 ret - - .if WANT_UNIFIED == 1 - .endif - .include "words/store-i.asm" - - ; System Value - ; Deferred action to write a single 16bit cell to flash - VE_STOREI: -007370 ff02 .dw $ff02 -007371 6921 .db "!i" -007372 735c .dw VE_HEAD - .set VE_HEAD = VE_STOREI - XT_STOREI: -007373 7c13 .dw PFA_DODEFER1 - PFA_STOREI: -007374 006a .dw EE_STOREI -007375 7bb4 .dw XT_EDEFERFETCH -007376 7bbe .dw XT_EDEFERSTORE - .if FLASHEND > $10000 - .else - .include "words/store-i_nrww.asm" - - ; Memory - ; writes n to flash memory using assembly code (code to be placed in boot loader section) - VE_DO_STOREI_NRWW: -007377 ff09 .dw $ff09 -007378 2128 -007379 2d69 -00737a 726e -00737b 7777 -00737c 0029 .db "(!i-nrww)",0 -00737d 7370 .dw VE_HEAD - .set VE_HEAD = VE_DO_STOREI_NRWW - XT_DO_STOREI: -00737e 737f .dw PFA_DO_STOREI_NRWW - PFA_DO_STOREI_NRWW: - ; store status register -00737f b71f in temp1,SREG -007380 931f push temp1 -007381 94f8 cli - -007382 019c movw temp2, tosl ; save the (word) address -007383 9189 -007384 9199 loadtos ; get the new value for the flash cell -007385 93af push xl -007386 93bf push xh -007387 93cf push yl -007388 93df push yh -007389 d009 rcall DO_STOREI_atmega -00738a 91df pop yh -00738b 91cf pop yl -00738c 91bf pop xh -00738d 91af pop xl - ; finally clear the stack -00738e 9189 -00738f 9199 loadtos -007390 911f pop temp1 - ; restore status register (and interrupt enable flag) -007391 bf1f out SREG,temp1 - -007392 cc72 jmp_ DO_NEXT - - ; - DO_STOREI_atmega: - ; write data to temp page buffer - ; use the values in tosl/tosh at the - ; appropiate place -007393 d010 rcall pageload - - ; erase page if needed - ; it is needed if a bit goes from 0 to 1 -007394 94e0 com temp4 -007395 94f0 com temp5 -007396 218e and tosl, temp4 -007397 219f and tosh, temp5 -007398 2b98 or tosh, tosl -007399 f019 breq DO_STOREI_writepage -00739a 01f9 movw zl, temp2 -00739b e002 ldi temp0,(1<8000 - .include "dict/core_8k.inc" - - .include "words/n_to_r.asm" - - ; Stack - ; move n items from data stack to return stack - VE_N_TO_R: -0073d2 ff03 .dw $ff03 -0073d3 3e6e -0073d4 0072 .db "n>r",0 -0073d5 73c8 .dw VE_HEAD - .set VE_HEAD = VE_N_TO_R - XT_N_TO_R: -0073d6 73d7 .dw PFA_N_TO_R - PFA_N_TO_R: -0073d7 01fc movw zl, tosl -0073d8 2f08 mov temp0, tosl - PFA_N_TO_R1: -0073d9 9189 -0073da 9199 loadtos -0073db 939f push tosh -0073dc 938f push tosl -0073dd 950a dec temp0 -0073de f7d1 brne PFA_N_TO_R1 -0073df 93ef push zl -0073e0 93ff push zh -0073e1 9189 -0073e2 9199 loadtos -0073e3 cc21 jmp_ DO_NEXT - .include "words/n_r_from.asm" - - ; Stack - ; move n items from return stack to data stack - VE_N_R_FROM: -0073e4 ff03 .dw $ff03 -0073e5 726e -0073e6 003e .db "nr>",0 -0073e7 73d2 .dw VE_HEAD - .set VE_HEAD = VE_N_R_FROM - XT_N_R_FROM: -0073e8 73e9 .dw PFA_N_R_FROM - PFA_N_R_FROM: -0073e9 939a -0073ea 938a savetos -0073eb 91ff pop zh -0073ec 91ef pop zl -0073ed 2f0e mov temp0, zl - PFA_N_R_FROM1: -0073ee 918f pop tosl -0073ef 919f pop tosh -0073f0 939a -0073f1 938a savetos -0073f2 950a dec temp0 -0073f3 f7d1 brne PFA_N_R_FROM1 -0073f4 01cf movw tosl, zl -0073f5 cc0f jmp_ DO_NEXT - - .include "words/d-2star.asm" - - ; Arithmetics - ; shift a double cell left - VE_D2STAR: -0073f6 ff03 .dw $ff03 -0073f7 3264 -0073f8 002a .db "d2*",0 -0073f9 73e4 .dw VE_HEAD - .set VE_HEAD = VE_D2STAR - XT_D2STAR: -0073fa 73fb .dw PFA_D2STAR - PFA_D2STAR: -0073fb 9109 ld temp0, Y+ -0073fc 9119 ld temp1, Y+ -0073fd 0f00 lsl temp0 -0073fe 1f11 rol temp1 -0073ff 1f88 rol tosl -007400 1f99 rol tosh -007401 931a st -Y, temp1 -007402 930a st -Y, temp0 -007403 cc01 jmp_ DO_NEXT - .include "words/d-2slash.asm" - - ; Arithmetics - ; shift a double cell value right - VE_D2SLASH: -007404 ff03 .dw $ff03 -007405 3264 -007406 002f .db "d2/",0 -007407 73f6 .dw VE_HEAD - .set VE_HEAD = VE_D2SLASH - XT_D2SLASH: -007408 7409 .dw PFA_D2SLASH - PFA_D2SLASH: -007409 9109 ld temp0, Y+ -00740a 9119 ld temp1, Y+ -00740b 9595 asr tosh -00740c 9587 ror tosl -00740d 9517 ror temp1 -00740e 9507 ror temp0 -00740f 931a st -Y, temp1 -007410 930a st -Y, temp0 -007411 cbf3 jmp_ DO_NEXT - .include "words/d-plus.asm" - - ; Arithmetics - ; add 2 double cell values - VE_DPLUS: -007412 ff02 .dw $ff02 -007413 2b64 .db "d+" -007414 7404 .dw VE_HEAD - .set VE_HEAD = VE_DPLUS - XT_DPLUS: -007415 7416 .dw PFA_DPLUS - PFA_DPLUS: -007416 9129 ld temp2, Y+ -007417 9139 ld temp3, Y+ - -007418 90e9 ld temp4, Y+ -007419 90f9 ld temp5, Y+ -00741a 9149 ld temp6, Y+ -00741b 9159 ld temp7, Y+ - -00741c 0f24 add temp2, temp6 -00741d 1f35 adc temp3, temp7 -00741e 1d8e adc tosl, temp4 -00741f 1d9f adc tosh, temp5 - -007420 933a st -Y, temp3 -007421 932a st -Y, temp2 -007422 cbe2 jmp_ DO_NEXT - .include "words/d-minus.asm" - - ; Arithmetics - ; subtract d2 from d1 - VE_DMINUS: -007423 ff02 .dw $ff02 -007424 2d64 .db "d-" -007425 7412 .dw VE_HEAD - .set VE_HEAD = VE_DMINUS - XT_DMINUS: -007426 7427 .dw PFA_DMINUS - PFA_DMINUS: -007427 9129 ld temp2, Y+ -007428 9139 ld temp3, Y+ - -007429 90e9 ld temp4, Y+ -00742a 90f9 ld temp5, Y+ -00742b 9149 ld temp6, Y+ -00742c 9159 ld temp7, Y+ - -00742d 1b42 sub temp6, temp2 -00742e 0b53 sbc temp7, temp3 -00742f 0ae8 sbc temp4, tosl -007430 0af9 sbc temp5, tosh - -007431 935a st -Y, temp7 -007432 934a st -Y, temp6 -007433 01c7 movw tosl, temp4 -007434 cbd0 jmp_ DO_NEXT - .include "words/d-invert.asm" - - ; Arithmetics - ; invert all bits in the double cell value - VE_DINVERT: -007435 ff07 .dw $ff07 -007436 6964 -007437 766e -007438 7265 -007439 0074 .db "dinvert",0 -00743a 7423 .dw VE_HEAD - .set VE_HEAD = VE_DINVERT - XT_DINVERT: -00743b 743c .dw PFA_DINVERT - PFA_DINVERT: -00743c 9109 ld temp0, Y+ -00743d 9119 ld temp1, Y+ -00743e 9580 com tosl -00743f 9590 com tosh -007440 9500 com temp0 -007441 9510 com temp1 -007442 931a st -Y, temp1 -007443 930a st -Y, temp0 -007444 cbc0 jmp_ DO_NEXT - .include "words/u-dot.asm" - - ; Numeric IO - ; unsigned PNO with single cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDOT: -007445 ff02 .dw $ff02 -007446 2e75 .db "u." -007447 7435 .dw VE_HEAD - .set VE_HEAD = VE_UDOT - XT_UDOT: -007448 7001 .dw DO_COLON - PFA_UDOT: - .endif -007449 7154 .dw XT_ZERO -00744a 772a .dw XT_UDDOT -00744b 7020 .dw XT_EXIT - ; : u. ( us -- ) 0 ud. ; - .include "words/u-dot-r.asm" - - ; Numeric IO - ; unsigned PNO with single cells numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_UDOTR: -00744c ff03 .dw $ff03 -00744d 2e75 -00744e 0072 .db "u.r",0 -00744f 7445 .dw VE_HEAD - .set VE_HEAD = VE_UDOTR - XT_UDOTR: -007450 7001 .dw DO_COLON - PFA_UDOTR: - .endif -007451 7154 .dw XT_ZERO -007452 70c4 .dw XT_SWAP -007453 7733 .dw XT_UDDOTR -007454 7020 .dw XT_EXIT - ; : u.r ( s n -- ) 0 swap ud.r ; - - .include "words/show-wordlist.asm" - - ; Tools - ; prints the name of the words in a wordlist - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SHOWWORDLIST: -007455 ff0d .dw $ff0d -007456 6873 -007457 776f -007458 772d -007459 726f -00745a 6c64 -00745b 7369 -00745c 0074 .db "show-wordlist",0 -00745d 744c .dw VE_HEAD - .set VE_HEAD = VE_SHOWWORDLIST - XT_SHOWWORDLIST: -00745e 7001 .dw DO_COLON - PFA_SHOWWORDLIST: - .endif -00745f 703d .dw XT_DOLITERAL -007460 7464 .dw XT_SHOWWORD -007461 70c4 .dw XT_SWAP -007462 7c57 .dw XT_TRAVERSEWORDLIST -007463 7020 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_SHOWWORD: -007464 7001 .dw DO_COLON - PFA_SHOWWORD: - .endif -007465 7c72 .dw XT_NAME2STRING -007466 77a0 .dw XT_ITYPE -007467 77e2 .dw XT_SPACE ; ( -- addr n) -007468 714b .dw XT_TRUE -007469 7020 .dw XT_EXIT - .include "words/words.asm" - - ; Tools - ; prints a list of all (visible) words in the dictionary - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_WORDS: -00746a ff05 .dw $ff05 -00746b 6f77 -00746c 6472 -00746d 0073 .db "words",0 -00746e 7455 .dw VE_HEAD - .set VE_HEAD = VE_WORDS - XT_WORDS: -00746f 7001 .dw DO_COLON - PFA_WORDS: - .endif -007470 703d .dw XT_DOLITERAL -007471 0050 .dw CFG_ORDERLISTLEN+2 -007472 735f .dw XT_FETCHE -007473 745e .dw XT_SHOWWORDLIST -007474 7020 .dw XT_EXIT - .include "dict/interrupt.inc" - - .if WANT_INTERRUPTS == 1 - - .if WANT_INTERRUPT_COUNTERS == 1 - .endif - - .include "words/int-on.asm" - - ; Interrupt - ; turns on all interrupts - VE_INTON: -007475 ff04 .dw $ff04 -007476 692b -007477 746e .db "+int" -007478 746a .dw VE_HEAD - .set VE_HEAD = VE_INTON - XT_INTON: -007479 747a .dw PFA_INTON - PFA_INTON: -00747a 9478 sei -00747b cb89 jmp_ DO_NEXT - .include "words/int-off.asm" - - ; Interrupt - ; turns off all interrupts - VE_INTOFF: -00747c ff04 .dw $ff04 -00747d 692d -00747e 746e .db "-int" -00747f 7475 .dw VE_HEAD - .set VE_HEAD = VE_INTOFF - XT_INTOFF: -007480 7481 .dw PFA_INTOFF - PFA_INTOFF: -007481 94f8 cli -007482 cb82 jmp_ DO_NEXT - .include "words/int-store.asm" - - ; Interrupt - ; stores XT as interrupt vector i - VE_INTSTORE: -007483 ff04 .dw $ff04 -007484 6e69 -007485 2174 .db "int!" -007486 747c .dw VE_HEAD - .set VE_HEAD = VE_INTSTORE - XT_INTSTORE: -007487 7001 .dw DO_COLON - PFA_INTSTORE: -007488 703d .dw XT_DOLITERAL -007489 0000 .dw intvec -00748a 719d .dw XT_PLUS -00748b 733b .dw XT_STOREE -00748c 7020 .dw XT_EXIT - .include "words/int-fetch.asm" - - ; Interrupt - ; fetches XT from interrupt vector i - VE_INTFETCH: -00748d ff04 .dw $ff04 -00748e 6e69 -00748f 4074 .db "int@" -007490 7483 .dw VE_HEAD - .set VE_HEAD = VE_INTFETCH - XT_INTFETCH: -007491 7001 .dw DO_COLON - PFA_INTFETCH: -007492 703d .dw XT_DOLITERAL -007493 0000 .dw intvec -007494 719d .dw XT_PLUS -007495 735f .dw XT_FETCHE -007496 7020 .dw XT_EXIT - .include "words/int-trap.asm" - - ; Interrupt - ; trigger an interrupt - VE_INTTRAP: -007497 ff08 .dw $ff08 -007498 6e69 -007499 2d74 -00749a 7274 -00749b 7061 .db "int-trap" -00749c 748d .dw VE_HEAD - .set VE_HEAD = VE_INTTRAP - XT_INTTRAP: -00749d 749e .dw PFA_INTTRAP - PFA_INTTRAP: -00749e 2eb8 mov isrflag, tosl -00749f 9189 -0074a0 9199 loadtos -0074a1 cb63 jmp_ DO_NEXT - - .include "words/isr-exec.asm" - - ; Interrupt - ; executes an interrupt service routine - ;VE_ISREXEC: - ; .dw $ff08 - ; .db "isr-exec" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_ISREXEC - XT_ISREXEC: -0074a2 7001 .dw DO_COLON - PFA_ISREXEC: -0074a3 7491 .dw XT_INTFETCH -0074a4 702a .dw XT_EXECUTE -0074a5 74a7 .dw XT_ISREND -0074a6 7020 .dw XT_EXIT - .include "words/isr-end.asm" - - ; Interrupt - ; re-enables interrupts in an ISR - ;VE_ISREND: - ; .dw $ff07 - ; .db "isr-end",0 - ; .dw VE_HEAD - ; .set VE_HEAD = VE_ISREND - XT_ISREND: -0074a7 74a8 .dw PFA_ISREND - PFA_ISREND: -0074a8 d001 rcall PFA_ISREND1 ; clear the interrupt flag for the controller -0074a9 cb5b jmp_ DO_NEXT - PFA_ISREND1: -0074aa 9518 reti - .endif - - .include "words/pick.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PICK: -0074ab ff04 .dw $ff04 -0074ac 6970 -0074ad 6b63 .db "pick" -0074ae 7497 .dw VE_HEAD - .set VE_HEAD = VE_PICK - XT_PICK: -0074af 7001 .dw DO_COLON - PFA_PICK: - .endif -0074b0 722f .dw XT_1PLUS -0074b1 7558 .dw XT_CELLS -0074b2 728d .dw XT_SP_FETCH -0074b3 719d .dw XT_PLUS -0074b4 7079 .dw XT_FETCH -0074b5 7020 .dw XT_EXIT - .include "words/dot-quote.asm" - - ; Compiler - ; compiles string into dictionary to be printed at runtime - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_DOTSTRING: -0074b6 0002 .dw $0002 -0074b7 222e .db ".",$22 -0074b8 74ab .dw VE_HEAD - .set VE_HEAD = VE_DOTSTRING - XT_DOTSTRING: -0074b9 7001 .dw DO_COLON - PFA_DOTSTRING: - .endif -0074ba 74c1 .dw XT_SQUOTE -0074bb 01c1 .dw XT_COMPILE -0074bc 77a0 .dw XT_ITYPE -0074bd 7020 .dw XT_EXIT - .include "words/squote.asm" - - ; Compiler - ; compiles a string to flash, at runtime leaves ( -- flash-addr count) on stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SQUOTE: -0074be 0002 .dw $0002 -0074bf 2273 .db "s",$22 -0074c0 74b6 .dw VE_HEAD - .set VE_HEAD = VE_SQUOTE - XT_SQUOTE: -0074c1 7001 .dw DO_COLON - PFA_SQUOTE: - .endif -0074c2 703d .dw XT_DOLITERAL -0074c3 0022 .dw 34 ; 0x22 -0074c4 7987 .dw XT_PARSE ; ( -- addr n) -0074c5 754b .dw XT_STATE -0074c6 7079 .dw XT_FETCH -0074c7 7036 .dw XT_DOCONDBRANCH -0074c8 74ca DEST(PFA_SQUOTE1) -0074c9 01ed .dw XT_SLITERAL - PFA_SQUOTE1: -0074ca 7020 .dw XT_EXIT - - .include "words/fill.asm" - - ; Memory - ; fill u bytes memory beginning at a-addr with character c - VE_FILL: -0074cb ff04 .dw $ff04 -0074cc 6966 -0074cd 6c6c .db "fill" -0074ce 74be .dw VE_HEAD - .set VE_HEAD = VE_FILL - XT_FILL: -0074cf 7001 .dw DO_COLON - PFA_FILL: -0074d0 70e1 .dw XT_ROT -0074d1 70e1 .dw XT_ROT -0074d2 70b9 -0074d3 7036 .dw XT_QDUP,XT_DOCONDBRANCH -0074d4 74dc DEST(PFA_FILL2) -0074d5 7d5e .dw XT_BOUNDS -0074d6 729b .dw XT_DODO - PFA_FILL1: -0074d7 70b1 .dw XT_DUP -0074d8 72ac .dw XT_I -0074d9 708d .dw XT_CSTORE ; ( -- c c-addr) -0074da 72c9 .dw XT_DOLOOP -0074db 74d7 .dw PFA_FILL1 - PFA_FILL2: -0074dc 70d9 .dw XT_DROP -0074dd 7020 .dw XT_EXIT - - .include "words/environment.asm" - - ; System Value - ; word list identifier of the environmental search list - VE_ENVIRONMENT: -0074de ff0b .dw $ff0b -0074df 6e65 -0074e0 6976 -0074e1 6f72 -0074e2 6d6e -0074e3 6e65 -0074e4 0074 .db "environment",0 -0074e5 74cb .dw VE_HEAD - .set VE_HEAD = VE_ENVIRONMENT - XT_ENVIRONMENT: -0074e6 7048 .dw PFA_DOVARIABLE - PFA_ENVIRONMENT: -0074e7 0048 .dw CFG_ENVIRONMENT - .include "words/env-wordlists.asm" - - ; Environment - ; maximum number of wordlists in the dictionary search order - VE_ENVWORDLISTS: -0074e8 ff09 .dw $ff09 -0074e9 6f77 -0074ea 6472 -0074eb 696c -0074ec 7473 -0074ed 0073 .db "wordlists",0 -0074ee 0000 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVWORDLISTS - XT_ENVWORDLISTS: -0074ef 7001 .dw DO_COLON - PFA_ENVWORDLISTS: -0074f0 703d .dw XT_DOLITERAL -0074f1 0008 .dw NUMWORDLISTS -0074f2 7020 .dw XT_EXIT - .include "words/env-slashpad.asm" - - ; Environment - ; Size of the PAD buffer in bytes - VE_ENVSLASHPAD: -0074f3 ff04 .dw $ff04 -0074f4 702f -0074f5 6461 .db "/pad" -0074f6 74e8 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVSLASHPAD - XT_ENVSLASHPAD: -0074f7 7001 .dw DO_COLON - PFA_ENVSLASHPAD: -0074f8 728d .dw XT_SP_FETCH -0074f9 7584 .dw XT_PAD -0074fa 7193 .dw XT_MINUS -0074fb 7020 .dw XT_EXIT - .include "words/env-slashhold.asm" - - ; Environment - ; size of the pictured numeric output buffer in bytes - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENVSLASHHOLD: -0074fc ff05 .dw $ff05 -0074fd 682f -0074fe 6c6f -0074ff 0064 .db "/hold",0 -007500 74f3 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVSLASHHOLD - XT_ENVSLASHHOLD: -007501 7001 .dw DO_COLON - PFA_ENVSLASHHOLD: - .endif -007502 7584 .dw XT_PAD -007503 75bf .dw XT_HERE -007504 7193 .dw XT_MINUS -007505 7020 .dw XT_EXIT - .include "words/env-forthname.asm" - - ; Environment - ; flash address of the amforth name string - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENV_FORTHNAME: -007506 ff0a .dw $ff0a -007507 6f66 -007508 7472 -007509 2d68 -00750a 616e -00750b 656d .db "forth-name" -00750c 74fc .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_FORTHNAME - XT_ENV_FORTHNAME: -00750d 7001 .dw DO_COLON - PFA_EN_FORTHNAME: -00750e 776d .dw XT_DOSLITERAL -00750f 0007 .dw 7 - .endif -007510 6d61 -007511 6f66 -007512 7472 -../../common\words/env-forthname.asm(22): warning: .cseg .db misalignment - padding zero byte -007513 0068 .db "amforth" - .if cpu_msp430==1 - .endif -007514 7020 .dw XT_EXIT - .include "words/env-forthversion.asm" - - ; Environment - ; version number of amforth - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENV_FORTHVERSION: -007515 ff07 .dw $ff07 -007516 6576 -007517 7372 -007518 6f69 -007519 006e .db "version",0 -00751a 7506 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_FORTHVERSION - XT_ENV_FORTHVERSION: -00751b 7001 .dw DO_COLON - PFA_EN_FORTHVERSION: - .endif -00751c 703d .dw XT_DOLITERAL -00751d 0041 .dw 65 -00751e 7020 .dw XT_EXIT - .include "words/env-cpu.asm" - - ; Environment - ; flash address of the CPU identification string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ENV_CPU: -00751f ff03 .dw $ff03 -007520 7063 -007521 0075 .db "cpu",0 -007522 7515 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_CPU - XT_ENV_CPU: -007523 7001 .dw DO_COLON - PFA_EN_CPU: - .endif -007524 703d .dw XT_DOLITERAL -007525 003b .dw mcu_name -007526 77cc .dw XT_ICOUNT -007527 7020 .dw XT_EXIT - .include "words/env-mcuinfo.asm" - - ; Environment - ; flash address of some CPU specific parameters - VE_ENV_MCUINFO: -007528 ff08 .dw $ff08 -007529 636d -00752a 2d75 -00752b 6e69 -00752c 6f66 .db "mcu-info" -00752d 751f .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENV_MCUINFO - XT_ENV_MCUINFO: -00752e 7001 .dw DO_COLON - PFA_EN_MCUINFO: -00752f 703d .dw XT_DOLITERAL -007530 0037 .dw mcu_info -007531 7020 .dw XT_EXIT - .include "words/env-usersize.asm" - - ; Environment - ; size of the USER area in bytes - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_ENVUSERSIZE: -007532 ff05 .dw $ff05 -007533 752f -007534 6573 -007535 0072 .db "/user",0 -007536 7528 .dw VE_ENVHEAD - .set VE_ENVHEAD = VE_ENVUSERSIZE - XT_ENVUSERSIZE: -007537 7001 .dw DO_COLON - PFA_ENVUSERSIZE: - .endif -007538 703d .dw XT_DOLITERAL -007539 002c .dw SYSUSERSIZE + APPUSERSIZE -00753a 7020 .dw XT_EXIT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/f_cpu.asm" - - ; System - ; put the cpu frequency in Hz on stack - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_F_CPU: -00753b ff05 .dw $ff05 -00753c 5f66 -00753d 7063 -00753e 0075 .db "f_cpu",0 -00753f 74de .dw VE_HEAD - .set VE_HEAD = VE_F_CPU - XT_F_CPU: -007540 7001 .dw DO_COLON - PFA_F_CPU: - .endif -007541 703d .dw XT_DOLITERAL -007542 2400 .dw (F_CPU % 65536) -007543 703d .dw XT_DOLITERAL -007544 00f4 .dw (F_CPU / 65536) -007545 7020 .dw XT_EXIT - .include "words/state.asm" - - ; System Variable - ; system state - VE_STATE: -007546 ff05 .dw $ff05 -007547 7473 -007548 7461 -007549 0065 .db "state",0 -00754a 753b .dw VE_HEAD - .set VE_HEAD = VE_STATE - XT_STATE: -00754b 7048 .dw PFA_DOVARIABLE - PFA_STATE: -00754c 0136 .dw ram_state - - .dseg -000136 ram_state: .byte 2 - .include "words/base.asm" - - ; Numeric IO - ; location of the cell containing the number conversion radix - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BASE: -00754d ff04 .dw $ff04 -00754e 6162 -00754f 6573 .db "base" -007550 7546 .dw VE_HEAD - .set VE_HEAD = VE_BASE - XT_BASE: -007551 7058 .dw PFA_DOUSER - PFA_BASE: - .endif -007552 000c .dw USER_BASE - - .include "words/cells.asm" - - ; Arithmetics - ; n2 is the size in address units of n1 cells - VE_CELLS: -007553 ff05 .dw $ff05 -007554 6563 -007555 6c6c -007556 0073 .db "cells",0 -007557 754d .dw VE_HEAD - .set VE_HEAD = VE_CELLS - XT_CELLS: -007558 720c .dw PFA_2STAR - .include "words/cellplus.asm" - - ; Arithmetics - ; add the size of an address-unit to a-addr1 - VE_CELLPLUS: -007559 ff05 .dw $ff05 -00755a 6563 -00755b 6c6c -00755c 002b .db "cell+",0 -00755d 7553 .dw VE_HEAD - .set VE_HEAD = VE_CELLPLUS - XT_CELLPLUS: -00755e 755f .dw PFA_CELLPLUS - PFA_CELLPLUS: -00755f 9602 adiw tosl, CELLSIZE -007560 caa4 jmp_ DO_NEXT - - .include "words/2dup.asm" - - ; Stack - ; Duplicate the 2 top elements - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2DUP: -007561 ff04 .dw $ff04 -007562 6432 -007563 7075 .db "2dup" -007564 7559 .dw VE_HEAD - .set VE_HEAD = VE_2DUP - XT_2DUP: -007565 7001 .dw DO_COLON - PFA_2DUP: - .endif - -007566 70cf .dw XT_OVER -007567 70cf .dw XT_OVER -007568 7020 .dw XT_EXIT - .include "words/2drop.asm" - - ; Stack - ; Remove the 2 top elements - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2DROP: -007569 ff05 .dw $ff05 -00756a 6432 -00756b 6f72 -00756c 0070 .db "2drop",0 -00756d 7561 .dw VE_HEAD - .set VE_HEAD = VE_2DROP - XT_2DROP: -00756e 7001 .dw DO_COLON - PFA_2DROP: - .endif -00756f 70d9 .dw XT_DROP -007570 70d9 .dw XT_DROP -007571 7020 .dw XT_EXIT - - .include "words/tuck.asm" - - ; Stack - ; Copy the first (top) stack item below the second stack item. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TUCK: -007572 ff04 .dw $ff04 -007573 7574 -007574 6b63 .db "tuck" -007575 7569 .dw VE_HEAD - .set VE_HEAD = VE_TUCK - XT_TUCK: -007576 7001 .dw DO_COLON - PFA_TUCK: - .endif -007577 70c4 .dw XT_SWAP -007578 70cf .dw XT_OVER -007579 7020 .dw XT_EXIT - - .include "words/to-in.asm" - - ; System Variable - ; pointer to current read position in input buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO_IN: -00757a ff03 .dw $ff03 -00757b 693e -00757c 006e .db ">in",0 -00757d 7572 .dw VE_HEAD - .set VE_HEAD = VE_TO_IN - XT_TO_IN: -00757e 7058 .dw PFA_DOUSER - PFA_TO_IN: - .endif -00757f 0018 .dw USER_TO_IN - .include "words/pad.asm" - - ; System Variable - ; Address of the temporary scratch buffer. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PAD: -007580 ff03 .dw $ff03 -007581 6170 -007582 0064 .db "pad",0 -007583 757a .dw VE_HEAD - .set VE_HEAD = VE_PAD - XT_PAD: -007584 7001 .dw DO_COLON - PFA_PAD: - .endif -007585 75bf .dw XT_HERE -007586 703d .dw XT_DOLITERAL -007587 0028 .dw 40 -007588 719d .dw XT_PLUS -007589 7020 .dw XT_EXIT - .include "words/emit.asm" - - ; Character IO - ; fetch the emit vector and execute it. should emit a character from TOS - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_EMIT: -00758a ff04 .dw $ff04 -00758b 6d65 -00758c 7469 .db "emit" -00758d 7580 .dw VE_HEAD - .set VE_HEAD = VE_EMIT - XT_EMIT: -00758e 7c13 .dw PFA_DODEFER1 - PFA_EMIT: - .endif -00758f 000e .dw USER_EMIT -007590 7bdc .dw XT_UDEFERFETCH -007591 7be8 .dw XT_UDEFERSTORE - .include "words/emitq.asm" - - ; Character IO - ; fetch emit? vector and execute it. should return the ready-to-send condition - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_EMITQ: -007592 ff05 .dw $ff05 -007593 6d65 -007594 7469 -007595 003f .db "emit?",0 -007596 758a .dw VE_HEAD - .set VE_HEAD = VE_EMITQ - XT_EMITQ: -007597 7c13 .dw PFA_DODEFER1 - PFA_EMITQ: - .endif -007598 0010 .dw USER_EMITQ -007599 7bdc .dw XT_UDEFERFETCH -00759a 7be8 .dw XT_UDEFERSTORE - .include "words/key.asm" - - ; Character IO - ; fetch key vector and execute it, should leave a single character on TOS - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_KEY: -00759b ff03 .dw $ff03 -00759c 656b -00759d 0079 .db "key",0 -00759e 7592 .dw VE_HEAD - .set VE_HEAD = VE_KEY - XT_KEY: -00759f 7c13 .dw PFA_DODEFER1 - PFA_KEY: - .endif -0075a0 0012 .dw USER_KEY -0075a1 7bdc .dw XT_UDEFERFETCH -0075a2 7be8 .dw XT_UDEFERSTORE - .include "words/keyq.asm" - - ; Character IO - ; fetch key? vector and execute it. should turn on key sender, if it is disabled/stopped - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_KEYQ: -0075a3 ff04 .dw $ff04 -0075a4 656b -0075a5 3f79 .db "key?" -0075a6 759b .dw VE_HEAD - .set VE_HEAD = VE_KEYQ - XT_KEYQ: -0075a7 7c13 .dw PFA_DODEFER1 - PFA_KEYQ: - .endif -0075a8 0014 .dw USER_KEYQ -0075a9 7bdc .dw XT_UDEFERFETCH -0075aa 7be8 .dw XT_UDEFERSTORE - - .include "words/dp.asm" - - ; System Value - ; address of the next free dictionary cell - VE_DP: -0075ab ff02 .dw $ff02 -0075ac 7064 .db "dp" -0075ad 75a3 .dw VE_HEAD - .set VE_HEAD = VE_DP - XT_DP: -0075ae 706f .dw PFA_DOVALUE1 - PFA_DP: -0075af 003a .dw CFG_DP -0075b0 7bb4 .dw XT_EDEFERFETCH -0075b1 7bbe .dw XT_EDEFERSTORE - .include "words/ehere.asm" - - ; System Value - ; address of the next free address in eeprom - VE_EHERE: -0075b2 ff05 .dw $ff05 -0075b3 6865 -0075b4 7265 -0075b5 0065 .db "ehere",0 -0075b6 75ab .dw VE_HEAD - .set VE_HEAD = VE_EHERE - XT_EHERE: -0075b7 706f .dw PFA_DOVALUE1 - PFA_EHERE: -0075b8 003e .dw EE_EHERE -0075b9 7bb4 .dw XT_EDEFERFETCH -0075ba 7bbe .dw XT_EDEFERSTORE - .include "words/here.asm" - - ; System Value - ; address of the next free data space (RAM) cell - VE_HERE: -0075bb ff04 .dw $ff04 -0075bc 6568 -0075bd 6572 .db "here" -0075be 75b2 .dw VE_HEAD - .set VE_HEAD = VE_HERE - XT_HERE: -0075bf 706f .dw PFA_DOVALUE1 - PFA_HERE: -0075c0 003c .dw EE_HERE -0075c1 7bb4 .dw XT_EDEFERFETCH -0075c2 7bbe .dw XT_EDEFERSTORE - .include "words/allot.asm" - - ; System - ; allocate or release memory in RAM - VE_ALLOT: -0075c3 ff05 .dw $ff05 -0075c4 6c61 -0075c5 6f6c -0075c6 0074 .db "allot",0 -0075c7 75bb .dw VE_HEAD - .set VE_HEAD = VE_ALLOT - XT_ALLOT: -0075c8 7001 .dw DO_COLON - PFA_ALLOT: -0075c9 75bf .dw XT_HERE -0075ca 719d .dw XT_PLUS -0075cb 7b99 .dw XT_DOTO -0075cc 75c0 .dw PFA_HERE -0075cd 7020 .dw XT_EXIT - - .include "words/bin.asm" - - ; Numeric IO - ; set base for numeric conversion to 10 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BIN: -0075ce ff03 .dw $ff03 -0075cf 6962 -0075d0 006e .db "bin",0 -0075d1 75c3 .dw VE_HEAD - .set VE_HEAD = VE_BIN - XT_BIN: -0075d2 7001 .dw DO_COLON - PFA_BIN: - .endif -0075d3 7d8b .dw XT_TWO -0075d4 7551 .dw XT_BASE -0075d5 7081 .dw XT_STORE -0075d6 7020 .dw XT_EXIT - .include "words/decimal.asm" - - ; Numeric IO - ; set base for numeric conversion to 10 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DECIMAL: -0075d7 ff07 .dw $ff07 -0075d8 6564 -0075d9 6963 -0075da 616d -0075db 006c .db "decimal",0 -0075dc 75ce .dw VE_HEAD - .set VE_HEAD = VE_DECIMAL - XT_DECIMAL: -0075dd 7001 .dw DO_COLON - PFA_DECIMAL: - .endif -0075de 703d .dw XT_DOLITERAL -0075df 000a .dw 10 -0075e0 7551 .dw XT_BASE -0075e1 7081 .dw XT_STORE -0075e2 7020 .dw XT_EXIT - .include "words/hex.asm" - - ; Numeric IO - ; set base for numeric conversion to 10 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_HEX: -0075e3 ff03 .dw $ff03 -0075e4 6568 -0075e5 0078 .db "hex",0 -0075e6 75d7 .dw VE_HEAD - .set VE_HEAD = VE_HEX - XT_HEX: -0075e7 7001 .dw DO_COLON - PFA_HEX: - .endif -0075e8 703d .dw XT_DOLITERAL -0075e9 0010 .dw 16 -0075ea 7551 .dw XT_BASE -0075eb 7081 .dw XT_STORE -0075ec 7020 .dw XT_EXIT - .include "words/bl.asm" - - ; Character IO - ; put ascii code of the blank to the stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BL: -0075ed ff02 .dw $ff02 -0075ee 6c62 .db "bl" -0075ef 75e3 .dw VE_HEAD - .set VE_HEAD = VE_BL - XT_BL: -0075f0 7048 .dw PFA_DOVARIABLE - PFA_BL: - .endif -0075f1 0020 .dw 32 - - .include "words/turnkey.asm" - - ; System Value - ; Deferred action during startup/reset - VE_TURNKEY: -0075f2 ff07 .dw $ff07 -0075f3 7574 -0075f4 6e72 -0075f5 656b -0075f6 0079 .db "turnkey",0 -0075f7 75ed .dw VE_HEAD - .set VE_HEAD = VE_TURNKEY - XT_TURNKEY: -0075f8 7c13 .dw PFA_DODEFER1 - PFA_TURNKEY: -0075f9 0046 .dw CFG_TURNKEY -0075fa 7bb4 .dw XT_EDEFERFETCH -0075fb 7bbe .dw XT_EDEFERSTORE - ;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/slashmod.asm" - - ; Arithmetics - ; signed division n1/n2 with remainder and quotient - VE_SLASHMOD: -0075fc ff04 .dw $ff04 -0075fd 6d2f -0075fe 646f .db "/mod" -0075ff 75f2 .dw VE_HEAD - .set VE_HEAD = VE_SLASHMOD - XT_SLASHMOD: -007600 7601 .dw PFA_SLASHMOD - PFA_SLASHMOD: -007601 019c movw temp2, tosl - -007602 9109 ld temp0, Y+ -007603 9119 ld temp1, Y+ - -007604 2f41 mov temp6,temp1 ;move dividend High to sign register -007605 2743 eor temp6,temp3 ;xor divisor High with sign register -007606 ff17 sbrs temp1,7 ;if MSB in dividend set -007607 c004 rjmp PFA_SLASHMOD_1 -007608 9510 com temp1 ; change sign of dividend -007609 9500 com temp0 -00760a 5f0f subi temp0,low(-1) -00760b 4f1f sbci temp1,high(-1) - PFA_SLASHMOD_1: -00760c ff37 sbrs temp3,7 ;if MSB in divisor set -00760d c004 rjmp PFA_SLASHMOD_2 -00760e 9530 com temp3 ; change sign of divisor -00760f 9520 com temp2 -007610 5f2f subi temp2,low(-1) -007611 4f3f sbci temp3,high(-1) -007612 24ee PFA_SLASHMOD_2: clr temp4 ;clear remainder Low byte -007613 18ff sub temp5,temp5;clear remainder High byte and carry -007614 e151 ldi temp7,17 ;init loop counter - -007615 1f00 PFA_SLASHMOD_3: rol temp0 ;shift left dividend -007616 1f11 rol temp1 -007617 955a dec temp7 ;decrement counter -007618 f439 brne PFA_SLASHMOD_5 ;if done -007619 ff47 sbrs temp6,7 ; if MSB in sign register set -00761a c004 rjmp PFA_SLASHMOD_4 -00761b 9510 com temp1 ; change sign of result -00761c 9500 com temp0 -00761d 5f0f subi temp0,low(-1) -00761e 4f1f sbci temp1,high(-1) -00761f c00b PFA_SLASHMOD_4: rjmp PFA_SLASHMODmod_done ; return -007620 1cee PFA_SLASHMOD_5: rol temp4 ;shift dividend into remainder -007621 1cff rol temp5 -007622 1ae2 sub temp4,temp2 ;remainder = remainder - divisor -007623 0af3 sbc temp5,temp3 ; -007624 f420 brcc PFA_SLASHMOD_6 ;if result negative -007625 0ee2 add temp4,temp2 ; restore remainder -007626 1ef3 adc temp5,temp3 -007627 9488 clc ; clear carry to be shifted into result -007628 cfec rjmp PFA_SLASHMOD_3 ;else -007629 9408 PFA_SLASHMOD_6: sec ; set carry to be shifted into result -00762a cfea rjmp PFA_SLASHMOD_3 - - PFA_SLASHMODmod_done: - ; put remainder on stack -00762b 92fa st -Y,temp5 -00762c 92ea st -Y,temp4 - - ; put quotient on stack -00762d 01c8 movw tosl, temp0 -00762e c9d6 jmp_ DO_NEXT - .include "words/uslashmod.asm" - - ; Arithmetics - ; unsigned division with remainder - VE_USLASHMOD: -00762f ff05 .dw $ff05 -007630 2f75 -007631 6f6d -007632 0064 .db "u/mod",0 -007633 75fc .dw VE_HEAD - .set VE_HEAD = VE_USLASHMOD - XT_USLASHMOD: -007634 7001 .dw DO_COLON - PFA_USLASHMOD: -007635 70ff .dw XT_TO_R -007636 7154 .dw XT_ZERO -007637 70f6 .dw XT_R_FROM -007638 71c2 .dw XT_UMSLASHMOD -007639 7020 .dw XT_EXIT - .include "words/negate.asm" - - ; Logic - ; 2-complement - VE_NEGATE: -00763a ff06 .dw $ff06 -00763b 656e -00763c 6167 -00763d 6574 .db "negate" -00763e 762f .dw VE_HEAD - .set VE_HEAD = VE_NEGATE - XT_NEGATE: -00763f 7001 .dw DO_COLON - PFA_NEGATE: -007640 71fd .dw XT_INVERT -007641 722f .dw XT_1PLUS -007642 7020 .dw XT_EXIT - .include "words/slash.asm" - - ; Arithmetics - ; divide n1 by n2. giving the quotient - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_SLASH: -007643 ff01 .dw $ff01 -007644 002f .db "/",0 -007645 763a .dw VE_HEAD - .set VE_HEAD = VE_SLASH - XT_SLASH: -007646 7001 .dw DO_COLON - PFA_SLASH: - .endif -007647 7600 .dw XT_SLASHMOD -007648 70f0 .dw XT_NIP -007649 7020 .dw XT_EXIT - - .include "words/mod.asm" - - ; Arithmetics - ; divide n1 by n2 giving the remainder n3 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_MOD: -00764a ff03 .dw $ff03 -00764b 6f6d -00764c 0064 .db "mod",0 -00764d 7643 .dw VE_HEAD - .set VE_HEAD = VE_MOD - XT_MOD: -00764e 7001 .dw DO_COLON - PFA_MOD: - .endif -00764f 7600 .dw XT_SLASHMOD -007650 70d9 .dw XT_DROP -007651 7020 .dw XT_EXIT - .include "words/abs.asm" - - ; DUP ?NEGATE ; - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ABS: -007652 ff03 .dw $ff03 -007653 6261 -007654 0073 .db "abs",0 -007655 764a .dw VE_HEAD - .set VE_HEAD = VE_ABS - XT_ABS: -007656 7001 .dw DO_COLON - PFA_ABS: - - .endif - -007657 70b1 -007658 723e -007659 7020 .DW XT_DUP,XT_QNEGATE,XT_EXIT - .include "words/min.asm" - - ; Compare - ; compare two values leave the smaller one - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_MIN: -00765a ff03 .dw $ff03 -00765b 696d -00765c 006e .db "min",0 -00765d 7652 .dw VE_HEAD - .set VE_HEAD = VE_MIN - XT_MIN: -00765e 7001 .dw DO_COLON - PFA_MIN: - .endif -00765f 7565 .dw XT_2DUP -007660 7178 .dw XT_GREATER -007661 7036 .dw XT_DOCONDBRANCH -007662 7664 DEST(PFA_MIN1) -007663 70c4 .dw XT_SWAP - PFA_MIN1: -007664 70d9 .dw XT_DROP -007665 7020 .dw XT_EXIT - .include "words/max.asm" - - ; Compare - ; compare two values, leave the bigger one - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_MAX: -007666 ff03 .dw $ff03 -007667 616d -007668 0078 .db "max",0 -007669 765a .dw VE_HEAD - .set VE_HEAD = VE_MAX - XT_MAX: -00766a 7001 .dw DO_COLON - PFA_MAX: - - .endif -00766b 7565 .dw XT_2DUP -00766c 716e .dw XT_LESS -00766d 7036 .dw XT_DOCONDBRANCH -00766e 7670 DEST(PFA_MAX1) -00766f 70c4 .dw XT_SWAP - PFA_MAX1: -007670 70d9 .dw XT_DROP -007671 7020 .dw XT_EXIT - .include "words/within.asm" - - ; Compare - ; check if n is within min..max - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_WITHIN: -007672 ff06 .dw $ff06 -007673 6977 -007674 6874 -007675 6e69 .db "within" -007676 7666 .dw VE_HEAD - .set VE_HEAD = VE_WITHIN - XT_WITHIN: -007677 7001 .dw DO_COLON - PFA_WITHIN: - .endif -007678 70cf .dw XT_OVER -007679 7193 .dw XT_MINUS -00767a 70ff .dw XT_TO_R -00767b 7193 .dw XT_MINUS -00767c 70f6 .dw XT_R_FROM -00767d 715c .dw XT_ULESS -00767e 7020 .dw XT_EXIT - - .include "words/to-upper.asm" - - ; String - ; if c is a lowercase letter convert it to uppercase - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TOUPPER: -00767f ff07 .dw $ff07 -007680 6f74 -007681 7075 -007682 6570 -007683 0072 .db "toupper",0 -007684 7672 .dw VE_HEAD - .set VE_HEAD = VE_TOUPPER - XT_TOUPPER: -007685 7001 .dw DO_COLON - PFA_TOUPPER: - .endif -007686 70b1 .dw XT_DUP -007687 703d .dw XT_DOLITERAL -007688 0061 .dw 'a' -007689 703d .dw XT_DOLITERAL -00768a 007b .dw 'z'+1 -00768b 7677 .dw XT_WITHIN -00768c 7036 .dw XT_DOCONDBRANCH -00768d 7691 DEST(PFA_TOUPPER0) -00768e 703d .dw XT_DOLITERAL -00768f 00df .dw 223 ; inverse of 0x20: 0xdf -007690 7213 .dw XT_AND - PFA_TOUPPER0: -007691 7020 .dw XT_EXIT - .include "words/to-lower.asm" - - ; String - ; if C is an uppercase letter convert it to lowercase - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_TOLOWER: -007692 ff07 .dw $ff07 -007693 6f74 -007694 6f6c -007695 6577 -007696 0072 .db "tolower",0 -007697 767f .dw VE_HEAD - .set VE_HEAD = VE_TOLOWER - XT_TOLOWER: -007698 7001 .dw DO_COLON - PFA_TOLOWER: - .endif -007699 70b1 .dw XT_DUP -00769a 703d .dw XT_DOLITERAL -00769b 0041 .dw 'A' -00769c 703d .dw XT_DOLITERAL -00769d 005b .dw 'Z'+1 -00769e 7677 .dw XT_WITHIN -00769f 7036 .dw XT_DOCONDBRANCH -0076a0 76a4 DEST(PFA_TOLOWER0) -0076a1 703d .dw XT_DOLITERAL -0076a2 0020 .dw 32 -0076a3 721c .dw XT_OR - PFA_TOLOWER0: -0076a4 7020 .dw XT_EXIT - ;;;;;;;;;;;;;;;;;;;;;; - .include "words/hld.asm" - - ; Numeric IO - ; pointer to current write position in the Pictured Numeric Output buffer - VE_HLD: -0076a5 ff03 .dw $ff03 -0076a6 6c68 -0076a7 0064 .db "hld",0 -0076a8 7692 .dw VE_HEAD - .set VE_HEAD = VE_HLD - XT_HLD: -0076a9 7048 .dw PFA_DOVARIABLE - PFA_HLD: -0076aa 0138 .dw ram_hld - - .dseg -000138 ram_hld: .byte 2 - .cseg - .include "words/hold.asm" - - ; Numeric IO - ; prepend character to pictured numeric output buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_HOLD: -0076ab ff04 .dw $ff04 -0076ac 6f68 -0076ad 646c .db "hold" -0076ae 76a5 .dw VE_HEAD - .set VE_HEAD = VE_HOLD - XT_HOLD: -0076af 7001 .dw DO_COLON - PFA_HOLD: - .endif -0076b0 76a9 .dw XT_HLD -0076b1 70b1 .dw XT_DUP -0076b2 7079 .dw XT_FETCH -0076b3 7235 .dw XT_1MINUS -0076b4 70b1 .dw XT_DUP -0076b5 70ff .dw XT_TO_R -0076b6 70c4 .dw XT_SWAP -0076b7 7081 .dw XT_STORE -0076b8 70f6 .dw XT_R_FROM -0076b9 708d .dw XT_CSTORE -0076ba 7020 .dw XT_EXIT - .include "words/less-sharp.asm" ; <# - - ; Numeric IO - ; initialize the pictured numeric output conversion process - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_L_SHARP: -0076bb ff02 .dw $ff02 -0076bc 233c .db "<#" -0076bd 76ab .dw VE_HEAD - .set VE_HEAD = VE_L_SHARP - XT_L_SHARP: -0076be 7001 .dw DO_COLON - PFA_L_SHARP: - .endif -0076bf 7584 .dw XT_PAD -0076c0 76a9 .dw XT_HLD -0076c1 7081 .dw XT_STORE -0076c2 7020 .dw XT_EXIT - .include "words/sharp.asm" - - ; Numeric IO - ; pictured numeric output: convert one digit - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_SHARP: -0076c3 ff01 .dw $ff01 -0076c4 0023 .db "#",0 -0076c5 76bb .dw VE_HEAD - .set VE_HEAD = VE_SHARP - XT_SHARP: -0076c6 7001 .dw DO_COLON - PFA_SHARP: - .endif -0076c7 7551 .dw XT_BASE -0076c8 7079 .dw XT_FETCH -0076c9 7743 .dw XT_UDSLASHMOD -0076ca 70e1 .dw XT_ROT -0076cb 703d .dw XT_DOLITERAL -0076cc 0009 .dw 9 -0076cd 70cf .dw XT_OVER -0076ce 716e .dw XT_LESS -0076cf 7036 .dw XT_DOCONDBRANCH -0076d0 76d4 DEST(PFA_SHARP1) -0076d1 703d .dw XT_DOLITERAL -0076d2 0007 .dw 7 -0076d3 719d .dw XT_PLUS - PFA_SHARP1: -0076d4 703d .dw XT_DOLITERAL -0076d5 0030 .dw 48 ; ASCII 0 -0076d6 719d .dw XT_PLUS -0076d7 76af .dw XT_HOLD -0076d8 7020 .dw XT_EXIT - ; : # ( ud1 -- ud2 ) - ; base @ ud/mod rot 9 over < if 7 + then 30 + hold ; - .include "words/sharp-s.asm" - - ; Numeric IO - ; pictured numeric output: convert all digits until 0 (zero) is reached - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SHARP_S: -0076d9 ff02 .dw $ff02 -0076da 7323 .db "#s" -0076db 76c3 .dw VE_HEAD - .set VE_HEAD = VE_SHARP_S - XT_SHARP_S: -0076dc 7001 .dw DO_COLON - PFA_SHARP_S: - .endif - NUMS1: -0076dd 76c6 .dw XT_SHARP -0076de 7565 .dw XT_2DUP -0076df 721c .dw XT_OR -0076e0 711a .dw XT_ZEROEQUAL -0076e1 7036 .dw XT_DOCONDBRANCH -0076e2 76dd DEST(NUMS1) ; PFA_SHARP_S -0076e3 7020 .dw XT_EXIT - .include "words/sharp-greater.asm" ; #> - - ; Numeric IO - ; Pictured Numeric Output: convert PNO buffer into an string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SHARP_G: -0076e4 ff02 .dw $ff02 -0076e5 3e23 .db "#>" -0076e6 76d9 .dw VE_HEAD - .set VE_HEAD = VE_SHARP_G - XT_SHARP_G: -0076e7 7001 .dw DO_COLON - PFA_SHARP_G: - .endif -0076e8 756e .dw XT_2DROP -0076e9 76a9 .dw XT_HLD -0076ea 7079 .dw XT_FETCH -0076eb 7584 .dw XT_PAD -0076ec 70cf .dw XT_OVER -0076ed 7193 .dw XT_MINUS -0076ee 7020 .dw XT_EXIT - .include "words/sign.asm" - - ; Numeric IO - ; place a - in HLD if n is negative - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SIGN: -0076ef ff04 .dw $ff04 -0076f0 6973 -0076f1 6e67 .db "sign" -0076f2 76e4 .dw VE_HEAD - .set VE_HEAD = VE_SIGN - XT_SIGN: -0076f3 7001 .dw DO_COLON - PFA_SIGN: - .endif -0076f4 7121 .dw XT_ZEROLESS -0076f5 7036 .dw XT_DOCONDBRANCH -0076f6 76fa DEST(PFA_SIGN1) -0076f7 703d .dw XT_DOLITERAL -0076f8 002d .dw 45 ; ascii - -0076f9 76af .dw XT_HOLD - PFA_SIGN1: -0076fa 7020 .dw XT_EXIT - .include "words/d-dot-r.asm" - - ; Numeric IO - ; singed PNO with double cell numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DDOTR: -0076fb ff03 .dw $ff03 -0076fc 2e64 -0076fd 0072 .db "d.r",0 -0076fe 76ef .dw VE_HEAD - .set VE_HEAD = VE_DDOTR - XT_DDOTR: -0076ff 7001 .dw DO_COLON - PFA_DDOTR: - - .endif -007700 70ff .dw XT_TO_R -007701 7576 .dw XT_TUCK -007702 7cd4 .dw XT_DABS -007703 76be .dw XT_L_SHARP -007704 76dc .dw XT_SHARP_S -007705 70e1 .dw XT_ROT -007706 76f3 .dw XT_SIGN -007707 76e7 .dw XT_SHARP_G -007708 70f6 .dw XT_R_FROM -007709 70cf .dw XT_OVER -00770a 7193 .dw XT_MINUS -00770b 77eb .dw XT_SPACES -00770c 77fb .dw XT_TYPE -00770d 7020 .dw XT_EXIT - ; : d.r ( d n -- ) - ; >r swap over dabs <# #s rot sign #> r> over - spaces type ; - .include "words/dot-r.asm" - - ; Numeric IO - ; singed PNO with single cell numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOTR: -00770e ff02 .dw $ff02 -00770f 722e .db ".r" -007710 76fb .dw VE_HEAD - .set VE_HEAD = VE_DOTR - XT_DOTR: -007711 7001 .dw DO_COLON - PFA_DOTR: - - .endif -007712 70ff .dw XT_TO_R -007713 7d67 .dw XT_S2D -007714 70f6 .dw XT_R_FROM -007715 76ff .dw XT_DDOTR -007716 7020 .dw XT_EXIT - ; : .r ( s n -- ) >r s>d r> d.r ; - .include "words/d-dot.asm" - - ; Numeric IO - ; singed PNO with double cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DDOT: -007717 ff02 .dw $ff02 -007718 2e64 .db "d." -007719 770e .dw VE_HEAD - .set VE_HEAD = VE_DDOT - XT_DDOT: -00771a 7001 .dw DO_COLON - PFA_DDOT: - - .endif -00771b 7154 .dw XT_ZERO -00771c 76ff .dw XT_DDOTR -00771d 77e2 .dw XT_SPACE -00771e 7020 .dw XT_EXIT - ; : d. ( d -- ) 0 d.r space ; - .include "words/dot.asm" - - ; Numeric IO - ; singed PNO with single cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_DOT: -00771f ff01 .dw $ff01 -007720 002e .db ".",0 -007721 7717 .dw VE_HEAD - .set VE_HEAD = VE_DOT - XT_DOT: -007722 7001 .dw DO_COLON - PFA_DOT: - .endif -007723 7d67 .dw XT_S2D -007724 771a .dw XT_DDOT -007725 7020 .dw XT_EXIT - ; : . ( s -- ) s>d d. ; - .include "words/ud-dot.asm" - - ; Numeric IO - ; unsigned PNO with double cell numbers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDDOT: -007726 ff03 .dw $ff03 -007727 6475 -007728 002e .db "ud.",0 -007729 771f .dw VE_HEAD - .set VE_HEAD = VE_UDDOT - XT_UDDOT: -00772a 7001 .dw DO_COLON - PFA_UDDOT: - .endif -00772b 7154 .dw XT_ZERO -00772c 7733 .dw XT_UDDOTR -00772d 77e2 .dw XT_SPACE -00772e 7020 .dw XT_EXIT - .include "words/ud-dot-r.asm" - - ; Numeric IO - ; unsigned PNO with double cell numbers, right aligned in width w - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - - VE_UDDOTR: -00772f ff04 .dw $ff04 -007730 6475 -007731 722e .db "ud.r" -007732 7726 .dw VE_HEAD - .set VE_HEAD = VE_UDDOTR - XT_UDDOTR: -007733 7001 .dw DO_COLON - PFA_UDDOTR: - .endif -007734 70ff .dw XT_TO_R -007735 76be .dw XT_L_SHARP -007736 76dc .dw XT_SHARP_S -007737 76e7 .dw XT_SHARP_G -007738 70f6 .dw XT_R_FROM -007739 70cf .dw XT_OVER -00773a 7193 .dw XT_MINUS -00773b 77eb .dw XT_SPACES -00773c 77fb .dw XT_TYPE -00773d 7020 .dw XT_EXIT - .include "words/ud-slash-mod.asm" - - ; Arithmetics - ; unsigned double cell division with remainder - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDSLASHMOD: -00773e ff06 .dw $ff06 -00773f 6475 -007740 6d2f -007741 646f .db "ud/mod" -007742 772f .dw VE_HEAD - .set VE_HEAD = VE_UDSLASHMOD - XT_UDSLASHMOD: -007743 7001 .dw DO_COLON - PFA_UDSLASHMOD: - .endif -007744 70ff .dw XT_TO_R -007745 7154 .dw XT_ZERO -007746 7108 .dw XT_R_FETCH -007747 71c2 .dw XT_UMSLASHMOD -007748 70f6 .dw XT_R_FROM -007749 70c4 .dw XT_SWAP -00774a 70ff .dw XT_TO_R -00774b 71c2 .dw XT_UMSLASHMOD -00774c 70f6 .dw XT_R_FROM -00774d 7020 .dw XT_EXIT - .include "words/digit-q.asm" - - ; Numeric IO - ; tries to convert a character to a number, set flag accordingly - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DIGITQ: -00774e ff06 .dw $ff06 -00774f 6964 -007750 6967 -007751 3f74 .db "digit?" -007752 773e .dw VE_HEAD - .set VE_HEAD = VE_DIGITQ - XT_DIGITQ: -007753 7001 .dw DO_COLON - PFA_DIGITQ: - .endif -007754 7685 .dw XT_TOUPPER -007755 70b1 -007756 703d -007757 0039 -007758 7178 -007759 703d -00775a 0100 .DW XT_DUP,XT_DOLITERAL,57,XT_GREATER,XT_DOLITERAL,256 -00775b 7213 -00775c 719d -00775d 70b1 -00775e 703d -00775f 0140 -007760 7178 .DW XT_AND,XT_PLUS,XT_DUP,XT_DOLITERAL,320,XT_GREATER -007761 703d -007762 0107 -007763 7213 -007764 7193 -007765 703d -007766 0030 .DW XT_DOLITERAL,263,XT_AND,XT_MINUS,XT_DOLITERAL,48 -007767 7193 -007768 70b1 -007769 7551 -00776a 7079 -00776b 715c .DW XT_MINUS,XT_DUP,XT_BASE,XT_FETCH,XT_ULESS -00776c 7020 .DW XT_EXIT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/do-sliteral.asm" - - ; String - ; runtime portion of sliteral - ;VE_DOSLITERAL: - ; .dw $ff0a - ; .db "(sliteral)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOSLITERAL - XT_DOSLITERAL: -00776d 7001 .dw DO_COLON - PFA_DOSLITERAL: -00776e 7108 .dw XT_R_FETCH ; ( -- addr ) -00776f 77cc .dw XT_ICOUNT -007770 70f6 .dw XT_R_FROM -007771 70cf .dw XT_OVER ; ( -- addr' n addr n) -007772 722f .dw XT_1PLUS -007773 7204 .dw XT_2SLASH ; ( -- addr' n addr k ) -007774 719d .dw XT_PLUS ; ( -- addr' n addr'' ) -007775 722f .dw XT_1PLUS -007776 70ff .dw XT_TO_R ; ( -- ) -007777 7020 .dw XT_EXIT - .include "words/scomma.asm" - - ; Compiler - ; compiles a string from RAM to Flash - VE_SCOMMA: -007778 ff02 .dw $ff02 -007779 2c73 .db "s",$2c -00777a 774e .dw VE_HEAD - .set VE_HEAD = VE_SCOMMA - XT_SCOMMA: -00777b 7001 .dw DO_COLON - PFA_SCOMMA: -00777c 70b1 .dw XT_DUP -00777d 777f .dw XT_DOSCOMMA -00777e 7020 .dw XT_EXIT - - ; ( addr len len' -- ) - ; Compiler - ; compiles a string from RAM to Flash - ;VE_DOSCOMMA: - ; .dw $ff04 - ; .db "(s",$2c,")" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOSCOMMA - XT_DOSCOMMA: -00777f 7001 .dw DO_COLON - PFA_DOSCOMMA: -007780 01cc .dw XT_COMMA -007781 70b1 .dw XT_DUP ; ( --addr len len) -007782 7204 .dw XT_2SLASH ; ( -- addr len len/2 -007783 7576 .dw XT_TUCK ; ( -- addr len/2 len len/2 -007784 720b .dw XT_2STAR ; ( -- addr len/2 len len' -007785 7193 .dw XT_MINUS ; ( -- addr len/2 rem -007786 70ff .dw XT_TO_R -007787 7154 .dw XT_ZERO -007788 028b .dw XT_QDOCHECK -007789 7036 .dw XT_DOCONDBRANCH -00778a 7792 .dw PFA_SCOMMA2 -00778b 729b .dw XT_DODO - PFA_SCOMMA1: -00778c 70b1 .dw XT_DUP ; ( -- addr addr ) -00778d 7079 .dw XT_FETCH ; ( -- addr c1c2 ) -00778e 01cc .dw XT_COMMA ; ( -- addr ) -00778f 755e .dw XT_CELLPLUS ; ( -- addr+cell ) -007790 72c9 .dw XT_DOLOOP -007791 778c .dw PFA_SCOMMA1 - PFA_SCOMMA2: -007792 70f6 .dw XT_R_FROM -007793 7128 .dw XT_GREATERZERO -007794 7036 .dw XT_DOCONDBRANCH -007795 7799 .dw PFA_SCOMMA3 -007796 70b1 .dw XT_DUP ; well, tricky -007797 7098 .dw XT_CFETCH -007798 01cc .dw XT_COMMA - PFA_SCOMMA3: -007799 70d9 .dw XT_DROP ; ( -- ) -00779a 7020 .dw XT_EXIT - .include "words/itype.asm" - - ; Tools - ; reads string from flash and prints it - VE_ITYPE: -00779b ff05 .dw $ff05 -00779c 7469 -00779d 7079 -00779e 0065 .db "itype",0 -00779f 7778 .dw VE_HEAD - .set VE_HEAD = VE_ITYPE - XT_ITYPE: -0077a0 7001 .dw DO_COLON - PFA_ITYPE: -0077a1 70b1 .dw XT_DUP ; ( --addr len len) -0077a2 7204 .dw XT_2SLASH ; ( -- addr len len/2 -0077a3 7576 .dw XT_TUCK ; ( -- addr len/2 len len/2 -0077a4 720b .dw XT_2STAR ; ( -- addr len/2 len len' -0077a5 7193 .dw XT_MINUS ; ( -- addr len/2 rem -0077a6 70ff .dw XT_TO_R -0077a7 7154 .dw XT_ZERO -0077a8 028b .dw XT_QDOCHECK -0077a9 7036 .dw XT_DOCONDBRANCH -0077aa 77b4 .dw PFA_ITYPE2 -0077ab 729b .dw XT_DODO - PFA_ITYPE1: -0077ac 70b1 .dw XT_DUP ; ( -- addr addr ) -0077ad 73cb .dw XT_FETCHI ; ( -- addr c1c2 ) -0077ae 70b1 .dw XT_DUP -0077af 77c1 .dw XT_LOWEMIT -0077b0 77bd .dw XT_HIEMIT -0077b1 722f .dw XT_1PLUS ; ( -- addr+cell ) -0077b2 72c9 .dw XT_DOLOOP -0077b3 77ac .dw PFA_ITYPE1 - PFA_ITYPE2: -0077b4 70f6 .dw XT_R_FROM -0077b5 7128 .dw XT_GREATERZERO -0077b6 7036 .dw XT_DOCONDBRANCH -0077b7 77bb .dw PFA_ITYPE3 -0077b8 70b1 .dw XT_DUP ; make sure the drop below has always something to do -0077b9 73cb .dw XT_FETCHI -0077ba 77c1 .dw XT_LOWEMIT - PFA_ITYPE3: -0077bb 70d9 .dw XT_DROP -0077bc 7020 .dw XT_EXIT - - ; ( w -- ) - ; R( -- ) - ; content of cell fetched on stack. - ;VE_HIEMIT: - ; .dw $ff06 - ; .db "hiemit" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_HIEMIT - XT_HIEMIT: -0077bd 7001 .dw DO_COLON - PFA_HIEMIT: -0077be 72f9 .dw XT_BYTESWAP -0077bf 77c1 .dw XT_LOWEMIT -0077c0 7020 .dw XT_EXIT - - ; ( w -- ) - ; R( -- ) - ; content of cell fetched on stack. - ;VE_LOWEMIT: - ; .dw $ff07 - ; .db "lowemit" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_LOWEMIT - XT_LOWEMIT: -0077c1 7001 .dw DO_COLON - PFA_LOWEMIT: -0077c2 703d .dw XT_DOLITERAL -0077c3 00ff .dw $00ff -0077c4 7213 .dw XT_AND -0077c5 758e .dw XT_EMIT -0077c6 7020 .dw XT_EXIT - .include "words/icount.asm" - - ; Tools - ; get count information out of a counted string in flash - VE_ICOUNT: -0077c7 ff06 .dw $ff06 -0077c8 6369 -0077c9 756f -0077ca 746e .db "icount" -0077cb 779b .dw VE_HEAD - .set VE_HEAD = VE_ICOUNT - XT_ICOUNT: -0077cc 7001 .dw DO_COLON - PFA_ICOUNT: -0077cd 70b1 .dw XT_DUP -0077ce 722f .dw XT_1PLUS -0077cf 70c4 .dw XT_SWAP -0077d0 73cb .dw XT_FETCHI -0077d1 7020 .dw XT_EXIT - .include "words/cr.asm" - - ; Character IO - ; cause subsequent output appear at the beginning of the next line - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CR: -0077d2 ff02 .dw 0xff02 -0077d3 7263 .db "cr" -0077d4 77c7 .dw VE_HEAD - .set VE_HEAD = VE_CR - XT_CR: -0077d5 7001 .dw DO_COLON - PFA_CR: - .endif - -0077d6 703d .dw XT_DOLITERAL -0077d7 000d .dw 13 -0077d8 758e .dw XT_EMIT -0077d9 703d .dw XT_DOLITERAL -0077da 000a .dw 10 -0077db 758e .dw XT_EMIT -0077dc 7020 .dw XT_EXIT - .include "words/space.asm" - - ; Character IO - ; emits a space (bl) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SPACE: -0077dd ff05 .dw $ff05 -0077de 7073 -0077df 6361 -0077e0 0065 .db "space",0 -0077e1 77d2 .dw VE_HEAD - .set VE_HEAD = VE_SPACE - XT_SPACE: -0077e2 7001 .dw DO_COLON - PFA_SPACE: - .endif -0077e3 75f0 .dw XT_BL -0077e4 758e .dw XT_EMIT -0077e5 7020 .dw XT_EXIT - .include "words/spaces.asm" - - ; Character IO - ; emits n space(s) (bl) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SPACES: -0077e6 ff06 .dw $ff06 -0077e7 7073 -0077e8 6361 -0077e9 7365 .db "spaces" -0077ea 77dd .dw VE_HEAD - .set VE_HEAD = VE_SPACES - XT_SPACES: -0077eb 7001 .dw DO_COLON - PFA_SPACES: - - .endif - ;C SPACES n -- output n spaces - ; BEGIN DUP 0> WHILE SPACE 1- REPEAT DROP ; -0077ec 7154 -0077ed 766a .DW XT_ZERO, XT_MAX -0077ee 70b1 -0077ef 7036 SPCS1: .DW XT_DUP,XT_DOCONDBRANCH -0077f0 77f5 DEST(SPCS2) -0077f1 77e2 -0077f2 7235 -0077f3 702f .DW XT_SPACE,XT_1MINUS,XT_DOBRANCH -0077f4 77ee DEST(SPCS1) -0077f5 70d9 -0077f6 7020 SPCS2: .DW XT_DROP,XT_EXIT - .include "words/type.asm" - - ; Character IO - ; print a RAM based string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TYPE: -0077f7 ff04 .dw $ff04 -0077f8 7974 -0077f9 6570 .db "type" -0077fa 77e6 .dw VE_HEAD - .set VE_HEAD = VE_TYPE - XT_TYPE: -0077fb 7001 .dw DO_COLON - PFA_TYPE: - - .endif -0077fc 7d5e .dw XT_BOUNDS -0077fd 028b .dw XT_QDOCHECK -0077fe 7036 .dw XT_DOCONDBRANCH -0077ff 7806 DEST(PFA_TYPE2) -007800 729b .dw XT_DODO - PFA_TYPE1: -007801 72ac .dw XT_I -007802 7098 .dw XT_CFETCH -007803 758e .dw XT_EMIT -007804 72c9 .dw XT_DOLOOP -007805 7801 DEST(PFA_TYPE1) - PFA_TYPE2: -007806 7020 .dw XT_EXIT - .include "words/tick.asm" - - ; Dictionary - ; search dictionary for name, return XT or throw an exception -13 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TICK: -007807 ff01 .dw $ff01 -007808 0027 .db "'",0 -007809 77f7 .dw VE_HEAD - .set VE_HEAD = VE_TICK - XT_TICK: -00780a 7001 .dw DO_COLON - PFA_TICK: - .endif -00780b 79b4 .dw XT_PARSENAME -00780c 7acc .dw XT_FORTHRECOGNIZER -00780d 7ad7 .dw XT_RECOGNIZE - ; a word is tickable unless DT:TOKEN is DT:NULL or - ; the interpret action is a NOOP -00780e 70b1 .dw XT_DUP -00780f 7b4a .dw XT_DT_NULL -007810 7d7f .dw XT_EQUAL -007811 70c4 .dw XT_SWAP -007812 73cb .dw XT_FETCHI -007813 703d .dw XT_DOLITERAL -007814 7b7f .dw XT_NOOP -007815 7d7f .dw XT_EQUAL -007816 721c .dw XT_OR -007817 7036 .dw XT_DOCONDBRANCH -007818 781c DEST(PFA_TICK1) -007819 703d .dw XT_DOLITERAL -00781a fff3 .dw -13 -00781b 7841 .dw XT_THROW - PFA_TICK1: -00781c 70d9 .dw XT_DROP -00781d 7020 .dw XT_EXIT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/handler.asm" - - ; Exceptions - ; USER variable used by catch/throw - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_HANDLER: -00781e ff07 .dw $ff07 -00781f 6168 -007820 646e -007821 656c -007822 0072 .db "handler",0 -007823 7807 .dw VE_HEAD - .set VE_HEAD = VE_HANDLER - XT_HANDLER: -007824 7058 .dw PFA_DOUSER - PFA_HANDLER: - .endif -007825 000a .dw USER_HANDLER - .include "words/catch.asm" - - ; Exceptions - ; execute XT and check for exceptions. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CATCH: -007826 ff05 .dw $ff05 -007827 6163 -007828 6374 -007829 0068 .db "catch",0 -00782a 781e .dw VE_HEAD - .set VE_HEAD = VE_CATCH - XT_CATCH: -00782b 7001 .dw DO_COLON - PFA_CATCH: - .endif - - ; sp@ >r -00782c 728d .dw XT_SP_FETCH -00782d 70ff .dw XT_TO_R - ; handler @ >r -00782e 7824 .dw XT_HANDLER -00782f 7079 .dw XT_FETCH -007830 70ff .dw XT_TO_R - ; rp@ handler ! -007831 7276 .dw XT_RP_FETCH -007832 7824 .dw XT_HANDLER -007833 7081 .dw XT_STORE -007834 702a .dw XT_EXECUTE - ; r> handler ! -007835 70f6 .dw XT_R_FROM -007836 7824 .dw XT_HANDLER -007837 7081 .dw XT_STORE -007838 70f6 .dw XT_R_FROM -007839 70d9 .dw XT_DROP -00783a 7154 .dw XT_ZERO -00783b 7020 .dw XT_EXIT - .include "words/throw.asm" - - ; Exceptions - ; throw an exception - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_THROW: -00783c ff05 .dw $ff05 -00783d 6874 -00783e 6f72 -00783f 0077 .db "throw",0 -007840 7826 .dw VE_HEAD - .set VE_HEAD = VE_THROW - XT_THROW: -007841 7001 .dw DO_COLON - PFA_THROW: - .endif -007842 70b1 .dw XT_DUP -007843 711a .dw XT_ZEROEQUAL -007844 7036 .dw XT_DOCONDBRANCH -007845 7848 DEST(PFA_THROW1) -007846 70d9 .dw XT_DROP -007847 7020 .dw XT_EXIT - PFA_THROW1: -007848 7824 .dw XT_HANDLER -007849 7079 .dw XT_FETCH -00784a 7280 .dw XT_RP_STORE -00784b 70f6 .dw XT_R_FROM -00784c 7824 .dw XT_HANDLER -00784d 7081 .dw XT_STORE -00784e 70f6 .dw XT_R_FROM -00784f 70c4 .dw XT_SWAP -007850 70ff .dw XT_TO_R -007851 7296 .dw XT_SP_STORE -007852 70d9 .dw XT_DROP -007853 70f6 .dw XT_R_FROM -007854 7020 .dw XT_EXIT - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/cskip.asm" - - ; String - ; skips leading occurancies in string at addr1/n1 leaving addr2/n2 pointing to the 1st non-c character - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CSKIP: -007855 ff05 .dw $ff05 -007856 7363 -007857 696b -007858 0070 .db "cskip",0 -007859 783c .dw VE_HEAD - .set VE_HEAD = VE_CSKIP - XT_CSKIP: -00785a 7001 .dw DO_COLON - PFA_CSKIP: - .endif -00785b 70ff .dw XT_TO_R ; ( -- addr1 n1 ) - PFA_CSKIP1: -00785c 70b1 .dw XT_DUP ; ( -- addr' n' n' ) -00785d 7036 .dw XT_DOCONDBRANCH ; ( -- addr' n') -00785e 7869 DEST(PFA_CSKIP2) -00785f 70cf .dw XT_OVER ; ( -- addr' n' addr' ) -007860 7098 .dw XT_CFETCH ; ( -- addr' n' c' ) -007861 7108 .dw XT_R_FETCH ; ( -- addr' n' c' c ) -007862 7d7f .dw XT_EQUAL ; ( -- addr' n' f ) -007863 7036 .dw XT_DOCONDBRANCH ; ( -- addr' n') -007864 7869 DEST(PFA_CSKIP2) -007865 7d86 .dw XT_ONE -007866 79a5 .dw XT_SLASHSTRING -007867 702f .dw XT_DOBRANCH -007868 785c DEST(PFA_CSKIP1) - PFA_CSKIP2: -007869 70f6 .dw XT_R_FROM -00786a 70d9 .dw XT_DROP ; ( -- addr2 n2) -00786b 7020 .dw XT_EXIT - .include "words/cscan.asm" - - ; String - ; Scan string at addr1/n1 for the first occurance of c, leaving addr1/n2, char at n2 is first non-c character - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CSCAN: -00786c ff05 .dw $ff05 -00786d 7363 -00786e 6163 -../../common\words/cscan.asm(12): warning: .cseg .db misalignment - padding zero byte -00786f 006e .db "cscan" -007870 7855 .dw VE_HEAD - .set VE_HEAD = VE_CSCAN - XT_CSCAN: -007871 7001 .dw DO_COLON - PFA_CSCAN: - .endif -007872 70ff .dw XT_TO_R -007873 70cf .dw XT_OVER - PFA_CSCAN1: -007874 70b1 .dw XT_DUP -007875 7098 .dw XT_CFETCH -007876 7108 .dw XT_R_FETCH -007877 7d7f .dw XT_EQUAL -007878 711a .dw XT_ZEROEQUAL -007879 7036 .dw XT_DOCONDBRANCH -00787a 7886 DEST(PFA_CSCAN2) -00787b 70c4 .dw XT_SWAP -00787c 7235 .dw XT_1MINUS -00787d 70c4 .dw XT_SWAP -00787e 70cf .dw XT_OVER -00787f 7121 .dw XT_ZEROLESS ; not negative -007880 711a .dw XT_ZEROEQUAL -007881 7036 .dw XT_DOCONDBRANCH -007882 7886 DEST(PFA_CSCAN2) -007883 722f .dw XT_1PLUS -007884 702f .dw XT_DOBRANCH -007885 7874 DEST(PFA_CSCAN1) - PFA_CSCAN2: -007886 70f0 .dw XT_NIP -007887 70cf .dw XT_OVER -007888 7193 .dw XT_MINUS -007889 70f6 .dw XT_R_FROM -00788a 70d9 .dw XT_DROP -00788b 7020 .dw XT_EXIT - - ; : my-cscan ( addr len c -- addr len' ) - ; >r over ( -- addr len addr ) - ; begin - ; dup c@ r@ <> while - ; swap 1- swap over 0 >= while - ; 1+ - ; repeat then - ; nip over - r> drop - ; ; - .include "words/accept.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ACCEPT: -00788c ff06 .dw $ff06 -00788d 6361 -00788e 6563 -00788f 7470 .db "accept" -007890 786c .dw VE_HEAD - .set VE_HEAD = VE_ACCEPT - XT_ACCEPT: -007891 7001 .dw DO_COLON - PFA_ACCEPT: - - .endif -007892 70cf -007893 719d -007894 7235 -007895 70cf .DW XT_OVER,XT_PLUS,XT_1MINUS,XT_OVER -007896 759f -007897 70b1 -007898 78d2 -007899 711a -00789a 7036 ACC1: .DW XT_KEY,XT_DUP,XT_CRLFQ,XT_ZEROEQUAL,XT_DOCONDBRANCH -00789b 78c4 DEST(ACC5) -00789c 70b1 -00789d 703d -00789e 0008 -00789f 7d7f -0078a0 7036 .DW XT_DUP,XT_DOLITERAL,8,XT_EQUAL,XT_DOCONDBRANCH -0078a1 78b4 DEST(ACC3) -0078a2 70d9 -0078a3 70e1 -0078a4 7565 -0078a5 7178 -0078a6 70ff -0078a7 70e1 -0078a8 70e1 -0078a9 70f6 -0078aa 7036 .DW XT_DROP,XT_ROT,XT_2DUP,XT_GREATER,XT_TO_R,XT_ROT,XT_ROT,XT_R_FROM,XT_DOCONDBRANCH -0078ab 78b2 DEST(ACC6) -0078ac 78ca -0078ad 7235 -0078ae 70ff -0078af 70cf -0078b0 70f6 -0078b1 015e .DW XT_BS,XT_1MINUS,XT_TO_R,XT_OVER,XT_R_FROM,XT_UMAX -0078b2 702f ACC6: .DW XT_DOBRANCH -0078b3 78c2 DEST(ACC4) - - - ACC3: ; check for remaining control characters, replace them with blank -0078b4 70b1 .dw XT_DUP ; ( -- addr k k ) -0078b5 75f0 .dw XT_BL -0078b6 716e .dw XT_LESS -0078b7 7036 .dw XT_DOCONDBRANCH -0078b8 78bb DEST(PFA_ACCEPT6) -0078b9 70d9 .dw XT_DROP -0078ba 75f0 .dw XT_BL - PFA_ACCEPT6: -0078bb 70b1 -0078bc 758e -0078bd 70cf -0078be 708d -0078bf 722f -0078c0 70cf -0078c1 016a .DW XT_DUP,XT_EMIT,XT_OVER,XT_CSTORE,XT_1PLUS,XT_OVER,XT_UMIN -0078c2 702f ACC4: .DW XT_DOBRANCH -0078c3 7896 DEST(ACC1) -0078c4 70d9 -0078c5 70f0 -0078c6 70c4 -0078c7 7193 -0078c8 77d5 -0078c9 7020 ACC5: .DW XT_DROP,XT_NIP,XT_SWAP,XT_MINUS,XT_CR,XT_EXIT - - - ; ( -- ) - ; System - ; send a backspace character to overwrite the current char - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - ;VE_BS: - ; .dw $ff02 - ; .db "bs" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_BS - XT_BS: -0078ca 7001 .dw DO_COLON - .endif -0078cb 703d .dw XT_DOLITERAL -0078cc 0008 .dw 8 -0078cd 70b1 .dw XT_DUP -0078ce 758e .dw XT_EMIT -0078cf 77e2 .dw XT_SPACE -0078d0 758e .dw XT_EMIT -0078d1 7020 .dw XT_EXIT - - - ; ( c -- f ) - ; System - ; is the character a line end character? - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_CRLFQ: - ; .dw $ff02 - ; .db "crlf?" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_CRLFQ - XT_CRLFQ: -0078d2 7001 .dw DO_COLON - .endif -0078d3 70b1 .dw XT_DUP -0078d4 703d .dw XT_DOLITERAL -0078d5 000d .dw 13 -0078d6 7d7f .dw XT_EQUAL -0078d7 70c4 .dw XT_SWAP -0078d8 703d .dw XT_DOLITERAL -0078d9 000a .dw 10 -0078da 7d7f .dw XT_EQUAL -0078db 721c .dw XT_OR -0078dc 7020 .dw XT_EXIT - .include "words/refill.asm" - - ; System - ; refills the input buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_REFILL: -0078dd ff06 .dw $ff06 -0078de 6572 -0078df 6966 -0078e0 6c6c .db "refill" -0078e1 788c .dw VE_HEAD - .set VE_HEAD = VE_REFILL - XT_REFILL: -0078e2 7c13 .dw PFA_DODEFER1 - PFA_REFILL: - .endif -0078e3 001a .dw USER_REFILL -0078e4 7bdc .dw XT_UDEFERFETCH -0078e5 7be8 .dw XT_UDEFERSTORE - .include "words/char.asm" - - ; Tools - ; copy the first character of the next word onto the stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_CHAR: -0078e6 ff04 .dw $ff04 -0078e7 6863 -0078e8 7261 .db "char" -0078e9 78dd .dw VE_HEAD - .set VE_HEAD = VE_CHAR - XT_CHAR: -0078ea 7001 .dw DO_COLON - PFA_CHAR: - .endif -0078eb 79b4 .dw XT_PARSENAME -0078ec 70d9 .dw XT_DROP -0078ed 7098 .dw XT_CFETCH -0078ee 7020 .dw XT_EXIT - .include "words/number.asm" - - ; Numeric IO - ; convert a string at addr to a number - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NUMBER: -0078ef ff06 .dw $ff06 -0078f0 756e -0078f1 626d -0078f2 7265 .db "number" -0078f3 78e6 .dw VE_HEAD - .set VE_HEAD = VE_NUMBER - XT_NUMBER: -0078f4 7001 .dw DO_COLON - PFA_NUMBER: - .endif -0078f5 7551 .dw XT_BASE -0078f6 7079 .dw XT_FETCH -0078f7 70ff .dw XT_TO_R -0078f8 7938 .dw XT_QSIGN -0078f9 70ff .dw XT_TO_R -0078fa 794b .dw XT_SET_BASE -0078fb 7938 .dw XT_QSIGN -0078fc 70f6 .dw XT_R_FROM -0078fd 721c .dw XT_OR -0078fe 70ff .dw XT_TO_R - ; check whether something is left -0078ff 70b1 .dw XT_DUP -007900 711a .dw XT_ZEROEQUAL -007901 7036 .dw XT_DOCONDBRANCH -007902 790b DEST(PFA_NUMBER0) - ; nothing is left. It cannot be a number at all -007903 756e .dw XT_2DROP -007904 70f6 .dw XT_R_FROM -007905 70d9 .dw XT_DROP -007906 70f6 .dw XT_R_FROM -007907 7551 .dw XT_BASE -007908 7081 .dw XT_STORE -007909 7154 .dw XT_ZERO -00790a 7020 .dw XT_EXIT - PFA_NUMBER0: -00790b 731e .dw XT_2TO_R -00790c 7154 .dw XT_ZERO ; starting value -00790d 7154 .dw XT_ZERO -00790e 732d .dw XT_2R_FROM -00790f 7969 .dw XT_TO_NUMBER ; ( 0. addr len -- d addr' len' - ; check length of the remaining string. - ; if zero: a single cell number is entered -007910 70b9 .dw XT_QDUP -007911 7036 .dw XT_DOCONDBRANCH -007912 792d DEST(PFA_NUMBER1) - ; if equal 1: mayba a trailing dot? --> double cell number -007913 7d86 .dw XT_ONE -007914 7d7f .dw XT_EQUAL -007915 7036 .dw XT_DOCONDBRANCH -007916 7924 DEST(PFA_NUMBER2) - ; excatly one character is left -007917 7098 .dw XT_CFETCH -007918 703d .dw XT_DOLITERAL -007919 002e .dw 46 ; . -00791a 7d7f .dw XT_EQUAL -00791b 7036 .dw XT_DOCONDBRANCH -00791c 7925 DEST(PFA_NUMBER6) - ; its a double cell number - ; incorporate sign into number -00791d 70f6 .dw XT_R_FROM -00791e 7036 .dw XT_DOCONDBRANCH -00791f 7921 DEST(PFA_NUMBER3) -007920 7ce1 .dw XT_DNEGATE - PFA_NUMBER3: -007921 7d8b .dw XT_TWO -007922 702f .dw XT_DOBRANCH -007923 7933 DEST(PFA_NUMBER5) - PFA_NUMBER2: -007924 70d9 .dw XT_DROP - PFA_NUMBER6: -007925 756e .dw XT_2DROP -007926 70f6 .dw XT_R_FROM -007927 70d9 .dw XT_DROP -007928 70f6 .dw XT_R_FROM -007929 7551 .dw XT_BASE -00792a 7081 .dw XT_STORE -00792b 7154 .dw XT_ZERO -00792c 7020 .dw XT_EXIT - PFA_NUMBER1: -00792d 756e .dw XT_2DROP ; remove the address - ; incorporate sign into number -00792e 70f6 .dw XT_R_FROM -00792f 7036 .dw XT_DOCONDBRANCH -007930 7932 DEST(PFA_NUMBER4) -007931 763f .dw XT_NEGATE - PFA_NUMBER4: -007932 7d86 .dw XT_ONE - PFA_NUMBER5: -007933 70f6 .dw XT_R_FROM -007934 7551 .dw XT_BASE -007935 7081 .dw XT_STORE -007936 714b .dw XT_TRUE -007937 7020 .dw XT_EXIT - .include "words/q-sign.asm" - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_QSIGN: -007938 7001 .dw DO_COLON - PFA_QSIGN: ; ( c -- ) - .endif -007939 70cf .dw XT_OVER ; ( -- addr len addr ) -00793a 7098 .dw XT_CFETCH -00793b 703d .dw XT_DOLITERAL -00793c 002d .dw '-' -00793d 7d7f .dw XT_EQUAL ; ( -- addr len flag ) -00793e 70b1 .dw XT_DUP -00793f 70ff .dw XT_TO_R -007940 7036 .dw XT_DOCONDBRANCH -007941 7944 DEST(PFA_NUMBERSIGN_DONE) -007942 7d86 .dw XT_ONE ; skip sign character -007943 79a5 .dw XT_SLASHSTRING - PFA_NUMBERSIGN_DONE: -007944 70f6 .dw XT_R_FROM -007945 7020 .dw XT_EXIT - .include "words/set-base.asm" - - ; Numeric IO - ; skip a numeric prefix character - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_BASES: -007946 7052 .dw PFA_DOCONSTANT - .endif -007947 000a -007948 0010 -007949 0002 -00794a 000a .dw 10,16,2,10 ; last one could a 8 instead. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_SET_BASE: -00794b 7001 .dw DO_COLON - PFA_SET_BASE: ; ( adr1 len1 -- adr2 len2 ) - .endif -00794c 70cf .dw XT_OVER -00794d 7098 .dw XT_CFETCH -00794e 703d .dw XT_DOLITERAL -00794f 0023 .dw 35 -007950 7193 .dw XT_MINUS -007951 70b1 .dw XT_DUP -007952 7154 .dw XT_ZERO -007953 703d .dw XT_DOLITERAL -007954 0004 .dw 4 -007955 7677 .dw XT_WITHIN -007956 7036 .dw XT_DOCONDBRANCH -007957 7961 DEST(SET_BASE1) - .if cpu_msp430==1 - .endif -007958 7946 .dw XT_BASES -007959 719d .dw XT_PLUS -00795a 73cb .dw XT_FETCHI -00795b 7551 .dw XT_BASE -00795c 7081 .dw XT_STORE -00795d 7d86 .dw XT_ONE -00795e 79a5 .dw XT_SLASHSTRING -00795f 702f .dw XT_DOBRANCH -007960 7962 DEST(SET_BASE2) - SET_BASE1: -007961 70d9 .dw XT_DROP - SET_BASE2: -007962 7020 .dw XT_EXIT - - ; create bases 10 , 16 , 2 , 8 , - ; : set-base 35 - dup 0 4 within if - ; bases + @i base ! 1 /string - ; else - ; drop - ; then ; - .include "words/to-number.asm" - - ; Numeric IO - ; convert a string to a number c-addr2/u2 is the unconverted string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO_NUMBER: -007963 ff07 .dw $ff07 -007964 6e3e -007965 6d75 -007966 6562 -007967 0072 .db ">number",0 -007968 78ef .dw VE_HEAD - .set VE_HEAD = VE_TO_NUMBER - XT_TO_NUMBER: -007969 7001 .dw DO_COLON - - .endif - -00796a 70b1 -00796b 7036 TONUM1: .DW XT_DUP,XT_DOCONDBRANCH -00796c 7981 DEST(TONUM3) -00796d 70cf -00796e 7098 -00796f 7753 .DW XT_OVER,XT_CFETCH,XT_DIGITQ -007970 711a -007971 7036 .DW XT_ZEROEQUAL,XT_DOCONDBRANCH -007972 7975 DEST(TONUM2) -007973 70d9 -007974 7020 .DW XT_DROP,XT_EXIT -007975 70ff -007976 7d05 -007977 7551 -007978 7079 -007979 014f TONUM2: .DW XT_TO_R,XT_2SWAP,XT_BASE,XT_FETCH,XT_UDSTAR -00797a 70f6 -00797b 0147 -00797c 7d05 .DW XT_R_FROM,XT_MPLUS,XT_2SWAP -00797d 7d86 -00797e 79a5 -00797f 702f .DW XT_ONE,XT_SLASHSTRING,XT_DOBRANCH -007980 796a DEST(TONUM1) -007981 7020 TONUM3: .DW XT_EXIT - - ;C >NUMBER ud adr u -- ud' adr' u' - ;C convert string to number - ; BEGIN - ; DUP WHILE - ; OVER C@ DIGIT? - ; 0= IF DROP EXIT THEN - ; >R 2SWAP BASE @ UD* - ; R> M+ 2SWAP - ; 1 /STRING - ; REPEAT ; - .include "words/parse.asm" - - ; String - ; in input buffer parse ccc delimited string by the delimiter char. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PARSE: -007982 ff05 .dw $ff05 -007983 6170 -007984 7372 -007985 0065 .db "parse",0 -007986 7963 .dw VE_HEAD - .set VE_HEAD = VE_PARSE - XT_PARSE: -007987 7001 .dw DO_COLON - PFA_PARSE: - .endif -007988 70ff .dw XT_TO_R ; ( -- ) -007989 799b .dw XT_SOURCE ; ( -- addr len) -00798a 757e .dw XT_TO_IN ; ( -- addr len >in) -00798b 7079 .dw XT_FETCH -00798c 79a5 .dw XT_SLASHSTRING ; ( -- addr' len' ) - -00798d 70f6 .dw XT_R_FROM ; ( -- addr' len' c) -00798e 7871 .dw XT_CSCAN ; ( -- addr' len'') -00798f 70b1 .dw XT_DUP ; ( -- addr' len'' len'') -007990 722f .dw XT_1PLUS -007991 757e .dw XT_TO_IN ; ( -- addr' len'' len'' >in) -007992 7265 .dw XT_PLUSSTORE ; ( -- addr' len') -007993 7d86 .dw XT_ONE -007994 79a5 .dw XT_SLASHSTRING -007995 7020 .dw XT_EXIT - .include "words/source.asm" - - ; System - ; address and current length of the input buffer - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SOURCE: -007996 ff06 .dw $FF06 -007997 6f73 -007998 7275 -007999 6563 .db "source" -00799a 7982 .dw VE_HEAD - .set VE_HEAD = VE_SOURCE - XT_SOURCE: -00799b 7c13 .dw PFA_DODEFER1 - PFA_SOURCE: - .endif -00799c 0016 .dw USER_SOURCE -00799d 7bdc .dw XT_UDEFERFETCH -00799e 7be8 .dw XT_UDEFERSTORE - - - .include "words/slash-string.asm" - - ; String - ; adjust string from addr1 to addr1+n, reduce length from u1 to u2 by n - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SLASHSTRING: -00799f ff07 .dw $ff07 -0079a0 732f -0079a1 7274 -0079a2 6e69 -0079a3 0067 .db "/string",0 -0079a4 7996 .dw VE_HEAD - .set VE_HEAD = VE_SLASHSTRING - XT_SLASHSTRING: -0079a5 7001 .dw DO_COLON - PFA_SLASHSTRING: - .endif -0079a6 70e1 .dw XT_ROT -0079a7 70cf .dw XT_OVER -0079a8 719d .dw XT_PLUS -0079a9 70e1 .dw XT_ROT -0079aa 70e1 .dw XT_ROT -0079ab 7193 .dw XT_MINUS -0079ac 7020 .dw XT_EXIT - - .include "words/parse-name.asm" - - ; String - ; In the SOURCE buffer parse whitespace delimited string. Returns string address within SOURCE. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_PARSENAME: -0079ad ff0a .dw $FF0A -0079ae 6170 -0079af 7372 -0079b0 2d65 -0079b1 616e -0079b2 656d .db "parse-name" -0079b3 799f .dw VE_HEAD - .set VE_HEAD = VE_PARSENAME - XT_PARSENAME: -0079b4 7001 .dw DO_COLON - PFA_PARSENAME: - .endif -0079b5 75f0 .dw XT_BL -0079b6 79b8 .dw XT_SKIPSCANCHAR -0079b7 7020 .dw XT_EXIT - - ; ( c -- addr2 len2 ) - ; String - ; skips char and scan what's left in source for char - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_SKIPSCANCHAR: - ; .dw $FF0A - ; .db "skipscanchar" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_SKIPSCANCHAR - XT_SKIPSCANCHAR: -0079b8 7001 .dw DO_COLON - PFA_SKIPSCANCHAR: - .endif -0079b9 70ff .dw XT_TO_R -0079ba 799b .dw XT_SOURCE -0079bb 757e .dw XT_TO_IN -0079bc 7079 .dw XT_FETCH -0079bd 79a5 .dw XT_SLASHSTRING - -0079be 7108 .dw XT_R_FETCH -0079bf 785a .dw XT_CSKIP -0079c0 70f6 .dw XT_R_FROM -0079c1 7871 .dw XT_CSCAN - - ; adjust >IN -0079c2 7565 .dw XT_2DUP -0079c3 719d .dw XT_PLUS -0079c4 799b .dw XT_SOURCE -0079c5 70d9 .dw XT_DROP -0079c6 7193 .dw XT_MINUS -0079c7 757e .dw XT_TO_IN -0079c8 7081 .dw XT_STORE -0079c9 7020 .dw XT_EXIT - .include "words/find-xt.asm" - - ; Tools - ; search wordlists for an entry with the xt from c-addr/len - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_FINDXT: -0079ca ff07 .dw $ff07 -0079cb 6966 -0079cc 646e -0079cd 782d -0079ce 0074 .db "find-xt",0 -0079cf 79ad .dw VE_HEAD - .set VE_HEAD = VE_FINDXT - XT_FINDXT: -0079d0 7001 .dw DO_COLON - PFA_FINDXT: - .endif -0079d1 703d .dw XT_DOLITERAL -0079d2 79dc .dw XT_FINDXTA -0079d3 703d .dw XT_DOLITERAL -0079d4 004e .dw CFG_ORDERLISTLEN -0079d5 040c .dw XT_MAPSTACK -0079d6 711a .dw XT_ZEROEQUAL -0079d7 7036 .dw XT_DOCONDBRANCH -0079d8 79db DEST(PFA_FINDXT1) -0079d9 756e .dw XT_2DROP -0079da 7154 .dw XT_ZERO - PFA_FINDXT1: -0079db 7020 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - XT_FINDXTA: -0079dc 7001 .dw DO_COLON - PFA_FINDXTA: - .endif -0079dd 70ff .dw XT_TO_R -0079de 7565 .dw XT_2DUP -0079df 70f6 .dw XT_R_FROM -0079e0 7c25 .dw XT_SEARCH_WORDLIST -0079e1 70b1 .dw XT_DUP -0079e2 7036 .dw XT_DOCONDBRANCH -0079e3 79e9 DEST(PFA_FINDXTA1) -0079e4 70ff .dw XT_TO_R -0079e5 70f0 .dw XT_NIP -0079e6 70f0 .dw XT_NIP -0079e7 70f6 .dw XT_R_FROM -0079e8 714b .dw XT_TRUE - PFA_FINDXTA1: -0079e9 7020 .dw XT_EXIT - - .include "words/prompt-ok.asm" - - ; System - ; send the READY prompt to the command line - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_PROMPTOK: - ; .dw $ff02 - ; .db "ok" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_PROMPTOK - XT_DEFAULT_PROMPTOK: -0079ea 7001 .dw DO_COLON - PFA_DEFAULT_PROMPTOK: -0079eb 776d .dw XT_DOSLITERAL -0079ec 0003 .dw 3 -0079ed 6f20 -0079ee 006b .db " ok",0 - .endif -0079ef 77a0 .dw XT_ITYPE -0079f0 7020 .dw XT_EXIT - - ; ------------------------ - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PROMPTOK: -0079f1 ff03 .dw $FF03 -0079f2 6f2e -../../common\words/prompt-ok.asm(43): warning: .cseg .db misalignment - padding zero byte -0079f3 006b .db ".ok" -0079f4 79ca .dw VE_HEAD - .set VE_HEAD = VE_PROMPTOK - XT_PROMPTOK: -0079f5 7c13 .dw PFA_DODEFER1 - PFA_PROMPTOK: - .endif -0079f6 001c .dw USER_P_OK -0079f7 7bdc .dw XT_UDEFERFETCH -0079f8 7be8 .dw XT_UDEFERSTORE - .include "words/prompt-ready.asm" - - ; System - ; process the error prompt - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_PROMPTRDY: - ; .dw $ff04 - ; .db "p_er" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_PROMPTRDY - XT_DEFAULT_PROMPTREADY: -0079f9 7001 .dw DO_COLON - PFA_DEFAULT_PROMPTREADY: -0079fa 776d .dw XT_DOSLITERAL -0079fb 0002 .dw 2 -0079fc 203e .db "> " - .endif -0079fd 77d5 .dw XT_CR -0079fe 77a0 .dw XT_ITYPE -0079ff 7020 .dw XT_EXIT - - ; ------------------------ - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PROMPTREADY: -007a00 ff06 .dw $FF06 -007a01 722e -007a02 6165 -007a03 7964 .db ".ready" -007a04 79f1 .dw VE_HEAD - .set VE_HEAD = VE_PROMPTREADY - XT_PROMPTREADY: -007a05 7c13 .dw PFA_DODEFER1 - PFA_PROMPTREADY: - .endif -007a06 0020 .dw USER_P_RDY -007a07 7bdc .dw XT_UDEFERFETCH -007a08 7be8 .dw XT_UDEFERSTORE - .include "words/prompt-error.asm" - - ; System - ; process the error prompt - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ;VE_PROMPTERROR: - ; .dw $ff04 - ; .db "p_er" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_PROMPTERROR - XT_DEFAULT_PROMPTERROR: -007a09 7001 .dw DO_COLON - PFA_DEFAULT_PROMPTERROR: -007a0a 776d .dw XT_DOSLITERAL -007a0b 0004 .dw 4 -007a0c 3f20 -007a0d 203f .db " ?? " - .endif -007a0e 77a0 .dw XT_ITYPE -007a0f 7551 .dw XT_BASE -007a10 7079 .dw XT_FETCH -007a11 70ff .dw XT_TO_R -007a12 75dd .dw XT_DECIMAL -007a13 7722 .dw XT_DOT -007a14 757e .dw XT_TO_IN -007a15 7079 .dw XT_FETCH -007a16 7722 .dw XT_DOT -007a17 70f6 .dw XT_R_FROM -007a18 7551 .dw XT_BASE -007a19 7081 .dw XT_STORE -007a1a 7020 .dw XT_EXIT - - ; ------------------------ - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_PROMPTERROR: -007a1b ff06 .dw $FF06 -007a1c 652e -007a1d 7272 -007a1e 726f .db ".error" -007a1f 7a00 .dw VE_HEAD - .set VE_HEAD = VE_PROMPTERROR - XT_PROMPTERROR: -007a20 7c13 .dw PFA_DODEFER1 - PFA_PROMPTERROR: - .endif -007a21 001e .dw USER_P_ERR -007a22 7bdc .dw XT_UDEFERFETCH -007a23 7be8 .dw XT_UDEFERSTORE - - .include "words/quit.asm" - - ; System - ; main loop of amforth. accept - interpret in an endless loop - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QUIT: -007a24 ff04 .dw $ff04 -007a25 7571 -007a26 7469 .db "quit" -007a27 7a1b .dw VE_HEAD - .set VE_HEAD = VE_QUIT - XT_QUIT: -007a28 7001 .dw DO_COLON - .endif - PFA_QUIT: -007a29 02c1 -007a2a 02c8 -007a2b 7081 .dw XT_LP0,XT_LP,XT_STORE -007a2c 7a89 .dw XT_SP0 -007a2d 7296 .dw XT_SP_STORE -007a2e 7a96 .dw XT_RP0 -007a2f 7280 .dw XT_RP_STORE -007a30 0356 .dw XT_LBRACKET - - PFA_QUIT2: -007a31 754b .dw XT_STATE -007a32 7079 .dw XT_FETCH -007a33 711a .dw XT_ZEROEQUAL -007a34 7036 .dw XT_DOCONDBRANCH -007a35 7a37 DEST(PFA_QUIT4) -007a36 7a05 .dw XT_PROMPTREADY - PFA_QUIT4: -007a37 78e2 .dw XT_REFILL -007a38 7036 .dw XT_DOCONDBRANCH -007a39 7a49 DEST(PFA_QUIT3) -007a3a 703d .dw XT_DOLITERAL -007a3b 7aaf .dw XT_INTERPRET -007a3c 782b .dw XT_CATCH -007a3d 70b9 .dw XT_QDUP -007a3e 7036 .dw XT_DOCONDBRANCH -007a3f 7a49 DEST(PFA_QUIT3) -007a40 70b1 .dw XT_DUP -007a41 703d .dw XT_DOLITERAL -007a42 fffe .dw -2 -007a43 716e .dw XT_LESS -007a44 7036 .dw XT_DOCONDBRANCH -007a45 7a47 DEST(PFA_QUIT5) -007a46 7a20 .dw XT_PROMPTERROR - PFA_QUIT5: -007a47 702f .dw XT_DOBRANCH -007a48 7a29 DEST(PFA_QUIT) - PFA_QUIT3: -007a49 79f5 .dw XT_PROMPTOK -007a4a 702f .dw XT_DOBRANCH -007a4b 7a31 DEST(PFA_QUIT2) - ; .dw XT_EXIT ; never reached - - .include "words/pause.asm" - - ; Multitasking - ; Fetch pause vector and execute it. may make a context/task switch - VE_PAUSE: -007a4c ff05 .dw $ff05 -007a4d 6170 -007a4e 7375 -007a4f 0065 .db "pause",0 -007a50 7a24 .dw VE_HEAD - .set VE_HEAD = VE_PAUSE - XT_PAUSE: -007a51 7c13 .dw PFA_DODEFER1 - PFA_PAUSE: -007a52 013a .dw ram_pause -007a53 7bc8 .dw XT_RDEFERFETCH -007a54 7bd2 .dw XT_RDEFERSTORE - - .dseg -00013a ram_pause: .byte 2 - .cseg - .include "words/cold.asm" - - ; System - ; start up amforth. - VE_COLD: -007a55 ff04 .dw $ff04 -007a56 6f63 -007a57 646c .db "cold" -007a58 7a4c .dw VE_HEAD - .set VE_HEAD = VE_COLD - XT_COLD: -007a59 7a5a .dw PFA_COLD - PFA_COLD: -007a5a b6a4 in_ mcu_boot, MCUSR -007a5b 2422 clr zerol -007a5c 2433 clr zeroh -007a5d 24bb clr isrflag -007a5e be24 out_ MCUSR, zerol - ; clear RAM -007a5f e0e0 ldi zl, low(ramstart) -007a60 e0f1 ldi zh, high(ramstart) - clearloop: -007a61 9221 st Z+, zerol -007a62 30e0 cpi zl, low(sram_size+ramstart) -007a63 f7e9 brne clearloop -007a64 31f1 cpi zh, high(sram_size+ramstart) -007a65 f7d9 brne clearloop - ; init first user data area - ; allocate space for User Area - .dseg -00013c ram_user1: .byte SYSUSERSIZE + APPUSERSIZE - .cseg -007a66 e3ec ldi zl, low(ram_user1) -007a67 e0f1 ldi zh, high(ram_user1) -007a68 012f movw upl, zl - ; init return stack pointer -007a69 ef0f ldi temp0,low(rstackstart) -007a6a bf0d out_ SPL,temp0 -007a6b 8304 std Z+4, temp0 -007a6c e110 ldi temp1,high(rstackstart) -007a6d bf1e out_ SPH,temp1 -007a6e 8315 std Z+5, temp1 - - ; init parameter stack pointer -007a6f eacf ldi yl,low(stackstart) -007a70 83c6 std Z+6, yl -007a71 e1d0 ldi yh,high(stackstart) -007a72 83d7 std Z+7, yh - - ; load Forth IP with starting word -007a73 e7ac ldi XL, low(PFA_WARM) -007a74 e7ba ldi XH, high(PFA_WARM) - ; its a far jump... -007a75 940c 7005 jmp_ DO_NEXT - .include "words/warm.asm" - - ; System - ; initialize amforth further. executes turnkey operation and go to quit - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_WARM: -007a77 ff04 .dw $ff04 -007a78 6177 -007a79 6d72 .db "warm" -007a7a 7a55 .dw VE_HEAD - .set VE_HEAD = VE_WARM - XT_WARM: -007a7b 7001 .dw DO_COLON - PFA_WARM: - .endif -007a7c 7d50 .dw XT_INIT_RAM -007a7d 703d .dw XT_DOLITERAL -007a7e 7b7f .dw XT_NOOP -007a7f 703d .dw XT_DOLITERAL -007a80 7a51 .dw XT_PAUSE -007a81 7bf3 .dw XT_DEFERSTORE -007a82 0356 .dw XT_LBRACKET -007a83 75f8 .dw XT_TURNKEY -007a84 7a28 .dw XT_QUIT ; never returns - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/sp0.asm" - - ; Stack - ; start address of the data stack - VE_SP0: -007a85 ff03 .dw $ff03 -007a86 7073 -007a87 0030 .db "sp0",0 -007a88 7a77 .dw VE_HEAD - .set VE_HEAD = VE_SP0 - XT_SP0: -007a89 706f .dw PFA_DOVALUE1 - PFA_SP0: -007a8a 0006 .dw USER_SP0 -007a8b 7bdc .dw XT_UDEFERFETCH -007a8c 7be8 .dw XT_UDEFERSTORE - - ; ( -- addr) - ; Stack - ; address of user variable to store top-of-stack for inactive tasks - VE_SP: -007a8d ff02 .dw $ff02 -007a8e 7073 .db "sp" -007a8f 7a85 .dw VE_HEAD - .set VE_HEAD = VE_SP - XT_SP: -007a90 7058 .dw PFA_DOUSER - PFA_SP: -007a91 0008 .dw USER_SP - .include "words/rp0.asm" - - ; Stack - ; start address of return stack - VE_RP0: -007a92 ff03 .dw $ff03 -007a93 7072 -007a94 0030 .db "rp0",0 -007a95 7a8d .dw VE_HEAD - .set VE_HEAD = VE_RP0 - XT_RP0: -007a96 7001 .dw DO_COLON - PFA_RP0: -007a97 7a9a .dw XT_DORP0 -007a98 7079 .dw XT_FETCH -007a99 7020 .dw XT_EXIT - - ; ( -- addr) - ; Stack - ; user variable of the address of the initial return stack - ;VE_DORP0: - ; .dw $ff05 - ; .db "(rp0)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DORP0 - XT_DORP0: -007a9a 7058 .dw PFA_DOUSER - PFA_DORP0: -007a9b 0004 .dw USER_RP - .include "words/depth.asm" - - ; Stack - ; number of single-cell values contained in the data stack before n was placed on the stack. - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DEPTH: -007a9c ff05 .dw $ff05 -007a9d 6564 -007a9e 7470 -007a9f 0068 .db "depth",0 -007aa0 7a92 .dw VE_HEAD - .set VE_HEAD = VE_DEPTH - XT_DEPTH: -007aa1 7001 .dw DO_COLON - PFA_DEPTH: - .endif -007aa2 7a89 .dw XT_SP0 -007aa3 728d .dw XT_SP_FETCH -007aa4 7193 .dw XT_MINUS -007aa5 7204 .dw XT_2SLASH -007aa6 7235 .dw XT_1MINUS -007aa7 7020 .dw XT_EXIT - .include "words/interpret.asm" - - ; System - ; Interpret SOURCE word by word. - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_INTERPRET: -007aa8 ff09 .dw $ff09 -007aa9 6e69 -007aaa 6574 -007aab 7072 -007aac 6572 -007aad 0074 .db "interpret",0 -007aae 7a9c .dw VE_HEAD - .set VE_HEAD = VE_INTERPRET - XT_INTERPRET: -007aaf 7001 .dw DO_COLON - .endif - PFA_INTERPRET: -007ab0 79b4 .dw XT_PARSENAME ; ( -- addr len ) -007ab1 70b1 .dw XT_DUP ; ( -- addr len flag) -007ab2 7036 .dw XT_DOCONDBRANCH -007ab3 7ac0 DEST(PFA_INTERPRET2) -007ab4 7acc .dw XT_FORTHRECOGNIZER -007ab5 7ad7 .dw XT_RECOGNIZE -007ab6 754b .dw XT_STATE -007ab7 7079 .dw XT_FETCH -007ab8 7036 .dw XT_DOCONDBRANCH -007ab9 7abb DEST(PFA_INTERPRET1) -007aba 7bab .dw XT_ICELLPLUS ; we need the compile action - PFA_INTERPRET1: -007abb 73cb .dw XT_FETCHI -007abc 702a .dw XT_EXECUTE -007abd 7b57 .dw XT_QSTACK -007abe 702f .dw XT_DOBRANCH -007abf 7ab0 DEST(PFA_INTERPRET) - PFA_INTERPRET2: -007ac0 756e .dw XT_2DROP -007ac1 7020 .dw XT_EXIT - .include "words/forth-recognizer.asm" - - ; System Value - ; address of the next free data space (RAM) cell - VE_FORTHRECOGNIZER: -007ac2 ff10 .dw $ff10 -007ac3 6f66 -007ac4 7472 -007ac5 2d68 -007ac6 6572 -007ac7 6f63 -007ac8 6e67 -007ac9 7a69 -007aca 7265 .db "forth-recognizer" -007acb 7aa8 .dw VE_HEAD - .set VE_HEAD = VE_FORTHRECOGNIZER - XT_FORTHRECOGNIZER: -007acc 706f .dw PFA_DOVALUE1 - PFA_FORTHRECOGNIZER: -007acd 0042 .dw CFG_FORTHRECOGNIZER -007ace 7bb4 .dw XT_EDEFERFETCH -007acf 7bbe .dw XT_EDEFERSTORE - .include "words/recognize.asm" - - ; System - ; walk the recognizer stack - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RECOGNIZE: -007ad0 ff09 .dw $ff09 -007ad1 6572 -007ad2 6f63 -007ad3 6e67 -007ad4 7a69 -007ad5 0065 .db "recognize",0 -007ad6 7ac2 .dw VE_HEAD - .set VE_HEAD = VE_RECOGNIZE - XT_RECOGNIZE: -007ad7 7001 .dw DO_COLON - PFA_RECOGNIZE: - .endif -007ad8 703d .dw XT_DOLITERAL -007ad9 7ae2 .dw XT_RECOGNIZE_A -007ada 70c4 .dw XT_SWAP -007adb 040c .dw XT_MAPSTACK -007adc 711a .dw XT_ZEROEQUAL -007add 7036 .dw XT_DOCONDBRANCH -007ade 7ae1 DEST(PFA_RECOGNIZE1) -007adf 756e .dw XT_2DROP -007ae0 7b4a .dw XT_DT_NULL - PFA_RECOGNIZE1: -007ae1 7020 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - ; ( addr len XT -- addr len [ dt:xt -1 | 0 ] ) - XT_RECOGNIZE_A: -007ae2 7001 .dw DO_COLON - PFA_RECOGNIZE_A: - .endif -007ae3 70e1 .dw XT_ROT ; -- len xt addr -007ae4 70e1 .dw XT_ROT ; -- xt addr len -007ae5 7565 .dw XT_2DUP -007ae6 731e .dw XT_2TO_R -007ae7 70e1 .dw XT_ROT ; -- addr len xt -007ae8 702a .dw XT_EXECUTE ; -- i*x dt:* | dt:null -007ae9 732d .dw XT_2R_FROM -007aea 70e1 .dw XT_ROT -007aeb 70b1 .dw XT_DUP -007aec 7b4a .dw XT_DT_NULL -007aed 7d7f .dw XT_EQUAL -007aee 7036 .dw XT_DOCONDBRANCH -007aef 7af3 DEST(PFA_RECOGNIZE_A1) -007af0 70d9 .dw XT_DROP -007af1 7154 .dw XT_ZERO -007af2 7020 .dw XT_EXIT - PFA_RECOGNIZE_A1: -007af3 70f0 .dw XT_NIP -007af4 70f0 .dw XT_NIP -007af5 714b .dw XT_TRUE -007af6 7020 .dw XT_EXIT - - ; : recognize ( addr len stack-id -- i*x dt:* | dt:null ) - ; [: ( addr len -- addr len 0 | i*x dt:* -1 ) - ; rot rot 2dup 2>r rot execute 2r> rot - ; dup dt:null = ( -- addr len dt:* f ) - ; if drop 0 else nip nip -1 then - ; ;] - ; map-stack ( -- i*x addr len dt:* f ) - ; 0= if \ a recognizer did the job, remove addr/len - ; 2drop dt:null - ; then ; - ; - .include "words/rec-intnum.asm" - - ; Interpreter - ; Method table for single cell integers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_NUM: -007af7 ff06 .dw $ff06 -007af8 7464 -007af9 6e3a -007afa 6d75 .db "dt:num" -007afb 7ad0 .dw VE_HEAD - .set VE_HEAD = VE_DT_NUM - XT_DT_NUM: -007afc 7052 .dw PFA_DOCONSTANT - PFA_DT_NUM: - .endif -007afd 7b7f .dw XT_NOOP ; interpret -007afe 01e2 .dw XT_LITERAL ; compile -007aff 01e2 .dw XT_LITERAL ; postpone - - ; ( -- addr ) - ; Interpreter - ; Method table for double cell integers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_DNUM: -007b00 ff07 .dw $ff07 -007b01 7464 -007b02 643a -007b03 756e -007b04 006d .db "dt:dnum",0 -007b05 7af7 .dw VE_HEAD - .set VE_HEAD = VE_DT_DNUM - XT_DT_DNUM: -007b06 7052 .dw PFA_DOCONSTANT - PFA_DT_DNUM: - .endif -007b07 7b7f .dw XT_NOOP ; interpret -007b08 7d77 .dw XT_2LITERAL ; compile -007b09 7d77 .dw XT_2LITERAL ; postpone - - ; ( addr len -- f ) - ; Interpreter - ; recognizer for integer numbers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - VE_REC_NUM: -007b0a ff07 .dw $ff07 -007b0b 6572 -007b0c 3a63 -007b0d 756e -007b0e 006d .db "rec:num",0 -007b0f 7b00 .dw VE_HEAD - .set VE_HEAD = VE_REC_NUM - XT_REC_NUM: -007b10 7001 .dw DO_COLON - PFA_REC_NUM: - .endif - ; try converting to a number -007b11 78f4 .dw XT_NUMBER -007b12 7036 .dw XT_DOCONDBRANCH -007b13 7b1c DEST(PFA_REC_NONUMBER) -007b14 7d86 .dw XT_ONE -007b15 7d7f .dw XT_EQUAL -007b16 7036 .dw XT_DOCONDBRANCH -007b17 7b1a DEST(PFA_REC_INTNUM2) -007b18 7afc .dw XT_DT_NUM -007b19 7020 .dw XT_EXIT - PFA_REC_INTNUM2: -007b1a 7b06 .dw XT_DT_DNUM -007b1b 7020 .dw XT_EXIT - PFA_REC_NONUMBER: -007b1c 7b4a .dw XT_DT_NULL -007b1d 7020 .dw XT_EXIT - .include "words/rec-find.asm" - - ; Interpreter - ; search for a word - .if cpu_msp430==1 - .endif - .if cpu_avr8==1 - VE_REC_FIND: -007b1e ff08 .dw $ff08 -007b1f 6572 -007b20 3a63 -007b21 6966 -007b22 646e .db "rec:find" -007b23 7b0a .dw VE_HEAD - .set VE_HEAD = VE_REC_FIND - XT_REC_FIND: -007b24 7001 .dw DO_COLON - PFA_REC_FIND: - .endif -007b25 79d0 .DW XT_FINDXT -007b26 70b1 .dw XT_DUP -007b27 711a .dw XT_ZEROEQUAL -007b28 7036 .dw XT_DOCONDBRANCH -007b29 7b2d DEST(PFA_REC_WORD_FOUND) -007b2a 70d9 .dw XT_DROP -007b2b 7b4a .dw XT_DT_NULL -007b2c 7020 .dw XT_EXIT - PFA_REC_WORD_FOUND: -007b2d 7b34 .dw XT_DT_XT - -007b2e 7020 .dw XT_EXIT - - ; ( -- addr ) - ; Interpreter - ; actions to handle execution tokens and their flags - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_XT: -007b2f ff05 .dw $ff05 -007b30 7464 -007b31 783a -007b32 0074 .db "dt:xt",0 -007b33 7b1e .dw VE_HEAD - .set VE_HEAD = VE_DT_XT - XT_DT_XT: -007b34 7052 .dw PFA_DOCONSTANT - PFA_DT_XT: - .endif -007b35 7b38 .dw XT_R_WORD_INTERPRET -007b36 7b3c .dw XT_R_WORD_COMPILE -007b37 7d77 .dw XT_2LITERAL - - ; ( XT flags -- ) - ; Interpreter - ; interpret method for WORD recognizer - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_R_WORD_INTERPRET: -007b38 7001 .dw DO_COLON - PFA_R_WORD_INTERPRET: - .endif -007b39 70d9 .dw XT_DROP ; the flags are in the way -007b3a 702a .dw XT_EXECUTE -007b3b 7020 .dw XT_EXIT - - ; ( XT flags -- ) - ; Interpreter - ; Compile method for WORD recognizer - .if cpu_msp430==1 - .endif - .if cpu_avr8==1 - XT_R_WORD_COMPILE: -007b3c 7001 .dw DO_COLON - PFA_R_WORD_COMPILE: - .endif -007b3d 7121 .dw XT_ZEROLESS -007b3e 7036 .dw XT_DOCONDBRANCH -007b3f 7b42 DEST(PFA_R_WORD_COMPILE1) -007b40 01cc .dw XT_COMMA -007b41 7020 .dw XT_EXIT - PFA_R_WORD_COMPILE1: -007b42 702a .dw XT_EXECUTE -007b43 7020 .dw XT_EXIT - .include "words/dt-null.asm" - - ; Interpreter - ; there is no parser for this recognizer, this is the default and failsafe part - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DT_NULL: -007b44 ff07 .dw $ff07 -007b45 7464 -007b46 6e3a -007b47 6c75 -../../common\words/dt-null.asm(12): warning: .cseg .db misalignment - padding zero byte -007b48 006c .db "dt:null" -007b49 7b2f .dw VE_HEAD - .set VE_HEAD = VE_DT_NULL - XT_DT_NULL: -007b4a 7052 .dw PFA_DOCONSTANT - PFA_DT_NULL: - .endif -007b4b 7b4e .dw XT_FAIL ; interpret -007b4c 7b4e .dw XT_FAIL ; compile -007b4d 7b4e .dw XT_FAIL ; postpone - - ; ( addr len -- ) - ; Interpreter - ; default failure action: throw exception -13. - .if cpu_msp430==1 - .endif - .if cpu_avr8==1 - ;VE_FAIL: - ; .dw $ff04 - ; .db "fail" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_FAIL - XT_FAIL: -007b4e 7001 .dw DO_COLON - PFA_FAIL: - .endif -007b4f 703d .dw XT_DOLITERAL -007b50 fff3 .dw -13 -007b51 7841 .dw XT_THROW - - .include "words/q-stack.asm" - - ; Tools - ; check data stack depth and exit to quit if underrun - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_QSTACK: -007b52 ff06 .dw $ff06 -007b53 733f -007b54 6174 -007b55 6b63 .db "?stack" -007b56 7b44 .dw VE_HEAD - .set VE_HEAD = VE_QSTACK - XT_QSTACK: -007b57 7001 .dw DO_COLON - PFA_QSTACK: - .endif -007b58 7aa1 .dw XT_DEPTH -007b59 7121 .dw XT_ZEROLESS -007b5a 7036 .dw XT_DOCONDBRANCH -007b5b 7b5f DEST(PFA_QSTACK1) -007b5c 703d .dw XT_DOLITERAL -007b5d fffc .dw -4 -007b5e 7841 .dw XT_THROW - PFA_QSTACK1: -007b5f 7020 .dw XT_EXIT - .include "words/ver.asm" - - ; Tools - ; print the version string - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DOT_VER: -007b60 ff03 .dw $ff03 -007b61 6576 -../../common\words/ver.asm(12): warning: .cseg .db misalignment - padding zero byte -007b62 0072 .db "ver" -007b63 7b52 .dw VE_HEAD - .set VE_HEAD = VE_DOT_VER - XT_DOT_VER: -007b64 7001 .dw DO_COLON - PFA_DOT_VER: - .endif -007b65 750d .dw XT_ENV_FORTHNAME -007b66 77a0 .dw XT_ITYPE -007b67 77e2 .dw XT_SPACE -007b68 7551 .dw XT_BASE -007b69 7079 .dw XT_FETCH - -007b6a 751b .dw XT_ENV_FORTHVERSION -007b6b 75dd .dw XT_DECIMAL -007b6c 7d67 .dw XT_S2D -007b6d 76be .dw XT_L_SHARP -007b6e 76c6 .dw XT_SHARP -007b6f 703d .dw XT_DOLITERAL -007b70 002e .dw '.' -007b71 76af .dw XT_HOLD -007b72 76dc .dw XT_SHARP_S -007b73 76e7 .dw XT_SHARP_G -007b74 77fb .dw XT_TYPE -007b75 7551 .dw XT_BASE -007b76 7081 .dw XT_STORE -007b77 77e2 .dw XT_SPACE -007b78 7523 .dw XT_ENV_CPU -007b79 77a0 .dw XT_ITYPE - -007b7a 7020 .dw XT_EXIT - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/noop.asm" - - ; Tools - ; do nothing - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NOOP: -007b7b ff04 .dw $ff04 -007b7c 6f6e -007b7d 706f .db "noop" -007b7e 7b60 .dw VE_HEAD - .set VE_HEAD = VE_NOOP - XT_NOOP: -007b7f 7001 .dw DO_COLON - PFA_NOOP: - .endif -007b80 7020 .DW XT_EXIT - .include "words/unused.asm" - - ; Tools - ; Amount of available RAM (incl. PAD) - VE_UNUSED: -007b81 ff06 .dw $ff06 -007b82 6e75 -007b83 7375 -007b84 6465 .db "unused" -007b85 7b7b .dw VE_HEAD - .set VE_HEAD = VE_UNUSED - XT_UNUSED: -007b86 7001 .dw DO_COLON - PFA_UNUSED: -007b87 728d .dw XT_SP_FETCH -007b88 75bf .dw XT_HERE -007b89 7193 .dw XT_MINUS -007b8a 7020 .dw XT_EXIT - - .include "words/to.asm" - - ; Tools - ; store the TOS to the named value (eeprom cell) - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TO: -007b8b 0002 .dw $0002 -007b8c 6f74 .db "to" -007b8d 7b81 .dw VE_HEAD - .set VE_HEAD = VE_TO - XT_TO: -007b8e 7001 .dw DO_COLON - PFA_TO: - .endif -007b8f 780a .dw XT_TICK -007b90 7d70 .dw XT_TO_BODY -007b91 754b .dw XT_STATE -007b92 7079 .dw XT_FETCH -007b93 7036 .dw XT_DOCONDBRANCH -007b94 7b9f DEST(PFA_TO1) -007b95 01c1 .dw XT_COMPILE -007b96 7b99 .dw XT_DOTO -007b97 01cc .dw XT_COMMA -007b98 7020 .dw XT_EXIT - - ; ( n -- ) (R: IP -- IP+1) - ; Tools - ; runtime portion of to - ;VE_DOTO: - ; .dw $ff04 - ; .db "(to)" - ; .dw VE_HEAD - ; .set VE_HEAD = VE_DOTO - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - - XT_DOTO: -007b99 7001 .dw DO_COLON - PFA_DOTO: - .endif -007b9a 70f6 .dw XT_R_FROM -007b9b 70b1 .dw XT_DUP -007b9c 7bab .dw XT_ICELLPLUS -007b9d 70ff .dw XT_TO_R -007b9e 73cb .dw XT_FETCHI - PFA_TO1: -007b9f 70b1 .dw XT_DUP -007ba0 7bab .dw XT_ICELLPLUS -007ba1 7bab .dw XT_ICELLPLUS -007ba2 73cb .dw XT_FETCHI -007ba3 702a .dw XT_EXECUTE -007ba4 7020 .dw XT_EXIT - .include "words/i-cellplus.asm" - - ; Compiler - ; skip to the next cell in flash - VE_ICELLPLUS: -007ba5 ff07 .dw $FF07 -007ba6 2d69 -007ba7 6563 -007ba8 6c6c -007ba9 002b .db "i-cell+",0 -007baa 7b8b .dw VE_HEAD - .set VE_HEAD = VE_ICELLPLUS - XT_ICELLPLUS: -007bab 7001 .dw DO_COLON - PFA_ICELLPLUS: -007bac 722f .dw XT_1PLUS -007bad 7020 .dw XT_EXIT - - .include "words/edefer-fetch.asm" - - ; System - ; does the real defer@ for eeprom defers - VE_EDEFERFETCH: -007bae ff07 .dw $ff07 -007baf 6445 -007bb0 6665 -007bb1 7265 -007bb2 0040 .db "Edefer@",0 -007bb3 7ba5 .dw VE_HEAD - .set VE_HEAD = VE_EDEFERFETCH - XT_EDEFERFETCH: -007bb4 7001 .dw DO_COLON - PFA_EDEFERFETCH: -007bb5 73cb .dw XT_FETCHI -007bb6 735f .dw XT_FETCHE -007bb7 7020 .dw XT_EXIT - .include "words/edefer-store.asm" - - ; System - ; does the real defer! for eeprom defers - VE_EDEFERSTORE: -007bb8 ff07 .dw $ff07 -007bb9 6445 -007bba 6665 -007bbb 7265 -007bbc 0021 .db "Edefer!",0 -007bbd 7bae .dw VE_HEAD - .set VE_HEAD = VE_EDEFERSTORE - XT_EDEFERSTORE: -007bbe 7001 .dw DO_COLON - PFA_EDEFERSTORE: -007bbf 73cb .dw XT_FETCHI -007bc0 733b .dw XT_STOREE -007bc1 7020 .dw XT_EXIT - .include "words/rdefer-fetch.asm" - - ; System - ; The defer@ for ram defers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RDEFERFETCH: -007bc2 ff07 .dw $ff07 -007bc3 6452 -007bc4 6665 -007bc5 7265 -007bc6 0040 .db "Rdefer@",0 -007bc7 7bb8 .dw VE_HEAD - .set VE_HEAD = VE_RDEFERFETCH - XT_RDEFERFETCH: -007bc8 7001 .dw DO_COLON - PFA_RDEFERFETCH: - .endif -007bc9 73cb .dw XT_FETCHI -007bca 7079 .dw XT_FETCH -007bcb 7020 .dw XT_EXIT - .include "words/rdefer-store.asm" - - ; System - ; The defer! for ram defers - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_RDEFERSTORE: -007bcc ff07 .dw $ff07 -007bcd 6452 -007bce 6665 -007bcf 7265 -007bd0 0021 .db "Rdefer!",0 -007bd1 7bc2 .dw VE_HEAD - .set VE_HEAD = VE_RDEFERSTORE - XT_RDEFERSTORE: -007bd2 7001 .dw DO_COLON - PFA_RDEFERSTORE: - .endif -007bd3 73cb .dw XT_FETCHI -007bd4 7081 .dw XT_STORE -007bd5 7020 .dw XT_EXIT - - .include "words/udefer-fetch.asm" - - ; System - ; does the real defer@ for user based defers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDEFERFETCH: -007bd6 ff07 .dw $ff07 -007bd7 6455 -007bd8 6665 -007bd9 7265 -007bda 0040 .db "Udefer@",0 -007bdb 7bcc .dw VE_HEAD - .set VE_HEAD = VE_UDEFERFETCH - XT_UDEFERFETCH: -007bdc 7001 .dw DO_COLON - PFA_UDEFERFETCH: - .endif -007bdd 73cb .dw XT_FETCHI -007bde 7302 .dw XT_UP_FETCH -007bdf 719d .dw XT_PLUS -007be0 7079 .dw XT_FETCH -007be1 7020 .dw XT_EXIT - .include "words/udefer-store.asm" - - ; System - ; does the real defer! for user based defers - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_UDEFERSTORE: -007be2 ff07 .dw $ff07 -007be3 6455 -007be4 6665 -007be5 7265 -007be6 0021 .db "Udefer!",0 -007be7 7bd6 .dw VE_HEAD - .set VE_HEAD = VE_UDEFERSTORE - XT_UDEFERSTORE: -007be8 7001 .dw DO_COLON - PFA_UDEFERSTORE: - .endif - -007be9 73cb .dw XT_FETCHI -007bea 7302 .dw XT_UP_FETCH -007beb 719d .dw XT_PLUS -007bec 7081 .dw XT_STORE -007bed 7020 .dw XT_EXIT - - .include "words/defer-store.asm" - - ; System - ; stores xt1 as the xt to be executed when xt2 is called - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DEFERSTORE: -007bee ff06 .dw $ff06 -007bef 6564 -007bf0 6566 -007bf1 2172 .db "defer!" -007bf2 7be2 .dw VE_HEAD - .set VE_HEAD = VE_DEFERSTORE - XT_DEFERSTORE: -007bf3 7001 .dw DO_COLON - PFA_DEFERSTORE: - .endif -007bf4 7d70 .dw XT_TO_BODY -007bf5 70b1 .dw XT_DUP -007bf6 7bab .dw XT_ICELLPLUS -007bf7 7bab .dw XT_ICELLPLUS -007bf8 73cb .dw XT_FETCHI -007bf9 702a .dw XT_EXECUTE -007bfa 7020 .dw XT_EXIT - - .include "words/defer-fetch.asm" - - ; System - ; returns the XT associated with the given XT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_DEFERFETCH: -007bfb ff06 .dw $ff06 -007bfc 6564 -007bfd 6566 -007bfe 4072 .db "defer@" -007bff 7bee .dw VE_HEAD - .set VE_HEAD = VE_DEFERFETCH - XT_DEFERFETCH: -007c00 7001 .dw DO_COLON - PFA_DEFERFETCH: - .endif -007c01 7d70 .dw XT_TO_BODY -007c02 70b1 .dw XT_DUP -007c03 7bab .dw XT_ICELLPLUS -007c04 73cb .dw XT_FETCHI -007c05 702a .dw XT_EXECUTE -007c06 7020 .dw XT_EXIT - .include "words/do-defer.asm" - - ; System - ; runtime of defer - VE_DODEFER: -007c07 ff07 .dw $ff07 -007c08 6428 -007c09 6665 -007c0a 7265 -007c0b 0029 .db "(defer)", 0 -007c0c 7bfb .dw VE_HEAD - .set VE_HEAD = VE_DODEFER - XT_DODEFER: -007c0d 7001 .dw DO_COLON - PFA_DODEFER: -007c0e 019e .dw XT_DOCREATE -007c0f 02fe .dw XT_REVEAL -007c10 01c1 .dw XT_COMPILE -007c11 7c13 .dw PFA_DODEFER1 -007c12 7020 .dw XT_EXIT - PFA_DODEFER1: -007c13 940e 0317 call_ DO_DODOES -007c15 70b1 .dw XT_DUP -007c16 7bab .dw XT_ICELLPLUS -007c17 73cb .dw XT_FETCHI -007c18 702a .dw XT_EXECUTE -007c19 702a .dw XT_EXECUTE -007c1a 7020 .dw XT_EXIT - - ; : (defer) dup i-cell+ @i execute execute ; - - - .include "words/search-wordlist.asm" - - ; Search Order - ; searches the word list wid for the word at c-addr/len - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SEARCH_WORDLIST: -007c1b ff0f .dw $ff0f -007c1c 6573 -007c1d 7261 -007c1e 6863 -007c1f 772d -007c20 726f -007c21 6c64 -007c22 7369 -007c23 0074 .db "search-wordlist",0 -007c24 7c07 .dw VE_HEAD - .set VE_HEAD = VE_SEARCH_WORDLIST - XT_SEARCH_WORDLIST: -007c25 7001 .dw DO_COLON - PFA_SEARCH_WORDLIST: - .endif -007c26 70ff .dw XT_TO_R -007c27 7154 .dw XT_ZERO -007c28 703d .dw XT_DOLITERAL -007c29 7c3a .dw XT_ISWORD -007c2a 70f6 .dw XT_R_FROM -007c2b 7c57 .dw XT_TRAVERSEWORDLIST -007c2c 70b1 .dw XT_DUP -007c2d 711a .dw XT_ZEROEQUAL -007c2e 7036 .dw XT_DOCONDBRANCH -007c2f 7c34 DEST(PFA_SEARCH_WORDLIST1) -007c30 756e .dw XT_2DROP -007c31 70d9 .dw XT_DROP -007c32 7154 .dw XT_ZERO -007c33 7020 .dw XT_EXIT - PFA_SEARCH_WORDLIST1: - ; ... get the XT ... -007c34 70b1 .dw XT_DUP -007c35 7c7e .dw XT_NFA2CFA - ; .. and get the header flag -007c36 70c4 .dw XT_SWAP -007c37 0184 .dw XT_NAME2FLAGS -007c38 0172 .dw XT_IMMEDIATEQ -007c39 7020 .dw XT_EXIT - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - XT_ISWORD: -007c3a 7001 .dw DO_COLON - PFA_ISWORD: - .endif - ; ( c-addr len 0 nt -- c-addr len 0 true| nt false ) -007c3b 70ff .dw XT_TO_R -007c3c 70d9 .dw XT_DROP -007c3d 7565 .dw XT_2DUP -007c3e 7108 .dw XT_R_FETCH ; -- addr len addr len nt -007c3f 7c72 .dw XT_NAME2STRING -007c40 7c88 .dw XT_ICOMPARE ; (-- addr len f ) -007c41 7036 .dw XT_DOCONDBRANCH -007c42 7c48 DEST(PFA_ISWORD3) - ; not now -007c43 70f6 .dw XT_R_FROM -007c44 70d9 .dw XT_DROP -007c45 7154 .dw XT_ZERO -007c46 714b .dw XT_TRUE ; maybe next word -007c47 7020 .dw XT_EXIT - PFA_ISWORD3: - ; we found the word, now clean up iteration data ... -007c48 756e .dw XT_2DROP -007c49 70f6 .dw XT_R_FROM -007c4a 7154 .dw XT_ZERO ; finish traverse-wordlist -007c4b 7020 .dw XT_EXIT - .include "words/traverse-wordlist.asm" - - ; Tools Ext (2012) - ; call the xt for every member of the wordlist wid until xt returns false - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TRAVERSEWORDLIST: -007c4c ff11 .dw $ff11 -007c4d 7274 -007c4e 7661 -007c4f 7265 -007c50 6573 -007c51 772d -007c52 726f -007c53 6c64 -007c54 7369 -007c55 0074 .db "traverse-wordlist",0 -007c56 7c1b .dw VE_HEAD - .set VE_HEAD = VE_TRAVERSEWORDLIST - XT_TRAVERSEWORDLIST: -007c57 7001 .dw DO_COLON - PFA_TRAVERSEWORDLIST: - - .endif -007c58 735f .dw XT_FETCHE - PFA_TRAVERSEWORDLIST1: -007c59 70b1 .dw XT_DUP ; ( -- xt nt nt ) -007c5a 7036 .dw XT_DOCONDBRANCH ; ( -- nt ) is nfa = counted string -007c5b 7c68 DEST(PFA_TRAVERSEWORDLIST2) -007c5c 7565 .dw XT_2DUP -007c5d 731e .dw XT_2TO_R -007c5e 70c4 .dw XT_SWAP -007c5f 702a .dw XT_EXECUTE -007c60 732d .dw XT_2R_FROM -007c61 70e1 .dw XT_ROT -007c62 7036 .dw XT_DOCONDBRANCH -007c63 7c68 DEST(PFA_TRAVERSEWORDLIST2) -007c64 047b .dw XT_NFA2LFA -007c65 73cb .dw XT_FETCHI -007c66 702f .dw XT_DOBRANCH ; ( -- addr ) -007c67 7c59 DEST(PFA_TRAVERSEWORDLIST1) ; ( -- addr ) - PFA_TRAVERSEWORDLIST2: -007c68 756e .dw XT_2DROP -007c69 7020 .dw XT_EXIT - - ; : traverse-wordlist ( i*x xt wid -- i*x' ) - ; begin @ dup - ; while - ; 2dup 2>r - ; swap execute ( i*x nt -- i*x' f ) - ; 2r> rot - ; while - ; nfa>lfa @i - ; repeat then 2drop ; - .include "words/name2string.asm" - - ; Tools Ext (2012) - ; get a (flash) string from a name token nt - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NAME2STRING: -007c6a ff0b .dw $ff0b -007c6b 616e -007c6c 656d -007c6d 733e -007c6e 7274 -007c6f 6e69 -007c70 0067 .db "name>string",0 -007c71 7c4c .dw VE_HEAD - .set VE_HEAD = VE_NAME2STRING - XT_NAME2STRING: -007c72 7001 .dw DO_COLON - PFA_NAME2STRING: - - .endif -007c73 77cc .dw XT_ICOUNT ; ( -- addr n ) -007c74 703d .dw XT_DOLITERAL -007c75 00ff .dw 255 -007c76 7213 .dw XT_AND ; mask immediate bit -007c77 7020 .dw XT_EXIT - .include "words/nfa2cfa.asm" - - ; Tools - ; get the XT from a name token - VE_NFA2CFA: -007c78 ff07 .dw $ff07 -007c79 666e -007c7a 3e61 -007c7b 6663 -../../avr8\words/nfa2cfa.asm(6): warning: .cseg .db misalignment - padding zero byte -007c7c 0061 .db "nfa>cfa" -007c7d 7c6a .dw VE_HEAD - .set VE_HEAD = VE_NFA2CFA - XT_NFA2CFA: -007c7e 7001 .dw DO_COLON - PFA_NFA2CFA: -007c7f 047b .dw XT_NFA2LFA ; skip to link field -007c80 722f .dw XT_1PLUS ; next is the execution token -007c81 7020 .dw XT_EXIT - .include "words/icompare.asm" - - ; Tools - ; compares string in RAM with string in flash. f is zero if equal like COMPARE - VE_ICOMPARE: -007c82 ff08 .dw $ff08 -007c83 6369 -007c84 6d6f -007c85 6170 -007c86 6572 .db "icompare" -007c87 7c78 .dw VE_HEAD - .set VE_HEAD = VE_ICOMPARE - XT_ICOMPARE: -007c88 7001 .dw DO_COLON - PFA_ICOMPARE: -007c89 70ff .dw XT_TO_R ; ( -- r-addr r-len f-addr) -007c8a 70cf .dw XT_OVER ; ( -- r-addr r-len f-addr r-len) -007c8b 70f6 .dw XT_R_FROM ; ( -- r-addr r-len f-addr r-len f-len ) -007c8c 7113 .dw XT_NOTEQUAL ; ( -- r-addr r-len f-addr flag ) -007c8d 7036 .dw XT_DOCONDBRANCH -007c8e 7c93 .dw PFA_ICOMPARE_SAMELEN -007c8f 756e .dw XT_2DROP -007c90 70d9 .dw XT_DROP -007c91 714b .dw XT_TRUE -007c92 7020 .dw XT_EXIT - PFA_ICOMPARE_SAMELEN: -007c93 70c4 .dw XT_SWAP ; ( -- r-addr f-addr len ) -007c94 7154 .dw XT_ZERO -007c95 028b .dw XT_QDOCHECK -007c96 7036 .dw XT_DOCONDBRANCH -007c97 7cb6 .dw PFA_ICOMPARE_DONE -007c98 729b .dw XT_DODO - PFA_ICOMPARE_LOOP: - ; ( r-addr f-addr --) -007c99 70cf .dw XT_OVER -007c9a 7079 .dw XT_FETCH - .if WANT_IGNORECASE == 1 - .endif -007c9b 70cf .dw XT_OVER -007c9c 73cb .dw XT_FETCHI ; ( -- r-addr f-addr r-cc f- cc) - .if WANT_IGNORECASE == 1 - .endif - ; flash strings are zero-padded at the last cell - ; that means: if the flash cell is less $0100, than mask the - ; high byte in the ram cell -007c9d 70b1 .dw XT_DUP - ;.dw XT_BYTESWAP -007c9e 703d .dw XT_DOLITERAL -007c9f 0100 .dw $100 -007ca0 715c .dw XT_ULESS -007ca1 7036 .dw XT_DOCONDBRANCH -007ca2 7ca7 .dw PFA_ICOMPARE_LASTCELL -007ca3 70c4 .dw XT_SWAP -007ca4 703d .dw XT_DOLITERAL -007ca5 00ff .dw $00FF -007ca6 7213 .dw XT_AND ; the final swap can be omitted - PFA_ICOMPARE_LASTCELL: -007ca7 7113 .dw XT_NOTEQUAL -007ca8 7036 .dw XT_DOCONDBRANCH -007ca9 7cae .dw PFA_ICOMPARE_NEXTLOOP -007caa 756e .dw XT_2DROP -007cab 714b .dw XT_TRUE -007cac 72d4 .dw XT_UNLOOP -007cad 7020 .dw XT_EXIT - PFA_ICOMPARE_NEXTLOOP: -007cae 722f .dw XT_1PLUS -007caf 70c4 .dw XT_SWAP -007cb0 755e .dw XT_CELLPLUS -007cb1 70c4 .dw XT_SWAP -007cb2 703d .dw XT_DOLITERAL -007cb3 0002 .dw 2 -007cb4 72ba .dw XT_DOPLUSLOOP -007cb5 7c99 .dw PFA_ICOMPARE_LOOP - PFA_ICOMPARE_DONE: -007cb6 756e .dw XT_2DROP -007cb7 7154 .dw XT_ZERO -007cb8 7020 .dw XT_EXIT - - .if WANT_IGNORECASE == 1 - .endif - - .include "words/star.asm" - - ; Arithmetics - ; multiply routine - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_STAR: -007cb9 ff01 .dw $ff01 -007cba 002a .db "*",0 -007cbb 7c82 .dw VE_HEAD - .set VE_HEAD = VE_STAR - XT_STAR: -007cbc 7001 .dw DO_COLON - PFA_STAR: - .endif - -007cbd 71a6 .dw XT_MSTAR -007cbe 70d9 .dw XT_DROP -007cbf 7020 .dw XT_EXIT - .include "words/j.asm" - - ; Compiler - ; loop counter of outer loop - VE_J: -007cc0 ff01 .dw $FF01 -007cc1 006a .db "j",0 -007cc2 7cb9 .dw VE_HEAD - .set VE_HEAD = VE_J - XT_J: -007cc3 7001 .dw DO_COLON - PFA_J: -007cc4 7276 .dw XT_RP_FETCH -007cc5 703d .dw XT_DOLITERAL -007cc6 0007 .dw 7 -007cc7 719d .dw XT_PLUS -007cc8 7079 .dw XT_FETCH -007cc9 7276 .dw XT_RP_FETCH -007cca 703d .dw XT_DOLITERAL -007ccb 0009 .dw 9 -007ccc 719d .dw XT_PLUS -007ccd 7079 .dw XT_FETCH -007cce 719d .dw XT_PLUS -007ccf 7020 .dw XT_EXIT - - .include "words/dabs.asm" - - ; Arithmetics - ; double cell absolute value - VE_DABS: -007cd0 ff04 .dw $ff04 -007cd1 6164 -007cd2 7362 .db "dabs" -007cd3 7cc0 .dw VE_HEAD - .set VE_HEAD = VE_DABS - XT_DABS: -007cd4 7001 .dw DO_COLON - PFA_DABS: -007cd5 70b1 .dw XT_DUP -007cd6 7121 .dw XT_ZEROLESS -007cd7 7036 .dw XT_DOCONDBRANCH -007cd8 7cda .dw PFA_DABS1 -007cd9 7ce1 .dw XT_DNEGATE - PFA_DABS1: -007cda 7020 .dw XT_EXIT - ; : dabs ( ud1 -- +d2 ) dup 0< if dnegate then ; - .include "words/dnegate.asm" - - ; Arithmetics - ; double cell negation - VE_DNEGATE: -007cdb ff07 .dw $ff07 -007cdc 6e64 -007cdd 6765 -007cde 7461 -007cdf 0065 .db "dnegate",0 -007ce0 7cd0 .dw VE_HEAD - .set VE_HEAD = VE_DNEGATE - XT_DNEGATE: -007ce1 7001 .dw DO_COLON - PFA_DNEGATE: -007ce2 743b .dw XT_DINVERT -007ce3 7d86 .dw XT_ONE -007ce4 7154 .dw XT_ZERO -007ce5 7415 .dw XT_DPLUS -007ce6 7020 .dw XT_EXIT - ; : dnegate ( ud1 -- ud2 ) dinvert 1. d+ ; - .include "words/cmove.asm" - - ; Memory - ; copy data in RAM, from lower to higher addresses - VE_CMOVE: -007ce7 ff05 .dw $ff05 -007ce8 6d63 -007ce9 766f -007cea 0065 .db "cmove",0 -007ceb 7cdb .dw VE_HEAD - .set VE_HEAD = VE_CMOVE - XT_CMOVE: -007cec 7ced .dw PFA_CMOVE - PFA_CMOVE: -007ced 93bf push xh -007cee 93af push xl -007cef 91e9 ld zl, Y+ -007cf0 91f9 ld zh, Y+ ; addr-to -007cf1 91a9 ld xl, Y+ -007cf2 91b9 ld xh, Y+ ; addr-from -007cf3 2f09 mov temp0, tosh -007cf4 2b08 or temp0, tosl -007cf5 f021 brbs 1, PFA_CMOVE1 - PFA_CMOVE2: -007cf6 911d ld temp1, X+ -007cf7 9311 st Z+, temp1 -007cf8 9701 sbiw tosl, 1 -007cf9 f7e1 brbc 1, PFA_CMOVE2 - PFA_CMOVE1: -007cfa 91af pop xl -007cfb 91bf pop xh -007cfc 9189 -007cfd 9199 loadtos -007cfe 940c 7005 jmp_ DO_NEXT - .include "words/2swap.asm" - - ; Stack - ; Exchange the two top cell pairs - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2SWAP: -007d00 ff05 .dw $ff05 -007d01 7332 -007d02 6177 -007d03 0070 .db "2swap",0 -007d04 7ce7 .dw VE_HEAD - .set VE_HEAD = VE_2SWAP - XT_2SWAP: -007d05 7001 .dw DO_COLON - PFA_2SWAP: - - .endif -007d06 70e1 .dw XT_ROT -007d07 70ff .dw XT_TO_R -007d08 70e1 .dw XT_ROT -007d09 70f6 .dw XT_R_FROM -007d0a 7020 .dw XT_EXIT - - .include "words/tib.asm" - - ; System - ; refills the input buffer - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_REFILLTIB: -007d0b ff0a .dw $ff0a -007d0c 6572 -007d0d 6966 -007d0e 6c6c -007d0f 742d -007d10 6269 .db "refill-tib" -007d11 7d00 .dw VE_HEAD - .set VE_HEAD = VE_REFILLTIB - XT_REFILLTIB: -007d12 7001 .dw DO_COLON - PFA_REFILLTIB: - .endif -007d13 7d2e .dw XT_TIB -007d14 703d .dw XT_DOLITERAL -007d15 005a .dw TIB_SIZE -007d16 7891 .dw XT_ACCEPT -007d17 7d34 .dw XT_NUMBERTIB -007d18 7081 .dw XT_STORE -007d19 7154 .dw XT_ZERO -007d1a 757e .dw XT_TO_IN -007d1b 7081 .dw XT_STORE -007d1c 714b .dw XT_TRUE ; -1 -007d1d 7020 .dw XT_EXIT - - ; ( -- addr n ) - ; System - ; address and current length of the input buffer - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_SOURCETIB: -007d1e ff0a .dw $FF0A -007d1f 6f73 -007d20 7275 -007d21 6563 -007d22 742d -007d23 6269 .db "source-tib" -007d24 7d0b .dw VE_HEAD - .set VE_HEAD = VE_SOURCETIB - XT_SOURCETIB: -007d25 7001 .dw DO_COLON - PFA_SOURCETIB: - .endif -007d26 7d2e .dw XT_TIB -007d27 7d34 .dw XT_NUMBERTIB -007d28 7079 .dw XT_FETCH -007d29 7020 .dw XT_EXIT - - ; ( -- addr ) - ; System Variable - ; terminal input buffer address - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TIB: -007d2a ff03 .dw $ff03 -007d2b 6974 -007d2c 0062 .db "tib",0 -007d2d 7d1e .dw VE_HEAD - .set VE_HEAD = VE_TIB - XT_TIB: -007d2e 7048 .dw PFA_DOVARIABLE - PFA_TIB: -007d2f 0168 .dw ram_tib - .dseg -000168 ram_tib: .byte TIB_SIZE - .cseg - .endif - - ; ( -- addr ) - ; System Variable - ; variable holding the number of characters in TIB - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_NUMBERTIB: -007d30 ff04 .dw $ff04 -007d31 7423 -007d32 6269 .db "#tib" -007d33 7d2a .dw VE_HEAD - .set VE_HEAD = VE_NUMBERTIB - XT_NUMBERTIB: -007d34 7048 .dw PFA_DOVARIABLE - PFA_NUMBERTIB: -007d35 01c2 .dw ram_sharptib - .dseg -0001c2 ram_sharptib: .byte 2 - .cseg - .endif - - .include "words/init-ram.asm" - - ; Tools - ; copy len cells from eeprom to ram - VE_EE2RAM: -007d36 ff06 .dw $ff06 -007d37 6565 -007d38 723e -007d39 6d61 .db "ee>ram" -007d3a 7d30 .dw VE_HEAD - .set VE_HEAD = VE_EE2RAM - XT_EE2RAM: -007d3b 7001 .dw DO_COLON - PFA_EE2RAM: ; ( -- ) -007d3c 7154 .dw XT_ZERO -007d3d 729b .dw XT_DODO - PFA_EE2RAM_1: - ; ( -- e-addr r-addr ) -007d3e 70cf .dw XT_OVER -007d3f 735f .dw XT_FETCHE -007d40 70cf .dw XT_OVER -007d41 7081 .dw XT_STORE -007d42 755e .dw XT_CELLPLUS -007d43 70c4 .dw XT_SWAP -007d44 755e .dw XT_CELLPLUS -007d45 70c4 .dw XT_SWAP -007d46 72c9 .dw XT_DOLOOP -007d47 7d3e .dw PFA_EE2RAM_1 - PFA_EE2RAM_2: -007d48 756e .dw XT_2DROP -007d49 7020 .dw XT_EXIT - - ; ( -- ) - ; Tools - ; setup the default user area from eeprom - VE_INIT_RAM: -007d4a ff08 .dw $ff08 -007d4b 6e69 -007d4c 7469 -007d4d 722d -007d4e 6d61 .db "init-ram" -007d4f 7d36 .dw VE_HEAD - .set VE_HEAD = VE_INIT_RAM - XT_INIT_RAM: -007d50 7001 .dw DO_COLON - PFA_INI_RAM: ; ( -- ) -007d51 703d .dw XT_DOLITERAL -007d52 006e .dw EE_INITUSER -007d53 7302 .dw XT_UP_FETCH -007d54 703d .dw XT_DOLITERAL -007d55 0022 .dw SYSUSERSIZE -007d56 7204 .dw XT_2SLASH -007d57 7d3b .dw XT_EE2RAM -007d58 7020 .dw XT_EXIT - .include "dict/compiler2.inc" - - ; included almost independently from each other - ; on a include-per-use basis - ; - .if DICT_COMPILER2 == 0 - .endif - .include "words/bounds.asm" - - ; Tools - ; convert a string to an address range - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_BOUNDS: -007d59 ff06 .dw $ff06 -007d5a 6f62 -007d5b 6e75 -007d5c 7364 .db "bounds" -007d5d 7d4a .dw VE_HEAD - .set VE_HEAD = VE_BOUNDS - XT_BOUNDS: -007d5e 7001 .dw DO_COLON - PFA_BOUNDS: - .endif -007d5f 70cf .dw XT_OVER -007d60 719d .dw XT_PLUS -007d61 70c4 .dw XT_SWAP -007d62 7020 .dw XT_EXIT - .include "words/s-to-d.asm" - - ; Conversion - ; extend (signed) single cell value to double cell - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_S2D: -007d63 ff03 .dw $ff03 -007d64 3e73 -007d65 0064 .db "s>d",0 -007d66 7d59 .dw VE_HEAD - .set VE_HEAD = VE_S2D - XT_S2D: -007d67 7001 .dw DO_COLON - PFA_S2D: - .endif -007d68 70b1 .dw XT_DUP -007d69 7121 .dw XT_ZEROLESS -007d6a 7020 .dw XT_EXIT - .include "words/to-body.asm" - - ; Core - ; get body from XT - VE_TO_BODY: -007d6b ff05 .dw $ff05 -007d6c 623e -007d6d 646f -007d6e 0079 .db ">body",0 -007d6f 7d63 .dw VE_HEAD - .set VE_HEAD = VE_TO_BODY - XT_TO_BODY: -007d70 7230 .dw PFA_1PLUS - .elif AMFORTH_NRWW_SIZE>4000 - .elif AMFORTH_NRWW_SIZE>2000 - .else - .endif - ; now colon words - ;;;;;;;;;;;;;;;;;;;;;;;; - .include "words/2literal.asm" - - ; Compiler - ; compile a cell pair literal in colon definitions - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_2LITERAL: -007d71 0008 .dw $0008 -007d72 6c32 -007d73 7469 -007d74 7265 -007d75 6c61 .db "2literal" -007d76 7d6b .dw VE_HEAD - .set VE_HEAD = VE_2LITERAL - XT_2LITERAL: -007d77 7001 .dw DO_COLON - PFA_2LITERAL: - .endif -007d78 70c4 .dw XT_SWAP -007d79 01e2 .dw XT_LITERAL -007d7a 01e2 .dw XT_LITERAL -007d7b 7020 .dw XT_EXIT - .include "words/equal.asm" - - ; Compare - ; compares two values for equality - VE_EQUAL: -007d7c ff01 .dw $ff01 -007d7d 003d .db "=",0 -007d7e 7d71 .dw VE_HEAD - .set VE_HEAD = VE_EQUAL - XT_EQUAL: -007d7f 7001 .dw DO_COLON - PFA_EQUAL: -007d80 7193 .dw XT_MINUS -007d81 711a .dw XT_ZEROEQUAL -007d82 7020 .dw XT_EXIT - .include "words/num-constants.asm" - - .endif - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_ONE: -007d83 ff01 .dw $ff01 -007d84 0031 .db "1",0 -007d85 7d7c .dw VE_HEAD - .set VE_HEAD = VE_ONE - XT_ONE: -007d86 7048 .dw PFA_DOVARIABLE - PFA_ONE: - .endif -007d87 0001 .DW 1 - - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_TWO: -007d88 ff01 .dw $ff01 -007d89 0032 .db "2",0 -007d8a 7d83 .dw VE_HEAD - .set VE_HEAD = VE_TWO - XT_TWO: -007d8b 7048 .dw PFA_DOVARIABLE - PFA_TWO: - .endif -007d8c 0002 .DW 2 - .if cpu_msp430==1 - .endif - - .if cpu_avr8==1 - VE_MINUSONE: -007d8d ff02 .dw $ff02 -007d8e 312d .db "-1" -007d8f 7d88 .dw VE_HEAD - .set VE_HEAD = VE_MINUSONE - XT_MINUSONE: -007d90 7048 .dw PFA_DOVARIABLE - PFA_MINUSONE: - .endif -007d91 ffff .DW -1 - .include "dict_appl_core.inc" - - ; do not delete it! - - .set flashlast = pc - .if (pc>FLASHEND) - .endif - - .dseg - ; define a label for the 1st free ram address - HERESTART: - .eseg - .include "amforth-eeprom.inc" -000038 ff ff - ; some configs -00003a 8b 05 CFG_DP: .dw DPSTART ; Dictionary Pointer -00003c c4 01 EE_HERE: .dw HERESTART ; Memory Allocation -00003e 92 00 EE_EHERE: .dw EHERESTART ; EEProm Memory Allocation -000040 33 04 CFG_WLSCOPE: .dw XT_GET_CURRENT ; default wordlist scope -000042 60 00 CFG_FORTHRECOGNIZER: .dw CFG_RECOGNIZERLISTLEN ; Recognizer word set - ; LEAVE stack is between data stack and return stack. -000044 b0 10 CFG_LP0: .dw stackstart+1 -000046 dd 04 CFG_TURNKEY: .dw XT_APPLTURNKEY ; TURNKEY -000048 32 75 CFG_ENVIRONMENT:.dw VE_ENVHEAD ; environmental queries -00004a 4c 00 CFG_CURRENT: .dw CFG_FORTHWORDLIST ; forth-wordlist -00004c 8d 7d CFG_FORTHWORDLIST:.dw VE_HEAD ; pre-defined (compiled in) wordlist - CFG_ORDERLISTLEN: -00004e 01 00 .dw 1 - CFG_ORDERLIST: ; list of wordlist id, exactly numwordlist entries -000050 4c 00 .dw CFG_FORTHWORDLIST ; get/set-order -000052 .byte (NUMWORDLISTS-1)*CELLSIZE ; one slot is already used - CFG_RECOGNIZERLISTLEN: -000060 02 00 .dw 2 - CFG_RECOGNIZERLIST: -000062 24 7b .dw XT_REC_FIND -000064 10 7b .dw XT_REC_NUM -000066 .byte (NUMRECOGNIZERS-2)*CELLSIZE ; two slots are already used - - EE_STOREI: -00006a 7e 73 .dw XT_DO_STOREI ; Store a cell into flash - - ; MARKER saves everything up to here. Nothing beyond gets saved - EE_MARKER: -00006c 6c 00 .dw EE_MARKER - - ; default user area - EE_INITUSER: -00006e 00 00 .dw 0 ; USER_STATE -000070 00 00 .dw 0 ; USER_FOLLOWER -000072 ff 10 .dw rstackstart ; USER_RP -000074 af 10 .dw stackstart ; USER_SP0 -000076 af 10 .dw stackstart ; USER_SP - -000078 00 00 .dw 0 ; USER_HANDLER -00007a 0a 00 .dw 10 ; USER_BASE - -00007c a7 00 .dw XT_TX ; USER_EMIT -00007e b5 00 .dw XT_TXQ ; USER_EMITQ -000080 7c 00 .dw XT_RX ; USER_KEY -000082 97 00 .dw XT_RXQ ; USER_KEYQ -000084 25 7d .dw XT_SOURCETIB ; USER_SOURCE -000086 00 00 .dw 0 ; USER_G_IN -000088 12 7d .dw XT_REFILLTIB ; USER_REFILL -00008a ea 79 .dw XT_DEFAULT_PROMPTOK -00008c 09 7a .dw XT_DEFAULT_PROMPTERROR -00008e f9 79 .dw XT_DEFAULT_PROMPTREADY - - ; calculate baud rate error - .equ UBRR_VAL = ((F_CPU+BAUD*8)/(BAUD*16)-1) ; smart round - .equ BAUD_REAL = (F_CPU/(16*(UBRR_VAL+1))) ; effective baud rate - .equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000) ; error in pro mille - - .if ((BAUD_ERROR>BAUD_MAXERROR) || (BAUD_ERROR<-BAUD_MAXERROR)) - .endif - EE_UBRRVAL: -000090 19 00 .dw UBRR_VAL ; BAUDRATE - ; 1st free address in EEPROM. - EHERESTART: - .cseg - - -RESOURCE USE INFORMATION ------------------------- - -Notice: -The register and instruction counts are symbol table hit counts, -and hence implicitly used resources are not counted, eg, the -'lpm' instruction without operands implicitly uses r0 and z, -none of which are counted. - -x,y,z are separate entities in the symbol table and are -counted separately from r26..r31 here. - -.dseg memory usage only counts static data declared with .byte - -"ATmega644" register use summary: -r0 : 25 r1 : 5 r2 : 10 r3 : 12 r4 : 4 r5 : 1 r6 : 0 r7 : 0 -r8 : 0 r9 : 0 r10: 1 r11: 6 r12: 0 r13: 0 r14: 22 r15: 20 -r16: 89 r17: 61 r18: 61 r19: 37 r20: 13 r21: 11 r22: 11 r23: 3 -r24: 212 r25: 145 r26: 28 r27: 17 r28: 7 r29: 4 r30: 90 r31: 49 -x : 4 y : 217 z : 50 -Registers used: 29 out of 35 (82.9%) - -"ATmega644" instruction use summary: -.lds : 0 .sts : 0 adc : 22 add : 17 adiw : 17 and : 4 -andi : 3 asr : 2 bclr : 0 bld : 0 brbc : 2 brbs : 7 -brcc : 3 brcs : 1 break : 0 breq : 6 brge : 1 brhc : 0 -brhs : 0 brid : 0 brie : 0 brlo : 1 brlt : 3 brmi : 3 -brne : 22 brpl : 0 brsh : 0 brtc : 0 brts : 0 brvc : 0 -brvs : 2 bset : 0 bst : 0 call : 2 cbi : 7 cbr : 1 -clc : 2 clh : 0 cli : 7 cln : 0 clr : 14 cls : 0 -clt : 0 clv : 0 clz : 0 com : 14 cp : 11 cpc : 10 -cpi : 2 cpse : 0 dec : 10 eor : 3 fmul : 0 fmuls : 0 -fmulsu: 0 icall : 0 ijmp : 1 in : 25 inc : 3 jmp : 14 -ld : 145 ldd : 4 ldi : 41 lds : 1 lpm : 16 lsl : 14 -lsr : 2 mov : 16 movw : 72 mul : 5 muls : 1 mulsu : 2 -neg : 0 nop : 0 or : 9 ori : 2 out : 22 pop : 49 -push : 43 rcall : 41 ret : 7 reti : 1 rjmp : 105 rol : 23 -ror : 6 sbc : 9 sbci : 3 sbi : 8 sbic : 3 sbis : 0 -sbiw : 16 sbr : 0 sbrc : 5 sbrs : 7 sec : 1 seh : 0 -sei : 1 sen : 0 ser : 4 ses : 0 set : 0 sev : 0 -sez : 0 sleep : 0 spm : 2 st : 81 std : 8 sts : 1 -sub : 6 subi : 3 swap : 0 tst : 0 wdr : 0 -Instructions used: 72 out of 113 (63.7%) - -"ATmega644" memory use summary [bytes]: -Segment Begin End Code Data Used Size Use% ---------------------------------------------------------------- -[.cseg] 0x000000 0x00fb24 2088 14590 16678 65536 25.4% -[.dseg] 0x000100 0x0001c4 0 196 196 4096 4.8% -[.eseg] 0x000000 0x000092 0 146 146 2048 7.1% - -Assembly complete, 0 errors, 8 warnings diff --git a/amforth-6.5/appl/eval-pollin/p644-16.map b/amforth-6.5/appl/eval-pollin/p644-16.map deleted file mode 100644 index 414fea5..0000000 --- a/amforth-6.5/appl/eval-pollin/p644-16.map +++ /dev/null @@ -1,2133 +0,0 @@ - -AVRASM ver. 2.1.52 p644-16.asm Sun Apr 30 20:10:15 2017 - - -SET DICT_COMPILER2 00000001 -SET cpu_msp430 00000000 -SET cpu_avr8 00000001 -SET USER_STATE 00000000 -SET USER_FOLLOWER 00000002 -SET USER_RP 00000004 -SET USER_SP0 00000006 -SET USER_SP 00000008 -SET USER_HANDLER 0000000a -SET USER_BASE 0000000c -SET USER_EMIT 0000000e -SET USER_EMITQ 00000010 -SET USER_KEY 00000012 -SET USER_KEYQ 00000014 -SET USER_SOURCE 00000016 -SET USER_TO_IN 00000018 -SET USER_REFILL 0000001a -SET USER_P_OK 0000001c -SET USER_P_ERR 0000001e -SET USER_P_RDY 00000020 -SET SYSUSERSIZE 00000022 -DEF zerol r2 -DEF zeroh r3 -DEF upl r4 -DEF uph r5 -DEF al r6 -DEF ah r7 -DEF bl r8 -DEF bh r9 -DEF mcu_boot r10 -DEF isrflag r11 -DEF temp4 r14 -DEF temp5 r15 -DEF temp0 r16 -DEF temp1 r17 -DEF temp2 r18 -DEF temp3 r19 -DEF temp6 r20 -DEF temp7 r21 -DEF tosl r24 -DEF tosh r25 -DEF wl r22 -DEF wh r23 -EQU SIGNATURE_000 0000001e -EQU SIGNATURE_001 00000096 -EQU SIGNATURE_002 00000009 -EQU UDR0 000000c6 -EQU UBRR0L 000000c4 -EQU UBRR0H 000000c5 -EQU UCSR0C 000000c2 -EQU UCSR0B 000000c1 -EQU UCSR0A 000000c0 -EQU TWAMR 000000bd -EQU TWCR 000000bc -EQU TWDR 000000bb -EQU TWAR 000000ba -EQU TWSR 000000b9 -EQU TWBR 000000b8 -EQU ASSR 000000b6 -EQU OCR2B 000000b4 -EQU OCR2A 000000b3 -EQU TCNT2 000000b2 -EQU TCCR2B 000000b1 -EQU TCCR2A 000000b0 -EQU OCR1BL 0000008a -EQU OCR1BH 0000008b -EQU OCR1AL 00000088 -EQU OCR1AH 00000089 -EQU ICR1L 00000086 -EQU ICR1H 00000087 -EQU TCNT1L 00000084 -EQU TCNT1H 00000085 -EQU TCCR1C 00000082 -EQU TCCR1B 00000081 -EQU TCCR1A 00000080 -EQU DIDR1 0000007f -EQU DIDR0 0000007e -EQU ADMUX 0000007c -EQU ADCSRB 0000007b -EQU ADCSRA 0000007a -EQU ADCH 00000079 -EQU ADCL 00000078 -EQU PCMSK3 00000073 -EQU TIMSK2 00000070 -EQU TIMSK1 0000006f -EQU TIMSK0 0000006e -EQU PCMSK2 0000006d -EQU PCMSK1 0000006c -EQU PCMSK0 0000006b -EQU EICRA 00000069 -EQU PCICR 00000068 -EQU OSCCAL 00000066 -EQU PRR 00000064 -EQU CLKPR 00000061 -EQU WDTCSR 00000060 -EQU SREG 0000003f -EQU SPL 0000003d -EQU SPH 0000003e -EQU SPMCSR 00000037 -EQU MCUCR 00000035 -EQU MCUSR 00000034 -EQU SMCR 00000033 -EQU OCDR 00000031 -EQU ACSR 00000030 -EQU SPDR 0000002e -EQU SPSR 0000002d -EQU SPCR 0000002c -EQU GPIOR2 0000002b -EQU GPIOR1 0000002a -EQU OCR0B 00000028 -EQU OCR0A 00000027 -EQU TCNT0 00000026 -EQU TCCR0B 00000025 -EQU TCCR0A 00000024 -EQU GTCCR 00000023 -EQU EEARH 00000022 -EQU EEARL 00000021 -EQU EEDR 00000020 -EQU EECR 0000001f -EQU GPIOR0 0000001e -EQU EIMSK 0000001d -EQU EIFR 0000001c -EQU PCIFR 0000001b -EQU TIFR2 00000017 -EQU TIFR1 00000016 -EQU TIFR0 00000015 -EQU PORTD 0000000b -EQU DDRD 0000000a -EQU PIND 00000009 -EQU PORTC 00000008 -EQU DDRC 00000007 -EQU PINC 00000006 -EQU PORTB 00000005 -EQU DDRB 00000004 -EQU PINB 00000003 -EQU PORTA 00000002 -EQU DDRA 00000001 -EQU PINA 00000000 -EQU ACME 00000006 -EQU ACIS0 00000000 -EQU ACIS1 00000001 -EQU ACIC 00000002 -EQU ACIE 00000003 -EQU ACI 00000004 -EQU ACO 00000005 -EQU ACBG 00000006 -EQU ACD 00000007 -EQU AIN0D 00000000 -EQU AIN1D 00000001 -EQU UDR0_0 00000000 -EQU UDR0_1 00000001 -EQU UDR0_2 00000002 -EQU UDR0_3 00000003 -EQU UDR0_4 00000004 -EQU UDR0_5 00000005 -EQU UDR0_6 00000006 -EQU UDR0_7 00000007 -EQU MPCM0 00000000 -EQU U2X0 00000001 -EQU UPE0 00000002 -EQU DOR0 00000003 -EQU FE0 00000004 -EQU UDRE0 00000005 -EQU TXC0 00000006 -EQU RXC0 00000007 -EQU TXB80 00000000 -EQU RXB80 00000001 -EQU UCSZ02 00000002 -EQU TXEN0 00000003 -EQU RXEN0 00000004 -EQU UDRIE0 00000005 -EQU TXCIE0 00000006 -EQU RXCIE0 00000007 -EQU UCPOL0 00000000 -EQU UCSZ00 00000001 -EQU UCPHA0 00000001 -EQU UCSZ01 00000002 -EQU UDORD0 00000002 -EQU USBS0 00000003 -EQU UPM00 00000004 -EQU UPM01 00000005 -EQU UMSEL00 00000006 -EQU UMSEL0 00000006 -EQU UMSEL01 00000007 -EQU UMSEL1 00000007 -EQU UBRR8 00000000 -EQU UBRR9 00000001 -EQU UBRR10 00000002 -EQU UBRR11 00000003 -EQU _UBRR0 00000000 -EQU _UBRR1 00000001 -EQU UBRR2 00000002 -EQU UBRR3 00000003 -EQU UBRR4 00000004 -EQU UBRR5 00000005 -EQU UBRR6 00000006 -EQU UBRR7 00000007 -EQU PORTA0 00000000 -EQU PA0 00000000 -EQU PORTA1 00000001 -EQU PA1 00000001 -EQU PORTA2 00000002 -EQU PA2 00000002 -EQU PORTA3 00000003 -EQU PA3 00000003 -EQU PORTA4 00000004 -EQU PA4 00000004 -EQU PORTA5 00000005 -EQU PA5 00000005 -EQU PORTA6 00000006 -EQU PA6 00000006 -EQU PORTA7 00000007 -EQU PA7 00000007 -EQU DDA0 00000000 -EQU DDA1 00000001 -EQU DDA2 00000002 -EQU DDA3 00000003 -EQU DDA4 00000004 -EQU DDA5 00000005 -EQU DDA6 00000006 -EQU DDA7 00000007 -EQU PINA0 00000000 -EQU PINA1 00000001 -EQU PINA2 00000002 -EQU PINA3 00000003 -EQU PINA4 00000004 -EQU PINA5 00000005 -EQU PINA6 00000006 -EQU PINA7 00000007 -EQU PORTB0 00000000 -EQU PB0 00000000 -EQU PORTB1 00000001 -EQU PB1 00000001 -EQU PORTB2 00000002 -EQU PB2 00000002 -EQU PORTB3 00000003 -EQU PB3 00000003 -EQU PORTB4 00000004 -EQU PB4 00000004 -EQU PORTB5 00000005 -EQU PB5 00000005 -EQU PORTB6 00000006 -EQU PB6 00000006 -EQU PORTB7 00000007 -EQU PB7 00000007 -EQU DDB0 00000000 -EQU DDB1 00000001 -EQU DDB2 00000002 -EQU DDB3 00000003 -EQU DDB4 00000004 -EQU DDB5 00000005 -EQU DDB6 00000006 -EQU DDB7 00000007 -EQU PINB0 00000000 -EQU PINB1 00000001 -EQU PINB2 00000002 -EQU PINB3 00000003 -EQU PINB4 00000004 -EQU PINB5 00000005 -EQU PINB6 00000006 -EQU PINB7 00000007 -EQU PORTC0 00000000 -EQU PC0 00000000 -EQU PORTC1 00000001 -EQU PC1 00000001 -EQU PORTC2 00000002 -EQU PC2 00000002 -EQU PORTC3 00000003 -EQU PC3 00000003 -EQU PORTC4 00000004 -EQU PC4 00000004 -EQU PORTC5 00000005 -EQU PC5 00000005 -EQU PORTC6 00000006 -EQU PC6 00000006 -EQU PORTC7 00000007 -EQU PC7 00000007 -EQU DDC0 00000000 -EQU DDC1 00000001 -EQU DDC2 00000002 -EQU DDC3 00000003 -EQU DDC4 00000004 -EQU DDC5 00000005 -EQU DDC6 00000006 -EQU DDC7 00000007 -EQU PINC0 00000000 -EQU PINC1 00000001 -EQU PINC2 00000002 -EQU PINC3 00000003 -EQU PINC4 00000004 -EQU PINC5 00000005 -EQU PINC6 00000006 -EQU PINC7 00000007 -EQU PORTD0 00000000 -EQU PD0 00000000 -EQU PORTD1 00000001 -EQU PD1 00000001 -EQU PORTD2 00000002 -EQU PD2 00000002 -EQU PORTD3 00000003 -EQU PD3 00000003 -EQU PORTD4 00000004 -EQU PD4 00000004 -EQU PORTD5 00000005 -EQU PD5 00000005 -EQU PORTD6 00000006 -EQU PD6 00000006 -EQU PORTD7 00000007 -EQU PD7 00000007 -EQU DDD0 00000000 -EQU DDD1 00000001 -EQU DDD2 00000002 -EQU DDD3 00000003 -EQU DDD4 00000004 -EQU DDD5 00000005 -EQU DDD6 00000006 -EQU DDD7 00000007 -EQU PIND0 00000000 -EQU PIND1 00000001 -EQU PIND2 00000002 -EQU PIND3 00000003 -EQU PIND4 00000004 -EQU PIND5 00000005 -EQU PIND6 00000006 -EQU PIND7 00000007 -EQU TOIE0 00000000 -EQU OCIE0A 00000001 -EQU OCIE0B 00000002 -EQU TOV0 00000000 -EQU OCF0A 00000001 -EQU OCF0B 00000002 -EQU WGM00 00000000 -EQU WGM01 00000001 -EQU COM0B0 00000004 -EQU COM0B1 00000005 -EQU COM0A0 00000006 -EQU COM0A1 00000007 -EQU CS00 00000000 -EQU CS01 00000001 -EQU CS02 00000002 -EQU WGM02 00000003 -EQU FOC0B 00000006 -EQU FOC0A 00000007 -EQU TCNT0_0 00000000 -EQU TCNT0_1 00000001 -EQU TCNT0_2 00000002 -EQU TCNT0_3 00000003 -EQU TCNT0_4 00000004 -EQU TCNT0_5 00000005 -EQU TCNT0_6 00000006 -EQU TCNT0_7 00000007 -EQU OCR0A_0 00000000 -EQU OCR0A_1 00000001 -EQU OCR0A_2 00000002 -EQU OCR0A_3 00000003 -EQU OCR0A_4 00000004 -EQU OCR0A_5 00000005 -EQU OCR0A_6 00000006 -EQU OCR0A_7 00000007 -EQU OCR0B_0 00000000 -EQU OCR0B_1 00000001 -EQU OCR0B_2 00000002 -EQU OCR0B_3 00000003 -EQU OCR0B_4 00000004 -EQU OCR0B_5 00000005 -EQU OCR0B_6 00000006 -EQU OCR0B_7 00000007 -EQU PSRSYNC 00000000 -EQU PSR10 00000000 -EQU TSM 00000007 -EQU TOIE2 00000000 -EQU TOIE2A 00000000 -EQU OCIE2A 00000001 -EQU OCIE2B 00000002 -EQU TOV2 00000000 -EQU OCF2A 00000001 -EQU OCF2B 00000002 -EQU WGM20 00000000 -EQU WGM21 00000001 -EQU COM2B0 00000004 -EQU COM2B1 00000005 -EQU COM2A0 00000006 -EQU COM2A1 00000007 -EQU CS20 00000000 -EQU CS21 00000001 -EQU CS22 00000002 -EQU WGM22 00000003 -EQU FOC2B 00000006 -EQU FOC2A 00000007 -EQU TCNT2_0 00000000 -EQU TCNT2_1 00000001 -EQU TCNT2_2 00000002 -EQU TCNT2_3 00000003 -EQU TCNT2_4 00000004 -EQU TCNT2_5 00000005 -EQU TCNT2_6 00000006 -EQU TCNT2_7 00000007 -EQU OCR2A_0 00000000 -EQU OCR2A_1 00000001 -EQU OCR2A_2 00000002 -EQU OCR2A_3 00000003 -EQU OCR2A_4 00000004 -EQU OCR2A_5 00000005 -EQU OCR2A_6 00000006 -EQU OCR2A_7 00000007 -EQU OCR2B_0 00000000 -EQU OCR2B_1 00000001 -EQU OCR2B_2 00000002 -EQU OCR2B_3 00000003 -EQU OCR2B_4 00000004 -EQU OCR2B_5 00000005 -EQU OCR2B_6 00000006 -EQU OCR2B_7 00000007 -EQU TCR2BUB 00000000 -EQU TCR2AUB 00000001 -EQU OCR2BUB 00000002 -EQU OCR2AUB 00000003 -EQU TCN2UB 00000004 -EQU AS2 00000005 -EQU EXCLK 00000006 -EQU PSRASY 00000001 -EQU PSR2 00000001 -EQU WDP0 00000000 -EQU WDP1 00000001 -EQU WDP2 00000002 -EQU WDE 00000003 -EQU WDCE 00000004 -EQU WDP3 00000005 -EQU WDIE 00000006 -EQU WDIF 00000007 -EQU OCDR0 00000000 -EQU OCDR1 00000001 -EQU OCDR2 00000002 -EQU OCDR3 00000003 -EQU OCDR4 00000004 -EQU OCDR5 00000005 -EQU OCDR6 00000006 -EQU OCDR7 00000007 -EQU IDRD 00000007 -EQU JTD 00000007 -EQU JTRF 00000004 -EQU SPMEN 00000000 -EQU PGERS 00000001 -EQU PGWRT 00000002 -EQU BLBSET 00000003 -EQU RWWSRE 00000004 -EQU SIGRD 00000005 -EQU RWWSB 00000006 -EQU SPMIE 00000007 -EQU ISC00 00000000 -EQU ISC01 00000001 -EQU ISC10 00000002 -EQU ISC11 00000003 -EQU ISC20 00000004 -EQU ISC21 00000005 -EQU INT0 00000000 -EQU INT1 00000001 -EQU INT2 00000002 -EQU INTF0 00000000 -EQU INTF1 00000001 -EQU INTF2 00000002 -EQU PCIE0 00000000 -EQU PCIE1 00000001 -EQU PCIE2 00000002 -EQU PCIE3 00000003 -EQU PCIF0 00000000 -EQU PCIF1 00000001 -EQU PCIF2 00000002 -EQU PCIF3 00000003 -EQU PCINT24 00000000 -EQU PCINT25 00000001 -EQU PCINT26 00000002 -EQU PCINT27 00000003 -EQU PCINT28 00000004 -EQU PCINT29 00000005 -EQU PCINT30 00000006 -EQU PCINT31 00000007 -EQU PCINT16 00000000 -EQU PCINT17 00000001 -EQU PCINT18 00000002 -EQU PCINT19 00000003 -EQU PCINT20 00000004 -EQU PCINT21 00000005 -EQU PCINT22 00000006 -EQU PCINT23 00000007 -EQU PCINT8 00000000 -EQU PCINT9 00000001 -EQU PCINT10 00000002 -EQU PCINT11 00000003 -EQU PCINT12 00000004 -EQU PCINT13 00000005 -EQU PCINT14 00000006 -EQU PCINT15 00000007 -EQU PCINT0 00000000 -EQU PCINT1 00000001 -EQU PCINT2 00000002 -EQU PCINT3 00000003 -EQU PCINT4 00000004 -EQU PCINT5 00000005 -EQU PCINT6 00000006 -EQU PCINT7 00000007 -EQU MUX0 00000000 -EQU MUX1 00000001 -EQU MUX2 00000002 -EQU MUX3 00000003 -EQU MUX4 00000004 -EQU ADLAR 00000005 -EQU REFS0 00000006 -EQU REFS1 00000007 -EQU ADPS0 00000000 -EQU ADPS1 00000001 -EQU ADPS2 00000002 -EQU ADIE 00000003 -EQU ADIF 00000004 -EQU ADATE 00000005 -EQU ADSC 00000006 -EQU ADEN 00000007 -EQU ADTS0 00000000 -EQU ADTS1 00000001 -EQU ADTS2 00000002 -EQU ADCH0 00000000 -EQU ADCH1 00000001 -EQU ADCH2 00000002 -EQU ADCH3 00000003 -EQU ADCH4 00000004 -EQU ADCH5 00000005 -EQU ADCH6 00000006 -EQU ADCH7 00000007 -EQU ADCL0 00000000 -EQU ADCL1 00000001 -EQU ADCL2 00000002 -EQU ADCL3 00000003 -EQU ADCL4 00000004 -EQU ADCL5 00000005 -EQU ADCL6 00000006 -EQU ADCL7 00000007 -EQU ADC0D 00000000 -EQU ADC1D 00000001 -EQU ADC2D 00000002 -EQU ADC3D 00000003 -EQU ADC4D 00000004 -EQU ADC5D 00000005 -EQU ADC6D 00000006 -EQU ADC7D 00000007 -EQU TOIE1 00000000 -EQU OCIE1A 00000001 -EQU OCIE1B 00000002 -EQU ICIE1 00000005 -EQU TOV1 00000000 -EQU OCF1A 00000001 -EQU OCF1B 00000002 -EQU ICF1 00000005 -EQU WGM10 00000000 -EQU PWM10 00000000 -EQU WGM11 00000001 -EQU PWM11 00000001 -EQU COM1B0 00000004 -EQU COM1B1 00000005 -EQU COM1A0 00000006 -EQU COM1A1 00000007 -EQU CS10 00000000 -EQU CS11 00000001 -EQU CS12 00000002 -EQU WGM12 00000003 -EQU CTC1 00000003 -EQU WGM13 00000004 -EQU ICES1 00000006 -EQU ICNC1 00000007 -EQU FOC1B 00000006 -EQU FOC1A 00000007 -EQU EEAR8 00000000 -EQU EEAR9 00000001 -EQU EEAR10 00000002 -EQU EEAR11 00000003 -EQU EEAR0 00000000 -EQU EEAR1 00000001 -EQU EEAR2 00000002 -EQU EEAR3 00000003 -EQU EEAR4 00000004 -EQU EEAR5 00000005 -EQU EEAR6 00000006 -EQU EEAR7 00000007 -EQU EEDR0 00000000 -EQU EEDR1 00000001 -EQU EEDR2 00000002 -EQU EEDR3 00000003 -EQU EEDR4 00000004 -EQU EEDR5 00000005 -EQU EEDR6 00000006 -EQU EEDR7 00000007 -EQU EERE 00000000 -EQU EEPE 00000001 -EQU EEMPE 00000002 -EQU EERIE 00000003 -EQU EEPM0 00000004 -EQU EEPM1 00000005 -EQU TWAM0 00000001 -EQU TWAMR0 00000001 -EQU TWAM1 00000002 -EQU TWAMR1 00000002 -EQU TWAM2 00000003 -EQU TWAMR2 00000003 -EQU TWAM3 00000004 -EQU TWAMR3 00000004 -EQU TWAM4 00000005 -EQU TWAMR4 00000005 -EQU TWAM5 00000006 -EQU TWAMR5 00000006 -EQU TWAM6 00000007 -EQU TWAMR6 00000007 -EQU TWBR0 00000000 -EQU TWBR1 00000001 -EQU TWBR2 00000002 -EQU TWBR3 00000003 -EQU TWBR4 00000004 -EQU TWBR5 00000005 -EQU TWBR6 00000006 -EQU TWBR7 00000007 -EQU TWIE 00000000 -EQU TWEN 00000002 -EQU TWWC 00000003 -EQU TWSTO 00000004 -EQU TWSTA 00000005 -EQU TWEA 00000006 -EQU TWINT 00000007 -EQU TWPS0 00000000 -EQU TWPS1 00000001 -EQU TWS3 00000003 -EQU TWS4 00000004 -EQU TWS5 00000005 -EQU TWS6 00000006 -EQU TWS7 00000007 -EQU TWD0 00000000 -EQU TWD1 00000001 -EQU TWD2 00000002 -EQU TWD3 00000003 -EQU TWD4 00000004 -EQU TWD5 00000005 -EQU TWD6 00000006 -EQU TWD7 00000007 -EQU TWGCE 00000000 -EQU TWA0 00000001 -EQU TWA1 00000002 -EQU TWA2 00000003 -EQU TWA3 00000004 -EQU TWA4 00000005 -EQU TWA5 00000006 -EQU TWA6 00000007 -EQU SPDR0 00000000 -EQU SPDR1 00000001 -EQU SPDR2 00000002 -EQU SPDR3 00000003 -EQU SPDR4 00000004 -EQU SPDR5 00000005 -EQU SPDR6 00000006 -EQU SPDR7 00000007 -EQU SPI2X 00000000 -EQU WCOL 00000006 -EQU SPIF 00000007 -EQU SPR0 00000000 -EQU SPR1 00000001 -EQU CPHA 00000002 -EQU CPOL 00000003 -EQU MSTR 00000004 -EQU DORD 00000005 -EQU SPE 00000006 -EQU SPIE 00000007 -EQU SREG_C 00000000 -EQU SREG_Z 00000001 -EQU SREG_N 00000002 -EQU SREG_V 00000003 -EQU SREG_S 00000004 -EQU SREG_H 00000005 -EQU SREG_T 00000006 -EQU SREG_I 00000007 -EQU IVCE 00000000 -EQU IVSEL 00000001 -EQU PUD 00000004 -EQU PORF 00000000 -EQU EXTRF 00000001 -EQU BORF 00000002 -EQU WDRF 00000003 -EQU CAL0 00000000 -EQU CAL1 00000001 -EQU CAL2 00000002 -EQU CAL3 00000003 -EQU CAL4 00000004 -EQU CAL5 00000005 -EQU CAL6 00000006 -EQU CAL7 00000007 -EQU CLKPS0 00000000 -EQU CLKPS1 00000001 -EQU CLKPS2 00000002 -EQU CLKPS3 00000003 -EQU CLKPCE 00000007 -EQU SE 00000000 -EQU SM0 00000001 -EQU SM1 00000002 -EQU SM2 00000003 -EQU GPIOR20 00000000 -EQU GPIOR21 00000001 -EQU GPIOR22 00000002 -EQU GPIOR23 00000003 -EQU GPIOR24 00000004 -EQU GPIOR25 00000005 -EQU GPIOR26 00000006 -EQU GPIOR27 00000007 -EQU GPIOR10 00000000 -EQU GPIOR11 00000001 -EQU GPIOR12 00000002 -EQU GPIOR13 00000003 -EQU GPIOR14 00000004 -EQU GPIOR15 00000005 -EQU GPIOR16 00000006 -EQU GPIOR17 00000007 -EQU GPIOR00 00000000 -EQU GPIOR01 00000001 -EQU GPIOR02 00000002 -EQU GPIOR03 00000003 -EQU GPIOR04 00000004 -EQU GPIOR05 00000005 -EQU GPIOR06 00000006 -EQU GPIOR07 00000007 -EQU PRADC 00000000 -EQU PRUSART0 00000001 -EQU PRSPI 00000002 -EQU PRTIM1 00000003 -EQU PRTIM0 00000005 -EQU PRTIM2 00000006 -EQU PRTWI 00000007 -EQU LB1 00000000 -EQU LB2 00000001 -EQU BLB01 00000002 -EQU BLB02 00000003 -EQU BLB11 00000004 -EQU BLB12 00000005 -EQU CKSEL0 00000000 -EQU CKSEL1 00000001 -EQU CKSEL2 00000002 -EQU CKSEL3 00000003 -EQU SUT0 00000004 -EQU SUT1 00000005 -EQU CKOUT 00000006 -EQU CKDIV8 00000007 -EQU BOOTRST 00000000 -EQU BOOTSZ0 00000001 -EQU BOOTSZ1 00000002 -EQU EESAVE 00000003 -EQU WDTON 00000004 -EQU SPIEN 00000005 -EQU JTAGEN 00000006 -EQU OCDEN 00000007 -EQU BODLEVEL0 00000000 -EQU BODLEVEL1 00000001 -EQU BODLEVEL2 00000002 -DEF XH r27 -DEF XL r26 -DEF YH r29 -DEF YL r28 -DEF ZH r31 -DEF ZL r30 -EQU FLASHEND 00007fff -EQU IOEND 000000ff -EQU SRAM_START 00000100 -EQU SRAM_SIZE 00001000 -EQU RAMEND 000010ff -EQU XRAMEND 00000000 -EQU E2END 000007ff -EQU EEPROMEND 000007ff -EQU EEADRBITS 0000000b -EQU NRWW_START_ADDR 00007000 -EQU NRWW_STOP_ADDR 00007fff -EQU RWW_START_ADDR 00000000 -EQU RWW_STOP_ADDR 00006fff -EQU PAGESIZE 00000080 -EQU FIRSTBOOTSTART 00007e00 -EQU SECONDBOOTSTART 00007c00 -EQU THIRDBOOTSTART 00007800 -EQU FOURTHBOOTSTART 00007000 -EQU SMALLBOOTSTART 00007e00 -EQU LARGEBOOTSTART 00007000 -EQU INT0addr 00000002 -EQU INT1addr 00000004 -EQU INT2addr 00000006 -EQU PCI0addr 00000008 -EQU PCI1addr 0000000a -EQU PCI2addr 0000000c -EQU PCI3addr 0000000e -EQU WDTaddr 00000010 -EQU OC2Aaddr 00000012 -EQU OC2Baddr 00000014 -EQU OVF2addr 00000016 -EQU ICP1addr 00000018 -EQU OC1Aaddr 0000001a -EQU OC1Baddr 0000001c -EQU OVF1addr 0000001e -EQU OC0Aaddr 00000020 -EQU OC0Baddr 00000022 -EQU OVF0addr 00000024 -EQU SPIaddr 00000026 -EQU URXC0addr 00000028 -EQU UDRE0addr 0000002a -EQU UTXC0addr 0000002c -EQU ACIaddr 0000002e -EQU ADCCaddr 00000030 -EQU ERDYaddr 00000032 -EQU TWIaddr 00000034 -EQU SPMRaddr 00000036 -EQU INT_VECTORS_SIZE 00000038 -EQU ramstart 00000100 -EQU CELLSIZE 00000002 -SET WANT_ANALOG_COMPARATOR 00000000 -SET WANT_USART0 00000000 -SET WANT_PORTA 00000000 -SET WANT_PORTB 00000000 -SET WANT_PORTC 00000000 -SET WANT_PORTD 00000000 -SET WANT_TIMER_COUNTER_0 00000000 -SET WANT_TIMER_COUNTER_2 00000000 -SET WANT_WATCHDOG 00000000 -SET WANT_JTAG 00000000 -SET WANT_BOOT_LOAD 00000000 -SET WANT_EXTERNAL_INTERRUPT 00000000 -SET WANT_AD_CONVERTER 00000000 -SET WANT_TIMER_COUNTER_1 00000000 -SET WANT_EEPROM 00000000 -SET WANT_TWI 00000000 -SET WANT_SPI 00000000 -SET WANT_CPU 00000000 -EQU intvecsize 00000002 -EQU pclen 00000002 -CSEG isr 0000012d -EQU INTVECTORS 0000001c -CSEG mcu_info 00000037 -CSEG mcu_ramsize 00000037 -CSEG mcu_eepromsize 00000038 -CSEG mcu_maxdp 00000039 -CSEG mcu_numints 0000003a -CSEG mcu_name 0000003b -SET codestart 00000041 -SET WANT_INTERRUPTS 00000001 -SET WANT_INTERRUPT_COUNTERS 00000000 -SET WANT_ISR_RX 00000001 -SET WANT_IGNORECASE 00000000 -SET WANT_UNIFIED 00000000 -SET TIB_SIZE 0000005a -SET APPUSERSIZE 0000000a -SET rstackstart 000010ff -SET stackstart 000010af -SET NUMWORDLISTS 00000008 -SET NUMRECOGNIZERS 00000004 -SET BAUD 00009600 -SET BAUD_MAXERROR 0000001e -SET VE_HEAD 00007d8d -SET VE_ENVHEAD 00007532 -SET AMFORTH_RO_SEG 00007001 -EQU F_CPU 00f42400 -EQU TIMER_INT 00000016 -EQU BAUDRATE_LOW 000000c4 -EQU BAUDRATE_HIGH 000000c5 -EQU USART_C 000000c2 -EQU USART_B 000000c1 -EQU USART_A 000000c0 -EQU USART_DATA 000000c6 -EQU URXCaddr 00000028 -EQU UDREaddr 0000002a -EQU bm_USART_RXRD 00000080 -EQU bm_USART_TXRD 00000020 -EQU bm_ENABLE_TX 00000008 -EQU bm_ENABLE_RX 00000010 -EQU bm_ENABLE_INT_RX 00000080 -EQU bm_ENABLE_INT_TX 00000020 -EQU bm_USARTC_en 00000000 -EQU bm_ASYNC 00000000 -EQU bm_SYNC 00000040 -EQU bm_NO_PARITY 00000000 -EQU bm_EVEN_PARITY 00000020 -EQU bm_ODD_PARITY 00000030 -EQU bm_1STOPBIT 00000000 -EQU bm_2STOPBIT 00000008 -EQU bm_5BIT 00000000 -EQU bm_6BIT 00000002 -EQU bm_7BIT 00000004 -EQU bm_8BIT 00000006 -SET USART_C_VALUE 00000006 -SET USART_B_VALUE 00000098 -EQU usart_rx_size 00000010 -EQU usart_rx_mask 0000000f -DSEG usart_rx_data 00000100 -DSEG usart_rx_in 00000110 -DSEG usart_rx_out 00000111 -CSEG VE_TO_RXBUF 00000041 -CSEG XT_TO_RXBUF 00000047 -CSEG PFA_rx_tobuf 00000048 -CSEG DO_NEXT 00007005 -CSEG VE_ISR_RX 00000058 -CSEG XT_ISR_RX 0000005d -CSEG DO_COLON 00007001 -CSEG usart_rx_isr 0000005e -CSEG XT_DOLITERAL 0000703d -CSEG XT_CFETCH 00007098 -CSEG XT_DUP 000070b1 -CSEG XT_EQUAL 00007d7f -CSEG XT_DOCONDBRANCH 00007036 -CSEG usart_rx_isr1 00000068 -CSEG XT_COLD 00007a59 -CSEG XT_EXIT 00007020 -CSEG XT_USART_INIT_RX_BUFFER 0000006a -CSEG PFA_USART_INIT_RX_BUFFER 0000006b -CSEG XT_INTSTORE 00007487 -CSEG XT_ZERO 00007154 -CSEG XT_FILL 000074cf -CSEG VE_RX_BUFFER 00000077 -CSEG XT_RX_BUFFER 0000007c -CSEG PFA_RX_BUFFER 0000007d -CSEG XT_RXQ_BUFFER 00000097 -CSEG XT_PLUS 0000719d -CSEG XT_SWAP 000070c4 -CSEG XT_1PLUS 0000722f -CSEG XT_AND 00007213 -CSEG XT_CSTORE 0000708d -CSEG VE_RXQ_BUFFER 00000091 -CSEG PFA_RXQ_BUFFER 00000098 -CSEG XT_PAUSE 00007a51 -CSEG XT_NOTEQUAL 00007113 -SET XT_RX 0000007c -SET XT_RXQ 00000097 -SET XT_USART_INIT_RX 0000006a -CSEG VE_TX_POLL 000000a1 -CSEG XT_TX_POLL 000000a7 -CSEG PFA_TX_POLL 000000a8 -CSEG XT_TXQ_POLL 000000b5 -CSEG VE_TXQ_POLL 000000af -CSEG PFA_TXQ_POLL 000000b6 -SET XT_TX 000000a7 -SET XT_TXQ 000000b5 -SET XT_USART_INIT_TX 00000000 -CSEG VE_UBRR 000000be -CSEG XT_UBRR 000000c2 -CSEG PFA_DOVALUE1 0000706f -CSEG PFA_UBRR 000000c3 -ESEG EE_UBRRVAL 00000090 -CSEG XT_EDEFERFETCH 00007bb4 -CSEG XT_EDEFERSTORE 00007bbe -CSEG VE_USART 000000c6 -CSEG XT_USART 000000cb -CSEG PFA_USART 000000cc -CSEG XT_BYTESWAP 000072f9 -EQU OW_PORT 00000005 -EQU OW_BIT 00000004 -SET OW_DDR 00000004 -SET OW_PIN 00000003 -CSEG VE_OW_RESET 000000e1 -CSEG XT_OW_RESET 000000e7 -CSEG PFA_OW_RESET 000000e8 -SET cycles 00000000 -SET loop_cycles 00000fa0 -CSEG VE_OW_SLOT 00000105 -CSEG XT_OW_SLOT 0000010b -CSEG PFA_OW_SLOT 0000010c -CSEG PFA_OW_SLOT0 00000119 -SET AMFORTH_NRWW_SIZE 00001ffc -SET corepc 0000012d -CSEG PFA_COLD 00007a5a -ESEG intvec 00000000 -DSEG intcnt 00000112 -CSEG VE_MPLUS 00000144 -CSEG XT_MPLUS 00000147 -CSEG PFA_MPLUS 00000148 -CSEG XT_S2D 00007d67 -CSEG XT_DPLUS 00007415 -CSEG VE_UDSTAR 0000014b -CSEG XT_UDSTAR 0000014f -CSEG PFA_UDSTAR 00000150 -CSEG XT_TO_R 000070ff -CSEG XT_UMSTAR 000071e0 -CSEG XT_DROP 000070d9 -CSEG XT_R_FROM 000070f6 -CSEG XT_ROT 000070e1 -CSEG VE_UMAX 0000015a -CSEG XT_UMAX 0000015e -CSEG PFA_UMAX 0000015f -CSEG XT_2DUP 00007565 -CSEG XT_ULESS 0000715c -CSEG UMAX1 00000164 -CSEG VE_UMIN 00000166 -CSEG XT_UMIN 0000016a -CSEG PFA_UMIN 0000016b -CSEG XT_UGREATER 00007167 -CSEG UMIN1 00000170 -CSEG XT_IMMEDIATEQ 00000172 -CSEG PFA_IMMEDIATEQ 00000173 -CSEG XT_ZEROEQUAL 0000711a -CSEG IMMEDIATEQ1 0000017b -CSEG XT_ONE 00007d86 -CSEG XT_TRUE 0000714b -CSEG VE_NAME2FLAGS 0000017d -CSEG XT_NAME2FLAGS 00000184 -CSEG PFA_NAME2FLAGS 00000185 -CSEG XT_FETCHI 000073cb -CSEG VE_NEWEST 0000018a -CSEG XT_NEWEST 0000018f -CSEG PFA_DOVARIABLE 00007048 -CSEG PFA_NEWEST 00000190 -DSEG ram_newest 0000012e -CSEG VE_LATEST 00000191 -CSEG XT_LATEST 00000196 -CSEG PFA_LATEST 00000197 -DSEG ram_latest 00000132 -CSEG VE_DOCREATE 00000198 -CSEG XT_DOCREATE 0000019e -CSEG PFA_DOCREATE 0000019f -CSEG XT_PARSENAME 000079b4 -CSEG XT_WLSCOPE 000002f5 -CSEG XT_CELLPLUS 0000755e -CSEG XT_STORE 00007081 -CSEG XT_HEADER 000002da -CSEG VE_BACKSLASH 000001a9 -CSEG XT_BACKSLASH 000001ac -CSEG PFA_BACKSLASH 000001ad -CSEG XT_SOURCE 0000799b -CSEG XT_NIP 000070f0 -CSEG XT_TO_IN 0000757e -CSEG VE_LPAREN 000001b2 -CSEG XT_LPAREN 000001b5 -CSEG PFA_LPAREN 000001b6 -CSEG XT_PARSE 00007987 -CSEG XT_2DROP 0000756e -CSEG VE_COMPILE 000001bb -CSEG XT_COMPILE 000001c1 -CSEG PFA_COMPILE 000001c2 -CSEG XT_ICELLPLUS 00007bab -CSEG XT_COMMA 000001cc -CSEG VE_COMMA 000001c9 -CSEG PFA_COMMA 000001cd -CSEG XT_DP 000075ae -CSEG XT_STOREI 00007373 -CSEG XT_DOTO 00007b99 -CSEG PFA_DP 000075af -CSEG VE_BRACKETTICK 000001d4 -CSEG XT_BRACKETTICK 000001d8 -CSEG PFA_BRACKETTICK 000001d9 -CSEG XT_TICK 0000780a -CSEG XT_LITERAL 000001e2 -CSEG VE_LITERAL 000001dc -CSEG PFA_LITERAL 000001e3 -CSEG VE_SLITERAL 000001e7 -CSEG XT_SLITERAL 000001ed -CSEG PFA_SLITERAL 000001ee -CSEG XT_DOSLITERAL 0000776d -CSEG XT_SCOMMA 0000777b -CSEG XT_GMARK 000001f2 -CSEG PFA_GMARK 000001f3 -CSEG XT_GRESOLVE 000001f7 -CSEG PFA_GRESOLVE 000001f8 -CSEG XT_QSTACK 00007b57 -CSEG XT_LMARK 000001fd -CSEG PFA_LMARK 000001fe -CSEG XT_LRESOLVE 00000200 -CSEG PFA_LRESOLVE 00000201 -CSEG VE_AHEAD 00000204 -CSEG XT_AHEAD 00000209 -CSEG PFA_AHEAD 0000020a -CSEG XT_DOBRANCH 0000702f -CSEG VE_IF 0000020e -CSEG XT_IF 00000211 -CSEG PFA_IF 00000212 -CSEG VE_ELSE 00000216 -CSEG XT_ELSE 0000021a -CSEG PFA_ELSE 0000021b -CSEG VE_THEN 00000221 -CSEG XT_THEN 00000225 -CSEG PFA_THEN 00000226 -CSEG VE_BEGIN 00000228 -CSEG XT_BEGIN 0000022d -CSEG PFA_BEGIN 0000022e -CSEG VE_WHILE 00000230 -CSEG XT_WHILE 00000235 -CSEG PFA_WHILE 00000236 -CSEG VE_REPEAT 00000239 -CSEG XT_REPEAT 0000023e -CSEG PFA_REPEAT 0000023f -CSEG XT_AGAIN 00000252 -CSEG VE_UNTIL 00000242 -CSEG XT_UNTIL 00000247 -CSEG PFA_UNTIL 00000248 -CSEG VE_AGAIN 0000024d -CSEG PFA_AGAIN 00000253 -CSEG VE_DO 00000257 -CSEG XT_DO 0000025a -CSEG PFA_DO 0000025b -CSEG XT_DODO 0000729b -CSEG XT_TO_L 000002b5 -CSEG VE_LOOP 00000261 -CSEG XT_LOOP 00000265 -CSEG PFA_LOOP 00000266 -CSEG XT_DOLOOP 000072c9 -CSEG XT_ENDLOOP 0000029c -CSEG VE_PLUSLOOP 0000026a -CSEG XT_PLUSLOOP 0000026f -CSEG PFA_PLUSLOOP 00000270 -CSEG XT_DOPLUSLOOP 000072ba -CSEG VE_LEAVE 00000274 -CSEG XT_LEAVE 00000279 -CSEG PFA_LEAVE 0000027a -CSEG XT_UNLOOP 000072d4 -CSEG VE_QDO 0000027f -CSEG XT_QDO 00000283 -CSEG PFA_QDO 00000284 -CSEG XT_QDOCHECK 0000028b -CSEG PFA_QDOCHECK 0000028c -CSEG PFA_QDOCHECK1 00000293 -CSEG XT_INVERT 000071fd -CSEG VE_ENDLOOP 00000296 -CSEG PFA_ENDLOOP 0000029d -CSEG LOOP1 0000029e -CSEG XT_L_FROM 000002a9 -CSEG XT_QDUP 000070b9 -CSEG LOOP2 000002a5 -CSEG VE_L_FROM 000002a6 -CSEG PFA_L_FROM 000002aa -CSEG XT_LP 000002c8 -CSEG XT_FETCH 00007079 -CSEG XT_PLUSSTORE 00007265 -CSEG VE_TO_L 000002b2 -CSEG PFA_TO_L 000002b6 -CSEG XT_TWO 00007d8b -CSEG VE_LP0 000002bd -CSEG XT_LP0 000002c1 -CSEG PFA_LP0 000002c2 -ESEG CFG_LP0 00000044 -CSEG VE_LP 000002c5 -CSEG PFA_LP 000002c9 -DSEG ram_lp 00000134 -CSEG VE_CREATE 000002ca -CSEG XT_CREATE 000002cf -CSEG PFA_CREATE 000002d0 -CSEG XT_REVEAL 000002fe -CSEG PFA_DOCONSTANT 00007052 -CSEG VE_HEADER 000002d5 -CSEG PFA_HEADER 000002db -CSEG XT_GREATERZERO 00007128 -CSEG PFA_HEADER1 000002ec -CSEG XT_OR 0000721c -CSEG XT_DOSCOMMA 0000777f -CSEG XT_FETCHE 0000735f -CSEG XT_THROW 00007841 -CSEG VE_WLSCOPE 000002ef -CSEG PFA_DODEFER1 00007c13 -CSEG PFA_WLSCOPE 000002f6 -ESEG CFG_WLSCOPE 00000040 -CSEG VE_REVEAL 000002f9 -CSEG PFA_REVEAL 000002ff -CSEG REVEAL1 00000309 -CSEG XT_STOREE 0000733b -CSEG VE_DOES 0000030a -CSEG XT_DOES 0000030f -CSEG PFA_DOES 00000310 -CSEG XT_DODOES 00000322 -CSEG DO_DODOES 00000317 -CSEG PFA_DODOES 00000323 -CSEG XT_NFA2CFA 00007c7e -CSEG VE_COLON 0000032b -CSEG XT_COLON 0000032e -CSEG PFA_COLON 0000032f -CSEG XT_COLONNONAME 00000339 -CSEG VE_COLONNONAME 00000333 -CSEG PFA_COLONNONAME 0000033a -CSEG XT_RBRACKET 0000034e -CSEG VE_SEMICOLON 00000342 -CSEG XT_SEMICOLON 00000345 -CSEG PFA_SEMICOLON 00000346 -CSEG XT_LBRACKET 00000356 -CSEG VE_RBRACKET 0000034b -CSEG PFA_RBRACKET 0000034f -CSEG XT_STATE 0000754b -CSEG VE_LBRACKET 00000353 -CSEG PFA_LBRACKET 00000357 -CSEG VE_VARIABLE 0000035b -CSEG XT_VARIABLE 00000361 -CSEG PFA_VARIABLE 00000362 -CSEG XT_HERE 000075bf -CSEG XT_CONSTANT 0000036d -CSEG XT_ALLOT 000075c8 -CSEG VE_CONSTANT 00000367 -CSEG PFA_CONSTANT 0000036e -CSEG VE_USER 00000374 -CSEG XT_USER 00000378 -CSEG PFA_USER 00000379 -CSEG PFA_DOUSER 00007058 -CSEG VE_RECURSE 0000037f -CSEG XT_RECURSE 00000385 -CSEG PFA_RECURSE 00000386 -CSEG VE_IMMEDIATE 0000038a -CSEG XT_IMMEDIATE 00000391 -CSEG PFA_IMMEDIATE 00000392 -CSEG XT_GET_CURRENT 00000433 -CSEG VE_BRACKETCHAR 0000039c -CSEG XT_BRACKETCHAR 000003a1 -CSEG PFA_BRACKETCHAR 000003a2 -CSEG XT_CHAR 000078ea -CSEG VE_ABORTQUOTE 000003a7 -CSEG XT_ABORTQUOTE 000003ac -CSEG PFA_ABORTQUOTE 000003ad -CSEG XT_SQUOTE 000074c1 -CSEG XT_QABORT 000003be -CSEG VE_ABORT 000003b1 -CSEG XT_ABORT 000003b6 -CSEG PFA_ABORT 000003b7 -CSEG VE_QABORT 000003b9 -CSEG PFA_QABORT 000003bf -CSEG QABO1 000003c4 -CSEG XT_ITYPE 000077a0 -CSEG VE_GET_STACK 000003c6 -CSEG XT_GET_STACK 000003cd -CSEG PFA_N_FETCH_E2 000003e4 -CSEG PFA_N_FETCH_E1 000003da -CSEG XT_I 000072ac -CSEG XT_1MINUS 00007235 -CSEG XT_CELLS 00007558 -CSEG XT_OVER 000070cf -CSEG VE_SET_STACK 000003e7 -CSEG XT_SET_STACK 000003ee -CSEG PFA_SET_STACK 000003ef -CSEG XT_ZEROLESS 00007121 -CSEG PFA_SET_STACK0 000003f6 -CSEG PFA_SET_STACK2 00000403 -CSEG PFA_SET_STACK1 000003fe -CSEG XT_TUCK 00007576 -CSEG VE_MAPSTACK 00000405 -CSEG XT_MAPSTACK 0000040c -CSEG PFA_MAPSTACK 0000040d -CSEG XT_BOUNDS 00007d5e -CSEG PFA_MAPSTACK3 00000428 -CSEG PFA_MAPSTACK1 00000417 -CSEG XT_R_FETCH 00007108 -CSEG XT_EXECUTE 0000702a -CSEG PFA_MAPSTACK2 00000424 -CSEG VE_GET_CURRENT 0000042b -CSEG PFA_GET_CURRENT 00000434 -ESEG CFG_CURRENT 0000004a -CSEG VE_GET_ORDER 00000438 -CSEG XT_GET_ORDER 0000043f -CSEG PFA_GET_ORDER 00000440 -ESEG CFG_ORDERLISTLEN 0000004e -CSEG VE_CFG_ORDER 00000444 -CSEG XT_CFG_ORDER 0000044b -CSEG PFA_CFG_ORDER 0000044c -CSEG VE_COMPARE 0000044d -CSEG XT_COMPARE 00000453 -CSEG PFA_COMPARE 00000454 -CSEG PFA_COMPARE_LOOP 00000460 -CSEG PFA_COMPARE_NOTEQUAL 0000046e -CSEG PFA_COMPARE_ENDREACHED2 00000469 -CSEG PFA_COMPARE_ENDREACHED 0000046a -CSEG PFA_COMPARE_CHECKLASTCHAR 0000046e -CSEG PFA_COMPARE_DONE 00000470 -CSEG VE_NFA2LFA 00000475 -CSEG XT_NFA2LFA 0000047b -CSEG PFA_NFA2LFA 0000047c -CSEG XT_NAME2STRING 00007c72 -CSEG XT_2SLASH 00007204 -CSEG VE_DOTS 00000481 -CSEG XT_DOTS 00000484 -CSEG PFA_DOTS 00000485 -CSEG XT_DEPTH 00007aa1 -CSEG XT_UDOT 00007448 -CSEG XT_SPACE 000077e2 -CSEG PFA_DOTS2 00000493 -CSEG PFA_DOTS1 0000048e -CSEG XT_PICK 000074af -CSEG VE_SPIRW 00000494 -CSEG XT_SPIRW 00000499 -CSEG PFA_SPIRW 0000049a -CSEG do_spirw 0000049e -CSEG do_spirw1 0000049f -CSEG VE_N_SPIR 000004a7 -CSEG XT_N_SPIR 000004ac -CSEG PFA_N_SPIR 000004ad -CSEG PFA_N_SPIR_LOOP 000004b2 -CSEG PFA_N_SPIR_LOOP1 000004b3 -CSEG VE_N_SPIW 000004be -CSEG XT_N_SPIW 000004c3 -CSEG PFA_N_SPIW 000004c4 -CSEG PFA_N_SPIW_LOOP 000004c9 -CSEG PFA_N_SPIW_LOOP1 000004cb -CSEG VE_APPLTURNKEY 000004d5 -CSEG XT_APPLTURNKEY 000004dd -CSEG PFA_APPLTURNKEY 000004de -CSEG XT_INTON 00007479 -CSEG XT_DOT_VER 00007b64 -CSEG XT_F_CPU 00007540 -CSEG XT_UMSLASHMOD 000071c2 -CSEG XT_DECIMAL 000075dd -CSEG XT_DOT 00007722 -CSEG VE_SET_CURRENT 000004ef -CSEG XT_SET_CURRENT 000004f7 -CSEG PFA_SET_CURRENT 000004f8 -CSEG VE_WORDLIST 000004fc -CSEG XT_WORDLIST 00000502 -CSEG PFA_WORDLIST 00000503 -CSEG XT_EHERE 000075b7 -CSEG PFA_EHERE 000075b8 -CSEG VE_FORTHWORDLIST 0000050c -CSEG XT_FORTHWORDLIST 00000515 -CSEG PFA_FORTHWORDLIST 00000516 -ESEG CFG_FORTHWORDLIST 0000004c -CSEG VE_SET_ORDER 00000517 -CSEG XT_SET_ORDER 0000051e -CSEG PFA_SET_ORDER 0000051f -CSEG VE_SET_RECOGNIZERS 00000523 -CSEG XT_SET_RECOGNIZERS 0000052d -CSEG PFA_SET_RECOGNIZERS 0000052e -ESEG CFG_RECOGNIZERLISTLEN 00000060 -CSEG VE_GET_RECOGNIZERS 00000532 -CSEG XT_GET_RECOGNIZERS 0000053c -CSEG PFA_GET_RECOGNIZERS 0000053d -CSEG VE_CODE 00000541 -CSEG XT_CODE 00000545 -CSEG PFA_CODE 00000546 -CSEG VE_ENDCODE 0000054c -CSEG XT_ENDCODE 00000552 -CSEG PFA_ENDCODE 00000553 -CSEG VE_MARKER 00000558 -CSEG XT_MARKER 0000055e -CSEG PFA_MARKER 0000055f -ESEG EE_MARKER 0000006c -CSEG VE_POSTPONE 00000562 -CSEG XT_POSTPONE 00000568 -CSEG PFA_POSTPONE 00000569 -CSEG XT_FORTHRECOGNIZER 00007acc -CSEG XT_RECOGNIZE 00007ad7 -CSEG VE_2R_FETCH 00000577 -CSEG XT_2R_FETCH 0000057b -CSEG PFA_2R_FETCH 0000057c -SET DPSTART 0000058b -CSEG DO_INTERRUPT 00007014 -CSEG DO_EXECUTE 0000700d -CSEG XT_ISREXEC 000074a2 -CSEG VE_EXIT 0000701c -CSEG PFA_EXIT 00007021 -CSEG VE_EXECUTE 00007024 -CSEG PFA_EXECUTE 0000702b -CSEG PFA_DOBRANCH 00007030 -CSEG PFA_DOCONDBRANCH 00007037 -CSEG PFA_DOLITERAL 0000703e -CSEG XT_DOVARIABLE 00007047 -CSEG XT_DOCONSTANT 00007051 -CSEG XT_DOUSER 00007057 -CSEG VE_DOVALUE 00007063 -CSEG XT_DOVALUE 00007069 -CSEG PFA_DOVALUE 0000706a -CSEG VE_FETCH 00007076 -CSEG PFA_FETCH 0000707a -CSEG PFA_FETCHRAM 0000707a -CSEG VE_STORE 0000707e -CSEG PFA_STORE 00007082 -CSEG PFA_STORERAM 00007082 -CSEG VE_CSTORE 0000708a -CSEG PFA_CSTORE 0000708e -CSEG VE_CFETCH 00007095 -CSEG PFA_CFETCH 00007099 -CSEG VE_FETCHU 0000709d -CSEG XT_FETCHU 000070a0 -CSEG PFA_FETCHU 000070a1 -CSEG XT_UP_FETCH 00007302 -CSEG VE_STOREU 000070a5 -CSEG XT_STOREU 000070a8 -CSEG PFA_STOREU 000070a9 -CSEG VE_DUP 000070ad -CSEG PFA_DUP 000070b2 -CSEG VE_QDUP 000070b5 -CSEG PFA_QDUP 000070ba -CSEG PFA_QDUP1 000070bf -CSEG VE_SWAP 000070c0 -CSEG PFA_SWAP 000070c5 -CSEG VE_OVER 000070cb -CSEG PFA_OVER 000070d0 -CSEG VE_DROP 000070d5 -CSEG PFA_DROP 000070da -CSEG VE_ROT 000070dd -CSEG PFA_ROT 000070e2 -CSEG VE_NIP 000070ec -CSEG PFA_NIP 000070f1 -CSEG VE_R_FROM 000070f3 -CSEG PFA_R_FROM 000070f7 -CSEG VE_TO_R 000070fc -CSEG PFA_TO_R 00007100 -CSEG VE_R_FETCH 00007105 -CSEG PFA_R_FETCH 00007109 -CSEG VE_NOTEQUAL 00007110 -CSEG PFA_NOTEQUAL 00007114 -CSEG VE_ZEROEQUAL 00007117 -CSEG PFA_ZEROEQUAL 0000711b -CSEG PFA_ZERO1 00007157 -CSEG PFA_TRUE1 0000714e -CSEG VE_ZEROLESS 0000711e -CSEG PFA_ZEROLESS 00007122 -CSEG VE_GREATERZERO 00007125 -CSEG PFA_GREATERZERO 00007129 -CSEG VE_DGREATERZERO 0000712e -CSEG XT_DGREATERZERO 00007132 -CSEG PFA_DGREATERZERO 00007133 -CSEG VE_DXT_ZEROLESS 0000713c -CSEG XT_DXT_ZEROLESS 00007140 -CSEG PFA_DXT_ZEROLESS 00007141 -CSEG VE_TRUE 00007147 -CSEG PFA_TRUE 0000714c -CSEG VE_ZERO 00007151 -CSEG PFA_ZERO 00007155 -CSEG VE_ULESS 00007159 -CSEG PFA_ULESS 0000715d -CSEG VE_UGREATER 00007164 -CSEG PFA_UGREATER 00007168 -CSEG VE_LESS 0000716b -CSEG XT_LESS 0000716e -CSEG PFA_LESS 0000716f -CSEG PFA_LESSDONE 00007173 -CSEG VE_GREATER 00007175 -CSEG XT_GREATER 00007178 -CSEG PFA_GREATER 00007179 -CSEG PFA_GREATERDONE 0000717d -CSEG VE_LOG2 00007180 -CSEG XT_LOG2 00007184 -CSEG PFA_LOG2 00007185 -CSEG PFA_LOG2_1 00007188 -CSEG PFA_LOG2_2 0000718e -CSEG VE_MINUS 00007190 -CSEG XT_MINUS 00007193 -CSEG PFA_MINUS 00007194 -CSEG VE_PLUS 0000719a -CSEG PFA_PLUS 0000719e -CSEG VE_MSTAR 000071a3 -CSEG XT_MSTAR 000071a6 -CSEG PFA_MSTAR 000071a7 -CSEG VE_UMSLASHMOD 000071bd -CSEG PFA_UMSLASHMOD 000071c3 -CSEG PFA_UMSLASHMODmod 000071c8 -CSEG PFA_UMSLASHMODmod_loop 000071c9 -CSEG PFA_UMSLASHMODmod_loop_control 000071d6 -CSEG PFA_UMSLASHMODmod_subtract 000071d3 -CSEG PFA_UMSLASHMODmod_done 000071d8 -CSEG VE_UMSTAR 000071dc -CSEG PFA_UMSTAR 000071e1 -CSEG VE_INVERT 000071f8 -CSEG PFA_INVERT 000071fe -CSEG VE_2SLASH 00007201 -CSEG PFA_2SLASH 00007205 -CSEG VE_2STAR 00007208 -CSEG XT_2STAR 0000720b -CSEG PFA_2STAR 0000720c -CSEG VE_AND 0000720f -CSEG PFA_AND 00007214 -CSEG VE_OR 00007219 -CSEG PFA_OR 0000721d -CSEG VE_XOR 00007222 -CSEG XT_XOR 00007226 -CSEG PFA_XOR 00007227 -CSEG VE_1PLUS 0000722c -CSEG PFA_1PLUS 00007230 -CSEG VE_1MINUS 00007232 -CSEG PFA_1MINUS 00007236 -CSEG VE_QNEGATE 00007238 -CSEG XT_QNEGATE 0000723e -CSEG PFA_QNEGATE 0000723f -CSEG QNEG1 00007243 -CSEG XT_NEGATE 0000763f -CSEG VE_LSHIFT 00007244 -CSEG XT_LSHIFT 00007249 -CSEG PFA_LSHIFT 0000724a -CSEG PFA_LSHIFT1 0000724d -CSEG PFA_LSHIFT2 00007252 -CSEG VE_RSHIFT 00007253 -CSEG XT_RSHIFT 00007258 -CSEG PFA_RSHIFT 00007259 -CSEG PFA_RSHIFT1 0000725c -CSEG PFA_RSHIFT2 00007261 -CSEG VE_PLUSSTORE 00007262 -CSEG PFA_PLUSSTORE 00007266 -CSEG VE_RP_FETCH 00007272 -CSEG XT_RP_FETCH 00007276 -CSEG PFA_RP_FETCH 00007277 -CSEG VE_RP_STORE 0000727c -CSEG XT_RP_STORE 00007280 -CSEG PFA_RP_STORE 00007281 -CSEG VE_SP_FETCH 00007289 -CSEG XT_SP_FETCH 0000728d -CSEG PFA_SP_FETCH 0000728e -CSEG VE_SP_STORE 00007292 -CSEG XT_SP_STORE 00007296 -CSEG PFA_SP_STORE 00007297 -CSEG PFA_DODO 0000729c -CSEG PFA_DODO1 0000729e -CSEG VE_I 000072a9 -CSEG PFA_I 000072ad -CSEG PFA_DOPLUSLOOP 000072bb -CSEG PFA_DOPLUSLOOP_LEAVE 000072c5 -CSEG PFA_DOPLUSLOOP_NEXT 000072c2 -CSEG PFA_DOLOOP 000072ca -CSEG VE_UNLOOP 000072cf -CSEG PFA_UNLOOP 000072d5 -CSEG VE_CMOVE_G 000072da -CSEG XT_CMOVE_G 000072df -CSEG PFA_CMOVE_G 000072e0 -CSEG PFA_CMOVE_G1 000072f1 -CSEG PFA_CMOVE_G2 000072ed -CSEG VE_BYTESWAP 000072f6 -CSEG PFA_BYTESWAP 000072fa -CSEG VE_UP_FETCH 000072fe -CSEG PFA_UP_FETCH 00007303 -CSEG VE_UP_STORE 00007307 -CSEG XT_UP_STORE 0000730b -CSEG PFA_UP_STORE 0000730c -CSEG VE_1MS 00007310 -CSEG XT_1MS 00007314 -CSEG PFA_1MS 00007315 -CSEG VE_2TO_R 0000731a -CSEG XT_2TO_R 0000731e -CSEG PFA_2TO_R 0000731f -CSEG VE_2R_FROM 00007329 -CSEG XT_2R_FROM 0000732d -CSEG PFA_2R_FROM 0000732e -CSEG VE_STOREE 00007338 -CSEG PFA_STOREE 0000733c -CSEG PFA_STOREE0 0000733c -CSEG PFA_FETCHE2 0000736a -CSEG PFA_STOREE3 00007346 -CSEG PFA_STOREE1 00007351 -CSEG PFA_STOREE4 0000734d -CSEG PFA_STOREE2 00007353 -CSEG VE_FETCHE 0000735c -CSEG PFA_FETCHE 00007360 -CSEG PFA_FETCHE1 00007360 -CSEG VE_STOREI 00007370 -CSEG PFA_STOREI 00007374 -ESEG EE_STOREI 0000006a -CSEG VE_DO_STOREI_NRWW 00007377 -CSEG XT_DO_STOREI 0000737e -CSEG PFA_DO_STOREI_NRWW 0000737f -CSEG DO_STOREI_atmega 00007393 -CSEG pageload 000073a4 -CSEG DO_STOREI_writepage 0000739d -CSEG dospm 000073bd -EQU pagemask ffffff80 -CSEG pageload_loop 000073aa -CSEG pageload_newdata 000073b5 -CSEG pageload_cont 000073b7 -CSEG pageload_done 000073bc -CSEG dospm_wait_ee 000073bd -CSEG dospm_wait_spm 000073bf -CSEG VE_FETCHI 000073c8 -CSEG PFA_FETCHI 000073cc -CSEG VE_N_TO_R 000073d2 -CSEG XT_N_TO_R 000073d6 -CSEG PFA_N_TO_R 000073d7 -CSEG PFA_N_TO_R1 000073d9 -CSEG VE_N_R_FROM 000073e4 -CSEG XT_N_R_FROM 000073e8 -CSEG PFA_N_R_FROM 000073e9 -CSEG PFA_N_R_FROM1 000073ee -CSEG VE_D2STAR 000073f6 -CSEG XT_D2STAR 000073fa -CSEG PFA_D2STAR 000073fb -CSEG VE_D2SLASH 00007404 -CSEG XT_D2SLASH 00007408 -CSEG PFA_D2SLASH 00007409 -CSEG VE_DPLUS 00007412 -CSEG PFA_DPLUS 00007416 -CSEG VE_DMINUS 00007423 -CSEG XT_DMINUS 00007426 -CSEG PFA_DMINUS 00007427 -CSEG VE_DINVERT 00007435 -CSEG XT_DINVERT 0000743b -CSEG PFA_DINVERT 0000743c -CSEG VE_UDOT 00007445 -CSEG PFA_UDOT 00007449 -CSEG XT_UDDOT 0000772a -CSEG VE_UDOTR 0000744c -CSEG XT_UDOTR 00007450 -CSEG PFA_UDOTR 00007451 -CSEG XT_UDDOTR 00007733 -CSEG VE_SHOWWORDLIST 00007455 -CSEG XT_SHOWWORDLIST 0000745e -CSEG PFA_SHOWWORDLIST 0000745f -CSEG XT_SHOWWORD 00007464 -CSEG XT_TRAVERSEWORDLIST 00007c57 -CSEG PFA_SHOWWORD 00007465 -CSEG VE_WORDS 0000746a -CSEG XT_WORDS 0000746f -CSEG PFA_WORDS 00007470 -CSEG VE_INTON 00007475 -CSEG PFA_INTON 0000747a -CSEG VE_INTOFF 0000747c -CSEG XT_INTOFF 00007480 -CSEG PFA_INTOFF 00007481 -CSEG VE_INTSTORE 00007483 -CSEG PFA_INTSTORE 00007488 -CSEG VE_INTFETCH 0000748d -CSEG XT_INTFETCH 00007491 -CSEG PFA_INTFETCH 00007492 -CSEG VE_INTTRAP 00007497 -CSEG XT_INTTRAP 0000749d -CSEG PFA_INTTRAP 0000749e -CSEG PFA_ISREXEC 000074a3 -CSEG XT_ISREND 000074a7 -CSEG PFA_ISREND 000074a8 -CSEG PFA_ISREND1 000074aa -CSEG VE_PICK 000074ab -CSEG PFA_PICK 000074b0 -CSEG VE_DOTSTRING 000074b6 -CSEG XT_DOTSTRING 000074b9 -CSEG PFA_DOTSTRING 000074ba -CSEG VE_SQUOTE 000074be -CSEG PFA_SQUOTE 000074c2 -CSEG PFA_SQUOTE1 000074ca -CSEG VE_FILL 000074cb -CSEG PFA_FILL 000074d0 -CSEG PFA_FILL2 000074dc -CSEG PFA_FILL1 000074d7 -CSEG VE_ENVIRONMENT 000074de -CSEG XT_ENVIRONMENT 000074e6 -CSEG PFA_ENVIRONMENT 000074e7 -ESEG CFG_ENVIRONMENT 00000048 -CSEG VE_ENVWORDLISTS 000074e8 -CSEG XT_ENVWORDLISTS 000074ef -CSEG PFA_ENVWORDLISTS 000074f0 -CSEG VE_ENVSLASHPAD 000074f3 -CSEG XT_ENVSLASHPAD 000074f7 -CSEG PFA_ENVSLASHPAD 000074f8 -CSEG XT_PAD 00007584 -CSEG VE_ENVSLASHHOLD 000074fc -CSEG XT_ENVSLASHHOLD 00007501 -CSEG PFA_ENVSLASHHOLD 00007502 -CSEG VE_ENV_FORTHNAME 00007506 -CSEG XT_ENV_FORTHNAME 0000750d -CSEG PFA_EN_FORTHNAME 0000750e -CSEG VE_ENV_FORTHVERSION 00007515 -CSEG XT_ENV_FORTHVERSION 0000751b -CSEG PFA_EN_FORTHVERSION 0000751c -CSEG VE_ENV_CPU 0000751f -CSEG XT_ENV_CPU 00007523 -CSEG PFA_EN_CPU 00007524 -CSEG XT_ICOUNT 000077cc -CSEG VE_ENV_MCUINFO 00007528 -CSEG XT_ENV_MCUINFO 0000752e -CSEG PFA_EN_MCUINFO 0000752f -CSEG VE_ENVUSERSIZE 00007532 -CSEG XT_ENVUSERSIZE 00007537 -CSEG PFA_ENVUSERSIZE 00007538 -CSEG VE_F_CPU 0000753b -CSEG PFA_F_CPU 00007541 -CSEG VE_STATE 00007546 -CSEG PFA_STATE 0000754c -DSEG ram_state 00000136 -CSEG VE_BASE 0000754d -CSEG XT_BASE 00007551 -CSEG PFA_BASE 00007552 -CSEG VE_CELLS 00007553 -CSEG VE_CELLPLUS 00007559 -CSEG PFA_CELLPLUS 0000755f -CSEG VE_2DUP 00007561 -CSEG PFA_2DUP 00007566 -CSEG VE_2DROP 00007569 -CSEG PFA_2DROP 0000756f -CSEG VE_TUCK 00007572 -CSEG PFA_TUCK 00007577 -CSEG VE_TO_IN 0000757a -CSEG PFA_TO_IN 0000757f -CSEG VE_PAD 00007580 -CSEG PFA_PAD 00007585 -CSEG VE_EMIT 0000758a -CSEG XT_EMIT 0000758e -CSEG PFA_EMIT 0000758f -CSEG XT_UDEFERFETCH 00007bdc -CSEG XT_UDEFERSTORE 00007be8 -CSEG VE_EMITQ 00007592 -CSEG XT_EMITQ 00007597 -CSEG PFA_EMITQ 00007598 -CSEG VE_KEY 0000759b -CSEG XT_KEY 0000759f -CSEG PFA_KEY 000075a0 -CSEG VE_KEYQ 000075a3 -CSEG XT_KEYQ 000075a7 -CSEG PFA_KEYQ 000075a8 -CSEG VE_DP 000075ab -ESEG CFG_DP 0000003a -CSEG VE_EHERE 000075b2 -ESEG EE_EHERE 0000003e -CSEG VE_HERE 000075bb -CSEG PFA_HERE 000075c0 -ESEG EE_HERE 0000003c -CSEG VE_ALLOT 000075c3 -CSEG PFA_ALLOT 000075c9 -CSEG VE_BIN 000075ce -CSEG XT_BIN 000075d2 -CSEG PFA_BIN 000075d3 -CSEG VE_DECIMAL 000075d7 -CSEG PFA_DECIMAL 000075de -CSEG VE_HEX 000075e3 -CSEG XT_HEX 000075e7 -CSEG PFA_HEX 000075e8 -CSEG VE_BL 000075ed -CSEG XT_BL 000075f0 -CSEG PFA_BL 000075f1 -CSEG VE_TURNKEY 000075f2 -CSEG XT_TURNKEY 000075f8 -CSEG PFA_TURNKEY 000075f9 -ESEG CFG_TURNKEY 00000046 -CSEG VE_SLASHMOD 000075fc -CSEG XT_SLASHMOD 00007600 -CSEG PFA_SLASHMOD 00007601 -CSEG PFA_SLASHMOD_1 0000760c -CSEG PFA_SLASHMOD_2 00007612 -CSEG PFA_SLASHMOD_3 00007615 -CSEG PFA_SLASHMOD_5 00007620 -CSEG PFA_SLASHMOD_4 0000761f -CSEG PFA_SLASHMODmod_done 0000762b -CSEG PFA_SLASHMOD_6 00007629 -CSEG VE_USLASHMOD 0000762f -CSEG XT_USLASHMOD 00007634 -CSEG PFA_USLASHMOD 00007635 -CSEG VE_NEGATE 0000763a -CSEG PFA_NEGATE 00007640 -CSEG VE_SLASH 00007643 -CSEG XT_SLASH 00007646 -CSEG PFA_SLASH 00007647 -CSEG VE_MOD 0000764a -CSEG XT_MOD 0000764e -CSEG PFA_MOD 0000764f -CSEG VE_ABS 00007652 -CSEG XT_ABS 00007656 -CSEG PFA_ABS 00007657 -CSEG VE_MIN 0000765a -CSEG XT_MIN 0000765e -CSEG PFA_MIN 0000765f -CSEG PFA_MIN1 00007664 -CSEG VE_MAX 00007666 -CSEG XT_MAX 0000766a -CSEG PFA_MAX 0000766b -CSEG PFA_MAX1 00007670 -CSEG VE_WITHIN 00007672 -CSEG XT_WITHIN 00007677 -CSEG PFA_WITHIN 00007678 -CSEG VE_TOUPPER 0000767f -CSEG XT_TOUPPER 00007685 -CSEG PFA_TOUPPER 00007686 -CSEG PFA_TOUPPER0 00007691 -CSEG VE_TOLOWER 00007692 -CSEG XT_TOLOWER 00007698 -CSEG PFA_TOLOWER 00007699 -CSEG PFA_TOLOWER0 000076a4 -CSEG VE_HLD 000076a5 -CSEG XT_HLD 000076a9 -CSEG PFA_HLD 000076aa -DSEG ram_hld 00000138 -CSEG VE_HOLD 000076ab -CSEG XT_HOLD 000076af -CSEG PFA_HOLD 000076b0 -CSEG VE_L_SHARP 000076bb -CSEG XT_L_SHARP 000076be -CSEG PFA_L_SHARP 000076bf -CSEG VE_SHARP 000076c3 -CSEG XT_SHARP 000076c6 -CSEG PFA_SHARP 000076c7 -CSEG XT_UDSLASHMOD 00007743 -CSEG PFA_SHARP1 000076d4 -CSEG VE_SHARP_S 000076d9 -CSEG XT_SHARP_S 000076dc -CSEG PFA_SHARP_S 000076dd -CSEG NUMS1 000076dd -CSEG VE_SHARP_G 000076e4 -CSEG XT_SHARP_G 000076e7 -CSEG PFA_SHARP_G 000076e8 -CSEG VE_SIGN 000076ef -CSEG XT_SIGN 000076f3 -CSEG PFA_SIGN 000076f4 -CSEG PFA_SIGN1 000076fa -CSEG VE_DDOTR 000076fb -CSEG XT_DDOTR 000076ff -CSEG PFA_DDOTR 00007700 -CSEG XT_DABS 00007cd4 -CSEG XT_SPACES 000077eb -CSEG XT_TYPE 000077fb -CSEG VE_DOTR 0000770e -CSEG XT_DOTR 00007711 -CSEG PFA_DOTR 00007712 -CSEG VE_DDOT 00007717 -CSEG XT_DDOT 0000771a -CSEG PFA_DDOT 0000771b -CSEG VE_DOT 0000771f -CSEG PFA_DOT 00007723 -CSEG VE_UDDOT 00007726 -CSEG PFA_UDDOT 0000772b -CSEG VE_UDDOTR 0000772f -CSEG PFA_UDDOTR 00007734 -CSEG VE_UDSLASHMOD 0000773e -CSEG PFA_UDSLASHMOD 00007744 -CSEG VE_DIGITQ 0000774e -CSEG XT_DIGITQ 00007753 -CSEG PFA_DIGITQ 00007754 -CSEG PFA_DOSLITERAL 0000776e -CSEG VE_SCOMMA 00007778 -CSEG PFA_SCOMMA 0000777c -CSEG PFA_DOSCOMMA 00007780 -CSEG PFA_SCOMMA2 00007792 -CSEG PFA_SCOMMA1 0000778c -CSEG PFA_SCOMMA3 00007799 -CSEG VE_ITYPE 0000779b -CSEG PFA_ITYPE 000077a1 -CSEG PFA_ITYPE2 000077b4 -CSEG PFA_ITYPE1 000077ac -CSEG XT_LOWEMIT 000077c1 -CSEG XT_HIEMIT 000077bd -CSEG PFA_ITYPE3 000077bb -CSEG PFA_HIEMIT 000077be -CSEG PFA_LOWEMIT 000077c2 -CSEG VE_ICOUNT 000077c7 -CSEG PFA_ICOUNT 000077cd -CSEG VE_CR 000077d2 -CSEG XT_CR 000077d5 -CSEG PFA_CR 000077d6 -CSEG VE_SPACE 000077dd -CSEG PFA_SPACE 000077e3 -CSEG VE_SPACES 000077e6 -CSEG PFA_SPACES 000077ec -CSEG SPCS1 000077ee -CSEG SPCS2 000077f5 -CSEG VE_TYPE 000077f7 -CSEG PFA_TYPE 000077fc -CSEG PFA_TYPE2 00007806 -CSEG PFA_TYPE1 00007801 -CSEG VE_TICK 00007807 -CSEG PFA_TICK 0000780b -CSEG XT_DT_NULL 00007b4a -CSEG XT_NOOP 00007b7f -CSEG PFA_TICK1 0000781c -CSEG VE_HANDLER 0000781e -CSEG XT_HANDLER 00007824 -CSEG PFA_HANDLER 00007825 -CSEG VE_CATCH 00007826 -CSEG XT_CATCH 0000782b -CSEG PFA_CATCH 0000782c -CSEG VE_THROW 0000783c -CSEG PFA_THROW 00007842 -CSEG PFA_THROW1 00007848 -CSEG VE_CSKIP 00007855 -CSEG XT_CSKIP 0000785a -CSEG PFA_CSKIP 0000785b -CSEG PFA_CSKIP1 0000785c -CSEG PFA_CSKIP2 00007869 -CSEG XT_SLASHSTRING 000079a5 -CSEG VE_CSCAN 0000786c -CSEG XT_CSCAN 00007871 -CSEG PFA_CSCAN 00007872 -CSEG PFA_CSCAN1 00007874 -CSEG PFA_CSCAN2 00007886 -CSEG VE_ACCEPT 0000788c -CSEG XT_ACCEPT 00007891 -CSEG PFA_ACCEPT 00007892 -CSEG ACC1 00007896 -CSEG XT_CRLFQ 000078d2 -CSEG ACC5 000078c4 -CSEG ACC3 000078b4 -CSEG ACC6 000078b2 -CSEG XT_BS 000078ca -CSEG ACC4 000078c2 -CSEG PFA_ACCEPT6 000078bb -CSEG VE_REFILL 000078dd -CSEG XT_REFILL 000078e2 -CSEG PFA_REFILL 000078e3 -CSEG VE_CHAR 000078e6 -CSEG PFA_CHAR 000078eb -CSEG VE_NUMBER 000078ef -CSEG XT_NUMBER 000078f4 -CSEG PFA_NUMBER 000078f5 -CSEG XT_QSIGN 00007938 -CSEG XT_SET_BASE 0000794b -CSEG PFA_NUMBER0 0000790b -CSEG XT_TO_NUMBER 00007969 -CSEG PFA_NUMBER1 0000792d -CSEG PFA_NUMBER2 00007924 -CSEG PFA_NUMBER6 00007925 -CSEG PFA_NUMBER3 00007921 -CSEG XT_DNEGATE 00007ce1 -CSEG PFA_NUMBER5 00007933 -CSEG PFA_NUMBER4 00007932 -CSEG PFA_QSIGN 00007939 -CSEG PFA_NUMBERSIGN_DONE 00007944 -CSEG XT_BASES 00007946 -CSEG PFA_SET_BASE 0000794c -CSEG SET_BASE1 00007961 -CSEG SET_BASE2 00007962 -CSEG VE_TO_NUMBER 00007963 -CSEG TONUM1 0000796a -CSEG TONUM3 00007981 -CSEG TONUM2 00007975 -CSEG XT_2SWAP 00007d05 -CSEG VE_PARSE 00007982 -CSEG PFA_PARSE 00007988 -CSEG VE_SOURCE 00007996 -CSEG PFA_SOURCE 0000799c -CSEG VE_SLASHSTRING 0000799f -CSEG PFA_SLASHSTRING 000079a6 -CSEG VE_PARSENAME 000079ad -CSEG PFA_PARSENAME 000079b5 -CSEG XT_SKIPSCANCHAR 000079b8 -CSEG PFA_SKIPSCANCHAR 000079b9 -CSEG VE_FINDXT 000079ca -CSEG XT_FINDXT 000079d0 -CSEG PFA_FINDXT 000079d1 -CSEG XT_FINDXTA 000079dc -CSEG PFA_FINDXT1 000079db -CSEG PFA_FINDXTA 000079dd -CSEG XT_SEARCH_WORDLIST 00007c25 -CSEG PFA_FINDXTA1 000079e9 -CSEG XT_DEFAULT_PROMPTOK 000079ea -CSEG PFA_DEFAULT_PROMPTOK 000079eb -CSEG VE_PROMPTOK 000079f1 -CSEG XT_PROMPTOK 000079f5 -CSEG PFA_PROMPTOK 000079f6 -CSEG XT_DEFAULT_PROMPTREADY 000079f9 -CSEG PFA_DEFAULT_PROMPTREADY 000079fa -CSEG VE_PROMPTREADY 00007a00 -CSEG XT_PROMPTREADY 00007a05 -CSEG PFA_PROMPTREADY 00007a06 -CSEG XT_DEFAULT_PROMPTERROR 00007a09 -CSEG PFA_DEFAULT_PROMPTERROR 00007a0a -CSEG VE_PROMPTERROR 00007a1b -CSEG XT_PROMPTERROR 00007a20 -CSEG PFA_PROMPTERROR 00007a21 -CSEG VE_QUIT 00007a24 -CSEG XT_QUIT 00007a28 -CSEG PFA_QUIT 00007a29 -CSEG XT_SP0 00007a89 -CSEG XT_RP0 00007a96 -CSEG PFA_QUIT2 00007a31 -CSEG PFA_QUIT4 00007a37 -CSEG PFA_QUIT3 00007a49 -CSEG XT_INTERPRET 00007aaf -CSEG PFA_QUIT5 00007a47 -CSEG VE_PAUSE 00007a4c -CSEG PFA_PAUSE 00007a52 -DSEG ram_pause 0000013a -CSEG XT_RDEFERFETCH 00007bc8 -CSEG XT_RDEFERSTORE 00007bd2 -CSEG VE_COLD 00007a55 -CSEG clearloop 00007a61 -DSEG ram_user1 0000013c -CSEG PFA_WARM 00007a7c -CSEG VE_WARM 00007a77 -CSEG XT_WARM 00007a7b -CSEG XT_INIT_RAM 00007d50 -CSEG XT_DEFERSTORE 00007bf3 -CSEG VE_SP0 00007a85 -CSEG PFA_SP0 00007a8a -CSEG VE_SP 00007a8d -CSEG XT_SP 00007a90 -CSEG PFA_SP 00007a91 -CSEG VE_RP0 00007a92 -CSEG PFA_RP0 00007a97 -CSEG XT_DORP0 00007a9a -CSEG PFA_DORP0 00007a9b -CSEG VE_DEPTH 00007a9c -CSEG PFA_DEPTH 00007aa2 -CSEG VE_INTERPRET 00007aa8 -CSEG PFA_INTERPRET 00007ab0 -CSEG PFA_INTERPRET2 00007ac0 -CSEG PFA_INTERPRET1 00007abb -CSEG VE_FORTHRECOGNIZER 00007ac2 -CSEG PFA_FORTHRECOGNIZER 00007acd -ESEG CFG_FORTHRECOGNIZER 00000042 -CSEG VE_RECOGNIZE 00007ad0 -CSEG PFA_RECOGNIZE 00007ad8 -CSEG XT_RECOGNIZE_A 00007ae2 -CSEG PFA_RECOGNIZE1 00007ae1 -CSEG PFA_RECOGNIZE_A 00007ae3 -CSEG PFA_RECOGNIZE_A1 00007af3 -CSEG VE_DT_NUM 00007af7 -CSEG XT_DT_NUM 00007afc -CSEG PFA_DT_NUM 00007afd -CSEG VE_DT_DNUM 00007b00 -CSEG XT_DT_DNUM 00007b06 -CSEG PFA_DT_DNUM 00007b07 -CSEG XT_2LITERAL 00007d77 -CSEG VE_REC_NUM 00007b0a -CSEG XT_REC_NUM 00007b10 -CSEG PFA_REC_NUM 00007b11 -CSEG PFA_REC_NONUMBER 00007b1c -CSEG PFA_REC_INTNUM2 00007b1a -CSEG VE_REC_FIND 00007b1e -CSEG XT_REC_FIND 00007b24 -CSEG PFA_REC_FIND 00007b25 -CSEG PFA_REC_WORD_FOUND 00007b2d -CSEG XT_DT_XT 00007b34 -CSEG VE_DT_XT 00007b2f -CSEG PFA_DT_XT 00007b35 -CSEG XT_R_WORD_INTERPRET 00007b38 -CSEG XT_R_WORD_COMPILE 00007b3c -CSEG PFA_R_WORD_INTERPRET 00007b39 -CSEG PFA_R_WORD_COMPILE 00007b3d -CSEG PFA_R_WORD_COMPILE1 00007b42 -CSEG VE_DT_NULL 00007b44 -CSEG PFA_DT_NULL 00007b4b -CSEG XT_FAIL 00007b4e -CSEG PFA_FAIL 00007b4f -CSEG VE_QSTACK 00007b52 -CSEG PFA_QSTACK 00007b58 -CSEG PFA_QSTACK1 00007b5f -CSEG VE_DOT_VER 00007b60 -CSEG PFA_DOT_VER 00007b65 -CSEG VE_NOOP 00007b7b -CSEG PFA_NOOP 00007b80 -CSEG VE_UNUSED 00007b81 -CSEG XT_UNUSED 00007b86 -CSEG PFA_UNUSED 00007b87 -CSEG VE_TO 00007b8b -CSEG XT_TO 00007b8e -CSEG PFA_TO 00007b8f -CSEG XT_TO_BODY 00007d70 -CSEG PFA_TO1 00007b9f -CSEG PFA_DOTO 00007b9a -CSEG VE_ICELLPLUS 00007ba5 -CSEG PFA_ICELLPLUS 00007bac -CSEG VE_EDEFERFETCH 00007bae -CSEG PFA_EDEFERFETCH 00007bb5 -CSEG VE_EDEFERSTORE 00007bb8 -CSEG PFA_EDEFERSTORE 00007bbf -CSEG VE_RDEFERFETCH 00007bc2 -CSEG PFA_RDEFERFETCH 00007bc9 -CSEG VE_RDEFERSTORE 00007bcc -CSEG PFA_RDEFERSTORE 00007bd3 -CSEG VE_UDEFERFETCH 00007bd6 -CSEG PFA_UDEFERFETCH 00007bdd -CSEG VE_UDEFERSTORE 00007be2 -CSEG PFA_UDEFERSTORE 00007be9 -CSEG VE_DEFERSTORE 00007bee -CSEG PFA_DEFERSTORE 00007bf4 -CSEG VE_DEFERFETCH 00007bfb -CSEG XT_DEFERFETCH 00007c00 -CSEG PFA_DEFERFETCH 00007c01 -CSEG VE_DODEFER 00007c07 -CSEG XT_DODEFER 00007c0d -CSEG PFA_DODEFER 00007c0e -CSEG VE_SEARCH_WORDLIST 00007c1b -CSEG PFA_SEARCH_WORDLIST 00007c26 -CSEG XT_ISWORD 00007c3a -CSEG PFA_SEARCH_WORDLIST1 00007c34 -CSEG PFA_ISWORD 00007c3b -CSEG XT_ICOMPARE 00007c88 -CSEG PFA_ISWORD3 00007c48 -CSEG VE_TRAVERSEWORDLIST 00007c4c -CSEG PFA_TRAVERSEWORDLIST 00007c58 -CSEG PFA_TRAVERSEWORDLIST1 00007c59 -CSEG PFA_TRAVERSEWORDLIST2 00007c68 -CSEG VE_NAME2STRING 00007c6a -CSEG PFA_NAME2STRING 00007c73 -CSEG VE_NFA2CFA 00007c78 -CSEG PFA_NFA2CFA 00007c7f -CSEG VE_ICOMPARE 00007c82 -CSEG PFA_ICOMPARE 00007c89 -CSEG PFA_ICOMPARE_SAMELEN 00007c93 -CSEG PFA_ICOMPARE_DONE 00007cb6 -CSEG PFA_ICOMPARE_LOOP 00007c99 -CSEG PFA_ICOMPARE_LASTCELL 00007ca7 -CSEG PFA_ICOMPARE_NEXTLOOP 00007cae -CSEG VE_STAR 00007cb9 -CSEG XT_STAR 00007cbc -CSEG PFA_STAR 00007cbd -CSEG VE_J 00007cc0 -CSEG XT_J 00007cc3 -CSEG PFA_J 00007cc4 -CSEG VE_DABS 00007cd0 -CSEG PFA_DABS 00007cd5 -CSEG PFA_DABS1 00007cda -CSEG VE_DNEGATE 00007cdb -CSEG PFA_DNEGATE 00007ce2 -CSEG VE_CMOVE 00007ce7 -CSEG XT_CMOVE 00007cec -CSEG PFA_CMOVE 00007ced -CSEG PFA_CMOVE1 00007cfa -CSEG PFA_CMOVE2 00007cf6 -CSEG VE_2SWAP 00007d00 -CSEG PFA_2SWAP 00007d06 -CSEG VE_REFILLTIB 00007d0b -CSEG XT_REFILLTIB 00007d12 -CSEG PFA_REFILLTIB 00007d13 -CSEG XT_TIB 00007d2e -CSEG XT_NUMBERTIB 00007d34 -CSEG VE_SOURCETIB 00007d1e -CSEG XT_SOURCETIB 00007d25 -CSEG PFA_SOURCETIB 00007d26 -CSEG VE_TIB 00007d2a -CSEG PFA_TIB 00007d2f -DSEG ram_tib 00000168 -CSEG VE_NUMBERTIB 00007d30 -CSEG PFA_NUMBERTIB 00007d35 -DSEG ram_sharptib 000001c2 -CSEG VE_EE2RAM 00007d36 -CSEG XT_EE2RAM 00007d3b -CSEG PFA_EE2RAM 00007d3c -CSEG PFA_EE2RAM_1 00007d3e -CSEG PFA_EE2RAM_2 00007d48 -CSEG VE_INIT_RAM 00007d4a -CSEG PFA_INI_RAM 00007d51 -ESEG EE_INITUSER 0000006e -CSEG VE_BOUNDS 00007d59 -CSEG PFA_BOUNDS 00007d5f -CSEG VE_S2D 00007d63 -CSEG PFA_S2D 00007d68 -CSEG VE_TO_BODY 00007d6b -CSEG VE_2LITERAL 00007d71 -CSEG PFA_2LITERAL 00007d78 -CSEG VE_EQUAL 00007d7c -CSEG PFA_EQUAL 00007d80 -CSEG VE_ONE 00007d83 -CSEG PFA_ONE 00007d87 -CSEG VE_TWO 00007d88 -CSEG PFA_TWO 00007d8c -CSEG VE_MINUSONE 00007d8d -CSEG XT_MINUSONE 00007d90 -CSEG PFA_MINUSONE 00007d91 -SET flashlast 00007d92 -DSEG HERESTART 000001c4 -ESEG EHERESTART 00000092 -ESEG CFG_ORDERLIST 00000050 -ESEG CFG_RECOGNIZERLIST 00000062 -EQU UBRR_VAL 00000019 -EQU BAUD_REAL 0000963d -EQU BAUD_ERROR 00000001 diff --git a/amforth-6.5/appl/eval-pollin/p644-16.xml b/amforth-6.5/appl/eval-pollin/p644-16.xml deleted file mode 100644 index 2fc587c..0000000 --- a/amforth-6.5/appl/eval-pollin/p644-16.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - Uploading Hexfiles for p644 - 16 - - - - diff --git a/amforth-6.5/appl/eval-pollin/p8-12.xml b/amforth-6.5/appl/eval-pollin/p8-12.xml deleted file mode 100644 index aae5de9..0000000 --- a/amforth-6.5/appl/eval-pollin/p8-12.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - Uploading Hexfiles for p8-12 - - - diff --git a/amforth-6.5/appl/eval-pollin/pollin.asm b/amforth-6.5/appl/eval-pollin/pollin.asm deleted file mode 100644 index de3d0d2..0000000 --- a/amforth-6.5/appl/eval-pollin/pollin.asm +++ /dev/null @@ -1,21 +0,0 @@ -; for a description, what can be done in this -; file see ../template/template.asm. You may want to -; copy that file to this one and edit it afterwards. - -.include "preamble.inc" - -.set AMFORTH_RO_SEG = NRWW_START_ADDR+1 - -; cpu clock in hertz -.equ F_CPU = @F_CPU@ -.set BAUD_MAXERROR = 30 -.equ TIMER_INT = OVF2addr - -.include "drivers/usart@USART@.asm" - -; settings for 1wire interface -.equ OW_PORT=PORTB -.EQU OW_BIT=4 -.include "drivers/1wire.asm" - -.include "amforth.asm" diff --git a/amforth-6.5/appl/eval-pollin/words/applturnkey.asm b/amforth-6.5/appl/eval-pollin/words/applturnkey.asm deleted file mode 100644 index 5e6b279..0000000 --- a/amforth-6.5/appl/eval-pollin/words/applturnkey.asm +++ /dev/null @@ -1,30 +0,0 @@ -; ( -- ) System -; R( -- ) -; application specific turnkey action -VE_APPLTURNKEY: - .dw $ff0b - .db "applturnkey",0 - .dw VE_HEAD - .set VE_HEAD = VE_APPLTURNKEY -XT_APPLTURNKEY: - .dw DO_COLON -PFA_APPLTURNKEY: - .dw XT_USART - -.if WANT_INTERRUPTS == 1 - .dw XT_INTON -.endif - .dw XT_DOT_VER - .dw XT_SPACE - .dw XT_F_CPU - .dw XT_DOLITERAL - .dw 1000 - .dw XT_UMSLASHMOD - .dw XT_NIP - .dw XT_DECIMAL - .dw XT_DOT - .dw XT_DOSLITERAL - .dw 4 - .db "kHz " - .dw XT_ITYPE - .dw XT_EXIT -- cgit v1.2.3