⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mones.cpp

📁 MONA是为数不多的C++语言编写的一个很小的操作系统
💻 CPP
字号:
/*!
  \file  mones.cpp
  \brief Code:Mones儊僀儞

  Copyright (c) 2004 Yamami
  All rights reserved.
  License=MIT/X Licnese

  \author  Yamami
  \version $Revision: 1.3 $
  \date   create:2004/08/08 update:$Date: 2004/10/31 14:29:43 $
*/


//偙偙偱丄Mones偺僌儘乕僶儖僆僽僕僃僋僩傪僀儞僗僞儞僗壔偡傞
#define MONES_GLOBAL_VALUE_DEFINED
#include "MonesGlobal.h"

#include <monapi.h>
#include "AbstractMonic.h"
#include "MoEther.h"
#include "MonesConfig.h"
#include "MonesLoader.h"


using namespace MonAPI;


/*!
    \brief MonaMain
        Code:Mones儊僀儞

    \param List<char*>* pekoe

    \author  Yamami
    \date    create:2004/08/08 update:2004/10/31
*/
int MonaMain(List<char*>* pekoe)
{
    int ret;
    //syscall_get_io  
    //偙偺僾儘僙僗摦嶌拞偼丄IO傪摿尃儗儀儖3傑偱嫋壜偡傞
    syscall_get_io();
    
    // NIC偺僀儞僗僞儞僗壔
    // MonesLoader僋儔僗宱桼偱僀儞僗僞儞僗壔偡傞丅
    AbstractMonic* insAbstractNic;
    
    MonesLoader* insNicLoader = new MonesLoader();
    insNicLoader->setup();
    insAbstractNic = insNicLoader->getNicInstance();
    //NIC偺儘乕僪偵幐攕偟偨応崌偼丄Mones廔椆
    if(insAbstractNic == 0){
        printf("NIC Error Mones Quit \n");
        return 0;
    }
    
    //Ne2000MoNic* insAbstractNic = new Ne2000MoNic();
    
    
    //Ether僋儔僗偺僀儞僗僞儞僗壔
    g_MoEther = new MoEther();
    g_MoEther->etherInit(insAbstractNic);

    //ARP僋儔僗偺僀儞僗僞儞僗壔
    g_MoArp = new MoArp();
    g_MoArp->initArp(insAbstractNic);

    //IP僋儔僗偺僀儞僗僞儞僗壔
    g_MoIp = new MoIp();
    g_MoIp->initIp(insAbstractNic);


    // initilize destination list
    //List<dword>* destList = new HList<dword>();
    MessageInfo info;

    // Server start ok
    dword targetID = Message::lookupMainThread("MONITOR.BIN");
    if (targetID == 0xFFFFFFFF)
    {
        printf("Mones:INIT not found\n");
        exit(1);
    }

    // create message
    Message::create(&info, MSG_SERVER_START_OK, 0, 0, 0, NULL);

    // send
    if (Message::send(targetID, &info)) {
        printf("Mones:INIT error\n");
    }

    //僱僢僩儚乕僋偺IRQ儅僗僋Enable
    insAbstractNic->enableNetWork();

    //IRQ儗僔乕僶偲偟偰搊榐 (IRQ偼丄NIC僪儔僀僶僋儔僗傛傝摼傞)
    syscall_set_irq_receiver(insAbstractNic->getNicIRQ());


//Yamami 僨僶僢僌
//FileOutputStream fos("MONES.LOG", true);
//printf("open=%x\n", fos.open());

//char logStr[1024];    //儘僌弌椡暥帤楍


    /* Message loop */
    //偙偙偱儊僢僙乕僕儖乕僾
    for (;;)
    {
        /* receive */
        if (!Message::receive(&info))
        {
            
            switch(info.header)
            {
            case MSG_INTERRUPTED:
                
                //printf("MSG_INTERRUPTED\n");
                
                dword    i;
                
                //僷働僢僩庴怣
                insAbstractNic->frame_input();
                
                //Ether僋儔僗偵搊榐
                i = g_MoEther->setEtherFrame(insAbstractNic->frame_buf ,insAbstractNic->frame_len);
                //僀乕僒僱僢僩僼儗乕儉庴怣張棟 
                i = g_MoEther->receiveEther();
                
                break;

            //Yamami!! 僷働僢僩憲怣張棟丄枹幚憰
            //case MSG_NET_PACKET_SEND:
                //僷働僢僩憲怣
                //僥僗僩 帺屓MAC傾僪儗僗傊弌椡張棟
                // insAbstractNic->frame_output( (byte *)ne_test_pattern, ether_mac_addr, ne_sizeof_test_pattern, 0x0806 );
                //儂僗僩傾僪儗僗傊弌椡張棟
                // insAbstractNic->frame_output( (byte *)ne_test_pattern, dest_ether_mac_addr, ne_sizeof_test_pattern, 0x0806 );

                //break;


            default:
                /* igonore this message */
                break;
            }

        }
    }
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -