X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Fmacro.c;h=e41eef923b68f139e68f5585c21da0e69fdb1e02;hp=019b9563d0dd22317d27c34de77da7d639270c8c;hb=373540e9b114c01712121c36b40f47a98e12d263;hpb=fda1563ea37180835e0b9c6e7a9c7ae607895446 diff --git a/src/macro.c b/src/macro.c index 019b956..e41eef9 100644 --- a/src/macro.c +++ b/src/macro.c @@ -1,139 +1,142 @@ #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; /* PUSH 0,GR1 */ - writememory(0x7001, ptr++, pass); - writememory(0x0, ptr++, pass); + writememory(0x7001, (asprop->ptr)++, pass); + writememory(0x0, (asprop->ptr)++, pass); /* PUSH 0,GR2 */ - writememory(0x7002, ptr++, pass); - writememory(0x0, ptr++, pass); + writememory(0x7002, (asprop->ptr)++, pass); + writememory(0x0, (asprop->ptr)++, pass); /* LAD GR1,IBUF */ - writememory(0x1210, ptr++, pass); - writememory(getadr(prog, ibuf, pass), ptr++, pass); + writememory(0x1210, (asprop->ptr)++, pass); + writememory(getadr(asprop->prog, ibuf, pass), (asprop->ptr)++, pass); /* LAD GR2,LEN */ - writememory(0x1220, ptr++, pass); - writememory(getadr(prog, len, pass), ptr++, pass); + writememory(0x1220, (asprop->ptr)++, pass); + writememory(getadr(asprop->prog, len, pass), (asprop->ptr)++, pass); /* SVC 1 */ - writememory(0xF000, ptr++, pass); - writememory(0x0001, ptr++, pass); + writememory(0xF000, (asprop->ptr)++, pass); + writememory(0x0001, (asprop->ptr)++, pass); /* POP GR2 */ - writememory(0x7120, ptr++, pass); + writememory(0x7120, (asprop->ptr)++, pass); /* POP GR1 */ - writememory(0x7110, ptr++, pass); - if(cerrno == 0) { + writememory(0x7110, (asprop->ptr)++, pass); + if(cerr->num == 0) { status = true; } 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; /* PUSH 0,GR1 */ - writememory(0x7001, ptr++, pass); - writememory(0x0, ptr++, pass); + writememory(0x7001, (asprop->ptr)++, pass); + writememory(0x0, (asprop->ptr)++, pass); /* PUSH 0,GR2 */ - writememory(0x7002, ptr++, pass); - writememory(0x0, ptr++, pass); + writememory(0x7002, (asprop->ptr)++, pass); + writememory(0x0, (asprop->ptr)++, pass); /* LAD GR1,OBUF */ - writememory(0x1210, ptr++, pass); - writememory(getadr(prog, obuf, pass), ptr++, pass); - /* LD GR2,OLEN */ - writememory(0x1020, ptr++, pass); - writememory(getadr(prog, len, pass), ptr++, pass); + writememory(0x1210, (asprop->ptr)++, pass); + writememory(getadr(asprop->prog, obuf, pass), (asprop->ptr)++, pass); + /* LAD GR2,OLEN */ + writememory(0x1220, (asprop->ptr)++, pass); + writememory(getadr(asprop->prog, len, pass), (asprop->ptr)++, pass); /* SVC 2 */ - writememory(0xF000, ptr++, pass); - writememory(0x0002, ptr++, pass); - /* LAD GR1,=#A */ - writememory(0x1210, ptr++, pass); + writememory(0xF000, (asprop->ptr)++, pass); + writememory(0x0002, (asprop->ptr)++, pass); + /* LAD GR1,=#A */ + writememory(0x1210, (asprop->ptr)++, pass); + if(pass == FIRST) { + (asprop->ptr)++; + } else { + writememory(asprop->lptr, (asprop->ptr)++, pass); /* リテラルのアドレスを書込 */ + } + writememory(0xA, (asprop->lptr)++, pass); + /* LAD GR2,=1 */ + writememory(0x1220, (asprop->ptr)++, pass); if(pass == FIRST) { - ptr++; + (asprop->ptr)++; } else { - writememory(lptr, ptr++, pass); /* リテラルのアドレスを書込 */ + writememory(asprop->lptr, (asprop->ptr)++, pass); /* リテラルのアドレスを書込 */ } - writememory(0xA, lptr++, pass); - /* LAD GR2,1 */ - writememory(0x1220, ptr++, pass); - writememory(0x0001, ptr++, pass); + writememory(0x1, (asprop->lptr)++, pass); /* SVC 2 */ - writememory(0xF000, ptr++, pass); - writememory(0x0002, ptr++, pass); + writememory(0xF000, (asprop->ptr)++, pass); + writememory(0x0002, (asprop->ptr)++, pass); /* POP GR2 */ - writememory(0x7120, ptr++, pass); + writememory(0x7120, (asprop->ptr)++, pass); /* POP GR1 */ - writememory(0x7110, ptr++, pass); - if(cerrno == 0) { + writememory(0x7110, (asprop->ptr)++, pass); + if(cerr->num == 0) { status = true; } return status; } /* マクロ命令「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; bool status = false; for(i = 1; i <= 7; i++) { - writememory(0x7000 + i, ptr++, pass); /* PUSH GRn */ - writememory(0x0, ptr++, pass); + writememory(0x7000 + i, (asprop->ptr)++, pass); /* PUSH GRn */ + writememory(0x0, (asprop->ptr)++, pass); } - if(cerrno == 0) { + if(cerr->num == 0) { status = true; } return status; } /* マクロ命令「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; bool status = false; for(i = 7; i >= 1; i--) { - writememory((0x7100 + (i << 4)), ptr++, pass); /* POP GRn */ + writememory((0x7100 + (i << 4)), (asprop->ptr)++, pass); /* POP GRn */ } - if(cerrno == 0) { + if(cerr->num == 0) { status = true; } return status;