32k ROM の crt0.s

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

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2009年03月07日 15:29
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。