Jump to content
IGNORED

SIO Wifi modem with esp8266


mozzwald

Recommended Posts

I have 2 questions/concerns about the nodemcu modem if anyone could comment..

 

1. Is there any issues with using the SIO 5V to power the modem? I know the 1200XL has a current limit resistor. The other systems afaik are spec-ed at 50mA load on 5V. I have not run any tests to check current draw of the Nodemcu board, but my limited use so far on an 800XL has shown no problems. Having the MicroUSB accessible when plugged in to SIO could make this a non-issue on systems where the Atari 5V is unreliable for the modem. I have an Atari 400 I can test with.

 

2. The MicroUSB port and Wifi antenna are on opposite sides of the Nodemcu board. To me, it makes sense to put the USB on the side away from the SIO connector but then the antenna is close to the system and would have traces underneath it on the carrier board. Do you think this could cause issues with either wifi signal strength or data transmission on the SIO lines?

Link to comment
Share on other sites

41 minutes ago, mozzwald said:

I have 2 questions/concerns about the nodemcu modem if anyone could comment..

 

1. Is there any issues with using the SIO 5V to power the modem? I know the 1200XL has a current limit resistor. The other systems afaik are spec-ed at 50mA load on 5V. I have not run any tests to check current draw of the Nodemcu board, but my limited use so far on an 800XL has shown no problems. Having the MicroUSB accessible when plugged in to SIO could make this a non-issue on systems where the Atari 5V is unreliable for the modem. I have an Atari 400 I can test with.

 

2. The MicroUSB port and Wifi antenna are on opposite sides of the Nodemcu board. To me, it makes sense to put the USB on the side away from the SIO connector but then the antenna is close to the system and would have traces underneath it on the carrier board. Do you think this could cause issues with either wifi signal strength or data transmission on the SIO lines?

 

       The MicroUSB port is assumed to be an externally accessible connection.  The Wifi antenna is not.  But why not put the SIO connection on either side of the carrier board instead of the ends? The carrier board might be a bit wider, but then both issues become non-issues. 

 

       It would be nice if they provided for an external antenna connection like the ESP-07 boards.  I've seen some blog posts/Youtube videos of people who have made their own external antenna connection.   Might also be an option.

 

24 minutes ago, tschak909 said:

as for 1, DON'T DO IT. just don't. There isn't enough current to do anything useful.

 

-Thom

On a standard Atari computer that may well be true that the SIO port +5V line does not have enough current for external connection. 

 

However if you are doing an internal version, then you have the ability to pickoff +5V with board level current internal to the computer.  Also when using the SIO Aux connector on Mytek's 1088XEL and 1088XLD line of reimaged Atari computers there is plenty of current available on both with the 1088XLD also providing both +5V and +12V AUX power connector.  Currently GND, +5V, CMD, Data_In, Data_Out, Mtr_Ctrl, and Clock_In is present on the 1088XEL SIO Aux connector, while on the 1088XLD only the first five signals are present.  The remaining signals will still have to be picked off the SIO port. 

 

I'm not that familiar with the ExclaireXL, so I couldn't say what is possible on it's SIO port. 

 

Isn't it starting to get confusing when you say 'on the Atari computer's'??

Link to comment
Share on other sites

23 minutes ago, Dropcheck said:

 

       The MicroUSB port is assumed to be an externally accessible connection.  The Wifi antenna is not.  But why not put the SIO connection on either side of the carrier board instead of the ends? The carrier board might be a bit wider, but then both issues become non-issues. 

 

I briefly thought about this, but I don't want it to interfere with a neighboring SIO port. Will need to measure. If plugged into the back of your 1050 drive it should allow the neighboring SIO connector to also be used.

 

Ultimately, my goal is to have something plug and play for stock or minimally modified Atari systems. If you can build Mytek's 1088XEL/XLD then I assume you can figure out how you want it connected internally ?

Link to comment
Share on other sites

On 10/26/2019 at 11:57 AM, a8isa1 said:

I managed to transfer very small files from the Atari to minicom (linux box) however minicom reported the average rate was 3 bytes/second.  Other than the initial NAK at the start of the process there were no error messages. All blocks transferred without retries, just agonizingly slowly. 

 

