projects
/
YACASL2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
変数名を整理
[YACASL2.git]
/
src
/
exec.c
diff --git
a/src/exec.c
b/src/exec.c
index
aaef27b
..
d8df852
100644
(file)
--- a/
src/exec.c
+++ b/
src/exec.c
@@
-15,7
+15,7
@@
static CERR cerr_exec[] = {
{ 204, "OP in word #1 - not command code" },
{ 205, "r/r1 in word #1 - not GR" },
{ 206, "x/r2 in word #1 - not GR" },
{ 204, "OP in word #1 - not command code" },
{ 205, "r/r1 in word #1 - not GR" },
{ 206, "x/r2 in word #1 - not GR" },
- { 207, "
A
ddress in word #2 - out of memory" },
+ { 207, "
a
ddress in word #2 - out of memory" },
{ 208, "SVC input - memory overflow" },
{ 209, "SVC output - memory overflow" },
};
{ 208, "SVC input - memory overflow" },
{ 209, "SVC output - memory overflow" },
};
@@
-99,7
+99,7
@@
void svcin()
--i;
break;
}
--i;
break;
}
- if(sys->cpu->gr[1] + i >
= sys->memsize - 1
) {
+ if(sys->cpu->gr[1] + i >
execptr->end
) {
setcerr(208, NULL); /* SVC input - memory overflow */
break;
}
setcerr(208, NULL); /* SVC input - memory overflow */
break;
}
@@
-118,7
+118,7
@@
void svcout()
WORD w;
for(i = 0; i < sys->memory[sys->cpu->gr[2]]; i++) {
WORD w;
for(i = 0; i < sys->memory[sys->cpu->gr[2]]; i++) {
- if(sys->cpu->gr[1] + i >
= sys->memsize - 1
) {
+ if(sys->cpu->gr[1] + i >
execptr->end
) {
setcerr(209, NULL); /* SVC output - memory overflow */
return;
}
setcerr(209, NULL); /* SVC output - memory overflow */
return;
}
@@
-151,7
+151,7
@@
void setfr(WORD adr)
/**
* WORD値からr/r1を取得
*/
/**
* WORD値からr/r1を取得
*/
-WORD r_r1(WORD oprx)
+WORD
get_
r_r1(WORD oprx)
{
WORD r;
if((r = ((oprx & 0x00F0) >>4)) > GRSIZE - 1) {
{
WORD r;
if((r = ((oprx & 0x00F0) >>4)) > GRSIZE - 1) {
@@
-164,7
+164,7
@@
WORD r_r1(WORD oprx)
/**
* WORD値からx/r2を取得
*/
/**
* WORD値からx/r2を取得
*/
-WORD x_r2(WORD oprx)
+WORD
get_
x_r2(WORD oprx)
{
WORD x;
if((x = (oprx & 0x000F)) > GRSIZE - 1) {
{
WORD x;
if((x = (oprx & 0x000F)) > GRSIZE - 1) {
@@
-177,10
+177,10
@@
WORD x_r2(WORD oprx)
/**
* 2つのWORD値からadr[,x]を取得
*/
/**
* 2つのWORD値からadr[,x]を取得
*/
-WORD
adr
x(WORD adr, WORD oprx)
+WORD
get_adr_
x(WORD adr, WORD oprx)
{
WORD a = adr, x;
{
WORD a = adr, x;
- if((x = x_r2(oprx)) > 0) {
+ if((x =
get_
x_r2(oprx)) > 0) {
a += sys->cpu->gr[x];
}
return a;
a += sys->cpu->gr[x];
}
return a;
@@
-190,11
+190,11
@@
WORD adrx(WORD adr, WORD oprx)
/**
* 2つのWORD値からadr[,x]のアドレスに格納されている内容を取得
*/
/**
* 2つのWORD値からadr[,x]のアドレスに格納されている内容を取得
*/
-WORD
val_adr
x(WORD adr, WORD oprx)
+WORD
get_val_adr_
x(WORD adr, WORD oprx)
{
WORD a;
{
WORD a;
- if((a =
adr
x(adr, oprx)) >= sys->memsize) {
- setcerr(207, pr2str(sys->cpu->pr + 1)); /*
A
ddress in word #2 - out of memory */
+ if((a =
get_adr_
x(adr, oprx)) >= sys->memsize) {
+ setcerr(207, pr2str(sys->cpu->pr + 1)); /*
a
ddress in word #2 - out of memory */
return 0x0;
}
return sys->memory[a];
return 0x0;
}
return sys->memory[a];
@@
-216,7
+216,7
@@
void ld_r_adr_x()
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
- setfr(sys->cpu->gr[
r_r1(w[0])] = val_adr
x(w[1], w[0]));
+ setfr(sys->cpu->gr[
get_r_r1(w[0])] = get_val_adr_
x(w[1], w[0]));
sys->cpu->pr += 2;
}
sys->cpu->pr += 2;
}
@@
-227,7
+227,7
@@
void ld_r1_r2()
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
- setfr(sys->cpu->gr[
r_r1(w[0])] = sys->cpu->gr[
x_r2(w[0])]);
+ setfr(sys->cpu->gr[
get_r_r1(w[0])] = sys->cpu->gr[get_
x_r2(w[0])]);
sys->cpu->pr += 1;
}
sys->cpu->pr += 1;
}
@@
-239,7
+239,7
@@
void st()
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
- sys->memory[
adrx(w[1], w[0])] = sys->cpu->gr[
r_r1(w[0])];
+ sys->memory[
get_adr_x(w[1], w[0])] = sys->cpu->gr[get_
r_r1(w[0])];
sys->cpu->pr += 2;
}
sys->cpu->pr += 2;
}
@@
-251,7
+251,7
@@
void lad()
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
- sys->cpu->gr[
r_r1(w[0])] = adr
x(w[1], w[0]);
+ sys->cpu->gr[
get_r_r1(w[0])] = get_adr_
x(w[1], w[0]);
sys->cpu->pr += 2;
}
sys->cpu->pr += 2;
}
@@
-286,7
+286,7
@@
void adda_r_adr_x()
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
- adda(
r_r1(w[0]), val_adr
x(w[1], w[0]));
+ adda(
get_r_r1(w[0]), get_val_adr_
x(w[1], w[0]));
sys->cpu->pr += 2;
}
sys->cpu->pr += 2;
}
@@
-297,7
+297,7
@@
void adda_r1_r2()
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
- adda(
r_r1(w[0]), sys->cpu->gr[
x_r2(w[0])]);
+ adda(
get_r_r1(w[0]), sys->cpu->gr[get_
x_r2(w[0])]);
sys->cpu->pr += 1;
}
sys->cpu->pr += 1;
}
@@
-309,7
+309,7
@@
void suba_r_adr_x()
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
- adda(
r_r1(w[0]), ~(val_adr
x(w[1], w[0])) + 1);
+ adda(
get_r_r1(w[0]), ~(get_val_adr_
x(w[1], w[0])) + 1);
sys->cpu->pr += 2;
}
sys->cpu->pr += 2;
}
@@
-320,7
+320,7
@@
void suba_r1_r2()
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
- adda(
r_r1(w[0]), ~(sys->cpu->gr[
x_r2(w[0])]) + 1);
+ adda(
get_r_r1(w[0]), ~(sys->cpu->gr[get_
x_r2(w[0])]) + 1);
sys->cpu->pr += 1;
}
sys->cpu->pr += 1;
}
@@
-351,7
+351,7
@@
void addl_r_adr_x()
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
- addl(
r_r1(w[0]), val_adr
x(w[1], w[0]));
+ addl(
get_r_r1(w[0]), get_val_adr_
x(w[1], w[0]));
sys->cpu->pr += 2;
}
sys->cpu->pr += 2;
}
@@
-362,7
+362,7
@@
void addl_r1_r2()
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
- addl(
r_r1(w[0]), sys->cpu->gr[
x_r2(w[0])]);
+ addl(
get_r_r1(w[0]), sys->cpu->gr[get_
x_r2(w[0])]);
sys->cpu->pr += 1;
}
sys->cpu->pr += 1;
}
@@
-374,7
+374,7
@@
void subl_r_adr_x()
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
- addl(
r_r1(w[0]), ~(val_adr
x(w[1], w[0])) + 1);
+ addl(
get_r_r1(w[0]), ~(get_val_adr_
x(w[1], w[0])) + 1);
sys->cpu->pr += 2;
}
sys->cpu->pr += 2;
}
@@
-385,7
+385,7
@@
void subl_r1_r2()
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
- addl(
r_r1(w[0]), ~(sys->cpu->gr[
x_r2(w[0])]) + 1);
+ addl(
get_r_r1(w[0]), ~(sys->cpu->gr[get_
x_r2(w[0])]) + 1);
sys->cpu->pr += 1;
}
sys->cpu->pr += 1;
}
@@
-397,7
+397,7
@@
void and_r_adr_x()
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
- setfr(sys->cpu->gr[
r_r1(w[0])] &= val_adr
x(w[1], w[0]));
+ setfr(sys->cpu->gr[
get_r_r1(w[0])] &= get_val_adr_
x(w[1], w[0]));
sys->cpu->pr += 2;
}
sys->cpu->pr += 2;
}
@@
-408,7
+408,7
@@
void and_r1_r2()
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
- setfr(sys->cpu->gr[
r_r1(w[0])] &= sys->cpu->gr[
x_r2(w[0])]);
+ setfr(sys->cpu->gr[
get_r_r1(w[0])] &= sys->cpu->gr[get_
x_r2(w[0])]);
sys->cpu->pr += 1;
}
sys->cpu->pr += 1;
}
@@
-420,7
+420,7
@@
void or_r_adr_x()
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
- setfr(sys->cpu->gr[
r_r1(w[0])] |= val_adr
x(w[1], w[0]));
+ setfr(sys->cpu->gr[
get_r_r1(w[0])] |= get_val_adr_
x(w[1], w[0]));
sys->cpu->pr += 2;
}
sys->cpu->pr += 2;
}
@@
-431,7
+431,7
@@
void or_r1_r2()
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
- setfr(sys->cpu->gr[
r_r1(w[0])] |= sys->cpu->gr[
x_r2(w[0])]);
+ setfr(sys->cpu->gr[
get_r_r1(w[0])] |= sys->cpu->gr[get_
x_r2(w[0])]);
sys->cpu->pr += 1;
}
sys->cpu->pr += 1;
}
@@
-443,7
+443,7
@@
void xor_r_adr_x()
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
- setfr(sys->cpu->gr[
r_r1(w[0])] ^= val_adr
x(w[1], w[0]));
+ setfr(sys->cpu->gr[
get_r_r1(w[0])] ^= get_val_adr_
x(w[1], w[0]));
sys->cpu->pr += 2;
}
sys->cpu->pr += 2;
}
@@
-454,7
+454,7
@@
void xor_r1_r2()
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
- setfr(sys->cpu->gr[
r_r1(w[0])] ^= sys->cpu->gr[
x_r2(w[0])]);
+ setfr(sys->cpu->gr[
get_r_r1(w[0])] ^= sys->cpu->gr[get_
x_r2(w[0])]);
sys->cpu->pr += 1;
}
sys->cpu->pr += 1;
}
@@
-480,7
+480,7
@@
void cpa_r_adr_x()
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
- cpa(
r_r1(w[0]), val_adr
x(w[1], w[0]));
+ cpa(
get_r_r1(w[0]), get_val_adr_
x(w[1], w[0]));
sys->cpu->pr += 2;
}
sys->cpu->pr += 2;
}
@@
-491,7
+491,7
@@
void cpa_r1_r2()
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
- cpa(
r_r1(w[0]), sys->cpu->gr[
x_r2(w[0])]);
+ cpa(
get_r_r1(w[0]), sys->cpu->gr[get_
x_r2(w[0])]);
sys->cpu->pr += 1;
}
sys->cpu->pr += 1;
}
@@
-520,7
+520,7
@@
void cpl_r_adr_x()
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
- cpl(
r_r1(w[0]), val_adr
x(w[1], w[0]));
+ cpl(
get_r_r1(w[0]), get_val_adr_
x(w[1], w[0]));
sys->cpu->pr += 2;
}
sys->cpu->pr += 2;
}
@@
-531,7
+531,7
@@
void cpl_r1_r2()
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
{
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
- cpl(
r_r1(w[0]), sys->cpu->gr[
x_r2(w[0])]);
+ cpl(
get_r_r1(w[0]), sys->cpu->gr[get_
x_r2(w[0])]);
sys->cpu->pr += 1;
}
sys->cpu->pr += 1;
}
@@
-547,9
+547,9
@@
void sla()
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
sys->cpu->fr = 0x0;
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
sys->cpu->fr = 0x0;
- sign = sys->cpu->gr[(r = r_r1(w[0]))] & 0x8000;
+ sign = sys->cpu->gr[(r =
get_
r_r1(w[0]))] & 0x8000;
sys->cpu->gr[r] &= 0x7FFF;
sys->cpu->gr[r] &= 0x7FFF;
- for(i = 0; i <
adr
x(w[1], w[0]); i++) {
+ for(i = 0; i <
get_adr_
x(w[1], w[0]); i++) {
last = sys->cpu->gr[r] & 0x4000;
sys->cpu->gr[r] <<= 1;
}
last = sys->cpu->gr[r] & 0x4000;
sys->cpu->gr[r] <<= 1;
}
@@
-582,9
+582,9
@@
void sra()
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
sys->cpu->fr = 0x0;
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
sys->cpu->fr = 0x0;
- sign = sys->cpu->gr[(r = r_r1(w[0]))] & 0x8000;
+ sign = sys->cpu->gr[(r =
get_
r_r1(w[0]))] & 0x8000;
sys->cpu->gr[r] &= 0x7FFF;
sys->cpu->gr[r] &= 0x7FFF;
- for(i = 0; i <
adr
x(w[1], w[0]); i++) {
+ for(i = 0; i <
get_adr_
x(w[1], w[0]); i++) {
last = sys->cpu->gr[r] & 0x1;
sys->cpu->gr[r] >>= 1;
if(sign > 0) {
last = sys->cpu->gr[r] & 0x1;
sys->cpu->gr[r] >>= 1;
if(sign > 0) {
@@
-618,8
+618,8
@@
void sll()
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
sys->cpu->fr = 0x0;
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
sys->cpu->fr = 0x0;
- for(i = 0; i <
adr
x(w[1], w[0]); i++) {
- last = sys->cpu->gr[(r = r_r1(w[0]))] & 0x8000;
+ for(i = 0; i <
get_adr_
x(w[1], w[0]); i++) {
+ last = sys->cpu->gr[(r =
get_
r_r1(w[0]))] & 0x8000;
sys->cpu->gr[r] <<= 1;
}
/* OFに、レジスタから最後に送り出されたビットの値を設定 */
sys->cpu->gr[r] <<= 1;
}
/* OFに、レジスタから最後に送り出されたビットの値を設定 */
@@
-648,8
+648,8
@@
void srl()
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
sys->cpu->fr = 0x0;
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
sys->cpu->fr = 0x0;
- r = r_r1(w[0]);
- for(i = 0; i <
adr
x(w[1], w[0]); i++) {
+ r =
get_
r_r1(w[0]);
+ for(i = 0; i <
get_adr_
x(w[1], w[0]); i++) {
last = sys->cpu->gr[r] & 0x0001;
sys->cpu->gr[r] >>= 1;
}
last = sys->cpu->gr[r] & 0x0001;
sys->cpu->gr[r] >>= 1;
}
@@
-677,7
+677,7
@@
void jpl()
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
if((sys->cpu->fr & (SF | ZF)) == 0) {
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
if((sys->cpu->fr & (SF | ZF)) == 0) {
- sys->cpu->pr =
adr
x(w[1], w[0]);
+ sys->cpu->pr =
get_adr_
x(w[1], w[0]);
} else {
sys->cpu->pr += 2;
}
} else {
sys->cpu->pr += 2;
}
@@
-692,7
+692,7
@@
void jmi()
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
if((sys->cpu->fr & SF) > 0) {
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
if((sys->cpu->fr & SF) > 0) {
- sys->cpu->pr =
adr
x(w[1], w[0]);
+ sys->cpu->pr =
get_adr_
x(w[1], w[0]);
} else {
sys->cpu->pr += 2;
}
} else {
sys->cpu->pr += 2;
}
@@
-707,7
+707,7
@@
void jnz()
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
if((sys->cpu->fr & ZF) == 0) {
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
if((sys->cpu->fr & ZF) == 0) {
- sys->cpu->pr =
adr
x(w[1], w[0]);
+ sys->cpu->pr =
get_adr_
x(w[1], w[0]);
} else {
sys->cpu->pr += 2;
}
} else {
sys->cpu->pr += 2;
}
@@
-722,7
+722,7
@@
void jze()
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
if((sys->cpu->fr & ZF) > 0) {
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
if((sys->cpu->fr & ZF) > 0) {
- sys->cpu->pr =
adr
x(w[1], w[0]);
+ sys->cpu->pr =
get_adr_
x(w[1], w[0]);
} else {
sys->cpu->pr += 2;
}
} else {
sys->cpu->pr += 2;
}
@@
-737,7
+737,7
@@
void jov()
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
if((sys->cpu->fr & OF) > 0) {
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
if((sys->cpu->fr & OF) > 0) {
- sys->cpu->pr =
adr
x(w[1], w[0]);
+ sys->cpu->pr =
get_adr_
x(w[1], w[0]);
} else {
sys->cpu->pr += 2;
}
} else {
sys->cpu->pr += 2;
}
@@
-751,7
+751,7
@@
void jump()
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
- sys->cpu->pr =
adr
x(w[1], w[0]);
+ sys->cpu->pr =
get_adr_
x(w[1], w[0]);
}
/**
}
/**
@@
-763,7
+763,7
@@
void push()
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
assert(sys->cpu->sp > execptr->end && sys->cpu->sp <= sys->memsize);
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
assert(sys->cpu->sp > execptr->end && sys->cpu->sp <= sys->memsize);
- sys->memory[--(sys->cpu->sp)] =
adr
x(w[1], w[0]);
+ sys->memory[--(sys->cpu->sp)] =
get_adr_
x(w[1], w[0]);
sys->cpu->pr += 2;
}
sys->cpu->pr += 2;
}
@@
-775,7
+775,7
@@
void pop()
assert(sys->cpu->sp > execptr->end && sys->cpu->sp <= sys->memsize);
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
assert(sys->cpu->sp > execptr->end && sys->cpu->sp <= sys->memsize);
WORD w[1];
w[0] = sys->memory[sys->cpu->pr];
- sys->cpu->gr[r_r1(w[0])] = sys->memory[(sys->cpu->sp)++];
+ sys->cpu->gr[
get_
r_r1(w[0])] = sys->memory[(sys->cpu->sp)++];
sys->cpu->pr += 1;
}
sys->cpu->pr += 1;
}
@@
-789,7
+789,7
@@
void call()
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
sys->memory[--(sys->cpu->sp)] = sys->cpu->pr + 1;
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
sys->memory[--(sys->cpu->sp)] = sys->cpu->pr + 1;
- sys->cpu->pr =
adr
x(w[1], w[0]);
+ sys->cpu->pr =
get_adr_
x(w[1], w[0]);
}
/**
}
/**
@@
-813,7
+813,7
@@
void svc()
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
WORD w[2];
w[0] = sys->memory[sys->cpu->pr];
w[1] = sys->memory[sys->cpu->pr + 1];
- switch(
adr
x(w[1], w[0]))
+ switch(
get_adr_
x(w[1], w[0]))
{
case 0x0: /* STOP */
execptr->stop = true;
{
case 0x0: /* STOP */
execptr->stop = true;
@@
-831,23
+831,24
@@
void svc()
/**
* 仮想マシンCOMET IIの実行
*/
/**
* 仮想マシンCOMET IIの実行
*/
-
bool
exec()
+
void
exec()
{
clock_t clock_begin, clock_end;
void (*cmdptr)();
{
clock_t clock_begin, clock_end;
void (*cmdptr)();
+ create_code_type(); /* 命令のコードとタイプがキーのハッシュ表を作成 */
if(execmode.trace == true) {
fprintf(stdout, "\nExecuting machine codes\n");
}
/* 機械語の実行 */
for (sys->cpu->pr = execptr->start; ; ) {
if(execmode.trace == true) {
fprintf(stdout, "\nExecuting machine codes\n");
}
/* 機械語の実行 */
for (sys->cpu->pr = execptr->start; ; ) {
- clock_begin = clock();
/* クロック周波数設定のため、実行開始時間を格納 */
- if(execmode.dump || execmode.trace) {
/* traceまたはdumpオプション指定時、改行を出力 */
- if(execmode.trace)
{
/* traceオプション指定時、レジスタを出力 */
+ clock_begin = clock(); /* クロック周波数設定のため、実行開始時間を格納 */
+ if(execmode.dump || execmode.trace) { /* traceまたはdumpオプション指定時、改行を出力 */
+ if(execmode.trace)
{
/* traceオプション指定時、レジスタを出力 */
fprintf(stdout, "#%04X: Register::::\n", sys->cpu->pr);
dspregister();
}
fprintf(stdout, "#%04X: Register::::\n", sys->cpu->pr);
dspregister();
}
- if(execmode.dump)
{
/* dumpオプション指定時、メモリを出力 */
+ if(execmode.dump)
{
/* dumpオプション指定時、メモリを出力 */
fprintf(stdout, "#%04X: Memory::::\n", sys->cpu->pr);
dumpmemory();
}
fprintf(stdout, "#%04X: Memory::::\n", sys->cpu->pr);
dumpmemory();
}
@@
-862,19
+863,19
@@
bool exec()
} else if(sys->cpu->sp > sys->memsize) {
setcerr(203, pr2str(sys->cpu->pr)); /* Stack Pointer (SP) - stack underflow */
}
} else if(sys->cpu->sp > sys->memsize) {
setcerr(203, pr2str(sys->cpu->pr)); /* Stack Pointer (SP) - stack underflow */
}
- goto exec
err
;
+ goto exec
fin
;
}
/* コードから命令を取得 */
/* 取得できない場合はエラー終了 */
if((cmdptr = getcmdptr(sys->memory[sys->cpu->pr] & 0xFF00)) == NULL) {
setcerr(204, pr2str(sys->cpu->pr)); /* OP in word #1 - not command code */
}
/* コードから命令を取得 */
/* 取得できない場合はエラー終了 */
if((cmdptr = getcmdptr(sys->memory[sys->cpu->pr] & 0xFF00)) == NULL) {
setcerr(204, pr2str(sys->cpu->pr)); /* OP in word #1 - not command code */
- goto exec
err
;
+ goto exec
fin
;
}
/* 命令の実行 */
(*cmdptr)();
/* エラー発生時はエラー終了 */
if(cerr->num > 0) {
}
/* 命令の実行 */
(*cmdptr)();
/* エラー発生時はエラー終了 */
if(cerr->num > 0) {
- goto exec
err
;
+ goto exec
fin
;
}
/* 終了フラグがtrueの場合は、正常終了 */
if(execptr->stop == true) {
}
/* 終了フラグがtrueの場合は、正常終了 */
if(execptr->stop == true) {
@@
-885,8
+886,9
@@
bool exec()
clock_end = clock();
} while(clock_end - clock_begin < CLOCKS_PER_SEC / sys->clocks);
}
clock_end = clock();
} while(clock_end - clock_begin < CLOCKS_PER_SEC / sys->clocks);
}
- return true;
-execerr:
- fprintf(stderr, "Execute error - %d: %s\n", cerr->num, cerr->msg);
- return false;
+execfin:
+ free_code_type(); /* 命令のコードとタイプがキーのハッシュ表を解放 */
+ if(cerr->num > 0) {
+ fprintf(stderr, "Execute error - %d: %s\n", cerr->num, cerr->msg);
+ }
}
}