apple1emu.asm (5)
あまり細かい部分に着目せず、なんとなく眺めている状況。
どうもちゃんと動作がイメージできていないのだけれど、Samcoupe なソレに apple1emu なイメージが load されて、apple1 な REPL が動作する、って理解で良いのかな。
# REPL と言うと言い杉かもしれませんが。
で
最初の一発目的にどうなるのか、というと
ld hl,(m6502_reset) ; start from reset vector ld (reg_pc),hl ld a,&04 ; interrupts disabled ld (reg_p),a
で、m6502_reset の値は
m6502_reset: equ &fffc ; reset vector address
という事で 0xfffc に何が格納されてるのか、って事か。
ちなみにメモリの末端らへんは
; Woz Monitor ROM (&ff00-&ffff) ; May be overwritten by includes below dump &ff00 MDAT "apple1.rom"
という事なのか。od で見てみた。
$ od -x apple1.rom 0000000 58d8 7fa0 128c a9d0 8da7 d011 138d c9d0 ;; ff00 0000020 f0df c913 f09b c803 0f10 dca9 ef20 a9ff ;; ff10 0000040 208d ffef 01a0 3088 adf6 d011 fb10 10ad ;; ff20 0000060 99d0 0200 ef20 c9ff d08d a0d4 a9ff aa00 ;; ff30 0000100 850a c82b 00b9 c902 f08d c9d4 90ae f0f4 ;; ff40 0000120 c9f0 f0ba c9eb f0d2 863b 8628 8429 b92a ;; ff50 0000140 0200 b049 0ac9 0690 8869 fac9 1190 0a0a ;; ff60 0000160 0a0a 04a2 260a 2628 ca29 f8d0 d0c8 c4e0 ;; ff70 0000200 f02a 2497 502b a510 8128 e626 d026 e6b5 ;; ff80 0000220 4c27 ff44 246c 3000 a22b b502 9527 9525 ;; ff90 0000240 ca23 f7d0 14d0 8da9 ef20 a5ff 2025 ffdc ;; ffa0 0000260 24a5 dc20 a9ff 20ba ffef a0a9 ef20 a1ff ;; ffb0 0000300 2024 ffdc 2b86 24a5 28c5 25a5 29e5 c1b0 ;; ffc0 0000320 24e6 02d0 25e6 24a5 0729 c810 4a48 4a4a ;; ffd0 0000340 204a ffe5 2968 090f c9b0 90ba 6902 2c06 ;; ffe0 0000360 d012 fb30 128d 60d0 0000 0f00 ff00 0000 ;; fff0 0000400 $
上記によれば 0xff なのかなぁ。wikipedia によれば z80 って 0xff はソフトウェア割り込みとあるな。でも、これを評価するのは 6502 なエミュのはず。
ってあら?
ld hl,(m6502_reset) ; start from reset vector
ってコトですが、これはどう評価されるのだろうか、と思ったら Z80 命令表によれば以下な模様。
LD HL,(nn) H <- (nn+1) * * * * * * 5 16 2A XX XX
L <- nn
てーコトは hl には 0x00ff が格納されている訳、って事で良いのかな。ちょっと自信無いですが。で、プログラムカウンタにこれが代入されています。
ld (reg_pc),hl
うーん、ちょっと袋小路。分かる事を整理しつつなんとか材料にならないか。
使ってるナニ
まず、apple1emu.asm のいっちゃん下らへんで定義されてるナニとしては
- 0xff00 - 0xffff
- apple1.rom が load されている
- 0x6000 - 0x7fff
- applesoft-lite-0.4-ram が load されている
- 0xe000 - 0xffff
- 65c02.rom が load されている
- 0xd000
- apple1emu が load されている (はず
- 0xc000
- opdefs.inc にある通り、6502 なオペランドな命令が格納されていると思われる
ってコトなので、プログラムカウンタに 0x00ff ってのはナチュラルな可能性大。ここまで来ると Simcoupe でデバグできんのか的ソレがナニ。
で
Simcoupe 立ち上げてメモリを覗いてたらナチュラル発覚。
FF00 FF00: D8 FFFC FFFC: 00
このあたりがバイナリアン的に微妙な所以ですな。エンディアンがなんたら、で
0000000 58d8 7fa0 128c a9d0 8da7 d011 138d c9d0 ;; ff00
な並びになってるけど、ff00 番地は 0xd8 なんですか (sigh
という事は上記出力の通り、0xfffc 番地は 0x00 という事になりますな。という事は hl レジスタに格納されるのは 0xff00 という事になるんか。これは apple1.rom の先頭番地という事になりますな。
で
apple1.rom な中身が実行されそげなのは分かったんですが、apple1.rom の中身を解析しなさい、という事になるんかな。これはハードル高いぞ。
とりあえずキリが良さげなので、ここでエントリ投入。