blob: 27faa2ef4cea3a6f1433b28feed2394a6ad346b3 [file] [log] [blame]
/******************************************************************
*** ***
*** crt0 for __BELOW100__ attribute test with SID ***
*** ***
******************************************************************/
/*************************************/
/** Interrupt vectors at 0x8000 **/
/*************************************/
.section .int_vec,"ax"
.global _start
.align 1
_start:
jmpf _int_reset
//jmpf _int_basetimer
//jmpf _int_timer0
//jmpf _int_timer1
//jmpf _int_irq_4
//jmpf _int_irq_5
//jmpf _int_port0
//jmpf _int_port1
//jmpf _int_irq_8
//jmpf _int_irq_9
//jmpf _int_irq_a
//jmpf _int_irq_b
//jmpf _int_irq_c
//jmpf _int_irq_d
//jmpf _int_irq_e
//jmpf _int_irq_f
/*************************************/
/** reset code **/
/*************************************/
.text
_int_reset:
/*************************************/
/** setup stack pointer **/
/*************************************/
mov sp,#__stack
/*************************************/
/** zero .bss section **/
/*************************************/
mov r0,#__bss_start
mov r1,#__bss_end
mov r2,#0
1: mov.w (r0++),r2
blt r0,r1,1b
/*************************************/
/** copy inital value for .data **/
/*************************************/
mov r1,#__data_start
mov r3,#__data_end
mov r0,#@lo(__rdata)
mov r8,#@hi(__rdata)
2: movf.w r2,(r0++)
bnz r0,#0,3f
add r8,#1
3: mov.w (r1++),r2
blt r1,r3,2b
/*************************************/
/** call hardware init routine **/
/*************************************/
callf _hwinit
/*************************************/
/** call initializaton routines **/
/*************************************/
callf _init
/*************************************/
/** setup fini routines to be **/
/** called from exit **/
/*************************************/
mov r2,#@fptr(_fini)
callf atexit
/*************************************/
/** call main() with empty **/
/** argc/argv/envp **/
/*************************************/
mov r2,#0
mov r3,#0
mov r4,#0
callf main
/*************************************/
/** return from main() **/
/*************************************/
callf exit
/*************************************/
/** should never reach this code **/
/*************************************/
jmpf _start
/*************************************/
/** default h/w initialize routine **/
/** and default _init/_finit for **/
/** -nostartfiles option **/
/*************************************/
.globl _hwinit
.weak _hwinit
_hwinit:
.globl _init
.weak _init
_init:
.globl _fini
.weak _fini
_fini:
ret
/******************************************************************
*******************************************************************
*** ***
*** Chip information data for LC59_32K ***
*** Written by T.Matsukawa ***
*** ***
*******************************************************************
******************************************************************/
/*************************************/
/** Define convenient macros **/
/*************************************/
#define BCD(x) (((x)/10)%10)*0x10+((x)%10)
#define BCD4(x) BCD((x)/100),BCD(x)
#define BCD6(x) BCD((x)/10000),BCD((x)/100),BCD(x)
/*************************************/
/** Define memory sizes **/
/*************************************/
#define RAM_SIZE 0x7E00
#define ROM_SIZE 0x78000
#define VRAM_SIZE 0x0000
#define VRAM_ROW 0
#define VRAM_COLUMN 0
#define CGROM_SIZE 0x0000
#define PROTECT_SIZE 0x0000
/*************************************/
/** section ".chip_info" **/
/*************************************/
.section .chip_info,"a"
.space 0xb8,0x00
/*************************************/
/** B8-BB : User option address **/
/*************************************/
.word 0x00000
.global __reset_vector
#if 0x00000==0
.equ __reset_vector,0x08000
#else
.equ __reset_vector,0x00000
#endif
/*************************************/
/** BC-BF : Flash Protect address **/
/*************************************/
#if PROTECT_SIZE==0
.word 0x00000000
#else
.word 0x08000+ROM_SIZE-PROTECT_SIZE
#endif
/*************************************/
/** C0-CF : Fixed string **/
/*************************************/
1: .ascii "CHIPINFORMATION"
2: .space (0x10-(2b-1b)),0x00
/*************************************/
/** D0-DF : Chipname **/
/*************************************/
1: .ascii "LC59_32K"
2: .space (0x10-(2b-1b)),0x00
/*************************************/
/** E0-E1 : Format version(BCD4) **/
/*************************************/
.byte 0x10, 0x00
.space 6, 0x00
/*************************************/
/** E8-F5 : Memory sizes **/
/*************************************/
.byte BCD4(ROM_SIZE/1024)
.byte BCD6(RAM_SIZE)
.byte BCD6(VRAM_SIZE)
.byte BCD4(VRAM_ROW)
.byte BCD4(VRAM_COLUMN)
.byte BCD4(CGROM_SIZE/1024)
.space 3, 0x00
/*************************************/
/** F9 : Package type **/
/*************************************/
.byte 0xff
.space 6, 0x00
/*************************************/
/** In order to link BIOS in library**/
/*************************************/
.equ dummy,__bios_entry