apple1emu.asm (2)
色々ばたばたしてるので、なんとなくメインループっぽいあたりで茶を濁す。てか、昨晩もそのあたりで茶を濁してる模様。
ソース見てみたら先頭で di してるので
ei call load_state call execute ; GO! call save_state jr reset_loop
なナニの ei は最初のみの儀式なのかな。しかし z80 の割り込みってどうやって制御してるんでしょうか。インターフェース復刻版にて z80 な割り込み云々の記述がありますな。
とりあえず
上記なソレに入る前にその上の記述が微妙に気になります。とりあえず以下な部分はコメントで理解できる。
reset_loop: ld hl,0 ld (dsp_data),hl ; display ready ld (kbd_data),hl ; no key available
問題は次のブロックか。
ld hl,(m6502_reset) ; start from reset vector ld (reg_pc),hl ld a,&04 ; interrupts disabled ld (reg_p),a
m6402_reset の定義が以下。
m6502_reset: equ &fffc ; reset vector address
reg_pc はエミュレータの中のナニの PC なのかな。これはレジスタの仕様が分かってないと微妙だな。ええと、apple1emu.asm での定義が以下。
; During running we keep the 65xx registers in Z80 registers ; These are used only to hold the state before/after running reg_a: defb 0 reg_p: defb 0 reg_x: defb 0 reg_y: defb 0 reg_s: defb 0 reg_pc: defw 0
ええと APPLE I REPLICA CREATION によれば 6502 Registers は
- accumulator
- Index Register X and Y
- The Program Counter (PC)
- The Stack Pointer
- The Processor Status Register
との事。The Processor Status Register については以下な模様。
+-+-+-+-+-+-+-+-+ |N|V|1|B|D|I|Z|C| +-+-+-+-+-+-+-+-+ | | | | | | | | | | | | | +- Carry 1=true | | | | | +--- Zero 1=Result is 0 | | | | +----- IRQ Disable 1=Disable | | | +------- Decimal Mode 1=true | | +--------- BRK Command 1=BRK | +------------- Overflow 1=true +--------------- Nagative 1=NEG
ええと、IRQ Disable と Enable Interruput のソレが分からぬ。ちょっと今日は色々な意味で限界なので明日余裕があればこのあたりを hoge ってみます。