コード例 #1
0
ファイル: console.c プロジェクト: kong123/STUDY
/*======================================================================*
                           flush
*======================================================================*/
PRIVATE void flush(CONSOLE* p_con)
{
    if (is_current_console(p_con)) {
        set_cursor(p_con->cursor);
        set_video_start_addr(p_con->current_start_addr);
    }
}
コード例 #2
0
ファイル: console.c プロジェクト: NeymarL/Muse-OS
/*======================================================================*
               select_console
 *======================================================================*/
PUBLIC void select_console(int nr_console)
{
    if ((nr_console <0) || (nr_console >= NR_CONSOLES)) {
        return;
    }
    nr_current_console = nr_console;

    set_video_start_addr(console_table[nr_console].current_start_addr);
    set_cursor(console_table[nr_console].cursor);
}
コード例 #3
0
ファイル: console.c プロジェクト: NeymarL/Muse-OS
/*======================================================================*
                               clear_screen
 *======================================================================*/
PUBLIC void clear_screen(CONSOLE* p_con)
{
    p_con->cursor = 0;
    for (int i = 0; i <= 25; i++) {
        for (int j = 0; j <= 40; j++) {
            out_string(p_con, " ", White);
        }
    }
    p_con->cursor = 0;
    if (p_con == console_table + nr_current_console){
        set_cursor(p_con->cursor);
        set_video_start_addr(p_con->original_addr);
    }
}
コード例 #4
0
ファイル: console.c プロジェクト: NeymarL/Muse-OS
/*======================================================================
                scroll_screen
 *======================================================================*/
PUBLIC void scroll_screen(CONSOLE* p_con, int direction)
{
    if (direction == SCR_UP) {
        if (p_con->current_start_addr > p_con->original_addr) {
            p_con->current_start_addr -= SCREEN_WIDTH;
        }
    } else if (direction == SCR_DN) {
        if (p_con->current_start_addr + SCREEN_SIZE < 
            p_con->original_addr + p_con->v_mem_limit) {
            p_con->current_start_addr += SCREEN_WIDTH;
        }
    }

    set_video_start_addr(p_con->current_start_addr);
    set_cursor(p_con->cursor);
}
コード例 #5
0
ファイル: tty.c プロジェクト: CYQSARA/simple_os
int select_tty(int tty_index)
{ 
  int ret =0;
  
  if ( 0 <= cur_tty_index && cur_tty_index < TTY_NUM)
    cur_tty_index = tty_index;
  else
    ret = -1;

  //s32_print_int(tty_table[cur_tty_index].console->vm_start, (u8*)(0xb8000+160*1), 16);

  int org_x, org_y;
  get_xy(tty_table[cur_tty_index].console, &org_x, &org_y);

  set_xy(tty_table[cur_tty_index].console, 0, 0);
  s32_console_print_str(tty_table[cur_tty_index].console, "simple os tty ");

  switch (cur_tty_index)
  {
    case 0:
      s32_console_print_char(tty_table[cur_tty_index].console, '1');
      break;
    case 1:
      s32_console_print_char(tty_table[cur_tty_index].console, '2');
      break;
    case 2:
      s32_console_print_char(tty_table[cur_tty_index].console, '3');
      break;
    default:
      break;
  }
  s32_console_print_str(tty_table[cur_tty_index].console, "\r\nfake login: "******"\r\n\r\n");
  set_xy(tty_table[cur_tty_index].console, org_x, org_y);
  u16 cur_console_vm_start = (tty_table[cur_tty_index].console->vm_start-0xb8000)/2;
  set_video_start_addr(cur_console_vm_start);


  //set_cursor(cur_console_vm_start + tty_table[cur_tty_index].console->cur_x + tty_table[cur_tty_index].console->cur_y*80);
  set_cursor(cur_console_vm_start + org_x + org_y*80);
  return ret;
}
コード例 #6
0
ファイル: console.c プロジェクト: huage1994/OS
/**
 * Set the cursor and starting address of a console by writing the
 * CRT Controller Registers.
 * 
 * @param con  The console to be set.
 *****************************************************************************/
