smdn-blog
smdn-blog
shimada's note
20 posts
Don't wanna be here? Send us removal request.
smdn-blog · 2 years ago
Text
6502版VTLに぀いおのメモ
Tumblr media
分かったこずを箇条曞きでいく぀か
正匏な呌称は VTL026502の02にかけおる
䜜者はMichael T. Barry
䜜成時期は2012幎頃 移怍にあたっおは、オリゞナルである6800版の䜜者Frank McCoyにオリゞナルの実装の现郚などに぀いおメヌルで問い合わせたりしおいた。
圓初のタヌゲットマシンはApple1ず2
初出は6502.orgのフォヌラム http://forum.6502.org/viewtopic.php?t=2612
※ここに曞いおあるこずは䞊蚘フォヌラムのスレッドを読めば党郚曞いおある。
゜ヌスコヌドに぀いお
GitHubでおそらく最初にヒットするリポゞトリ https://github.com/Klaus2m5/VTL02 は、フォヌラムのスレッド内で改善案などを議論しおいた Klaus Dormannによる。
READMEに曞いおある蚘述の倧半を占める "VTL02sg for the 2m5 emulated 6502 SBC" ずいうバヌゞョンはDormann氏による拡匵。
Barry氏のオリゞナルは "vtl02ca2.asm" cがバヌゞョン、a2がタヌゲットのApple2を指すず思われる。
オリゞナルバヌゞョンに぀いお
オリゞナルはその埌も改善が続けられ、最終版は䜜者本人のリポゞトリ https://github.com/barrym95838/6502-Assembly にアップされおいる。
最終版の発衚時期2022幎12月ごろ http://forum.6502.org/viewtopic.php?f=2&t=2612&start=120#p97017
0 notes
smdn-blog · 2 years ago
Text
EMUZ80のファヌムりェアをAruduinoを䜿っお曞き蟌む
Tumblr media
EMUZ80が発衚された圓時、PICプログラムの曞き蟌みに䜿われおいたMPLAB® SNAPは、 2千円しないくらいの安䟡なデバむスだったらしいですが、今では5千円近い倀段がしたす。 その他の手軜な手段であるPickitも珟圹のPickit4は1䞇円以䞊です。 前䞖代のPickkit3はアマゟンやダフオクで䞭華コピヌ品がたくさん出回っおいたすが、 5千円1䞇円皋床する䞊にちゃんず䜿える保蚌がないものです。
いっぜうEMUZ80の本䜓は、基板やパヌツをすべお新品で揃えおも2千円以内で買えおしたうので、比べるずかなり割高感がありたす。
そのうえSNAPもPickitもPICのプログラミングにしか䜿えないデバむスなので、盞圓䜿い蟌たないず元が取れたせん。
そんな状況の䞭で、EMUZ80をベヌスに色々なCPUを動かせる掟生基板を数倚く発衚されおいる奥江さんが、 Arduinoを䜿っおPICに曞き蟌むプログラムを発衚しお䞋さいたした。 https://twitter.com/S_Okue/status/1607046918269730816
安䟡なArduinoクロヌンず数点の郚品があれば1,500円くらいでPCからPICに曞き蟌む手段が手に入りたす。 https://twitter.com/S_Okue/status/1607621300859834371
SNAPやPickitに手が出なくお困っおいた自分は詊しおみるこずにしたした。
郚品の入手
必芁な郚品のリストは、奥江さんのGitHubリポゞトリᅵᅵURL入りで蚘茉されおいたす。 https://github.com/satoshiokue/Arduino-PIC-Programmer#%E9%83%A8%E5%93%81
゜フトりェアの準備
Arduinoに曞き蟌むスケッチのほかに、PCで動かす曞き蟌みプログラムをコンパむルする必芁がありたす。
Windowsでやっおみたした。
コンパむラのむンストヌル
たずWindowsで動くgccをむンストヌルする必芁がありたす。 手っ取りᅵᅵᅵく定番のバむナリを入れたかったので scoop ずいうパッケヌゞシステムを䜿いたした。
https://scoop.sh/
> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser > irm get.scoop.sh | iex > scoop install mingw
公匏の説明によれば、䞊蚘の3コマンドでMinGW版のgccをむンストヌルできるはずです。 しかし自分の堎合、 PowerShellのInvoke-RestMethodがうたく動䜜しなかったので、install.ps1 をcurlで萜ずしおきお手動でむンストヌラヌを起動したした。
コンパむル
次に奥江さんのリポゞトリをクロヌンしおきお、gccでコンパむルしたす。
> git clone https://github.com/satoshiokue/Arduino-PIC-Programmer.git > cd Arduino-PIC-Programmer > gcc -Wall pp3.c -o pp3
ずころが、LinuxやMacの堎合ず違っお、MinGW gccだずそのたたではコンパむル゚ラヌずなるため察凊が必芁です。
pp3.cの䞭で定矩されおいるPP_VERSIONずいう名前が、Win32 APIの䞭にマクロずしおすでに定矩されおいるこずが原因でした。 この倉数はバヌゞョンを衚瀺する䞀か所のみで䜿われおいたため安盎ですが、PP_VERSIONずいう名前を PP3_VERSION などに倉えお察応したした。
Win32 APIで定矩されおいるマクロ PP_VERSION の説明 https://learn.microsoft.com/ja-jp/windows/win32/api/wincrypt/nf-wincrypt-cryptgetprovparam#PP_VERSION
pp3.cの修正内容 https://github.com/satoshiokue/Arduino-PIC-Programmer/compare/main
kkismd:Arduino-PIC-Programmer:main
コンパむルしたバむナリはこちらに転がしおおきたすので、無保蚌ですが䜿っおください。 https://github.com/kkismd/Arduino-PIC-Programmer/blob/main/pp3.exe
曞き蟌み
AruduinoずPCを぀なぐシリアルケヌブルに぀いおは、EMUZ80ずPCを぀なぐために賌入したものがそのたた䜿えたす。 自分は「CH340E USBシリアル倉換モゞュヌル Type-C」ずいうものを秋月で入手したした。 https://akizukidenshi.com/catalog/g/gK-14745/
曞き蟌み手順は奥江さんのリポゞトリを参考にしお䞋さい。 https://github.com/satoshiokue/Arduino-PIC-Programmer#%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2
Windowsの堎合、䞀点だけ違うずころがあっお、Arduinoず通信するシリアルポヌトを COMXX ずいう名前で指定したす。
> ./pp3 -c COM5 -s 1700 -v 3 -t 18f47q43 emuz80_pic.hex
 自分の環境では、COM5 ずいう名前でした。Windowsの「デバむスマネヌゞャヌ」から確認できたす。
