Skip to content

Instantly share code, notes, and snippets.

@sam-falvo
Created January 9, 2017 06:42
Show Gist options
  • Select an option

  • Save sam-falvo/30ed57d11855171bdadd2c0d883868e4 to your computer and use it in GitHub Desktop.

Select an option

Save sam-falvo/30ed57d11855171bdadd2c0d883868e4 to your computer and use it in GitHub Desktop.
Kestrel-3 emulator mockup GUI (output only; no event handling).
extern crate sdl2;
extern crate gemini;
use gemini::{vdi, font};
use std::string;
static SDCARD_IOR : [u16; 16] = [
0b0000000000000000,
0b0000000000000000,
0b0011111111111100,
0b0011111111111100,
0b0011111111111110,
0b0011111111111110,
0b0011111111111110,
0b0011111111111110,
0b0011111111111110,
0b0011111111111110,
0b0011111111111110,
0b0011111111111110,
0b0011111111111110,
0b0011111111111100,
0b0000111111111000,
0b0000000000000000
];
static SDCARD_XOR : [u16; 16] = [
0b0000000000000000,
0b0000000000000000,
0b0011111111111100,
0b0010000000000100,
0b0010000000000110,
0b0010000000000110,
0b0010000000000110,
0b0010000000000110,
0b0010000000000110,
0b0010000000010110,
0b0010101010110110,
0b0010101010100110,
0b0010000000001110,
0b0011111111111100,
0b0000111111111000,
0b0000000000000000
];
static INSERTED_SDCARD_XOR : [u16; 16] = [
0b0000000000000000,
0b0000000000000000,
0b0000000000000000,
0b0001111111111000,
0b0001111111111000,
0b0001111111111000,
0b0001111111111000,
0b0001111111111000,
0b0001111111111000,
0b0001111111101000,
0b0001010101001000,
0b0001010101011000,
0b0001111111110000,
0b0000000000000000,
0b0000000000000000,
0b0000000000000000
];
static DESKTOP : [u16; 16] = [
0xAAAA, 0x5555, 0xAAAA, 0x5555,
0xAAAA, 0x5555, 0xAAAA, 0x5555,
0xAAAA, 0x5555, 0xAAAA, 0x5555,
0xAAAA, 0x5555, 0xAAAA, 0x5555,
];
static BLACK : [u16; 16] = [
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
];
static WHITE : [u16; 16] = [
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
];
#[test]
fn mockup() {
let sdl = sdl2::init().unwrap();
let vdi : &mut vdi::VDI =
&mut vdi::SDL2Vdi::new(&sdl, 640, 500, "Mockup of e 0.1.0").unwrap();
// Draw the tool/status bar. Start with the background.
vdi.rect((0, 0), (640, 20), &DESKTOP);
vdi.rect((0, 20), (640, 500), &BLACK);
// Draw SD Card 0 (in this case, no SD card inserted)
vdi.copy_rect_big_endian(
(0, 0), 16, &SDCARD_IOR,
(4, 2),
(16, 16),
0b1110,
);
vdi.copy_rect_big_endian(
(0, 0), 16, &SDCARD_XOR,
(4, 2),
(16, 16),
0b0110,
);
// Draw SD card 1 (SD card inserted)
vdi.copy_rect_big_endian(
(0, 0), 16, &SDCARD_IOR,
(24, 2),
(16, 16),
0b1110,
);
vdi.copy_rect_big_endian(
(0, 0), 16, &INSERTED_SDCARD_XOR,
(24, 2),
(16, 16),
0b0110,
);
// Draw status summary
vdi.rect((46, 4), (50 + 26*8, 16), &WHITE);
vdi.frame((46, 4), (50 + 26*8, 16), 0x0000);
{
let mut t : font::TextContext = font::TextContext {
vdi: vdi,
font: &font::borrow_system_font(),
left: 48,
baseline: 13,
strike_fn: 0b0101, // Black on white text
left_margin: 0,
top_margin: 0,
right_margin: 640,
bottom_margin: 24,
};
let STR = string::String::from(" FPS: 12.345 MIPS: 3.456 ");
put_string(&mut t, &STR);
}
// Show everything to the world.
vdi.commit().unwrap();
{
// Pose, so I can take a screenshot.
use std::{thread,time};
thread::sleep(time::Duration::new(60,0));
}
}
fn put_string(t: &mut font::TextContext, s: &string::String) {
for ch in s.chars() {
t.simple_put_char(ch as u8);
}
}
@sam-falvo

sam-falvo commented Jan 9, 2017

Copy link
Copy Markdown
Author

This code produces this screen shot.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment