The Complete Guide for Setting Up Subsonic Music Server on Mac

A compiled guide to setting up Subsonic Music Server on Mac OS 10.8.2 from the beginning till the end.

The Ultimate Guide to Download Like A Pro

Follow this 3 parts of guide to download like a pro!

Exporting Good Quality Video to YouTube using Final Cut Pro X

A tutorial that teaches you to export high quality video using the highest compression for uploading to YouTube, all using Final Cut Pro X

Tuesday, April 1, 2014

Installing and Running DOSBox on PS Vita (PSP Emulator) on TN-V8 Exploit

I missed DOS games. And luckily PS Vita has an emulator ported from DOSBox allowing you run DOS game on the go.

There are many builds of DOSBox for PSP available, with the immediate search showing the following versions (DD/MM/YY)

03/08/08, 26/07/08, 07/06/08, 25/06/08, 02/01/08, 29/01/08, 26/11/07



However, I noticed that not all builds will work on the PSP emulator in PS Vita exploited using TN-V.

Perhaps I should rephrase, all the builds will run fine without selecting core=dynamic options. Unfortunately, this option is essential and a MUST to run the game smoothly while other options such as simple and normal is not enough. From my testing thus far, the only build that work fine with core=dynamic option is a build from 26/11/07.

Enough with the introduction, let's get started to install DOSBox on your PSP.

First, grab a build of DOSBox from a list here and install it on your PSP. I highly recommend to download the build from 26/11/07 here.

* Follow my previous tutorial on how to install homebrew on PSP here if you do not know how to do so.

Next, launch DOSBox and make sure you do not encounter any error such as 'bus error', 'inst error', or 'data error'. As mentioned, these error will only occur if you select core=dynamic options in other builds except 2007 ones here.

Error image

A successful launch will look similar to the screenshot below:
Success image

You may have noticed now that there is no on-screen keyboard to enter any input. So what is the way to do that? Well, the most common way is to create a dosbox.conf file and insert the commands that you want to input in the [autoexec] section.

Following shows a fresh standard dosbox.conf:

* The bolded text is the most commonly tweak settings.

[sdl]
# fullscreen -- Start dosbox directly in fullscreen.
# fulldouble -- Use double buffering in fullscreen.
# fullresolution -- What resolution to use for fullscreen: original or fixed size (e.g. 1024x768).
# windowresolution -- Scale the window to this size IF the output device supports hardware scaling.
# output -- What to use for output: surface,overlay,opengl,openglnb,ddraw.
# autolock -- Mouse will automatically lock, if you click on the screen.
# sensitiviy -- Mouse sensitivity.
# waitonerror -- Wait before closing the console if dosbox has an error.
# priority -- Priority levels for dosbox: lowest,lower,normal,higher,highest,pause (when not focussed).
#   Second entry behind the comma is for when dosbox is not focused/minimized.
# mapperfile -- File used to load/save the key/event mappings from.
# usescancodes -- Avoid usage of symkeys, might not work on all operating systems.

fullscreen=true
fulldouble=false
fullresolution=original
windowresolution=original
output=surface
autolock=true
sensitivity=35
waitonerror=true
INPUTMAP up up 
INPUTMAP right right 
INPUTMAP down down 
INPUTMAP left left 
INPUTMAP triangle d 
INPUTMAP square lshift
INPUTMAP cross lctrl
INPUTMAP circle laltpriority=higher,normal
mapperfile=mapper.txt
usescancodes=true
keyhint=true

[dosbox]
# language -- Select another language file.
# memsize -- Amount of memory dosbox has in megabytes.
# machine -- The type of machine tries to emulate:hercules,cga,tandy,pcjr,vga.
# captures -- Directory where things like wave,midi,screenshot get captured.

language=
machine=vga
captures=capture
memsize=10

[render]
# frameskip -- How many frames dosbox skips before drawing one.
# aspect -- Do aspect correction, if your output method doesn't support scaling this can slow things down!.
# scaler -- Scaler used to enlarge/enhance low resolution modes.
# Supported are none,normal2x,normal3x,advmame2x,advmame3x,hq2x,hq3x,
# 2xsai,super2xsai,supereagle,advinterp2x,advinterp3x,
# tv2x,tv3x,rgb2x,rgb3x,scan2x,scan3x.

