Shop OBEX P1 Docs P2 Docs Learn Events
TAQOZ - Tachyon Forth for the P2 BOOT ROM - Page 28 — Parallax Forums

TAQOZ - Tachyon Forth for the P2 BOOT ROM

1252628303138

Comments

  • BACKUP BIX --- will backup to _BOOT_P2.BIX
    BACKUP MBR --- backup to the MBR of the SD
    BACKUP FLASH --- backup to flashpart of the serial Flash
    BACKUP <filename> --- any file

    You need to load TAQOZ.FTH and DECOMP.FTH using the TAQOZ console itself. It is possible to FLOAD a file but it still needs the kernel extended with TAQOZ.FTH first.
  • I can combine TAQOZ with FastSpin's supported Languages and TAQOZ can be the swiss-army-knife for them. SD access, SmartPin commands, Tasks that can run even a VGA display and Keyboard when needed. Not just Smart Pins, a complete Smart Subsystem able to handle stuff on its own if told so.

    This is a big step for people not used to TAQOZ. But as of now I have a TAQOZ-driver.spin2 usable from within Spin/C/Basic/PASM just like any serial object.

    just cool.

    thanks MJB and Peter, but persistence pays of, sometimes.

    Can I, maybe add my needed Mailbox words directly in the source? Would save the BACKUP step and fiddling with the SD.

    Anyways,

    Mike
  • msrobots wrote: »
    I can combine TAQOZ with FastSpin's supported Languages and TAQOZ can be the swiss-army-knife for them. SD access, SmartPin commands, Tasks that can run even a VGA display and Keyboard when needed. Not just Smart Pins, a complete Smart Subsystem able to handle stuff on its own if told so.

    This is a big step for people not used to TAQOZ. But as of now I have a TAQOZ-driver.spin2 usable from within Spin/C/Basic/PASM just like any serial object.

    just cool.

    thanks MJB and Peter, but persistence pays of, sometimes.

    Can I, maybe add my needed Mailbox words directly in the source? Would save the BACKUP step and fiddling with the SD.

    Anyways,

    Mike

    Yes, just post the edited files and I will make sure they are checked and merged.

  • ok, here my version of es.spin2 out of your dropbox

    clock 160_000_000 baud 230_400 and those fixes applied that it compiles with FastSpin and Pnut.



    es.spin2 154.6K
  • I've adjusted all the include files so that M4 generates an es.spin2 that matches your file.
    es.spin2 154.6K
  • msrobotsmsrobots Posts: 3,709
    edited 2019-07-23 04:06
    BACKUP BIX --- will backup to _BOOT_P2.BIX
    BACKUP MBR --- backup to the MBR of the SD
    BACKUP FLASH --- backup to flashpart of the serial Flash
    BACKUP <filename> --- any file

    You need to load TAQOZ.FTH and DECOMP.FTH using the TAQOZ console itself. It is possible to FLOAD a file but it still needs the kernel extended with TAQOZ.FTH first.

    uuh BACKUP not there either, so I could puzzle my system together with just what I need, nice but maybe the wrong approach.

    Now things get interesting, WHAT to include into the swiss-army-knife for FastSpin. You mentioned you can pack a lot into 64K but I am still confused about HUB ram usage of TAQOZ.
    What I understand is that the dictionary is currently at $0F380 and at $10000 starts the SDBUFS buffer so there are 3.200 bytes right? wrong? your memory layout is quite confusing.

    But basically I think this should be a quite full blown TAQOZ and since I 'link' a binary it is easy exchangeable and the linker new compiled.

    Now talk about needed HUB memory. Your datram starts at $12000 and you put bmporg at $30000.

    So I assume now that without VGA I am save above bmporg at $3000. Where am I save when USING VGA and KBD? Just need some numbers here.

    But if we give TAQOZ 128K+VGA(if needed) then there should be a lot of punch in it to wish to include it. And I think there is enough punch already there.

    So what files I need to load/paste into my newborn es.binary to get a DECENT TAQOZ able to load 'extensions' from disk if needed. Since it is included in the main program it can not easy backup when running later on, and will start newborn at each program start, debatable.

    Mike
  • I've adjusted all the include files so that M4 generates an es.spin2 that matches your file.

    compiles and runs with FastSpin, perfect.
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2019-07-23 04:22
    Just load TAQOZ.FTH since it has most of the high level stuff including file handling that you will need. But there is still plenty of room in the 64k area after that, even after loading every other thing.

    Here's the MEMORY.TXT file I have in my P2 BOOT folder that I commented from a memory dump earlier in the month. I snipped out some memory ranges so the forum would post it. This is the "kitchen sink" edition with 27k (of the first 64k) free.
    CONFIG & INIT & ZERO PAGE VARIABLES
    00000: X...P2D2F   ....@x}.@Ys.................X........Zl...... ...!................................d.......c.......f...G...c.Y|d.....
    00080: ..... .......".......$.......&.......(.......*.......,.........._._.............................................................
    
    00100: ................................................................................................................................
    00180: ................................................................................................................................
    
    TAQOZ REGISTERS
    00200: ............................*.......DUMPAW......................................................................190706-1279.)...
    00280: ... ..D............Q.............................,....g..hl..rl......Z.........O................................................
    SPARE REGISTERS
    00300: ................................................................................................................................
    00380: ................................................................................................................................
    
    DEBUG ROUTINES
    00400: ........@...:...|.......$...=...l...".......#.......$.......%... ...H.......4...$...8.............G.0...:......1......'...o. ...
    00480: ................>.'...d.@|t....=-.d.8.....`.2................q.qCHIP............................................................
    
    KERNEL COG CODE IMAGE
    00500: ................ ...@.......................}...............................................................................-.`.
    00580: a....T.....=.V..(..=.X.....=.Z..0..=..D...........D...............$...3..(...........D............d.....l.......d...-.d].(......
    00600: T......]-.d.-.c....."...<...8...+.`.\...".x..D....`.....~....D......-.d."F.............../.."...#D..$F..%H......."...J...E.."...
    00680: @...#D......#...0...$...(...%... ...#D..#..."F...D......$...#H......"D`."F.......D...D...D...D...D...DD..E..h..."D`."D...D.."F..
    00700: T..."F .L..."F@.D..."F`.<..."F@.4....DD..DD..DD..DD..DD."F...D.6-.d."F......"F.......Dd..D.."F`....."F ......Dd..Dd..Dd..Dd..Dd.
    00780: iD`."D.."D...D...D...D...E.......D...D...D...D...E..-.d."F...G.V.....D.."D ."D@."F..........x..."F`.p..."F@.h..."F .`..."F..X...
    00800: "....D......"D.."D.."D.."....F.."F@.,..."....F.."FP....."....F.."F`....."D.."F0......D...D...D..#.......o.u."...$....H..#.@..F..
    00880: ....".....$.....).`.$...).`.#.c......D....d..H...F..........(...$F..#....D`.....&.......................&.......&D......\....P0.
    00900: .&...N0..&...L0..&...Q...L.."N..4...........(....L...L...L..&NX.(...-.d..&...L...&...N...&...P...L...Od.(..."D.....].L...N..(..V
    00980: ...].....D0..$.......$......$....D0..(.......(..........a.......a....J0.."..$J..#H.."F...D......................................
    00A00: .............D..D....D..<....D .4...................................@0p....=-.d.#.x...`... .@0p....=.....El.....Y0`.X0`._0`.@0`.
    00A80: @0p.....\....Ft.ZD`..FT.ZD`.@Dp..Ft..F..XD`=YD`.....YD`.....XD`.....@D`.....@Dp..E......"...x..."...>..... ...d.@.s....=\...>...
    00B00: #....F......O.`.....O.`.....@.p.......`..El.(... ...1.d.....O.`.....O.`.....@.p..D..-.d.X.`.X.`.#.x...`...d.....$....El.....?D..
    00B80: @DD..Dd.....X.`.X.`...........4.J.`.O.`.....O.`.-.d. ........Dd..........Dd.........Y.`.Y.`.HF`.X6`..Dt.CF`.O6`..8........l.-.d.
    00C00: @F`.@Fp..D.......,...*`.".....D.#.......$.............T...D..ED<.ED.....z....H....l...................}.<@d. ...G...A.`.!...G...
    
    VGA DRIVER
    00C80: A.`."...G...A.`.#...G...A.`.$...!...L.......P.................T...l.....(..._.`...........T............._.`...................l.
    00D00: ............,.....`...........|.......`...d.G.0...............d.:.`...d.9.`...d.8.`.-.d.@.......`...0............"...........$..
    
    HUBEXEC
    00D80:  &..@(...... ...I.............................T.I...-.d.%.d..D..........@....D`.e...#D..d...?D`.e...$.p.....I....Fd.#D.. D`.d...
    00E00: $.p.....I....D`.e.....`.@.......@..."0..e..."2..e....D .@0p....=....e...hR`.)...@....D......e...#DP....."FP....."F..#F..e....F..
    00E80: #D...F`.e...#D...F`..D`."F...D`..F`."F...F`.e..."F0..F`.e...)>d.............).d.#@..........P$....................D...........0.
    00F00: ..D...............D...........0...D.....)>e.".c......D..)>e.".c......D..-.d. ... ..."...$...#....H....t......H...H...F...D....l.
    00F80: "...#...$D..%F...H...J.."..."..."..."...X.`.Y.`.Y.`.X.`.@.`.Y.`.e...X.`.Y.`..Dd._.`..El.e.....`.@...#D..d....D`.e..."B....`.!.`.
    01000: e...$"`...`.!.`."....E....D.@...e......."...#.@.".`.d..."...#. .".`.d..."D.."F...G.Ve.......".`.e.......".P.e.......".@.e..."...
    01080: #.H........V@..."......Ve...e...-.d.&N...N.."...@....D`.e.....`.@....D`.e...#..............]#...#.....d...@."...#.......\.....$.
    01100: ....<..]. ... ... ..$..................................].!l."F..e..."........D...D.......F..e.......@........D..e...Y|d.>...?|..
    01180: ..............`...d.....?...>...>.,.<...A~d.?<..%.d..@...@d. ~g.........%.d.-.d..:d.?<...<D..:H......;...........:...<...<`. >..
    
    KERNEL WORDCODE
    01200: .....>...<@..<D......A...@T...;. .......n.......e.........M... .y.m.....n.".'.Y.......#.e.M...\.M.$.?.4.....M.e.i...k...#...#...
    01280: ..........v.|/-\ ....."..."........... ok.....#...#.~.....e...#._.#.'.#. .H.M. .8.M. .(.M.y.p.M.y...`.M.r...r.....|.....M.|...}.
    01300: L.e.a.M.H.....y...M.H.....y...M.H.'...y...M...M.L.@B..L.........M.<.=.@B....M.L.....L.....L.......k...k.........M.......y...o...
    01380: o.`.........M.n.H.....y.....M.y...........9...........3.`.y.......?.......`.....?.....`.....Q.............y.....`.1.....n.......
    01400: e.`...y.k.......`.r.......y.m... Structure mismatch! ..#Y.O...r.Y.....M.r.Y.r.Y.....n.Y.............e.........M.d...M.:.n.Y.p...
    01480: B.T.?.v.......:...m..."...B.7.M.?......#n.P.n.".........`.............e...`.....$...`.B.........M.`.k.............O.........n...
    01500: ..........`.....M...X.n.....V.M.. .  ...........M. .n.K.(...M.2.........M.....y.p.y...M...;...-...;.. ..T.Y.`.\.......n.....n...
    01580: ......\.y.....\.......\.X.@...h.K...  Dictionary full! ..#Q.d.O.............&.......d.&.L...........d.&.K.........M.....\.....M.
    01600: d.....................\.........\...M.......4.......`.....?. .?.....`.1.........`...n.......y...M.M...M.@.........-.p...M.?.t...
    01680: ..M.......?.......p.|.....r...7...:.p...M.}.p...}.t.....}...M.6...m.K.<.........M.B.........M.0...M.......M...0...n.9.`.......#.
    01700: $.#...n...........n.........n...........n...n...e...;.....:.".!.....m...V.M...M.....m...V.M...M.....m...V.M.-.:.......M.......h.
    01780: m...T.....&.......t.M. .............O.!. .........@...................M. .........P...................`...............@.|.....&.
    01800: ..r...n...e.......@.....M.<...........@.........5...?.b...?.B...k............... . ...........:...........M...h.H.....COG  ...(.
    01880: B.....REGS ...........CODE .X. ...@.......WORDS.\.@.........P...@...............P...@...............................?...@.......
    01900: ..........................?......."...=...>.......~.......................|.....................?.~....."...................M.d~
    01980: ?ulhLH..".:.".M...........M.L.@B..<.n.......:...Hz .M.........MHz.M...n.:... cycles= ...<.......:...ns @......y.....`. .`.K.p.M.
    01A00: .. DATA STACK (.`.n.B.K.`. ...n.............<...n.....n...<.....Y...).#..... RETURN (.@.....q.y...B.<.y.q.....n... .....i.d.M.n.
    01A80:  .~...~.....e. .M.|...P...M.?...0...n.9.`.......n.].`.K.....M.,.|.....|.....m.....x.L.....y.......n.....M.e.....\.M.....M.n.....
    01B00: -.".........n...y.@.m..."...e...%.". ...n.....0..."...'.Y.l...}.H.....}.8.(.|.t.....}.(.M.~.t.....U.\.t.....U.|...}.H...O.#.t.3.
    01B80: |...}.H..... ...~...L.}.....$.t.....~.m.p.3.9.....p.0.......'.M.*.t...q...K.....[.t.......@.t...r.....p.......:.n.Y.......p.7.}.
    01C00: t...~.....n.Y...p.|.....y.Y...t...:.}...|.'.d.....?.........##,###,###,##~#.M...###\#.M....##.M...*|#.M.......M...k...k.....M...
    01C80: ..m...a.z.......r.....Y.0.9...A.F...n.....0...H.M.n.....7.....e...M.t...M.|.y.t...}.v.....}.e.M.n...y.....M.y.r.......M.........
    01D00: M...\. ...n.Y.p...........-..... .......n.......$.....t...#.....p...%.....h...&.....p.........n...}...|.y.....T.. ....n...r.....
    01D80: r.......h.....t...b.....h...y.d.....p...T.. ..n.4.....n.x...`...d.......x...|...y...............:...r.......n...................
    01E00: ......................\...d.....n.K........... .............}.M.y.M.n.Y.....r...^.................M.n.Y.....r...n."...y.'.......
    01E80: ........M.......x...........k.$...#.%...#.....`...#.......n...y.......M.n.....=...n...y.....n.......?.....?.......X.....#.t.$.t.
    01F00: ........-.O.C.#.....m...#.....,...y.m...0...n.9.`.......M.:...n.....&...&.....U.n.K.n.......r.....e...n.......;.n. .h.....r.....
    01F80: . ..r.....e..%......r.....e.....r.........r.....e.:'.!..r......%.!..r.....e.......r.....e.l.....r.....e.........r.....e.p.....r.
    02000: ....e.............r.....e.P!....r.....e.......r.....". ...r.....e... ...r.....e.....r.....#.....". ...".#...........".. ......n.
    02080: ".....r...r. .......e.#...M.....#.,....#P...$.M.....\...M.e...\#........\#....M.......?.....M.x.. ....... ....... ..m...V.. h..
    02100: 2...k.01%34567o9#BCDEF$ ....m...V..!............N.<.....M...TAQOZ.x.?..!....".!.......?.~'n..........!.&.!....\...x..  Cold star
    02180: t.?.Z...k.L.....L.. ....p.h.2.......?.Z.....P!\...h...h...h... .........p..%..............m...V... ... ................!X.......
    02200: . ..!.8...............;...............:.$.. m.6.n.4.y...........@.........V.U"..@...........n.......m...V.u".. --- .n...........
    02280: ..........M...X.V.....T....!$.D.......y.....U"!.............!...$...)"....m...V.U".. .....9.....  error in .\........%..  at .$.
    02300: .. ..#n......."..#e....... *error* .......".. p..#.!y.....   ERROR - ...)#e.M... ??? ..!........m..............#..........V.n.O.
    02380: .#..n.....n...K.....M.....M."...n.....K.".t.M.\#m.....M... .}. .M..%..h...h.X..............#......H..#......h...`... lines and .
    02400: X.......:... bytes compiled,  with .....`... errors in .........<.......:...ms .............K..#n.P..............#n.P.).....M. .
    02480: ..K..$ .K....#n.{.....e....$}.......n.....Y. ...m...n.....................n.....M.y.k... not found .M.....M.n..$y...M.n...y.....
    02500: M..%7..%:.................M...  Parallax P2  *TAQOZ* Extensible Firmware  V.?.......#~#.# '.?......%'.". ... .?.......6|-4|.....
    02580: ........=&..\.\.n.&.....Z.`.......t.........n...........................n........% .(....%e..... .a.P......% ...O"...#..?..%M.?.
    02600: .%M..&.%....M..%-.?..%...&?..%..n..%...%...&U$..?..%..M............&y..&....A&..A&..A&L.....L......&..h&=.<;:=....M.?.j&....i&..
    02680: h&......M.K.h&...........&..h&.&.&.. ..&...... .b&....~&....M.R..&...&..b&.&..b&.......&.........&......M..&n.....K......&?.6'..
    02700: ....V&....}.y.....r..&~.........Y...............h&..M.TAQO\&j'?.6'....K.V&......}..'...&..M..'.....&.'"'.&.'"'"'.....&n.\'d'j'K.
    
    CODE EXTENSIONS
    02780: . ..K.. ..~'....~'$.n...........M.=.....n.~'...#.'....r....'..n.......r..... .r......'..=..DNE....e...y...=.....~'..?..'.....#..
    02800: 190322-1900  ...Y#L.X...U$L.....L.....L.....L.....L.....L.....L.....L.....L.=...L.;...L.:...L.....L.@B..n.h.?...... ..M.:.y.i(t.
    02880: t.t.....7.}...}...}.....:.....M.L.....L. ...L.....L.....L.....Q.Q.Q.Q.Q.Q.Q.Q.M.?..(....Q.........M.:.?..(........Q.....n.......
    02900: n.............e.?..(.(..M...r.......M.n.............<...y.....n.&)..e.M.B.M.....H)....H)......?...k)?.....?.H)..M.n.....y...M.>.
    02980: >.....y...M.K.. ..K.. .....)......<.....`.K....)...)......v.|/-\......"..."..)....n.......'.e.M......... ...M.,.M...y.n.........
    
    06B00: .......*m....*...gH..... ; .OgVg.h..>g......>..h.g7k.h.. THEN..hVgph.kM...n..gn...@.......pri ..n...........pre ..n.............
    06B80: pub ...*.hVg.*m...HkM.n.8g..2g...g...... g..Vg?. .p..... *CODE* ..e.M.Vg....2g...k.gt..k>g..Vg.g\g.i.g..\#..Vg.h....\g....Vg....
    06C00: .g.. g....h...........>.Vg8g........ bytes .M.$......g(.m...n.,g..(....k..[l.. not found .M.$......g8.9l..@.....M.M.M...........
    
    28K FREE
    
    DICTIONARY
    0D900: .............................................DECOMP\l.SEENFA8l.SEE.l.SEECFA.kE?NAME.kE.NAMEHkF?THENS.kD.SEE.iF?LOOPS.iD?DOS.iE?G
    0D980: OTO.hE.LCON.hE?CRLF.hDfad?.hCif?.hC-ifphC+ifHhD.LIT.hD.W10.hD-ind.hD+ind.gFINDENT.gD.STR.gC.W:.gD.ASC.gB.D.gA$.gE'EMIT.gD(DS).gD
    0DA00: (LC).gD(.").gD(AS).gF(EXIT).gC(").gC(S)zgC(R)tgD(IF)ngC(L)hgC(W)bgDSEE@\gD@SEEVgE@SEE+PgF@SEE++NgEeflg?FgEdflg?>gDwsrc8gDwptr2gD
    
    0FD80: TERM.!.AUTO.!.SPIRD...SPIRL...SPIWB...SPICE...SPIWC...SPIWW...SPIWM...SPIWL...SPIPINS...SPIRX...SPITXE...SPITX...CLKS...TXDATc..
    0FE00: CLKIN...CLKOUT...CLOCK...WAIT...CLKDIVr..RCSLOW~..HUBSET...WPh..WEd..CLKHZ<..ERROR.#.SFPINSt&.SF?~&.SFWEb&.SFCMDh&.SFWDz&.SFSID.
    0FE80: &.SFJID.&.SFER4.&.SFER32.&.SFER64.&.SFER.&.SFERP.&.SFWRP.&.SFBU.&.SFRE:'.SFRDSP'.SFWRS.'.SFC@\'.SFW@d'.SF@j'.SFv'..SF.&.END.#...
    
    CONFIG BACKUP
    0FF00: X...P2D2F   ....@x}.@Ys.................X................ ...!................................d.......c.......f...G...c.Y|d.....
    0FF80: ..... .......".......$.......&.......(.......*.......,............0............................................................. ok
    TAQOZ#
    
  • hmm - maybe I just should start with this one instead of a empty one. Can you point me to a spin2 or image of it, perfect would be 160Mhz and 230_400 baud.

    Since we obviously need 196K +VGA then include all of the goodies, like SPLIFF(?) and SCOPE mode, BREAKOUT and whatever. Takes the same space. And if somebody really gets into TAQOZ he can build a smaller more tailored image.

    I do not really like your MBX pingpong since you reduce 0-255 ASCI to 0-$7F USASCII. The blocking version can transfer all characters, but I still need to think about it for a while.

    Even if you later on not include TAQOZ in your application, while developing you need one COG, 196K HUB and can look your program over the shoulder...

    Gosh this P2 is bringing fun in my life!

    Mike
  • I haven't settled on any particular mailbox scheme yet, just toying with pros and cons. 7-bit ASCII just allows be to use a single byte for the mailbox but I could just as easily use a word. The idea I was looking at is that it is non-blocking when nothing is required of it but handshakes as required when you want a response.
  • Cluso99Cluso99 Posts: 18,069
    The ROM SD loader looks first for _BOOT_P2.BIX and if not found, it looks for _BOOT_P2.BIY
    Havent read enough to know if this will help you
  • I haven't settled on any particular mailbox scheme yet, just toying with pros and cons. 7-bit ASCII just allows be to use a single byte for the mailbox but I could just as easily use a word. The idea I was looking at is that it is non-blocking when nothing is required of it but handshakes as required when you want a response.

    Yes I think using a word makes sense, in a case we are doing this already with $100 for 0.

    Maybe AND $FF not $7F and $200 as signal instead of $80, yes its a word not a byte, but well..

    Mike
  • MJBMJB Posts: 1,235
    edited 2019-07-23 13:56
    msrobots wrote: »
    I haven't settled on any particular mailbox scheme yet, just toying with pros and cons. 7-bit ASCII just allows be to use a single byte for the mailbox but I could just as easily use a word. The idea I was looking at is that it is non-blocking when nothing is required of it but handshakes as required when you want a response.

    Yes I think using a word makes sense, in a case we are doing this already with $100 for 0.

    Maybe AND $FF not $7F and $200 as signal instead of $80, yes its a word not a byte, but well..

    Mike

    instead of the $100 for $00 I like the $100 bit as signal and $xx is data and $0000 is empty

    so to be clear: $01xx = data $0000 = empty

    so wait for char
    pub MBXKEY ( -- chr ) BEGIN mbxadr W@ UNTIL mbxadr C@ mbxadr W~ ;

    the higher bits could even be used for some control information
  • MJBMJB Posts: 1,235
    msrobots wrote: »
    .....
    You mentioned you can pack a lot into 64K but I am still confused about HUB ram usage of TAQOZ.
    What I understand is that the dictionary is currently at $0F380 and at $10000 starts the SDBUFS buffer so there are 3.200 bytes right? wrong? your memory layout is quite confusing.
    the dictionary grows down and the code-heap grows up. Here 27k free
    so as long as you do not add a lot of code you could put SD buffers in between.
    Of course if you go to 128k from 64k for Taqos you have more room.
    But basically I think this should be a quite full blown TAQOZ and since I 'link' a binary it is easy exchangeable and the linker new compiled.

    Now talk about needed HUB memory. Your datram starts at $12000 and you put bmporg at $30000.
    sure, the VGA bitmap takes some space on its own.

    a big buffer might be used to file in or paste in big chunks of additional code.
    but you would not need to do that.

    So I assume now that without VGA I am save above bmporg at $3000. Where am I save when USING VGA and KBD? Just need some numbers here.

    But if we give TAQOZ 128K+VGA(if needed) then there should be a lot of punch in it to wish to include it. And I think there is enough punch already there.

    So what files I need to load/paste into my newborn es.binary to get a DECENT TAQOZ able to load 'extensions' from disk if needed. Since it is included in the main program it can not easy backup when running later on, and will start newborn at each program start, debatable.

    Mike
    or you could run Taqos on boot from SD and use Taqos to load your C/... code fom SD into memory and start it there.
    This way you could save extended Taqos images via BACKUP
    without needing a recompile of your application.

    But to use the extended Taqos you would have to extend and recompile anyhow ... ;-)
  • msrobotsmsrobots Posts: 3,709
    edited 2019-07-24 04:17
    @"Peter Jakacki" did ask about the usability of windows tools non Forth User on Windows have and are used to, so here a short description:

    -Spin2Gui/FastSpin did compile es.spin2 after our small changes and is doing fine.
    -the Terminal used by Spin2Gui uses the terminal of P2load and that CAN insert a file like TAQOZ.FTH, it just takes about a second per character, unusable for that task, else OK.
    -PropellerTool Serial Terminal can not insert more then one line at all.

    I opted for TerraTerm to work with and with 230_400 I did not need to tweak anything like line delay, char_delay or whatever. But resets my just loaded RAM content when enabling the connection. Once figured out it is all quite simple.

    So I could create a binary with FastSpin out of Peters DropBox source, put it as _boot_p2.bix on SD boot it use TerraTerm to load TAQOZ.FTH and DECOMP.FTH then did run my own definitions as of
    $40.000 := incon
    $40.002 := outcon
    : GETCON ( -- char ) incon W@ DUP IF incon W~ THEN >B ;
    : SENDCON ( char -- ) BEGIN outcon W@ 0= UNTIL $100 OR outcon W! ;
    : MBXCON ' GETCON ukey W! ' SENDCON uemit W! ;
    : EMBED flags C~ ' NOP uprompt W! ' NOP uaccept W! $C9 REG W++ MBXCON ' MBXCON 1+ ' CON W! 63 PIN MUTE 62 PIN MUTE $40004 1 COGINIT ;
    AUTO EMBED BACKUP BIX

    moving the start point of mailbox and my program to $40000 to be out of the way for testing.

    and … it works!

    It is all about understanding the needed process, now I need to get a hand on memory requirements of different options. HUB from 0-$40000 is quite a lot, I need more time to read the source w/o VGA I can for sure go to $#30000 and maybe we can go even lower I am not sure what
    datram = $12000 ' start of data memory - user variables '
    implies, that seems to be the last address in HUB used w/o VGA this plus something could give a hint - maybe $13000 minimum?

    Anyways, my GOAL is here to just take away all that pain and provide a simple object to include in your project like SimpleSerial. And basically it is working now.

    I am pretty sure that I will need to repeat this process with fiddling around with that small SD card to move files between PC and P2 but slowly I start to like TAQOZ.

    But I still have not figured out how long that VGAram will be when in use, Peters demos with graphic and text area are nice, I really would like to have a version for with or without VGA.

    what a journey so far, but slowly we are getting TAQOZ into the mix of @ersmith compiler collection, BASIC/SPIN/C/PASM and now TAQOZ (well sort of).

    Fun!

    attached a binary one can run with 230_400 in a terminal - in spin2guy just run binary

    or not, I maybe forgot to add a CR at DECOMPRESS and see does hang else it seems to work.

    next SD shuffle needed.
    ( Entering terminal mode.  Press Ctrl-] to exit. )
    
    -------------------------------------------------------------------------------
      Parallax P2  *TAQOZ* Extensible Firmware  V2.1 'CHIP' 160MHz 190711-0930
    
    switched to_clkmode 10C3F04 _clkfreq 160000000 - 160Mhz
    
    1 Test 1 - send 56 BLINK    - FLUSH RESPONSE
    2 Test 2 - send 56 PIN MUTE - FLUSH RESPONSE
    3 Test 3 - send 57 BLINK    - FLUSH RESPONSE
    4 Test 4 - send 57 PIN MUTE - FLUSH RESPONSE
    5 Test 5 - send 22 33 + .   - DISPLAY RESPONSE
    6 Test 6 - send commandline - DISPLAY RESPONSE
    
    

    this is SPIN code using TAQOZ as Object :smile:

    Mike
  • OK - the error was again sitting next to the screen on the chair.

    I need to rethink the mailbox. This blocking is confusing. One has to be careful to empty the TAQOZ result or it hangs.

    But it is working now and see does not hang anymore, so success!

    and I can attach the above described binary...

    now giving TAQOZ $0-$3FFFF - 256K so it loads slow, just wait.

    Mike
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2019-07-24 06:36
    I want to have a default non-blocking scheme for the cog so that if it is running anything that emits data, then it won't hang. The reason I tried using the 8-bit for a flag is because we don't normally try to send 8-bit characters in the $80..$FF range anyway. However, assuming we do use a word then I would like a $0000 in the outbox to indicate to TAQOZ not to bother and just discard. A $200 says ready to accept a character and TAQOZ can simply append $100 to the character it sends so that it knows that it is still sitting there unless it sees $200 or $0000. YOu can also see from this that you could also send characters to TAQOZ in the same mailbox too!
  • msrobotsmsrobots Posts: 3,709
    edited 2019-07-24 07:02
    OK, the mailbox

    @"Peter Jakacki"'s 1ST METHOD - MBX.FTH
    TAQOZ MAILBOXES
    
    INPUT IS SIMPLE, ANY NON-ZERO CHARACTER IS READ AS INPUT AND CLEARED. ONLY WRITE INPUT WHEN IT IS ZERO.
    
    OUTPUT NEEDS TO BE NON-BLOCKING [b]IF IT IS NOT BEING ACCESSED[/b] BUT MUST HAVE A SIMPLE HANDSHAKE MECHANISM OTHERWISE.
    
    
    1ST METHOD
    
    SENDER DOES NOT WRITE TO MAILBOX IF IT IS ZERO BYTE
    IF MBX IS $80 THEN WRITE AND WAIT FOR MBX&$7F = 0
    
    
    $C8		:= mbxins
    mbxins 8 +	:= mbxouts
    
    pub MYO		mbxouts COGID + ;
    pub MYI		mbxins COGID + ;
    pub MBXOUT	MYO C@ IF MYO C! BEGIN MYO C@ $7F AND 0= UNTIL ELSE DROP THEN ;
    pub MBXINP	MYI C@ DUP IF 0 MYI C! THEN ;
    
    pub MBX		' MBXINP ukey W! ' MBXOUT uemit W! ;
    
    here the Mail one, blocking
    word inbox --- simple inbox, any non-zero is received as a character (use $100 etc to send a null)
    --- simple receive routine reads the inbox and only clears it when it is non-zero (avoids r/w clash)
    : GETMAIL ( -- char )   inbox W@ DUP IF inbox W~ THEN >B ;
    
    word outbox
    --- simple blocking send routine will wait until the outbox is externally cleared before sending
    : SENDMAIL ( char -- )  BEGIN outbox W@ 0= UNTIL $100 OR outbox W! ;
    
    --- redirect all input and output to a mailbox
    : MAIL    ' GETMAIL ukey W! ' SENDMAIL uemit W! ;
    
    here 0 is being used for 'ready to receive' and $100 is used to send 0 which works fine with 0-255 if anded with $FF. Now be frugal:
    here is the code box I would like to have
    
    sadly empty - I am still learning
    
    No real clue how Peter does above with MBX and the 1ST METHOD, I do understand what it is supposed to do.
    
    
    IF MBX IS $80 THEN WRITE AND WAIT FOR MBX&$7F = 0
    IF MBX IS $101 THEN JUST DROP YOUR CHAR ELSE WAIT FOR MBX = 0 (or $101...) AND WRITE YOUR CHAR BLOCKING as before

    receiver would set to $101 if not blocking/ not interested, but to 0 if interested.

    sender drops byte if $101 else sends blocking.

    could work, I will try to figure out what I need for a IF and a DROP , I MAY understand the rest of BEGIN outbox W@ 0= UNTIL $100 OR outbox W! ;

    basically I need
    wait for $0 or $101
    if $101 - DROP char - done
    else send char (write Mailbox) - done

    I SHOULD be able to figure this out. Somehow UNTIL with two exits, gosh somehow on the stack and … well I am trying...

    Mike
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2019-07-24 07:13
    BTW, my mailbox routine was totally incomplete, it was just a quick look at what may be required to support multiple cogs in a flexible and easy fashion. I may take a look at a 2-way mailbox scheme too. That way you only need a single location per cog.

    But everything including SD buffers etc can fit into the first 64k excepting VGA of course. I will redo the SD routines so that they map into there with perhaps just 2k for 4 sector buffers. VGA 8bpp BMP requires 640x480 bytes + 256 longs for the palette plus I like to read the BMP header in as well so that is over 300k.


    EDIT: this is what I mean about output in that it will only sit and wait for a $200 if the mbx is non-zero, otherwise it discards so it is non-blocking.
    : MBXOUT ( ch -- ) mbx W@ IF BEGIN mbx W@ $200 = UNTIL $100 OR mbx W! ELSE DROP THEN ;
  • interesting, we look at it from different sides.

    you look at it from the sender side and want to wait for transmission received, acknowledged with $200 and set the Mailbox then to 0 to stay nonblocked.

    you don't send when mailbox is 0 but wait for $200 and then send out char? goes right over my head as often.

    I was looking from the receiver side, saying 0 I am interested $200 (or whatever) I am not, no need to talk to me.

    At least I hope I understud how if works in TAQOZ, essential for me...

    please correct me if I miss read your code. I need to get this right.

    Mike
  • MJBMJB Posts: 1,235
    ... just a quick look at what may be required to support multiple cogs in a flexible and easy fashion. ...
    a full 8 cog everybody to everybody scheme will be similar to a RS485 network
    where you can send to a dedicated inbox for every COG, but you need to know from whom the message was.
    So the upper byte of the MBX word can provide space for the address of the sender as well.
    Of course this will make handling much more complicated.

    And @msrobots will not need it.

  • OK I see a test for 0 is shorter, so 0 not interested, $200 interested and it is exactly the same. I am just frugal sometimes and used $101, the next available.

    I think I can use that, will try still using my own mailbox at currently $40000...

    Currently there is
    SDBUFS = $10000 ' allocate 4k for buffers
    ' : $11000
    rxbuffers = $11000 ' SERIAL RX buffer
    rxsize = $1000
    datram = $12000 ' start of data memory - user variables '

    what is your expectation of needed datram when running your Scope? or other stuff?

    I just want to start with realistic values. Two start addresses, one without VGA and one with VGA, hopefully VGA below $30000. I see where I would need to change the source to reduce the HUB footprint, but I have no feeling for what is realisticly needed.

    This TAQOZ gets me slowly,

    Mike
  • MJB wrote: »
    ... just a quick look at what may be required to support multiple cogs in a flexible and easy fashion. ...
    a full 8 cog everybody to everybody scheme will be similar to a RS485 network
    where you can send to a dedicated inbox for every COG, but you need to know from whom the message was.
    So the upper byte of the MBX word can provide space for the address of the sender as well.
    Of course this will make handling much more complicated.

    And @msrobots will not need it.

    in the opposite!

    I am out for cooperative working together and when my Spin Program is able to start VGA in another COG from within TAQOZ or other nifty thing that can now be shared between FastSpin users, working in whatever language, then this might be needed. My driver is currently able to support multiple TAQOZ mailboxes transparently.

    This is getting better and better.

    Mike
  • hmm -

    fresh es.spin2 out of drop box
    loaded TAQOZ.FTH and DECOMP.FTH
    added

    $40.000 := incon
    $40.002 := outcon
    : GETCON ( -- char ) incon W@ DUP IF incon W~ THEN >B ;
    : SENDCON ( char -- ) BEGIN outcon W@ $101 = outcon W@ 0 = OR UNTIL outcon W@ 0 = IF $100 OR outcon W! ELSE DROP THEN ;
    : MBXCON ' GETCON ukey W! ' SENDCON uemit W! ;
    : EMBED flags C~ ' NOP uprompt W! ' NOP uaccept W! $C9 REG W++ MBXCON ' MBXCON 1+ ' CON W! 63 PIN MUTE 62 PIN MUTE $40004 1 COGINIT ;
    AUTO EMBED BACKUP BIX

    but

    $C9 REG W++

    does not work anymore, I still get OK <cr> in the response. Some magic missing?

    Mike
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2019-07-24 12:22
    "Somebody" gave you a bum steer, that should be $CE REG = linenum :)
    ''''''''''''''''''''''' fixed ''''''''''''''''''''''''''''
    004c4 0b2          oldnames        res 4           ' backup of names used at start of TAQOZ load
    004c4 0b6          names           res 4           ' start of dictionary (builds down)
    004c4 0ba          fromhere        res 4           ' Used by TAQOZ word to backup current here to determine code size at end of load
    004c4 0be          here            res 4           ' pointer to compilation area (overwrites VM image)
    004c4 0c2          codes           res 4           ' current code compilation pointer (updates "here" or is reset by it)
    004c4 0c6          autovec         res 4           ' user autostart address if non-zero - called from within terminal
                       ''
    004c4 0ca          cold            res 2           ' pattern to detect if this is a cold or warm start ($A55A )
    004c4 0cc          errors          res 2
    004c4 0ce          linenum         res 2
    004c4 0d0          atrs		res 1
    004c4 0d1          prevch          res 1           ' used to detect LF only sequences vs CRLF to perform auto CR
                       
    004c4 0d2          spincnt         res 2           ' Used by spinner to rotate busy symbol
    004c4 0d4                          res 2           ' word count
                       
    004c4 0d6          endreg          res 0
    
  • Peter JakackiPeter Jakacki Posts: 10,193
    edited 2019-07-24 14:08
    @msrobots - now I have also created a new memory map that puts everythzing in the first 64K. The VGA BMP area could be moved to $3.4800 or down to $1.0000 but it requires just over 300k if you want full 640x480 VGA 8-bit color.

    The other thing I could do is reduce VGA to a 16:9 aspect timing so that you would still have 640 pixels but only 360 lines. This keeps 16:9 monitors filled using pixelsx3 and linesx3 and only takes 231552 bytes which means if it started at $1.0000 it would end at $4.4230 which leaves about 245k. That sounds like a good compromise.
    Note. The video player needs a further 80kB for a buffer but I've simply put that at the end of memory for the moment and it is easy enough to modify the constant at runtime to relocate it.

    EDITS:
    With TAQOZ.FTH loaded, but not AV.FTH there is still 36k available in the first 64k for TAQOZ.
    Loading DECOMP.FTH and AV.FTH which includes all the VGA text, graphics, BMP viewer,BMV video player, and WAV player etc still leaves 28k.
    Loading BREAKOUT game and MANDELBROT leaves 25.5k.
    If I reclaim all the private headers it saves another 3k which means the kitchen sink leaves 28.5k of the first 64k. This is why I feel I have plenty of code space for TAQOZ because it becomes progressively harder to use up code memory, if you want to look at it that way, but you can double the functionality in Forth with just a few k extra very easily.
    I've got my EASYNET FTP and WEB server to reload but that only takes a few k as well.

    BACKUP now only saves 60kB since SD and receive buffers etc are from $F000.
  • Peter, thank you, this helps a lot.

    One thing that bothers me is that you backup into the MBR. I now have to remove the SD all the time since I cant load anything into RAM since TAQOZ boots from MBR.

    How can I delete TAQOZ from the MBR? The BIX file I can simply delete the MBR stays.

    Mike
  • Cluso99Cluso99 Posts: 18,069
    You have to write to the MBR. There is a “signature” at offset near the end of the sector. There is also a secondary location for FAT32 configured SD cards. You will need to look at the ROM source or the thread that discusses booting.
    This is why I prefer the files in FAT32. The MBRs are really for non FAT32 cards (eg exFAT).
    BTW the boot files must be named in uppercase.

    Unfortunately I ran out of time to add exFAT file location. I was almost there :(
  • It is easy enough to disable the MBR boot signature but I have put a DISABLE parameter in the BACKUP command so you can type BACKUP DISABLE and that will disable the MBR boot and any BIX and BIY by renaming those to NIX and NIY. The BACKUP word also converts your parameters to uppercase and there are also shortcuts such as BACKUP BIX etc.
  • When I could DISABLE BACKUPS and still write a BACKUP to a named file I would be OK.

    But currently I can use my SD just to create my TAQOZ kernel, after that it has to be out of the P2 or I can't load anything from FastSpin/P2load.

    And it is a pain to fiddle with the small sd card.

    Mike
Sign In or Register to comment.