- adr = getadr(asprop->prog, cmdl->opd->opdv[0], pass);
- }
- writememory(cmd, (asprop->ptr)++, pass);
- writememory(adr, (asprop->ptr)++, pass);
- if(cerr->num == 0) {
- status = true;
- }
- }
- return status;
-}
-
-/**
- * COMET IIのメモリにアドレス値を書き込む
- */
-bool writememory(WORD word, WORD adr, PASS pass)
-{
- bool status = false;
-
- /* COMET IIメモリオーバーの場合 */
- if(adr >= sys->memsize) {
- setcerr(119, word2n(adr)); /* out of COMET II memory */
- }
- if(cerr->num == 0) {
- (sys->memory)[adr] = word;
- if(pass == SECOND && asmode.asdetail == true) {
- fprintf(stdout, "\t#%04X\t#%04X\n", adr, word);
- }
- status = true;
- }
- return status;
-}
-
-/**
- * 文字をメモリに書き込む
- */
-void writestr(const char *str, bool literal, PASS pass)
-{
- assert(cerr->num == 0 && *str == '\'');
- const char *p = str + 1;
- bool lw = false;
-
- for(; ;) {
- /* 閉じ「'」がないまま文字列が終了した場合 */
- if(*p == '\0') {
- setcerr(123, str); /* unclosed quote */
- break;
- }
- /* 「'」の場合、次の文字が「'」でない場合は正常終了 */
- if(*p == '\'' && *(++p) != '\'') {
- break;
- } else if(literal == true && lw == true) {
- setcerr(124, str); /* more than one character in literal */
- break;
- }
- /*リテラルの場合はリテラル領域に書込 */
- if(literal == true) {
- writememory(*(p++), (asprop->lptr)++, pass);
- lw = true;
- } else {
- writememory(*(p++), (asprop->ptr)++, pass);