diff --git a/src/cmdd.c b/src/cmdd.c index 23dc620..5913219 100644 --- a/src/cmdd.c +++ b/src/cmdd.c @@ -76,11 +76,21 @@ void commandDR() { void commandDF() { int *data_var = getCaliVariable(); + int varno = preVarNo; int cnt = getCaliValue(); int data = getCaliValue(); DEBUG_COMMAND("DF %p,%d,%d:\n", data_var, cnt, data); + const arrayVarStruct* array = &sysVarAttribute[varno]; + if (array->page) { + int maxlen = arrayVarBuffer[array->page - 1].max - array->offset - *array->pointvar; + if (cnt > maxlen) { + WARNING("%03d:%05x: count exceeds array boundary (%d > %d)\n", sl_getPage(), sl_getIndex(), cnt, maxlen); + cnt = maxlen; + } + } + while (cnt--) { *data_var = data; data_var++; }