I put both Zimodems into "binary mode" (which is probably the default) with ATS45=0. I then put the Zimodem connected to minicom into answer mode, ATA1111 (which is port 1111) and used manual *dial* from the Atari, ATD"192.168.1.223:1111".   I did an Xmodem send from the Atari.  Transfers in the other direction failed.

 

-SteveS

Hi SteveS, we might want to create another thread, maybe to discuss this issue. But setting NO TELNET translation in Zimodem I was able to transfer  a couple of games (about 16k and the other about 8k) without problems. I connected to my linux laptop without telnet by using netcat or socat I don't remember (probably something like this: ncat -v -l -p 7777 -e /bin/bash), then I got the linux prompt and transferred the binary from the laptop to the atari using sz. I don't remember exactly which terminal app I use in the atari 8 bit, but I can try to do the test again.

I have not tried to transfer with any real BBS system.

  • Like 1
Link to comment
Share on other sites

Finally getting some cycles soon to work on a new modem firmware.

 

I'm still thumbing through the code for both ZiModem and WifiModem, and my initial bottom line:

 

ZiModem - Lots of features, tons of weird baggage due to its history at being a solution for the Commodore User Port.

WifiModem - Small, well tuned set of features, great configuration mode, but the code could be cleaner.

 

Since these are two opposite sides of developing a modem firmware, I think I can get a good idea of what's really needed for us, and hopefully with @mozzwald's prototype, I can help him start figuring out how to make these devices better SIO citizens.

 

We should be able to put the device into different modes, and e.g. implement streaming (concurrent) mode for modem operation.

 

and maybe, just maybe, do disk emulation.

 

Does anyone know how large the filespec buffer can be for a CIO call?

 

-Thom

  • Like 2
Link to comment
Share on other sites

Thom, In previous post you mentioned some of the features/tasks the firmware in the esp8266 needs to have. I would like to add a request if possible: the address book feature: to associate a fictitious phone # to a server:port internet address. That is very convenient.. For example for irata.online I just dial 300.

Did you check this one?:

https://github.com/RolandJuno/esp8266_modem

 

Edited by manterola
Link to comment
Share on other sites

42 minutes ago, manterola said:

Thom, In previous post you mentioned some of the features/tasks the firmware in the esp8266 needs to have. I would like to add a request if possible: the address book feature: to associate a fictitious phone # to a server:port internet address. That is very convenient.. For example for irata.online I just dial 300.

Did you check this one?:

https://github.com/RolandJuno/esp8266_modem

 

ok, cool, will check that out too.

-Thom

Link to comment
Share on other sites

I've designed a custom carrier board for the nodemcu with a new take on the SIO connector. OSHPark boards have shipped and should arrive this week. The new SIO connector uses round DSUB pins that solder directly to the PCB which slides part way into a 3D printed connector. This should make it smaller and easier to build (no need to cut, strip, crimp wires for SIO). Here's a test I did with an old SIO23V3 pcb:

SIO-PCB-Cable-Connector-Test.thumb.jpg.163887555d14bf4d968806c363ef6c45.jpg

In the mean time I've been working on a case to put it all in:

SIO-Modem-Case.png.849a4410bd90637cf9e32772c9616a02.png

Below you can see how the pins sit on the carrier board:

SIO-Modem-Case-Xray2.thumb.png.a5636a156a61c6bf23a273ab240cfdfc.png

Lots of empty space in the bottom since the nodemcu sits on top and carrier board is dead center. Clips hold the two halves together, buttons for reset and flash, cut out for microusb:

SIO-Modem-Case-Xray.thumb.png.3528c192519a8810246c6015f5359d53.png

In the earlier stages of the case design I had posted some pictures on twitter. Someone had asked about making it a pass through device with SIO in and out. I think this could be done using the same technique but using male DSUB pins. The issue with adding it to this board would be placement of the nodemcu and having the microusb port accessible. If you rotate the nodemcu 90 degrees it would interfere with a neighboring SIO port if plugged into a device (like a disk drive). Or, it could have two ports with pins and you just use a cable to connect it.

  • Like 6
Link to comment
Share on other sites

My god, that is fucking beautiful. :)

 

I wonder how we could really get the cost down so that could be bundled? ;)

 

I did some wholesale cost checking on ESP01 vs ESP12's:

 

