From c6033ac35607bf9726af994e48a8077c21178306 Mon Sep 17 00:00:00 2001 From: Adam Greenwood-Byrne Date: Fri, 19 Mar 2021 20:11:03 +0000 Subject: [PATCH] Added examples/wgt46.c to exercise whline() --- part12-wgt/examples/wgt46.c | 90 +++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 part12-wgt/examples/wgt46.c diff --git a/part12-wgt/examples/wgt46.c b/part12-wgt/examples/wgt46.c new file mode 100644 index 0000000..cb48c86 --- /dev/null +++ b/part12-wgt/examples/wgt46.c @@ -0,0 +1,90 @@ +#include "wgt.h" +#include "include/mem.h" + +// ######## REQUIRED FUNCTIONS ######## + +unsigned long state0 = 1000; +unsigned long state1 = 2000; + +unsigned long rand(void) +{ + unsigned long s1 = state0; + unsigned long s0 = state1; + + state0 = s0; + s1 ^= s1 << 23; + s1 ^= s1 >> 17; + s1 ^= s0; + s1 ^= s0 >> 26; + state1 = s1; + + return state0 + state1; +} + +void wait_msec(unsigned int n) +{ + register unsigned long f, t, r; + + // Get the current counter frequency + asm volatile ("mrs %0, cntfrq_el0" : "=r"(f)); + // Read the current counter + asm volatile ("mrs %0, cntpct_el0" : "=r"(t)); + // Calculate expire value for counter + t+=((f/1000)*n)/1000; + do{asm volatile ("mrs %0, cntpct_el0" : "=r"(r));}while(r 199) /* Loop at end of screen */ + row = 0; + } while (loopctr < 500); + + /* As soon as we reach 500 hundredths of a second (5 secs), end the routine + and reset the video mode */ + wstoptimer (); + wdonetimer (); +} + +void main() +{ + wgt46(); + while (1); +}