From d6ce30924713db3a1355e0c644adb9e845f1df4e Mon Sep 17 00:00:00 2001 From: Yuhao Zhou Date: Wed, 10 Apr 2019 00:38:31 +0800 Subject: [PATCH 01/36] Fix some review issues. --- kernel/src/arch/mipsel/compiler_rt.rs | 8 -------- kernel/src/arch/mipsel/context.rs | 4 ++-- kernel/src/arch/mipsel/cpu.rs | 3 ++- 3 files changed, 4 insertions(+), 11 deletions(-) delete mode 100644 kernel/src/arch/mipsel/compiler_rt.rs diff --git a/kernel/src/arch/mipsel/compiler_rt.rs b/kernel/src/arch/mipsel/compiler_rt.rs deleted file mode 100644 index b49a3ce7..00000000 --- a/kernel/src/arch/mipsel/compiler_rt.rs +++ /dev/null @@ -1,8 +0,0 @@ -//! Workaround for missing compiler-builtin symbols -//! -//! [atomic](http://llvm.org/docs/Atomics.html#libcalls-atomic) - -#[no_mangle] -pub extern fn abort() { - panic!("abort"); -} diff --git a/kernel/src/arch/mipsel/context.rs b/kernel/src/arch/mipsel/context.rs index 7e473adb..e0502ee9 100644 --- a/kernel/src/arch/mipsel/context.rs +++ b/kernel/src/arch/mipsel/context.rs @@ -50,8 +50,8 @@ pub struct TrapFrame { pub sp: usize, pub fp: usize, pub ra: usize, - /// Reserve space for hartid - pub _hartid: usize, + /// Reserved + pub reserved: usize, } impl TrapFrame { diff --git a/kernel/src/arch/mipsel/cpu.rs b/kernel/src/arch/mipsel/cpu.rs index ea27d1f8..764d4721 100644 --- a/kernel/src/arch/mipsel/cpu.rs +++ b/kernel/src/arch/mipsel/cpu.rs @@ -1,4 +1,5 @@ use mips::registers::cp0; +use mips::instructions; use crate::consts::MAX_CPU_NUM; use core::ptr::{read_volatile, write_volatile}; @@ -21,7 +22,7 @@ pub unsafe fn start_others(hart_mask: usize) { } pub fn halt() { - /* nothing to do */ + unsafe { instructions::wait(); } } pub unsafe fn exit_in_qemu(error_code: u8) -> ! { From 657395784df6a3fc2a05ae246a9097c2445cd2ff Mon Sep 17 00:00:00 2001 From: Yuhao Zhou Date: Mon, 15 Apr 2019 13:02:06 +0800 Subject: [PATCH 02/36] Fix compile errors. --- kernel/src/arch/mipsel/cpu.rs | 1 - kernel/src/arch/mipsel/mod.rs | 1 - 2 files changed, 2 deletions(-) diff --git a/kernel/src/arch/mipsel/cpu.rs b/kernel/src/arch/mipsel/cpu.rs index 0d216169..764d4721 100644 --- a/kernel/src/arch/mipsel/cpu.rs +++ b/kernel/src/arch/mipsel/cpu.rs @@ -2,7 +2,6 @@ use mips::registers::cp0; use mips::instructions; use crate::consts::MAX_CPU_NUM; use core::ptr::{read_volatile, write_volatile}; -use mips::registers::cp0; static mut STARTED: [bool; MAX_CPU_NUM] = [false; MAX_CPU_NUM]; diff --git a/kernel/src/arch/mipsel/mod.rs b/kernel/src/arch/mipsel/mod.rs index 74103db0..cf139427 100644 --- a/kernel/src/arch/mipsel/mod.rs +++ b/kernel/src/arch/mipsel/mod.rs @@ -1,4 +1,3 @@ -pub mod compiler_rt; pub mod consts; pub mod cpu; pub mod driver; From bfa4c9d47eb78cf0563eff3bfd20bcc0bf971b96 Mon Sep 17 00:00:00 2001 From: Yuhao Zhou Date: Mon, 15 Apr 2019 14:14:07 +0800 Subject: [PATCH 03/36] Support TLS for MIPS. --- kernel/src/arch/mipsel/boot/context.S | 56 +++++++++++-------- kernel/src/arch/mipsel/boot/trap.S | 3 + kernel/src/arch/mipsel/context.rs | 23 ++++---- kernel/src/arch/mipsel/interrupt.rs | 80 +++++++++++++++++++++++++++ kernel/src/syscall/mod.rs | 28 ++++++++++ 5 files changed, 156 insertions(+), 34 deletions(-) diff --git a/kernel/src/arch/mipsel/boot/context.S b/kernel/src/arch/mipsel/boot/context.S index 534ede54..d81e9612 100644 --- a/kernel/src/arch/mipsel/boot/context.S +++ b/kernel/src/arch/mipsel/boot/context.S @@ -7,22 +7,23 @@ .globl switch_context .extern _root_page_table_ptr .extern _cur_kstack_ptr +.extern _cur_tls switch_context: // save from's registers addi sp, sp, (-4*14) sw sp, 0(a0) sw ra, 0(sp) - sw s0, 2*4(sp) - sw s1, 3*4(sp) - sw s2, 4*4(sp) - sw s3, 5*4(sp) - sw s4, 6*4(sp) - sw s5, 7*4(sp) - sw s6, 8*4(sp) - sw s7, 9*4(sp) - sw s8, 10*4(sp) - sw gp, 11*4(sp) + sw s0, 4*4(sp) + sw s1, 5*4(sp) + sw s2, 6*4(sp) + sw s3, 7*4(sp) + sw s4, 8*4(sp) + sw s5, 9*4(sp) + sw s6, 10*4(sp) + sw s7, 11*4(sp) + sw s8, 12*4(sp) + sw gp, 13*4(sp) // sw ra, 12*4(sp) // sw sp, 13*4(sp) @@ -31,27 +32,34 @@ switch_context: lw s1, 0(s0) sw s1, 4(sp) + // save TLS + la s2, _cur_tls + lw s1, 0(s2) + sw s1, 2*4(sp) + // restore to's registers lw sp, 0(a1) + + // restore page table address lw s1, 4(sp) sw s1, 0(s0) - // restore kstack ptr - // la s0, _cur_kstack_ptr - // addi s1, sp, 4 * 14 - // sw s1, 0(s0) + // restore TLS + lw s1, 2*4(sp) + sw s1, 0(s2) + mtc0 s1, $4, 2 // cp0.user_local lw ra, 0(sp) - lw s0, 2*4(sp) - lw s1, 3*4(sp) - lw s2, 4*4(sp) - lw s3, 5*4(sp) - lw s4, 6*4(sp) - lw s5, 7*4(sp) - lw s6, 8*4(sp) - lw s7, 9*4(sp) - lw s8, 10*4(sp) - lw gp, 11*4(sp) + lw s0, 4*4(sp) + lw s1, 5*4(sp) + lw s2, 6*4(sp) + lw s3, 7*4(sp) + lw s4, 8*4(sp) + lw s5, 9*4(sp) + lw s6, 10*4(sp) + lw s7, 11*4(sp) + lw s8, 12*4(sp) + lw gp, 13*4(sp) addi sp, sp, (4*14) sw zero, 0(a1) diff --git a/kernel/src/arch/mipsel/boot/trap.S b/kernel/src/arch/mipsel/boot/trap.S index 2d403436..44d48d25 100644 --- a/kernel/src/arch/mipsel/boot/trap.S +++ b/kernel/src/arch/mipsel/boot/trap.S @@ -177,3 +177,6 @@ _root_page_table_ptr: .global _cur_kstack_ptr _cur_kstack_ptr: .space 4 # 4bytes + .global _cur_tls +_cur_tls: + .space 4 # 4bytes diff --git a/kernel/src/arch/mipsel/context.rs b/kernel/src/arch/mipsel/context.rs index e5e2053f..eec9bdeb 100644 --- a/kernel/src/arch/mipsel/context.rs +++ b/kernel/src/arch/mipsel/context.rs @@ -130,17 +130,21 @@ struct ContextData { ra: usize, /// Page table token satp: usize, - /// Callee-saved registers + /// s[0] = TLS + /// s[1] = reserved + /// s[2..11] = Callee-saved registers s: [usize; 12], } impl ContextData { - fn new(satp: usize) -> Self { - ContextData { + fn new(satp: usize, tls: usize) -> Self { + let mut context = ContextData { ra: trap_return as usize, - satp, + satp: satp, ..ContextData::default() - } + }; + context.s[0] = tls; + context } } @@ -191,7 +195,7 @@ impl Context { ); InitStack { - context: ContextData::new(satp), + context: ContextData::new(satp, 0), tf: TrapFrame::new_kernel_thread(entry, arg, kstack_top), } .push_at(kstack_top) @@ -215,7 +219,7 @@ impl Context { ); InitStack { - context: ContextData::new(satp), + context: ContextData::new(satp, 0), tf: TrapFrame::new_user_thread(entry_addr, ustack_top), } .push_at(kstack_top) @@ -228,7 +232,7 @@ impl Context { /// All the other registers are same as the original. pub unsafe fn new_fork(tf: &TrapFrame, kstack_top: usize, satp: usize) -> Self { InitStack { - context: ContextData::new(satp), + context: ContextData::new(satp, 0), tf: { let mut tf = tf.clone(); // fork function's ret value, the new process is 0 @@ -254,11 +258,10 @@ impl Context { tls: usize, ) -> Self { InitStack { - context: ContextData::new(satp), + context: ContextData::new(satp, tls), tf: { let mut tf = tf.clone(); tf.sp = ustack_top; // sp - tf.v1 = tls; tf.v0 = 0; // return value tf }, diff --git a/kernel/src/arch/mipsel/interrupt.rs b/kernel/src/arch/mipsel/interrupt.rs index bc605472..5ae84dd2 100644 --- a/kernel/src/arch/mipsel/interrupt.rs +++ b/kernel/src/arch/mipsel/interrupt.rs @@ -70,6 +70,14 @@ pub extern "C" fn rust_trap(tf: &mut TrapFrame) { E::TLBModification => page_fault(tf), E::TLBLoadMiss => page_fault(tf), E::TLBStoreMiss => page_fault(tf), + E::ReservedInstruction => { + if !reserved_inst(tf) { + error!("Unhandled Exception @ CPU{}: {:?} ", 0, tf.cause.cause()); + crate::trap::error(tf) + } else { + tf.epc = tf.epc + 4; + } + } _ => { error!("Unhandled Exception @ CPU{}: {:?} ", 0, tf.cause.cause()); crate::trap::error(tf) @@ -149,6 +157,78 @@ fn syscall(tf: &mut TrapFrame) { } } +fn set_trapframe_register(rt: usize, val: usize, tf: &mut TrapFrame) { + match rt { + 1 => tf.at = val, + 2 => tf.v0 = val, + 3 => tf.v1 = val, + 4 => tf.a0 = val, + 5 => tf.a1 = val, + 6 => tf.a2 = val, + 7 => tf.a3 = val, + 8 => tf.t0 = val, + 9 => tf.t1 = val, + 10 => tf.t2 = val, + 11 => tf.t3 = val, + 12 => tf.t4 = val, + 13 => tf.t5 = val, + 14 => tf.t6 = val, + 15 => tf.t7 = val, + 16 => tf.s0 = val, + 17 => tf.s1 = val, + 18 => tf.s2 = val, + 19 => tf.s3 = val, + 20 => tf.s4 = val, + 21 => tf.s5 = val, + 22 => tf.s6 = val, + 23 => tf.s7 = val, + 24 => tf.t8 = val, + 25 => tf.t9 = val, + 26 => tf.k0 = val, + 27 => tf.k1 = val, + 28 => tf.gp = val, + 29 => tf.sp = val, + 30 => tf.fp = val, + 31 => tf.ra = val, + _ => { + error!("Unknown register {:?} ", rt); + crate::trap::error(tf) + } + } +} + +fn reserved_inst(tf: &mut TrapFrame) -> bool { + let inst = unsafe { + *(tf.epc as *const usize) + }; + + let opcode = inst >> 26; + let rt = (inst >> 16) & 0b11111; + let rd = (inst >> 11) & 0b11111; + let sel = (inst >> 6) & 0b111; + let format = inst & 0b111111; + + if opcode == 0b011111 && format == 0b111011 { + // RDHWR + if rd == 29 && sel == 0 { + info!("Read TLS by rdhdr"); + extern "C" { + fn _cur_tls(); + } + + let tls = unsafe { + *(_cur_tls as *const usize) + }; + set_trapframe_register(rt, tls, tf); + return true; + } else { + return false; + } + } + + false +} + fn page_fault(tf: &mut TrapFrame) { // TODO: set access/dirty bit let addr = tf.vaddr; diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index 0787d835..11558d33 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -288,8 +288,15 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> isize { let x86_64_ret = x86_64_syscall(id, args, tf); #[cfg(not(target_arch = "x86_64"))] let x86_64_ret = None; + + #[cfg(target_arch = "mips")] + let mips_ret = mips_syscall(id, args, tf); + #[cfg(not(target_arch = "mips"))] + let mips_ret = None; if let Some(ret) = x86_64_ret { ret + } else if let Some(ret) = mips_ret { + ret } else { error!("unknown syscall id: {}, args: {:x?}", id, args); crate::trap::error(tf); @@ -309,6 +316,27 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> isize { } } +#[cfg(target_arch = "mips")] +fn mips_syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> Option { + let ret = match id { + SYS_SET_THREAD_AREA => { + extern "C" { + fn _cur_tls(); + } + + unsafe { + asm!("mtc0 $0, $$4, 2": :"r"(args[0])); + *(_cur_tls as *mut usize) = args[0]; + } + Ok(0) + } + _ => { + return None; + } + }; + Some(ret) +} + #[cfg(target_arch = "x86_64")] fn x86_64_syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> Option { let ret = match id { From 9075a172ad726672eb7e1d6e43e4c9a435368f7a Mon Sep 17 00:00:00 2001 From: Yuhao Zhou Date: Mon, 15 Apr 2019 15:45:09 +0800 Subject: [PATCH 04/36] Fix iovec size for MIPSn32. --- kernel/src/syscall/fs.rs | 3 +++ kernel/src/syscall/mod.rs | 3 +++ 2 files changed, 6 insertions(+) diff --git a/kernel/src/syscall/fs.rs b/kernel/src/syscall/fs.rs index b16fe736..d94e8b57 100644 --- a/kernel/src/syscall/fs.rs +++ b/kernel/src/syscall/fs.rs @@ -1074,6 +1074,9 @@ pub struct IoVec { /// Starting address base: *mut u8, /// Number of bytes to transfer + #[cfg(target_arch = "mips")] + len: u32, + #[cfg(not(target_arch = "mips"))] len: u64, } diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index 11558d33..961f794a 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -319,6 +319,9 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> isize { #[cfg(target_arch = "mips")] fn mips_syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> Option { let ret = match id { + SYS_OPEN => sys_open(args[0] as *const u8, args[1], args[2]), + SYS_DUP2 => sys_dup2(args[0], args[1]), + SYS_MMAP2 => sys_mmap(args[0], args[1], args[2], args[3], args[4], args[5] * 4096), SYS_SET_THREAD_AREA => { extern "C" { fn _cur_tls(); From dc90cb5a8d97c537ffd0df97a0845fc8bb57f354 Mon Sep 17 00:00:00 2001 From: Yuhao Zhou Date: Mon, 15 Apr 2019 18:09:48 +0800 Subject: [PATCH 05/36] Fix pgfault, fstat syscall convention. biscuit/ls works! --- kernel/src/arch/mipsel/interrupt.rs | 16 +++++++ kernel/src/syscall/fs.rs | 67 ++++++++++++++++++++++++++++- kernel/src/syscall/mem.rs | 15 +++++++ kernel/src/syscall/mod.rs | 6 +++ 4 files changed, 102 insertions(+), 2 deletions(-) diff --git a/kernel/src/arch/mipsel/interrupt.rs b/kernel/src/arch/mipsel/interrupt.rs index 5ae84dd2..1c45132a 100644 --- a/kernel/src/arch/mipsel/interrupt.rs +++ b/kernel/src/arch/mipsel/interrupt.rs @@ -78,6 +78,9 @@ pub extern "C" fn rust_trap(tf: &mut TrapFrame) { tf.epc = tf.epc + 4; } } + E::CoprocessorUnusable => { + tf.epc = tf.epc + 4; + } _ => { error!("Unhandled Exception @ CPU{}: {:?} ", 0, tf.cause.cause()); crate::trap::error(tf) @@ -244,6 +247,19 @@ fn page_fault(tf: &mut TrapFrame) { tlb_entry.entry_lo0.get_pfn() << 12, tlb_entry.entry_lo1.get_pfn() << 12 ); + + let tlb_valid = if virt_addr.page_number() & 1 == 0 { + tlb_entry.entry_lo0.valid() + } else { + tlb_entry.entry_lo1.valid() + }; + + if !tlb_valid { + if !crate::memory::handle_page_fault(addr) { + crate::trap::error(tf); + } + } + tlb::write_tlb_random(tlb_entry) } Err(()) => { diff --git a/kernel/src/syscall/fs.rs b/kernel/src/syscall/fs.rs index d94e8b57..7035b310 100644 --- a/kernel/src/syscall/fs.rs +++ b/kernel/src/syscall/fs.rs @@ -913,7 +913,48 @@ pub struct Stat { ctime: Timespec, } -#[cfg(not(target_arch = "x86_64"))] +#[cfg(target_arch = "mips")] +#[repr(C)] +#[derive(Debug)] +pub struct Stat { + /// ID of device containing file + dev: u64, + /// padding + __pad1: u64, + /// inode number + ino: u64, + /// file type and mode + mode: StatMode, + /// number of hard links + nlink: u32, + + /// user ID of owner + uid: u32, + /// group ID of owner + gid: u32, + /// device ID (if special file) + rdev: u64, + /// padding + __pad2: u64, + /// total size, in bytes + size: u64, + + /// last access time + atime: Timespec, + /// last modification time + mtime: Timespec, + /// last status change time + ctime: Timespec, + + /// blocksize for filesystem I/O + blksize: u32, + /// padding + __pad3: u32, + /// number of 512B blocks allocated + blocks: u64, +} + +#[cfg(not(any(target_arch = "x86_64", target_arch = "mips"))] #[repr(C)] #[derive(Debug)] pub struct Stat { @@ -1042,7 +1083,29 @@ impl From for Stat { } } - #[cfg(not(target_arch = "x86_64"))] + #[cfg(target_arch = "mips")] + fn from(info: Metadata) -> Self { + Stat { + dev: info.dev as u64, + ino: info.inode as u64, + mode: StatMode::from_type_mode(info.type_, info.mode as u16), + nlink: info.nlinks as u32, + uid: info.uid as u32, + gid: info.gid as u32, + rdev: 0, + size: info.size as u64, + blksize: info.blk_size as u32, + blocks: info.blocks as u64, + atime: info.atime, + mtime: info.mtime, + ctime: info.ctime, + __pad1: 0, + __pad2: 0, + __pad3: 0, + } + } + + #[cfg(not(any(target_arch = "x86_64", target_arch="mips")))] fn from(info: Metadata) -> Self { Stat { dev: info.dev as u64, diff --git a/kernel/src/syscall/mem.rs b/kernel/src/syscall/mem.rs index 1c5bee92..0b471c25 100644 --- a/kernel/src/syscall/mem.rs +++ b/kernel/src/syscall/mem.rs @@ -123,6 +123,21 @@ bitflags! { } } +#[cfg(target_arch = "mips")] +bitflags! { + pub struct MmapFlags: usize { + /// Changes are shared. + const SHARED = 1 << 0; + /// Changes are private. + const PRIVATE = 1 << 1; + /// Place the mapping at the exact address + const FIXED = 1 << 4; + /// The mapping is not backed by any file. (non-POSIX) + const ANONYMOUS = 0x800; + } +} + +#[cfg(not(target_arch = "mips"))] bitflags! { pub struct MmapFlags: usize { /// Changes are shared. diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index 961f794a..efc5c0f6 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -322,6 +322,12 @@ fn mips_syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> Option sys_open(args[0] as *const u8, args[1], args[2]), SYS_DUP2 => sys_dup2(args[0], args[1]), SYS_MMAP2 => sys_mmap(args[0], args[1], args[2], args[3], args[4], args[5] * 4096), + SYS_FSTAT64 => sys_fstat(args[0], args[1] as *mut Stat), + SYS_STAT64 => sys_stat(args[0] as *const u8, args[1] as *mut Stat), + SYS_FCNTL64 => { + warn!("sys_fcntl64 is unimplemented"); + Ok(0) + } SYS_SET_THREAD_AREA => { extern "C" { fn _cur_tls(); From 9532311c1e4915341ad655f5a556e89daae22ba7 Mon Sep 17 00:00:00 2001 From: Yuhao Zhou Date: Tue, 16 Apr 2019 01:31:00 +0800 Subject: [PATCH 06/36] Copy TLS data in sys_fork. --- kernel/src/arch/mipsel/context.rs | 4 +++- kernel/src/arch/mipsel/interrupt.rs | 3 ++- kernel/src/syscall/mod.rs | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/kernel/src/arch/mipsel/context.rs b/kernel/src/arch/mipsel/context.rs index eec9bdeb..f84ae707 100644 --- a/kernel/src/arch/mipsel/context.rs +++ b/kernel/src/arch/mipsel/context.rs @@ -120,6 +120,7 @@ impl InitStack { extern "C" { fn trap_return(); + fn _cur_tls(); } /// Saved registers for kernel context switches. @@ -231,8 +232,9 @@ impl Context { /// The SATP register will be set to `satp`. /// All the other registers are same as the original. pub unsafe fn new_fork(tf: &TrapFrame, kstack_top: usize, satp: usize) -> Self { + let tls = unsafe { *(_cur_tls as *const usize) }; InitStack { - context: ContextData::new(satp, 0), + context: ContextData::new(satp, tls), tf: { let mut tf = tf.clone(); // fork function's ret value, the new process is 0 diff --git a/kernel/src/arch/mipsel/interrupt.rs b/kernel/src/arch/mipsel/interrupt.rs index 1c45132a..1036ffb2 100644 --- a/kernel/src/arch/mipsel/interrupt.rs +++ b/kernel/src/arch/mipsel/interrupt.rs @@ -214,7 +214,6 @@ fn reserved_inst(tf: &mut TrapFrame) -> bool { if opcode == 0b011111 && format == 0b111011 { // RDHWR if rd == 29 && sel == 0 { - info!("Read TLS by rdhdr"); extern "C" { fn _cur_tls(); } @@ -222,7 +221,9 @@ fn reserved_inst(tf: &mut TrapFrame) -> bool { let tls = unsafe { *(_cur_tls as *const usize) }; + set_trapframe_register(rt, tls, tf); + info!("Read TLS by rdhdr {:x} to register {:?}", tls, rt); return true; } else { return false; diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index efc5c0f6..6082afc3 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -319,6 +319,7 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> isize { #[cfg(target_arch = "mips")] fn mips_syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> Option { let ret = match id { + SYS_FORK => sys_fork(tf), SYS_OPEN => sys_open(args[0] as *const u8, args[1], args[2]), SYS_DUP2 => sys_dup2(args[0], args[1]), SYS_MMAP2 => sys_mmap(args[0], args[1], args[2], args[3], args[4], args[5] * 4096), @@ -329,6 +330,7 @@ fn mips_syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> Option { + info!("set_thread_area: tls: 0x{:x}", args[0]); extern "C" { fn _cur_tls(); } From f5fe3ce4f3f34f8c7a3f29674d27fce879de4013 Mon Sep 17 00:00:00 2001 From: Yuhao Zhou Date: Tue, 16 Apr 2019 02:10:36 +0800 Subject: [PATCH 07/36] Move userstack to 0x60000000. --- kernel/src/arch/mipsel/consts.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/src/arch/mipsel/consts.rs b/kernel/src/arch/mipsel/consts.rs index ff2ef0cd..84ae103e 100644 --- a/kernel/src/arch/mipsel/consts.rs +++ b/kernel/src/arch/mipsel/consts.rs @@ -6,8 +6,8 @@ pub const KERNEL_OFFSET: usize = 0x80100000; pub const MEMORY_OFFSET: usize = 0x8000_0000; -pub const USER_STACK_OFFSET: usize = 0x80000000 - USER_STACK_SIZE; +pub const USER_STACK_OFFSET: usize = 0x70000000 - USER_STACK_SIZE; pub const USER_STACK_SIZE: usize = 0x10000; -pub const USER32_STACK_OFFSET: usize = 0x80000000 - USER_STACK_SIZE; +pub const USER32_STACK_OFFSET: usize = 0x70000000 - USER_STACK_SIZE; pub const MAX_DTB_SIZE: usize = 0x2000; From 189c4aa5c6ba13380b49a8aa1a7b527dcc3a85fb Mon Sep 17 00:00:00 2001 From: Yuhao Zhou Date: Tue, 16 Apr 2019 02:42:44 +0800 Subject: [PATCH 08/36] Support sys_pipe for MIPS. --- kernel/src/syscall/mod.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index 6082afc3..86666ba0 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -325,10 +325,23 @@ fn mips_syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> Option sys_mmap(args[0], args[1], args[2], args[3], args[4], args[5] * 4096), SYS_FSTAT64 => sys_fstat(args[0], args[1] as *mut Stat), SYS_STAT64 => sys_stat(args[0] as *const u8, args[1] as *mut Stat), + SYS_PIPE => { + let fd_ptr = args[0] as *mut u32; + match sys_pipe(fd_ptr) { + Ok(code) => { + unsafe { + tf.v0 = *fd_ptr as usize; + tf.v1 = *(fd_ptr.add(1)) as usize; + } + Ok(tf.v0) + }, + Err(err) => Err(err) + } + }, SYS_FCNTL64 => { warn!("sys_fcntl64 is unimplemented"); Ok(0) - } + }, SYS_SET_THREAD_AREA => { info!("set_thread_area: tls: 0x{:x}", args[0]); extern "C" { From cd2a2e23bb4441e9a579e00778a6771f0f3f0d85 Mon Sep 17 00:00:00 2001 From: Jiajie Chen Date: Wed, 17 Apr 2019 00:26:30 +0800 Subject: [PATCH 09/36] Fix addr2line for new format --- tools/addr2line.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/addr2line.py b/tools/addr2line.py index a7a1e79d..f02b415b 100644 --- a/tools/addr2line.py +++ b/tools/addr2line.py @@ -10,11 +10,11 @@ arch = sys.argv[2] mode = sys.argv[3] print('--------------------------------------') for line in lines: - match = re.search('(#[0-9]+ )(0x[0-9A-F]+)( fp 0x[0-9A-F]+)', line) + match = re.search('#([0-9]+) PC: (0x[0-9A-F]+) FP: (0x[0-9A-F]+)', line) if match: addr = match.group(2) process = subprocess.run([addrline, '-e', 'target/{0}/{1}/rcore'.format(arch, mode), '-f', '-C', addr], capture_output=True) res = process.stdout.decode('utf-8') - print('{0}{1}{3} {2}'.format(match.group(1), match.group(2), res.strip(), match.group(3))) + print('#{0} PC: {1} FP: {3} {2}'.format(match.group(1), match.group(2), res.strip(), match.group(3))) else: print(line, end='') From b5f194d20f3f7b2f9c3c6ee9156997c2c796054e Mon Sep 17 00:00:00 2001 From: Jiajie Chen Date: Wed, 17 Apr 2019 00:28:34 +0800 Subject: [PATCH 10/36] Fix get_ppid for init process --- kernel/src/syscall/proc.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kernel/src/syscall/proc.rs b/kernel/src/syscall/proc.rs index c6cc4ece..6f33cf83 100644 --- a/kernel/src/syscall/proc.rs +++ b/kernel/src/syscall/proc.rs @@ -231,7 +231,11 @@ pub fn sys_gettid() -> SysResult { /// Get the parent process id pub fn sys_getppid() -> SysResult { - Ok(process().parent.as_ref().unwrap().lock().pid.get()) + if let Some(ref parent) = process().parent.as_ref() { + Ok(parent.lock().pid.get()) + } else { + Ok(0) + } } /// Exit the current thread From 69449d4eb1d11a149f123a4f30e1b110ac89b335 Mon Sep 17 00:00:00 2001 From: Jiajie Chen Date: Wed, 17 Apr 2019 00:44:11 +0800 Subject: [PATCH 11/36] Pretend stdin/stdout as a tty --- kernel/src/fs/stdio.rs | 10 +++++++++- kernel/src/syscall/mod.rs | 20 ++++++++++++++++++-- kernel/src/util/mod.rs | 2 +- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/kernel/src/fs/stdio.rs b/kernel/src/fs/stdio.rs index d2ceda2a..2595926d 100644 --- a/kernel/src/fs/stdio.rs +++ b/kernel/src/fs/stdio.rs @@ -57,7 +57,15 @@ macro_rules! impl_inode { fn move_(&self, _old_name: &str, _target: &Arc, _new_name: &str) -> Result<()> { Err(FsError::NotDir) } fn find(&self, _name: &str) -> Result> { Err(FsError::NotDir) } fn get_entry(&self, _id: usize) -> Result { Err(FsError::NotDir) } - fn io_control(&self, _cmd: u32, _data: u32) -> Result<()> { Err(FsError::NotSupported) } + fn io_control(&self, cmd: u32, data: u32) -> Result<()> { + match cmd { + TIOCGWINSZ => { + // pretend to be tty + Ok(()) + }, + _ => Err(FsError::NotSupported) + } + } fn fs(&self) -> Arc { unimplemented!() } fn as_any_ref(&self) -> &Any { self } }; diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index ef120523..8deeaa22 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -194,12 +194,20 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> isize { warn!("sys_getegid is unimplemented"); Ok(0) } + SYS_SETPGID => { + warn!("sys_setpgid is unimplemented"); + Ok(0) + } // 110 SYS_GETPPID => sys_getppid(), SYS_SETSID => { warn!("sys_setsid is unimplemented"); Ok(0) } + SYS_GETPGID => { + warn!("sys_getpgid is unimplemented"); + Ok(0) + } SYS_SIGALTSTACK => { warn!("sys_sigaltstack is unimplemented"); Ok(0) @@ -254,9 +262,17 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> isize { } SYS_NEWFSTATAT => sys_fstatat(args[0], args[1] as *const u8, args[2] as *mut Stat, args[3]), SYS_UNLINKAT => sys_unlinkat(args[0], args[1] as *const u8, args[2]), - SYS_READLINKAT => sys_readlinkat(args[0], args[1] as *const u8, args[2] as *mut u8, args[3]), + SYS_READLINKAT => { + sys_readlinkat(args[0], args[1] as *const u8, args[2] as *mut u8, args[3]) + } SYS_RENAMEAT => sys_renameat(args[0], args[1] as *const u8, args[2], args[3] as *const u8), - SYS_LINKAT => sys_linkat(args[0], args[1] as *const u8, args[2], args[3] as *const u8, args[4]), + SYS_LINKAT => sys_linkat( + args[0], + args[1] as *const u8, + args[2], + args[3] as *const u8, + args[4], + ), SYS_SYMLINKAT => Err(SysError::EACCES), SYS_FACCESSAT => sys_faccessat(args[0], args[1] as *const u8, args[2], args[3]), // 280 diff --git a/kernel/src/util/mod.rs b/kernel/src/util/mod.rs index ee7eb609..e1ecb670 100644 --- a/kernel/src/util/mod.rs +++ b/kernel/src/util/mod.rs @@ -83,4 +83,4 @@ pub fn write(addr: usize, content: T) { pub fn read(addr: usize) -> T { let cell = (addr) as *const T; unsafe { read_volatile(cell) } -} \ No newline at end of file +} From b56692562697a71bc93ac404df5b2444acfdeb18 Mon Sep 17 00:00:00 2001 From: WangRunji Date: Wed, 17 Apr 2019 00:45:44 +0800 Subject: [PATCH 12/36] fix Makefile on RISCV and PC --- kernel/Cargo.toml | 2 ++ kernel/Makefile | 14 ++++---------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/kernel/Cargo.toml b/kernel/Cargo.toml index 5d95f9c6..a0de505b 100644 --- a/kernel/Cargo.toml +++ b/kernel/Cargo.toml @@ -31,6 +31,8 @@ board_malta = ["link_user"] board_mipssim = ["link_user"] # for thinpad board_thinpad = ["link_user"] +# for x86 PC +board_pc = ["link_user"] # Hard link user program link_user = [] # Run cmdline instead of user shell, useful for automatic testing diff --git a/kernel/Makefile b/kernel/Makefile index 41f4e42f..d21f3f5d 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -58,16 +58,13 @@ ifeq ($(arch), $(filter $(arch), aarch64 mipsel)) #link user img, so use original image export SFSIMG = $(user_dir)/build/$(arch).img else -ifeq ($(arch), x86_64) # board is pc or qemu? ifeq ($(board), pc) #link user img, so use original image export SFSIMG = $(user_dir)/build/$(arch).img -features += link_user else export SFSIMG = $(user_dir)/build/$(arch).qcow2 endif # pc or qemu -endif # x86_64 endif # aarch64 mipsel ifeq ($(arch), aarch64) @@ -98,17 +95,16 @@ qemu_net_opts := ifeq ($(arch), x86_64) qemu_opts += \ - -drive format=raw,file=$(bootimage) + -drive format=raw,file=$(bootimage) \ + -serial mon:stdio \ + -m 4G \ + -device isa-debug-exit ifeq ($(board), none) qemu_opts += \ -drive format=qcow2,file=$(SFSIMG),media=disk,cache=writeback,id=sfsimg,if=none \ -device ahci,id=ahci0 \ -device ide-drive,drive=sfsimg,bus=ahci0.0 endif -qemu_opts += \ - -serial mon:stdio \ - -m 4G \ - -device isa-debug-exit ifeq ($(pci_passthru), ) qemu_net_opts += \ -netdev type=tap,id=net0,script=no,downscript=no \ @@ -201,11 +197,9 @@ features += sv39 riscv_pk_args += --enable-sv39 endif -ifneq ($(arch), x86_64) ifneq ($(board), none) features += board_$(board) endif -endif build_args := --target targets/$(target).json --features "$(features)" From 48c40497ac7e091b4623125cd1dafd9e36541363 Mon Sep 17 00:00:00 2001 From: WangRunji Date: Wed, 17 Apr 2019 00:46:39 +0800 Subject: [PATCH 13/36] update crate uart_16550 to v0.2. deny unused_must_use. --- kernel/Cargo.lock | 27 +++++++------------------ kernel/Cargo.toml | 2 +- kernel/src/arch/x86_64/driver/serial.rs | 7 ++----- kernel/src/arch/x86_64/driver/vga.rs | 4 ++-- kernel/src/lib.rs | 1 + 5 files changed, 13 insertions(+), 28 deletions(-) diff --git a/kernel/Cargo.lock b/kernel/Cargo.lock index a4eacbc0..7ca71d53 100644 --- a/kernel/Cargo.lock +++ b/kernel/Cargo.lock @@ -393,9 +393,9 @@ dependencies = [ "riscv 0.5.0 (git+https://github.com/rcore-os/riscv)", "smoltcp 0.5.0 (git+https://github.com/rcore-os/smoltcp)", "spin 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "uart_16550 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "uart_16550 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "volatile 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "x86_64 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "x86_64 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "xmas-elf 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -555,11 +555,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "uart_16550" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "x86_64 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", + "x86_64 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -615,18 +615,6 @@ dependencies = [ "raw-cpuid 6.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "x86_64" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bit_field 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "os_bootinfo 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "usize_conversions 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ux 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "x86_64" version = "0.3.6" @@ -642,7 +630,7 @@ dependencies = [ [[package]] name = "x86_64" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "array-init 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -734,7 +722,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" "checksum tock-registers 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3a385d94f3f62e60445a0adb9ff8d9621faa272234530d4c0f848ec98f88e316" "checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169" -"checksum uart_16550 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "269f953d8de3226f7c065c589c7b4a3e83d10a419c7c3b5e2e0f197e6acc966e" +"checksum uart_16550 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b9392f60931fe3bf8f24e0a15ee4f51528770f1d64c48768ab66571334d95b0" "checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526" "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" "checksum usize_conversions 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f70329e2cbe45d6c97a5112daad40c34cd9a4e18edb5a2a18fefeb584d8d25e5" @@ -744,8 +732,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" "checksum x86 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "841e1ca5a87068718a2a26f2473c6f93cf3b8119f9778fa0ae4b39b664d9e66a" -"checksum x86_64 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "2bd647af1614659e1febec1d681231aea4ebda4818bf55a578aff02f3e4db4b4" "checksum x86_64 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f9258d7e2dd25008d69e8c9e9ee37865887a5e1e3d06a62f1cb3f6c209e6f177" -"checksum x86_64 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8f7e92e985f4052118fd69f2b366c67e91288c0f01f4ae52610dce236425dfa0" +"checksum x86_64 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1d0a8201f52d2c7b373c7243dcdfb27c0dd5012f221ef6a126f507ee82005204" "checksum xmas-elf 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "22678df5df766e8d1e5d609da69f0c3132d794edf6ab5e75e7abcd2270d4cf58" "checksum zero 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5f1bc8a6b2005884962297587045002d8cfb8dcec9db332f4ca216ddc5de82c5" diff --git a/kernel/Cargo.toml b/kernel/Cargo.toml index a0de505b..a2262932 100644 --- a/kernel/Cargo.toml +++ b/kernel/Cargo.toml @@ -70,7 +70,7 @@ bootloader = { git = "https://github.com/rcore-os/bootloader" } apic = { git = "https://github.com/rcore-os/apic-rs" } x86_64 = "0.5" raw-cpuid = "6.0" -uart_16550 = "0.1" +uart_16550 = "0.2" pc-keyboard = "0.5" [target.'cfg(any(target_arch = "riscv32", target_arch = "riscv64"))'.dependencies] diff --git a/kernel/src/arch/x86_64/driver/serial.rs b/kernel/src/arch/x86_64/driver/serial.rs index ce84af55..68655e2c 100644 --- a/kernel/src/arch/x86_64/driver/serial.rs +++ b/kernel/src/arch/x86_64/driver/serial.rs @@ -1,5 +1,3 @@ -// Copy from Redox - use once::*; use spin::Mutex; use uart_16550::SerialPort; @@ -7,8 +5,8 @@ use x86_64::instructions::port::Port; use crate::arch::interrupt::{consts, enable_irq}; -pub static COM1: Mutex = Mutex::new(SerialPort::new(0x3F8)); -pub static COM2: Mutex = Mutex::new(SerialPort::new(0x2F8)); +pub static COM1: Mutex = Mutex::new(unsafe { SerialPort::new(0x3F8) }); +pub static COM2: Mutex = Mutex::new(unsafe { SerialPort::new(0x2F8) }); pub fn init() { assert_has_not_been_called!("serial::init must be called only once"); @@ -27,7 +25,6 @@ impl SerialRead for SerialPort { fn receive(&mut self) -> u8 { unsafe { let ports = self as *mut _ as *mut [Port; 6]; - let _line_sts = &(*ports)[5]; let data = &(*ports)[0]; data.read() } diff --git a/kernel/src/arch/x86_64/driver/vga.rs b/kernel/src/arch/x86_64/driver/vga.rs index 70556614..41f6b9f7 100644 --- a/kernel/src/arch/x86_64/driver/vga.rs +++ b/kernel/src/arch/x86_64/driver/vga.rs @@ -206,11 +206,11 @@ impl AsciiConsole for VgaWriter { CSI::CursorMove(dx, dy) => { let x = (self.pos.row.0 as i8 + dx).max(0) as u8; let y = (self.pos.col.0 as i8 + dy).max(0) as u8; - self.set_pos(Position::new(Row(x), Col(y))); + self.set_pos(Position::new(Row(x), Col(y))).unwrap(); } CSI::CursorMoveLine(dx) => { let x = (self.pos.row.0 as i8 + dx).max(0) as u8; - self.set_pos(Position::new(Row(x), Col(0))); + self.set_pos(Position::new(Row(x), Col(0))).unwrap(); } _ => {} } diff --git a/kernel/src/lib.rs b/kernel/src/lib.rs index 779b75f4..fa5f0a65 100644 --- a/kernel/src/lib.rs +++ b/kernel/src/lib.rs @@ -6,6 +6,7 @@ #![feature(optin_builtin_traits)] #![feature(panic_info_message)] #![feature(global_asm)] +#![deny(unused_must_use)] #![no_std] // just keep it ... From 9b6e963b1902ea8c69d62205a29ae55720fc1b87 Mon Sep 17 00:00:00 2001 From: Jiajie Chen Date: Wed, 17 Apr 2019 00:59:00 +0800 Subject: [PATCH 14/36] Add missing constants --- kernel/src/arch/riscv32/cpu.rs | 2 +- kernel/src/fs/stdio.rs | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/kernel/src/arch/riscv32/cpu.rs b/kernel/src/arch/riscv32/cpu.rs index b0a4836b..f519e6f8 100644 --- a/kernel/src/arch/riscv32/cpu.rs +++ b/kernel/src/arch/riscv32/cpu.rs @@ -24,7 +24,7 @@ pub unsafe fn has_started(cpu_id: usize) -> bool { } pub unsafe fn start_others(hart_mask: usize) { - for cpu_id in 0..MAX_CPU_NUM { + for cpu_id in 0..32 { if (hart_mask >> cpu_id) & 1 != 0 { write_volatile(&mut STARTED[cpu_id], true); } diff --git a/kernel/src/fs/stdio.rs b/kernel/src/fs/stdio.rs index 2595926d..3fc60621 100644 --- a/kernel/src/fs/stdio.rs +++ b/kernel/src/fs/stdio.rs @@ -43,6 +43,11 @@ lazy_static! { pub static ref STDOUT: Arc = Arc::new(Stdout::default()); } +const TCGETS: u32 = 0x5401; +const TIOCGPGRP: u32 = 0x540F; +const TIOCSPGRP: u32 = 0x5410; +const TIOCGWINSZ: u32 = 0x5413; + // TODO: better way to provide default impl? macro_rules! impl_inode { () => { @@ -59,7 +64,7 @@ macro_rules! impl_inode { fn get_entry(&self, _id: usize) -> Result { Err(FsError::NotDir) } fn io_control(&self, cmd: u32, data: u32) -> Result<()> { match cmd { - TIOCGWINSZ => { + TCGETS | TIOCGWINSZ | TIOCGPGRP | TIOCSPGRP => { // pretend to be tty Ok(()) }, From 1bba33a05fe8e8a9910a3ba57c72b69a5b04e34b Mon Sep 17 00:00:00 2001 From: Jiajie Chen Date: Wed, 17 Apr 2019 01:16:27 +0800 Subject: [PATCH 15/36] Implement sys_ppoll over sys_poll --- kernel/src/syscall/fs.rs | 22 +++++++++++++++++----- kernel/src/syscall/mod.rs | 14 +++++++------- kernel/src/syscall/time.rs | 5 +++++ 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/kernel/src/syscall/fs.rs b/kernel/src/syscall/fs.rs index 1ef806e4..7381d4b8 100644 --- a/kernel/src/syscall/fs.rs +++ b/kernel/src/syscall/fs.rs @@ -66,6 +66,21 @@ pub fn sys_pwrite(fd: usize, base: *const u8, len: usize, offset: usize) -> SysR Ok(len) } +pub fn sys_ppoll(ufds: *mut PollFd, nfds: usize, timeout: *const TimeSpec) -> SysResult { + let proc = process(); + let timeout_msecs = if timeout.is_null() { + 1 << 31 // infinity + } else { + proc.vm.check_read_ptr(timeout)?; + unsafe { + (*timeout).to_msec() + } + }; + drop(proc); + + sys_poll(ufds, nfds, timeout_msecs as usize) +} + pub fn sys_poll(ufds: *mut PollFd, nfds: usize, timeout_msecs: usize) -> SysResult { info!( "poll: ufds: {:?}, nfds: {}, timeout_msecs: {:#x}", @@ -472,12 +487,9 @@ pub fn sys_chdir(path: *const u8) -> SysResult { if path.len() > 0 { let cwd = match path.as_bytes()[0] { b'/' => String::from("/"), - _ => proc.cwd.clone() + _ => proc.cwd.clone(), }; - let mut cwd_vec:Vec<_> = - cwd.split("/") - .filter(|&x| x != "") - .collect(); + let mut cwd_vec: Vec<_> = cwd.split("/").filter(|&x| x != "").collect(); let path_split = path.split("/").filter(|&x| x != ""); for seg in path_split { if seg == ".." { diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index 8deeaa22..f865a437 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -275,6 +275,7 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> isize { ), SYS_SYMLINKAT => Err(SysError::EACCES), SYS_FACCESSAT => sys_faccessat(args[0], args[1] as *const u8, args[2], args[3]), + SYS_PPOLL => sys_ppoll(args[0] as *mut PollFd, args[1], args[2] as *const TimeSpec), // ignore sigmask // 280 SYS_UTIMENSAT => { warn!("sys_utimensat is unimplemented"); @@ -340,7 +341,10 @@ fn x86_64_syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> Option sys_dup2(args[0], args[1]), - // SYS_PAUSE => sys_pause(), + SYS_ALARM => { + warn!("sys_alarm is unimplemented"); + Ok(0) + } SYS_FORK => sys_fork(tf), // use fork for vfork SYS_VFORK => sys_fork(tf), @@ -355,16 +359,12 @@ fn x86_64_syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> Option sys_arch_prctl(args[0] as i32, args[1], tf), - SYS_TIME => sys_time(args[0] as *mut u64), - SYS_ALARM => { - warn!("sys_alarm is unimplemented"); - Ok(0) - } SYS_CHOWN => { warn!("sys_chown is unimplemented"); Ok(0) } + SYS_ARCH_PRCTL => sys_arch_prctl(args[0] as i32, args[1], tf), + SYS_TIME => sys_time(args[0] as *mut u64), SYS_EPOLL_CREATE => { warn!("sys_epoll_create is unimplemented"); Err(SysError::ENOSYS) diff --git a/kernel/src/syscall/time.rs b/kernel/src/syscall/time.rs index 2ae76d46..dd5cfcd3 100644 --- a/kernel/src/syscall/time.rs +++ b/kernel/src/syscall/time.rs @@ -19,6 +19,7 @@ const USEC_PER_SEC: u64 = 1_000_000; const MSEC_PER_SEC: u64 = 1_000; const USEC_PER_MSEC: u64 = 1_000; const NSEC_PER_USEC: u64 = 1_000; +const NSEC_PER_MSEC: u64 = 1_000_000; /// Get time since epoch in usec fn get_epoch_usec() -> u64 { @@ -58,6 +59,10 @@ pub struct TimeSpec { } impl TimeSpec { + pub fn to_msec(&self) -> u64 { + self.sec * MSEC_PER_SEC + self.nsec / NSEC_PER_MSEC + } + pub fn to_duration(&self) -> Duration { Duration::new(self.sec, self.nsec as u32) } From ff50a45396a9ddcec6c2c4a04fd77c6257bef03f Mon Sep 17 00:00:00 2001 From: Jiajie Chen Date: Wed, 17 Apr 2019 08:16:02 +0800 Subject: [PATCH 16/36] Now ready to use busybox sh for user shell --- kernel/Cargo.lock | 4 ++-- kernel/src/fs/file.rs | 2 +- kernel/src/fs/file_like.rs | 2 +- kernel/src/fs/pipe.rs | 2 +- kernel/src/fs/stdio.rs | 12 ++++++++++-- kernel/src/syscall/fs.rs | 4 +--- kernel/src/syscall/proc.rs | 34 +++++++++++++++++++++++++++++++--- user | 2 +- 8 files changed, 48 insertions(+), 14 deletions(-) diff --git a/kernel/Cargo.lock b/kernel/Cargo.lock index 7ca71d53..4848e5e3 100644 --- a/kernel/Cargo.lock +++ b/kernel/Cargo.lock @@ -402,12 +402,12 @@ dependencies = [ [[package]] name = "rcore-fs" version = "0.1.0" -source = "git+https://github.com/rcore-os/rcore-fs#d7a2006cc316c98b7050aec63a2770dd690a4a80" +source = "git+https://github.com/rcore-os/rcore-fs#64d399fe664927f14853c22943a4bdeb34095f99" [[package]] name = "rcore-fs-sfs" version = "0.1.0" -source = "git+https://github.com/rcore-os/rcore-fs#d7a2006cc316c98b7050aec63a2770dd690a4a80" +source = "git+https://github.com/rcore-os/rcore-fs#64d399fe664927f14853c22943a4bdeb34095f99" dependencies = [ "bitvec 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/kernel/src/fs/file.rs b/kernel/src/fs/file.rs index dfb291fa..5e1b84f2 100644 --- a/kernel/src/fs/file.rs +++ b/kernel/src/fs/file.rs @@ -113,7 +113,7 @@ impl FileHandle { self.inode.poll() } - pub fn io_control(&self, cmd: u32, arg: u32) -> Result<()> { + pub fn io_control(&self, cmd: u32, arg: usize) -> Result<()> { self.inode.io_control(cmd, arg) } } diff --git a/kernel/src/fs/file_like.rs b/kernel/src/fs/file_like.rs index 47a3cc69..32c5cdcc 100644 --- a/kernel/src/fs/file_like.rs +++ b/kernel/src/fs/file_like.rs @@ -31,7 +31,7 @@ impl FileLike { } pub fn ioctl(&mut self, request: usize, arg1: usize, arg2: usize, arg3: usize) -> SysResult { match self { - FileLike::File(file) => file.io_control(request as u32, arg1 as u32)?, + FileLike::File(file) => file.io_control(request as u32, arg1)?, FileLike::Socket(socket) => { socket.ioctl(request, arg1, arg2, arg3)?; } diff --git a/kernel/src/fs/pipe.rs b/kernel/src/fs/pipe.rs index c0c50eac..88073807 100644 --- a/kernel/src/fs/pipe.rs +++ b/kernel/src/fs/pipe.rs @@ -69,7 +69,7 @@ macro_rules! impl_inode { fn move_(&self, _old_name: &str, _target: &Arc, _new_name: &str) -> Result<()> { Err(FsError::NotDir) } fn find(&self, _name: &str) -> Result> { Err(FsError::NotDir) } fn get_entry(&self, _id: usize) -> Result { Err(FsError::NotDir) } - fn io_control(&self, _cmd: u32, _data: u32) -> Result<()> { Err(FsError::NotSupported) } + fn io_control(&self, _cmd: u32, _data: usize) -> Result<()> { Err(FsError::NotSupported) } fn fs(&self) -> Arc { unimplemented!() } fn as_any_ref(&self) -> &Any { self } }; diff --git a/kernel/src/fs/stdio.rs b/kernel/src/fs/stdio.rs index 3fc60621..62500114 100644 --- a/kernel/src/fs/stdio.rs +++ b/kernel/src/fs/stdio.rs @@ -62,12 +62,20 @@ macro_rules! impl_inode { fn move_(&self, _old_name: &str, _target: &Arc, _new_name: &str) -> Result<()> { Err(FsError::NotDir) } fn find(&self, _name: &str) -> Result> { Err(FsError::NotDir) } fn get_entry(&self, _id: usize) -> Result { Err(FsError::NotDir) } - fn io_control(&self, cmd: u32, data: u32) -> Result<()> { + fn io_control(&self, cmd: u32, data: usize) -> Result<()> { match cmd { - TCGETS | TIOCGWINSZ | TIOCGPGRP | TIOCSPGRP => { + TCGETS | TIOCGWINSZ | TIOCSPGRP => { // pretend to be tty Ok(()) }, + TIOCGPGRP => { + // pretend to be have a tty process group + // TODO: verify pointer + unsafe { + *(data as *mut u32) = 0 + }; + Ok(()) + } _ => Err(FsError::NotSupported) } } diff --git a/kernel/src/syscall/fs.rs b/kernel/src/syscall/fs.rs index 7381d4b8..4ad87e73 100644 --- a/kernel/src/syscall/fs.rs +++ b/kernel/src/syscall/fs.rs @@ -72,9 +72,7 @@ pub fn sys_ppoll(ufds: *mut PollFd, nfds: usize, timeout: *const TimeSpec) -> Sy 1 << 31 // infinity } else { proc.vm.check_read_ptr(timeout)?; - unsafe { - (*timeout).to_msec() - } + unsafe { (*timeout).to_msec() } }; drop(proc); diff --git a/kernel/src/syscall/proc.rs b/kernel/src/syscall/proc.rs index 6f33cf83..81876289 100644 --- a/kernel/src/syscall/proc.rs +++ b/kernel/src/syscall/proc.rs @@ -24,11 +24,12 @@ pub fn sys_clone( newtls: usize, tf: &TrapFrame, ) -> SysResult { + let clone_flags = CloneFlags::from_bits_truncate(flags); info!( - "clone: flags: {:#x}, newsp: {:#x}, parent_tid: {:?}, child_tid: {:?}, newtls: {:#x}", - flags, newsp, parent_tid, child_tid, newtls + "clone: flags: {:?}, newsp: {:#x}, parent_tid: {:?}, child_tid: {:?}, newtls: {:#x}", + clone_flags, newsp, parent_tid, child_tid, newtls ); - if flags == 0x4111 { + if flags == 0x4111 || flags == 0x11 { warn!("sys_clone is calling sys_fork instead, ignoring other args"); return sys_fork(tf); } @@ -317,3 +318,30 @@ pub fn sys_set_priority(priority: usize) -> SysResult { processor().manager().set_priority(pid, priority as u8); Ok(0) } + +bitflags! { + pub struct CloneFlags: usize { + const CSIGNAL = 0x000000ff; + const VM = 0x0000100; + const FS = 0x0000200; + const FILES = 0x0000400; + const SIGHAND = 0x0000800; + const PTRACE = 0x0002000; + const VFORK = 0x0004000; + const PARENT = 0x0008000; + const SYSVSEM = 0x0008000; + const SETTLS = 0x0008000; + const PARENT_SETTID = 0x0010000; + const CHILD_CLEARTID = 0x0020000; + const DETACHED = 0x0040000; + const UNTRACED = 0x0080000; + const CHILD_SETTID = 0x0100000; + const NEWCGROUP = 0x0200000; + const NEWUTS = 0x0400000; + const NEWIPC = 0x0800000; + const NEWUSER = 0x1000000; + const NEWPID = 0x2000000; + const NEWNET = 0x4000000; + const IO = 0x8000000; + } +} diff --git a/user b/user index fdaa1be8..8dbc0edb 160000 --- a/user +++ b/user @@ -1 +1 @@ -Subproject commit fdaa1be8635944d88ff128da13bf0464f7ce2eb6 +Subproject commit 8dbc0edb935a62d748aaac39258d4a985de0ae17 From 53bf9d4fc31993065b91d6ddb4abb0b71f2c2281 Mon Sep 17 00:00:00 2001 From: chyyuu Date: Wed, 17 Apr 2019 10:50:50 +0800 Subject: [PATCH 17/36] add linux syscall id:name:function table info --- tools/syscall_64.tbl | 382 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 382 insertions(+) create mode 100644 tools/syscall_64.tbl diff --git a/tools/syscall_64.tbl b/tools/syscall_64.tbl new file mode 100644 index 00000000..5aef183e --- /dev/null +++ b/tools/syscall_64.tbl @@ -0,0 +1,382 @@ +# +# 64-bit system call numbers and entry vectors +# +# The format is: +# +# +# The abi is "common", "64" or "x32" for this file. +# +0 common read sys_read +1 common write sys_write +2 common open sys_open +3 common close sys_close +4 common stat sys_newstat +5 common fstat sys_newfstat +6 common lstat sys_newlstat +7 common poll sys_poll +8 common lseek sys_lseek +9 common mmap sys_mmap +10 common mprotect sys_mprotect +11 common munmap sys_munmap +12 common brk sys_brk +13 64 rt_sigaction sys_rt_sigaction +14 common rt_sigprocmask sys_rt_sigprocmask +15 64 rt_sigreturn sys_rt_sigreturn/ptregs +16 64 ioctl sys_ioctl +17 common pread64 sys_pread64 +18 common pwrite64 sys_pwrite64 +19 64 readv sys_readv +20 64 writev sys_writev +21 common access sys_access +22 common pipe sys_pipe +23 common select sys_select +24 common sched_yield sys_sched_yield +25 common mremap sys_mremap +26 common msync sys_msync +27 common mincore sys_mincore +28 common madvise sys_madvise +29 common shmget sys_shmget +30 common shmat sys_shmat +31 common shmctl sys_shmctl +32 common dup sys_dup +33 common dup2 sys_dup2 +34 common pause sys_pause +35 common nanosleep sys_nanosleep +36 common getitimer sys_getitimer +37 common alarm sys_alarm +38 common setitimer sys_setitimer +39 common getpid sys_getpid +40 common sendfile sys_sendfile64 +41 common socket sys_socket +42 common connect sys_connect +43 common accept sys_accept +44 common sendto sys_sendto +45 64 recvfrom sys_recvfrom +46 64 sendmsg sys_sendmsg +47 64 recvmsg sys_recvmsg +48 common shutdown sys_shutdown +49 common bind sys_bind +50 common listen sys_listen +51 common getsockname sys_getsockname +52 common getpeername sys_getpeername +53 common socketpair sys_socketpair +54 64 setsockopt sys_setsockopt +55 64 getsockopt sys_getsockopt +56 common clone sys_clone/ptregs +57 common fork sys_fork/ptregs +58 common vfork sys_vfork/ptregs +59 64 execve sys_execve/ptregs +60 common exit sys_exit +61 common wait4 sys_wait4 +62 common kill sys_kill +63 common uname sys_newuname +64 common semget sys_semget +65 common semop sys_semop +66 common semctl sys_semctl +67 common shmdt sys_shmdt +68 common msgget sys_msgget +69 common msgsnd sys_msgsnd +70 common msgrcv sys_msgrcv +71 common msgctl sys_msgctl +72 common fcntl sys_fcntl +73 common flock sys_flock +74 common fsync sys_fsync +75 common fdatasync sys_fdatasync +76 common truncate sys_truncate +77 common ftruncate sys_ftruncate +78 common getdents sys_getdents +79 common getcwd sys_getcwd +80 common chdir sys_chdir +81 common fchdir sys_fchdir +82 common rename sys_rename +83 common mkdir sys_mkdir +84 common rmdir sys_rmdir +85 common creat sys_creat +86 common link sys_link +87 common unlink sys_unlink +88 common symlink sys_symlink +89 common readlink sys_readlink +90 common chmod sys_chmod +91 common fchmod sys_fchmod +92 common chown sys_chown +93 common fchown sys_fchown +94 common lchown sys_lchown +95 common umask sys_umask +96 common gettimeofday sys_gettimeofday +97 common getrlimit sys_getrlimit +98 common getrusage sys_getrusage +99 common sysinfo sys_sysinfo +100 common times sys_times +101 64 ptrace sys_ptrace +102 common getuid sys_getuid +103 common syslog sys_syslog +104 common getgid sys_getgid +105 common setuid sys_setuid +106 common setgid sys_setgid +107 common geteuid sys_geteuid +108 common getegid sys_getegid +109 common setpgid sys_setpgid +110 common getppid sys_getppid +111 common getpgrp sys_getpgrp +112 common setsid sys_setsid +113 common setreuid sys_setreuid +114 common setregid sys_setregid +115 common getgroups sys_getgroups +116 common setgroups sys_setgroups +117 common setresuid sys_setresuid +118 common getresuid sys_getresuid +119 common setresgid sys_setresgid +120 common getresgid sys_getresgid +121 common getpgid sys_getpgid +122 common setfsuid sys_setfsuid +123 common setfsgid sys_setfsgid +124 common getsid sys_getsid +125 common capget sys_capget +126 common capset sys_capset +127 64 rt_sigpending sys_rt_sigpending +128 64 rt_sigtimedwait sys_rt_sigtimedwait +129 64 rt_sigqueueinfo sys_rt_sigqueueinfo +130 common rt_sigsuspend sys_rt_sigsuspend +131 64 sigaltstack sys_sigaltstack +132 common utime sys_utime +133 common mknod sys_mknod +134 64 uselib +135 common personality sys_personality +136 common ustat sys_ustat +137 common statfs sys_statfs +138 common fstatfs sys_fstatfs +139 common sysfs sys_sysfs +140 common getpriority sys_getpriority +141 common setpriority sys_setpriority +142 common sched_setparam sys_sched_setparam +143 common sched_getparam sys_sched_getparam +144 common sched_setscheduler sys_sched_setscheduler +145 common sched_getscheduler sys_sched_getscheduler +146 common sched_get_priority_max sys_sched_get_priority_max +147 common sched_get_priority_min sys_sched_get_priority_min +148 common sched_rr_get_interval sys_sched_rr_get_interval +149 common mlock sys_mlock +150 common munlock sys_munlock +151 common mlockall sys_mlockall +152 common munlockall sys_munlockall +153 common vhangup sys_vhangup +154 common modify_ldt sys_modify_ldt +155 common pivot_root sys_pivot_root +156 64 _sysctl sys_sysctl +157 common prctl sys_prctl +158 common arch_prctl sys_arch_prctl +159 common adjtimex sys_adjtimex +160 common setrlimit sys_setrlimit +161 common chroot sys_chroot +162 common sync sys_sync +163 common acct sys_acct +164 common settimeofday sys_settimeofday +165 common mount sys_mount +166 common umount2 sys_umount +167 common swapon sys_swapon +168 common swapoff sys_swapoff +169 common reboot sys_reboot +170 common sethostname sys_sethostname +171 common setdomainname sys_setdomainname +172 common iopl sys_iopl/ptregs +173 common ioperm sys_ioperm +174 64 create_module +175 common init_module sys_init_module +176 common delete_module sys_delete_module +177 64 get_kernel_syms +178 64 query_module +179 common quotactl sys_quotactl +180 64 nfsservctl +181 common getpmsg +182 common putpmsg +183 common afs_syscall +184 common tuxcall +185 common security +186 common gettid sys_gettid +187 common readahead sys_readahead +188 common setxattr sys_setxattr +189 common lsetxattr sys_lsetxattr +190 common fsetxattr sys_fsetxattr +191 common getxattr sys_getxattr +192 common lgetxattr sys_lgetxattr +193 common fgetxattr sys_fgetxattr +194 common listxattr sys_listxattr +195 common llistxattr sys_llistxattr +196 common flistxattr sys_flistxattr +197 common removexattr sys_removexattr +198 common lremovexattr sys_lremovexattr +199 common fremovexattr sys_fremovexattr +200 common tkill sys_tkill +201 common time sys_time +202 common futex sys_futex +203 common sched_setaffinity sys_sched_setaffinity +204 common sched_getaffinity sys_sched_getaffinity +205 64 set_thread_area +206 64 io_setup sys_io_setup +207 common io_destroy sys_io_destroy +208 common io_getevents sys_io_getevents +209 64 io_submit sys_io_submit +210 common io_cancel sys_io_cancel +211 64 get_thread_area +212 common lookup_dcookie sys_lookup_dcookie +213 common epoll_create sys_epoll_create +214 64 epoll_ctl_old +215 64 epoll_wait_old +216 common remap_file_pages sys_remap_file_pages +217 common getdents64 sys_getdents64 +218 common set_tid_address sys_set_tid_address +219 common restart_syscall sys_restart_syscall +220 common semtimedop sys_semtimedop +221 common fadvise64 sys_fadvise64 +222 64 timer_create sys_timer_create +223 common timer_settime sys_timer_settime +224 common timer_gettime sys_timer_gettime +225 common timer_getoverrun sys_timer_getoverrun +226 common timer_delete sys_timer_delete +227 common clock_settime sys_clock_settime +228 common clock_gettime sys_clock_gettime +229 common clock_getres sys_clock_getres +230 common clock_nanosleep sys_clock_nanosleep +231 common exit_group sys_exit_group +232 common epoll_wait sys_epoll_wait +233 common epoll_ctl sys_epoll_ctl +234 common tgkill sys_tgkill +235 common utimes sys_utimes +236 64 vserver +237 common mbind sys_mbind +238 common set_mempolicy sys_set_mempolicy +239 common get_mempolicy sys_get_mempolicy +240 common mq_open sys_mq_open +241 common mq_unlink sys_mq_unlink +242 common mq_timedsend sys_mq_timedsend +243 common mq_timedreceive sys_mq_timedreceive +244 64 mq_notify sys_mq_notify +245 common mq_getsetattr sys_mq_getsetattr +246 64 kexec_load sys_kexec_load +247 64 waitid sys_waitid +248 common add_key sys_add_key +249 common request_key sys_request_key +250 common keyctl sys_keyctl +251 common ioprio_set sys_ioprio_set +252 common ioprio_get sys_ioprio_get +253 common inotify_init sys_inotify_init +254 common inotify_add_watch sys_inotify_add_watch +255 common inotify_rm_watch sys_inotify_rm_watch +256 common migrate_pages sys_migrate_pages +257 common openat sys_openat +258 common mkdirat sys_mkdirat +259 common mknodat sys_mknodat +260 common fchownat sys_fchownat +261 common futimesat sys_futimesat +262 common newfstatat sys_newfstatat +263 common unlinkat sys_unlinkat +264 common renameat sys_renameat +265 common linkat sys_linkat +266 common symlinkat sys_symlinkat +267 common readlinkat sys_readlinkat +268 common fchmodat sys_fchmodat +269 common faccessat sys_faccessat +270 common pselect6 sys_pselect6 +271 common ppoll sys_ppoll +272 common unshare sys_unshare +273 64 set_robust_list sys_set_robust_list +274 64 get_robust_list sys_get_robust_list +275 common splice sys_splice +276 common tee sys_tee +277 common sync_file_range sys_sync_file_range +278 64 vmsplice sys_vmsplice +279 64 move_pages sys_move_pages +280 common utimensat sys_utimensat +281 common epoll_pwait sys_epoll_pwait +282 common signalfd sys_signalfd +283 common timerfd_create sys_timerfd_create +284 common eventfd sys_eventfd +285 common fallocate sys_fallocate +286 common timerfd_settime sys_timerfd_settime +287 common timerfd_gettime sys_timerfd_gettime +288 common accept4 sys_accept4 +289 common signalfd4 sys_signalfd4 +290 common eventfd2 sys_eventfd2 +291 common epoll_create1 sys_epoll_create1 +292 common dup3 sys_dup3 +293 common pipe2 sys_pipe2 +294 common inotify_init1 sys_inotify_init1 +295 64 preadv sys_preadv +296 64 pwritev sys_pwritev +297 64 rt_tgsigqueueinfo sys_rt_tgsigqueueinfo +298 common perf_event_open sys_perf_event_open +299 64 recvmmsg sys_recvmmsg +300 common fanotify_init sys_fanotify_init +301 common fanotify_mark sys_fanotify_mark +302 common prlimit64 sys_prlimit64 +303 common name_to_handle_at sys_name_to_handle_at +304 common open_by_handle_at sys_open_by_handle_at +305 common clock_adjtime sys_clock_adjtime +306 common syncfs sys_syncfs +307 64 sendmmsg sys_sendmmsg +308 common setns sys_setns +309 common getcpu sys_getcpu +310 64 process_vm_readv sys_process_vm_readv +311 64 process_vm_writev sys_process_vm_writev +312 common kcmp sys_kcmp +313 common finit_module sys_finit_module +314 common sched_setattr sys_sched_setattr +315 common sched_getattr sys_sched_getattr +316 common renameat2 sys_renameat2 +317 common seccomp sys_seccomp +318 common getrandom sys_getrandom +319 common memfd_create sys_memfd_create +320 common kexec_file_load sys_kexec_file_load +321 common bpf sys_bpf +322 64 execveat sys_execveat/ptregs +323 common userfaultfd sys_userfaultfd +324 common membarrier sys_membarrier +325 common mlock2 sys_mlock2 +326 common copy_file_range sys_copy_file_range +327 64 preadv2 sys_preadv2 +328 64 pwritev2 sys_pwritev2 +329 common pkey_mprotect sys_pkey_mprotect +330 common pkey_alloc sys_pkey_alloc +331 common pkey_free sys_pkey_free +332 common statx sys_statx + +# +# x32-specific system call numbers start at 512 to avoid cache impact +# for native 64-bit operation. +# +512 x32 rt_sigaction compat_sys_rt_sigaction +513 x32 rt_sigreturn sys32_x32_rt_sigreturn +514 x32 ioctl compat_sys_ioctl +515 x32 readv compat_sys_readv +516 x32 writev compat_sys_writev +517 x32 recvfrom compat_sys_recvfrom +518 x32 sendmsg compat_sys_sendmsg +519 x32 recvmsg compat_sys_recvmsg +520 x32 execve compat_sys_execve/ptregs +521 x32 ptrace compat_sys_ptrace +522 x32 rt_sigpending compat_sys_rt_sigpending +523 x32 rt_sigtimedwait compat_sys_rt_sigtimedwait +524 x32 rt_sigqueueinfo compat_sys_rt_sigqueueinfo +525 x32 sigaltstack compat_sys_sigaltstack +526 x32 timer_create compat_sys_timer_create +527 x32 mq_notify compat_sys_mq_notify +528 x32 kexec_load compat_sys_kexec_load +529 x32 waitid compat_sys_waitid +530 x32 set_robust_list compat_sys_set_robust_list +531 x32 get_robust_list compat_sys_get_robust_list +532 x32 vmsplice compat_sys_vmsplice +533 x32 move_pages compat_sys_move_pages +534 x32 preadv compat_sys_preadv64 +535 x32 pwritev compat_sys_pwritev64 +536 x32 rt_tgsigqueueinfo compat_sys_rt_tgsigqueueinfo +537 x32 recvmmsg compat_sys_recvmmsg +538 x32 sendmmsg compat_sys_sendmmsg +539 x32 process_vm_readv compat_sys_process_vm_readv +540 x32 process_vm_writev compat_sys_process_vm_writev +541 x32 setsockopt compat_sys_setsockopt +542 x32 getsockopt compat_sys_getsockopt +543 x32 io_setup compat_sys_io_setup +544 x32 io_submit compat_sys_io_submit +545 x32 execveat compat_sys_execveat/ptregs +546 x32 preadv2 compat_sys_preadv64v2 +547 x32 pwritev2 compat_sys_pwritev64v2 From 56e472c8f893c55b62799da2e62808d3b6598080 Mon Sep 17 00:00:00 2001 From: chyyuu Date: Wed, 17 Apr 2019 14:59:06 +0800 Subject: [PATCH 18/36] fix bug: sys_exec should name as exec_path, then loader can find the exec file. items of VEC args from argv is the args lists, and args[0] isn't the complete exec_path. the new_user function should add exec_path as a new args. BUGS: ls app doesn't show any thing. Why? --- kernel/src/process/structs.rs | 7 +++++-- kernel/src/shell.rs | 4 ++-- kernel/src/syscall/proc.rs | 24 +++++++++++++++++++----- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/kernel/src/process/structs.rs b/kernel/src/process/structs.rs index 700d4c22..0bf67816 100644 --- a/kernel/src/process/structs.rs +++ b/kernel/src/process/structs.rs @@ -158,7 +158,7 @@ impl Thread { } /// Make a new user process from ELF `data` - pub fn new_user<'a, Iter>(data: &[u8], args: Iter) -> Box + pub fn new_user<'a, Iter>(data: &[u8], exec_path: &str, args: Iter) -> Box where Iter: Iterator, { @@ -182,7 +182,10 @@ impl Thread { // No infinite loop let mut new_args: Vec<&str> = args.collect(); new_args.insert(0, loader_path); - return Thread::new_user(buf.as_slice(), new_args.into_iter()); + new_args.insert(1, exec_path); + new_args.remove(2); + warn!("loader args: {:?}", new_args); + return Thread::new_user(buf.as_slice(), exec_path,new_args.into_iter()); } else { warn!("loader specified as {} but failed to read", &loader_path); } diff --git a/kernel/src/shell.rs b/kernel/src/shell.rs index ce0f1561..9b2690ed 100644 --- a/kernel/src/shell.rs +++ b/kernel/src/shell.rs @@ -12,7 +12,7 @@ pub fn run_user_shell() { let data = inode.read_as_vec().unwrap(); processor() .manager() - .add(Thread::new_user(data.as_slice(), "sh".split(' '))); + .add(Thread::new_user(data.as_slice(), "rust/sh", "sh".split(' '))); } else { processor().manager().add(Thread::new_kernel(shell, 0)); } @@ -44,7 +44,7 @@ pub extern "C" fn shell(_arg: usize) -> ! { let data = file.read_as_vec().unwrap(); let _pid = processor() .manager() - .add(Thread::new_user(data.as_slice(), cmd.split(' '))); + .add(Thread::new_user(data.as_slice(), &cmd, cmd.split(' '))); // TODO: wait until process exits, or use user land shell completely //unsafe { thread::JoinHandle::<()>::_of(pid) }.join().unwrap(); } else { diff --git a/kernel/src/syscall/proc.rs b/kernel/src/syscall/proc.rs index 81876289..1159ff31 100644 --- a/kernel/src/syscall/proc.rs +++ b/kernel/src/syscall/proc.rs @@ -126,7 +126,7 @@ pub fn sys_exec( ) -> SysResult { info!("exec: name: {:?}, argv: {:?} envp: {:?}", name, argv, envp); let proc = process(); - let _name = if name.is_null() { + let exec_name = if name.is_null() { String::from("") } else { unsafe { proc.vm.check_and_clone_cstr(name)? } @@ -146,19 +146,33 @@ pub fn sys_exec( current_argv = current_argv.add(1); } } - info!("exec: args {:?}", args); +// // Check and copy envs to kernel +// let mut envs = Vec::new(); +// unsafe { +// let mut current_env = envp as *const *const u8; +// proc.vm.check_read_ptr(current_env)?; +// while !(*current_env).is_null() { +// let env = proc.vm.check_and_clone_cstr(*current_env)?; +// envs.push(env); +// current_env = current_env.add(1); +// } +// } +// if args.is_empty() { return Err(SysError::EINVAL); } + info!("EXEC: name:{:?} , args {:?}", exec_name, args); + // Read program file - let path = args[0].as_str(); - let inode = proc.lookup_inode(path)?; + //let path = args[0].as_str(); + let exec_path = exec_name.as_str(); + let inode = proc.lookup_inode(exec_path)?; let buf = inode.read_as_vec()?; // Make new Thread let iter = args.iter().map(|s| s.as_str()); - let mut thread = Thread::new_user(buf.as_slice(), iter); + let mut thread = Thread::new_user(buf.as_slice(), exec_path, iter); thread.proc.lock().clone_for_exec(&proc); // Activate new page table From aa5d0028f094f400a3c4e497fec04e09c96a758c Mon Sep 17 00:00:00 2001 From: chyyuu Date: Wed, 17 Apr 2019 16:35:44 +0800 Subject: [PATCH 19/36] add unimplemented syscalls: SYS_GETGROUPS, SYS_SETGROUPS. Now busybox:id can run. --- kernel/src/syscall/mod.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index f865a437..1545af6a 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -208,6 +208,14 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> isize { warn!("sys_getpgid is unimplemented"); Ok(0) } + SYS_GETGROUPS=> { + warn!("sys_getgroups is unimplemented"); + Ok(0) + } + SYS_SETGROUPS=> { + warn!("sys_setgroups is unimplemented"); + Ok(0) + } SYS_SIGALTSTACK => { warn!("sys_sigaltstack is unimplemented"); Ok(0) From 3e7dd81dec5121fda7f606d0912ad489b82cfae7 Mon Sep 17 00:00:00 2001 From: Yuhao Zhou Date: Wed, 17 Apr 2019 17:37:28 +0800 Subject: [PATCH 20/36] Add lstat, fix timespec for musln32. --- kernel/src/syscall/fs.rs | 14 +++++++++++--- kernel/src/syscall/mod.rs | 1 + 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/kernel/src/syscall/fs.rs b/kernel/src/syscall/fs.rs index 7035b310..10173322 100644 --- a/kernel/src/syscall/fs.rs +++ b/kernel/src/syscall/fs.rs @@ -3,6 +3,7 @@ use core::cell::UnsafeCell; use core::cmp::min; use core::mem::size_of; +#[cfg(not(target_arch = "mips"))] use rcore_fs::vfs::Timespec; use crate::drivers::SOCKET_ACTIVITY; @@ -913,6 +914,13 @@ pub struct Stat { ctime: Timespec, } +#[cfg(target_arch = "mips")] +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)] +pub struct Timespec { + pub sec: i32, + pub nsec: i32, +} + #[cfg(target_arch = "mips")] #[repr(C)] #[derive(Debug)] @@ -1096,9 +1104,9 @@ impl From for Stat { size: info.size as u64, blksize: info.blk_size as u32, blocks: info.blocks as u64, - atime: info.atime, - mtime: info.mtime, - ctime: info.ctime, + atime: Timespec { sec: info.atime.sec as i32, nsec: info.atime.nsec }, + mtime: Timespec { sec: info.mtime.sec as i32, nsec: info.mtime.nsec }, + ctime: Timespec { sec: info.ctime.sec as i32, nsec: info.ctime.nsec }, __pad1: 0, __pad2: 0, __pad3: 0, diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index 86666ba0..49051ec6 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -324,6 +324,7 @@ fn mips_syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> Option sys_dup2(args[0], args[1]), SYS_MMAP2 => sys_mmap(args[0], args[1], args[2], args[3], args[4], args[5] * 4096), SYS_FSTAT64 => sys_fstat(args[0], args[1] as *mut Stat), + SYS_LSTAT64 => sys_lstat(args[0] as *const u8, args[1] as *mut Stat), SYS_STAT64 => sys_stat(args[0] as *const u8, args[1] as *mut Stat), SYS_PIPE => { let fd_ptr = args[0] as *mut u32; From d2f2fa3d9744f25418438f195513be94dedd1f17 Mon Sep 17 00:00:00 2001 From: Yuhao Zhou Date: Wed, 17 Apr 2019 17:42:05 +0800 Subject: [PATCH 21/36] Two syscall for mips. --- kernel/src/syscall/mod.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index 49051ec6..4f81361b 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -339,6 +339,14 @@ fn mips_syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> Option Err(err) } }, + SYS_GETPGID => { + warn!("sys_getpgid is unimplemented"); + Ok(0) + } + SYS_SETPGID => { + warn!("sys_setpgid is unimplemented"); + Ok(0) + } SYS_FCNTL64 => { warn!("sys_fcntl64 is unimplemented"); Ok(0) From 0ff24fe5898f11ea1452ac6edc500d53c133bee4 Mon Sep 17 00:00:00 2001 From: Jiajie Chen Date: Thu, 18 Apr 2019 17:43:35 +0800 Subject: [PATCH 22/36] Implement env support in sys_exec --- kernel/src/process/abi.rs | 8 +++----- kernel/src/process/structs.rs | 13 +++++++++---- kernel/src/shell.rs | 26 +++++++++++++++++--------- kernel/src/syscall/mod.rs | 4 ++-- kernel/src/syscall/proc.rs | 35 ++++++++++++++++++++--------------- 5 files changed, 51 insertions(+), 35 deletions(-) diff --git a/kernel/src/process/abi.rs b/kernel/src/process/abi.rs index 913fb1ac..dcaa428d 100644 --- a/kernel/src/process/abi.rs +++ b/kernel/src/process/abi.rs @@ -5,7 +5,7 @@ use core::ptr::null; pub struct ProcInitInfo { pub args: Vec, - pub envs: BTreeMap, + pub envs: Vec, pub auxv: BTreeMap, } @@ -19,10 +19,8 @@ impl ProcInitInfo { let envs: Vec<_> = self .envs .iter() - .map(|(key, value)| { - writer.push_str(value.as_str()); - writer.push_slice(&[b"="]); - writer.push_slice(key.as_bytes()); + .map(|arg| { + writer.push_str(arg.as_str()); writer.sp }) .collect(); diff --git a/kernel/src/process/structs.rs b/kernel/src/process/structs.rs index 0bf67816..a8b0b634 100644 --- a/kernel/src/process/structs.rs +++ b/kernel/src/process/structs.rs @@ -158,7 +158,12 @@ impl Thread { } /// Make a new user process from ELF `data` - pub fn new_user<'a, Iter>(data: &[u8], exec_path: &str, args: Iter) -> Box + pub fn new_user<'a, Iter>( + data: &[u8], + exec_path: &str, + args: Iter, + envs: Vec, + ) -> Box where Iter: Iterator, { @@ -185,7 +190,7 @@ impl Thread { new_args.insert(1, exec_path); new_args.remove(2); warn!("loader args: {:?}", new_args); - return Thread::new_user(buf.as_slice(), exec_path,new_args.into_iter()); + return Thread::new_user(buf.as_slice(), exec_path, new_args.into_iter(), envs); } else { warn!("loader specified as {} but failed to read", &loader_path); } @@ -215,7 +220,7 @@ impl Thread { // Make init info let init_info = ProcInitInfo { args: args.map(|s| String::from(s)).collect(), - envs: BTreeMap::new(), + envs, auxv: { let mut map = BTreeMap::new(); if let Some(phdr_vaddr) = elf.get_phdr_vaddr() { @@ -421,7 +426,7 @@ impl ElfExt for ElfFile<'_> { virt_addr + mem_size, ph.flags().to_attr(), ByFrame::new(GlobalFrameAlloc), - "", + "elf", ); unsafe { ::core::slice::from_raw_parts_mut(virt_addr as *mut u8, mem_size) } }; diff --git a/kernel/src/shell.rs b/kernel/src/shell.rs index 9b2690ed..4c88786b 100644 --- a/kernel/src/shell.rs +++ b/kernel/src/shell.rs @@ -10,9 +10,12 @@ use alloc::vec::Vec; pub fn run_user_shell() { if let Ok(inode) = ROOT_INODE.lookup("rust/sh") { let data = inode.read_as_vec().unwrap(); - processor() - .manager() - .add(Thread::new_user(data.as_slice(), "rust/sh", "sh".split(' '))); + processor().manager().add(Thread::new_user( + data.as_slice(), + "rust/sh", + "sh".split(' '), + Vec::new(), + )); } else { processor().manager().add(Thread::new_kernel(shell, 0)); } @@ -23,9 +26,11 @@ pub fn run_user_shell() { let cmdline = CMDLINE.read(); let inode = ROOT_INODE.lookup(&cmdline).unwrap(); let data = inode.read_as_vec().unwrap(); - processor() - .manager() - .add(Thread::new_user(data.as_slice(), cmdline.split(' '))); + processor().manager().add(Thread::new_user( + data.as_slice(), + cmdline.split(' '), + Vec::new(), + )); } pub extern "C" fn shell(_arg: usize) -> ! { @@ -42,9 +47,12 @@ pub extern "C" fn shell(_arg: usize) -> ! { let name = cmd.trim().split(' ').next().unwrap(); if let Ok(file) = ROOT_INODE.lookup(name) { let data = file.read_as_vec().unwrap(); - let _pid = processor() - .manager() - .add(Thread::new_user(data.as_slice(), &cmd, cmd.split(' '))); + let _pid = processor().manager().add(Thread::new_user( + data.as_slice(), + &cmd, + cmd.split(' '), + Vec::new(), + )); // TODO: wait until process exits, or use user land shell completely //unsafe { thread::JoinHandle::<()>::_of(pid) }.join().unwrap(); } else { diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index 1545af6a..aaf9b9fd 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -208,11 +208,11 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> isize { warn!("sys_getpgid is unimplemented"); Ok(0) } - SYS_GETGROUPS=> { + SYS_GETGROUPS => { warn!("sys_getgroups is unimplemented"); Ok(0) } - SYS_SETGROUPS=> { + SYS_SETGROUPS => { warn!("sys_setgroups is unimplemented"); Ok(0) } diff --git a/kernel/src/syscall/proc.rs b/kernel/src/syscall/proc.rs index 1159ff31..7e689482 100644 --- a/kernel/src/syscall/proc.rs +++ b/kernel/src/syscall/proc.rs @@ -146,23 +146,28 @@ pub fn sys_exec( current_argv = current_argv.add(1); } } -// // Check and copy envs to kernel -// let mut envs = Vec::new(); -// unsafe { -// let mut current_env = envp as *const *const u8; -// proc.vm.check_read_ptr(current_env)?; -// while !(*current_env).is_null() { -// let env = proc.vm.check_and_clone_cstr(*current_env)?; -// envs.push(env); -// current_env = current_env.add(1); -// } -// } -// + // Check and copy envs to kernel + let mut envs = Vec::new(); + unsafe { + let mut current_env = envp as *const *const u8; + if !current_env.is_null() { + proc.vm.check_read_ptr(current_env)?; + while !(*current_env).is_null() { + let env = proc.vm.check_and_clone_cstr(*current_env)?; + envs.push(env); + current_env = current_env.add(1); + } + } + } + if args.is_empty() { return Err(SysError::EINVAL); } - info!("EXEC: name:{:?} , args {:?}", exec_name, args); + info!( + "EXEC: name:{:?} , args {:?}, envp {:?}", + exec_name, args, envs + ); // Read program file //let path = args[0].as_str(); @@ -171,8 +176,8 @@ pub fn sys_exec( let buf = inode.read_as_vec()?; // Make new Thread - let iter = args.iter().map(|s| s.as_str()); - let mut thread = Thread::new_user(buf.as_slice(), exec_path, iter); + let args_iter = args.iter().map(|s| s.as_str()); + let mut thread = Thread::new_user(buf.as_slice(), exec_path, args_iter, envs); thread.proc.lock().clone_for_exec(&proc); // Activate new page table From 520bb2d9579e970bd0b417d8a76063175288d0b5 Mon Sep 17 00:00:00 2001 From: WangRunji Date: Thu, 18 Apr 2019 20:24:36 +0800 Subject: [PATCH 23/36] change args from Iter to Vec --- kernel/src/process/structs.rs | 22 +++++++++------------- kernel/src/shell.rs | 6 +++--- kernel/src/syscall/proc.rs | 3 +-- 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/kernel/src/process/structs.rs b/kernel/src/process/structs.rs index a8b0b634..06cb0b71 100644 --- a/kernel/src/process/structs.rs +++ b/kernel/src/process/structs.rs @@ -158,15 +158,12 @@ impl Thread { } /// Make a new user process from ELF `data` - pub fn new_user<'a, Iter>( + pub fn new_user( data: &[u8], exec_path: &str, - args: Iter, + mut args: Vec, envs: Vec, - ) -> Box - where - Iter: Iterator, - { + ) -> Box { // Parse ELF let elf = ElfFile::new(data).expect("failed to read elf"); @@ -185,12 +182,11 @@ impl Thread { debug!("using loader {}", &loader_path); // Elf loader should not have INTERP // No infinite loop - let mut new_args: Vec<&str> = args.collect(); - new_args.insert(0, loader_path); - new_args.insert(1, exec_path); - new_args.remove(2); - warn!("loader args: {:?}", new_args); - return Thread::new_user(buf.as_slice(), exec_path, new_args.into_iter(), envs); + args.insert(0, loader_path.into()); + args.insert(1, exec_path.into()); + args.remove(2); + warn!("loader args: {:?}", args); + return Thread::new_user(buf.as_slice(), exec_path, args, envs); } else { warn!("loader specified as {} but failed to read", &loader_path); } @@ -219,7 +215,7 @@ impl Thread { // Make init info let init_info = ProcInitInfo { - args: args.map(|s| String::from(s)).collect(), + args, envs, auxv: { let mut map = BTreeMap::new(); diff --git a/kernel/src/shell.rs b/kernel/src/shell.rs index 4c88786b..fe8dc614 100644 --- a/kernel/src/shell.rs +++ b/kernel/src/shell.rs @@ -13,7 +13,7 @@ pub fn run_user_shell() { processor().manager().add(Thread::new_user( data.as_slice(), "rust/sh", - "sh".split(' '), + vec!["sh".into()], Vec::new(), )); } else { @@ -28,7 +28,7 @@ pub fn run_user_shell() { let data = inode.read_as_vec().unwrap(); processor().manager().add(Thread::new_user( data.as_slice(), - cmdline.split(' '), + cmdline.split(' ').map(|s| s.into()).collect(), Vec::new(), )); } @@ -50,7 +50,7 @@ pub extern "C" fn shell(_arg: usize) -> ! { let _pid = processor().manager().add(Thread::new_user( data.as_slice(), &cmd, - cmd.split(' '), + cmd.split(' ').map(|s| s.into()).collect(), Vec::new(), )); // TODO: wait until process exits, or use user land shell completely diff --git a/kernel/src/syscall/proc.rs b/kernel/src/syscall/proc.rs index 7e689482..9f3c97cf 100644 --- a/kernel/src/syscall/proc.rs +++ b/kernel/src/syscall/proc.rs @@ -176,8 +176,7 @@ pub fn sys_exec( let buf = inode.read_as_vec()?; // Make new Thread - let args_iter = args.iter().map(|s| s.as_str()); - let mut thread = Thread::new_user(buf.as_slice(), exec_path, args_iter, envs); + let mut thread = Thread::new_user(buf.as_slice(), exec_path, args, envs); thread.proc.lock().clone_for_exec(&proc); // Activate new page table From f29f5e4d35a97d99e5a2feaf13bed6e974fd500f Mon Sep 17 00:00:00 2001 From: WangRunji Date: Thu, 18 Apr 2019 21:29:45 +0800 Subject: [PATCH 24/36] fix memory area alignment #41 --- crate/memory/src/memory_set/mod.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crate/memory/src/memory_set/mod.rs b/crate/memory/src/memory_set/mod.rs index 77eddc19..94d87650 100644 --- a/crate/memory/src/memory_set/mod.rs +++ b/crate/memory/src/memory_set/mod.rs @@ -56,7 +56,9 @@ impl MemoryArea { } /// Check the array is within the readable memory fn check_read_array(&self, ptr: *const S, count: usize) -> bool { - ptr as usize >= self.start_addr && unsafe { ptr.add(count) as usize } <= self.end_addr + // page align + ptr as usize >= Page::of_addr(self.start_addr).start_address() + && unsafe { ptr.add(count) as usize } < Page::of_addr(self.end_addr + PAGE_SIZE - 1).start_address() } /// Check the array is within the writable memory fn check_write_array(&self, ptr: *mut S, count: usize) -> bool { From f74a3b8e8b894e4edd0ebc4a0b5b8bb5261e0e2e Mon Sep 17 00:00:00 2001 From: WangRunji Date: Fri, 19 Apr 2019 00:37:30 +0800 Subject: [PATCH 25/36] by default: use busybox sh, disable log, build in release mode --- kernel/Makefile | 4 +-- kernel/events | 62 -------------------------------------- kernel/src/logging.rs | 3 +- kernel/src/shell.rs | 6 ++-- kernel/src/syscall/fs.rs | 38 +++++++++++++---------- kernel/src/syscall/proc.rs | 4 +-- 6 files changed, 30 insertions(+), 87 deletions(-) delete mode 100644 kernel/events diff --git a/kernel/Makefile b/kernel/Makefile index d21f3f5d..cdd9e0d0 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -33,8 +33,8 @@ arch ?= riscv64 board ?= none -mode ?= debug -LOG ?= debug +mode ?= release +LOG ?= graphic ?= off smp ?= 4 pci_passthru ?= diff --git a/kernel/events b/kernel/events deleted file mode 100644 index d99bc242..00000000 --- a/kernel/events +++ /dev/null @@ -1,62 +0,0 @@ -virtqueue_pop -virtio_blk_req_complete -virtio_blk_rw_complete -virtio_blk_submit_multireq -virtio_blk_handle_write -virtio_blk_handle_read -e1000e_link_status -e1000e_mac_set_sw -e1000e_irq_itr_set -e1000e_irq_eitr_set -e1000e_tx_disabled -e1000e_tx_descr -e1000e_rx_descr -#e1000e_rx_has_buffers -e1000e_rx_start_recv -#e1000e_rx_can_recv -e1000e_rx_can_recv_rings_full -e1000_receiver_overrun -#e1000e_rx_receive_iov -e1000e_core_ctrl_sw_reset -e1000e_core_ctrl_phy_reset -e1000e_rx_desc_buff_sizes -e1000e_rx_set_rctl -e1000e_rx_desc_len -e1000e_core_ctrl_write -e1000e_link_status_changed -e1000e_rx_rss_dispatched_to_queue -e1000e_rx_desc_buff_write -e1000e_rx_null_descriptor -e1000e_rx_set_rdt -e1000e_msix_use_vector_fail -e1000e_msix_init_fail -e1000e_msi_init_fail -e1000e_cb_pci_uninit -e1000e_cfg_support_virtio -e1000e_irq_msi_notify_postponed -e1000e_irq_msix_notify_postponed_vec -e1000e_irq_throttling_no_pending_vec -e1000e_irq_msix_notify_vec -e1000e_wrn_msix_vec_wrong -e1000e_wrn_msix_invalid -e1000e_irq_iam_clear_eiame -e1000e_irq_icr_clear_eiac -e1000e_irq_msi_notify -pci_update_mappings_del -pci_update_mappings_add -e1000e_irq_icr_write -e1000e_irq_icr_read_entry -e1000e_irq_legacy_notify -e1000e_irq_add_msi_other -e1000e_irq_pending_interrupts -e1000e_irq_icr_write -e1000e_irq_msix_notify_vec -e1000e_wrn_msix_vec_wrong -e1000e_wrn_msix_invalid -e1000e_irq_iam_clear_eiame -e1000e_irq_icr_clear_eiac -e1000e_irq_postponed_by_xitr -e1000e_intrmgr_rearm_timer -msix_* -#ahci_* -ide_* \ No newline at end of file diff --git a/kernel/src/logging.rs b/kernel/src/logging.rs index b832d50c..838abe5c 100644 --- a/kernel/src/logging.rs +++ b/kernel/src/logging.rs @@ -14,13 +14,12 @@ pub fn init() { static LOGGER: SimpleLogger = SimpleLogger; log::set_logger(&LOGGER).unwrap(); log::set_max_level(match option_env!("LOG") { - Some("off") => LevelFilter::Off, Some("error") => LevelFilter::Error, Some("warn") => LevelFilter::Warn, Some("info") => LevelFilter::Info, Some("debug") => LevelFilter::Debug, Some("trace") => LevelFilter::Trace, - _ => LevelFilter::Warn, + _ => LevelFilter::Off, }); } diff --git a/kernel/src/shell.rs b/kernel/src/shell.rs index fe8dc614..000ad633 100644 --- a/kernel/src/shell.rs +++ b/kernel/src/shell.rs @@ -8,12 +8,12 @@ use alloc::vec::Vec; #[cfg(not(feature = "run_cmdline"))] pub fn run_user_shell() { - if let Ok(inode) = ROOT_INODE.lookup("rust/sh") { + if let Ok(inode) = ROOT_INODE.lookup("busybox") { let data = inode.read_as_vec().unwrap(); processor().manager().add(Thread::new_user( data.as_slice(), - "rust/sh", - vec!["sh".into()], + "busybox", + vec!["busybox".into(), "sh".into()], Vec::new(), )); } else { diff --git a/kernel/src/syscall/fs.rs b/kernel/src/syscall/fs.rs index 4ad87e73..d9f843ae 100644 --- a/kernel/src/syscall/fs.rs +++ b/kernel/src/syscall/fs.rs @@ -80,11 +80,14 @@ pub fn sys_ppoll(ufds: *mut PollFd, nfds: usize, timeout: *const TimeSpec) -> Sy } pub fn sys_poll(ufds: *mut PollFd, nfds: usize, timeout_msecs: usize) -> SysResult { - info!( - "poll: ufds: {:?}, nfds: {}, timeout_msecs: {:#x}", - ufds, nfds, timeout_msecs - ); let proc = process(); + if !proc.pid.is_init() { + // we trust pid 0 process + info!( + "poll: ufds: {:?}, nfds: {}, timeout_msecs: {:#x}", + ufds, nfds, timeout_msecs + ); + } proc.vm.check_write_array(ufds, nfds)?; let polls = unsafe { slice::from_raw_parts_mut(ufds, nfds) }; @@ -222,11 +225,14 @@ pub fn sys_readv(fd: usize, iov_ptr: *const IoVec, iov_count: usize) -> SysResul } pub fn sys_writev(fd: usize, iov_ptr: *const IoVec, iov_count: usize) -> SysResult { - info!( - "writev: fd: {}, iov: {:?}, count: {}", - fd, iov_ptr, iov_count - ); let mut proc = process(); + if !proc.pid.is_init() { + // we trust pid 0 process + info!( + "writev: fd: {}, iov: {:?}, count: {}", + fd, iov_ptr, iov_count + ); + } let iovs = IoVecs::check_and_new(iov_ptr, iov_count, &proc.vm, false)?; let buf = iovs.read_all_to_vec(); @@ -297,7 +303,7 @@ pub fn sys_faccessat(dirfd: usize, path: *const u8, mode: usize, flags: usize) - // we trust pid 0 process info!( "faccessat: dirfd: {}, path: {:?}, mode: {:#o}, flags: {:?}", - dirfd, path, mode, flags + dirfd as isize, path, mode, flags ); } let inode = proc.lookup_inode_at(dirfd, &path)?; @@ -342,7 +348,7 @@ pub fn sys_fstatat(dirfd: usize, path: *const u8, stat_ptr: *mut Stat, flags: us let flags = AtFlags::from_bits_truncate(flags); info!( "fstatat: dirfd: {}, path: {:?}, stat_ptr: {:?}, flags: {:?}", - dirfd, path, stat_ptr, flags + dirfd as isize, path, stat_ptr, flags ); let inode = proc.lookup_inode_at(dirfd, &path)?; @@ -525,7 +531,7 @@ pub fn sys_renameat( let newpath = unsafe { proc.vm.check_and_clone_cstr(newpath)? }; info!( "renameat: olddirfd: {}, oldpath: {:?}, newdirfd: {}, newpath: {:?}", - olddirfd, oldpath, newdirfd, newpath + olddirfd as isize, oldpath, newdirfd as isize, newpath ); let (old_dir_path, old_file_name) = split_path(&oldpath); @@ -546,7 +552,7 @@ pub fn sys_mkdirat(dirfd: usize, path: *const u8, mode: usize) -> SysResult { // TODO: check pathname info!( "mkdirat: dirfd: {}, path: {:?}, mode: {:#o}", - dirfd, path, mode + dirfd as isize, path, mode ); let (dir_path, file_name) = split_path(&path); @@ -590,7 +596,7 @@ pub fn sys_linkat( let flags = AtFlags::from_bits_truncate(flags); info!( "linkat: olddirfd: {}, oldpath: {:?}, newdirfd: {}, newpath: {:?}, flags: {:?}", - olddirfd, oldpath, newdirfd, newpath, flags + olddirfd as isize, oldpath, newdirfd as isize, newpath, flags ); let (new_dir_path, new_file_name) = split_path(&newpath); @@ -610,7 +616,7 @@ pub fn sys_unlinkat(dirfd: usize, path: *const u8, flags: usize) -> SysResult { let flags = AtFlags::from_bits_truncate(flags); info!( "unlinkat: dirfd: {}, path: {:?}, flags: {:?}", - dirfd, path, flags + dirfd as isize, path, flags ); let (dir_path, file_name) = split_path(&path); @@ -765,8 +771,8 @@ impl Process { ) -> Result, SysError> { let follow = true; debug!( - "lookup_inode_at: fd: {:?}, cwd: {:?}, path: {:?}, follow: {:?}", - dirfd, self.cwd, path, follow + "lookup_inode_at: dirfd: {:?}, cwd: {:?}, path: {:?}, follow: {:?}", + dirfd as isize, self.cwd, path, follow ); let follow_max_depth = if follow { FOLLOW_MAX_DEPTH } else { 0 }; if dirfd == AT_FDCWD { diff --git a/kernel/src/syscall/proc.rs b/kernel/src/syscall/proc.rs index 9f3c97cf..362aef0d 100644 --- a/kernel/src/syscall/proc.rs +++ b/kernel/src/syscall/proc.rs @@ -124,7 +124,7 @@ pub fn sys_exec( envp: *const *const u8, tf: &mut TrapFrame, ) -> SysResult { - info!("exec: name: {:?}, argv: {:?} envp: {:?}", name, argv, envp); + info!("exec: name: {:?}, argv: {:?}, envp: {:?}", name, argv, envp); let proc = process(); let exec_name = if name.is_null() { String::from("") @@ -165,7 +165,7 @@ pub fn sys_exec( } info!( - "EXEC: name:{:?} , args {:?}, envp {:?}", + "exec: name: {:?}, args: {:?}, envp: {:?}", exec_name, args, envs ); From 229c64cc7d761a530fb537b44027ab5f467a99f5 Mon Sep 17 00:00:00 2001 From: Jiajie Chen Date: Fri, 19 Apr 2019 08:42:44 +0800 Subject: [PATCH 26/36] Fix IoVec length type --- kernel/src/syscall/fs.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/kernel/src/syscall/fs.rs b/kernel/src/syscall/fs.rs index d9f843ae..88c99eeb 100644 --- a/kernel/src/syscall/fs.rs +++ b/kernel/src/syscall/fs.rs @@ -1155,7 +1155,7 @@ pub struct IoVec { /// Starting address base: *mut u8, /// Number of bytes to transfer - len: u64, + len: usize, } /// A valid IoVecs request from user @@ -1176,15 +1176,15 @@ impl IoVecs { if iov.len > 0 { // skip empty iov if readv { - vm.check_write_array(iov.base, iov.len as usize)?; + vm.check_write_array(iov.base, iov.len)?; } else { - vm.check_read_array(iov.base, iov.len as usize)?; + vm.check_read_array(iov.base, iov.len)?; } } } let slices = iovs .iter() - .map(|iov| unsafe { slice::from_raw_parts_mut(iov.base, iov.len as usize) }) + .map(|iov| unsafe { slice::from_raw_parts_mut(iov.base, iov.len) }) .collect(); Ok(IoVecs(slices)) } @@ -1215,6 +1215,7 @@ impl IoVecs { /// For writev: `set_len` is false, Vec.cap = total_len. pub fn new_buf(&self, set_len: bool) -> Vec { let total_len = self.0.iter().map(|slice| slice.len()).sum::(); + info!("{}", total_len); let mut buf = Vec::with_capacity(total_len); if set_len { unsafe { From 7ce2fca20957578314e47ceddd7fb9ebcc4434a8 Mon Sep 17 00:00:00 2001 From: Jiajie Chen Date: Fri, 19 Apr 2019 09:17:27 +0800 Subject: [PATCH 27/36] Fix ls -al for symlinks --- kernel/src/syscall/fs.rs | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/kernel/src/syscall/fs.rs b/kernel/src/syscall/fs.rs index 88c99eeb..0025034d 100644 --- a/kernel/src/syscall/fs.rs +++ b/kernel/src/syscall/fs.rs @@ -259,7 +259,7 @@ pub fn sys_openat(dir_fd: usize, path: *const u8, flags: usize, mode: usize) -> let inode = if flags.contains(OpenFlags::CREATE) { let (dir_path, file_name) = split_path(&path); // relative to cwd - let dir_inode = proc.lookup_inode_at(dir_fd, dir_path)?; + let dir_inode = proc.lookup_inode_at(dir_fd, dir_path, true)?; match dir_inode.find(file_name) { Ok(file_inode) => { if flags.contains(OpenFlags::EXCLUSIVE) { @@ -273,7 +273,7 @@ pub fn sys_openat(dir_fd: usize, path: *const u8, flags: usize, mode: usize) -> Err(e) => return Err(SysError::from(e)), } } else { - proc.lookup_inode_at(dir_fd, &path)? + proc.lookup_inode_at(dir_fd, &path, true)? }; let fd = proc.get_free_fd(); @@ -306,7 +306,7 @@ pub fn sys_faccessat(dirfd: usize, path: *const u8, mode: usize, flags: usize) - dirfd as isize, path, mode, flags ); } - let inode = proc.lookup_inode_at(dirfd, &path)?; + let inode = proc.lookup_inode_at(dirfd, &path, !flags.contains(AtFlags::SYMLINK_NOFOLLOW))?; Ok(0) } @@ -325,8 +325,7 @@ pub fn sys_getcwd(buf: *mut u8, len: usize) -> SysResult { } pub fn sys_lstat(path: *const u8, stat_ptr: *mut Stat) -> SysResult { - warn!("lstat is partial implemented as stat"); - sys_stat(path, stat_ptr) + sys_fstatat(AT_FDCWD, path, stat_ptr, AtFlags::SYMLINK_NOFOLLOW.bits()) } pub fn sys_fstat(fd: usize, stat_ptr: *mut Stat) -> SysResult { @@ -351,7 +350,7 @@ pub fn sys_fstatat(dirfd: usize, path: *const u8, stat_ptr: *mut Stat, flags: us dirfd as isize, path, stat_ptr, flags ); - let inode = proc.lookup_inode_at(dirfd, &path)?; + let inode = proc.lookup_inode_at(dirfd, &path, !flags.contains(AtFlags::SYMLINK_NOFOLLOW))?; let stat = Stat::from(inode.metadata()?); unsafe { stat_ptr.write(stat); @@ -373,7 +372,7 @@ pub fn sys_readlinkat(dirfd: usize, path: *const u8, base: *mut u8, len: usize) proc.vm.check_write_array(base, len)?; info!("readlink: path: {:?}, base: {:?}, len: {}", path, base, len); - let inode = proc.lookup_inode_at(dirfd, &path)?; + let inode = proc.lookup_inode_at(dirfd, &path, false)?; if inode.metadata()?.type_ == FileType::SymLink { // TODO: recursive link resolution and loop detection let mut slice = unsafe { slice::from_raw_parts_mut(base, len) }; @@ -536,8 +535,8 @@ pub fn sys_renameat( let (old_dir_path, old_file_name) = split_path(&oldpath); let (new_dir_path, new_file_name) = split_path(&newpath); - let old_dir_inode = proc.lookup_inode_at(olddirfd, old_dir_path)?; - let new_dir_inode = proc.lookup_inode_at(newdirfd, new_dir_path)?; + let old_dir_inode = proc.lookup_inode_at(olddirfd, old_dir_path, false)?; + let new_dir_inode = proc.lookup_inode_at(newdirfd, new_dir_path, false)?; old_dir_inode.move_(old_file_name, &new_dir_inode, new_file_name)?; Ok(0) } @@ -556,7 +555,7 @@ pub fn sys_mkdirat(dirfd: usize, path: *const u8, mode: usize) -> SysResult { ); let (dir_path, file_name) = split_path(&path); - let inode = proc.lookup_inode_at(dirfd, dir_path)?; + let inode = proc.lookup_inode_at(dirfd, dir_path, true)?; if inode.find(file_name).is_ok() { return Err(SysError::EEXIST); } @@ -600,8 +599,8 @@ pub fn sys_linkat( ); let (new_dir_path, new_file_name) = split_path(&newpath); - let inode = proc.lookup_inode_at(olddirfd, &oldpath)?; - let new_dir_inode = proc.lookup_inode_at(newdirfd, new_dir_path)?; + let inode = proc.lookup_inode_at(olddirfd, &oldpath, true)?; + let new_dir_inode = proc.lookup_inode_at(newdirfd, new_dir_path, true)?; new_dir_inode.link(new_file_name, &inode)?; Ok(0) } @@ -620,7 +619,7 @@ pub fn sys_unlinkat(dirfd: usize, path: *const u8, flags: usize) -> SysResult { ); let (dir_path, file_name) = split_path(&path); - let dir_inode = proc.lookup_inode_at(dirfd, dir_path)?; + let dir_inode = proc.lookup_inode_at(dirfd, dir_path, true)?; let file_inode = dir_inode.find(file_name)?; if file_inode.metadata()?.type_ == FileType::Dir { return Err(SysError::EISDIR); @@ -767,9 +766,8 @@ impl Process { &self, dirfd: usize, path: &str, - // follow: bool, + follow: bool, ) -> Result, SysError> { - let follow = true; debug!( "lookup_inode_at: dirfd: {:?}, cwd: {:?}, path: {:?}, follow: {:?}", dirfd as isize, self.cwd, path, follow @@ -789,7 +787,7 @@ impl Process { } pub fn lookup_inode(&self, path: &str) -> Result, SysError> { - self.lookup_inode_at(AT_FDCWD, path) + self.lookup_inode_at(AT_FDCWD, path, true) } } @@ -1215,7 +1213,6 @@ impl IoVecs { /// For writev: `set_len` is false, Vec.cap = total_len. pub fn new_buf(&self, set_len: bool) -> Vec { let total_len = self.0.iter().map(|slice| slice.len()).sum::(); - info!("{}", total_len); let mut buf = Vec::with_capacity(total_len); if set_len { unsafe { From 8494bf9b0c146200f17652e68a0ef7e4752870b3 Mon Sep 17 00:00:00 2001 From: Jiajie Chen Date: Fri, 19 Apr 2019 12:34:27 +0800 Subject: [PATCH 28/36] Fix sys_sendfile args --- kernel/src/arch/x86_64/gdt.rs | 29 ++++----- kernel/src/process/mod.rs | 112 ++++++++++++++++++++++++---------- kernel/src/syscall/mod.rs | 2 +- 3 files changed, 94 insertions(+), 49 deletions(-) diff --git a/kernel/src/arch/x86_64/gdt.rs b/kernel/src/arch/x86_64/gdt.rs index 90e50375..ed648e34 100644 --- a/kernel/src/arch/x86_64/gdt.rs +++ b/kernel/src/arch/x86_64/gdt.rs @@ -17,22 +17,19 @@ pub fn init() { static mut CPUS: [Option; MAX_CPU_NUM] = [ // TODO: More elegant ? - None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, -// None, None, None, None, None, None, None, None, -// None, None, None, None, None, None, None, None, -// None, None, None, None, None, None, None, None, -// None, None, None, None, None, None, None, None, -// None, None, None, None, None, None, None, None, -// None, None, None, None, None, None, None, None, -// None, None, None, None, None, None, None, None, -// None, None, None, None, None, None, None, None, + None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, + None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, + None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, + None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, + None, + // None, None, None, None, None, None, None, None, + // None, None, None, None, None, None, None, None, + // None, None, None, None, None, None, None, None, + // None, None, None, None, None, None, None, None, + // None, None, None, None, None, None, None, None, + // None, None, None, None, None, None, None, None, + // None, None, None, None, None, None, None, None, + // None, None, None, None, None, None, None, None, ]; pub struct Cpu { diff --git a/kernel/src/process/mod.rs b/kernel/src/process/mod.rs index fca611da..516d29e2 100644 --- a/kernel/src/process/mod.rs +++ b/kernel/src/process/mod.rs @@ -27,38 +27,86 @@ pub fn init() { static PROCESSORS: [Processor; MAX_CPU_NUM] = [ // TODO: More elegant ? - Processor::new(), Processor::new(), Processor::new(), Processor::new(), - Processor::new(), Processor::new(), Processor::new(), Processor::new(), - Processor::new(), Processor::new(), Processor::new(), Processor::new(), - Processor::new(), Processor::new(), Processor::new(), Processor::new(), - Processor::new(), Processor::new(), Processor::new(), Processor::new(), - Processor::new(), Processor::new(), Processor::new(), Processor::new(), - Processor::new(), Processor::new(), Processor::new(), Processor::new(), - Processor::new(), Processor::new(), Processor::new(), Processor::new(), - Processor::new(), Processor::new(), Processor::new(), Processor::new(), - Processor::new(), Processor::new(), Processor::new(), Processor::new(), - Processor::new(), Processor::new(), Processor::new(), Processor::new(), - Processor::new(), Processor::new(), Processor::new(), Processor::new(), - Processor::new(), Processor::new(), Processor::new(), Processor::new(), - Processor::new(), Processor::new(), Processor::new(), Processor::new(), - Processor::new(), Processor::new(), Processor::new(), Processor::new(), - Processor::new(), Processor::new(), Processor::new(), Processor::new(), -// Processor::new(), Processor::new(), Processor::new(), Processor::new(), -// Processor::new(), Processor::new(), Processor::new(), Processor::new(), -// Processor::new(), Processor::new(), Processor::new(), Processor::new(), -// Processor::new(), Processor::new(), Processor::new(), Processor::new(), -// Processor::new(), Processor::new(), Processor::new(), Processor::new(), -// Processor::new(), Processor::new(), Processor::new(), Processor::new(), -// Processor::new(), Processor::new(), Processor::new(), Processor::new(), -// Processor::new(), Processor::new(), Processor::new(), Processor::new(), -// Processor::new(), Processor::new(), Processor::new(), Processor::new(), -// Processor::new(), Processor::new(), Processor::new(), Processor::new(), -// Processor::new(), Processor::new(), Processor::new(), Processor::new(), -// Processor::new(), Processor::new(), Processor::new(), Processor::new(), -// Processor::new(), Processor::new(), Processor::new(), Processor::new(), -// Processor::new(), Processor::new(), Processor::new(), Processor::new(), -// Processor::new(), Processor::new(), Processor::new(), Processor::new(), -// Processor::new(), Processor::new(), Processor::new(), Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + Processor::new(), + // Processor::new(), Processor::new(), Processor::new(), Processor::new(), + // Processor::new(), Processor::new(), Processor::new(), Processor::new(), + // Processor::new(), Processor::new(), Processor::new(), Processor::new(), + // Processor::new(), Processor::new(), Processor::new(), Processor::new(), + // Processor::new(), Processor::new(), Processor::new(), Processor::new(), + // Processor::new(), Processor::new(), Processor::new(), Processor::new(), + // Processor::new(), Processor::new(), Processor::new(), Processor::new(), + // Processor::new(), Processor::new(), Processor::new(), Processor::new(), + // Processor::new(), Processor::new(), Processor::new(), Processor::new(), + // Processor::new(), Processor::new(), Processor::new(), Processor::new(), + // Processor::new(), Processor::new(), Processor::new(), Processor::new(), + // Processor::new(), Processor::new(), Processor::new(), Processor::new(), + // Processor::new(), Processor::new(), Processor::new(), Processor::new(), + // Processor::new(), Processor::new(), Processor::new(), Processor::new(), + // Processor::new(), Processor::new(), Processor::new(), Processor::new(), + // Processor::new(), Processor::new(), Processor::new(), Processor::new(), ]; /// Get current process diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index aaf9b9fd..046bd719 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -88,7 +88,7 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> isize { } SYS_GETPID => sys_getpid(), // 40 - SYS_SENDFILE => sys_sendfile(args[0], args[1], args[3] as *mut usize, args[4]), + SYS_SENDFILE => sys_sendfile(args[0], args[1], args[2] as *mut usize, args[3]), SYS_SOCKET => sys_socket(args[0], args[1], args[2]), SYS_CONNECT => sys_connect(args[0], args[1] as *const SockAddr, args[2]), SYS_ACCEPT => sys_accept(args[0], args[1] as *mut SockAddr, args[2] as *mut u32), From 8090e154c171d4cfabc9b585f1f950d309a6bcd9 Mon Sep 17 00:00:00 2001 From: WangRunji Date: Fri, 19 Apr 2019 12:43:05 +0800 Subject: [PATCH 29/36] simplify sys_sendfile. check elf arch --- kernel/src/process/structs.rs | 18 +++++- kernel/src/syscall/fs.rs | 103 ++++++++++++++++------------------ kernel/src/syscall/mod.rs | 8 +++ 3 files changed, 70 insertions(+), 59 deletions(-) diff --git a/kernel/src/process/structs.rs b/kernel/src/process/structs.rs index 06cb0b71..a9982ee8 100644 --- a/kernel/src/process/structs.rs +++ b/kernel/src/process/structs.rs @@ -174,18 +174,30 @@ impl Thread { _ => panic!("ELF is not executable or shared object"), } - // Check interpreter + // Check ELF arch + match elf.header.pt2.machine().as_machine() { + #[cfg(target_arch = "x86_64")] + header::Machine::X86_64 => {} + #[cfg(target_arch = "aarch64")] + header::Machine::AArch64 => {} + #[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))] + header::Machine::Other(243) => {} + #[cfg(target_arch = "mips")] + header::Machine::Mips => {} + machine @ _ => panic!("invalid elf arch: {:?}", machine), + } + + // Check interpreter (for dynamic link) if let Ok(loader_path) = elf.get_interpreter() { // assuming absolute path if let Ok(inode) = crate::fs::ROOT_INODE.lookup_follow(loader_path, FOLLOW_MAX_DEPTH) { if let Ok(buf) = inode.read_as_vec() { - debug!("using loader {}", &loader_path); // Elf loader should not have INTERP // No infinite loop args.insert(0, loader_path.into()); args.insert(1, exec_path.into()); args.remove(2); - warn!("loader args: {:?}", args); + info!("loader args: {:?}", args); return Thread::new_user(buf.as_slice(), exec_path, args, envs); } else { warn!("loader specified as {} but failed to read", &loader_path); diff --git a/kernel/src/syscall/fs.rs b/kernel/src/syscall/fs.rs index 0025034d..43d0bca3 100644 --- a/kernel/src/syscall/fs.rs +++ b/kernel/src/syscall/fs.rs @@ -662,8 +662,8 @@ pub fn sys_pipe(fds: *mut u32) -> SysResult { ); unsafe { - *fds = read_fd as u32; - *(fds.add(1)) = write_fd as u32; + fds.write(read_fd as u32); + fds.add(1).write(write_fd as u32); } info!("pipe: created rfd: {} wfd: {}", read_fd, write_fd); @@ -676,69 +676,60 @@ pub fn sys_sync() -> SysResult { Ok(0) } -pub fn sys_sendfile(out_fd: usize, in_fd: usize, offset: *mut usize, count: usize) -> SysResult { +pub fn sys_sendfile( + out_fd: usize, + in_fd: usize, + offset_ptr: *mut usize, + count: usize, +) -> SysResult { info!( - "sendfile: out: {}, in: {}, offset: {:?}, count: {}", - out_fd, in_fd, offset, count + "sendfile: out: {}, in: {}, offset_ptr: {:?}, count: {}", + out_fd, in_fd, offset_ptr, count ); let proc = process(); // We know it's save, pacify the borrow checker let proc_cell = UnsafeCell::new(proc); - let proc_in = unsafe { &mut *proc_cell.get() }; - let proc_out = unsafe { &mut *proc_cell.get() }; - //let in_file: &mut FileHandle = unsafe { &mut *UnsafeCell::new(proc.get_file(in_fd)?).get() }; - //let out_file: &mut FileHandle = unsafe { &mut *UnsafeCell::new(proc.get_file(out_fd)?).get() }; - let in_file = proc_in.get_file(in_fd)?; - let out_file = proc_out.get_file(out_fd)?; + let in_file = unsafe { (*proc_cell.get()).get_file(in_fd)? }; + let out_file = unsafe { (*proc_cell.get()).get_file(out_fd)? }; let mut buffer = [0u8; 1024]; - if offset.is_null() { - // read from current file offset - let mut bytes_read = 0; - while bytes_read < count { - let len = min(buffer.len(), count - bytes_read); - let read_len = in_file.read(&mut buffer[..len])?; - if read_len == 0 { - break; - } - bytes_read += read_len; - let mut bytes_written = 0; - while bytes_written < read_len { - let write_len = out_file.write(&buffer[bytes_written..])?; - if write_len == 0 { - return Err(SysError::EBADF); - } - bytes_written += write_len; - } - } - return Ok(bytes_read); - } else { - let proc_mem = unsafe { &mut *proc_cell.get() }; - proc_mem.vm.check_read_ptr(offset)?; - let mut read_offset = unsafe { *offset }; - // read from specified offset and write new offset back - let mut bytes_read = 0; - while bytes_read < count { - let len = min(buffer.len(), count - bytes_read); - let read_len = in_file.read_at(read_offset, &mut buffer[..len])?; - if read_len == 0 { - break; - } - bytes_read += read_len; - read_offset += read_len; - let mut bytes_written = 0; - while bytes_written < read_len { - let write_len = out_file.write(&buffer[bytes_written..])?; - if write_len == 0 { - return Err(SysError::EBADF); - } - bytes_written += write_len; - } - } + + let mut read_offset = if !offset_ptr.is_null() { unsafe { - *offset = read_offset; + (*proc_cell.get()).vm.check_read_ptr(offset_ptr)?; + offset_ptr.read() + } + } else { + in_file.seek(SeekFrom::Current(0))? as usize + }; + + // read from specified offset and write new offset back + let mut bytes_read = 0; + while bytes_read < count { + let len = min(buffer.len(), count - bytes_read); + let read_len = in_file.read_at(read_offset, &mut buffer[..len])?; + if read_len == 0 { + break; + } + bytes_read += read_len; + read_offset += read_len; + let mut bytes_written = 0; + while bytes_written < read_len { + let write_len = out_file.write(&buffer[bytes_written..])?; + if write_len == 0 { + return Err(SysError::EBADF); + } + bytes_written += write_len; } - return Ok(bytes_read); } + + if !offset_ptr.is_null() { + unsafe { + offset_ptr.write(read_offset); + } + } else { + in_file.seek(SeekFrom::Current(bytes_read as i64))?; + } + return Ok(bytes_read); } impl Process { diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index 046bd719..23487d77 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -229,6 +229,10 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> isize { Err(SysError::EACCES) } SYS_SETPRIORITY => sys_set_priority(args[0]), + SYS_PRCTL => { + warn!("ptctl is unimplemented"); + Ok(0) + } // SYS_SETRLIMIT => sys_setrlimit(), SYS_SYNC => sys_sync(), SYS_MOUNT => { @@ -264,6 +268,10 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> isize { SYS_MKDIRAT => sys_mkdirat(args[0], args[1] as *const u8, args[2]), // SYS_MKNODAT => sys_mknod(), // 260 + SYS_FCHMODAT => { + warn!("sys_fchmodat is unimplemented"); + Ok(0) + } SYS_FCHOWNAT => { warn!("sys_fchownat is unimplemented"); Ok(0) From 1fd0060a1acefa2295b9e19347ff9d5d4ffab2fb Mon Sep 17 00:00:00 2001 From: Jiajie Chen Date: Fri, 19 Apr 2019 13:43:31 +0800 Subject: [PATCH 30/36] Fix typo --- kernel/src/syscall/mod.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index 23487d77..7bd1a779 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -230,7 +230,7 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> isize { } SYS_SETPRIORITY => sys_set_priority(args[0]), SYS_PRCTL => { - warn!("ptctl is unimplemented"); + warn!("prctl is unimplemented"); Ok(0) } // SYS_SETRLIMIT => sys_setrlimit(), @@ -268,19 +268,12 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> isize { SYS_MKDIRAT => sys_mkdirat(args[0], args[1] as *const u8, args[2]), // SYS_MKNODAT => sys_mknod(), // 260 - SYS_FCHMODAT => { - warn!("sys_fchmodat is unimplemented"); - Ok(0) - } SYS_FCHOWNAT => { warn!("sys_fchownat is unimplemented"); Ok(0) } SYS_NEWFSTATAT => sys_fstatat(args[0], args[1] as *const u8, args[2] as *mut Stat, args[3]), SYS_UNLINKAT => sys_unlinkat(args[0], args[1] as *const u8, args[2]), - SYS_READLINKAT => { - sys_readlinkat(args[0], args[1] as *const u8, args[2] as *mut u8, args[3]) - } SYS_RENAMEAT => sys_renameat(args[0], args[1] as *const u8, args[2], args[3] as *const u8), SYS_LINKAT => sys_linkat( args[0], @@ -290,6 +283,13 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> isize { args[4], ), SYS_SYMLINKAT => Err(SysError::EACCES), + SYS_READLINKAT => { + sys_readlinkat(args[0], args[1] as *const u8, args[2] as *mut u8, args[3]) + } + SYS_FCHMODAT => { + warn!("sys_fchmodat is unimplemented"); + Ok(0) + } SYS_FACCESSAT => sys_faccessat(args[0], args[1] as *const u8, args[2], args[3]), SYS_PPOLL => sys_ppoll(args[0] as *mut PollFd, args[1], args[2] as *const TimeSpec), // ignore sigmask // 280 From 4a1c7976d3d7814671a5e1c92c439d20acc18bcb Mon Sep 17 00:00:00 2001 From: chyyuu Date: Fri, 19 Apr 2019 14:24:25 +0800 Subject: [PATCH 31/36] fix bug: correct sys_sendfile args[3..4]-->[2..3] --- kernel/src/syscall/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index aaf9b9fd..046bd719 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -88,7 +88,7 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> isize { } SYS_GETPID => sys_getpid(), // 40 - SYS_SENDFILE => sys_sendfile(args[0], args[1], args[3] as *mut usize, args[4]), + SYS_SENDFILE => sys_sendfile(args[0], args[1], args[2] as *mut usize, args[3]), SYS_SOCKET => sys_socket(args[0], args[1], args[2]), SYS_CONNECT => sys_connect(args[0], args[1] as *const SockAddr, args[2]), SYS_ACCEPT => sys_accept(args[0], args[1] as *mut SockAddr, args[2] as *mut u32), From e01d23e526446b288225b940425954bb5d4568d7 Mon Sep 17 00:00:00 2001 From: WangRunji Date: Sat, 20 Apr 2019 00:15:22 +0800 Subject: [PATCH 32/36] replace riscv-pk by OpenSBI ! --- .gitmodules | 3 - kernel/Cargo.toml | 1 + kernel/Makefile | 45 +++++---------- kernel/src/arch/riscv32/board/u540/linker.ld | 49 ----------------- kernel/src/arch/riscv32/board/u540/mod.rs | 13 ++++- kernel/src/arch/riscv32/board/virt/mod.rs | 18 ++++++ kernel/src/arch/riscv32/boot/entry.asm | 19 ------- kernel/src/arch/riscv32/boot/entry32.asm | 55 +++++++++++++++++++ kernel/src/arch/riscv32/boot/entry64.asm | 48 ++++++++++++++++ kernel/src/arch/riscv32/boot/linker.ld | 2 +- kernel/src/arch/riscv32/boot/linker64.ld | 2 +- kernel/src/arch/riscv32/consts.rs | 12 +--- kernel/src/arch/riscv32/cpu.rs | 17 ------ kernel/src/arch/riscv32/io.rs | 3 - kernel/src/arch/riscv32/memory.rs | 26 ++++++++- kernel/src/arch/riscv32/mod.rs | 40 +++++++++----- kernel/src/arch/riscv32/paging.rs | 12 +++- kernel/src/arch/riscv32/sbi.rs | 1 + kernel/src/fs/stdio.rs | 2 - kernel/src/memory.rs | 4 +- riscv-pk | 1 - tools/opensbi/README.md | 9 +++ tools/opensbi/fu540.elf | Bin 0 -> 359536 bytes tools/opensbi/virt_rv32.elf | Bin 0 -> 214736 bytes tools/opensbi/virt_rv64.elf | Bin 0 -> 220944 bytes 25 files changed, 224 insertions(+), 158 deletions(-) delete mode 100644 kernel/src/arch/riscv32/board/u540/linker.ld create mode 100644 kernel/src/arch/riscv32/board/virt/mod.rs delete mode 100644 kernel/src/arch/riscv32/boot/entry.asm create mode 100644 kernel/src/arch/riscv32/boot/entry32.asm create mode 100644 kernel/src/arch/riscv32/boot/entry64.asm delete mode 160000 riscv-pk create mode 100644 tools/opensbi/README.md create mode 100755 tools/opensbi/fu540.elf create mode 100755 tools/opensbi/virt_rv32.elf create mode 100755 tools/opensbi/virt_rv64.elf diff --git a/.gitmodules b/.gitmodules index 1f53219e..2c5ce1fb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "riscv-pk"] - path = riscv-pk - url = https://github.com/rcore-os/riscv-pk.git [submodule "user"] path = user url = https://github.com/rcore-os/rcore-user.git diff --git a/kernel/Cargo.toml b/kernel/Cargo.toml index a2262932..c4ce68cb 100644 --- a/kernel/Cargo.toml +++ b/kernel/Cargo.toml @@ -19,6 +19,7 @@ authors = [ ] [features] +default = ["sv39"] # Page table sv39 or sv48 (for riscv64) sv39 = [] board_u540 = ["sv39", "link_user"] diff --git a/kernel/Makefile b/kernel/Makefile index cdd9e0d0..63f52ff4 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -124,7 +124,8 @@ endif else ifeq ($(arch), riscv32) qemu_opts += \ -machine virt \ - -kernel $(kernel_img) \ + -kernel ../tools/opensbi/virt_rv32.elf \ + -device loader,addr=0x80400000,file=$(kernel_img) \ -drive file=$(SFSIMG),format=qcow2,id=sfs \ -device virtio-blk-device,drive=sfs qemu_net_opts += \ @@ -132,11 +133,19 @@ qemu_net_opts += \ -device virtio-net-device,netdev=net0 else ifeq ($(arch), riscv64) +ifeq ($(board), u540) qemu_opts += \ -machine virt \ - -kernel $(kernel_img) \ + -kernel ../tools/opensbi/fu540.elf \ + -device loader,addr=0x80200000,file=$(kernel_img) +else +qemu_opts += \ + -machine virt \ + -kernel ../tools/opensbi/virt_rv64.elf \ + -device loader,addr=0x80200000,file=$(kernel_img) \ -drive file=$(SFSIMG),format=qcow2,id=sfs \ -device virtio-blk-device,drive=sfs +endif qemu_net_opts += \ -netdev type=tap,id=net0,script=no,downscript=no \ -device virtio-net-device,netdev=net0 @@ -297,28 +306,8 @@ ifeq ($(need_bootloader), true) endif $(kernel_img): kernel $(bootloader) -ifeq ($(arch), riscv32) - @mkdir -p target/$(target)/bbl && \ - cd target/$(target)/bbl && \ - $(bbl_path)/configure \ - $(riscv_pk_args) \ - --with-arch=rv32imac \ - --disable-fp-emulation \ - --host=riscv64-unknown-elf \ - --with-payload=$(abspath $(kernel)) && \ - make -j && \ - cp bbl $(abspath $@) -else ifeq ($(arch), riscv64) - @mkdir -p target/$(target)/bbl && \ - cd target/$(target)/bbl && \ - $(bbl_path)/configure \ - $(riscv_pk_args) \ - --with-arch=rv64imac \ - --disable-fp-emulation \ - --host=riscv64-unknown-elf \ - --with-payload=$(abspath $(kernel)) && \ - make -j && \ - cp bbl $(abspath $@) +ifeq ($(arch), $(filter $(arch), riscv32 riscv64)) + @$(objcopy) $(kernel) --strip-all -O binary $@ else ifeq ($(arch), aarch64) ifneq ($(u_boot), ) @cp $(u_boot) $@ @@ -335,13 +324,7 @@ kernel: $(dtb) ifeq ($(arch), x86_64) @bootimage build $(build_args) @mv target/x86_64/bootimage.bin $(bootimage) -else ifeq ($(arch), riscv32) - @-patch -p0 -N -b \ - $(shell rustc --print sysroot)/lib/rustlib/src/rust/src/libcore/sync/atomic.rs \ - src/arch/riscv32/atomic.patch - @cargo xbuild $(build_args) -else ifeq ($(arch), riscv64) - @cp src/arch/riscv32/board/u540/linker.ld src/arch/riscv32/boot/linker64.ld +else ifeq ($(arch), $(filter $(arch), riscv32 riscv64)) @-patch -p0 -N -b \ $(shell rustc --print sysroot)/lib/rustlib/src/rust/src/libcore/sync/atomic.rs \ src/arch/riscv32/atomic.patch diff --git a/kernel/src/arch/riscv32/board/u540/linker.ld b/kernel/src/arch/riscv32/board/u540/linker.ld deleted file mode 100644 index 6bbe85b1..00000000 --- a/kernel/src/arch/riscv32/board/u540/linker.ld +++ /dev/null @@ -1,49 +0,0 @@ -/* Copy from bbl-ucore : https://ring00.github.io/bbl-ucore */ - -/* Simple linker script for the ucore kernel. - See the GNU ld 'info' manual ("info ld") to learn the syntax. */ - -OUTPUT_ARCH(riscv) -ENTRY(_start) - -BASE_ADDRESS = 0xffffffffc0020000; - -SECTIONS -{ - /* Load the kernel at this address: "." means the current address */ - . = BASE_ADDRESS; - start = .; - - .text : { - stext = .; - *(.text.entry) - *(.text .text.*) - . = ALIGN(4K); - etext = .; - } - - .rodata : { - srodata = .; - *(.rodata .rodata.*) - . = ALIGN(4K); - erodata = .; - } - - .data : { - sdata = .; - *(.data .data.*) - edata = .; - } - - .stack : { - *(.bss.stack) - } - - .bss : { - sbss = .; - *(.bss .bss.*) - ebss = .; - } - - PROVIDE(end = .); -} diff --git a/kernel/src/arch/riscv32/board/u540/mod.rs b/kernel/src/arch/riscv32/board/u540/mod.rs index 2e9f7a62..816632da 100644 --- a/kernel/src/arch/riscv32/board/u540/mod.rs +++ b/kernel/src/arch/riscv32/board/u540/mod.rs @@ -4,7 +4,7 @@ use super::consts::KERNEL_OFFSET; pub unsafe fn init_external_interrupt() { const HART1_S_MODE_INTERRUPT_ENABLES: *mut u64 = (KERNEL_OFFSET + 0x0C00_2100) as *mut u64; const SERIAL: u64 = 4; - HART1_S_MODE_INTERRUPT_ENABLES.write(1 << SERIAL); + HART1_S_MODE_INTERRUPT_ENABLES.write_volatile(1 << SERIAL); } /// Claim and complete external interrupt by reading and writing to @@ -13,7 +13,14 @@ pub unsafe fn handle_external_interrupt() { const HART1_S_MODE_INTERRUPT_CLAIM_COMPLETE: *mut u32 = (KERNEL_OFFSET + 0x0C20_2004) as *mut u32; // claim - let source = HART1_S_MODE_INTERRUPT_CLAIM_COMPLETE.read(); + let source = HART1_S_MODE_INTERRUPT_CLAIM_COMPLETE.read_volatile(); // complete - HART1_S_MODE_INTERRUPT_CLAIM_COMPLETE.write(source); + HART1_S_MODE_INTERRUPT_CLAIM_COMPLETE.write_volatile(source); +} + +pub unsafe fn enable_serial_interrupt() { + const SERIAL_BASE: *mut u8 = (KERNEL_OFFSET + 0x10010000) as *mut u8; + const UART_REG_IE: usize = 4; + const UART_RXWM: u8 = 0x2; + SERIAL_BASE.add(UART_REG_IE).write_volatile(UART_RXWM); } diff --git a/kernel/src/arch/riscv32/board/virt/mod.rs b/kernel/src/arch/riscv32/board/virt/mod.rs new file mode 100644 index 00000000..52df8727 --- /dev/null +++ b/kernel/src/arch/riscv32/board/virt/mod.rs @@ -0,0 +1,18 @@ +use super::consts::KERNEL_OFFSET; + +/// Mask all external interrupt except serial. +pub unsafe fn init_external_interrupt() { + // By default: + // riscv-pk (bbl) enables all S-Mode IRQs (ref: machine/minit.c) + // OpenSBI v0.3 disables all IRQs (ref: platform/common/irqchip/plic.c) + + const HART0_S_MODE_INTERRUPT_ENABLES: *mut u32 = (KERNEL_OFFSET + 0x0C00_2080) as *mut u32; + const SERIAL: u32 = 0xa; + HART0_S_MODE_INTERRUPT_ENABLES.write_volatile(1 << SERIAL); +} + +pub unsafe fn enable_serial_interrupt() { + const UART16550: *mut u8 = (KERNEL_OFFSET + 0x10000000) as *mut u8; + UART16550.add(4).write_volatile(0x0B); + UART16550.add(1).write_volatile(0x01); +} diff --git a/kernel/src/arch/riscv32/boot/entry.asm b/kernel/src/arch/riscv32/boot/entry.asm deleted file mode 100644 index 3cee2fd3..00000000 --- a/kernel/src/arch/riscv32/boot/entry.asm +++ /dev/null @@ -1,19 +0,0 @@ - .section .text.entry - .globl _start -_start: - add t0, a0, 1 - slli t0, t0, 16 - - lui sp, %hi(bootstack) - addi sp, sp, %lo(bootstack) - add sp, sp, t0 - - call rust_main - - .section .bss.stack - .align 12 #PGSHIFT - .global bootstack -bootstack: - .space 4096 * 16 * 8 - .global bootstacktop -bootstacktop: diff --git a/kernel/src/arch/riscv32/boot/entry32.asm b/kernel/src/arch/riscv32/boot/entry32.asm new file mode 100644 index 00000000..22cc0eed --- /dev/null +++ b/kernel/src/arch/riscv32/boot/entry32.asm @@ -0,0 +1,55 @@ + .section .text.entry + .globl _start +_start: + # a0 == hartid + # pc == 0x80200000 + # sp == 0x800xxxxx + + # 1. set sp + # sp = bootstack + (hartid + 1) * 0x10000 + add t0, a0, 1 + slli t0, t0, 16 + lui sp, %hi(bootstack) + add sp, sp, t0 + + # 2. enable paging + # satp = (1 << 31) | PPN(boot_page_table_sv32) + lui t0, %hi(boot_page_table_sv32) + li t1, 0xc0000000 - 0x80000000 + sub t0, t0, t1 + srli t0, t0, 12 + li t1, 1 << 31 + or t0, t0, t1 + csrw satp, t0 + sfence.vma + + # 3. jump to rust_main (absolute address) + lui t0, %hi(rust_main) + addi t0, t0, %lo(rust_main) + jr t0 + + .section .bss.stack + .align 12 # page align + .global bootstack +bootstack: + .space 4096 * 16 * 8 + .global bootstacktop +bootstacktop: + + .section .data + .align 12 # page align +boot_page_table_sv32: + # NOTE: assume kernel image < 16M + # 0x80000000 -> 0x80000000 (4M * 4) + # 0xc0000000 -> 0x80000000 (4M * 4) + .zero 4 * 512 + .word (0x80000 << 10) | 0xcf # VRWXAD + .word (0x80400 << 10) | 0xcf # VRWXAD + .word (0x80800 << 10) | 0xcf # VRWXAD + .word (0x80c00 << 10) | 0xcf # VRWXAD + .zero 4 * 252 + .word (0x80000 << 10) | 0xcf # VRWXAD + .word (0x80400 << 10) | 0xcf # VRWXAD + .word (0x80800 << 10) | 0xcf # VRWXAD + .word (0x80c00 << 10) | 0xcf # VRWXAD + .zero 4 * 252 diff --git a/kernel/src/arch/riscv32/boot/entry64.asm b/kernel/src/arch/riscv32/boot/entry64.asm new file mode 100644 index 00000000..69727d5a --- /dev/null +++ b/kernel/src/arch/riscv32/boot/entry64.asm @@ -0,0 +1,48 @@ + .section .text.entry + .globl _start +_start: + # a0 == hartid + # pc == 0x80200000 + # sp == 0x800xxxxx + + # 1. set sp + # sp = bootstack + (hartid + 1) * 0x10000 + add t0, a0, 1 + slli t0, t0, 16 + lui sp, %hi(bootstack) + add sp, sp, t0 + + # 2. enable paging + # satp = (8 << 60) | PPN(boot_page_table_sv39) + lui t0, %hi(boot_page_table_sv39) + li t1, 0xffffffffc0000000 - 0x80000000 + sub t0, t0, t1 + srli t0, t0, 12 + li t1, 8 << 60 + or t0, t0, t1 + csrw satp, t0 + sfence.vma + + # 3. jump to rust_main (absolute address) + lui t0, %hi(rust_main) + addi t0, t0, %lo(rust_main) + jr t0 + + .section .bss.stack + .align 12 # page align + .global bootstack +bootstack: + .space 4096 * 16 * 8 + .global bootstacktop +bootstacktop: + + .section .data + .align 12 # page align +boot_page_table_sv39: + # 0x00000000_80000000 -> 0x80000000 (1G) + # 0xffffffff_c0000000 -> 0x80000000 (1G) + .quad 0 + .quad 0 + .quad (0x80000 << 10) | 0xcf # VRWXAD + .zero 8 * 508 + .quad (0x80000 << 10) | 0xcf # VRWXAD diff --git a/kernel/src/arch/riscv32/boot/linker.ld b/kernel/src/arch/riscv32/boot/linker.ld index bc3ba7f4..b9efafa5 100644 --- a/kernel/src/arch/riscv32/boot/linker.ld +++ b/kernel/src/arch/riscv32/boot/linker.ld @@ -6,7 +6,7 @@ OUTPUT_ARCH(riscv) ENTRY(_start) -BASE_ADDRESS = 0xC0020000; +BASE_ADDRESS = 0xC0400000; SECTIONS { diff --git a/kernel/src/arch/riscv32/boot/linker64.ld b/kernel/src/arch/riscv32/boot/linker64.ld index 6bbe85b1..87ca826c 100644 --- a/kernel/src/arch/riscv32/boot/linker64.ld +++ b/kernel/src/arch/riscv32/boot/linker64.ld @@ -6,7 +6,7 @@ OUTPUT_ARCH(riscv) ENTRY(_start) -BASE_ADDRESS = 0xffffffffc0020000; +BASE_ADDRESS = 0xffffffffc0200000; SECTIONS { diff --git a/kernel/src/arch/riscv32/consts.rs b/kernel/src/arch/riscv32/consts.rs index 45fa9985..30420545 100644 --- a/kernel/src/arch/riscv32/consts.rs +++ b/kernel/src/arch/riscv32/consts.rs @@ -22,17 +22,11 @@ pub const KERNEL_P2_INDEX: usize = (KERNEL_OFFSET >> 12 >> 10) & 0x3ff; #[cfg(target_arch = "riscv64")] pub const KERNEL_P4_INDEX: usize = (KERNEL_OFFSET >> 12 >> 9 >> 9 >> 9) & 0o777; -pub const KERNEL_HEAP_SIZE: usize = 0x00a0_0000; +pub const KERNEL_HEAP_SIZE: usize = 0x0080_0000; -#[cfg(target_arch = "riscv32")] pub const MEMORY_OFFSET: usize = 0x8000_0000; -#[cfg(target_arch = "riscv64")] -pub const MEMORY_OFFSET: usize = 0x8000_0000; - -#[cfg(target_arch = "riscv32")] -pub const MEMORY_END: usize = 0x8100_0000; -#[cfg(target_arch = "riscv64")] -pub const MEMORY_END: usize = 0x8100_0000; +// TODO: get memory end from device tree +pub const MEMORY_END: usize = 0x8800_0000; // FIXME: rv64 `sh` and `ls` will crash if stack top > 0x80000000 ??? pub const USER_STACK_OFFSET: usize = 0x80000000 - USER_STACK_SIZE; diff --git a/kernel/src/arch/riscv32/cpu.rs b/kernel/src/arch/riscv32/cpu.rs index f519e6f8..7e146da6 100644 --- a/kernel/src/arch/riscv32/cpu.rs +++ b/kernel/src/arch/riscv32/cpu.rs @@ -1,8 +1,3 @@ -use crate::consts::MAX_CPU_NUM; -use core::ptr::{read_volatile, write_volatile}; - -static mut STARTED: [bool; MAX_CPU_NUM] = [false; MAX_CPU_NUM]; - pub unsafe fn set_cpu_id(cpu_id: usize) { asm!("mv gp, $0" : : "r"(cpu_id)); } @@ -19,18 +14,6 @@ pub fn send_ipi(cpu_id: usize) { super::sbi::send_ipi(1 << cpu_id); } -pub unsafe fn has_started(cpu_id: usize) -> bool { - read_volatile(&STARTED[cpu_id]) -} - -pub unsafe fn start_others(hart_mask: usize) { - for cpu_id in 0..32 { - if (hart_mask >> cpu_id) & 1 != 0 { - write_volatile(&mut STARTED[cpu_id], true); - } - } -} - pub fn halt() { unsafe { riscv::asm::wfi() } } diff --git a/kernel/src/arch/riscv32/io.rs b/kernel/src/arch/riscv32/io.rs index 161dfd1a..ea1e74aa 100644 --- a/kernel/src/arch/riscv32/io.rs +++ b/kernel/src/arch/riscv32/io.rs @@ -47,6 +47,3 @@ pub fn getchar_option() -> Option { pub fn putfmt(fmt: Arguments) { SerialPort.write_fmt(fmt).unwrap(); } - -const TXDATA: *mut u32 = 0x38000000 as *mut u32; -const RXDATA: *mut u32 = 0x38000004 as *mut u32; diff --git a/kernel/src/arch/riscv32/memory.rs b/kernel/src/arch/riscv32/memory.rs index a846c114..af7333b2 100644 --- a/kernel/src/arch/riscv32/memory.rs +++ b/kernel/src/arch/riscv32/memory.rs @@ -8,13 +8,17 @@ use riscv::{addr::*, register::sstatus}; /// Initialize the memory management module pub fn init(dtb: usize) { + // allow user memory access unsafe { sstatus::set_sum(); - } // Allow user memory access - // initialize heap and Frame allocator + } + // initialize heap and Frame allocator init_frame_allocator(); init_heap(); // remap the kernel use 4K page + unsafe { + super::paging::setup_recursive_mapping(); + } remap_the_kernel(dtb); } @@ -93,7 +97,7 @@ fn remap_the_kernel(dtb: usize) { Linear::new(offset), "dts", ); - // map PLIC for HiFiveU + // map PLIC for HiFiveU & VirtIO let offset = -(KERNEL_OFFSET as isize); ms.push( KERNEL_OFFSET + 0x0C00_2000, @@ -109,6 +113,22 @@ fn remap_the_kernel(dtb: usize) { Linear::new(offset), "plic1", ); + // map UART for HiFiveU + ms.push( + KERNEL_OFFSET + 0x10010000, + KERNEL_OFFSET + 0x10010000 + PAGE_SIZE, + MemoryAttr::default(), + Linear::new(offset), + "uart", + ); + // map UART for VirtIO + ms.push( + KERNEL_OFFSET + 0x10000000, + KERNEL_OFFSET + 0x10000000 + PAGE_SIZE, + MemoryAttr::default(), + Linear::new(offset), + "uart16550", + ); unsafe { ms.activate(); } diff --git a/kernel/src/arch/riscv32/mod.rs b/kernel/src/arch/riscv32/mod.rs index 650e881c..1b30ad30 100644 --- a/kernel/src/arch/riscv32/mod.rs +++ b/kernel/src/arch/riscv32/mod.rs @@ -1,6 +1,10 @@ #[cfg(feature = "board_u540")] #[path = "board/u540/mod.rs"] mod board; +#[cfg(not(feature = "board_u540"))] +#[path = "board/virt/mod.rs"] +mod board; + pub mod compiler_rt; pub mod consts; pub mod cpu; @@ -13,19 +17,24 @@ mod sbi; pub mod syscall; pub mod timer; +use self::consts::{KERNEL_OFFSET, MEMORY_OFFSET}; +use core::sync::atomic::{AtomicBool, Ordering}; use log::*; #[no_mangle] -pub extern "C" fn rust_main(hartid: usize, dtb: usize, hart_mask: usize) -> ! { - // An initial recursive page table has been set by BBL (shared by all cores) +pub extern "C" fn rust_main(hartid: usize, device_tree_paddr: usize) -> ! { + let device_tree_vaddr = device_tree_paddr - MEMORY_OFFSET + KERNEL_OFFSET; unsafe { cpu::set_cpu_id(hartid); } if hartid != BOOT_HART_ID { - while unsafe { !cpu::has_started(hartid) } {} - println!("Hello RISCV! in hart {}, dtb @ {:#x}", hartid, dtb); + while !AP_CAN_INIT.load(Ordering::Relaxed) {} + println!( + "Hello RISCV! in hart {}, device tree @ {:#x}", + hartid, device_tree_vaddr + ); others_main(); //other_main -> ! } @@ -34,24 +43,25 @@ pub extern "C" fn rust_main(hartid: usize, dtb: usize, hart_mask: usize) -> ! { memory::clear_bss(); } - println!("Hello RISCV! in hart {}, dtb @ {:#x}", hartid, dtb); + println!( + "Hello RISCV! in hart {}, device tree @ {:#x}", + hartid, device_tree_vaddr + ); crate::logging::init(); interrupt::init(); - memory::init(dtb); + memory::init(device_tree_vaddr); timer::init(); // FIXME: init driver on u540 #[cfg(not(feature = "board_u540"))] - crate::drivers::init(dtb); - #[cfg(feature = "board_u540")] + crate::drivers::init(device_tree_vaddr); unsafe { + board::enable_serial_interrupt(); board::init_external_interrupt(); } crate::process::init(); - unsafe { - cpu::start_others(hart_mask); - } + AP_CAN_INIT.store(true, Ordering::Relaxed); crate::kmain(); } @@ -62,6 +72,8 @@ fn others_main() -> ! { crate::kmain(); } +static AP_CAN_INIT: AtomicBool = AtomicBool::new(false); + #[cfg(not(feature = "board_u540"))] const BOOT_HART_ID: usize = 0; #[cfg(feature = "board_u540")] @@ -94,6 +106,8 @@ global_asm!( .endm " ); - -global_asm!(include_str!("boot/entry.asm")); +#[cfg(target_arch = "riscv32")] +global_asm!(include_str!("boot/entry32.asm")); +#[cfg(target_arch = "riscv64")] +global_asm!(include_str!("boot/entry64.asm")); global_asm!(include_str!("boot/trap.asm")); diff --git a/kernel/src/arch/riscv32/paging.rs b/kernel/src/arch/riscv32/paging.rs index 12e61ecf..d501d6f2 100644 --- a/kernel/src/arch/riscv32/paging.rs +++ b/kernel/src/arch/riscv32/paging.rs @@ -198,7 +198,7 @@ impl InactivePageTable for InactivePageTable0 { fn start(); fn end(); } - let mut entrys: [PageTableEntry; 16] = unsafe { core::mem::uninitialized() }; + let mut entrys: [PageTableEntry; 256] = unsafe { core::mem::uninitialized() }; let entry_start = start as usize >> 22; let entry_end = (end as usize >> 22) + 1; let entry_count = entry_end - entry_start; @@ -299,3 +299,13 @@ impl FrameDeallocator for FrameAllocatorForRiscv { dealloc_frame(frame.start_address().as_usize()); } } + +pub unsafe fn setup_recursive_mapping() { + let frame = satp::read().frame(); + let root_page_table = unsafe { &mut *(frame.start_address().as_usize() as *mut RvPageTable) }; + root_page_table.set_recursive(RECURSIVE_INDEX, frame); + unsafe { + sfence_vma_all(); + } + info!("setup recursive mapping end"); +} diff --git a/kernel/src/arch/riscv32/sbi.rs b/kernel/src/arch/riscv32/sbi.rs index 6a56ff18..babfa796 100644 --- a/kernel/src/arch/riscv32/sbi.rs +++ b/kernel/src/arch/riscv32/sbi.rs @@ -1,4 +1,5 @@ //! Port from sbi.h +#![allow(dead_code)] #[inline(always)] fn sbi_call(which: usize, arg0: usize, arg1: usize, arg2: usize) -> usize { diff --git a/kernel/src/fs/stdio.rs b/kernel/src/fs/stdio.rs index 62500114..14e8c317 100644 --- a/kernel/src/fs/stdio.rs +++ b/kernel/src/fs/stdio.rs @@ -20,8 +20,6 @@ impl Stdin { self.pushed.notify_one(); } pub fn pop(&self) -> char { - // QEMU v3.0 don't support M-mode external interrupt (bug?) - // So we have to use polling. loop { let ret = self.buf.lock().pop_front(); match ret { diff --git a/kernel/src/memory.rs b/kernel/src/memory.rs index a6314372..f98f1ad5 100644 --- a/kernel/src/memory.rs +++ b/kernel/src/memory.rs @@ -16,9 +16,9 @@ pub type MemorySet = rcore_memory::memory_set::MemorySet; #[cfg(target_arch = "x86_64")] pub type FrameAlloc = bitmap_allocator::BitAlloc16M; -// RISCV has 8M memory +// RISCV has 1G memory #[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))] -pub type FrameAlloc = bitmap_allocator::BitAlloc4K; +pub type FrameAlloc = bitmap_allocator::BitAlloc1M; // Raspberry Pi 3 has 1G memory #[cfg(any(target_arch = "aarch64", target_arch = "mips"))] diff --git a/riscv-pk b/riscv-pk deleted file mode 160000 index 405ea59d..00000000 --- a/riscv-pk +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 405ea59dd7dd2762c5883822f21d9995bea32b0c diff --git a/tools/opensbi/README.md b/tools/opensbi/README.md new file mode 100644 index 00000000..79ad945a --- /dev/null +++ b/tools/opensbi/README.md @@ -0,0 +1,9 @@ +# OpenSBI + +These are binary release of OpenSBI on this [commit](https://github.com/riscv/opensbi/tree/194dbbe5a13dff2255411c26d249f3ad4ef42c0b) at 2019.04.15. + +- fu540.elf: opensbi-0.3-rv64-bin/platform/sifive/fu540/firmware/fw_jump.elf +- virt_rv32.elf: opensbi-0.3-rv32-bin/platform/qemu/virt/firmware/fw_jump.elf +- virt_rv64.elf: opensbi-0.3-rv64-bin/platform/qemu/virt/firmware/fw_jump.elf + +NOTE: The [official v0.3 release](https://github.com/riscv/opensbi/releases/tag/v0.3) has bug on serial interrupt. diff --git a/tools/opensbi/fu540.elf b/tools/opensbi/fu540.elf new file mode 100755 index 0000000000000000000000000000000000000000..4b76fae3fa3f33f996a051d197eba6b973d5bd53 GIT binary patch literal 359536 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 K&QY4sBSZ zF^hxo!|hIFSCp17!!jAT#$y=z)QDDxvm#zu$k;+A3{Kbz{dA{q8WcZbhT9rcNtVu! zC&%H()ni$?+QUkAj`AYtUuvs07!d)qoPI8rU??Ont<}V0KA7Jidr)J}BE!Jo(}`%QEMUt?v}FHd%mGsUzniX%S7XdH zQ@qrBU3}nuva$k03vZGV0|HF0_!2pUTeR?S8)%?lS#=6o$^r!66)BERT zkO|hLXB@^h(;Jt`|B_exl5+w-EB)Ks#H4LQaz4QGl=mV3ul)M-+v%q$x?xWGTOKjW zjmxJ~Og}}@E9a#D{C`-D{O*fHn#twUAHyq;3H7B1OrzmX*a#*UmYt`r0#B0uz!Zw- zt1SIFS4_VMd4=B-Og~K(MOVGi(tq3|Jk9ib#6Vk@*joFNv`yP-y*P8D<$qEdC@#@^hJPV_*q=n0 l$i((>AFf+cOaB8`057Y&ZrV;rjNcb;So%L}VRGx!{|_9*&CLJ+ literal 0 HcmV?d00001 diff --git a/tools/opensbi/virt_rv32.elf b/tools/opensbi/virt_rv32.elf new file mode 100755 index 0000000000000000000000000000000000000000..1bebfb0521094a6003518835489e8dbfe864f121 GIT binary patch literal 214736 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

