Skip to content

Commit a55bab0

Browse files
more 8ek improvements
1 parent 49e788f commit a55bab0

File tree

5 files changed

+122
-53
lines changed

5 files changed

+122
-53
lines changed

makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ install: all $(addprefix install-,$(SRCS)) $(addprefix install-,$(LIBS))
5656
$(Q)$(call COPYDIR,$(call NATIVEPATH,examples/*),$(INSTALL_EXAMPLES))
5757
$(Q)$(call COPY,$(call NATIVEPATH,src/makefile.mk),$(INSTALL_META))
5858
$(Q)$(call COPY,$(call NATIVEPATH,src/linker_script.ld),$(INSTALL_META))
59+
$(Q)$(call COPY,$(call NATIVEPATH,src/linker_script_app.ld),$(INSTALL_META))
5960
$(Q)$(call COPY,$(call NATIVEEXE,tools/convfont/convfont),$(INSTALL_BIN))
6061
$(Q)$(call COPY,$(call NATIVEEXE,tools/convimg/bin/convimg),$(INSTALL_BIN))
6162
$(Q)$(call COPY,$(call NATIVEEXE,tools/convbin/bin/convbin),$(INSTALL_BIN))

src/crt/crt0.S

Lines changed: 99 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2,50 +2,92 @@
22

33
.assume adl = 1
44

5-
.set ti.mpTmr1Counter, 0x0F20000
6-
.set ti.mpTmrCtrl, 0x0F20030
5+
.equ ti.mpTmr1Counter, 0x0F20000
6+
.equ ti.mpTmrCtrl, 0x0F20030
77

8-
.set ti.bTmr1Enable, 0
9-
.set ti.bTmr1Crystal, 1
10-
.set ti.bTmr1Overflow, 2
11-
.set ti.bTmr1CountUp, 9
8+
.equ ti.bTmr1Enable, 0
9+
.equ ti.bTmr1Crystal, 1
10+
.equ ti.bTmr1Overflow, 2
11+
.equ ti.bTmr1CountUp, 9
1212

13-
.set ti.Arc_Unarc, 0x021448
14-
.set ti.usb_ResetTimer, 0x00004F0
15-
.set ti.usb_DisableTimer, 0x00004F4
16-
.set ti.HomeUp, 0x020828
17-
.set ti.DrawStatusBar, 0x021A3C
18-
.set ti.ChkFindSym, 0x02050C
19-
.set ti.Mov9ToOP1, 0x020320
20-
.set ti.PutS, 0x0207C0
21-
.set ti.ChkInRam, 0x021F98
22-
.set ti.OP1, 0xD005F8
23-
.set ti.OP3, 0xD0060E
24-
.set ti.AppVarObj, 0x15
25-
.set ti.ClrScrn, 0x020814
26-
.set ti.NewLine, 0x0207F0
27-
.set ti.GetKey, 0x020D8C
28-
.set ti.flags, 0xD00080
29-
.set ti.RunIndicOff, 0x020848
30-
.set ti.PushRealO1, 0x020614
31-
.set ti.Mov8b, 0x020304
32-
.set ti.AnsName, 0x020FF4
33-
.set ti.FindSym, 0x020510
34-
.set ti.StrngObj, 4
35-
.set ti.Get_Tok_Strng, 0x020870
36-
.set ti.Isa2ByteTok, 0x0204AC
37-
.set ti.PopRealO1, 0x0205DC
38-
.set ti.MovFrOP1, 0x02032C
39-
.set ti.ClrLCDFull, 0x020808
13+
.equ ti.Arc_Unarc, 0x021448
14+
.equ ti.usb_ResetTimer, 0x00004F0
15+
.equ ti.usb_DisableTimer, 0x00004F4
16+
.equ ti.HomeUp, 0x020828
17+
.equ ti.DrawStatusBar, 0x021A3C
18+
.equ ti.ChkFindSym, 0x02050C
19+
.equ ti.Mov9ToOP1, 0x020320
20+
.equ ti.PutS, 0x0207C0
21+
.equ ti.ChkInRam, 0x021F98
22+
.equ ti.OP1, 0xD005F8
23+
.equ ti.OP3, 0xD0060E
24+
.equ ti.AppVarObj, 0x15
25+
.equ ti.ClrScrn, 0x020814
26+
.equ ti.NewLine, 0x0207F0
27+
.equ ti.GetKey, 0x020D8C
28+
.equ ti.flags, 0xD00080
29+
.equ ti.RunIndicOff, 0x020848
30+
.equ ti.PushRealO1, 0x020614
31+
.equ ti.Mov8b, 0x020304
32+
.equ ti.AnsName, 0x020FF4
33+
.equ ti.FindSym, 0x020510
34+
.equ ti.StrngObj, 4
35+
.equ ti.Get_Tok_Strng, 0x020870
36+
.equ ti.Isa2ByteTok, 0x0204AC
37+
.equ ti.PopRealO1, 0x0205DC
38+
.equ ti.MovFrOP1, 0x02032C
39+
.equ ti.ClrLCDFull, 0x020808
4040

41+
#if !HAS_APPLICATION
4142
.section .header,"ax",@progbits
4243

4344
.local __header
4445
__header:
4546
.db 0xEF, 0x7B, 0x00 ; 0x00 is signifier for C programs
47+
#endif
4648

4749
.section .init,"ax",@progbits
4850

51+
#if HAS_APPLICATION
52+
.equ ti.onSP, 0xD007FA
53+
.equ ti.ResetStacks, 0x02103C
54+
.equ ti.asm_prgm_size, 0xD0118C
55+
.equ ti.JForceCmd, 0x020164
56+
.equ ti.kClear, 0x09
57+
.equ ti.DelMem, 0x020590
58+
.equ ti.userMem, 0xD1A881
59+
.equ ti.pixelShadow, 0xD031F6
60+
.equ ti.textShadow, 0xD006C0
61+
.equ ti.cmdShadow, 0xD0232D
62+
.equ ti.MemClear, 0x0210DC
63+
.equ ti.ClrTxtShd, 0x020818
64+
65+
ld iy, ti.flags
66+
ld sp, (ti.onSP) ; reset stacks
67+
call ti.ResetStacks
68+
ld hl, ___data_lma
69+
ld de, ___data_vma
70+
ld bc, ___data_len
71+
ldir ; there is always .data, no need for zero check
72+
call __start
73+
ld de, (ti.asm_prgm_size)
74+
ld hl, ti.userMem
75+
call ti.DelMem
76+
or a,a
77+
sbc hl,hl
78+
ld (ti.asm_prgm_size),hl
79+
ld hl, ti.pixelShadow
80+
ld bc, 8400 * 3
81+
call ti.MemClear
82+
call ti.ClrTxtShd
83+
ld hl, ti.textShadow
84+
ld de, ti.cmdShadow
85+
ld bc, $104
86+
ldir
87+
ld a, ti.kClear
88+
jp ti.JForceCmd
89+
#endif
90+
4991
.global __start
5092
__start:
5193
ld iy, ti.flags
@@ -107,8 +149,10 @@ __start:
107149
call ti.PutS
108150
jp ti.GetKey
109151

152+
#if !HAS_APPLICATION
110153
___libload_libs:
111154
LIBLOAD_LIBS ; autogenerated by cedev-obj
155+
#endif
112156
#endif
113157

114158
call ti.RunIndicOff ; assumes iy = flags
@@ -336,14 +380,22 @@ _abort:
336380
ld hl, 6 ; SIGABRT
337381
.L.skip._abort:
338382
#endif
339-
ld sp,0
383+
#if HAS_APPLICATION
384+
ld sp, (_exit.sp)
385+
#else
386+
ld sp, 0
340387
.global _exit.sp
341388
.equ _exit.sp, $ - 3
389+
#endif
342390
push hl
343391
ld iy, ti.flags
392+
#if HAS_APPLICATION
393+
ld a, (_exit.flash_wait_states)
394+
#else
344395
ld a, 0
345396
.local _exit.flash_wait_states
346397
.equ _exit.flash_wait_states, $ - 1
398+
#endif
347399
ld (0xE00305), a
348400
call ti.usb_ResetTimer
349401
ld a, 1
@@ -389,6 +441,19 @@ __webaddress:
389441
.db "http://tiny.cc/clibs",0
390442
#endif
391443

444+
#if HAS_APPLICATION
445+
.section .bss
446+
.global _exit.sp
447+
_exit.sp:
448+
.d24 0
449+
_exit.flash_wait_states:
450+
.db 0
451+
452+
.section .data
453+
___libload_libs:
454+
LIBLOAD_LIBS ; autogenerated by cedev-obj
455+
#endif
456+
392457
#if HAS_MAIN_ARGC_ARGV
393458
.extern ___main_argc_argv
394459
#else

src/linker_script.ld

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
PHDRS
1+
MEMORY
22
{
3-
prgm PT_LOAD FLAGS(7); /* Read + Write + Execute - single loadable segment */
4-
bss PT_LOAD FLAGS(6); /* Read + Write - BSS/heap, not loaded from file */
3+
prgm : ORIGIN = LOAD_ADDR, LENGTH = 0x400000
4+
bss : ORIGIN = BSSHEAP_LOW, LENGTH = BSSHEAP_HIGH - BSSHEAP_LOW
55
}
66

77
SECTIONS
@@ -12,11 +12,11 @@ SECTIONS
1212
{
1313
KEEP (*(.header))
1414
KEEP (*(.header.icon))
15-
} :prgm
15+
} >prgm
1616
.init :
1717
{
1818
*(.init)
19-
} :prgm
19+
} >prgm
2020
.text :
2121
{
2222
*(.text.unlikely .text.*_unlikely .text.unlikely.*)
@@ -26,11 +26,11 @@ SECTIONS
2626
*(SORT(.text.sorted.*))
2727
*(.text .stub .text.* .gnu.linkonce.t.*)
2828
*(.gnu.warning)
29-
} :prgm
29+
} >prgm
3030
.rodata :
3131
{
3232
*(.rodata .rodata.* .gnu.linkonce.r.*)
33-
} :prgm
33+
} >prgm
3434

