diff --git a/student-distrib/keyboard.c b/student-distrib/keyboard.c index 3047f6e86ca824ed9c8a4a7d39f31e2c7fd75604..17abc762995977052388473944325151a7685818 100644 --- a/student-distrib/keyboard.c +++ b/student-distrib/keyboard.c @@ -146,10 +146,10 @@ void KB_init(void) { // initialize modifier flags enter_flag[0] = enter_flag[1] = enter_flag[2] = 0; + ctrl_flag[0] = ctrl_flag[1] = ctrl_flag[2] = 0; caps_flag = 0; alt_flag = 0; - ctrl_flag = 0; shift_flag = 0; enable_irq(KB_IRQ); @@ -298,13 +298,13 @@ void KB_handler(void) { case 0x1D : //ctrl pressed - ctrl_flag = 1; + ctrl_flag[visible_terminal] = 1; send_eoi(KB_IRQ); return; case 0x9D : //ctrl released - ctrl_flag = 0; + ctrl_flag[visible_terminal] = 0; send_eoi(KB_IRQ); return; @@ -352,9 +352,10 @@ void KB_handler(void) { // 0x15 = scancode for L // check if ctrl-L is pressed - if(ctrl_flag && !shift_flag && pressed_key == 0x15) + if(ctrl_flag[visible_terminal] /*&& !shift_flag*/ && pressed_key == 0x15) { - clear(); + //clear(); + clear_memory(); reset_cursor(); send_eoi(KB_IRQ); return; @@ -384,6 +385,7 @@ void KB_handler(void) { } page_table[0xB8] = ((uint32_t)0xB8000) | USER | READ_WRITE | PRESENT; + flush_tlb(); //memcpy( (void*)TERM_VID, (const void*) terminal[visible_terminal].vid_mem, _4_KB ); diff --git a/student-distrib/keyboard.h b/student-distrib/keyboard.h index 2679cec0680ac120a88bbe2586d182ca66cd92cb..3b658b33d2f0a39f401a746cb3cc1c61d3231a09 100644 --- a/student-distrib/keyboard.h +++ b/student-distrib/keyboard.h @@ -16,10 +16,10 @@ #define ASCII_SIZE 51 // keyboard modifier flags -uint8_t caps_flag; -uint8_t ctrl_flag; -uint8_t shift_flag; -uint8_t alt_flag; + uint8_t caps_flag; + uint8_t shift_flag; + uint8_t alt_flag; + uint8_t ctrl_flag[3]; volatile uint8_t enter_flag[3]; /************************ KB driver functions ************************/ diff --git a/student-distrib/lib.c b/student-distrib/lib.c index a30956f339443c31a7767db4339043f56eb6fcdf..325f335d821f627eeebec73b06a5fa09fc0dce71 100644 --- a/student-distrib/lib.c +++ b/student-distrib/lib.c @@ -17,9 +17,31 @@ static char* video_mem = (char *)VIDEO; * Function: Clears video memory */ void clear(void) { int32_t i; + for (i = 0; i < NUM_ROWS * NUM_COLS; i++) { *(uint8_t *)(video_mem + (i << 1)) = ' '; - *(uint8_t *)(video_mem + (i << 1) + 1) = ATTRIB; + *(uint8_t *)(video_mem + (i << 1) + 1) = ATTRIB; + } +} + +void clear_memory(void) +{ + int32_t i; + uint8_t * video_memory; + + if(running_terminal == running_terminal) + video_memory = (uint8_t *) video_mem; + else + video_memory = (uint8_t *) terminal[visible_terminal].vid_mem; + + for (i = 0; i < NUM_ROWS * NUM_COLS; i++) { + *(uint8_t *)(video_memory + (i << 1)) = ' '; + *(uint8_t *)(video_memory + (i << 1) + 1) = ATTRIB; + } + + for (i = 0; i < NUM_ROWS * NUM_COLS; i++) { + *(uint8_t *)(terminal[visible_terminal].vid_mem + (i << 1)) = ' '; + *(uint8_t *)(terminal[visible_terminal].vid_mem + (i << 1) + 1) = ATTRIB; } } diff --git a/student-distrib/lib.h b/student-distrib/lib.h index 98e587c77bf4bc26fc30f9ecac3f9d80d4089910..d22f01ad8d267846c21635bfc90d8dc53e5fc44a 100644 --- a/student-distrib/lib.h +++ b/student-distrib/lib.h @@ -15,6 +15,7 @@ int8_t *itoa(uint32_t value, int8_t* buf, int32_t radix); int8_t *strrev(int8_t* s); uint32_t strlen(const int8_t* s); void clear(void); +void clear_memory(void); void reset_cursor(void); void update_cursor(int32_t term_id); int32_t get_screen_x(void);