コード例 #1
0
ファイル: main.c プロジェクト: Snial/FIGnition
// From FigEdit.
ushort DskBlkRd(ushort page)
{
	// SerialFlashReadBlock(ushort block, byte *dest);
	ushort next=0;
	next=VDskFind(VDskEmptyBlk,gVideoBuff);	 
	ushort phys=-2;
	phys=VDskRead(page,gVideoBuff);
	if(phys==next)
		Cls(); // return an empty screen if it was an empty block.
	PrintAt(1,20+1);
	DotHex(page);
	Emit('@');
	DotHex(phys);
	Emit('!');
	DotHex(next);
#if _DEBUGFLASHID__
	PrintAt(0,kMaxEditHeight+2);
	DotHex(VDskBaseBlock());
	Emit(' ');
	DotHex(SerialFlashID());
	Emit('!');
	DotHex(next);
#endif
	return next;
}
コード例 #2
0
ファイル: lcd1200.cpp プロジェクト: Kreyl/nute
void Lcd_t::Init(void) {
    BckLt.Init(LCD_BCKLT_GPIO, LCD_BCKLT_PIN, LCD_BCKLT_TMR, LCD_BCKLT_CHNL, LCD_TOP_BRIGHTNESS);
    // Remap Timer15 to PB14 & PB15
    AFIO->MAPR2 |= 0x00000001;
    // ==== GPIOs ====
    // Configure LCD_XRES, LCD_XCS, LCD_SCLK & LCD_SDA as Push-Pull output
    PinSetupOut(LCD_GPIO, LCD_XRES, omPushPull);
    PinSetupOut(LCD_GPIO, LCD_XRES, omPushPull);
    PinSetupOut(LCD_GPIO, LCD_XCS,  omPushPull);
    PinSetupOut(LCD_GPIO, LCD_SCLK, omPushPull);
    PinSetupOut(LCD_GPIO, LCD_SDA,  omPushPull);
    // ========================= Init LCD ======================================
    SCLK_Lo();
    XCS_Hi();
    // Reset display
    XRES_Lo();
    chThdSleepMilliseconds(7);
    XRES_Hi();
    WriteCmd(0xAF);    // display ON
    // Reset display again
    XRES_Lo();
    chThdSleepMilliseconds(7);
    XRES_Hi();
    chThdSleepMilliseconds(7);
    // Initial commands
    WriteCmd(0xAF);    // display ON
    WriteCmd(0xA4);    // Set normal display mode
    WriteCmd(0x2F);    // Charge pump on
    WriteCmd(0x40);    // Set start row address = 0

    WriteCmd(0xC8);    // Mirror Y axis
    //WriteCmd(0xA1);    // Mirror X axis
    // Set x=0, y=0
    WriteCmd(0xB0);    // Y axis initialization
    WriteCmd(0x10);    // X axis initialisation1
    WriteCmd(0x00);    // X axis initialisation2
    Cls();             // clear LCD buffer

    // ====================== Switch to USART + DMA ============================
    PinSetupAlterFuncOutput(LCD_GPIO, LCD_SCLK, omPushPull);
    PinSetupAlterFuncOutput(LCD_GPIO, LCD_SDA, omPushPull);
    // Workaround hardware bug with disabled CK3 when SPI2 is enabled
    SPI2->CR2 |= SPI_CR2_SSOE;
    // ==== USART init ==== clock enabled, idle low, first edge, enable last bit pulse
    rccEnableUSART3(FALSE);
    USART3->CR1 = USART_CR1_UE;     // Enable
    USART3->BRR = Clk.APB1FreqHz / LCD_UART_SPEED;
    USART3->CR2 = USART_CR2_CLKEN | USART_CR2_LBCL; // Enable clock, enable last bit clock
    USART3->CR1 = USART_CR1_UE | USART_CR1_M | USART_CR1_TE;
    USART3->CR3 = USART_CR3_DMAT;   // Enable DMA at transmitter
    // DMA
    dmaStreamAllocate     (LCD_DMA, IRQ_PRIO_LOW, nullptr, NULL);
    dmaStreamSetPeripheral(LCD_DMA, &USART3->DR);
    dmaStreamSetMemory0   (LCD_DMA, IBuf);
    dmaStreamSetTransactionSize(LCD_DMA, LCD_VIDEOBUF_SIZE);
    dmaStreamSetMode      (LCD_DMA, LCD_DMA_TX_MODE);
    // Start transmission
    XCS_Lo();
    dmaStreamEnable(LCD_DMA);
}
コード例 #3
0
ファイル: Console.cpp プロジェクト: AT13ANo5/GLProject
void Console::Print(char* fmt,...)
{
#ifdef _DEBUG
	if (Self && _Active)
	{
		char Buff[LENGTH_STRING_BUFF] = { 0 };
		va_list argp;
		va_start(argp,fmt);
		vsprintf_s(Buff,LENGTH_STRING_BUFF,fmt,argp);
		va_end(argp);

		if (Cursor.Y >= 135)
		{
			Cls();
		}
		int cnt = 0,num = 0;
		while (1)
		{
			if (Buff[cnt] == '\n')
			{
				Cursor.Y++;
				num++;
			}
			if (Buff[cnt] == '\0' || cnt >= LENGTH_STRING_BUFF)
			{
				break;
			}
			cnt++;
		}
		if (num == 0){ Cursor.Y++; }
		printf(Buff);
		SetConsoleCursorPosition(ConsoleHandle,Cursor);
	}
#endif
}
コード例 #4
0
ファイル: main.c プロジェクト: wakaw/bws
void Display_Title(void)							//プログラムタイトル表示を関数化 040928
{
	Cls();
	Setcolor(CYAN,BLACK);
	printf(" Weight Bearing Control Program\n");
	printf(" Copyright All Reserved by Fujie Lab. 2005\n\n");
	Restore();
}
コード例 #5
0
ファイル: VMTest.c プロジェクト: andrewhannay/FIGnition
void TestForth(void)
{
	Cls();
	ForthCopyBootStrap();
	Emit('T');
	Emit('F');
	//KeyHeart();
	//ForthDumpVars();
	// @TODO, we can't show the results yet.
	//ForthDumpVars();
}
コード例 #6
0
ファイル: VMTest.c プロジェクト: andrewhannay/FIGnition
void ForthCopyBootStrap(void)
{
	ushort labels[4];	// only allowed 4 labels.
	ushort dst=0;
	byte *src=(byte *)gTestProg;
	DotQuote("FB");
	KeyHeart();
	do {
		byte b=GetPgmByte(*src);
		src++;
		switch(b) {
		case kFigLblDef:
			b=GetPgmByte(*src);	// get label value.
			src++;	// next byte.
			labels[b]=dst;	// save.
			break;
		case kFigLblFRef: {
			ushort ref;
			Emit('.');	// label!
			b=GetPgmByte(*src);	// get offset value.
			src++;	// next byte.
			ref=0x8000+dst+2+(char)b;	// sign extend.
			DotHex(ref);
			SramAbsWr(dst++,(byte)(ref>>8));	// big-endian.
			SramAbsWr(dst++,(byte)(ref&255));	// low-byte.
			}
			break;
		case kFigLblRef:
			b=GetPgmByte(*src);	// get label value.
			src++;	// next byte.
			SramAbsWr(dst++,(byte)(labels[b]>>8));	// big-endian.
			SramAbsWr(dst++,(byte)(labels[b]&255));	// low-byte.
		case kFigLitWord:
			SramAbsWr(dst++,GetPgmByte(*src++));	// big-endian.
			SramAbsWr(dst++,GetPgmByte(*src++));	// low-byte.
			break;
		default:
			SramAbsWr(dst++, b);
			break;
		}
	}while(src<&gTestProgEnd);
	Emit(kKeyEnter);	// cr.
	Emit('a');
	dst=0;
	src=(byte *)gTestProg;
	do {
		Dot(SramAbsRd(dst++));
		src++;
	}while(src<&gTestProgEnd);
	KeyHeart();
	Cls();
}
コード例 #7
0
ファイル: Console.cpp プロジェクト: AT13ANo5/GLProject
void Console::Sys(char* command)
{
#ifdef _DEBUG
	if (Self)
	{
		if (Cursor.Y >= 135)
		{
			Cls();
		}
		system(command);
		Cursor.Y++;
		SetConsoleCursorPosition(ConsoleHandle,Cursor);
	}
#endif
}
コード例 #8
0
ファイル: main.c プロジェクト: wakaw/bws
///// メニュー関連関数 /////////////////////////////////////////////////////////
void Main_Menu(void)
{
	int Flag=1;
	int KeyInput;
	
	while(Flag){
		Cls();
		Display_Title();
		Setcolor(CYAN,BLACK);
		printf(" <Select Menu>\n\n");
		Restore();
		
		Sensors_Display();
		
		printf(" 1) Sensors Check \n");
		printf(" 2) DA Value Check \n");
		printf(" 3) Velocity Check \n");
		printf(" 4) Velocity Step Response \n");
		printf(" 5) Constant Force Control\n");
		printf(" 6) Constant Force Control(default)\n");
//		printf(" 7) Constant Force Control(range)\n");
		printf("\n");
		printf(" i) Initialize AD Value\n");
		printf("\n");
		printf(" s> Back to QNX\n\n");
		printf(" >>");
		
		KeyInput = Char_Stdin();
		switch(KeyInput){
			case '1': Sensors_Check();							break;
			case '2': DA_Value_Check();							break;
			case '3': Velocity_Check();							break;
			case '4': Velocity_Step();							break;
			case '5': Force_Const();							break;
			case '6': Force_Const_2();							break;
			case '7': BWS_and_Compliance();						break;			
			case 'i': AD_Initialize();							break;
			case 's': printf("\nBack to Qnx\n");	Flag=0;		break;
			default:printf("You Typed Invalid Command!!\n");	break;
			}
		}
}
コード例 #9
0
void Bmscr::Init( int p_sx, int p_sy )
{
	//		bitmap buffer make
	//
	flag = BMSCR_FLAG_INUSE;

	objmax = 0;
	mem_obj = NULL;
	sx = p_sx; sy = p_sy;
	sx2 = sx;

	Cls(0);

	imgbtn = -1;

	objmode = 1;
	fl_dispw = 0;

	fl_dispw = 1;
	fl_udraw = 1;

	resname[0] = 0;
}
コード例 #10
0
ファイル: GameRedrawer.cpp プロジェクト: jchristi/taddraw
LPDIRECTDRAWSURFACE TAGameAreaReDrawer::InitOwnSurface (LPDIRECTDRAW TADD)
{
	if (NULL!=GameAreaSurfaceFront_ptr)
	{
		GameAreaSurfaceFront_ptr->Release ( );
		GameAreaSurfaceFront_ptr= NULL;
	}

	if (NULL!=GameAreaSurfaceBack_ptr)
	{
		GameAreaSurfaceBack_ptr->Release ( );
		GameAreaSurfaceBack_ptr= NULL;
	}

	RECT GameAreaRect;

	if (TADD)
	{
		TAWGameAreaRect ( &GameAreaRect);

		DDSURFACEDESC ddsd;
		DDRAW_INIT_STRUCT(ddsd);
		ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
		ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
		ddsd.dwWidth = GameAreaRect.right- GameAreaRect.left;
		ddsd.dwHeight = GameAreaRect.bottom- GameAreaRect.top;

		TADD->CreateSurface( &ddsd, &GameAreaSurfaceFront_ptr, NULL);
		TADD->CreateSurface( &ddsd, &GameAreaSurfaceBack_ptr, NULL);
		
	
		Cls ( );
	}
	
	return GameAreaSurfaceFront_ptr;
}
コード例 #11
0
unsigned int InputArea(char* sCodArea)
{
  int scrl_speed, w_delay;
  unsigned int status;

  DFT_STRUCT accept_dft ;
  DFT_STRUCT *screen;

  static char fieldstr[5];       // store data as character strs 
//    unsigned int  fieldinteger;       // store data into integer      
///    unsigned long fieldlong;        // store data into long     

  static char *prompt1= "AREA: ";
//    static char *prompt2= "ACCEPT LEFT TO RT";
//    static char *prompt3= "ACCEPT RT TO LEFT";

  static char *mask1=   "____";
//    static char *mask2=   "__________";
//    static char *mask3=   "__________";

  Cls();
// Resetta il campo (spero)
  memset(fieldstr, ' ', 8);  
  
  w_delay = WBEEPDEFAULT;       // set wand beep delay       
  scrl_speed = 10;          // set the scroll speed for edit 
  setdelayvals(scrl_speed, w_delay);      // set delay values once       

// #1 PROMPT 
  screen = &accept_dft; 
  screen->df1 = WANDABLE;   // Inverse video prompt, wand   
  screen->df2 = ALPNUM_DATA | EDIT_DATA; // Alpha/Numeric, edit     

  screen->prompt_str = prompt1;     // setup the data format table  
  screen->prompt_len = strlen(prompt1);   // get the length of prompt1    

  screen->mask_str = mask1;
  screen->mask_str_len = strlen(mask1);  // get the length of mask1      

  screen->prompt_col = 0;       // col 1, row 2, zero relative  
  screen->prompt_row = 1;
  screen->mask_col = 8;
//    screen->mask_row = 2;       // col 9, row 3, zero relative   
  screen->mask_row = 1;       
  screen->default_str_len = 0;      // no default data        

  screen->min_input = 1;        // min/max range        
  screen->max_input = CODAREA_LEN;
            // define the storage type      
  screen->field.fieldchar = fieldstr;     // pointer to character string  
  screen->field_len = CODAREA_LEN+1;       // maximum length of the field  

  screen->clear_start_line = 0;     // line num zero relative     
  screen->clear_end_line = 20;
  screen->status_line = 20;       // status line num zero relative

  status = acceptscreen(screen);      // accept the data        
//    evalstatus(status,FALSE);         // check return status      
  if (status == GOOD_DATA) {
#ifdef _DEBUG  
    printf("%s\n", fieldstr);
#endif
    CopiaStr(sCodArea,fieldstr,0,CODAREA_LEN);
  }

/**********************************************************************    
// #2 PROMPT 
    screen->df1 = WANDABLE;       // Wandable prompt        

    screen->df2 = NUMERIC_DATA | EDIT_DATA; // Numeric, edit        

    screen->prompt_str = prompt2;     // setup the data format table  
    screen->prompt_len = 0x00;        // use 0 for null terminated
                 prompt strings       
    screen->mask_str = mask2;
    screen->mask_str_len = strlen(mask2);   // setup length of mask2      
              // use the same col, row
                 default_str_len, min/max
                 field pointer, clr lines
                 and status line info     

    screen->field.fieldint = &fieldinteger; // pointer to integer field     
    screen->field_len = 1;        // store into 1 integer     

    status = acceptscreen(screen);      // accept the data        
    evalstatus(status);         // check return status      
    if (status = GOOD_DATA)
      printf("%s\n", fieldstr);

// #3 PROMPT 
    screen->df1 = WANDABLE | INV_PROMPT | INV_ACCEPTSCR;
    screen->df2 = ALPNUM_DATA | EDIT_DATA;

    screen->prompt_str = prompt3;     
    screen->prompt_len = 0x00;        // use 0 for null terminated    

    screen->mask_str = mask3;
    screen->mask_str_len = strlen(mask3);   // setup length of mask2      
              // use the same col, row
                 default_str_len, min/max
                 field pointer, clr lines
                 and status line info     

    screen->field.fieldint = &fieldinteger; // pointer to integer field     
    screen->field_len = 1;        // store into 1 integer     

    status = acceptscreen(screen);      // go accept the data    
    evalstatus(status);
    if (status = GOOD_DATA)
      printf("%s\n", fieldstr);
***********************************************************/
  return status;
}
コード例 #12
0
ファイル: lcd1200.cpp プロジェクト: Kreyl/Lume
void Lcd_t::Init(void) {
    BckLt.Init();
    // ==== GPIOs ====
    // Configure LCD_XRES, LCD_XCS, LCD_SCLK & LCD_SDA as Push-Pull output
    PinSetupOut(LCD_GPIO, LCD_XRES, omPushPull);
    PinSetupOut(LCD_GPIO, LCD_XCS,  omPushPull);
    PinSetupOut(LCD_GPIO, LCD_SCLK, omPushPull);
    PinSetupOut(LCD_GPIO, LCD_SDA,  omPushPull);
    // ========================= Init LCD ======================================
    SCLK_Lo();
    XCS_Hi();
    // Reset display
    XRES_Lo();
    chThdSleepMilliseconds(7);
    XRES_Hi();
    IWriteCmd(0xAF);    // display ON
    // Reset display again
    XRES_Lo();
    chThdSleepMilliseconds(7);
    XRES_Hi();
    chThdSleepMilliseconds(7);
    // Initial commands
    IWriteCmd(0xAF);    // display ON
    IWriteCmd(0xA4);    // Set normal display mode
    IWriteCmd(0x2F);    // Charge pump on
    IWriteCmd(0x40);    // Set start row address = 0

#if LCD_MIRROR_Y_AXIS
    IWriteCmd(0xC8);    // Mirror Y axis
#endif
#if LCD_MIRROR_X_AXIS
    IWriteCmd(0xA1);    // Mirror X axis
#endif
    // Set x=0, y=0
    IWriteCmd(0xB0);    // Y axis initialization
    IWriteCmd(0x10);    // X axis initialisation1
    IWriteCmd(0x00);    // X axis initialisation2
    Cls();

#if LCD_DMA_BASED // ================ Switch to USART + DMA ====================
    PinSetupAlterFunc(LCD_GPIO, LCD_SCLK, omPushPull, pudNone, AF7, ps40MHz);
    PinSetupAlterFunc(LCD_GPIO, LCD_SDA,  omPushPull, pudNone, AF7, ps40MHz);
    // ==== USART init ==== clock enabled, idle low, first edge, enable last bit pulse
    rccEnableUSART3(FALSE);
    USART3->CR1 = USART_CR1_UE;     // Enable
    USART3->BRR = Clk.APB1FreqHz / LCD_UART_SPEED;
    USART3->CR2 = USART_CR2_CLKEN | USART_CR2_LBCL; // Enable clock, enable last bit clock
    USART3->CR1 = USART_CR1_UE | USART_CR1_M | USART_CR1_TE;
    USART3->CR3 = USART_CR3_DMAT;   // Enable DMA at transmitter
    // DMA
    dmaStreamAllocate     (LCD_DMA, IRQ_PRIO_LOW, nullptr, NULL);
    dmaStreamSetPeripheral(LCD_DMA, &USART3->DR);
    dmaStreamSetMemory0   (LCD_DMA, IBuf);
    dmaStreamSetTransactionSize(LCD_DMA, LCD_VIDEOBUF_SIZE);
    dmaStreamSetMode      (LCD_DMA, LCD_DMA_TX_MODE);
    // Start transmission
    XCS_Lo();
    dmaStreamEnable(LCD_DMA);
#else

#endif
    chSemInit(&semLcd, 1);
}
コード例 #13
0
ファイル: main.c プロジェクト: kfreezen/kos
int kmain(UInt32 initial_stack, MultibootHeader* mboot, UInt32 mboot_magic) {
	initial_esp = initial_stack;
	
	CLI_Init();
	Cls();
	
	UInt32 initrd_end = *(UInt32*)(mboot->mods_addr+4);
	
	placement_address = (Pointer) initrd_end;
	
	// Set up our new stack here.
	//UInt32 stack = (UInt32) kmalloc_a(8192, TRUE);
	MultibootHeader* mboot_hdr = mboot; //kmalloc(sizeof(MultibootHeader));
	//memcpy(mboot_hdr, mboot, sizeof(MultibootHeader));
	
	kprintf("Starting init...\n");

	//new_start(stack, mboot_hdr);
	GDT_Init();
	IDT_Init();
	ISR_Init();
	asm volatile("sti");
	
	kprintf("Basics\t\t\t[OK]\n");

	PIT_Init(PIT_MSTIME);

	kprintf("PIT\t\t\t[OK]\n");

	init_kheap();
	InitPaging((mboot_hdr->mem_lower+mboot_hdr->mem_upper)&~3);
	InitKernelHeap();

	kprintf("Heap\t\t\t[OK]\n");

	VFS_Init();
	DevFS_Init();
	
	kprintf("VFS\t\t\t[OK]\n");

	DriversInit();

	kprintf("Drivers\t\t\t[OK]\n");

	Screen_Init();

	FloppyInit();

	checkAllBuses();
	DumpPCIDeviceData();
	kprintf("PCI\t\t\t[OK]\n");

	/*kprintf("Keyboard Init... ");
	KB_Init(0);
	kprintf("[ok]\n");*/

	FAT12_Init(FAT12_GetContext(FloppyGetDevice()), "/", "sys");
	
	InitTasking();

	KernelSymbolsLoad();

	//Cls();

	kprintf("kOS v0.6.13\n");

	VFS_Node* rd = GetNodeFromFile(GetFileFromPath("/sys"));
	kprintf("rd = %x\n", rd);
	
	ArrayList* list = ListFiles(rd);
	ALIterator* itr = ALGetItr(list);

	while(ALItrHasNext(itr)) {
		VFS_Node* node = ALItrNext(itr);
		kprintf("file: %s\n", node->name);
	}

	ALFreeItr(itr);
	
	ALFreeList(list);

	//kprintf("kprintf symbol = %x\n", getKernelSymbol("kprintf"));
	File* initScript = GetFileFromPath("/sys/init.script");
	FileSeek(0, initScript); // Due to these being global objects, we have to do such ugly things as this.

	#ifdef INIT_DEBUG
	kprintf("initScript=%x\n", initScript);
	#endif

	char* lineBuf = kalloc(256);
	int doBreak = 0;
	while(!doBreak) {
		if(fgetline(initScript, lineBuf, 256, '\n')==-1) {
			if(strlen(lineBuf) > 0) {
				doBreak = 1;
			} else {
				break; // We've processed everything that needs to be processed.
			}
		}

		// Now parse it.
		char* tok = strtok(lineBuf, " ");
		kprintf("%s, %x\n", tok,tok);
		if(!strcmp(tok, "load_driver")) {
			#ifdef INIT_DEBUG
			kprintf("load_driver ");
			#endif

			tok = strtok(NULL, " ");

			// Load the driver specified.
			File* drv = GetFileFromPath(tok);
			if(drv != NULL) {
				int drvLength = FileSeek(SEEK_EOF, drv);
				FileSeek(0, drv);
				void* drvBuf = kalloc(drvLength);

				#ifdef INIT_DEBUG
				kprintf("%s\n", GetNodeFromFile(drv)->name);
				#endif

				ReadFile(drvBuf, drvLength, drv);
				ELF* elf = LoadKernelDriver(drvBuf);

				#ifdef INIT_DEBUG
				kprintf("elf->start=%x\n", elf->start);
				#endif

				if(elf->error == 0) {
					void (*driverInit)() = (void (*)()) elf->start;
					driverInit();
				}

				kfree(drvBuf);
				drvBuf = NULL;

				CloseFile(drv);
			}
		}
	}

	CloseFile(initScript);
	kfree(lineBuf);

	kprintf("Kernel init done...\n");

	File* elf = GetFileFromPath("/sys/helloworld");
	
	FileSeek(SEEK_EOF, elf);
	int length = FileTell(elf);
	FileSeek(0, elf);
	UInt8* elfBuf = kalloc(length);
	ReadFile(elfBuf, length, elf);
	ELF* elfExe = Parse_ELF(elfBuf);
	CreateTaskFromELF(elfExe);

	// Kernel main logic loop
	while(1) {
		asm volatile("hlt");
	}

	return 0;
}
コード例 #14
0
ファイル: fbgfx.cpp プロジェクト: Zamaster/ProcedureCastle
void FBGfx::Cls(Color clear_color)
{
	glClearColor(clear_color.r, clear_color.g, clear_color.b, clear_color.a);
	Cls();
}
コード例 #15
0
ファイル: Vcc.c プロジェクト: vcc6809/VCC
/*--------------------------------------------------------------------------*/
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
	MSG  Msg;

	EmuState.WindowInstance = hInstance;
	char temp1[MAX_PATH]="";
	char temp2[MAX_PATH]=" Running on ";
	unsigned threadID;
	HANDLE hEvent,

