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

📄 hello.cpp

📁 MONA是为数不多的C++语言编写的一个很小的操作系统
💻 CPP
字号:
#include <monapi.h>#include <monapi/CString.h>#include <sys/HashMap.h>#include <monapi/Assert.h>#include <monapi/messages.h>using namespace MonAPI;#define MAIN_6#ifdef MAIN_1int MonaMain(List<char*>* pekoe){   printf("Hello World\n");   return 0;}#endif/* FileOutputStream偺幚尡 Process.cpp偺 sendKilledMessage傪桳岠偵偡傞偲僴儞僌 */#ifdef MAIN_2int MonaMain(List<char*>* pekoe){   int reti;   char buf[1024];   memset(buf, 0, sizeof(buf));   sprintf(buf , "protType:%04x \n",1234);   FileOutputStream fos("YTEST.TXT");   printf("fileout:open=%d\n", fos.open());   reti = fos.write((byte*)buf , 512);   printf("fileout:read=%d\n", reti);   printf("fos close pre\n");   fos.close();   printf("fos close after\n");   return 0;}#endif/* PCI楍嫇 */#ifdef MAIN_3typedef union{   dword command;   struct   {       unsigned reserved1 : 2;       unsigned reg       : 6;       unsigned function  : 3;       unsigned device    : 5;       unsigned bus       : 8;       unsigned reserved2 : 7;       unsigned enabled   : 1;   } p;} PciPacket;enum{   REG_CONFIG_ADDRESS = 0x0CF8,   REG_CONFIG_DATA    = 0x0CFC,   PCI_VENDOR_ID      = 0x00,   PCI_DEVICE_ID      = 0x02,   PCI_STATUS         = 0x06,   PCI_REVISION       = 0x08,   PCI_API            = 0x09,   PCI_SUBCLASS       = 0x0a,   PCI_BASECLASS      = 0x0b,   PCI_HEADER         = 0x0e,   PCI_BASE_ADDRESS1  = 0x10,   PCI_BASE_ADDRESS2  = 0x14,   PCI_BASE_ADDRESS3  = 0x18,   PCI_BASE_ADDRESS4  = 0x1C,   PCI_BASE_ADDRESS5  = 0x20,   PCI_IRQ_LINE       = 0x3c};dword ReadConfig(byte bus, byte device, byte function, byte reg, byte readSize){   dword result;   PciPacket packet;   packet.p.enabled   = 1;   packet.p.bus       = bus;   packet.p.device    = device;   packet.p.function  = function;   packet.p.reg       = reg & ~3;   packet.p.reserved1 = 0;   packet.p.reserved2 = 0;   /* set request and enable */   outp32(REG_CONFIG_ADDRESS, packet.command);   switch (readSize)   {   case 1:       result = inp8(REG_CONFIG_DATA + (reg & 3));       break;   case 2:       result = inp16(REG_CONFIG_DATA + (reg & 3));       break;   case 4:       result = inp32(REG_CONFIG_DATA + (reg & 3));       break;   default:       result = 0xFFFFFFFF;       break;   }   packet.p.enabled = 0;   outp32(REG_CONFIG_ADDRESS, packet.command);   return result;}bool FindDevice(byte bus, word vendor, word device, byte* deviceIndex){   for (int i = 0; i < 32; i++)   {       word foundVendor = ReadConfig(0, i, 0, PCI_VENDOR_ID, 2);       if (foundVendor == 0xFFFF || foundVendor != vendor) continue;       word foundDevice = ReadConfig(0, i, 0, PCI_DEVICE_ID, 2);       if (foundDevice != device) continue;       *deviceIndex = i;       return true;   }   return false;}enum{    VENDOR_ID_DEC         = 0x1011,    DEVICE_ID_DEC_DC21140 = 0x0009,    IRQ_NUMBER            = 0x0B,    IO_BASE               = 0xEC00};int TuripProbe(){    return 0;}int MonaMain(List<char*>* pekoe){   /* 儐乕僓乕儌乕僪I/O */   syscall_get_io();#if 0   byte index;   bool found = FindDevice(0, VENDOR_ID_DEC, DEVICE_ID_DEC_DC21140, &index);   printf("DEC 21140 search...[%s]\n", found ? "OK" : "NG");   if (!found) return 1;   printf("revision=%d\n", ReadConfig(0, index, 0, PCI_REVISION, 1));#endif   /* 偲傝偁偊偢楍嫇偱傕 */   for (int i = 0; i < 32; i++)   {       word foundVendor = ReadConfig(0, i, 0, PCI_VENDOR_ID, 2);       if (foundVendor == 0xFFFF) continue;       printf("** PCI Device[%d] ** \n", i);       printf("vendor = %x \n", foundVendor);       printf("device = %x \n", ReadConfig(0, i, 0, PCI_DEVICE_ID, 2));   }   return 0;}#endif#ifdef MAIN_4#include "sys/BinaryTree.h"int MonaMain(List<char*>* pekoe){    BinaryTree<int> tree;    tree.add(1000, 1);    printf("%d\n", tree.get(1000));    printf("%d\n", tree.get(1001));    tree.add(1001, 2);    printf("%d\n", tree.get(1000));    printf("%d\n", tree.get(1001));    printf("Hello World\n");    return 0;}#endif#ifdef MAIN_5#define DEBUG_MODEvoid write(const char* buf, int size){    ASSERT(size < 127);    MessageInfo msg;    MessageInfo reply;    Message::create(&msg, MSG_STDOUT, size, 0, 0, buf);    if (Message::sendReceiveA(&reply, monapi_get_server_thread_id(ID_FILE_SERVER), &msg))    {        /* error, but nothing to do */        ASSERT(!"stdout Error");    }}void hoge(){    char hige[1024];    memset(hige, 0, 1024);    hoge();    return;}int MonaMain(List<char*>* pekoe){    hoge();    dword filesize;    printf("open=%d\n", syscall_file_open("hoge", 0, &filesize));    CString msg = "this is test";    write(msg, msg.getLength());    return 0;}#endif#ifdef MAIN_6int MonaMain(List<char*>* pekoe){    MemoryInfo info;    syscall_get_memory_info(&info);    printf("System Total Memory = %d (MB)\n", info.totalMemoryL / 1024 / 1024);    printf("before malloc\n");    printf("free pages %d / %d (KB) \n", info.freePageNum * info.pageSize / 1024, info.totalPageNum * info.pageSize / 1024);    char* p = (char*)malloc(4096 * 10);    syscall_get_memory_info(&info);    printf("before free\n");    printf("free pages %d / %d (KB) \n", info.freePageNum * info.pageSize / 1024, info.totalPageNum * info.pageSize / 1024);    free(p);    syscall_get_memory_info(&info);    printf("after free\n");    printf("free pages %d / %d (KB) \n", info.freePageNum * info.pageSize / 1024, info.totalPageNum * info.pageSize / 1024);    return 0;}#endif

⌨️ 快捷键说明

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