X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Fmacro.c;h=354e7ecb8e32b95e9fa905b8a7c08f319d414500;hp=019b9563d0dd22317d27c34de77da7d639270c8c;hb=87da65b534d88b60dcfb59ff1252101daf35e44e;hpb=a901ac636091cc9d044a78525064b699ef7a2760 diff --git a/src/macro.c b/src/macro.c index 019b956..354e7ec 100644 --- a/src/macro.c +++ b/src/macro.c @@ -1,15 +1,14 @@ #include "casl2.h" #include "assemble.h" -/*マクロ命令「IN IBUF,LEN」をメモリに書込 - PUSH 0,GR1 - PUSH 0,GR2 - LAD GR1,IBUF - LAD GR2,LEN - SVC 1 - POP GR2 - POP GR1 -*/ +/* マクロ命令「IN IBUF,LEN」をメモリに書込 */ +/* PUSH 0,GR1 */ +/* PUSH 0,GR2 */ +/* LAD GR1,IBUF */ +/* LAD GR2,LEN */ +/* SVC 1 */ +/* POP GR2 */ +/* POP GR1 */ bool writeIN(const char *ibuf, const char *len, PASS pass) { bool status = false; @@ -39,18 +38,17 @@ bool writeIN(const char *ibuf, const char *len, PASS pass) return status; } -/* マクロ命令「OUT OBUF,LEN」をメモリに書込 - PUSH 0,GR1 - PUSH 0,GR2 - LAD GR1,OBUF - LD GR2,LEN - SVC 2 - LAD GR1,=#A - LAD GR2,1 - SVC 2 - POP GR2 - POP GR1 -*/ +/* マクロ命令「OUT OBUF,LEN」をメモリに書込 */ +/* PUSH 0,GR1 */ +/* PUSH 0,GR2 */ +/* LAD GR1,OBUF */ +/* LAD GR2,LEN */ +/* SVC 2 */ +/* LAD GR1,=#A */ +/* LAD GR2,1 */ +/* SVC 2 */ +/* POP GR2 */ +/* POP GR1 */ bool writeOUT(const char *obuf, const char *len, PASS pass) { bool status = false; @@ -64,13 +62,13 @@ bool writeOUT(const char *obuf, const char *len, PASS pass) /* LAD GR1,OBUF */ writememory(0x1210, ptr++, pass); writememory(getadr(prog, obuf, pass), ptr++, pass); - /* LD GR2,OLEN */ - writememory(0x1020, ptr++, pass); + /* LAD GR2,OLEN */ + writememory(0x1220, ptr++, pass); writememory(getadr(prog, len, pass), ptr++, pass); /* SVC 2 */ writememory(0xF000, ptr++, pass); writememory(0x0002, ptr++, pass); - /* LAD GR1,=#A */ + /* LAD GR1,=#A */ writememory(0x1210, ptr++, pass); if(pass == FIRST) { ptr++; @@ -78,9 +76,14 @@ bool writeOUT(const char *obuf, const char *len, PASS pass) writememory(lptr, ptr++, pass); /* リテラルのアドレスを書込 */ } writememory(0xA, lptr++, pass); - /* LAD GR2,1 */ + /* LAD GR2,=1 */ writememory(0x1220, ptr++, pass); - writememory(0x0001, ptr++, pass); + if(pass == FIRST) { + ptr++; + } else { + writememory(lptr, ptr++, pass); /* リテラルのアドレスを書込 */ + } + writememory(0x1, lptr++, pass); /* SVC 2 */ writememory(0xF000, ptr++, pass); writememory(0x0002, ptr++, pass); @@ -95,13 +98,13 @@ bool writeOUT(const char *obuf, const char *len, PASS pass) } /* マクロ命令「RPUSH」をメモリに書き込む - PUSH 0,GR1 + PUSH 0,GR1 PUSH 0,GR2 - PUSH 0,GR3 + PUSH 0,GR3 PUSH 0,GR4 - PUSH 0,GR5 + PUSH 0,GR5 PUSH 0,GR6 - PUSH 0,GR7 + PUSH 0,GR7 */ bool writeRPUSH(PASS pass) { int i; @@ -118,14 +121,14 @@ bool writeRPUSH(PASS pass) { } /* マクロ命令「RPOP」をメモリに書き込む - POP GR7 - POP GR6 - POP GR5 - POP GR4 - POP GR3 - POP GR3 - POP GR2 - POP GR1 + POP GR7 + POP GR6 + POP GR5 + POP GR4 + POP GR3 + POP GR3 + POP GR2 + POP GR1 */ bool writeRPOP(PASS pass) { int i;