This might be "old news", but is does show one useful application:
I added an SD card and a serial port level shifter to a Xorro card. From the XMOS community I borrowed code fort a serial port and a filesystem for the SD card.
I set it up to capture and save all incoming text to the SD card, filename was generated by date and time. Then I hooked it up to the debug output of the X1000. Once it's "running", all debug output gets saved automatically.
You could browse and import the saved files to the Amiga or remove the card and read it from anything that can read SD cards.
Because it's independent of AmigaOS, it's capable of saving it all off even when the OS is having troubles.
Now, to make this more interesting: Both the X1000 serial port AND the serial on Xena are capable of WAY higher baud rates. The limiting part are the voltage level shifters. There's a small pin header on the X5000 that will let you pick up the serial output before that shifter, so it SHOULD be possible to run the serial speeds up as fast as the SD write routines can handle. I assume the X5000 serial port can also run faster..
Unfortunately I loaned out the Xorro board and it was never returned, so you'll have to take my word for it.
Granted it's not "rocket science", but saving debug without a second machine, and the possibility to run the debug so fast that any slowdown would be minimal.. Well, it's at least useful to programmers and beta testers!
It should build out of the box and work on X1000. It's not too much code, and it just implements a simple circular stack so should be relatively self-explanatory. Might try and write something up on the blog explaining some more about it.
svn checkout https://svn.code.sf.net/p/xena-examples/code/ xena-examples
cd xena-examples/stack
make run
Oh, and yeah, this doesn’t require any extra hardware, it should just work on the plain X1000. It won’t work on X5000 even if you got it on to that chip since the localbus interface is way different.
I tried the latest XTools from your blog on my X5000/20.
This is the output. It does not seem to work fully and the tools can only be run once:
3. > Workbench:Utilities/XTools > XenaStatus
Warning: This set of XTools currently only tested on X1000
Setting up x5000
The support for X5000 is UNTESTED!
----------------------------------
If you'd like to continue, a few tests will be performed.
1. The first test is according to the X5000 Curys TRM.
It seemed to work for one test. But then not.
2. The second test is based on loose assumptions on how
AEons Tabor motherboard works.
The only reason you would want to run these tests is to
inform the developer on your progress.
You can abort this process now by pressing Ctrl-C and enter.
You will be asked to enter something to continue before each test.
YOU HAVE BEEN WARNED. NO RESPONSIBILITY IS TAKEN WHEN RUNNING THIS SOFTWARE!
About to setup mem space. Enter something to continue...
asd
Creating Xena memory space for INDEX reg: e0000000
Creating Xena memory space for DATACHANNEL reg: e0008000
About to do test 1. Enter something to continue...
asd
--- Performing Test 1 ---
Res in SIG1 is dead. This is good.
Res in SIG2 is dead. It is not 0xBEEF. That's wrong.
Res in REG_HWREV (2) is dead.
Writing D00F to scratch1
Writing BABE to scratch2
Read babe from scratch1 (should be D00F)
Read babe from scratch2 (should be BABE)
About to do test 2.
Enter something to continue...
asd
--- Performing Test 2 ---
Res in SIG1 is babe. It should be 0xDEAD.
Res in SIG2 is bebe. It is not 0xBEEF. That's wrong. You should not continue.
Res in REG_HWREV (2) is beef.
Writing F0BB to scratch1
Writing D00D to scratch2
Read f0d0 from scratch1 (should be F0BB)
Read d00d from scratch2 (should be D0DE)
If you got good values back from test 1, things seem to work.
If you got good values back from test 2, things in the code have to change!
If you didn't get good values, stuff will NOT work.
Press Ctrl-C to abort...
*** BREAK
3. > Workbench:Utilities/XTools > XenaStatus
Warning: This set of XTools currently only tested on X1000
Cannot allocate XTAGPORT resource: already used by XTAG Command line tools.
Seems I don't release the XTAG resource when doing Ctrl-C in that test. Regarding the reads and writes, I've seen similar result for another X5000 user, so it's good to see that it's the same for you. I'm in contact with some other developers so I hope to get something working for X5000 soonish.
I've created a new test-version of XTools version for X5000. It now tests a few calls with differing delays. The longest delay is 10 ticks, but it also tests with 2 and 5. If anyone could you must read the X5000 section in XTools.txt in the archive to know how to test it. Archive is here: https://jaokim.github.io/files/XTools-1.7d.lha Very beta. I'm not responsible if anything breaks your machine.
Warning: This set of XTools currently only tested on X1000
Setting up x5000
The support for X5000 is UNTESTED!
----------------------------------
If you'd like to continue, a few tests will be performed.
They will be performed with a varying delay
betweeen the read and writes.
The only reason you would want to run these tests is to
inform the developer on your progress.
You can abort this process by entering 'q' at any testpoint.
You will be asked to enter something to continue before each test.
YOU HAVE BEEN WARNED. NO RESPONSIBILITY IS TAKEN WHEN RUNNING THIS SOFTWARE!
Creating Xena memory space for INDEX reg: e0000000
Creating Xena memory space for DATACHANNEL reg: e0008000
About to do some tests.
Enter 'q' to quit, anything else to continue...
a
-----------------------------------------------------
Performing test with delay 2, with read/write 0x8000 Delay(1)
with read/write 0x8000 Delay(1). Res in SIG1 is: 0xdead. Should be 0xdead
with read/write 0x8000 Delay(1). Res in SIG2 is: 0xdead. Should be 0xbeef.
with read/write 0x8000 Delay(1). Res in REG_HWREV: 0xdead.
with read/write 0x8000 Delay(1). Read scratch1: 0xf0cc (should be 0xf0cc)
with read/write 0x8000 Delay(1). Read scratch2: 0xd1d0 (should be 0xd1d0)
with read/write 0x8000 Delay(1). Again scratch1: 0xa12f (should be 0xabcd)
with read/write 0x8000 Delay(1). Again scratch2: 0xa12f (should be 0xa12f)
with read/write 0x8000 Delay(1). REG:0x0000 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0000 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0001 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0002 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0003 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0004 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x000c is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x000d is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0010 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0020 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0021 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0022 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0023 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0024 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x002f is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0030 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0031 is 0xa12f 1010000100101111
-----------------------------------------------------
Performing test with delay 5, with read/write 0x8000 Delay(1)
with read/write 0x8000 Delay(1). Res in SIG1 is: 0xa12f. Should be 0xdead
with read/write 0x8000 Delay(1). Res in SIG2 is: 0xa12f. Should be 0xbeef.
with read/write 0x8000 Delay(1). Res in REG_HWREV: 0xa12f.
with read/write 0x8000 Delay(1). Read scratch1: 0xf0cc (should be 0xf0cc)
with read/write 0x8000 Delay(1). Read scratch2: 0xd1d0 (should be 0xd1d0)
with read/write 0x8000 Delay(1). Again scratch1: 0xa12f (should be 0xabcd)
with read/write 0x8000 Delay(1). Again scratch2: 0xa12f (should be 0xa12f)
with read/write 0x8000 Delay(1). REG:0x0000 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0000 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0001 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0002 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0003 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0004 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x000c is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x000d is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0010 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0020 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0021 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0022 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0023 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0024 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x002f is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0030 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0031 is 0xa12f 1010000100101111
-----------------------------------------------------
Performing test with delay 10, with read/write 0x8000 Delay(1)
with read/write 0x8000 Delay(1). Res in SIG1 is: 0xa12f. Should be 0xdead
with read/write 0x8000 Delay(1). Res in SIG2 is: 0xa12f. Should be 0xbeef.
with read/write 0x8000 Delay(1). Res in REG_HWREV: 0xa12f.
with read/write 0x8000 Delay(1). Read scratch1: 0xf0cc (should be 0xf0cc)
with read/write 0x8000 Delay(1). Read scratch2: 0xd1d0 (should be 0xd1d0)
with read/write 0x8000 Delay(1). Again scratch1: 0xa12f (should be 0xabcd)
with read/write 0x8000 Delay(1). Again scratch2: 0xa12f (should be 0xa12f)
with read/write 0x8000 Delay(1). REG:0x0000 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0000 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0001 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0002 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0003 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0004 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x000c is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x000d is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0010 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0020 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0021 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0022 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0023 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0024 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x002f is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0030 is 0xa12f 1010000100101111
with read/write 0x8000 Delay(1). REG:0x0031 is 0xa12f 1010000100101111
Tests done.
If you got good values back from test, things seem to work.
If there were good results for the IDOS->Delay(1) test, then you could continue to run
and stuff might work. If no good results were seen then you might as well abort now.
Enter 'q' to quit, anything else to continue...
They are indeed very strange. I don't know if there's some sort of weird caching issue... or have I done something totally weird. I'll see if i can come up with something new.
These are the results on my X5000/20 after a fresh boot:
3. > Workbench:Utilities/XTools > XenaStatus
Warning: This set of XTools currently only tested on X1000
Setting up x5000
The support for X5000 is UNTESTED!
----------------------------------
If you'd like to continue, a few tests will be performed.
They will be performed with a varying delay
betweeen the read and writes.
The only reason you would want to run these tests is to
inform the developer on your progress.
You can abort this process by entering 'q' at any testpoint.
You will be asked to enter something to continue before each test.
YOU HAVE BEEN WARNED. NO RESPONSIBILITY IS TAKEN WHEN RUNNING THIS SOFTWARE!
Creating Xena memory space for INDEX reg: e0000000
Creating Xena memory space for DATACHANNEL reg: e0008000
About to do some tests.
Enter 'q' to quit, anything else to continue... a
-----------------------------------------------------
Performing test with delay 5, with read/write 0x8000
with read/write 0x8000. Res in SIG1 is: 0xdead. Should be 0xdead
with read/write 0x8000. Res in SIG2 is: 0xdead. Should be 0xbeef.
with read/write 0x8000. Res in REG_HWREV: 0xdead.
with read/write 0x8000. Read scratch1: 0xdead (don't know what it should be)
with read/write 0x8000. Read scratch2: 0xdead (don't know what it should be)
with read/write 0x8000. REG:0x0000 is 0xdead 1101111010101101
with read/write 0x8000. REG:0x0000 is 0xdead 1101111010101101
with read/write 0x8000. REG:0x0001 is 0xdead 1101111010101101
with read/write 0x8000. REG:0x0002 is 0xdead 1101111010101101
with read/write 0x8000. REG:0x0003 is 0xdead 1101111010101101
with read/write 0x8000. REG:0x0004 is 0xdead 1101111010101101
with read/write 0x8000. REG:0x000c is 0xdead 1101111010101101
with read/write 0x8000. REG:0x000d is 0xdead 1101111010101101
with read/write 0x8000. REG:0x0010 is 0xdead 1101111010101101
with read/write 0x8000. REG:0x0020 is 0xdead 1101111010101101
with read/write 0x8000. REG:0x0021 is 0xdead 1101111010101101
with read/write 0x8000. REG:0x0022 is 0xdead 1101111010101101
with read/write 0x8000. REG:0x0023 is 0xdead 1101111010101101
with read/write 0x8000. REG:0x0024 is 0xdead 1101111010101101
with read/write 0x8000. REG:0x002f is 0xdead 1101111010101101
with read/write 0x8000. REG:0x0030 is 0xdead 1101111010101101
with read/write 0x8000. REG:0x0031 is 0xdead 1101111010101101
Tests done.
If you got good values back from test, things seem to work.
If there were good results for the delay 10 test, then you could continue to run
and stuff might work. If no good results were seen then you might as well abort now.
Enter 'q' to quit, anything else to continue... a
fatal: chain too long returned 128