###前提・実現したいこと
Brainf*ckインタープリタをMacro assembler ASを用いて
Emu740というMELPS740ファミリ(あるいは6502)のシミュレーション環境に移植しています。
###発生している問題・エラーメッセージ
- ネットに転がっているhelloworldを読み込もうとしたがファイルバッファに転送されない
- 直接内蔵バイナリエディタでプログラムを入力するも正しい結果が表示されない
- サブルーチンを抜けた後に暴走する
- 配列バッファの一部が0x76で初期化されてしまう&256バイト以降(0x100から)が初期化されない
###該当のソースコード
;BF-I for Emu740 ;2017 yosi include macro2.inc include cio2.inc USE_MODIFIED_MONITOR equ 0 ;普通のモニタを使う場合は0にする IF USE_MODIFIED_MONITOR == 1 include monmod.inc org $F000-8192 txbuf: rmb 8192 ELSEIF include mon2.inc org $F800-8192 txbuf: rmb 8192 ENDIF org $8000 jsr init jsr opmsg main: jsr fileinput jsr proc jmp main opmsg: set16 msgaddr,opnmsg jsr putmsg rts putmsg: ldx #$00 ldy #$00 lp10: lda msgaddr,x sta edit_buffer,y inx iny cmp #$00 bne lp10 jsr put_line rts fileinput: set16 msgaddr,filepp jsr putmsg lda #edit_end_top & edit_end_next jsr get_line lda #$0d jsr put_char lda #$0a jsr put_char jsr fload lda #txbuf & $FF sta $20 lda #txbuf & $FF00 >> 8 sta $21 rts proc: lda ($20),y cmp #$00 beq pex jsr proc2 lda $20 adc #$1 sta $20 cmp #$ff bne proc lda $21 adc #$1 sta $21 cmp #$FF bne proc pex: jmp ex proc2: cmp #'>' beq iptr cmp #'<' beq dptr cmp #'+' beq ival cmp #'-' beq dval cmp #'.' beq pchar cmp #',' beq gchar cmp #'[' beq jzero cmp #']' beq jnzer jmp ex iptr: jmp nexptr dptr: jmp prvptr ival: lda ($10),Y adc #1 sta ($10),Y jmp ex dval: lda ($10),Y sbc #1 sta ($10),Y jmp ex pchar: lda ($10),Y jsr put_char jmp ex gchar: jsr get_char sta ($10),Y jmp ex jzero: CMP ($10),Y beq nexptr jmp ex jnzer: CMP ($10),Y bne nexptr jmp ex nexptr: INC $10 lda $10 cmp $ff bne ex clc inc $11 jmp ex prvptr: dec $10 lda $10 cmp $00 bne ex clc dec $11 jmp ex fload: lda #'r' jsr set_redirect bcs ex rb_l1: jsr end_i_redirect BCS ex jsr get_char sta ($20),Y iny cpy #$FF bne rb_l1 lda $21 adc #$1 cmp #$FF bne rb_l1 ex: rts init: lda #$00 sta $10 lda #$01 sta $11 lda #$00 sta $22 lda #$77 sta $23 lda #$00 l1: sta ($10),Y iny cpy #$ff beq l1 lda $23 adc #$1 cmp $23 bne l1 lda #txbuf & $FF sta $20 lda #txbuf & $FF00 >> 8 sta $21 lda #$00 sta $10 lda #$01 sta $11 ldy #$00 rts opnmsg: byt "Brainf*ck interpreter for Emu740 by yosi",$0d,$0a,0 filepp: byt "File>",0 msgaddr: adr $0000 end
###補足情報(言語/FW/ツール等のバージョンなど)
- シミュレーション環境:Emu740 VER. 1.0
- Emu740の配布サイトにある簡易モニタのサービスルーチンを使用
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/20 11:40 編集
2017/04/20 12:33
2017/04/20 14:30 編集