Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
エクストリーム・アセンブラ短歌
Extreme Assembler Tanka
松田和樹 (eagle0wl)
Kazuki Matsuda
2014.02.15 AVTokyo
8bit CPU
MOS
Technology
6502
どこにあるの?
Where is this?
Apple II
Apple Inc.
1977
ファミリーコンピュータ
(Nintendo Entertainment System)
任天堂 Nintendo
1983
RP2A03 (リコー RICOH)
PC エンジン (TurboGrafx-16)
NEC ホームエレクトロニクス (NEC Corporation)
1987
HuC6280 (ハドソン Hudson)
...
ターミネーター (T-800)
スカイネット/サイバーダイン
(Skynet / Cyberdyne Systems)
映画公開は 1984 年
Release dates(Film) 1984
and...
Commodore 64
コモドール Commodore
1982
コモドール 64(6502) で
アセンブラ短歌
Assembler Tanka on
Commodore 64 (6502)
なぜ Commodore 64 ?
Why should I use Commodore 64?
販売台数
1250 万~ 1700 万台
(単一機種で!)
selling
12.5 ~ 17 million
(only single computer model !)
未だに新作ソフトが
アマチュアによって
開発されている!
The new program release
by amature are still continued even now!
Coma Light 13 by Oxyron (2012)
(いわゆるメガデモ Intro, Demo )
Micro HEXAGON (2013)
Super Hexagon Fan game
アセンブラ短歌・試作
Assembler Tanka - First Try
processor 6502
org $C000 ; $C000 番地からマッピングする
; 5 : 2-1-2
lda #$00 ; A レジスタに #$00(null 終端 ) を代入 (LoaD Accumulator)
; # は即値,...
a9 00 48 a9 41
48 aa a9 4b 48 8a 48
a9 77 48 ba e8
8a a0 01 20 1e ab ea
ea 68 68 68 68 68 60
結果
Result
Waka
わずか 4 文字 !
Only 4 BPT! (Byte Per Tanka)
BASIC Version
10 FOR A=49152 TO 49182
20 READ B
30 POKE A,B
40 NEXT
50 DATA 169,0,72,169,65
60 DATA 72,170,169,75,72,138,7...
文字数を
増やしたい !
More BPT! More BPT!
Commodore 64 の
文字コードに着目する
Forcus on charcode
of Commodore 64
ASCII ?
http://e-words.jp/p/r-ascii.html
No!
PETSCII (unshifted)
(PET Standard Code of Information Interchange)
PETSCII (shifted)
(PET Standard Code of Information Interchange)
エクストリーム・アセンブラ短歌 !
Extreme Assembler Tanka!
Charactor Sets
コモドール 64 のデフォルト文字セット
Commodore 64 default character sets
Charactor Sets
コモドール 64 のデフォルト文字セット
Commodore 64 default character sets
Modified Charactor Sets
オリジナルの文字セット “ BOKUSCII”
Original character sets “BOKUSCII”
Modified Charactor Sets
オリジナルの文字セット “ BOKUSCII”
Original character sets “BOKUSCII”
エクストリーム・アセンブラ短歌
試作
Extreme Assembler Tanka - Try
processor 6502
org $2000 ; $2000 番地から独自文字セット "BOKUSCII" をマッピングする
incbin "c64-tanka-extreme.c64"
org $C000 ; $C000 番地からマッピン...
a9 00 48 a2 7b
8a 48 ca e0 5a d0 f9
ea ea ba e8 8a
a0 01 20 1e ab a2 7b
68 ca e0 59 d0 fa 60
結果
Result
35 文字(空白含む)
35BPT(space include)
若山牧水
Bokusui Wakayama
1885-1928
コモドール 64 上で日本語を表示 !
Display Japanese Text on Commodore 64...
Thank you!
Upcoming SlideShare
Loading in …5
×

Extreme Assembler Tanka - eagle0wl

1,374 views

Published on