0 notes
smdn-blog · 9 years ago
Text
Rubyistは型アノテヌションの倢を芋るか
RubyKaigi2016でMatzがRuby3に型掚論を入れたいず発蚀したこずで Rubyず型に぀いおいろいろず議論が巻き起こっおいる。
残念ながらMatzはRubyの文法に型アノテヌションを入れたくないずいうスタンスのようだけれど、自分は入れお欲しいず思っおいる。
なのでどんな文法になるか勝手に想像しお楜しんでいる。
メ゜ッドはこんな颚になるかもしれない
def hello(String name, IO out): NilClass out << "Hello, #{name}." end
コロンが名前付き匕数にずられおるので型を前眮する必芁がある。
ずころでnameは#to_strが実装されおいればStringでなくおもよいので、構造的郚分型を䜿える堎合はこんな感じになるかもしれないそこは掚論しろよず思うがあえお曞いおみた堎合
def hello(<to_str: String> name, IO out): NilClass
うっわ読みにくぅ
やっぱりなんずかしお埌眮したほうがよさそう。 でもコロン以倖のASCII蚘号もRubyでは予玄枈みなので、 いろいろ思考実隓した結果 as ずいうキヌワヌドが䞀番無難ずいう結論に達した。
def hello(name as <to_str: String>, out as IO): NilClass
たあ個人の意芋なので異論反論はあるず思いたす
0 notes
smdn-blog · 10 years ago
Text
甲「オブゞェクト指向に぀いお教えお䞋さい」 乙「じゃあずりあえずJavaの䟋で説明するね」 甲「Javaの話を聞きたいんじゃないです。オブゞェクト指向の話をしお䞋さい」 乙「Javaじゃなかったら䜕をベヌスに説明したらいいのかな」 甲「できたら自分の䜿っおるC蚀語でお願いしたす」 乙「でもCにオブゞェクト指向の機胜はないよ。C++ずかObjective-Cの話をする」 甲「いいえ、Cがいいです。自分は新しく蚀語を孊ぶ぀もりはないので」 乙「じゃあなんのためにオブゞェクト指向を知りたいんだい」 甲「C蚀語でのプログラミングにそのオブゞェクト指向ずいう玠晎らしい䜕かを取り入れたいんです」 乙「構造䜓ずポむンタを䜿えば䞍可胜じゃないし、そういうラむブラリもあるこずはあるけど、かえっお䞍䟿だし、メリットもあたりないず思うよ」 甲「そうなんですか  。評刀のわりに倧した事ないんですね、オブゞェクト指向っお」 乙「お前がそう思うんならそうなんだろう。お前ん䞭ではな  」
0 notes
smdn-blog · 10 years ago
Text
レヌルから降りる朮時
Ruby on Railsは楜しくプログラミングできるずおもいいフレヌムワヌクだず思うけど、それでも楜しく開発できる芏暡には限界がある。
テヌブルもコントロヌラヌもその数が100や200を超えお、modelsにもcontrollersにもしっくりおさたらないロゞックが増えおきお、どうたずめたらいいか決めなければ取り返しの぀かないカオスになりそう。いや既にカオスだ。
 そんな芏暡になっおしたったらもう楜しくない。 Rubyの自由さやRailsの奔攟さが、逆に痛みを䞎える邪悪なもののように感じおしたう。 そのずきは、Rubyずそのよくできたレヌルを捚おお、別のツヌルを怜蚎するべきだ。
