いまいち何をやっているのかよくわからないんですが...
PRE_STEPxとかgblPreMemberって何?とか。
見たところPRE_STEP2が実際にプレライトする関数なりステート名の様ですが、ここに入ってくる前に呼び出されるのか、ここを抜けた後に呼び出されるのかわからないので終了判定の是非も判断できませんし。
他にも無意味にグローバル変数使ってるクサイとか、無駄にステートマシン使ってるっぽいとか、名前の付け方とか、コメントが意味を成していないとか、い〜っぱい言いたいことはありますが、とりあえず。
>  if(*gblPreAdr == 0x00)
>  {
>    if(gblPreAdr < &AD_E)
>    {
>      gblPreAdr++;        /* 書込み先アドレス++  */
>      gblPreMember = PRE_STEP2;     /* ステータス移行   */
>    }
>    else
>    {
>      gblPreMember = PRE_STEP8;     /* ステータス移行   */
>    }
>  }
>  else
>  {
>    gblPreMember = PRE_STEP5;      /* ステータス移行   */
>  }
> 
> ※unsigned char    *gblPreAdr;     /* プレライト処理アドレス  */
> ※#define AD_E    (*(unsigned char *)0x1FFFF)
舘野雄治<webmaster@xxxxxxxxxxxx>
たろすけの部屋<http://www.tarosuke.net/>