3535
.init_array :
3636
{
@@ -39,14 +39,15 @@ SECTIONS
3939
KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*)))
4040
KEEP (*(.init_array))
4141
PROVIDE_HIDDEN (__init_array_end = .);
42-
} :prgm
42+
} >prgm
4343
.fini_array :
4444
{
4545
PROVIDE_HIDDEN (__fini_array_start = .);
4646
KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*)))
4747
KEEP (*(.fini_array))
4848
PROVIDE_HIDDEN (__fini_array_end = .);
49-
} :prgm
49+
} >prgm
50+
___data_low = .;
5051
.data :
5152
{
5253
*(.data .data.* .gnu.linkonce.d.*)
@@ -57,24 +58,24 @@ SECTIONS
5758
___runprgm_reloc_start = .;
5859
*(.runprgm.reloc)
5960
___runprgm_reloc_end = .;
60-
} :prgm
61+
} >prgm
62+
___data_high = .;
63+
___data_len = ___data_high - ___data_low;
6164

62-
/* BSS section in the BSSHEAP range - separate PT_LOAD, not loaded from file */
6365
. = BSSHEAP_LOW;
6466
___bss_low = .;
65-
.bss (NOLOAD) : SUBALIGN(1)
67+
.bss (NOLOAD) :
6668
{
6769
*(.dynbss)
6870
*(.bss .bss.* .gnu.linkonce.b.*)
6971
*(COMMON)
70-
} :bss
72+
} >bss
7173
___bss_high = .;
7274
___bss_len = ___bss_high - ___bss_low;
7375

