{"id":15779249,"url":"https://github.com/akicho8/rasl","last_synced_at":"2025-03-31T15:52:47.673Z","repository":{"id":56890963,"uuid":"13558334","full_name":"akicho8/rasl","owner":"akicho8","description":"CASL Assembler / Simulator","archived":false,"fork":false,"pushed_at":"2017-08-20T13:15:41.000Z","size":39,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-10-11T18:46:26.853Z","etag":null,"topics":["assembler","casl","casl2","language","programming-language","simulator"],"latest_commit_sha":null,"homepage":"http://tk2-221-20341.vs.sakura.ne.jp/casl-simulator","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/akicho8.png","metadata":{"files":{"readme":"README.org","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-10-14T10:29:26.000Z","updated_at":"2018-06-08T01:46:15.000Z","dependencies_parsed_at":"2022-08-21T00:20:44.871Z","dependency_job_id":null,"html_url":"https://github.com/akicho8/rasl","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akicho8%2Frasl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akicho8%2Frasl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akicho8%2Frasl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akicho8%2Frasl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akicho8","download_url":"https://codeload.github.com/akicho8/rasl/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246491885,"owners_count":20786273,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["assembler","casl","casl2","language","programming-language","simulator"],"created_at":"2024-10-04T18:03:39.820Z","updated_at":"2025-03-31T15:52:47.651Z","avatar_url":"https://github.com/akicho8.png","language":"Ruby","readme":"* CASL Assembler / Simulator\n\n  - [[http://tk2-221-20341.vs.sakura.ne.jp/casl-simulator][DEMO]] http://tk2-221-20341.vs.sakura.ne.jp/casl-simulator\n\n  - [[https://travis-ci.org/akicho8/rasl][Travis]] [[https://travis-ci.org/akicho8/rasl.png]]\n  - [[https://gemnasium.com/akicho8/rasl/][Gemnasium]] [[https://gemnasium.com/akicho8/rasl.png]]\n  - [[https://codeclimate.com/github/akicho8/rasl][Code Climate]] [[https://codeclimate.com/github/akicho8/rasl.png]]\n\n#+BEGIN_SRC ruby\nrequire \"rasl\"\n\napp = Rasl::Processor.new\napp.assemble \u003c\u003c-SOURCE\nMAIN    START\n        LD      GR0,=1\n        LD      GR1,=2\n        ADDA    GR0,GR1\n        ST      GR0,RESULT\n        RET\nRESULT  DS      1\n        END\nSOURCE\napp.go\napp.gr[:gr0].value                       # =\u003e 3\napp.labels[\"MAIN\"]                       # =\u003e {\"RESULT\"=\u003e8}\napp.memory[app.labels[\"MAIN\"][\"RESULT\"]] # =\u003e 3\nputs app.disassemble\n# \u003e\u003e 0000 1000 0009    LD      GR0, #0009\n# \u003e\u003e 0002 1010 000A    LD      GR1, #000A\n# \u003e\u003e 0004 2401         ADDA    GR0, GR1\n# \u003e\u003e 0005 1100 0008    ST      GR0, #0008\n# \u003e\u003e 0007 8100         RET\n# \u003e\u003e 0008 0003         DC      3\n# \u003e\u003e 0009 0001         DC      1\n# \u003e\u003e 000A 0002         DC      2\n#+END_SRC\n\n** 仕様\n\n   - プロシージャ\n     - START〜END は複数定義可\n     - START に前置するラベルは必須ではない\n     - START と END は省略可\n     - 最初に登場した START の引数をブートアドレスにする\n   - ラベル\n     - STARTに前置したラベルはグローバルラベル\n     - STARTのあとからENDまではローカルラベル\n     - ラベルの文字数制限なし\n     - ラベルの最後にコロンをつけてもよい (ラベルに含まない)\n     - ラベルの最後にコロンをつけると必ずラベルになる (NOP: と書いたら NOP は命令ではなくラベルとみなす)\n     - ラベルの先頭に $ や @ をつけてもよい (ラベルに含む)\n     - $ で始まるラベルは必ずグローバルラベルになる\n     - ラベルだけの行を書いてもよい\n     - ラベルは大小文字を区別する\n     - START〜ENDを書かなかった場合のラベルはすべてグローバルラベル\n   - 構文\n     - スペースを空けずに命令を書いてもよい (Rasl.config.bol_order = false で無効になる)\n     - 引数のセパレーターはスペースでもいい\n     - インライン即値の部分は \"= 1\" のようにスペースを空けてもよい\n     - 文字列はダブルクォーテーションで囲んでもいい\n     - 行頭からだけ # でコメントにできる。shebang 用\n   - その他\n     - CASL1 と CASL2 に対応\n     - インライン即値はENDの直前に定義する。END がなければコードの最後に定義する\n     - EXIT で終了してもよい\n     - GRn を n とは書けない (CASL2ではアドレスとレジスタの区別がつかないため)\n     - NOP は #00 にはしてない (データなのか命令なのかまぎらわしいので)\n     - GRn の他に FR PC SP レジスタを指定できる (例: addl SP, 1 など)\n     - Rasl.config.spec = 1 にすると GR4 が SP になる\n   - 注意\n     - 文字コードは UTF-8 なので DC 'あ' は DS 3 の領域を使う\n     - 文字列リテラルの中だろうとセミコロン以降をぶっちぎる。\n       'a;b' の場合 'a となるため \\ でエスケープして 'a\\;b' と書く\n\n** コマンドラインで使う例\n\n*** --help\n\n   : $ rasl --help\n   : CASL Assembler / Simulator rasl 0.0.1\n   : 使い方: rasl [OPTIONS] [ファイル]\n   :     -s, --simulator                  シミュレータ起動\n   :     -p, --print-map                  MAP情報の標準出力\n   :     -m, --output-map                 MAP情報のファイル出力。-g オプションがあるときは実行後に出力する\n   :     -g, --go                         実行\n   :     -e, --eval=CODE                  指定コードの評価。指定があると標準入力からは読み込まない\n   :         --memory-size=SIZE           メモリサイズの指定(デフォルト:65536)\n   :         --spec=NUMBER                1:レジスタ数5個でGR4==SP 2:レジスタ数8 GR4!=SP\n   :         --ds-init-value=VAL          DSで領域確保したときの初期値(デフォルト:0)\n   :         --memory-defval=VAL          メモリの初期値(デフォルト:0)\n   :         --[no-]bol-order             命令の前に空白を書かなくてよいことにする(デフォルト:true)\n   :     -i, --register                   実行後レジスタ一覧表示\n\n*** MAP情報の標準出力 (-p)\n\n   : $ rasl -p hello.csl\n   : 0000 7001 0000    PUSH    #0000, GR1\n   : 0002 7002 0000    PUSH    #0000, GR2\n   : 0004 1210 000D    LAD     GR1, #000D\n   : 0006 1220 0018    LAD     GR2, #0018\n   : 0008 F000 0001    SVC     #0001\n   : 000A 7120         POP     GR2\n   : 000B 7110         POP     GR1\n   : 000C 8100         RET\n   : 000D 0048         DC      72     ; 'H'\n   : 000E 0065         DC      101    ; 'e'\n   : 000F 006C         DC      108    ; 'l'\n   : 0010 006C         DC      108    ; 'l'\n   : 0011 006F         DC      111    ; 'o'\n   : 0012 000B         DC      5\n\n*** MAP情報のファイル出力 (-m)\n\n   : $ rasl -m hello.csl\n   : $ cat hello.map\n   : 0000 7001 0000    PUSH    #0000, GR1\n   : 0002 7002 0000    PUSH    #0000, GR2\n   : 0004 1210 000D    LAD     GR1, #000D\n   : 0006 1220 0018    LAD     GR2, #0018\n   : 0008 F000 0001    SVC     #0001\n   : 000A 7120         POP     GR2\n   : 000B 7110         POP     GR1\n   : 000C 8100         RET\n   : 000D 0048         DC      72     ; 'H'\n   : 000E 0065         DC      101    ; 'e'\n   : 000F 006C         DC      108    ; 'l'\n   : 0010 006C         DC      108    ; 'l'\n   : 0011 006F         DC      111    ; 'o'\n   : 0012 000B         DC      5\n\n*** 指定コードの評価 (-e)\n\n    : $ rasl -p -e 'LEA GR1,1,GR1'\n    : 0000 1F11 0001    LEA     GR1, #0001, GR1\n\n    標準入力から渡してもよい\n\n    : $ echo 'LEA GR1,1,GR1' | rasl -p\n    : 0000 1F11 0001    LEA     GR1, #0001, GR1\n\n*** 実行 (-g)\n\n   : $ rasl -g hello.csl\n   : Hello\n\n*** Simulator (-s)\n\n   : $ rasl -s hello.csl\n   : -?\n   : D[address]    memory-dump\n   : U[address]    unassemble\n   : G[address]    go\n   : T[address]    trace\n   : R[reg=n]      register\n   : ? or H        usage\n   : I             init\n   : Q             quit\n   : -r\n   : GR0=0000 GR1=0000 GR2=0000 GR3=0000 GR4=0000 GR5=0000 GR6=0000 GR7=0000 PC=0000 SP=FFFF FR=___(+)\n   : 0000 7001 0000    PUSH    #0000, GR1\n   : -t\n   : GR0=0000 GR1=0000 GR2=0000 GR3=0000 GR4=0000 GR5=0000 GR6=0000 GR7=0000 PC=0002 SP=FFFE FR=___(+)\n   : 0002 7002 0000    PUSH    #0000, GR2\n   : -t\n   : GR0=0000 GR1=0000 GR2=0000 GR3=0000 GR4=0000 GR5=0000 GR6=0000 GR7=0000 PC=0004 SP=FFFD FR=___(+)\n   : 0004 1210 000D    LAD     GR1, #000D\n   : -u\n   : 0000 7001 0000    PUSH    #0000, GR1\n   : 0002 7002 0000    PUSH    #0000, GR2\n   : 0004 1210 000D    LAD     GR1, #000D\n   : 0006 1220 0012    LAD     GR2, #0012\n   : 0008 F000 0001    SVC     #0001\n   : 000A 7120         POP     GR2\n   : 000B 7110         POP     GR1\n   : 000C 8100         RET\n   : -g\n   : Hello\n   : -d0\n   : 0000: 7001 0000 7002 0000 1210 000D 1220 0012 ........\n   : 0008: F000 0001 7120 7110 8100 0048 0065 006C .....Hel\n   : 0010: 006C 006F 0005 0000 0000 0000 0000 0000 lo......\n   : 0018: 0000 0000 0000 0000 0000 0000 0000 0000 ........\n   : -q\n\n** IN 命令時の __END__\n\nデフォルトでは標準入力待ちになるが __END__ の指定があればその次の行からを入力データとして扱う\n\n#+BEGIN_SRC shell\n$ cat in_out.csl\n        START\n        IN      STR,LEN  ; STR=\"a\" LEN=1\n        OUT     STR,LEN  ; =\u003e \"a\"\n        IN      STR,LEN  ; STR=\"\"  LEN=0\n        OUT     STR,LEN  ; =\u003e \"\"\n        IN      STR,LEN  ; STR=\"b\" LEN=1\n        OUT     STR,LEN  ; =\u003e \"b\"\n        IN      STR,LEN  ; STR=\"\"  LEN=-1\n        OUT     STR,LEN  ; =\u003e なし\n        RET\nSTR     DS      4\nLEN     DS      1\n        END\n__END__\na\n\nb\n\n$ rasl -g in_out.csl\na\n\nb\n#+END_SRC\n\n** オススメの Emacs 設定\n\n#+BEGIN_SRC emacs-lisp\n(add-to-list 'auto-mode-alist '(\"\\\\.\\\\([rc]asl?\\\\|csl\\\\)$\" . asm-mode))\n#+END_SRC\n\n** 参考\n\n  - CASL2 仕様 http://www.jitec.ipa.go.jp/1_13download/shiken_yougo_ver2_2.pdf\n  - CASL1 仕様 http://www.image.med.osaka-u.ac.jp/member/nakamoto/enshuD2007/casl.pdf\n  - CASL - Wikipedia http://ja.wikipedia.org/wiki/CASL\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakicho8%2Frasl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakicho8%2Frasl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakicho8%2Frasl/lists"}