[cc65] new target

Date view Thread view Subject view

From: Adam Wozniak (adam_at_cuddlepuddle.org)
Date: 2002-03-23 00:51:16


I'm trying to target a new machine and I'm having a little trouble
with my crt0.s

I think I need a better understanding of how the cc65 parameter stack
relates to the 6502 call/return stack.

Are these the same beast?  Do they overlap?  Or ar they completely separate?

I've only got 128 bytes of real ram to work with, mapped at 0x80->0xFF
I've got some other areas (0x00->0x3F and 0x280->0x29F) which are memory
mapped devices.  My ROM is 0xF000->0xFFFF.

Where should the 6502 stack go?  The parameter stack?

--Adam




MEMORY {
RAM:   start = $80,   size=$80, file="trash.bin";
ROM:   start = $F000, size=$1000, file="rom.bin";
TIA:   start = $00,   size=$40, file="trash.bin";
RIOT:  start = $280,  size=$20, file="trash.bin";
}

SEGMENTS {
CODE:     load=ROM, type=wprot, define=yes;
RODATA:   load=ROM, type=wprot;
DATA:     load=ROM, run=RAM, type=rw, define=yes;
BSS:      load=ROM, run=RAM, type=bss, define=yes;
VECTORS:  load=ROM, type=ro, start=$FFFA;
ZEROPAGE: load=RAM, type=zp;
TIA:      load=TIA, type=rw;
RIOT:     load=RIOT, type=rw;
}
SYMBOLS {
   __STACKSIZE__ = $80;
}


.autoimport on

.import _main
.import _irq
.import _nmi
.import __copy_data
.import __zero_bss
.export _exit
.export start

.exportzp sp, sreg, regsave
.exportzp ptr1, ptr2, ptr3, ptr4
.exportzp tmp1, tmp2, tmp3, tmp4
.exportzp regbank, zpspace

TOPMEM = $df

.zeropage
 
zpstart  = *
sp:            .res  2  ; Stack pointer
sreg:          .res  2  ; Secondary register/high 16 bit for longs
regsave:       .res  2  ; slot to save/restore (E)AX into
ptr1:          .res  2
ptr2:          .res  2
ptr3:          .res  2
ptr4:          .res  2
tmp1:          .res  1
tmp2:          .res  1
tmp3:          .res  1
tmp4:          .res  1
regbank:       .res  6  ; 6 byte register bank
 
zpspace  = * - zpstart     ; Zero page space allocated

.segment "CODE"

.proc start

   ; disable interrupts
   sei

   ; clear decimal bit
   cld

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;; Is any of this right???

   ; set the 6502 stack pointer to FF
   ldx #$ff
   txs

   ; set up the cc65 parameter stack
   tsx
   stx spsave

   lda #<TOPMEM
   sta sp
   lda #>TOPMEM
   sta sp+1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

   ; clear out the registers
   ldx #0
   ldy #0
   lda #0

   ; copy the DATA segment into RAM
   jsr __copy_data

   ; zero out the bss RAM
   jsr __zero_bss

   ; argument size
   jsr push0
   jsr push0
   ldy #4
   jsr _main

   jmp start
.endproc

.segment "CODE"

.proc _exit
   ; disable interrupts
   sei

   jmp start
.endproc

.segment "CODE"
.proc irq
   jsr _irq
   rti
.endproc

.segment "CODE"
.proc nmi
   jsr _nmi
   rti
.endproc

.segment "DATA"

zpsave: .res zpspace

.segment "BSS"

spsave: .res 1

.segment "VECTORS"
.addr nmi
.addr start
.addr irq


-- 
adam_at_cuddlepuddle.org        http://cuddlepuddle.org/~adam/pgp.txt

----------------------------------------------------------------------
To unsubscribe from the list send mail to majordomo_at_musoftware.de with
the string "unsubscribe cc65" in the body(!) of the mail.


Date view Thread view Subject view

This archive was generated by hypermail 2.1.3 : 2002-03-23 00:02:05 CET