Merge commit upstream/master into issue-7-fix
This commit is contained in:
		
							
								
								
									
										14
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
language: cpp
 | 
			
		||||
compiler:
 | 
			
		||||
 - gcc
 | 
			
		||||
before_install:
 | 
			
		||||
 - sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
 | 
			
		||||
 - sudo apt-get -qq update
 | 
			
		||||
 - sudo apt-get -qq install g++-4.8 xorg-dev libglu1-mesa-dev libglew-dev libxcursor-dev
 | 
			
		||||
 - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 90
 | 
			
		||||
 - git clone https://github.com/glfw/glfw.git
 | 
			
		||||
 - "mkdir glfw/build && cd glfw/build && cmake .. && make && sudo make install ; cd -"
 | 
			
		||||
script:
 | 
			
		||||
 - mkdir build && cd build
 | 
			
		||||
 - cmake ..
 | 
			
		||||
 - make -j4
 | 
			
		||||
@@ -1,6 +1,8 @@
 | 
			
		||||
citra emulator
 | 
			
		||||
==============
 | 
			
		||||
An experimental open-source Nintendo 3DS emulator/debugger written in C++. At this time, it only emulates a very small subset of 3DS hardware, and therefore is only useful for booting/debugging very simple homebrew demos. Citra is licensed under the GPLv2. Refer to the license.txt file included.
 | 
			
		||||
[](https://travis-ci.org/bunnei/citra)
 | 
			
		||||
 | 
			
		||||
An experimental open-source Nintendo 3DS emulator/debugger written in C++. At this time, it only emulates a very small subset of 3DS hardware, and therefore is only useful for booting/debugging very simple homebrew demos. Citra is licensed under the GPLv2. Refer to the license.txt file included. Please read the [FAQ](https://github.com/bunnei/citra/wiki/FAQ) before getting started with the project.
 | 
			
		||||
 | 
			
		||||
For development discussion, please join us @ #citra on [freenode](http://webchat.freenode.net/).
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,6 @@ if (NOT X11_xf86vmode_LIB)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
add_executable(citra ${SRCS} ${HEADS})
 | 
			
		||||
target_link_libraries(citra core common video_core GLEW pthread X11 Xxf86vm Xi ${OPENGL_LIBRARIES} ${GLFW_LIBRARIES} rt ${X11_Xrandr_LIB} ${X11_xv86vmode_LIB})
 | 
			
		||||
target_link_libraries(citra core common video_core GLEW pthread X11 Xxf86vm Xi Xcursor ${OPENGL_LIBRARIES} ${GLFW_LIBRARIES} rt ${X11_Xrandr_LIB} ${X11_xv86vmode_LIB})
 | 
			
		||||
 | 
			
		||||
#install(TARGETS citra RUNTIME DESTINATION ${bindir})
 | 
			
		||||
 
 | 
			
		||||
@@ -47,6 +47,8 @@ enum {
 | 
			
		||||
    FCRAM_PADDR_END         = (FCRAM_PADDR + FCRAM_SIZE),       ///< FCRAM end of physical space
 | 
			
		||||
    FCRAM_VADDR             = 0x08000000,                       ///< FCRAM virtual address
 | 
			
		||||
    FCRAM_VADDR_END         = (FCRAM_VADDR + FCRAM_SIZE),       ///< FCRAM end of virtual space
 | 
			
		||||
    FRAM_VADDR_FW0B         = 0xF0000000,                       ///< FCRAM adress for firmare FW0B
 | 
			
		||||
    FRAM_VADDR_FW0B_END     = (FRAM_VADDR_FW0B + FCRAM_SIZE),   ///< FCRAM adress end for FW0B
 | 
			
		||||
 | 
			
		||||
    HARDWARE_IO_PADDR       = 0x10000000,                       ///< IO physical address start
 | 
			
		||||
    HARDWARE_IO_VADDR       = 0x1EC00000,                       ///< IO virtual address start
 | 
			
		||||
 
 | 
			
		||||
@@ -16,14 +16,18 @@ std::map<u32, MemoryBlock> g_heap_map;
 | 
			
		||||
std::map<u32, MemoryBlock> g_heap_gsp_map;
 | 
			
		||||
std::map<u32, MemoryBlock> g_shared_map;
 | 
			
		||||
 | 
			
		||||
/// Convert a physical address to virtual address
 | 
			
		||||
u32 _AddressPhysicalToVirtual(const u32 addr) {
 | 
			
		||||
/// Convert a physical address (or firmware-specific virtual address) to primary virtual address
 | 
			
		||||
u32 _VirtualAddress(const u32 addr) {
 | 
			
		||||
    // Our memory interface read/write functions assume virtual addresses. Put any physical address 
 | 
			
		||||
    // to virtual address translations here. This is obviously quite hacky... But we're not doing 
 | 
			
		||||
    // any MMU emulation yet or anything
 | 
			
		||||
    if ((addr >= FCRAM_PADDR) && (addr < FCRAM_PADDR_END)) {
 | 
			
		||||
        return VirtualAddressFromPhysical_FCRAM(addr);
 | 
			
		||||
 | 
			
		||||
    // Virtual address mapping FW0B
 | 
			
		||||
    } else if ((addr >= FRAM_VADDR_FW0B) && (addr < FRAM_VADDR_FW0B_END)) {
 | 
			
		||||
        return VirtualAddressFromPhysical_FCRAM(addr);
 | 
			
		||||
 | 
			
		||||
    // Hardware IO
 | 
			
		||||
    // TODO(bunnei): FixMe
 | 
			
		||||
    // This isn't going to work... The physical address of HARDWARE_IO conflicts with the virtual 
 | 
			
		||||
@@ -41,7 +45,7 @@ inline void _Read(T &var, const u32 addr) {
 | 
			
		||||
    // TODO: Make sure this represents the mirrors in a correct way.
 | 
			
		||||
    // Could just do a base-relative read, too.... TODO
 | 
			
		||||
 | 
			
		||||
    const u32 vaddr = _AddressPhysicalToVirtual(addr);
 | 
			
		||||
    const u32 vaddr = _VirtualAddress(addr);
 | 
			
		||||
    
 | 
			
		||||
    // Memory allocated for HLE use that can be addressed from the emulated application
 | 
			
		||||
    // The primary use of this is sharing a commandbuffer between the HLE OS (syscore) and the LLE
 | 
			
		||||
@@ -77,7 +81,7 @@ inline void _Read(T &var, const u32 addr) {
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
inline void _Write(u32 addr, const T data) {
 | 
			
		||||
    u32 vaddr = _AddressPhysicalToVirtual(addr);
 | 
			
		||||
    u32 vaddr = _VirtualAddress(addr);
 | 
			
		||||
    
 | 
			
		||||
    // Memory allocated for HLE use that can be addressed from the emulated application
 | 
			
		||||
    // The primary use of this is sharing a commandbuffer between the HLE OS (syscore) and the LLE
 | 
			
		||||
@@ -121,7 +125,7 @@ inline void _Write(u32 addr, const T data) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
u8 *GetPointer(const u32 addr) {
 | 
			
		||||
    const u32 vaddr = _AddressPhysicalToVirtual(addr);
 | 
			
		||||
    const u32 vaddr = _VirtualAddress(addr);
 | 
			
		||||
 | 
			
		||||
    // FCRAM - GSP heap
 | 
			
		||||
    if ((vaddr >= HEAP_GSP_VADDR)  && (vaddr < HEAP_GSP_VADDR_END)) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user