BlockoS

MooZ devblog
  • rss
  • Home
  • About

Malevitch can’t code!

February 8, 2010

Some months ago, Iq asked on Pouet bbs if anyone had some tip and tricks on creating a minimal glx framework.
Viznut answered that he managed to have open a window and refresh a framebuffer in 300 bytes using kernel syscalls.
So I jumped on the bandwagon and decided to code my own minimal X client using raw X11 protocol.
Here’s my miserable attempt. Looking at xcb and Xlib code helped a lot. Unfortunately it failed on half of the boxes where it was tested because of authentication.
Kernel_error tried to add it but he said it’s a pain in the harp.
Oh by the way, it’ll crash on x64… Here’s small article in french about the different syscall conventions. And you’ll surely understand why it’ll crash :)

Comments
No Comments »
Categories
Uncategorized
Comments rss Comments rss
Trackback Trackback

Dataflash of the two worlds

January 9, 2010

I spent the whole afternoon trying to make the arduino works with 2 dataflash chips. A coupe of really stupid code mistakes and some weird stuffs later, it worked. You can now have 2 instances of ATD45DB161D class. For example one will use the pins 2, 4 and 5 for SS, RESET and WP and the other one will use pins 10,8 and 7.
I couldn’t make SS work with an other pin than the pin 10 until I ran across forum post. So I have to set both the requested SS pin and pin 10 (hardwired SS pin) high before setting the SPCR register so that the atmega168 becomes master.
So I moved the SPCR initialization to a new method astutely called Enable. And I added its counterpart called Disable which drives the SS pin high.
So before using a given Dataflash chip, you’ll have to call Enable before using it. And call Disable when you are done with it.

As I’m not happy with the current design, I created a new branch for this dev.

You can find it [here].
Any ideas/suggestions for a cleaner/safer way to handle multiple SPI device are welcome :)

[edit]: Arg, I should have checked Atmel site. They have an application note called AVR151: Setup And Use of The SPI.
[edit] (it’s the last one. I swear :) ) I moved the SPI master init into a new function (spi_init). It’s a little bit cleaner now. But it’ll stay in a branch until I run more tests and have some feedback.

Comments
1 Comment »
Categories
arduino, code
Comments rss Comments rss
Trackback Trackback

Alice in GitHub

November 15, 2009

Some of the stuffs I posted here are now on [GitHub]. Namely, the [arduino dataflash library] and the [ips patcher]. Feel free to clone them :)
I’m taking a little break from OpenGL stuffs and the pcengine tracker. To relax I’m working on Marchen Maze translation. I’m nearly done with the introduction. I’m currently working on the insertion software. But I need to find someone to translate the script… Anyway you can check my progress on [pcedev].

And for more useless stuffs you can check my [twitter page].

Comments
No Comments »
Categories
arduino, code, pc engine
Comments rss Comments rss
Trackback Trackback

Lights out!

September 8, 2009

After spending hours playing Primrose, I decided to code a little board game using GGI during a week-end. I don’t remember how but I ended on the Lights Out wikipedia page.

The gameplay is quite simple. You have a 5×5 board with tiles randomly switched on. Well not really randomly because it’s frustrating to have an unsolvable board ;) . Your goal is to switch all the tiles off by pressing them. The problem is that when you press a tile, the four adjacent tiles are toggled on or off (see it as an xor).

And voila! It’s a very basic implementation. It features simple graphics, no text nor title screen…

  • [code]
  • [Makefile]
Comments
No Comments »
Categories
Uncategorized
Comments rss Comments rss
Trackback Trackback

I ATE’NT DEAD

June 22, 2009

Damn, 9 months since last post… It’s not as if I had nothing to say. It’s quite the opposite in fact. So now the question is… Where to start?

Comments
2 Comments »
Categories
Uncategorized
Comments rss Comments rss
Trackback Trackback

Fireballs of fire!

September 15, 2008

EEK! 6 months !

It’s not that I had nothing to write. On the contrary, I have a lot to post. I just didn’t found the time to write… Erm.. Let’s go with a 7 months old stuff.

While working on the tracker, I wanted to add some kind of “live” mode. The user could choose which sequence to play, modify it, control volume, add an effect etc… So I came with the idea to associate a command to a key combo.

Combos are detected by walking down a tree. Each time a button is pressed, we look at the current node and check if one of its children is associated to this button. If that’s the case, this child becomes the new current node. Otherwise there’s no matching combo and we reset the current node to the tree root. If the button pressed didn’t not changed for a certain amount of time (timeout), we check there’s a child corresponding to the current button. This way, we can detect combo containing a sequence like “press A button during t seconds”.

Let’s look at a simple example.