frameskip=0
aspect=false
scaler=normal2x

[cpu]
# core -- CPU Core used in emulation: normal,simple,dynamic,auto.
#    auto switches from normal to dynamic if appropriate.
# cycles -- Amount of instructions dosbox tries to emulate each millisecond.
# Setting this value too high results in sound dropouts and lags.
# You can also let DOSBox guess the correct value by setting it to max.
# The default setting (auto) switches to max if appropriate.
# cycleup   -- Amount of cycles to increase/decrease with keycombo.
# cycledown    Setting it lower than 100 will be a percentage.

core=dynamic
cycles=sync
cycleup=2500
cycledown=400
autocycle=true
mincycles=600
maxcycles=3000

[mixer]
# nosound -- Enable silent mode, sound is still emulated though.
# rate -- Mixer sample rate, setting any devices higher than this will
#    probably lower their sound quality.
# blocksize -- Mixer block size, larger blocks might help sound stuttering
#    but sound will also be more lagged.
# prebuffer -- How many milliseconds of data to keep on top of the blocksize.

nosound=false
rate=22050
blocksize=2048
prebuffer=10

[midi]
# mpu401 -- Type of MPU-401 to emulate: none, uart or intelligent.
# device -- Device that will receive the MIDI data from MPU-401.
# This can be default,alsa,oss,win32,coreaudio,none.
# config -- Special configuration options for the device. In Windows put
# the id of the device you want to use. See README for details.

mpu401=intelligent
device=default
config=

[sblaster]
# sbtype -- Type of sblaster to emulate:none,sb1,sb2,sbpro1,sbpro2,sb16.
# sbbase,irq,dma,hdma -- The IO/IRQ/DMA/High DMA address of the soundblaster.
# mixer -- Allow the soundblaster mixer to modify the dosbox mixer.
# oplmode -- Type of OPL emulation: auto,cms,opl2,dualopl2,opl3.
#  On auto the mode is determined by sblaster type.
#  All OPL modes are 'Adlib', except for CMS.
# oplrate -- Sample rate of OPL music emulation.

sbtype=sb16
sbbase=220
irq=7
dma=1
hdma=5
mixer=true
oplmode=auto
oplrate=22050

[gus]
# gus -- Enable the Gravis Ultrasound emulation.
# gusbase,irq1,irq2,dma1,dma2 -- The IO/IRQ/DMA addresses of the 
#  Gravis Ultrasound. (Same IRQ's and DMA's are OK.)
# gusrate -- Sample rate of Ultrasound emulation.
# ultradir -- Path to Ultrasound directory.  In this directory
#   there should be a MIDI directory that contains
#   the patch files for GUS playback.  Patch sets used
#   with Timidity should work fine.

gus=true
gusrate=22050
gusbase=240
irq1=5
irq2=5
dma1=3
dma2=3
ultradir=C:\ULTRASND

[speaker]
# pcspeaker -- Enable PC-Speaker emulation.
# pcrate -- Sample rate of the PC-Speaker sound generation.
# tandy -- Enable Tandy Sound System emulation (off,on,auto).
# For auto Tandysound emulation is present only if machine is set to tandy.
# tandyrate -- Sample rate of the Tandy 3-Voice generation.
# disney -- Enable Disney Sound Source emulation.

pcspeaker=true
pcrate=22050
tandy=auto
tandyrate=22050
disney=true

[joystick]
# joysticktype -- Type of joystick to emulate: auto (default), none,
#  2axis (supports two joysticks), 4axis,
#  fcs (Thrustmaster), ch (CH Flightstick).
#  none disables joystick emulation.
#  auto chooses emulation depending on real joystick(s).
# timed -- enable timed intervals for axis. (false is old style behaviour).
# autofire -- continuously fires as long as you keep the button pressed.
# swap34 -- swap the 3rd and the 4th axis. can be useful for certain joysticks.
# buttonwrap -- enable button wrapping at the number of emulated buttons.

joysticktype=2axis
timed=false
autofire=false
swap34=false
buttonwrap=true

[serial]
# serial1-4 -- set type of device connected to com port.
#    Can be disabled, dummy, modem, nullmodem, directserial.
#    Additional parameters must be in the same line in the form of
#    parameter:value. Parameter for all types is irq.
#    for directserial: realport (required), rxdelay (optional).
#    for modem: listenport (optional).
#    for nullmodem: server, rxdelay, txdelay, telnet, usedtr,
#    transparent, port, inhsocket (all optional).
#    Example: serial1=modem listenport:5000

