-/**
- * COMET IIのメモリにアドレス値を書き込む
- */
-void writememory(WORD word, WORD adr, PASS pass)
-{
- /* COMET IIメモリオーバーの場合、エラー発生 */
- if(adr >= sys->memsize) {
- setcerr(119, word2n(adr)); /* out of COMET II memory */
- return;
- }
- (sys->memory)[adr] = word;
- if(pass == SECOND && asmode.asdetail == true) {
- fprintf(stdout, "\t#%04X\t#%04X\n", adr, word);
- }
-}
-
-/**
- * 文字をメモリに書き込む
- */
-void writestr(const char *str, bool literal, PASS pass)
-{
- assert(*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++), (asptr->lptr)++, pass);
- lw = true;
- } else {
- writememory(*(p++), (asptr->ptr)++, pass);
- }
- }
-}
-
-/**
- * DC命令の内容を書き込む
- */
-void writeDC(const char *str, PASS pass)
-{
- WORD adr = 0x0;
-
- if(*str == '\'') {
- writestr(str, false, pass);
- } else {
- if(*str == '#' || isdigit(*str) || *str == '-') {
- adr = nh2word(str);
- } else {
- if(pass == SECOND && (adr = getlabel(asptr->prog, str)) == 0xFFFF) {
- setcerr(103, str); /* label not found */
- }
- }
- writememory(adr, (asptr->ptr)++, pass);
- }
-}
-