• R/O
  • HTTP
  • SSH
  • HTTPS

提交

標籤
無標籤

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Commit MetaInfo

修訂91405797e5e196fc099684f5813141e98537b96d (tree)
時間2014-07-08 15:39:41
作者hikarupsp <hikarupsp@user...>
Commiterhikarupsp

Log Message

エラー表示機能のリファクタリング。

Change Summary

差異

--- a/chncpu/bios.c
+++ b/chncpu/bios.c
@@ -62,11 +62,11 @@ int CHNCPU_BIOS_Op_putcReg_BindOperand(CHNCPU_RuntimeEnvironment *env, CHNCPU_Op
6262 opCache->r = CH4Reader_ReadNextAsUINT(env->appbinReader);
6363
6464 if(opCache->r >= CHNCPU_NUMBER_OF_IREG){
65- env->errFlags |= CHNCPU_ERR_C_REGNUM;
65+ env->errFlags |= CHNCPU_ERR_INVALID_REGNUM;
6666 return -1;
6767 }
6868 if(prefix != 0){
69- env->errFlags |= CHNCPU_ERR_C_PREFIX;
69+ env->errFlags |= CHNCPU_ERR_INVALID_PREFIX;
7070 return -1;
7171 }
7272 return 0;
--- a/chncpu/chncpu.c
+++ b/chncpu/chncpu.c
@@ -228,7 +228,7 @@ int CHNCPU_PrepareBinaryForExecution(CHNCPU_RuntimeEnvironment *env)
228228 printf("Prefix-%X\n", opcode);
229229 #endif
230230 if(opcode > CHNCPU_PREFIX_MAX){
231- env->errFlags |= CHNCPU_ERR_C_PREFIX;
231+ env->errFlags |= CHNCPU_ERR_INVALID_PREFIX;
232232 break;
233233 }
234234 prefix |= (0x01 << opcode);
@@ -241,7 +241,7 @@ int CHNCPU_PrepareBinaryForExecution(CHNCPU_RuntimeEnvironment *env)
241241 if(opcode <= CHNCPU_OPECODE_MAX && opSet->bindFuncTable[opcode]){
242242 opSet->bindFuncTable[opcode](env, op, prefix);
243243 } else{
244- env->errFlags |= CHNCPU_ERR_C_OPCODE;
244+ env->errFlags |= CHNCPU_ERR_INVALID_OPCODE;
245245 }
246246 #if DEBUG_PRINT_OP_BINDING
247247 if(op->opCode <= CHNCPU_OPECODE_MAX && opSet->printFuncTable[op->opCode]){
@@ -254,42 +254,18 @@ int CHNCPU_PrepareBinaryForExecution(CHNCPU_RuntimeEnvironment *env)
254254 break;
255255 }
256256 if(env->appbinReader->errorFlags){
257- env->errFlags |= CHNCPU_ERR_C_INVALID_BIN;
257+ env->errFlags |= CHNCPU_ERR_INVALID_BINARY;
258258 }
259259 if(env->errFlags){
260260 break;
261261 }
262262 }
263263 if(env->currentIndex >= CHNCPU_LENGTH_OF_MAIN_MEMORY && !CH4Reader_IsEndOfBinary(env->appbinReader)){
264- env->errFlags |= CHNCPU_ERR_C_INTERNAL;
264+ env->errFlags |= CHNCPU_ERR_INTERNAL;
265265 puts("INVALID-C: Internal error (low on memory).");
266266 }
267267 if(env->errFlags){
268- printf(">>> Compile error in label:%d\n", env->currentLabel);
269- if(env->errFlags & CHNCPU_ERR_C_REGNUM){
270- puts("INVALID-C: Invalid register number.");
271- }
272- if(env->errFlags & CHNCPU_ERR_C_BITS){
273- puts("INVALID-C: Not supported bit width.");
274- }
275- if(env->errFlags & CHNCPU_ERR_C_OPCODE){
276- printf("INVALID-C: Unknown opCode 0x%X\n", opcode);
277- }
278- if(env->errFlags & CHNCPU_ERR_C_EXPRESSION){
279- puts("INVALID-C: Invalid expression.");
280- }
281- if(env->errFlags & CHNCPU_ERR_C_INVALID_BIN){
282- puts("INVALID-C: Invalid binary.");
283- }
284- if(env->errFlags & CHNCPU_ERR_C_PREFIX){
285- puts("INVALID-C: Invalid prefix.");
286- }
287- if(env->errFlags & CHNCPU_ERR_C_DUPLICATED_LB){
288- puts("INVALID-C: Duplicated LabelID.");
289- }
290- if(env->errFlags & CHNCPU_ERR_C_UNAVAILABLE_PTYPE){
291- puts("INVALID-C: Unavailable pointer type.");
292- }
268+ CHNCPU_PrintErrorMessage(env);
293269 }
294270 env->currentIndex = 0;
295271 env->currentLabel = 0;
@@ -329,29 +305,12 @@ int CHNCPU_Execute(CHNCPU_RuntimeEnvironment *env)
329305 }
330306 } else{
331307 // ロード時にチェックしたはずなのに不明な命令が来た
332- env->errFlags |= CHNCPU_ERR_X_INTERNAL;
308+ env->errFlags |= CHNCPU_ERR_INTERNAL;
333309 break;
334310 }
335311 }
336312 if(env->errFlags){
337- if(env->errFlags & CHNCPU_ERR_X_INTERNAL){
338- puts("INVALID-X: Internal error.");
339- }
340- if(env->errFlags & CHNCPU_ERR_X_TRUNCATED_VALUE){
341- puts("INVALID-X: Truncated value without prefix 2F-0.");
342- }
343- if(env->errFlags & CHNCPU_ERR_X_LABEL_NOT_FOUND){
344- puts("INVALID-X: Label not found.");
345- }
346- if(env->errFlags & CHNCPU_ERR_X_PTYPE_NOT_MATCHED){
347- puts("INVALID-X: Pointer type not matched.");
348- }
349- if(env->errFlags & CHNCPU_ERR_X_BAD_ACCESS){
350- puts("INVALID-X: Bad access.");
351- }
352- if(env->errFlags & CHNCPU_ERR_X_INVALID_PTYPE){
353- puts("INVALID-X: Invalid pointer type.");
354- }
313+ CHNCPU_PrintErrorMessage(env);
355314 }
356315
357316 #if (DEBUG_PRINT_IREG_AFTER_EXECUTION || DEBUG_PRINT_PREG_AFTER_EXECUTION)
@@ -371,7 +330,7 @@ int CHNCPU_Execute(CHNCPU_RuntimeEnvironment *env)
371330 int CHNCPU_CHK_IsAvailableBits(CHNCPU_RuntimeEnvironment *env, ch4_uint bits)
372331 {
373332 if(bits > 32){
374- env->errFlags |= CHNCPU_ERR_C_BITS;
333+ env->errFlags |= CHNCPU_ERR_INVALID_BITS;
375334 return 0;
376335 }
377336 return 1;
@@ -390,7 +349,7 @@ int CHNCPU_AdjustValueForBit(CHNCPU_RuntimeEnvironment *env, int *value, ch4_uin
390349 return 0;
391350 }
392351 if(!(prefix & CHNCPU_PREFIX_ALLOW_TRUNCATE)){
393- env->errFlags |= CHNCPU_ERR_X_TRUNCATED_VALUE;
352+ env->errFlags |= CHNCPU_ERR_TRUNCATED_VALUE;
394353 return 1;
395354 }
396355
--- a/chncpu/chncpu.h
+++ b/chncpu/chncpu.h
@@ -39,24 +39,21 @@
3939 #define CHNCPU_MemoryIndex_INVALID (-1)
4040 #define CHNCPU_PREFIX_MAX 31
4141
42-// ErrorCode at compile
43-#define CHNCPU_ERR_C_REGNUM 0x0001
44-#define CHNCPU_ERR_C_BITS 0x0002
45-#define CHNCPU_ERR_C_OPCODE 0x0004
46-#define CHNCPU_ERR_C_EXPRESSION 0x0008
47-#define CHNCPU_ERR_C_INTERNAL 0x0010
48-#define CHNCPU_ERR_C_INVALID_BIN 0x0020
49-#define CHNCPU_ERR_C_PREFIX 0x0040
50-#define CHNCPU_ERR_C_DUPLICATED_LB 0x0080
51-#define CHNCPU_ERR_C_UNAVAILABLE_PTYPE 0x0100
52-
53-// ErrorCode in execution
54-#define CHNCPU_ERR_X_INTERNAL 0x01
55-#define CHNCPU_ERR_X_TRUNCATED_VALUE 0x02
56-#define CHNCPU_ERR_X_LABEL_NOT_FOUND 0x04
57-#define CHNCPU_ERR_X_PTYPE_NOT_MATCHED 0x08
58-#define CHNCPU_ERR_X_BAD_ACCESS 0x10
59-#define CHNCPU_ERR_X_INVALID_PTYPE 0x20
42+// Common ErrorCode
43+#define CHNCPU_ERR_INTERNAL 0x0001
44+#define CHNCPU_ERR_INVALID_BITS 0x0002
45+#define CHNCPU_ERR_INVALID_OPCODE 0x0004
46+#define CHNCPU_ERR_INVALID_REGNUM 0x0008
47+#define CHNCPU_ERR_INVALID_PTYPE 0x0010
48+#define CHNCPU_ERR_INVALID_BINARY 0x0020
49+#define CHNCPU_ERR_INVALID_PREFIX 0x0040
50+#define CHNCPU_ERR_INVALID_EXPRESSION 0x0080
51+#define CHNCPU_ERR_INVALID_BIOS_FUNC_ID 0x0100
52+#define CHNCPU_ERR_DUPLICATED_LABEL_ID 0x0200
53+#define CHNCPU_ERR_NOT_FOUND_LABEL 0x0400
54+#define CHNCPU_ERR_NOT_MATCHED_PTYPE 0x0800
55+#define CHNCPU_ERR_TRUNCATED_VALUE 0x1000
56+#define CHNCPU_ERR_BAD_ACCESS 0x2000
6057
6158 // (2F)Prefix
6259 #define CHNCPU_PREFIX_ALLOW_TRUNCATE 0x01
@@ -224,7 +221,7 @@ int CHNCPU_Op_DATA_BindOperand(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op,
224221 int CHNCPU_Op_DATA_Execute(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op);
225222 int CHNCPU_Op_DATA_PrintCode(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op, FILE *file);
226223 CHNCPU_OpTag *CHNCPU_Op_DATA_CreateEmptyData(void);
227-int CHNCPU_Op_DATA_AllocateRawDataMemory(CHNCPU_OpTag *op, ch4_sint dataType, ch4_uint dataCount);
224+int CHNCPU_Op_DATA_AllocateRawDataMemory(CHNCPU_OpTag *op, ch4_sint dataType, ch4_uint dataCount, unsigned int *errFlags);
228225 CHNCPU_OpTag *CHNCPU_Op_DATA_CreateDataFromFileAsPType(const char dataPath[], ch4_sint pType);
229226 int CHNCPU_Op_DATA_AssignDataTagToPReg(CHNCPU_RuntimeEnvironment *env, ch4_uint p, CHNCPU_OpTag *op);
230227 int CHNCPU_Op_DATA_WriteRawDataToFile(CHNCPU_OpTag *op, const char dataPath[], int dataCount, int dataType);
@@ -252,5 +249,6 @@ CHNCPU_LabelTag *CHNCPU_Label_GetTagFromLabelID(CHNCPU_LabelSet *lbSet, int labe
252249 void CHNCPU_DumpAppBin(CHNCPU_RuntimeEnvironment *env);
253250 void CHNCPU_DumpIReg(CHNCPU_RuntimeEnvironment *env);
254251 void CHNCPU_DumpPReg(CHNCPU_RuntimeEnvironment *env);
252+void CHNCPU_PrintErrorMessage(CHNCPU_RuntimeEnvironment *env);
255253
256254 #endif
--- a/chncpu/opcode.c
+++ b/chncpu/opcode.c
@@ -112,11 +112,11 @@ int CHNCPU_Op_LB_BindOperand(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op, u
112112 env->currentLabel = opCache->labelID;
113113
114114 if(CHNCPU_Label_Add(env->labelSet, env->currentIndex, opCache->labelID, opCache->opt, CHNCPU_PType_Label)){
115- env->errFlags |= CHNCPU_ERR_C_DUPLICATED_LB;
115+ env->errFlags |= CHNCPU_ERR_DUPLICATED_LABEL_ID;
116116 }
117117
118118 if(prefix != 0){
119- env->errFlags |= CHNCPU_ERR_C_PREFIX;
119+ env->errFlags |= CHNCPU_ERR_INVALID_PREFIX;
120120 return -1;
121121 }
122122 return 0;
@@ -157,18 +157,18 @@ int CHNCPU_Op_LIMM_BindOperand(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op,
157157 opCache->bit = CH4Reader_ReadNextAsUINT(env->appbinReader);
158158
159159 if(opCache->r >= CHNCPU_NUMBER_OF_IREG){
160- env->errFlags |= CHNCPU_ERR_C_REGNUM;
160+ env->errFlags |= CHNCPU_ERR_INVALID_REGNUM;
161161 return -1;
162162 }
163163 if(!CHNCPU_CHK_IsAvailableBits(env, opCache->bit)){
164164 return -1;
165165 }
166166 if(opCache->bit == 0 && opCache->imm != 0){
167- env->errFlags |= CHNCPU_ERR_C_EXPRESSION;
167+ env->errFlags |= CHNCPU_ERR_INVALID_EXPRESSION;
168168 return -1;
169169 }
170170 if(prefix != 0){
171- env->errFlags |= CHNCPU_ERR_C_PREFIX;
171+ env->errFlags |= CHNCPU_ERR_INVALID_PREFIX;
172172 return -1;
173173 }
174174 CHNCPU_AdjustValueForBit(env, &opCache->imm, opCache->bit, CHNCPU_PREFIX_ALLOW_TRUNCATE);
@@ -214,11 +214,11 @@ int CHNCPU_Op_PLIMM_BindOperand(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op
214214 opCache->r = CH4Reader_ReadNextAsUINT(env->appbinReader);
215215
216216 if(opCache->r >= CHNCPU_NUMBER_OF_PREG){
217- env->errFlags |= CHNCPU_ERR_C_REGNUM;
217+ env->errFlags |= CHNCPU_ERR_INVALID_REGNUM;
218218 return -1;
219219 }
220220 if(prefix != 0){
221- env->errFlags |= CHNCPU_ERR_C_PREFIX;
221+ env->errFlags |= CHNCPU_ERR_INVALID_PREFIX;
222222 return -1;
223223 }
224224 return 0;
@@ -232,7 +232,7 @@ int CHNCPU_Op_PLIMM_Execute(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op)
232232
233233 label = CHNCPU_Label_GetTagFromLabelID(env->labelSet, opCache->labelID);
234234 if(!label){
235- env->errFlags |= CHNCPU_ERR_X_LABEL_NOT_FOUND;
235+ env->errFlags |= CHNCPU_ERR_NOT_FOUND_LABEL;
236236 return -1;
237237 }
238238
@@ -276,11 +276,11 @@ int CHNCPU_Op_CND_BindOperand(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op,
276276 opCache->r = CH4Reader_ReadNextAsUINT(env->appbinReader);
277277
278278 if(opCache->r >= CHNCPU_NUMBER_OF_PREG){
279- env->errFlags |= CHNCPU_ERR_C_REGNUM;
279+ env->errFlags |= CHNCPU_ERR_INVALID_REGNUM;
280280 return -1;
281281 }
282282 if(prefix != 0){
283- env->errFlags |= CHNCPU_ERR_C_PREFIX;
283+ env->errFlags |= CHNCPU_ERR_INVALID_PREFIX;
284284 return -1;
285285 }
286286 return 0;
@@ -326,7 +326,7 @@ int CHNCPU_Op_CALLBIOS_BindOperand(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag
326326 if(fid <= CHNCPU_BIOS_OP_MAX && env->bios->bindFuncTable[fid]){
327327 env->bios->bindFuncTable[fid](env, opCache, prefix);
328328 } else{
329- env->errFlags |= CHNCPU_ERR_C_OPCODE;
329+ env->errFlags |= CHNCPU_ERR_INVALID_BIOS_FUNC_ID;
330330 }
331331
332332 if(env->errFlags){
@@ -346,7 +346,7 @@ int CHNCPU_Op_CALLBIOS_Execute(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op)
346346 env->bios->execFuncTable[fid](env, opCache);
347347 } else{
348348 // ロード時にチェックしたはずなのに不明な命令が来た
349- env->errFlags |= CHNCPU_ERR_X_INTERNAL;
349+ env->errFlags |= CHNCPU_ERR_INTERNAL;
350350 }
351351
352352 return 0;
@@ -387,14 +387,14 @@ int CHNCPU_Op_LMEM_BindOperand(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op,
387387
388388 if(opCache->r >= CHNCPU_NUMBER_OF_IREG ||
389389 opCache->p >= CHNCPU_NUMBER_OF_PREG){
390- env->errFlags |= CHNCPU_ERR_C_REGNUM;
390+ env->errFlags |= CHNCPU_ERR_INVALID_REGNUM;
391391 return -1;
392392 }
393393 if(!CHNCPU_CHK_IsAvailableBits(env, opCache->bitDst)){
394394 return -1;
395395 }
396396 if(prefix != 0){
397- env->errFlags |= CHNCPU_ERR_C_PREFIX;
397+ env->errFlags |= CHNCPU_ERR_INVALID_PREFIX;
398398 return -1;
399399 }
400400 return 0;
@@ -409,7 +409,7 @@ int CHNCPU_Op_LMEM_Execute(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op)
409409 p = &env->pReg[opCache->p];
410410
411411 if(p->type != opCache->pType){
412- env->errFlags |= CHNCPU_ERR_X_PTYPE_NOT_MATCHED;
412+ env->errFlags |= CHNCPU_ERR_NOT_MATCHED_PTYPE;
413413 return -1;
414414 }
415415
@@ -458,14 +458,14 @@ int CHNCPU_Op_TernaryReg_BindOperand(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTa
458458 if(opCache->r0 >= CHNCPU_NUMBER_OF_IREG ||
459459 opCache->r1 >= CHNCPU_NUMBER_OF_IREG ||
460460 opCache->r2 >= CHNCPU_NUMBER_OF_IREG){
461- env->errFlags |= CHNCPU_ERR_C_REGNUM;
461+ env->errFlags |= CHNCPU_ERR_INVALID_REGNUM;
462462 return -1;
463463 }
464464 if(!CHNCPU_CHK_IsAvailableBits(env, opCache->bit)){
465465 return -1;
466466 }
467467 if((prefix | CHNCPU_PREFIX_MASK_Op_TernaryReg) != CHNCPU_PREFIX_MASK_Op_TernaryReg){
468- env->errFlags |= CHNCPU_ERR_C_PREFIX;
468+ env->errFlags |= CHNCPU_ERR_INVALID_PREFIX;
469469 return -1;
470470 }
471471 return 0;
@@ -494,13 +494,13 @@ int CHNCPU_Op_TernaryRegBitwise_Execute(CHNCPU_RuntimeEnvironment *env, CHNCPU_O
494494 // AND
495495 result = env->iReg[opCache->r1] & env->iReg[opCache->r2];
496496 } else{
497- env->errFlags |= CHNCPU_ERR_X_INTERNAL;
497+ env->errFlags |= CHNCPU_ERR_INTERNAL;
498498 return -1;
499499 }
500500 // check
501501 checked = result & (0xFFFFFFFF >> (32 - opCache->bit));
502502 if(!(opCache->prefix & CHNCPU_PREFIX_ALLOW_TRUNCATE) && checked != result){
503- env->errFlags |= CHNCPU_ERR_X_TRUNCATED_VALUE;
503+ env->errFlags |= CHNCPU_ERR_TRUNCATED_VALUE;
504504 return -1;
505505 }
506506 // store
@@ -534,7 +534,7 @@ int CHNCPU_Op_TernaryRegArithmetic_Execute(CHNCPU_RuntimeEnvironment *env, CHNCP
534534 } else if(opCode == 0x1B){ // MOD
535535 result = env->iReg[opCache->r1] % env->iReg[opCache->r2];
536536 } else{
537- env->errFlags |= CHNCPU_ERR_X_INTERNAL;
537+ env->errFlags |= CHNCPU_ERR_INTERNAL;
538538 return -1;
539539 }
540540 // check
@@ -606,7 +606,7 @@ int CHNCPU_Op_CompareIReg_BindOperand(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpT
606606 if(opCache->rSrc1 >= CHNCPU_NUMBER_OF_IREG ||
607607 opCache->rSrc2 >= CHNCPU_NUMBER_OF_IREG ||
608608 opCache->rDst >= CHNCPU_NUMBER_OF_IREG){
609- env->errFlags |= CHNCPU_ERR_C_REGNUM;
609+ env->errFlags |= CHNCPU_ERR_INVALID_REGNUM;
610610 return -1;
611611 }
612612 if(!CHNCPU_CHK_IsAvailableBits(env, opCache->bitDiff) ||
@@ -614,7 +614,7 @@ int CHNCPU_Op_CompareIReg_BindOperand(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpT
614614 return -1;
615615 }
616616 if((prefix | CHNCPU_PREFIX_MASK_Op_CompareIReg) != CHNCPU_PREFIX_MASK_Op_CompareIReg){
617- env->errFlags |= CHNCPU_ERR_C_PREFIX;
617+ env->errFlags |= CHNCPU_ERR_INVALID_PREFIX;
618618 return -1;
619619 }
620620 return 0;
@@ -660,12 +660,12 @@ int CHNCPU_Op_CompareIReg_Execute(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *
660660 } else if(opCode == 0x27){
661661 result = ((r1 & r2) != 0) ? -1 : 0;
662662 } else{
663- env->errFlags |= CHNCPU_ERR_X_INTERNAL;
663+ env->errFlags |= CHNCPU_ERR_INTERNAL;
664664 return -1;
665665 }
666666 // check with bitDst
667667 if(opCache->bitDst == 0){
668- env->errFlags |= CHNCPU_ERR_X_TRUNCATED_VALUE;
668+ env->errFlags |= CHNCPU_ERR_TRUNCATED_VALUE;
669669 return -1;
670670 }
671671 // store
@@ -725,12 +725,7 @@ int CHNCPU_Op_DATA_BindOperand(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op,
725725 opCache->filePath = NULL;
726726
727727 // Check ptype & Calculate rawDataByteSize
728- if(CHNCPU_Op_DATA_AllocateRawDataMemory(op, opCache->dataType, opCache->dataCount)){
729- if(CHNCPU_Op_DATA_CalculateByteSizeOfRawData(opCache->dataType, opCache->dataCount) <= 0){
730- env->errFlags |= CHNCPU_ERR_C_UNAVAILABLE_PTYPE;
731- } else{
732- env->errFlags |= CHNCPU_ERR_C_INTERNAL;
733- }
728+ if(CHNCPU_Op_DATA_AllocateRawDataMemory(op, opCache->dataType, opCache->dataCount, &env->errFlags)){
734729 return -1;
735730 }
736731
@@ -742,11 +737,11 @@ int CHNCPU_Op_DATA_BindOperand(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op,
742737 }
743738
744739 if(CHNCPU_Label_Add(env->labelSet, env->currentIndex, opCache->labelID, opCache->labelOpt, opCache->dataType)){
745- env->errFlags |= CHNCPU_ERR_C_DUPLICATED_LB;
740+ env->errFlags |= CHNCPU_ERR_DUPLICATED_LABEL_ID;
746741 }
747742
748743 if(prefix != 0){
749- env->errFlags |= CHNCPU_ERR_C_PREFIX;
744+ env->errFlags |= CHNCPU_ERR_INVALID_PREFIX;
750745 return -1;
751746 }
752747 return 0;
@@ -811,18 +806,24 @@ CHNCPU_OpTag *CHNCPU_Op_DATA_CreateEmptyData(void)
811806
812807 return op;
813808 }
814-int CHNCPU_Op_DATA_AllocateRawDataMemory(CHNCPU_OpTag *op, ch4_sint dataType, ch4_uint dataCount)
809+int CHNCPU_Op_DATA_AllocateRawDataMemory(CHNCPU_OpTag *op, ch4_sint dataType, ch4_uint dataCount, unsigned int *errFlags)
815810 {
816811 // 生データのメモリを割り当てる。
817812 CHNCPU_OpCache_DATA *opCache;
818813
819814 if(!op || op->opCode != CHNCPU_OP_DATA || !op->opCache){
815+ if(errFlags){
816+ *errFlags |= CHNCPU_ERR_INTERNAL;
817+ }
820818 return -1;
821819 }
822820 opCache = op->opCache;
823821
824822 opCache->rawDataByteSize = CHNCPU_Op_DATA_CalculateByteSizeOfRawData(dataType, dataCount);
825823 if(opCache->rawDataByteSize <= 0){
824+ if(errFlags){
825+ *errFlags |= CHNCPU_ERR_INVALID_PTYPE;
826+ }
826827 return -1;
827828 }
828829 if(opCache->rawData){
@@ -865,7 +866,7 @@ CHNCPU_OpTag *CHNCPU_Op_DATA_CreateDataFromFileAsPType(const char dataPath[], ch
865866 fseek(fp, 0, SEEK_SET);
866867
867868 // 現状はUINT8前提なのでopCache->rawDataByteSize==dataCount
868- if(CHNCPU_Op_DATA_AllocateRawDataMemory(op, pType, opCache->rawDataByteSize)){
869+ if(CHNCPU_Op_DATA_AllocateRawDataMemory(op, pType, opCache->rawDataByteSize, NULL)){
869870 fclose(fp);
870871 free(opCache);
871872 free(op);
@@ -950,7 +951,7 @@ int CHNCPU_Op_DATA_ReadAtIndex(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op,
950951
951952
952953 if(!op || op->opCode != CHNCPU_OP_DATA || index < 0 || index >= ((CHNCPU_OpCache_DATA *)op->opCache)->dataCount){
953- env->errFlags |= CHNCPU_ERR_X_BAD_ACCESS;
954+ env->errFlags |= CHNCPU_ERR_BAD_ACCESS;
954955 return 0;
955956 }
956957 opCache = op->opCache;
@@ -958,7 +959,7 @@ int CHNCPU_Op_DATA_ReadAtIndex(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op,
958959 if(opCache->dataType == CHNCPU_PType_UINT8){
959960 retv = ((unsigned char *)opCache->rawData)[index];
960961 } else{
961- env->errFlags |= CHNCPU_ERR_X_INVALID_PTYPE;
962+ env->errFlags |= CHNCPU_ERR_INVALID_PTYPE;
962963 return 0;
963964 }
964965
@@ -999,7 +1000,7 @@ const char *CHNCPU_Op_DATA_GetFilePath(CHNCPU_OpTag *op)
9991000 //
10001001 // 32 MALLOC
10011002 //
1002-/*
1003+
10031004 int CHNCPU_Op_MALLOC_BindOperand(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op, unsigned int prefix)
10041005 {
10051006 CHNCPU_OpCache_MALLOC *opCache;
@@ -1016,7 +1017,7 @@ int CHNCPU_Op_MALLOC_BindOperand(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *o
10161017 if(opCache->rType >= CHNCPU_NUMBER_OF_IREG ||
10171018 opCache->rCount >= CHNCPU_NUMBER_OF_IREG ||
10181019 opCache->p >= CHNCPU_NUMBER_OF_PREG){
1019- env->errFlags |= CHNCPU_ERR_C_REGNUM;
1020+ env->errFlags |= CHNCPU_ERR_INVALID_REGNUM;
10201021 return -1;
10211022 }
10221023 if(!CHNCPU_CHK_IsAvailableBits(env, opCache->bitType) ||
@@ -1024,7 +1025,7 @@ int CHNCPU_Op_MALLOC_BindOperand(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *o
10241025 return -1;
10251026 }
10261027 if(prefix != 0){
1027- env->errFlags |= CHNCPU_ERR_C_PREFIX;
1028+ env->errFlags |= CHNCPU_ERR_INVALID_PREFIX;
10281029 return -1;
10291030 }
10301031 return 0;
@@ -1034,7 +1035,6 @@ int CHNCPU_Op_MALLOC_Execute(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op)
10341035 {
10351036 CHNCPU_OpTag *dataOpTag;
10361037 CHNCPU_OpCache_MALLOC *opCache;
1037- int value;
10381038 ch4_sint type;
10391039 ch4_uint count;
10401040
@@ -1044,26 +1044,11 @@ int CHNCPU_Op_MALLOC_Execute(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op)
10441044 count = env->iReg[opCache->rCount];
10451045
10461046 dataOpTag = CHNCPU_Op_DATA_CreateEmptyData();
1047- if(CHNCPU_Op_DATA_AllocateRawDataMemory(dataOpTag, type, count)){
1048-
1049- }
1050-
1051-
1052- value = CHNCPU_Op_DATA_ReadAtIndex(env, p->opTag, p->pindex);
1053- if(env->errFlags){
1047+ if(CHNCPU_Op_DATA_AllocateRawDataMemory(dataOpTag, type, count, &env->errFlags)){
10541048 return -1;
10551049 }
10561050
1057- CHNCPU_AdjustValueForBit(env, &value, opCache->bitDst, CHNCPU_PREFIX_ALLOW_TRUNCATE);
1058- if(env->errFlags){
1059- return -1;
1060- }
1061- env->iReg[opCache->r] = value;
1062- env->iRegBits[opCache->r] = opCache->bitDst;
1063-
1064- p->pindex += opCache->pDiff;
1065-
1066- return 0;
1051+ return 0;
10671052 }
10681053 int CHNCPU_Op_MALLOC_PrintCode(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op, FILE *file)
10691054 {
@@ -1073,6 +1058,4 @@ int CHNCPU_Op_MALLOC_PrintCode(CHNCPU_RuntimeEnvironment *env, CHNCPU_OpTag *op,
10731058 fprintf(file, "LMEM(p:0x%02X, pType:0x%X, pDiff:%d, r:%02X, bitDst:%d);\n", opCache->p, opCache->pType, opCache->pDiff, opCache->r, opCache->bitDst);
10741059
10751060 return 0;
1076-}
1077-
1078-*/
\ No newline at end of file
1061+}
\ No newline at end of file
--- a/debug.c
+++ b/debug.c
@@ -62,3 +62,51 @@ void CHNCPU_DumpPReg(CHNCPU_RuntimeEnvironment *env)
6262 putchar('\n');
6363 }
6464 }
65+
66+void CHNCPU_PrintErrorMessage(CHNCPU_RuntimeEnvironment *env)
67+{
68+ printf(">>> Error in label:%d\n\t", env->currentLabel);
69+ if(env->errFlags & CHNCPU_ERR_INTERNAL){
70+ puts("Internal error.");
71+ }
72+ if(env->errFlags & CHNCPU_ERR_INVALID_BITS){
73+ puts("Invalid bits.");
74+ }
75+ if(env->errFlags & CHNCPU_ERR_INVALID_OPCODE){
76+ puts("Invalid opCode.");
77+ }
78+ if(env->errFlags & CHNCPU_ERR_INVALID_REGNUM){
79+ puts("Invalid regNum.");
80+ }
81+ if(env->errFlags & CHNCPU_ERR_INVALID_PTYPE){
82+ puts("Invalid pType.");
83+ }
84+ if(env->errFlags & CHNCPU_ERR_INVALID_BINARY){
85+ puts("Invalid Binary.");
86+ }
87+ if(env->errFlags & CHNCPU_ERR_INVALID_PREFIX){
88+ puts("Invalid prefix.");
89+ }
90+ if(env->errFlags & CHNCPU_ERR_INVALID_EXPRESSION){
91+ puts("Invalid expression.");
92+ }
93+ if(env->errFlags & CHNCPU_ERR_INVALID_EXPRESSION){
94+ puts("Invalid BIOSFuncID.");
95+ }
96+ if(env->errFlags & CHNCPU_ERR_DUPLICATED_LABEL_ID){
97+ puts("LabelID duplicated.");
98+ }
99+ if(env->errFlags & CHNCPU_ERR_NOT_FOUND_LABEL){
100+ puts("LabelID not found.");
101+ }
102+ if(env->errFlags & CHNCPU_ERR_NOT_MATCHED_PTYPE){
103+ puts("PType not matched.");
104+ }
105+ if(env->errFlags & CHNCPU_ERR_TRUNCATED_VALUE){
106+ puts("Value truncated without prefix 2F-0.");
107+ }
108+ if(env->errFlags & CHNCPU_ERR_BAD_ACCESS){
109+ puts("Bad access on memory.");
110+ }
111+ return;
112+}