From 388f1f3694b4e8292bd6d0366ea8507d461528cb Mon Sep 17 00:00:00 2001 From: Mark Long Date: Mon, 31 Oct 2016 00:02:53 -0500 Subject: [PATCH] Normalized construction of 16-bit words from 2 8-bit values throughout code --- src/applesoftfile/ApplesoftRetokenizer.cpp | 6 ++++-- src/applesoftfile/applesoftfile.cxx | 3 ++- src/binaryfile/binaryfile.cxx | 5 +++-- src/diskfiles/dos33/catalogsector.cxx | 3 ++- src/diskfiles/dos33/vtoc.cxx | 7 +++++-- src/relocatablefile/relocatablefile.cxx | 6 +++--- src/relocatablefile/relocatablefile.h | 3 ++- src/ui/catalogwidget.cxx | 8 +++++--- 8 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/applesoftfile/ApplesoftRetokenizer.cpp b/src/applesoftfile/ApplesoftRetokenizer.cpp index 4d68a50..7f1817e 100644 --- a/src/applesoftfile/ApplesoftRetokenizer.cpp +++ b/src/applesoftfile/ApplesoftRetokenizer.cpp @@ -1,5 +1,6 @@ #include "ApplesoftRetokenizer.h" #include "applesofttoken.h" +#include "util.h" #include #include @@ -33,12 +34,13 @@ void ApplesoftRetokenizer::parse(quint16 start_address) while (idx < m_data.length()) { ApplesoftLine line; line.address = current_address; - line.next_address = (quint8) m_data[idx] + (((quint8) m_data[idx+1]) *256); + line.next_address = makeWord(m_data[idx],m_data[idx+1]); idx++; idx++; - line.linenum = (quint8) m_data[idx] + (((quint8) m_data[idx+1])*256); + line.linenum = makeWord(m_data[idx],m_data[idx+1]); idx++; idx++; + if (line.next_address == 0x00) { break; } do { val = m_data[idx++]; diff --git a/src/applesoftfile/applesoftfile.cxx b/src/applesoftfile/applesoftfile.cxx index 53557b9..b994cb2 100644 --- a/src/applesoftfile/applesoftfile.cxx +++ b/src/applesoftfile/applesoftfile.cxx @@ -1,4 +1,5 @@ #include "applesoftfile.h" +#include "util.h" #include #include #include @@ -28,7 +29,7 @@ void ApplesoftFile::setData(QByteArray data) quint8 addlo = m_data.at(0); quint8 addhi = m_data.at(1); - m_length = addlo + (addhi * 256); + m_length = makeWord(addlo,addhi); m_data.remove(0,2); m_retokenizer->setData(m_data); diff --git a/src/binaryfile/binaryfile.cxx b/src/binaryfile/binaryfile.cxx index cd7f912..a9fb6ba 100644 --- a/src/binaryfile/binaryfile.cxx +++ b/src/binaryfile/binaryfile.cxx @@ -1,5 +1,6 @@ #include #include "binaryfile.h" +#include "util.h" BinaryFile::BinaryFile(QByteArray data) : GenericFile(data) { @@ -15,8 +16,8 @@ void BinaryFile::setData(QByteArray data) if (data.length() >= 4) { QByteArray metadata = data.left(4); m_data = data.mid(4); - setAddress((quint8) metadata[0] + ((quint8) metadata[1]*256)); - m_length = (quint8) metadata[2] + ((quint8) metadata[3]*256); + setAddress(makeWord(metadata[0],metadata[1])); + m_length = makeWord(metadata[2],metadata[3]); } } diff --git a/src/diskfiles/dos33/catalogsector.cxx b/src/diskfiles/dos33/catalogsector.cxx index 348da5a..680cdab 100644 --- a/src/diskfiles/dos33/catalogsector.cxx +++ b/src/diskfiles/dos33/catalogsector.cxx @@ -36,7 +36,8 @@ FileDescriptiveEntry CatalogSector::makeFDE(int offset) fde.firstTSListSector.track = m_data->rawData()[offset + 0x00]; fde.firstTSListSector.sector = m_data->rawData()[offset + 0x01]; fde.fileTypeAndFlags = m_data->rawData()[offset + 0x02]; - fde.lengthInSectors = m_data->rawData()[offset + 0x21] + (m_data->rawData()[offset + 0x22] * 256); + //fde.lengthInSectors = m_data->rawData()[offset + 0x21] + (m_data->rawData()[offset + 0x22] * 256); + fde.lengthInSectors = makeWord( m_data->rawData()[offset + 0x21], m_data->rawData()[offset + 0x22]); for (int idx = 0x03; idx <= 0x20; idx++) { fde.filename.append(m_data->rawData()[idx+offset]); } diff --git a/src/diskfiles/dos33/vtoc.cxx b/src/diskfiles/dos33/vtoc.cxx index 42bc261..67dd610 100644 --- a/src/diskfiles/dos33/vtoc.cxx +++ b/src/diskfiles/dos33/vtoc.cxx @@ -4,6 +4,7 @@ #include #include "sector.h" +#include "util.h" VTOC::VTOC(Sector *data) { @@ -43,7 +44,8 @@ quint8 VTOC::sectorsPerDisk() { } qint16 VTOC::bytesPerSector() { - return m_data->rawData()[0x36] + (256 * m_data->rawData()[0x37]); + return makeWord(m_data->rawData()[0x36], + m_data->rawData()[0x37]); } bool VTOC::isSectorInUse(TSPair ts) { @@ -51,7 +53,8 @@ bool VTOC::isSectorInUse(TSPair ts) { quint8 sec = ts.sector; quint8 baseaddr = (track * 4) + 0x38; - quint16 word = (((quint16) m_data->rawData()[baseaddr]) *256) + (quint8) m_data->rawData()[baseaddr+1]; + //quint16 word = (((quint16) m_data->rawData()[baseaddr]) *256) + (quint8) m_data->rawData()[baseaddr+1]; + quint16 word = makeWord(m_data->rawData()[baseaddr+1],m_data->rawData()[baseaddr]); quint16 bitpos = (quint16) 0x01 << (quint16) sec; return !(word & bitpos); diff --git a/src/relocatablefile/relocatablefile.cxx b/src/relocatablefile/relocatablefile.cxx index 963a1d9..6a2b97e 100644 --- a/src/relocatablefile/relocatablefile.cxx +++ b/src/relocatablefile/relocatablefile.cxx @@ -14,9 +14,9 @@ void RelocatableFile::setData(QByteArray data) { // qDebug() << "setData()"; if (data.length() >= 6) { - m_starting_ram_address = (quint8) m_data[0] + ((quint8) m_data[1] * 256); - m_ram_image_length = (quint8) m_data[2] + ((quint8) m_data[3] * 256); - m_code_image_length = (quint8) m_data[4] + ((quint8) m_data[5] * 256); + m_starting_ram_address = makeWord(m_data[0],m_data[1]); + m_ram_image_length = makeWord(m_data[2],m_data[3]); + m_code_image_length = makeWord(m_data[4],m_data[5]); int offset = 0; diff --git a/src/relocatablefile/relocatablefile.h b/src/relocatablefile/relocatablefile.h index 81b6e91..d364e0d 100644 --- a/src/relocatablefile/relocatablefile.h +++ b/src/relocatablefile/relocatablefile.h @@ -5,6 +5,7 @@ #include #include "genericfile.h" +#include "util.h" typedef enum { RFS1Byte, RFS2Byte } FieldSize; @@ -27,7 +28,7 @@ public: void init(quint8 rld, quint8 fo_low, quint8 fo_hi, quint8 lbsym) { m_rld_flag = rld; m_halfword_or_sym_num = lbsym; - m_field_offset = (quint8) fo_low + ((quint8) fo_hi * 256); + m_field_offset = makeWord(fo_low,fo_hi); } void init(quint8 rld, quint16 fo, quint8 lbsym) { diff --git a/src/ui/catalogwidget.cxx b/src/ui/catalogwidget.cxx index 0c8c327..026681f 100644 --- a/src/ui/catalogwidget.cxx +++ b/src/ui/catalogwidget.cxx @@ -33,10 +33,11 @@ void CatalogWidget::prepForNewDisk(QString filename, DiskFile *disk) QString CatalogWidget::createToolTip(FileDescriptiveEntry &fde) { QString retval; -//qDebug() << AppleString(fde.filename).printable().trimmed(); retval += AppleString(fde.filename).printable().trimmed() + "\n"; retval += QString("Type: %1\n").arg(fde.fileType()); - retval += QString("Sectors: %1 (%2 bytes)\n").arg(fde.lengthInSectors).arg(fde.lengthInSectors*256); + retval += QString("Sectors: %1 (%2 bytes)\n") + .arg(fde.lengthInSectors) + .arg(fde.lengthInSectors*256); retval += QString("%1\n").arg(fde.isLocked()?"Locked":"Unlocked"); GenericFile *file = m_disk->getFile(fde); @@ -80,7 +81,8 @@ void CatalogWidget::processNewlyLoadedDisk(QString diskfilename, DiskFile *disk) foreach(FileDescriptiveEntry fde, m_disk->getAllFDEs()) { QString filetype = fde.fileType(); QString filename = AppleString(fde.filename).printable().trimmed(); - int size = fde.lengthInSectors; + quint16 size = fde.lengthInSectors; + qDebug() << "SIZE: " << size; bool locked = fde.isLocked(); QString sizeStr = QString("%1").arg(size,5,10,QChar(' ')).toUpper(); QString text = QString("%1 %2 %3 %4").arg(locked?"*":" ").arg(sizeStr).arg(filetype).arg(filename);