FizzBuzz for KANRININ/3 4
STATUS: 故障中x2
FizzBuzz問題流行ってますね~
もともとは、プログラマを雇用するときに、ちょっとでもプログラム書けるのかをテストするのに使ったとい問題。発端は→どうしてプログラマに・・・プログラムが書けないのか?。
ルールは、『1から100までの数を表示する。ただし、3で割り切れるときは「Fizz」、5で割り切れる場合は「Buzz」、両方で割り切れる場合は「FizzBuzz」と表示する』というもの。
「1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, Fizz Buzz, 16・・・」という感じになればOK。
詳しくは、WikiPediaみてね。→http://ja.wikipedia.org/wiki/Fizz_Buzz
で、これを解くのが流行ってるのは、いかに短い行数で実現するかとか綺麗にかけるとか、珍しい言語で書けるかとかってみんなで遊んでいるから。
昨晩はbig-brosさんが、S-OS"SWORD"上で動くZ80のコードを書いてましたよ。→せっかくだから俺もZ80版を書いてみるぜ!
S-OSにZ80とはナツカシス
じゃあ僕は、KANRININ/3用を書いてみる~
KANRININ/3って何?って?
1ウン年前に作ったX1用オリジナルOSです(というかモニタ? PC88用も作ったょ)。
ニッチさでなら負けないぞ!(ぉ
言語はZ80アセンブラです。
; FizzBuzz for KANRININ/3 X1
; KANRININ/3 SYSTEM CALLS (ダイジェスト)
[@CLS] EQU 00042H ; ガメンクリア (A=0:テキスト 1:グラフィック)
[@CHPUT] EQU 00030H ; 1モジヒョウジ (A=アスキーコード)
[@MSG] EQU 00036H ; DWカラノモジレツヒョウジ
[@MUL_A] EQU 000F&H ; HL=HL*A
[@DEV_A] EQU 000F9H ; HL=HL/A
[@COMP] EQU 00108H ; CP DE,HL
[@HL_DEC] EQU 00144H ; MEM[DE-]=STR$(HL)
[@S_WAIT] EQU 001ADH ; キーガ オサレルマデマツ
OFFSET 0C000H-02000H ; バイナリハ 0C000H ニセイセイサレル
ORG 02000H ; ジッコウバンチハ 02000H
START:
; ガメンショキカ
[@CLS]
; ヘンスウショキカ
LD HL,1 ; ショキチハ 1
LD B,100 ; 100カイ ループ
; ループ (100カイ)
LOOP:
LD D,H
LD E,L
; HLガ3デワリキレルカチェック
LD A,3
PUSH HL
CALL [@DEV_A] ; HL=HL/A
CALL [@MIL_A] ; HL=HL*A
CALL [@COMP] ; (DEトヒカク , HLガモトニモドッチレバワリキレタ)
POP HL
JP Z,PT_FIZZ ; ワリキレルナラ PT_FIZZ ヘ
; HLガ5デワリキレルカチェック
LD A,5
PUSH HL
CALL [@DEV_A]
CALL [@MIL_A]
CALL [@COMP]
POP HL
JP Z,PT_BUZZ ; ワリキレルナラ PT_BUZZ ヘ
; 10シンスウ スウチ ヒョウジ
LD DE,MSG_STR
CALL [@HL_DEC] ; HLノアタイヲ 10シンスウニシテ DEカラノメモリニカクノウ
LD DE,MSG_STR
CALL [@MSG]
JP PT_TAIL
PT_FIZZ:
; FIZZ ヒョウジ
LD DE,MSG_FIZZ
CALL [@MSG]
LD A,5
PUSH HL
CALL [@DEV_A]
CALL [@MIL_A]
CALL [@COMP] ; DEガ5デワリキレルカチェック
POP HL
JP NZ,PT_TAIL
PT_BUZZ:
; BUZZ ヒョウジ
LD DE,MSG_BUZZ
CALL [@MSG]
PT_TAIL:
LD A,","
CALL [@CHPUT]
INC HL
DJNZ LOOP
; シュウリョウ
CALL [@S_WAIT] ; キーニュウリョクマチ
JP START
; モジレツ/WORK
MSG_FIZZ: DB "Fizz",0
MSG_BUZZ: DB "Buzz",0
MSG_STR: DS 10 ; 10シンスウヘンカンヨウバッファ (10Byte)
● 実行方法(ぉ
【必要環境】
シャープX1シリーズ(要2D ディスクドライブ) ※
OS: S-OS"SWORD" X1用
アセンブラ: REDA
※ エミュレーターでも可 (「X Millenium」など)
【アセンブル方法】
S-OS上のREDAで、上記ソースを入力。
Aコマンドでコンパイル
Qコマンドで、モニターに戻って以下のコマンドでセーブ
S COMMAND.COM:C000:CFFF:2000
【KANRININ/3の入手】
以下のページでダウンロードできる「S-OS EMULATOR for Kanrinin/3 X1
」のディスクイメージ含まれています。
S-OS EMULATOR for Kanrinin/3 X1
【KANRININ/3へのインストール】
「アセンブル方法」で生成した、「COMMAND.COM」ファイルをKANRININ/3のディスクに(上書き)コピーしてください。
【起動方法】
KANRININ/3のディスクをFDD0に挿入しIPLリセットしてください。
除算噐がないプロセッサだと (スコア:1)
Re:除算噐がないプロセッサだと (スコア:1)
じゃー次は最適化版をつくってみるかなー。10進数表示は最初から10進数文字列を用意してそれをいじっていったほうが速そう。
Perlです (スコア:1)
-- ラテール部参加者募集中
Re:Perlです (スコア:1)