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 の中身を解析しなさい、という事になるんかな。これはハードル高いぞ。
とりあえずキリが良さげなので、ここでエントリ投入。