Here is a quick HOWTO with regard to creating valid cart images of 16KB games, i.e. for the RGCD 16KB game competitions: http://www.rgcd.co.uk/2013/05/c64-16kb-cartridge-game-development.html First of all: your game shall not exceed 16KB in size, in fact it should stay somewhat below the limit of 16384 Bytes since you will need some additional space for a proper CBM header and init-routines that you may not have thought of yet. When a cart is inserted to the expansion port of the C64, the C64 will NOT run its Kernal reset routines. Instead the following happens: The c64 starts at its RESET vector given in $fffc/fffd which points to the famous $fce2. Almost the first thing at $fce2 is a check for the cartridge magic bytes at $8003. (kernal code here: http://unusedino.de/ec64/technical/aay/c64/romfd02.htm) So, if at $8003 it finds in ROM the bytes which correspond to 'CBM80' it jumps to $8000. Why $8000? For 16KB cartridges (the most common ones, and the ones RGCD uses) the 16KB on the cart are mapped to $8000-$bfff (always). So the first byte in the ROM of the cart can be seen at $8000 from the C64. IMPORTANT: the cart-ROM _replaces_ BASIC-ROM which would otherwise be at $a000-$bfff. You cant get around this. This is the most common mistake when programs fail to run from tape. Whenever BASIC is enabled via $01 you have CART ROM at $8000-$9fff AND (for 16k carts) at $a000-bfff. This has two major implications: 1) you CAN NOT use BASIC routines when a cart is inserted (without weird tricks, i.e. storing BASIC routines on cart etc) 2) you need to be careful about $01 as you may map in ROM at $8000 without expecting it. Please refer to this if in doubt: http://unusedino.de/ec64/technical/aay/c64/memcfg.html [3] You should also be careful about the usage of KERNAL routines as some of them sweep across BASIC-code as well! The .CRT file itself: by far the easiest and least error-prone way to generate a proper crt-file is to use 'cartconv' which comes with vice. Still you have to set up all the code required for proper initialisation. You find all the info you need here: http://www.codebase64.org/doku.php?id=base:code_frame_for_16_kb_crt-images Check the 2nd approach there. In short this is needed (xa format): *=$8000 ;PC starts at $8000 obviously .word launcher ;cold start .word launcher ;warm start .byte $c3 ;c .byte $c2 ;b .byte $cd ;m .byte $38 ;8 .byte $30 ;0 launcher ;this is my working example how to do your own reset stx $d016 jsr $fda3 ;prepare irq jsr $fd50 ;init memory jsr $fd15 ;init i/o jsr $ff5b ;init video ... IMPORTANT: $ff5b will also set d021/d020 (the screen+border colors) to blue! 99% of all games start with black though, so this looks super-ugly at bootup. You can bypass $ff5b by setting up the VIC registers yourself and then continuing the kernal routine at some later stage. Working example code: ;instead of 'jsr $ff5b' use: ldx #$2f loop lda vic_regs_data, x sta $d000, x dex bpl loop jsr $e51b with vic_regs_data as you please, i.e.: vic_regs_data .dsb 16,0 ; set x,y of all sprites to 0 .byte $00, $1b, $00, $00, $00, $00, $c8, $00, $15, $71, $f0, $00, $00, $00, $00, $00 ;border colors 0,0 and then the spritecolors (just 4 bit anyway). .byte $00, $00, $f1,$f2,$f3,$f4,$f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$fc,$ff This should look much nicer now. Test the crt-image you made with cartconv as described in the above link carefully and keep in mind that things might work in vice but not on a real machine. NOT due to bugs in vice (if you read this you will not have to worry about vice bugs) but since VICE has RAM and IO defaults that your C64 does not have. If things fail, in my experience you should check this: Did my code expect RAM and landet into CART ROM? -> is $01 set properly (is $00 ok?) -> is my IRQ routine and its setup ok and not dependant on stuff that aint there? -> do I handle SEI/CLI properly? At best, try to avoid using KERNAL stuff during the game alltogether and stick to values of $01 that never blend in any ROM once you 'loaded' the game from cart. Now good luck, dont lose hope, feel free to contact me on specific questions and if you use the routine on codebase64 and/or found all this super helpful, credit me for linking or such :) I'd appreciate it :) Cheers, enthusi /RGCD, ONSLAUGHT