パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

初めて作った自作プログラムは?」記事へのコメント

  • by ahiguti (10103) on 2002年10月07日 0時40分 (#178485)
    3e xx 01 xx xx 11 xx xx 21 xx xx cd xx xx c9 こげな感じ。
    • by hohehohe (11394) on 2002年10月07日 1時06分 (#178514)
      20年たった今でもそらで覚えています。
      21 00 F3 32 41 77
      機種はPC-8001です。
      さてどんなプログラムでしょう。
      --
      AVG anti-virus data base out of date
      親コメント
      • それじゃあたしもちょっと出題してみましょう――

        3E 16 CD 12 00

        機種は MZ-80K シリーズ。

        # 定石中の定石だったんで脳味噌の片隅に今もこびりついてました。

        親コメント
        • はい、画面クリア。

          SP-5030で表現すると、

          10 PRINT "C"
          (Cは反転文字)

          と機能的に等価ですね。

          個人的には当時使ってたアセンブラがLD A,Rに
          対応してなかったのでED 5Fを定石として覚えてました。
          親コメント
          • 正解です♪ こういう話題で反応して頂けるとみょ~に嬉しいですね。

            ご存知でない方のために軽く説明しときましょう(でも記憶が曖昧なんで用語は不正確かも)。

            まずコードは:
            LD A,16h
            CALL 0012h
            になります。

            MZ-80K シリーズのアドレス $0000 から 4kB は ROM が載ってまして、 その先頭の方には C3 n m (JP mn)命令が沢山並んでました(こういうの、 ジャンプテーブルって呼ぶんでしたっけ?)。 飛び先は ROM 内の各種サブルーチンで、 ROM のバージョンが変わってルーチンの先頭アドレスがずれても、 このジャンプ命令の位置は変更されないので互換性を保ってたわけですね。

            # 全くの余談: この部分をそのまま音階発生ルーチンに順番に渡すと、
            # 結構面白い音楽になりました。

            アドレス $0012 は、 A レジスタの内容を文字として現在のカーソル位置に表示するルーチンへの入り口でした。

            何故これが画面クリアになるかというと、 まぁ要するに 16h がそういうコントロールキャラクタだったからなんですね。 この画面クリアを行う CLR(16h)の他に、 カーソルを 0,0 に戻す HOME(15h だったと思いますが……)と、 現在位置から上下左右に移動する(キャラクタコード完全に忘れました)のがありあました。

            で、 このコントロールキャラクタを表記する文字があって、 C、H、上下左右の矢印を、 それぞれ白黒反転したものでした。 SP-50x0 BASIC では PRINT 文のダブルクォーテーションの中でこれ等のキャラクタを使うことが出来ました。 確か 5020 までは CURSOR 命令がなくて、 カーソル移動はこの方法しかなかったんじゃなかったかな?

            # 正確には一行編集中にダブルクォーテーションの入力回数が奇数か偶数かで、
            # コントロールコードが入力されるか、それともそれが実際に効力を持つかが決まって、
            # 編集中の行もろとも画面を消しちゃったりとかしたんですが。
            # ダブルクォーテーションを DELETE で消しちゃってもそれは追跡してくれなかったので
            # 慣れるまではよく混乱しましたね。

            親コメント
            • by Oyajikusai (1187) on 2002年10月08日 11時31分 (#179446)
              >確か 5020 までは CURSOR 命令がなくて、カーソル移動は
              >この方法しかなかったんじゃなかったかな

              カーソルコントロールをビジュアルに表現する方法は、PET2001のBASICから影響じゃないかと思います。MZ-80K2Eあたりまでは、いかにも和製PETのような雰囲気だったんですが、MZ-80B以降でその面影がなくなっちゃったんですね。筐体からもBASICからも。

              ######
              超マニヤッククイズ・・・
              以下は詩の一部です。原典は何でしょう? 


              ギリシア神話にでてくるあの若者も、
              そうやって宇宙海に広がる光の夢を織っていたのだ。
              やがて、彼らは金羊毛を探して船出した。目指すは未来。


              ヒント1:彼らはアルゴ船で船出しました。
              ヒント2:伝説的なプログラミング教本です。
              親コメント
        • MZ-80KシリーズはメインメモリにI/Oがマッピングされていたので
          SP-1002モニタに直接バイナリ(キャラクタ)をゴリゴリ書いて

          GOTO$D000

          なんてことをやってよく遊んでいました。

          画面がスクロールするとプログラムが止まったり暴走してしまうので
          異様なスリルを感じておりました。
      • by gonta (11642) on 2002年10月07日 11時24分 (#178751) 日記
        こういう、VRAM直アクセスのプログラムとかを書きたい
        場合どうすればいいんでしょうか?NT系じゃハードに
        直接アクセスできないし、9x系からDOSをインストール
        して・・・かな?

        Linux/FreeBSDのカーネル解析始めてから、BIOSを
        たたいたりすることを少し理解し、OSが入っていない
        原始的な環境にあこがれています。昔のPC-8001とかで
        直接マシン語で扱えていた環境にも憧れてしまう 昨今・・・

        #コンパイラはVC++か?
        --
        -- gonta --
        "May Macintosh be with you"
        親コメント
        • Re:逆に今 (スコア:2, 参考になる)

          by ahiguti (10103) on 2002年10月07日 15時15分 (#178910)
          VRAM直接アクセスするのなら、Windows(含NT系)ならDirectDraw、Linux等ならばXFree86 DGA拡張を使えば簡単にできます。今のOSでもroot権限が有ればユーザ空間から物理メモリへの直接アクセスは可能です。Linuxだと/dev/memをmmapすれば物理メモリをいじれますし、IOポートも叩けます。デバイスドライバが必要になるのは、割り込みとDMA転送が必要な場合くらいです。当時のハードはまともな割り込みもDMA転送もありませんでした。MMUもメモリ保護もありませんので、しくじると暴走です。今のようにしょっちゅうクラッシュするようなプログラムが実用されるなどということはありませんでしたから、そういう意味では楽園だったかもしれません。
          親コメント
        • by Anonymous Coward
          OS上で動くプログラムは、OSのサービスを利用するのが流儀です。

          カーネルとかドライバにしかハート直叩きは許されないです。
          • Re:逆に今 (スコア:2, 参考になる)

            by SteppingWind (2654) on 2002年10月07日 18時41分 (#179027)

            さらに最近ではバスやDMAを仮想化して, カーネルが提供するAPIを通してアクセスするという方向になっているみたいです. これにより異なるアーキテクチャ間での移植性が向上したりします.

            と言っても私なんぞはlittle endianベタベタなコーディングをしていたりするんで, PPCやsolarisでは多分動かないドライバしか作っていないです.

            親コメント
      • LD HL,F300h
        LD (7741h),A
        だったかな…。
    • あの当時,マシン語を始めたのには決定的な動機がありました。それは逆スクロールです。スキー(というより障害物レース)ゲームをつくるのに,テキストV-RAMを下方向に転送するため,どうしても LDDR 命令が使いたくて,一生懸命本を読んでいた,いちばん満たされていた小学生だったあの頃...
      親コメント
      • そうでしたそうでした。 あたしの場合、 最初の一歩は #178609 [srad.jp] で出題した画面クリアコードを、 FORM (Tiny FORTRAN) の $ML コマンド(インラインアセンブラみたいなもんですね――16進直打ちですけど) で使ったことなんですが、 その次はやっぱり逆や左右のスクロールでした。

        そういえばあの頃作ったゲームをセーブしたテープがまだ実家に転がってるはずだけど、 復活させてみたくなってきましたね。 今ならエミュレータも在ることですし。

        でも読みこめるのかなぁ…… 二十年ほったらかしだし。

        親コメント
    • 私がはじめて書いたマシン語(のつもり)

      10 call 行番号

      でした。BASICプログラムにマシン語で記述しようとしたあの頃の大馬鹿野郎に乾杯(意味不明) もちろん暴走しましたとも

      親コメント
    • ご同類がいっぱいいらっしゃるのですが、私の場合・・・

      BASICの遅さからBASICコンパイラ系に移行したが、オブジェクトの大きさに呆れて、それならとサブルーチンだけを高速化とサイズダウンのために作ったと記憶しています。メインはどうなったかは推して知るべし。Z80でBASICで行き詰まるとすぐにマシン語直打ちとなったものです。
      親コメント
    • BASICで何かプログラムが作れるようになったのは、12歳の頃だった
      かな?PC-8001で。でも、マシン語は当時ぜんぜん理解できなかった。

      BASICの処理速度に不満が出てくると当然の成り行きでマシン語へと
      向かうワケだけど、マシン語…というかアセンブラでもプログラムで
      きるようになった今だがら(正確には“今”じゃなくて10年以上前だ
      けど)、何で当時マシン語が理解できなかったのか解った。

      BASICから入ったせいか、マシン語も命令一発でOKだと思いこんでい
      て、なんだか理解できなかった。殆どの入門書が単にZ80の命令説明
      と定番テクニック(ZEROクリアとか)と乗算ルーチンの説明で
      • by hmr (4234) on 2002年10月08日 5時27分 (#179322) 日記
         懐かしいですねえ。私も小学校2年の時に、親が会社からかっぱらってきたPC-8001(/w グリーン単色モニタ)を足がかりにコンピュータオタクになりました。印象に残っているのは小学校4年の時に買ってもらったPC-8801 FH ですね。それまでのPC-8001と違って音がでる!色がつく!CLRキーを押してもグラフィックが消えない!

         まあ、当時はみんな一通りBASICを覚えるとゲームを作り始め、遅くて我慢できなくなって、アセンブラに以降してましたね。私の場合はさらにBGMの同時再生ができないのも不満でした。当時はアセンブラよりもマシン語の方が一般的な呼び方だったと思います。
         マシン語も、最初はBASICソースの中に高速実行したいサブルーチンをDATA文で書いて、POKEしてCALL(あれPOLLだったかな)してましたが、だんだんと全体がマシン語になっていったものでした。MONコマンドで、なんつーか、一種のモニタモードになりましたね。モニタモードの中ではLコマンドが逆アセンブルだったかな。PC88シリーズの石はZ80なのに、MONモニタのアセンブラはなぜか8080で、Z80拡張命令を逆アセンブルすると「?」になってしまうという、とっても使えるモニタ機能でした。
         そんなころの私の座右の書は「PC-88 マシン語ゲームプログラミング」という本で、著者の日高氏は私の神様でした。日高氏の開発したHIT-88というアセンブラを購入してハック三昧の日々でした。人生の中でもっとも「ハック」ということに近かったんではないかなと思います。いやー楽しかったなあ。

         いまの環境で同じことができるかというとそれは無理。昔のパソコンはなにしても壊れはしなかったけど、いまのPCは下手すりゃ壊れちゃうもんね。
        親コメント

開いた括弧は必ず閉じる -- あるプログラマー

処理中...