74-
/* Heap follows BSS */
75-
. = ALIGN(1);
76-
___heap_low = .;
7776
ASSERT(. <= BSSHEAP_HIGH, "Error: BSS exceed BSSHEAP_HIGH limit")
77+
78+
___heap_low = .;
7879
. = BSSHEAP_HIGH;
7980
___heap_high = .;
8081

src/makefile.mk

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,9 @@ ifeq ($(APPLICATION),YES)
226226
LD_EMIT_RELOCS = --emit-relocs
227227
LOAD_ADDR = 0x000000
228228
CONVBINFLAGS += -k 8ek
229-
TARGET ?= $(NAME).8ek
229+
TARGET = $(NAME).8ek
230+
CRT0_APPLICATION = -DHAS_APPLICATION=1
231+
LINKER_SCRIPT = $(call FORWARD_PATH,$(CEDEV_TOOLCHAIN)/meta/linker_script_app.ld)
230232
else
231233
LD_EMIT_RELOCS =
232234
ifeq ($(ARCHIVED),YES)
@@ -469,7 +471,7 @@ $(CRT0_OBJ): $(CRT0_TMP)
469471

470472
$(CRT0_TMP): $(CRT0_SRC) $(OBJDIR)/crt.h
471473
$(Q)$(call MKDIR,$(@D))
472-
$(Q)$(CC) -I$(OBJDIR) -E -P $(call QUOTE_ARG,$<) -o $(call QUOTE_ARG,$@)
474+
$(Q)$(CC) -I$(OBJDIR) $(CRT0_APPLICATION) -E -P $(call QUOTE_ARG,$<) -o $(call QUOTE_ARG,$@)
473475

474476
ifeq ($(filter clean gfx test version,$(MAKECMDGOALS)),)
475477
-include $(DEPFILES)

0 commit comments

Comments
 (0)