Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // original BASIC code at https://www.retrobrewcomputers.org/forum/index.php?t=msg&th=201&goto=4704&#msg_4704
- // translated C code, CC0
- #define X_MAX 79
- #define Y_MAX 25
- uint8_t result[Y_MAX][X_MAX];
- inline uint32_t rsr_ccount(void)
- {
- uint32_t ccount;
- __asm__ volatile("rsr %0, ccount" : "=r"(ccount));
- return ccount;
- }
- void display_result(void)
- {
- int x, y;
- const char c[] = "0123456789ABCDEF ";
- for (y = 0; y < Y_MAX; y++) {
- for (x = 0; x < X_MAX; x++) {
- Serial.print(c[result[y][x]]);
- }
- Serial.print('\n');
- }
- }
- void benchmark(void)
- {
- int x, y, i;
- float a, b, ca, cb, t;
- for (y = -12; y <= 12; y++) {
- for (x = -39; x <= 39; x++) {
- a = ca = x * 0.0458;
- b = cb = y * 0.08333;
- for (i = 0; i <= 15; i++) {
- t = (a * a) - (b * b) + ca;
- b = (2 * a * b) + cb;
- a = t;
- if ((a * a + b * b) > 4)
- break;
- }
- result[y + 12][x + 39] = i;
- }
- }
- return;
- }
- void setup() {
- uint32_t before, after;
- Serial.begin(38400);
- Serial.print('\n');
- before = rsr_ccount();
- delay(1000);
- after = rsr_ccount();
- Serial.print(after - before);
- Serial.print('\n');
- before = rsr_ccount();
- benchmark();
- after = rsr_ccount();
- Serial.print(after - before);
- Serial.print('\n');
- before = micros();
- benchmark();
- after = micros();
- Serial.print(after - before);
- Serial.print('\n');
- display_result();
- }
- void loop() {
- // do nothing
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement