樫樹の広場



1行掲示板です。情報提供などありましたらよろしくお願いします。

特に、記事の誤り訂正などは「ほかの方も読める記録が残る」ので、掲示板を推奨します。


長い内容など、メールで連絡を取りたい方は以下のアドレスへ。


各ページの下にも1行掲示板がついていますが、このページではそれら全てを集めて表示しています。

特定ページへの内容への意見は、そちらのページで書いていただけるとありがたいです。


また、日付にリンクがある場合は、そのリンクを辿ることで元ページを見ることが出来ます。

(日付にリンクがないものは、このページで書き込まれた意見です)


作者が怠惰なので、反応は遅いかもしれません。


申し訳ありませんが、現在意見投稿をできない状態にしています

【名無し】 6502の「ひたすら引き算」の前処理のキャリー判定ですが、投稿時のもので合っています。例えば、最初から6命令目のCHK1000への分岐は、対象の上位(=Xレジスタ)だけを調べて10000未満であることが確定したらジャンプしますが、これはつまり(X - 10000の上位)で繰り下がりが発生「する」ときで、そのときのキャリーは「0」、よって分岐命令は「BCC」となります。他も同様。また、L10000,L1000,L100,L10ルーチンは(SSKIPでいきなりSBCするために)キャリーが1で突入する前提でSECを省いているので、前処理のキャリー判定を逆にするとおかしくなってしまいます。 (2014-09-06 04:07:50)

【名無し】 「ひたすら引き算」を移植して408クロック128バイト。>0,>1は被除数、>2,>3は被除数から引く値。LDY #0 ;2 LDX #<8086 ;2 STX >1 ;3 LDA #>8086 ;2 CPX #<10000 ;2 BCC CHK1000 ;3/2 BNE L10000 ;3/2 CMP #>10000 ;2 BCS L10000 ;3/2 CHK1000: CPX #<1000 ;2 BCC CHK256 ;3/2 BNE L1000 ;3/2 CMP #>1000 ;3 BCS L1000 ;3/2 CHK256: CPX #1 ;2 BCS L100 ;3/2 CMP #100 ;2 BCS L100 ;3/2 CMP #10 ;2 BCS L10 ;3/2 ORA #$30 ;2 STA DECIMAL ;4 BNE LAST ;3 SUB16: STX >2 ;3 LDX #$30 ;2 BNE SSKIP ;3 SLOOP: STA >1 ;3 INX ;2 LDA >0 ;3 SSKIP: SBC >2 ;3 STA >0 ;3 LDA >1 ;3 SBC >3 ;3 BCS SLOOP ;3/2 TXA ;2 STA DECIMAL,Y ;5 INY ;2 LDA >0 ;3 ADC >2 ;3 SEC ;2 RTS ;6 L10000: LDX #<10000 ;2 STX >3 ;3 LDX #>10000 ;2 JSR SUB16 ;6 L1000: LDX #<1000 ;2 STX >3 ;3 LDX #>1000 ;2 JSR SUB16 ;6 L100: LDX #<100 ;2 STX >3 ;3 LDX #>100 ;2 JSR SUB16 ;6 L10: LDX #$30-1 ;2 LOOP: INX ;2 SBC #10 ;2 BCS LOOP ;3/2 ADC #10+$30 ;2 STA DECIMAL+1,Y ;5 TXA ;2 STA DECIMAL,Y ;5 INY ;2 LAST: LDA #0 ;2 STA DECIMAL+1,Y ;5 (2014-09-02 21:00:09)

あきよし】 ありがとうございます。内容更新しました。 (2014-09-02 12:30:52)

あきよし】 ありがとうございます。内容更新しました。 (2014-09-01 17:38:47)

あきよし】 6502 の BCDモードは、見てみたい気もしますが参考記録にします。Z80 側で「MSX」と特定して命令に+1クロックのハンデがあるので、6502も「ファミコン」と特定します。 (2014-09-01 14:05:05)

あきよし】 ありがとうございます。内容更新しました。 (2014-09-01 14:02:55)

あきよし】 ありがとうございます。内容更新しました。 (2014-09-01 14:02:45)

【youkan】 頑張ってみましたが逆転はできず… http://www.maroon.dti.ne.jp/youkan/temp/tmp.html (2014-08-31 23:12:33)

【名無し】 そういえば6502のBCDモードはファミコンでは使えませんが、そこはどうしますか? (2014-08-29 23:55:38)

【m.ukai】 テーブル参照+BCD命令を駆使したほうが短いっぽいです。LD BC,8086;LD DE,NTABLE;LD HL,DECIWK;DIV2LOOP:SRL B;RR C;JR NC,SKIP;LD A,(DE);ADD A,(HL);DAA;LD (HL),A;INC DE;INC HL;LD A,(DE);ADC A,(HL);DAA;LD (HL),A;INC DE;INC HL;LD A,(DE);ADC A,(HL);LD (HL),A;INC E;DEC L;DEC L;JP DIV2LOOP;SKIP:INC E;INC E;INC E;LD A,B;OR C;JP NZ DIV2LOOP;PACK2ZONE:LD DE,DECIMAL;INC L;INC L;LD B,30H;LD A,(HL);OR A;JR NZ,ST5;DEC L;RLD;JR NZ,ST4;RLD;JR NZ,ST3;DEC L;RLD;JR NZ,ST2;RLD;OR B;JP ST1;ST5:OR B;LD (DE),A;INC E;DEC L;RLD;ST4:OR B;LD (DE),A;INC E;RLD;ST3:OR B;LD (DE),A;INC E;DEC L;RLD;ST2:OR B;LD (DE),A;INC E;RLD;ST1:LD (DE),A;INC E;XOR A;LD (DE),A;NTABLE: DB 01H,00H,00H,02H,00H,00H,04H,00H,00H,08H,00H,00H,16H,00H,00H,32H,00H,00H,64H,00H,00H,28H,01H,00H,56H,02H,00H,12H,05H,00H,24H,10H,00H,48H,20H,00H,96H,40H,00H,92H,81H,00H,84H,63H,01H,68H,27H,03H;DECIWK; DB 00H,00H,00H;DECIMAL: DB 00H,00H,00H,00H,00H,00H; (2014-08-29 19:25:25)

←最近 24 25 26 27 28 29 30 31 32 33 34 過去→

戻る
トップページへ

-- share --

0000

-- follow --




- Reverse Link -