Skip to content

Instantly share code, notes, and snippets.

@sam-falvo
Created January 9, 2017 06:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sam-falvo/30ed57d11855171bdadd2c0d883868e4 to your computer and use it in GitHub Desktop.
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
Copy link
Author

sam-falvo commented Jan 9, 2017

This code produces this screen shot.

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