From 441a3c41b9aefb3490cad9281561fdef76acdbe3 Mon Sep 17 00:00:00 2001 From: Mark Long Date: Thu, 11 Feb 2016 17:46:10 -0600 Subject: [PATCH] Added HexDumpViewer Also added some well-known Monitor/Applesoft addresses to disassembler --- AppleSAWS.pro | 9 +- src/applesoftfile/applesoftfile.cxx | 11 +- src/applesoftfile/applesoftfile.h | 1 + src/binaryfile/binaryfile.cxx | 5 +- src/binaryfile/binaryfile.h | 2 - src/binaryfile/disassembler.cxx | 2 +- src/binaryfile/disassembler.h | 3 + src/diskfiles/dos33/genericfile.cxx | 1 + src/diskfiles/dos33/genericfile.h | 5 + src/ui/catalogwidget.cxx | 31 +- src/ui/catalogwidget.h | 4 +- src/ui/mainwindow.cxx | 31 +- src/ui/mainwindow.h | 3 + src/ui/viewers/disassemblerviewer.cpp | 735 +++++++++++++++++++++++++- src/ui/viewers/hexdumpviewer.cpp | 58 ++ src/ui/viewers/hexdumpviewer.h | 33 ++ src/ui/viewers/hexdumpviewer.ui | 31 ++ 17 files changed, 939 insertions(+), 26 deletions(-) create mode 100644 src/ui/viewers/hexdumpviewer.cpp create mode 100644 src/ui/viewers/hexdumpviewer.h create mode 100644 src/ui/viewers/hexdumpviewer.ui diff --git a/AppleSAWS.pro b/AppleSAWS.pro index 128de8a..aa6385b 100644 --- a/AppleSAWS.pro +++ b/AppleSAWS.pro @@ -41,7 +41,8 @@ SOURCES += \ src/applesoftfile/applesoftformatter.cxx \ src/applesoftfile/applesoftline.cpp \ src/internals/memory.cxx \ - src/ui/viewers/disassemblerviewer.cpp + src/ui/viewers/disassemblerviewer.cpp \ + src/ui/viewers/hexdumpviewer.cpp HEADERS += \ src/diskfiles/dos33/diskfile.h \ @@ -64,10 +65,12 @@ HEADERS += \ src/applesoftfile/applesoftformatter.h \ src/applesoftfile/applesoftline.h \ src/internals/memory.h \ - src/ui/viewers/disassemblerviewer.h + src/ui/viewers/disassemblerviewer.h \ + src/ui/viewers/hexdumpviewer.h FORMS += \ src/ui/catalogwidget.ui \ src/ui/mainwindow.ui \ src/ui/viewers/applesoftfileviewer.ui \ - src/ui/viewers/disassemblerviewer.ui + src/ui/viewers/disassemblerviewer.ui \ + src/ui/viewers/hexdumpviewer.ui diff --git a/src/applesoftfile/applesoftfile.cxx b/src/applesoftfile/applesoftfile.cxx index 92fb210..6029368 100644 --- a/src/applesoftfile/applesoftfile.cxx +++ b/src/applesoftfile/applesoftfile.cxx @@ -7,6 +7,7 @@ ApplesoftFile::ApplesoftFile(QByteArray data) : GenericFile(data) { setData(data); } + setAddress(0x801); } void ApplesoftFile::setData(QByteArray data) @@ -17,10 +18,18 @@ void ApplesoftFile::setData(QByteArray data) quint8 addhi = m_data.at(1); m_length = addlo + (addhi * 256); m_data.remove(0,2); - m_data = m_data.left(m_length); + // m_data = m_data.left(m_length); parse(); } +QByteArray ApplesoftFile::rawData() { + QByteArray retval; + retval.append(m_length % 255); + retval.append(m_length / 255); + retval.append(m_data); + return retval; +} + void ApplesoftFile::parse(quint16 start_address) { int idx = 0; diff --git a/src/applesoftfile/applesoftfile.h b/src/applesoftfile/applesoftfile.h index 4c7f546..ea0cb30 100644 --- a/src/applesoftfile/applesoftfile.h +++ b/src/applesoftfile/applesoftfile.h @@ -23,6 +23,7 @@ public: quint16 length() const { return m_length; } + QByteArray rawData(); private: void parse(quint16 start_address = 0x0801); diff --git a/src/binaryfile/binaryfile.cxx b/src/binaryfile/binaryfile.cxx index 0d0501f..3ac39ec 100644 --- a/src/binaryfile/binaryfile.cxx +++ b/src/binaryfile/binaryfile.cxx @@ -4,7 +4,6 @@ BinaryFile::BinaryFile(QByteArray data) : GenericFile(data) { m_length = 0; - m_address = 0; if (!data.isEmpty()) { setData(data); @@ -16,13 +15,13 @@ void BinaryFile::setData(QByteArray data) if (data.length() >= 4) { QByteArray metadata = data.left(4); m_data = data.mid(4); - m_address = (quint8) metadata[0] + ((quint8) metadata[1]*256); + setAddress((quint8) metadata[0] + ((quint8) metadata[1]*256)); m_length = (quint8) metadata[2] + ((quint8) metadata[3]*256); } } void BinaryFile::dump() { - qDebug() << QString("Address: %1 Length: %2").arg(m_address,4,16,QChar('0')).arg(m_length,4,16,QChar('0')).toUpper(); + qDebug() << QString("Address: %1 Length: %2").arg((quint16) address(),4,16,QChar('0')).arg(m_length,4,16,QChar('0')).toUpper(); qDebug() << QString("Data Length Recorded: %1").arg(m_data.length(),4,16,QChar('0')).toUpper(); } diff --git a/src/binaryfile/binaryfile.h b/src/binaryfile/binaryfile.h index 2f674c1..87b02dd 100644 --- a/src/binaryfile/binaryfile.h +++ b/src/binaryfile/binaryfile.h @@ -9,13 +9,11 @@ public: BinaryFile(QByteArray data = QByteArray()); void setData(QByteArray data); - quint16 address() { return m_address; } quint16 length() { return m_length; } void dump(); protected: - quint16 m_address; quint16 m_length; }; diff --git a/src/binaryfile/disassembler.cxx b/src/binaryfile/disassembler.cxx index f11a07f..94b9e9d 100644 --- a/src/binaryfile/disassembler.cxx +++ b/src/binaryfile/disassembler.cxx @@ -42,7 +42,7 @@ DisassembledItem Disassembler::disassembleOp(quint16 address, quint16 *nextAddre quint16 argval = 0; - if (op.numArgs() == 1) { argval = hexValues[1]; } + if (op.numArgs() == 1) { argval = (quint8) hexValues[1]; } else if (op.numArgs() == 2) { argval = (quint8) hexValues[1] + ((quint8) hexValues[2] * 256); } for (int idx = 0; idx < hexValues.length(); idx++) { diff --git a/src/binaryfile/disassembler.h b/src/binaryfile/disassembler.h index fd9059e..82947b7 100644 --- a/src/binaryfile/disassembler.h +++ b/src/binaryfile/disassembler.h @@ -131,6 +131,9 @@ public: bool isBranch() const { return m_is_branch; } bool isJump() const { return m_is_jump; } bool isJsr() const { return m_is_jsr; } + bool isReturn() { return (m_instruction.opcode() == 0x60); } + bool isBreak() { return (m_instruction.opcode() == 0x00); } + quint16 targetAddress() const { return m_target_address; } bool hasArg() const { return m_has_arg; } quint16 arg16() { return m_raw_arg; } diff --git a/src/diskfiles/dos33/genericfile.cxx b/src/diskfiles/dos33/genericfile.cxx index bc169be..88814ca 100644 --- a/src/diskfiles/dos33/genericfile.cxx +++ b/src/diskfiles/dos33/genericfile.cxx @@ -5,6 +5,7 @@ GenericFile::GenericFile(QByteArray data) if (!data.isEmpty()) { setData(data); } + m_address = 0x00; } void GenericFile::setData(QByteArray data) diff --git a/src/diskfiles/dos33/genericfile.h b/src/diskfiles/dos33/genericfile.h index fdc859b..0fd1806 100644 --- a/src/diskfiles/dos33/genericfile.h +++ b/src/diskfiles/dos33/genericfile.h @@ -14,10 +14,15 @@ public: virtual QByteArray data() { return m_data; } void setFilename(QString filename) { m_filename = filename; } QString filename() const { return m_filename; } + virtual void setAddress(quint16 location) { m_address = location; } + virtual quint16 address() { return m_address; } + virtual QByteArray rawData() { return m_data; } protected: QByteArray m_data; QString m_filename; + quint16 m_address; + }; #endif // GENERICFILE_H diff --git a/src/ui/catalogwidget.cxx b/src/ui/catalogwidget.cxx index 565582a..0a6b89c 100644 --- a/src/ui/catalogwidget.cxx +++ b/src/ui/catalogwidget.cxx @@ -33,10 +33,15 @@ void CatalogWidget::showContextMenuForWidget(const QPoint &point) { [=](){ this->itemClicked(selectedItem); viewAction->deleteLater();}); contextMenu.addAction(viewAction); - QAction *viewWithAction = new QAction("View With...",this); - connect(viewWithAction, &QAction::triggered, - [=](){ this->itemClicked(selectedItem); viewWithAction->deleteLater();}); - contextMenu.addAction(viewWithAction); + QAction *hexViewAction = new QAction("Hex View",this); + connect(hexViewAction, &QAction::triggered, + [=](){ this->toggleHexView(selectedItem); hexViewAction->deleteLater();}); + contextMenu.addAction(hexViewAction); + +// QAction *viewWithAction = new QAction("View With...",this); +// connect(viewWithAction, &QAction::triggered, +// [=](){ this->itemClicked(selectedItem); viewWithAction->deleteLater();}); +// contextMenu.addAction(viewWithAction); contextMenu.exec(mapToGlobal(point)); } @@ -61,14 +66,14 @@ QString CatalogWidget::createToolTip(FileDescriptiveEntry &fde) { retval += QString("%1\n").arg(fde.isLocked()?"Locked":"Unlocked"); GenericFile *file = m_disk->getFile(fde); + quint16 address = file->address(); + retval += QString("Address: $%1 (%2)\n").arg((quint16) (address),4,16,QChar('0')) + .arg(address); if (dynamic_cast(file)) { BinaryFile *binfile = dynamic_cast(file); - quint16 address = binfile->address(); quint16 length = binfile->length(); - retval += QString("Address: $%1 (%2)\n").arg((quint16) (address),4,16,QChar('0')) - .arg(address); retval += QString("Length: $%1 (%2)\n").arg((quint16) (length),4,16,QChar('0')) .arg(length); } else if (dynamic_cast(file)) { @@ -135,8 +140,16 @@ void CatalogWidget::itemClicked(QListWidgetItem *item) { int idx = item->data(0x0100).toInt(); FileDescriptiveEntry fde = m_disk->getAllFDEs()[idx]; - qDebug() << "File " << AppleString(fde.filename).printable().trimmed(); - emit itemSelected(m_disk,fde); + qDebug() << "Default File " << AppleString(fde.filename).printable().trimmed(); + emit openWithDefaultViewer(m_disk,fde); +} + +void CatalogWidget::toggleHexView(QListWidgetItem *item) +{ + int idx = item->data(0x0100).toInt(); + FileDescriptiveEntry fde = m_disk->getAllFDEs()[idx]; + qDebug() << "Hex File " << AppleString(fde.filename).printable().trimmed(); + emit openWithHexViewer(m_disk,fde); } diff --git a/src/ui/catalogwidget.h b/src/ui/catalogwidget.h index 9eb1d42..dd9cb22 100644 --- a/src/ui/catalogwidget.h +++ b/src/ui/catalogwidget.h @@ -28,12 +28,14 @@ public slots: void showContextMenuForWidget(const QPoint &); signals: void newFileSelected(FileDescriptiveEntry *entry); - void itemSelected(DiskFile *disk, FileDescriptiveEntry fde); + void openWithDefaultViewer(DiskFile *disk, FileDescriptiveEntry fde); + void openWithHexViewer(DiskFile *disk, FileDescriptiveEntry fde); protected: QString createToolTip(FileDescriptiveEntry &fde); private slots: void itemClicked(QListWidgetItem *item); + void toggleHexView(QListWidgetItem *item); private: diff --git a/src/ui/mainwindow.cxx b/src/ui/mainwindow.cxx index 5adda3b..c4936cd 100644 --- a/src/ui/mainwindow.cxx +++ b/src/ui/mainwindow.cxx @@ -9,6 +9,7 @@ #include "memory.h" #include "disassembler.h" #include "disassemblerviewer.h" +#include "hexdumpviewer.h" #include @@ -24,8 +25,10 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->action_Quit, SIGNAL(triggered()), qApp, SLOT(quit())); connect(ui->action_Load_Disk_Image, SIGNAL(triggered()), SLOT(showLoadDialog())); connect(ui->action_Unload_Disk_Image, SIGNAL(triggered()), SLOT(unloadDiskFile())); - connect(ui->catalogWidget,SIGNAL(itemSelected(DiskFile*,FileDescriptiveEntry)), + connect(ui->catalogWidget,SIGNAL(openWithDefaultViewer(DiskFile*,FileDescriptiveEntry)), SLOT(handleDiskItemSelectedDefaultOpen(DiskFile*,FileDescriptiveEntry))); + connect(ui->catalogWidget,SIGNAL(openWithHexViewer(DiskFile*,FileDescriptiveEntry)), + SLOT(handleDiskItemSelectedHexViewOpen(DiskFile*,FileDescriptiveEntry))); connect(this, SIGNAL(diskFileLoading(QString, DiskFile*)), @@ -96,15 +99,31 @@ void MainWindow::openInDisassemblerViewer(BinaryFile *file) { hvwma->setFile(file); } +void MainWindow::openInApplesoftFileViewer(ApplesoftFile *file) { + + ApplesoftFileViewer *afv = new ApplesoftFileViewer(0); + afv->setFile(file); + afv->show(); +} + + +void MainWindow::handleDiskItemSelectedHexViewOpen(DiskFile *disk, FileDescriptiveEntry fde) { + GenericFile *file = disk->getFile(fde); + file->setFilename(AppleString(fde.filename).printable().trimmed()); + HexDumpViewer *hdv = new HexDumpViewer(0); + + hdv->setFile(file,file->address()); + hdv->show(); +} void MainWindow::handleDiskItemSelectedDefaultOpen(DiskFile *disk, FileDescriptiveEntry fde) { GenericFile *file = disk->getFile(fde); + file->setFilename(AppleString(fde.filename).printable().trimmed()); if (dynamic_cast(file)) { BinaryFile *binfile = dynamic_cast(file); - binfile->setFilename(AppleString(fde.filename).printable().trimmed()); if (fde.lengthInSectors == 34 && (binfile->address() == 0x2000 || binfile->address() == 0x4000)) { @@ -120,10 +139,12 @@ void MainWindow::handleDiskItemSelectedDefaultOpen(DiskFile *disk, FileDescripti { ApplesoftFile *abf = dynamic_cast(file); abf->setFilename(AppleString(fde.filename).printable().trimmed()); + openInApplesoftFileViewer(abf); - ApplesoftFileViewer *afv = new ApplesoftFileViewer(0); - afv->setFile(abf); - afv->show(); + } else { + HexDumpViewer *hdv = new HexDumpViewer(0); + hdv->setFile(file,file->address()); + hdv->show(); } } diff --git a/src/ui/mainwindow.h b/src/ui/mainwindow.h index 2b890e7..8329b1d 100644 --- a/src/ui/mainwindow.h +++ b/src/ui/mainwindow.h @@ -5,6 +5,7 @@ #include "diskfile.h" #include "binaryfile.h" +#include "applesoftfile.h" namespace Ui { class MainWindow; @@ -25,6 +26,7 @@ public slots: void showLoadDialog(); private slots: + void handleDiskItemSelectedHexViewOpen(DiskFile *disk, FileDescriptiveEntry fde); void handleDiskItemSelectedDefaultOpen(DiskFile *disk, FileDescriptiveEntry fde); signals: @@ -35,6 +37,7 @@ signals: void diskFileUnloaded(); protected: + void openInApplesoftFileViewer(ApplesoftFile *file); void openInHiresViewWidget(BinaryFile *file, QString filename); void openInDisassemblerViewer(BinaryFile *file); private: diff --git a/src/ui/viewers/disassemblerviewer.cpp b/src/ui/viewers/disassemblerviewer.cpp index c2d3895..9d15469 100644 --- a/src/ui/viewers/disassemblerviewer.cpp +++ b/src/ui/viewers/disassemblerviewer.cpp @@ -57,7 +57,7 @@ void DisassemblerViewer::setFile(BinaryFile *file) { QString DisassemblerViewer::getPotentialLabel(quint16 address) { QString retval = QString(); - if (address == 0x03d0) { retval = "DOS_WARMSTART"; } + if (address == 0x03d0) { retval = "DOS_WARMSTART"; } else if (address == 0x03d3) { retval = "DOS_COLDSTART"; } else if (address == 0x03d6) { retval = "DOS_FILE_MANAGER"; } else if (address == 0x03d9) { retval = "DOS_RWTS"; } @@ -72,6 +72,739 @@ QString DisassemblerViewer::getPotentialLabel(quint16 address) { else if (address == 0x03fb) { retval = "DOS_NMI_HANDLER"; } else if (address == 0x03fe) { retval = "DOS_IRQ_HANDLER"; } + else if (address == 0x0400) { retval = "MON_LINE1"; } + + else if (address == 0x07f8) { retval = "MON_MSLOT"; } + else if (address == 0xc000) { retval = "MON_IOADR/MON_KBD"; } + else if (address == 0xc006) { retval = "MON_SETSLOTCXROM"; } + else if (address == 0xc007) { retval = "MON_SETINTCXROM"; } + else if (address == 0xc010) { retval = "MON_KBDSTRB"; } + else if (address == 0xc015) { retval = "MON_RDCXROM"; } + else if (address == 0xc018) { retval = "MON_RD80STORE"; } + else if (address == 0xc01c) { retval = "MON_RDPAGE2"; } + else if (address == 0xc020) { retval = "MON_TAPEOUT"; } + else if (address == 0xc030) { retval = "MON_SPKR"; } + else if (address == 0xc050) { retval = "MON_TXTCLR"; } + else if (address == 0xc051) { retval = "MON_TXTSET"; } + else if (address == 0xc052) { retval = "MON_MIXCLR"; } + else if (address == 0xc053) { retval = "MON_MIXSET"; } + else if (address == 0xc054) { retval = "MON_LOWSCR"; } + else if (address == 0xc055) { retval = "MON_HISCR"; } + else if (address == 0xc056) { retval = "MON_LORES"; } + else if (address == 0xc057) { retval = "MON_HIRES"; } + else if (address == 0xc058) { retval = "MON_SETAN0"; } + else if (address == 0xc059) { retval = "MON_CLRAN0"; } + else if (address == 0xc05a) { retval = "MON_SETAN1"; } + else if (address == 0xc05b) { retval = "MON_CLRAN1"; } + else if (address == 0xc05c) { retval = "MON_SETAN2"; } + else if (address == 0xc05d) { retval = "MON_CLRAN2"; } + else if (address == 0xc05e) { retval = "MON_SETAN3"; } + else if (address == 0xc05f) { retval = "MON_CLRAN3"; } + else if (address == 0xc060) { retval = "MON_TAPEIN"; } + else if (address == 0xc064) { retval = "MON_PADDL0"; } + else if (address == 0xc070) { retval = "MON_PTRIG"; } + else if (address == 0xcfff) { retval = "MON_CLRROM"; } + else if (address == 0xe000) { retval = "MON_BASIC"; } + else if (address == 0xe003) { retval = "MON_BASIC2"; } + + else if (address == 0xd365) { retval = "AS_GTFORPNT"; } + else if (address == 0xd39e) { retval = "AS_BLTU"; } + else if (address == 0xd39a) { retval = "AS_BLTU2"; } + else if (address == 0xd3d6) { retval = "AS_CHKMEM"; } + else if (address == 0xd3e3) { retval = "AS_REASON"; } + else if (address == 0xd410) { retval = "AS_MEMERR"; } + else if (address == 0xd412) { retval = "AS_ERROR"; } + else if (address == 0xd431) { retval = "AS_PRINT_ERROR_LINNUM"; } + else if (address == 0xd43c) { retval = "AS_RESTART"; } + else if (address == 0xd45c) { retval = "AS_NUMBERED_LINE"; } + else if (address == 0xd4b5) { retval = "AS_PUT_NEW_LINE"; } + else if (address == 0xd4f2) { retval = "AS_FIX_LINKS"; } + else if (address == 0xd52c) { retval = "AS_INLIN"; } + else if (address == 0xd52e) { retval = "AS_INLIN2"; } + else if (address == 0xd553) { retval = "AS_INCHR"; } + else if (address == 0xd559) { retval = "AS_PARSE_INPUT_LINE"; } + else if (address == 0xd56c) { retval = "AS_PARSE"; } + else if (address == 0xd61a) { retval = "AS_FNDLIN"; } + else if (address == 0xd61e) { retval = "AS_FL1"; } + else if (address == 0xd648) { retval = "AS_RTS1"; } + else if (address == 0xd649) { retval = "AS_NEW"; } + else if (address == 0xd64b) { retval = "AS_SCRTCH"; } + else if (address == 0xd665) { retval = "AS_SETPTRS"; } + else if (address == 0xd66a) { retval = "AS_CLEAR"; } + else if (address == 0xd66c) { retval = "AS_CLEARC"; } + else if (address == 0xd683) { retval = "AS_STKINI"; } + else if (address == 0xd696) { retval = "AS_RTS2"; } + else if (address == 0xd697) { retval = "AS_STXTPT"; } + else if (address == 0xd6a5) { retval = "AS_LIST"; } + else if (address == 0xd6da) { retval = "AS_LIST0"; } + else if (address == 0xd6fe) { retval = "AS_LIST1"; } + else if (address == 0xd702) { retval = "AS_LIST2"; } + else if (address == 0xd724) { retval = "AS_LIST3"; } + else if (address == 0xd72c) { retval = "AS_GETCHR"; } + else if (address == 0xd734) { retval = "AS_LIST4"; } + else if (address == 0xd766) { retval = "AS_FOR"; } + else if (address == 0xd7af) { retval = "AS_STEP"; } + else if (address == 0xd7d2) { retval = "AS_NEWSTT"; } + else if (address == 0xd805) { retval = "AS_TRACE_"; } + else if (address == 0xd826) { retval = "AS_GOEND"; } + else if (address == 0xd828) { retval = "AS_EXECUTE_STATEMENT"; } + else if (address == 0xd82a) { retval = "AS_EXECUTE_STATEMENT1"; } + else if (address == 0xd842) { retval = "AS_COLON_"; } + else if (address == 0xd846) { retval = "AS_SYNERR1"; } + else if (address == 0xd849) { retval = "AS_RESTORE"; } + else if (address == 0xd853) { retval = "AS_SETDA"; } + else if (address == 0xd857) { retval = "AS_RTS3"; } + else if (address == 0xd858) { retval = "AS_ISCNTC"; } + else if (address == 0xd863) { retval = "AS_CONTROL_C_TYPED"; } + else if (address == 0xd86e) { retval = "AS_STOP"; } + else if (address == 0xd870) { retval = "AS_END"; } + else if (address == 0xd871) { retval = "AS_END2"; } + else if (address == 0xd88a) { retval = "AS_END4"; } + else if (address == 0xd896) { retval = "AS_CONT"; } + else if (address == 0xd8af) { retval = "AS_RTS4"; } + else if (address == 0xd8b0) { retval = "AS_SAVE"; } + else if (address == 0xd8c9) { retval = "AS_LOAD"; } + else if (address == 0xd8F0) { retval = "AS_VARTIO"; } + else if (address == 0xd901) { retval = "AS_PROGIO"; } + else if (address == 0xd912) { retval = "AS_RUN"; } + else if (address == 0xd921) { retval = "AS_GOSUB"; } + else if (address == 0xd935) { retval = "AS_GO_TO_LINE"; } + else if (address == 0xd93e) { retval = "AS_GOTO"; } + else if (address == 0xd96a) { retval = "AS_RTS5"; } + else if (address == 0xd96b) { retval = "AS_POP"; } + else if (address == 0xd97c) { retval = "AS_UNDERR"; } + else if (address == 0xd981) { retval = "AS_SYNERR2"; } + else if (address == 0xd984) { retval = "AS_RETURN"; } + else if (address == 0xd995) { retval = "AS_DATA"; } + else if (address == 0xd998) { retval = "AS_ADDON"; } + else if (address == 0xd9a2) { retval = "AS_RTS6"; } + else if (address == 0xd9a3) { retval = "AS_DATAN"; } + else if (address == 0xd9a6) { retval = "AS_REMN"; } + else if (address == 0xd9c5) { retval = "AS_PULL3"; } + else if (address == 0xd9c9) { retval = "AS_IF"; } + else if (address == 0xd9dc) { retval = "AS_REM"; } + else if (address == 0xd9e1) { retval = "AS_IFTRUE"; } + else if (address == 0xd9ec) { retval = "AS_ONGOTO"; } + else if (address == 0xd9f4) { retval = "AS_ON1"; } + else if (address == 0xd9f8) { retval = "AS_ON2"; } + else if (address == 0xda0b) { retval = "AS_RTS7"; } + else if (address == 0xda0c) { retval = "AS_LINGET"; } + else if (address == 0xda46) { retval = "AS_LET"; } + else if (address == 0xda63) { retval = "AS_LET2"; } + else if (address == 0xda7a) { retval = "AS_LET_STRING"; } + else if (address == 0xda7b) { retval = "AS_PUTSTR"; } + else if (address == 0xdacf) { retval = "AS_PR_SPRING"; } + else if (address == 0xdad5) { retval = "AS_PRINT"; } + else if (address == 0xdad7) { retval = "AS_PRINT2"; } + else if (address == 0xdafb) { retval = "AS_CRDO"; } + else if (address == 0xdb00) { retval = "AS_NEGATE"; } + else if (address == 0xdb02) { retval = "AS_PR_RTS8"; } + else if (address == 0xdb03) { retval = "AS_PR_COMMA"; } + else if (address == 0xdb16) { retval = "AS_PR_TAB_OR_SPC"; } + else if (address == 0xdb2c) { retval = "AS_NXSPC"; } + else if (address == 0xdb2f) { retval = "AS_PR_NEXT_CHAR"; } + else if (address == 0xdb35) { retval = "AS_DOSPC"; } + else if (address == 0xdb3a) { retval = "AS_STROUT"; } + else if (address == 0xdb3d) { retval = "AS_STRPRT"; } + else if (address == 0xdb57) { retval = "AS_OUTSP"; } + else if (address == 0xdb5a) { retval = "AS_OUTQUES"; } + else if (address == 0xdb5c) { retval = "AS_OUTDO"; } + else if (address == 0xdb71) { retval = "AS_INPUTERR"; } + else if (address == 0xdb7b) { retval = "AS_READERR"; } + else if (address == 0xdb7f) { retval = "AS_ERLIN"; } + else if (address == 0xdb86) { retval = "AS_INPERR"; } + else if (address == 0xdb87) { retval = "AS_RESPERR"; } + else if (address == 0xdba0) { retval = "AS_GET"; } + else if (address == 0xdbb2) { retval = "AS_INPUT"; } + else if (address == 0xdbdc) { retval = "AS_NXIN"; } + else if (address == 0xdbe2) { retval = "AS_READ"; } + else if (address == 0xdbe9) { retval = "AS_INPUT_FLAG_ZERO"; } + else if (address == 0xdbeb) { retval = "AS_PROCESS_INPUT_LIST"; } + else if (address == 0xdbf1) { retval = "AS_PROCESS_INPUT_ITEM"; } + else if (address == 0xdC2b) { retval = "AS_INSTART"; } + else if (address == 0xdC69) { retval = "AS_INPUT_DATA"; } + else if (address == 0xdC72) { retval = "AS_INPUT_MORE"; } + else if (address == 0xdC99) { retval = "AS_INPFIN"; } + else if (address == 0xdCa0) { retval = "AS_FINDATA"; } + else if (address == 0xdCC6) { retval = "AS_INPDONE"; } + else if (address == 0xdcdf) { retval = "AS_ERR_EXTRA"; } + else if (address == 0xdcef) { retval = "AS_ERR_REENTRY"; } + else if (address == 0xdcf9) { retval = "AS_NEXT"; } + else if (address == 0xdcff) { retval = "AS_NEXT1"; } + else if (address == 0xdd02) { retval = "AS_NEXT2"; } + else if (address == 0xdd0d) { retval = "AS_GERR"; } + else if (address == 0xdd0f) { retval = "AS_NEXT3"; } + else if (address == 0xdd67) { retval = "AS_FRMNUM"; } + else if (address == 0xdd6a) { retval = "AS_CHKNUM"; } + else if (address == 0xdd6c) { retval = "AS_CHKSTR"; } + else if (address == 0xdd6d) { retval = "AS_CHKVAL"; } + else if (address == 0xdd78) { retval = "AS_JERROR"; } + else if (address == 0xdd7b) { retval = "AS_FRMEVL"; } + else if (address == 0xdd86) { retval = "AS_FRMEVL1"; } + else if (address == 0xdd95) { retval = "AS_FRMEVL2"; } + else if (address == 0xddcd) { retval = "AS_FRM_PRECEDENCE_TEST"; } + else if (address == 0xddd6) { retval = "AS_NXOP"; } + else if (address == 0xddd7) { retval = "AS_SAVOP"; } + else if (address == 0xdde4) { retval = "AS_FRM_RELATIONAL"; } + else if (address == 0xddf6) { retval = "AS_FRM_PREFNC"; } + else if (address == 0xddfd) { retval = "AS_FRM_RECURSE"; } + else if (address == 0xde0d) { retval = "AS_SNTXERR"; } + else if (address == 0xde10) { retval = "AS_FRM_STACK1"; } + else if (address == 0xde15) { retval = "AS_FRM_STACK2"; } + else if (address == 0xde20) { retval = "AS_FRM_STACK3"; } + else if (address == 0xde35) { retval = "AS_NOTMATH"; } + else if (address == 0xde38) { retval = "AS_GOEX"; } + else if (address == 0xde3a) { retval = "AS_FRM_PERFORM1"; } + else if (address == 0xde43) { retval = "AS_FRM_PERFORM2"; } + else if (address == 0xde5d) { retval = "AS_EXIT"; } + else if (address == 0xde60) { retval = "AS_FRM_ELEMENT"; } + else if (address == 0xde81) { retval = "AS_STRTXT"; } + else if (address == 0xde90) { retval = "AS_NOT_"; } + else if (address == 0xde98) { retval = "AS_EQUOP"; } + else if (address == 0xdea4) { retval = "AS_FN_"; } + else if (address == 0xdeab) { retval = "AS_SGN_"; } + else if (address == 0xdeb2) { retval = "AS_PARCHK"; } + else if (address == 0xdeb8) { retval = "AS_CHKCLS"; } + else if (address == 0xdebb) { retval = "AS_CHKOPN"; } + else if (address == 0xdebe) { retval = "AS_CHKCOM"; } + else if (address == 0xdec0) { retval = "AS_SYNCHR"; } + else if (address == 0xdec9) { retval = "AS_SYNERR"; } + else if (address == 0xdece) { retval = "AS_MIN"; } + else if (address == 0xded0) { retval = "AS_EQUL"; } + else if (address == 0xded5) { retval = "AS_FRM_VARIABLE"; } + else if (address == 0xded7) { retval = "AS_FRM_VARIABLE_CALL"; } + else if (address == 0xdef9) { retval = "AS_SCREEN"; } + else if (address == 0xdf0c) { retval = "AS_UNARY"; } + else if (address == 0xdf4f) { retval = "AS_OR"; } + else if (address == 0xdf55) { retval = "AS_AND"; } + else if (address == 0xdf5d) { retval = "AS_FALSE"; } + else if (address == 0xdf60) { retval = "AS_TRUE"; } + else if (address == 0xdf65) { retval = "AS_RELOPS"; } + else if (address == 0xdf7d) { retval = "AS_STRCMP"; } + else if (address == 0xdfaa) { retval = "AS_STRCMP1"; } + else if (address == 0xdfb0) { retval = "AS_NUMCMP"; } + else if (address == 0xdfb5) { retval = "AS_STRCMP2"; } + else if (address == 0xdfc1) { retval = "AS_CMPDONE"; } + else if (address == 0xdfcd) { retval = "AS_PDL"; } + else if (address == 0xdfd6) { retval = "AS_NXDIM"; } + else if (address == 0xdfd9) { retval = "AS_DIM"; } + else if (address == 0xdfe3) { retval = "AS_PTRGET"; } + else if (address == 0xdfe8) { retval = "AS_PTRGET2"; } + else if (address == 0xdfea) { retval = "AS_PTRGET3"; } + else if (address == 0xdff4) { retval = "AS_BADNAM"; } + else if (address == 0xdff7) { retval = "AS_NAMOK"; } + else if (address == 0xe007) { retval = "AS_PTRGET4"; } + else if (address == 0xe07d) { retval = "AS_ISLETC"; } + else if (address == 0xe087) { retval = "AS_NAME_NOT_FOUND"; } + else if (address == 0xe09c) { retval = "AS_MAKE_NEW_VARIABLE"; } + else if (address == 0xe0de) { retval = "AS_SET_VARPNT_AND_YA"; } + else if (address == 0xe0ed) { retval = "AS_GETARY"; } + else if (address == 0xe0ef) { retval = "AS_GETARY2"; } + else if (address == 0xe102) { retval = "AS_MAKINT"; } + else if (address == 0xe108) { retval = "AS_MKINT"; } + else if (address == 0xe10c) { retval = "AS_AYINT"; } + else if (address == 0xe119) { retval = "AS_MI1"; } + else if (address == 0xe11b) { retval = "AS_MI2"; } + else if (address == 0xe11e) { retval = "AS_ARRAY"; } + else if (address == 0xe196) { retval = "AS_SUBERR"; } + else if (address == 0xe199) { retval = "AS_IQERR"; } + else if (address == 0xe19b) { retval = "AS_JER"; } + else if (address == 0xe19e) { retval = "AS_USE_OLD_ARRAY"; } + else if (address == 0xe1b8) { retval = "AS_MAKE_NEW_ARRAY"; } + else if (address == 0xe24b) { retval = "AS_FIND_ARRAY_ELEMENT"; } + else if (address == 0xe253) { retval = "AS_FAE1"; } + else if (address == 0xe269) { retval = "AS_GSE"; } + else if (address == 0xe26c) { retval = "AS_GME"; } + else if (address == 0xe26f) { retval = "AS_FAE2"; } + else if (address == 0xe270) { retval = "AS_FAE3"; } + else if (address == 0xe2ac) { retval = "AS_RTS9"; } + else if (address == 0xe2ad) { retval = "AS_MULTIPLY_SUBSCRIPT"; } + else if (address == 0xe2b6) { retval = "AS_MULTIPLY_SUBS1"; } + else if (address == 0xe2de) { retval = "AS_FRE"; } + else if (address == 0xe2f2) { retval = "AS_GIVAYF"; } + else if (address == 0xe2ff) { retval = "AS_POS"; } + else if (address == 0xe301) { retval = "AS_SNGFLT"; } + else if (address == 0xe306) { retval = "AS_ERRDIR"; } + else if (address == 0xe30e) { retval = "AS_UNDFNC"; } + else if (address == 0xe313) { retval = "AS_DEF"; } + else if (address == 0xe341) { retval = "AS_FNC_"; } + else if (address == 0xe354) { retval = "AS_FUNCT"; } + else if (address == 0xe3af) { retval = "AS_FNCDATA"; } + else if (address == 0xe3c5) { retval = "AS_STR"; } + else if (address == 0xe3d5) { retval = "AS_STRINI"; } + else if (address == 0xe3dd) { retval = "AS_STRSPA"; } + else if (address == 0xe3e7) { retval = "AS_STRLIT"; } + else if (address == 0xe3ed) { retval = "AS_STRLT2"; } + else if (address == 0xe42a) { retval = "AS_PUTNEW"; } + else if (address == 0xe432) { retval = "AS_JERR"; } + else if (address == 0xe435) { retval = "AS_PUTEMP"; } + else if (address == 0xe452) { retval = "AS_GETSPA"; } + else if (address == 0xe484) { retval = "AS_GARBAG"; } + else if (address == 0xe488) { retval = "AS_FIND_HIGHEST_STRING"; } + else if (address == 0xe519) { retval = "AS_CHECK_SIMPLE_VARIABLE"; } + else if (address == 0xe523) { retval = "AS_CHECK_VARIABLE"; } + else if (address == 0xe552) { retval = "AS_CHECK_BUMP"; } + else if (address == 0xe55d) { retval = "AS_CHECK_EXIT"; } + else if (address == 0xe562) { retval = "AS_MOVE_HIGHEST_STRING_TO_TOP"; } + else if (address == 0xe597) { retval = "AS_CAT"; } + else if (address == 0xe5d4) { retval = "AS_MOVINS"; } + else if (address == 0xe5e2) { retval = "AS_MOVSTR"; } + else if (address == 0xe5e6) { retval = "AS_MOVSTR1"; } + else if (address == 0xe5fd) { retval = "AS_FRESTR"; } + else if (address == 0xe600) { retval = "AS_FREFAC"; } + else if (address == 0xe604) { retval = "AS_FRETMP"; } + else if (address == 0xe635) { retval = "AS_FRETMS"; } + else if (address == 0xe646) { retval = "AS_CHRSTR"; } + else if (address == 0xe65a) { retval = "AS_LEFTSTR"; } + else if (address == 0xe660) { retval = "AS_SUBSTRING1"; } + else if (address == 0xe667) { retval = "AS_SUBSTRING2"; } + else if (address == 0xe668) { retval = "AS_SUBSTRING3"; } + else if (address == 0xe686) { retval = "AS_RIGHTSTR"; } + else if (address == 0xe691) { retval = "AS_MIDSTR"; } + else if (address == 0xe6b9) { retval = "AS_SUBSTRING_SETUP"; } + else if (address == 0xe6d6) { retval = "AS_LEN"; } + else if (address == 0xe6dc) { retval = "AS_GETSTR"; } + else if (address == 0xe6e5) { retval = "AS_ASC"; } + else if (address == 0xe6f2) { retval = "AS_GOIQ"; } + else if (address == 0xe6f5) { retval = "AS_GTBYTC"; } + else if (address == 0xe6f8) { retval = "AS_GETBYT"; } + else if (address == 0xe6fb) { retval = "AS_CONINT"; } + else if (address == 0xe707) { retval = "AS_VAL"; } + else if (address == 0xe73d) { retval = "AS_POINT"; } + else if (address == 0xe746) { retval = "AS_GTNUM"; } + else if (address == 0xe74c) { retval = "AS_COMBYTE"; } + else if (address == 0xe752) { retval = "AS_GETADR"; } + else if (address == 0xe764) { retval = "AS_PEEK"; } + else if (address == 0xe77b) { retval = "AS_POKE"; } + else if (address == 0xe784) { retval = "AS_WAIT"; } + else if (address == 0xe79f) { retval = "AS_RTS10"; } + else if (address == 0xe7a0) { retval = "AS_FADDH"; } + else if (address == 0xe7a7) { retval = "AS_FSUB"; } + else if (address == 0xe7aa) { retval = "AS_FSUBT"; } + else if (address == 0xe7b9) { retval = "AS_FADD1"; } + else if (address == 0xe7be) { retval = "AS_FADD"; } + else if (address == 0xe7c1) { retval = "AS_FADDT"; } + else if (address == 0xe7ce) { retval = "AS_FADD2"; } + else if (address == 0xe7fa) { retval = "AS_FADD3"; } + else if (address == 0xe829) { retval = "AS_NORMALIZE_FAC1"; } + else if (address == 0xe82e) { retval = "AS_NORMALIZE_FAC2"; } + else if (address == 0xe84e) { retval = "AS_ZERO_FAC"; } + else if (address == 0xe850) { retval = "AS_STA_IN_FAC_SIGN_AND_EXP"; } + else if (address == 0xe852) { retval = "AS_STA_IN_FAC_SIGN"; } + else if (address == 0xe855) { retval = "AS_FADD4"; } + else if (address == 0xe874) { retval = "AS_NORMALIZE_FAC3"; } + else if (address == 0xe880) { retval = "AS_NORMALIZE_FAC4"; } + else if (address == 0xe88d) { retval = "AS_NORMALIZE_FAC5"; } + else if (address == 0xe88f) { retval = "AS_NORMALIZE_FAC6"; } + else if (address == 0xe89d) { retval = "AS_RTS11"; } + else if (address == 0xe89e) { retval = "AS_COMPLEMENT_FAC"; } + else if (address == 0xe8a4) { retval = "AS_COMPLEMENT_FAC_MANTISSA"; } + else if (address == 0xe8c6) { retval = "AS_INCREMENT_FAC_MANTISSA"; } + else if (address == 0xe8d4) { retval = "AS_RTS12"; } + else if (address == 0xe8d5) { retval = "AS_OVERFLOW"; } + else if (address == 0xe8da) { retval = "AS_SHIFT_RIGHT1"; } + else if (address == 0xe8dc) { retval = "AS_SHIFT_RIGHT2"; } + else if (address == 0xe8f0) { retval = "AS_SHIFT_RIGHT"; } + else if (address == 0xe8fd) { retval = "AS_SHIFT_RIGHT3"; } + else if (address == 0xe907) { retval = "AS_SHIFT_RIGHT4"; } + else if (address == 0xe911) { retval = "AS_SHIFT_RIGHT5"; } + else if (address == 0xe941) { retval = "AS_LOG"; } + else if (address == 0xe948) { retval = "AS_GIQ"; } + else if (address == 0xe94b) { retval = "AS_LOG2"; } + else if (address == 0xe97f) { retval = "AS_FMULT"; } + else if (address == 0xe982) { retval = "AS_FMULTT"; } + else if (address == 0xe9b0) { retval = "AS_MULTIPLY1"; } + else if (address == 0xe9b5) { retval = "AS_MULTIPLY2"; } + else if (address == 0xe9e2) { retval = "AS_RTS13"; } + else if (address == 0xe9e3) { retval = "AS_LOAD_ARG_FROM_YA"; } + else if (address == 0xea0e) { retval = "AS_ADD_EXPONENTS"; } + else if (address == 0xea10) { retval = "AS_ADD_EXPONENTS1"; } + else if (address == 0xea2b) { retval = "AS_OUTOFRNG"; } + else if (address == 0xea31) { retval = "AS_ZERO"; } + else if (address == 0xea36) { retval = "AS_JOV"; } + else if (address == 0xeae9) { retval = "AS_MUL10"; } + else if (address == 0xea55) { retval = "AS_DIV10"; } + else if (address == 0xea5e) { retval = "AS_DIV"; } + else if (address == 0xea66) { retval = "AS_FDIV"; } + else if (address == 0xeae6) { retval = "AS_COPY_RESULT_INTO_FAC"; } + else if (address == 0xeaf9) { retval = "AS_LOAD_FAC_FROM_YA"; } + else if (address == 0xeb1e) { retval = "AS_STORE_FAC_IN_TEMP2_ROUNDED"; } + else if (address == 0xeb21) { retval = "AS_STORE_FAC_IN_TEMP1_ROUNDED"; } + else if (address == 0xeb27) { retval = "AS_SETFOR"; } + else if (address == 0xeb2b) { retval = "AS_STORE_FAC_AT_YX_ROUNDED"; } + else if (address == 0xeb53) { retval = "AS_COPY_FAC_TO_ARG"; } + else if (address == 0xeb63) { retval = "AS_COPY_FAC_TO_ARG_ROUNDED"; } + else if (address == 0xeb71) { retval = "AS_RTS14"; } + else if (address == 0xeb72) { retval = "AS_ROUND_FAC"; } + else if (address == 0xeb7a) { retval = "AS_INCREMENT_MANTISSA"; } + else if (address == 0xeb82) { retval = "AS_SIGN"; } + else if (address == 0xeb86) { retval = "AS_SIGN1"; } + else if (address == 0xeb88) { retval = "AS_SIGN2"; } + else if (address == 0xeb8f) { retval = "AS_RTS15"; } + else if (address == 0xeb90) { retval = "AS_SGN"; } + else if (address == 0xeb9e) { retval = "AS_FLOAT"; } + else if (address == 0xeb9b) { retval = "AS_FLOAT1"; } + else if (address == 0xeba0) { retval = "AS_FLOAT2"; } + else if (address == 0xebaf) { retval = "AS_ABS"; } + else if (address == 0xebb2) { retval = "AS_FCOMP"; } + else if (address == 0xebb4) { retval = "AS_FCOMP2"; } + else if (address == 0xebf2) { retval = "AS_QINT"; } + else if (address == 0xec11) { retval = "AS_RTS16"; } + else if (address == 0xec12) { retval = "AS_QINT2"; } + else if (address == 0xec23) { retval = "AS_INT"; } + else if (address == 0xec40) { retval = "AS_QINT3"; } + else if (address == 0xec49) { retval = "AS_RTS17"; } + else if (address == 0xec4a) { retval = "AS_FIN"; } + else if (address == 0xec61) { retval = "AS_FIN1"; } + else if (address == 0xec64) { retval = "AS_FIN2"; } + else if (address == 0xec66) { retval = "AS_FIN3"; } + else if (address == 0xec87) { retval = "AS_FIN4"; } + else if (address == 0xec8a) { retval = "AS_FIN5"; } + else if (address == 0xec8c) { retval = "AS_FIN6"; } + else if (address == 0xec98) { retval = "AS_FIN10"; } + else if (address == 0xec9e) { retval = "AS_FIN7"; } + else if (address == 0xeca0) { retval = "AS_FIN8"; } + else if (address == 0xecc1) { retval = "AS_FIN9"; } + else if (address == 0xecd5) { retval = "AS_ADDACC"; } + else if (address == 0xece8) { retval = "AS_GETEXP"; } + else if (address == 0xed19) { retval = "AS_INPRT"; } + else if (address == 0xed24) { retval = "AS_LINPRT"; } + else if (address == 0xed2e) { retval = "AS_PRINT_FAC"; } + else if (address == 0xed31) { retval = "AS_GO_STROUT"; } + else if (address == 0xed34) { retval = "AS_FOUT"; } + else if (address == 0xed36) { retval = "AS_FOUT1"; } + else if (address == 0xed8c) { retval = "AS_FOUT2"; } + else if (address == 0xee17) { retval = "AS_FOUT3"; } + else if (address == 0xee57) { retval = "AS_FOUT4"; } + else if (address == 0xee5a) { retval = "AS_FOUT5"; } + else if (address == 0xee5f) { retval = "AS_FOUT6"; } + else if (address == 0xee8d) { retval = "AS_SQR"; } + else if (address == 0xee97) { retval = "AS_FPWRT"; } + else if (address == 0xeed0) { retval = "AS_NEGOP"; } + else if (address == 0xeeda) { retval = "AS_RTS18"; } + else if (address == 0xef09) { retval = "AS_EXP"; } + else if (address == 0xef5c) { retval = "AS_POLYNOMIAL_ODD"; } + else if (address == 0xef72) { retval = "AS_POLYNOMIAL"; } + else if (address == 0xef76) { retval = "AS_SERMAIN"; } + else if (address == 0xefa5) { retval = "AS_RTS19"; } + else if (address == 0xefae) { retval = "AS_RND"; } + else if (address == 0xefe7) { retval = "AS_GO_MOVMF"; } + else if (address == 0xefea) { retval = "AS_COS"; } + else if (address == 0xeff1) { retval = "AS_SIN"; } + else if (address == 0xf023) { retval = "AS_SIN1"; } + else if (address == 0xf026) { retval = "AS_SIN2"; } + else if (address == 0xf03a) { retval = "AS_TAN"; } + else if (address == 0xf062) { retval = "AS_TAN1"; } + else if (address == 0xf094) { retval = "AS_MS_EASTER_EGG_DATA"; } + else if (address == 0xf09e) { retval = "AS_ATN"; } + else if (address == 0xf0cd) { retval = "AS_RTS20"; } + else if (address == 0xf10b) { retval = "AS_GENERIC_CHRGET"; } + else if (address == 0xf128) { retval = "AS_COLD_START"; } + else if (address == 0xf1d5) { retval = "AS_CALL"; } + else if (address == 0xf1de) { retval = "AS_IN_NUMBER"; } + else if (address == 0xf1e5) { retval = "AS_PR_NUMBER"; } + else if (address == 0xf1ec) { retval = "AS_PLOTFNS"; } + else if (address == 0xf206) { retval = "AS_GOERR"; } + else if (address == 0xf209) { retval = "AS_LINCOOR"; } + else if (address == 0xf225) { retval = "AS_PLOT"; } + else if (address == 0xf232) { retval = "AS_HLIN"; } + else if (address == 0xf241) { retval = "AS_VLIN"; } + else if (address == 0xf24f) { retval = "AS_COLOR"; } + else if (address == 0xf256) { retval = "AS_VTAB"; } + else if (address == 0xf262) { retval = "AS_SPEED"; } + else if (address == 0xf26d) { retval = "AS_TRACE"; } + else if (address == 0xf26f) { retval = "AS_NOTRACE"; } + else if (address == 0xf273) { retval = "AS_NORMAL"; } + else if (address == 0xf277) { retval = "AS_INVERSE"; } + else if (address == 0xf280) { retval = "AS_FLASH"; } + else if (address == 0xf286) { retval = "AS_HIMEM"; } + else if (address == 0xf296) { retval = "AS_JMM"; } + else if (address == 0xf299) { retval = "AS_SETHI"; } + else if (address == 0xf2a6) { retval = "AS_LOMEM"; } + else if (address == 0xf2cb) { retval = "AS_ONERR"; } + else if (address == 0xf2e9) { retval = "AS_HANDLERR"; } + else if (address == 0xf318) { retval = "AS_RESUME"; } + else if (address == 0xf32e) { retval = "AS_JSYN"; } + else if (address == 0xf331) { retval = "AS_DEL"; } + else if (address == 0xf390) { retval = "AS_GR"; } + else if (address == 0xf399) { retval = "AS_TEXT"; } + else if (address == 0xf39f) { retval = "AS_STORE"; } + else if (address == 0xf3bc) { retval = "AS_RECALL"; } + else if (address == 0xf3d8) { retval = "AS_HGR2"; } + else if (address == 0xf3e2) { retval = "AS_HGR"; } + else if (address == 0xf3ea) { retval = "AS_SETHPG"; } + else if (address == 0xf3f2) { retval = "AS_HCLR"; } + else if (address == 0xf3f6) { retval = "AS_BKGND"; } + else if (address == 0xf411) { retval = "AS_HPOSN"; } + else if (address == 0xf457) { retval = "AS_HPLOT0"; } + else if (address == 0xf465) { retval = "AS_MOVE_LEFT_OR_RIGHT"; } + else if (address == 0xf47e) { retval = "AS_COLOR_SHIFT"; } + else if (address == 0xf48a) { retval = "AS_MOVE_RIGHT"; } + else if (address == 0xf49c) { retval = "AS_LRUDX1"; } + else if (address == 0xf49d) { retval = "AS_LRUDX2"; } + else if (address == 0xf4b3) { retval = "AS_LRUD1"; } + else if (address == 0xf4b4) { retval = "AS_LRUD2"; } + else if (address == 0xf4c4) { retval = "AS_LRUD3"; } + else if (address == 0xf4c8) { retval = "AS_LRUD4"; } + else if (address == 0xf4d3) { retval = "AS_MOVE_UP_OR_DOWN"; } + else if (address == 0xf505) { retval = "AS_MOVE_DOWN"; } + else if (address == 0xf530) { retval = "AS_HLINRL"; } + else if (address == 0xf53a) { retval = "AS_HGLN"; } + else if (address == 0xf57c) { retval = "AS_MOVEX"; } + else if (address == 0xf581) { retval = "AS_MOVEX2"; } + else if (address == 0xf5cb) { retval = "AS_HFIND"; } + else if (address == 0xf600) { retval = "AS_RTS22"; } + else if (address == 0xf601) { retval = "AS_DRAW0"; } + else if (address == 0xf605) { retval = "AS_DRAW1"; } + else if (address == 0xf65d) { retval = "AS_XDRAW0"; } + else if (address == 0xf661) { retval = "AS_XDRAW1"; } + else if (address == 0xf6b9) { retval = "AS_HFNS"; } + else if (address == 0xf6e6) { retval = "AS_GGERR"; } + else if (address == 0xf6e9) { retval = "AS_HCOLOR"; } + else if (address == 0xf6f5) { retval = "AS_RTS23"; } + else if (address == 0xf6fc) { retval = "AS_COLORTBL"; } + else if (address == 0xf6fe) { retval = "AS_HPLOT"; } + else if (address == 0xf721) { retval = "AS_ROT"; } + else if (address == 0xf727) { retval = "AS_SCALE"; } + else if (address == 0xf72d) { retval = "AS_DRAWPNT"; } + else if (address == 0xf769) { retval = "AS_DRAW"; } + else if (address == 0xf76f) { retval = "AS_XDRAW"; } + else if (address == 0xf775) { retval = "AS_SHLOAD"; } + else if (address == 0xf7bc) { retval = "AS_TAPEPNT"; } + else if (address == 0xf7d9) { retval = "AS_GETARYPT"; } + else if (address == 0xf7e7) { retval = "AS_HTAB"; } + + + + else if (address == 0xf800) { retval = "MON_PLOT"; } + else if (address == 0xf80c) { retval = "MON_RTMASK"; } + else if (address == 0xf80e) { retval = "MON_PLOT1"; } + else if (address == 0xf831) { retval = "MON_RTS1"; } + else if (address == 0xf832) { retval = "MON_CLRSCR"; } + else if (address == 0xf836) { retval = "MON_CLRTOP"; } + else if (address == 0xf838) { retval = "MON_CLRSC2"; } + else if (address == 0xf83c) { retval = "MON_CLRSC3"; } + else if (address == 0xf847) { retval = "MON_GBASCALC"; } + else if (address == 0xf856) { retval = "MON_GBCALC"; } + else if (address == 0xf85f) { retval = "MON_NXTCOL"; } + else if (address == 0xf864) { retval = "MON_SETCOL"; } + else if (address == 0xf871) { retval = "MON_SCRN"; } + else if (address == 0xf879) { retval = "MON_SCRN2"; } + else if (address == 0xf87f) { retval = "MON_RTMSKZ"; } + else if (address == 0xf882) { retval = "MON_INDS1"; } + else if (address == 0xf88c) { retval = "MON_INDS2"; } + else if (address == 0xf89b) { retval = "MON_IEVEN"; } + else if (address == 0xf8a5) { retval = "MON_ERR"; } + else if (address == 0xf8a9) { retval = "MON_GETFMT"; } + else if (address == 0xf8be) { retval = "MON_MNNDX1"; } + else if (address == 0xf8c2) { retval = "MON_MNNDX2"; } + else if (address == 0xf8c9) { retval = "MON_NBBDX3"; } + else if (address == 0xf8d0) { retval = "MON_UBSDSP"; } + else if (address == 0xf8d4) { retval = "MON_PRINTOP"; } + else if (address == 0xf8db) { retval = "MON_PRNTBL"; } + else if (address == 0xf8f5) { retval = "MON_PRMN1"; } + else if (address == 0xf8f9) { retval = "MON_PRMN2"; } + else if (address == 0xf910) { retval = "MON_PRADR1"; } + else if (address == 0xf914) { retval = "MON_PRADR2"; } + else if (address == 0xf926) { retval = "MON_PRADR3"; } + else if (address == 0xf92a) { retval = "MON_PRADR4"; } + else if (address == 0xf930) { retval = "MON_PRADR5"; } + else if (address == 0xf938) { retval = "MON_RELADR"; } + else if (address == 0xf940) { retval = "MON_PRNTYX"; } + else if (address == 0xf941) { retval = "MON_PRNTAX"; } + else if (address == 0xf944) { retval = "MON_PRNTX"; } + else if (address == 0xf948) { retval = "MON_PRBLNK"; } + else if (address == 0xf94a) { retval = "MON_PRBL2"; } + else if (address == 0xf94c) { retval = "MON_PRBL3"; } + else if (address == 0xf953) { retval = "MON_PCADJ"; } + else if (address == 0xf954) { retval = "MON_PCADJ2"; } + else if (address == 0xf956) { retval = "MON_PCADJ3"; } + else if (address == 0xf95c) { retval = "MON_PCADJ4"; } + else if (address == 0xf961) { retval = "MON_RTS2"; } + else if (address == 0xf962) { retval = "MON_FMT1"; } + else if (address == 0xf9a6) { retval = "MON_FMT2"; } + else if (address == 0xf9b4) { retval = "MON_CHAR1"; } + else if (address == 0xf9ba) { retval = "MON_CHAR2"; } + else if (address == 0xf9c0) { retval = "MON_MNEML"; } + else if (address == 0xfa00) { retval = "MON_MNEMR"; } + else if (address == 0xfa40) { retval = "MON_IRQ"; } + else if (address == 0xfa4c) { retval = "MON_BREAK"; } + else if (address == 0xfa59) { retval = "MON_OLDBRK"; } + else if (address == 0xfa62) { retval = "MON_RESET"; } + else if (address == 0xfa6f) { retval = "MON_INITAN"; } + else if (address == 0xfa81) { retval = "MON_NEWMON"; } + else if (address == 0xfa9b) { retval = "MON_FIXSEV"; } + else if (address == 0xfaa3) { retval = "MON_NOFIX"; } + else if (address == 0xfaa6) { retval = "MON_PWRUP"; } + else if (address == 0xfaa9) { retval = "MON_SETPG3"; } + else if (address == 0xfaab) { retval = "MON_SETPLP"; } + else if (address == 0xfaba) { retval = "MON_SLOOP"; } + else if (address == 0xfac7) { retval = "MON_NXTBYT"; } + else if (address == 0xfad7) { retval = "MON_REGDSP"; } + else if (address == 0xfada) { retval = "MON_RGDPS1"; } + else if (address == 0xfae4) { retval = "MON_RDSP1"; } + else if (address == 0xfafd) { retval = "MON_PWRCON"; } + else if (address == 0xfb02) { retval = "MON_DISKID"; } + else if (address == 0xfb09) { retval = "MON_TITLE"; } + else if (address == 0xfb11) { retval = "MON_XLTBL"; } + else if (address == 0xfb19) { retval = "MON_RTBL"; } + else if (address == 0xfb1e) { retval = "MON_PREAD"; } + else if (address == 0xfb25) { retval = "MON_PREAD2"; } + else if (address == 0xfb2e) { retval = "MON_RTS2D"; } + else if (address == 0xfb2f) { retval = "MON_INIT"; } + else if (address == 0xfb39) { retval = "MON_SETTXT"; } + else if (address == 0xfb40) { retval = "MON_SETGR"; } + else if (address == 0xfb4b) { retval = "MON_SETWND"; } + else if (address == 0xfb5b) { retval = "MON_TABV"; } + else if (address == 0xfb60) { retval = "MON_APPLEII"; } + else if (address == 0xfb65) { retval = "MON_STITLE"; } + else if (address == 0xfb6f) { retval = "MON_SETPWRC"; } + else if (address == 0xfb78) { retval = "MON_VIDWAIT"; } + else if (address == 0xfb88) { retval = "MON_KBDWAIT"; } + else if (address == 0xfb94) { retval = "MON_NOWAIT"; } + else if (address == 0xfb97) { retval = "MON_ESCOLD"; } + else if (address == 0xfb9b) { retval = "MON_ESCNOW"; } + else if (address == 0xfba5) { retval = "MON_ESCNEW"; } + else if (address == 0xfbb3) { retval = "MON_VERSION"; } + else if (address == 0xfbb4) { retval = "MON_GOTOCX"; } + else if (address == 0xfbc1) { retval = "MON_BASCALC"; } + else if (address == 0xfbd0) { retval = "MON_BASCLC2"; } + else if (address == 0xfbd9) { retval = "MON_BELL1"; } + else if (address == 0xfbe4) { retval = "MON_BELL2"; } + else if (address == 0xfbef) { retval = "MON_RTS2B"; } + else if (address == 0xfbf0) { retval = "MON_STORADV"; } + else if (address == 0xfbf4) { retval = "MON_ADVANCE"; } + else if (address == 0xfbfc) { retval = "MON_RTS3"; } + else if (address == 0xfbfd) { retval = "MON_VIDOUT"; } + else if (address == 0xfc10) { retval = "MON_BS"; } + else if (address == 0xfc1a) { retval = "MON_UP"; } + else if (address == 0xfc22) { retval = "MON_VTAB"; } + else if (address == 0xfc24) { retval = "MON_VTABZ"; } + else if (address == 0xfc2b) { retval = "MON_RTS4"; } + else if (address == 0xfc2c) { retval = "MON_ESC1"; } + else if (address == 0xfc42) { retval = "MON_CLREOP"; } + else if (address == 0xfc58) { retval = "MON_HOME"; } + else if (address == 0xfc62) { retval = "MON_CR"; } + else if (address == 0xfc66) { retval = "MON_LF"; } + else if (address == 0xfc70) { retval = "MON_SCROLL"; } + else if (address == 0xfc72) { retval = "MON_XGOTOCX"; } + else if (address == 0xfc84) { retval = "MON_RDCX"; } + else if (address == 0xfc91) { retval = "MON_ISSLOTS"; } + else if (address == 0xfc99) { retval = "MON_ISPAGE1"; } + else if (address == 0xfc9c) { retval = "MON_CLREOL"; } + else if (address == 0xfc9e) { retval = "MON_CLREOLZ"; } + else if (address == 0xfca8) { retval = "MON_WAIT"; } + else if (address == 0xfca9) { retval = "MON_WAIT2"; } + else if (address == 0xfcaa) { retval = "MON_WAIT3"; } + else if (address == 0xfcb4) { retval = "MON_NXTA4"; } + else if (address == 0xfcba) { retval = "MON_NXTA1"; } + else if (address == 0xfcc8) { retval = "MON_RTS4B"; } + else if (address == 0xfcc9) { retval = "MON_HEADR"; } + else if (address == 0xfcd6) { retval = "MON_WRBIT"; } + else if (address == 0xfcdb) { retval = "MON_ZERDLY"; } + else if (address == 0xfce2) { retval = "MON_ONEDLY"; } + else if (address == 0xfce5) { retval = "MON_WRTAPE"; } + else if (address == 0xfcec) { retval = "MON_RDBYTE"; } + else if (address == 0xfcee) { retval = "MON_RDBYT2"; } + else if (address == 0xfcfa) { retval = "MON_READ2BIT"; } + else if (address == 0xfcfd) { retval = "MON_RDBIT"; } + else if (address == 0xfd0c) { retval = "MON_RDKEY"; } + else if (address == 0xfd18) { retval = "MON_KEYIN"; } + else if (address == 0xfd21) { retval = "MON_RDESC"; } + else if (address == 0xfd2f) { retval = "MON_ESC"; } + else if (address == 0xfd35) { retval = "MON_RDCHAR"; } + else if (address == 0xfd3d) { retval = "MON_NOTCR"; } + else if (address == 0xfd5f) { retval = "MON_NOTCR1"; } + else if (address == 0xfd62) { retval = "MON_CANCEL"; } + else if (address == 0xfd67) { retval = "MON_GETLNZ"; } + else if (address == 0xfd6a) { retval = "MON_GETLN"; } + else if (address == 0xfd71) { retval = "MON_BCKSPC"; } + else if (address == 0xfd75) { retval = "MON_NXTCHAR"; } + else if (address == 0xfd7e) { retval = "MON_CAPTST"; } + else if (address == 0xfd84) { retval = "MON_ADDINP"; } + else if (address == 0xfd8e) { retval = "MON_CROUT"; } + else if (address == 0xfd92) { retval = "MON_PRA1"; } + else if (address == 0xfd96) { retval = "MON_PRYX2"; } + else if (address == 0xfda3) { retval = "MON_XAMB"; } + else if (address == 0xfdad) { retval = "MON_MOD8CHK"; } + else if (address == 0xfdb3) { retval = "MON_XAM"; } + else if (address == 0xfdb6) { retval = "MON_DATAOUT"; } + else if (address == 0xfdc5) { retval = "MON_RTS4C"; } + else if (address == 0xfdc6) { retval = "MON_XAMPM"; } + else if (address == 0xfdd1) { retval = "MON_ADD"; } + else if (address == 0xfdda) { retval = "MON_PRBYTE"; } + else if (address == 0xfde3) { retval = "MON_PRHEX"; } + else if (address == 0xfde5) { retval = "MON_PRHEXZ"; } + else if (address == 0xfded) { retval = "MON_COUT"; } + else if (address == 0xfdf0) { retval = "MON_COUT1"; } + else if (address == 0xfdf6) { retval = "MON_COUTZ"; } + else if (address == 0xfe00) { retval = "MON_BLI"; } + else if (address == 0xfe04) { retval = "MON_BLANK"; } + else if (address == 0xfe0b) { retval = "MON_STOR"; } + else if (address == 0xfe17) { retval = "MON_RTS5"; } + else if (address == 0xfe18) { retval = "MON_SETMODE"; } + else if (address == 0xfe1d) { retval = "MON_SETMDZ"; } + else if (address == 0xfe20) { retval = "MON_LT"; } + else if (address == 0xfe22) { retval = "MON_LT2"; } + else if (address == 0xfe2c) { retval = "MON_MOVE"; } + else if (address == 0xfe36) { retval = "MON_VFY"; } + else if (address == 0xfe58) { retval = "MON_VFYOK"; } + else if (address == 0xfe5e) { retval = "MON_LIST"; } + else if (address == 0xfe63) { retval = "MON_LIST2"; } + else if (address == 0xfe75) { retval = "MON_A1PC"; } + else if (address == 0xfe78) { retval = "MON_A1PCLP"; } + else if (address == 0xfe7f) { retval = "MON_A1PCRTS"; } + else if (address == 0xfe80) { retval = "MON_SETINV"; } + else if (address == 0xfe84) { retval = "MON_SETNORM"; } + else if (address == 0xfe86) { retval = "MON_SETIFLG"; } + else if (address == 0xfe89) { retval = "MON_SETKBD"; } + else if (address == 0xfe8b) { retval = "MON_INPORT"; } + else if (address == 0xfe8d) { retval = "MON_INPRT"; } + else if (address == 0xfe93) { retval = "MON_SETVID"; } + else if (address == 0xfe95) { retval = "MON_OUTPORT"; } + else if (address == 0xfe97) { retval = "MON_OUTPRT"; } + else if (address == 0xfe9b) { retval = "MON_IOPRT"; } + else if (address == 0xfea7) { retval = "MON_IOPRT1"; } + else if (address == 0xfea9) { retval = "MON_IOPRT2"; } + else if (address == 0xfeaf) { retval = "MON_CKSUMFIX"; } + else if (address == 0xfeb0) { retval = "MON_XBASIC"; } + else if (address == 0xfeb3) { retval = "MON_BASCONT"; } + else if (address == 0xfeb6) { retval = "MON_GO"; } + else if (address == 0xfebf) { retval = "MON_REGZ"; } + else if (address == 0xfec2) { retval = "MON_TRACE"; } + else if (address == 0xfec4) { retval = "MON_STEPZ"; } + else if (address == 0xfeca) { retval = "MON_USR"; } + else if (address == 0xfecd) { retval = "MON_WRITE"; } + else if (address == 0xfed4) { retval = "MON_WR1"; } + else if (address == 0xfeed) { retval = "MON_WRBYTE"; } + else if (address == 0xfeef) { retval = "MON_WRBYT2"; } + else if (address == 0xfef6) { retval = "MON_CRMON"; } + else if (address == 0xfffd) { retval = "MON_READ"; } + else if (address == 0xff0a) { retval = "MON_RD2"; } + else if (address == 0xff16) { retval = "MON_RD3"; } + else if (address == 0xff2d) { retval = "MON_PRERR"; } + else if (address == 0xff3a) { retval = "MON_BELL"; } + else if (address == 0xff3f) { retval = "MON_RESTORE"; } + else if (address == 0xff44) { retval = "MON_RESTR1"; } + else if (address == 0xff4a) { retval = "MON_SAVE"; } + else if (address == 0xff4c) { retval = "MON_SAV1"; } + else if (address == 0xff59) { retval = "MON_OLDRST"; } + else if (address == 0xff65) { retval = "MON_MON"; } + else if (address == 0xff69) { retval = "MON_MONZ"; } + else if (address == 0xff73) { retval = "MON_NXTITM"; } + else if (address == 0xff7a) { retval = "MON_CRSRCH"; } + else if (address == 0xff8a) { retval = "MON_DIG"; } + else if (address == 0xff90) { retval = "MON_NXTBIT"; } + else if (address == 0xff98) { retval = "MON_NXTBAS"; } + else if (address == 0xffa2) { retval = "MON_NXTBS2"; } + else if (address == 0xffa7) { retval = "MON_GETNUM"; } + else if (address == 0xffad) { retval = "MON_NXTCHR"; } + else if (address == 0xffbe) { retval = "MON_TOSUB"; } + else if (address == 0xffc7) { retval = "MON_ZMODE"; } + else if (address == 0xffcc) { retval = "MON_CHRTBL"; } + else if (address == 0xffe3) { retval = "MON_SUBTBL"; } + + return retval; } diff --git a/src/ui/viewers/hexdumpviewer.cpp b/src/ui/viewers/hexdumpviewer.cpp new file mode 100644 index 0000000..9749a20 --- /dev/null +++ b/src/ui/viewers/hexdumpviewer.cpp @@ -0,0 +1,58 @@ +#include "hexdumpviewer.h" +#include "ui_hexdumpviewer.h" + +HexDumpViewer::HexDumpViewer(QWidget *parent) : + QWidget(parent), + ui(new Ui::HexDumpViewer) +{ + ui->setupUi(this); + m_offset = 0; + + QString title = QString("Hex Viewer"); + setWindowTitle(title); +} + +HexDumpViewer::~HexDumpViewer() +{ + delete ui; +} + +void HexDumpViewer::setFile(GenericFile *file, quint16 offset) +{ + QString title = QString("Hex Viewer: %1").arg(file->filename()); + setWindowTitle(title); + + m_offset = offset; + + QStringList lines; + + QByteArray data = file->data(); + + //TODO: Align text from x00 to xFF. Currently it will start with whatever the offset is. + + quint16 addr = m_offset; + for (int idx = 0; idx <= data.count()/16; idx++) { + QString line = QString("%1: ").arg(m_offset+(idx*16),4,16,QChar('0')); + for (int jdx = (idx*16); jdx < (idx*16)+16; jdx++) { + addr++; + if (jdx < data.count()) { + line += QString(" %1").arg((quint8) data[jdx],2,16,QChar('0')); + if ((addr % 16) == 0) { line += " "; } + } + } + if (line.length() > 6) { + lines.append(line); + } + } + setData(qPrintable(lines.join("\n").toUpper())); +} + +void HexDumpViewer::setData(QByteArray data) +{ + ui->textArea->setText(data); +} + +void HexDumpViewer::setText(QString text) +{ + ui->textArea->setHtml(text); +} diff --git a/src/ui/viewers/hexdumpviewer.h b/src/ui/viewers/hexdumpviewer.h new file mode 100644 index 0000000..0fb3e39 --- /dev/null +++ b/src/ui/viewers/hexdumpviewer.h @@ -0,0 +1,33 @@ +#ifndef HEXDUMPVIEWER_H +#define HEXDUMPVIEWER_H + +#include "genericfile.h" + +#include +#include +#include + + +namespace Ui { +class HexDumpViewer; +} + +class HexDumpViewer : public QWidget +{ + Q_OBJECT + +public: + explicit HexDumpViewer(QWidget *parent = 0); + ~HexDumpViewer(); + + void setFile(GenericFile *file, quint16 offset = 0); + void setData(QByteArray data); + void setText(QString text); + +private: + Ui::HexDumpViewer *ui; + + quint16 m_offset; +}; + +#endif // HEXDUMPVIEWER_H diff --git a/src/ui/viewers/hexdumpviewer.ui b/src/ui/viewers/hexdumpviewer.ui new file mode 100644 index 0000000..e0fd51d --- /dev/null +++ b/src/ui/viewers/hexdumpviewer.ui @@ -0,0 +1,31 @@ + + + HexDumpViewer + + + + 0 + 0 + 836 + 540 + + + + Form + + + + + + + Courier + 12 + + + + + + + + +