From 1398456fc7923d5db18708f9a09b27843b3c5fc4 Mon Sep 17 00:00:00 2001 From: Nathaniel Walizer Date: Fri, 31 Jan 2025 00:11:42 -0600 Subject: [PATCH] Fix CNROM CHR ROM size; Fail on bad ROM file size --- src/cart.c | 10 +++++++++- src/map/cnrom.c | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/cart.c b/src/cart.c index be210aa..6741b60 100644 --- a/src/cart.c +++ b/src/cart.c @@ -34,7 +34,7 @@ int nes_cart_init_mem(nes_cart* cart, void* mem, int len) { } if (0 == status) { - int chr_size = nes_chr_page_size * hdr->chr_size_lsb; + int chr_size = nes_chr_page_size * hdr->chr_size_lsb * 2; INES_INFO("%d KB CHR ROM", chr_size / 1024); cart->chr_rom = ptr; cart->chr_rom_banks = hdr->chr_size_lsb * 2; @@ -51,6 +51,14 @@ int nes_cart_init_mem(nes_cart* cart, void* mem, int len) { } } + if (0 == status) { + if ((ptr - mem) != len) { + INES_ERR("Bad file size: read %d, expected %d", + (int)(ptr - mem), len); + status = -1; + } + } + if (0 == status) { if (hdr->flags_6 & ines_Flag_Horizontal) { cart->flags |= Cart_Flag_Horizontal; diff --git a/src/map/cnrom.c b/src/map/cnrom.c index aa3764b..d6f23fc 100644 --- a/src/map/cnrom.c +++ b/src/map/cnrom.c @@ -35,7 +35,7 @@ static void* cnrom_init(nes_mapper* nes_map, nes_cart* cart) { map->prg_rom = cart->prg_rom; map->prg_rom_banks = cart->prg_rom_banks; map->chr_rom = cart->chr_rom; - map->chr_rom_banks = cart->chr_rom_banks; + map->chr_rom_banks = cart->chr_rom_banks / 2; map->mirror = (cart->flags & Cart_Flag_Horizontal) ? 0 : 1; cnrom_reset(map); }