B)!rU_-043r2eq%{AV!T-QIt2< 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 literal 0 HcmV?d00001 From 00685d920529c74c8bad5c9c056ea295fcce6b2e Mon Sep 17 00:00:00 2001 From: chyyuu Date: Sat, 20 Apr 2019 09:32:42 +0800 Subject: [PATCH 33/36] set 8MB user stack size, add more flags for sys_clone 8MB is the default linux app stack size on x86_64. gcc app in alpine linux call sys_clone with flags 0x5d0f00. In case of supporting more other potential flags, use panic! instead of warn!, then we can get timely panic-style info. Now python2 hello.py can run correctly, but only one time. I guess the memory management has some problem, maybe there are some memory leak. --- kernel/src/arch/x86_64/consts.rs | 2 +- kernel/src/syscall/proc.rs | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/kernel/src/arch/x86_64/consts.rs b/kernel/src/arch/x86_64/consts.rs index 2095e395..0b3a4f97 100644 --- a/kernel/src/arch/x86_64/consts.rs +++ b/kernel/src/arch/x86_64/consts.rs @@ -55,7 +55,7 @@ pub const USER_GRANT_PML4: usize = (USER_GRANT_OFFSET & PML4_MASK) / PML4_SIZE; pub const USER_STACK_OFFSET: usize = USER_GRANT_OFFSET + PML4_SIZE; pub const USER_STACK_PML4: usize = (USER_STACK_OFFSET & PML4_MASK) / PML4_SIZE; /// Size of user stack -pub const USER_STACK_SIZE: usize = 1024 * 1024; // 1 MB +pub const USER_STACK_SIZE: usize = 8 * 1024 * 1024; // 8 MB, the default config of Linux /// Offset to user sigstack pub const USER_SIGSTACK_OFFSET: usize = USER_STACK_OFFSET + PML4_SIZE; diff --git a/kernel/src/syscall/proc.rs b/kernel/src/syscall/proc.rs index 362aef0d..89b77657 100644 --- a/kernel/src/syscall/proc.rs +++ b/kernel/src/syscall/proc.rs @@ -13,7 +13,7 @@ pub fn sys_fork(tf: &TrapFrame) -> SysResult { /// Create a new thread in the current process. /// The new thread's stack pointer will be set to `newsp`, -/// and thread pointer will be set to `newtls`. +/// and thread pointer will be set to `newtls`. /// The child tid will be stored at both `parent_tid` and `child_tid`. /// This is partially implemented for musl only. pub fn sys_clone( @@ -26,16 +26,17 @@ pub fn sys_clone( ) -> SysResult { let clone_flags = CloneFlags::from_bits_truncate(flags); info!( - "clone: flags: {:?}, newsp: {:#x}, parent_tid: {:?}, child_tid: {:?}, newtls: {:#x}", - clone_flags, newsp, parent_tid, child_tid, newtls + "clone: flags: {:?} == {:#x}, newsp: {:#x}, parent_tid: {:?}, child_tid: {:?}, newtls: {:#x}", + clone_flags, flags, newsp, parent_tid, child_tid, newtls ); if flags == 0x4111 || flags == 0x11 { warn!("sys_clone is calling sys_fork instead, ignoring other args"); return sys_fork(tf); } - if flags != 0x7d0f00 { - warn!("sys_clone only support musl pthread_create"); - return Err(SysError::ENOSYS); + if (flags != 0x7d0f00) && (flags!= 0x5d0f00) { //0x5d0f00 is the args from gcc of alpine linux + //warn!("sys_clone only support musl pthread_create"); + panic!("sys_clone only support sys_fork OR musl pthread_create without flags{:x}", flags); + //return Err(SysError::ENOSYS); } { let proc = process(); From c34a420a397e5166f31765b59ca06db06779a380 Mon Sep 17 00:00:00 2001 From: WangRunji Date: Sat, 20 Apr 2019 16:31:18 +0800 Subject: [PATCH 34/36] move font8x16 data from code to file --- kernel/src/drivers/console/fonts/font8x16.rs | 4399 +---------------- .../drivers/console/fonts/font8x16_1bpp.raw | Bin 0 -> 3360 bytes 2 files changed, 40 insertions(+), 4359 deletions(-) create mode 100644 kernel/src/drivers/console/fonts/font8x16_1bpp.raw diff --git a/kernel/src/drivers/console/fonts/font8x16.rs b/kernel/src/drivers/console/fonts/font8x16.rs index 7513e857..abea5bfc 100644 --- a/kernel/src/drivers/console/fonts/font8x16.rs +++ b/kernel/src/drivers/console/fonts/font8x16.rs @@ -4,4364 +4,8 @@ use super::Font; pub enum Font8x16 {} -impl Font8x16 { - /// font data - /// copied from `linux/lib/fonts/font_8x16.c` - const DATA: [u8; 256 * 16] = [ - /* 0 0x00 '^@' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 1 0x01 '^A' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x81, /* 10000001 */ - 0xa5, /* 10100101 */ - 0x81, /* 10000001 */ - 0x81, /* 10000001 */ - 0xbd, /* 10111101 */ - 0x99, /* 10011001 */ - 0x81, /* 10000001 */ - 0x81, /* 10000001 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 2 0x02 '^B' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0xff, /* 11111111 */ - 0xdb, /* 11011011 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xc3, /* 11000011 */ - 0xe7, /* 11100111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 3 0x03 '^C' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x6c, /* 01101100 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0x7c, /* 01111100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 4 0x04 '^D' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x7c, /* 01111100 */ - 0xfe, /* 11111110 */ - 0x7c, /* 01111100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 5 0x05 '^E' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0xe7, /* 11100111 */ - 0xe7, /* 11100111 */ - 0xe7, /* 11100111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 6 0x06 '^F' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x7e, /* 01111110 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 7 0x07 '^G' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 8 0x08 '^H' */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xe7, /* 11100111 */ - 0xc3, /* 11000011 */ - 0xc3, /* 11000011 */ - 0xe7, /* 11100111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - /* 9 0x09 '^I' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x42, /* 01000010 */ - 0x42, /* 01000010 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 10 0x0a '^J' */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xc3, /* 11000011 */ - 0x99, /* 10011001 */ - 0xbd, /* 10111101 */ - 0xbd, /* 10111101 */ - 0x99, /* 10011001 */ - 0xc3, /* 11000011 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - /* 11 0x0b '^K' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x1e, /* 00011110 */ - 0x0e, /* 00001110 */ - 0x1a, /* 00011010 */ - 0x32, /* 00110010 */ - 0x78, /* 01111000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x78, /* 01111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 12 0x0c '^L' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 13 0x0d '^M' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3f, /* 00111111 */ - 0x33, /* 00110011 */ - 0x3f, /* 00111111 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x70, /* 01110000 */ - 0xf0, /* 11110000 */ - 0xe0, /* 11100000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 14 0x0e '^N' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7f, /* 01111111 */ - 0x63, /* 01100011 */ - 0x7f, /* 01111111 */ - 0x63, /* 01100011 */ - 0x63, /* 01100011 */ - 0x63, /* 01100011 */ - 0x63, /* 01100011 */ - 0x67, /* 01100111 */ - 0xe7, /* 11100111 */ - 0xe6, /* 11100110 */ - 0xc0, /* 11000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 15 0x0f '^O' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xdb, /* 11011011 */ - 0x3c, /* 00111100 */ - 0xe7, /* 11100111 */ - 0x3c, /* 00111100 */ - 0xdb, /* 11011011 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 16 0x10 '^P' */ - 0x00, /* 00000000 */ - 0x80, /* 10000000 */ - 0xc0, /* 11000000 */ - 0xe0, /* 11100000 */ - 0xf0, /* 11110000 */ - 0xf8, /* 11111000 */ - 0xfe, /* 11111110 */ - 0xf8, /* 11111000 */ - 0xf0, /* 11110000 */ - 0xe0, /* 11100000 */ - 0xc0, /* 11000000 */ - 0x80, /* 10000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 17 0x11 '^Q' */ - 0x00, /* 00000000 */ - 0x02, /* 00000010 */ - 0x06, /* 00000110 */ - 0x0e, /* 00001110 */ - 0x1e, /* 00011110 */ - 0x3e, /* 00111110 */ - 0xfe, /* 11111110 */ - 0x3e, /* 00111110 */ - 0x1e, /* 00011110 */ - 0x0e, /* 00001110 */ - 0x06, /* 00000110 */ - 0x02, /* 00000010 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 18 0x12 '^R' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 19 0x13 '^S' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x00, /* 00000000 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 20 0x14 '^T' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7f, /* 01111111 */ - 0xdb, /* 11011011 */ - 0xdb, /* 11011011 */ - 0xdb, /* 11011011 */ - 0x7b, /* 01111011 */ - 0x1b, /* 00011011 */ - 0x1b, /* 00011011 */ - 0x1b, /* 00011011 */ - 0x1b, /* 00011011 */ - 0x1b, /* 00011011 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 21 0x15 '^U' */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0x60, /* 01100000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x0c, /* 00001100 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 22 0x16 '^V' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 23 0x17 '^W' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 24 0x18 '^X' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 25 0x19 '^Y' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 26 0x1a '^Z' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0xfe, /* 11111110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 27 0x1b '^[' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xfe, /* 11111110 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 28 0x1c '^\' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 29 0x1d '^]' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x28, /* 00101000 */ - 0x6c, /* 01101100 */ - 0xfe, /* 11111110 */ - 0x6c, /* 01101100 */ - 0x28, /* 00101000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 30 0x1e '^^' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x38, /* 00111000 */ - 0x7c, /* 01111100 */ - 0x7c, /* 01111100 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 31 0x1f '^_' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0x7c, /* 01111100 */ - 0x7c, /* 01111100 */ - 0x38, /* 00111000 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 32 0x20 ' ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 33 0x21 '!' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 34 0x22 '"' */ - 0x00, /* 00000000 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x24, /* 00100100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 35 0x23 '#' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0xfe, /* 11111110 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0xfe, /* 11111110 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 36 0x24 '$' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc2, /* 11000010 */ - 0xc0, /* 11000000 */ - 0x7c, /* 01111100 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x86, /* 10000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 37 0x25 '%' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc2, /* 11000010 */ - 0xc6, /* 11000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xc6, /* 11000110 */ - 0x86, /* 10000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 38 0x26 '&' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 39 0x27 ''' */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 40 0x28 '(' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 41 0x29 ')' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 42 0x2a '*' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0xff, /* 11111111 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 43 0x2b '+' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 44 0x2c ',' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 45 0x2d '-' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 46 0x2e '.' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 47 0x2f '/' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x02, /* 00000010 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xc0, /* 11000000 */ - 0x80, /* 10000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 48 0x30 '0' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xd6, /* 11010110 */ - 0xd6, /* 11010110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 49 0x31 '1' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x38, /* 00111000 */ - 0x78, /* 01111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 50 0x32 '2' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xc0, /* 11000000 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 51 0x33 '3' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x3c, /* 00111100 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 52 0x34 '4' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x0c, /* 00001100 */ - 0x1c, /* 00011100 */ - 0x3c, /* 00111100 */ - 0x6c, /* 01101100 */ - 0xcc, /* 11001100 */ - 0xfe, /* 11111110 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x1e, /* 00011110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 53 0x35 '5' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xfc, /* 11111100 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 54 0x36 '6' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x60, /* 01100000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 55 0x37 '7' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 56 0x38 '8' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 57 0x39 '9' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7e, /* 01111110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x78, /* 01111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 58 0x3a ':' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 59 0x3b ';' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 60 0x3c '<' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x06, /* 00000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 61 0x3d '=' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 62 0x3e '>' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 63 0x3f '?' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 64 0x40 '@' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xde, /* 11011110 */ - 0xde, /* 11011110 */ - 0xde, /* 11011110 */ - 0xdc, /* 11011100 */ - 0xc0, /* 11000000 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 65 0x41 'A' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 66 0x42 'B' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfc, /* 11111100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x7c, /* 01111100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0xfc, /* 11111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 67 0x43 'C' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0xc2, /* 11000010 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc2, /* 11000010 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 68 0x44 'D' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xf8, /* 11111000 */ - 0x6c, /* 01101100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x6c, /* 01101100 */ - 0xf8, /* 11111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 69 0x45 'E' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x66, /* 01100110 */ - 0x62, /* 01100010 */ - 0x68, /* 01101000 */ - 0x78, /* 01111000 */ - 0x68, /* 01101000 */ - 0x60, /* 01100000 */ - 0x62, /* 01100010 */ - 0x66, /* 01100110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 70 0x46 'F' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x66, /* 01100110 */ - 0x62, /* 01100010 */ - 0x68, /* 01101000 */ - 0x78, /* 01111000 */ - 0x68, /* 01101000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0xf0, /* 11110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 71 0x47 'G' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0xc2, /* 11000010 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xde, /* 11011110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x66, /* 01100110 */ - 0x3a, /* 00111010 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 72 0x48 'H' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 73 0x49 'I' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 74 0x4a 'J' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x1e, /* 00011110 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x78, /* 01111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 75 0x4b 'K' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xe6, /* 11100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x6c, /* 01101100 */ - 0x78, /* 01111000 */ - 0x78, /* 01111000 */ - 0x6c, /* 01101100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0xe6, /* 11100110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 76 0x4c 'L' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xf0, /* 11110000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x62, /* 01100010 */ - 0x66, /* 01100110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 77 0x4d 'M' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xee, /* 11101110 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0xd6, /* 11010110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 78 0x4e 'N' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xe6, /* 11100110 */ - 0xf6, /* 11110110 */ - 0xfe, /* 11111110 */ - 0xde, /* 11011110 */ - 0xce, /* 11001110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 79 0x4f 'O' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 80 0x50 'P' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfc, /* 11111100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x7c, /* 01111100 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0xf0, /* 11110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 81 0x51 'Q' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xd6, /* 11010110 */ - 0xde, /* 11011110 */ - 0x7c, /* 01111100 */ - 0x0c, /* 00001100 */ - 0x0e, /* 00001110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 82 0x52 'R' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfc, /* 11111100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x7c, /* 01111100 */ - 0x6c, /* 01101100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0xe6, /* 11100110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 83 0x53 'S' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x60, /* 01100000 */ - 0x38, /* 00111000 */ - 0x0c, /* 00001100 */ - 0x06, /* 00000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 84 0x54 'T' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x7e, /* 01111110 */ - 0x5a, /* 01011010 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 85 0x55 'U' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 86 0x56 'V' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 87 0x57 'W' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xd6, /* 11010110 */ - 0xd6, /* 11010110 */ - 0xd6, /* 11010110 */ - 0xfe, /* 11111110 */ - 0xee, /* 11101110 */ - 0x6c, /* 01101100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 88 0x58 'X' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x6c, /* 01101100 */ - 0x7c, /* 01111100 */ - 0x38, /* 00111000 */ - 0x38, /* 00111000 */ - 0x7c, /* 01111100 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 89 0x59 'Y' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 90 0x5a 'Z' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0x86, /* 10000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xc2, /* 11000010 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 91 0x5b '[' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3c, /* 00111100 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 92 0x5c '\' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x80, /* 10000000 */ - 0xc0, /* 11000000 */ - 0xe0, /* 11100000 */ - 0x70, /* 01110000 */ - 0x38, /* 00111000 */ - 0x1c, /* 00011100 */ - 0x0e, /* 00001110 */ - 0x06, /* 00000110 */ - 0x02, /* 00000010 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 93 0x5d ']' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3c, /* 00111100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 94 0x5e '^' */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 95 0x5f '_' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 96 0x60 '`' */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 97 0x61 'a' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x78, /* 01111000 */ - 0x0c, /* 00001100 */ - 0x7c, /* 01111100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 98 0x62 'b' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xe0, /* 11100000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x78, /* 01111000 */ - 0x6c, /* 01101100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 99 0x63 'c' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 100 0x64 'd' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x1c, /* 00011100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x3c, /* 00111100 */ - 0x6c, /* 01101100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 101 0x65 'e' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 102 0x66 'f' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x1c, /* 00011100 */ - 0x36, /* 00110110 */ - 0x32, /* 00110010 */ - 0x30, /* 00110000 */ - 0x78, /* 01111000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x78, /* 01111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 103 0x67 'g' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x76, /* 01110110 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x7c, /* 01111100 */ - 0x0c, /* 00001100 */ - 0xcc, /* 11001100 */ - 0x78, /* 01111000 */ - 0x00, /* 00000000 */ - /* 104 0x68 'h' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xe0, /* 11100000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x6c, /* 01101100 */ - 0x76, /* 01110110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0xe6, /* 11100110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 105 0x69 'i' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 106 0x6a 'j' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x00, /* 00000000 */ - 0x0e, /* 00001110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - /* 107 0x6b 'k' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xe0, /* 11100000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x66, /* 01100110 */ - 0x6c, /* 01101100 */ - 0x78, /* 01111000 */ - 0x78, /* 01111000 */ - 0x6c, /* 01101100 */ - 0x66, /* 01100110 */ - 0xe6, /* 11100110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 108 0x6c 'l' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 109 0x6d 'm' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xec, /* 11101100 */ - 0xfe, /* 11111110 */ - 0xd6, /* 11010110 */ - 0xd6, /* 11010110 */ - 0xd6, /* 11010110 */ - 0xd6, /* 11010110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 110 0x6e 'n' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xdc, /* 11011100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 111 0x6f 'o' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 112 0x70 'p' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xdc, /* 11011100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x7c, /* 01111100 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0xf0, /* 11110000 */ - 0x00, /* 00000000 */ - /* 113 0x71 'q' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x76, /* 01110110 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x7c, /* 01111100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x1e, /* 00011110 */ - 0x00, /* 00000000 */ - /* 114 0x72 'r' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xdc, /* 11011100 */ - 0x76, /* 01110110 */ - 0x66, /* 01100110 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0xf0, /* 11110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 115 0x73 's' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0x60, /* 01100000 */ - 0x38, /* 00111000 */ - 0x0c, /* 00001100 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 116 0x74 't' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0xfc, /* 11111100 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x36, /* 00110110 */ - 0x1c, /* 00011100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 117 0x75 'u' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 118 0x76 'v' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 119 0x77 'w' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xd6, /* 11010110 */ - 0xd6, /* 11010110 */ - 0xd6, /* 11010110 */ - 0xfe, /* 11111110 */ - 0x6c, /* 01101100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 120 0x78 'x' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x38, /* 00111000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 121 0x79 'y' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7e, /* 01111110 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0xf8, /* 11111000 */ - 0x00, /* 00000000 */ - /* 122 0x7a 'z' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0xcc, /* 11001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 123 0x7b '{' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x0e, /* 00001110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x70, /* 01110000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x0e, /* 00001110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 124 0x7c '|' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 125 0x7d '}' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x70, /* 01110000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x0e, /* 00001110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x70, /* 01110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 126 0x7e '~' */ - 0x00, /* 00000000 */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 127 0x7f '' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 128 0x80 'Ç' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0xc2, /* 11000010 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc2, /* 11000010 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x70, /* 01110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 129 0x81 'ü' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xcc, /* 11001100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 130 0x82 'é' */ - 0x00, /* 00000000 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 131 0x83 'â' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0x00, /* 00000000 */ - 0x78, /* 01111000 */ - 0x0c, /* 00001100 */ - 0x7c, /* 01111100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 132 0x84 'ä' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xcc, /* 11001100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x78, /* 01111000 */ - 0x0c, /* 00001100 */ - 0x7c, /* 01111100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 133 0x85 'à' */ - 0x00, /* 00000000 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x78, /* 01111000 */ - 0x0c, /* 00001100 */ - 0x7c, /* 01111100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 134 0x86 'å' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x78, /* 01111000 */ - 0x0c, /* 00001100 */ - 0x7c, /* 01111100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 135 0x87 'ç' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x18, /* 00011000 */ - 0x70, /* 01110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 136 0x88 'ê' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 137 0x89 'ë' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 138 0x8a 'è' */ - 0x00, /* 00000000 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 139 0x8b 'ï' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x66, /* 01100110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 140 0x8c 'î' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 141 0x8d 'ì' */ - 0x00, /* 00000000 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 142 0x8e 'Ä' */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 143 0x8f 'Å' */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 144 0x90 'É' */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x66, /* 01100110 */ - 0x62, /* 01100010 */ - 0x68, /* 01101000 */ - 0x78, /* 01111000 */ - 0x68, /* 01101000 */ - 0x62, /* 01100010 */ - 0x66, /* 01100110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 145 0x91 'æ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xec, /* 11101100 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x7e, /* 01111110 */ - 0xd8, /* 11011000 */ - 0xd8, /* 11011000 */ - 0x6e, /* 01101110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 146 0x92 'Æ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3e, /* 00111110 */ - 0x6c, /* 01101100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xfe, /* 11111110 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xce, /* 11001110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 147 0x93 'ô' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 148 0x94 'ö' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 149 0x95 'ò' */ - 0x00, /* 00000000 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 150 0x96 'û' */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x78, /* 01111000 */ - 0xcc, /* 11001100 */ - 0x00, /* 00000000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 151 0x97 'ù' */ - 0x00, /* 00000000 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 152 0x98 'ÿ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7e, /* 01111110 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x78, /* 01111000 */ - 0x00, /* 00000000 */ - /* 153 0x99 'Ö' */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 154 0x9a 'Ü' */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 155 0x9b '¢' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 156 0x9c '£' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0x64, /* 01100100 */ - 0x60, /* 01100000 */ - 0xf0, /* 11110000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0xe6, /* 11100110 */ - 0xfc, /* 11111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 157 0x9d '¥' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 158 0x9e '₧' */ - 0x00, /* 00000000 */ - 0xf8, /* 11111000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xf8, /* 11111000 */ - 0xc4, /* 11000100 */ - 0xcc, /* 11001100 */ - 0xde, /* 11011110 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 159 0x9f 'ƒ' */ - 0x00, /* 00000000 */ - 0x0e, /* 00001110 */ - 0x1b, /* 00011011 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xd8, /* 11011000 */ - 0x70, /* 01110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 160 0xa0 'á' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0x00, /* 00000000 */ - 0x78, /* 01111000 */ - 0x0c, /* 00001100 */ - 0x7c, /* 01111100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 161 0xa1 'í' */ - 0x00, /* 00000000 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 162 0xa2 'ó' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 163 0xa3 'ú' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0x00, /* 00000000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 164 0xa4 'ñ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0x00, /* 00000000 */ - 0xdc, /* 11011100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 165 0xa5 'Ñ' */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xe6, /* 11100110 */ - 0xf6, /* 11110110 */ - 0xfe, /* 11111110 */ - 0xde, /* 11011110 */ - 0xce, /* 11001110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 166 0xa6 'ª' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3c, /* 00111100 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x3e, /* 00111110 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 167 0xa7 'º' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 168 0xa8 '¿' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xc0, /* 11000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 169 0xa9 '⌐' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 170 0xaa '¬' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 171 0xab '½' */ - 0x00, /* 00000000 */ - 0x60, /* 01100000 */ - 0xe0, /* 11100000 */ - 0x62, /* 01100010 */ - 0x66, /* 01100110 */ - 0x6c, /* 01101100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xdc, /* 11011100 */ - 0x86, /* 10000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x3e, /* 00111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 172 0xac '¼' */ - 0x00, /* 00000000 */ - 0x60, /* 01100000 */ - 0xe0, /* 11100000 */ - 0x62, /* 01100010 */ - 0x66, /* 01100110 */ - 0x6c, /* 01101100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x66, /* 01100110 */ - 0xce, /* 11001110 */ - 0x9a, /* 10011010 */ - 0x3f, /* 00111111 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 173 0xad '¡' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 174 0xae '«' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x36, /* 00110110 */ - 0x6c, /* 01101100 */ - 0xd8, /* 11011000 */ - 0x6c, /* 01101100 */ - 0x36, /* 00110110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 175 0xaf '»' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xd8, /* 11011000 */ - 0x6c, /* 01101100 */ - 0x36, /* 00110110 */ - 0x6c, /* 01101100 */ - 0xd8, /* 11011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 176 0xb0 '░' */ - 0x11, /* 00010001 */ - 0x44, /* 01000100 */ - 0x11, /* 00010001 */ - 0x44, /* 01000100 */ - 0x11, /* 00010001 */ - 0x44, /* 01000100 */ - 0x11, /* 00010001 */ - 0x44, /* 01000100 */ - 0x11, /* 00010001 */ - 0x44, /* 01000100 */ - 0x11, /* 00010001 */ - 0x44, /* 01000100 */ - 0x11, /* 00010001 */ - 0x44, /* 01000100 */ - 0x11, /* 00010001 */ - 0x44, /* 01000100 */ - /* 177 0xb1 '▒' */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - /* 178 0xb2 '▓' */ - 0xdd, /* 11011101 */ - 0x77, /* 01110111 */ - 0xdd, /* 11011101 */ - 0x77, /* 01110111 */ - 0xdd, /* 11011101 */ - 0x77, /* 01110111 */ - 0xdd, /* 11011101 */ - 0x77, /* 01110111 */ - 0xdd, /* 11011101 */ - 0x77, /* 01110111 */ - 0xdd, /* 11011101 */ - 0x77, /* 01110111 */ - 0xdd, /* 11011101 */ - 0x77, /* 01110111 */ - 0xdd, /* 11011101 */ - 0x77, /* 01110111 */ - /* 179 0xb3 '│' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - /* 180 0xb4 '┤' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - /* 181 0xb5 '╡' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - /* 182 0xb6 '╢' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xf6, /* 11110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - /* 183 0xb7 '╖' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - /* 184 0xb8 '╕' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - /* 185 0xb9 '╣' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xf6, /* 11110110 */ - 0x06, /* 00000110 */ - 0xf6, /* 11110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - /* 186 0xba '║' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - /* 187 0xbb '╗' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x06, /* 00000110 */ - 0xf6, /* 11110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - /* 188 0xbc '╝' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xf6, /* 11110110 */ - 0x06, /* 00000110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 189 0xbd '╜' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 190 0xbe '╛' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 191 0xbf '┐' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - /* 192 0xc0 '└' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 193 0xc1 '┴' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 194 0xc2 '┬' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - /* 195 0xc3 '├' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - /* 196 0xc4 '─' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 197 0xc5 '┼' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xff, /* 11111111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - /* 198 0xc6 '╞' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - /* 199 0xc7 '╟' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x37, /* 00110111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - /* 200 0xc8 '╚' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x37, /* 00110111 */ - 0x30, /* 00110000 */ - 0x3f, /* 00111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 201 0xc9 '╔' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3f, /* 00111111 */ - 0x30, /* 00110000 */ - 0x37, /* 00110111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - /* 202 0xca '╩' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xf7, /* 11110111 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 203 0xcb '╦' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0xf7, /* 11110111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - /* 204 0xcc '╠' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x37, /* 00110111 */ - 0x30, /* 00110000 */ - 0x37, /* 00110111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - /* 205 0xcd '═' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 206 0xce '╬' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xf7, /* 11110111 */ - 0x00, /* 00000000 */ - 0xf7, /* 11110111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - /* 207 0xcf '╧' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 208 0xd0 '╨' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 209 0xd1 '╤' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - /* 210 0xd2 '╥' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - /* 211 0xd3 '╙' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x3f, /* 00111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 212 0xd4 '╘' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 213 0xd5 '╒' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - /* 214 0xd6 '╓' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3f, /* 00111111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - /* 215 0xd7 '╫' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xff, /* 11111111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - /* 216 0xd8 '╪' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xff, /* 11111111 */ - 0x18, /* 00011000 */ - 0xff, /* 11111111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - /* 217 0xd9 '┘' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 218 0xda '┌' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - /* 219 0xdb '█' */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - /* 220 0xdc '▄' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - /* 221 0xdd '▌' */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - /* 222 0xde '▐' */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - /* 223 0xdf '▀' */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 224 0xe0 'α' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0xd8, /* 11011000 */ - 0xd8, /* 11011000 */ - 0xd8, /* 11011000 */ - 0xdc, /* 11011100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 225 0xe1 'ß' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x78, /* 01111000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xd8, /* 11011000 */ - 0xcc, /* 11001100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xcc, /* 11001100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 226 0xe2 'Γ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 227 0xe3 'π' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 228 0xe4 'Σ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 229 0xe5 'σ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0xd8, /* 11011000 */ - 0xd8, /* 11011000 */ - 0xd8, /* 11011000 */ - 0xd8, /* 11011000 */ - 0xd8, /* 11011000 */ - 0x70, /* 01110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 230 0xe6 'µ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x7c, /* 01111100 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0xc0, /* 11000000 */ - 0x00, /* 00000000 */ - /* 231 0xe7 'τ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 232 0xe8 'Φ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 233 0xe9 'Θ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 234 0xea 'Ω' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0xee, /* 11101110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 235 0xeb 'δ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x1e, /* 00011110 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x3e, /* 00111110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 236 0xec '∞' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0xdb, /* 11011011 */ - 0xdb, /* 11011011 */ - 0xdb, /* 11011011 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 237 0xed 'φ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x03, /* 00000011 */ - 0x06, /* 00000110 */ - 0x7e, /* 01111110 */ - 0xdb, /* 11011011 */ - 0xdb, /* 11011011 */ - 0xf3, /* 11110011 */ - 0x7e, /* 01111110 */ - 0x60, /* 01100000 */ - 0xc0, /* 11000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 238 0xee 'ε' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x1c, /* 00011100 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x7c, /* 01111100 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x1c, /* 00011100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 239 0xef '∩' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 240 0xf0 '≡' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 241 0xf1 '±' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 242 0xf2 '≥' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 243 0xf3 '≤' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 244 0xf4 '⌠' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x0e, /* 00001110 */ - 0x1b, /* 00011011 */ - 0x1b, /* 00011011 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - /* 245 0xf5 '⌡' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xd8, /* 11011000 */ - 0xd8, /* 11011000 */ - 0xd8, /* 11011000 */ - 0x70, /* 01110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 246 0xf6 '÷' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 247 0xf7 '≈' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0x00, /* 00000000 */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 248 0xf8 '°' */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 249 0xf9 '·' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 250 0xfa '•' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 251 0xfb '√' */ - 0x00, /* 00000000 */ - 0x0f, /* 00001111 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0xec, /* 11101100 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x3c, /* 00111100 */ - 0x1c, /* 00011100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 252 0xfc 'ⁿ' */ - 0x00, /* 00000000 */ - 0x6c, /* 01101100 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 253 0xfd '²' */ - 0x00, /* 00000000 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x32, /* 00110010 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 254 0xfe '■' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x7e, /* 01111110 */ - 0x7e, /* 01111110 */ - 0x7e, /* 01111110 */ - 0x7e, /* 01111110 */ - 0x7e, /* 01111110 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - /* 255 0xff ' ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - ]; -} +// https://github.com/jamwaffles/embedded-graphics/blob/0ec4fc09c55aee733fb9d9cd6525749b8e15766e/embedded-graphics/data/font8x16_1bpp.raw +const FONT_IMAGE: &'static [u8] = include_bytes!("font8x16_1bpp.raw"); impl Font for Font8x16 { const HEIGHT: usize = 16; @@ -4372,6 +16,43 @@ impl Font for Font8x16 { #[inline] fn get(byte: u8, x: usize, y: usize) -> bool { - Self::DATA[byte as usize * 16 + y] & (1 << (7 - x)) != 0 + const FONT_IMAGE_WIDTH: usize = 240; + let char_per_row = FONT_IMAGE_WIDTH / Self::WIDTH; + + // Char _code_ offset from first char, most often a space + // E.g. first char = ' ' (32), target char = '!' (33), offset = 33 - 32 = 1 + let char_offset = char_offset(byte as char) as usize; + let row = char_offset / char_per_row; + + // Top left corner of character, in pixels + let char_x = (char_offset - (row * char_per_row)) * Self::WIDTH; + let char_y = row * Self::HEIGHT; + + // Bit index + // = X pixel offset for char + // + Character row offset (row 0 = 0, row 1 = (192 * 8) = 1536) + // + X offset for the pixel block that comprises this char + // + Y offset for pixel block + let bitmap_bit_index = char_x + x + + (FONT_IMAGE_WIDTH * (char_y + y)); + + let bitmap_byte = bitmap_bit_index / 8; + let bitmap_bit = 7 - (bitmap_bit_index % 8); + + FONT_IMAGE[bitmap_byte] & ((1 << bitmap_bit) as u8) != 0 } } + +fn char_offset(c: char) -> u32 { + let fallback = '?' as u32 - ' ' as u32; + if c < ' ' { + return fallback; + } + if c <= '~' { + return c as u32 - ' ' as u32; + } + if c < '¡' || c > 'ÿ' { + return fallback; + } + c as u32 - ' ' as u32 - 34 +} diff --git a/kernel/src/drivers/console/fonts/font8x16_1bpp.raw b/kernel/src/drivers/console/fonts/font8x16_1bpp.raw new file mode 100644 index 0000000000000000000000000000000000000000..372f9945e6b1b2e2fd36bf925d393ae1183969dc GIT binary patch literal 3360 zcmd6pzl$436vrRtSX?ZJ3Ky>s!o?LXQVcGR#SF%nD_mR^Qkf8jBMdI4P+^uO48lb) zE?oK#F{x56DqgjiD}oS499O9dMwM|P*7?5K)!C;=hZ9odNt$1ud2fEanKvRLV*K`r zS8Dc9_7tfwdCv=uF>i}D#?;^XAQTMu=0hPeteuDuWkmKUOsBz_JoUXLRhHSh&P15e zWT~yCAd`F5&V=(U^pq!sewMVFP&1a({{pjPg(2G6=|p|avfMC7wG0`&N{1?CFyQ3@rz>8#!-wW zR%BotqLWqGy`3A{_4!|XVXO6kBL5oYVa=&W7~Y~pFOKVgKJx*4%;cw=O*V1iM6k)y5+obGt@8^=&Z1C zCSSBk_X4_=lXv1I{h87krZ1rlJT-=E(G@u~ zHQp<|P+ELIVjM@&-B>*kTP<5mbrqM<#z7F<+8zGtPWBFvnhy7Yf7(8{Q2}>oKeqvA z@{)%5Tyl0<^gTO^FLI$AHzucJa-6x%`Rwe~X?05P>#f?NmrAP&yJN~w9D4q95f|km zt{ZHsjFsj=f>ce(S>P7lZ%Q$sK?E zd8N&m4~fsKBS!PnSApmUsIM#X&kI^X72}?pM1OidU&j+7J#zj|f!L_jo_Cg?QaGT~ zuc+%OW|h-pIzCX#D*g@{dTm)ZV<;GLA%}44l40smm}>?{#8{A z?n~U>P0h9L*DCe3+6|TQuqXxQk&FJQOf9_zo3N03n1=~?%2HEl+iQ*Ay!Bi*F$o;su8q545L~lM@OmaXv*5$Aic0mwG>i{QSw2dkEnw^ZE>u z=*QIHZ5RyBujn&~(vJv<5KG5L-yInp4^mf8+rQusfK09yx!>gcd5bB{LQa# zQW11|HE!2}OEgju(ayRF$1*<+79mKA3VRdj_@48=azbReD*J|698yvdb^&9Hy z&f(sE>drLY0O3!24RDR|!=)aSdUVOJ3Yb{PlP{;^e34poson*c=>GN~*Ro4#+E5>X zuFKn0?WhmxovLcmkhN|b#_O7UT>JFOH?IAo~_d*37( z*DBjI_Vn!*RaN{S>*;S@^~!P@&#pq5q#Is695qa*t-{h=zuMg%u6z35dbl^bD@!q1 zU78BpJ Date: Sat, 20 Apr 2019 16:41:52 +0800 Subject: [PATCH 35/36] Append kernel image to fu540.elf, but still not working on HfU --- kernel/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kernel/Makefile b/kernel/Makefile index 63f52ff4..af393e3e 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -366,7 +366,8 @@ endif ifeq ($(board), u540) .PHONY: install: $(kernel_img) - @$(objcopy) -S -O binary --change-addresses -0x80000000 $< $(build_path)/bin + @$(objcopy) -S -O binary ../tools/opensbi/fu540.elf $(build_path)/bin + @dd if=$< of=$(build_path)/bin bs=131072 seek=16 @../tools/u540/mkimg.sh $(build_path)/bin $(build_path)/sd.img endif From 218bb29cf337e9db010369155bbd99602aec6054 Mon Sep 17 00:00:00 2001 From: Yuhao Zhou Date: Sun, 21 Apr 2019 14:30:02 +0800 Subject: [PATCH 36/36] Fix TimeSpec type. --- kernel/src/syscall/time.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/kernel/src/syscall/time.rs b/kernel/src/syscall/time.rs index 2ae76d46..edea0f63 100644 --- a/kernel/src/syscall/time.rs +++ b/kernel/src/syscall/time.rs @@ -53,20 +53,20 @@ impl TimeVal { #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct TimeSpec { - sec: u64, - nsec: u64, + sec: usize, + nsec: usize, } impl TimeSpec { pub fn to_duration(&self) -> Duration { - Duration::new(self.sec, self.nsec as u32) + Duration::new(self.sec as u64, self.nsec as u32) } pub fn get_epoch() -> Self { let usec = get_epoch_usec(); TimeSpec { - sec: usec / USEC_PER_SEC, - nsec: usec % USEC_PER_SEC * NSEC_PER_USEC, + sec: (usec / USEC_PER_SEC) as usize, + nsec: (usec % USEC_PER_SEC * NSEC_PER_USEC) as usize, } } }