https://www.dhgate.com/wholesale/search.do?act=search&sus=&searchkey=esp01&catalog=#Homesearch201403 for ESP01

 

vs

 

https://www.dhgate.com/product/esp8266-esp-12e-esp12e-esp12f-esp-12f-wifi/437897081.html#s1-4-1;searl|3330717181

 

wow.

 

-Thom

  • Like 2
Link to comment
Share on other sites

and cheaper in wholesale quantities, which is my point. The prices above are for lots of say, 10 or so.. depends on the merchant. I'll continue looking, because my goal is to be able to shove this into the PLATOTERM box alongside the cartridge and the manual, in an effort to get these devices out into the public.

 

MEANWHILE....

 

The Atari version of PLATOTERM will feature a Cartridge, with a WIFI modem in the box, and to that end, I am creating a new #ESP8266 #ATARI WIFI modem firmware: first of many test programs. #ESP12 #NodeMCU with GPIO attached to all SIO pins. Testing interrupts to make sure that COMMAND gets caught. Using #RemoteDebug so I can keep the serial on SIO and debug over telnet.

 

image.thumb.png.f12188c4dc8302ba9da5a850c8db5360.png

 

I suspect I will be learning far too much about SIO, before this is all over, but it's for a good cause. :)

 

Link to comment
Share on other sites

OK, looks like I had to do a swap(), am now receiving command frames:

 

(I p:^9531ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x3f
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0032ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x90
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x3f
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x90
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x3f
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x90
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x3f
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x90
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x3f
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x90
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0xa4
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0xa4
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0xa4
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0xa4
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0xa4
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0xa4
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0xa4
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0002ms) (sio_cmd_change) C: 0xa4
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0xa4
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0xa4
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x48
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x99
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x48
(I p:^0001ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x99
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x48
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x99
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x48
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x99
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x48
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x99
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0032ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0000ms) (sio_cmd_change) C: 0x4f
(I p:^0001ms) (sio_cmd_change) C: 0x40
(I p:^0000ms) (sio_cmd_change) C: 0x4f
(I p:^0000ms) (sio_cmd_change) C: 0x4f
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x2e
(I p:^0001ms) (sio_cmd_change) C: 0x4f
(I p:^0000ms) (sio_cmd_change) C: 0x40
(I p:^0001ms) (sio_cmd_change) C: 0x4f
(I p:^0000ms) (sio_cmd_change) C: 0x4f
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x2e
(I p:^0000ms) (sio_cmd_change) C: 0x4f
(I p:^0001ms) (sio_cmd_change) C: 0x40
(I p:^0000ms) (sio_cmd_change) C: 0x4f
(I p:^0001ms) (sio_cmd_change) C: 0x4f
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x3f
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x90
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x3f
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x90
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x3f
(I p:^0001ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x90
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x3f
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x90
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x3f
(I p:^0001ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x90
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0xa4
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0xa4
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0xa4
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0xa4
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0xa4
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0xa4
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0xa4
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0xa4
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0002ms) (sio_cmd_change) C: 0xa4
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x48
(I p:^0001ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x99
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x48
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x99
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x48
(I p:^0001ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x99
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x48
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x99
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x48
(I p:^0000ms) (sio_cmd_change) C: 0x20
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x99
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0001ms) (sio_cmd_change) C: 0x53
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0001ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x84
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x31
(I p:^0000ms) (sio_cmd_change) C: 0x53
(I p:^0002ms) (sio_cmd_change) C: 0x00
(I p:^0000ms) (sio_cmd_change) C: 0x00
(I p:^0001ms) (sio_cmd_change) C: 0x84
(I p:^0029ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x4f
(I p:^0001ms) (sio_cmd_change) C: 0x40
(I p:^0000ms) (sio_cmd_change) C: 0x4f
(I p:^0001ms) (sio_cmd_change) C: 0x4f
(I p:^0000ms) (sio_cmd_change) C: 0x2e
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x4f
(I p:^0000ms) (sio_cmd_change) C: 0x40
(I p:^0001ms) (sio_cmd_change) C: 0x4f
(I p:^0000ms) (sio_cmd_change) C: 0x4f
(I p:^0001ms) (sio_cmd_change) C: 0x2e
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x4f
(I p:^0001ms) (sio_cmd_change) C: 0x40
(I p:^0001ms) (sio_cmd_change) C: 0x4f
(I p:^0000ms) (sio_cmd_change) C: 0x4f
(I p:^0001ms) (sio_cmd_change) C: 0x2e
(I p:^0030ms) (sio_cmd_change) SIO Command frame
(I p:^0000ms) (sio_cmd_change) C: 0x4f
(I p:^0000ms) (sio_cmd_change) C: 0x40
(I p:^0000ms) (sio_cmd_change) C: 0x4f
(I p:^0001ms) (sio_cmd_change) C: 0x4f
(I p:^0000ms) (sio_cmd_change) C: 0x2e
(I p:^0031ms) (sio_cmd_change) SIO Command frame
(I p:^0001ms) (sio_cmd_change) C: 0x4f
(I p:^0000ms) (sio_cmd_change) C: 0x40
(I p:^0001ms) (sio_cmd_change) C: 0x4f
(I p:^0000ms) (sio_cmd_change) C: 0x4f
(I p:^0001ms) (sio_cmd_change) C: 0x2e

Does that look right, to you guys?

-Thom

 

Edited by tschak909
Link to comment
Share on other sites

15 hours ago, tschak909 said:

it looks like it eventually settles into sync, but the first few frames are out of sync, as I seem to be getting checksum values from the previous frame.. urgh.

 

-Thom

 

10 hours ago, AtariGeezer said:

Try this:  In setup()

 

Add pinMode(PIN_CMD, INPUT);

 

change attachInterrupt(digitalPinToInterrupt(PIN_CMD), sio_cmd_change, CHANGE);

to attachInterrupt(digitalPinToInterrupt(PIN_CMD), sio_cmd_change, RISING);

Messed around with what you posted a bit. We really need to know when the cmd pin is falling as that's when the cmd frame is starting. Your original code would freeze my nodemcu due to the debugI inside the interrupt handler function. The interrupt handler function should be as small as possible to not block the main loop (or so I've read). I still have sync problems at the start. Also, if Atari is powered off and back on without a reset of the Nodemcu, the sync gets worse.

 

https://gist.github.com/mozzwald/f84692d942111a29a6764c2f45a35152

  • Like 1
Link to comment
Share on other sites

ok. Yup, your gist makes a lot more sense, and yes, I should have realized that the debug logging could potentially blow the timing of the interrupt. :)

 

No more of that, will test your gist today, and probably go from that point, as it makes a lot more sense.

 

sio2arduino's finite-state-machine pattern does make a lot of sense, and what we do may wind up looking a lot like it, the point of these first few sketches of code is for me to understand SIO's timing and negotiation. :)

 

