Smart Response XE Re-purposed into Arduboy

Damn it’d be nice to know how to do that. :slight_smile:

Yes, and that only gets a few extra games and requires a lot of extra compiler/linker vodo.

The interrupt table gets overwritten on re-flashing anyway. The bootloader is usually at the end of flash and just makes sure that the reset vector still points to itself. @Mr.Blinky has already solved all of this anyway :wink:

Not sure what you are talking about here? Are we in agreement that storing 4 Arduboy games in the internal flash is not worth the complexity?

I agree. For an Arduboy clone, reflashing is better all around I’m pretty sure. But, I do see merit in using the external flash directly for a BASIC interpreter.

Oh sure, it’s silly. I just think technically it’s possible. Yes, I know the interrupt table gets reflashed… I just meant if the programs weren’t at the beginning of RAM you’d need to redirect all the interrupts to the proper table (wherever it was in flash).

128kb of external flash would be great for storing TONS of BASIC programs. Might even be large enough to look into the real FAT filesystem, not sure.

FYI - the CS_Flash pin on the SPI flash is connected to TX1 (serial 1 transmit line).

#define SLAVESELECT 21//ss (external EEprom)

From when I was messing with the eeprom.

I threw together a quick local example for testing. Compiled the FatLib library and then subclassed it to create a “disk” using just a local file on my drive. I formatted the “disk” with mkfs.vfat or whatever from Linux. It was trivial to do with only a few lines of code (locally I had to open/read/seek the file, on an Arduino you’d just be fetching/sending data to the flash). So using the 128kb of flash as “storage” for files and media and such things should be trivial to accomplish with existing OSS libraries. It formats very nicely as FAT12 with 256 sectors in the FAT.

This gets me a large portion of the way to what I wanted for my little education idea:

:white_check_mark: Filesystem (on 128kb external flash)
:white_check_mark: BASIC interpreter/runtime
:white_large_square: Nice visual editor
:white_large_square: Mini shell like experience

Would you want to use a BASIC interpreter like this one?

http://robhagemans.github.io/pcbasic/

That could make this device very similar to the old Tandy Model 100.

Got my SMART Response PE today. It’s got a TI CC2430-F64 MCU and what appears to be a UC1701 128x64 LCD. It has 6 test points exposed: RESET, PS2, PS1, AD, VCC, GND. I buzzed out the connections and they connect to the MCU as follows:
RESET = MCU Reset
PS2 = P2_2
PS1 = P2_1
AD = P0_0

The batteries are connected directly to the MCU since it has a built-in regulator. Looks like it will work down to 2.0 volts.

The LCD cable, numbered from top to bottom in the photo (1-8) is connected as follows:
1 = N/C ?
2 = GND
3 = VCC
4 = P0_5
5 = P0_4
6 = P0_3
7 = P0_2
8 = GND

I assume that pin 8 is actually chip select and it’s wired low (active) while 4-7 are CLOCK, DATA, RESET and D/C (not sure the order). Will update when I have more info.

2 Likes

New thread?

Looks pretty capable:

  • 8051 MCU core
  • 32 MHz?
  • 64 kB Flash
  • 8 kB RAM
  • DMA capability
  • 1x 16-bit, 2x 8-bit timers
  • 8 channel 12-bit ADC
  • 2x UARTs w/ SPI
  • 21 GPIOs
  • 2.4 GHz transceiver
  • battery monitor and temperature sensor

Probably a lot harder to get working with Arduino/Arduboy though.

@bitbank

What is the little 8-pin device U2 at the bottom?

Also, have you traced out what is connected to the 10-pin CON1 connector at the top?

Do you know what frequency the square crystal is? (assuming the cylindrical one is 32.657 kHz for RTC)

1 Like

I finally found time this weekend to finish my butchering (modification) of the XE to allow easy access. I added a 5x2 female header and power switch. Inside I used 30AWG silicone wires and hot glue. For the case modification, I used a box cutter. Came out pretty decent compared to my record on such projects.

Do you know a good source of pogo pins that can be soldered on the custom PCB side and will reach the PCB of the XE through its case? Since the hole spacing is standard 0.1", I can use tinned protoboard instead of a custom PCB.

Found some pogo pins on Amazon that might work. They’re 0.68mm x 16mm. The tough part will be securing them to a tinned breadboard. I’ll get them Tuesday and post my results. If it works, it will be cheaper more readily available than a custom PCB.

I need to look and see what is out there. I just know there was one someone did for Arduboy (that I linked to) that was like 15k-20k compiled… so that gives me confidence what I’m wanting to accomplish should all easily fit in the 128kb. Is there a particular reason you recommended this BASIC?

Ok, it has LOAD and SAVE. Sold :slight_smile:

@is0-mick (or anyone else)… that link appears to have gone bad. Does anyone have a copy of the originally files posted there? Is there a GitHub repository for any of this stuff yet?

1 Like

Great idea.

I just got my Smart Response XE today and whipped up a little protoboard with pogo pins to use with my USBasp programmer. It works great. I was able to use avrdude to do a chip erase and read the fuses (L:EE, H:92: E:FC).

I wouldn’t have had to open it up except the unit I received had battery acid leakage that needed to be cleaned up. :frowning:

2 Likes

Sorry,I haven’t got a github. I’ll re-upload the files and update the original post.
Mick

2 Likes

PCBs recieved and tested good. https://twitter.com/securelyfitz/status/1032048143586668545

Board files and details posted to github and boards shared on oshpark.

Pin pitch is close to .1" but not exactly, I tried plugging pogos into a 2x5 header I had but always had to jiggle to get good contact. Fine for 1-off but I’ve got lots of these to program… :slight_smile:

Any chance you’d sell a completed adapter with 6 pin male ISP and the pogos already installed?

From reading the datasheet it seems you can WRITE in 1-256 byte increments (if the memory has been previously erased), but you can only erase 4k or 32k blocks at a time… does that sound right? Seems that would greatly complicating treating it like a 512 byte block filesystem. :-/