「32k ROM の crt0.s」の編集履歴(バックアップ)一覧はこちら
「32k ROM の crt0.s」(2009/03/07 (土) 15:29:40) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
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
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