問題タブ [c64]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
839 参照

c - C64 の cc65 プログラムに SID ファイルを含める方法は?

cc65 プログラムに .sid ファイル (C64 チップチューン用の音楽) を含めて再生したいと考えています。通常、sid ファイルには $1000 から始まる再生ルーチンが含まれていますが、これを自分の cc65 プログラムにリンクするにはどうすればよいですか? 現時点では、次のコマンドを使用して cc65 でコードをコンパイルします。

0 投票する
2 に答える
956 参照

assembly - Commodore 64 でカーネル SCNKEY ルーチンの動作を変更する方法

Commodore 64 でカーネル ルーチンを使用してゲーム コントロールを実装しようとしています。

以下のコードは、1 つの例外を除いて機能します。各キー ストロークは 1 回の入力としてカウントされます。例:ボタンを押し続けても効果はありません。移動するたびに離してもう一度押す必要がありました。この動作を変更するにはどうすればよいですか? キーが押されている限り、アクションを繰り返したいだけです。

0 投票する
1 に答える
142 参照

for-loop - 10 進インクリメント !=.5 の for ループで奇妙な結果が生じる

独創的なアイデア

古い Commodore 64 コンピューターを見つけて接続し、もう一度 Basic を学ぼうと決心しました。第 3 章を終えたところで、単純な FOR ループのデモを行います。

これにより、予想どおり、次の結果が得られます。

浮動小数点数の紹介

上記の結果は、step を 1.0 に設定した場合と同じです。ただし、0.5 以外の他の数値は問題を引き起こします。

ステップの増分を.5 (または 1)以外に変更すると、奇妙な浮動小数点数が発生し、浮動小数点数が低く設定されているほど早く表示されるようです。最初のテストでは、NB を に変更しました1 TO 40

試験結果

  • FOR NB = 1 TO 40 STEP .6: 1 ~ 31 の正常な結果、次に 31.6000001。さらに奇妙な結果が得られるかどうかを確認するために、NB を 100 に増やしたところ、41.2、41,8、42.4、42.9999999、43.5999999 など、42 から始まる奇妙な数字が再び表示されました。
  • FOR NB = 1 TO 40 STEP .4: 1–7.4 の正常な結果、次に 7,8000001、次に正常な結果 8.2–22.6、次に 22.9999999、23.3999999 など。
  • FOR NB = 1 TO 40 STEP .2: 1 ~ 6.2 の正常な結果、次に 6.3999999 が 0.2 ずつ増加して 8.5999999 になり、その後 8.7999998 から 9.9999998 まで変化し、その後 10.2 から正常な結果になります。
  • FOR NB = 1 TO 40 STEP .1: 1 ~ 3.6 の正常な結果、次に 3.6999999 など。
  • FOR NB = 1 TO 40 STEP .05: 1–2.3 の通常の結果、次に 2.34999999 (余分な桁に注意)、2.59999999 まで、次に 2.65–2.7、次に 2.74999999 など。

失敗の繰り返し数

ステップは次の反復で失敗します。

  • 反復で 0.6 のインクリメントが失敗する
    • 52 (31.6000001)、
    • 51 ~ 70 は問題ありません。
    • 71–87 は 0.0000001 から少し (例: 42.9999999)、
    • 88–103 はさらに 1 つ少ない (例: 53.1999998)、
    • 104 以降はさらに削減されます (例: 62.7999997)。
  • 反復で 0.4 のインクリメントが失敗する
    • 18,
    • 19 ~ 55 は問題ありません。
    • 56 ~ 64 は -.9999999、
    • 65でいいよ
    • 66–84 は -.9999999、
    • 85 ~ 100 で十分です。
    • 101–116 は +.0000001 です。
    • 117 は 0.000002 で続きます。
  • 反復で 0.2 インクリメントが失敗する
    • −.9999999で28、
    • 47 ~ 107 は問題ありません。
    • 108 ~ 140 は +0.0000001 で失敗し、
    • 141 以降は +0.0000002 で失敗します。
    • 反復で 0.1 インクリメントが失敗する
    • −.9999999で28、
    • 79 ~ 88 は問題ありません。
    • 89–90 は +0.00000001 (原文のまま) で失敗します。
    • 91 ~ 116 は問題ありません。
    • 117–187 は +0.0000001 で失敗し、
    • 188 以降は +0.0000002 で失敗します。
  • 反復で 0.05 のインクリメントが失敗する
    • −.00000001 で 28 ~ 33、
    • 34 ~ 35 は問題ありません。
    • 36–68 は -0.00000001 で失敗し、
    • 69 ~ 78 は問題ありません。
    • 79 ~ 92 は +0.00000001 で失敗し、
    • 93 ~ 106 は +0.00000002 で失敗し、
    • 107 以降は +0.00000003 で失敗します。

上記の注意事項

記録のために、レポートを簡単にするためにカウンターを追加しました。したがって、プログラムは次のようになります。

主な質問

問題は 10 進数を 2 進数に変換する方法にあると思われますが、0.5 ステップで完全に正常に機能するのは奇妙です。このエラーの原因は何ですか? また、どのように修正することができますか、またはどのように説明する必要がありますか? 私のコモドールは Basic v2 を実行しています。