http://ja.avtokyo.org/MediaArchives

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Extreme Assembler Tanka - eagle0wl

  1. 1. エクストリーム・アセンブラ短歌 Extreme Assembler Tanka 松田和樹 (eagle0wl) Kazuki Matsuda 2014.02.15 AVTokyo
  2. 2. 8bit CPU
  3. 3. MOS Technology 6502
  4. 4. どこにあるの? Where is this?
  5. 5. Apple II Apple Inc. 1977
  6. 6. ファミリーコンピュータ (Nintendo Entertainment System) 任天堂 Nintendo 1983 RP2A03 (リコー RICOH)
  7. 7. PC エンジン (TurboGrafx-16) NEC ホームエレクトロニクス (NEC Corporation) 1987 HuC6280 (ハドソン Hudson)
  8. 8. ...
  9. 9. ターミネーター (T-800) スカイネット/サイバーダイン (Skynet / Cyberdyne Systems) 映画公開は 1984 年 Release dates(Film) 1984
  10. 10. and...
  11. 11. Commodore 64 コモドール Commodore 1982
  12. 12. コモドール 64(6502) で アセンブラ短歌 Assembler Tanka on Commodore 64 (6502)
  13. 13. なぜ Commodore 64 ? Why should I use Commodore 64?
  14. 14. 販売台数 1250 万~ 1700 万台 (単一機種で!) selling 12.5 ~ 17 million (only single computer model !)
  15. 15. 未だに新作ソフトが アマチュアによって 開発されている! The new program release by amature are still continued even now!
  16. 16. Coma Light 13 by Oxyron (2012) (いわゆるメガデモ Intro, Demo )
  17. 17. Micro HEXAGON (2013) Super Hexagon Fan game
  18. 18. アセンブラ短歌・試作 Assembler Tanka - First Try
  19. 19. processor 6502 org $C000 ; $C000 番地からマッピングする ; 5 : 2-1-2 lda #$00 ; A レジスタに #$00(null 終端 ) を代入 (LoaD Accumulator) ; # は即値, $ は 16 進数を表す記号 pha ; A レジスタ値をスタックに PUSH する (PusH Accumulator) lda #$41 ; A = 'a' ; 7 : 1-1-2-1-1-1 pha tax ; A レジスタ値を X レジスタにコピー (Transfer Accumulator to X) lda #$4B ; A = 'k' pha txa ; X レジスタ値を A レジスタにコピー (Transfer X Into Accumulator) ; A = X = 'a' pha ; 5 : 2-1-1-1 lda #$77 ; A = 'W' pha ; 'k' をスタックにプッシュする tsx ; スタックポインタを X レジスタにコピー ; (Transfer Stack pointer to X) inx ; X レジスタ値をインクリメント ; 7 : 1-2-3-1 txa ; X レジスタ値を A レジスタにコピー ; スタックに積んだ表示文字列の下位アドレス ldy #$01 ; スタックに積んだ表示文字列の上位アドレス ; (スタック領域は $0100-$01FF なので,上位アドレスは #$01 固定) jsr $AB1E ; STROUT(BASIC ROM) ; Y= 表示文字列の上位アドレス, A= 表示文字列の下位アドレス nop ; 何もしない (No OPeration) ; 7 : 1-1-1-1-1-1-1 nop pla ; スタックポインタの復旧のため, PUSH した回数ぶん pla ; スタックから A レジスタに POP する (PulL Accumulator) pla pla pla ; 最初に PUSH した NULL がそのまま戻り値になる rts ; (ReTurn from Subroutine)
  20. 20. a9 00 48 a9 41 48 aa a9 4b 48 8a 48 a9 77 48 ba e8 8a a0 01 20 1e ab ea ea 68 68 68 68 68 60
  21. 21. 結果 Result
  22. 22. Waka わずか 4 文字 ! Only 4 BPT! (Byte Per Tanka)
  23. 23. BASIC Version 10 FOR A=49152 TO 49182 20 READ B 30 POKE A,B 40 NEXT 50 DATA 169,0,72,169,65 60 DATA 72,170,169,75,72,138,72 70 DATA 169,119,72,186,232 80 DATA 138,160,1,32,30,171,234 90 DATA 234,104,104,104,104,104,96 100 POKE 53272,23 110 SYS 58692 120 SYS 49152
  24. 24. 文字数を 増やしたい ! More BPT! More BPT!
  25. 25. Commodore 64 の 文字コードに着目する Forcus on charcode of Commodore 64
  26. 26. ASCII ? http://e-words.jp/p/r-ascii.html
  27. 27. No!
  28. 28. PETSCII (unshifted) (PET Standard Code of Information Interchange)
  29. 29. PETSCII (shifted) (PET Standard Code of Information Interchange)
  30. 30. エクストリーム・アセンブラ短歌 ! Extreme Assembler Tanka!
  31. 31. Charactor Sets コモドール 64 のデフォルト文字セット Commodore 64 default character sets
  32. 32. Charactor Sets コモドール 64 のデフォルト文字セット Commodore 64 default character sets
  33. 33. Modified Charactor Sets オリジナルの文字セット “ BOKUSCII” Original character sets “BOKUSCII”
  34. 34. Modified Charactor Sets オリジナルの文字セット “ BOKUSCII” Original character sets “BOKUSCII”
  35. 35. エクストリーム・アセンブラ短歌 試作 Extreme Assembler Tanka - Try
  36. 36. processor 6502 org $2000 ; $2000 番地から独自文字セット "BOKUSCII" をマッピングする incbin "c64-tanka-extreme.c64" org $C000 ; $C000 番地からマッピングする ; 5 : 2-1-2 lda #$00 ; null 終端文字としての #$00 をスタックに PUSH pha ldx #$7B ; ループカウンタとしての X レジスタに #$7B をセット ; 7 : 1-1-1-2-2 PushLoop: ; スタックに文字列(連番)をプッシュし続ける txa ; X レジスタ値を A レジスタにコピー pha ; A レジスタ値をスタックに PUSH する dex ; X レジスタをデクリメント cpx #$5A ; X != #$5A なら PushLoop にジャンプ bne PushLoop ; 5 : 1-1-1-1-1 nop nop tsx ; スタックポインタを X レジスタにコピー inx ; X レジスタ値をインクリメント txa ; スタックに積んだ表示文字列の下位アドレス ; 7 : 2-3-2 ldy #$01 ; スタックに積んだ表示文字列の上位アドレス ; (スタック領域は $0100-$01FF なので,上位アドレスは #$01 固定) jsr $AB1E ; STROUT(BASIC ROM) ; Y= 表示文字列の上位アドレス, A= 表示文字列の下位アドレス ldx #$7B ; ループカウンタとしての X レジスタに #$7B をセット ; 7 : 1-1-2-2-1 PullLoop: ; プッシュした回数分 POP してスタックポインタを復旧 pla dex cpx #$59 ; X != #$59 なら PullLoop にジャンプ bne PullLoop rts
  37. 37. a9 00 48 a2 7b 8a 48 ca e0 5a d0 f9 ea ea ba e8 8a a0 01 20 1e ab a2 7b 68 ca e0 59 d0 fa 60
  38. 38. 結果 Result
  39. 39. 35 文字(空白含む) 35BPT(space include) 若山牧水 Bokusui Wakayama 1885-1928 コモドール 64 上で日本語を表示 ! Display Japanese Text on Commodore 64! ふ る さ と の     お 鈴 の や ま の   か な し さ よ       秋 の か す み の         た な び き て お り
  40. 40. Thank you!

×