X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=emul%2Femul.cpp;h=ad081db12501030ad49a1ef04ca4c1321a060283;hb=e5523f6098d2f4d51c838459ce83423152cc8692;hp=d3336c68f645bde74c8181c157ed3b74491d5f61;hpb=669ef4744ad8c96dbd79e2bd8613bddf1121511f;p=bertos.git diff --git a/emul/emul.cpp b/emul/emul.cpp old mode 100755 new mode 100644 index d3336c68..ad081db1 --- a/emul/emul.cpp +++ b/emul/emul.cpp @@ -1,9 +1,34 @@ /** * \file * * * \version $Id$ @@ -15,6 +40,18 @@ /*#* *#* $Log$ + *#* Revision 1.6 2006/05/28 12:17:57 bernie + *#* Drop almost all the Qt3 cruft. + *#* + *#* Revision 1.5 2006/05/27 22:30:56 bernie + *#* Add some delay to slow things down. + *#* + *#* 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. *#* @@ -25,18 +62,37 @@ #include "emul.h" #include "emulwin.h" +#include + +#include +#if CONFIG_KERNEL + #include +#endif + -#include #include // std::exit() +#include + + /// 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); emulWin->show(); } @@ -49,7 +105,7 @@ Emulator::~Emulator() } -void Emulator::quit() +NORETURN void Emulator::quit() { // WHAT A KLUDGE! this->~Emulator(); @@ -59,19 +115,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; } @@ -80,5 +144,6 @@ extern "C" void emul_idle() { // We process GUI events when the application is idle. emul->emulApp->processEvents(); + usleep(1000); }