Example of usage :
java -jar "PASMDisassembler.jar" turbulence.eeprom > turbulence.asm
If you find some issues, please tell me, I did not have time to write all JUnits to test all opcodes & conditions.
I'll publish the sources for the curious when the last bugs will be fixed.
As advertised, my PASM disassembler. Not fully finished (some command line options don't work as expected) but usable.
Java Runtime 6 required. Usage example : Exemple of output for Linus's demo :
My proposo to You is to have OPTION to Disassemble ...... FROM xxxx ..... TO xxxx
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ Nothing is impossible, there are only different degrees of difficulty. For every stupid question there is at least one intelligent answer. Don't guess - ask instead. If you don't ask you won't know. If your gonna construct something, make it·as simple as·possible yet as versatile as posible.
First Bytes in BIN file is HEADER.
Adjust Disasembling to that.
My proposo to You is to have OPTION to Disassemble ...... FROM xxxx ..... TO xxxx
About the header... I know.... but not sure I want handle it as Linus did not follow the header specs entirely [noparse]:)[/noparse] Simply follow the first instruction and forget those useless stuff... Bah I'll add it one day.
The from/to is already there but not well implemented, use -s 0x01C -e 0x0FF for example (but doesn't stop at the good address [noparse]:)[/noparse] )
jazzed said...
Nice effort so far. Some problems .... $2b long is the TEST instruction with the WZ flag set ... $2c is a SHR instruction.
Thanks Jazzed, there was a bug with the effects. fixed.
But better to create a new thread to avoid pollute the linus demo hacking challenge ! I'll do that with the next version.
You can implement Hippy'S disassembler in java (it is written in some sor of BASIC) so I can use it in my pPropellerSim or you can get some ideas from it. sourceforge.projects=ppropellersim. That one is a little dated till I upgrade it with my current dev tree (I can send it to you if you are interested).
I posted the disassembly of one the COG'S program memory in page 4 or 5 of this thread
Ale, I have tested Hippy's proplist but I had some issues, the turbulence EEPROM was strangely disassembled (or I think so). Then I tried your pPropellerSim and I was not able to disassemble the eeprom too (only three strange instructions at the beginning then nothing), I did not have the disassembly you have posted. So.....
But yes if you have a version which works, please send it [noparse]:)[/noparse]
What port it use.
Can You post litle help to this program
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ Nothing is impossible, there are only different degrees of difficulty. For every stupid question there is at least one intelligent answer. Don't guess - ask instead. If you don't ask you won't know. If your gonna construct something, make it·as simple as·possible yet as versatile as posible.
Run turbulence demo on the Propeller, click one of the buttons and the program scans port from 0 to 9.
If the Propeller is found it will reset to run the demo or download to ram to show the
hidden part.
If you got an error msg you probably have a bluetooth device or something else connected
to the USB ports. If you want I can set the port to a fixed number (send me a PM).
None of my Propelers Run on Ports 1-9.
It is my other Com systems that have them
My Prop Ports start at 15 - > Totaly 6
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ Nothing is impossible, there are only different degrees of difficulty. For every stupid question there is at least one intelligent answer. Don't guess - ask instead. If you don't ask you won't know. If your gonna construct something, make it·as simple as·possible yet as versatile as posible.
I will make a version for you with more ports and you can download it later from my old post above.
To display the hidden part you can use ViewPort (see earlier post from Shazz).
I was trying to use Parallax source code to download to the Propeller and in the first test my program trigged the hidden part so I don't have a clue what is going on under the hood.
BEEP said...
I was trying to use Parallax source code to download to the Propeller and in the first test my program trigged the hidden part so I don't have a clue what is going on under the hood.
LOL [noparse]:)[/noparse]
And basically from what you know, what does your exe do ?
Shazz said...
Then I tried ... pPropellerSim and I was not able to disassemble the eeprom too (only three strange instructions at the beginning then nothing), I did not have the disassembly ...
Just load the *.eeprom file as *.bin (File -> Open binary ...), in this mode it's treated as headerless PASM. But don't believe everything you see (e.g. all special registers are cleared after coginit/cognew).
It's nice to see all the progress you're making! You can be sure I'm watching this thread.
Since some of you have cracked the unpacker now, I would suggest that your next step is to write a tool for unpacking data from a given offset in the eeprom file, into a new file. Do this for various offsets, then study the resulting files using hex editors, disassemblers and whatnot. Of course, it may not be entirely obvious which offsets to start unpacking from...
eh eh Linus so we're near of that.... currently I've got a command line depacker which as you mention take various offsets which are not obvious at all (that's my issue now, as your depacker maintains a buffer and a bit position from the previous depack, at least for the first 4 packed blocks)... So Kuroneko tries to help me to manage that [noparse]:)[/noparse]
So I'm sure he's a little ahead of that.... and I'm sure his depacker is fully functional [noparse]:)[/noparse]
Linus, the reversed bitstream, that was to nag us, no ? =D
Shazz said...
Linus, the reversed bitstream, that was to nag us, no ? =D
When you think about it, data comes in through rdbyte, so it ends up in the low bits of a register. It's natural to shift them to the right, one at a time, into the carry flag. But you also want to concatenate a sequence of bits together into the low bits of another register. It's natural to shift them to the left, one at a time, from the carry flag. The bit order will be reversed, which seems counter-intuitive, but otherwise (e.g. shifting to the left both when reading and concatenating) you'd have to add at least one more instruction somewhere, in order to shift the destination register 32 - n bits. This would slow things down.
Linus, amazing demo. Had a chance to see it on real hardware last night instead of video. Very impressive! (watching a youtube video is not the same) I thought about writing a "old-school" type demo for the Prop myself but thought it might be too weak on the memory. You sir have proved me wrong! Would be interesting if a demo scene formed around the Prop... Working on firing up your demo last night brought back old "demo scene" memories. Days of watching a computer (now, just a little chip) do something you didn't even think was possible... Awesome!
I'm sure we are going to see a few more demos after someone manage to reverse engineer Linus Demo...
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Living on the planet Earth might be expensive but it includes a free trip around the sun every year...
Experience level:
[noparse][[/noparse] ] Let's connect the motor to pin 1, it's a 6V motor so it should be fine.
[noparse][[/noparse] ] OK, I got my resistors hooked up with the LEDs.
[noparse][[/noparse]X] I got the Motor hooked up with the H-bridge and the 555 is supplying the PWM.
[noparse][[/noparse] ] Now, if I can only program the BOE-BOT to interface with he Flux Capacitor.
[noparse][[/noparse] ] I dream in SX28 assembler...
java -jar ../dist/LoaderDecrypter.jar -o hidden.eeprom -r 0x07504 -w 0x00 turbulence.eeprom
Loading the file turbulence.eeprom
Saving the file hidden.eeprom
--- Depack report ---
Read data size : 1681
Written data size : 2048
Compression ratio : 18.0 %
Dictionary encoded bytes : 935
Reversed bitstream encoded bytes : 1113
Last Hub Src address : 0x07b95
Last Hub Dst address : 0x0800
Turbulence hidden screen said...
Welcome to the hidden part! You know what? It's really difficult to fill up 32 kilobytes. When you've got a really tight limit, like 4 kB, you almost immediately hit the roof, and spend most of the time trying to optimize a few bytes here and there. With a larger limit, say 64 kB, you've got plenty of room for animations, sound samples etc., so you tend to fill it up in that way. But with 32 kB, it's a real challenge. The way I work, I usually start out experimenting with a bunch of effects. Then, when inspiration strikes, I compose a piece of music, in the right mood. Once the music is finished, the duration of the demo (and, to some extent, the number of cuts) is fixed. Then I try to map the effects to the music, and hopefully the big picture emerges somehow. At that point I'll know exactly how large the demo will be. In the case of Turbulence, I think I had used about 24 kB then. By adding a few details here and there, I managed to increase the size with a few more kilobytes. Then I added the hidden part as a last measure. But I've still got plenty of space left. Oh well, I guess I'll have to give up and pad the file now. By the way, spring has just arrived in Lund, and I really shouldn't be sitting indoors typing scrolltext. Oh well, vita brevis, ars longa. It's a dirty job, but someone's gotta do it. Hmm, what else can I write about? The propeller chip is really cool! It's the renaissance of the home computer! Its architecture is very peculiar, in both good and bad ways. The limitations are just right. Indeed, the promised Propeller II seems to be a bit too high-end for my taste. High performance may be convenient, and even useful, but there's nothing like a bunch of complex limitations to get your creativity flowing. Anyway, if you're still reading this, you're obviously skilled in the art of concentration and patience. Nurture those abilities, and the world will be yours. That is all. Take care everyone, and keep on creating, inspiring and amazing each other!
The propeller chip is really cool! It's the renaissance of the home computer! Its architecture is very peculiar, in both good and bad ways. The limitations are just right. Indeed, the promised Propeller II seems to be a bit too high-end for my taste. High performance may be convenient, and even useful, but there's nothing like a bunch of complex limitations to get your creativity flowing. Anyway, if you're still reading this, you're obviously skilled in the art of concentration and patience. Nurture those abilities, and the world will be yours. That is all. Take care everyone, and keep on creating, inspiring and amazing each other!
Comments
tmpstore.free.fr/propeller/PASMDisassembler_v0.1.zip
Example of usage :
java -jar "PASMDisassembler.jar" turbulence.eeprom > turbulence.asm
If you find some issues, please tell me, I did not have time to write all JUnits to test all opcodes & conditions.
I'll publish the sources for the curious when the last bugs will be fixed.
As advertised, my PASM disassembler. Not fully finished (some command line options don't work as expected) but usable.
Java Runtime 6 required. Usage example :
Exemple of output for Linus's demo :
Post Edited (Shazz) : 4/19/2009 6:28:02 PM GMT
First Bytes in BIN file is HEADER.
Adjust Disasembling to that.
My proposo to You is to have OPTION to Disassemble ...... FROM xxxx ..... TO xxxx
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Nothing is impossible, there are only different degrees of difficulty.
For every stupid question there is at least one intelligent answer.
Don't guess - ask instead.
If you don't ask you won't know.
If your gonna construct something, make it·as simple as·possible yet as versatile as posible.
Sapieha
About the header... I know.... but not sure I want handle it as Linus did not follow the header specs entirely [noparse]:)[/noparse] Simply follow the first instruction and forget those useless stuff... Bah I'll add it one day.
The from/to is already there but not well implemented, use -s 0x01C -e 0x0FF for example (but doesn't stop at the good address [noparse]:)[/noparse] )
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
--Steve
Propalyzer: Propeller PC Logic Analyzer
http://forums.parallax.com/showthread.php?p=788230
Thanks Jazzed, there was a bug with the effects. fixed.
But better to create a new thread to avoid pollute the linus demo hacking challenge ! I'll do that with the next version.
You can implement Hippy'S disassembler in java (it is written in some sor of BASIC) so I can use it in my pPropellerSim or you can get some ideas from it. sourceforge.projects=ppropellersim. That one is a little dated till I upgrade it with my current dev tree (I can send it to you if you are interested).
I posted the disassembly of one the COG'S program memory in page 4 or 5 of this thread
But yes if you have a version which works, please send it [noparse]:)[/noparse]
Edit:
A new version (test.zip) for Sapieha.
Post Edited (BEEP) : 4/20/2009 12:56:58 PM GMT
What port it use.
Can You post litle help to this program
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Nothing is impossible, there are only different degrees of difficulty.
For every stupid question there is at least one intelligent answer.
Don't guess - ask instead.
If you don't ask you won't know.
If your gonna construct something, make it·as simple as·possible yet as versatile as posible.
Sapieha
If the Propeller is found it will reset to run the demo or download to ram to show the
hidden part.
If you got an error msg you probably have a bluetooth device or something else connected
to the USB ports. If you want I can set the port to a fixed number (send me a PM).
Post Edited (BEEP) : 4/20/2009 11:19:10 AM GMT
None of my Propelers Run on Ports 1-9.
It is my other Com systems that have them
My Prop Ports start at 15 - > Totaly 6
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Nothing is impossible, there are only different degrees of difficulty.
For every stupid question there is at least one intelligent answer.
Don't guess - ask instead.
If you don't ask you won't know.
If your gonna construct something, make it·as simple as·possible yet as versatile as posible.
Sapieha
To display the hidden part you can use ViewPort (see earlier post from Shazz).
LOL [noparse]:)[/noparse]
And basically from what you know, what does your exe do ?
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
New ICON coming, gotta wait for the INK to heal, now we have colour!
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
New ICON coming, gotta wait for the INK to heal, now we have colour!
Hahaha.. talk about dangling a carrot in front of a donkey.. eeee--awww!
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
New ICON coming, gotta wait for the INK to heal, now we have colour!
I'll try to post something this weekend
Follow us...
http://tinyurl.com/68k2z
It's nice to see all the progress you're making! You can be sure I'm watching this thread.
Since some of you have cracked the unpacker now, I would suggest that your next step is to write a tool for unpacking data from a given offset in the eeprom file, into a new file. Do this for various offsets, then study the resulting files using hex editors, disassemblers and whatnot. Of course, it may not be entirely obvious which offsets to start unpacking from...
By the way, a better video rip is available on the project page now (www.linusakesson.net/scene/turbulence/).
So I'm sure he's a little ahead of that.... and I'm sure his depacker is fully functional [noparse]:)[/noparse]
Linus, the reversed bitstream, that was to nag us, no ? =D
When you think about it, data comes in through rdbyte, so it ends up in the low bits of a register. It's natural to shift them to the right, one at a time, into the carry flag. But you also want to concatenate a sequence of bits together into the low bits of another register. It's natural to shift them to the left, one at a time, from the carry flag. The bit order will be reversed, which seems counter-intuitive, but otherwise (e.g. shifting to the left both when reading and concatenating) you'd have to add at least one more instruction somewhere, in order to shift the destination register 32 - n bits. This would slow things down.
The fact that it would nag you was a bonus.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Living on the planet Earth might be expensive but it includes a free trip around the sun every year...
Experience level:
[noparse][[/noparse] ] Let's connect the motor to pin 1, it's a 6V motor so it should be fine.
[noparse][[/noparse] ] OK, I got my resistors hooked up with the LEDs.
[noparse][[/noparse]X] I got the Motor hooked up with the H-bridge and the 555 is supplying the PWM.
[noparse][[/noparse] ] Now, if I can only program the BOE-BOT to interface with he Flux Capacitor.
[noparse][[/noparse] ] I dream in SX28 assembler...
/Bamse
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
http://www.propgfx.co.uk/forum/·home of the PropGFX Lite
·
Well said, Linus!