hey look, more crap

no MrRean this doesn't run NSMB yet
This commit is contained in:
StapleButter 2016-11-03 01:38:58 +01:00
parent 5b7ae6dab3
commit 3505ec993b
8 changed files with 180 additions and 2 deletions

50
ARM.cpp Normal file
View File

@ -0,0 +1,50 @@
#include "ARM.h"
#include "NDS.h"
ARM::ARM(u32 num)
{
// well uh
Num = num;
for (int i = 0; i < 16; i++)
R[i] = 0;
ExceptionBase = num ? 0x00000000 : 0xFFFF0000;
// zorp
JumpTo(ExceptionBase);
}
ARM::~ARM()
{
// dorp
}
void ARM::JumpTo(u32 addr)
{
// pipeline shit
// TODO: THUMB!!
NextInstr = Read32(addr);
R[15] = addr+4;
}
s32 ARM::Execute(s32 cycles)
{
while (cycles > 0)
{
// TODO THUM SHIT ASGAFDGSUHAJISGFYAUISAGY
// prefetch
CurInstr = NextInstr;
NextInstr = Read32(R[15]);
R[15] += 4;
// actually execute
// er...
}
return cycles;
}

40
ARM.h Normal file
View File

@ -0,0 +1,40 @@
// ARM shit
#ifndef ARM_H
#define ARM_H
#include "types.h"
#include "NDS.h"
class ARM
{
public:
ARM(u32 num);
~ARM(); // destroy shit
void JumpTo(u32 addr);
s32 Execute(s32 cycles);
u32 Read32(u32 addr)
{
if (Num) return NDS::ARM7Read32(addr);
else return NDS::ARM9Read32(addr);
}
u32 Num;
u32 R[16]; // heh
u32 CPSR;
u32 R_FIQ[8]; // holding SPSR too
u32 R_SVC[3];
u32 R_ABT[3];
u32 R_IRQ[3];
u32 R_UND[3];
u32 CurInstr;
u32 NextInstr;
u32 ExceptionBase;
};
#endif // ARM_H

50
NDS.cpp
View File

@ -1,15 +1,23 @@
#include <stdio.h> #include <stdio.h>
#include "NDS.h" #include "NDS.h"
#include "ARM.h"
namespace NDS namespace NDS
{ {
// ARM* ARM9;
ARM* ARM7;
u8 ARM9BIOS[0x1000];
u8 ARM7BIOS[0x4000];
void Init() void Init()
{ {
ARM9 = new ARM(0);
ARM7 = new ARM(1);
Reset(); Reset();
} }
@ -22,13 +30,51 @@ void Reset()
printf("ARM9 BIOS not found\n"); printf("ARM9 BIOS not found\n");
else else
{ {
// load BIOS here fseek(f, 0, SEEK_SET);
fread(ARM9BIOS, 0x1000, 1, f);
printf("ARM9 BIOS loaded: %08X\n", ARM9Read32(0xFFFF0000));
fclose(f);
}
f = fopen("bios7.bin", "rb");
if (!f)
printf("ARM7 BIOS not found\n");
else
{
fseek(f, 0, SEEK_SET);
fread(ARM7BIOS, 0x4000, 1, f);
printf("ARM7 BIOS loaded: %08X\n", ARM7Read32(0x00000000));
fclose(f); fclose(f);
} }
} }
u32 ARM9Read32(u32 addr)
{
// implement ARM9y shit here, like memory protection
if ((addr & 0xFFFFF000) == 0xFFFF0000)
{
return *(u32*)&ARM9BIOS[addr & 0xFFF];
}
printf("unknown arm9 read32 %08X\n", addr);
return 0;
}
u32 ARM7Read32(u32 addr)
{
if (addr < 0x00004000)
{
return *(u32*)&ARM7BIOS[addr];
}
printf("unknown arm7 read32 %08X\n", addr);
return 0;
}
template<typename T> T Read(u32 addr) template<typename T> T Read(u32 addr)
{ {
return (T)0; return (T)0;

3
NDS.h
View File

@ -10,6 +10,9 @@ namespace NDS
void Init(); void Init();
void Reset(); void Reset();
u32 ARM9Read32(u32 addr);
u32 ARM7Read32(u32 addr);
template<typename T> T Read(u32 addr); template<typename T> T Read(u32 addr);
template<typename T> void Write(u32 addr, T val); template<typename T> void Write(u32 addr, T val);

View File

@ -5,6 +5,7 @@
int main() int main()
{ {
printf("melonDS version uh... 0.1??\n"); printf("melonDS version uh... 0.1??\n");
printf("it's a DS emulator!!!\n");
NDS::Init(); NDS::Init();

View File

@ -32,7 +32,10 @@
<Add option="-Wall" /> <Add option="-Wall" />
<Add option="-fexceptions" /> <Add option="-fexceptions" />
</Compiler> </Compiler>
<Unit filename="NDS.cpp" />
<Unit filename="NDS.h" />
<Unit filename="main.cpp" /> <Unit filename="main.cpp" />
<Unit filename="types.h" />
<Extensions> <Extensions>
<code_completion /> <code_completion />
<envvars /> <envvars />

20
melonDS.depend Normal file
View File

@ -0,0 +1,20 @@
# depslib dependency file v1.0
1478130209 source:c:\documents\sources\melonds\main.cpp
<stdio.h>
"NDS.h"
1478129148 c:\documents\sources\melonds\nds.h
"types.h"
1463409689 c:\documents\sources\melonds\types.h
1463410049 source:c:\documents\sources\melonds\nds.cpp
<stdio.h>
"NDS.h"
1478128612 source:c:\documents\sources\melonds\arm.cpp
"ARM.h"
1478130006 c:\documents\sources\melonds\arm.h
"types.h"

View File

@ -2,4 +2,19 @@
<CodeBlocks_layout_file> <CodeBlocks_layout_file>
<FileVersion major="1" minor="0" /> <FileVersion major="1" minor="0" />
<ActiveTarget name="Debug" /> <ActiveTarget name="Debug" />
<File name="NDS.cpp" open="1" top="1" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="253" topLine="14" />
</Cursor>
</File>
<File name="NDS.h" open="1" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="0" />
</Cursor>
</File>
<File name="main.cpp" open="1" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="0" />
</Cursor>
</File>
</CodeBlocks_layout_file> </CodeBlocks_layout_file>