Mkit will successively return : DOWN – DOWN+RIGHT – RIGHT – 0 (aka nothing) – A

We have 0 because when you go from RIGHT to A, there’s a moment when you don’t press any button. And as we check keys every vsync, we necessary get 0 (unless if you are Superman on Redbull).

Consider we want to handle the following combos :

The combo tree is very similar to a lexical tree. A node can have 0 to N children but only one parent.

The tree is store in level-order with the longest path first. This means that you’ll have to be very careful and store node children by their depth. We have for our example :

Root – Down – A – Down+Right – Down+Left – Nothing – Left – Right – A – Nothing – Nothing – Leaf – A – B – Leaf – Leaf

In the current implement, the tree is stored in 2 arrays. The first one contains the index to first child of a node. And the second the key for each node.

combo_tree : 1, 3, 5, 6, 7, 8, 9, 10, 128 | 2, 11, 12, 128 | 0, 128 | 1
combo_keys: .db 255, JOY_DOWN, JOY_I, JOY_DOWN | JOY_RIGHT, JOY_DOWN | JOY_LEFT
.db 0, JOY_RIGHT, JOY_LEFT, JOY_I, 0, 0, JOY_I, JOY_II

The root is always at index 0 and we associate the key value 255 to it.
The tree traversal algorithm is very simple. For a given node i, we know that its children are at indices j from combo_tree[i] to combo_tree[i+1]-1. And that we can reach them only if the current key is combo_key[j]. If the bit 7 of a value in the children list is set, this means that we have a transition a leaf. The remaining bits are used as an index to a jump table.
The traversal looks like this:
i // current node index
for(j=combo_tree[i]; j<combo_tree[i+1]; ++j)
if(combo_key[j] == key)
if(combo_tree[j] & 128) // is it a leaf?
fnctl = combo_tree[j] & 127
call(fnctl)
i = 0 // Back to root
else
i = j // The child becomes the new current node
return
i = 0 // We didn't find a suitable child. So we jump back to root.

The only thing missing here, is the key timeout and repetition. The key timeout is the number of vsync to wait before going back to root (COMBO_DEFAULT_DELAY in combo.asm). Note that in current code combo_tree, combo_keys and combo_jumpTable are in RAM. So you’ll have to initialize them before-hand.

  • [code]
  • [rom]

If you have any question, feel free to leave a comment or go and join the [PCEdev Forum].

Talking about web stuff, I finally updated the gallery. Hurray!

Comments
No Comments »
Categories
code, pc engine
Comments rss Comments rss
Trackback Trackback

Micro SDisco

April 7, 2008

Some months ago, I bought a 4DSystem’s µDRIVE-uSD-G1 (microDRIVE) from Sparkfun. It’s basically a serial module which let you access a microSD memory card (from 512Mb to 2Gig). You may wonder why use an external module as SD cards have a SPI interface? The main reason is … laziness. All file-system operations are performed by the module. So why bother coding fat16 support or whatever? Unfortunately, the current microDRIVE firmware only supports raw access.

Arduino with 4D System\'s uDRIVE-uSD-G1

Anyway, I wrote a small module for the current firmware. It was implemented as a template in order to support various serial implementations. The serial class must provide the following methods :

  • uint8_t read()
  • void print(uint8_t)
  • int available()

It’d have been better if all the serial implementations derived from a same interface. But as I didn’t want to modify the base Arduino code (and as i said earlier, because I’m lazy), I went for the easy/brutal way. And you’d probably never have more than one microDRIVE. At least you want raid :D

I tested Arduino’s HardwareSerial and SoftwareSerial, as long as ladyada’s AFSoftSerial. None of the software implementations work :| Only soft read is working (hardware tx was used). As software serial is working for the serial LCD, I think the problem might be the autobaud detection during microDRIVE initialization… Or not…

  • [Code]
  • [Documentation]

Be careful! There’s a bug in the rev1 firmware. The internal memory address is not incremented to the next sector block after a write operation. It was corrected in the rev2.

Comments
5 Comments »
Categories
arduino, code
Tags
4DSystems, arduino, code, microDRIVE
Comments rss Comments rss
Trackback Trackback

MazinSer LCD

February 12, 2008

Woohoo!

I just got my hands on a 20×4 serial LCD from Sparkfun. It’s basically a standard LCD with a little PIC based serial TTL interface board plugged on it.

10 lines of code and 3 wires later, I had a wonderful “Hello world” displayed on screen. The only problem is that I was using pin 1 (TX) which is shared with the serial USB interface. So when the sketch is uploaded, it’s also sent to the SerLCD. And you end up with garbage on screen. Hopefully, Arduino comes with a soft serial class. It lets you use custom pins for serial communication. The only downside it that it can only run at 4800 baud or 9600 baud.
Next serial fun : 4DSystem’s µDRIVE-uSD-G1.

