From: j8takagi Date: Thu, 18 Jun 2026 10:23:38 +0000 (+0900) Subject: SVC 1で、#FFFF(EOF)を受け取った場合は、GR2に#FFFFを代入するように X-Git-Tag: v0.5p57~3 X-Git-Url: https://j8takagi.net/gitweb?a=commitdiff_plain;h=c8e71ad2f7a5410315efc8d3f297b2d7bc2df4cf;p=yacasl2.git SVC 1で、#FFFF(EOF)を受け取った場合は、GR2に#FFFFを代入するように CASL II仕様書「(IN命令は)ファイルの終わり(end of file)を検出した場合は, -1が格納される。」を反映 --- diff --git a/src/exec.c b/src/exec.c index e80421b..dc77875 100644 --- a/src/exec.c +++ b/src/exec.c @@ -108,26 +108,25 @@ char *pr2str(WORD pr) void svcin() { - int i; char *buf = malloc_chk(INSIZE + 1, "svcin.buf"); if(fgets(buf, INSIZE, stdin) == NULL) { - sys->memory[sys->cpu->gr[1]] = sys->memory[sys->cpu->gr[2]] = 0x0; + sys->memory[sys->cpu->gr[1]] = 0x0; + sys->memory[sys->cpu->gr[2]] = 0xFFFF; + FREE(buf); return; } - for(i = 0; i < INSIZE; i++) { + for(int i = 0; i < INSIZE; i++) { if(!buf[i] || buf[i] == '\n') { - --i; break; } if(sys->cpu->gr[1] + i > execptr->end) { - setcerr - (208, ""); /* SVC input - memory overflow */ + setcerr(208, ""); /* SVC input - memory overflow */ break; } sys->memory[sys->cpu->gr[1] + i] = buf[i]; + sys->memory[sys->cpu->gr[2]] = i + 1; } - sys->memory[sys->cpu->gr[2]] = i + 1; FREE(buf); } diff --git a/test/system/casl2_cmd/cmd_in_eof/0.txt b/test/system/casl2_cmd/cmd_in_eof/0.txt new file mode 100644 index 0000000..00b54ad --- /dev/null +++ b/test/system/casl2_cmd/cmd_in_eof/0.txt @@ -0,0 +1,207 @@ + +Assemble ../../../../as/cmd/IN/in.casl (0) + +Assemble ../../../../as/cmd/IN/in.casl (1) +../../../../as/cmd/IN/in.casl: 1:;;; IN IBUF,ILEN +../../../../as/cmd/IN/in.casl: 2:MAIN START +../../../../as/cmd/IN/in.casl: 3:LOOP IN IBUF,ILEN + #0000 #7001 + #0001 #0000 + #0002 #7002 + #0003 #0000 + #0004 #1210 + #0005 #000D + #0006 #1220 + #0007 #0021 + #0008 #F000 + #0009 #0001 + #000A #7120 + #000B #7110 +../../../../as/cmd/IN/in.casl: 4:FIN RET + #000C #8100 +../../../../as/cmd/IN/in.casl: 5:IBUF DS 20 + #000D #0000 + #000E #0000 + #000F #0000 + #0010 #0000 + #0011 #0000 + #0012 #0000 + #0013 #0000 + #0014 #0000 + #0015 #0000 + #0016 #0000 + #0017 #0000 + #0018 #0000 + #0019 #0000 + #001A #0000 + #001B #0000 + #001C #0000 + #001D #0000 + #001E #0000 + #001F #0000 + #0020 #0000 +../../../../as/cmd/IN/in.casl: 6:ILEN DS 1 + #0021 #0000 +../../../../as/cmd/IN/in.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: 64 = #0040 = 0000000001000000 +#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: 7001 0000 7002 0000 1210 000D 1220 0021 F000 0001 7120 7110 8100 0000 0000 0000 +#0000: 0010: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 +#0000: 0020: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 +#0000: 0030: 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: 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: 63 = #003F = 0000000000111111 +#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: 7001 0000 7002 0000 1210 000D 1220 0021 F000 0001 7120 7110 8100 0000 0000 0000 +#0002: 0010: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 +#0002: 0020: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 +#0002: 0030: 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: 0 = #0000 = 0000000000000000 +#0004: GR2: 0 = #0000 = 0000000000000000 +#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: 62 = #003E = 0000000000111110 +#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: 7001 0000 7002 0000 1210 000D 1220 0021 F000 0001 7120 7110 8100 0000 0000 0000 +#0004: 0010: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 +#0004: 0020: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 +#0004: 0030: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 + +#0006: Register:::: +#0006: GR0: 0 = #0000 = 0000000000000000 +#0006: GR1: 13 = #000D = 0000000000001101 +#0006: GR2: 0 = #0000 = 0000000000000000 +#0006: GR3: 0 = #0000 = 0000000000000000 +#0006: GR4: 0 = #0000 = 0000000000000000 +#0006: GR5: 0 = #0000 = 0000000000000000 +#0006: GR6: 0 = #0000 = 0000000000000000 +#0006: GR7: 0 = #0000 = 0000000000000000 +#0006: SP: 62 = #003E = 0000000000111110 +#0006: PR: 6 = #0006 = 0000000000000110 +#0006: FR (OF SF ZF): 000 +#0006: Memory:::: +#0006: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F + ------------------------------------------------------------------------------------- +#0006: 0000: 7001 0000 7002 0000 1210 000D 1220 0021 F000 0001 7120 7110 8100 0000 0000 0000 +#0006: 0010: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 +#0006: 0020: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 +#0006: 0030: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 + +#0008: Register:::: +#0008: GR0: 0 = #0000 = 0000000000000000 +#0008: GR1: 13 = #000D = 0000000000001101 +#0008: GR2: 33 = #0021 = 0000000000100001 = '!' +#0008: GR3: 0 = #0000 = 0000000000000000 +#0008: GR4: 0 = #0000 = 0000000000000000 +#0008: GR5: 0 = #0000 = 0000000000000000 +#0008: GR6: 0 = #0000 = 0000000000000000 +#0008: GR7: 0 = #0000 = 0000000000000000 +#0008: SP: 62 = #003E = 0000000000111110 +#0008: PR: 8 = #0008 = 0000000000001000 +#0008: FR (OF SF ZF): 000 +#0008: Memory:::: +#0008: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F + ------------------------------------------------------------------------------------- +#0008: 0000: 7001 0000 7002 0000 1210 000D 1220 0021 F000 0001 7120 7110 8100 0000 0000 0000 +#0008: 0010: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 +#0008: 0020: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 +#0008: 0030: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 + +#000A: Register:::: +#000A: GR0: 0 = #0000 = 0000000000000000 +#000A: GR1: 13 = #000D = 0000000000001101 +#000A: GR2: 33 = #0021 = 0000000000100001 = '!' +#000A: GR3: 0 = #0000 = 0000000000000000 +#000A: GR4: 0 = #0000 = 0000000000000000 +#000A: GR5: 0 = #0000 = 0000000000000000 +#000A: GR6: 0 = #0000 = 0000000000000000 +#000A: GR7: 0 = #0000 = 0000000000000000 +#000A: SP: 62 = #003E = 0000000000111110 +#000A: PR: 10 = #000A = 0000000000001010 +#000A: FR (OF SF ZF): 000 +#000A: Memory:::: +#000A: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F + ------------------------------------------------------------------------------------- +#000A: 0000: 7001 0000 7002 0000 1210 000D 1220 0021 F000 0001 7120 7110 8100 0000 0000 0000 +#000A: 0010: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 +#000A: 0020: 0000 FFFF 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 +#000A: 0030: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 + +#000B: Register:::: +#000B: GR0: 0 = #0000 = 0000000000000000 +#000B: GR1: 13 = #000D = 0000000000001101 +#000B: GR2: 0 = #0000 = 0000000000000000 +#000B: GR3: 0 = #0000 = 0000000000000000 +#000B: GR4: 0 = #0000 = 0000000000000000 +#000B: GR5: 0 = #0000 = 0000000000000000 +#000B: GR6: 0 = #0000 = 0000000000000000 +#000B: GR7: 0 = #0000 = 0000000000000000 +#000B: SP: 63 = #003F = 0000000000111111 +#000B: PR: 11 = #000B = 0000000000001011 +#000B: FR (OF SF ZF): 000 +#000B: Memory:::: +#000B: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F + ------------------------------------------------------------------------------------- +#000B: 0000: 7001 0000 7002 0000 1210 000D 1220 0021 F000 0001 7120 7110 8100 0000 0000 0000 +#000B: 0010: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 +#000B: 0020: 0000 FFFF 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 +#000B: 0030: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 + +#000C: Register:::: +#000C: GR0: 0 = #0000 = 0000000000000000 +#000C: GR1: 0 = #0000 = 0000000000000000 +#000C: GR2: 0 = #0000 = 0000000000000000 +#000C: GR3: 0 = #0000 = 0000000000000000 +#000C: GR4: 0 = #0000 = 0000000000000000 +#000C: GR5: 0 = #0000 = 0000000000000000 +#000C: GR6: 0 = #0000 = 0000000000000000 +#000C: GR7: 0 = #0000 = 0000000000000000 +#000C: SP: 64 = #0040 = 0000000001000000 +#000C: PR: 12 = #000C = 0000000000001100 +#000C: FR (OF SF ZF): 000 +#000C: Memory:::: +#000C: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F + ------------------------------------------------------------------------------------- +#000C: 0000: 7001 0000 7002 0000 1210 000D 1220 0021 F000 0001 7120 7110 8100 0000 0000 0000 +#000C: 0010: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 +#000C: 0020: 0000 FFFF 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 +#000C: 0030: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 + diff --git a/test/system/casl2_cmd/cmd_in_eof/Makefile b/test/system/casl2_cmd/cmd_in_eof/Makefile new file mode 100644 index 0000000..b6dac59 --- /dev/null +++ b/test/system/casl2_cmd/cmd_in_eof/Makefile @@ -0,0 +1,2 @@ +include ../Define.mk +include ../Test.mk diff --git a/test/system/casl2_cmd/cmd_in_eof/cmd b/test/system/casl2_cmd/cmd_in_eof/cmd new file mode 100755 index 0000000..5f6f8af --- /dev/null +++ b/test/system/casl2_cmd/cmd_in_eof/cmd @@ -0,0 +1 @@ +../../../../casl2 -atd -M64 ../../../../as/cmd/IN/in.casl