From f766c40cc71156cbb924d83fe7d9c815c8558c88 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Mon, 13 Jan 2025 21:57:50 +0100 Subject: [PATCH] =?UTF-8?q?-=20Comencem=20a=20implementar=20la=20mem=C3=B2?= =?UTF-8?q?ria=20-=20Afegim=20la=20boot=20rom,=20i=20el=20tetris=20pa=20an?= =?UTF-8?q?ar=20probant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dmg_boot.bin | Bin 0 -> 256 bytes mem.cpp | 37 +++++++++++++++++++++++++++++++++++++ mem.h | 5 ++++- tetris.gb | Bin 0 -> 32768 bytes 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 dmg_boot.bin create mode 100644 mem.cpp create mode 100644 tetris.gb diff --git a/dmg_boot.bin b/dmg_boot.bin new file mode 100644 index 0000000000000000000000000000000000000000..afa0ee4792c2ba80afb6b0c1962e249e195e6fc0 GIT binary patch literal 256 zcmV+b0ssCn{{OEb|DQ6;d?5QFCjSl*K7caf3_kPXGCp^AKK$TE5d;At5P%xZl>p6_ z026!uG$8X4*Z>9y8WSQT1t9r88R`(3AupK@3_U0aG7TX4E)N*o0-PxJD zyJur=4(!a`+?k)dxidaILb;{6r9wO*1OXAK02&j%ApRqL{xl%<1{rvUBLyJ)h9Lev G0pL*XS7L7f literal 0 HcmV?d00001 diff --git a/mem.cpp b/mem.cpp new file mode 100644 index 0000000..a45c48f --- /dev/null +++ b/mem.cpp @@ -0,0 +1,37 @@ +#include "mem.h" +#include + +namespace mem +{ + char *title = nullptr; + uint8_t *memory = nullptr; + uint8_t *mapper_type = nullptr; + uint8_t *rom_size = nullptr; + uint8_t *ram_size = nullptr; + + void init(const uint8_t* rom, const int size) + { + if (memory) free(memory); + memory = (uint8_t*)malloc(size); + title = (char*)&memory[0x134]; + mapper_type = &memory[0x147]; + rom_size = &memory[0x148]; + ram_size = &memory[0x149]; + } + + void reset() + { + + } + + uint8_t readMem(uint16_t address) + { + + } + + void writeMem(uint16_t address, uint8_t value) + { + + } + +} diff --git a/mem.h b/mem.h index d539fdf..afc2000 100644 --- a/mem.h +++ b/mem.h @@ -3,7 +3,10 @@ namespace mem { + #define MAPPER_NONE 0 + + void init(const uint8_t* rom, const int size); void reset(); uint8_t readMem(uint16_t address); void writeMem(uint16_t address, uint8_t value); -} \ No newline at end of file +} diff --git a/tetris.gb b/tetris.gb new file mode 100644 index 0000000000000000000000000000000000000000..fbcef426f62d80d4c33774aad70653c5ada1d7b6 GIT binary patch literal 32768 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 literal 0 HcmV?d00001