uchar ram_chk(void) {/* RAM チェックルーチン*/
register int x;/* メモリ save reg.*/
register int *p=(int*)0x8000;/* チェックするメモリのポインタ*/
register int wkr1=0x5555;/* ループ中レジスタに置く定数*/
register int wkr2=0xAAAA;   register int wkr3=0xFFFF;
do01:di();
x = *p++;/* こわす前にsave*/
*--p = 0;
if( *p++ == 0 ) {/* 0000を書いて読む*/
*--p = wkr1;
if( *p++ == wkr1 ) {/* 5555を書いて読む*/
*--p = wkr2;
if( *p++ == wkr2 ) {/* AAAAを書いて読む*/
*--p = wkr3;
if( *p++ == wkr3 ) {/* FFFFを書いて読む*/
*--p = x;/* 壊したRAM復元*/
ei();
if( *p++ == x && /* 意味はwhile do01だがcではそういう書式がない*/
(uchar)((ushort)p>>8) != 0xF7 ) goto do01;
}
}
}
}
ei();
return( (uchar)((ushort)p>>8) - 0xF7 );
}