//	SetPriorityClass(GetCurrentProcess(),ABOVE_NORMAL_PRIORITY_CLASS );
//	SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_ABOVE_NORMAL);
//	CoInitializeEx(NULL,COINIT_MULTITHREADED);
//	CoInitialize(NULL);
//	InitializeCriticalSection();
	OleInitialize(NULL); //Work around fixs app crashing in "Open file" system dialogs (related to Adobe acrobat 7+
	LoadString(hInstance, IDS_APP_TITLE,g_szAppName, MAX_LOADSTRING);

	if ( strlen(lpCmdLine) !=0)
	{
		strcpy(QuickLoadFile,lpCmdLine);
		strcpy(temp1,lpCmdLine);
		PathStripPath(temp1);
		strlwr(temp1);
		temp1[0]=toupper(temp1[0]);
		strcat (temp1,temp2);
		strcat(temp1,g_szAppName);
		strcpy(g_szAppName,temp1);
	}
	EmuState.WindowSize.x=640;
	EmuState.WindowSize.y=480;
	InitInstance (hInstance, nCmdShow);
	if (!CreateDDWindow(&EmuState))
	{
		MessageBox(0,"Can't create primary Window","Error",0);
		exit(0);
	}
	
	Cls(0,&EmuState);
	DynamicMenuCallback( "",0, 0);
	DynamicMenuCallback( "",1, 0);

	LoadConfig(&EmuState);			//Loads the default config file Vcc.ini from the exec directory
	EmuState.ResetPending=2;
	SetClockSpeed(1);	//Default clock speed .89 MHZ	
	BinaryRunning = true;
	EmuState.EmulationRunning=AutoStart;
	if (strlen(lpCmdLine)!=0)
	{
		Qflag=255;
		EmuState.EmulationRunning=1;
	}

	hEvent = CreateEvent( NULL, FALSE, FALSE, NULL ) ;
	if (hEvent==NULL)
	{
		MessageBox(0,"Can't create Thread!!","Error",0);
		return(0);
	}
	hEMUThread = (HANDLE)_beginthreadex( NULL, 0, &EmuLoop, hEvent, 0, &threadID );
	if (hEMUThread==NULL)
	{
		MessageBox(0,"Can't Start main Emulation Thread!","Ok",0);
		return(0);
	}
	
	WaitForSingleObject( hEvent, INFINITE );
	SetThreadPriority(hEMUThread,THREAD_PRIORITY_NORMAL);

