Finished a new release of the the Atari 2600 Emulator Stella for the PSP. Did some bug fixing and fixed the build system to work with latest pspsdk. It’s seems that the Stella 2.0 version is nearly finished and it will be released on the official site in the near future.

Change Log

  • Fixed build system work with latest pspsdk ans psptoolchain
  • New key mapping
  • Control menu to access advanced features during the emulation
  • Support for overclocking via the configfile

Stella Stella Stella Stella

Laucher Menu

Game Menu

Control Menu

Emulation

Download

Source

Ported the Atari 2600 Emulator Stella to the Portable Playstation. The Port is in offical project CVS at Sourceforge. Currently the version is beta and there is no offical psp build. You can download my build, but use it on your own risk.

Building

To build for the PSP, make sure psp-config is in the path and run:


   ./configure --host=psp --disable-developer
   make
   make psp-upload
   make psp-layout

Dependencies

  • psp-toolchain
  • pspsdk
  • libsdl
  • libpng

Status

  • Video: Support for scaled software mode and framebuffer hardware mode
  • Audio:Working
  • Input: Mouse emulation via Joystick
  • Snapshot: Working
  • Lauchner: Working
  • Menu : Working
  • Debugger: Not useable

KeymapMenu

  • Cross:Left Mouse Button

KeymapEmulation

  • Cross: Fire
  • Circle: Load State
  • Square: Save State
  • Triangle: Snapshot
  • Select: Console Select
  • Start: Console Reset
  • Left Trigger: Games Menu
  • Right Trigger: Command Menu

Known Bugs

  • SDL video driver is in early stage, so expect flickering and update problems
  • Stella will only compile/run with lastest sdl, pspskd and toolchain.
  • Stella will crash if SDL is compiled with –disable-stdio-redirect.
  • Also you need a custom libSDLmain which has a debugHandler for stdout.

Stella Stella

Picture 1

Picture 2

Download

Source

The Alsa-Bluetooth project project provides a way to use a bluetooth headset with Linux.They do this currently by making an alsa kernel driver which uses bluez to reach the headset.

I Wrote a KDE based user space daemon wich works as drop in replacement for the btsco daemon from the Alsa-Bluetooth package. The Programm is in early beta stage. Just start it from the Console and you will have a small kicker applet in your Systray. KBtsco has a function to discover the BAddr of your Headset. Once you did the pairing via e.g. KBluetoothd package, you can click the headset icon in the Systray to connect to the headset. All actions get visualized via On-Screen-Display in the right corner of your monitor. After connecting you can push your connect button on the headset wich actually opens the sco socket. I used this tool on daily basis with Skype. Sometimes sndbtsco seems to crash and eats all CPU time,it’s still beta i think.

Snes Snes

Picture 1

Picture 2

Download

When i started developing for the GBA i bought a Flash2Advance because the MBV2 limited me too much. I took the Parport version, because i thought it’s more likely to find a Parport driver or client tool for Linux than a usb based. But the only Linux based tool i could find was the Usb client called f2a. So i decided to write my own client or user space driver. I took the Usb sources and added Parport support. I used Wine to reverse engineer the protocol. I took me 2 weekends to analyse the Wine io debug dumps and find all patterns. I even had to write some Python scripts to get worked through the whole io debug logfiles. But finally i had a working parport driver. Later i ported the Parport io code from outb/inp calls to Kernel parport dev interface. The whole tool was later integrated into the Ucon64 suite.

source

I wrote an extension to the BlueMp3 firmware. Now you can use an loudness filter on the mp3-player. After reading the VS1001 specs, the BlueMp3 mp3-decoder, i noticed that it’s possbile to upload code to the dsp.This code can manipulate the current mp3 stream, so perfect for a loundness filter. I worked through the VS1001 application note and wrote some routines to upload that VS1001 code to the chip. Then i integrated that routines into the BlueMp3 firmware. There is patch available for the 1.8 firmware but also the binary 2.5 firmware includes the loundness filter code.

patch firmware 1.8

patch client 1.8

binary 2.4

After reading the CT article about the BlueMp3 player, i knew i need this piece of hardware. It’s an bluetooth mp3 player based on the Atmel Mega128 cpu. The firmware source is available and the client is linux based. So what do i need more to play around? I ordered the pcb and parts at Segor. The Bluetooth module and the Atmega was pre-solderd, because it’s not easy to solder TQFP’s at home. The thing was build after a hour of soldering and worked perfect. But the bluetooth signal just worked over 5 meters. So i added an Lambda/4 antenna (thanks tobi) to the bluetooth module, which extented the coverage up to 20 meters. But what i really needed was a GUI to play my mp3s. Since iam KDE user i deciced to programm my own Gui called k2send. I setup a project page a berlios for it.

Snes Snes

Picture 1

Picture 2

Project page

Download

I always loved the SNES. For me it was the last piece of hardware on which i enjoyed gaming. Nothin hit me again like Mario Kart or Yoshis Island. But that’s a different story.

Since my Amiga 500 days i loved to programm in ASM, but never really had the opportunity to code lately,since x86 ASM is really awful to code. But 68000er ASM was always fun. So the SNES could be a good target? Yep ! The Snes uses a pimped up 6502, called 65816. It’s faster, uses 16-bit operations and has 24bit address space. To get some code running on the SNES i used the WLA Assembler. So what does is look like ?

init_plane_0:
    ldx.w   #plane_0         ; assign vram location $1000 to $2116/7
    stx     $2116
    ldx     #$0000

init_plane_0_loop:
    lda.w   text_0,x        ; get ascii text data
    and     #$3f            ; we only want the first 64 characters
                            ; convert ascii to c64 screen code
    sta     $2118
    stz     $2119           ; clear unwanted bits, no h/v flipping
    inx
    cpx     #$0400          ; transfer entire screen
                            ; $20*$20=$0400  (1024 bytes)
    bne    init_plane_0_loop 