serial1=dummy
serial2=dummy
serial3=disabled
serial4=disabled

[dos]
# xms -- Enable XMS support.
# ems -- Enable EMS support.
# umb -- Enable UMB support.
# keyboardlayout -- Language code of the keyboard layout (or none).

xms=true
ems=true
umb=true
keyboardlayout=none

[ipx]
# ipx -- Enable ipx over UDP/IP emulation.

ipx=false

[autoexec]
# Lines in this section will be run at startup.
SYSOPT clock 333

This config file is used to tweak the DOSBox emulator environment such as CPU type, CPU speed, memory, sound. Fortunately, the default settings works fine without the need for any modification.

There are several important things to note:
- You CANNOT allocate more than 10MB of memory. Anything larger than that will cause a permanent blank screen when launching DOSBox. Fortunately the CPU speed matters most compared to the memory size.

- You can only use the core=dynamic option with the 2007 build. Having this option set with other build will result in exception error such as 'bus error', 'inst error', or 'data error', like the figure below:
- DOSBox on PS Vita do not have any on-screen virtual keyboard. The most convenience way is map the button input from PS Vita to the keyboard in DOSBox using the INPUTMAP.

- Any command that you typed in [autoexec] section will be executed when launching DOSBox. Usually commands like mount and INPUTMAPPER are put here.

Following show a series of commands that I want DOSBox to execute upon launch. Assuming that I had MARIO.EXE placed in ms0:/dosbox/. In particular, it will mount my ms0:/dosbox as the C: drive. Go to C: drive. And then execute MARIO.EXE game.

[autoexec]
mount c ms0:/dosbox
c:
mario.exe

As you joyfully bashing the buttons, you will find that none of the buttons that you pressed works. The reason is simple, we haven't map our buttons to the keyboard in DOSBox yet! To do this, we are going to use the INPUTMAP command placed in [autoexec] section.


Mapping the Inputs (PS Vita Buttons <-> DOSBox Keyboard)

The command syntax to map button using INPUTMAP is as follows
INPUTMAP <PS Vita Button> <Keyboard Button>

In particular, the command INPUTMAP square lshift will map the Square button of your PS Vita to the keyboard button Left Shift in DOSBox.


[autoexec]

INPUTMAP up up 
INPUTMAP right right 
INPUTMAP down down 
INPUTMAP left left 
INPUTMAP triangle d 
INPUTMAP square lshift
INPUTMAP cross lctrl
INPUTMAP circle lalt


mount c ms0:/dosbox
c:
mario.exe



Now launching DOSBox again and the input still does not work. This is a very fatal common mistake that people made. Don't mistaken me. The mapping is correct. However, we didn't really 'tell' the game to use the mapping.

The correct way to do is to execute the game using the INPUTMAP EXEC command rather than launching the game directly.

[autoexec]

INPUTMAP up up 
INPUTMAP right right 
INPUTMAP down down 
INPUTMAP left left 
INPUTMAP triangle d 
INPUTMAP square lshift
INPUTMAP cross lctrl
INPUTMAP circle lalt


mount c ms0:/dosbox
c:
INPUTMAP EXEC mario.exe


Now you may noticed that every time I want to change the game I have to modify the dosbox.conf files, which is practically inconvenient and unaccessible when you are on the go without any computer nearby. Luckily people had thought of it and created a program called DosBox Navigator. This program is essentially a file browser allowing you to browse and open any files within its root folder.

To start, grab a copy of DosBox Navigator here and extract the contents somewhere on your PS Vita memory stick. For convenience I simply put it on ms0:/dosbox/doscore

The executable for DosNavigator is DN.COM. So we will have to modify our dosbox.conf accordingly.
[autoexec]
mount c ms0:/dosbox/doscore
c:
dn.com

This will launch DosNavigator every time we launch the DosBox application.

Creating Different Input Key Profile for Each Game

Now another question arise, we will have to create a different input profile for different games since not every game will use the same key binding. For instance, some game will require additional key such as WSAD for movement instead of the arrow key.

The solution to this is to create a .bat file (batch file) for each game. For example, I will have a .bat file for Mario and another one for Prince of Persia. These .bat file shall contain all the commands for INPUTMAP and mount point for launching the game.

