Extreme Assembler Tanka - eagle0wl

Preview:

DESCRIPTION

http://ja.avtokyo.org/MediaArchives

Citation preview

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

松田和樹 (eagle0wl)Kazuki Matsuda

2014.02.16 AVTokyo

問題Quiz

released in 19758bit CPU

developed by MOS Technology[Hint 4]

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

MOS Technology

6502

どこにあるの?Where is this?

Apple IIApple Inc.

1977

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

任天堂 Nintendo1983

RP2A03 (リコー RICOH)

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

1987HuC6280 (ハドソン Hudson)

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

(Skynet / Cyberdyne Systems)

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

and...

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

Commodore 64コモドール Commodore

1982

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

Assembler Tanka onCommodore 64 (6502)

なぜ Commodore 64 ?

Why should I use Commodore 64?

販売台数1250 万~ 1700 万台

(単一機種で!)

selling12.5 ~ 17 million

(only single computer model !)

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

The new program releaseby 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) ; #は即値, $は 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)

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

結果Result

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

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

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

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

Forcus on charcodeof 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番地からマッピングする; 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

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

結果Result

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

若山牧水Bokusui Wakayama

1885-1928

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

ふるさとの

  お鈴のやまの

 かなしさよ

   秋のかすみの

    たなびきており

Thank you!