46
エクストリーム・アセンブラ短歌 Extreme Assembler Tanka 松田和樹 (eagle0wl) Kazuki Matsuda 2014.02.16 AVTokyo

Extreme Assembler Tanka - eagle0wl

Embed Size (px)

DESCRIPTION

http://ja.avtokyo.org/MediaArchives

Citation preview

Page 1: Extreme Assembler Tanka - eagle0wl

エクストリーム・アセンブラ短歌Extreme Assembler Tanka

松田和樹 (eagle0wl)Kazuki Matsuda

2014.02.16 AVTokyo

Page 2: Extreme Assembler Tanka - eagle0wl

問題Quiz

Page 3: Extreme Assembler Tanka - eagle0wl

released in 19758bit CPU

developed by MOS Technology[Hint 4]

クイズマジックアカデミー天の学舎 Quiz Magic Academy Ten no Manabiyahttp://www.konami.jp/am/qma/index.html

Page 4: Extreme Assembler Tanka - eagle0wl

MOS Technology

6502

Page 5: Extreme Assembler Tanka - eagle0wl

どこにあるの?Where is this?

Page 6: Extreme Assembler Tanka - eagle0wl

Apple IIApple Inc.

1977

Page 7: Extreme Assembler Tanka - eagle0wl

ファミリーコンピュータ(Nintendo Entertainment System)

任天堂 Nintendo1983

RP2A03 (リコー RICOH)

Page 8: Extreme Assembler Tanka - eagle0wl

PC エンジン (TurboGrafx-16)NEC ホームエレクトロニクス (NEC Corporation)

1987HuC6280 (ハドソン Hudson)

Page 9: Extreme Assembler Tanka - eagle0wl
Page 10: Extreme Assembler Tanka - eagle0wl
Page 11: Extreme Assembler Tanka - eagle0wl

ターミネーター (T-800)スカイネット/サイバーダイン

(Skynet / Cyberdyne Systems)

映画公開は 1984 年Release dates(Film) 1984

Page 12: Extreme Assembler Tanka - eagle0wl

and...

Page 13: Extreme Assembler Tanka - eagle0wl

What is the home-computer released in 1982and awarded a Guinness record as the

"best-selling single computer model of all time"?

クイズマジックアカデミー天の学舎 Quiz Magic Academy Ten no Manabiyahttp://www.konami.jp/am/qma/index.html

Page 14: Extreme Assembler Tanka - eagle0wl

Commodore 64コモドール Commodore

1982

Page 15: Extreme Assembler Tanka - eagle0wl

コモドール 64(6502) でアセンブラ短歌

Assembler Tanka onCommodore 64 (6502)

Page 16: Extreme Assembler Tanka - eagle0wl

なぜ Commodore 64 ?

Why should I use Commodore 64?

Page 17: Extreme Assembler Tanka - eagle0wl

販売台数1250 万~ 1700 万台

(単一機種で!)

selling12.5 ~ 17 million

(only single computer model !)

Page 18: Extreme Assembler Tanka - eagle0wl

未だに新作ソフトがアマチュアによって開発されている!

The new program releaseby amature are still continued even now!

Page 19: Extreme Assembler Tanka - eagle0wl

Coma Light 13 by Oxyron (2012)(いわゆるメガデモ Intro, Demo )

Page 20: Extreme Assembler Tanka - eagle0wl

Micro HEXAGON (2013)Super Hexagon Fan game

Page 21: Extreme Assembler Tanka - eagle0wl

アセンブラ短歌・試作Assembler Tanka - First Try

Page 22: Extreme Assembler Tanka - eagle0wl

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)

Page 23: Extreme Assembler Tanka - eagle0wl

a9 00 48 a9 4148 aa a9 4b 48 8a 48a9 77 48 ba e88a a0 01 20 1e ab eaea 68 68 68 68 68 60

Page 24: Extreme Assembler Tanka - eagle0wl

結果Result

Page 25: Extreme Assembler Tanka - eagle0wl
Page 26: Extreme Assembler Tanka - eagle0wl

Wakaわずか 4 文字 !Only 4 BPT! (Byte Per Tanka)

Page 27: Extreme Assembler Tanka - eagle0wl

BASIC Version10 FOR A=49152 TO 4918220 READ B30 POKE A,B40 NEXT50 DATA 169,0,72,169,6560 DATA 72,170,169,75,72,138,7270 DATA 169,119,72,186,23280 DATA 138,160,1,32,30,171,23490 DATA 234,104,104,104,104,104,96100 POKE 53272,23110 SYS 58692120 SYS 49152

Page 28: Extreme Assembler Tanka - eagle0wl

文字数を増やしたい !More BPT! More BPT!

Page 29: Extreme Assembler Tanka - eagle0wl

Commodore 64 の文字コードに着目する

Forcus on charcodeof Commodore 64

Page 30: Extreme Assembler Tanka - eagle0wl

ASCII ?http://e-words.jp/p/r-ascii.html

Page 31: Extreme Assembler Tanka - eagle0wl

No!

Page 32: Extreme Assembler Tanka - eagle0wl

PETSCII (unshifted)(PET Standard Code of Information Interchange)

Page 33: Extreme Assembler Tanka - eagle0wl

PETSCII (shifted)(PET Standard Code of Information Interchange)

Page 34: Extreme Assembler Tanka - eagle0wl

エクストリーム・アセンブラ短歌 !Extreme Assembler Tanka!

Page 35: Extreme Assembler Tanka - eagle0wl

Charactor Sets

コモドール 64 のデフォルト文字セット

Commodore 64 default character sets

Page 36: Extreme Assembler Tanka - eagle0wl

Charactor Sets

コモドール 64 のデフォルト文字セット

Commodore 64 default character sets

Page 37: Extreme Assembler Tanka - eagle0wl

Modified Charactor Sets

オリジナルの文字セット “ BOKUSCII”

Original character sets “BOKUSCII”

Page 38: Extreme Assembler Tanka - eagle0wl

Modified Charactor Sets

オリジナルの文字セット “ BOKUSCII”

Original character sets “BOKUSCII”

Page 39: Extreme Assembler Tanka - eagle0wl

エクストリーム・アセンブラ短歌試作

Extreme Assembler Tanka - Try

Page 40: Extreme Assembler Tanka - eagle0wl

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-2PushLoop: ; スタックに文字列(連番)をプッシュし続ける 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-1PullLoop: ; プッシュした回数分 POPしてスタックポインタを復旧 pla dex cpx #$59 ; X != #$59 なら PullLoopにジャンプ bne PullLoop rts

Page 41: Extreme Assembler Tanka - eagle0wl

a9 00 48 a2 7b8a 48 ca e0 5a d0 f9ea ea ba e8 8aa0 01 20 1e ab a2 7b68 ca e0 59 d0 fa 60

Page 42: Extreme Assembler Tanka - eagle0wl

結果Result

Page 43: Extreme Assembler Tanka - eagle0wl
Page 44: Extreme Assembler Tanka - eagle0wl
Page 45: Extreme Assembler Tanka - eagle0wl

35 文字(空白含む)35BPT(space include)

若山牧水Bokusui Wakayama

1885-1928

コモドール 64 上で日本語を表示 !Display Japanese Text on Commodore 64!

ふるさとの

  お鈴のやまの

 かなしさよ

   秋のかすみの

    たなびきており

Page 46: Extreme Assembler Tanka - eagle0wl

Thank you!