mario.bat - For running Mario
@ECHO ON
INPUTMAP up up
INPUTMAP right right
INPUTMAP down down
INPUTMAP left left
INPUTMAP triangle d
INPUTMAP square lshift
INPUTMAP cross lctrl
INPUTMAP circle lalt
mount c ms0:/dosbox/game/mario
c:
INPUTMAP exec mario.exe


prince.bat - For running Prince of Persia 1
@ECHO ON
INPUTMAP up up
INPUTMAP right right
INPUTMAP down down
INPUTMAP left left
INPUTMAP triangle down
INPUTMAP square lshift
INPUTMAP cross up
INPUTMAP circle circle
INPUTMAP start enter
INPUTMAP select esc
mount c ms0:/dosbox/game/pop1
c:
INPUTMAP exec prince

Using DosNavigator, I can then simply open these .bat file and they should launch the game for me using the right input map as defined in the .bat file.

FAQ

Q: Can I run legacy windows such as Windows 95 on DOSBox for PSP?
A: I had tried but encounter 'Out of Memory' error since I couldn't allocate more than 10 MB in any of the DOSBox for PSP build that I tried.

Q: Can I allocate more than 10MB of memory for DOSBox?
A: No. Allocating any memory greater than that will result in a permanent blank screen on DOSBox. Don't worry though 10MB is enough to run most of the DOS games. The only thing matter is the CPU speed, which the 333MHz on PSP is capable to handle.




A Complete Tutorial to Install Homebrew on PS Vita (PSP) on TN-V8 Exploit

Following my successful attempt to exploit my PS Vita using NumBlast game, I shall now share my experience of installing home-brew (commonly known as emulators) on PS Vita in the form of pictorial.

First thing first, download some homebrews from a sea of home brew listed here.

Extract the home-brew and paste it in following structure in the exact manner. In other words, the folder name PSP and GAME must be CAPITALIZED. I start by creating it in my exploit game saves folder.

[+]  [PSP]
[|-] [GAME]
	[+] [Homebrew Title 1]
	[|-] EBOOT.PBP
	[|-] Any other files from the extracted homebrew
	[+] [Homebrew Title 2]
	[|-] EBOOT.PBP
	[|-] Any other files from the extracted homebrew

[] denotes folder.

Several things to note:
  • It is possible to put MULTIPLE homebrew under the same directory.
  • Each Homebrew folder must have a EBOOT.PBP or FBOOT.PBP file directly underneath it. They must not placed in nested folders. These are the main binary executables for PSP. You may think of it as .EXE in Windows.

For example, say I'm going to install both gpSP (GBA emulator) and SNES9xTYL (SNES emulator).




For convenience, I moved the two extracted folders into my NumBlast Exploit Game Saves/PSP/GAME. Make sure that the folder directly level below contains EBOOT.PBP or FBOOT.PBP. These CANNOT be placed in nested folder such as /PSP/GAME/gpSP/gpSP/EBOOT.PBP


Verify that EBOOT.PBP is indeed located below the folder gpSP.


Do the same for Snes9x.




Go to the root folder, i.e. PSP, and compress it using your favorite compressor such as WinRAR or WinZIP.




Caution: The compressed file must be named INSTALL.ZIP (all CAPITALIZED) and using the 'Store' compression mode. Double check that it is not named as INSTALL.ZIP.ZIP. To verify, if you're in Windows, go to Control Panel > Folder Option and select Show all known file extensions. You won't have this mistake if you manually type the Archive name as INSTALL.ZIP like shown in the screenshot above.

Copy INSTALL.ZIP to your exploit game saves folder.



Open up OpenCMA and transfer the game saves to your PS Vita. When asked to overwrite, select YES.




Launch your exploit game, in my case, NumBlast, wait for XMB, and select the memory card. You should see it at the top of the list. Note that it will only show a randomly selected homebrew title in the archive file instead of showing all of them.



You cannot launch it by pressing the Circle button since it is still in Archive. Press Triangle button and select Install from the menu.



It might take a while if your archive contains lots of homebrews.



Note: By pressing install, PSP will extract all the contents into your memory stick. To be exact, they will be stored in the following path:

ms0:/PSP/GAME/YOUR HOMEBREW TITLE




