in editor/prepend/dapjs.js [2678:2725]
FlashTarget.prototype.flash = function (data, address, progressCb) {
return __awaiter(this, void 0, void 0, function () {
var pageSizeWords, bufferAddress, flashStart, ptr, wordPtr, pageData, flashAddress;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!!this.inited) return [3 /*break*/, 2];
return [4 /*yield*/, this.flashInit()];
case 1:
_a.sent();
_a.label = 2;
case 2:
pageSizeWords = this.platform.flashAlgo.pageSize / 4;
bufferAddress = this.platform.flashAlgo.pageBuffers[0];
flashStart = address || this.platform.flashAlgo.flashStart;
ptr = 0;
_a.label = 3;
case 3:
if (!(ptr < data.byteLength)) return [3 /*break*/, 6];
wordPtr = ptr / 4;
pageData = data.subarray(wordPtr, wordPtr + pageSizeWords);
flashAddress = flashStart + ptr;
return [4 /*yield*/, this.memory.writeBlock(bufferAddress, pageData)];
case 4:
_a.sent();
return [4 /*yield*/, this.runCode(this.platform.flashAlgo.instructions, this.platform.flashAlgo.loadAddress, this.platform.flashAlgo.pcProgramPage, // pc
this.platform.flashAlgo.loadAddress + 1, // lr
this.platform.flashAlgo.stackPointer, // sp
/* upload? */
false,
/* args */
flashAddress, this.platform.flashAlgo.pageSize, bufferAddress)];
case 5:
_a.sent();
if (progressCb) {
progressCb(ptr / data.byteLength);
}
ptr += pageData.byteLength;
return [3 /*break*/, 3];
case 6:
if (progressCb) {
progressCb(1.0);
}
return [2 /*return*/];
}
});
});
};