display works sortof
[rpikern] / src / main.c
index 29c0f14..8bab5a1 100644 (file)
@@ -23,41 +23,47 @@ int main(void)
        static int cmdend;
 
        rpi_init();
        static int cmdend;
 
        rpi_init();
-       init_serial(115200);
+       /*init_serial(115200); done in rpi_init now for early debugging */
        con_init();
 
        printf("Detected raspberry pi %d, I/O base: %x\n", rpi_model, rpi_iobase);
        con_init();
 
        printf("Detected raspberry pi %d, I/O base: %x\n", rpi_model, rpi_iobase);
+       printf("Main RAM base: %x, size: %u bytes\n", rpi_mem_base, rpi_mem_size);
+       printf("Video RAM base: %x, size: %u bytes\n", rpi_vmem_base, rpi_vmem_size);
 
        video_init();
 
        printf("Going interactive\n");
        for(;;) {
 
        video_init();
 
        printf("Going interactive\n");
        for(;;) {
-               int c = getchar();
-
-               switch(c) {
-               case '\r':
-               case '\n':
-                       if(!lastnl) {
-                               ser_printstr("\r\n");
-                               cmdbuf[cmdend] = 0;
-                               cmdend = 0;
-                               cmdrun(cmdbuf);
-                       }
-                       lastnl = 1;
-                       break;
-
-               case -1:
-                       lastnl = 0;
-                       printf("error!\n");
-                       break;
-
-               default:
-                       lastnl = 0;
-                       ser_putchar(c);
-                       if(cmdend < sizeof cmdbuf) {
-                               cmdbuf[cmdend++] = c;
+               while(ser_pending()) {
+                       int c = getchar();
+
+                       switch(c) {
+                       case '\r':
+                       case '\n':
+                               if(!lastnl) {
+                                       printf("\r\n");
+                                       cmdbuf[cmdend] = 0;
+                                       cmdend = 0;
+                                       cmdrun(cmdbuf);
+                               }
+                               lastnl = 1;
+                               break;
+
+                       case -1:
+                               lastnl = 0;
+                               printf("error!\n");
+                               break;
+
+                       default:
+                               lastnl = 0;
+                               putchar(c);
+                               if(cmdend < sizeof cmdbuf) {
+                                       cmdbuf[cmdend++] = c;
+                               }
                        }
                }
                        }
                }
+
+               /*video_update(1);*/
        }
 
        return 0;
        }
 
        return 0;
@@ -71,6 +77,7 @@ void reboot(void)
 
 static void cmdrun(char *cmd)
 {
 
 static void cmdrun(char *cmd)
 {
+       static int cur_x, cur_y;
        char *ptr, *args;
 
        while(*cmd && isspace(*cmd)) cmd++;
        char *ptr, *args;
 
        while(*cmd && isspace(*cmd)) cmd++;
@@ -81,6 +88,17 @@ static void cmdrun(char *cmd)
 
        if(strcmp(cmd, "reboot") == 0) {
                reboot();
 
        if(strcmp(cmd, "reboot") == 0) {
                reboot();
+
+       } else if(strcmp(cmd, "down") == 0) {
+               printf("scroll down\n");
+               cur_y += 10;
+               video_scroll(cur_x, cur_y);
+
+       } else if(strcmp(cmd, "up") == 0) {
+               printf("scroll up\n");
+               cur_y -= 10;
+               video_scroll(cur_x, cur_y);
+
        } else if(strcmp(cmd, "help") == 0) {
                printf("help not implemented yet\n");
        } else if(strcmp(cmd, "ver") == 0) {
        } else if(strcmp(cmd, "help") == 0) {
                printf("help not implemented yet\n");
        } else if(strcmp(cmd, "ver") == 0) {