User Tools

Site Tools


base:code_frame_for_16_kb_crt-images
no way to compare when less than two revisions

Differences

This shows you the differences between two versions of the page.


base:code_frame_for_16_kb_crt-images [2015-04-17 04:30] (current) – created - external edit 127.0.0.1
Line 1: Line 1:
 +====== Raw Frame for Generic 16 KB cart images ======
  
 +
 +<code>
 +; raw frame for generic 16 KB cartridge images
 +; v 1.0 enthusi 04/2012
 +; this 16 KB Cartridge framework was written for http://www.rgcd.co.uk
 +; feel free to use/change this code and give credits :)
 +; you will find this document also at http://codebase64.org
 +; this is a VERY simple but efficient approach, you can make more 
 +; sophisticated usage of ROM using an own depacker routine etc....
 +; sources are in XA format but no special features are used
 +; I strongly recommend the usage of cartconv which comes with vice
 +; you can as well set up your own crt-header, which will look 
 +; more or less like this:
 +</code>
 +
 +<code>
 +;.asc "C64 CARTRIDGE   "
 +;.byte $00,$00   ;header length
 +;.byte $00,$40   ;header length
 +;.word $0001     ;version
 +;.word $0000     ;crt type
 +;.byte $00       ;extrom line
 +;.byte $00       ;game line
 +;.byte $00,$00,$00,$00,$00,$00 ;unused
 +;.asc "MY NAME"
 +;name
 +;.dsb ($0040-name),0
 +;;chip packets
 +;.asc "CHIP"
 +;.byte $00,$00,$40,$10   ;chip length?
 +;.byte $00,$00   ;chip type
 +;.byte $00,$00   ;bank
 +;.byte $80,$00   ;adress
 +;.byte $40,$00 ;length
 +;ROM part follows...
 +</code>
 +
 +The following is for creating a .bin file of 16384 Bytes length as you would burn it onto EPROM,
 +or to use as input for cartconv and alike.
 +
 +<code>
 +;---------------------------------------------------------- 
 +; example usage
 +; xa frame.asm -o frame.bin
 +; cartconv -t normal -i frame.bin -n 'my cart' -o frame.crt
 +; x64 -cartcrt frame.crt
 +;----------------------------------------------------------
 +
 +;no load-adress for bin-file, so no header here
 +
 +*=$8000
 +.word launcher ;cold start
 +.word launcher ;warm start
 +.byte $c3 ;c
 +.byte $c2 ;b
 +.byte $cd ;m
 +.byte $38 ;8
 +.byte $30 ;0
 +
 +launcher
 +  stx $d016
 +  jsr $fda3 ;prepare irq
 +  jsr $fd50 ;init memory
 +  jsr $fd15 ;init i/o
 +  jsr $ff5b ;init video
 +                ;make sure this sets up everything you need,
 +                ;the calls above are probably sufficient
 +  ldx #$fb
 +  txs
 +
 +;set up starting code outside of cartridge-area
 +move_starter
 +  ldx #(starter_end-starter_start)
 +loop1
 +  lda starter_start,x
 +  sta $100,x
 +  dex
 +  bpl loop1
 +  jmp $100
 +;---------------------------------
 +starter_start
 +  ldx #$40 ;64 pages = 256 * 64 = 16384 Bytes
 +  ldy #0
 +loop
 +src
 +  lda exomized_data,y
 +dst
 +  sta $801,y
 +  iny
 +  bne loop
 +  inc src+2-starter_start+$100 
 +  inc dst+2-starter_start+$100
 +  dex
 +  bpl loop
 +
 +;make sure settings for $01 and IRQ etc are correct for your code
 +;remember THIS table from AAY64:
 +
 +;       Bit+-------------+-----------+------------+
 +;       210| $8000-$BFFF |$D000-$DFFF|$E000-$FFFF |
 +;  +---+---+-------------+-----------+------------+
 +;  | 7 |111| Cart.+Basic |    I/O    | Kernal ROM |
 +;  +---+---+-------------+-----------+------------+
 +;  | 6 |110|     RAM        I/O    | Kernal ROM |
 +;  +---+---+-------------+-----------+------------+
 +;  | 5 |101|     RAM        I/O    |    RAM     |
 +;  +---+---+-------------+-----------+------------+
 +;  | 4 |100|     RAM        RAM    |    RAM     |
 +;  +---+---+-------------+-----------+------------+
 +;  | 3 |011| Cart.+Basic | Char. ROM | Kernal ROM |
 +;  +---+---+-------------+-----------+------------+
 +;  | 2 |010|     RAM     | Char. ROM | Kernal ROM |
 +;  +---+---+-------------+-----------+------------+
 +;  | 1 |001|     RAM     | Char. ROM |    RAM     |
 +;  +---+---+-------------+-----------+------------+
 +;  | 0 |000|     RAM        RAM    |    RAM     |
 +;  +---+---+-------------+-----------+------------+
 +
 +  lda #$35 ;cart is always on instead of BASIC unless it can be switched off via software
 +  sta $01
 +  jmp $80d ;for exomizer, i.e.
 +
 +starter_end
 +;----------------------------------
 +exomized_data
 +.bin 2,0,"data.exo"
 +;syntax for exomizer 2.0.1:
 +;exomizer sfx sys game.prg -o data.exo
 +main_file_end
 +;fill up full $4000 bytes for bin file ($c000-$8000=$4000)
 +.dsb ($c000-main_file_end),0
 +</code>
base/code_frame_for_16_kb_crt-images.txt · Last modified: 2015-04-17 04:30 by 127.0.0.1