CompileToneSpec(); | CompileToneSpec(); | ||||
break; | break; | ||||
case kCONTINUE: | case kCONTINUE: | ||||
*prog_out++ = i_CONTINUE; | |||||
*prog_out++ = OPCODE_CONTINUE; | |||||
DecThenCount(); | DecThenCount(); | ||||
break; | break; | ||||
case kRETURN: | case kRETURN: | ||||
*prog_out++ = i_RETURN; | |||||
*prog_out++ = OPCODE_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++ = i_RETURN; | |||||
*prog_out++ = OPCODE_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 == i_CONTINUE) | |||||
if (instn2 == OPCODE_CONTINUE) | |||||
return 3; | return 3; | ||||
return 2; | return 2; | ||||
} | } | ||||
// instructions with no operand | // instructions with no operand | ||||
switch (data) | switch (data) | ||||
{ | { | ||||
case i_RETURN: | |||||
case OPCODE_RETURN: | |||||
end_flag = 1; | end_flag = 1; | ||||
break; | break; | ||||
case i_CONTINUE: | |||||
case OPCODE_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] != i_CONTINUE) { | |||||
if (prog[1] != OPCODE_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 i_RETURN 0x0001 | |||||
#define i_CONTINUE 0x0002 | |||||
#define i_NOT 0x0003 | |||||
#define OPCODE_RETURN 0x0001 | |||||
#define OPCODE_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 | ||||
// conditions and jumps | // conditions and jumps | ||||
#define i_CONDITION 0x2000 | #define i_CONDITION 0x2000 | ||||
#define i_OR 0x1000 // added to i_CONDITION | #define i_OR 0x1000 // added to i_CONDITION | ||||
#define i_NOT 0x0003 | |||||
#define i_JUMP 0x6000 | #define i_JUMP 0x6000 | ||||
#define i_JUMP_FALSE 0x6800 | #define i_JUMP_FALSE 0x6800 |