PUBLIC void flush(CONSOLE* con)
{
	if (is_current_console(con)) {
		set_cursor(con->cursor);
		set_video_start_addr(con->crtc_start);
	}

#ifdef __TTY_DEBUG__
	int lineno = 0;
	for (lineno = 0; lineno < con->con_size / SCR_WIDTH; lineno++) {
		u8 * pch = (u8*)(V_MEM_BASE +
				   (con->orig + (lineno + 1) * SCR_WIDTH) * 2
				   - 4);
		*pch++ = lineno / 10 + '0';
		*pch++ = RED_CHAR;
		*pch++ = lineno % 10 + '0';
		*pch++ = RED_CHAR;
	}
#endif
}
コード例 #7
0
ファイル: console.c プロジェクト: descent/simple_os
// prefix s32 means simple, 32bit code (in x86 protected mode)
// this version don't specify video address
// for console io
void s32_print_char(u8 ch)
{
    switch (ch)
    {
    case '\r':
        //cur_x = cur_x - (cur_x % 80);
        cur_x = 0;
        text_vb = (u8*)((u32)text_vb - (((u32)text_vb-0xb8000) % 160));
        cur_pos = (((u32)text_vb - 0xb8000)/2);
        s32_print_int(cur_pos, (u8*)(0xb8000+160*1 + 18*2+20), 16);
        break;
    case '\n':
        text_vb+=160;
        cur_pos += 80;
        s32_print_int(cur_pos, (u8*)(0xb8000+160*1 + 18*2+40), 16);
        ++cur_y;
        break;
    case 0x20 ... 0x7e: // ascii printable char. gnu extension: I don't want use gnu extension, but it is very convenience.
        *text_vb = ch;
        *(text_vb+1) = (text_fg|text_bg);
        text_vb+=2;
        ++cur_x;
        ++cur_pos;
        break;
    default:
        break;
    }

    set_cursor(cur_pos);
    s32_print_int(cur_pos, (u8*)(0xb8000+160*1 + 18*2+60), 16);
    clear_line(18);
    s32_print_int(cur_x, (u8*)(0xb8000+160*18 + 23*2+40), 10);
    s32_print_int(cur_y, (u8*)(0xb8000+160*18 + 23*2+60), 10);
    if (cur_y >= 25 )
        set_video_start_addr(80*(cur_y - 24));
}
コード例 #8
0
ファイル: console.c プロジェクト: descent/simple_os
void s32_console_print_char(Console *console, u8 ch)
{

    if (console->type == GRAPHIC_CONSOLE)
    {
        //BOCHS_MB
        //draw_char(console->cur_x, console->cur_y, ch);
        draw_8x16_ch(console->cur_x, console->cur_y, ch, 5);
        console->cur_x += 8;
        if (console->cur_x >= 320)
        {
            console->cur_x = 0;
            console->cur_y += 16;
        }
#if 1
        if (ch == '`')
        {
            static u8 odd=0;
            extern u8 bg_raw_data[];
            extern int bg_w;
            extern int bg_h;
            extern u8 palette_data[];

            extern u8 os_bg_raw_data[];
            extern int os_bg_w;
            extern int os_bg_h;
            extern u8 os_palette_data[];
            draw_256_grid();
            switch (odd)
            {
            case 0:
            {
                draw_bg(120, 0, bg_raw_data, bg_w, bg_h, palette_data);
                break;
            }
            case 1:
            {
                draw_bg(0, 0, os_bg_raw_data, os_bg_w, os_bg_h, os_palette_data);
                break;
            }
            case 2:
            {
                draw_bg(0, 0, pe_320_180_256_bmp, pe_320_180_256_wb, pe_320_180_256_hb, pe_320_180_256_palette_data);
                break;
            }
            }
            odd = (odd+1) % 3;
        }
#endif
        return;
    }

    u8 *console_vb = (u8*)console->cur_vm;
    u32 vm = console->vm_start;
    //u8 *console_vb = (u8*)(0xb8000);
    //s32_put_char(ch, (u8*)(0xb8000+160*19));
    //if (console->cur_y >= ((VIDEO_RAM_SIZE/4000) * 25) )
    if (console->cur_y >= 50)
        return;

    switch (ch)
    {
    case '\r':
        console->cur_x = 0;
        break;
    case '\n':
        ++console->cur_y;
        break;
    case 0x20 ... 0x7e: // ascii printable char. gnu extension: I don't want use gnu extension, but it is very convenience.
        //*console_vb = ch;
        //*(console_vb+1) = (text_fg|text_bg);
        *((u8 *)(vm + (console->cur_x + console->cur_y * 80)*2)) = ch;
        *((u8 *)(vm + (console->cur_x + console->cur_y * 80)*2)+1) = 7; // WHITE
        ++console->cur_x;
        if (console->cur_x >= 80)
        {
            console->cur_x = 0;
            ++console->cur_y;
        }
        break;
    default:
        break;
    }
    console_vb = (console->cur_x + console->cur_y*80)*2 + console->vm_start;

    if (console->cur_y >= 25 )
        set_video_start_addr(80*(console->cur_y - 24));
    set_cursor((console->vm_start - 0xb8000)/2 + console->cur_x + console->cur_y * 80);
    console->cur_vm = (u32)console_vb;
}