Here’s the result!

Arduino+SerLCD in action

The mandatory piece of code.

#include <softwareSerial.h>

#define SERLCD_CMD                  0xFE

#define SERLCD_CLEAR                0×01
#define SERLCD_MOVE1_R              0×14
#define SERLCD_MOVE1_L              0×10
#define SERLCD_SCROLL_R             0×1C
#define SERLCD_SCROLL_L             0×18
#define SERLCD_DISP_ON              0×0C
#define SERLCD_DISP_OFF             0×08
#define SERLCD_UNDERLINE_CURSOR_ON  0×0E
#define SERLCD_UNDERLINE_CURSOR_OFF 0×0C
#define SERLCD_BLINKING_CURSOR_ON   0×0D
#define SERLCD_BLINKING_CURSOR_OFF  0×0C
#define SERLCD_SET_CURSOR_POS       0×80
#define SERLCD_CURSOR_OFF           0×0C

#define rxPin 6
#define txPin 7

void setup()
{
  char *str = "BlockoS! :) ";
  char *cursor;

  SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);

  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);

  mySerial.begin(9600);

  mySerial.print(SERLCD_CMD, BYTE);
  mySerial.print(SERLCD_CLEAR, BYTE);

  mySerial.print(SERLCD_CMD, BYTE);
  mySerial.print(SERLCD_BLINKING_CURSOR_ON, BYTE);

  for(cursor=str; *cursor!=‘\0‘; ++cursor)
  {
    mySerial.print(*cursor, BYTE);
  }
}

void loop()
{
  /* Nothing */
}

Comments
No Comments »
Categories
arduino, code
Tags
arduino
Comments rss Comments rss
Trackback Trackback

IPS delivery (part 3)

January 4, 2008

Happy new year!

Just after Christmas, Tomaitheous released Bubblegum Crash patch. Yeepee!

As it’s an IPS patch, I tried to patch the rom with the wonderful ips patcher. Unfortunately, it was unable to patch it. I had a nice “Record offset is out of file bound.” error.
All was IPSProcessRecord function fault. First, I considered the file offset to be out of bound if it was superior or equal to the file size. But if you are appending data to a file, the offset is equal to the file size. Second, I never updated the patched file size. So If we keep appending data to a rom, the bound test will fail.

Anyway! Everything is fixed now. And I was able to successfully apply the patch. So go grab the latest version here:

  • ips-patcher v0.02

And as usual, feel free to contact me or leave a comment if you have any request or problem.

Comments
No Comments »
Categories
code
Tags
code
Comments rss Comments rss
Trackback Trackback

IPS delivery (part 2)

November 20, 2007

Here it is! The gtk version of the ips patcher I wrote earlier.
It’s based on GTK. And I use Glade to create the interface.

I thought I’d have to implement zillions of callbacks but in the all I had to to is attach the IPS structure to the main window, implement a callback and add a thread.

This was also the occasion to clean up and simplify the IPS code.

You can download it [here].
Feel free to contact me or leave a comment if you have any request or problem.

Here are the mandatory screenshots!

  • Main window :

    IPS patcher main window

  • Error window (it’s a little too big in my opinion :) ) :

    IPS patcher error window

  • Success window :

    IPS patcher success window

Comments
1 Comment »
Categories
code
Tags
code, linux
Comments rss Comments rss
Trackback Trackback

« Previous Entries

Categories

  • arduino
  • code
  • crbn
  • openGL
  • pc engine
  • Uncategorized

Recent Posts

  • Malevitch can’t code!
  • Dataflash of the two worlds
  • Alice in GitHub
  • Lights out!
  • I ATE’NT DEAD

Archives

  • February 2010
  • January 2010
  • November 2009
  • September 2009
  • June 2009
  • September 2008
  • April 2008
  • February 2008
  • January 2008
  • November 2007
  • October 2007
  • September 2007
  • August 2007
  • July 2007
  • June 2007
  • May 2007
  • February 2007
  • January 2007
  • December 2006
  • November 2006
  • October 2006
  • August 2006
  • July 2006

Music

  • 8bit FM
  • 8bitpeoples
  • Ayland
  • K666 Radio
  • Kohina
  • www.chiptune.com

My other stuffs

  • Doodles and awful drawings

PCEngine

  • MagicEngine
  • Mednafen
  • Ootake
  • PC-Engine dev forum
  • PCengine FX
  • Tomaitheous’ Blog
rss Comments rss valid xhtml 1.1 design by jide powered by Wordpress get firefox