X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=direct.c;h=70f4469602278ad708811706181f5a37146a2c3f;hp=89e4ee0149855e7c7b7031422058eee2d5a10559;hb=d570f2d80fed3a3254ff49748d4e2f50ee5e2a2c;hpb=21b541fc477234e0823876eabf8ee556eb94c78e diff --git a/direct.c b/direct.c index 89e4ee0..70f4469 100644 --- a/direct.c +++ b/direct.c @@ -814,8 +814,7 @@ int d_bss(void) // int d_ds(WORD siz) { -if (debug) - printf("Directive: .ds.[size] = %u, sloc = $%X\n", siz, sloc); + DEBUG { printf("Directive: .ds.[size] = %u, sloc = $%X\n", siz, sloc); } VALUE eval; @@ -832,9 +831,14 @@ if (debug) if (abs_expr(&eval) != OK) return 0; + // Check to see if the value being passed in is negative (who the hell does + // that?--nobody does; it's the code gremlins, or rum, that does it) + if (eval < 0) + return error("negative sizes not allowed"); + // In non-TDB section (BSS, ABS and M6502) just advance the location // counter appropriately. In TDB sections, deposit (possibly large) chunks - //of zeroed memory.... + // of zeroed memory.... if (scattr & SBSS) { listvalue(eval); @@ -997,7 +1001,8 @@ int d_dcb(WORD siz) VALUE evalc, eval; WORD eattr; -printf("dcb: section is %s%s%s (scattr=$%X)\n", (cursect & TEXT ? "TEXT" : ""), (cursect & DATA ? " DATA" : ""), (cursect & BSS ? "BSS" : ""), scattr); + DEBUG { printf("dcb: section is %s%s%s (scattr=$%X)\n", (cursect & TEXT ? "TEXT" : ""), (cursect & DATA ? " DATA" : ""), (cursect & BSS ? "BSS" : ""), scattr); } + if ((scattr & SBSS) != 0) return error("illegal initialization of section");