#include <stdint.h> #include "ece391support.h" #include "ece391syscall.h" #define SCREENWIDTH 79 #define ENDING 2 #define BUFMAX SCREENWIDTH+ENDING #define START 1 #define STARTLOOP START+1 #define LOOPMAX BUFMAX-ENDING-1 #define STARTCHAR 'A' #define ENDCHAR 'Z' int main () { int32_t i = 0; int32_t j = 0; uint8_t curchar = STARTCHAR; uint8_t update = 1; int ret_val; int garbage; int rtc_fd; uint8_t buf[BUFMAX]; // Clear buffer for(i = 0; i < BUFMAX; i++) buf[i]=' '; // Initialize buffer with walls buf[BUFMAX-1]='\0'; buf[BUFMAX-2]='\n'; buf[BUFMAX-3]='|'; buf[START]='|'; // Open and set RTC Frequency rtc_fd = ece391_open((uint8_t*)"rtc"); ret_val = 32; ret_val = ece391_write(rtc_fd, &ret_val, 4); while(1) { // Move out for(j = STARTLOOP; j < LOOPMAX; j++) { // Clear inner portion of world for(i = STARTLOOP; i < LOOPMAX; i++) { buf[i]=' '; } // Draw character buf[j] = curchar; ece391_fdputs (1, buf); // Wait for RTC tick ece391_read(rtc_fd, &garbage, 4); } // Bounce back for(j = LOOPMAX - 1; j >= STARTLOOP; j--) { // Clear inner portion of the world for(i = STARTLOOP; i < LOOPMAX; i++) { buf[i]=' '; } // Draw character buf[j] = curchar; ece391_fdputs (1, buf); // Wait for RTC tick ece391_read(rtc_fd, &garbage, 4); } // Edge case on characters if(curchar == ENDCHAR) { curchar = STARTCHAR; } else { // Update current character curchar = curchar + update; } } return 0; }