FizzBuzz for KANRININ/3

FizzBuzz for HOS


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リセットしてください。