Isle Display Modes
Published 01 Aug 2025, Updated 20 May 2026 (DRAFT)
Graphics go a long way to defining your computer's capabilities and character. It's tempting to go for one resolution and console-like simplicity, but this limits what users can do with your computer in both interesting and frustrating ways. Over the years, I've experimented with many resolutions and colour depths for my FPGA projects. For Isle, I think I've struck the right balance, however I'd encourage you to make your own choices.
This page accompanies the display controller and bitmap graphics chapters. If you're new to the project, read Isle FPGA Computer for an introduction. See Isle Index for more pages.
I'm rewriting this page in May 2026 to reflect changes in Isle display modes.
Resolution
Display Resolution
I wanted Isle to support native 16:9 and 4:3 displays while minimising the differences between resolutions. I started with two resolutions, 1366 x 768 for widescreen and 1024 x 768 for 4:3. While not the most obvious choices, these resolutions have significant advantages:
- Share the same vertical resolution; easy to adapt graphics for 16:9 and 4:3
- Pixel clocks within the range of affordable FPGAs (65 and 72 MHz)
- LCD panels readily available (new and from old computers)
- Supported by most computer displays
- Lend themselves to efficient memory use for bitmap graphics
Talk about square pixels and (Verilator) simulation speed too.
Now I've selected 1366x768 and 1024x768, I won't be creating bitmap graphics at those resolutions; that's more pixels and resources than I need. In the next section we'll see how we use 672x384 as our native graphics resolution, but first we need to consider other display resolutions.
I wanted Isle to work with TVs and capture cards, which pushed me in the direction of HD resolutions (1280x720 and 1920x1080) and 640x480 was for a long time a lowest common denominator. However, none of these resolutions obviously fit with 1366x768 and 1024x768, but I realised that by slightly cropping 672x384 I could get 640x360 which would work as a bitmap resolution for 720p, 1080p, and 640x480.
1280x720 is good for TVs and video capture. So, why not 1280x720 as the primary resolution? 1280x720 LCD panels are rare. 720p displays typically use 1366x768 panels and scale the video up, which blurs text and simple graphics.
The Isle display controller includes six modes (all with a 60 Hz refresh rate):
- 640 x 480
- 1024 x 768
- 1366 x 768
- 672 x 384
- 1280 x 720
- 1920 x 1080
672x384 is custom-designed for simulations (Verilator/SDL), matching our native graphics resolution and improving performance versus simulating higher resolutions.
I have a blog post covering many standard display timings: Video Timings: VGA, 720p, 1080p.
Bitmap Resolution
Isle bitmap graphics are flexible, but it's helpful to define default resolutions that work well with our display modes and 64 KiB vram so they work on small FPGAs. We have low and high resolutions with different horizontal resolutions for widescreen and 4:3.
- LoRes: 336x192 (63 kpix) and 256x192 (48 kpix)
- Dual 16-colour (4-bit) buffers
- Single 256-colour (8-bit) buffer
- HiRes: 672x384 (252 kpix) and 512x384 (192 kpix)
- Dual 2-colour (1-bit) buffers
- Single 4-colour (2-bit) buffer
Keeping to 64 KiB of vram allows Isle to run on small, low-cost FPGAs, and I believe we've achieved a good balance here, with colourful and high-resolution options for widescreen and 4:3 displays.
Looking at computer history, we can see there's a jump in what's possible once we reach a horizontal resolution of around 600 pixels: GUIs, paint programs, music software, strategy games, and high-quality text. Above 600 pixels, things become sharper and more detailed, but the advantages are more modest, and the hardware demands rise quickly.
Our vram is bit write, so even in monochrome mode, the graphics engine can update individual pixels directly. You can read more about the hardware design of vram in the bitmap graphics chapter.
Isle has a dedicated Unicode text mode that you can overlay on bitmap graphics. You can have colourful graphics and good-quality text.
Resolution Summary
The follow table summarises Isle graphics resolutions, including text mode.
| Resolution | Native | 1366x768 | 1024x768 | Other* |
|---|---|---|---|---|
| Text Mode | 84x24 | 84x24 | 64x24 | 80x22 |
| LoRes | 336x192 @2x | 336x192 @4x | 256x192 @4x | 320x180 @4x |
| HiRes | 672x384 @1x | 672x384 @2x | 512x384 @2x | 640x360 @2x |
Colour Palette
Isle uses a 15-bit (RGB555) colour palette; a pragmatic choice between the range of colours and hardware resources. Each channel of red, green, and blue has 32 possible values, ranging from 0x0 to 0x1F in hexadecimal. Two 15-bit colours fit into a 32-bit word. 16-bit (RGB565) offers more colours by assigning an extra bit to green, but this gives greys a colour tint and makes it harder for people to interpret colours values. Instead, we can use the 16th bit for transparency.
Contemporary computers almost invariably use 24-bit colour (RGB888). However, using 24-bit colour doubles memory storage and bandwidth requirements for relatively little gain for our simple computer.
I also considered 12-bit (RGB444) colour, but it still consumes two bytes of memory while reducing the colour palette from 32,768 to 4,096 colours. The main advantage of 12-bit colour is that it's easy to read as three hex digits, e.g. 0xFC0 for bright yellow.
Isle includes the rgbconv tool to convert to/from 15-bit and 24-bit colours.
Next step: Display Controller, Bitmap Graphics, or Isle Index