- tty: only report unrecognized scancodes once; forget about
remembering the origin and cursor position as that feature didn't really work properly anyway - tty: map in video and font memory using a vm call, access it from C, thereby eliminating pesky weird segment calls and assembly to access it, and unbreaks loadfont (Roman Ignatov) - bios_wini: fix bios_wini by allocating a <1MB buffers for it - memory: preallocate ramdisk, makes it a bit faster (and doesn't fail halfway if you allocate a huge one) - floppy: use <1MB buffer - ramdisk proto: because of the 2x1 page reservations, binaries got a little fatter and didn't fit on the ramdisk any more. increase it.
This commit is contained in:
+14
-24
@@ -52,7 +52,6 @@ PRIVATE unsigned font_lines; /* font lines per character */
|
||||
PRIVATE unsigned scr_width; /* # characters on a line */
|
||||
PRIVATE unsigned scr_lines; /* # lines on the screen */
|
||||
PRIVATE unsigned scr_size; /* # characters on the screen */
|
||||
PUBLIC unsigned info_location; /* location in video memory of struct */
|
||||
|
||||
/* tells mem_vid_copy() to blank the screen */
|
||||
#define BLANK_MEM ((vir_bytes) 0)
|
||||
@@ -65,9 +64,7 @@ PRIVATE int disabled_sm; /* Scroll mode to be restored when re-enabling
|
||||
*/
|
||||
|
||||
char *console_memory = NULL;
|
||||
|
||||
/* boot_tty_info we use to communicate with the boot code. */
|
||||
struct boot_tty_info boot_tty_info;
|
||||
char *font_memory = NULL;
|
||||
|
||||
/* Per console data. */
|
||||
typedef struct console {
|
||||
@@ -90,24 +87,14 @@ typedef struct console {
|
||||
int c_line; /* line no */
|
||||
} console_t;
|
||||
|
||||
#define UPDATEBOOTINFO(ccons, infofield, value) { \
|
||||
if(ccons->c_line == 0) { \
|
||||
boot_tty_info.infofield = value; \
|
||||
mem_vid_copy((vir_bytes) &boot_tty_info, \
|
||||
info_location/2, sizeof(boot_tty_info)/2); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define UPDATE_CURSOR(ccons, cursor) { \
|
||||
ccons->c_cur = cursor; \
|
||||
UPDATEBOOTINFO(ccons, conscursor, ccons->c_cur); \
|
||||
if(curcons && ccons == curcons) \
|
||||
set_6845(CURSOR, ccons->c_cur); \
|
||||
}
|
||||
|
||||
#define UPDATE_ORIGIN(ccons, origin) { \
|
||||
ccons->c_org = origin; \
|
||||
UPDATEBOOTINFO(ccons, consorigin, ccons->c_org); \
|
||||
if (curcons && ccons == curcons) \
|
||||
set_6845(VID_ORG, ccons->c_org); \
|
||||
}
|
||||
@@ -1001,13 +988,18 @@ tty_t *tp;
|
||||
}
|
||||
if (machine.vdu_ega) vid_size = EGA_SIZE;
|
||||
wrap = ! machine.vdu_ega;
|
||||
info_location = vid_size - sizeof(struct boot_tty_info);
|
||||
|
||||
console_memory = vm_map_phys(SELF, (void *) vid_base, vid_size);
|
||||
|
||||
if(console_memory == MAP_FAILED)
|
||||
panic("TTY","Console couldn't map video memory", NO_NUM);
|
||||
|
||||
font_memory = vm_map_phys(SELF, (void *)GA_VIDEO_ADDRESS, GA_FONT_SIZE);
|
||||
|
||||
if(font_memory == MAP_FAILED)
|
||||
panic("TTY","Console couldn't map font memory", NO_NUM);
|
||||
|
||||
|
||||
vid_size >>= 1; /* word count */
|
||||
vid_mask = vid_size - 1;
|
||||
|
||||
@@ -1015,7 +1007,7 @@ tty_t *tp;
|
||||
scr_size = scr_lines * scr_width;
|
||||
|
||||
/* There can be as many consoles as video memory allows. */
|
||||
nr_cons = (vid_size - sizeof(struct boot_tty_info)/2) / scr_size;
|
||||
nr_cons = vid_size / scr_size;
|
||||
|
||||
if (nr_cons > NR_CONS) nr_cons = NR_CONS;
|
||||
if (nr_cons > 1) wrap = 0;
|
||||
@@ -1038,12 +1030,6 @@ tty_t *tp;
|
||||
scroll_screen(cons, SCROLL_UP);
|
||||
cons->c_row = scr_lines - 1;
|
||||
cons->c_column = 0;
|
||||
|
||||
memset(&boot_tty_info, 0, sizeof(boot_tty_info));
|
||||
UPDATE_CURSOR(cons, cons->c_cur);
|
||||
boot_tty_info.flags = BTIF_CONSCURSOR | BTIF_CONSORIGIN;
|
||||
boot_tty_info.magic = TTYMAGIC;
|
||||
UPDATE_ORIGIN(cons, cons->c_org);
|
||||
}
|
||||
select_console(0);
|
||||
cons_ioctl(tp, 0);
|
||||
@@ -1327,6 +1313,7 @@ PUBLIC void select_console(int cons_line)
|
||||
PUBLIC int con_loadfont(m)
|
||||
message *m;
|
||||
{
|
||||
|
||||
/* Load a font into the EGA or VGA adapter. */
|
||||
int result;
|
||||
static struct sequence seq1[7] = {
|
||||
@@ -1353,8 +1340,11 @@ message *m;
|
||||
if (!machine.vdu_ega) return(ENOTTY);
|
||||
result = ga_program(seq1); /* bring font memory into view */
|
||||
|
||||
result = sys_physcopy(m->IO_ENDPT, GRANT_SEG, (vir_bytes) m->ADDRESS,
|
||||
NONE, PHYS_SEG, (phys_bytes) GA_VIDEO_ADDRESS, (phys_bytes)GA_FONT_SIZE);
|
||||
if(sys_safecopyfrom(m->IO_ENDPT, (cp_grant_id_t) m->ADDRESS, 0,
|
||||
(vir_bytes) font_memory, GA_FONT_SIZE, D) != OK) {
|
||||
printf("tty: copying from %d failed\n", m->IO_ENDPT);
|
||||
return EFAULT;
|
||||
}
|
||||
|
||||
result = ga_program(seq2); /* restore */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user