p.s. I WISH that attachInterrupt CHANGE would pass a parameter to indicate either rising or falling, so we could simply set the command flag based on that. :P :)

 

-Thom

 

 

Edited by tschak909
Link to comment
Share on other sites

Looking good, we're syncing quite well, so far.

 

$ telnet 192.168.1.8
Trying 192.168.1.8...
Connected to 192.168.1.8.
Escape character is '^]'.
*** Remote debug - over telnet - for ESP8266 (NodeMCU) - version 3.0.5
* Host name: remotedebug IP:192.168.1.8 Mac address:80:7D:3A:6E:91:50
* Free Heap RAM: 32848
* ESP SDK version: 2.1.0(deb1901)
******************************************************
* Commands:
    ? or help -> display these help of commands
    q -> quit (close this connection)
    m -> display memory available
    v -> set debug level to verbose
    d -> set debug level to debug
    i -> set debug level to info
    w -> set debug level to warning
    e -> set debug level to errors
    s -> set debug silence on/off
    l -> show debug level
    t -> show time (millis)
    profiler:
      p      -> show time between actual and last message (in millis)
      p min  -> show only if time is this minimal
      P time -> set debug level to profiler
    c -> show colors
    filter:
          filter <string> -> show only debugs with this
          nofilter        -> disable the filter
    cpu80  -> ESP8266 CPU a 80MHz
    cpu160 -> ESP8266 CPU a 160MHz
    reset -> reset the ESP8266

****
* New features available:
* - Now you can debug in web browser too.
*   Please access: http://joaolopesf.net/remotedebugapp
* - Now you can add an simple software debuggger.
*   Please access: https://github.com/JoaoLopesF/RemoteDebugger
****

