?? dat4ary_c.cpp
字號:
//---------------------------------------------------------------------------
//-------- Dat4ary_C.cpp ----------------------------------------------------
//---------------------------------------------------------------------------
#include "JsGlobal_H.h"
#include "Dat4ary_H.h"
//---------------------------------------------------------------------------
#define IDType(typ) (((typ)==LB_SEG) ? IDBLK_SEG_OPND : IDBLK_REL_OPND)
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// 進行H3L8處理時,為自己的Fix域創建新對象。
//---------------------------------------------------------------------------
ERR Dat4ary::H3L8Settle(const TriVal& trv, int16u reflc)
{ switch(trv.rel)
{ case 'A': { pool_16 t;
t.pot16 = (int16u)(trv.val);
dat[0] += (int8u)(t.highbyte << 5); // H3
dat[1] = t.lowbyte; // L8
return OK_no_Err;
} // end case
case 'R': { Fix = new OpndFixRec;
Fix->Set( reflc,
RefTyp_INBLK,
IDType(trv.typ), // IDtype()
(int16u)trv.val, // Offset
trv.rseg->SegID ); // SegID
DebugMsg(Fix->show(););
return OK_no_Err;
} // end case
case 'E': { Fix = new OpndFixRec;
Fix->Set( reflc,
RefTyp_INBLK,
IDBLK_EXT_OPND, // IDBLK_EXT_OPND
(int16u)trv.val, // Offset
trv.ExtID ); // ExtID
DebugMsg(Fix->show(););
return OK_no_Err;
} // end case
default : { FatalErr(); return Have_Errs; } // end default
} // end switch
} // end H3L8Settle
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// pos=(0~2)
//---------------------------------------------------------------------------
ERR Dat4ary::BytePosSettle(const TriVal& trv, int8u pos, int16u reflc)
{ switch(trv.rel)
{ case 'A': { dat[pos] = (int8u)(trv.val);
return OK_no_Err;
} // end case
case 'R': { Fix = new OpndFixRec;
Fix->Set( reflc,
trv.fix ? trv.fix-1 : RefTyp_BYTE,
IDType(trv.typ), // 宏調用
(int16u)trv.val, // Offset
trv.rseg->SegID ); // SegID
DebugMsg(Fix->show();)
return OK_no_Err;
} // end case
case 'E': { Fix = new OpndFixRec;
Fix->Set( reflc,
RefTyp_BYTE, // RefTyp_BYTE
IDBLK_EXT_OPND, // IDBLK_EXT_OPND
(int16u)trv.val, // Offset
trv.ExtID ); // ExtID
DebugMsg(Fix->show();)
return OK_no_Err;
} // end case
default : { FatalErr(); return Have_Errs; } // end default
} // end switch
} // end BytePosSettle
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// pos=(0~2)
//---------------------------------------------------------------------------
ERR Dat4ary::WordPosSettle(const TriVal& trv, int8u pos, int16u reflc)
{ switch(trv.rel)
{ case 'A': { pool_16 z;
z.pot16 = (int16u)trv.val;
dat[pos] = z.highbyte; // 高位在前
dat[pos+1] = z.lowbyte; // 低位在后
return OK_no_Err;
} // end case
case 'R': { Fix = new OpndFixRec;
Fix->Set( reflc,
RefTyp_WORD,
IDType(trv.typ),
(int16u)trv.val, // Offset
trv.rseg->SegID );
DebugMsg(Fix->show();)
return OK_no_Err;
} // end case
case 'E': { Fix = new OpndFixRec;
Fix->Set( reflc,
RefTyp_WORD,
IDBLK_EXT_OPND,
(int16u)trv.val, // Offset
trv.ExtID );
DebugMsg(Fix->show();)
return OK_no_Err;
} // end case
default : { FatalErr(); return Have_Errs; } // end default
} // end switch
} // end WordPosSettle
//---------------------------------------------------------------------------
#undef IDType(typ)
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void OpndFixRec::show()const
{ printf("\n --- OpndFixRec show ---");
printf("\nRefLoc=%4.4XH",RefLoc);
printf(" RefTyp=");
switch(RefTyp)
{ case RefTyp_LOW : printf("LOW"); break;
case RefTyp_BYTE : printf("BYTE"); break;
case RefTyp_REL : printf("REL"); break;
case RefTyp_HIGH : printf("HIGH"); break;
case RefTyp_WORD : printf("WORD"); break;
case RefTyp_INBLK: printf("INBLK"); break;
case RefTyp_BIT : printf("BIT"); break;
case RefTyp_CONV : printf("CONV"); break;
default : { EThrows(printf("\nOpndFixRec show out of run!"); Debugkey;) }
} // end switch
printf(" Offset=%4.4XH", Offset);
printf(" rel=");
switch(rel)
{ case IDBLK_SEG_OPND : printf("IDBLK_SEG_OPND"); break;
case IDBLK_REL_OPND : printf("IDBLK_REL_OPND"); break;
case IDBLK_EXT_OPND : printf("IDBLK_EXT_OPND"); break;
default : printf(" ??? ");
} // end switch
printf(" RefID=%4.4d",RefID);
} // end show
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void Dat4ary::show()const
{ printf("Dat:[%2.2X-%2.2X-%2.2X-%2.2X]\t",dat[0],dat[1],dat[2],dat[3]);
if(Fix)
{ Fix->show(); } // endif
else { printf("Fix=NULL"); } // end else
} // end show
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// end Dat4ary_C.cpp
//---------------------------------------------------------------------------
// Written by JamesyFront. ZLGmcu Dev.Co.Ltd. 2002.
//---------------------------------------------------------------------------
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -