Sashimi v1.4 Written by Olaf `Olsen' Barthel Public Domain Sashimi intercepts raw serial debugging output on your own machine; command line options are: Startup: [ON] [BUFK=n (n must be a power of 2)] [BUFFERSIZE=n] [NOPROMPT] [QUIET] [ASKEXIT] [ASKSAVE] [TIMERON] [CONSOLE] [WINDOW=name] Runtime: [OFF] [SAVE] [SAVEAS=name] [EMPTY] Sashimi is a tool to intercept the raw serial output of Enforcer, Mungwall, and all tool and application debugging output that uses kprintf(). This makes it possible to use serial debugging on a single Amiga, without interfering with attached serial hardware such as modems and serial printers. This is a drop-in replacement for the "Sushi" tool, as written by Carolyn Scheppner. Well, not exactly. Sashimi has a few different/new features and does not support the complete feature set of the "Sushi" tool. Sashimi only runs from Shell and requires Kickstart 2.04 or higher. Sashimi cannot patch the older Enforcer at run time which means that you have to use Enforcer V37 or an equivalent like CyberGuard. Quick usage =========== Here's what's in my "S:User-Startup" file: Run >NIL: MungWall NAMETAG Run >NIL: Enforcer RAWIO Run >NIL: Sashimi CONSOLE BUFK=64 NOPROMPT ASKEXIT ASKSAVE All standard serial debugging functions are intercepted. Currently, the patch to the serial debugging input function just returns a `y'. Standard serial debugging output and Enforcer output go into Sashimi's ring buffer (the size is user-definable, with a default size of 32K), where it is noticed by the Sashimi process and written to the output window. The Sashimi process is signalled whenever a carriage return or linefeed comes through kprintf(). Sashimi has several startup options, and several runtime options: Startup: [ON] [BUFK=n (n must be a power of 2)] [BUFFERSIZE=n] [NOPROMPT] [QUIET] [ASKEXIT] [ASKSAVE] [TIMERON] [CONSOLE] [WINDOW=name] Runtime: [OFF] [SAVE] [SAVEAS=name] [EMPTY] Startup options =============== ON Default (not required) BUFK=n Changes the ring buffer size from default 32K to specified power-of-2 K from 4K to whatever you like, i.e. BUFK=8 will allocate a buffer of 8192 bytes. BUFFERSIZE=n Changes the ring buffer size from default 32K to specified buffer size, i.e. BUFFERSIZE=8000 will allocate a buffer of 8000 bytes. NOPROMPT Turns off the "Sashimi installed" prompt. This is useful if the Sashimi output is redirected to an AUTO CON window such as in conjunction with the CONSOLE option. QUIET Causes Sashimi to just buffer all debugging output. This effectively silences serial debugging output. ASKSAVE Cause Sashimi to ask you if you want to save the buffer when you exit Sashimi. If there's nothing in the buffer, it won't ask. ASKEXIT Cause Sashimi to ask you if you *really* want to exit if a [Ctrl]+C signal is received. This is good for people like me who might accidentally [Ctrl]+C in a Sashimi window when they meant to do it somewhere else. This option should only be used if Sashimi has an input stream - i.e. if Sashimi is not run/redirected, or if Sashimi has in/out redirection in a CONSOLE window. TIMERON Cause Sashimi to wake up every 1/10 second to check for output. Without this option, Sashimi will just wake up every time a carriage return or linefeed is output. CONSOLE This will make Sashimi open a console output window for itself which all input and output will go into. Unless you provide a console window specifier (see WINDOW option), Sashimi will use: CON:0/20/640/100/Sashimi [Ctrl]+E=Empty [Ctrl]+F=File [Ctrl]+D=Reset console/AUTO/CLOSE/WAIT/INACTIVE WINDOW=name This option works in conjunction with the CONSOLE option and allows you to override the default console window specifier. Runtime options =============== OFF Signals the active running copy of Sashimi to exit. EMPTY Finds the active running copy of Sashimi and empties its buffer. SAVE Finds the active running copy of Sashimi and saves its buffer as "T:sashimi.out". SAVEAS=name Finds the active running copy of Sashimi and saves its buffer as the specified file name. Example startup usage ===================== Sashimi ASKSAVE (in its own shell window) Run >NIL: Sashimi >"CON:0/20/640/120/Sashimi/AUTO/CLOSE/WAIT/INACTIVE" ON NOPROMPT Run Sashimi >ram:hits (all output redirected to a file) Keyboard and Break signals ========================== [Ctrl]+C: To quit Sashimi, [Ctrl]+C it (if it has its own window), send it a [Ctrl]+C signal with the Break command, or run Sashimi a second time with the OFF keyword. [Ctrl]+D: This sends a control sequence to the output console to reset it. Very handy in case garbage data has changed the character set or the text rendering colours. [Ctrl]+E: Tells Sashimi to empty (clear) its buffer. [Ctrl]+F: Tells Sashimi to save its own buffer to the file "T:sashimi.out" Other runtime usage =================== Sashimi OFF ; tell active running Sashimi to try to exit Sashimi SAVE ; save buffer of active Sashimi Sashimi SAVEAS ram:myhits EMPTY ; save buffer as ram:myhits and clear buffer Usually, I just hit [Ctrl]+F in the Sashimi window, and it saves its buffer as "T:sashimi.out". Programmer interface ==================== Sorry, no programmer interface. "Sushi" had one, but I did not see much sense in replicating this functionality. Why "Sashimi"? ============== I got bitten by bugs in "Sushi", and not just once. Whenever the Sushi ring buffer would wrap around, there was a good chance part of the buffer would still be filled with random data when getting saved to disk. If a large amount of data would be sent through the kprintf() interface, Sushi would occasionally "hickup" and regurgitate stale data from its buffer. I took this as indications that the Sushi buffer management code was none too robust. Another thing that struck me as odd was the fact that sometimes Sushi would stop reporting incoming kprintf() output and effectively behave as if it had been stopped with [Ctrl]+C. Sushi also had tendency to block screen output when printing its buffer; it would output the buffer in a single Write() operation, causing the console window to lock the display. And while that operation was in progress, you could not suspend window output or stop it. Sashimi tries to do better in these situations. The algorithms for maintaining the ring buffer (or FIFO) are different. And just in case there is a bug in the code, I have provided the complete tool source code. Author ====== Sashimi was written by Olaf `Olsen' Barthel, with "Sushi" by Carolyn Scheppner as a reference. Sushi was in turn influenced by the "Reporter" and "Detective" tools written by Steve Tibbett and Christian E. Hopps. My postal address: Olaf Barthel Brabeckstrasse 35 D-30559 Hannover Federal Republic of Germany My e-mail address: olsen@sourcery.han.de History ======= Sashimi 1.4 (11.9.98) - The Sashimi RawPutChar() patch now saves and restores the contents of A0 and A1. This is necessary since the KPutStr() code relies upon A0 to remain unchanged after each call to RawPutChar() [Stuart Kyzer Caie]. Sashimi 1.3 (07.04.98) - Updated the console window title text Sashimi 1.2 (05.04.98) - Added the [Ctrl]+D console reset command.