Upon finished extracting the archive, PSP will prompt you to delete the archive. Simply select YES as there is no need to keep it.






Note that the newly installed homebrew will not show up immediately on your memory stick. The reason is it is not refreshed yet.



To force a memory stick content refresh, navigate to any menu such as Saved Data Utility and go to view Memory Stick again. The newly installed homebrew will show up there.






Installing PSP/PSX ISOs

Installing PSP ISOs is also done in similar way. In other words, you will placed the GAME.ISO into the exploited game saves folder and transfer it to your PS Vita using OpenCMA. After that launch your exploited game, wait for XMB to launch, go to memory card and press the Triangle button to install. Unlike homebrew, the installation will moved them to ms0:/ISO instead of ms0:/PSP/GAME.

Recommended Homebrew to Install

If you are into Retro gaming like I do, the following homebrews (or I should say emulator) should get you started:
GBA: gpSP
GB/GBC: MasterBoy
SNES: snes9xTYL

Refer here for a list of emulators for download across all generations thus far.


If emulators alone does not satisfy your crave of hunger, visit here for a huge list of homebrews, plugins, and even XMB themes to install.



FAQ

Q: How should I install PSP ISOs?
A: Installing PSP ISOs is also done in similar way as shown above. Pressing Install, however, will moved them to ms0:/ISO instead of ms0:/PSP/GAME.

Q: How should I add more data after installing the homebrew. For example, I had installed the gpSP homebrew (GBA emulator) for PSP and I want to transfer ROMs to it.
A: There are two ways to do this.

Method 1: FTP Access

The most straightforward and less hassle way is to simply access your PSP memory stick using FTP server. TN-V8 already has a FTP server built-in. Simply enable it to launch the FTP server. Then use your favorite FTP client such as FileZilla or WinSCP to access.




After you had login to your PSP via FTP, go to /PSP/GAME/gpSP/ and simply place your ROMs into the ROMs folder.

Note that the file transfer is averaging between 700KB - 1.5MB per second. So this might not be the ideal choice if you want to transfer any large file for more than 500 MB. If you are patient enough, by all means, go ahead. But make sure you disable Energy Saving or Screen Lockout since PSP is default to enter standby mode after 10 minutes, which will break the FTP file transfer. Else, resort to Method 2 below.




Method 2: Copy the files you want to transfer into your Exploit GameSaves and transfer them via OpenCMA.

This method is only suggested if the files that you are going to transfer is really huge such as those exceeding 500MB. The reason is FTP transfer is painfully slow, averaging in around 700KB - 1.5MB per second.



After transferring the files to your PS Vita using OpenCMA, they will be found in your exploit game saves in ms0:/PSP/GAME/SAVEDATA/GAME_TITLE_EXPLOIT. You will then need to move it around using file browser manager such as the famous PSP Filer homebrew (the latest one being 6.6)


Alternatively, you could also try to move things around using FTP access. However, I failed to moved any ISO files from the GameSaves into /ISO folder using FTP.






Q: Could you recommend a list of homebrew to download?
Refer to the Section: Recommeded Homebrews for a list.


Saturday, March 29, 2014

A Complete Guide to Install Windows 95 on DOSBox

Looking at how OS had marvelled over these three decades starting from the 90s somehow makes me reminiscent the good old days of Win 3.1, Win95 and Win98. I certainly missed playing my first ever computer games such as Prince of Persia, Mario, and Doom.

And so embark my journey to relive those memories again in the modern machine. To do that, I selected DosBox, which is an emulator that fully emulates those legacy machines. Like many others, I started off to search for related tutorials and what-not on Google, only to found that most of them are either too fragmented or requires me to piece up the tidbits.

To save time, I had decided to write up this tutorial just so you wouldn't had the same experience that I did.

So, you will need:

  • DosBox
  • MS-DOS Boot Disc
  • Windows 95 Installation Disc
  • Hard disk image that host your Win95 partition


1. Preparing the Files

This is what the fresh installation of DOSBox would contains.



Download a copy of DOS boot disk - 622C.IMG from http://www.rloe.com/randytheracer/622c.zip. For unknown reason I could't boot when using the DOS 6.22 boot disk from http://www.allbootdisks.com/download/iso.html.

