+/**
+ * マクロ命令「IN IBUF,LEN」をメモリに書込
+ * PUSH 0,GR1
+ * PUSH 0,GR2
+ * LAD GR1,IBUF
+ * LAD GR2,LEN
+ * SVC 1
+ * POP GR2
+ * POP GR1
+ */
+void writeIN(const char *ibuf, const char *len, PASS pass)
+{
+ char *line = malloc_chk(LINESIZE + 1, "writeIN.line");
+
+ assembleline(" PUSH 0,GR1", pass);
+ assembleline(" PUSH 0,GR2", pass);
+ sprintf(line, " LAD GR1,%s", ibuf);
+ assembleline(line, pass);
+ sprintf(line, " LAD GR2,%s", len);
+ assembleline(line, pass);
+ assembleline(" SVC 1", pass);
+ assembleline(" POP GR2", pass);
+ assembleline(" POP GR1", pass);
+
+ FREE(line);
+}
+
+/**
+ * マクロ命令「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
+ */
+void writeOUT(const char *obuf, const char *len, PASS pass)
+{
+ char *line = malloc_chk(LINESIZE + 1, "writeOUT.line");
+
+ assembleline(" PUSH 0,GR1", pass);
+ assembleline(" PUSH 0,GR2", pass);
+ sprintf(line, " LAD GR1,%s", obuf);
+ assembleline(line, pass);
+ sprintf(line, " LAD GR2,%s", len);
+ assembleline(line, pass);
+ assembleline(" SVC 2", pass);
+ assembleline(" LAD GR1,=#A", pass);
+ assembleline(" LAD GR2,=1", pass);
+ assembleline(" SVC 2", pass);
+ assembleline(" POP GR2", pass);
+ assembleline(" POP GR1", pass);
+ FREE(line);
+}
+
+/** マクロ命令「RPUSH」をメモリに書き込む
+ * PUSH 0,GR1
+ * PUSH 0,GR2
+ * PUSH 0,GR3
+ * PUSH 0,GR4
+ * PUSH 0,GR5
+ * PUSH 0,GR6
+ * PUSH 0,GR7
+ */
+void writeRPUSH(PASS pass)
+{
+ int i;
+ char *line = malloc_chk(LINESIZE + 1, "writeRPUSH.line");
+
+ for(i = 1; i <= GRSIZE-1; i++) {
+ sprintf(line, " PUSH 0,GR%d", i);
+ assembleline(line, pass);
+ }
+ FREE(line);
+}
+
+/**
+ * マクロ命令「RPOP」をメモリに書き込む
+ * POP GR7
+ * POP GR6
+ * POP GR5
+ * POP GR4
+ * POP GR3
+ * POP GR3
+ * POP GR2
+ * POP GR1
+ */
+void writeRPOP(PASS pass)
+{
+ int i;
+ char *line = malloc_chk(LINESIZE + 1, "writeRPOP.line");
+
+ for(i = GRSIZE-1; i >= 1; i--) {
+ sprintf(line, " POP GR%d", i);
+ assembleline(line, pass);
+ }
+ FREE(line);
+}
+
+/**
+ * 機械語命令をメモリに書込
+ * 書込に、成功した場合はtrue、失敗した場合はfalse、を返す
+ */