189 lines
8.3 KiB
ArmAsm
189 lines
8.3 KiB
ArmAsm
/******************************************************************
|
|
*** ***
|
|
*** 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
|