Just like any VM, I know that I will need hard disk image to host the Windows 95 OS. Many tutorials covers the steps to build your own hard disk image, requiring somewhat technical understanding. To avoid these complications, I simply choose a blank pre-formatted FAT16 .img from https://sites.google.com/site/dotalshoff/games/dosbox.

Don't be surprise with the capacity as the file is compressed and barely reaches 200 KB even for 1GB. This is because they are empty disk image. For me personally, 1GB is more than enough. DosBox requires the hard disk image to be flatten out in size instead of dynamically growing like many VM implementations nowadays. Upon extraction you will get the full blown size of the selected disk size.

Lastly, I then downloaded Win95 Installation Disc (win95_en.iso) from http://www.downloadfreeos.blogspot.tw/2013/06/windows-95.html. The version I chose was  Windows 95 (4.00.950).

Having downloaded all of them, I then moved them to DosBox folder.


2. Copy Windows95 Installation Files to the Blank Hard Disk Image


Launch DosBox



Since the blank image I downloaded is already formatted as FAT16, I don't have to format it again. The following just to verify that.

Mount the empty hard disk image (hdd-1gb.img) by typing

imgmount 2 hdd-1gb.img -size 512,63,64,520 -fs none


Note that I did not specify the drive name such as c or d since there I assume there is still no file system (FAT16, FAT32, NTFS) on it. Instead, I use 2 which will mount it on native system hda. (0-1 will mount to fda and fdb (floppy disk a, b) and 2-3 will mount to hda and hdb).

In addition, it is also necessary to specify the exact disk geometry (i.e. sectors, cylinders) to let the file system utility that we'll use next (fdisk) know where the disk ends. If you grab the pre-formatted hard disk image from https://sites.google.com/site/dotalshoff/games/dosbox, simply replace the value matching the ones you downloaded. For instance, I will enter 512,63,64,520 since I'm downloading the 1GB image.

256MB image:    512,63,16,520
512MB image:    512,63,32,520
520MB image:    512,63,16,1023
1GB image:        512,63,64,520
2GB image:        512,63,64,1023


After mounting the disk I then boot into MS-DOS 6.22 by typing

boot 622c.img




Verify that the disk is already formatted using fdisk.





Restart DosBox and mount the image as drive c by typing:

imgmount c hdd-1gb.img


Extract the contents of the Windows 95 installation disc (win95_en.iso) using WinRAR.



After that mount it as drive d by typing:

mount d .\win95_en

. implies current directory of DOSBox.



Make a new directory called WIN95 in C:/ which is your empty hard disk image. We will later copy the entire content of folder WIN95 from Windows 95 installation disk here.

c:
mkdir WIN95
copy D:\WIN95\*.*


3. Installing Windows 95

After that, start the installation by:
c:
cd WIN95
setup /is
(* /is flag prevent ScanDisk from running)

Follow the wizard and it will ask for a CD-Key at some point. I use the following:

12095-OEM-0004226-12233 

* More CD-Key can be found here.

After finishing the installation the system will restart, i.e. DOSBox will quit. You'll have to relaunch it again.

To boot from the hard disk image, simply type the following:

imgmount 2 hdd-1gb.img -size 512,63,64,520 -fs none
boot -l c

Note: Some tutorials make some mistake in this step by typing the following:

imgmount c hdd-1gb.img
boot hdd-1gb.img

This will result in Invalid System Disk.



... and voila! The nostalgic boot screen of Windows 95! 





Post Setup

Instead of typing these every time you launch DosBox, you may add them in the [AutoExec] section in DosBox configuration file. You can edit it by:





To prevent graphical glitch, lower the CPU speed in the configuration file:



FAQ

Q: I cannot enter backspace \ . It is mapped to right bracket ].
A: Start DOSBox with the switch -startmapper. (Reference: http://www.dosbox.com/wiki/Keymapper). To do so, right click at the DOSBox shortcut found on your Desktop and add the switch in the Shortcut Tab.


The next time you start you will see the Keymapper. Click on the \ and the 'Add' button, then press your Backspace key. Delete the binding for [ and ] to avoid conflict.


Resource Links

DOSBox Hard Disk Image (preformatted as FAT16 and available in 256M, 512M, 1G and 2G image)
Windows 95 Installation Disk / Setup Files
Windows OS Product Codes and CD Keys

References

Best viewed with Firefox. Powered by Blogger.