Yo, old skool. So i started to write a little Amiga Cracktro Style demo. I setup my devel enviroment using the WLA Assembler and vanilla Makefiles. Since i didn’t get my Super Wild Card Backupstation working, i tested the code against ZNES Emu. Also i wrote some python scripts to generate sine tables and copper bar includes. I made some color gardients with GIMP and converted then into asm includes to use then as raster interrupt lookuptables. Hm i think it took me week from start reading the 65816 specs, till i had this little thingy running. It’s far away from optimal code. Sometimes it’s jerking and no sound also. But so what, my first SNES release and iam proud that i got something runing on that machine. Learned how use HDMA tables and about Nintendo’s weired memory map (what is a zero page ???never had an C-64)….So what did come out? Have look at it.

Snes Snes Snes

Picture 1

Picture 2

Picture 3

Source

Not me? Just did some more or less useful stuff with my STK-500 dev boad. I took 64 leds and formed a 8×8 matrix out of them, solderd them onto 2 layers of ciruit boards. The leds are connected to 2 8Bit IO-Busses of an Atmel AT90S8515. I use one bus to select a row and the other bus to write on byte into a led-row. since iam changing the rows very quick, you won’t see an flicker. actually it’s 100hz refresh rate.

Then i a wrote a litte library in C using AVR-GCC to access the matrix like an framebuffer. Also funny stuff like scroll text is included in that lib. On top of this a wrote some code to interface the Atmel to PC’s serial port. That incoming data from the SIO get’s displayed on the led matrix. So that an echo “\xFF” > /dev/ttyS0 on the linux box will light up one row of the led matrix.

Last but not least i took a XMMS template plugin. Reworte it so the level output of the vu-meter is cutted down to 8 values. These values get sent to the PC’s serial interface.that’s it.

AVR Matrix AVR Matrix

Picture 1

Picture 2

Picture 3

Source

Binary

I managed to get my p910i synced against my kde desktop pim. i wrote a little script so setup a ppp conection via bluetooth to my p910i mobile.I used multisync as application wich is able to use my kde addressbook resource.

Here is a list of the gentoo packages i have used

  • net-wireless/bluez-utils
  • net-wireless/bluez-libs
  • app-pda/multisync (USE=”kdepim”)
  • net-dialup/ppp
  • net-analyzer/ngrep

How it works:

  • turn on the USB Bluetooth on your computer. Stop any daemon like kbluetoothd because this will interfere the communication
  • create a sync pair in multisync:

    1. first plugin is KDE Addressbook
    2. second plugin is SyncML
    3. goto SyncML plugin option and select http as transport protocol
    4. enter some password for the connection
  • setup the sync profile on your p910i

    1. open Remote Sync application
    2. goto preferences dialog and enter username syncml and the passwd you used in the multisync plugin config
    3. enter the server address http://169.254.1.65:5079 and quit the dialog
    4. goto the main window click the sync task calendar
    5. enable this task and assign the database name addressbook
  • turn on the P900 Bluetooth and connect to your computer

  • look up baddr of the p910i: hcitool scan
  • run sdptool to add a serial port service: sdptool add SP
  • run rfcomm to listen on channel 1: rfcomm listen 0 1
  • run rfcomm to connect to the P900 bluetooth serial cable: rfcomm connect 2 xx:xx:xx:xx:xx:xx 1
  • the latter rfcomm will connect to the P900 but the P900 will disconnect immediately;
  • the P900 will then initiate a connection to the computer to connect to the rfcomm listening on channel 1;
  • run the as root /usr/sbin/pppd server using: pppd rfcomm0 noauth debug nodetach 169.254.1.65:169.254.1.1
  • just say connect on the p910i if you are asked to select an account for a new internet connection. i just used my standard gprs account. don’t worry this connection won’t be used actually for syncing. just to keep the symbian os happy.
  • as root start ngrep to watch network interface: ngrep -d ppp0
  • finally you click the sync button in the Remote Sync application
  • you should see immediately some http packets on console where you have started ngrep.if not there is something wrong.

    1. check if the pppd daemon is still runing and connected
    2. double check all ips in the mobile phone setttings

known problems:

  • KDE Address plugin doesn’t handle uft-8 encoding correct, so contacts with special chars will be broken on your phone but will not yield an sync conflict on the secound or third sync.Current CVS version of multisync should address this problem, but a didn’t try the most recents checkouts.
  • pppd connection seemed to be a little unstable, try you tweak connection settings using this pppd flasgs: lcp-echo-failure 10 lcp-echo-interval 86400

if you are familiar with all tools and settings you can use this script so that can avoid using 4 open terminal windows to sync your mobile 🙂


#!/bin/sh

baddr="00:0F:DE:85:E8:E1"
ip_local="169.254.1.65"
ip_remote="169.254.1.1"

cleanup()
{
        kill -TERM $pid_2
        sleep 0.1
        kill -TERM $pid_1
        ps ax | grep "rfcomm"
        exit -1
}

debug()
{
        echo "########################################################"
        echo $*
        echo "########################################################"
}


trap cleanup 2
sdptool add SP
debug "Listen RFCOMM"
rfcomm listen 0 1 &
pid_1=$!
sleep 0.2
debug "Connect RFCOMM  ${baddr}"
rfcomm connect 2  ${baddr} 1
pid_2=$!
sleep 4
failed=0
while true
do
        debug "try PPPD $failed"
        sudo  /usr/sbin/pppd rfcomm0 noauth debug nodetach ${ip_local}:${ip_remote}
        failed=$[$failed+1]
        if [ $failed -eq 10 ]
        then
                break
        fi
        sleep 1
done
cleanup