From a276417ce5b485839ea0dcae5f882556ebdce38d Mon Sep 17 00:00:00 2001 From: "drohne235@googlemail.com" Date: Fri, 11 Nov 2011 16:41:02 +0000 Subject: [PATCH] --- bin/flash/admflash.binary | Bin 0 -> 12588 bytes bin/flash/belflash.binary | Bin 0 -> 6436 bytes bin/flash/regflash.binary | Bin 0 -> 32588 bytes bin/sdcard/bel.sys | Bin 0 -> 6436 bytes bin/sdcard/reg.sys | Bin 0 -> 9172 bytes bin/sdcard/system/BLUE.COL | 1 + bin/sdcard/system/BW.COL | Bin 0 -> 64 bytes bin/sdcard/system/BWHALF.COL | Bin 0 -> 64 bytes bin/sdcard/system/CHESS.COL | Bin 0 -> 64 bytes bin/sdcard/system/PAR.COL | Bin 0 -> 64 bytes bin/sdcard/system/adm.lib | 90 ++ bin/sdcard/system/admay.adm | Bin 0 -> 8312 bytes bin/sdcard/system/admsid.adm | Bin 0 -> 11972 bytes bin/sdcard/system/admtest.bin | Bin 0 -> 7944 bytes bin/sdcard/system/ari.lib | 55 ++ bin/sdcard/system/aterm.adm | Bin 0 -> 10936 bytes bin/sdcard/system/basic.bin | Bin 0 -> 8456 bytes bin/sdcard/system/basics.mod | 485 +++++++++++ bin/sdcard/system/bel.lib | 77 ++ bin/sdcard/system/beltest.bin | Bin 0 -> 4288 bytes bin/sdcard/system/charmap.bin | Bin 0 -> 1924 bytes bin/sdcard/system/cog.lib | 74 ++ bin/sdcard/system/debug.mod | 65 ++ bin/sdcard/system/eram.bin | Bin 0 -> 8512 bytes bin/sdcard/system/error.txt | 40 + bin/sdcard/system/flash.bin | Bin 0 -> 7164 bytes bin/sdcard/system/fterm.bin | Bin 0 -> 2264 bytes bin/sdcard/system/hplay.bin | Bin 0 -> 3948 bytes bin/sdcard/system/hplay.mod | 155 ++++ bin/sdcard/system/hss.lib | 60 ++ bin/sdcard/system/htext.bel | Bin 0 -> 6660 bytes bin/sdcard/system/key.lib | 17 + bin/sdcard/system/keycode.bin | Bin 0 -> 1896 bytes bin/sdcard/system/perplex.bin | Bin 0 -> 4792 bytes bin/sdcard/system/ramtest.bin | Bin 0 -> 3992 bytes bin/sdcard/system/regime.bin | Bin 0 -> 9172 bytes bin/sdcard/system/regime.txt | 56 ++ bin/sdcard/system/rom.bin | Bin 0 -> 3976 bytes bin/sdcard/system/rom.mod | 206 +++++ bin/sdcard/system/scr.lib | 69 ++ bin/sdcard/system/sd0.lib | 176 ++++ bin/sdcard/system/sfx.lib | 93 ++ bin/sdcard/system/sfxtool.bin | Bin 0 -> 6052 bytes bin/sdcard/system/splay.bin | Bin 0 -> 2960 bytes bin/sdcard/system/splay.mod | 116 +++ bin/sdcard/system/sysconf.bin | Bin 0 -> 4396 bytes bin/sdcard/system/test1.txt | 7 + bin/sdcard/system/test2.txt | 115 +++ bin/sdcard/system/time.bin | Bin 0 -> 5412 bytes bin/sdcard/system/tools.mod | 152 ++++ bin/sdcard/system/tv.bel | Bin 0 -> 4208 bytes bin/sdcard/system/v1.mod | 325 +++++++ bin/sdcard/system/vga.bel | Bin 0 -> 6436 bytes bin/sdcard/system/wav.lib | 54 ++ bin/sdcard/system/words.mod | 16 + bin/sdcard/system/wplay.bin | Bin 0 -> 3260 bytes bin/sdcard/system/wplay.mod | 93 ++ bin/sdcard/system/yplay.bin | Bin 0 -> 3212 bytes doku/FemtoBasic Manual.rtf | 797 ++++++++++++++++++ doku/Thumbs.db | Bin 0 -> 12288 bytes doku/TriOS - Logo 1.jpg | Bin 0 -> 19783 bytes doku/TriOS - Logo 2.jpg | Bin 0 -> 29648 bytes doku/TriOS-1.jpg | Bin 0 -> 41871 bytes doku/TriOS.ods | Bin 0 -> 18464 bytes flash/administra/admflash.spin | Bin 0 -> 152706 bytes flash/bellatrix/belflash.spin | Bin 0 -> 91664 bytes flash/bellatrix/logo-hive-8x2.dat | Bin 0 -> 1024 bytes flash/bellatrix/logo-hive-8x2/dat.rtf | 275 ++++++ .../bellatrix/logo-hive-8x2/logo-hive-8x2.dat | Bin 0 -> 1024 bytes flash/regnatix/regflash.spin | Bin 0 -> 583456 bytes forth/adm.lib | 90 ++ forth/ari.lib | 55 ++ forth/basics.mod | 485 +++++++++++ forth/bel.lib | 77 ++ forth/cog.lib | 74 ++ forth/debug.mod | 65 ++ forth/error.txt | 40 + forth/hplay.mod | 155 ++++ forth/hss.lib | 60 ++ forth/key.lib | 17 + forth/rom.mod | 206 +++++ forth/scr.lib | 69 ++ forth/sd0.lib | 176 ++++ forth/sfx.lib | 93 ++ forth/splay.mod | 116 +++ forth/tools.mod | 152 ++++ forth/v1.mod | 325 +++++++ forth/wav.lib | 54 ++ forth/words.mod | 16 + forth/work/bload.f | 23 + forth/wplay.mod | 93 ++ system/administra/admay/admay.spin | Bin 0 -> 83260 bytes system/administra/admsid/admsid.spin | Bin 0 -> 100386 bytes system/administra/aterm/Read Me.rtf | 272 ++++++ system/administra/aterm/aterm.spin | Bin 0 -> 34752 bytes system/bellatrix/bel-htext/htext.spin | Bin 0 -> 77062 bytes system/bellatrix/bel-htext/logo-hive-8x2.dat | Bin 0 -> 1024 bytes system/bellatrix/bel-tv/tv.spin | Bin 0 -> 36044 bytes system/license.spin | Bin 0 -> 8366 bytes system/regnatix/admtest.spin | Bin 0 -> 46260 bytes system/regnatix/basic.spin | Bin 0 -> 78562 bytes system/regnatix/beltest.spin | Bin 0 -> 24664 bytes system/regnatix/charmap.spin | Bin 0 -> 7478 bytes system/regnatix/eram.spin | Bin 0 -> 49564 bytes system/regnatix/eram.txt | 33 + system/regnatix/flash.spin | Bin 0 -> 28538 bytes system/regnatix/flash.txt | 10 + system/regnatix/fterm.spin | Bin 0 -> 8536 bytes system/regnatix/hplay.spin | Bin 0 -> 30334 bytes system/regnatix/hplay.txt | 7 + system/regnatix/keycode.spin | Bin 0 -> 7406 bytes system/regnatix/perplex.spin | Bin 0 -> 25042 bytes system/regnatix/perplex.txt | 7 + system/regnatix/ramtest.spin | Bin 0 -> 25658 bytes system/regnatix/regime.spin | Bin 0 -> 80298 bytes system/regnatix/regime.txt | 57 ++ system/regnatix/rom.spin | Bin 0 -> 7190 bytes system/regnatix/sfxtool.spin | Bin 0 -> 33472 bytes system/regnatix/splay.spin | Bin 0 -> 20828 bytes system/regnatix/splay.txt | 8 + system/regnatix/sysconf.spin | Bin 0 -> 23420 bytes system/regnatix/sysconf.txt | 18 + system/regnatix/time.spin | Bin 0 -> 23314 bytes system/regnatix/wplay.spin | Bin 0 -> 22880 bytes system/regnatix/wplay.txt | 9 + system/regnatix/yplay.spin | Bin 0 -> 25432 bytes system/regnatix/yplay.txt | 8 + system/sonstiges/BLUE.COL | 1 + system/sonstiges/BW.COL | Bin 0 -> 64 bytes system/sonstiges/BWHALF.COL | Bin 0 -> 64 bytes system/sonstiges/CHESS.COL | Bin 0 -> 64 bytes system/sonstiges/PAR.COL | Bin 0 -> 64 bytes system/sonstiges/regime.txt | 56 ++ system/sonstiges/test1.txt | 7 + system/sonstiges/test2.txt | 115 +++ 135 files changed, 6718 insertions(+) create mode 100644 bin/flash/admflash.binary create mode 100644 bin/flash/belflash.binary create mode 100644 bin/flash/regflash.binary create mode 100644 bin/sdcard/bel.sys create mode 100644 bin/sdcard/reg.sys create mode 100644 bin/sdcard/system/BLUE.COL create mode 100644 bin/sdcard/system/BW.COL create mode 100644 bin/sdcard/system/BWHALF.COL create mode 100644 bin/sdcard/system/CHESS.COL create mode 100644 bin/sdcard/system/PAR.COL create mode 100644 bin/sdcard/system/adm.lib create mode 100644 bin/sdcard/system/admay.adm create mode 100644 bin/sdcard/system/admsid.adm create mode 100644 bin/sdcard/system/admtest.bin create mode 100644 bin/sdcard/system/ari.lib create mode 100644 bin/sdcard/system/aterm.adm create mode 100644 bin/sdcard/system/basic.bin create mode 100644 bin/sdcard/system/basics.mod create mode 100644 bin/sdcard/system/bel.lib create mode 100644 bin/sdcard/system/beltest.bin create mode 100644 bin/sdcard/system/charmap.bin create mode 100644 bin/sdcard/system/cog.lib create mode 100644 bin/sdcard/system/debug.mod create mode 100644 bin/sdcard/system/eram.bin create mode 100644 bin/sdcard/system/error.txt create mode 100644 bin/sdcard/system/flash.bin create mode 100644 bin/sdcard/system/fterm.bin create mode 100644 bin/sdcard/system/hplay.bin create mode 100644 bin/sdcard/system/hplay.mod create mode 100644 bin/sdcard/system/hss.lib create mode 100644 bin/sdcard/system/htext.bel create mode 100644 bin/sdcard/system/key.lib create mode 100644 bin/sdcard/system/keycode.bin create mode 100644 bin/sdcard/system/perplex.bin create mode 100644 bin/sdcard/system/ramtest.bin create mode 100644 bin/sdcard/system/regime.bin create mode 100644 bin/sdcard/system/regime.txt create mode 100644 bin/sdcard/system/rom.bin create mode 100644 bin/sdcard/system/rom.mod create mode 100644 bin/sdcard/system/scr.lib create mode 100644 bin/sdcard/system/sd0.lib create mode 100644 bin/sdcard/system/sfx.lib create mode 100644 bin/sdcard/system/sfxtool.bin create mode 100644 bin/sdcard/system/splay.bin create mode 100644 bin/sdcard/system/splay.mod create mode 100644 bin/sdcard/system/sysconf.bin create mode 100644 bin/sdcard/system/test1.txt create mode 100644 bin/sdcard/system/test2.txt create mode 100644 bin/sdcard/system/time.bin create mode 100644 bin/sdcard/system/tools.mod create mode 100644 bin/sdcard/system/tv.bel create mode 100644 bin/sdcard/system/v1.mod create mode 100644 bin/sdcard/system/vga.bel create mode 100644 bin/sdcard/system/wav.lib create mode 100644 bin/sdcard/system/words.mod create mode 100644 bin/sdcard/system/wplay.bin create mode 100644 bin/sdcard/system/wplay.mod create mode 100644 bin/sdcard/system/yplay.bin create mode 100644 doku/FemtoBasic Manual.rtf create mode 100644 doku/Thumbs.db create mode 100644 doku/TriOS - Logo 1.jpg create mode 100644 doku/TriOS - Logo 2.jpg create mode 100644 doku/TriOS-1.jpg create mode 100644 doku/TriOS.ods create mode 100644 flash/administra/admflash.spin create mode 100644 flash/bellatrix/belflash.spin create mode 100644 flash/bellatrix/logo-hive-8x2.dat create mode 100644 flash/bellatrix/logo-hive-8x2/dat.rtf create mode 100644 flash/bellatrix/logo-hive-8x2/logo-hive-8x2.dat create mode 100644 flash/regnatix/regflash.spin create mode 100644 forth/adm.lib create mode 100644 forth/ari.lib create mode 100644 forth/basics.mod create mode 100644 forth/bel.lib create mode 100644 forth/cog.lib create mode 100644 forth/debug.mod create mode 100644 forth/error.txt create mode 100644 forth/hplay.mod create mode 100644 forth/hss.lib create mode 100644 forth/key.lib create mode 100644 forth/rom.mod create mode 100644 forth/scr.lib create mode 100644 forth/sd0.lib create mode 100644 forth/sfx.lib create mode 100644 forth/splay.mod create mode 100644 forth/tools.mod create mode 100644 forth/v1.mod create mode 100644 forth/wav.lib create mode 100644 forth/words.mod create mode 100644 forth/work/bload.f create mode 100644 forth/wplay.mod create mode 100644 system/administra/admay/admay.spin create mode 100644 system/administra/admsid/admsid.spin create mode 100644 system/administra/aterm/Read Me.rtf create mode 100644 system/administra/aterm/aterm.spin create mode 100644 system/bellatrix/bel-htext/htext.spin create mode 100644 system/bellatrix/bel-htext/logo-hive-8x2.dat create mode 100644 system/bellatrix/bel-tv/tv.spin create mode 100644 system/license.spin create mode 100644 system/regnatix/admtest.spin create mode 100644 system/regnatix/basic.spin create mode 100644 system/regnatix/beltest.spin create mode 100644 system/regnatix/charmap.spin create mode 100644 system/regnatix/eram.spin create mode 100644 system/regnatix/eram.txt create mode 100644 system/regnatix/flash.spin create mode 100644 system/regnatix/flash.txt create mode 100644 system/regnatix/fterm.spin create mode 100644 system/regnatix/hplay.spin create mode 100644 system/regnatix/hplay.txt create mode 100644 system/regnatix/keycode.spin create mode 100644 system/regnatix/perplex.spin create mode 100644 system/regnatix/perplex.txt create mode 100644 system/regnatix/ramtest.spin create mode 100644 system/regnatix/regime.spin create mode 100644 system/regnatix/regime.txt create mode 100644 system/regnatix/rom.spin create mode 100644 system/regnatix/sfxtool.spin create mode 100644 system/regnatix/splay.spin create mode 100644 system/regnatix/splay.txt create mode 100644 system/regnatix/sysconf.spin create mode 100644 system/regnatix/sysconf.txt create mode 100644 system/regnatix/time.spin create mode 100644 system/regnatix/wplay.spin create mode 100644 system/regnatix/wplay.txt create mode 100644 system/regnatix/yplay.spin create mode 100644 system/regnatix/yplay.txt create mode 100644 system/sonstiges/BLUE.COL create mode 100644 system/sonstiges/BW.COL create mode 100644 system/sonstiges/BWHALF.COL create mode 100644 system/sonstiges/CHESS.COL create mode 100644 system/sonstiges/PAR.COL create mode 100644 system/sonstiges/regime.txt create mode 100644 system/sonstiges/test1.txt create mode 100644 system/sonstiges/test2.txt diff --git a/bin/flash/admflash.binary b/bin/flash/admflash.binary new file mode 100644 index 0000000000000000000000000000000000000000..2ca35bd163a147b3e8c55a89fc554ec34bba12b2 GIT binary patch literal 12588 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 JD6#UK{||*K()IuV literal 0 HcmV?d00001 diff --git a/bin/flash/belflash.binary b/bin/flash/belflash.binary new file mode 100644 index 0000000000000000000000000000000000000000..52c40647d9e2ec03c79626d478121e80c33f2095 GIT binary patch literal 6436 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 literal 0 HcmV?d00001 diff --git a/bin/flash/regflash.binary b/bin/flash/regflash.binary new file mode 100644 index 0000000000000000000000000000000000000000..2ecefd4af228c860f8ee1624bf46dde1e604b880 GIT binary patch literal 32588 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 literal 0 HcmV?d00001 diff --git a/bin/sdcard/reg.sys b/bin/sdcard/reg.sys new file mode 100644 index 0000000000000000000000000000000000000000..e098428fd6cb43bb359d60a8650ef37285f09d5b GIT binary patch literal 9172 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 literal 0 HcmV?d00001 diff --git a/bin/sdcard/system/BLUE.COL b/bin/sdcard/system/BLUE.COL new file mode 100644 index 0000000..0d8d9d8 --- /dev/null +++ b/bin/sdcard/system/BLUE.COL @@ -0,0 +1 @@ +<<<<ððððÀÀÀÀ0000<<<<üüüüÿ€ÿ€ÿÿ€€ˆˆˆˆ \ No newline at end of file diff --git a/bin/sdcard/system/BW.COL b/bin/sdcard/system/BW.COL new file mode 100644 index 0000000000000000000000000000000000000000..ecbace2d3aaacf40fbe1ac70f4a895ad097c2bfd GIT binary patch literal 64 zcmWl{K@k8T3Egs=?UU(#APCk_+CjY~zbVzFcM;_(4I%PIi? literal 0 HcmV?d00001 diff --git a/bin/sdcard/system/CHESS.COL b/bin/sdcard/system/CHESS.COL new file mode 100644 index 0000000000000000000000000000000000000000..1bd21cec9eccb7d1965a67590087a6f9134fcd72 GIT binary patch literal 64 zcmW;AK@9*f2m?SK6@Vbb@tiCqRX`KgE%!Snlgu31Nb!W^{f{zK2_|6Mw)?;iZ~cJT0 literal 0 HcmV?d00001 diff --git a/bin/sdcard/system/adm.lib b/bin/sdcard/system/adm.lib new file mode 100644 index 0000000..11b7154 --- /dev/null +++ b/bin/sdcard/system/adm.lib @@ -0,0 +1,90 @@ + +hex + +ifnot: lib:adm +: lib:adm ; + +\ kommandoformen + +ifnot: adm:fkt! \ ( fkt -- ) +: adm:fkt! b[ [a!] ]b ; + +ifnot: adm:fkt!b! \ ( b fkt -- ) +: adm:fkt!b! b[ [a!] [a!] ]b ; + +ifnot: adm:fkt!b@ \ ( fkt -- b ) +: adm:fkt!b@ b[ 0 [a!] [a!] [a@] ]b ; + +ifnot: adm:fkt!b!b@ \ ( b fkt -- b ) +: adm:fkt!b!b@ b[ [a!] [a!] [a@] ]b ; + +ifnot: adm:fkt!l@ \ ( fkt -- l ) +: adm:fkt!l@ b[ [a!] [a.l@] ]b ; + +ifnot: adm:fkt!s! \ ( s fkt -- ) +: adm:fkt!s! b[ [a!] [a.s!] ]b ; + +\ administra-chipmanagment-funktionen + +\ adm:setsound ( sfkt -- sstat ) - soundsystem verwalten +\ sfkt: +\ 0: hss-engine abschalten +\ 1: hss-engine anschalten +\ 2: dac-engine abschalten +\ 3: dac-engine anschalten +\ sstat - status/cognr startvorgang +ifnot: adm:setsound +: adm:setsound + 5C adm:fkt!b!b@ ; + +\ adm:getspec ( -- spec ) - chipspezifikation abfragen +\ +\ +---------- com +\ | +-------- i2c +\ | |+------- rtc +\ | ||+------ lan +\ | |||+----- sid +\ | ||||+---- wav +\ | |||||+--- hss +\ | ||||||+-- bootfähig +\ | |||||||+- dateisystem +\ %00000000_00000000_00000000_01001111 +ifnot: adm:getspec +: adm:getspec + 5D adm:fkt!l@ ; + +\ adm:setsyssound ( syssnd -- ) - systemklänge +\ syssnd = 0 - systemklänge aus +\ syssnd = 1 - systemklänge an +ifnot: adm:setsyssound +: adm:setsyssound + 5E adm:fkt!b! ; + +\ adm:getsoundsys ( -- sndsys ) - abfrage aktives soundsystem +\ 0 - sound aus +\ 1 - hss +\ 2 - wav +ifnot: adm:getsoundsys +: adm:getsoundsys + 5F adm:fkt!b@ ; + +\ adm:load ( cstr -- ) - neuen administra-code laden +ifnot: adm:aload +: adm:aload + 60 adm:fkt!s! ; + +\ adm:getcogs ( -- cogs ) - anzahl der belegten cogs +ifnot: adm:getcogs +: adm:getcogs + 61 adm:fkt!b@ ; + +\ adm:getver ( -- ver ) - abfrage der codeversion +ifnot: adm:getver +: adm:getver + 62 adm:fkt!l@ ; + +\ adm:reset ( -- ) - reset administra +ifnot: adm:reset +: adm:reset + 63 adm:fkt! ; + diff --git a/bin/sdcard/system/admay.adm b/bin/sdcard/system/admay.adm new file mode 100644 index 0000000000000000000000000000000000000000..12cfa5b5e4199ab249100d4889872c196865c444 GIT binary patch literal 8312 zcmbVR4RBM(wcab~%F>l&8?eCv6N?0h12SM)S6=>XV}4?c4aRZ6X_ZuRt`*rBLIQ0F zCFa%v@#D$7Bu(Bx)07)ZsG$ulgr-T0Y|<$~_OvOP*LIROX(qM#5spX=Av6S8df%=j z14(B(^E~tIo^$r>?%CaQ_N=bS@jn&OjP6 zfIg-(kq>}>f;a04xmRx>ZhavMfL;%50)G;C7x=s0M6RJ04F-~BAY>dc6_CM~8%)G0 z5;6y<1ge1s;9=1~)&g6APGBGK2Jm~}e}Dmi7!AY+XkZMG1LOi@fpI_{a0f6Rm;mGh6M;K{ z0>BPT0`3Ct1||bjfT_SeKp}9iRUpQq3{el-21tMfuv$xvG8j3kuEa7xk#Jla+~AqTY$_G;hG?Wp(yIG)b6J zMAYXLM5C@Vk1jM8&1`nce%0qXt)7qzm5;4zOF)iGI{yq*mKMe5FH^u9l#i^FKv>ob zUJNhH5d=Xrv6?JIjZL3!aqDE+SXA7i(At<}VD<(qcC?I=KP0*x&%A9c%5Di*GML2u zAra&cK#evS1Q`QvcxuDO=Cwp;EXrwiq8!t#NRr@YYZEh4I&5Q-b_a|_QZrigZn)WT zrf=q~oMsK2b?VW@SR`UM%qFt{HG`-(Kbd4xZArFSuNaH448-1Sv4};Ug2?l;$a|DU zUVuej3yZu~7I|w}%0>Mc$Jv z@;0%^d&&xna$8tAmY3srna9gJcsZVz6L^`=%Za?ala~d&wDWQjFYn^z-MpO4%PG8^ z%FBCrS;)(KTdX)CoFHbOCT8$@Iy+hL4qnqG#-bvw!KfLG;!a~MvLtsm&023~Z6hpK zaCGJwi!%R>ENestPlRvWWaZ90IMS@70QNXJrC9WcNq$Dk2gDV#*aXyYA?83gU8I@$ zm+~RuicEvKC(hNyWCAr)Q)h*7hTs&8GjxbPG%0&4WNP#4Hd5Q33Yv&nES$)SP}|-L zC;2G1UdYQJq#(mURs;V9`e#5d@DXqhGQ~v5Nx*~aVI%NsAWI^|5Bv%EC-6D&6=1Mn zEMO^cKM(-E3+x6o;4p9;=mq`;d;)v{=&Xcf0+WFm00kBT%Yg?01y~1c1U3Vmz{gf1 zEVB{vHn2L2kXM0=fH~Vh?#U+PuR!G}LLLWR2bPZ}dV0EV=!k9A!~pi z0IveQ!27_*z^A}9K$lC14afuRz;wV3lmRO6QSM2d@MYqFWhhZ+A4)Vne6dG+=weUc z;Y+A5^#nY?ic8(vII_i4JJ`Ns$>0+^3I{(sTR+$yJT^FZb~Wlhpsqx%o*&f6`Btm% z)iOeU9M`=2%82*VZc_J3nUA&SkSfpr60e8#W%M!7tUsgw0D5XPewNKOmDG4hR-DZj z97h^Ft55Z4b&ZB5)WEfPP==!)MaG;$)Lz2u13WtPM}Q}2&^gzl}uqR8LQN|E+x z71|Gn655VbyM0+wr@eb?Qw7FMyp!-AerIb?0!==P^YNcdjhP;g>DHmW1@eYakCv7b z%u|_~r}49-Jqy0pm+7ob>1@8GEp3O?y)|{vTr3OfBde?*N7^G5kSoyHFt^8Kz&Whw4XI}_E}PF7i95*oxMo0~jTg#HpF*D~ z!y4H%tW`wg+AHvvYbUlwh5ljnSa8^L8L=dtj~g(~whgbBvGLM1A?Mqzy2I^OW`iDd z?JfRsSITE{;bXZcw?+u;{ubtE`$e!O^Tk0PUrdg>LSgd1_xA98vA4zRK2Fgl&?L2A zY)_c}gFQWboCL<1(DUip0q{(o-4Itz02>Q+-M~9ZIpZ-$fX@v*(;pG@?a&X^}+qNp7oiN(r5P_ z)6Y1AzV9U*>U&##=J!5tTlhZ4WA>%wEB{>XtN-&GZA(*fyhw4u;^~=4Y$Ze>lW=e2 z*8?jmvQK6}em%h$_V?TwJqheW0>V!Y{1hUD>Dqz+=idzb$RC+;lOe(*R3{>Zwk`_D zUr93wt*1-GIT8ue(!$8vK&h$i(m9{f_Hv^)-`iU2?V~kbe@%Fv`%)iWY^X`~BXl+E zH6-10TQ~Gly!m)P+|rZw&0B3K3qA3Y-0_);T6&PS5+1jrR}MQLFl?T)ZFgRzeu zL|^C5j+UJrtwTFI)(lCaKv#=%ongwl$9?HGN!_S0$vOFKv(iG%eYBFA{gq0X-jLMg z7;0xnTOVD8(!YueDaz|ohTKcTvwB?$rjA)A3t<gjf@&$USm)TJdJNU>gyE|I<3`uHjcoBxH=ymZnAx!D$C=u(#<*;0u&iJv> zt}1akqw=C%)k!Kp8lETCQagl}C{ExmidTSDCwzKOhno{D?H1h zRuWmP=$*x6s zwG(WeI6s0zquG%`Y5;#f_(7@zRmCVbh{8$QAvo|(-I7iUvrdT%UxYUB>V zcP{MkIY%~;?UGnlg79dyyuh4ZZ`sigsz%~c%Pj7z*x zQfqKo5QX~T?eoHR*9}}|VY|;T3%_L)af!u_lVR+8C5 zTwFH$@B=LFb;SzR!$GNGpc$884gK^6uP$O|v!MB|5*4f2IQ8P~9kZ|$i@2=R#75DB zv57UiI@$=$6qg;U!6n7mweq1=gpLuHEnZ|X5^5K#7ZW;GT(-1|v6IE>rG(}(#dU<{ zi`BJ+juMwqL;s=WT{Sy9)>d7O9;)lA>slUNxv1_Ej_le4RM$J%)oX8`fuz*b}@D-f+_8&+0>K6lU?`%#0^EhllhfQ=qj<) z2OsxRYrb59lxN=E(XvNU%aiTN4W_XXTdUHx-kF+I2;12_wL*9@o2QnEu^8vQ+k^dc z=i|X6pS(tM22KUL=1!fWaV`(sFLne!ITiflj^IB|1<#xgUOg53;B@fIQ^Akm5vPKG zah?7_&FNsQkXr<|;hDkbRmMq{WU?GpOh*@cEsrvb(JuSA#@aTEE>Ntrjg!_Z(oyRYWnt?tD`2+nlw2Cs)C6H}`(sO_8RqL^f3Y4^JuQ;9c~KiIXJB9&Agu|xyO zn>{nSKAC&7qisoIbeb5OZpuqb#z!~alB@9nDxIp85<}u4YAI$HI*U$oDi~8Xsw-1Q z#}v9M1{zsNtof9hB6zwa?RVh%PuWQA`A7obVe8J0om7lTB0aYY6k92pFxfs9h;%$| zLLZ&LZpK##&EfYVh+IbKUm;$13=bqP-bXANo&F=p$nYN|df!dj>Qly=3TBTw%tU4? zWoF|uo0Zyarht!{ax4ZbZYF1dF1mp$^om92F6L%h)ZJKXnDR6fACh!(3Fk|5u0u&K z3A-AvV4ddvuH`8K#Z{LWY7D!s;4M}acKN&(oyRA5`K{^|D_a8Y;gN@20EWk<0$jN< zDTifAYuJT+Diu?6u|ZEw#l$OCv;|BKm)oe1Zq5|2@O8D;wm^)vn;&s1l6oJ~@!pQdIy)Yt zb|hxh3N__79o)kNHzb{5Bc0K71RCC#dD9Q6KHtk5W9)F7-b{8bamv)Pw_{6Z#}ss1|NO$A>KNfve@NTRWLq%+bEHt78je&M`&=1A`I6;mPcr!jpa2c$N%Dj?JPj5xg$s z2QSMH-gHt_q*2L)DJWhvDy%V?b7Z6=ueel+vP(wB)yqD`w;9HGkw)Y2)G@{3$sl3W zi%z$4U4bWDACjD2bXtt;yErzK&c%w4W#eYSD~k)$tv4iQ8zwU>^rlHC)Rr_iT13># zN>Egn&c$mfCCw0&fVkX{jS6Dk`hC3nYFYc@=B`yfqzm>GkKjcZJ3na361r-XXjRjZ ztGGi}njd$<9U7x}CMh)0c)ma4ZoGu|%xt(i%b`ONJi)j#Vx|9LN;;NquGZn*^@xJs z6E8PXL;eV<%Xc#2o7NP)|FNfqDF;%an^VkwBUA}lWFG3pz;d7wXad@R&A?9J zzk$O*A21Be!YgGifP5oLVg}BKxYGoF5vN4dFhYqVl#x-hGtOX7736p-T~%mSgmcn0 zygw8w{Rq6I0%f{*kT0sn!zO(te?_I=R;8>~Lou3Vs|e>PK-DMz6b=f5e_ z{P}OXSmE|pn%m^tWiG}d&QYRAuDfX=*9ZSXQ#J2pUh}nKl3jSo70?@l^C7SSLpnX_ z!uN>_z|ew_wlCVFy)x9J{p3oIcKQ1u?d8oORr16$zo>snJ2WSx zZH~u0KYn=r_Mf&syZx7~M^yps&(+Ou+P5)u;)lG3Ee+6bcu6~)*7ric?b+?WYCEdx zp#MD6`(Eg+7kLf+RnTAclJ@hoeiQW9J-hwrx}&NA`Y$lOO`*45;`Jeo?Zw`*koMcM zkor5|1b{RAa^KY+ZQr#X-kvpQ*sIPNR$qyosAJJUpwIffa5;~ByLAfLRX|DY%m#9G zNjq8B8X~V1q{69^Xp6V_UQ(b+kyC!7sTgGMYWstYVPRZ{f#rc~ou9Po`Kz?a7k|Rb!%se3u-bmcM zKs=})LcIyHmw-dy|I9mx$wWvRkZCfKGN2q-V-m>EQNIYhinhJLo4|+QkD%?nR6;%m z{sx=`P6HQHjl?P#$q3*UU@9;lSO}~EHUcjJyMY71A>b<@!%WCXvyl{`o(=riERYw# zp93~os=46k9Aj{F38I-$#_HjDu`+YHH)fDEuy-BT1B;-+CJMqAsNPQpi)twyBC7N0P*I&nvqbeiI!sjO(&3_dFC8JOb7;1x&ZZBDY6OIse zsRGy9RKKSOL_eX;qCcH# zqJJQ55&eVdLD4^wz9IT=q;HD;TpP`r_~#$kI69M0w{d(1FaQ_`3<5HN!N3q;D3ApV z1BL@5fNbCzU?eaKumhukYk}*4F~Ie}4Zw|n1Gove8At=HfDI6B1ty7gz6HnuZUx2y zw*k38o{hu$z@JGnfTY73)dD`%B&FzblVnV^TjE-mOOwPWTTGHEp`6+$5)vfrn){@d zq_m$M3{`iJ;S%0rlEi*GCJDjx)5TQw<1nfHI81MxGr9Xm;!Z^3{-=?+`yz2CB60Uc z;_i#Y-4}`bA4K9#MB+|F;=Uph_Z5-2uZYBbMI`P4He+v*Q>u_BZ|t=iqFpChy~To-?_e9G%9e6Dmk1iMxODe@iV?=!jfLs97?(xd)sDS>p`~A<_ue zD>iwbOjD&vdnIN^D#(&X^tafj%#@z=>RP&ju8Pr6laT7F-1R9juVG``telmfQ3XkU zMma0dL6wFjnEfiL0;MkUxlduxPKk+q)e)v8yH71OEcbbx@{lUd$EQe3IJx=>)X-gO zSn1?sn$^Llpvs6>f?n|{PS~JXon8;CGdd%2LP!u1uao0VhDPNqy~E@hTj7){6|d{C zazt{-M{P=#Pl{R$m19v^t7LEGBpJL>K4KdU!n&OEz&>|7$8o$F6M8R7VshPVbsHqf zC9e>kqy^pwWB3N`ji;z0{59*=~X^!DwDWBC7kpLr~yVJC&ApxH7i$DEFlJy zYfyy~<-iKrV&U8@G+s#PAe5@auze<%xdKfoZX}Jptb?GlQj#_5tTP3DOfDX?VG+z6 z)Qo(J`H?uAXp6HIDYD6x%4V%%TxvVgz9PFtr4nghS%|c+_>lG$miCoJNc+lSqb_LUV#`^rkBePtEWzVZ;#zVa~AzVZmtzOou=Us+?r zh%&2KIan`;=;cto%+kwYdO2J#N9bj?US6Y@BlU8WUfT6?v|e7Tm)Gg#7`?n+FK^Jx z8}-srWy3AP4TSfbctNjkW;Yi6EqYDwGP!be4MyF{sQ98Wxh(PNz06y$;%%3CT}2hJ z)J!h%A4=0MOWA_NBI)BL2(YAXi%T%DJe`uQDR`Xqns7OoJ^{++Y`zC5BE{u$3fBy_Pg-qw1#4KaCmea7WtgY;pZFrTiXt;KTO4k4!(_cGQ3H~a@nH^02dmwLyvlspoE+Mimyiqzbl4)pL;7+wKaZto#!3{i5RtMQ)ogvUVKqzDabB;$I^k2oOl8tx=i8JXsZEK% zuyDJc>zwB!*QG$84l}t7i5~4rWGqJP?zN;+1Ns_`%tBmZFg{|wOAqTGTU8$UCuXIT zg!M8h5=8zP7hQ866>fsJsJL_%H#iqZ*r3OEAv zrW?ud3_?PHG=LBp2m(_F60!(*c%YGNMtuwj4ua22yvqWsfTw`{z+1ovz)_$JI0uly zgjj(=z)0XGAP-mxygj(Zz+H%KxAw$J>^-s4A9rcN2f8%hk58dKrTNN$drmb6hmv(= zGrQN<-POIK&e8q#u{quA1G~GskIhH@7V2rJl@r}Ta$=FqyLA#F&qaft7bX$USIwkk z%Oo#r&m@IqpAk

&xifpjm%LzXke+Nc0%Ct8x0A1%A#-e?)uTobr8{Fh^v@cKw0+Fw2p3)Ust?RUp@ z);HIbPl3(Y!Iwb8{+RBJel{3Cd~&ob z3Lk9z8JLfso$Q^<=BJa}AH3(}eq{ybX>=myqJPu3{A9B}w<`}%CftdrqN49g+`DA| zQp`X3di}yF-_P?Z-_I+5w5uVQ5^ncc!tFV=CmVu>6YV)0PB#QiJ?)NFryG1Lf!eMY zgOkG@o{Vru&W4jO289zHIf2tJ23MVa5$!Mf0_c}=qTR!xZ{0Ty!PGPDj+Ngu`262C z1k=yAd(7wCYYk`G6|SdS`RVC~oHc-@rz5B2baOG+^Ox;CrzZ)k&ou|Rv(Z}ax#;#G zSfBC%O;~$CEB^9;mNOeMv-@@RT;0>v99(d+SzvROjQ2plxw_g;X+JyBP%P+vG+LIl zv9e9m=ZneSP1s=fWz?aVhd&g*H^PYcx?^^k-^>&1!vgLX=Gn%DqqQr$CIwQ$^K3`M z>%&tZm!Y$Aye1fNAMR;8pd5o;=Fb$4=8zN7pb>pmotz|m1$`o43X;{Af>R>V;1;Zx z^ZRQeT*oD4ci>XlX*^4o6Hz1V)UJGO60?`Ak@VKv3@@*@u`#58p4o4GT$@-kgR#a2 zx736Q#{EP1XY)l6lew!~f4-O;xk6_0&)YP8UhLJ;lA{S)08J9}#pZ+%9ofzzl z(7rm>37*L_=0+6(V75?~bRLY$84n*m-8b}vxADv$ifttqV!@7cTCnU7lg@I7VlLD@ zXMR7)JNBK}F>*E*WHM%#>7QuR>`8qt6uXu6L4I4#`rMw-XZeolr@oKA@5XYJcWb=n zcfYB=;{(`Z<4eeAzc<-C=e<4EGZJ!SR%|HvREWiDunUmU$lHYEvSLa`ODg2w#Tdh` zC*DsXzKz&`aLRz=6GE7-9r*ve#@a7mWNaTpxCPX}8=TUj=|1Uu%WZ_tp?C4)EF?q= z9N{It0-^fUaj#tcY^f*PvuLKLofdm4i$fFKr`qYA#^OXjLg%wyJ(e4<=!RahCmZih z{d&^&3DeOp=_ie}(_Q@C-h@TSbxW2k4sw~FRp4l+&0+QiXKJS}p|7*vUsdm4)Kl+Y z++*Q6I-kEiDY7W5WM=2MbgV+IqULrwjhZW`$su~tqRfJYdVh60orkh=o-U*)zq6!D zZ8VhI=91yD*E)s^x#%4J4ia+lQ`=l2m-`ao?+Uptoq^&;e-$<48Sis>eQngk+|Pk~ z-Eviff6?Y1i!w7b9p=7{%+=v^Rx6Aac)t- zPl*rB$4}z(uW+C**=I`$TBtRfO;_TMG4kr0b>%Fx)%SM;X5Fk2YA2XFenJ>Gjb?Am%Uv!m$BF|}aHTs{Ds6DIEUoTNxmXl_0_CH0hVTI7yO-C{!1H>psWOa6ruZcwoo~L{# z&0wNYVNe4=xx+N2GcMyhx|70=ajE+wVAA5c?oKK)N5NR(`|0iRe!4WJ1MLIj zoj?r&6?dS^;)=R3=^*Q}?y$?cx-71%3zND-;=1lmSRTsg_!x9?TwRyyW3cMh%I7#K zqo^T#nKbs18GWRkk;q6EW21jBo9QZ@UzCtq=OWph#Vxz_l-_7jijgdcOe?Y4$A|2$ zi^yRiyVsbDa~+w#(`v%m3`;&TKQ&f9(_=Nu?#Nts|2~Ep$&LKEU;&WNvo{s%t zU}LFNAY|$5vOvJDfFl%q0O1i5;*Y(=p8B{_Q!!4X@TinD6*rZ*Pc1S$$Vn_pP8y#c zi;;T&(r$hl=PnqJQi9$c`jg7%NmIejBRuiFie#V`I4&jSt6f$-UKVt@=gPGz|LbLf9GYK8Q7g1x! z&RI>x_5LM=XCpgHno62xMP^SgIfYwx{yu7G8{=xT&mEV3?mOMFbpPCOv2!>;bKOtq zjWoM7i~+YfD0ct&eF)R*bt&5t*zA;)T9isc9dM+CEop9yGR~!k*}8OFL@jdQ51H3kP!gK(XIRdNv_+9`E*IjeDpqTgu0l zCp7r0Hd~a*@%H!x)85NtEliGeWWp&IvNJ!$TxbmQQ_RE&#(C3*z|rv&@tz~KoTr(c zt%2?1Z@50Fb6Mb;>HORHe$3(UR`5JwbkIuldFeXmQs5=or#lCK40%XUtitI zGkE{OVmf|NuX`*4Q!6$q>sQn1y%v#eyAQ2OY`ls6gQe93DJS+3Ys44N>}iqZ@x3=A zQXMA-CW#@*rmUo7cw|+-y&A`X$*o$>H^v^I);yNb+0!W`9>&BNmD!0w_sVo$FKFyS z{M}zsA&gg-`1o^>{u5)Q_H1kd;4#*Ee?8@UEj&HG5fqCQO>p)Cdl2bxWI`_;!7}3( zLNoQe2x2fJQnnC}yB9A=9=sp1r_out3p+B_4>o%5Wx7uA%0q-v;|6SDA~Ut5W#G`$ zM(v{D^HL$xYP2CUIem2cMWoO(R)afFAEs4lK&&CEZ$r@@i$TiQ`GU;vpd{soT%~6a zr@5nPRzg6L>S8^mA=eqaixq}kUXRsK=H)yr-{AMgsZ~DrrOPjJJ`6l+8HJSFYsqB0 zq%Gvaern01<~(Bx74pzya+NRfF6YX3>e-YfQ!f+;HSrnUwK`dIRT?v8rWX zuUy@G22XW94&#Mu5cZOB10S!ZUb;4oL*Pqi+NyoMtlhl8DO;2uU^{-szpT-}jM}j= zqn4?VUH;N$Cb(!Z7+2A;<-4Hac~)=wIZes-=#A_o&R)JR-Z|eXQR_4Qb&dXYuw%`t zY#t&glPh1+@5!~2xALVS!Y~g_`3~<*qrUI4SlRs$%6CQ3$Gp%w*h7V6Q>v^mhwIE! zCGWUFYvF92KKkqFwc<_mW}1_B9UV(=OS^{NPA8`gr9Yw%qz$0!aPC+mnh~Mrm;QA# zZS*G|*sw{|Qf`R-Z#^3pTWCMo=wHW}hYwwWQiO$b)S(ij_JjFEj=u z2KAKFEq^CtC4ARoaeB~cI(Faby*U^Y!B@T;}uL_jEMAGret8-&Dj#X zcP)_dJ@ITQHD+HX4cSg6+*}Gxy>T&XO_FH!G5VQOXKmo<%~*S@iD@?H?m%gvd}lZ6 z6l(44-dPCB2;dg#QWIYPPEj*jiqP}6rlNc&(loa3p+5Y`a|XLb(x8t{>$M0>3Ak3C z0{&t+(i%A1SgMn)fgaz6z>(U(5x8Fy2z2mgkUAn+BOq>Ps-{xW4^)VS35F`+UxcxpK- z)AX>;SmR>I0@{<`S0%2 zT5!)dTJZD-TJSd?Xo{t~x9s87(XxpLqGdn%YqX5V*+|bvTCnR8O?drLEok(|a$bB? zleayhdBlffImQoTO4mkBcLyQd$&Rt^wKWS&&Fw8{u=at1-+MI zIl*6PvavqqNUx7A;Fi~T4Ug9Z$m5+s!{dj8y4^LJuzv&k*23oo_*?^@s}nvOHKBE- z7HsYBb6Y>3Tl)F@HS~7EXA^wxgwF=}Y=F-d@c9IMJ^`OkBz*o<6Asj&ZvZ~);Pa>O zxi;bRF-*J?7wBVvf|7n0y>_p88?T({)huZ9k}aUOT8M$8qi^gkp~4I8*Cs#`$A&%<;4q zQ~uVqzl1#@q*)8Hv#i&Drm2P%@5z=GHRWXe$HDzI;8%fP1z!0$ct8ce9Q<pl*) z)ZyL2SI%c`dALr%la_pz}iuM z3t;V#EchW<1Fyo)JBu~-`NeyJ+~eN_$?jP2kMO?>eLnq2b9619yn);Ojlw~9A9O$6 zsyW_Ytkr(BSewE0*gE}rR=wxv-dP6*J#tYy-WBn6x?`Ls8jky13oAM{U58`e> z+zp7kA(q4R^tc-lH-PmUj~nZ-8+P7Zg1DC;?k5oU-dONLBJR&v+)EJmUc?REv(Wu) zo96gniB|jPCE5(8$JX)%CjYhO_;^WQ-23{+{kj&M@EGFWR1*-mxn(WMxUnvG)bzzY znu9&)v>=Aj9O7nlT|92a3*fU@|3useSlpWt_cPm+xAi`VdlTZ`gt#}wa+sbT_hX0~ zz%vw&8_$9RcHUctxR)XBClU8PoWa9CyWf9haW6yM`w%yDozVU34$bl5GOhOiEYoH% zJ@!1gnf$k!v$V)BMPc%FAJ+*8eJ;=?>t z#%|eNwMSvkxQaPs_E-Hp%XoB*iCa4GQS!WZJ{g-^KzdhPPaGeQBpvSIWZ#8MvUY($ z_U9SNkQWT(XqJJT-HqQV7ZZ|w2l5auwq;)p9HX*<0!%foO#JU*^19kjl25iLY9{V~#l7`Ou5Q1kuSut_ZpZkp zxUOoa4_wh2pN{^bf9HR6e`U~D*(dk_*RL!ke)-=%^p`K#)r0H8h2ChQ{hw9%W%`N> zZv^@^k{E^QPVdrn37*B7B~YKA2=?V3Me)O3qkr=&ucNM4p8HM9_Li1|EpN7c))IOb z-oNbX{JQ7N`3o1L(Tf+(o$2|yv+GNU-#ygwS=*aXY-wuw&2!2obbkHSU;0@MgP!GC z8Kl;iE7;*IIkD@OdEL|T{xT{t5Vk1#UsngvzwJMu*;4F(CFhsbDI_H&tAFF))BMPU zjQ!e!S8CH()FxsXI?H(53}3~nwSlYpB*S90Kr$T5BgPEJ78Z9R#9q!`r4;9zp2#LZhvY&o5F*K4u(GXyrre(jh6PekG6k;`RzD%>WeRr zpE}jka~6~T-NoKZmw%VKY8?M5o1BmTRR1bHb0WU0#Q!;q{}le0R}oq>NCs6(^=Ycd zbg=6UHXGeN-+XszJiCLw?$){tosvOiy5&x{ud~~IGTd61CAExOedqbsI-#!4(OPG7 z9WHD%;(voS+8d4ePG6%@#(xK%k3>`_NSd16Xv9CXfQZED4A5x_It%pR2>T>!9Hr2n zF#FQzZXBiJ%Oj=p9Xo8jZI5hS1?h4CA0OR~W=Pa^;8rIk7A9#FP%02rce}fFCT?U& zqfiZbG|Z&c5fvt@BU_y`+9)s|5r3gRVn%M&y(T)Ohkfx5Xg2AZ@#Zzv@Zn3kHm{E0 zpM(32&H{n6aU>fEKAte#k!%>L;l^xL9+!FnKM8a+UK7_qwC-@X4=3;4)zpZvp~_}~ z^~A3zK5AzTQ{wZ{C@AzIGYM8u8#5S(f4u{jp*ChQE^Z?WHlTV5s<4|-y#!Up#Z@ms Km2prd7C%KCJbJ*|h>z>*MK)2Xtrb*b#hr7HXJQpUpFj7@Z_>}BwG zK>r2`^r+0}VQd^^gT4eh1G)gZ+G{9RKKD!IDZ5hLkTmuc-CEu@^2J)AY8TkSiY3KE zBpoZdg;d@?WNb00nQ`pQq-SU?($y;VVnw!Wd!uNQc+%LBf^Vaeamscs4XIYJ4A-te zBEQ9wT^N{>GnQ)AOv|-ftk_apu&1&)*OL$1^A>Vo`4IEmONX&ojHRr674ycdRFzQx zLrLQyx0sn+5WxN3^fdcI=L;ff`lfZa0zr6bcT&cLIHdSwEt|E=Mm|?H_SN8b?5R{u&soFU#+_Lj>_yBDt z?cqUk)&hGtX|#YfuE4sC6eb_YH9Kb<^dq6D4z<8s9J$_fP{9Tj4jb6v!!{j?&0~9a z?%9fHr9*+EIlnc=l$~)Zw(HNfFh!bk-ex`@Ih|o06y!+K*lk<6THeSO%lT9_X9IrP zlXTv8Ejo>3+jlF2vYX14E#rtpsx_o~k50}qDRd!t*9L6zM5m#>QY93P&5w`C zl{`Mi#&+y}>fyalQJQ!z4jI7J&`D7%c*Uj})`IC$>BF{+igrPl;cpmB8aQ@X{CeV* zlAV!4rg*qwFdcAJa>as|=78~DrtgJGE}NUgQqhq#?qmA)FFsoFO~8_dhxP_kLhM}* zXRcaK4P=UzZKR7uI?j}au5HD@WE9h=CbnP7YS=%f`88^UnL`hqpppZ)|>I zYcb>GQ!d2)TkTvGB?BA1UrO7I&Fg^HXIhWgj*IlF<@27c*KVzj6^cl(aOHvM{cS?MH-+YN|2c#Iat`lAUEcWf{eSdz|597{#nX z+NKP9J5w!|Tb*S9#>fi_SGMN5O_`>!^QG!>CU1}m^3RLBY!k+QBV9@xe%J^)*OJL$ z%B4t-8}>Bz$BTQhs#vR1cvh}5Y0%|kR7$CgjR4TjHG!gC$>s{cKnX?_P(W!kewGME zh0^$HcQCpR?0%0uBkk{434N&ufZ9MRD5EcpC_Dga1F0Y$ z!3=6dz4>Ci-PoBsW}|e>XPB%z2ghoasg&aykJJj2l%kc%V!q_s(}$S8A!ZmECs!KC zrwXaVdAm?$dK|inHQ=Ud*(tj`S;_jtaBu5F=yNKSfrYw_&`qU|Ezs#q9~m)ZJuH=r zhs&va-bmY2_6oYrnqe4ISCD&jU>G2o^$hSw^1tl_b5dhEMk zNT9QC`Y36S0i}MR)Q<$}M*{T=4hn+WK_O5WbO4mm`+;5v6b2ER9iRwE2Q2}0g1SIK z3Gnti1H5;~!1%4H;{h$J$9ltm@vWDK2#4}(8DpqoIYP@SKS1@oLd(N0X?7K}hpFsw^ zdlxpcAx5p%BddA0A}?b8&4^3Uuc$aN|F`6c#}yt@cv#_@!aEd{0j?{2iNZS--lb;Z zs0tk{7>#7>+RSP+2ASvyMtij-O5@qzp>(nEK>=wzYd2d8VbMJy zZ=kV^uYmNYke2h6kbVql1z*YdGHn!I>X&ZkW@a_HZOl9ojIL~Y{)ALwzf|f{X?5Uo zm%bO4Hs^8Nb9+oz=CFen=dzQ@IRmT5VFo1*^B4H)3W2|=z!ZEg_P%fzl3x+ zPs3zbr({@I?5~1RJ*PN)mD8~Xy|4LBmErcYMljk9)k~ggiNt^={%6mB$n+YQ|k zRsMQ+OK<1y*Mut<-A#+WiCyHqI2WJyqG_I@ZV#zv*OOWvo-B+6t?{#_|9{|6Jnnel z2Y$=nFWTe`*3K2(G8GgrXz_SkWbcd2DMqt_hvdA^)4Z=Wp?hmV zyzhB907(S@9%vR1f#~P>DjMfVrCbLbob2=+oRs-Y5wOO|Cq1xfD^4E3o_MOeu=0hf ziD1-Ik=s4K5#S-W8NM8YPV*ichsbK2ytG`yQ9OBtqD05L!RXzD0$ zr`8~(#;F~CPrC?F^=q8k?<+!d9}PeOoMrI~OA88OCk_97e?_P88VZuO8kgr(Im>8d z|5-LfW|TOrS>~+{ZN9kEor&Ul>JltQdLD(*T4C#9F{QVQf*y(S#%dS3+r(OL^c-z&#jK^Jl2CuvNNj&fB4Wa4vGonMUe@#U6 z`Z=NN^%ukvz5WNHQ?FkTU3&dxu~e`Bk?7XzuZSMK{+j63>#yTSOBOTYh438REX23? zeB9>;eeU}Fn9r%?ll==mf5qpx!leF3KL0zP)0rdtt3Ic5i*`fxIbI;LO;;)DV?H1A z`2opkSMXcnUdHA^Uu2G=vP*bKTn7IbJP_z&YXT}W1B`70JqFqfdK#35eku@RFF}3{ z^gYm<(EStW=a7E|QrbeSqm8j;pu0i+pkdI%puHd)GzB^ZdI9uJ(04HAP4FLqe$v*( z@K3C4CFp)oT#c|Y_*Ybw{Sf>E&>X0ZGu8`Q1-ct_ALs$l2GDlUZqRP@ z8)6Wc{ImJ#vVAy)U;iv^yOQHKkK_s;QAB{>!^~vo%}@C5F)7^OyTmW%G&PY@*D0p> z1^RCAafNJN1-;InP)urki$7teJn_4HTn_yf-~F%@Ugx_XgUK~pL_%TMWH0jZ@D!fB zIIc4X_ylvagn|~qN{(biIP^Ed2@y#hnhgwpKq)pHzngSM_gh`uh+m?n> zvvo)fm?$nnl}?jRUtV!}(mbjhxmX8x6W7Xtiswi0mZM-xYWK#)&AcK)Qr=>P!WiHb z@Yb4=`fy9HKzoiS2@j!pT1Xw94}S#_^1YQ}(&a29b&|B1q^_2$UKJYg#Y6Mbo!v#PUV06*3M&ccs+(xC(2Ll}+H9d{hw`J{o7DY;iqr9%a0fo{poY z=qv}y_?^S}mAc!ga;`&F<*_Q7<(O1HihK)&lq@!T zG&~)*%|W)`uL{M0aWTYhLhXAZ;5u3`e@AXDl_Vj*%X;3 zi}8N;K1AgO%T40A(w-;%@`8}X|2kx8dE1c3{E)|*AycNy*vDES)3zdH zVhCAoTinc-e-VkkaPy>GH)3^|wnRGDn&Zwcj;MXj^CN zZ!gyZ_&=eXYtBuWH$K#E{@KJ&+zBibl`-#{vp^V@uO^92s|Z-oT=U9MSQ<=v68 zFubEM?!uuGHz{Q)=^UAK?rq$=o_m+vN2Ghtu_hhMO!qTX=6{@71RB18Vi)!@Jq{V` zMx)Dbv{7RP8gU25^(e3dg4o3On=K4QyQ|fv;ZUrYSHQ)19B&7uovp^bJpkIoRF(yA zfUdF-%f8hY>d1b(?jRkkp>Rz`rlck`)lFZViBtD|)Loy`qVno=+;g93f%IzA>7xrY zpZ>!R8hB6+Y{S6iZlCS+S=Y5Tr_Z)Rp~A&FJfQ|ULi@nHk`u=18O^VUVu0k~yXLfx zvol(w{;r6uR#yluWeM$Ll&^^kGn&w{`-GNA2PP9Qq1EAB0|RcWF=8k_5Z|zIc%v9f sY!u9@=d3=_@j<@umbOf2>8H#QC5Y2VWwNI;J+2;h!~oWrek9KR8>2MXegFUf literal 0 HcmV?d00001 diff --git a/bin/sdcard/system/ari.lib b/bin/sdcard/system/ari.lib new file mode 100644 index 0000000..bca39ba --- /dev/null +++ b/bin/sdcard/system/ari.lib @@ -0,0 +1,55 @@ + +hex + +ifnot: lib:ari +: lib:ari ; + +\ abs ( n1 -- abs_n1 ) absolute value of n1 +ifnot: abs +: abs _execasm1>1 151 _cnip ; + +\ u*/mod ( u1 u2 u3 -- u4 u5 ) u5 = (u1*u2)/u3, u4 is the +\ remainder. Uses a 64bit intermediate result. +ifnot: u*/mod +: u*/mod rot2 um* rot um/mod ; + +\ u*/ ( u1 u2 u3 -- u4 ) u4 = (u1*u2)/u3 Uses a 64bit +\ intermediate result. +ifnot: u*/ +: u*/ rot2 um* rot um/mod nip ; + +\ sign ( n1 n2 -- n3 ) n3 is the xor of the sign bits of +\ n1 and n2 +ifnot: sign +: sign xor 80000000 and ; + +\ */mod ( n1 n2 n3 -- n4 n5 ) n5 = (n1*n2)/n3, n4 is the +\ remainder. Uses a 64bit intermediate result. +ifnot: */mod +: */mod 2dup sign >r abs rot dup r> sign >r abs rot abs + um* rot um/mod r> if negate swap negate swap then ; + +\ */ ( n1 n2 n3 -- n4 ) n4 = (n1*n2)/n3. Uses a 64bit +\ intermediate result. +ifnot: */ +: */ */mod nip ; + +\ /mod ( n1 n2 -- n3 n4 ) \ signed divide & mod n4 = n1/n2, +\ n3 is the remainder +ifnot: /mod +: /mod 2dup sign >r abs swap abs swap u/mod r> if negate swap + negate swap then ; + +\ * ( n1 n2 -- n1*n2) n1 multiplied by n2 +ifnot: * +: * um* drop ; + +\ / ( n1 n2 -- n1/n2) n1 divided by n2 +ifnot: / +: / /mod nip ; + +\ rnd ( -- n1 ) n1 is a random number from 00 - FF +ifnot: rnd +: rnd cnt COG@ 8 rshift cnt COG@ xor FF and ; + + diff --git a/bin/sdcard/system/aterm.adm b/bin/sdcard/system/aterm.adm new file mode 100644 index 0000000000000000000000000000000000000000..e1950e77a158aa5df8abdb0eef1ccd96e4bbfcc7 GIT binary patch literal 10936 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 jgvMfd-4xpH=@xcV(#kD|ra3hz z_I@)@7LcSp)j4;5?%cU^=gxh1?p%?R-xm8jONe8cd*!!nl`EqQD}|Fb2g%snN$q$MgaHT!|u-J){l^mwjcnr8alvx z8`-=Qi)?S}@PjXgw?ORnrcTUh>fB5kJML~^#b&altD}Jxn~A@7=o zwVFci*dD;~bZk^_TQj)sPSQ9Ozb_f-kE`*>ZX>BiVgu1|EF4cp!inTEBG@YhZKw97 zF}L>MA?mABUeQi(JepY{q{l)&du4?n&DSDpyKROfhP8+;i-Imm;()i#+t;*q)L2(I z^QTM0DI=PhlFfr7a*<$A$zHio8x;$M6mJT2oxO6AHb~Xi)PbWZW13T6mfb0HNJvr} zsFPHkPSXAFUY4aKBNAN#RWa$ta$mJZ3lp}P7qv5$0v%zauYsm4*QN?E;>?iO7xRr` zQzAg}MYKU}h}bLbVO_f>o54?3>!rhe)q;+RQD0WJC#pfGMz!n!Ey!Mx?dZ9+!4Y3J zN#|!T%Zphbsz`$#Y)a{1R>l!Cq9JfBnt6(GVQaaCzEk$fav^oXs+e*5$ zX?ZSY{e(%^#U$k#*0m{){%?kcR?3;=B0JUFW?jx_ueU18dS;3w+IG1as9;D5(pjeinr)=W{TMc&_?e#@Z!u%-e<=) zJ$vBQNosp1);n(YnX=hnP;*+YrDorm=#*S87$*eVZX-X^qdnL6e4WL?!&Sxg^(%cC0^y-A;R8+Qf0t!*m2Mq9^DqSMf{EK;?% zMW+puwO*o2E-XE*(?wI4Yj4=%8Py;2!x*D{qsI-pJS)#l(z{_j+K}i-YFW8}-aW)> zb5I*j@tudYQQg$dk!Z&JZJqy;28*=sukNiDBf6<&3Byau%w_pjYNj%Y@dG3AV2T#P zuxQ7SI45dS73|~H;t*{d5}n$F>YLnWn|Ufp8?9yS@o^K=#Myc#qzxSK>Lztu)O{H< zQ|pBaBE*o2^(om!3k)cwG}9LpqXxDr$=K4{K6%){4rL*l%B0?uieSiSB~z1VIt*D7qDiU9kQeCGaUps@kNPqP*fc-f z#H8DMuSOS@YdaxRi`L+!GiYc>dF4B*p+jv)d6{YEwhJ0TnkPtey_@JfoKiadyeGJM z{JeR{+Y#8(-O<_H)~W_N*ewIApdY=)cCiV&a1u!k>9jiAqfPbDrB|<9#>fM@hoN-3 z8h*lzU`O-L+atH@FhdLbs--{e>~R(of!g@Fhhx^*l3btv$GZPz=m>a2r$tBl>m4{0Tk9THjF2*XfrO^QZKA z#e9SQi(>v4eSwXBSuuZ1$Jyvt7~NMD^M~{ZYgH-cIl4?S&(jLU{29HK%~;MxYiRu( z^ZQKCE^L>nk$yP8JEPXcKA>}M)U;ZHlc`&CRbFM#nM+~#n+vETMlAY=Uq3(QZZh<^ zEota?zEO_i;aaiS$l*5tv*BUJLX}F*T>bf6eY)1=b-|@LYh86!O)!_q$y(ROqkzW& zPXHbRd=79Na00X7>}p*dpY~lKQkn1KAAym|-sI)4Yh8^#BCP~V;MiWmIz671iyEs9 zATHL5W~WY1V3DePwBE#>x=Fhpm!*9 z=$%Rl-Jr~)j`?Dl%h!8XW3`LgtV-mScz1o#7j#W=`xG~|DNAXAvYd*_tyEGfsa?69 z7An;)SPRtbp0cW|R&~v)vR3u3RZZ8r(nr4Napk|B-TkqFP$IIYKh8dVoZ2HA~m~&ea#t1HnV_f?>5SPOu?h?_!;L_aoADum#rB@<+!)(w&H{9e(aNools~g!B zN0(odmH0SaIwgy^2oH!6O+Vn(POmH8yy=}GKfK(aFBX*_oTtUOT=10wI69e6RSdcT z7r-1Qrpi8(^KS8hpX=<#eBg)m3!2eV%ipr26=w$Q&*4ql~yuN?Xj{j756SM;cIxST$$9B!ol zpd1d+e^d^S(#Mp;-=R+^_di7cNxA=f^z%x(2reUiH(W+~2V6$_Ubu&JFWf`=6L1e{ z1MVRmfqO{z!9Aq!qyMU;qx5S^`hNOvO8RknQb|7vCzJj>oJ{&D`l6B^r{7f4FVmNl z^l9cDhM6u8FkL=!FY}S98EC^7bMecw4iJVrRAEEMDb(=HDrJ?I_?IXTfXE0&iRyeh<8X?0aT**ARf(!$oD9=j{JddoM zBG-jDvx=WgN}EbuzxYW?Dj6jsQgMnax&=4oVXln@BQ35?Fk+lw)U)~2IrC5praQ6c zVHaK&E^V}K%^4NKAv!O^uFtCGXik?7>kd7m!bcCM5Ck+$$sR0Je5PWeVq}_a6anu% zVWJ`*%;Lde%SeT^fYqg$eL?XfSY<9&bg&Q4y4_!^l$P@)a)|okU$et+P!`gVvVd+^ zO6gu@F71GON+`wYM?U3o(a@O+7v0N>1PXkBcwgXnu&akXWTN7=N_%A?>pkOHi$|0T zR+TrgGZoCn&Q{!DWXtkKHc@f2m04usc32N?C~hTFvOWFCDUaxdwJ6MFW^lTSmdeG} z;)ld?AZ4gn+$t(57H1busQauK`xvJu*CKAO z^4SW6%A(oKzEs$Q?AT{ntITb6RO8lqduoI|JW?Z;t;!?&wy!;-igPAZJhIq>i`l76 z<^9{7-CP7_q!LWf+`_GNDYr|u7L)}$Ez0-BIH;E74Yh|KQV8vl`i(Kg*qM9 zfqlor-en(P68R%N?;%vrAL*p$`rMg6Hp6083Eq!*B=Xp|0^PuMZs|NX z_CB({2yTtIUS@E=T$^=yxL$^>4={D!%|4gU&3->TI!>KG;Ahy!voiMPWbW|1`3q6< zu?hng=OD;lNS!l(0o50!&bd?P4)~`>MQ5)0?&!#jd`Is2yY_w0U&jB5th_M)wdBOb z=akCAgV;nr(6o53BtV4g200Zn!|8rSLNIB`CJ-JS%D@T z__EZVK9?fSfiCI`F1@{zi4QNE zb7S`esrMfLj`~%bp^6>Jw^@os+bPZmrsV&IQx;;N1-*OVAt?e^zW#w5+F!V#{R(!z zY~z3M@?~DW#LIu@<%_)hCQim7KpflyIbqmYs@s<>QAL>Euu*n6z}&1N_iMLRyWge4_xqL)*p zA6?^N86TWnnAYg;>hDQPIawA?Oh4M>5oi9^YstCSV5b%B59xWOwM6!C-A7sK(|Y8p zcWGk&C&!&}fcMC0Gyh}5^L2<_P)|Y?FZ}!5kBX+1z*07iEJ=P=lNczNLj|&0m zE>oV1ihU|9`V!N}PkUJT1|JPW@>P8-+5;-%F+w2C*OPKVBo6|f5K73)0wLc4 zOrZZO0bbZfNHJg`U_vjQHt+cTB!{Red8wTsBbc1+mo9vM@N;jtE5Mm?qtvS3Cqq}3WNPS_GWT&O~}btp-ss?3nU$!?%Zvb_$1 zEXT_xtp*|V#yIy=>uf4wK)i>{X5s%5=zh|W5-@E74xjj>df!zGX-Yte> zv7pr#9HwILE426$^KNsIH*B0+EG=?|z1Z|>Jtq zWF^;)#K-~A2&Y+$-La!Dlom5Q^0$cpozi0KZw6f|6C}5Ykjf34la^uH3PJjiAT6;> za7vNJq>s*H#e7yQU`6SMlNw#fin0wS*B8#rkd3D_I+r@`#2`={?_KZMLCD6F zb?Y{s(rKZ_#@L*?McU%rob|30qwub`b4otMC?5{37p)N-KP|r)>S1-s#f;T(59r!?7urwhlRgmZvh42*8ckQRsak^;U7*D`+m2xwlTkMp z|EFop{4BHJmME5J%ob-cXo8{B9}h;sQ1IekjSbxB5RSm;q94FMYO#+p_AbueVk~pU z+|qLv%IzP2LoubHgevNAmb-#zW8dhMnext dup 0= + until 2drop cr ; + +\ words name ( -- ) prints the words in the forth dictionary +: words parsenw _words ; + +\ .long ( n -- ) emit 8 hex digits +: .long dup 10 rshift .word .word ; + +\ st? ( -- ) prints out the stack +: st? ." ST: " _stptr COG@ 2+ dup _sttop < + if _sttop swap - 0 + do _sttop 2- i - COG@ .long space loop + else drop + then cr ; + +\ variable ( -- ) skip blanks parse the next word and create +\ a variable, allocate a long, 4 bytes +: variable + lockdict create $C_a_dovarl w, 0 l, forthentry freedict ; + +\ constant ( x -- ) skip blanks parse the next word and create +\ a constant, allocate a long, 4 bytes +: constant + lockdict create $C_a_doconl w, l, forthentry freedict ; + +\ waitpeq ( n1 n2 -- ) \ wait until state n1 is equal to +\ ina anded with n2 +: waitpeq _execasm2>0 1E0 _cnip ; + +\ locknew ( -- n2 ) allocate a lock, result is in n2, -1 +\ if unsuccessful +: locknew -1 4 hubop -1 = if drop -1 then ; + +\ (forget) ( cstr -- ) wind the dictionary back to the word +\ which follows - caution +: (forget) dup +if + find if + pfa>nfa nfa>lfa dup here W! W@ wlastnfa W! + else .cstr 3f emit cr then +else drop then ; + +\ forget ( -- ) wind the dictionary back to the word which +\ follows - caution +: forget parsenw (forget) ; + +\ free ( -- ) display free main bytes and current cog longs +: free dictend W@ here W@ - . ." bytes free - " par + coghere W@ - . ." cog longs free" cr ; + +\ ifnot: name ( -- ) - bedingte compilierung; wenn name schon +\ im wörterbuch vorhanden, wird bis zum nächsten semikolon +\ der eingabestrom ignoriert +: ifnot: parsenw nip find if begin key 3B = until + key drop then ; +\ bei konstrukte, die keine doppelpunkdefinition sind, muss der +\ block mit diesem Wort abgeschlossen werden +: :; ; + +\ --------------------------------------------------------- BUS + +\ bin ( -- ) - umschaltung auf duales zahlensystem +\ : bin 2 base W! ; +\ +---------------------------- /hs +\ |+--------------------------- /wr +\ ||+-------------------------- busclk +\ |||+------------------------- hbeat +\ ||||+------------------------ al +\ |||||+----------------------- /bel +\ ||||||+---------------------- /adm +\ |||||||+--------------------- /ram2 +\ ||||||||+-------------------- /ram1 +\ ||||||||| +--------- a0..10 +\ ||||||||| | +\ ||||||||| | +- d0..7 +\ |||||||||+---------++------+ +\ 00000000000000000000000000000000 +\ bin 00000111111111111111111100000000 constant dinp hex +\ bin 00000111111111111111111111111111 constant dout hex +\ bin 00000010000000000000000000000000 constant boff hex +\ bin 00000100011110000000000000000000 constant _s1 hex +\ bin 00000000001110000000000000000000 constant _b1 hex +\ bin 00000010001110000000000000000000 constant _b2 hex +\ bin 00000110001110000000000000000000 constant _b3 hex +\ bin 00000000010110000000000000000000 constant _a1 hex +\ bin 00000010010110000000000000000000 constant _a2 hex +\ bin 00000110010110000000000000000000 constant _a3 hex +\ bin 00001000000000000000000000000000 constant ?hs hex + +8000000 constant ?hs + +: [inp] \ ( -- ) bus eingabe + 7FFFF00 dira COG! ; \ dinp + +: [out] \ ( -- ) bus ausgabe + 7FFFFFF dira COG! ; \ dout + +: [off] \ ( -- ) bus aus + 2000000 dira COG! 0 outa COG! ; \ boff + +: [end] \ ( -- ) buskommunikation beendet + 4780000 outa COG! [inp] ; \ _s1 + +: [hs=1] \ ( -- ) wartet auf hs = 1 + ?hs dup waitpeq ; + +: [hs=0] \ ( -- ) warten auf hs = 0 + 0 ?hs waitpeq ; + +: [s!] \ ( c ctrl -- ) sende 8 bit an einen slave + [out] [hs=1] swap ff and or outa COG! [hs=0] [end] ; + +: [s@] \ ( ctrl -- c ) empfängt 8 bit von einem slave + [inp] [hs=1] outa COG! [hs=0] ina COG@ ff and [end] ; + +: [b!] \ ( c -- ) sende 8 bit an bellatrix + 2380000 [s!] ; \ _b2 + +: [a!] \ ( c -- ) sende 8 bit an administra + 2580000 [s!] ; \ _a2 + +: [b@] \ ( -- c ) empfängt 8 bit von bellatrix + 6380000 [s@] ; \ _b3 + +: [a@] \ ( -- c ) empfängt 8 bit von administra + 6580000 [s@] ; \ _a3 + +: <8 \ ( -- ) + 8 lshift ; + +\ [b.l!] ( 32b -- ) - long an bellatrix senden +: [b.l!] + dup 18 rshift [b!] + dup 10 rshift [b!] + dup 8 rshift [b!] + [b!] ; + +\ [b.l@] ( -- 32b ) - long von bellatrix einlesen +: [b.l@] + [b@] <8 + [b@] or <8 + [b@] or <8 + [b@] or ; + +\ [a.s@] ( -- ) - einen cstring von administra empfangen +\ und im pad speichern +: [a.s@] + [a@] pad 2dup C! 1+ swap + 0 do dup [a@] swap C! 1+ loop drop ; + +\ [a.s!] ( cstr -- ) - einen cstring an administra senden +: [a.s!] + dup C@ dup [a!] \ ( -- cstr len ) len senden + 0 do \ ( cstr len -- cstr ) + 1+ dup C@ [a!] \ ( cstr -- cstr+1 ) zeichen senden + loop drop ; \ ( cstr -- ) + +\ [a.w@] ( -- 16b ) - 16bit-wert von administra einlesen +: [a.w@] + [a@] <8 [a@] or ; + +\ [a.l!] ( 32b -- ) - long an administra senden +: [a.l!] + dup 18 rshift [a!] + dup 10 rshift [a!] + dup 8 rshift [a!] + [a!] ; + +\ [a.l@] ( -- 32b ) - long von administra einlesen +: [a.l@] + [a@] <8 + [a@] or <8 + [a@] or <8 + [a@] or ; + +wvariable b[lock] \ nummer der semaphore für den + \ zugriff auf die bus-hardware + +\ b[ ( -- ) bus belegen; wartet bis semaphore freigegeben ist +: b[ begin b[lock] W@ lockset -1 <> until [inp] ; + +\ ]b ( -- ) bus freigeben +\ ! busclk bleibt auf ausgabe, da dieses signal sonst +\ kein definierten pegel besitzt ! +: ]b [off] b[lock] W@ lockclr drop ; + +\ administra-kommandoformate + +: b[a! b[ [a!] ; +: b[a!a! b[ [a!] [a!] ; +: adm:fkt! b[a! ]b ; \ ( fkt -- ) +: adm:fkt!b@ b[a! [a@] ]b ; \ ( fkt -- b ) +: adm:fkt!b! b[a!a! ]b ; \ ( b fkt -- ) +: adm:fkt!b!b@ b[a!a! [a@] ]b ; \ ( b fkt -- b ) +: adm:fkt!s@ b[a! [a.s@] ]b ; \ ( fkt -- ) +: adm:fkt!s!b@ b[a! [a.s!] [a@] ]b ; \ ( s fkt -- b ) +: adm:fkt!b!l@ b[a!a! [a.l@] ]b ; \ ( b fkt -- l ) + +\ ----------------------------------------------------- SD0.LIB + +\ marker-funktionen + +\ adm:dmact ( dmnr -- ) - marker aktivieren +: adm:dmact 19 adm:fkt!b!b@ drop ; + +\ adm:dmset ( dmnr -- ) - marker setzen +: adm:dmset 1A adm:fkt!b! ; + +\ dateisystem-funktionen + +\ adm:volname ( -- ) - name des volumes im pad ablegen +: adm:volname 0C adm:fkt!s@ ; + +\ adm:mount ( -- err ) - medium mounten +: adm:mount 01 adm:fkt!b@ ; + +\ adm:unmount ( -- err ) - medium unmounten +: adm:unmount 18 adm:fkt!b@ ; + +\ adm:checkmounted ( -- t/f ) +: adm:checkmounted 0D adm:fkt!b@ ; + +\ adm:diropen ( -- ) - verzeichnisabfrage initialisieren +: adm:diropen 02 adm:fkt! ; + +\ adm:nextfile ( -- st ) +\ st = 0 - keine gültige datei +\ st = 1 - dateiname im pad gültig +\ bei gültigem eintrag befindet sich der dateiname im pad +: adm:nextfile b[ 3 [a!] [a@] dup if [a.s@] then ]b ; + +\ adm:fattrib ( nr -- attrib ) - dateiattribut abfragen +: adm:fattrib 0B adm:fkt!b!l@ ; + +\ adm:chdir ( cstr -- err ) - verzeichnis öffnen +: adm:chdir 16 adm:fkt!s!b@ ; + +\ adm:getc ( -- c ) - ein zeichen aus der geöffneten datei lesen +: adm:getc 06 adm:fkt!b@ ; + +\ adm:eof ( -- eof ) - abfrage ob end of file erreicht ist +: adm:eof 1E adm:fkt!b@ ; + +\ adm:open ( cstr modus -- err ) - datei öffnen +\ modus "R" $52 - Read +\ modus "W" $57 - Write +\ modus "A" $41 - Append +: adm:open b[ 4 [a!] [a!] [a.s!] [a@] ]b ; + +\ adm:close ( -- ) - datei schließen +: adm:close 05 adm:fkt!b@ ; + +\ ----------------------------------------------------- SCR.LIB + +\ [dscr] ( scrnr -- ) display-screen setzen +: [dscr] 0 [b!] 59 [b!] [b!] ; + +\ [wscr] ( scrnr -- ) schreib-screen setzen +: [wscr] 0 [b!] 58 [b!] [b!] ; + +\ [key?] ( -- c ) - ungekapselte tastaturstatusabfrage +: [key?] 0 [b!] 1 [b!] [b@] ; + +\ [key] ( -- c ) - ungekapselte tastaturabfrage +: [key] 0 [b!] 2 [b!] [b@] ; + +\ [emit] ( c -- ) - ungekapselte zeichenausgabe +: [emit] emit? if emit then ; + +\ ----------------------------------------------------- TOOLS + +\ cls ( -- ) - screen löschen +: cls 01 emit ; + +\ .tab ( -- ) - tabulator +: .tab 09 emit ; + +\ .err ( err -- ) - fehlermeldung ausgeben +\ 0 no error +\ 1 fsys unmounted +\ 2 fsys corrupted +\ 3 fsys unsupported +\ 4 not found +\ 5 file not found +\ 6 dir not found +\ 7 file read only +\ 8 end of file +\ 9 end of directory +\ 10 end of root +\ 11 dir is full +\ 12 dir is not empty +\ 13 checksum error +\ 14 reboot error +\ 15 bpb corrupt +\ 16 fsi corrupt +\ 17 dir already exist +\ 18 file already exist +\ 19 out of disk free space +\ 20 disk io error +\ 21 command not found +\ 22 timeout +\ 23 parameter error +: .err dup if ERR then drop ; + +\ .pad ( -- ) - ausgabe eines strings im pad +: .pad pad .cstr ; + +\ .vname ( -- ) - ausgabe des namens der eingelegten sd-card +: .vname adm:volname .pad ; + +\ mount ( -- ) - sd-card mounten +: mount adm:mount .err ." Medium : " .vname cr ; + +\ unmount ( -- ) - sd-card unmounten +: unmount adm:unmount .err ; + +\ mount? ( -- ) - test ob medium mounted ist +\ wird als exception gewertet +: mount? adm:checkmounted 0= if 1 .err then ; + +\ padbl ( -- ) fills this cogs pad with blanks +: padbl pad padsize bl fill ; + +\ .entry ( -- st ) - einen verzeichniseintrag ausgeben +: .entry + adm:nextfile 13 adm:fattrib if 0F emit else space then + dup if .pad .tab then ; + +\ .len ( st -- st ) - dateilänge ausgeben +: .len dup if 0 adm:fattrib . then ; + +\ lscnt ( cnt1 st -- cnt2 st ) - spaltenformatierung für ls +\ cnt - spaltenzähler, st - flag verzeichnisende +: lscnt + swap 1+ dup 4 = if cr drop 0 else .tab then swap ; + +\ lsl ( -- ) - verzeichnis anzeigen, long-format +: lsl mount? + adm:diropen begin .entry .len cr 0= until padbl ; + +\ ls ( -- ) - verzeichnis in spalten anzeigen +: ls mount? + adm:diropen 0 begin .entry lscnt 0= until drop padbl cr ; + +\ cd name ( -- ) - verzeichnis wechseln +: cd mount? parsenw adm:chdir .err ; + +\ open name ( -- ) - datei lesend öffnen und auf fehler prüfen +: open + mount? parsenw dup + if 52 adm:open else drop 23 then .err ; + +\ close ( -- ) - geöffnete datei schließen +: close adm:close .err ; + +\ dload name - datei compilieren; log im gleichen screen +\ load name - datei compilieren; log screen 3 +\ sys name - datei aus sys compilieren; log screen 3 +\ die datei wird in der nächsten freien cog compiliert +\ fl ist für load nicht nötig und bringt in dem kontext +\ die cog-zuordnung durcheinander + +: (load) + begin adm:getc emit adm:eof until ; + +: (dload) + open cogid nfcog iolink + (load) + cogid iounlink close ; + +: (sload) + open cogid 3 dup b[ [wscr] ]b iolink + (load) + cogid dup b[ [wscr] ]b iounlink close ; + +: load + ." Loading... " (sload) ; + +: dload + (dload) ; + +: sys + 2 adm:dmset 1 adm:dmact ." Loading... " (sload) 2 adm:dmact ; + +\ ------------------------------------------------- SPIN-LOADER + +\ (spin) ( cstr -- ) - c" reg.sys" (spin) +: (spin) + dup C@ 1+ + 0 do + dup i + C@ + ldvar 1+ i + C! + loop drop + 1 ldvar C! +; + +\ spin name ( -- ) - spinobjekt "name" starten +: spin + parsenw (spin) ; + +\ regime ( -- ) - startet dir trios-cli "regime" +: regime + 0 adm:dmact + c" reg.sys" (spin) ; + +\ ----------------------------------------------------- DRV:INT + + +wvariable icog \ nummer der drv:int-cog +wvariable lcog \ nummer interaktiven cog + +\ xint ( n -- ) io von cog n auf drv:int umschalten +: xint icog W@ ioconn ; + +\ [cogscr] ( nr -- ) - umschaltung screen + cog +: [cogscr] + dup 2dup lcog W! xint [dscr] [wscr] ; + +\ =n ( n1 n2 -- n1 n1=n2 ) +: =n 2dup = swap drop ; + +\ [esc] ( -- ) - manager für esc-funktionen im drv:int +: [esc] + begin [key?] until [key] + 71 =n if 1b [emit] then \ esc - q : esc-char/quit + 31 =n if 1 [cogscr] then \ esc - 1 : cog-screen 0 + 32 =n if 2 [cogscr] then \ esc - 2 : cog-screen 1 + 33 =n if 3 [cogscr] then \ esc - 3 : cog-screen 2 + 62 =n if lcog W@ cogreset then \ esc - b : break (cog) + 72 =n if reboot then \ esc - r : reset (chip) + drop ; \ esc - esc : pause + +\ drv:int ( -- ) treiber für bellatrix-terminal +\ diese cog fragt in einer endlosschleife ab, ob zeichen +\ versendet oder empfangen werden sollen. um die zeichenausgabe +\ zu beschleunigen, findet ausgabe und eingabe in einem +\ verhältnis von 512:1 statt. per esc-code können spezielle +\ funktionen im driver ausgelöst werden. +: drv:int + \ name und typ der cog einstellen + cogid dup cogstate 10 swap C! c" drv:int" over + cognumpad ccopy + 20 delms 0D emit \ verzögertes cr für prompt + begin + \ input --> vga/video + 200 0 do key? \ eingabezeichen vorhanden? + if key b[ [b!] ]b then loop \ cog ---> bel.vga + \ output <-- keyboard + b[ [key?] \ tastenstatus bellatrix? + if [key] dup 1b = if drop [esc] else [emit] thens ]b + 0 until ; + +\ ----------------------------------------------------- SYSINIT + +: start \ ( -- ) initialisierung hive + locknew b[lock] W! \ b-semaphore + 0 dup cogstate 10 swap C! c" drv:ldr" over + cognumpad ccopy + 5 dup icog W! c" drv:int" swap cogx 1 b[ [cogscr] ]b ; +: _ob onboot ; +: onboot _ob start ; + + + diff --git a/bin/sdcard/system/bel.lib b/bin/sdcard/system/bel.lib new file mode 100644 index 0000000..0034988 --- /dev/null +++ b/bin/sdcard/system/bel.lib @@ -0,0 +1,77 @@ + +hex + +ifnot: lib:bel +: lib:bel ; + +\ kommandoformate + +ifnot: bel:fkt! \ ( fkt -- ) +: bel:fkt! b[ 0 [b!] [b!] ]b ; + +ifnot: bel:fkt!b! \ ( b fkt -- ) +: bel:fkt!b! b[ 0 [b!] [b!] [b!] ]b ; + +ifnot: bel:fkt!b!l@ \ ( b fkt -- l ) +: bel:fkt!b!l@ b[ 0 [b!] [b!] [b!] [b.l@] ]b ; + +ifnot: bel:fkt!b!l! \ ( l b fkt -- ) +: bel:fkt!b!l! b[ 0 [b!] [b!] [b!] [b.l!] ]b ; + +ifnot: bel:fkt!l@ \ ( fkt -- l ) +: bel:fkt!l@ b[ 0 [b!] [b!] [b.l@] ]b ; + +ifnot: bel:fkt!b@ \ ( fkt -- b ) +: bel:fkt!b@ b[ 0 [b!] [b!] [b@] ]b ; + +\ chipmanagment-funktionen + +ifnot: bel:wscr \ ( scrnr -- ) - schreibscreen setzen +: bel:wscr 58 bel:fkt!b! ; + +ifnot: bel:dscr \ ( scrnr -- ) - displayscreen setzen +: bel:dscr 59 bel:fkt!b! ; + +ifnot: bel:getcol \ ( colnr -- col ) - farbe abfragen +: bel:getcol 5A bel:fkt!b!l@ ; + +ifnot: bel:setcol \ ( col colnr -- ) - farbe setzen +: bel:setcol 5B bel:fkt!b!l! ; + +ifnot: bel:getresx \ ( -- resx ) - abfrage x-auflösung +: bel:getresx 5C bel:fkt!l@ ; + +ifnot: bel:getresy \ ( -- resy ) - abfrage y-auflösung +: bel:getresy 5D bel:fkt!l@ ; + +ifnot: bel:getcols \ ( -- cols ) - abfrage textspalten +: bel:getcols 5E bel:fkt!b@ ; + +ifnot: bel:getrows \ ( -- rows ) - abfrage textzeilen +: bel:getrows 5F bel:fkt!b@ ; + +ifnot: bel:getcogs \ ( -- cogs ) - abfrage belegte cogs +: bel:getcogs 60 bel:fkt!b@ ; + +ifnot: bel:getspec \ ( -- spec ) - abfrage codespezifikation +: bel:getspec 61 bel:fkt!l@ ; + +ifnot: bel:getver \ ( -- ver ) - abfrage codeversion +: bel:getver 62 bel:fkt!l@ ; + +ifnot: bel:load \ ( cstr -- ) - bellatrix-code laden +: bel:load + 52 adm:open .err \ datei öffnen + b[ + 0 [b!] 63 [b!] \ bella-loader starten + 10 0 do 06 [a!] [a@] [b!] loop \ header einlesen + 0A [a!] 0 [a.l!] \ 0 adm:seek + [b@] <8 [b@] or \ dateilänge empfangen + 0 do 06 [a!] [a@] [b!] loop \ datei senden + ]b + adm:close .err \ datei schließen +; + + + + diff --git a/bin/sdcard/system/beltest.bin b/bin/sdcard/system/beltest.bin new file mode 100644 index 0000000000000000000000000000000000000000..2c185066162ea6aa9406c98ddcefa1af2742f8b8 GIT binary patch literal 4288 zcma)9ZEO_B8J=11-0dv~K8$T_AmJJkAQ)o2XqLg>VC>??#Q{S@(l+JnJ+o)_&i36o zfi^!}Ddk*{s?w+*REnYs6rnanjY^ZKirOMoifGk8?VqILPob5NI7<9 z?o8MY=ug963x8WcuPL~@;gW#9I_`+cc}Eao30Qms**fGUC;eApl{_OIHsi`)F2FFC9?mXFSId~k?M8=!z(D%*Py#GG^GXw z8`Dm-{_H2yUFY+gM3o4pw1v0jj6&|r_shw=ULhGoGzimR*on}0WM`4gTVi`3Xw3&*v7*S-y*ti6lj$M(ofZiC26(Sn^h~o18TF&dA zmGUYsP1G8ziaQ4F$3k+?i-NOd!3U2lSp7M{$3tnXWwVf@)%&{T!T68)!U%Yw7t4>% ztu8$}_e6z9(_D_1%3LO&%Z-$yD^(p&@T9Dxr>H0P<^y^i7txfKq@oqRUtk4SXaT)e zrl@MOpQ6&AT9k32K;`2vRm!+rPaEt>J87fr1w+|Cfh07vn+lJgko7H?oDh-nu&0K< zn4l!v!Wh#Q-mwKk>0h>mmDU#CM3U2`^j+F1Ix;>^% zl-D%#QduieK}+eZdx*}fWu3DR(UGSe(7)9B_-pE(vV}7y>unXr7A5pXS?CeUNxiZ9 zT%#52n@XL`CdN~lY&?^V?u&a~ESpZ8+Oe;HaEQDZPmH+nR3?`Fb}M;4p2)`2(QVD` zhdQSc*=TE&97wzz-!U+LVtmQjBU16m-hE3>W@E!d5qbuOmL#ajxR*%9n={froHR6& z9{0SX6O|bI$6rY;!|6HP+k3G8VE>UNIm>QT^y@>V=;+|H-}F~D)O)07aA5H8l6q=+ zU>s|Pc_F&B=jh?VgU!iWaWjFLlER&68r_ymq#D?R|`(h&}GZV3q zcy#Mf1|+v7Jkt$I_1W%LKGS`H&^;8Fa(&nl zEANAJ|F&6Mj9cNH?f&HjqG*_&Hy7Tt2qCWpyUBK{lQ)2OC?Oxv2)TjwKhz*0jgU3K zW55=GYX<2-+YbzB5%OcS7lGdZ9{|@iodl~0X$EZI%fMHG!@x1%CBOm3fC=Db;8oxU zz)yi+0KWo$2mBGZ4*Uc77qCVrWDqzFybk;p_?vE!JAlRr*$(spqrfz)C4XlI`3%?) zFi3jDDxmP)JtXZ+{h-XoMc4>|GkS$}gkG_D+~@z=$+HeFx<<8ei*jbt+;?l4ZaMV{6vY%zI^GYn z-g)lYvnegZv#Gbv+ui)UMQzqZ*!Gx3h0dC&!3C~hn3iY zk{9&jpwQ@h1unFpx3kcTvnH8W3l$@*#Udi@ut1Ve5@z6PXDwV*r}6E|f`nPZxHXkU zo1dbJwuqIL$xMP)(9&27h{#?l+l3Bc@|`$MSoJQf-!SMX7Sa+rWjXww8654SVh5{h zYy0_MNCKa$TO9X+8KI8*U$HaK>fF)ihd1cqHhH6lQh=}t9tb1X4nmhI^{$=9QKQ}!s z%SBdW6TabO%`_EW7o;p6Ic3FMGG(ifvQ%M?|gCOw}2D2#7s*nC3jx5udC_w76riZnSPNfSOPNxAFc+H(B{EN=44YFgJ`^N^{19Mo^ zE?2C$DXKqTJFZ_$?(Ujo-E literal 0 HcmV?d00001 diff --git a/bin/sdcard/system/charmap.bin b/bin/sdcard/system/charmap.bin new file mode 100644 index 0000000000000000000000000000000000000000..60406b80f602c010330b7b9c8490c1df61f656db GIT binary patch literal 1924 zcma)6U1(fI6rP#AbNA+UC2NxAr&V`B6G61>-tF8>8eqtBln8$a{k zn55I6EqySq5YQSY+1y~2Z1vY@6fnR{%fO`Oq5z-Dk3Oos%2i^ld2fhJ*h*_iwbQ*+= z0IvdX0UsD04C13K2)i<&y;GjMHo;_PByndp( zSS9BQfwpoju!d^TtzD$U8XON8I|nD0#usT(B&Bw=u)2Vs7TMWp_j@JJjVV!qa(&N`t4U$5Vc1i3U6+X6f{5 z4K{Ea6;_Qn{D5s9c=0d~3O%70aiImhC!(mpQ>w0BD$ny?hscV@&61cU+$vI^_X^os zVHL{bg!f5ndwveKK2J665Nl2qGYeXz#dt4>s9q_%Q9yW7?AnWjx8~5lWzi`#(%Z7& zNXu_Xwmo&)w~kXWz`l~k)VgfFEi-bUO^(VlZLPecrQo3KUM~`rCX^4yF%`?^ZFE89 zLwaSrL*JiTx$C;YBnu8bTol4Mg<*}hPSGKFALoG+u(mAvyWRF_9hSmn- z%_bSXDP)_pp2H!w^u9A_y+X+FTK}oxo1Tmdb*6IqkBQ?^&R}9eF`PkDGxd>TzMmg7 z!V^4FIi2CuD$P|Wc5BMSs9e9U(XRmktf3E4rb1m zR(+m`xpJLn78hiC&t_tAp|ZMCTQAGRp4z!=>V>ge=TB?WY*~@YA*n=#AKgcp7HH-T@a3R<-HZu`GkUBz*tQtCB4_$B{`5=@Jlzc+V zhr+fN){`DhsGfg^ce>NbIb^ZpGWdJh( literal 0 HcmV?d00001 diff --git a/bin/sdcard/system/cog.lib b/bin/sdcard/system/cog.lib new file mode 100644 index 0000000..14c242e --- /dev/null +++ b/bin/sdcard/system/cog.lib @@ -0,0 +1,74 @@ + +hex + +ifnot: lib:cog +: lib:cog ; + +\ cog special register + +ifnot: ctra 1F8 wconstant ctra :; +ifnot: ctrb 1F9 wconstant ctrb :; +ifnot: frqa 1FA wconstant frqa :; +ifnot: frqb 1FB wconstant frqb :; +ifnot: phsa 1FC wconstant phsa :; +ifnot: phsb 1FD wconstant phsb :; +ifnot: vcfg 1FE wconstant vcfg :; +ifnot: vscl 1FF wconstant vscl :; + +\ this words needs to align with the assembler code + +ifnot: _faddrmask : _faddrmask 1 _cv ; +ifnot: _flongmask : _flongmask 2 _cv ; +ifnot: _stptr : _stptr 5 _cv ; +ifnot: _sttos : _sttos 7 _cv ; +ifnot: _treg1 : _treg1 8 _cv ; +ifnot: _treg2 : _treg2 9 _cv ; +ifnot: _treg3 : _treg3 a _cv ; +ifnot: _treg4 : _treg4 b _cv ; +ifnot: _treg5 : _treg5 c _cv ; +ifnot: _treg6 : _treg6 d _cv ; +ifnot: _stbot : _stbot e _cv ; +ifnot: _sttop : _sttop 2e _cv ; +ifnot: _rsbot : _rsbot _sttop ; + +\ waitcnt ( n1 n2 -- n1 ) \ wait until n1, add n2 to n1 +ifnot: waitcnt +: waitcnt _execasm2>1 1F1 _cnip ; + +\ waitpeq ( n1 n2 -- ) \ wait until state n1 is equal to +\ ina anded with n2 +ifnot: waitpeq +: waitpeq _execasm2>0 1E0 _cnip ; + +\ waitpne ( n1 n2 -- ) \ wait until state n1 is not equal +\ to ina anded with n2 +ifnot: waitpne +: waitpne _execasm2>0 1E8 _cnip ; + +\ lockret ( n1 -- ) deallocate a lock, previously allocated +\ via locknew +ifnot: lockret +: lockret 5 hubop 2drop ; + +\ locknew ( -- n2 ) allocate a lock, result is in n2, -1 +\ if unsuccessful +ifnot: locknew +: locknew -1 4 hubop -1 = if drop -1 then ; + +\ cog+ ( -- ) add a forth cog +ifnot: cog+ +: cog+ (cog+) ; + +\ (cog-) ( -- ) stop first forth cog, cannot be executed form +\ the first forth cog +ifnot: (cog-) +: (cog-) nfcog cogstop ; + +\ cog- ( -- ) stop first forth cog, cannot be executed form +\ the first forth cog +ifnot: cog- +: cog- (cog-) ; + + + + diff --git a/bin/sdcard/system/debug.mod b/bin/sdcard/system/debug.mod new file mode 100644 index 0000000..937129d --- /dev/null +++ b/bin/sdcard/system/debug.mod @@ -0,0 +1,65 @@ + +hex + +ifnot: mod:debug +: mod:debug ; + +\ keycode ( -- ) - anzeige der tastaturcodes +ifnot: keycode +: keycode + begin + 0 key? if + drop key dup dup ." code : " emit ." : " . cr 1B = + then until ; + +\ +\ Noisy reset messages +\ +\ print out a reset message to the console +\ (rsm) ( n -- ) n is the last status +\ 0011FFFF - stack overflow +\ 0012FFFF - return stack overflow +\ 0021FFFF - stack underflow +\ 0022FFFF - return stack underflow +\ 8100FFFF - no free cogs +\ 8200FFFF - no free main memory +\ 8400FFFF - fl no free main memory +\ 8500FFFF - no free cog memory +\ 8800FFFF - eeprom write error +\ 9000FFFF - eeprom read error + +: (rsm) state W@ 2 and 0= swap +\ process the last status + dup 0= if c" ok" else + dup FF11 = if c" DST OVER" else + dup FF12 = if c" RST OVER" else + dup FF21 = if c" DST LOW" else + dup FF22 = if c" RST LOW" else + dup 8001 = if c" COGs OUT" else + dup 8002 = if c" hMEM OUT" else + dup 8003 = if c" ROM WR" else + dup 8004 = if c" FL" else + dup 8005 = if c" cMEM OUT" else + dup 8006 = if c" ROM RD" else + c" ?" + thens + rot if + lockdict cr c" ERR : " .cstr swap . .cstr cr freedict + else 2drop then ; +: onreset (rsm) 4 state orC! ; + +\ .byte ( n1 -- ) +: .byte <# # # #> .cstr ; + +\ [if (dumpb) +: (dumpb) cr over .addr space dup .addr _ecs bounds ; ] + +\ [if (dumpm) +: (dumpm) cr .word _ecs ; ] + +\ [if (dumpe) +: (dumpe) tbuf 8 bounds do i C@ .byte space loop 2 spaces tbuf 8 bounds do i C@ dup bl < if drop 2e then emit loop ; ] + +\ dump ( adr cnt -- ) uses tbuf +[if dump +: dump (dumpb) do i (dumpm) i tbuf 8 cmove (dumpe) 8 +loop cr ; ] diff --git a/bin/sdcard/system/eram.bin b/bin/sdcard/system/eram.bin new file mode 100644 index 0000000000000000000000000000000000000000..7b637aab141ef7f3f425dac29fee1bd8cd437c0a GIT binary patch literal 8512 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 P)WL|)F<_zxcfkJv9xm05 literal 0 HcmV?d00001 diff --git a/bin/sdcard/system/error.txt b/bin/sdcard/system/error.txt new file mode 100644 index 0000000..17013b3 --- /dev/null +++ b/bin/sdcard/system/error.txt @@ -0,0 +1,40 @@ + +Reset-Fehlercodes: + +0011FFFF - stack overflow +0012FFFF - return stack overflow +0021FFFF - stack underflow +0022FFFF - return stack underflow +8100FFFF - no free cogs +8200FFFF - no free main memory +8400FFFF - fl no free main memory +8500FFFF - no free cog memory +8800FFFF - eeprom write error +9000FFFF - eeprom read error + +.err-Fehlercodes: + +0 no error +1 fsys unmounted +2 fsys corrupted +3 fsys unsupported +4 not found +5 file not found +6 dir not found +7 file read only +8 end of file +9 end of directory +10 end of root +11 dir is full +12 dir is not empty +13 checksum error +14 reboot error +15 bpb corrupt +16 fsi corrupt +17 dir already exist +18 file already exist +19 out of disk free space +20 disk io error +21 command not found +22 timeout +23 parameter error diff --git a/bin/sdcard/system/flash.bin b/bin/sdcard/system/flash.bin new file mode 100644 index 0000000000000000000000000000000000000000..cf566e52b1a0fbf6b57793171e60ab861a12c4fa GIT binary patch literal 7164 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 M%lS_R{V1CM25M}uoB#j- literal 0 HcmV?d00001 diff --git a/bin/sdcard/system/fterm.bin b/bin/sdcard/system/fterm.bin new file mode 100644 index 0000000000000000000000000000000000000000..51166a88a56934aaa62bd7337972a10bec2479bb GIT binary patch literal 2264 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 literal 0 HcmV?d00001 diff --git a/bin/sdcard/system/key.lib b/bin/sdcard/system/key.lib new file mode 100644 index 0000000..45204a5 --- /dev/null +++ b/bin/sdcard/system/key.lib @@ -0,0 +1,17 @@ + +hex + +ifnot: lib:key +: lib:key ; + +\ kommandoformate +ifnot: bel:fkt!b@ \ ( fkt -- b ) +: bel:fkt!b@ b[ 0 [b!] [b!] [b@] ]b ; + +\ keyboard-funktionen +ifnot: key:stat \ ( -- stat ) - tastenstatus abfragen +: key:stat 1 bel:fkt!b@ ; +ifnot: key:code \ ( -- code ) - tastencode abfragen +: key:code 2 bel:fkt!b@ ; +ifnot: key:spec \ ( -- spec ) - spezialtasten abfragen +: key:spec 4 bel:fkt!b@ ; diff --git a/bin/sdcard/system/keycode.bin b/bin/sdcard/system/keycode.bin new file mode 100644 index 0000000000000000000000000000000000000000..9ffd612e80e10a73bc2a716ae69ab6465efdd711 GIT binary patch literal 1896 zcma)6&u>&k9G{uKdHeRcq)TbH<;S7x!EH2<`nK~JSg{a+NbJ>LQDV2uF0Sb>Pxri|)aFoVyka}s*iw6=CqyK>5!9?nTgxy4mnouk2XXd?DOgPx&^ZhaNnQy=I zozFh9dfPeoW0vUDVQ-X7c`d?dmUyH^2pK&%N~p^yy)fgl9mHh=6_{*|D#=_nL@#8p zOqI(9lh9>*Oqxql9n)MkqGV&k?|p@0eZf18lcQ%UOQ+7Miunil`^623LmjdJT%?42 zf(};Uzo8!a8U6wA2hanyF^}wKgyex2SeDe`KL9QQp8}r&UowYu;fMMN*#qnaiogM2 z5;z9D2Al*=0}bE?@B{E0u-!pz$0H|zX~Z7_%fM~mCufk1bC0|ZyboOE*aKF8Z-Eh) zkn_N@>yT!-u4?mVUfhSk+>?-(-fdP+@0(wmCo`4E`m(B9Px&a7jQd0!?C<@>Cyv-) zod@#4hVO)B=XomR1MIEyA~l?Az;!ODFv&6(q8x``@S;7s%qNc7;5wf;0ZO+bGhP~; z>IyHW&j+Fs^KYmQFA6zXW#_K59jmg$}!C*}Q0-{rqxx zSX>Th$n%6hTMnpnc%CYr*SR{4cwRK<>`EIx3cF18n8HDP9POY%1>7MT2m!Ml~-8+23SM%2R}oNpEeT1>aeqmi7dzWtwS#megXr z03y1#m7OQEFi8mCF4p}e!uyMuhUd{Lu2o1c21-2gQ`O^C?&Y~s>FW2SCVj7<^kY9u zmHtzXcX&=$-<;XwWTthv@zCc~j`M=_XWvM_9Y{}iC0nb$qP^Wz9O%nRr+Q2F-I(U?1+UWbZyEK;<@T8PD0-8_R8+HrC#U8#;jbSk5r+T11rM z!)84Q<*q}kq1<82pfN+n6AD2r`yo0BeBWvYpIPj97gG(zpa?hwh zW@G1B2PNP{Mbu#Rm3CXGush3|!o-)_ZSzb<6M0d$Z-db#L{AOks|j*VErc)3~PW`@J5C&Yeso8EmI!>IY@2;ymo| zeU{XiGo-ngRHs5m_;{!|e}WVm(w$7VuEk>={r#(-(uQ+46KsA-igAQb31lQx{KZkn zl(?Hgd`)#jkd^Nrot@IJuH#ZgEuXn3`~RyQ9g9itA9&;s2qV8(7FLN)Rv0aAt{_Cg z^wG0Z5em{k7|9yZX)C(uDdnTMd}PXJZ27pbZwp(cCknOt4~Q~DgT*NDvs{~*LX3MO o$tFpkNk)(a8o#~ZS?l-%8 z7pI`AC%t(;^WK~Hw{t@dzaVGTFnO-|bW66O(y}ht?7O2uCS|~@4TSs+_)3|O+W?Fb za?DT2i++V{56I-+fI{8_d|M&pM}T91mjR~~nXC(jq+<9DDSM}`ksh7&>14yLn{NE# zrkncol~?WTxt3&eW=7wTOPS?N{#yO~FQN-ssi2=tBr;}3QwLMof_Z+wPSq6)gH|eO z779W+S1Rfo?lSYm`7U7+(eE~sgBFgwyHq;>28OWNVHWF7=M(2`c4ad)BQu>##4|gD zUC}HQv*NtLY-av>5nTje>Twul^F=*gD(o-^Y8J`N{4-oSqMOOg4!AA2mabU_Av*^Z z2H|Q$JahNQl3LT%1#vC5_&_2bhXtH!WV30d%zUPlPMdih9dLQ?Z19<^ZszmZJV_LW z3wkM&&XzJo({S0rY(8Jg)!9;}P|As*u%F2m^#pXGnM|4bdDckg=W)(v-i#Z1Hj^4A zD7BtV=t5efp>GZrv-$dFKASBP;U!tn6QxwDMvEg*_Tn%>0|)Ocl+s@0d2;|J9y5>| z(7mvcL$Xc_hw+q%WLP)L$wJYM`$CauBf>M1g*){`-Zb?>E*t@tnG6_n^WOHe5!@K6?+9<58A`^bv)9pssTWuFo|3VZKt%dHk%aFngvk>`;a^ zCiaKAhmfdj ze-r#it*T$53uJq@G5U=LhiQ`SBAB4Vgk^gN7|mf8%Jyww7CMY7+n)im#9>0Ry%CJw zs#1vt<#nL1aA-yD1ii|k8|8M;R|^Awvn)4>61GXB+r^4zL@hIwbM7SK+&2Ul3Bkoc zypP<$$qW&nBFUQt>=@=iX$Kh?#+azPM}!k;boVR5A6zeyMjv?2p*gy;)Z6_lB;Ed> z8%(qBjcNA%+^5+O@CMD^%Vo`eh*Qn}7WZrR!#tqb-$BFeM|e=Pf527Eev~(A_K$f; zvmfW0X8)8g(CnvplV(4|!e4~d&?S#Ilq`)N)@AmM14?pVR zXFPn=!!LUHPaZz);rCs9{{j!Ud$`NPF%NHcFzSwp#0}RWzOJzNsxY6yMmrrd384*K z^ zMI>x?s&P=_E3xSYwqN2|F#kI|N#wTx22Js3y`yL|5rLyyG@!~(+a>5|G*BA>wMnY0 z!$B>7QRB738!Ehaxf8fk;Juym(i+_xxiF=gwRkL`bbt=ATtNug7}!ACC7JBUao+=e z8u*A5Ca(g&DJi7EM~DV!1uO?#1-J(ADZu9ew*%rng=B$CfO~ymavb;%fHwe>fcJbd zS&R4B?SMRB81NwA0N}fT9|C>?coJ|F@B-i@K*hUl9bg+E1K1-gO=c+)Kh z^wJixpDN@RfWH9VhfKm-uMyAzC;|Qqknrxy$J64E@#-!RNFToqU(TC5y6}!517^y> zaU<@JEo7*o=pz%B<;BoDpiw*lpu5xhiG^3uBb%)xY|OrCCW_K@)@H-yBY6G__9%n z(MD{`ltzuk$&Il}iKUIyfnsWmS+Q!yS761=6JxQBY%D6p=n6tR<57vrbcJNl71rXk zl%gxxPJEI!a4J^K`wE^8t!w-1RKT@^hb1oM>0WvPr`PqD*Yz)}%PyxYV2{%g!D`Rm z6f#C55+9_IDB*d72GVRNp~0kN(Fo&Bd0$>a7ikw)PT`M?c2!D}qc%^gD8k&8BSCtip^^qEu z4C^dkQ=#ov;?{w7In-~(X3yZinXjP{t`6N2{8E%FR+alsC9b!WWfJRdxP{A!*|Dq}PH9(2IpU8skf^IUM5`iKRs>i^Q_{n!}7Q5libehkFBa zbENMGwEf+7(Bqlp0HWJlr8gYdP8NQ5$*Lmn$DKcd^p}K zyF2JHZ#xz57dU*X;u4BSRFJg6+a|;~@UV*%2Vo>&VTwz<(>iF|%!pNoe0e75eYP#S zCx&AMOFJ!G;mtcj=Kpudj^-zZ+~tMbRSQ`Ro)ddlJ!H`(ge(w3cA9_(DT@K!Zx-q>d!Z&iI(Je5qb*?u;2MxA@E z|K(Ia(&P=(=@hHH7D{m+)=E4Ol|w^-#2S9j$dK+(#HAX1LduvB_Yshd@7ORAW#!RP~0Tt=5(qB(>J! zjT5}-!r8IhVY1dYpHrKe7(aI`oJo|!Ow3|U0ul~`H)OV^;82P(F|uOlENAFapWr^_ zx=#uBA;-PzSalpblkQEZGyhRyh@xRdDL8sLuoX1&1{3y}2Env}iCXyjcA|EuAeuN) z<6sItT<3*31a0R9aM2wl>wJE4DgH&SBs%#ck;%VF3sLZ&xB8BbE6U~azA(O}b{ul) zB=?=>;kUkKaczPJCQs_N8a$~VVW%GnpU^FSkt6I7!VXv1VR1Ua`zB-66P;Pc8V|HqnJ*Uz#kIe4ObjjO_Cp)*E?EH<9 zIRwio$6%MuX2$jMxIQ~|W=ahe)j z?vG7QpSphFP;BDitybdI#$;;Sr=u~0%~VgUP8@k8Z1Ppyx0Sa~OjmegN)YeNm1DCT z@nAYLT{(d~0!YG1w6n-&a3Kb)H8Zzf*iF$k`MU^4`jffM~hPn>&uTD$`P E19zq{U;qFB literal 0 HcmV?d00001 diff --git a/bin/sdcard/system/ramtest.bin b/bin/sdcard/system/ramtest.bin new file mode 100644 index 0000000000000000000000000000000000000000..576fcda8abcc4f47f2065cc35a72662e2b702494 GIT binary patch literal 3992 zcmb_eQEVK=8J=D5ocETsd^WKYpsLm=!iM6*-t(*{Hc2oz2}l9d1WIX9o3nQ>d-mSh z*}DslRJ9ifIZC9ep%0KseF;%z2gn1m5Kom-(TDb-QXg7Di&PXx0+q8`rKl2)8~2;p zwS9IRm4}@4&HvBLH~;ZUS4G}5LJ@*CA8H=0cH zC{2;q6FT{OGa;Hz$o;@L@GAg(q9ja3sa4-dnC(!vLw#>uU4lvyW}D~o>~&*6p{hcg zM9XMG2)+`_XJdIWl2nsaidGx74~;zej8`gKy;gr;Z=cg^_d&X$ond6;vB#fz_NfCy z*1n<}OqI$JZ6pXhYcyN-idMd0d55wE>qReg(Vd(sOb1@MY%Py@VQJhC^WK>~T} z#iQ9V&wAjYhqHUe#=^?DZw*;wmdvX4S*<>ssL$&4IiheaVSW?)+!5{d&h29QT8(m7HhY^uuQNdw$@B)&Z}S zEtGE}SRx)VMV?0gQ2&G0p={BeDy)$=QAXU*E0rdvisgKPF&gy=+}+v(+Y1A>A+iH z9*Y*mzpwt~kQftWjzfnFt9?E0TVkI78)s%-RHL)IrAI5T!MdoW#!?vSkE7p04o`de zaUYQw^F&U2dE|6Doo*phlPzm=$Gz}qAbHUosv;MiID!cx;&n2PV47MyAZO+E{YHBg65~d4e97N=3=l#A||4+-qNR) zSK-vpV7DQl(G~E}#u~nT@vQwM+J>wmc?Z_ciKygJxccEGlM@8v`m9ZV^*`b8)X45eWg0L~+-|1JV#v+=}v6 z!>d&uvUc940(bcxS9mMe_slEw4wttJjqy8o&+}%s=k=^3RC{aEwsjIzoAJAM&kqjm zecu&J=lw>*euH6Ya=3YAh3tLb5o^BQO8kYx(QH`h@a?ym2EGq?z!dN{@MqwkK&yuDB77Vj0Db`dRp31ETi_FI8%a~090q29H!0?TcYxmk zoe4rJ!1;tm!fe6KmnQquP>B3J{6gp*O_xrT$e0&MnRN?ND%4WAN|S^QwXR&J10zyd zqBj3x+0dM<_JG3p7nob38AWj30%j>wnCM)fjAbMB9h#9#FVKN~QkkU#Pk^%MaZ^u% zleXb7ZfE`xr(R(NH~4uuILmxzv8a|$4|XE9VuF^8_P6Kh&?vTinN#uTd;Ru-1BG` z7?Tl0@kNi(ZiSE2ZkzDXrL@3~5nP#=>t?()R6~U(2<_qeLZu8@uPBn%z$y#Zj)4~2 zQfW7c*o(02#2rFYY{@u5Xln-1&~+t;ZFMJSY?pmyH0So?+k)qX>%4(s1V{WRPaj$AW%H@hcZ zGi=TXhCQ5+OeUtH3u#!3W^l%Q$3pgqkg0`wr0B6y$L?Lenu*FArtzUYE_(Yn)JPA&1G?1 za9IerERVy+!;~e=rvpe>pX>DsVdd#MwNK1&YuQlQiJ9=yx$5OgDZ*>Su#|z?P4&rEA8@2Sb6qkaR)5u}gI#e&an_`!ewWify1zFFX_#yEJ+rKi}H@{O_iisCu_2m+el4~SKiw6T3RMwvv zUp`R5+5@$2K8SKP5avy3UZ%KaNW(Y3KLp7Mkf__nnY&@I<}88 e#24K(B8Wr0vf9H^^iyknu^aS&&abs zTJ3^NfXo^P@pCELB>Xr>?k>PlBq6?Bg(C?UD7Z>pfJ^F<`{B%mORm6BR9I0d&gTOo z?EAWBRzKLurB0`1?_5xl4GFngD##PB43|Q$ag?L27h{b z1G%oTf&8eEke@cnPttiOU&M3Y5HYg&A2QKlHtiJgbnGDjGgaP4hK0T1A^kR!40EHyzSUvw z#ISG=9h59mzuCUcT%Fiq?z7S9uA;qtC-K3G^Vs(Nfx)Nk}-YI9z zg!qGq8_1Q4C-<2}uCb{IbN(OTdebrYmBy8?Hiz`=1nkb;p<7PEKvUs|nd2tn=;zw? zWM|K^4SLZ?c++T`82=vKt zc3VxuE@!!K=zRN5-$@QOIi_CBl?K;O>22Zl;!O|fssUc{NF%xkaTJA`=^e}G%{ z;(oxs?!Cfl4X&RGH+XQLiKx7z6e9?7JH{8WHjZ89aA~NZJD71;hTYHA-C^2}sQO%8 zcR7P-D(ChkZalBuMBPnZUEBIC+elk?&sNg5eq%4W@`jCDc5U3zl~}rbaP?Xe_y2g1 z`^yPGCe~q!QvgRU@JA9?C5q)-&W1zSikFd;>9k>ol1--Nn8jQxxh3$n9diAML8`K@{$$^A9%+r!^ZK^0=E^+q^duV@xr^5syBW=O~V7oR^>3lY;V;mDh zE+J2$DKe>HX6zhhhXhs0G_)~gwxlJ4>Lxr_$IpEdR1FDL5gL|)>h&7YJYjlFX*f@h z1%m2)C|`bmg|}IHeApwsE}_TBa#tRSrpaU86~1Y_5x%eu;Z&c|Q?yZv^Tt`EEz?yc9sK!WTW{VP(=xn+2Jiu%LE|M$X0+=tr#d76w zfXf89M6MhLSRp`@Tsa891ehUL$^dHxSSVL4fDHn~YAXf;$Zv>bpyZ;4nQUFDE-vjt< zi&BrJxl(pd0DUN`60-Xb0H*|)BfBpFd@Mk-?EW=eAOf_=?o$9%fL7Uk6d)?VEZKbk zATGdM*}V(kRsojCZUMj);4;}w1MC;zQrX=NP!M3L>}~-VZc(U2FPE%?28}2Ic@D}b$|jUClu;gt8iMz~y@JQIYABV>UW^}lgNvb(ltv!-rQrE~ z==5vfgJhNRx}n9~{mGb{XMvboWOXsO%;cCm%xKL0A`8acyIFnAtswl}Lo6I~N0<_G zA7GJ~`xO?Axkp$m=6;n;i@A@mc+5S<8e;C_YDSi>jJ#G!JUokwbmX5u@N#k7}$g z7bs|gm-sXyW=`KuC{G$Z3&X!Pb4fef^R+zt5|4o3;c4C%2%mJ8oB2vcTS_rz#immQm}u) zSr!0)UnSxx{*@5biRzaGFAM(Xf~RyDOk;!(R3dJ$J%lzYA2ZBaBb7(#B5CB{(<7B{ zaOR%!NaZQI2!m@;6u>@k&8QIS2ft5NOOnJA!S;I5>K{pR0(`*Fv-)w&-@t-uXaXI|Qzi%kd?L(p0i zWO|{j8FaDN!{Mc(Q+{W7DyW(a6YuB4!-yof!)u=TT+KSvj91`dQfobGO1KtGSh#lF z!m~j&Jt@~7-py-Z`N?s0b;tVdo#JAp^IxMsLq{WXM^S22s`sX_#kk(VFP1INaEXP&UocP{k+NqH!^bY zOMZp9sv&Bybd0jwW35q1<5O^k-^7Bd0$R?`DPPPlXae${ZR}qQSy0^L>Lsv2S>|yd z+?t%Ln!FU^-SiOo=op%oubIqF$^>mZN*izo!!=EroqPJe3ijS8?tjqYBODyVfr^Bu z0yQc-1S^dk`6f)NJ8jc46Gib_+*TSc&EvLO6!#Xig}WH?%~0b3#tYQ(=;S(4q@Ye> zF)P?EDFH1D_IA$J6NfH0Wr|{jiLS7PYbJWQ2~2bn14)YcJoGItf)WhMro=+Vs4;Tr zAYBO@9><3TZX3ss)0MTnBJ7V_kw%U_%nkBTLvlL$7zecsbVy_!G*A;uNL*Z6HNF6% ze@j=nXF`zV4nZK|nn$j(6p~xu(q0>nTTMf0^pt~YH@6@f@Qe8#e_%YsCaq8B?@!bZ ztwpEWU@bpCw9WG;E_u0Ge0G?Ul7(q_y2G|Q#v*PPLH~OY3=qx2iY!I9H-Mi8{t{{A zp>KNTEtqS*B0~9Bkt)W zt?7_oHbq{1DH8U(mPx8D_k5&j!Y4Q*_NAoC=Q3&n-*OV9<}=^4+|$bNxTlo?F@pb( zw-5hdidT{t6TE%+g{g8Pf|MyZ+IWSS1;UV3W+FYZBIZO6N^BWQe?A~Z1Wl4Q`np3? zq)on5pCt9?7_q9L7Q5B&6E_ToTL8nA!ILJd!k3yn%H{m<_2kfu*EEIRYQO!on$&M! zlgFmW#hOg_)?_?UVnNP+$zKp2otlA{+NN4Yc?3(NW!Cb&?pR)h7ZZ;l<7fkG`Q6s3 zWgMPr;>a{cbRT(DlF6z-i1Y94bVx@hjIf6(FSr2CFDks2^s|5O=a?9lqW$SfIbC9gM>7K zT0j?r7Jx1TEeC0!t3lU+`amY=QP4kwJ_EJjHq{Bbu0BNapnJi85A-_dw;&m}ryD~u z`C_PvoDPM^E#W5eVmM01P;OH~WC-*a=!c3-ex?xeZ=hcR&yEnX2(%ou8FUQvF=!FK zuNU#P#U zw4sRDhR$R6tRfq4MdyKu6jY<4A3~8m@(?^r*w4b}bU@5wp&}(pHvc2P+&bcjImZqEWdN2+H9I`rradZX=?QNF>T04ZY zFumDo#)}KxjAL-%xQo(Bjurz$zBM{-C^*j5d+lK15?`ieae08$qSsoOLIaKI&6q+i z4^PPPq2MOEnNKZ?csBfTM7f<_?o&)yXx4 z=SiBUv}l=vT7@5cJ}(mT+U(Bq5ahFKapMv_QXr}2l1nu&!qiZ4`{2i$-K-{bx2P(ha(rH<|meK|r^Ri82 z@nWDT(Kxzhp?C1HlWwn;ao9j@l2(a_!ywdr&jXYDO!|P(cI4v&gsSa`=}<_@Ae6R+ zhgC!SM5)hg!qG+9nl)d4o!CqXU20fo@p;s+PO}wN%B;){sX21A-%5^sgsU=JLANnw zV0ZW?m4&QP7I-JK!3yE4>ni#iCTCt@@%PyZwyKeJvrUb0%EBftk8~Tpj(AfW#B5K- zbsV#E@AKI~eBqg-3~WF=W$~oq84}Mhe~Lw-o+Un6(3k0I%n%RAAYILS09Rk*Xcv$4 z)%>_Z{8N0)T_cC^K!Tv_VPK;~uaf9mFJF8@4K>MTUG-d&&EStF{+P)h%~w6Av5WYl z<*Mh_)So*?x}MiqBMYrXB}785t_j_U-w2=UT;27&!Rj?$$J=zy(q{W@)fwi7d0v+u{v#6PK6*;$7mV1(;S&KDQ z3tIKfs8dMdsTEiNMS<0w))Cof(8FiHQ(6rqX1l}UdL0(m>#&5L{|ZCXikrt9n&wdR zt~-^$o!L8ah!h+Mm|Uf16`c$sFbe#vvI<<5DX>trjN?ebnU=VXpGUW89Jd;!s(WA< zA26m#+A!C;?KsY!uq72>1qW10(h3gEjCUPz_lQ%8CbDAw_BbCQ-yz%2s zW08SC4o+}@_=Oq%>jsWW&19{i`i{);H=|+f?|u!xg;PC=$zXvuqhe-LE~4JOj%fX2 zJaD88o|?!s{e{s3{dRw;njH?oW1{7b)ARrzPtj8;DA7V`6vHp{W7K*9Gn2u`uKwXs zn(A-Iiv(Y~q8q7Ww4Dz(TbmRZ;*-L0tL0SPa><*N64%OklY*Z&V1O?w(w@bqlxU?w zm8K62vjo;(J1|^4e$0KPz@lSZ@{w|@Rsc30bYE#v0+#OBIPd$lGao7Ee%Sw-1Bdup zXC1A2BI;m`PeiLWx1YurM-L~fv`;7vB5qC~RD=?45SGIy*29yOl3eLT6rrY_wH!oK zJtBYynJ{7_oK8d$S#f0ZbSw*&~I?Lfl{RX@+bdGRdJl40;w6!zgc&BiB6oz-j_p-}F)3rje3xvdu1()(HW*?x92!YbI$5>=xTwlP%Y zUG1dJ68BdW|8!={INx~*zAijiQAY6nDmq7QWr}Vv<$rKQ_aCb$Ov&tKN-`DLpZrsx zh&74=b2|qu+SO(1%8t$s)}HLZ`{`WWNaBd*&E_UE>)Bi_709xL#S-Wk&E{eoxwg^F lBJXB%FDWyblG>%MlD6Z(;0ODRc&b<4XR&3NsMIF)e*xv6;*9_R literal 0 HcmV?d00001 diff --git a/bin/sdcard/system/regime.txt b/bin/sdcard/system/regime.txt new file mode 100644 index 0000000..d2a673b --- /dev/null +++ b/bin/sdcard/system/regime.txt @@ -0,0 +1,56 @@ +help - diese hilfe + - bin/adm/bel-datei wird gestartet +mount - sd-card mounten +unmount - sd-card abmelden +dir wh - verzeichnis anzeigen +type - anzeige einer textdatei +aload - administra-code laden +bload - bellatrix-treiber laden +rload - regnatix-code laden +del - datei l?schen +cls - bildschirm l?schen +free - freier speicher auf sd-card +attrib ashr - attribute ?ndern +cd - verzeichnis wechseln +mkdir - verzeichnis erstellen +rename - datei/verzeichnis umbenennen +format - sd-card formatieren +reboot - hive neu starten +sysinfo - systeminformationen +color <0..7> - farbe w?hlen +cogs - belegung der cogs anzeigen +dmlist - anzeige der verzeichnis-marker +dm - in das entsprechende marker- + verzeichnis wechseln +dmset - setzt den entsprechenden marker + auf das aktuelle verzeichnis +dmclr - marker l”schen + +marker: +r - root-verzeichnis +s - system-verzeichnis +u - user-verzeichnis +a/b/c - benutzerdefinierte verzeichnismarker +r, s, u-marker werden vom system automatisch gesetzt und +intern verwendet. + +RAMDISK: + +xload - datei in ram laden +xsave - datei aus ram speichern +xdir - verzeichnis im ram anzeigen +xrename - datei im ram umbenennen +xdel - datei im ram l”schen +xtype - text im ram anzeigen + +EXTERNE KOMMANDOS: + +sysconf - systemeinstellungen +hplay - hss-player +wplay - wav-player +sfxtool - hss-soundeffekte erstellen + +vga.bin - vga 1024 x 768 pixel, 64 x 24 zeichen +htext.bin - vga 1024 x 768 pixel, 128 x 48 zeichen +tv.bin - tv-textmodus 40 x 13 zeichen + diff --git a/bin/sdcard/system/rom.bin b/bin/sdcard/system/rom.bin new file mode 100644 index 0000000000000000000000000000000000000000..3db8d0527cc653197b5229fd2d8c7e6d1938e18a GIT binary patch literal 3976 zcmb_fdu$ZP8K1ek^(~iceSiZFt-&d%brIrm&YU+;a!zWLL_!56NI~kgy>r)e4QDuP zQ$RwwYhnzPDt@&1aKXtUM>GvBl^XLltc@{`5-5~Vpq1=kOfYaq0il!_yXP^!pih z2b~#-kqkTa60#t}OYRW|DWMLsniBFR^^kWVe@A6<67oFI4O|EQ4Vz>m41|DR09))b*$13~-VbCs2zd_pfg_9P z4w-ZUHvpG}Ibb|c0IUbD0a+OiQXVQ(ODmSlmb%q^OyFQHhk}rA(Sgm7huzy+kQjrHnGRoJevh z)uf3`$t<^(Q^`rBNs4@BMI~fn1vP0ySe2rf<)B%yY|=y!QN4)lvj#-+uzuHSB4y@d z{jy9KVIdPotn#9qiK<0b?C?+(-iKEs zzgtzDOw0+Nf^qB{md`BrD#7s1$}pMclwj6}W;s$b*kC35N+>9#=Sm`_$d;18a#ba} zN1TP?NeS5$I1hM~uu?p=##oH0zT{$CITQNESWIl4IGG$)X6|2()jB9y`JYQRnZuSm z$trnLx@2+cX6=(6l`PH&B@2O)%|r0AQWhdilcuA0G(}FVAgnTykfyF)rQ{B{Y;5(a z@|}&b_K4yh5SF{HpRfqV>c&|6SeH!;g-gS1Ajtafy7=DUiEt3hRP6W4!Ypyo9ae03 zCQ3#8sUfPS#=e9!*(5EG2vQ_PDx*vbQOQu?;S1GOj^OHFI=OT zXunijn4ReGFwu)?3seLgQM7b!7y+r5iIx>jr@N)n zF%9380Xc*0b-GEO>>xju@eP5z3wbea=y&2qj5P53x0?+4^sfy)yPoHrIAG|zn~dOu zdR|P37Pt+bqk+dxHX8EBTMV82naiHdJa5+)Bj{-1gxngOf9TF3om6w3tOtGx{EF*| zy__iFUNZ>!NSG}q{-QO~Fbo;SXM2WczUPaZU;bQy+D5Ai8o zoBYLHn+&zWc0TY{?!y3mCtCax)^NJR&@&J7yssbTLH#h-Vn?|C?#~|vA|w*9f%B@x zk--@{=fK=NYi_7LvN@WNG51#P`G5!VR7af9-(HC2LjU0t`L-cnA?(2+IjE=swi4Ke z#w9h;;-#?JHb>VAJ2}kt)|Q8X3MUVcK(zGJceqNo^4M#ed2ij!hk-p!A8EOCO`tnz zs3VSY{Y*Q~wB3kxT{qOOq@kT{H|}?>#GYJ_Yh6i!9V$5Y?;8H%l}B&(5|Z-m20!gP zoR6>}heq1?{d8>0S4;bexKHM?{8ZBqH3}bjNS%L$Pfv%xxI4K+>rTei;c}aCt@Y3& zJa^ks-YeES99QJQ+Cu3XMa`Zgd{R2E@JrV_oWIB=_9pG$(-GHtI(DccZyWN8db^V! zsolw%VfS|E{ydhuJ{t1SNMK}rblny7oP%nC(e=@_!ZsP_ckSH61&-ZZM;^1kC!n`a zb{bQ9Xsb?lN2_~qemyw99-Lq6xr0?1TY2u)-Mlw@E1z@+XWqWY&=+4F4BUf_;7*W3 zT%XfE7`S%b&qm0km3mjBAW0M9k>QFrzec?NMOLg!Ms#QpFg*QpKz_m9U!J~20ANKR4L z1l)TGYu?io$66NzNbBJIg|MgVnT&d@Jy1ohU3gy<;*N?~-PXG!tvm6KNb9)AQ-m(+ z5OR|xIpT{rc)#kO#*L~=asS#qO*P0p7u;y|LY%+oNpZ(7cltwD(chn4HzJT4dLXa3 zGunr-mgb0gF?aWbKh)DkLi4H5fbiuNSJx ztsC=O?|c|D?o6(3yYrzg*DncmHa6?K8k>Weo3B)*V|1ck58kbK-&dVnn<=MdXPu$% zsxyMeu@+kcpM3mBPT5g=ELIag*4qIetgreABuC#iVt@aEv5qy~$CxzCbMM34);RA? zbA;^#VmfPiFt#7>{@M%f{dIy^d%qM z#xJ*Lnc`e*3oGmW8*Y>qj7I?cFu3v+A=ra_udnp6*dpzJ^BTzavbN{HAMNpYO%P<-lG%>-`TREr +_eestart A0 or _eewrite swap _eewrite or swap _eewrite or +_eestart r> A1 or _eewrite or +rot2 bounds +do lasti? _eeread i C! loop _eestop 1 lockclr drop ; ] + +\ _eeread ( t/f -- c1 ) read a byte from the eeprom, ackbit in, byte out +[if _eeread : _eeread _sdai 0 8 0 do 1 lshift _sclh _sda? _scll if 1 or then loop +swap if _sdah else _sdal then _sdao _sclh _scll _sdal ; ] + +\ the eereadpage and eewritePage words assume the eeprom are 64kx8 and will address up to +\ 8 sequential eeproms +\ eereadpage ( eeAddr addr u -- t/f ) return true if there was an error, use lock 1 +[if eereadpage : eereadpage begin 1 lockset 0= until +1 max rot dup ff and swap dup 8 rshift ff and swap 10 rshift 7 and 1 lshift dup >r +_eestart A0 or _eewrite swap _eewrite or swap _eewrite or +_eestart r> A1 or _eewrite or +rot2 bounds +do lasti? _eeread i C! loop _eestop 1 lockclr drop ; ] + +\ EW@ ( eeAddr -- n1 ) +[if EW@ +: EW@ t0 2 eereadpage if 8006 ERR then t0 W@ ; ] + +\ EC@ ( eeAddr -- c1 ) +[if EC@ +: EC@ EW@ FF and ; ] + +\ (fspa) ( addr1 -- addr2) addr2 is the next page aligned address after addr1 +: (fspa) fsps 1- + fsps 1- andn ; + +\ (fsnext) ( addr1 -- addr2 t/f) addr - the current file address, addr2 - the next addr, t/f - true if we have +\ gone past the end of the eeprom. t0 -length of the current file +\ t1 - length of the file name (char) +: (fsnext) t0 W@ t1 C@ + 2+ 1+ + (fspa) dup fstop >= ; + + +\ (fswr) ( addr1 addr2 n1 -- ) addr1 - the eepropm address to write, addr2 - the address to write from +\ n1 - the number of bytes to write +: (fswr) dup >r rot dup r> + fstop 1- > if A0 ERR then rot2 eewritepage if 88 ERR then ; + +\ (fsrd) ( addr1 addr2 n1 -- ) addr1 - the eepropm address to read, addr2 - the address of the read buffer +\ n1 - the number of bytes to read +: (fsrd) dup >r rot dup r> + fstop 1- > if C0 ERR then rot2 eereadpage if 90 ERR then ; + +\ (fsfree) ( -- n1 ) n1 is the first location in the file system, -1 if there are none +: (fsfree) -1 fsbot begin +\ read 3 bytes into t0, t1 and process + dup t0 3 (fsrd) t0 W@ FFFF = if nip dup -1 else (fsnext) then +until drop ; + +\ (fsfind) ( cstr -- addr ) find the last file named cstr, addr is the eeprom address, 0 if not found +: (fsfind) fsbot 0 >r begin +\ read namesizemax 1F + 3 bytes into t0, t1, and tbuf + dup t0 22 (fsrd) t0 W@ FFFF = if -1 else + over t1 cstr= if r> drop dup >r then + (fsnext) + then +until 2drop r> ; + +\ (fslast) ( -- addr ) find the last file, 0 if not found +: (fslast) 0 fsbot begin +\ read namesizemax 1F + 3 bytes into t0, t1, and tbuf + dup t0 22 (fsrd) t0 W@ FFFF = if -1 else + nip dup + (fsnext) + then +until drop ; + +\ fsclear ( -- ) +: fsclr padbl fsbot 400 + fsbot do i pad fsps (fswr) 2e emit fsps +loop -1 fsbot EW! ; +: fsclear -1 fsbot EW! ; + +\ fsfree ( -- ) +: fsfree (fsfree) dup -1 = if 0 else fstop swap - then . ." bytes free in fs" cr ; + +\ fsls ( -- ) list the files +: fsls cr fsbot begin +\ read namesizemax 1F + 3 bytes into t0, t1, and tbuf + dup t0 22 (fsrd) t0 W@ FFFF = if -1 else + dup .addr space t0 W@ .addr space t1 .cstr cr + (fsnext) + then +until fstop swap - cr . ." bytes free in files system" cr cr ; + +\ (fsread) ( cstr -- ) +: (fsread) (fsfind) dup if +\ read 3 bytes into t0, t1 and process + dup t0 3 (fsrd) + t1 C@ + 2+ 1+ t0 W@ bounds do + ibound i - fsps >= if + i pad fsps (fsrd) pad fsps bounds + do i C@ emit loop i fsps 1- + seti + else + i EC@ emit + then + loop +else drop then padbl ; + +\ fsread ( -- ) filename +: fsread parsenw dup if (fsread) else drop then ; + +\ (fsload) ( ctsr -- ) +: (fsload) cogid nfcog iolink (fsread) d emit d emit cogid iounlink ; + +\ fsload filename ( -- ) send the file to the next free forth cog +: fsload parsenw dup if (fsload) else drop then ; + +\ (fsk) ( n1 -- n2) +: (fsk) 8 lshift key or ; + +\ fswrite filename ( -- ) writes a file until ... followed immediately by a cr is encountered +: fswrite (fsfree) dup -1 <> parsenw dup rot and if +\ set the file length to 0, copy in the file name + 0 pad W! dup C@ 2+ 1+ pad + swap pad 2+ ccopy +\ find the first free page + 0 swap key (fsk) (fsk) (fsk) +\ ( eaddr1 n1 addr2 n2 ) eaddr - start of file in the eeprom, n1 - bytes written so far, addr2 - next addr in the pad, +\ n2 - a 4 byte key buffer + begin +\ check to see if we have a ... at the end of a line + 2E2E2E0D over = if + -1 + else +\ get a key from the key buffer, write it the the pad + swap over 18 rshift dup dup d = if drop cr else emit then over C! 1+ tuck pad - fsps = if +\ we have a page worth of data, write it out + nip rot2 2dup + pad fsps (fswr) fsps + rot pad swap + then +\ get another key + (fsk) 0 + then + until +\ any keys left? + drop pad - dup 0> if +\ write the leftover, not a full page + >r 2dup + pad r> dup >r (fswr) r> + + else + drop + then +\ write the length of FFFF for the next file + 2dup + FFFF swap (fspa) dup fstop 1- < if EW! else 2drop then +\ subtract the length of the filename +1, and the 2 bytes which are the length of the file, and update the length of the file + over 2+ EC@ 2+ 1+ - swap EW! +else 2drop clearkeys then padbl +; + +\ fsdrop ( -- ) deletes last file +: fsdrop (fslast) dup -1 = if drop else FFFF swap EW! then ; + + diff --git a/bin/sdcard/system/scr.lib b/bin/sdcard/system/scr.lib new file mode 100644 index 0000000..a879692 --- /dev/null +++ b/bin/sdcard/system/scr.lib @@ -0,0 +1,69 @@ + +hex + +ifnot: lib:scr +: lib:scr ; + +\ kommandoformate +ifnot: bel:char \ ( b -- ) +: bel:char b[ [b!] ]b ; +ifnot: bel:fkt!b! \ ( b fkt -- ) +: bel:fkt!b! b[ 0 [b!] [b!] [b!] ]b ; +ifnot: bel:fkt!b!b! \ ( b b fkt -- ) +: bel:fkt!b!b! b[ 0 [b!] [b!] [b!] [b!] ]b ; +ifnot: bel:ctrl! \ ( ctrl -- ) +: bel:ctrl! b[ 0 [b!] 3 [b!] [b!] ]b ; +ifnot: bel:ctrl!b! \ ( b ctrl -- ) +: bel:ctrl!b! b[ 0 [b!] 3 [b!] [b!] [b!] ]b ; +ifnot: bel:ctrl!b@ \ ( ctrl -- b@ ) +: bel:ctrl!b@ b[ 0 [b!] 3 [b!] [b!] [b@] ]b ; +ifnot: bel:ctrl!b!b! \ ( b b ctrl -- ) +: bel:ctrl!b!b! b[ 0 [b!] 3 [b!] [b!] [b!] [b!] [b!] ]b ; + +\ einfache steuerzeichen +ifnot: scr:cls \ ( -- ) - screen löschen +: scr:cls 01 bel:char ; +ifnot: scr:home \ ( -- ) - cursor oben links +: scr:home 02 bel:char ; +ifnot: scr:pos1 \ ( -- ) - cursor an zeilenanfang +: scr:pos1 03 bel:char ; +ifnot: scr:curon \ ( -- ) - cursor anschalten +: scr:curon 04 bel:char ; +ifnot: scr:curoff \ ( -- ) - cursor abschalten +: scr:curoff 05 bel:char ; +ifnot: scr:scrlu \ ( -- ) - screen nach oben scrollen +: scr:scrlu 06 bel:char ; +ifnot: scr:scrld \ ( -- ) - screen nach unten scrollen +: scr:scrld 07 bel:char ; +ifnot: scr:bs \ ( -- ) - backspace +: scr:bs 08 bel:char ; +ifnot: scr:tab \ ( -- ) - tabulator +: scr:tab 09 bel:char ; + +\ screen-funktionen +ifnot: scr:logo \ ( y x -- ) - hive logo +: scr:logo 5 bel:fkt!b!b! ; +ifnot: scr:char \ ( char -- ) - zeichensatz direkt ausgeben +: scr:char 6 bel:fkt!b! ; + +\ parametrisierte steuerzeichen +ifnot: scr:setcur \ ( cur -- ) - cursorzeichen setzen +: scr:setcur 01 bel:ctrl!b! ; +ifnot: scr:setx \ ( x -- ) - cursor position x setzen +: scr:setx 02 bel:ctrl!b! ; +ifnot: scr:sety \ ( y -- ) - cursor position y setzen +: scr:sety 03 bel:ctrl!b! ; +ifnot: scr:getx \ ( -- x ) - cursor position x abfragen +: scr:getx 04 bel:ctrl!b@ ; +ifnot: scr:gety \ ( -- y ) - cursor position y abfragen +: scr:gety 05 bel:ctrl!b@ ; +ifnot: scr:setcol \ ( colnr -- ) - farbe wählen 0..15 +: scr:setcol 06 bel:ctrl!b! ; +ifnot: scr:sline \ ( row -- ) - anfangszeile scrollbereich +: scr:sline 07 bel:ctrl!b! ; +ifnot: scr:eline \ ( row -- ) - endzeile scrollbereich +: scr:eline 08 bel:ctrl!b! ; +ifnot: scr:sinit \ ( -- ) - +: scr:sinit 09 bel:ctrl! ; +ifnot: scr:tabset \ ( pos nr -- ) - tabulatorposition setzen 0..7 +: scr:tabset 0A bel:ctrl!b!b! ; diff --git a/bin/sdcard/system/sd0.lib b/bin/sdcard/system/sd0.lib new file mode 100644 index 0000000..8cf2e49 --- /dev/null +++ b/bin/sdcard/system/sd0.lib @@ -0,0 +1,176 @@ + +hex + +ifnot: lib:sd0 +: lib:sd0 ; + +\ ------------------------------------ lib:sd0 + +\ kommandoformate + +ifnot: adm:fkt!b! \ ( b fkt -- ) +: adm:fkt!b! b[ [a!] [a!] ]b ; + +ifnot: adm:fkt!b!b@ \ ( b fkt -- b ) +: adm:fkt!b!b@ b[ [a!] [a!] [a@] ]b ; + +ifnot: adm:fkt!b!l@ \ ( b fkt -- l ) +: adm:fkt!b!l@ b[ [a!] [a!] [a.l@] ]b ; + +ifnot: adm:fkt!l! \ ( l fkt -- ) +: adm:fkt!l! b[ [a!] [a.l!] ]b ; + +ifnot: adm:fkt!l@ \ ( fkt -- l ) +: adm:fkt!l@ b[ [a!] [a.l@] ]b ; + +ifnot: adm:fkt!b!l! \ ( l b fkt -- ) +: adm:fkt!b!l! b[ [a!] [a!] [a.l!] ]b ; + +ifnot: adm:fkt!s!b@ \ ( s fkt -- b ) +: adm:fkt!s!b@ b[ [a!] [a.s!] [a@] ]b ; + +ifnot: adm:fkt!b!s!b@ \ ( s b fkt -- b ) +: adm:fkt!b!s!b@ b[ [a!] [a!] [a.s!] [a@] ]b ; + +ifnot: adm:fkt!s!s!b@ \ ( s s fkt -- b ) +: adm:fkt!s!s!b@ b[ [a!] [a.s!] [a.s!] [a@] ]b ; + +\ dateisystem-funktionen + +\ adm:mount ( -- err ) - medium mounten +ifnot: adm:mount +: adm:mount + 01 adm:fkt!b@ ; + +\ adm:diropen ( -- ) - verzeichnisabfrage initialisieren +ifnot: adm:diropen +: adm:diropen + 02 adm:fkt! ; + +\ adm:nextfile ( -- st ) +\ st = 0 - keine gültige datei +\ st = 1 - dateiname im pad gültig +\ bei gültigem eintrag befindet sich der dateiname im pad +ifnot: adm:nextfile +: adm:nextfile + b[ 03 [a!] [a@] dup if [a.s@] then ]b ; + +\ adm:open ( cstr modus -- err ) - datei öffnen +\ modus "R" $52 - Read +\ modus "W" $57 - Write +\ modus "A" $41 - Append +ifnot: adm:open +: adm:open + 04 adm:fkt!b!s!b@ ; + +\ adm:close ( -- ) - datei schließen +ifnot: adm:close +: adm:close + 05 adm:fkt!b@ ; + +\ adm:getc ( -- c ) - ein zeichen aus datei lesen +ifnot: adm:getc +: adm:getc + 06 adm:fkt!b@ ; + +\ adm:putc ( c -- ) - ein zeichen in datei schreiben +ifnot: adm:putc +: adm:putc + 07 adm:fkt!b! ; + +\ adm:eof ( -- eof ) - abfrage ob end of file erreicht ist +ifnot: adm:eof +: adm:eof + 1E adm:fkt!b@ ; + +\ adm:getblk ( adr cnt -- ) - datenblock aus datei lesen + +\ adm:putblk ( adr cnt -- ) - datenblock in datei schreiben + +\ adm:seek ( pos -- ) - position in datei setzen +: adm:seek + 0A adm:fkt!l! ; + +\ adm:fattrib ( nr -- attrib ) - dateiattribut abfragen +ifnot: adm:fattrib +: adm:fattrib + 0B adm:fkt!b!l@ ; + +\ adm:volname ( -- ) - name des volumes im pad ablegen +ifnot: adm:volname +: adm:volname + 0C adm:fkt!s@ ; + +\ adm:checkmounted ( -- t/f ) +ifnot: adm:checkmounted +: adm:checkmounted + 0D adm:fkt!b@ ; + +\ adm:checkopen ( -- t/f ) +ifnot: adm:checkopen +: adm:checkopen + 0E adm:fkt!b@ ; + +\ adm:checkused ( -- used ) - anzahl benutzte sektoren +ifnot: adm:checkused +: adm:checkused + 0F adm:fkt!l@ ; + +\ adm:checkfree ( -- free ) - anzahl freie sektoren +ifnot: adm:checkfree +: adm:checkfree + 10 adm:fkt!l@ ; + +\ adm:newfile ( cstr -- ) - neue datei erstellen +ifnot: adm:newfile +: adm:newfile + 11 adm:fkt!s!b@ ; + +\ adm:newdir ( cstr -- ) - neues verzeichnis erstellen +ifnot: adm:newdir +: adm:newdir + 12 adm:fkt!s!b@ ; + +\ adm:del ( cstr -- ) - datei/verzeichnis löschen +ifnot: adm:del +: adm:del + 13 adm:fkt!s!b@ ; + +\ adm:rename ( cstr1.fn1 cstr2.fn2 -- ) +ifnot: adm:rename +: adm:rename + 14 adm:fkt!s!s!b@ ; + +\ adm:chattrib ( cstr1.fn cstr2.attrib -- ) +ifnot: adm:chattrib +: adm:chattrib + 15 adm:fkt!s!s!b@ ; + +\ adm:chdir ( cstr -- err ) - verzeichnis öffnen +ifnot: adm:chdir +: adm:chdir + 16 adm:fkt!s!b@ ; + +\ adm:format ( cstr.label -- ) - medium formatieren +ifnot: adm:format +: adm:format + 17 adm:fkt!s!b@ ; + +\ adm:unmount ( -- err ) - medium unmounten +ifnot: adm:unmount +: adm:unmount + 18 adm:fkt!b@ ; + +\ marker-funktionen + +ifnot: adm:dmact \ ( dmnr -- ) - marker aktivieren +: adm:dmact 19 adm:fkt!b!b@ .err ; +ifnot: adm:dmset \ ( dmnr -- ) - marker setzen +: adm:dmset 1A adm:fkt!b! ; +ifnot: adm:dmget \ ( dmnr -- dm ) - marker lesen +: adm:dmget 1B adm:fkt!b!l@ ; +ifnot: adm:dmclr \ ( dmnr -- ) - marker löschen +: adm:dmclr 1C adm:fkt!b! ; +ifnot: adm:dmput \ ( dm dmnr -- ) - marker schreiben +: adm:dmput 1D adm:fkt!b!l! ; + diff --git a/bin/sdcard/system/sfx.lib b/bin/sdcard/system/sfx.lib new file mode 100644 index 0000000..3c01222 --- /dev/null +++ b/bin/sdcard/system/sfx.lib @@ -0,0 +1,93 @@ + +hex + +ifnot: lib:sfx +: lib:sfx ; + +\ kommandoformen + +ifnot: adm:fkt!b! \ ( b fkt -- ) +: adm:fkt!b! b[ [a!] [a!] ]b ; + +ifnot: adm:fkt!b!b! \ ( b b fkt -- ) +: adm:fkt!b!b! b[ [a!] [a!] [a!] ]b ; + +ifnot: adm:fkt!b!64b! \ ( ptr b fkt -- ) +: adm:fkt!b!64b! b[ [a!] [a!] + 31 0 do dup i + C@ [a!] loop drop ]b ; + +\ sfx-funktionen + +\ sfx:fire( chan slot -- ) - sfx abspielen +\ slot - $00..$0f nummer der freien effektpuffer +\ slot - $f0..f5 vordefinierte effektslots +\ chan - 0/1 stereokanal +\ vordefinierte effekte +\ &f0 - warnton +\ $f1 - signalton +\ $f2 - herzschlag schnell +\ $f3 - herzschlag langsam +\ $f4 - telefon +\ $f5 - phaser :) +\ $f6 - pling +\ $f7 - on +\ $f8 - off +ifnot: sfx:fire +: sfx:fire 6B adm:fkt!b!b! ; + +\ ( ptr slot -- ) - sfx setzen +\ slot - $00..$0f nummer der freien effektpuffer +\ ptr - zeiger auf 32 byte effektdaten +\ +\ struktur der effektdaten: +\ +\ [wav ][len ][freq][vol ] grundschwingung +\ [lfo ][lfw ][fma ][ama ] modulation +\ [att ][dec ][sus ][rel ] hüllkurve +\ [seq ] (optional) +\ +\ [wav] wellenform +\ 0 sinus (0..500hz) +\ 1 schneller sinus (0..1khz) +\ 2 dreieck (0..500hz) +\ 3 rechteck (0..1khz) +\ 4 schnelles rechteck (0..4khz) +\ 5 impulse (0..1,333hz) +\ 6 rauschen +\ [len] tonlänge $0..$fe, $ff endlos +\ [freq] frequenz $00..$ff +\ [vol] lautstärke $00..$0f +\ +\ [lfo] low frequency oscillator $ff..$01 +\ [lfw] low frequency waveform +\ $00 sinus (0..8hz) +\ $01 fast sine (0..16hz) +\ $02 ramp up (0..8hz) +\ $03 ramp down (0..8hz) +\ $04 square (0..32hz) +\ $05 random +\ $ff sequencer data (es folgt eine sequenzfolge [seq]) +\ [fma] frequency modulation amount +\ $00 no modulation +\ $01..$ff +\ [ama] amplitude modulation amount +\ $00 no modulation +\ $01..$ff +\ [att] attack $00..$ff +\ [dec] decay $00..$ff +\ [sus] sustain $00..$ff +\ [rel] release $00..$ff +ifnot: sfx:setslot +: sfx:setslot + 6C adm:fkt!b!64b! ; + +\ sfx:keyoff ( chan -- ) - release-phase einleiten +ifnot: sfx:keyoff +: sfx:keyoff + 6D adm:fkt!b! ; + +\ sfx:stop ( chan -- ) +ifnot: sfx:stop +: sfx:stop + 6E adm:fkt!b! ; + diff --git a/bin/sdcard/system/sfxtool.bin b/bin/sdcard/system/sfxtool.bin new file mode 100644 index 0000000000000000000000000000000000000000..4bb86b0e33c920594b956ab4256079d52daeae10 GIT binary patch literal 6052 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 gJM#^g&P=x;!}Y_N|{RXbD387XYYzZvX%Q literal 0 HcmV?d00001 diff --git a/bin/sdcard/system/splay.bin b/bin/sdcard/system/splay.bin new file mode 100644 index 0000000000000000000000000000000000000000..ebdce7cd69d1041ee3b9d37cdf527ceed4a740a9 GIT binary patch literal 2960 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 W+! pad>out C! ; + +\ .cogch ( n1 n2 -- ) print as x(y) +ifnot: .cogch +: .cogch <# 29 #C # 28 #C drop # #> .cstr ; + +\ j ( -- n1 ) the second most current loop counter +ifnot: j +: j _rsptr COG@ 5 + COG@ ; + +\ cog? ( -- ) +ifnot: cog? +: cog? + 8 0 do ." Cog:" i dup . ." #io chan:" + dup cognchan . cogstate C@ + dup 4 and if version W@ .cstr then + dup 10 and if i cognumpad version W@ C@ over C@ - + spaces .cstr then + 14 and if i cogio i cognchan 0 do + i 4* over + 2+ W@ dup 0= if drop else + space space j i .cogch ." ->" io>cogchan .cogch + then + loop +drop then cr loop ; + +\ jede erweiterung legt ein wort als startmarke +\ nmit folgendem namen an: +\ mod:xxx - softwaremodule +\ drv:xxx - treiber +\ lib:xxx - bibliotheken +\ so kann mit den folgenden kommandos eine schnelle liste der +\ vorhandenen erweiterungen abgerufen und mit forget +\ aus dem system entfernt werden + +\ mod? ( -- ) - anzeige der module +ifnot: mod? +: mod? c" mod:" _words ; + +\ lib? ( -- ) - anzeige der bibliotheken +ifnot: lib? +: lib? c" lib:" _words ; + diff --git a/bin/sdcard/system/tv.bel b/bin/sdcard/system/tv.bel new file mode 100644 index 0000000000000000000000000000000000000000..d0624cdbf8036e8d2e25f807f90d4e30385090ac GIT binary patch literal 4208 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 literal 0 HcmV?d00001 diff --git a/bin/sdcard/system/v1.mod b/bin/sdcard/system/v1.mod new file mode 100644 index 0000000..7b0b8cd --- /dev/null +++ b/bin/sdcard/system/v1.mod @@ -0,0 +1,325 @@ + +: mod:vortrag ; + +24 constant rows +64 constant cols + +wvariable lcol 7 lcol W! + +ifnot: adm:fkt!s!b@ \ ( s fkt -- b ) +: adm:fkt!s!b@ b[ [a!] [a.s!] [a@] ]b ; +ifnot: adm:fkt!b!b@ \ ( b fkt -- b ) +: adm:fkt!b!b@ b[ [a!] [a!] [a@] ]b ; +ifnot: adm:fkt!b@ \ ( fkt -- b ) +: adm:fkt!b@ b[ [a!] [a@] ]b ; + +ifnot: bel:char \ ( b -- ) +: bel:char b[ [b!] ]b ; +ifnot: bel:ctrl!b! \ ( b ctrl -- ) +: bel:ctrl!b! b[ 0 [b!] 3 [b!] [b!] [b!] ]b ; +ifnot: bel:fkt!b!b! \ ( b b fkt -- ) +: bel:fkt!b!b! b[ 0 [b!] [b!] [b!] [b!] ]b ; + +ifnot: scr:bs \ ( -- ) - backspace +: scr:bs 08 bel:char ; +ifnot: scr:tab \ ( -- ) - tabulator +: scr:tab 09 bel:char ; +ifnot: scr:pos1 \ ( -- ) - cursor an zeilenanfang +: scr:pos1 03 bel:char ; +ifnot: scr:setcol \ ( colnr -- ) - farbe wählen 0..15 +: scr:setcol 06 bel:ctrl!b! ; +ifnot: scr:sline \ ( row -- ) - anfangszeile scrollbereich +: scr:sline 07 bel:ctrl!b! ; +ifnot: scr:setx \ ( x -- ) - cursor position x setzen +: scr:setx 02 bel:ctrl!b! ; +ifnot: scr:sety \ ( y -- ) - cursor position y setzen +: scr:sety 03 bel:ctrl!b! ; +ifnot: scr:curon \ ( -- ) - cursor anschalten +: scr:curon 04 bel:char ; +ifnot: scr:curoff \ ( -- ) - cursor abschalten +: scr:curoff 05 bel:char ; +ifnot: scr:logo \ ( y x -- ) - hive logo +: scr:logo 5 bel:fkt!b!b! ; + +\ adm:setsound ( sfkt -- sstat ) - soundsystem verwalten +\ sfkt: +\ 0: hss-engine abschalten +\ 1: hss-engine anschalten +\ 2: dac-engine abschalten +\ 3: dac-engine anschalten +\ sstat - status/cognr startvorgang +ifnot: adm:setsound +: adm:setsound + 5C adm:fkt!b!b@ ; + +\ wav:start ( cstr -- err ) +ifnot: wav:start +: wav:start + 96 adm:fkt!s!b@ ; + +\ wav:stop ( -- ) +ifnot: wav:stop +: wav:stop + 97 adm:fkt!b@ drop ; + +\ won +ifnot: won +: won + 0 adm:setsound 3 adm:setsound 2drop ; + +\ woff +ifnot: woff +: woff + 2 adm:setsound 1 adm:setsound 2drop ; + +: lcol@ lcol W@ ; \ ( -- col ) + +: lines \ ( n -- ) + 0 do cr loop ; + +: waitkey + scr:curoff cr key drop scr:bs scr:bs scr:bs scr:curon ; + +: nextpage + scr:curoff scr:pos1 lcol@ spaces ." -->" key drop scr:bs scr:bs scr:bs scr:curon ; + +: .head \ ( -- ) + 4 scr:setcol scr:pos1 lcol@ spaces ; + +: .bullet \ ( -- ) + 0 scr:setcol scr:pos1 lcol@ spaces 0f emit space ; + +: .number \ ( n -- n ) + 0 scr:setcol scr:pos1 lcol@ spaces dup . 1+ + 2e emit space ; + +: .line \ ( -- ) + cr 0 scr:setcol scr:pos1 lcol@ 2+ spaces ; + +: .sub \ ( -- ) + 0 scr:setcol scr:pos1 lcol@ 2+ spaces ; + +wvariable xpos 1 xpos W! +wvariable ypos 1 ypos W! + +: pos! \ ( x y -- ) + ypos W! xpos W! ; + +: pos@ \ ( -- x y ) + xpos W@ ypos W@ ; + +: nextline + ypos W@ 1+ ypos W! ; + +: move \ ( x y -- ) + 1 delms pos@ scr:sety scr:setx ; + + +: btop0 \ ( -- ) + move 9f emit 6 0 do 90 emit loop 9e emit nextline ; + +: bbot0 \ ( -- ) + move 9d emit 6 0 do 90 emit loop 9c emit nextline ; + +: btop1 \ ( -- ) + move 2 spaces 9f emit 6 0 do 90 emit loop 9e emit nextline ; + +: bbot1 \ ( -- ) + move 2 spaces 9d emit 6 0 do 90 emit loop 9c emit nextline ; + +: bmid0 \ ( -- ) + move 91 emit ." COG " 95 emit 90 emit bb emit nextline + move 91 emit ." " 95 emit 90 emit aa emit nextline ; + +: bmid1 \ ( -- ) + move a9 emit 90 emit 94 emit ." COG " 91 emit nextline + move ba emit 90 emit 94 emit ." " 91 emit nextline ; + +: bmid2 \ ( -- ) + move a9 emit 90 emit 94 emit ." SER " + 95 emit 90 emit bb emit ." [TERMINAL]" nextline + move ba emit 90 emit 94 emit ." " 91 emit nextline ; + +: bmid3 \ ( -- ) + move a9 emit 90 emit 94 emit ." VGA " + 95 emit 90 emit bb emit ." [BELLATRIX]" nextline + move ba emit 90 emit 94 emit ." KBD " 91 emit nextline ; + +: bmid4 \ ( -- ) + move 91 emit ." COG " 95 emit 90 emit bb emit + ." Zeichenausgabekanal (emit)" nextline + move 91 emit ." " 95 emit 90 emit aa emit + ." Zeicheneingabekanal (key)" nextline ; + +: cog0 \ ( x y -- ) + 0 scr:setcol pos! btop0 bmid0 bbot0 ; + +: cog1 \ ( x y -- ) + 0 scr:setcol pos! btop1 bmid1 bbot1 ; + +: cog3 \ ( x y -- ) + 0 scr:setcol pos! btop0 bmid4 bbot0 ; + +: cogext \ ( x y -- ) + 0 scr:setcol pos! btop1 bmid2 bbot1 ; + +: cogint \ ( x y -- ) + 0 scr:setcol pos! btop1 bmid3 bbot1 ; + +: drvser + 0 scr:setcol 2dup cog0 swap a + swap cogext ; + +: drvint + 0 scr:setcol 2dup cog0 swap a + swap cogint ; + +: p0 + 0 scr:sline cls 5 lines + 14 1c scr:curoff scr:logo won c" woodz.wav" wav:start drop + key drop scr:curon wav:stop woff ; + +: i1 + 0 scr:sline cls 3 lines + .head ." Implementierungsvarianten" cr waitkey + .bullet ." Forth-Diamond: Master & Slaves = PropForth" waitkey cr + .sub ." Nachteil: Programmierung aller Treiber in Forth" waitkey cr + .bullet ." Forth-Spin: Forth mit SPIN-Interface" waitkey cr + .sub ." Vorteil: Nutzung fertiger Treiber" waitkey + .sub ." Nachteil: hoher Ressourcenverbrauch" waitkey cr + .bullet ." Forth-Funktionskomplexe: " cr cr + .sub ." Master = Forth" cr + .sub ." Slaves = Spin-Funktionsbibliotheken" cr + .sub ." Interface Forth <--> Spin = 8Bit-Bus" cr cr + nextpage ; + +: i2 + 0 scr:sline cls 3 lines + .head ." Implementierungsvarianten" cr cr + .bullet ." Forth-Funktionskomplexe: " cr cr + .sub ." Master = Forth" cr + .sub ." Slaves = Spin-Funktionsbibliotheken" cr + .sub ." Interface Forth <--> Spin = 8Bit-Bus" cr waitkey + .bullet ." Nachteile:" cr cr + .sub ." Spin --> Compiler noch auf Host" cr waitkey + .bullet ." Vorteile:" cr cr + .sub ." Code ist schon vorhanden (TriOS)" waitkey + .sub ." Gegenseitige Befruchtung von Forth & TriOS" waitkey + .sub ." Maximale Ressourcen für Forth im Master" waitkey + .sub ." Spin-Code kann später auch durch Forth ersetzt werden" cr + nextpage ; + +: i3 + 0 scr:sline cls 3 lines + .head ." Ablauf der Implementierung" cr waitkey + .bullet ." Ausgangslage: " cr cr + .sub ." Forth mit Terminalzugriff" cr waitkey + .bullet ." Plan:" cr cr + .sub ." 1. Busroutine um auf Slaves zuzugreifen" waitkey + .sub ." 2. Integration VGA/Keyboard/SD-Card" waitkey + .sub ." 3. Autostart" cr cr + nextpage ; + + +: p1 + 0 scr:sline cls 1 lines + .head ." Buszugriff" cr cr + .bullet ." ! ( n adr -- ) store - Wert im RAM speichern" cr + .bullet ." @ ( adr -- n ) fetch - Wert aus RAM lesen" cr waitkey + .bullet ." c! c@ p! p@ - Abwandlungen der Grundform" cr waitkey + .bullet ." s! ( c adr -- ) - Byte an Slave senden" cr + .bullet ." s@ ( adr -- c ) - Byte von Slave empfangen" cr waitkey + .bullet ." b! ( c -- ) - Byte an Bellatrix senden" cr + .bullet ." b@ ( -- c ) - Byte von Bellatrix empfangen" cr + .bullet ." a! ( c -- ) - Byte an Administra senden" cr + .bullet ." a@ ( -- c ) - Byte von Administra empfangen" cr cr + .head ." Beispiele :" cr cr + .bullet ." 01 b! - Bildschirm löschen" waitkey + .bullet ." : cls 01 b! ; " waitkey + .bullet ." : bel:key 0 b! 2 b! b@ ; \ ( -- key )" cr + nextpage ; + +: p2 + 0 scr:sline cls 5 lines + .head ." IO-Kanäle/Pipes" cr waitkey + 9 8 cog3 key drop + 9 c cog3 + .line ." ..." + 9 11 cog3 + cr cr + nextpage ; + +: p3 + 0 scr:sline cls 5 lines + .head ." Serieller Treiber" cr cr + 9 8 drvser + 9 c cog3 + .line ." ..." + 9 11 cog3 + cr cr + nextpage ; + +: p4 + 0 scr:sline cls 5 lines + .head ." VGA/Keyboard-Treiber" cr cr + 9 8 drvser + 9 c drvint + .line ." ..." + 9 11 cog3 + cr cr + nextpage ; + +: p5 + 0 scr:sline cls 5 lines + .head ." Treiber: VGA" cr cr + 9 8 drvint cr + .line ." : drv-vga " + .line ." begin" + .line ." key?" + .line ." if key b! then" + .line ." 0 until ;" + cr cr + nextpage ; + +: p6 + 0 scr:sline cls 5 lines + .head ." Treiber: Keyboard" cr cr + 9 8 drvint cr + .line ." : drv-key" + .line ." begin" + .line ." bel:keystat" + .line ." if bel:key emit then" + .line ." 0 until ;" + cr cr + nextpage ; + +: p7 + 0 scr:sline cls 5 lines + .head ." Treiber: Gesamt" cr cr + 9 8 drvint cr + .line ." : drv:int" + .line ." begin" + .line ." \ input --> vga/video" + .line ." 200 0 do key?" + .line ." if key b[ [b!] ]b then loop" + .line ." \ output <-- keyboard" + .line ." b[ [key?]" + .line ." if [key] [emit] then ]b" + .line ." 0 until ;" + cr cr + nextpage ; + +: p8 + 0 scr:sline cls 5 lines + .head ." Semaphoren" cr waitkey + .bullet ." : bel:key 0 b! 2 b! b@ ; \ ( -- key )" cr waitkey + .bullet ." : bel:key bon 0 b! 2 b! b@ boff ;" cr waitkey + .bullet ." [ ... ]" cr waitkey + .bullet ." b[ ... ]b" cr waitkey + .bullet ." : bel:key b[ 0 b! 2 b! b@ ]b ;" cr waitkey + .bullet ." : bel:key b[ 0 [b!] 2 [b!] [b@] ]b ;" cr waitkey + .bullet ." : bel:key 2 0 b[ [b!] [b!] [b@] ]b ;" cr cr + cr cr + nextpage ; + +: run + begin p0 i1 i2 i3 p1 p2 p3 p4 p5 p6 p7 p8 0 until ; + diff --git a/bin/sdcard/system/vga.bel b/bin/sdcard/system/vga.bel new file mode 100644 index 0000000000000000000000000000000000000000..52c40647d9e2ec03c79626d478121e80c33f2095 GIT binary patch literal 6436 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 literal 0 HcmV?d00001 diff --git a/bin/sdcard/system/wav.lib b/bin/sdcard/system/wav.lib new file mode 100644 index 0000000..4198e23 --- /dev/null +++ b/bin/sdcard/system/wav.lib @@ -0,0 +1,54 @@ + +hex + +ifnot: lib:wav +: lib:wav ; + +\ kommandoformen + +ifnot: adm:fkt!b@ \ ( fkt -- b ) +: adm:fkt!b@ b[ [a!] [a@] ]b ; + +ifnot: adm:fkt!s!b@ \ ( s fkt -- b ) +: adm:fkt!s!b@ b[ [a!] [a.s!] [a@] ]b ; + +ifnot: adm:fkt!l@l@ \ ( fkt -- l l ) +: adm:fkt!l@l@ b[ [a!] [a.l@] [a.l@] ]b ; + +\ wave-funktionen + +\ wav:start ( cstr -- err ) +ifnot: wav:start +: wav:start + 96 adm:fkt!s!b@ ; + +\ wav:stop ( -- ) +ifnot: wav:stop +: wav:stop + 97 adm:fkt!b@ drop ; + +\ wav:status ( -- status ) +ifnot: wav:status +: wav:status + 98 adm:fkt!b@ ; + +\ wav:leftvol ( vol -- ) +ifnot: wav:leftvol +: wav:leftvol + 99 adm:fkt!b! ; + +\ wav:rightvol ( vol -- ) +ifnot: wav:rightvol +: wav:rightvol + 9A adm:fkt!b! ; + +\ wav:pause ( -- ) +ifnot: wav:pause +: wav:pause + 9B adm:fkt!b@ drop ; + +\ wav:position ( -- len pos ) +ifnot: wav:position +: wav:position + 9C adm:fkt!l@l@ ; + diff --git a/bin/sdcard/system/words.mod b/bin/sdcard/system/words.mod new file mode 100644 index 0000000..c0165f3 --- /dev/null +++ b/bin/sdcard/system/words.mod @@ -0,0 +1,16 @@ + +fl + +\ _words ( cstr -- ) prints the words in the forth dictionary starting with cstr, 0 prints all +: _words lastnfa +begin + 2dup swap dup if npfx else 2drop -1 then + if dup .strname space then + nfa>next dup 0= +until 2drop cr ; + +\ words ( -- ) prints the words in the forth dictionary, if the pad has another string following, with that prefix +: words parsenw _xwords ; + +: t1 1000 0 do i . loop ; +: t2 1000 0 do ." test " loop ; diff --git a/bin/sdcard/system/wplay.bin b/bin/sdcard/system/wplay.bin new file mode 100644 index 0000000000000000000000000000000000000000..8f21c84d1674b7c86a88643fcc16261764e80e4a GIT binary patch literal 3260 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 nqMm36^3|RjIuHhy^ literal 0 HcmV?d00001 diff --git a/doku/FemtoBasic Manual.rtf b/doku/FemtoBasic Manual.rtf new file mode 100644 index 0000000..5f43836 --- /dev/null +++ b/doku/FemtoBasic Manual.rtf @@ -0,0 +1,797 @@ +{\rtf1\ansi\ansicpg1252\cocoartf949 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset0 Verdana;} +{\colortbl;\red255\green255\blue255;\red0\green5\blue50;\red238\green238\blue238;} +\margl1440\margr1440\vieww12580\viewh18760\viewkind0 +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural + +\f0\b\fs24 \cf0 \ul \ulc0 FemtoBasic Manual - Version 3.006 +\b0 \ulnone \ +\ +Program lines consist of a line number from 1 to 65535, then a space,\ +then one or more statements separated by a colon (":"). Most statements\ +can be given without a line number and will be executed immediately if so.\ +\ +If a line is entered with the same line number as that of an existing line in\ +the current program, the existing line is deleted and the new line is stored.\ +\ +A line number by itself may be entered. Any existing line in the current\ +program with the same line number will be deleted. No new line will be\ +stored.\ +\ +When FemtoBasic is first started after a Propeller reset, if an SD card is\ +provided and it has a file "autoexec.bas" in its root directory, then the\ +line 'LOAD "autoexec.bas" : RUN' is automatically executed.\ +\ +The ESC key is a "break key". If it is entered, the running program will\ +stop after the current statement finishes executing. PAUSE and IRBRECV\ +are handled specially so the "break key" can interrupt their execution.\ +\ +Pre-compiled binaries are provided for both a VGA display and a TV\ +display and for either the Propeller Demo Board, Propeller Proto Board,\ +or a Hydra. The Hydra version cannot use an SD card with a VGA\ +display because the SD card interface uses the same I/O pins as the\ +VGA display. The names of the binary files indicate which display and\ +board they are intended for.\ +\ +The basic SD card wiring is shown below. "Pull-up" refers to a 20K\ +pull up resistor from the pin indicated to +3.3V. For the Demo Board\ +version, the pins are as indicated below. For the Proto Board version,\ +P0 = I/O pin 8, P1 = I/O pin 9, P2 = I/O pin 10, and P3 = I/O pin 11. For\ +the Hydra version, P0 = I/O pin 16, P1 = I/O pin 17, P2 = I/O pin 18, and\ +P3 = I/O pin 19.\ +\ +\pard\pardeftab720\ql\qnatural + +\f1 \cf2 \cb3 SD CARD Socket Pin-out:\ +\'a0\ +PIN\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0 SD CARD\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0 Propeller\ +-----------------------------------------------------\ +\'a01\'a0(NC)\ +\'a02\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0 (PIN-9) DAT2\'a0\'a0\'a0 Pull-up\ +\'a03\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0(PIN-1) CS\'a0\'a0\'a0\'a0\'a0 Pull-up\'a0\'a0\'a0 P3\ +\'a04\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0 (PIN-2) DI\'a0\'a0\'a0\'a0\'a0 Pull-up\'a0\'a0\'a0\'a0 P2\ +\'a05\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0 (PIN-3) GND\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0 GND\ +\'a06\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0 (PIN-4) +3.3\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0 VCC\ +\'a07\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0 (PIN-5) CLK\'a0\'a0\'a0\'a0 Pull-up\'a0\'a0\'a0\'a0 P1\ +\'a08\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0 (PIN-6) GND\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0 GND\'a0\'a0\'a0\'a0\'a0 \ +\'a09\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0 (PIN-7) DO\'a0\'a0\'a0\'a0\'a0 Pull-up\'a0\'a0\'a0\'a0 P0\ +10\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0\'a0 (PIN-8) DAT1\'a0\'a0 Pull-up\ +11\'a0(CD SW)\ + +\f0 \cf0 \cb1 \ +\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural + +\b \cf0 \ul Expressions\ + +\b0 \ulnone \ +Expressions consist of variables, constants, and "pseudo-variables"\ +that function like variables, but may have complex actions like FILE or\ +EEPROM[5]. Constants may be decimal, hexadecimal (prefixed with "$"),\ +or binary (prefixed with "%"). All expressions use 32-bit integer values.\ +\ +\ +\ +There are 26 variables designated by the letters A through Z.\ +Upper and lower case letters are equivalent.\ +\ +INA [ \{.. \} ]\ +\ +This has the value of the specified input pin or pins. If two pin values are\ +given, the first is the most significant bit number and the second is the\ +least significant bit number of the value. The pin or pins specified are\ +changed to input mode (the default).\ +\ +BYTE [ ]\ +\ +This has the value of the main memory byte at the address provided.\ +\ +WORD [ ]\ +\ +This has the value of the main memory word at the address provided.\ +The least significant bit of the address is ignored.\ +\ +LONG [ ]\ +\ +This has the value of the main memory long word at the address provided.\ +The least significant two bits of the address are ignored.\ +\ +EEPROM [ \{, \} ]\ +\ +This has the value of the byte in the EEPROM attached to the boot I2C bus\ +(on pins 28-29) at the address specified. If two expressions are provided,\ +the first gives the pin number of the SCL line of the EEPROM while the\ +second expression is the address. The address may be any value from\ +zero to $7FFFF and the upper 3 bits are used to form the device select code.\ +\ +FILE\ +\ +This has the value of the next byte in the currently open SD card file or -1\ +at the end of the file. The file must be open for reading.\ +\ +MEM\ +\ +This has the value of the amount of space available for program storage.\ +\ +CNT\ +\ +The current system clock value.\ +\ +PHSA\ +\ +The cog counter phase register A value.\ +\ +PHSB\ +\ +The cog counter phase register B value.\ +\ +FRQA\ +\ +The cog counter frequency register A value.\ +\ +FRQB\ +\ +The cog counter frequency register B value.\ +\ +CTRA\ +\ +The cog counter control register A value.\ +\ +CTRB\ +\ +The cog counter control register B value.\ +\ +KEYCODE\ +\ +The value of the next keyboard key value or zero if the keyboard buffer\ +is empty.\ +\ +RND \ +\ +The value is a pseudo-random number in the range zero to one less than\ +that of the expression given.\ +\ +- \ +! \ +\ +"-" is negate. "!" is bit-wise logical not.\ +\ +<9> SHL <9>\ +<9> SHR <9>\ +<9> ROL <9>\ +<9> ROR <9>\ +<9> SAR <9>\ +<9> REV <9>\ +\ +"SHL" is logical shift left. "SHR" is logical shift right. "ROL" is rotate left.\ +"ROR" is rotate right. "SAR" is arithmetic shift right. "REV" is bit reverse.\ +In all cases, the value to be shifted is the left operand and the shift count\ +is the right operand. "REV" reverses the order of the specified number of\ +least significant bits with the most significant bits set to zero.\ +\ +<8> & <8>\ +\ +"&" is bit-wise logical and.\ +\ +<7> | <7>\ +\ +"|" is bit-wise logical or\ +\ +<6> *<6>\ +<6> / <6>\ +<6> // <6>\ +\ +"*" is a 32 bit unsigned multiplication. "/" is the quotient of a 32 bit unsigned\ +division. "//" is the remainder of a 32 bit unsigned division.\ +\ +<5> + <5>\ +<5> - <5>\ +\ +"+" is a 32 bit addition. "-" is a 32 bit subtraction\ +\ +<4> = <4>\ +<4> < <4>\ +<4> > <4>\ +<4> <= <4>\ +<4> >= <4>\ +<4> <> <4>\ +\ +"=" is equal to. "<" is less than. ">" is greater than.\ +"<=" is less than or equal to. ">=" is greater or equal to.\ +"<>" is not equal to.\ +\ +NOT <3>\ +\ +"NOT" is logical not.\ +\ +<2> AND <2>\ +\ +"AND" is logical and.\ +\ +<1> OR <1>\ +\ +"OR" is logical or.\ +\ +Note that the numbers in the brackets () are used to\ +indicate the operator precedence.\ +\ + +\b \ul Statements +\b0 \ulnone \ +\ +Note that multiple statements may be given on a line separated by\ +a colon (":"). There are some restrictions on what can be combined on\ +a line. These are described in the individual statements' descriptions.\ +\ +\{LET\} = \ +\ +Set the variable to the value of the expression .\ +\ +INPUT \{ "";\} \{,\}\ +\ +If given, the is displayed and an input line may be entered.\ +For each variable given, an expression is evaluated from the input line.\ +The expressions may be separated by commas (",") or, if unambiguous,\ +by spaces. These expressions may contain variable names, operators,\ +or "pseudo-variables". If more expressions are given than variables,\ +the excess are ignored. An error is treated as if it occurred on the line\ +where the INPUT statement is given.\ +\ +PRINT \{\{"" | \} \{, | ;\}\}\ +\ +A series of expressions or string constants are given, separated by\ +commas (",") or semicolons (";"). If a comma is used, enough spaces\ +are inserted to display the next item at the next display column divisible\ +by 8. If a semicolon is used, the next item begins at the next column.\ +If the statement ends with a comma or semicolon, an end of line is not\ +inserted. A PRINT statement by itself causes an end of line to be displayed\ +\ +GOTO \ +\ +Go to the label whose value is equal to the expression\ +\ +GOSUB \ +\ +Call (as a subroutine) the label whose value is equal to the expression.\ +Note that a GOSUB must be the only or last statement on a line.\ +\ +RETURN\ +\ +Return from a GOSUB call\ +\ +REM \ +\ +The rest of the line in the program is considered part of the comment and\ +is otherwise ignored.\ +\ +NEW\ +\ +Erase the current program and clear all the variables.\ +\ +LIST \{ \{,\}\}\ +\ +List the current program. If no expressions are given, the whole program\ +is listed. If one expression is given, that line is listed. If two expressions\ +are given, all lines between those two values are listed.\ +\ +RUN\ +\ +Clear all the variables (to zero) and start executing the current program\ +from the first line.\ +\ +OPEN "", \{R | W | A \}\ +\ +Open the specified file on the SD card in the mode requested (R - read,\ +W - write, A - append). If a file is already open, it is closed first. Only one\ +file may be open at a time.\ +\ +READ \{,\}\ +\ +Read a line from the currently opened SD card file and set the variables\ +specified to the expressions supplied on that line. The expressions may\ +be separated by commas or, if unambiguous, may be separated by spaces.\ +These expressions may be any expression including operators, variables,\ +pseudo-variables (like CNT). Effectively, this is as if " = " were\ +executed for each variable given and each expression in the SD card file.\ +\ +WRITE \{\{"" | \} \{, | ;\}\}\ +\ +This works just like the PRINT statement except that the characters produced\ +are written to the currently opened SD card file. An end of line is written as\ +a carriage return / line feed pair (ASCII CR/LF ... 13, 10).\ +\ +CLOSE\ +\ +Close the currently opened SD card file, if any.\ +\ +DELETE ""\ +\ +Delete the specified SD card file. Any opened SD card file will be closed.\ +\ +RENAME "", ""\ +\ +Rename the specified SD card file. Any opened SD card file will be closed.\ +This is not currently implemented and will produce an error message.\ +\ +FILES\ +\ +List all files on the SD card (at the root level). Neither subdirectories nor the files\ +within them are included in this listing. Any opened SD card file will be closed.\ +\ +SAVE\ +\ +Save the current program to an otherwise unused area in the boot EEPROM.\ +Note that downloading a program to the EEPROM using the Propeller Tool or\ +an equivalent downloading program will erase any saved program.\ +\ +SAVE [ \{, \} ]\ +\ +This saves the current program in the EEPROM attached to the boot I2C bus\ +(on pins 28-29) at the address specified. If two expressions are provided,\ +the first gives the pin number of the SCL line of the EEPROM while the\ +second expression is the address. The address may be any value from\ +zero to $7FFFF and the upper 3 bits are used to form the device select code.\ +The address is adjusted to 2 bytes below the next 64 byte boundary and the\ +total program length is stored in those two bytes followed by the program itself.\ +If the address is adjusted upwards, only the last two bytes of that 64 byte block\ +are changed.\ +\ +SAVE ""\ +\ +Save the current program to the specified file on a SD card. Any existing file\ +by that name will be overwritten with the program which will be saved in text\ +file format, as if they were displayed with the LIST statement.\ +\ +LOAD\ +\ +Erase the current program and load in a program previously saved with the\ +SAVE statement.\ +\ +LOAD [ \{, \} ]\ +\ +Erase the current program and load in a program previously saved with the\ +SAVE [ \{, \} ] statement.\ +\ +LOAD ""\ +\ +Erase the current program and load in a program from an SD card file. This\ +program must be in text format, just as if it were to be typed in. All lines must\ +be numbered (with a line number) except lines that are completely blank.\ +\ +FOR = TO \{STEP \}\ +\ +This sets up a standard Basic FOR/NEXT loop. The variable is set to the value\ +of the first expression and tested against the limit given by the value of the\ +second expression (which is evaluated only once). The optional step size\ +may be positive or negative. If negative, the limit test is appropriately changed.\ +The FOR statement must be the last statement on a multi-statement line and\ +improperly nested FOR/NEXT statement pairs may cause incorrect execution\ +without an error message. Default STEP value is +1.\ +\ +NEXT \ +\ +This terminates a standard Basic FOR/NEXT loop. The STEP value is added\ +to the variable and the result is tested against the limit value. If still within the\ +limit, program execution continues with the statement after the matching FOR\ +statement. If not, execution continues with the next statement.\ +\ +OUTA [ \{.. \} ] = \ +\ +This sets the specified output pin or pins to the expression to the right of the\ +assignment. If one pin value is given, that is the pin to be changed. If two\ +pin values are given, the first is the most significant bit number and the\ +second is the least significant bit number of the value. The pin or pins\ +specified are changed to output mode.\ +\ +PAUSE \{, \}\ +\ +The program is paused for the number of milliseconds given by the first\ +(or only) value given. If two values are given, the first is in milliseconds\ +while the second is in microseconds and they're added together for the\ +total pause time. The minimum pause time is 50us. If the pause time is\ +more than 10ms, The pause statement is interrupted after 10ms and\ +reexecuted with a 10ms shorter pause time. This is to allow for the\ +interruption of the program using a "break key". The PAUSE statement\ +must be the first or only statement on a line.\ +\ +BYTE [ ] = \ +\ +This sets the value of the main memory byte at the address provided to\ +the expression on the right side of the assignment.\ +\ +WORD [ ] = \ +\ +This sets the value of the main memory word at the address provided to\ +the expression on the right side of the assignment. The least significant\ +bit of the address is ignored.\ +\ +LONG [ ] = \ +\ +This sets the value of the main memory long word at the address provided\ +to the expression on the right side of the assignment. The least significant\ +two bits of the address are ignored.\ +\ +PHSA = \ +\ +Set the cog counter phase register A to the expression.\ +\ +PHSB = \ +\ +Set the cog counter phase register B to the expression.\ +\ +FRQA = \ +\ +Set the cog counter frequency register A to the expression.\ +\ +FRQB = \ +\ +Set the cog counter frequency register B to the expression.\ +\ +CTRA = \ +\ +Set the cog counter control register A to the expression.\ +\ +CTRB = \ +\ +Set the cog counter control register B to the expression.\ +\ +DISPLAY \{, \}\ +\ +Send the specified byte values to the display driver. The specific control\ +codes, their parameters, and their meaning depend on the display driver.\ +See the display driver documentation for descriptions.\ +\ +STOP\ +\ +Stop execution of the program.\ +\ +END\ +\ +Stop execution of the program (works like STOP).\ +\ +EEPROM [ \{, \} ] = \ +\ +This sets the value of the byte in the EEPROM attached to the boot I2C bus\ +(on pins 28-29) at the address specified. If two expressions are provided,\ +the first gives the pin number of the SCL line of the EEPROM while the\ +second expression is the address. The address may be any value from\ +zero to $7FFFF and the upper 3 bits are used to form the device select code.\ +\ +FILE = \ +\ +This sets the value of the next byte in the currently open SD card file.\ +The file must be open for writing or appending.\ +\ +SPIN [ \{, \} ]\ +\ +This causes a Spin program to be loaded into the Propeller's main memory\ +from a 32K EEPROM "page". If only one expression is provided, it is the\ +starting address in a 512K byte address space made up of one or more\ +EEPROMs attached to the I2C bus on Propeller pins 28 (SCL) and 29 (SDA).\ +The boot EEPROM is the first 32K of this address space. The lower order\ +15 bits of the address are ignored so the loading process always begins on\ +a 32K byte boundary. If two expressions are provided, the first gives the\ +pin number of the SCL line of the EEPROM while the second expression\ +gives the starting address. The address may be any value from zero to\ +$7FFFF and the upper 3 bits are used to form the device select code.\ +Once the Spin program has been successfully loaded, it begins execution.\ +The loaded Spin program completely replaces the running FemtoBasic.\ +\ +SPIN ""\ +\ +This causes a Spin program to be loaded into the Propeller's main memory\ +from a specified file on an attached SD card. This file should be a copy of\ +the binary form of a Spin program as saved from the Propeller Tool.\ +Once the Spin program has been successfully loaded, it begins execution.\ +The loaded Spin program completely replaces the running FemtoBasic.\ +\ +DUMP , \ +\ +This displays a portion of the Propeller's main memory. The first expression\ +gives the starting address and the second expression gives the number\ +of bytes to be displayed. The information is formatted 8 bytes per line with\ +both hexadecimal and ASCII displayed.\ +\ +DUMP [ \{, \} ] , \ +\ +This displays a portion of the EEPROM. The last expression gives the number\ +of bytes to be displayed. The first portion describes a starting address in EEPROM.\ +See the SPIN statement for a description of the values.\ +\ +COPY [ \{, \} ] , [ \{, \}]\ +\ +This copies a Spin program from the first 32K byte EEPROM "page" specified\ +to the second. As with the SPIN statement, if only one expression is supplied,\ +it provides the starting EEPROM address. If two are supplied, the first is the\ +pin number of the SCL line while the seconds is the EEPROM address.\ +The amount of data copied is taken from the beginning of the Spin program\ +binary file.\ +\ +COPY "" , [ \{, \}]\ +\ +This copies a Spin program from an SD card file to a 32K byte EEPROM "page".\ +\ +COPY [ \{, \} ] , ""\ +\ +This copies a Spin program from a 32K byte EEPROM "page" to an SD card file.\ +\ + +\b \ul BOE-BOT Extensions +\b0 \ulnone \ +\ +The BOE-BOT version of FemtoBasic is similar to the regular version\ +except that it uses a full duplex serial port for its keyboard input and\ +display output and several "pseudo-variables" and statements have\ +been added to control servos, a PING distance sensor, IR distance\ +sensors, and an HM55B compass connected via a PCA9554 I2C\ +I/O Expander. A Propeller Proto Board or equivalent is assumed.\ +\ +The left servo is connected to I/O pin 0, the right servo to pin 1, and the\ +PING bracket servo to pin 2. An IR detector is connected to pin 3 and\ +an IR LED is connected to pin 4. The PING control signal is connected\ +to pin 5. The "console" receive line is pin 6 and the transmit line is pin 7.\ +This "console" is implemented using a configured xBee transceiver.\ +A PCA9554 I2C I/O Expander is connected to the boot EEPROM bus\ +using I/O pins 28 (SCL) and 29 (SDA).\ +\ +The HM55B Ena pin is connected to PCA9554 I/O pin 0. The Clk pin\ +is connected to pin1. DI is connected to pin 2 and DO to pin 3.\ +\ +Two different binary versions are provided. One uses the programming\ +serial port for the "console" (BoeBotBasicUS.binary) and the other uses\ +pins 6 and 7 for wireless operation via an xBee transceiver\ +(BoeBotBasicXB.binary).\ +\ + +\b \ul Expressions +\b0 \ulnone \ +\ +PING\ +\ +This value is the distance in mm of the last PING reading (one-way). It\ +will be zero if a new reading has been initiated, but a value isn't ready yet.\ +\ +IRZONE [ , , ]\ +\ +The first expression is the center frequency (in Hz). The second expression\ +is the number of zones. The third expression is the width of a zone (in Hz).\ +The IR emitter frequency is swept from the last zone to the center frequency\ +with about 200 cycles of each frequency emitted per zone. This value is the\ +number of the first zone where a response is detected (#zones-1 to 0) or -1\ +to indicate that no response was detected.\ +\ +EXPAND [ ]\ +\ +This is the value of the PCA9554 I2C I/O Expander's register whose address\ +is supplied.\ +\ +COMPASS\ +\ +This value is the compass heading in brads (0 to 359 degrees is the same\ +as 0-255).\ +\ + +\b \ul Statements +\b0 \ulnone \ +\ +SRVLEFT \{[ ]\} = \ +SRVRIGHT \{[ ]\} = \ +SRVPING \{[ ]\} = \ +\ +Send a pulse stream to the specified servo with a width (in us) given by the\ +expression on the right side of the assignment. If a square bracketed\ +expression is provided, this is the number of pulses to send (at 20ms intervals).\ +If no pulse count is provided, the pulse train continues indefinitely. If either the\ +pulse count is zero or the pulse width is zero, the pulse train will stop. The\ +pulse width must lie between 500us and 2500us.\ +\ +PING\ +\ +Initiates a new PING cycle. The one-way path length will be zero until the new\ +reading is complete.\ +\ +COMPASS , \ +\ +Reads the raw x and y values of the HM55B compass and assign them to the\ +first and second variables specified respectively.\ +\ +EXPAND [ ] = \ +\ +The PCA9554 I2C I/O Expander's register whose address is supplied is set\ +to the value on the right side of the assignment.\ +\ + +\b \ul IR Buddy Extensions +\b0 \ulnone \ +\ +The IR Buddy version of FemtoBasic is identical to the regular version\ +except that statements have been added to control one or more IR Buddy\ +devices. These may be connected to any otherwise available I/O pin.\ +\ + +\b \ul Statements +\b0 \ulnone \ +\ +IRBSEND \ +\ +The expression is the I/O pin number to be used. This resets the IR Buddy.\ +\ +IRBSEND , \{, \}\ +\ +The first expression is the I/O pin to be used. The remaining expressions\ +are byte values to be sent to the IR Buddy (at 9600 Baud).\ +\ +IRBRECV , , \{, \}\ +\ +The first expression is the I/O pin to be used. The second expression is\ +an initial timeout (in ms) to use. Subsequent timeouts are 10ms. The\ +number of bytes specified are received, one in each variable. If a timeout\ +occurs, that variable and all subsequent ones are set to -1.\ +\ + +\b \ul uOLED-96-Prop Extensions +\b0 \ulnone \ +\ +UOLED SETUP\ +\ +Initialize the uOLED-96-Prop. This must be done before any other operations are done.\ +\ +UOLED START\ +\ +Power up the screen electronics and display any data previously written to graphics RAM.\ +\ +UOLED STOP\ +\ +Power down the screen electronics without disturbing any data in graphics RAM.\ +\ +UOLED LEVEL \ +\ +Set the master contrast setting (range 0-15).\ +\ +UOLED COLOR , , \ +\ +Set the individual color contrast values (range 0-255).\ +\ +UOLED DIM , , , \ +\ +Dim a designated screen window given the coordinates of the left upper corner and the\ +right lower corner.\ +\ +UOLED PIXEL , , , , \ +\ +Writes 2 bytes of color data to the pixel at the coordinate specified. The color information\ +range is 0-255.\ +\ +UOLED SCROLL SETUP , ,

, <# Lines> , \ +\ +X is he number of columns of horizontal offset. Y is the number of lines of vertical offset.\ +Address is the starting line address. # Lines is the number of lines to be scrolled\ +horizontally. Interval is the time interval between scroll steps. 0 = 6 frames, 1 = 10 frames,\ +2 = 100 frames, and 3 = 200 frames.\ +\ +UOLED SCROLL START\ +\ +Activate the scrolling function as set up previously\ +\ +UOLED SCROLL STOP\ +\ +Deactivate the scrolling function\ +\ +UOLED LINE , , , , , , \ +\ +Display a line from the specified left upper corner to the specified right lower corner in the color\ +specified.\ +\ +UOLED RECT , , , , , , \{, , , \}\ +\ +Display a rectangle from the specified left upper corner to the specified right lower corner of the\ +display. The first set of color values is used for the outline color. If the second set of color values\ +is given, it's used for the fill color. If not, the outline color is used for the fill color as well.\ +\ +UOLED COPY , , , , , \ +\ +Copy one area of the display screen to another. The left upper corner and the right lower corner\ +of the source area is supplied followed by the left upper corner of the destination area.\ +\ +UOLED TEXT , , , , , " ... "\ +UOLED TEXT , , , , , \ +\ +Display text using the current font starting at the coordinates provided. These are in terms of character\ +positions, not pixels (range X: 0-11/15, Y: 0-7). Wraparound occurs at the right and bottom of the display.\ +The first form displays the contents of the string while the second form displays the decimally\ +formatted value of the expression given with a leading minus sign if negative. With the 5x7 font, there\ +are 16 characters per line. With the 8x8 font, there are 12 characters per line.\ +\ +UOLED TEXT , , \ +\ +Set the default background color for text. It's set to black during the initialization of FemtoBasic.\ +\ +UOLED TEXT \ +\ +Set the current font. 0 - 5x7 font. 1 - 8x8 font (default).\ +\ +UOLED ERASE\ +\ +Erase the screen (to black).\ +\ +UOLED RESET\ +\ +Resets the display. You must do a UOLED SETUP afterwards.\ +\ +UOLED CIRCLE , , , , , \ +\ +Display a circle whose center is at X,Y and whose radius is Rad using the color specified. If Rad\ +is negative, the circle is filled with the color specified and the radius is the absolute value of Rad.\ +\ +UOLED CIRCLE , , , , , , \ +\ +Display a one eighth circle arc whose center is at X,Y and whose radius is Rad using the color\ +specified. If Rad is negative, the one eighth circle pie slice is filled with the color specified and\ +the radius is the absolute value of Rad. Arc indicates which one eighth circle is to be displayed.\ +1 - 0 to 45 degrees, 2 - 45 to 90 degrees, 3 - 90 to 135 degrees, 4 - 135 to 180 degrees.\ +\ + +\b \ul HC-OSD Extensions +\b0 \ulnone \ +\ +The Hitt Consulting's Overlay Screen Display version uses the PS/2 keyboard for input and the\ +overlay screen driver for output. None of the commands that use SD card files are present.\ +\ + +\b \ul Expressions +\b0 \ulnone \ +\ +SERIAL [ ]\ +\ +The parameter is a timeout in milliseconds. This returns the character received from the 19.2Kbps\ +serial interface or a -1 if the timeout occurs.\ +\ +SERCHK [ ]\ +\ +The parameter is a character. This searches the entire buffered serial input stream for the speciied\ +character and returns true (-1) if the character is present and false (0) otherwise. The serial buffer\ +is not changed.\ +\ +TIME [ ]\ +\ +If the value is between 0 and 6, this returns the binary value of the most recently read time unit\ +(0 - Seconds, 1 - Minutes, 2 - Hours, 3 - Day of Week, 4 - Day, 5 - Month, 6 - Year). If the value\ +is 7, this returns the control register value read from the DS1307. For values from 8 to 63, this\ +returns the value stored in the DS1307's RAM at that address.\ +\ +GPS [ ]\ +\ +If the value is negative, this returns the next character from the GPS serial buffer with the absolute\ +value of the expression used as a timeout in milliseconds. It returns a -1 if the timeout is exceeded.\ +If the value is positive, this returns a character from the saved GPS phrase whose index is the\ +value provided. It returns a -1 if the value is out of range or if there's no saved GPS phrase.\ +\ + +\b \ul Statements +\b0 \ulnone \ +\ +TIME\ +\ +This reads the current time from the DS1307 into an internal buffer used by TIME [ ].\ +\ +TIME [
] = \ +\ +This writes the expression on the right side of the "=" into the control register or RAM whose address\ +is given. Addresses less than 7 or greater than 63 are not allowed.\ +\ +TIME , , , , , , \ +\ +This writes the time / date indicated to the appropriate locations in the DS1307 clock. The values are\ +given in binary and are translated to BCD. The BCD values are also stored in the internal buffer\ +used by TIME [ ]. The BCD values are written to the DS1307 in a single operation.\ +\ +GPS\ +\ +This starts up a background routine (in a cog) that discards any buffered GPS phrase, then begins\ +discarding any buffered serial input up to the first "$" character which begins the next GPS phrase.\ +Characters are then stored in the internal GPS phrase buffer (used by GPS [ ]) until a "*" is\ +seen. The next two characters must be hexadecimal values which are used as a checksum for the\ +phrase. If the checksum is invalid, the phrase is discarded and the routine begins searching for the\ +next phrase. If this background routine is already active, it is stopped and any saved information\ +is discarded before starting it again. Once this background routine successfully finds a complete\ +GPS phrase, it stops itself.\ +} \ No newline at end of file diff --git a/doku/Thumbs.db b/doku/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..b9bbb83a10ef35b31449d452a2ab0b79fd9ad20b GIT binary patch literal 12288 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 R{O=WXpnLuu{`Y#|zW_xO#`6FG literal 0 HcmV?d00001 diff --git a/doku/TriOS - Logo 1.jpg b/doku/TriOS - Logo 1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..82b891eeefdeb1fad12c8e7ea48ea0f975eacf9c GIT binary patch literal 19783 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 G^#1_*yW5ih literal 0 HcmV?d00001 diff --git a/doku/TriOS - Logo 2.jpg b/doku/TriOS - Logo 2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..44ee96286dd49f2110630a8337822cb965779ff3 GIT binary patch literal 29648 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 literal 0 HcmV?d00001 diff --git a/doku/TriOS-1.jpg b/doku/TriOS-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa72063ee624450e45657fa209692260c1805727 GIT binary patch literal 41871 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 Rxrg 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 literal 0 HcmV?d00001 diff --git a/flash/administra/admflash.spin b/flash/administra/admflash.spin new file mode 100644 index 0000000000000000000000000000000000000000..a48f8020161dc7afd3abe443e187f827961dc722 GIT binary patch literal 152706 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 literal 0 HcmV?d00001 diff --git a/flash/bellatrix/belflash.spin b/flash/bellatrix/belflash.spin new file mode 100644 index 0000000000000000000000000000000000000000..3a75241b75b0388b6ace3038e5145b5e0465af3f GIT binary patch literal 91664 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 N#PF}lE_mh6{|C4TmI(j= literal 0 HcmV?d00001 diff --git a/flash/bellatrix/logo-hive-8x2.dat b/flash/bellatrix/logo-hive-8x2.dat new file mode 100644 index 0000000000000000000000000000000000000000..109ef59595746f4b507ce708e2ec1d52d6d6a8bf GIT binary patch literal 1024 zcmb`F!3o1K3`GUG7PL^ns~b8%SJ40l^?kQVYB!{pD*PmpB@6q>?2i_?SgUSsYh5g= zS%g`Y^skuKtdP^vt?>NWqR{WB+C54>q`7?(7?qXhKFIJmlQh@QJ~{15bN=i*ZQL@w zqCl<7oT%r**4L(lStk{Zqd16IlGaIzLC-obau4ey;Tjv;TPG~O%mP~R6@z;tryQmG zA4lPq(B4L^6x0`~HER!w*>SLqV-zvHWk literal 0 HcmV?d00001 diff --git a/flash/bellatrix/logo-hive-8x2/dat.rtf b/flash/bellatrix/logo-hive-8x2/dat.rtf new file mode 100644 index 0000000..e758f9d --- /dev/null +++ b/flash/bellatrix/logo-hive-8x2/dat.rtf @@ -0,0 +1,275 @@ +{\rtf1\ansi\deff0{\fonttbl{\f0\fswiss\fcharset0 Arial;}} +{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\lang1031\f0\fs20 char y=0, x=0 \par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par +char y=0, x=1 \par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0003_3333_3300_0000\par + LONG %%0033_3000_3330_0000\par + LONG %%0330_0000_0033_0000\par + LONG %%3300_0000_0003_3000\par + LONG %%3300_0000_0000_3000\par + LONG %%3000_0000_0000_3300\par + LONG %%3000_0000_0000_3300\par + LONG %%3300_0000_0000_3000\par + LONG %%3300_0000_0003_3000\par + LONG %%0330_0000_0033_0000\par + LONG %%0033_3000_0333_0000\par + LONG %%0033_3333_3330_0000\par + LONG %%0333_0000_0333_0000\par +char y=0, x=2 \par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par +char y=0, x=3 \par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%3000_0000_0333_3300\par + LONG %%3000_0000_0333_3300\par + LONG %%3000_0000_0333_3300\par + LONG %%3000_0000_0333_3300\par + LONG %%3000_0000_0333_3300\par + LONG %%3000_0000_0333_3300\par + LONG %%3000_0000_0333_3300\par + LONG %%3000_0000_0333_3300\par + LONG %%3000_0000_0333_3300\par + LONG %%3003_3330_0333_3300\par + LONG %%3033_3333_0333_3300\par + LONG %%3033_3333_0333_3300\par +char y=0, x=4 \par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_3333\par + LONG %%0000_0000_0000_3333\par + LONG %%0000_0000_0000_3333\par + LONG %%0000_0000_0000_3333\par + LONG %%3000_3333_0000_3333\par + LONG %%3003_3333_3000_3333\par + LONG %%3003_3333_3000_3333\par + LONG %%3003_3333_3000_3333\par + LONG %%3003_3333_3000_3333\par + LONG %%3000_3333_0000_3333\par + LONG %%3000_0000_0000_3333\par + LONG %%3000_0000_0000_3333\par +char y=0, x=5 \par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%3330_0000_0000_3333\par + LONG %%3330_0000_0000_3333\par + LONG %%3330_0000_0000_3333\par + LONG %%3330_0000_0000_3333\par + LONG %%3330_0000_0000_3333\par + LONG %%3330_0000_0000_3333\par + LONG %%3330_0000_0000_3333\par + LONG %%3330_0000_0000_3333\par +char y=0, x=6 \par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%3333_3000_0000_0033\par + LONG %%3333_3333_0000_0033\par + LONG %%3333_3333_3000_0033\par + LONG %%3333_3333_3300_0033\par + LONG %%3333_3333_3330_0033\par + LONG %%0000_3333_3330_0033\par + LONG %%0000_0033_3333_0033\par + LONG %%3333_0003_3333_0033\par +char y=0, x=7 \par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_3333\par + LONG %%0000_0000_0000_3333\par + LONG %%0000_0000_0000_3333\par + LONG %%0000_0000_0000_3333\par + LONG %%0000_0000_0000_3333\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par +char y=1, x=0 \par + LONG %%0000_0000_0000_0000\par + LONG %%3330_0000_0000_0000\par + LONG %%0033_3000_0000_0000\par + LONG %%0000_3300_0000_0000\par + LONG %%0000_3300_0000_0000\par + LONG %%0000_0330_0000_0000\par + LONG %%0000_0330_0000_0000\par + LONG %%0000_0330_0000_0000\par + LONG %%0000_0330_0000_0000\par + LONG %%0000_3300_0000_0000\par + LONG %%0003_3000_0000_0000\par + LONG %%0333_0000_0000_0000\par + LONG %%3330_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par +char y=1, x=1 \par + LONG %%3330_0000_0033_3000\par + LONG %%3300_0000_0003_3333\par + LONG %%3300_0000_0003_3300\par + LONG %%0330_0000_0033_0000\par + LONG %%0033_0000_0030_0000\par + LONG %%0033_0000_0330_0000\par + LONG %%0003_3333_3330_0000\par + LONG %%0003_3333_3330_0000\par + LONG %%0033_0000_0330_0000\par + LONG %%0033_0000_0030_0000\par + LONG %%0330_0000_0033_0000\par + LONG %%3300_0000_0003_3330\par + LONG %%0000_0000_0000_0333\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par +char y=1, x=2 \par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0033_3333\par + LONG %%0000_0000_3330_0000\par + LONG %%0000_0000_3300_0000\par + LONG %%0000_0003_3000_0000\par + LONG %%0000_0003_0000_0000\par + LONG %%0000_0033_0000_0000\par + LONG %%0000_0003_0000_0000\par + LONG %%0000_0003_0000_0000\par + LONG %%0000_0003_3000_0000\par + LONG %%0000_0000_3300_0000\par + LONG %%0000_0000_0333_3033\par + LONG %%0000_0000_0003_3333\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par +char y=1, x=3 \par + LONG %%3033_3333_0333_3300\par + LONG %%3033_3333_0333_3300\par + LONG %%3003_3330_0333_3300\par + LONG %%3000_0000_0333_3300\par + LONG %%3000_0000_0333_3300\par + LONG %%3000_0000_0333_3300\par + LONG %%3000_0000_0333_3300\par + LONG %%3000_0000_0333_3300\par + LONG %%3000_0000_0333_3300\par + LONG %%3000_0000_0333_3300\par + LONG %%3000_0000_0333_3300\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par +char y=1, x=4 \par + LONG %%3003_3333_3000_3333\par + LONG %%3003_3333_3000_3333\par + LONG %%3003_3333_3000_3333\par + LONG %%3003_3333_3000_3333\par + LONG %%3003_3333_3000_3333\par + LONG %%0003_3333_3000_3333\par + LONG %%0003_3333_3000_3333\par + LONG %%0003_3333_3000_3333\par + LONG %%0003_3333_3000_3333\par + LONG %%0003_3333_3000_3333\par + LONG %%0003_3333_3000_3333\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par +char y=1, x=5 \par + LONG %%3330_0000_0000_3333\par + LONG %%3330_0000_0000_3333\par + LONG %%3330_0000_0000_3333\par + LONG %%3330_0000_0003_3333\par + LONG %%3330_0000_0003_3333\par + LONG %%3330_0000_0033_3333\par + LONG %%3333_3333_3333_3333\par + LONG %%3333_3333_3333_3330\par + LONG %%3333_3333_3333_3300\par + LONG %%3333_3333_3333_3000\par + LONG %%3333_3333_3330_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par +char y=1, x=6 \par + LONG %%3333_3003_3333_0033\par + LONG %%3333_3003_3333_0033\par + LONG %%3333_3003_3333_0033\par + LONG %%3333_3003_3333_0033\par + LONG %%3333_0033_3333_0033\par + LONG %%0000_3333_3330_0033\par + LONG %%3333_3333_3330_0033\par + LONG %%3333_3333_3300_0033\par + LONG %%3333_3333_3000_0033\par + LONG %%3333_3333_0000_0033\par + LONG %%3333_3000_0000_0033\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par +char y=1, x=7 \par + LONG %%0000_0000_0000_0003\par + LONG %%0000_0000_0000_0003\par + LONG %%0000_0000_0000_0003\par + LONG %%0000_0000_0000_0003\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_3333\par + LONG %%0000_0000_0000_3333\par + LONG %%0000_0000_0000_3333\par + LONG %%0000_0000_0000_3333\par + LONG %%0000_0000_0000_3333\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par + LONG %%0000_0000_0000_0000\par +} + \ No newline at end of file diff --git a/flash/bellatrix/logo-hive-8x2/logo-hive-8x2.dat b/flash/bellatrix/logo-hive-8x2/logo-hive-8x2.dat new file mode 100644 index 0000000000000000000000000000000000000000..109ef59595746f4b507ce708e2ec1d52d6d6a8bf GIT binary patch literal 1024 zcmb`F!3o1K3`GUG7PL^ns~b8%SJ40l^?kQVYB!{pD*PmpB@6q>?2i_?SgUSsYh5g= zS%g`Y^skuKtdP^vt?>NWqR{WB+C54>q`7?(7?qXhKFIJmlQh@QJ~{15bN=i*ZQL@w zqCl<7oT%r**4L(lStk{Zqd16IlGaIzLC-obau4ey;Tjv;TPG~O%mP~R6@z;tryQmG zA4lPq(B4L^6x0`~HER!w*>SLqV-zvHWk literal 0 HcmV?d00001 diff --git a/flash/regnatix/regflash.spin b/flash/regnatix/regflash.spin new file mode 100644 index 0000000000000000000000000000000000000000..6ad1db65961e68aa0eeddac88ce8bd3030f3d6bd GIT binary patch literal 583456 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%0A16`$jIjk~-l2~)y9-x#?bcWuA)%-R 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 literal 0 HcmV?d00001 diff --git a/forth/adm.lib b/forth/adm.lib new file mode 100644 index 0000000..11b7154 --- /dev/null +++ b/forth/adm.lib @@ -0,0 +1,90 @@ + +hex + +ifnot: lib:adm +: lib:adm ; + +\ kommandoformen + +ifnot: adm:fkt! \ ( fkt -- ) +: adm:fkt! b[ [a!] ]b ; + +ifnot: adm:fkt!b! \ ( b fkt -- ) +: adm:fkt!b! b[ [a!] [a!] ]b ; + +ifnot: adm:fkt!b@ \ ( fkt -- b ) +: adm:fkt!b@ b[ 0 [a!] [a!] [a@] ]b ; + +ifnot: adm:fkt!b!b@ \ ( b fkt -- b ) +: adm:fkt!b!b@ b[ [a!] [a!] [a@] ]b ; + +ifnot: adm:fkt!l@ \ ( fkt -- l ) +: adm:fkt!l@ b[ [a!] [a.l@] ]b ; + +ifnot: adm:fkt!s! \ ( s fkt -- ) +: adm:fkt!s! b[ [a!] [a.s!] ]b ; + +\ administra-chipmanagment-funktionen + +\ adm:setsound ( sfkt -- sstat ) - soundsystem verwalten +\ sfkt: +\ 0: hss-engine abschalten +\ 1: hss-engine anschalten +\ 2: dac-engine abschalten +\ 3: dac-engine anschalten +\ sstat - status/cognr startvorgang +ifnot: adm:setsound +: adm:setsound + 5C adm:fkt!b!b@ ; + +\ adm:getspec ( -- spec ) - chipspezifikation abfragen +\ +\ +---------- com +\ | +-------- i2c +\ | |+------- rtc +\ | ||+------ lan +\ | |||+----- sid +\ | ||||+---- wav +\ | |||||+--- hss +\ | ||||||+-- bootfähig +\ | |||||||+- dateisystem +\ %00000000_00000000_00000000_01001111 +ifnot: adm:getspec +: adm:getspec + 5D adm:fkt!l@ ; + +\ adm:setsyssound ( syssnd -- ) - systemklänge +\ syssnd = 0 - systemklänge aus +\ syssnd = 1 - systemklänge an +ifnot: adm:setsyssound +: adm:setsyssound + 5E adm:fkt!b! ; + +\ adm:getsoundsys ( -- sndsys ) - abfrage aktives soundsystem +\ 0 - sound aus +\ 1 - hss +\ 2 - wav +ifnot: adm:getsoundsys +: adm:getsoundsys + 5F adm:fkt!b@ ; + +\ adm:load ( cstr -- ) - neuen administra-code laden +ifnot: adm:aload +: adm:aload + 60 adm:fkt!s! ; + +\ adm:getcogs ( -- cogs ) - anzahl der belegten cogs +ifnot: adm:getcogs +: adm:getcogs + 61 adm:fkt!b@ ; + +\ adm:getver ( -- ver ) - abfrage der codeversion +ifnot: adm:getver +: adm:getver + 62 adm:fkt!l@ ; + +\ adm:reset ( -- ) - reset administra +ifnot: adm:reset +: adm:reset + 63 adm:fkt! ; + diff --git a/forth/ari.lib b/forth/ari.lib new file mode 100644 index 0000000..bca39ba --- /dev/null +++ b/forth/ari.lib @@ -0,0 +1,55 @@ + +hex + +ifnot: lib:ari +: lib:ari ; + +\ abs ( n1 -- abs_n1 ) absolute value of n1 +ifnot: abs +: abs _execasm1>1 151 _cnip ; + +\ u*/mod ( u1 u2 u3 -- u4 u5 ) u5 = (u1*u2)/u3, u4 is the +\ remainder. Uses a 64bit intermediate result. +ifnot: u*/mod +: u*/mod rot2 um* rot um/mod ; + +\ u*/ ( u1 u2 u3 -- u4 ) u4 = (u1*u2)/u3 Uses a 64bit +\ intermediate result. +ifnot: u*/ +: u*/ rot2 um* rot um/mod nip ; + +\ sign ( n1 n2 -- n3 ) n3 is the xor of the sign bits of +\ n1 and n2 +ifnot: sign +: sign xor 80000000 and ; + +\ */mod ( n1 n2 n3 -- n4 n5 ) n5 = (n1*n2)/n3, n4 is the +\ remainder. Uses a 64bit intermediate result. +ifnot: */mod +: */mod 2dup sign >r abs rot dup r> sign >r abs rot abs + um* rot um/mod r> if negate swap negate swap then ; + +\ */ ( n1 n2 n3 -- n4 ) n4 = (n1*n2)/n3. Uses a 64bit +\ intermediate result. +ifnot: */ +: */ */mod nip ; + +\ /mod ( n1 n2 -- n3 n4 ) \ signed divide & mod n4 = n1/n2, +\ n3 is the remainder +ifnot: /mod +: /mod 2dup sign >r abs swap abs swap u/mod r> if negate swap + negate swap then ; + +\ * ( n1 n2 -- n1*n2) n1 multiplied by n2 +ifnot: * +: * um* drop ; + +\ / ( n1 n2 -- n1/n2) n1 divided by n2 +ifnot: / +: / /mod nip ; + +\ rnd ( -- n1 ) n1 is a random number from 00 - FF +ifnot: rnd +: rnd cnt COG@ 8 rshift cnt COG@ xor FF and ; + + diff --git a/forth/basics.mod b/forth/basics.mod new file mode 100644 index 0000000..aa7be0a --- /dev/null +++ b/forth/basics.mod @@ -0,0 +1,485 @@ +fl + +hex + +: mod:basics ; + +\ Copyright (c) 2010 Sal Sanci +\ Anpassung für Hive-System 2011 dr235 + +\ ------------------------------------------------------ BASICS + +\ this words needs to align with the assembler code +: _stptr 5 _cv ; +: _sttop 2e _cv ; + +\ _words ( cstr -- ) +: _words lastnfa + begin + 2dup swap dup if npfx else 2drop -1 then + if dup .strname space then + nfa>next dup 0= + until 2drop cr ; + +\ words name ( -- ) prints the words in the forth dictionary +: words parsenw _words ; + +\ .long ( n -- ) emit 8 hex digits +: .long dup 10 rshift .word .word ; + +\ st? ( -- ) prints out the stack +: st? ." ST: " _stptr COG@ 2+ dup _sttop < + if _sttop swap - 0 + do _sttop 2- i - COG@ .long space loop + else drop + then cr ; + +\ variable ( -- ) skip blanks parse the next word and create +\ a variable, allocate a long, 4 bytes +: variable + lockdict create $C_a_dovarl w, 0 l, forthentry freedict ; + +\ constant ( x -- ) skip blanks parse the next word and create +\ a constant, allocate a long, 4 bytes +: constant + lockdict create $C_a_doconl w, l, forthentry freedict ; + +\ waitpeq ( n1 n2 -- ) \ wait until state n1 is equal to +\ ina anded with n2 +: waitpeq _execasm2>0 1E0 _cnip ; + +\ locknew ( -- n2 ) allocate a lock, result is in n2, -1 +\ if unsuccessful +: locknew -1 4 hubop -1 = if drop -1 then ; + +\ (forget) ( cstr -- ) wind the dictionary back to the word +\ which follows - caution +: (forget) dup +if + find if + pfa>nfa nfa>lfa dup here W! W@ wlastnfa W! + else .cstr 3f emit cr then +else drop then ; + +\ forget ( -- ) wind the dictionary back to the word which +\ follows - caution +: forget parsenw (forget) ; + +\ free ( -- ) display free main bytes and current cog longs +: free dictend W@ here W@ - . ." bytes free - " par + coghere W@ - . ." cog longs free" cr ; + +\ ifnot: name ( -- ) - bedingte compilierung; wenn name schon +\ im wörterbuch vorhanden, wird bis zum nächsten semikolon +\ der eingabestrom ignoriert +: ifnot: parsenw nip find if begin key 3B = until + key drop then ; +\ bei konstrukte, die keine doppelpunkdefinition sind, muss der +\ block mit diesem Wort abgeschlossen werden +: :; ; + +\ --------------------------------------------------------- BUS + +\ bin ( -- ) - umschaltung auf duales zahlensystem +\ : bin 2 base W! ; +\ +---------------------------- /hs +\ |+--------------------------- /wr +\ ||+-------------------------- busclk +\ |||+------------------------- hbeat +\ ||||+------------------------ al +\ |||||+----------------------- /bel +\ ||||||+---------------------- /adm +\ |||||||+--------------------- /ram2 +\ ||||||||+-------------------- /ram1 +\ ||||||||| +--------- a0..10 +\ ||||||||| | +\ ||||||||| | +- d0..7 +\ |||||||||+---------++------+ +\ 00000000000000000000000000000000 +\ bin 00000111111111111111111100000000 constant dinp hex +\ bin 00000111111111111111111111111111 constant dout hex +\ bin 00000010000000000000000000000000 constant boff hex +\ bin 00000100011110000000000000000000 constant _s1 hex +\ bin 00000000001110000000000000000000 constant _b1 hex +\ bin 00000010001110000000000000000000 constant _b2 hex +\ bin 00000110001110000000000000000000 constant _b3 hex +\ bin 00000000010110000000000000000000 constant _a1 hex +\ bin 00000010010110000000000000000000 constant _a2 hex +\ bin 00000110010110000000000000000000 constant _a3 hex +\ bin 00001000000000000000000000000000 constant ?hs hex + +8000000 constant ?hs + +: [inp] \ ( -- ) bus eingabe + 7FFFF00 dira COG! ; \ dinp + +: [out] \ ( -- ) bus ausgabe + 7FFFFFF dira COG! ; \ dout + +: [off] \ ( -- ) bus aus + 2000000 dira COG! 0 outa COG! ; \ boff + +: [end] \ ( -- ) buskommunikation beendet + 4780000 outa COG! [inp] ; \ _s1 + +: [hs=1] \ ( -- ) wartet auf hs = 1 + ?hs dup waitpeq ; + +: [hs=0] \ ( -- ) warten auf hs = 0 + 0 ?hs waitpeq ; + +: [s!] \ ( c ctrl -- ) sende 8 bit an einen slave + [out] [hs=1] swap ff and or outa COG! [hs=0] [end] ; + +: [s@] \ ( ctrl -- c ) empfängt 8 bit von einem slave + [inp] [hs=1] outa COG! [hs=0] ina COG@ ff and [end] ; + +: [b!] \ ( c -- ) sende 8 bit an bellatrix + 2380000 [s!] ; \ _b2 + +: [a!] \ ( c -- ) sende 8 bit an administra + 2580000 [s!] ; \ _a2 + +: [b@] \ ( -- c ) empfängt 8 bit von bellatrix + 6380000 [s@] ; \ _b3 + +: [a@] \ ( -- c ) empfängt 8 bit von administra + 6580000 [s@] ; \ _a3 + +: <8 \ ( -- ) + 8 lshift ; + +\ [b.l!] ( 32b -- ) - long an bellatrix senden +: [b.l!] + dup 18 rshift [b!] + dup 10 rshift [b!] + dup 8 rshift [b!] + [b!] ; + +\ [b.l@] ( -- 32b ) - long von bellatrix einlesen +: [b.l@] + [b@] <8 + [b@] or <8 + [b@] or <8 + [b@] or ; + +\ [a.s@] ( -- ) - einen cstring von administra empfangen +\ und im pad speichern +: [a.s@] + [a@] pad 2dup C! 1+ swap + 0 do dup [a@] swap C! 1+ loop drop ; + +\ [a.s!] ( cstr -- ) - einen cstring an administra senden +: [a.s!] + dup C@ dup [a!] \ ( -- cstr len ) len senden + 0 do \ ( cstr len -- cstr ) + 1+ dup C@ [a!] \ ( cstr -- cstr+1 ) zeichen senden + loop drop ; \ ( cstr -- ) + +\ [a.w@] ( -- 16b ) - 16bit-wert von administra einlesen +: [a.w@] + [a@] <8 [a@] or ; + +\ [a.l!] ( 32b -- ) - long an administra senden +: [a.l!] + dup 18 rshift [a!] + dup 10 rshift [a!] + dup 8 rshift [a!] + [a!] ; + +\ [a.l@] ( -- 32b ) - long von administra einlesen +: [a.l@] + [a@] <8 + [a@] or <8 + [a@] or <8 + [a@] or ; + +wvariable b[lock] \ nummer der semaphore für den + \ zugriff auf die bus-hardware + +\ b[ ( -- ) bus belegen; wartet bis semaphore freigegeben ist +: b[ begin b[lock] W@ lockset -1 <> until [inp] ; + +\ ]b ( -- ) bus freigeben +\ ! busclk bleibt auf ausgabe, da dieses signal sonst +\ kein definierten pegel besitzt ! +: ]b [off] b[lock] W@ lockclr drop ; + +\ administra-kommandoformate + +: b[a! b[ [a!] ; +: b[a!a! b[ [a!] [a!] ; +: adm:fkt! b[a! ]b ; \ ( fkt -- ) +: adm:fkt!b@ b[a! [a@] ]b ; \ ( fkt -- b ) +: adm:fkt!b! b[a!a! ]b ; \ ( b fkt -- ) +: adm:fkt!b!b@ b[a!a! [a@] ]b ; \ ( b fkt -- b ) +: adm:fkt!s@ b[a! [a.s@] ]b ; \ ( fkt -- ) +: adm:fkt!s!b@ b[a! [a.s!] [a@] ]b ; \ ( s fkt -- b ) +: adm:fkt!b!l@ b[a!a! [a.l@] ]b ; \ ( b fkt -- l ) + +\ ----------------------------------------------------- SD0.LIB + +\ marker-funktionen + +\ adm:dmact ( dmnr -- ) - marker aktivieren +: adm:dmact 19 adm:fkt!b!b@ drop ; + +\ adm:dmset ( dmnr -- ) - marker setzen +: adm:dmset 1A adm:fkt!b! ; + +\ dateisystem-funktionen + +\ adm:volname ( -- ) - name des volumes im pad ablegen +: adm:volname 0C adm:fkt!s@ ; + +\ adm:mount ( -- err ) - medium mounten +: adm:mount 01 adm:fkt!b@ ; + +\ adm:unmount ( -- err ) - medium unmounten +: adm:unmount 18 adm:fkt!b@ ; + +\ adm:checkmounted ( -- t/f ) +: adm:checkmounted 0D adm:fkt!b@ ; + +\ adm:diropen ( -- ) - verzeichnisabfrage initialisieren +: adm:diropen 02 adm:fkt! ; + +\ adm:nextfile ( -- st ) +\ st = 0 - keine gültige datei +\ st = 1 - dateiname im pad gültig +\ bei gültigem eintrag befindet sich der dateiname im pad +: adm:nextfile b[ 3 [a!] [a@] dup if [a.s@] then ]b ; + +\ adm:fattrib ( nr -- attrib ) - dateiattribut abfragen +: adm:fattrib 0B adm:fkt!b!l@ ; + +\ adm:chdir ( cstr -- err ) - verzeichnis öffnen +: adm:chdir 16 adm:fkt!s!b@ ; + +\ adm:getc ( -- c ) - ein zeichen aus der geöffneten datei lesen +: adm:getc 06 adm:fkt!b@ ; + +\ adm:eof ( -- eof ) - abfrage ob end of file erreicht ist +: adm:eof 1E adm:fkt!b@ ; + +\ adm:open ( cstr modus -- err ) - datei öffnen +\ modus "R" $52 - Read +\ modus "W" $57 - Write +\ modus "A" $41 - Append +: adm:open b[ 4 [a!] [a!] [a.s!] [a@] ]b ; + +\ adm:close ( -- ) - datei schließen +: adm:close 05 adm:fkt!b@ ; + +\ ----------------------------------------------------- SCR.LIB + +\ [dscr] ( scrnr -- ) display-screen setzen +: [dscr] 0 [b!] 59 [b!] [b!] ; + +\ [wscr] ( scrnr -- ) schreib-screen setzen +: [wscr] 0 [b!] 58 [b!] [b!] ; + +\ [key?] ( -- c ) - ungekapselte tastaturstatusabfrage +: [key?] 0 [b!] 1 [b!] [b@] ; + +\ [key] ( -- c ) - ungekapselte tastaturabfrage +: [key] 0 [b!] 2 [b!] [b@] ; + +\ [emit] ( c -- ) - ungekapselte zeichenausgabe +: [emit] emit? if emit then ; + +\ ----------------------------------------------------- TOOLS + +\ cls ( -- ) - screen löschen +: cls 01 emit ; + +\ .tab ( -- ) - tabulator +: .tab 09 emit ; + +\ .err ( err -- ) - fehlermeldung ausgeben +\ 0 no error +\ 1 fsys unmounted +\ 2 fsys corrupted +\ 3 fsys unsupported +\ 4 not found +\ 5 file not found +\ 6 dir not found +\ 7 file read only +\ 8 end of file +\ 9 end of directory +\ 10 end of root +\ 11 dir is full +\ 12 dir is not empty +\ 13 checksum error +\ 14 reboot error +\ 15 bpb corrupt +\ 16 fsi corrupt +\ 17 dir already exist +\ 18 file already exist +\ 19 out of disk free space +\ 20 disk io error +\ 21 command not found +\ 22 timeout +\ 23 parameter error +: .err dup if ERR then drop ; + +\ .pad ( -- ) - ausgabe eines strings im pad +: .pad pad .cstr ; + +\ .vname ( -- ) - ausgabe des namens der eingelegten sd-card +: .vname adm:volname .pad ; + +\ mount ( -- ) - sd-card mounten +: mount adm:mount .err ." Medium : " .vname cr ; + +\ unmount ( -- ) - sd-card unmounten +: unmount adm:unmount .err ; + +\ mount? ( -- ) - test ob medium mounted ist +\ wird als exception gewertet +: mount? adm:checkmounted 0= if 1 .err then ; + +\ padbl ( -- ) fills this cogs pad with blanks +: padbl pad padsize bl fill ; + +\ .entry ( -- st ) - einen verzeichniseintrag ausgeben +: .entry + adm:nextfile 13 adm:fattrib if 0F emit else space then + dup if .pad .tab then ; + +\ .len ( st -- st ) - dateilänge ausgeben +: .len dup if 0 adm:fattrib . then ; + +\ lscnt ( cnt1 st -- cnt2 st ) - spaltenformatierung für ls +\ cnt - spaltenzähler, st - flag verzeichnisende +: lscnt + swap 1+ dup 4 = if cr drop 0 else .tab then swap ; + +\ lsl ( -- ) - verzeichnis anzeigen, long-format +: lsl mount? + adm:diropen begin .entry .len cr 0= until padbl ; + +\ ls ( -- ) - verzeichnis in spalten anzeigen +: ls mount? + adm:diropen 0 begin .entry lscnt 0= until drop padbl cr ; + +\ cd name ( -- ) - verzeichnis wechseln +: cd mount? parsenw adm:chdir .err ; + +\ open name ( -- ) - datei lesend öffnen und auf fehler prüfen +: open + mount? parsenw dup + if 52 adm:open else drop 23 then .err ; + +\ close ( -- ) - geöffnete datei schließen +: close adm:close .err ; + +\ dload name - datei compilieren; log im gleichen screen +\ load name - datei compilieren; log screen 3 +\ sys name - datei aus sys compilieren; log screen 3 +\ die datei wird in der nächsten freien cog compiliert +\ fl ist für load nicht nötig und bringt in dem kontext +\ die cog-zuordnung durcheinander + +: (load) + begin adm:getc emit adm:eof until ; + +: (dload) + open cogid nfcog iolink + (load) + cogid iounlink close ; + +: (sload) + open cogid 3 dup b[ [wscr] ]b iolink + (load) + cogid dup b[ [wscr] ]b iounlink close ; + +: load + ." Loading... " (sload) ; + +: dload + (dload) ; + +: sys + 2 adm:dmset 1 adm:dmact ." Loading... " (sload) 2 adm:dmact ; + +\ ------------------------------------------------- SPIN-LOADER + +\ (spin) ( cstr -- ) - c" reg.sys" (spin) +: (spin) + dup C@ 1+ + 0 do + dup i + C@ + ldvar 1+ i + C! + loop drop + 1 ldvar C! +; + +\ spin name ( -- ) - spinobjekt "name" starten +: spin + parsenw (spin) ; + +\ regime ( -- ) - startet dir trios-cli "regime" +: regime + 0 adm:dmact + c" reg.sys" (spin) ; + +\ ----------------------------------------------------- DRV:INT + + +wvariable icog \ nummer der drv:int-cog +wvariable lcog \ nummer interaktiven cog + +\ xint ( n -- ) io von cog n auf drv:int umschalten +: xint icog W@ ioconn ; + +\ [cogscr] ( nr -- ) - umschaltung screen + cog +: [cogscr] + dup 2dup lcog W! xint [dscr] [wscr] ; + +\ =n ( n1 n2 -- n1 n1=n2 ) +: =n 2dup = swap drop ; + +\ [esc] ( -- ) - manager für esc-funktionen im drv:int +: [esc] + begin [key?] until [key] + 71 =n if 1b [emit] then \ esc - q : esc-char/quit + 31 =n if 1 [cogscr] then \ esc - 1 : cog-screen 0 + 32 =n if 2 [cogscr] then \ esc - 2 : cog-screen 1 + 33 =n if 3 [cogscr] then \ esc - 3 : cog-screen 2 + 62 =n if lcog W@ cogreset then \ esc - b : break (cog) + 72 =n if reboot then \ esc - r : reset (chip) + drop ; \ esc - esc : pause + +\ drv:int ( -- ) treiber für bellatrix-terminal +\ diese cog fragt in einer endlosschleife ab, ob zeichen +\ versendet oder empfangen werden sollen. um die zeichenausgabe +\ zu beschleunigen, findet ausgabe und eingabe in einem +\ verhältnis von 512:1 statt. per esc-code können spezielle +\ funktionen im driver ausgelöst werden. +: drv:int + \ name und typ der cog einstellen + cogid dup cogstate 10 swap C! c" drv:int" over + cognumpad ccopy + 20 delms 0D emit \ verzögertes cr für prompt + begin + \ input --> vga/video + 200 0 do key? \ eingabezeichen vorhanden? + if key b[ [b!] ]b then loop \ cog ---> bel.vga + \ output <-- keyboard + b[ [key?] \ tastenstatus bellatrix? + if [key] dup 1b = if drop [esc] else [emit] thens ]b + 0 until ; + +\ ----------------------------------------------------- SYSINIT + +: start \ ( -- ) initialisierung hive + locknew b[lock] W! \ b-semaphore + 0 dup cogstate 10 swap C! c" drv:ldr" over + cognumpad ccopy + 5 dup icog W! c" drv:int" swap cogx 1 b[ [cogscr] ]b ; +: _ob onboot ; +: onboot _ob start ; + + + diff --git a/forth/bel.lib b/forth/bel.lib new file mode 100644 index 0000000..0034988 --- /dev/null +++ b/forth/bel.lib @@ -0,0 +1,77 @@ + +hex + +ifnot: lib:bel +: lib:bel ; + +\ kommandoformate + +ifnot: bel:fkt! \ ( fkt -- ) +: bel:fkt! b[ 0 [b!] [b!] ]b ; + +ifnot: bel:fkt!b! \ ( b fkt -- ) +: bel:fkt!b! b[ 0 [b!] [b!] [b!] ]b ; + +ifnot: bel:fkt!b!l@ \ ( b fkt -- l ) +: bel:fkt!b!l@ b[ 0 [b!] [b!] [b!] [b.l@] ]b ; + +ifnot: bel:fkt!b!l! \ ( l b fkt -- ) +: bel:fkt!b!l! b[ 0 [b!] [b!] [b!] [b.l!] ]b ; + +ifnot: bel:fkt!l@ \ ( fkt -- l ) +: bel:fkt!l@ b[ 0 [b!] [b!] [b.l@] ]b ; + +ifnot: bel:fkt!b@ \ ( fkt -- b ) +: bel:fkt!b@ b[ 0 [b!] [b!] [b@] ]b ; + +\ chipmanagment-funktionen + +ifnot: bel:wscr \ ( scrnr -- ) - schreibscreen setzen +: bel:wscr 58 bel:fkt!b! ; + +ifnot: bel:dscr \ ( scrnr -- ) - displayscreen setzen +: bel:dscr 59 bel:fkt!b! ; + +ifnot: bel:getcol \ ( colnr -- col ) - farbe abfragen +: bel:getcol 5A bel:fkt!b!l@ ; + +ifnot: bel:setcol \ ( col colnr -- ) - farbe setzen +: bel:setcol 5B bel:fkt!b!l! ; + +ifnot: bel:getresx \ ( -- resx ) - abfrage x-auflösung +: bel:getresx 5C bel:fkt!l@ ; + +ifnot: bel:getresy \ ( -- resy ) - abfrage y-auflösung +: bel:getresy 5D bel:fkt!l@ ; + +ifnot: bel:getcols \ ( -- cols ) - abfrage textspalten +: bel:getcols 5E bel:fkt!b@ ; + +ifnot: bel:getrows \ ( -- rows ) - abfrage textzeilen +: bel:getrows 5F bel:fkt!b@ ; + +ifnot: bel:getcogs \ ( -- cogs ) - abfrage belegte cogs +: bel:getcogs 60 bel:fkt!b@ ; + +ifnot: bel:getspec \ ( -- spec ) - abfrage codespezifikation +: bel:getspec 61 bel:fkt!l@ ; + +ifnot: bel:getver \ ( -- ver ) - abfrage codeversion +: bel:getver 62 bel:fkt!l@ ; + +ifnot: bel:load \ ( cstr -- ) - bellatrix-code laden +: bel:load + 52 adm:open .err \ datei öffnen + b[ + 0 [b!] 63 [b!] \ bella-loader starten + 10 0 do 06 [a!] [a@] [b!] loop \ header einlesen + 0A [a!] 0 [a.l!] \ 0 adm:seek + [b@] <8 [b@] or \ dateilänge empfangen + 0 do 06 [a!] [a@] [b!] loop \ datei senden + ]b + adm:close .err \ datei schließen +; + + + + diff --git a/forth/cog.lib b/forth/cog.lib new file mode 100644 index 0000000..14c242e --- /dev/null +++ b/forth/cog.lib @@ -0,0 +1,74 @@ + +hex + +ifnot: lib:cog +: lib:cog ; + +\ cog special register + +ifnot: ctra 1F8 wconstant ctra :; +ifnot: ctrb 1F9 wconstant ctrb :; +ifnot: frqa 1FA wconstant frqa :; +ifnot: frqb 1FB wconstant frqb :; +ifnot: phsa 1FC wconstant phsa :; +ifnot: phsb 1FD wconstant phsb :; +ifnot: vcfg 1FE wconstant vcfg :; +ifnot: vscl 1FF wconstant vscl :; + +\ this words needs to align with the assembler code + +ifnot: _faddrmask : _faddrmask 1 _cv ; +ifnot: _flongmask : _flongmask 2 _cv ; +ifnot: _stptr : _stptr 5 _cv ; +ifnot: _sttos : _sttos 7 _cv ; +ifnot: _treg1 : _treg1 8 _cv ; +ifnot: _treg2 : _treg2 9 _cv ; +ifnot: _treg3 : _treg3 a _cv ; +ifnot: _treg4 : _treg4 b _cv ; +ifnot: _treg5 : _treg5 c _cv ; +ifnot: _treg6 : _treg6 d _cv ; +ifnot: _stbot : _stbot e _cv ; +ifnot: _sttop : _sttop 2e _cv ; +ifnot: _rsbot : _rsbot _sttop ; + +\ waitcnt ( n1 n2 -- n1 ) \ wait until n1, add n2 to n1 +ifnot: waitcnt +: waitcnt _execasm2>1 1F1 _cnip ; + +\ waitpeq ( n1 n2 -- ) \ wait until state n1 is equal to +\ ina anded with n2 +ifnot: waitpeq +: waitpeq _execasm2>0 1E0 _cnip ; + +\ waitpne ( n1 n2 -- ) \ wait until state n1 is not equal +\ to ina anded with n2 +ifnot: waitpne +: waitpne _execasm2>0 1E8 _cnip ; + +\ lockret ( n1 -- ) deallocate a lock, previously allocated +\ via locknew +ifnot: lockret +: lockret 5 hubop 2drop ; + +\ locknew ( -- n2 ) allocate a lock, result is in n2, -1 +\ if unsuccessful +ifnot: locknew +: locknew -1 4 hubop -1 = if drop -1 then ; + +\ cog+ ( -- ) add a forth cog +ifnot: cog+ +: cog+ (cog+) ; + +\ (cog-) ( -- ) stop first forth cog, cannot be executed form +\ the first forth cog +ifnot: (cog-) +: (cog-) nfcog cogstop ; + +\ cog- ( -- ) stop first forth cog, cannot be executed form +\ the first forth cog +ifnot: cog- +: cog- (cog-) ; + + + + diff --git a/forth/debug.mod b/forth/debug.mod new file mode 100644 index 0000000..937129d --- /dev/null +++ b/forth/debug.mod @@ -0,0 +1,65 @@ + +hex + +ifnot: mod:debug +: mod:debug ; + +\ keycode ( -- ) - anzeige der tastaturcodes +ifnot: keycode +: keycode + begin + 0 key? if + drop key dup dup ." code : " emit ." : " . cr 1B = + then until ; + +\ +\ Noisy reset messages +\ +\ print out a reset message to the console +\ (rsm) ( n -- ) n is the last status +\ 0011FFFF - stack overflow +\ 0012FFFF - return stack overflow +\ 0021FFFF - stack underflow +\ 0022FFFF - return stack underflow +\ 8100FFFF - no free cogs +\ 8200FFFF - no free main memory +\ 8400FFFF - fl no free main memory +\ 8500FFFF - no free cog memory +\ 8800FFFF - eeprom write error +\ 9000FFFF - eeprom read error + +: (rsm) state W@ 2 and 0= swap +\ process the last status + dup 0= if c" ok" else + dup FF11 = if c" DST OVER" else + dup FF12 = if c" RST OVER" else + dup FF21 = if c" DST LOW" else + dup FF22 = if c" RST LOW" else + dup 8001 = if c" COGs OUT" else + dup 8002 = if c" hMEM OUT" else + dup 8003 = if c" ROM WR" else + dup 8004 = if c" FL" else + dup 8005 = if c" cMEM OUT" else + dup 8006 = if c" ROM RD" else + c" ?" + thens + rot if + lockdict cr c" ERR : " .cstr swap . .cstr cr freedict + else 2drop then ; +: onreset (rsm) 4 state orC! ; + +\ .byte ( n1 -- ) +: .byte <# # # #> .cstr ; + +\ [if (dumpb) +: (dumpb) cr over .addr space dup .addr _ecs bounds ; ] + +\ [if (dumpm) +: (dumpm) cr .word _ecs ; ] + +\ [if (dumpe) +: (dumpe) tbuf 8 bounds do i C@ .byte space loop 2 spaces tbuf 8 bounds do i C@ dup bl < if drop 2e then emit loop ; ] + +\ dump ( adr cnt -- ) uses tbuf +[if dump +: dump (dumpb) do i (dumpm) i tbuf 8 cmove (dumpe) 8 +loop cr ; ] diff --git a/forth/error.txt b/forth/error.txt new file mode 100644 index 0000000..17013b3 --- /dev/null +++ b/forth/error.txt @@ -0,0 +1,40 @@ + +Reset-Fehlercodes: + +0011FFFF - stack overflow +0012FFFF - return stack overflow +0021FFFF - stack underflow +0022FFFF - return stack underflow +8100FFFF - no free cogs +8200FFFF - no free main memory +8400FFFF - fl no free main memory +8500FFFF - no free cog memory +8800FFFF - eeprom write error +9000FFFF - eeprom read error + +.err-Fehlercodes: + +0 no error +1 fsys unmounted +2 fsys corrupted +3 fsys unsupported +4 not found +5 file not found +6 dir not found +7 file read only +8 end of file +9 end of directory +10 end of root +11 dir is full +12 dir is not empty +13 checksum error +14 reboot error +15 bpb corrupt +16 fsi corrupt +17 dir already exist +18 file already exist +19 out of disk free space +20 disk io error +21 command not found +22 timeout +23 parameter error diff --git a/forth/hplay.mod b/forth/hplay.mod new file mode 100644 index 0000000..2916ebe --- /dev/null +++ b/forth/hplay.mod @@ -0,0 +1,155 @@ + +hex + +ifnot: mod:hplay +: mod:hplay ; + +\ kommandoformate + +ifnot: adm:fkt! \ ( fkt -- ) +: adm:fkt! b[ [a!] ]b ; + +ifnot: adm:fkt!b! \ ( b fkt -- ) +: adm:fkt!b! b[ [a!] [a!] ]b ; + +ifnot: adm:fkt!b!w@ \ ( b fkt -- w ) +: adm:fkt!b!w@ b[ [a!] [a!] [a.w@] ]b ; + +ifnot: adm:fkt!s!b@ \ ( cstr fkt -- b ) +: adm:fkt!s!b@ b[ [a!] [a.s!] [a@] ]b ; + +ifnot: bel:fkt!b@ \ ( fkt -- b ) +: bel:fkt!b@ b[ 0 [b!] [b!] [b@] ]b ; + +ifnot: bel:char \ ( b -- ) +: bel:char b[ [b!] ]b ; + +\ hss-funktionen + +ifnot: hss:load \ ( cstr -- err ) - hss-datei laden +: hss:load dup if 64 adm:fkt!s!b@ then ; + +ifnot: hss:play \ ( -- ) - datei im puffer abspielen +: hss:play 65 adm:fkt! ; + +ifnot: hss:stop \ ( -- ) - player stop +: hss:stop 66 adm:fkt! ; + +ifnot: hss:reg \ hreg ( regnr -- 16b ) +: hss:reg 69 b[ [a!] [a!] [a.w@] ]b ; + +ifnot: hss:vol \ hvol ( vol -- ) - lautstärke 0..15 +: hss:vol 6A adm:fkt!b! ; + +\ keyboard-funktionen + +ifnot: key:stat \ ( -- stat ) - tastenstatus abfragen +: key:stat 1 bel:fkt!b@ ; + +\ steuerzeichen + +ifnot: scr:cls \ ( -- ) - screen löschen +: scr:cls 01 bel:char ; + +ifnot: scr:home \ ( -- ) - cursor oben links +: scr:home 02 bel:char ; + +ifnot: scr:curon \ ( -- ) - cursor anschalten +: scr:curon 04 bel:char ; + +ifnot: scr:curoff \ ( -- ) - cursor abschalten +: scr:curoff 05 bel:char ; + +\ sd0-funktionen + +\ adm:diropen ( -- ) - verzeichnisabfrage initialisieren +ifnot: adm:diropen +: adm:diropen + 02 adm:fkt! ; + +\ adm:nextfile ( -- st ) +\ st = 0 - keine gültige datei +\ st = 1 - dateiname im pad gültig +\ bei gültigem eintrag befindet sich der dateiname im pad +ifnot: adm:nextfile +: adm:nextfile + b[ 03 [a!] [a@] dup if [a.s@] then ]b ; + +\ metafunktionen + +\ hload name ( -- ) - hss-datei in player laden + +ifnot: hload +: hload mount? parsenw hss:load .err ; + +ifnot: .hset +: .hset \ ( shift -- ) - eine registersatz ausgeben + 5 0 do dup i + hss:reg .word space loop drop ; + +ifnot: .hreg +: .hreg \ ( -- ) - register ausgeben + 14 0 do i .hset cr 5 +loop ; + +ifnot: fadeout +: fadeout \ ( -- ) - sound langsam ausblenden + f 0 do e i - hss:vol 50 delms loop ; + +ifnot: end? +: end? \ ( cnt -- flag ) - abfrage nach cnt wiederholungen + 4 hss:reg = ; + +ifnot: hwait +: hwait \ ( -- flag ) - wartet auf songende oder taste + begin 50 delms key? 2 end? or until key drop ; + +ifnot: hreg.. +: hreg.. \ ( -- ) - fortlaufende anzeige register + scr:curoff scr:cls begin scr:home .hreg 2 end? until + scr:curon fadeout hss:stop ; + +ifnot: (hplay) +: (hplay) \ ( cstr -- ) + ." Datei : " dup .cstr hss:load .err f hss:vol hss:play + hwait fadeout hss:stop 100 delms cr ; + +\ hplay name ( -- ) - datei abspielen +ifnot: hplay +: hplay + hload hss:play ; + +\ files? ( -- cnt ) - anzahl dateien im dir +ifnot: files? +: files? + adm:diropen + 0 begin adm:nextfile swap 1+ swap 0= until 3 - padbl ; + +\ filenr? ( nr -- ) +ifnot: filenr? +: filenr? + adm:diropen + 0 do adm:nextfile drop loop ; + +\ hdirplay ( -- ) - gesamtes verzeichnis abspielen +\ im verzeichnis dürfen nur hss-dateien sein! +ifnot: hdirplay +: hdirplay + decimal files? dup ." Dateien : " . cr + 0 do i dup 1 + . 3 + filenr? pad (hplay) loop padbl hex ; + +: (hp) ." play : " dup .cstr hss:load .err ; + +ifnot: playliste +: playliste + c" kw.hss" (hplay) + c" genes.hss" (hplay) + c" greenpuz.hss" (hplay) + c" hssintro.hss" (hplay) + c" kali766.hss" (hplay) + c" machine.hss" (hplay) + c" metroid.hss" (hplay) + c" mrboss.hss" (hplay) + c" mrevil.hss" (hplay) + c" raind.hss" (hplay) + c" sytrus.hss" (hplay) + c" tbellsp1.hss" (hplay) ; + diff --git a/forth/hss.lib b/forth/hss.lib new file mode 100644 index 0000000..33db039 --- /dev/null +++ b/forth/hss.lib @@ -0,0 +1,60 @@ + +hex + +ifnot: lib:hss +: lib:hss ; + +\ kommandoformate + +ifnot: adm:fkt! \ ( fkt -- ) +: adm:fkt! b[ [a!] ]b ; + +ifnot: adm:fkt!b! \ ( b fkt -- ) +: adm:fkt!b! b[ [a!] [a!] ]b ; + +ifnot: adm:fkt!b!b! \ ( b b fkt -- ) +: adm:fkt!b!b! b[ [a!] [a!] [a!] ]b ; + +ifnot: adm:fkt!b!w@ \ ( b fkt -- w ) +: adm:fkt!b!w@ b[ [a!] [a!] [a.w@] ]b ; + +ifnot: adm:fkt!s!b@ \ ( cstr fkt -- b ) +: adm:fkt!s!b@ b[ [a!] [a.s!] [a@] ]b ; + +\ hss-funktionen + +\ ( cstr -- err ) - hss-datei laden +ifnot: hss:load +: hss:load dup if 64 adm:fkt!s!b@ then ; + +\ ( -- ) - datei im puffer abspielen +ifnot: hss:play +: hss:play 65 adm:fkt! ; + +\ ( -- ) - player stop +ifnot: hss:stop +: hss:stop 66 adm:fkt! ; + +\ ( -- ) - player pause +ifnot: hss:pause +: hss:pause 67 adm:fkt! ; + +\ hreg ( regnr -- 16b ) +\ 0 iEndFlag iRowFlag iEngineC iBeatC iRepeat Player +\ 5 iNote iOktave iVolume iEffekt iInstrument Kanal 1 +\ 10 iNote iOktave iVolume iEffekt iInstrument Kanal 2 +\ 15 iNote iOktave iVolume iEffekt iInstrument Kanal 3 +\ 20 iNote iOktave iVolume iEffekt iInstrument Kanal 4 +\ +\ iEndFlag Repeat oder Ende wurde erreicht +\ iRowFlag Trackerzeile (Row) ist fertig +\ iEngineC Patternzähler +\ iBeatC Beatzähler (Anzahl der Rows) +\ iRepeat Zähler für Loops +ifnot: hss:reg +: hss:reg 69 b[ [a!] [a!] [a.w@] ]b ; + +\ hvol ( vol -- ) - lautstärke 0..15 +ifnot: hss:vol +: hss:vol 6A adm:fkt!b! ; + diff --git a/forth/key.lib b/forth/key.lib new file mode 100644 index 0000000..45204a5 --- /dev/null +++ b/forth/key.lib @@ -0,0 +1,17 @@ + +hex + +ifnot: lib:key +: lib:key ; + +\ kommandoformate +ifnot: bel:fkt!b@ \ ( fkt -- b ) +: bel:fkt!b@ b[ 0 [b!] [b!] [b@] ]b ; + +\ keyboard-funktionen +ifnot: key:stat \ ( -- stat ) - tastenstatus abfragen +: key:stat 1 bel:fkt!b@ ; +ifnot: key:code \ ( -- code ) - tastencode abfragen +: key:code 2 bel:fkt!b@ ; +ifnot: key:spec \ ( -- spec ) - spezialtasten abfragen +: key:spec 4 bel:fkt!b@ ; diff --git a/forth/rom.mod b/forth/rom.mod new file mode 100644 index 0000000..9a91eda --- /dev/null +++ b/forth/rom.mod @@ -0,0 +1,206 @@ + +\ ACHTUNG: Diese Modifikation nicht bei einer Installation im +\ HI-EEPROM verwenden! + +hex +[if mod:rom +: mod:rom ; ] + +\ constant ( x -- ) skip blanks parse the next word and create a constant, allocate a long, 4 bytes +[if constant +: constant lockdict create $C_a_doconl w, l, forthentry freedict ; ] + +\ +\ CONFIG PARAMETERS BEGIN +\ +40 wconstant fsps \ a page size which works with 32kx8 & 64kx8 eeproms + \ and should work with larger as well. + + +8000 constant fsbot \ file-system bottom: the start adress in eeprom for the file system + + \ file system top: the end address of the file system + \ uncomment the line for your comfiguration +\ 8000 constant fstop \ the end address for the file system with one 24LC256 32k eeprom +10000 constant fstop \ the end address for the file system with one 24LC512 64k eeprom +\ 20000 constant fstop \ the end address for the file system with two 24LC512 64k eeprom +\ 30000 constant fstop \ the end address for the file system with 3 24LC512 64k eeprom +\ 40000 constant fstop \ the end address for the file system with 4 24LC512 64k eeprom +\ 50000 constant fstop \ the end address for the file system with 5 24LC512 64k eeprom +\ 60000 constant fstop \ the end address for the file system with 6 24LC512 64k eeprom +\ 70000 constant fstop \ the end address for the file system with 7 24LC512 64k eeprom + +\ NOTE IF you have DEMOBOARD or any system with 32K EEPROM, you will step on your spin image +\ when you write to the EEPROM. You can still use it (if you are tricky), but KNOW WHAT YOUR DOING!!! + +\ +\ CONFIG PARAMETERS END +\ + + +\ lasti? ( -- t/f ) true if this is the last value of i in this loop +[if lasti? +: lasti? _rsptr COG@ 2+ COG@ 1- _rsptr COG@ 3 + COG@ = ; ] + +\ padbl ( -- ) fills this cogs pad with blanks +[if padbl +: padbl pad padsize bl fill ; ] +\ _eeread ( t/f -- c1 ) read a byte from the eeprom, ackbit in, byte out +[if _eeread : _eeread _sdai 0 8 0 do 1 lshift _sclh _sda? _scll if 1 or then loop +swap if _sdah else _sdal then _sdao _sclh _scll _sdal ; ] + +\ the eereadpage and eewritePage words assume the eeprom are 64kx8 and will address up to +\ 8 sequential eeproms +\ eereadpage ( eeAddr addr u -- t/f ) return true if there was an error, use lock 1 +[if eereadpage : eereadpage begin 1 lockset 0= until +1 max rot dup ff and swap dup 8 rshift ff and swap 10 rshift 7 and 1 lshift dup >r +_eestart A0 or _eewrite swap _eewrite or swap _eewrite or +_eestart r> A1 or _eewrite or +rot2 bounds +do lasti? _eeread i C! loop _eestop 1 lockclr drop ; ] + +\ _eeread ( t/f -- c1 ) read a byte from the eeprom, ackbit in, byte out +[if _eeread : _eeread _sdai 0 8 0 do 1 lshift _sclh _sda? _scll if 1 or then loop +swap if _sdah else _sdal then _sdao _sclh _scll _sdal ; ] + +\ the eereadpage and eewritePage words assume the eeprom are 64kx8 and will address up to +\ 8 sequential eeproms +\ eereadpage ( eeAddr addr u -- t/f ) return true if there was an error, use lock 1 +[if eereadpage : eereadpage begin 1 lockset 0= until +1 max rot dup ff and swap dup 8 rshift ff and swap 10 rshift 7 and 1 lshift dup >r +_eestart A0 or _eewrite swap _eewrite or swap _eewrite or +_eestart r> A1 or _eewrite or +rot2 bounds +do lasti? _eeread i C! loop _eestop 1 lockclr drop ; ] + +\ EW@ ( eeAddr -- n1 ) +[if EW@ +: EW@ t0 2 eereadpage if 8006 ERR then t0 W@ ; ] + +\ EC@ ( eeAddr -- c1 ) +[if EC@ +: EC@ EW@ FF and ; ] + +\ (fspa) ( addr1 -- addr2) addr2 is the next page aligned address after addr1 +: (fspa) fsps 1- + fsps 1- andn ; + +\ (fsnext) ( addr1 -- addr2 t/f) addr - the current file address, addr2 - the next addr, t/f - true if we have +\ gone past the end of the eeprom. t0 -length of the current file +\ t1 - length of the file name (char) +: (fsnext) t0 W@ t1 C@ + 2+ 1+ + (fspa) dup fstop >= ; + + +\ (fswr) ( addr1 addr2 n1 -- ) addr1 - the eepropm address to write, addr2 - the address to write from +\ n1 - the number of bytes to write +: (fswr) dup >r rot dup r> + fstop 1- > if A0 ERR then rot2 eewritepage if 88 ERR then ; + +\ (fsrd) ( addr1 addr2 n1 -- ) addr1 - the eepropm address to read, addr2 - the address of the read buffer +\ n1 - the number of bytes to read +: (fsrd) dup >r rot dup r> + fstop 1- > if C0 ERR then rot2 eereadpage if 90 ERR then ; + +\ (fsfree) ( -- n1 ) n1 is the first location in the file system, -1 if there are none +: (fsfree) -1 fsbot begin +\ read 3 bytes into t0, t1 and process + dup t0 3 (fsrd) t0 W@ FFFF = if nip dup -1 else (fsnext) then +until drop ; + +\ (fsfind) ( cstr -- addr ) find the last file named cstr, addr is the eeprom address, 0 if not found +: (fsfind) fsbot 0 >r begin +\ read namesizemax 1F + 3 bytes into t0, t1, and tbuf + dup t0 22 (fsrd) t0 W@ FFFF = if -1 else + over t1 cstr= if r> drop dup >r then + (fsnext) + then +until 2drop r> ; + +\ (fslast) ( -- addr ) find the last file, 0 if not found +: (fslast) 0 fsbot begin +\ read namesizemax 1F + 3 bytes into t0, t1, and tbuf + dup t0 22 (fsrd) t0 W@ FFFF = if -1 else + nip dup + (fsnext) + then +until drop ; + +\ fsclear ( -- ) +: fsclr padbl fsbot 400 + fsbot do i pad fsps (fswr) 2e emit fsps +loop -1 fsbot EW! ; +: fsclear -1 fsbot EW! ; + +\ fsfree ( -- ) +: fsfree (fsfree) dup -1 = if 0 else fstop swap - then . ." bytes free in fs" cr ; + +\ fsls ( -- ) list the files +: fsls cr fsbot begin +\ read namesizemax 1F + 3 bytes into t0, t1, and tbuf + dup t0 22 (fsrd) t0 W@ FFFF = if -1 else + dup .addr space t0 W@ .addr space t1 .cstr cr + (fsnext) + then +until fstop swap - cr . ." bytes free in files system" cr cr ; + +\ (fsread) ( cstr -- ) +: (fsread) (fsfind) dup if +\ read 3 bytes into t0, t1 and process + dup t0 3 (fsrd) + t1 C@ + 2+ 1+ t0 W@ bounds do + ibound i - fsps >= if + i pad fsps (fsrd) pad fsps bounds + do i C@ emit loop i fsps 1- + seti + else + i EC@ emit + then + loop +else drop then padbl ; + +\ fsread ( -- ) filename +: fsread parsenw dup if (fsread) else drop then ; + +\ (fsload) ( ctsr -- ) +: (fsload) cogid nfcog iolink (fsread) d emit d emit cogid iounlink ; + +\ fsload filename ( -- ) send the file to the next free forth cog +: fsload parsenw dup if (fsload) else drop then ; + +\ (fsk) ( n1 -- n2) +: (fsk) 8 lshift key or ; + +\ fswrite filename ( -- ) writes a file until ... followed immediately by a cr is encountered +: fswrite (fsfree) dup -1 <> parsenw dup rot and if +\ set the file length to 0, copy in the file name + 0 pad W! dup C@ 2+ 1+ pad + swap pad 2+ ccopy +\ find the first free page + 0 swap key (fsk) (fsk) (fsk) +\ ( eaddr1 n1 addr2 n2 ) eaddr - start of file in the eeprom, n1 - bytes written so far, addr2 - next addr in the pad, +\ n2 - a 4 byte key buffer + begin +\ check to see if we have a ... at the end of a line + 2E2E2E0D over = if + -1 + else +\ get a key from the key buffer, write it the the pad + swap over 18 rshift dup dup d = if drop cr else emit then over C! 1+ tuck pad - fsps = if +\ we have a page worth of data, write it out + nip rot2 2dup + pad fsps (fswr) fsps + rot pad swap + then +\ get another key + (fsk) 0 + then + until +\ any keys left? + drop pad - dup 0> if +\ write the leftover, not a full page + >r 2dup + pad r> dup >r (fswr) r> + + else + drop + then +\ write the length of FFFF for the next file + 2dup + FFFF swap (fspa) dup fstop 1- < if EW! else 2drop then +\ subtract the length of the filename +1, and the 2 bytes which are the length of the file, and update the length of the file + over 2+ EC@ 2+ 1+ - swap EW! +else 2drop clearkeys then padbl +; + +\ fsdrop ( -- ) deletes last file +: fsdrop (fslast) dup -1 = if drop else FFFF swap EW! then ; + + diff --git a/forth/scr.lib b/forth/scr.lib new file mode 100644 index 0000000..a879692 --- /dev/null +++ b/forth/scr.lib @@ -0,0 +1,69 @@ + +hex + +ifnot: lib:scr +: lib:scr ; + +\ kommandoformate +ifnot: bel:char \ ( b -- ) +: bel:char b[ [b!] ]b ; +ifnot: bel:fkt!b! \ ( b fkt -- ) +: bel:fkt!b! b[ 0 [b!] [b!] [b!] ]b ; +ifnot: bel:fkt!b!b! \ ( b b fkt -- ) +: bel:fkt!b!b! b[ 0 [b!] [b!] [b!] [b!] ]b ; +ifnot: bel:ctrl! \ ( ctrl -- ) +: bel:ctrl! b[ 0 [b!] 3 [b!] [b!] ]b ; +ifnot: bel:ctrl!b! \ ( b ctrl -- ) +: bel:ctrl!b! b[ 0 [b!] 3 [b!] [b!] [b!] ]b ; +ifnot: bel:ctrl!b@ \ ( ctrl -- b@ ) +: bel:ctrl!b@ b[ 0 [b!] 3 [b!] [b!] [b@] ]b ; +ifnot: bel:ctrl!b!b! \ ( b b ctrl -- ) +: bel:ctrl!b!b! b[ 0 [b!] 3 [b!] [b!] [b!] [b!] [b!] ]b ; + +\ einfache steuerzeichen +ifnot: scr:cls \ ( -- ) - screen löschen +: scr:cls 01 bel:char ; +ifnot: scr:home \ ( -- ) - cursor oben links +: scr:home 02 bel:char ; +ifnot: scr:pos1 \ ( -- ) - cursor an zeilenanfang +: scr:pos1 03 bel:char ; +ifnot: scr:curon \ ( -- ) - cursor anschalten +: scr:curon 04 bel:char ; +ifnot: scr:curoff \ ( -- ) - cursor abschalten +: scr:curoff 05 bel:char ; +ifnot: scr:scrlu \ ( -- ) - screen nach oben scrollen +: scr:scrlu 06 bel:char ; +ifnot: scr:scrld \ ( -- ) - screen nach unten scrollen +: scr:scrld 07 bel:char ; +ifnot: scr:bs \ ( -- ) - backspace +: scr:bs 08 bel:char ; +ifnot: scr:tab \ ( -- ) - tabulator +: scr:tab 09 bel:char ; + +\ screen-funktionen +ifnot: scr:logo \ ( y x -- ) - hive logo +: scr:logo 5 bel:fkt!b!b! ; +ifnot: scr:char \ ( char -- ) - zeichensatz direkt ausgeben +: scr:char 6 bel:fkt!b! ; + +\ parametrisierte steuerzeichen +ifnot: scr:setcur \ ( cur -- ) - cursorzeichen setzen +: scr:setcur 01 bel:ctrl!b! ; +ifnot: scr:setx \ ( x -- ) - cursor position x setzen +: scr:setx 02 bel:ctrl!b! ; +ifnot: scr:sety \ ( y -- ) - cursor position y setzen +: scr:sety 03 bel:ctrl!b! ; +ifnot: scr:getx \ ( -- x ) - cursor position x abfragen +: scr:getx 04 bel:ctrl!b@ ; +ifnot: scr:gety \ ( -- y ) - cursor position y abfragen +: scr:gety 05 bel:ctrl!b@ ; +ifnot: scr:setcol \ ( colnr -- ) - farbe wählen 0..15 +: scr:setcol 06 bel:ctrl!b! ; +ifnot: scr:sline \ ( row -- ) - anfangszeile scrollbereich +: scr:sline 07 bel:ctrl!b! ; +ifnot: scr:eline \ ( row -- ) - endzeile scrollbereich +: scr:eline 08 bel:ctrl!b! ; +ifnot: scr:sinit \ ( -- ) - +: scr:sinit 09 bel:ctrl! ; +ifnot: scr:tabset \ ( pos nr -- ) - tabulatorposition setzen 0..7 +: scr:tabset 0A bel:ctrl!b!b! ; diff --git a/forth/sd0.lib b/forth/sd0.lib new file mode 100644 index 0000000..8cf2e49 --- /dev/null +++ b/forth/sd0.lib @@ -0,0 +1,176 @@ + +hex + +ifnot: lib:sd0 +: lib:sd0 ; + +\ ------------------------------------ lib:sd0 + +\ kommandoformate + +ifnot: adm:fkt!b! \ ( b fkt -- ) +: adm:fkt!b! b[ [a!] [a!] ]b ; + +ifnot: adm:fkt!b!b@ \ ( b fkt -- b ) +: adm:fkt!b!b@ b[ [a!] [a!] [a@] ]b ; + +ifnot: adm:fkt!b!l@ \ ( b fkt -- l ) +: adm:fkt!b!l@ b[ [a!] [a!] [a.l@] ]b ; + +ifnot: adm:fkt!l! \ ( l fkt -- ) +: adm:fkt!l! b[ [a!] [a.l!] ]b ; + +ifnot: adm:fkt!l@ \ ( fkt -- l ) +: adm:fkt!l@ b[ [a!] [a.l@] ]b ; + +ifnot: adm:fkt!b!l! \ ( l b fkt -- ) +: adm:fkt!b!l! b[ [a!] [a!] [a.l!] ]b ; + +ifnot: adm:fkt!s!b@ \ ( s fkt -- b ) +: adm:fkt!s!b@ b[ [a!] [a.s!] [a@] ]b ; + +ifnot: adm:fkt!b!s!b@ \ ( s b fkt -- b ) +: adm:fkt!b!s!b@ b[ [a!] [a!] [a.s!] [a@] ]b ; + +ifnot: adm:fkt!s!s!b@ \ ( s s fkt -- b ) +: adm:fkt!s!s!b@ b[ [a!] [a.s!] [a.s!] [a@] ]b ; + +\ dateisystem-funktionen + +\ adm:mount ( -- err ) - medium mounten +ifnot: adm:mount +: adm:mount + 01 adm:fkt!b@ ; + +\ adm:diropen ( -- ) - verzeichnisabfrage initialisieren +ifnot: adm:diropen +: adm:diropen + 02 adm:fkt! ; + +\ adm:nextfile ( -- st ) +\ st = 0 - keine gültige datei +\ st = 1 - dateiname im pad gültig +\ bei gültigem eintrag befindet sich der dateiname im pad +ifnot: adm:nextfile +: adm:nextfile + b[ 03 [a!] [a@] dup if [a.s@] then ]b ; + +\ adm:open ( cstr modus -- err ) - datei öffnen +\ modus "R" $52 - Read +\ modus "W" $57 - Write +\ modus "A" $41 - Append +ifnot: adm:open +: adm:open + 04 adm:fkt!b!s!b@ ; + +\ adm:close ( -- ) - datei schließen +ifnot: adm:close +: adm:close + 05 adm:fkt!b@ ; + +\ adm:getc ( -- c ) - ein zeichen aus datei lesen +ifnot: adm:getc +: adm:getc + 06 adm:fkt!b@ ; + +\ adm:putc ( c -- ) - ein zeichen in datei schreiben +ifnot: adm:putc +: adm:putc + 07 adm:fkt!b! ; + +\ adm:eof ( -- eof ) - abfrage ob end of file erreicht ist +ifnot: adm:eof +: adm:eof + 1E adm:fkt!b@ ; + +\ adm:getblk ( adr cnt -- ) - datenblock aus datei lesen + +\ adm:putblk ( adr cnt -- ) - datenblock in datei schreiben + +\ adm:seek ( pos -- ) - position in datei setzen +: adm:seek + 0A adm:fkt!l! ; + +\ adm:fattrib ( nr -- attrib ) - dateiattribut abfragen +ifnot: adm:fattrib +: adm:fattrib + 0B adm:fkt!b!l@ ; + +\ adm:volname ( -- ) - name des volumes im pad ablegen +ifnot: adm:volname +: adm:volname + 0C adm:fkt!s@ ; + +\ adm:checkmounted ( -- t/f ) +ifnot: adm:checkmounted +: adm:checkmounted + 0D adm:fkt!b@ ; + +\ adm:checkopen ( -- t/f ) +ifnot: adm:checkopen +: adm:checkopen + 0E adm:fkt!b@ ; + +\ adm:checkused ( -- used ) - anzahl benutzte sektoren +ifnot: adm:checkused +: adm:checkused + 0F adm:fkt!l@ ; + +\ adm:checkfree ( -- free ) - anzahl freie sektoren +ifnot: adm:checkfree +: adm:checkfree + 10 adm:fkt!l@ ; + +\ adm:newfile ( cstr -- ) - neue datei erstellen +ifnot: adm:newfile +: adm:newfile + 11 adm:fkt!s!b@ ; + +\ adm:newdir ( cstr -- ) - neues verzeichnis erstellen +ifnot: adm:newdir +: adm:newdir + 12 adm:fkt!s!b@ ; + +\ adm:del ( cstr -- ) - datei/verzeichnis löschen +ifnot: adm:del +: adm:del + 13 adm:fkt!s!b@ ; + +\ adm:rename ( cstr1.fn1 cstr2.fn2 -- ) +ifnot: adm:rename +: adm:rename + 14 adm:fkt!s!s!b@ ; + +\ adm:chattrib ( cstr1.fn cstr2.attrib -- ) +ifnot: adm:chattrib +: adm:chattrib + 15 adm:fkt!s!s!b@ ; + +\ adm:chdir ( cstr -- err ) - verzeichnis öffnen +ifnot: adm:chdir +: adm:chdir + 16 adm:fkt!s!b@ ; + +\ adm:format ( cstr.label -- ) - medium formatieren +ifnot: adm:format +: adm:format + 17 adm:fkt!s!b@ ; + +\ adm:unmount ( -- err ) - medium unmounten +ifnot: adm:unmount +: adm:unmount + 18 adm:fkt!b@ ; + +\ marker-funktionen + +ifnot: adm:dmact \ ( dmnr -- ) - marker aktivieren +: adm:dmact 19 adm:fkt!b!b@ .err ; +ifnot: adm:dmset \ ( dmnr -- ) - marker setzen +: adm:dmset 1A adm:fkt!b! ; +ifnot: adm:dmget \ ( dmnr -- dm ) - marker lesen +: adm:dmget 1B adm:fkt!b!l@ ; +ifnot: adm:dmclr \ ( dmnr -- ) - marker löschen +: adm:dmclr 1C adm:fkt!b! ; +ifnot: adm:dmput \ ( dm dmnr -- ) - marker schreiben +: adm:dmput 1D adm:fkt!b!l! ; + diff --git a/forth/sfx.lib b/forth/sfx.lib new file mode 100644 index 0000000..3c01222 --- /dev/null +++ b/forth/sfx.lib @@ -0,0 +1,93 @@ + +hex + +ifnot: lib:sfx +: lib:sfx ; + +\ kommandoformen + +ifnot: adm:fkt!b! \ ( b fkt -- ) +: adm:fkt!b! b[ [a!] [a!] ]b ; + +ifnot: adm:fkt!b!b! \ ( b b fkt -- ) +: adm:fkt!b!b! b[ [a!] [a!] [a!] ]b ; + +ifnot: adm:fkt!b!64b! \ ( ptr b fkt -- ) +: adm:fkt!b!64b! b[ [a!] [a!] + 31 0 do dup i + C@ [a!] loop drop ]b ; + +\ sfx-funktionen + +\ sfx:fire( chan slot -- ) - sfx abspielen +\ slot - $00..$0f nummer der freien effektpuffer +\ slot - $f0..f5 vordefinierte effektslots +\ chan - 0/1 stereokanal +\ vordefinierte effekte +\ &f0 - warnton +\ $f1 - signalton +\ $f2 - herzschlag schnell +\ $f3 - herzschlag langsam +\ $f4 - telefon +\ $f5 - phaser :) +\ $f6 - pling +\ $f7 - on +\ $f8 - off +ifnot: sfx:fire +: sfx:fire 6B adm:fkt!b!b! ; + +\ ( ptr slot -- ) - sfx setzen +\ slot - $00..$0f nummer der freien effektpuffer +\ ptr - zeiger auf 32 byte effektdaten +\ +\ struktur der effektdaten: +\ +\ [wav ][len ][freq][vol ] grundschwingung +\ [lfo ][lfw ][fma ][ama ] modulation +\ [att ][dec ][sus ][rel ] hüllkurve +\ [seq ] (optional) +\ +\ [wav] wellenform +\ 0 sinus (0..500hz) +\ 1 schneller sinus (0..1khz) +\ 2 dreieck (0..500hz) +\ 3 rechteck (0..1khz) +\ 4 schnelles rechteck (0..4khz) +\ 5 impulse (0..1,333hz) +\ 6 rauschen +\ [len] tonlänge $0..$fe, $ff endlos +\ [freq] frequenz $00..$ff +\ [vol] lautstärke $00..$0f +\ +\ [lfo] low frequency oscillator $ff..$01 +\ [lfw] low frequency waveform +\ $00 sinus (0..8hz) +\ $01 fast sine (0..16hz) +\ $02 ramp up (0..8hz) +\ $03 ramp down (0..8hz) +\ $04 square (0..32hz) +\ $05 random +\ $ff sequencer data (es folgt eine sequenzfolge [seq]) +\ [fma] frequency modulation amount +\ $00 no modulation +\ $01..$ff +\ [ama] amplitude modulation amount +\ $00 no modulation +\ $01..$ff +\ [att] attack $00..$ff +\ [dec] decay $00..$ff +\ [sus] sustain $00..$ff +\ [rel] release $00..$ff +ifnot: sfx:setslot +: sfx:setslot + 6C adm:fkt!b!64b! ; + +\ sfx:keyoff ( chan -- ) - release-phase einleiten +ifnot: sfx:keyoff +: sfx:keyoff + 6D adm:fkt!b! ; + +\ sfx:stop ( chan -- ) +ifnot: sfx:stop +: sfx:stop + 6E adm:fkt!b! ; + diff --git a/forth/splay.mod b/forth/splay.mod new file mode 100644 index 0000000..eb6e485 --- /dev/null +++ b/forth/splay.mod @@ -0,0 +1,116 @@ + +\ achtung: vor verwendung muss der administra-code mit sidcog +\ geladen werden: +\ sys tools.f +\ sys splay.f <--- sid-player laden +\ aload admsid.adm <--- administra-code mit sidcog laden +\ splay xyz.dmp <--- sid-datei abspielen + + +hex + +ifnot: mod:splay +: mod:splay ; + +\ kommandoformen + +ifnot: adm:fkt! \ ( fkt -- ) +: adm:fkt! b[ [a!] ]b ; + +ifnot: adm:fkt!b! \ ( b fkt -- ) +: adm:fkt!b! b[ [a!] [a!] ]b ; + +ifnot: adm:fkt!b@ \ ( fkt -- b ) +: adm:fkt!b@ b[ 0 [a!] [a!] [a@] ]b ; + +ifnot: adm:fkt!s! \ ( s fkt -- ) +: adm:fkt!s! b[ [a!] [a.s!] ]b ; + +ifnot: adm:fkt!s!b@ \ ( s fkt -- err ) +: adm:fkt!s! b[ [a!] [a.s!] [b@] ]b ; + +ifnot: adm:fkt!b!l@ \ ( b fkt -- l ) +: adm:fkt!b!l@ b[ [a!] [a!] [a.l@] ]b ; + +\ dm-funktionen +ifnot: adm:dmget \ ( dmnr -- dm ) - marker lesen +: adm:dmget 1B adm:fkt!b!l@ ; + +\ adm:dmact ( dmnr -- ) - marker aktivieren +: adm:dmact 19 adm:fkt!b!b@ drop ; + +\ adm-funktionen + +\ adm:aload ( cstr -- ) - neuen administra-code laden +ifnot: adm:aload +: adm:aload + 60 adm:fkt!s! ; + +\ tools + +ifnot: aload +: aload + mount? parsenw dup + if 1 adm:dmact adm:aload 0 else drop 23 then .err ; + +\ sid-funktionen + +ifnot: sid:play +: sid:play \ ( cstr -- err ) + 9E adm:fkt!s!b@ ; + +ifnot: sid:stop +: sid:stop \ ( -- ) + 9F adm:fkt! ; + +ifnot: sid:status +: sid:status \ ( -- status ) + A1 adm:fkt!b@ ; + +ifnot: sid:mute +\ 1 - sid1 +\ 2 - sid2 +\ 3 - sid1 & sid2 +: sid:mute \ ( sidnr -- ) + A3 adm:fkt!b! ; + +\ send? ( -- t/f ) +ifnot: send? +: send? + begin 50 delms key? dup if key drop then sid:status 0= or + until ; + +\ (splay) ( cstr -- ) +ifnot: (splay) +: (splay) \ ( cstr -- ) + ." Datei : " dup .cstr cr sid:play .err + send? sid:stop 3 sid:mute adm:close drop ; + +\ files? ( -- cnt ) - anzahl dateien im dir +ifnot: files? +: files? + adm:diropen + 0 begin adm:nextfile swap 1+ swap 0= until 3 - padbl ; + +\ filenr? ( nr -- ) +ifnot: filenr? +: filenr? + adm:diropen + 0 do adm:nextfile drop loop ; + +\ splay name.dmp ( -- ) - sid-datei abspielen +ifnot: splay +: splay + parsenw (splay) ; + +\ sdirplay ( -- ) - gesamtes verzeichnis abspielen +\ im verzeichnis dürfen nur sid-dateien sein! +ifnot: sdirplay +: sdirplay + files? dup ." Dateien : " . cr + 0 do i dup 1 + . 3 + filenr? pad (splay) loop padbl ; + +ifnot: smute +: smute + sid:stop 3 sid:mute ; + \ No newline at end of file diff --git a/forth/tools.mod b/forth/tools.mod new file mode 100644 index 0000000..4d74e6f --- /dev/null +++ b/forth/tools.mod @@ -0,0 +1,152 @@ + +hex + +ifnot: mod:tools +: mod:tools ; + +\ kommandoformen +ifnot: adm:fkt!b!l@ \ ( b fkt -- l ) +: adm:fkt!b!l@ b[ [a!] [a!] [a.l@] ]b ; +ifnot: adm:fkt!b!b@ \ ( b fkt -- b ) +: adm:fkt!b!b@ b[ [a!] [a!] [a@] ]b ; +ifnot: adm:fkt!s! \ ( s fkt -- ) +: adm:fkt!s! b[ [a!] [a.s!] ]b ; + +\ dm-funktionen +ifnot: adm:dmget \ ( dmnr -- dm ) - marker lesen +: adm:dmget 1B adm:fkt!b!l@ ; + +ifnot: adm:dmact \ adm:dmact ( dmnr -- ) - marker aktivieren +: adm:dmact 19 adm:fkt!b!b@ drop ; + +\ adm-funktionen + +\ adm:aload ( cstr -- ) - neuen administra-code laden +ifnot: adm:load +: adm:load + 60 adm:fkt!s! ; + +\ bel-funktionen + +\ bel:load ( cstr -- ) - bellatrix-code laden +\ achtung: die gesamte loader-operation ist eine atomare +\ operation über alle drei propellerchips, kann also auch +\ nicht aufgetrennt werden! +ifnot: bel:load +: bel:load + 52 adm:open .err \ datei öffnen + b[ + 0 [b!] 63 [b!] \ bella-loader starten + 10 0 do 06 [a!] [a@] [b!] loop \ header einlesen + 0A [a!] 0 [a.l!] \ 0 adm:seek + [b@] <8 [b@] or \ dateilänge empfangen + 0 do 06 [a!] [a@] [b!] loop \ datei senden + ]b + adm:close .err \ datei schließen +; + +\ ------------------------------------ mod:tools + +ifnot: aload +: aload \ name ( -- ) - administra-code laden + mount? parsenw dup + if adm:load 0 else drop 23 then .err ; + +ifnot: bload +: bload \ name ( -- ) - bellatrix-code laden + mount? parsenw dup + if bel:load 0 else drop 23 then .err ; + +ifnot: .dmstatus \ ( dm -- ) - ausgabe marker-status +: .dmstatus -1 = if ." frei" else ." gesetzt" then cr ; + +ifnot: dm? +: dm? + ." [root] : " 0 adm:dmget .dmstatus + ." [sys ] : " 1 adm:dmget .dmstatus + ." [usr ] : " 2 adm:dmget .dmstatus + ." [ A ] : " 3 adm:dmget .dmstatus + ." [ B ] : " 4 adm:dmget .dmstatus + ." [ C ] : " 5 adm:dmget .dmstatus ; + +\ open name ( -- ) - datei lesend öffnen und auf fehler prüfen +ifnot: open +: open + mount? parsenw dup + if 52 adm:open else drop 23 then .err ; + +\ close ( -- ) - geöffnete datei schließen +ifnot: close +: close + adm:close .err ; + +\ (cat) ( -- ) - alle zeichen der geöffneten datei ab +\ lesemarke auf ausgabekanal bis zum eof ausgeben +ifnot: (cat) +: (cat) begin adm:getc emit adm:eof until ; + +\ cat name ( -- ) - datei "name" komplett ausgeben +ifnot: cat +: cat open (cat) close ; + +\ nextline ( -- ) - ausgabe der nächsten textzeile aus der +\ geöffneten datei +ifnot: nextline +: nextline + begin adm:getc dup emit 0d = adm:eof or until ; + +\ nextlines ( n -- ) - ausgabe von n zeilen +ifnot: nextlines +: nextlines + 0 do adm:eof 0= if nextline then loop ; + +\ less name ( -- ) - zeilenweise ausgabe der datei +ifnot: less +: less + open begin 10 nextlines key 71 = adm:eof or until close ; + +\ #C ( c1 -- ) prepend the character c1 to the number +\ currently being formatted +ifnot: #C +: #C -1 >out W+! pad>out C! ; + +\ .cogch ( n1 n2 -- ) print as x(y) +ifnot: .cogch +: .cogch <# 29 #C # 28 #C drop # #> .cstr ; + +\ j ( -- n1 ) the second most current loop counter +ifnot: j +: j _rsptr COG@ 5 + COG@ ; + +\ cog? ( -- ) +ifnot: cog? +: cog? + 8 0 do ." Cog:" i dup . ." #io chan:" + dup cognchan . cogstate C@ + dup 4 and if version W@ .cstr then + dup 10 and if i cognumpad version W@ C@ over C@ - + spaces .cstr then + 14 and if i cogio i cognchan 0 do + i 4* over + 2+ W@ dup 0= if drop else + space space j i .cogch ." ->" io>cogchan .cogch + then + loop +drop then cr loop ; + +\ jede erweiterung legt ein wort als startmarke +\ nmit folgendem namen an: +\ mod:xxx - softwaremodule +\ drv:xxx - treiber +\ lib:xxx - bibliotheken +\ so kann mit den folgenden kommandos eine schnelle liste der +\ vorhandenen erweiterungen abgerufen und mit forget +\ aus dem system entfernt werden + +\ mod? ( -- ) - anzeige der module +ifnot: mod? +: mod? c" mod:" _words ; + +\ lib? ( -- ) - anzeige der bibliotheken +ifnot: lib? +: lib? c" lib:" _words ; + diff --git a/forth/v1.mod b/forth/v1.mod new file mode 100644 index 0000000..7b0b8cd --- /dev/null +++ b/forth/v1.mod @@ -0,0 +1,325 @@ + +: mod:vortrag ; + +24 constant rows +64 constant cols + +wvariable lcol 7 lcol W! + +ifnot: adm:fkt!s!b@ \ ( s fkt -- b ) +: adm:fkt!s!b@ b[ [a!] [a.s!] [a@] ]b ; +ifnot: adm:fkt!b!b@ \ ( b fkt -- b ) +: adm:fkt!b!b@ b[ [a!] [a!] [a@] ]b ; +ifnot: adm:fkt!b@ \ ( fkt -- b ) +: adm:fkt!b@ b[ [a!] [a@] ]b ; + +ifnot: bel:char \ ( b -- ) +: bel:char b[ [b!] ]b ; +ifnot: bel:ctrl!b! \ ( b ctrl -- ) +: bel:ctrl!b! b[ 0 [b!] 3 [b!] [b!] [b!] ]b ; +ifnot: bel:fkt!b!b! \ ( b b fkt -- ) +: bel:fkt!b!b! b[ 0 [b!] [b!] [b!] [b!] ]b ; + +ifnot: scr:bs \ ( -- ) - backspace +: scr:bs 08 bel:char ; +ifnot: scr:tab \ ( -- ) - tabulator +: scr:tab 09 bel:char ; +ifnot: scr:pos1 \ ( -- ) - cursor an zeilenanfang +: scr:pos1 03 bel:char ; +ifnot: scr:setcol \ ( colnr -- ) - farbe wählen 0..15 +: scr:setcol 06 bel:ctrl!b! ; +ifnot: scr:sline \ ( row -- ) - anfangszeile scrollbereich +: scr:sline 07 bel:ctrl!b! ; +ifnot: scr:setx \ ( x -- ) - cursor position x setzen +: scr:setx 02 bel:ctrl!b! ; +ifnot: scr:sety \ ( y -- ) - cursor position y setzen +: scr:sety 03 bel:ctrl!b! ; +ifnot: scr:curon \ ( -- ) - cursor anschalten +: scr:curon 04 bel:char ; +ifnot: scr:curoff \ ( -- ) - cursor abschalten +: scr:curoff 05 bel:char ; +ifnot: scr:logo \ ( y x -- ) - hive logo +: scr:logo 5 bel:fkt!b!b! ; + +\ adm:setsound ( sfkt -- sstat ) - soundsystem verwalten +\ sfkt: +\ 0: hss-engine abschalten +\ 1: hss-engine anschalten +\ 2: dac-engine abschalten +\ 3: dac-engine anschalten +\ sstat - status/cognr startvorgang +ifnot: adm:setsound +: adm:setsound + 5C adm:fkt!b!b@ ; + +\ wav:start ( cstr -- err ) +ifnot: wav:start +: wav:start + 96 adm:fkt!s!b@ ; + +\ wav:stop ( -- ) +ifnot: wav:stop +: wav:stop + 97 adm:fkt!b@ drop ; + +\ won +ifnot: won +: won + 0 adm:setsound 3 adm:setsound 2drop ; + +\ woff +ifnot: woff +: woff + 2 adm:setsound 1 adm:setsound 2drop ; + +: lcol@ lcol W@ ; \ ( -- col ) + +: lines \ ( n -- ) + 0 do cr loop ; + +: waitkey + scr:curoff cr key drop scr:bs scr:bs scr:bs scr:curon ; + +: nextpage + scr:curoff scr:pos1 lcol@ spaces ." -->" key drop scr:bs scr:bs scr:bs scr:curon ; + +: .head \ ( -- ) + 4 scr:setcol scr:pos1 lcol@ spaces ; + +: .bullet \ ( -- ) + 0 scr:setcol scr:pos1 lcol@ spaces 0f emit space ; + +: .number \ ( n -- n ) + 0 scr:setcol scr:pos1 lcol@ spaces dup . 1+ + 2e emit space ; + +: .line \ ( -- ) + cr 0 scr:setcol scr:pos1 lcol@ 2+ spaces ; + +: .sub \ ( -- ) + 0 scr:setcol scr:pos1 lcol@ 2+ spaces ; + +wvariable xpos 1 xpos W! +wvariable ypos 1 ypos W! + +: pos! \ ( x y -- ) + ypos W! xpos W! ; + +: pos@ \ ( -- x y ) + xpos W@ ypos W@ ; + +: nextline + ypos W@ 1+ ypos W! ; + +: move \ ( x y -- ) + 1 delms pos@ scr:sety scr:setx ; + + +: btop0 \ ( -- ) + move 9f emit 6 0 do 90 emit loop 9e emit nextline ; + +: bbot0 \ ( -- ) + move 9d emit 6 0 do 90 emit loop 9c emit nextline ; + +: btop1 \ ( -- ) + move 2 spaces 9f emit 6 0 do 90 emit loop 9e emit nextline ; + +: bbot1 \ ( -- ) + move 2 spaces 9d emit 6 0 do 90 emit loop 9c emit nextline ; + +: bmid0 \ ( -- ) + move 91 emit ." COG " 95 emit 90 emit bb emit nextline + move 91 emit ." " 95 emit 90 emit aa emit nextline ; + +: bmid1 \ ( -- ) + move a9 emit 90 emit 94 emit ." COG " 91 emit nextline + move ba emit 90 emit 94 emit ." " 91 emit nextline ; + +: bmid2 \ ( -- ) + move a9 emit 90 emit 94 emit ." SER " + 95 emit 90 emit bb emit ." [TERMINAL]" nextline + move ba emit 90 emit 94 emit ." " 91 emit nextline ; + +: bmid3 \ ( -- ) + move a9 emit 90 emit 94 emit ." VGA " + 95 emit 90 emit bb emit ." [BELLATRIX]" nextline + move ba emit 90 emit 94 emit ." KBD " 91 emit nextline ; + +: bmid4 \ ( -- ) + move 91 emit ." COG " 95 emit 90 emit bb emit + ." Zeichenausgabekanal (emit)" nextline + move 91 emit ." " 95 emit 90 emit aa emit + ." Zeicheneingabekanal (key)" nextline ; + +: cog0 \ ( x y -- ) + 0 scr:setcol pos! btop0 bmid0 bbot0 ; + +: cog1 \ ( x y -- ) + 0 scr:setcol pos! btop1 bmid1 bbot1 ; + +: cog3 \ ( x y -- ) + 0 scr:setcol pos! btop0 bmid4 bbot0 ; + +: cogext \ ( x y -- ) + 0 scr:setcol pos! btop1 bmid2 bbot1 ; + +: cogint \ ( x y -- ) + 0 scr:setcol pos! btop1 bmid3 bbot1 ; + +: drvser + 0 scr:setcol 2dup cog0 swap a + swap cogext ; + +: drvint + 0 scr:setcol 2dup cog0 swap a + swap cogint ; + +: p0 + 0 scr:sline cls 5 lines + 14 1c scr:curoff scr:logo won c" woodz.wav" wav:start drop + key drop scr:curon wav:stop woff ; + +: i1 + 0 scr:sline cls 3 lines + .head ." Implementierungsvarianten" cr waitkey + .bullet ." Forth-Diamond: Master & Slaves = PropForth" waitkey cr + .sub ." Nachteil: Programmierung aller Treiber in Forth" waitkey cr + .bullet ." Forth-Spin: Forth mit SPIN-Interface" waitkey cr + .sub ." Vorteil: Nutzung fertiger Treiber" waitkey + .sub ." Nachteil: hoher Ressourcenverbrauch" waitkey cr + .bullet ." Forth-Funktionskomplexe: " cr cr + .sub ." Master = Forth" cr + .sub ." Slaves = Spin-Funktionsbibliotheken" cr + .sub ." Interface Forth <--> Spin = 8Bit-Bus" cr cr + nextpage ; + +: i2 + 0 scr:sline cls 3 lines + .head ." Implementierungsvarianten" cr cr + .bullet ." Forth-Funktionskomplexe: " cr cr + .sub ." Master = Forth" cr + .sub ." Slaves = Spin-Funktionsbibliotheken" cr + .sub ." Interface Forth <--> Spin = 8Bit-Bus" cr waitkey + .bullet ." Nachteile:" cr cr + .sub ." Spin --> Compiler noch auf Host" cr waitkey + .bullet ." Vorteile:" cr cr + .sub ." Code ist schon vorhanden (TriOS)" waitkey + .sub ." Gegenseitige Befruchtung von Forth & TriOS" waitkey + .sub ." Maximale Ressourcen für Forth im Master" waitkey + .sub ." Spin-Code kann später auch durch Forth ersetzt werden" cr + nextpage ; + +: i3 + 0 scr:sline cls 3 lines + .head ." Ablauf der Implementierung" cr waitkey + .bullet ." Ausgangslage: " cr cr + .sub ." Forth mit Terminalzugriff" cr waitkey + .bullet ." Plan:" cr cr + .sub ." 1. Busroutine um auf Slaves zuzugreifen" waitkey + .sub ." 2. Integration VGA/Keyboard/SD-Card" waitkey + .sub ." 3. Autostart" cr cr + nextpage ; + + +: p1 + 0 scr:sline cls 1 lines + .head ." Buszugriff" cr cr + .bullet ." ! ( n adr -- ) store - Wert im RAM speichern" cr + .bullet ." @ ( adr -- n ) fetch - Wert aus RAM lesen" cr waitkey + .bullet ." c! c@ p! p@ - Abwandlungen der Grundform" cr waitkey + .bullet ." s! ( c adr -- ) - Byte an Slave senden" cr + .bullet ." s@ ( adr -- c ) - Byte von Slave empfangen" cr waitkey + .bullet ." b! ( c -- ) - Byte an Bellatrix senden" cr + .bullet ." b@ ( -- c ) - Byte von Bellatrix empfangen" cr + .bullet ." a! ( c -- ) - Byte an Administra senden" cr + .bullet ." a@ ( -- c ) - Byte von Administra empfangen" cr cr + .head ." Beispiele :" cr cr + .bullet ." 01 b! - Bildschirm löschen" waitkey + .bullet ." : cls 01 b! ; " waitkey + .bullet ." : bel:key 0 b! 2 b! b@ ; \ ( -- key )" cr + nextpage ; + +: p2 + 0 scr:sline cls 5 lines + .head ." IO-Kanäle/Pipes" cr waitkey + 9 8 cog3 key drop + 9 c cog3 + .line ." ..." + 9 11 cog3 + cr cr + nextpage ; + +: p3 + 0 scr:sline cls 5 lines + .head ." Serieller Treiber" cr cr + 9 8 drvser + 9 c cog3 + .line ." ..." + 9 11 cog3 + cr cr + nextpage ; + +: p4 + 0 scr:sline cls 5 lines + .head ." VGA/Keyboard-Treiber" cr cr + 9 8 drvser + 9 c drvint + .line ." ..." + 9 11 cog3 + cr cr + nextpage ; + +: p5 + 0 scr:sline cls 5 lines + .head ." Treiber: VGA" cr cr + 9 8 drvint cr + .line ." : drv-vga " + .line ." begin" + .line ." key?" + .line ." if key b! then" + .line ." 0 until ;" + cr cr + nextpage ; + +: p6 + 0 scr:sline cls 5 lines + .head ." Treiber: Keyboard" cr cr + 9 8 drvint cr + .line ." : drv-key" + .line ." begin" + .line ." bel:keystat" + .line ." if bel:key emit then" + .line ." 0 until ;" + cr cr + nextpage ; + +: p7 + 0 scr:sline cls 5 lines + .head ." Treiber: Gesamt" cr cr + 9 8 drvint cr + .line ." : drv:int" + .line ." begin" + .line ." \ input --> vga/video" + .line ." 200 0 do key?" + .line ." if key b[ [b!] ]b then loop" + .line ." \ output <-- keyboard" + .line ." b[ [key?]" + .line ." if [key] [emit] then ]b" + .line ." 0 until ;" + cr cr + nextpage ; + +: p8 + 0 scr:sline cls 5 lines + .head ." Semaphoren" cr waitkey + .bullet ." : bel:key 0 b! 2 b! b@ ; \ ( -- key )" cr waitkey + .bullet ." : bel:key bon 0 b! 2 b! b@ boff ;" cr waitkey + .bullet ." [ ... ]" cr waitkey + .bullet ." b[ ... ]b" cr waitkey + .bullet ." : bel:key b[ 0 b! 2 b! b@ ]b ;" cr waitkey + .bullet ." : bel:key b[ 0 [b!] 2 [b!] [b@] ]b ;" cr waitkey + .bullet ." : bel:key 2 0 b[ [b!] [b!] [b@] ]b ;" cr cr + cr cr + nextpage ; + +: run + begin p0 i1 i2 i3 p1 p2 p3 p4 p5 p6 p7 p8 0 until ; + diff --git a/forth/wav.lib b/forth/wav.lib new file mode 100644 index 0000000..4198e23 --- /dev/null +++ b/forth/wav.lib @@ -0,0 +1,54 @@ + +hex + +ifnot: lib:wav +: lib:wav ; + +\ kommandoformen + +ifnot: adm:fkt!b@ \ ( fkt -- b ) +: adm:fkt!b@ b[ [a!] [a@] ]b ; + +ifnot: adm:fkt!s!b@ \ ( s fkt -- b ) +: adm:fkt!s!b@ b[ [a!] [a.s!] [a@] ]b ; + +ifnot: adm:fkt!l@l@ \ ( fkt -- l l ) +: adm:fkt!l@l@ b[ [a!] [a.l@] [a.l@] ]b ; + +\ wave-funktionen + +\ wav:start ( cstr -- err ) +ifnot: wav:start +: wav:start + 96 adm:fkt!s!b@ ; + +\ wav:stop ( -- ) +ifnot: wav:stop +: wav:stop + 97 adm:fkt!b@ drop ; + +\ wav:status ( -- status ) +ifnot: wav:status +: wav:status + 98 adm:fkt!b@ ; + +\ wav:leftvol ( vol -- ) +ifnot: wav:leftvol +: wav:leftvol + 99 adm:fkt!b! ; + +\ wav:rightvol ( vol -- ) +ifnot: wav:rightvol +: wav:rightvol + 9A adm:fkt!b! ; + +\ wav:pause ( -- ) +ifnot: wav:pause +: wav:pause + 9B adm:fkt!b@ drop ; + +\ wav:position ( -- len pos ) +ifnot: wav:position +: wav:position + 9C adm:fkt!l@l@ ; + diff --git a/forth/words.mod b/forth/words.mod new file mode 100644 index 0000000..c0165f3 --- /dev/null +++ b/forth/words.mod @@ -0,0 +1,16 @@ + +fl + +\ _words ( cstr -- ) prints the words in the forth dictionary starting with cstr, 0 prints all +: _words lastnfa +begin + 2dup swap dup if npfx else 2drop -1 then + if dup .strname space then + nfa>next dup 0= +until 2drop cr ; + +\ words ( -- ) prints the words in the forth dictionary, if the pad has another string following, with that prefix +: words parsenw _xwords ; + +: t1 1000 0 do i . loop ; +: t2 1000 0 do ." test " loop ; diff --git a/forth/work/bload.f b/forth/work/bload.f new file mode 100644 index 0000000..8eee6eb --- /dev/null +++ b/forth/work/bload.f @@ -0,0 +1,23 @@ + +fl + +hex + +\ metafunktionen + +: (bload) \ ( cstr -- ) - belatrix-code laden + + 52 adm:open .err \ datei öffnen + b[ + 0 [b!] 63 [b!] \ bella-loader starten + 10 0 do 06 [a!] [a@] [b!] loop \ header einlesen + 0A [a!] 0 [a.l!] \ 0 adm:seek + [b@] <8 [b@] or \ dateilänge empfangen + 0 do 06 [a!] [a@] [b!] loop \ datei senden + ]b + adm:close .err \ datei schließen +; + +: bload \ name ( -- ) - bellatrix-code laden + parsenw (bload) ; + diff --git a/forth/wplay.mod b/forth/wplay.mod new file mode 100644 index 0000000..faf878f --- /dev/null +++ b/forth/wplay.mod @@ -0,0 +1,93 @@ + +hex + +ifnot: mod:wplay +: mod:wplay ; + +\ kommandoformate + +ifnot: adm:fkt!s!b@ \ ( s fkt -- b ) +: adm:fkt!s!b@ b[ [a!] [a.s!] [a@] ]b ; + +ifnot: adm:fkt!b!b@ \ ( b fkt -- b ) +: adm:fkt!b!b@ b[ [a!] [a!] [a@] ]b ; + +ifnot: adm:fkt!b@ \ ( fkt -- b ) +: adm:fkt!b@ b[ [a!] [a@] ]b ; + +\ wave-funktionen + +\ wav:start ( cstr -- err ) +ifnot: wav:start +: wav:start + 96 adm:fkt!s!b@ ; + +\ wav:stop ( -- ) +ifnot: wav:stop +: wav:stop + 97 adm:fkt!b@ drop ; + +\ wav:status ( -- status ) +ifnot: wav:status +: wav:status + 98 adm:fkt!b@ ; + +\ adm-funktionen + +\ adm:setsound ( sfkt -- sstat ) - soundsystem verwalten +\ sfkt: +\ 0: hss-engine abschalten +\ 1: hss-engine anschalten +\ 2: dac-engine abschalten +\ 3: dac-engine anschalten +\ sstat - status/cognr startvorgang +ifnot: adm:setsound +: adm:setsound + 5C adm:fkt!b!b@ ; + + +\ metafunktionen + +\ won +ifnot: won +: won + 0 adm:setsound 3 adm:setsound 2drop ; + +\ woff +ifnot: woff +: woff + 2 adm:setsound 1 adm:setsound 2drop ; + +\ wend? ( -- t/f ) +ifnot: wend? +: wend? + begin 50 delms key? dup if key drop then wav:status 0= or until ; + +\ (wplay) ( cstr -- ) +ifnot: (wplay) +: (wplay) \ ( cstr -- ) + ." Datei : " dup .cstr cr wav:start .err wend? wav:stop ; + +\ wplay name ( -- ) +ifnot: wplay +: wplay + won parsenw (wplay) woff ; + +\ files? ( -- cnt ) - anzahl dateien im dir +ifnot: files? +: files? + adm:diropen + 0 begin adm:nextfile swap 1+ swap 0= until 3 - padbl ; + +\ filenr? ( nr -- ) +ifnot: filenr? +: filenr? + adm:diropen + 0 do adm:nextfile drop loop ; + +\ wdirplay ( -- ) - gesamtes verzeichnis abspielen +\ im verzeichnis dürfen nur wav-dateien sein! +ifnot: wdirplay +: wdirplay + won files? dup ." Dateien : " . cr + 0 do i dup 1 + . 3 + filenr? pad (wplay) loop padbl woff ; diff --git a/system/administra/admay/admay.spin b/system/administra/admay/admay.spin new file mode 100644 index 0000000000000000000000000000000000000000..48784a67795e3e5e13d8f6a1db452dda2f13bb95 GIT binary patch literal 83260 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 literal 0 HcmV?d00001 diff --git a/system/administra/admsid/admsid.spin b/system/administra/admsid/admsid.spin new file mode 100644 index 0000000000000000000000000000000000000000..bcdc6ecd00b4852080d3edeb889d1f1f6746abbb GIT binary patch literal 100386 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 AT>t<8 literal 0 HcmV?d00001 diff --git a/system/administra/aterm/Read Me.rtf b/system/administra/aterm/Read Me.rtf new file mode 100644 index 0000000..8e60f75 --- /dev/null +++ b/system/administra/aterm/Read Me.rtf @@ -0,0 +1,272 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch0\stshfloch31506\stshfhich31506\stshfbi31506\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;} +{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;} +{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} +{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f39\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f40\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\f42\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f43\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f44\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f45\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\f46\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f47\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f379\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f380\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;} +{\f382\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f383\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f386\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f387\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);} +{\f409\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f410\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f412\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f413\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} +{\f416\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f417\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;} +{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;} +{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} +{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0; +\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp \f31506\fs22 }{\*\defpap +\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 \styrsid3755876 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31506\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused \sqformat Normal Table;}} +{\*\rsidtbl \rsid410870\rsid1726074\rsid3366185\rsid3755876\rsid3833722\rsid4740689\rsid5992232\rsid6245947\rsid8655232\rsid8809290\rsid11759436\rsid14891351\rsid15496811}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0 +\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author Kwabena W. Agyeman}{\operator Kwabena W. Agyeman}{\creatim\yr2010\mo1\dy8\hr16\min46}{\revtim\yr2010\mo1\dy8\hr17\min52}{\version5}{\edmins66}{\nofpages3}{\nofwords944}{\nofchars4608} +{\nofcharsws5541}{\vern32771}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect +\widowctrl\ftnbj\aenddoc\trackmoves1\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen +\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1440\dgvorigin1440\dghshow1\dgvshow1 +\jexpand\viewkind1\viewscale102\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct +\asianbrkrule\rsidroot6245947\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0 +{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sectrsid3755876\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2 +\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6 +\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\contextualspace \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 +\f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\ul\insrsid6245947\charrsid6245947 FATEngine Beta Demo}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\ul\insrsid6245947 +\par +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid6245947 Thank you for taking the time help test out the FATEngine}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid11759436 : a}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid6245947 fully functional FAT16/32 file system + driver library. To help you get started working with this tool please refer to the rest of this document. +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\ul\insrsid6245947\charrsid6245947 +\par System Configuration}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\ul\insrsid6245947 +\par +\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid6245947\contextualspace {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid6245947 +You will need to first edit the included spin files to match your system configuration so that you can test out the demo. If you have a DS1307 real time clock please attach it to the specified pins below. +\par +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid11759436 \tab Open the RTCEnigne.spin file in}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid6245947 this folder and change the pin numbers to match the pin numbers of where you}{\rtlch\fcs1 \af31507 \ltrch\fcs0 +\insrsid11759436 r}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid6245947 DS1307 RTC is attached in the CON block at the top of the code. If you do not have a DS1307 RTC the included demo code will still function, however all time stamps will be invalid. + +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid11759436 +\par \tab Open the FATEnigne.spin file in this folder and change the pin numbers to match the pin numbers of where SD/SDHC/MMC Card is attached in the CON block at the top of the code. +\par +\par }\pard \ltrpar\ql \fi720\li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid11759436\contextualspace {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid11759436 +Open the COMEngine.spin file in this folder and change the pin numbers to match the pin numbers of where Prop Plug is attached in the CON block at the top of the code.}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid6245947 +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid11759436 +\par Open the Demo.spin file in this folder and chang +e the baud rate to match the baud rate of the specified baud rate when using parallax serial terminal. Additionally please change the clock frequency to your system configuration at the top of the Demo.spin file to match your setup. +\par +\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid11759436\contextualspace {\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\ul\insrsid11759436 Serial Terminal +\par +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid11759436 Pleas +e open parallax serial terminal and connect to the propeller chip using the specified baud rate you set in the Demo.spin file. The demo program waits 5 seconds to let you get ready before running. After this the demo program should display a welcome messa +ge and a \'93>_\'94 command cursor. +\par +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\ul\insrsid11759436 Serial Terminal Commands +\par +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid11759436 The following is a complete list of commands that the serial terminal demo program will execute.}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid4740689 + Please note that the max command length is 255 characters after which a buffer overflow error will occur. The serial terminal will recover from this error but your command will be discarded. }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid11759436 +\par +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid4740689 General Commands: +\par +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid11759436 \'93clear\'94 - Clears the terminal screen. +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid3833722 +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid11759436 \'93echo\'94 - }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid4740689 Echoes}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid11759436 back whatever was typed}{\rtlch\fcs1 \af31507 \ltrch\fcs0 +\insrsid4740689 after the command.}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid11759436 +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid3833722 +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid4740689 \'93date\'94 - Returns the current date fetched from the DS1307 RTC. If you do not have the DS1307 RTC the date returned will be invalid. +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid3833722 +\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid4740689\contextualspace {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid4740689 \'93time\'94 + - Ask the user for all specified timing parameters to set the date on the DS1307 RTC. +\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid11759436\contextualspace {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid4740689 +\par File System Commands +\par +\par \'93mount\'94 - Mounts the specified partition on the SD Card for file system access. An SD card must be attached to the system or an error message will be displayed. A partition must be mounted for + any other commands to execute. Please un-mount the partition when finished. The check disk flag causes windows to run check disk o}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid3833722 n the SD Card if not un-mo +unted properly when the disk is plugged into a windows machine.}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid4740689 +\par +\par \'93umount\'94 - Un-mounts the active partition allowing another to be mounted and + writes file system optimization data back to the disk. Additionally deactivates the rest of the file system functions the turns off any raised check disk flags. +\par +\par \'93df\'94 <}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid5992232 fast mode (f)> - Computes the count of free 512 byte sectors on the partition. Use the +fast mode flag (f) to ask the function to return previously computed values instead of computing new ones. If no previously computed values are available this function will compute them after which fast mode will be valid. Computing the free sector count +can take a long time.}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid4740689 +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid5992232 +\par \'93du\'94 - Computes the count of used 512 byte sectors on the partition. Use the fast mode flag (f) to ask the function to return previously computed values instead of computing new ones. If no previously computed values +are available this function will compute them after which fast mode will be valid. Computing the used sector count can take a long time. +\par +\par \'93ls\'94 - List all files and folders in the current directory with along with their last access date, last modification date, and creation date as well as their size and attributes. Directories have no size. Only files have size.}{ +\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid410870 The attributes letters mean:}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid5992232 R \endash Read Only, H \endash Hidden, S \endash System, A \endash Archive, }{\rtlch\fcs1 \af31507 \ltrch\fcs0 +\insrsid410870 and }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid5992232 D- Directory. +\par +\par \'93find\'94 - Verifies the specified file exist in the current directory. +\par +\par \'93cd\'94}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid5992232\charrsid5992232 }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid5992232 - Enters into the specified directory allowing file system access to all files within that directory. +\par +\par \'93attrib\'94 - Changes the attributes of the specified file or directory to the new specified attributes.}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid8655232 The new attributes are: }{\rtlch\fcs1 \af31507 \ltrch\fcs0 +\insrsid5992232 R \endash Read Only, H \endash Hidden, S \endash System, A \endash Archive. +\par +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid15496811 \'93rename\'94 - Changes the specified file or directory\rquote s entry name to the new specified entry name. +\par +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid5992232 \'93rm\'94 - Removes the specified file from the current directory or deletes any empty directory from the file system permanently. +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid15496811 +\par \'93mkfile\'94 - Makes a new file in the current directory with the specified name. +\par +\par \'93mkdir\'94 - Makes a new directory in the current directory with the specified name. +\par +\par \'93cat\'94 - Displays the contents of the specified file in either binary, hexadecimal, decimal, or ASCII characters.}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid8655232 The type flag can be:}{\rtlch\fcs1 \af31507 \ltrch\fcs0 +\insrsid15496811 B \endash Binary, D \endash Decimal, H \endash Hexadecimal, A \endash ASCII. +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid8655232 +\par \'93test\'94 - Creates a temporary file to test read and write character and block performance of the driver}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid1726074 +. After which results are printed to the screen and the file temporary file is deleted.}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid8655232 +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid4740689 +\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8655232\contextualspace {\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\ul\insrsid8655232 That\rquote s all folks! +\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid11759436\contextualspace {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid4740689 +\par +\par +\par +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid4740689\charrsid11759436 +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid11759436 +\par +\par }{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid11759436\charrsid11759436 +\par }\pard \ltrpar\qj \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid11759436\contextualspace {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid11759436\charrsid11759436 +\par }\pard \ltrpar\ql \fi720\li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid11759436\contextualspace {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid11759436\charrsid11759436 +\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid6245947\contextualspace {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid6245947\charrsid6245947 +\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\contextualspace {\rtlch\fcs1 \af31507 \ltrch\fcs0 \b\ul\insrsid6245947\charrsid6245947 +\par }{\*\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8 +72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7 +2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b +44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7 +065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000 +00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08 +84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc +52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353 +bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468 +656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c +070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7 +29e245eb2b260a0238fd010000ffff0300504b03041400060008000000210096b5ade296060000501b0000160000007468656d652f7468656d652f7468656d65 +312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87615b8116d8 +a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad79482a9c04 +98f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b5d8a314d3c +94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab999fb7b471 +7509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9699640f671 +9e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd5868b37a088d1 +e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d60cf03ac1a5 +193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f9e7ef3f2d1 +17d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be15c308d3f2 +8acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a99793849c26ae6 +6252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d32a423279a +668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2af074481847 +bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86e877f0034e +16bafb0e258ebb4faf06b769e888340b103d3311da9750aa9d0a1cd3e4efca31a3508f6d0c5c5c398602f8e2ebc71591f5b616e24dd893aa3261fb44f95d843b +5974bb5c04f4edafb95b7892ec1108f3f98de75dc97d5772bdff7cc95d94cf672db4b3da0a6557f70db629362d72bcb0431e53c6066acac80d699a6409fb44d0 +8741bdce9c0e4971624a2378cceaba830b05366b90e0ea23aaa241845368b0eb9e2612ca8c742851ca251ceccc70256d8d87265dd96361531f186c3d9058edf2 +c00eafe8e1fc5c509031bb4d680e9f39a3154de0accc56ae644441edd76156d7429d995bdd88664a9dc3ad50197c38af1a0c16d684060441db02565e85f3b966 +0d0713cc48a0ed6ef7dedc2dc60b17e92219e180643ed27acffba86e9c94c78ab90980d8a9f0913ee49d62b512b79626fb06dccee2a432bbc60276b9f7dec44b +7904cfbca4f3f6443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc399161ee314bc2e75cf8759081743be1236ec4f4d6693e5336fb672c5dc24a8c33585b5fb +9cc24e1d4885545b58463634cc5416022cd19cacfccb4d30eb45296023fd35a458598360f8d7a4003bbaae25e331f155d9d9a5116d3bfb9a95523e51440ca2e0 +088dd844ec6370bf0e55d027a012ae264c45d02f708fa6ad6da6dce29c255df9f6cae0ec38666984b372ab5334cf640b37795cc860de4ae2816e95b21be5ceaf +8a49f90b52a51cc6ff3355f47e0237052b81f6800fd7b802239daf6d8f0b1571a8426944fdbe80c6c1d40e8816b88b8569082ab84c36ff0539d4ff6dce591a26 +ade1c0a7f669880485fd484582903d284b26fa4e2156cff62e4b9265844c4495c495a9157b440e091bea1ab8aaf7760f4510eaa69a6465c0e04ec69ffb9e65d0 +28d44d4e39df9c1a52ecbd3607fee9cec7263328e5d661d3d0e4f62f44acd855ed7ab33cdf7bcb8ae889599bd5c8b3029895b6825696f6af29c239b75a5bb1e6 +345e6ee6c28117e73586c1a2214ae1be07e93fb0ff51e133fb65426fa843be0fb515c187064d0cc206a2fa926d3c902e907670048d931db4c1a44959d366ad93 +b65abe595f70a75bf03d616c2dd959fc7d4e6317cd99cbcec9c58b34766661c7d6766ca1a9c1b327531486c6f941c638c67cd22a7f75e2a37be0e82db8df9f30 +254d30c1372581a1f51c983c80e4b71ccdd28dbf000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f74 +68656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f24 +51eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198 +720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528 +a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100828abc13fa0000001c0200001300000000000000000000000000 +000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b000000000000000000000000 +002b0100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000140200007468 +656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210096b5ade296060000501b000016000000000000000000 +00000000d10200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b010000270000000000 +00000000000000009b0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000960a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4; +\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9; +\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7; +\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000 +4d73786d6c322e534158584d4c5265616465722e352e30000000000000000000000e0000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff0900060000000000000000000000010000000100000000000000001000000200000001000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdffffff04000000feffffff05000000fefffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffff01000000ec69d9888b8b3d4c859eaf6cd158be0f0000000000000000000000004047 +ec51b590ca010300000080020000000000004d0073006f004400610074006100530074006f0072006500000000000000000000000000000000000000000000000000000000000000000000000000000000001a000101ffffffffffffffff0200000000000000000000000000000000000000000000004047ec51b590ca01 +4047ec51b590ca01000000000000000000000000c70033005a005100d4004700cd0056004b0055004300c700d1004a004400dc00d200c3004400c700d000c0003d003d000000000000000000000000000000000032000101ffffffffffffffff0300000000000000000000000000000000000000000000004047ec51b590 +ca014047ec51b590ca010000000000000000000000004900740065006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffff04000000ffffffff000000000000000000000000000000000000000000000000 +00000000000000000000000000000000cf00000000000000010000000200000003000000feffffff0500000006000000070000000800000009000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c623a536f757263657320786d6c6e733a623d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f6772617068792220786d6c6e733d +22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f677261706879222053656c65637465645374796c653d225c4150412e58534c22205374796c654e616d653d22415041222f3e0d0a00000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a6461746173746f72654974656d2064733a6974656d49443d227b44303530 +443639442d353536422d343032392d413743342d3930464343413330453743327d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573746f6d586d6c223e3c64733a736368656d61526566733e3c +64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6f70656e500072006f007000650072007400690065007300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff000000000000 +0000000000000000000000000000000000000000000000000000000000000400000055010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f677261706879222f3e3c2f64733a736368656d61526566733e3c2f64733a6461746173746f +72654974656d3e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/system/administra/aterm/aterm.spin b/system/administra/aterm/aterm.spin new file mode 100644 index 0000000000000000000000000000000000000000..44c6f95eeba733d3dd0506098089de81100c9d4a GIT binary patch literal 34752 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 Zwvf@3y?(@lfBIRE82&l+3*Nc&{{iwg|3d%( literal 0 HcmV?d00001 diff --git a/system/bellatrix/bel-htext/logo-hive-8x2.dat b/system/bellatrix/bel-htext/logo-hive-8x2.dat new file mode 100644 index 0000000000000000000000000000000000000000..109ef59595746f4b507ce708e2ec1d52d6d6a8bf GIT binary patch literal 1024 zcmb`F!3o1K3`GUG7PL^ns~b8%SJ40l^?kQVYB!{pD*PmpB@6q>?2i_?SgUSsYh5g= zS%g`Y^skuKtdP^vt?>NWqR{WB+C54>q`7?(7?qXhKFIJmlQh@QJ~{15bN=i*ZQL@w zqCl<7oT%r**4L(lStk{Zqd16IlGaIzLC-obau4ey;Tjv;TPG~O%mP~R6@z;tryQmG zA4lPq(B4L^6x0`~HER!w*>SLqV-zvHWk literal 0 HcmV?d00001 diff --git a/system/bellatrix/bel-tv/tv.spin b/system/bellatrix/bel-tv/tv.spin new file mode 100644 index 0000000000000000000000000000000000000000..a7f31d31d0bc48d6b0dcd5f716b6376e46b8e7ca GIT binary patch literal 36044 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 literal 0 HcmV?d00001 diff --git a/system/regnatix/admtest.spin b/system/regnatix/admtest.spin new file mode 100644 index 0000000000000000000000000000000000000000..977052d2c1ca72bb238a62854e9d2af0fa36dc75 GIT binary patch literal 46260 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 IdZg_C0gxiNxBvhE literal 0 HcmV?d00001 diff --git a/system/regnatix/beltest.spin b/system/regnatix/beltest.spin new file mode 100644 index 0000000000000000000000000000000000000000..7d9f92eb4023df2b323387530bdad3830b8515fe GIT binary patch literal 24664 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 literal 0 HcmV?d00001 diff --git a/system/regnatix/charmap.spin b/system/regnatix/charmap.spin new file mode 100644 index 0000000000000000000000000000000000000000..20083a32ad7af4ef0152d3c1b08e46e60b61b223 GIT binary patch literal 7478 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 literal 0 HcmV?d00001 diff --git a/system/regnatix/eram.txt b/system/regnatix/eram.txt new file mode 100644 index 0000000..92024bf --- /dev/null +++ b/system/regnatix/eram.txt @@ -0,0 +1,33 @@ + +cls - bildschirm löschen +bye - player beenden +d - anzeige eram +n - anzeige fortsetzen +m ... - ram modifizieren (byte) +l ... - ram modifizieren (long) +load - ladei datei in eram +sysvar - anzeige systemvariablen +rbas - basisadresse setzen +info - speicheraufteilung anzeigen +f - speicherbereich füllen (sysmod) +fu - speicherbereich füllen (usermod) +xinit - rdisk initialisieren +xnew - neue datei anlegen +xhead - header anzeigen +xdir - dir anzeigen +xdel - datei löschen +xren - datei umbenennen +xftab - ftab anzeigen +xopen - datei öffnen +xseek - zeiger positionieren +xput - zeichen in datei schreiben +xget - zeichenh aus datei lesen +xwrite - wert schreiben +xread - wert lesen +xload - datei in rd laden +xsave - datei fn1 auf sd fn2 speichern + +bas - basisadresse +end - endadresse (startsysvar) +sys - start systemvariablen +rd: - daten datei diff --git a/system/regnatix/flash.spin b/system/regnatix/flash.spin new file mode 100644 index 0000000000000000000000000000000000000000..9dc2aa9ac68dd5cda54673a2418118fabb9cb5fb GIT binary patch literal 28538 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 G$^QVH9ThSF literal 0 HcmV?d00001 diff --git a/system/regnatix/flash.txt b/system/regnatix/flash.txt new file mode 100644 index 0000000..cd9f657 --- /dev/null +++ b/system/regnatix/flash.txt @@ -0,0 +1,10 @@ +/? : Hilfe +/fh : Datei in HI-ROM flashen +/fl : Datei in LO-ROM flashen +/dh : Dump HI-ROM +/dl : Dump LO-ROM +/vh : Vergleich Datei <--> HI-ROM +/ch : HI-ROM löschen +/cl : LO-ROM löschen +/sh : HI-ROM speichern +/sl : LO-ROM speichern diff --git a/system/regnatix/fterm.spin b/system/regnatix/fterm.spin new file mode 100644 index 0000000000000000000000000000000000000000..eeb3dc066238b0243643020320e993a145acd77b GIT binary patch literal 8536 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 literal 0 HcmV?d00001 diff --git a/system/regnatix/hplay.txt b/system/regnatix/hplay.txt new file mode 100644 index 0000000..78a0da2 --- /dev/null +++ b/system/regnatix/hplay.txt @@ -0,0 +1,7 @@ +/? : hilfetext +/p name.wav : hss-datei abspielen +/d : verzeichnis abspielen +/s : wiedergabe stoppen +/t : anzeige trackerliste +/r : anzeige engine-register +/i : anzeige interface-register diff --git a/system/regnatix/keycode.spin b/system/regnatix/keycode.spin new file mode 100644 index 0000000000000000000000000000000000000000..7f707af07b326266bc446427f8c1e359bdfd814e GIT binary patch literal 7406 zcmds++fN%;5XO&qtXioLedt3UR#s6G6=)zzA0kBx;T8%Q*EUI`s*1qD#tqmMLvw5X z^Q!IloALPIb(#pZ5h+@&ch6bJlUP#(w$VK_0&rpwTiT%o^Co$yXhburhWB%?AO#trzL4{oL-s+9m#(x*{`Qox}oPn zx|!y6|37riIyGbitgtT&J=L?H+WKwFMsA(9*|3nV`_lU;4Mua$^uC|w)c!cGtkbfj zN2jX!;4A&&eS@^8-lrO)<$Y*fSU(zrfcFg4YRSTd{Pak_E5otEW}K*JStDT5{h$cA zPG4N143Vb4w0I&qq$s%vgX(&Ka8^up+x;`7f`j$Y05?&ufET(5`X zbt26i?MYdY@}@4w;7rj0{%@!7x$`!6)nW=8yqz<1Hw4<630DT6WbpNh4339l8BCrHD_(+Qrb>y>6)z?qvxM_=BBuHw8ohv zAOn=IJH`)m7Ie)DsayJu{6A~H<~|1HtnOXO#Ev)6<#~sE%0Adv51hDN7d(+X1S(yP zqLE9G*R5(4lwXy!4N3FNH|foY|8}~czPDD)i>J#00u@Pxr_By!tBk0@uR3Zyk=JfY z;w|+qD?0|KBHh*dkFw*U#^?3^jqaM>X?>>=G<~Ayy11>Tx@dnWQQy`${&#cq41{WF zM>-U;IMIrof7k61H6yH!C3|b6p=&i~81721(~i{VRHo&HNt&Uoi^i%pZ{Va;{yyMxSqRQpQ7)PH4|2t;MSi$?B8}8#W1nO_6 zh|zaTeIVUlNZPRELP@HS;=G>shMLa5cP@ChM%>5s{db(%bN0sYo8(6h!TUnH|8o7n zEl{3O7J485p7KgqgIt7vl7GYUcg^k%4KbIBh%~8v}kGS`1PkWSS zu!?#-!^|kMC#i#?u(7LqLb~W_FQ2F~LLcs}seD{lR&U5!+se;{GHyeCSZ+%>yQ$}< ze4(Y7>L~(aZ~AZ&!FfvO$;-L$)32^n^?gzQ`+9i#t;yD$|ENiF?MRCnoiXaNmuh*n zNoL`+#s1m0QGCTumyr{x_BM)-+D8F(+i_1dN7#v%Y&cx^fD@c5d^5<>0WzWj+Ig%aq}= z*A5Jt!&ssY?AtjxM^28fLbmi18=f8>?q24el)dwOb{(f8p2#AH;=mb%nk?r4_dd@r zF{>Og9#2Fa@kpHEU7ndZLvurs%k&hT(8Jz)7sGds(6uM zR&=6fjTLc&>$cwEy=7bpN&uPQ39@1UdBb4i=(=gW+1IEi*( zFfK1^x+GMQTWZy{@`Ir^i&}MEaQIM8z1IxQre-Wj)=g{CyCa@8 z&7(r)9|zFjt1n+F;`@SYxndH49SB@j*VmRb+h^4IQjfKZk4?g}{KX zBsFPN*BWc$23Ke|B^d~y*?p51-9cf~T3K7SEjC)zj4i{4GuD>wHO0PO>y*5JO=C6O%L~}yej?*^33824DftL9C<8>@4F`9 z+wRHXrO4xJWB>DVMNDLSOh%Y<3IFu-N<=`GmM``z(hH>UdvJ6-g0jpRPr2yj7+kII O^%p%c`1k$z^7uDTnPL$D literal 0 HcmV?d00001 diff --git a/system/regnatix/perplex.spin b/system/regnatix/perplex.spin new file mode 100644 index 0000000000000000000000000000000000000000..e5c88b6355e735457f43447fd441c93fff454b08 GIT binary patch literal 25042 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 - plexus öffnen +close - plexus schliessen +put - zeichen zu plexus senden +get - zeichen von plexus empfangen +testout - werte an port ausgeben +testin - eingangswerte port anzeigen +scan - 0..anz plexus abfragen \ No newline at end of file diff --git a/system/regnatix/ramtest.spin b/system/regnatix/ramtest.spin new file mode 100644 index 0000000000000000000000000000000000000000..b55b2f20a9bc19f5d4e38653ff5d1b8e49186143 GIT binary patch literal 25658 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 Me8Kk0_iXC_0X`Z;g#Z8m literal 0 HcmV?d00001 diff --git a/system/regnatix/regime.spin b/system/regnatix/regime.spin new file mode 100644 index 0000000000000000000000000000000000000000..c3907f495ce36fdfb738e65f38092efa9f5d9f05 GIT binary patch literal 80298 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 literal 0 HcmV?d00001 diff --git a/system/regnatix/regime.txt b/system/regnatix/regime.txt new file mode 100644 index 0000000..49e8fbf --- /dev/null +++ b/system/regnatix/regime.txt @@ -0,0 +1,57 @@ +help - diese hilfe + - bin/adm/bel-datei wird gestartet +mount - sd-card mounten +unmount - sd-card abmelden +dir wh - verzeichnis anzeigen +type - anzeige einer textdatei +aload - administra-code laden +bload - bellatrix-treiber laden +rload - regnatix-code laden +del - datei löschen +cls - bildschirm löschen +free - freier speicher auf sd-card +attrib ashr - attribute ändern +cd - verzeichnis wechseln +mkdir - verzeichnis erstellen +rename - datei/verzeichnis umbenennen +format - sd-card formatieren +reboot - hive neu starten +sysinfo - systeminformationen +color <0..7> - farbe wählen +cogs - belegung der cogs anzeigen +dmlist - anzeige der verzeichnis-marker +dm - in das entsprechende marker- + verzeichnis wechseln +dmset - setzt den entsprechenden marker + auf das aktuelle verzeichnis +dmclr - marker löschen +forth - forth starten + +marker: +r - root-verzeichnis +s - system-verzeichnis +u - user-verzeichnis +a/b/c - benutzerdefinierte verzeichnismarker +r, s, u-marker werden vom system automatisch gesetzt und +intern verwendet. + +RAMDISK: + +xload - datei in ram laden +xsave - datei aus ram speichern +xdir - verzeichnis im ram anzeigen +xrename - datei im ram umbenennen +xdel - datei im ram löschen +xtype - text im ram anzeigen + +EXTERNE KOMMANDOS: + +sysconf - systemeinstellungen +hplay - hss-player +wplay - wav-player +sfxtool - hss-soundeffekte erstellen + +vga.bin - vga 1024 x 768 pixel, 64 x 24 zeichen +htext.bin - vga 1024 x 768 pixel, 128 x 48 zeichen +tv.bin - tv-textmodus 40 x 13 zeichen + diff --git a/system/regnatix/rom.spin b/system/regnatix/rom.spin new file mode 100644 index 0000000000000000000000000000000000000000..25fa998ef0d2704aabeaa1f0be9fc4b399b79a6d GIT binary patch literal 7190 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 ZZOCZKq?dW{aeak-(h-Bd+8$A9{|D07)+Yb} literal 0 HcmV?d00001 diff --git a/system/regnatix/splay.spin b/system/regnatix/splay.spin new file mode 100644 index 0000000000000000000000000000000000000000..51485c965de4cc09103141d148407c644b416a6c GIT binary patch literal 20828 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 literal 0 HcmV?d00001 diff --git a/system/regnatix/splay.txt b/system/regnatix/splay.txt new file mode 100644 index 0000000..5f2eb23 --- /dev/null +++ b/system/regnatix/splay.txt @@ -0,0 +1,8 @@ +/? : Hilfetext +/m name.dmp : DMP-Datei mono auf SID2 abspielen +/s name.dmp : DMP-Datei stereo auf beiden SIDs abspielen +/d : Verzeichnis wiedergeben + q - quit + n - next + p - pause + diff --git a/system/regnatix/sysconf.spin b/system/regnatix/sysconf.spin new file mode 100644 index 0000000000000000000000000000000000000000..f1e07ac6719566eb674127062403aabdd9f1f7fb GIT binary patch literal 23420 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 R>kYD_Rt)yWS$_xKe*w0Bz+C_U literal 0 HcmV?d00001 diff --git a/system/regnatix/sysconf.txt b/system/regnatix/sysconf.txt new file mode 100644 index 0000000..484e2f7 --- /dev/null +++ b/system/regnatix/sysconf.txt @@ -0,0 +1,18 @@ +/? : Hilfe +/l : Konfiguration anzeigen +----------- Administra-Funktionen +/ah 0|1 : hss ab-/anschalten +/aw 0|1 : wav ab-/anschalten +/as 0|1 : systemklänge ab-/anschalten +/al 0..100 : wav-lautstärke links +/ar 0..100 : wav-lautstärke rechts +/ah 0..15 : hss-lautstärke +/af : administra reset, flash booten +/at : transfergeschwindigkeit messen +----------- Bellatrix-Funktionen +/ci : farbtabelle anzeigen +/cs datei : farbtabelle speichern +/cl datei : farbtabelle laden +----------- Port-Funktionen +/po nr anz : Impulse an port ausgeben +/pi : Status der Port abfragen \ No newline at end of file diff --git a/system/regnatix/time.spin b/system/regnatix/time.spin new file mode 100644 index 0000000000000000000000000000000000000000..36f0d344eeee17faeaf5ee73941d764b801c7118 GIT binary patch literal 23314 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

nmr5QWo05o@%t%N-X&sW4B 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 YCS){a+E4J{@3a2v8Aa5A{nqZk0S~sgmjD0& literal 0 HcmV?d00001 diff --git a/system/regnatix/yplay.txt b/system/regnatix/yplay.txt new file mode 100644 index 0000000..03f0d0d --- /dev/null +++ b/system/regnatix/yplay.txt @@ -0,0 +1,8 @@ +Wiedergabe von YM-Dateien mittels AY-3-891X / YM2149 emulator + +/? : Hilfetext +/p name.YM : YM-Datei abspielen +/d : Verzeichnis wiedergeben + q - quit + n - next + p - pause diff --git a/system/sonstiges/BLUE.COL b/system/sonstiges/BLUE.COL new file mode 100644 index 0000000..0d8d9d8 --- /dev/null +++ b/system/sonstiges/BLUE.COL @@ -0,0 +1 @@ +<<<<ððððÀÀÀÀ0000<<<<üüüüÿ€ÿ€ÿÿ€€ˆˆˆˆ \ No newline at end of file diff --git a/system/sonstiges/BW.COL b/system/sonstiges/BW.COL new file mode 100644 index 0000000000000000000000000000000000000000..ecbace2d3aaacf40fbe1ac70f4a895ad097c2bfd GIT binary patch literal 64 zcmWl{K@k8T3Egs=?UU(#APCk_+CjY~zbVzFcM;_(4I%PIi? literal 0 HcmV?d00001 diff --git a/system/sonstiges/CHESS.COL b/system/sonstiges/CHESS.COL new file mode 100644 index 0000000000000000000000000000000000000000..1bd21cec9eccb7d1965a67590087a6f9134fcd72 GIT binary patch literal 64 zcmW;AK@9*f2m?SK6@Vbb@tiCqRX`KgE%!Snlgu31Nb!W^{f{zK2_|6Mw)?;iZ~cJT0 literal 0 HcmV?d00001 diff --git a/system/sonstiges/regime.txt b/system/sonstiges/regime.txt new file mode 100644 index 0000000..d2a673b --- /dev/null +++ b/system/sonstiges/regime.txt @@ -0,0 +1,56 @@ +help - diese hilfe + - bin/adm/bel-datei wird gestartet +mount - sd-card mounten +unmount - sd-card abmelden +dir wh - verzeichnis anzeigen +type - anzeige einer textdatei +aload - administra-code laden +bload - bellatrix-treiber laden +rload - regnatix-code laden +del - datei l?schen +cls - bildschirm l?schen +free - freier speicher auf sd-card +attrib ashr - attribute ?ndern +cd - verzeichnis wechseln +mkdir - verzeichnis erstellen +rename - datei/verzeichnis umbenennen +format - sd-card formatieren +reboot - hive neu starten +sysinfo - systeminformationen +color <0..7> - farbe w?hlen +cogs - belegung der cogs anzeigen +dmlist - anzeige der verzeichnis-marker +dm - in das entsprechende marker- + verzeichnis wechseln +dmset - setzt den entsprechenden marker + auf das aktuelle verzeichnis +dmclr - marker l”schen + +marker: +r - root-verzeichnis +s - system-verzeichnis +u - user-verzeichnis +a/b/c - benutzerdefinierte verzeichnismarker +r, s, u-marker werden vom system automatisch gesetzt und +intern verwendet. + +RAMDISK: + +xload - datei in ram laden +xsave - datei aus ram speichern +xdir - verzeichnis im ram anzeigen +xrename - datei im ram umbenennen +xdel - datei im ram l”schen +xtype - text im ram anzeigen + +EXTERNE KOMMANDOS: + +sysconf - systemeinstellungen +hplay - hss-player +wplay - wav-player +sfxtool - hss-soundeffekte erstellen + +vga.bin - vga 1024 x 768 pixel, 64 x 24 zeichen +htext.bin - vga 1024 x 768 pixel, 128 x 48 zeichen +tv.bin - tv-textmodus 40 x 13 zeichen + diff --git a/system/sonstiges/test1.txt b/system/sonstiges/test1.txt new file mode 100644 index 0000000..15d01ca --- /dev/null +++ b/system/sonstiges/test1.txt @@ -0,0 +1,7 @@ + +"Die Blütenträume +Von Faltern, wie ich hörte, +So lautlos wie sie -" +Reikan + + diff --git a/system/sonstiges/test2.txt b/system/sonstiges/test2.txt new file mode 100644 index 0000000..72e62d4 --- /dev/null +++ b/system/sonstiges/test2.txt @@ -0,0 +1,115 @@ +Johann Wolfgang Goethe + +Der Zauberlehrling + +Hat der alte Hexenmeister +Sich doch einmal wegbegeben! +Und nun sollen seine Geister +Auch nach meinem Willen leben! +Seine Wort' und Werke +Merkt' ich und den Brauch, +Und mit Geistesstärke +Tu' ich Wunder auch. + +Walle! Walle +Manche Strecke, +Dass, zum Zwecke, +Wasser fließe +Und mit reichem, vollem Schwalle +Zu dem Bade sich ergieße. + +Und nun komm, du alter Besen! +Nimm die schlechten Lumpenhüllen! +Bist schon lange Knecht gewesen; +Nun erfülle meinen Willen! +Auf zwei Beinen stehe, +Oben sei ein Kopf, +Eile nun und gehe +Mit dem Wassertopf! + +Walle! Walle +Manche Strecke, +Dass, zum Zwecke, +Wasser fließe +Und mit reichem, vollem Schwalle +Zu dem Bade sich ergieße. + +Seht, er läuft zum Ufer nieder; +Wahrlich! ist schon an dem Flusse, +Und mit Blitzesschnelle wieder +Ist er hier mit raschem Gusse. +Schon zum zweiten Male! +Wie das Becken schwillt! +Wie sich jede Schale +Voll mit Wasser füllt! + +Stehe! Stehe! +Denn wir haben +Deiner Gaben +Voll gemessen! +Ach, ich merk' es! Wehe! Wehe! +Hab' ich doch das Wort vergessen! + +Ach, das Wort, worauf am Ende +Er das wird, was er gewesen. +Ach, er läuft und bringt behände! +Wärst du doch der alte Besen! +Immer neue Güsse +Bringt er schnell herein, +Ach! und hundert Flüsse +Stürzen auf mich ein. + +Nein, nicht länger +Kann ich's lassen; +Will ihn fassen. +Das ist Tücke! +Ach! nun wird mir immer bänger! +Welche Miene! Welche Blicke! + +Oh, du Ausgeburt der Hölle! +Soll das ganze Haus ersaufen? +Seh' ich über jede Schwelle +Doch schon Wasserströme laufen. +Ein verruchter Besen, +Der nicht hören will! +Stock, der du gewesen, +Steh doch wieder still! + +Willst's am Ende +Gar nicht lassen? +Will dich fassen, +Will dich halten +Und das alte Holz behände +Mit dem scharfen Beile spalten. + +Seht, da kommt er schleppend wieder! +Wie ich mich nun auf dich werfe, +Gleich, o Kobold, liegst du nieder; +Krachend trifft die glatte Schärfe! +Wahrlich, brav getroffen! +Seht, er ist entzwei! +Und nun kann ich hoffen +Und ich atme frei! + +Wehe! Wehe! +Beide Teile +Stehn in Eile +Schon als Knechte +Völlig fertig in die Höhe! +Helft mir, ach! ihr hohen Mächte! + +Und sie laufen! Nass und nässer +Wird's im Saal und auf den Stufen. +Welch entsetzliches Gewässer! +Herr und Meister! Hör' mich rufen! - +Ach, da kommt der Meister! +Herr, die Not ist groß! +Die ich rief, die Geister, +Werd' ich nun nicht los. + +In die Ecke, +Besen! Besen! +Seid's gewesen! +Denn als Geister +Ruft euch nur, zu seinem Zwecke, +Erst hervor der alte Meister." \ No newline at end of file