32k ROM イメージ用 crt0.s サンプル
各種デバイスの初期化をしません
そのためディスクドライブも使用できません
ROM ヘッダ部分
カートリッジロムヘッダと
0x4010 からの初期化コードエントリポイントなどの設定
;; crt0.s for msx rom
.module crt0
.globl _main
.area _HEADER (ABS)
;; rom header
.org 0x4000
.db 0x41, 0x42 ; id
.dw init ; init
.dw 0x0000 ; statement
.dw 0x0000 ; device
.dw 0x0000 ; text
.dw 0x0000 ; reserve
.dw 0x0000 ; reserve
.dw 0x0000 ; reserve
ここから main() に入る前の初期化
スタック設定とページ1とページ2を ROM カートリッジにする処理
ここでグローバル変数初期化コードを呼びたいのだが、
どうやっても初期化コードが DATA セクションに乗ってしまうので諦めた
SDCC のバージョンが上がれば、できるようになるかも
;; initialize
.org 0x4010
init:
;; Stack at the top of bios work.
ld sp,#0xf380
call 0x0138 ; RSLREG
ld b,a
; and #0x0c0
srl a
srl a
ld hl, #0x8000
call 0x0024 ; ENASLT
ei
;; Initialise global variables
; call gsinit
call _main
jp _exit
_exit::
halt
ここに書いた順でセクションの位置が決まるらしい
なのでリンカスクリプトはないっぽい
;; Ordering of segments for the linker.
.area _HOME
.area _CODE
.area _GSINIT
.area _GSFINAL
.area _DATA
.area _BSS
.area _HEAP
最終更新:2009年03月07日 15:29