MCPcopy Create free account
hub / github.com/LibertyOS-Development/kernel / setfont

Method setfont

src/graphics/vga/mod.rs:284–347  ·  view source on GitHub ↗

Set font

(&mut self, font: &Font)

Source from the content-addressed store, hash-verified

282
283 // Set font
284 pub fn setfont(&mut self, font: &Font)
285 {
286 let mut seq: Port<u16> = Port::new(SEQ_ADDRESS_REG);
287 let mut graphics: Port<u16> = Port::new(GRAPHICS_ADDRESS_REG);
288 let buffer = 0xA0000 as *mut u8;
289
290 unsafe
291 {
292 // Sync reset
293 seq.write(0x0100);
294
295 // Write to plane 2
296 seq.write(0x0402);
297
298 // Sequential access
299 seq.write(0x0704);
300
301 // End reset
302 seq.write(0x0300);
303
304 // Read plane 2
305 graphics.write(0x0204);
306
307 // Disable odd/even
308 graphics.write(0x0005);
309
310 // VRAM @ 0xA0000
311 graphics.write(0x0006);
312
313 for i in 0..font.sz as usize
314 {
315 for j in 0..font.h as usize
316 {
317 // VGA offset
318 let os_vga = j + i * 32 as usize;
319
320 // Font offset
321 let os_font = j + i * font.h as usize;
322 buffer.add(os_vga).write_volatile(font.dat[os_font]);
323 }
324 }
325
326 // Sync reset
327 seq.write(0x0100);
328
329 // Write plane 0/1
330 seq.write(0x0302);
331
332 // Even/odd access
333 seq.write(0x0304);
334
335 // End reset
336 seq.write(0x0300);
337
338 // Restore defaults
339 graphics.write(0x0004);
340
341 // Resume odd/even

Callers 1

setfontFunction · 0.80

Calls 2

writeMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected