projects
/
YACASL2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
YACASL2の依存関係を整理
[YACASL2.git]
/
src
/
assemble.c
diff --git
a/src/assemble.c
b/src/assemble.c
index
c9f1345
..
6d67955
100644
(file)
--- a/
src/assemble.c
+++ b/
src/assemble.c
@@
-47,7
+47,7
@@
WORD getgr(const char *str, bool is_x)
WORD r;
/* 「GR[0-7]」以外の文字列では、0xFFFFを返して終了 */
if(!(strlen(str) == 3 && strncmp(str, "GR", 2) == 0 &&
WORD r;
/* 「GR[0-7]」以外の文字列では、0xFFFFを返して終了 */
if(!(strlen(str) == 3 && strncmp(str, "GR", 2) == 0 &&
- (*(str+2) >= '0' && *(str+2) <= '0' +
GRSIZE
)))
+ (*(str+2) >= '0' && *(str+2) <= '0' +
(GRSIZE - 1)
)))
{
return 0xFFFF;
}
{
return 0xFFFF;
}
@@
-86,11
+86,11
@@
bool writememory(WORD word, WORD adr, PASS pass)
bool status = false;
/* COMET IIメモリオーバーの場合 */
bool status = false;
/* COMET IIメモリオーバーの場合 */
- if(adr >= memsize) {
+ if(adr >=
sys->
memsize) {
setcerr(119, word2n(adr)); /* out of COMET II memory */
}
if(cerr->num == 0) {
setcerr(119, word2n(adr)); /* out of COMET II memory */
}
if(cerr->num == 0) {
-
memory
[adr] = word;
+
(sys->memory)
[adr] = word;
if(pass == SECOND && asmode.asdetail == true) {
fprintf(stdout, "\t#%04X\t#%04X\n", adr, word);
}
if(pass == SECOND && asmode.asdetail == true) {
fprintf(stdout, "\t#%04X\t#%04X\n", adr, word);
}
@@
-167,9
+167,9
@@
void writeDC(const char *str, PASS pass)
bool assemblecmd(const CMDLINE *cmdl, PASS pass)
{
int i = 0;
bool assemblecmd(const CMDLINE *cmdl, PASS pass)
{
int i = 0;
-
CASLCMD cm
d = 0;
+
ASCMDID cmdi
d = 0;
bool status = false;
bool status = false;
-
CMDARRAY
ascmd[] = {
+
ASCMD
ascmd[] = {
{ START, 0, 1, "START" },
{ END, 0, 0, "END" },
{ DC, 1, OPDSIZE, "DC" },
{ START, 0, 1, "START" },
{ END, 0, 0, "END" },
{ DC, 1, OPDSIZE, "DC" },
@@
-183,12
+183,12
@@
bool assemblecmd(const CMDLINE *cmdl, PASS pass)
setcerr(106, NULL); /* operand count mismatch */
return false;
}
setcerr(106, NULL); /* operand count mismatch */
return false;
}
- cmd = ascmd[i].cmdid;
+ cmd
id
= ascmd[i].cmdid;
break;
}
} while(ascmd[++i].cmdid != 0);
/* アセンブラ命令 */
break;
}
} while(ascmd[++i].cmdid != 0);
/* アセンブラ命令 */
- switch(cmd)
+ switch(cmd
id
)
{
case START:
if(cmdl->label == NULL) {
{
case START:
if(cmdl->label == NULL) {
@@
-196,10
+196,10
@@
bool assemblecmd(const CMDLINE *cmdl, PASS pass)
return false;
}
/* プログラム名の設定 */
return false;
}
/* プログラム名の設定 */
- asprop->prog = strdup
(cmdl->label
);
+ asprop->prog = strdup
_chk(cmdl->label, "asprop.prog"
);
/* オペランドがある場合、実行開始番地を設定 */
if(pass == SECOND && cmdl->opd->opdc == 1) {
/* オペランドがある場合、実行開始番地を設定 */
if(pass == SECOND && cmdl->opd->opdc == 1) {
- if((prog
prop
->start = getlabel(asprop->prog, cmdl->opd->opdv[0])) == 0xFFFF) {
+ if((prog->start = getlabel(asprop->prog, cmdl->opd->opdv[0])) == 0xFFFF) {
setcerr(103, cmdl->opd->opdv[0]); /* label not found */
}
}
setcerr(103, cmdl->opd->opdv[0]); /* label not found */
}
}
@@
-212,7
+212,7
@@
bool assemblecmd(const CMDLINE *cmdl, PASS pass)
}
/* 実行終了番地と次のプログラムの実行開始番地を設定 */
else if(pass == SECOND) {
}
/* 実行終了番地と次のプログラムの実行開始番地を設定 */
else if(pass == SECOND) {
- prog
prop
->end = asprop->lptr;
+ prog->end = asprop->lptr;
}
asprop->prog = NULL;
status = true;
}
asprop->prog = NULL;
status = true;
@@
-249,9
+249,9
@@
bool assemblecmd(const CMDLINE *cmdl, PASS pass)
bool macrocmd(const CMDLINE *cmdl, PASS pass)
{
int i = 0;
bool macrocmd(const CMDLINE *cmdl, PASS pass)
{
int i = 0;
-
CASLCMD cm
d;
+
MACROCMDID cmdi
d;
bool status = false;
bool status = false;
-
CMDARRAY
macrocmd[] = {
+
MACROCMD
macrocmd[] = {
{ IN, 2, 2, "IN" },
{ OUT, 2, 2, "OUT" },
{ RPUSH, 0, 0, "RPUSH" },
{ IN, 2, 2, "IN" },
{ OUT, 2, 2, "OUT" },
{ RPUSH, 0, 0, "RPUSH" },
@@
-261,15
+261,17
@@
bool macrocmd(const CMDLINE *cmdl, PASS pass)
do {
if(strcmp(cmdl->cmd, macrocmd[i].cmd) == 0) {
do {
if(strcmp(cmdl->cmd, macrocmd[i].cmd) == 0) {
- if(cmdl->opd->opdc < macrocmd[i].opdc_min || cmdl->opd->opdc > macrocmd[i].opdc_max) {
+ if(cmdl->opd->opdc < macrocmd[i].opdc_min ||
+ cmdl->opd->opdc > macrocmd[i].opdc_max)
+ {
setcerr(106, NULL); /* operand count mismatch */
return false;
}
setcerr(106, NULL); /* operand count mismatch */
return false;
}
- cmd = macrocmd[i].cmdid;
+ cmd
id
= macrocmd[i].cmdid;
break;
}
} while(macrocmd[++i].cmdid != 0);
break;
}
} while(macrocmd[++i].cmdid != 0);
- switch(cmd)
+ switch(cmd
id
)
{
case IN:
status = writeIN(cmdl->opd->opdv[0], cmdl->opd->opdv[1], pass);
{
case IN:
status = writeIN(cmdl->opd->opdv[0], cmdl->opd->opdv[1], pass);
@@
-468,6
+470,8
@@
bool assemble(const char *file, PASS pass)
if(cerr->num > 0) {
break;
}
if(cerr->num > 0) {
break;
}
+ free_chk(line, "line");
+ free_chk(cmdl, "cmdl");
}
if(cerr->num > 0) {
fprintf(stderr, "Assemble error - %d: %s\n", cerr->num, cerr->msg);
}
if(cerr->num > 0) {
fprintf(stderr, "Assemble error - %d: %s\n", cerr->num, cerr->msg);