首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CHIP-8 SDL渲染问题

CHIP-8 SDL渲染问题
EN

Stack Overflow用户
提问于 2017-09-12 18:13:53
回答 1查看 485关注 0票数 0

我已经编码了芯片-8 emulator.Whatever我做的,似乎我不能显示任何像素上的screen.The奇怪的是,我已经检查了代码,自上而下已经2天,似乎没有任何problem.It读取的.rom文件到内存中,并获取正确的操作码。

源代码如下:

代码语言:javascript
复制
                SDL_SetRenderDrawColor( renderer, 0, 0, 0, SDL_ALPHA_OPAQUE );
                SDL_RenderClear(renderer);
                uint32_t pixels[(WINDOW_WIDTH / 10) * (WINDOW_HEIGHT / 10)];
                uint16_t i;
                for(i = 0; i < 64*32; i++){
                    pixels[i] = (0x00FFFFFF * display[i]) | 0xFF000000;
                }
                //upload the pixels to the texture
                SDL_UpdateTexture(tex,NULL,pixels, 64 * sizeof(uint32_t));
                //Now get the texture to the screen
                SDL_RenderCopy(renderer,tex,NULL,NULL);
                SDL_RenderPresent(renderer); // Update screen
                ch8.drawF = false;

uint16_t x = ch8->V[((ch8->opcode & 0x0F00) >> 8)];
                uint16_t y = ch8->V[((ch8->opcode & 0x00F0) >> 4)];
                uint8_t n = (ch8->opcode & 0x000F);
                for(i = 0; i < n; i++) {
                    uint8_t pixel= memory[ch8->I.word + i];
                    for(j = 0; j < 8; j++) {
                        if((pixel & (0x80 >> j)) != 0){
                            if(display[x + j  + ((y + i) * 64)] == 1) {
                                ch8->V[0xF] = 1;
                            }
                            display[x + j  + ((y + i) * 64)] ^= 1;
                        }
                    }
                }
EN

回答 1

Stack Overflow用户

发布于 2017-09-13 00:32:23

所以基本上,问题出在init()函数上。我最初使用的是,SDL_CreateWindow和SDL_CreateRenderer,但现在我使用的是,SDL_CreateWindowAndRenderer,它接受指向SDL_Window和SDL_Renderer指针的指针,而不是指向字符的指针和指向窗口的指针。

此外,我还修复了3个问题。1.我将+0x200添加到NNN操作码中,因为一开始我以为只读存储器中的NNN是相对于0的,所以我从每个XNNN opcode.Also中删除了+ 0x200,我在SDL_Texture* tex上忘记了一个*,它应该是SDL_Texture** tex,我只是改变了本地指针指向的地址...2.at操作码2NNN,而不是(ch8->SP) = ch8->opcode & 0x0FFF;its(ch8->SP) = ch8->PC.word;3.at opcode FX65 its I <= ((ch8->opcode & 0x0F00) >> 8)

基本上,SDL_CreateWindowAndRenderer和SDL_CreateWindow&SDL_CreateRenderer之间的区别把我搞糊涂了,我应该先检查一下文档。

现在我只需要让仿真器只重画改变的像素,然后让仿真器播放声音。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46173754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档