CompileToneSpec(); | CompileToneSpec(); | ||||
break; | break; | ||||
case kCONTINUE: | case kCONTINUE: | ||||
*prog_out++ = OPCODE_CONTINUE; | |||||
*prog_out++ = INSTN_CONTINUE; | |||||
DecThenCount(); | DecThenCount(); | ||||
break; | break; | ||||
case kRETURN: | case kRETURN: | ||||
*prog_out++ = OPCODE_RETURN; | |||||
*prog_out++ = INSTN_RETURN; | |||||
DecThenCount(); | DecThenCount(); | ||||
break; | break; | ||||
case kINCLUDE: | case kINCLUDE: | ||||
if (if_level > 0) | if (if_level > 0) | ||||
error("Missing ENDIF"); | error("Missing ENDIF"); | ||||
if ((prog_out > prog_buf) && (if_stack[0].returned == 0)) | if ((prog_out > prog_buf) && (if_stack[0].returned == 0)) | ||||
*prog_out++ = OPCODE_RETURN; | |||||
*prog_out++ = INSTN_RETURN; | |||||
break; | break; | ||||
} | } | ||||
break; | break; |
// This instruction is followed by addWav(), 2 more words | // This instruction is followed by addWav(), 2 more words | ||||
return 4; | return 4; | ||||
} | } | ||||
if (instn2 == OPCODE_CONTINUE) | |||||
if (instn2 == INSTN_CONTINUE) | |||||
return 3; | return 3; | ||||
return 2; | return 2; | ||||
} | } | ||||
// instructions with no operand | // instructions with no operand | ||||
switch (data) | switch (data) | ||||
{ | { | ||||
case OPCODE_RETURN: | |||||
case INSTN_RETURN: | |||||
end_flag = 1; | end_flag = 1; | ||||
break; | break; | ||||
case OPCODE_CONTINUE: | |||||
case INSTN_CONTINUE: | |||||
break; | break; | ||||
default: | default: | ||||
InvalidInstn(ph, instn); | InvalidInstn(ph, instn); | ||||
param_sc = phdata->sound_param[instn2] = (instn >> 4) & 0xff; | param_sc = phdata->sound_param[instn2] = (instn >> 4) & 0xff; | ||||
prog++; | prog++; | ||||
if (prog[1] != OPCODE_CONTINUE) { | |||||
if (prog[1] != INSTN_CONTINUE) { | |||||
if (instn2 < 2) { | if (instn2 < 2) { | ||||
// FMT() and WAV() imply Return | // FMT() and WAV() imply Return | ||||
end_flag = 1; | end_flag = 1; |
// instructions | // instructions | ||||
#define OPCODE_RETURN 0x0001 | |||||
#define OPCODE_CONTINUE 0x0002 | |||||
#define INSTN_RETURN 0x0001 | |||||
#define INSTN_CONTINUE 0x0002 | |||||
// Group 0 instrcutions with 8 bit operand. These values go into bits 8-15 of the instruction | // Group 0 instrcutions with 8 bit operand. These values go into bits 8-15 of the instruction | ||||
#define i_CHANGE_PHONEME 0x01 | #define i_CHANGE_PHONEME 0x01 |