diff --git a/.vimspector.json b/.vimspector.json new file mode 100644 index 0000000..1581479 --- /dev/null +++ b/.vimspector.json @@ -0,0 +1,24 @@ +{ + "configurations": { + "CC65 VICE": { + "adapter": "cust_cc65-vice", + "configuration": { + "request": "launch", + "name": "CC65 Vice Launch", + "debugFile": "${workspaceFolder}/build/machismo.dbg", + "mapFile": "${workspaceFolder}/build/machismo.map", + "program": "${workspaceFolder}/build/machismo.d64", + "build": { + "cwd": "${workspaceFolder}", + "command": "scons", + "args": [] + }, + "stopOnEntry": true, + "viceArgs": [ + "-model", + "ntsc" + ] + } + } + } +} diff --git a/SConstruct b/SConstruct index 31b1429..d64ee3e 100644 --- a/SConstruct +++ b/SConstruct @@ -8,7 +8,7 @@ character_start = 'D800' if 'CC65_HOME' in os.environ: cc65_home = os.environ['CC65_HOME'] else: - cc65_home = '' + cc65_home = str(Glob(os.environ['HOME'] + '/.vscode/extensions/entan-gl.cc65-vice*/dist/cc65')[0]) if 'DISPLAY' in os.environ: display = os.environ['DISPLAY'] @@ -33,6 +33,8 @@ env = Environment( LINKFLAGS = ['-g', '-C', 'c64.cfg', '-D__HIMEM__=$' + screen_start, '-Wl', '--dbgfile,build/msprite.dbg', '-Wl', '-Lnbuild/msprite.lbl', '-Wl', '--mapfile,build/msprite.map'] ) +env.PrependENVPath("PATH", cc65_home + "/bin_linux_x64") + prg = env.Program(target=["build/msprite.prg", "build/msprite.map", "build/msprite.dbg", "build/msprite.lbl"], source=[Glob('src/*.c'), Glob('src/*_asm.s')]) sprites = Glob('res/sprites/*.spd') diff --git a/src/main.c b/src/main.c index 86beb3e..dfa1698 100644 --- a/src/main.c +++ b/src/main.c @@ -193,7 +193,7 @@ typedef struct sprite_data* sprite_handle; #define SPRITE_POOL_SIZE 32 struct sprite_data _sprite_pool[SPRITE_POOL_SIZE]; sprite_handle _sprite_list[SPRITE_POOL_SIZE]; -unsigned char sprite_count; +unsigned char sprite_count = 0; void init_sprite_pool(void) { memset(&_sprite_pool, 0x00, sizeof(struct sprite_data) * SPRITE_POOL_SIZE); @@ -505,4 +505,4 @@ unsigned char main(void) { while(true); return 0; -} \ No newline at end of file +} diff --git a/src/main_raster_irq_asm.s b/src/main_raster_irq_asm.s index 01316af..bb94dc0 100644 --- a/src/main_raster_irq_asm.s +++ b/src/main_raster_irq_asm.s @@ -161,7 +161,6 @@ moarcs: sta sprite_index get_next_sprite - ; if new_y >= current_y + buffer lda current_y clc @@ -181,8 +180,6 @@ unhandled: .proc raster_irq ; Make sure this is a raster interrupt and we're ready - lda _irq_setup_done - beq unhandled lda VIC_IRQ_RASTER bit VIC_IRR beq unhandled @@ -191,6 +188,10 @@ unhandled: ora VIC_IRR sta VIC_IRR + ; Make sure we're ready to start processing interrupts + lda _irq_setup_done + beq handled + lda ptr1 ldx ptr1+1 sta ptr1_save @@ -210,4 +211,8 @@ unhandled: lda IRQ_NOT_HANDLED lsr rts +handled: + lda IRQ_HANDLED + lsr + rts .endproc \ No newline at end of file