解决指定内存区域分配时,缺页模拟的内存还是使用的第一块

This commit is contained in:
zhangzheng
2025-03-30 13:16:30 +08:00
parent 7d689eda0f
commit 1013936ec1
46 changed files with 231 additions and 139 deletions

View File

@@ -526,14 +526,20 @@ void nes_emulate_frame(void)
extern bool_t print_fps;
int32_t used_tick = sys_read_tick() - st_tick;
// if (1000 / 60 >= used_tick)
// {
// usleep((1000 / 60 - used_tick) * 1000);
// }
if (1000 / 60 >= used_tick)
{
usleep((1000 / 60 - used_tick) * 1000);
}
used_tick = sys_read_tick() - st_tick;
if (print_fps)
{
printf("fps:%d\n", 1000 / used_tick);
static int i = 0;
i++;
if (i % 30 == 0)
{
printf("fps:%d\n", 1000 / used_tick);
}
}
#endif
}

View File

@@ -5,7 +5,7 @@
* @version V1.1
* @date 2022-05-31
* @brief NES PPU ????
* ???????????????ye781205??NES?????????, ????<3F><>!
* ???????????????ye781205??NES?????????, ????<3F><>!
* @license Copyright (c) 2020-2032, ??????????????????????
****************************************************************************************************
* @attention
@@ -116,8 +116,8 @@ uint32 VRAM_accessible()
// uint8* get_VROM_tiles() { return VROM_tiles; }
// #define MASK_BANK(bank,mask) (bank) = ((bank) & (mask))
// #define VALIDATE_VROM_BANK(bank) \
// MASK_BANK(bank,VROM_mask); \
// #define VALIDATE_VROM_BANK(bank)
// MASK_BANK(bank,VROM_mask);
// if((bank) >= (RomHeader->num_8k_vrom_banks * 8)) return;
//****************************************************************************************************
@@ -410,7 +410,7 @@ void do_scanline_and_draw(uint8 *buf)
}
else
{
// clear out solid buffer??????<3F><>????
// clear out solid buffer??????<3F><>????
memset(ppu->solid_buf, 0x00, sizeof(ppu->solid_buf));
}
@@ -595,7 +595,7 @@ void write_2007(uint8 data)
if (addr < 0x2000)
{
#if NES_RAM_SPEED==1 //1:??????<3F><> 0:????
#if NES_RAM_SPEED==1 //1:??????<3F><> 0:????
*(TILE(addr) + (addr & 0xf )) = data;//************************
#else
@@ -833,7 +833,7 @@ void PPU_WriteToPort(uint8 data, uint16 addr )
uint32 attrib_addr;
uint32 attrib_bits;
#if NES_RAM_SPEED==1 //1:??????<3F><> 0:????
#if NES_RAM_SPEED==1 //1:??????<3F><> 0:????
uint8 pattern_lo;
uint8 pattern_hi;
uint8 pattern_mask;
@@ -872,7 +872,7 @@ void PPU_WriteToPort(uint8 data, uint16 addr )
// CHECK_MMC2(pattern_addr);//*******************************************************
#if NES_RAM_SPEED==1 //1:??????<3F><> 0:????
#if NES_RAM_SPEED==1 //1:??????<3F><> 0:????
data = TILE(pattern_addr) + line;
pattern_lo = *data;
@@ -980,7 +980,7 @@ void PPU_WriteToPort(uint8 data, uint16 addr )
uint32 spr_height;
#if NES_RAM_SPEED==1 //1:??????<3F><> 0:????
#if NES_RAM_SPEED==1 //1:??????<3F><> 0:????
uint8 pattern_lo;
uint8 pattern_hi;
@@ -1078,7 +1078,7 @@ void PPU_WriteToPort(uint8 data, uint16 addr )
tile_addr += ppu->spr_pattern_table_addr;
}
#if NES_RAM_SPEED==1 //1:??????<3F><> 0:????
#if NES_RAM_SPEED==1 //1:??????<3F><> 0:????
t = TILE(tile_addr) + line;
pattern_lo = *t;
@@ -1095,11 +1095,11 @@ void PPU_WriteToPort(uint8 data, uint16 addr )
{
//uint8 col = 0x00;
// if a sprite has drawn on this pixel, don't draw anything??????????????????????,?????<3F>ʦ<EFBFBD>???
// if a sprite has drawn on this pixel, don't draw anything??????????????????????,?????<3F>ʦ<EFBFBD>???
if (!((*solid) & SPR_WRITTEN_FLAG))
{
#if NES_RAM_SPEED==1 //1:??????<3F><> 0:????
#if NES_RAM_SPEED==1 //1:??????<3F><> 0:????
col = ((pattern_hi >> (7 - x) << 1) & 2) | ((pattern_lo >> (7 - x)) & 1);
#else

View File

@@ -77,7 +77,7 @@ int flash_write_sector(uint32_t sector_inx, uint32_t *p_buffer, uint16_t num_wri
}
flash_unlock();
status = flash_sector_erase(sector_inx * SECTOR_SIZE + sys_info.bootfs_start_addr);
status = flash_sector_erase(write_addr);
if (status != FLASH_OPERATE_DONE)
{
flash_lock();
@@ -109,8 +109,8 @@ int flash_init(void)
return msg_tag_get_val(tag);
}
tag = u_vmam_alloc(VMA_PROT, vma_addr_create(VPAGE_PROT_RW, VMA_ADDR_PAGE_FAULT_SIM, 0),
32 * 1024 * 1024 /*TODO:*/, 0x8000000, &vaddr);
tag = u_vmam_alloc(VMA_PROT, vma_addr_create(VPAGE_PROT_RWX, VMA_ADDR_PAGE_FAULT_SIM, 0),
align_power_of_2(CONFIG_SYS_TEXT_SIZE), CONFIG_SYS_TEXT_ADDR, &vaddr);
if (msg_tag_get_val(tag) < 0)
{
return msg_tag_get_val(tag);

View File

@@ -873,7 +873,7 @@ void lcd_color_fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint16_t
*/
void lcd_num_show(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint8_t size, int32_t num, uint8_t num_bit)
{
uint8_t i, buf[12], start;
uint8_t i, buf[12], start = 0;
buf[11] = 0;

View File

@@ -149,7 +149,7 @@ int fs_svr_open(const char *path, int flags, int mode)
int fs_svr_read(int fd, void *buf, size_t len)
{
int ret;
int ret = -ENOSYS;
file_desc_t *fdp = fd_get(thread_get_src_pid(), fd);
if (!fdp)
@@ -171,7 +171,7 @@ int fs_svr_read(int fd, void *buf, size_t len)
}
int fs_svr_write(int fd, void *buf, size_t len)
{
int ret;
int ret = -ENOSYS;
file_desc_t *fdp = fd_get(thread_get_src_pid(), fd);
if (!fdp)
@@ -188,6 +188,7 @@ int fs_svr_write(int fd, void *buf, size_t len)
{
ret = char_dev->ops->write(char_dev->dev, buf, len, &fdp->offset);
}
return ret;
}
void fs_svr_close(int fd)
{

View File

@@ -144,6 +144,7 @@ again:
/* config i2c */
i2c_init(hi2c->i2cx, 0x0F, PCA_I2C_CLKCTRL_400K);
}
return 0;
}
static int i2c_bus_configure(mk_i2c_t *drv, umword_t freq)
{

View File

@@ -149,7 +149,7 @@ int fs_svr_open(const char *path, int flags, int mode)
int fs_svr_read(int fd, void *buf, size_t len)
{
int ret;
int ret = -ENOSYS;
file_desc_t *fdp = fd_get(thread_get_src_pid(), fd);
if (!fdp)
@@ -171,7 +171,7 @@ int fs_svr_read(int fd, void *buf, size_t len)
}
int fs_svr_write(int fd, void *buf, size_t len)
{
int ret;
int ret = -ENOSYS;
file_desc_t *fdp = fd_get(thread_get_src_pid(), fd);
if (!fdp)
@@ -188,6 +188,7 @@ int fs_svr_write(int fd, void *buf, size_t len)
{
ret = char_dev->ops->write(char_dev->dev, buf, len, &fdp->offset);
}
return ret;
}
void fs_svr_close(int fd)
{