MCPcopy Create free account
hub / github.com/AppleWin/AppleWin / SaveMemory

Method SaveMemory

source/YamlHelper.cpp:563–617  ·  view source on GitHub ↗

Pre: uMemSize must be multiple of 8

Source from the content-addressed store, hash-verified

561
562// Pre: uMemSize must be multiple of 8
563void YamlSaveHelper::SaveMemory(const LPBYTE pMemBase, const UINT uMemSize, const UINT offset/*=0*/)
564{
565 if (uMemSize & 7)
566 throw std::runtime_error("Memory: size must be multiple of 8");
567
568 const UINT kIndent = m_indent;
569
570 const UINT kStride = 64;
571 const char szHex[] = "0123456789ABCDEF";
572
573 size_t lineSize = kIndent+6+2*kStride+2; // "AAAA: 00010203...3F\n\00" = 6+ 2*64 +2
574 char* const pLine = new char [lineSize];
575
576 for (uint32_t addr = offset; addr < (uMemSize + offset); addr += kStride)
577 {
578 char* pDst = pLine;
579 for (UINT i=0; i<kIndent; i++)
580 *pDst++ = ' ';
581 *pDst++ = szHex[ (addr>>12)&0xf ];
582 *pDst++ = szHex[ (addr>>8)&0xf ];
583 *pDst++ = szHex[ (addr>>4)&0xf ];
584 *pDst++ = szHex[ addr&0xf ];
585 *pDst++ = ':';
586 *pDst++ = ' ';
587
588 LPBYTE pMem = pMemBase + addr;
589
590 for (UINT i=0; i<kStride; i+=8)
591 {
592 if (addr + i >= (uMemSize + offset)) // Support short final line (still multiple of 8 bytes)
593 {
594 lineSize = lineSize - 2*kStride + 2*i;
595 break;
596 }
597
598 BYTE d;
599 d = *pMem++; *pDst++ = szHex[d>>4]; *pDst++ = szHex[d&0xf];
600 d = *pMem++; *pDst++ = szHex[d>>4]; *pDst++ = szHex[d&0xf];
601 d = *pMem++; *pDst++ = szHex[d>>4]; *pDst++ = szHex[d&0xf];
602 d = *pMem++; *pDst++ = szHex[d>>4]; *pDst++ = szHex[d&0xf];
603
604 d = *pMem++; *pDst++ = szHex[d>>4]; *pDst++ = szHex[d&0xf];
605 d = *pMem++; *pDst++ = szHex[d>>4]; *pDst++ = szHex[d&0xf];
606 d = *pMem++; *pDst++ = szHex[d>>4]; *pDst++ = szHex[d&0xf];
607 d = *pMem++; *pDst++ = szHex[d>>4]; *pDst++ = szHex[d&0xf];
608 }
609
610 *pDst++ = '\n';
611 *pDst = 0; // For debugger
612
613 fwrite(pLine, 1, lineSize-1, m_hFile); // -1 so don't write null terminator
614 }
615
616 delete [] pLine;
617}
618
619void YamlSaveHelper::FileHdr(UINT version)
620{

Callers 10

SaveSnapshotMethod · 0.80
MemSaveSnapshotMemoryFunction · 0.80
MemSaveSnapshotAuxFunction · 0.80
SaveSnapshotMethod · 0.80
SaveSnapshotFloppyMethod · 0.80
SaveSnapshotMethod · 0.80
SaveSnapshotMethod · 0.80
SaveSnapshotHDDUnitMethod · 0.80
SaveSnapshotMethod · 0.80
SaveSnapshotMethod · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected