X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=emul%2Femul.cpp;h=9be4ed23071f03c35451683e581217897d507aff;hb=16e8698d6693cce1eb0f7bb174f9acb1f1c00a78;hp=c68fa8d6754455d7aa6de66b4069d9252e24d34a;hpb=70ef586aed3922433460eaf19125378f8c996743;p=bertos.git diff --git a/emul/emul.cpp b/emul/emul.cpp index c68fa8d6..9be4ed23 100755 --- a/emul/emul.cpp +++ b/emul/emul.cpp @@ -3,7 +3,7 @@ * * * \version $Id$ @@ -15,6 +15,15 @@ /*#* *#* $Log$ + *#* Revision 1.4 2006/02/24 01:35:40 bernie + *#* Update for new emulator. + *#* + *#* Revision 1.3 2006/02/20 02:00:40 bernie + *#* Port to Qt 4.1. + *#* + *#* Revision 1.2 2006/01/16 03:51:51 bernie + *#* Fix boilerplate. + *#* *#* Revision 1.1 2006/01/16 03:37:12 bernie *#* Add emulator skeleton. *#* @@ -22,18 +31,44 @@ #include "emul.h" #include "emulwin.h" +#include + +#include +#if CONFIG_KERNEL + #include +#endif + -#include #include // std::exit() +#if _QT < 4 + #include +#else + #include +#endif + + /// The global emulator instance. Emulator *emul; +#if CONFIG_KERNEL + #include + + /// List of process stacks + List StackFreeList; + + // HACK: Reserve 64KB of stack space for kernel processes + const int NPROC = 8; + int stacks[NPROC][(64 * 1024) / sizeof(int)]; +#endif + Emulator::Emulator(int &argc, char **argv) : emulApp(new QApplication(argc, argv)), emulWin(new EmulWin(this)) { - emulApp->setMainWidget(emulWin); + #if QT_VERSION < ((4 << 16) + (0 << 8) + 0) + emulApp->setMainWidget(emulWin); + #endif emulWin->show(); } @@ -46,7 +81,7 @@ Emulator::~Emulator() } -void Emulator::quit() +NORETURN void Emulator::quit() { // WHAT A KLUDGE! this->~Emulator(); @@ -56,19 +91,27 @@ void Emulator::quit() exit(0); } +MOD_DEFINE(emul) /// Main emulator entry point. extern "C" void emul_init(int *argc, char *argv[]) { - ASSERT(!emul); - // setup global emulator pointer emul = new Emulator(*argc, argv); + +#if CONFIG_KERNEL + LIST_INIT(&StackFreeList); + for (int i = 0; i < NPROC; i++) + ADDTAIL(&StackFreeList, (Node *)stacks[i]); +#endif + + MOD_INIT(emul); } extern "C" void emul_cleanup() { - ASSERT(emul); + MOD_CLEANUP(emul); + delete emul; emul = NULL; }