0 notes
smdn-blog · 10 years ago
Text
「実戊でのScala」に参加しお
Scalaの勉匷䌚「実戊での Scala 〜 6぀の事䟋から知る Scala の勘所〜」に参加しおきたした。 https://jissenscala.doorkeeper.jp/events/19660
ずおも参考になる話ばかりで勉匷になりたした。 勉匷䌚でどんな話を聞いたかずいうのはいろいろなずころでたずめられおいるず思うのでここでは話を聞いた䞭で初めお知ったこず、改めお倧事だなず思ったこずなどのポむンタをたずめおみようず思いたす。
Octoparts
APIをたずめおるミドルりェア
"Octoparts is an API request aggregation service. It works as a middleware between your frontend and backend services, taking care of request parallelization, response caching, fault tolerance and performance visualization."
https://github.com/m3dev/octoparts
swagger-ui
ただ䜕なのᅵᅵよく分かっおない https://github.com/swagger-api/swagger-ui
Mackerel
いいらしい
[レポヌト]「Mackerelによる簡単サヌバヌ管理入門ず発展圢」 at 第21回さくらの倕べ in 札幌  Developers.IO http://dev.classmethod.jp/server-side/mackerel-at-sakura-night/
Scalaスタむルガむド
Scala Style Guide v1.2.5 documentation http://yanana.github.io/scala-style/index.html
ここに曞いおあるこずは倧䜓実践するずいいこずがある。 ただし䞋蚘は無芖する。返り倀の Unit を省略しおはならない http://yanana.github.io/scala-style/types/inference/void_methods.html
犠牲的アヌキテクチャ
今回䜕床も出おきた「マむクロサヌビス」ず関連するキヌワヌド。 䞋蚘の䞀節は心に留めおおいた方がいいだろう。
本圓は必芁のないマむクロサヌビスに手を出したプロゞェクトを、私はもう二぀も芋かけた。結果ずしお機胜開発の速床を著しく損ねおいた。
Martin Fowler's Bliki in Japanese - 犠牲的アヌキテクチャ http://capsctrl.que.jp/kdmsnr/wiki/bliki/?SacrificialArchitecture
Scalaプログラミングに぀いお
ScalaでFutureずEitherを組み合わせたずきに綺麗に曞く方法 - scalaずか・・・ http://d.hatena.ne.jp/xuwei/20140919/1411136788
Scalaにおける现かい最適化のプラクティス - scalaずか・・・ http://d.hatena.ne.jp/xuwei/20130709/1373330529
かずじゅんさんの二分朚の実装HaskellずScalaで曞いおある https://gist.github.com/j5ik2o/7611983
DDD(ドメむン駆動開発)
Scalaコヌドでわかった気になるDDD | GREE Engineers' Blog http://labs.gree.jp/blog/2013/12/9354/
1 note · View note
smdn-blog · 12 years ago
Text
A3刀のスケゞュヌルシヌト
もずもず手垳やスケゞュヌル垳が奜きなので、 寄藀文平さんのyPadに興味があったのですが、自分に䜿いこなせるか分からないのでずりあえず、 䞊蚘のペヌゞで玹ᅵᅵᅵされおいるyPadのもずになったA3サむズの チャヌトに着目。
この写真を参考に゚クセルでフォヌマットを䜜っおみるこずにしたした。 いろいろ詊行錯誀しおいるうちに、これは瞊軞ず暪軞入れ替えたら ガントチャヌトバヌチカルスケゞュヌルになるんじゃね ず気が぀きたした。
Tumblr media
オリゞナルのフォヌマットより、芋慣れた圢のほうが䜿いやすいので、 入れ替えお䜜り盎したのがこちらです。
A3サむズのおおきな玙で4週間分のスケゞュヌルが芋枡せる
侊1/3のガントチャヌト郚分で長いスパンのタスクを管理できる
例2/3のバヌチカルダむアリヌで、予定管理やタスクに䜿う時間の芋積ず蚘録ができる
持ち歩く手垳にはなりたせんが、い぀も自分の垭で仕事しおいるのであれば、すごく䟿利です。
1 note · View note
smdn-blog · 12 years ago
Photo
Tumblr media
自䜜のスケゞュヌルシヌト ガントチャヌト  バヌチカルダむアリヌ
0 notes
smdn-blog · 12 years ago
Text
モバむルから投皿するずPCに぀ないだスクリヌンにコメントが流れる ずいう仕組みを䜜っおみたした。 http://chatboad.herokuapp.com/
名前はただありたせん。
想定しおいるのは
それなりに人が集たっおいᅵᅵᅵ
プロゞェクタヌ的な画面を党員で共有しおいお
お互い自由には喋れない ずいう感じの状況です。
䟋
勉匷䌚孊䌚発衚
カラオケ
身動きのずれない満員電車LCD広告がある堎合
画面に向かっおツッコミを入れたり ぀ぶやきを共有するためのツヌルがあればいいなず思っお䜜りたした
本圓はパワポずかカラオケずか、いろいろな画面に オヌバヌレむしお衚瀺できればいいのですが、 今のずころブラりザの画面でそれをやる方法が分からないので slideshareやgoogledocsのスラむドにオヌバレむする機胜だけありたす。 こんな感じに䜿えたす。 画面䞋郚のリンクやQR Codeからコメント投皿フォヌムにアクセスするこずができたす。
http://chatboad.herokuapp.com/rooms/slide?url=http://www.slideshare.net/smdkk/smilecomment&tag=Test
゜ヌスコヌド
https://github.com/kkismd/chatboard
[2014-9-27 远蚘] コメントをTwitterに同時に投皿する機胜を実装したした。
0 notes
smdn-blog · 12 years ago
Text
チヌムでのTODO管理
バグトラッカヌのチケットは、仕事が忙しい局面を迎えおいたりするず いちいち曞くのが億劫ずいうかただるっこしいず感じるこずがある。 こういうずきに、もっず軜量なツヌルがあればいいなず思う。 Twitterのmentionくらい手軜にTODOを飛ばせるようなものがほしい。 * チャット感芚で、頌み事を他の人に飛ばすこずができる。 * 頌み事はタブなどでたずめお管理できる * 完了をあずからマヌクでき、未完だけを区別できる * 完了したら盞手に䌝わる * 内容はredmineの䞭にチケットずしお保存される
0 notes
smdn-blog · 13 years ago
Text
tmuxでペむンをたくさん開いおサヌバを䞀床に監芖する
tmuxではtmuxのサブコマンドでりィンドりやペむンの操䜜ができ、特に`send-keys`サブコマンドを䜿うずペむンの䞭のシェルにキヌストロヌクを送信するこずもできる。 これを䜿っお、 * ひず぀の倧きなタヌミナル画面を现かく分割する * 分割した個々のペむンで違うサヌバにログむンしおコマンドを実行する ずいう操䜜を自動化できる。`top`や`tail -f`で耇数のサヌバを監芖するのに䟿利。 9぀たでのサヌバで䞀斉にコマンドを実行するスクリプトを曞いおみた。このようにしお䜿う。 cubewatch.sh 'tail -f /var/log/httpd/access.log' host1 host2 host3... ペむンをきれいに配眮するレむアりトずしお`tiled`を䜿うずきは、行ず列が同じ数2x2, 3x3, 4x4などだずきれいに䞊ぶようだ。 あず、ペむンの倧きさを調敎せずに連続しおsplitするず、 create pane failed: pane too small ず怒られるのでsplitするごずにレむアりトをかけおいる。 参考 [Rakeで俺たちはもっずtmuxず仲良くなれるんじゃないかず思った](http://d.hatena.ne.jp/zentoo/20100831/1283264163)
0 notes
smdn-blog · 13 years ago
Text
暙準出力同士のdiffをずる
蚘法 <(...) を䜿うずサブシェルの出力が名前付きパむプに぀ながるので䞀時ファむルを䜜らなくおもdiffがずれる
diff <(コマンドA) <(コマンドB)
1 note · View note
smdn-blog · 13 years ago
Text
Gitの蚭定
新しい環境にむンスコしたらこれを流す
git config --global alias.st status git config --global alias.ci commit git config --global alias.co checkout git config --global alias.br branch git config --global color.ui true git config --global core.editor vim git config --global core.pager lv
0 notes
smdn-blog · 13 years ago
Text
RubyMineの䞭でRailsのプラグむンをむンストヌルする
ググるず出おきたので日本語でメモしおおく http://devnet.jetbrains.net/thread/284910
メニュヌ > Tool > Run Rails Script... Script: の [...] をクリックしお RAILS_ROOT/script/rails を遞択
Arguments: に
plugin install git://github.com/path/to/installing/plugin.git
ず入力しお [Run] ᅵᅵᅵタンをクリック
0 notes
smdn-blog · 14 years ago
Text
Rubyで「なんでも再垰」の写経をするよ (番倖線)
Rubyで写経した䟋10ず、Schemeの元のコヌド䞡方をKJVの旧玄聖曞・創䞖蚘を読み蟌たせお実行しおみた。 Rubyで写経した䟋10の実行結果
% time ruby example10.rb < genesis.txt 39800 ruby example10.rb < genesis.txt 1.87s user 0.01s system 98% cpu 1.921 total
本家の䟋10をGaucheで実行した結果
% time gosh example10.scm < genesis.txt 39800 gosh example10.scm < genesis.txt 0.05s user 0.01s system 82% cpu 0.075 total
䞀芋同じ䜜りなのに速床が党然違いたすなヌ。
0 notes
smdn-blog · 14 years ago
Text
Rubyで「なんでも再垰」の写経をするよ (3)
* [その1](http://smdn.tumblr.com/post/10850718991/tail-recursion-in-ruby-1) * [その2](http://smdn.tumblr.com/post/10850718991/tail-recursion-in-ruby-2) 今回は状態をさらに远加し、ネストした括匧の䞭に含たれる堎合を扱いたす。 詳しい意味は[本家](http://practical-scheme.net/docs/tailcall-j.html)を参照しお䞋さい。 <!-- pre { white-space: pre-wrap; font-family: monospace; color: #202020; background-color: #f0f0f0; } body { font-family: monospace; color: #202020; background-color: #f0f0f0; } .Statement { color: #007020; font-weight: bold; } .Conditional { color: #4c8f2f; font-weight: bold; } .Number { color: #40a070; } .Constant { color: #a07040; } .Type { color: #e5a00d; font-style: italic; } .Identifier { color: #5b3674; font-style: italic; } .Function { color: #06287e; font-style: italic; } .Define { color: #1060a0; font-weight: bold; } .String { color: #4070a0; } .Special { color: #70a0d0; font-style: italic; } .PreProc { color: #1060a0; } -->
require './tail_recursion' def getc STDIN.getc end class NilClass def eof? true end end class String def eof? false end def whitespace? self =~ /\A\s\Z/ end end class Example11 def word_count in_space(getc, 0) end def in_word(c, count) if c.eof? count elsif c.whitespace? in_space(getc, count) elsif c == "\"" in_quote(getc, count + 1, false) elsif c == "(" in_paren(getc, count + 1, false) else in_word(getc, count) end end tail_recursive :in_word def in_space(c, count) if c.eof? count elsif c.whitespace? in_space(getc, count) elsif c == "\"" in_quote(getc, count + 1, false) elsif c == "(" in_paren(getc, count + 1, false) else in_word(getc, count + 1) end end tail_recursive :in_space def in_quote(c, count, nested) if c.eof? raise "EOF in quoted word" elsif c == "\"" if nested count else in_space(getc, count) end elsif c == "\\" getc in_quote(getc, count, nested) else in_quote(getc, count, nested) end end tail_recursive :in_quote def in_paren(c, count, nested) if c.eof? raise "EOF in parenthesis" elsif c == "(" in_paren(getc, count, true) in_paren(getc, count, nested) elsif c == ")" if nested count else in_space(getc, count) end elsif c == "\"" in_quote(getc, count, true) in_paren(getc, count, nested) else in_paren(getc, count, nested) end end tail_recursive :in_paren end if __FILE__ == $0 p Example11.new.word_count end
0 notes
smdn-blog · 14 years ago
Text
Rubyで「なんでも再垰」の写経をするよ (2)
前回の続き。
それぞれの䟋の簡単な説明は
䟋7 ... 連続する空癜の先頭を意味する状態フラグ ws を匕数ずしお持ち回る
䟋8 ... フラグ匕数をやめお二぀の状態を衚す関数に盞互再垰する
䟋10 ... 新しい「匕甚笊の䞭にいるか」ずいう状態を衚す関数を远加
それぞれの詳しい意味は本家を参照しお䞋さい。
<!-- pre { white-space: pre-wrap; font-family: monospace; color: #202020; background-color: #f0f0f0; } body { font-family: monospace; color: #202020; background-color: #f0f0f0; } .Statement { color: #007020; font-weight: bold; } .Conditional { color: #4c8f2f; font-weight: bold; } .Number { color: #40a070; } .Constant { color: #a07040; } .Type { color: #e5a00d; font-style: italic; } .Identifier { color: #5b3674; font-style: italic; } .Function { color: #06287e; font-style: italic; } .Define { color: #1060a0; font-weight: bold; } .String { color: #4070a0; } .Special { color: #70a0d0; font-style: italic; } .PreProc { color: #1060a0; } -->
require './tail_recursion' def getc STDIN.getc end class NilClass def eof? true end end class String def eof? false end def whitespace? self =~ /\A\s\Z/ end end class Example7 def count_words cw_loop(getc, true, 0) end def cw_loop(c, ws, count) if c.nil? count elsif c.whitespace? cw_loop(getc, true, count) elsif ws cw_loop(getc, false, count + 1) else cw_loop(getc, false, count) end end tail_recursive :cw_loop end class Example8 def count_words in_space(getc, 0) end def in_word(c, count) if c.eof? count elsif c.whitespace? in_word(getc, count) else in_space(getc, count) end end tail_recursive :in_word def in_space(c, count) if c.eof? count elsif c.whitespace? in_space(getc, count) else in_word(getc, count + 1) end end tail_recursive :in_space end class Example10 def count_words in_space(getc, 0) end def in_word(c, count) if c.eof? count elsif c.whitespace? in_space(getc, count) elsif c == '"' in_quote(getc, count + 1) else in_word(getc, count) end end tail_recursive :in_word def in_space(c, count) if c.eof? count elsif c.whitespace? in_space(getc, count) elsif c == '"' in_quote(getc, count + 1) else in_word(getc, count + 1) end end tail_recursive :in_space def in_quote(c, count) if c.eof? raise "EOF in quoted word" elsif c == '"' in_space(getc, count) elsif c == "\\" getc in_quote(getc, count) else in_quote(getc, count) end end tail_recursive :in_quote end if __FILE__ == $0 puts "example 7: " + Example7.new.count_words.to_s STDIN.rewind puts "example 8: " + Example8.new.count_words.to_s STDIN.rewind puts "example 10: " + Example10.new.count_words.to_s end
0 notes