* Please type the command and press enter to execute.(? or h for this help)
***
(I p:^12055ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x0
(I p:^0029ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) C0: 0x31
(I p:^0000ms) (loop) C1: 0x53
(I p:^0000ms) (loop) C2: 0x0
(I p:^0001ms) (loop) C3: 0x0
(I p:^0000ms) (loop) C4: 0x84
(I p:^0001ms) (loop) SIO COMMAND end
(I p:^0030ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) C0: 0x31
(I p:^0000ms) (loop) C1: 0x53
(I p:^0002ms) (loop) C2: 0x0
(I p:^0000ms) (loop) C3: 0x0
(I p:^0001ms) (loop) C4: 0x84
(I p:^0000ms) (loop) SIO COMMAND end (pin HIGH)
(I p:^0030ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) C0: 0x31
(I p:^0001ms) (loop) C1: 0x53
(I p:^0000ms) (loop) C2: 0x0
(I p:^0001ms) (loop) C3: 0x0
(I p:^0000ms) (loop) C4: 0x84
(I p:^0000ms) (loop) SIO COMMAND end
(I p:^0030ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) C0: 0x31
(I p:^0000ms) (loop) C1: 0x53
(I p:^0001ms) (loop) C2: 0x0
(I p:^0000ms) (loop) C3: 0x0
(I p:^0000ms) (loop) C4: 0x84
(I p:^0000ms) (loop) SIO COMMAND end
(I p:^0030ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) C0: 0x31
(I p:^0001ms) (loop) C1: 0x53
(I p:^0001ms) (loop) C2: 0x0
(I p:^0000ms) (loop) C3: 0x0
(I p:^0000ms) (loop) C4: 0x84
(I p:^0000ms) (loop) SIO COMMAND end (pin HIGH)
(I p:^0030ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) C0: 0x31
(I p:^0001ms) (loop) C1: 0x53
(I p:^0000ms) (loop) C2: 0x0
(I p:^0001ms) (loop) C3: 0x0
(I p:^0000ms) (loop) C4: 0x84
(I p:^0001ms) (loop) SIO COMMAND end
(I p:^0030ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) C0: 0x31
(I p:^0000ms) (loop) C1: 0x53
(I p:^0001ms) (loop) C2: 0x0
(I p:^0000ms) (loop) C3: 0x0
(I p:^0001ms) (loop) C4: 0x84
(I p:^0000ms) (loop) SIO COMMAND end
(I p:^0030ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) C0: 0x31
(I p:^0001ms) (loop) C1: 0x53
(I p:^0001ms) (loop) C2: 0x0
(I p:^0001ms) (loop) C3: 0x0
(I p:^0000ms) (loop) C4: 0x84
(I p:^0001ms) (loop) SIO COMMAND end
(I p:^0029ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) C0: 0x31
(I p:^0000ms) (loop) C1: 0x53
(I p:^0000ms) (loop) C2: 0x0
(I p:^0001ms) (loop) C3: 0x0
(I p:^0000ms) (loop) C4: 0x84
(I p:^0001ms) (loop) SIO COMMAND end
(I p:^0030ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) C0: 0x31
(I p:^0000ms) (loop) C1: 0x53
(I p:^0001ms) (loop) C2: 0x0
(I p:^0000ms) (loop) C3: 0x0
(I p:^0001ms) (loop) C4: 0x84
(I p:^0000ms) (loop) SIO COMMAND end
(I p:^0031ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) C0: 0x31
(I p:^0001ms) (loop) C1: 0x53
(I p:^0000ms) (loop) C2: 0x0
(I p:^0001ms) (loop) C3: 0x0
(I p:^0001ms) (loop) C4: 0x84
(I p:^0000ms) (loop) SIO COMMAND end
(I p:^0029ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) C0: 0x31
(I p:^0000ms) (loop) C1: 0x53
(I p:^0001ms) (loop) C2: 0x0
(I p:^0000ms) (loop) C3: 0x0
(I p:^0001ms) (loop) C4: 0x84
(I p:^0000ms) (loop) SIO COMMAND end
(I p:^0031ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) C0: 0x31
(I p:^0001ms) (loop) C1: 0x53
(I p:^0000ms) (loop) C2: 0x0
(I p:^0001ms) (loop) C3: 0x0
(I p:^0000ms) (loop) C4: 0x84
(I p:^0001ms) (loop) SIO COMMAND end
(I p:^0030ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) C0: 0x31
(I p:^0000ms) (loop) C1: 0x53
(I p:^0000ms) (loop) C2: 0x0
(I p:^0001ms) (loop) C3: 0x0
(I p:^0000ms) (loop) C4: 0x84
(I p:^0002ms) (loop) SIO COMMAND end
(I p:^0029ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) C0: 0x31
(I p:^0000ms) (loop) C1: 0x53
(I p:^0001ms) (loop) C2: 0x0
(I p:^0000ms) (loop) C3: 0x0
(I p:^0000ms) (loop) C4: 0x84
(I p:^0000ms) (loop) SIO COMMAND end
(I p:^0030ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) C0: 0x31
(I p:^0000ms) (loop) C1: 0x53
(I p:^0000ms) (loop) C2: 0x0
(I p:^0001ms) (loop) C3: 0x0
(I p:^0001ms) (loop) C4: 0x84
(I p:^0000ms) (loop) SIO COMMAND end
(I p:^0030ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) C0: 0x31
(I p:^0000ms) (loop) C1: 0x53
(I p:^0000ms) (loop) C2: 0x0
(I p:^0000ms) (loop) C3: 0x0
(I p:^0000ms) (loop) C4: 0x84
(I p:^0002ms) (loop) SIO COMMAND end
(I p:^0029ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) C0: 0x31
(I p:^0000ms) (loop) C1: 0x53
(I p:^0001ms) (loop) C2: 0x0
(I p:^0000ms) (loop) C3: 0x0
(I p:^0001ms) (loop) C4: 0x84
(I p:^0000ms) (loop) SIO COMMAND end
(I p:^0030ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) C0: 0x31
(I p:^0001ms) (loop) C1: 0x53
(I p:^0000ms) (loop) C2: 0x0
(I p:^0000ms) (loop) C3: 0x0
(I p:^0001ms) (loop) C4: 0x84
(I p:^0000ms) (loop) SIO COMMAND end
(I p:^0031ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) C0: 0x31
(I p:^0000ms) (loop) C1: 0x53
(I p:^0001ms) (loop) C2: 0x0
(I p:^0000ms) (loop) C3: 0x0
(I p:^0001ms) (loop) C4: 0x84
(I p:^0001ms) (loop) SIO COMMAND end
(I p:^0029ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) C0: 0x31
(I p:^0000ms) (loop) C1: 0x53
(I p:^0000ms) (loop) C2: 0x0
(I p:^0000ms) (loop) C3: 0x0
(I p:^0000ms) (loop) C4: 0x84
(I p:^0001ms) (loop) SIO COMMAND end
(I p:^0030ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) C0: 0x31
(I p:^0000ms) (loop) C1: 0x53
(I p:^0000ms) (loop) C2: 0x0
(I p:^0001ms) (loop) C3: 0x0
(I p:^0000ms) (loop) C4: 0x84
(I p:^0001ms) (loop) SIO COMMAND end
(I p:^0030ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) C0: 0x31
(I p:^0000ms) (loop) C1: 0x53
(I p:^0001ms) (loop) C2: 0x0
(I p:^0000ms) (loop) C3: 0x0
(I p:^0001ms) (loop) C4: 0x84
(I p:^0000ms) (loop) SIO COMMAND end
(I p:^0030ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) C0: 0x31
(I p:^0001ms) (loop) C1: 0x53
(I p:^0000ms) (loop) C2: 0x0
(I p:^0001ms) (loop) C3: 0x0
(I p:^0000ms) (loop) C4: 0x84
(I p:^0001ms) (loop) SIO COMMAND end (pin HIGH)
(I p:^0029ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) C0: 0x31
(I p:^0000ms) (loop) C1: 0x53
(I p:^0000ms) (loop) C2: 0x0
(I p:^0001ms) (loop) C3: 0x0
(I p:^0000ms) (loop) C4: 0x84
(I p:^0001ms) (loop) SIO COMMAND end
(I p:^0030ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) C0: 0x31
(I p:^0000ms) (loop) C1: 0x53
(I p:^0001ms) (loop) C2: 0x0
(I p:^0000ms) (loop) C3: 0x0
(I p:^0001ms) (loop) C4: 0x84
(I p:^0000ms) (loop) SIO COMMAND end
(I p:^0031ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) C0: 0x31
(I p:^0001ms) (loop) C1: 0x53
(I p:^0000ms) (loop) C2: 0x0
(I p:^0001ms) (loop) C3: 0x0
(I p:^0000ms) (loop) C4: 0x84
(I p:^0001ms) (loop) SIO COMMAND end (pin HIGH)
(I p:^0029ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) C0: 0x31
(I p:^0001ms) (loop) C1: 0x53
(I p:^0000ms) (loop) C2: 0x0
(I p:^0000ms) (loop) C3: 0x0
(I p:^0001ms) (loop) C4: 0x84
(I p:^0000ms) (loop) SIO COMMAND end
(I p:^0030ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x40
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x2E
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x40
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x2E
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x40
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x2E
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x40
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x2E
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x40
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x2E
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x40
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x2E
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x40
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x2E
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x40
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x2E
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x40
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x2E
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x40
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x2E
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x40
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0032ms) (loop) SIO COMMAND start
(I p:^0001ms) (loop) SIO COMMAND Invalid DeviceID: 0x4F
(I p:^0033ms) (loop) SIO COMMAND start
(I p:^0000ms) (loop) SIO COMMAND Invalid DeviceID: 0x2E

My god, I love the remote telnet debug.

 

So next thing I will try will be to respond to the STATUS and subsequent READ commands to load a single bootsector.

 

The code for the bootsector is this:

 

	.list off
	.include "atari.inc"

	.export start

	.segment "CODE"

	;; Boot header
	.byte $00		; Boot flags
	.byte $01		; # of sectors to load
	.byte $00		; run address
	.byte $07		; " "
	.byte $00		; init address
	.byte $07		; " "

	;; Start of program code
	;; Set color, set display list, and spin.
start:	
	lda #154
	sta COLOR0
	lda #69
	sta COLOR4
	lda #<dlist
	sta SDLSTL
	lda #>dlist
	sta SDLSTH
loop:	jmp loop
	
	.segment "RODATA"

	;; The boot message '   ESP8266 BOOTED   ' as screen codes
dmsg:
	.byte 0,0,0,37,51,48,24,18,22,22,0,34,47,47,52,37,36,0,0,0
	;; The display list
dlist:
	.byte $70
	.byte $70
	.byte $70
	
	.byte $70
	.byte $70
	.byte $70
	.byte $70
	.byte $70
	.byte $70
	.byte $70
	.byte $70
	.byte $70

	.byte $47
	.word dmsg
	.byte $41

	.res 63 		; Padding out to 128 bytes.

this can be compiled with:

$ cl65.exe -t none -C atari-asm.cfg bootsect.s

the -t none and -C atari-asm.cfg combine together to produce a headerless binary that with the padding at the bottom equates exactly to a 128 byte sector.

 

this can be run through xxd to produce a C byte  array:

$ xxd -i bootsect
unsigned char bootsect[] = {
  0x00, 0x01, 0x00, 0x07, 0x00, 0x07, 0xa9, 0x9a, 0x8d, 0xc4, 0x02, 0xa9,
  0x45, 0x8d, 0xc8, 0x02, 0xa9, 0x31, 0x8d, 0x30, 0x02, 0xa9, 0x07, 0x8d,
  0x31, 0x02, 0x4c, 0x1a, 0x07, 0x00, 0x00, 0x00, 0x25, 0x33, 0x30, 0x18,
  0x12, 0x16, 0x16, 0x00, 0x22, 0x2f, 0x2f, 0x34, 0x25, 0x24, 0x00, 0x00,
  0x00, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
  0x70, 0x47, 0x1d, 0x07, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
unsigned int bootsect_len = 128;                                                               

which should be sufficient for testing.

 

more to come.

  • Like 2
Link to comment
Share on other sites

1 hour ago, tschak909 said:

p.s. I WISH that attachInterrupt CHANGE would pass a parameter to indicate either rising or falling, so we could simply set the command flag based on that. :P :)

In the gist I left the sio_cmd_change function modified to do a digital read of the pin state. Not sure if that will be fast enough to use with the CHANGE interrupt mode.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...