Z80-COREでも、SDCCを使用してC言語でエラトステネスのふるいのプログラムを記述・実行できます。
Z80-CORE用のSDCCのライブラリをまだ作成していないので、プログラムの前半には、文字の出力や計時機能など、モニタの機能をC言語で呼び出せるようにする記述をいくつか追加しています。
/*
sieve.c
*/
#include <stdio.h>
#include <stdarg.h>
void (*wexit)() = (void *)0x0083 ;
void (*conout)(char) = (void *)0x008c ;
void (*initexectime)() = (void *)0x00C2 ;
int (*getexectime)() = (void *)0x00C5 ;
int putchar(int c)
{
if (c == '\n')
conout('\r') ;
conout(c) ;
return c ;
}
#define MAXSQRT 100
#define MAX MAXSQRT*MAXSQRT
void main()
{
char prime[MAX] ;
int i, j, t ;
initexectime() ; // 計時時間の初期化
puts("INIT TABLE\n") ;
for (i = 2; i < MAX; i++)
prime[i] = 1 ;
printf("DONE: %d sec\n", getexectime()) ; // 経過時間の表示
puts("SIEVE CALC\n") ;
for (i = 2; i < MAXSQRT; i++) {
if (prime[i]) {
printf("%d,", i) ;
for (j = i; i * j < MAX; j++)
prime[i * j] = 0 ;
}
}
t = getexectime() ; // 経過時間の取得
printf("\nDONE: %d sec\n", t) ;
puts("\nPRIME NUMBERS\n") ;
for (i = 2; i < MAX ; i++) {
if (prime[i]){
printf("%d,", i) ;
}
}
printf("\nEXEC TIME: %d sec\n", t) ;
wexit() ;
}
実行結果は3秒(4MHz)でした。
CC65に比べてかなり速いような気がする。。。