PS3 Aspect Ratio Problem

Español: Logo Vectorial de YouTube
Español: Logo Vectorial de YouTube (Photo credit: Wikipedia)

After recently updating my PS3 firmware, I noticed that there was a new button in the menu – TV channels. The only option available at the moment seems to be YouTube. So, I downloaded the 22MB update and checked it out.

But for some reason, the new YouTube application ran at the wrong aspect ratio on my system. It was running in a 4:3 ratio instead of 16:9 HD ratio. My television is capable of Full-HD and I nominally had my PS3 configured to run at 1080i. Everything else seems to work fine including Bluray, games and normal video playback.

So, after a little investigation, turns out that the YouTube app runs at 720p and I had 720p disabled in my PS3 display settings. Enabling the 720p option in my display settings allowed the YouTube app to run correctly. It was odd, trying to watch 16:9 HD videos on a 16.9 TV with black horizontal bars.

So, I’ll start using the PS3 for streaming YouTube from now, on trial.

Linux on Acer RC111

I bought the last unit of the Acer RevoCenter RC111 at a local store a couple of days ago, for a steal – RM799 (US$263). It came with a 1TB harddisk that has Windows pre-installed on it. I wanted to install Linux on the RC111 but the Internet seems to be scant on details. So, I thought that I’d blog about how I did it.

Pre-installation
It would be a pain to install an OS onto the RC111 without a VGA port. Fortunately, the VGA port of the RC111 can be easily exposed by removing the tab covering it. Just use a sharp blade to cut the edges and press down on it slightly to break the thin strip of metal holding it in. Once that is done, the VGA port is exposed on the back.

Power up the device and you will see a minimal BIOS boot from American Megatrends. If you use a paper-clip to depress the reset button on the back of the unit when you hear a beep, the RC111 will boot from USB instead of the internal HDD.

That is the technique that I used to install Linux on the RC111.

Installation Image
It turns out that it is easier to prepare a USB installation image for Debian than it is for Centos. Therefore, I just went with Debian instead. Simply download the latest netinstall ISO and flash it onto a small USB thumb drive.

# wget http://cdimage.debian.org/debian-cd/6.0.6/i386/iso-cd/debian-6.0.6-i386-netinst.iso
# dd if=./debian-6.0.6-i386-netinst.iso of=/dev/sdb

Once that is completed, slot the USB drive into the back of the RC111 and power on the device. The indicator light on the front of the unit should flash white. The main hard-disk needs to be inserted in the RC111, otherwise it won’t boot.

At the sound of the beep, press the reset button with a bent paper clip. The indicator light on the front of the device should turn a stable purple and the RC111 will boot from the USB thumb drive.

Installation
The rest of the Debian install proceeded as normal. However, the ethernet network will not work correctly at the moment. So, it is only possible to install a bare minimal install of Debian on the device.

Post-installation
The built-in gigabit ethernet chip requires firmware that is not installed by default. It requires the firmware-realtek package that is in the non-free repository. Since the ethernet port would not work properly without the firmware, this package needs to be downloaded separately and copied over to the device and installed manually.

# dpkg -i firmware-realtek_0.28+squeeze1_all.deb

After that, the on-board gigabit ethernet will work and can be configured as usual.

All in all, it was simple enough to install an alternative OS onto the RC111. There is no reason why this should be any problem as the RC111 is basically a standard PC design with standard PC parts but with a custom BIOS.

Final Notes
At RM799 with a 1TB HDD, this is a steal and will work splendidly as a file server. I plan to stick in another 3x2TB HDD in the future for expansion.

The indicator light keeps blinking white while the machine is running. This doesn’t seem to be a problem. None of the individual HDD lights blink when in use. This is a small WMI issue that doesn’t affect the operation of each drive.

The system sometimes hangs or reboots on its own during startup. However, once it has successfully started up, it will stay running as normal.

ZTE VDSL with Any Router

I’ve configured the ZTE 931Dll VDSL modem to be used with our standard DD-WRT router. This required modifying the ZTE settings to perform VLAN bridging for the DD-WRT router.

The general steps are outlined in another blog.

However, the critical last step is different. I tried the steps at the blog but it didn’t work. Using my head, I decided to try a different setting, which worked.

Set the LAN4 trunking to:
Enable VLAN trunk: Checked
Supported VLAN Number: 0
PVID: 500

Then, configure the DD-WRT router to perform PPPoE as normal.

That’s all!

Realising the DCPU16

I decided to do a blitz and get a simple working version of the DCPU16 cpu in hardware.

This was my journey.

General Architecture
The DCPU16 architecture is not exactly standard, nor was it optimised for hardware implementation. However, since it is a simple CPU, the architecture itself is not too difficult to deal with.

Pipeline
The main pipeline stages for regular instructions would consist of the following stages: fetch, decode, load A, load B, execute, and save A. My design pipelines it using a 8-stage pipeline, with 1-clock cycles for each stage, layered over 2-instructions. Therefore, each instruction would effectively take 4-stages or 4-clocks to complete.

Memory
To feed this pipeline, two independent memory busses are needed. I’d hazard to call it a Harvard architecture because one memory bus is used purely for loading data while the other bus is used for fetching instructions and storing data. This will work fine for internal memory access only. However if it is necessary to access memory mapped I/O, this will need to be modified slightly.

There are two ways to modify it. One bus can be used for data load/store operations (operand A) while the other is used for instruction fetch and data load (operand B) operations. The other way to modify it is to use the two spare cycles to do external memory access instead.

Decoder
The decoder’s only job is mainly to decode the effective address calculation. Decoding this can be a little pain as the processor supports a whole number of addressing modes, various direct, indirect and immediate modes. So, this is the trickiest part of the core. In fact, this is also the file with the most code in it.

ALU
Nothing much to say here except that it uses unsigned numbers, which is fine for the adder but not so fine for the multiplier. My design uses a 17×17 multiplier instead of a 16×16 one. The conditional code testing is also part of the ALU decoding. This can be changed in later revisions.

Hazards
Due to pipe-lining, there will be some data and control hazards. My design does not take into account data hazards at the moment. My assumption is that the compilers will take care of things or code can be manually re-ordered slightly.

All in all, it took me almost a week plus two iterations to get it done.

Now, it’s released on github.