- /* プログラムレジスタのアドレスが主記憶の範囲外の場合はエラー終了 */
- if(sys->cpu->pr >= sys->memsize) {
- setcerr(204, pr2str(sys->cpu->pr)); /* Program Register (PR) - out of COMET II memory */
- goto execerr;
- }
- /* スタック領域を確保できない場合はエラー終了 */
- else if(sys->cpu->sp <= execptr->end) {
- setcerr(205, pr2str(sys->cpu->pr)); /* Stack Pointer (SP) - cannot allocate stack buffer */
- goto execerr;
- }
- /* スタック領域のアドレスが主記憶の範囲外の場合はエラー終了 */
- else if(sys->cpu->sp > sys->memsize) {
- setcerr(207, pr2str(sys->cpu->pr)); /* Stack Pointer (SP) - out of COMET II memory */
+ /* プログラムレジスタとスタックポインタをチェック */
+ if(sys->cpu->pr >= sys->memsize || sys->cpu->sp <= execptr->end || sys->cpu->sp > sys->memsize) {
+ if(sys->cpu->pr >= sys->memsize) {
+ setcerr(204, pr2str(sys->cpu->pr)); /* Program Register (PR) - out of COMET II memory */
+ } else if(sys->cpu->sp <= execptr->end) {
+ setcerr(205, pr2str(sys->cpu->pr)); /* Stack Pointer (SP) - cannot allocate stack buffer */
+ } else if(sys->cpu->sp > sys->memsize) {
+ setcerr(207, pr2str(sys->cpu->pr)); /* Stack Pointer (SP) - out of COMET II memory */
+ }