//	InitializeCriticalSection(&FrameRender);

while (BinaryRunning) 
	{
		if (FlagEmuStop==TH_WAITING)		//Need to stop the EMU thread for screen mode change
			{								//As it holds the Secondary screen buffer open while running
				FullScreenToggle();
				FlagEmuStop=TH_RUNNING;
			}
			GetMessage(&Msg,NULL,0,0);		//Seems if the main loop stops polling for Messages the child threads stall
			TranslateMessage(&Msg);
			DispatchMessage(&Msg) ;
	} 

	CloseHandle( hEvent ) ;	
	CloseHandle( hEMUThread ) ;
	timeEndPeriod(1);
	UnloadDll();
	SoundDeInit();
	WriteIniFile(); //Save Any changes to ini File
	return Msg.wParam;
}
コード例 #16
0
ファイル: lcd1200.cpp プロジェクト: Kreyl/nute
void Lcd_t::Init(void) {
    // ==== Backlight: Timer15 Ch2 ====
    // Setup pin
    klGpioSetupByMsk(GPIOB, GPIO_Pin_15, GPIO_Mode_AF_PP);
    // Remap Timer15 to PB14 & PB15
    AFIO->MAPR2 |= 0x00000001;
    // Setup timer15
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM15, ENABLE);
    TIM15->CR1 = 0x01;      // Enable timer
    TIM15->CR2 = 0;
    TIM15->PSC = 0;         // Do not divide input freq
    TIM15->ARR = 100;       // Autoreload register: full brightness=100
    TIM15->BDTR = 0xC000;   // Main output Enable
    TIM15->CCMR1 = 0x6000;  // PWM mode1 on Ch2 enabled
    TIM15->CCER = 0x0010;   // Output2 enabled, polarity not inverted

    // ==== GPIOs ====
    // Configure LCD_XRES, LCD_XCS, LCD_SCLK & LCD_SDA as Push-Pull output
    klGpioSetupByMsk(LCD_GPIO, LCD_XRES | LCD_XCS | LCD_SCLK | LCD_SDA, GPIO_Mode_Out_PP);

    // ========================= Init LCD ======================================
    SCLK_Lo();
    XCS_Hi();
    // Reset display
    XRES_Lo();
    Delay.ms(7);
    XRES_Hi();
    WriteCmd(0xAF);    // display ON
    // Reset display again
    XRES_Lo();
    Delay.ms(7);
    XRES_Hi();
    Delay.ms(7);
    // Initial commands
    WriteCmd(0xAF);    // display ON
    WriteCmd(0xA4);    // Set normal display mode
    WriteCmd(0x2F);    // Charge pump on
    WriteCmd(0x40);    // Set start row address = 0

    WriteCmd(0xC8);    // mirror Y axis
    //WriteCmd(0xA1);    // Mirror X axis
    // Set x=0, y=0
    WriteCmd(0xB0);    // Y axis initialization
    WriteCmd(0x10);    // X axis initialisation1
    WriteCmd(0x00);    // X axis initialisation2
    Cls();             // clear LCD buffer

    draw_mode = OVERWRITE;

    // ====================== Switch to USART + DMA ============================
    klGpioSetupByMsk(LCD_GPIO, LCD_SCLK | LCD_SDA, GPIO_Mode_AF_PP);
    // Workaround hardware bug with disabled CK3 when SPI2 is enabled
    SPI2->CR2 |= SPI_CR2_SSOE;
    // ==== USART init ====
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
    // Usart clock: enabled, idle low, first edge, enable last bit pulse
    USART_ClockInitTypeDef USART_ClockInitStructure;
    USART_ClockInitStructure.USART_Clock = USART_Clock_Enable;
    USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
    USART_ClockInitStructure.USART_CPHA = USART_CPHA_1Edge;
    USART_ClockInitStructure.USART_LastBit = USART_LastBit_Enable;
    USART_ClockInit(USART3, &USART_ClockInitStructure);
    // Usart itself
    USART_InitTypeDef USART_InitStructure;
    USART_InitStructure.USART_BaudRate = 100000;
    USART_InitStructure.USART_WordLength = USART_WordLength_9b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Tx;
    USART_Init(USART3, &USART_InitStructure);
    // Enable USART
    USART_Cmd(USART3, ENABLE);
    // ==== DMA ====
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
    DMA_InitTypeDef DMA_InitStructure;
    DMA_DeInit(DMA1_Channel2);
    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART3->DR;
    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&IBuf[0];
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
    DMA_InitStructure.DMA_BufferSize = LCD_VIDEOBUF_SIZE;
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
    DMA_InitStructure.DMA_Priority = DMA_Priority_Low;
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
    DMA_Init(DMA1_Channel2, &DMA_InitStructure);
    // Enable USARTy DMA TX request
    USART_DMACmd(USART3, USART_DMAReq_Tx, ENABLE);
    // Start transmission
    XCS_Lo();
    DMA_Cmd(DMA1_Channel2, ENABLE);          // Enable USARTy DMA TX Channel
}
コード例 #17
0
ファイル: lcd.cpp プロジェクト: Kreyl/nute
void Lcd_t::Init() {
    // ==== Backlight: Timer15 Ch2 ====
    // Setup pin
    PinSetupAlterFuncOutput(LCD_GPIO, LCD_BCKLT, omPushPull, ps50MHz);
    // Remap Timer15 to PB14 & PB15
    AFIO->MAPR2 |= 0x00000001;
    // Setup timer15
    rccEnableAPB2(RCC_APB2ENR_TIM15EN, false);

    TIM15->CR1 = 0x01;      // Enable timer
    TIM15->CR2 = 0;
    TIM15->PSC = 0;         // Do not divide input freq
    TIM15->ARR = 100;       // Autoreload register: full brightness=100
    TIM15->BDTR = 0xC000;   // Main output Enable
    TIM15->CCMR1 = 0x6000;  // PWM mode1 on Ch2 enabled
    TIM15->CCER = 0x0010;   // Output2 enabled, polarity not inverted

    BackligthValue = 0;
    // ==== GPIOs ====
    // Configure LCD_XRES, LCD_XCS, LCD_SCLK & LCD_SDA as Push-Pull output
    InitGpios();

    // ========================= Init LCD ======================================
    SCLK_Lo();
    XCS_Hi();
    // Reset display
    XRES_Lo();
    chThdSleepMilliseconds(9);
    XRES_Hi();
    WriteCmd(0xAF);    // display ON
    // Reset display again
    XRES_Lo();
    chThdSleepMilliseconds(7);
    XRES_Hi();
    chThdSleepMilliseconds(7);
    // Initial commands
    WriteCmd(0xAF);    // display ON
    WriteCmd(0xA4);    // Set normal display mode
    WriteCmd(0x2F);    // Charge pump on
    WriteCmd(0x40);    // Set start row address = 0

//    WriteCmd(0xC8);    // mirror Y axis
//    WriteCmd(0xA1);    // Mirror X axis
    // Set x=0, y=0
    WriteCmd(0xB3);    // Y axis initialization
    WriteCmd(0x10);    // X axis initialisation1
    WriteCmd(0x08);    // X axis initialisation2

    Cls();             // clear LCD buffer

    draw_mode = OVERWRITE;

// ====================== Switch to USART + DMA ============================
#ifdef ENABLE_DMAUSART_MODE
    PinSetupAlterFuncOutput(LCD_GPIO, LCD_SCLK, omPushPull, ps50MHz);
    PinSetupAlterFuncOutput(LCD_GPIO, LCD_SDA, omPushPull, ps50MHz);
    // Workaround hardware bug with disabled CK3 when SPI2 is enabled
    SPI2->CR2 |= SPI_CR2_SSOE;
    // ==== USART init ====
    rccEnableUSART3(false);
    // Usart clock: enabled, idle low, first edge, enable last bit pulse

    // Usart itself
    LCD_USART->BRR = Clk.APB1FreqHz / 100000;
    LCD_USART->CR1 = USART_CR1_TE |   /* Transmitter enabled */                 \
                     USART_CR1_M;     /* 9 bit */
    LCD_USART->CR2 = USART_CR2_CLKEN |  \
                     USART_CR2_LBCL;

    LCD_USART->CR3 = USART_CR3_DMAT;   // Enable DMA at transmitter

    LCD_USART->CR1 |= USART_CR1_UE;        // Enable USART
    // ==== DMA ====
    rccEnableDMA1();
    dmaStreamAllocate(LCD_DMA, IRQ_PRIO_MEDIUM, LcdDmaCompIrq, NULL);
    dmaStreamSetPeripheral(LCD_DMA, &USART3->DR);
    dmaStreamSetMemory0(LCD_DMA, (uint32_t)&IBuf[0]);
    dmaStreamSetMode      (LCD_DMA, LCD_DMA_MODE);
    // Start transmission
    XCS_Lo();

//    DMA_Cmd(DMA1_Channel2, ENABLE);          // Enable USARTy DMA TX Channel
#else
    for(int i=0; i < 864; i++) WriteData(0x00); // Clear all screen
#endif
    Backlight(0);
    chThdCreateStatic(waLcdThread, sizeof(waLcdThread), NORMALPRIO, (tfunc_t)LcdThread, NULL);
}