From ea10c7cb69152aedb2dad06c4b474f55cd5c59d0 Mon Sep 17 00:00:00 2001 From: j8takagi Date: Sat, 13 Jun 2026 00:07:00 +0900 Subject: [PATCH] =?utf8?q?CALL=E4=BB=A5=E5=A4=96=E3=81=AE=E3=82=B3?= =?utf8?q?=E3=83=9E=E3=83=B3=E3=83=89=E3=81=A7=E3=82=82=E5=A4=96=E9=83=A8?= =?utf8?q?=E3=82=B9=E3=82=B3=E3=83=BC=E3=83=97=E3=81=AE=E3=83=A9=E3=83=99?= =?utf8?q?=E3=83=AB=E3=82=92=E8=AA=AD=E3=81=BF=E8=BE=BC=E3=82=80=E3=82=88?= =?utf8?q?=E3=81=86=E4=BB=95=E6=A7=98=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit テストも追加 https://claude.ai/share/eda18be1-03e2-4f98-a0d5-a20b89125299 --- as/cmd/DC/dc__label_both.casl | 11 +++ as/cmd/DC/dc__label_inner.casl | 7 ++ as/cmd/DC/dc__label_outer.casl | 10 +++ src/assemble.c | 8 +- .../system/casl2_cmd/cmd_dc_label__both/0.txt | 78 ++++++++++++++++++ .../casl2_cmd/cmd_dc_label__both/Makefile | 2 + test/system/casl2_cmd/cmd_dc_label__both/cmd | 1 + .../casl2_cmd/cmd_dc_label__inner/0.txt | 74 +++++++++++++++++ .../casl2_cmd/cmd_dc_label__inner/Makefile | 2 + test/system/casl2_cmd/cmd_dc_label__inner/cmd | 1 + .../casl2_cmd/cmd_dc_label__outer/0.txt | 79 +++++++++++++++++++ .../casl2_cmd/cmd_dc_label__outer/Makefile | 2 + test/system/casl2_cmd/cmd_dc_label__outer/cmd | 1 + 13 files changed, 275 insertions(+), 1 deletion(-) create mode 100644 as/cmd/DC/dc__label_both.casl create mode 100644 as/cmd/DC/dc__label_inner.casl create mode 100644 as/cmd/DC/dc__label_outer.casl create mode 100644 test/system/casl2_cmd/cmd_dc_label__both/0.txt create mode 100644 test/system/casl2_cmd/cmd_dc_label__both/Makefile create mode 100755 test/system/casl2_cmd/cmd_dc_label__both/cmd create mode 100644 test/system/casl2_cmd/cmd_dc_label__inner/0.txt create mode 100644 test/system/casl2_cmd/cmd_dc_label__inner/Makefile create mode 100755 test/system/casl2_cmd/cmd_dc_label__inner/cmd create mode 100644 test/system/casl2_cmd/cmd_dc_label__outer/0.txt create mode 100644 test/system/casl2_cmd/cmd_dc_label__outer/Makefile create mode 100755 test/system/casl2_cmd/cmd_dc_label__outer/cmd diff --git a/as/cmd/DC/dc__label_both.casl b/as/cmd/DC/dc__label_both.casl new file mode 100644 index 0000000..d0ab361 --- /dev/null +++ b/as/cmd/DC/dc__label_both.casl @@ -0,0 +1,11 @@ +MAIN START + LAD GR2,ADR1 + LD GR1,ADR0 + RET +ADR0 DC ADR1 +ADR1 DC 13 + END +ADR1 START + LAD GR2,29 + RET + END diff --git a/as/cmd/DC/dc__label_inner.casl b/as/cmd/DC/dc__label_inner.casl new file mode 100644 index 0000000..7de6355 --- /dev/null +++ b/as/cmd/DC/dc__label_inner.casl @@ -0,0 +1,7 @@ +MAIN START + LAD GR1,ADR1 + LD GR2,ADR2 + RET +ADR1 DC 21 +ADR2 DC ADR1 + END diff --git a/as/cmd/DC/dc__label_outer.casl b/as/cmd/DC/dc__label_outer.casl new file mode 100644 index 0000000..a75a7c9 --- /dev/null +++ b/as/cmd/DC/dc__label_outer.casl @@ -0,0 +1,10 @@ +MAIN START + LAD GR2,ADR2 + LD GR1,ADR1 + RET +ADR1 DC ADR2 + END +ADR2 START + LAD GR2,29 + RET + END diff --git a/src/assemble.c b/src/assemble.c index f597574..1c4f8a7 100644 --- a/src/assemble.c +++ b/src/assemble.c @@ -303,7 +303,10 @@ WORD getadr(const char *prog, const char *str, PASS pass) } else { if(pass == SECOND) { if((adr = getlabel(prog, str)) == 0xFFFF) { - setcerr(103, str); /* label not found */ + adr = getlabel("", str); + } + if(adr == 0xFFFF) { + setcerr(103, str); /* label not found */ setcerr(103, str); /* label not found */ } } } @@ -397,6 +400,9 @@ void writedc(const char *str, PASS pass) adr = nh2word(str); } else { if(pass == SECOND && (adr = getlabel(asptr->prog, str)) == 0xFFFF) { + adr = getlabel("", str); + } + if(pass == SECOND && adr == 0xFFFF) { setcerr(103, str); /* label not found */ } } diff --git a/test/system/casl2_cmd/cmd_dc_label__both/0.txt b/test/system/casl2_cmd/cmd_dc_label__both/0.txt new file mode 100644 index 0000000..ad07d8c --- /dev/null +++ b/test/system/casl2_cmd/cmd_dc_label__both/0.txt @@ -0,0 +1,78 @@ + +Assemble ../../../../as/cmd/DC/dc__label_both.casl (0) + +Assemble ../../../../as/cmd/DC/dc__label_both.casl (1) +../../../../as/cmd/DC/dc__label_both.casl: 1:MAIN START +../../../../as/cmd/DC/dc__label_both.casl: 2: LAD GR2,ADR1 + #0000 #1220 + #0001 #0006 +../../../../as/cmd/DC/dc__label_both.casl: 3: LD GR1,ADR0 + #0002 #1010 + #0003 #0005 +../../../../as/cmd/DC/dc__label_both.casl: 4: RET + #0004 #8100 +../../../../as/cmd/DC/dc__label_both.casl: 5:ADR0 DC ADR1 + #0005 #0006 +../../../../as/cmd/DC/dc__label_both.casl: 6:ADR1 DC 13 + #0006 #000D +../../../../as/cmd/DC/dc__label_both.casl: 7: END +../../../../as/cmd/DC/dc__label_both.casl: 8:ADR1 START +../../../../as/cmd/DC/dc__label_both.casl: 9: LAD GR2,29 + #0007 #1220 + #0008 #001D +../../../../as/cmd/DC/dc__label_both.casl: 10: RET + #0009 #8100 +../../../../as/cmd/DC/dc__label_both.casl: 11: END + +Executing machine codes +#0000: Register:::: +#0000: GR0: 0 = #0000 = 0000000000000000 +#0000: GR1: 0 = #0000 = 0000000000000000 +#0000: GR2: 0 = #0000 = 0000000000000000 +#0000: GR3: 0 = #0000 = 0000000000000000 +#0000: GR4: 0 = #0000 = 0000000000000000 +#0000: GR5: 0 = #0000 = 0000000000000000 +#0000: GR6: 0 = #0000 = 0000000000000000 +#0000: GR7: 0 = #0000 = 0000000000000000 +#0000: SP: 16 = #0010 = 0000000000010000 +#0000: PR: 0 = #0000 = 0000000000000000 +#0000: FR (OF SF ZF): 000 +#0000: Memory:::: +#0000: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F + ------------------------------------------------------------------------------------- +#0000: 0000: 1220 0006 1010 0005 8100 0006 000D 1220 001D 8100 0000 0000 0000 0000 0000 0000 + +#0002: Register:::: +#0002: GR0: 0 = #0000 = 0000000000000000 +#0002: GR1: 0 = #0000 = 0000000000000000 +#0002: GR2: 6 = #0006 = 0000000000000110 +#0002: GR3: 0 = #0000 = 0000000000000000 +#0002: GR4: 0 = #0000 = 0000000000000000 +#0002: GR5: 0 = #0000 = 0000000000000000 +#0002: GR6: 0 = #0000 = 0000000000000000 +#0002: GR7: 0 = #0000 = 0000000000000000 +#0002: SP: 16 = #0010 = 0000000000010000 +#0002: PR: 2 = #0002 = 0000000000000010 +#0002: FR (OF SF ZF): 000 +#0002: Memory:::: +#0002: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F + ------------------------------------------------------------------------------------- +#0002: 0000: 1220 0006 1010 0005 8100 0006 000D 1220 001D 8100 0000 0000 0000 0000 0000 0000 + +#0004: Register:::: +#0004: GR0: 0 = #0000 = 0000000000000000 +#0004: GR1: 6 = #0006 = 0000000000000110 +#0004: GR2: 6 = #0006 = 0000000000000110 +#0004: GR3: 0 = #0000 = 0000000000000000 +#0004: GR4: 0 = #0000 = 0000000000000000 +#0004: GR5: 0 = #0000 = 0000000000000000 +#0004: GR6: 0 = #0000 = 0000000000000000 +#0004: GR7: 0 = #0000 = 0000000000000000 +#0004: SP: 16 = #0010 = 0000000000010000 +#0004: PR: 4 = #0004 = 0000000000000100 +#0004: FR (OF SF ZF): 000 +#0004: Memory:::: +#0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F + ------------------------------------------------------------------------------------- +#0004: 0000: 1220 0006 1010 0005 8100 0006 000D 1220 001D 8100 0000 0000 0000 0000 0000 0000 + diff --git a/test/system/casl2_cmd/cmd_dc_label__both/Makefile b/test/system/casl2_cmd/cmd_dc_label__both/Makefile new file mode 100644 index 0000000..b6dac59 --- /dev/null +++ b/test/system/casl2_cmd/cmd_dc_label__both/Makefile @@ -0,0 +1,2 @@ +include ../Define.mk +include ../Test.mk diff --git a/test/system/casl2_cmd/cmd_dc_label__both/cmd b/test/system/casl2_cmd/cmd_dc_label__both/cmd new file mode 100755 index 0000000..4a7c38e --- /dev/null +++ b/test/system/casl2_cmd/cmd_dc_label__both/cmd @@ -0,0 +1 @@ +../../../../casl2 -atd -M16 ../../../../as/cmd/DC/dc__label_both.casl diff --git a/test/system/casl2_cmd/cmd_dc_label__inner/0.txt b/test/system/casl2_cmd/cmd_dc_label__inner/0.txt new file mode 100644 index 0000000..1802af7 --- /dev/null +++ b/test/system/casl2_cmd/cmd_dc_label__inner/0.txt @@ -0,0 +1,74 @@ + +Assemble ../../../../as/cmd/DC/dc__label_inner.casl (0) + +Assemble ../../../../as/cmd/DC/dc__label_inner.casl (1) +../../../../as/cmd/DC/dc__label_inner.casl: 1:MAIN START +../../../../as/cmd/DC/dc__label_inner.casl: 2: LAD GR1,ADR1 + #0000 #1210 + #0001 #0005 +../../../../as/cmd/DC/dc__label_inner.casl: 3: LD GR2,ADR2 + #0002 #1020 + #0003 #0006 +../../../../as/cmd/DC/dc__label_inner.casl: 4: RET + #0004 #8100 +../../../../as/cmd/DC/dc__label_inner.casl: 5:ADR1 DC 21 + #0005 #0015 +../../../../as/cmd/DC/dc__label_inner.casl: 6:ADR2 DC ADR1 + #0006 #0005 +../../../../as/cmd/DC/dc__label_inner.casl: 7: END + +Executing machine codes +#0000: Register:::: +#0000: GR0: 0 = #0000 = 0000000000000000 +#0000: GR1: 0 = #0000 = 0000000000000000 +#0000: GR2: 0 = #0000 = 0000000000000000 +#0000: GR3: 0 = #0000 = 0000000000000000 +#0000: GR4: 0 = #0000 = 0000000000000000 +#0000: GR5: 0 = #0000 = 0000000000000000 +#0000: GR6: 0 = #0000 = 0000000000000000 +#0000: GR7: 0 = #0000 = 0000000000000000 +#0000: SP: 32 = #0020 = 0000000000100000 +#0000: PR: 0 = #0000 = 0000000000000000 +#0000: FR (OF SF ZF): 000 +#0000: Memory:::: +#0000: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F + ------------------------------------------------------------------------------------- +#0000: 0000: 1210 0005 1020 0006 8100 0015 0005 0000 0000 0000 0000 0000 0000 0000 0000 0000 +#0000: 0010: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 + +#0002: Register:::: +#0002: GR0: 0 = #0000 = 0000000000000000 +#0002: GR1: 5 = #0005 = 0000000000000101 +#0002: GR2: 0 = #0000 = 0000000000000000 +#0002: GR3: 0 = #0000 = 0000000000000000 +#0002: GR4: 0 = #0000 = 0000000000000000 +#0002: GR5: 0 = #0000 = 0000000000000000 +#0002: GR6: 0 = #0000 = 0000000000000000 +#0002: GR7: 0 = #0000 = 0000000000000000 +#0002: SP: 32 = #0020 = 0000000000100000 +#0002: PR: 2 = #0002 = 0000000000000010 +#0002: FR (OF SF ZF): 000 +#0002: Memory:::: +#0002: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F + ------------------------------------------------------------------------------------- +#0002: 0000: 1210 0005 1020 0006 8100 0015 0005 0000 0000 0000 0000 0000 0000 0000 0000 0000 +#0002: 0010: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 + +#0004: Register:::: +#0004: GR0: 0 = #0000 = 0000000000000000 +#0004: GR1: 5 = #0005 = 0000000000000101 +#0004: GR2: 5 = #0005 = 0000000000000101 +#0004: GR3: 0 = #0000 = 0000000000000000 +#0004: GR4: 0 = #0000 = 0000000000000000 +#0004: GR5: 0 = #0000 = 0000000000000000 +#0004: GR6: 0 = #0000 = 0000000000000000 +#0004: GR7: 0 = #0000 = 0000000000000000 +#0004: SP: 32 = #0020 = 0000000000100000 +#0004: PR: 4 = #0004 = 0000000000000100 +#0004: FR (OF SF ZF): 000 +#0004: Memory:::: +#0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F + ------------------------------------------------------------------------------------- +#0004: 0000: 1210 0005 1020 0006 8100 0015 0005 0000 0000 0000 0000 0000 0000 0000 0000 0000 +#0004: 0010: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 + diff --git a/test/system/casl2_cmd/cmd_dc_label__inner/Makefile b/test/system/casl2_cmd/cmd_dc_label__inner/Makefile new file mode 100644 index 0000000..b6dac59 --- /dev/null +++ b/test/system/casl2_cmd/cmd_dc_label__inner/Makefile @@ -0,0 +1,2 @@ +include ../Define.mk +include ../Test.mk diff --git a/test/system/casl2_cmd/cmd_dc_label__inner/cmd b/test/system/casl2_cmd/cmd_dc_label__inner/cmd new file mode 100755 index 0000000..c745404 --- /dev/null +++ b/test/system/casl2_cmd/cmd_dc_label__inner/cmd @@ -0,0 +1 @@ +../../../../casl2 -atd -M32 ../../../../as/cmd/DC/dc__label_inner.casl diff --git a/test/system/casl2_cmd/cmd_dc_label__outer/0.txt b/test/system/casl2_cmd/cmd_dc_label__outer/0.txt new file mode 100644 index 0000000..2a87e4c --- /dev/null +++ b/test/system/casl2_cmd/cmd_dc_label__outer/0.txt @@ -0,0 +1,79 @@ + +Assemble ../../../../as/cmd/DC/dc__label_outer.casl (0) + +Assemble ../../../../as/cmd/DC/dc__label_outer.casl (1) +../../../../as/cmd/DC/dc__label_outer.casl: 1:MAIN START +../../../../as/cmd/DC/dc__label_outer.casl: 2: LAD GR2,ADR2 + #0000 #1220 + #0001 #0006 +../../../../as/cmd/DC/dc__label_outer.casl: 3: LD GR1,ADR1 + #0002 #1010 + #0003 #0005 +../../../../as/cmd/DC/dc__label_outer.casl: 4: RET + #0004 #8100 +../../../../as/cmd/DC/dc__label_outer.casl: 5:ADR1 DC ADR2 + #0005 #0006 +../../../../as/cmd/DC/dc__label_outer.casl: 6: END +../../../../as/cmd/DC/dc__label_outer.casl: 7:ADR2 START +../../../../as/cmd/DC/dc__label_outer.casl: 8: LAD GR2,29 + #0006 #1220 + #0007 #001D +../../../../as/cmd/DC/dc__label_outer.casl: 9: RET + #0008 #8100 +../../../../as/cmd/DC/dc__label_outer.casl: 10: END + +Executing machine codes +#0000: Register:::: +#0000: GR0: 0 = #0000 = 0000000000000000 +#0000: GR1: 0 = #0000 = 0000000000000000 +#0000: GR2: 0 = #0000 = 0000000000000000 +#0000: GR3: 0 = #0000 = 0000000000000000 +#0000: GR4: 0 = #0000 = 0000000000000000 +#0000: GR5: 0 = #0000 = 0000000000000000 +#0000: GR6: 0 = #0000 = 0000000000000000 +#0000: GR7: 0 = #0000 = 0000000000000000 +#0000: SP: 32 = #0020 = 0000000000100000 +#0000: PR: 0 = #0000 = 0000000000000000 +#0000: FR (OF SF ZF): 000 +#0000: Memory:::: +#0000: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F + ------------------------------------------------------------------------------------- +#0000: 0000: 1220 0006 1010 0005 8100 0006 1220 001D 8100 0000 0000 0000 0000 0000 0000 0000 +#0000: 0010: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 + +#0002: Register:::: +#0002: GR0: 0 = #0000 = 0000000000000000 +#0002: GR1: 0 = #0000 = 0000000000000000 +#0002: GR2: 6 = #0006 = 0000000000000110 +#0002: GR3: 0 = #0000 = 0000000000000000 +#0002: GR4: 0 = #0000 = 0000000000000000 +#0002: GR5: 0 = #0000 = 0000000000000000 +#0002: GR6: 0 = #0000 = 0000000000000000 +#0002: GR7: 0 = #0000 = 0000000000000000 +#0002: SP: 32 = #0020 = 0000000000100000 +#0002: PR: 2 = #0002 = 0000000000000010 +#0002: FR (OF SF ZF): 000 +#0002: Memory:::: +#0002: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F + ------------------------------------------------------------------------------------- +#0002: 0000: 1220 0006 1010 0005 8100 0006 1220 001D 8100 0000 0000 0000 0000 0000 0000 0000 +#0002: 0010: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 + +#0004: Register:::: +#0004: GR0: 0 = #0000 = 0000000000000000 +#0004: GR1: 6 = #0006 = 0000000000000110 +#0004: GR2: 6 = #0006 = 0000000000000110 +#0004: GR3: 0 = #0000 = 0000000000000000 +#0004: GR4: 0 = #0000 = 0000000000000000 +#0004: GR5: 0 = #0000 = 0000000000000000 +#0004: GR6: 0 = #0000 = 0000000000000000 +#0004: GR7: 0 = #0000 = 0000000000000000 +#0004: SP: 32 = #0020 = 0000000000100000 +#0004: PR: 4 = #0004 = 0000000000000100 +#0004: FR (OF SF ZF): 000 +#0004: Memory:::: +#0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F + ------------------------------------------------------------------------------------- +#0004: 0000: 1220 0006 1010 0005 8100 0006 1220 001D 8100 0000 0000 0000 0000 0000 0000 0000 +#0004: 0010: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 + diff --git a/test/system/casl2_cmd/cmd_dc_label__outer/Makefile b/test/system/casl2_cmd/cmd_dc_label__outer/Makefile new file mode 100644 index 0000000..b6dac59 --- /dev/null +++ b/test/system/casl2_cmd/cmd_dc_label__outer/Makefile @@ -0,0 +1,2 @@ +include ../Define.mk +include ../Test.mk diff --git a/test/system/casl2_cmd/cmd_dc_label__outer/cmd b/test/system/casl2_cmd/cmd_dc_label__outer/cmd new file mode 100755 index 0000000..3d5d386 --- /dev/null +++ b/test/system/casl2_cmd/cmd_dc_label__outer/cmd @@ -0,0 +1 @@ +../../../../casl2 -atd -M32 ../../../../as/cmd/DC/dc__label_outer.casl -- 2.47.3