diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..8bad122b26 --- /dev/null +++ b/.travis.yml @@ -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 \ No newline at end of file diff --git a/README.md b/README.md index 8621752010..832b647bd5 100644 --- a/README.md +++ b/README.md @@ -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. +[![Travis CI Build Status](https://travis-ci.org/bunnei/citra.svg)](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/). diff --git a/src/citra/CMakeLists.txt b/src/citra/CMakeLists.txt index d7478a2d23..ca272249f2 100644 --- a/src/citra/CMakeLists.txt +++ b/src/citra/CMakeLists.txt @@ -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}) diff --git a/src/core/mem_map.h b/src/core/mem_map.h index c744e377e9..509fc8fd91 100644 --- a/src/core/mem_map.h +++ b/src/core/mem_map.h @@ -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 diff --git a/src/core/mem_map_funcs.cpp b/src/core/mem_map_funcs.cpp index c8daf0df5f..c057a81140 100644 --- a/src/core/mem_map_funcs.cpp +++ b/src/core/mem_map_funcs.cpp @@ -16,14 +16,18 @@ std::map g_heap_map; std::map g_heap_gsp_map; std::map 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 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)) {