Navigation Log - なびろぐ -
1999/08/31

...X680x0 spirit inside...

この日記はGNSで生成しています。
この日記の画像はOPTPiX webDesigner Ver.4で生成しています。

hauN
Go amazon.co.jp

■ご注文リストから■ [一覧]
■Amazonギフト券■ [購入]
まつもとあつしさんと探る「アニメビジネスの今」: 小寺・西田の「金曜ランチビュッフェ」対談シリーズ []
まつもとあつしさんと...
Amazonほしい物リスト


1999/08/31 (火)

Z80

_ 誤読・・・A*BC = BC*DE = HLというと、


; A*BC = BC*DE = HLを検査
; A=0 or Z=1なら成立
COMPARE:
  PUSH DE
  PUSH HL

  PUSH DE               ;
  LD   D,0              ;A=DE
  LD   E,A              ;
  CALL BC_MUL_DE_TO_HL  ;HL=A*BC
  EX   (SP),HL          ;A*BCを保存&DE呼び出し
  EX   DE,HL            ;
  CALL BC_MUL_DE_TO_HL  ;HL=BC*DE
  POP  DE               ;A*BCを呼び出し
  OR   A                ;CY=0
  SBC  HL,DE            ;HL(BC*DE)とDE(A*BC)を検査
  LD   A,H              ;H=L=0ならHL(BC*DE)=DE(A*BC)
  OR   L                ;CY=0
  EX   DE,HL            ;DE(A*BC)をHLに
  POP  DE               ;もとのHLをDEに呼び出し
  SBC  HL,DE            ;HL(A*BC)とDE(HL)を検査
  OR   H                ;H=L=0ならHL(A*BC)=DE(HL)
  OR   L                ;

  EX   DE,HL
  POP  DE
  RET

; HL=BC*DE
; BROKEN AF
BC_MUL_DE_TO_HL:
  PUSH BC
  PUSH DE

  LD   HL,0             ;
  LD   A,C              ;BCをCAに置き換える
  LD   C,B              ;
  LD   B,16             ;CA=16桁
LP1:
  SRL  C                ;CA >>= 1
  RRA                   ;最下位bitはCYに押し出される
  JP   NC,JP2           ;CY=1ならadd
  ADD  HL,DE            ;
JP2:
  SLA  E                ;DE <<= 1
  RL   D                ;
  DJNZ JP1              ;16桁分ループ

  POP  DE
  POP  BC
  RET

・・・久しぶりにZ80のコードなぞ書いてみる。注釈しておいたので、Z80を読めなくてもプログラミングするヒトなら読めるんじゃないかな。

10
6
3
5
(08/31 11:30PM)

_ なお、テストはしてない*1ので、これで合ってるかどーかは分かりません(汗)。

*1: いや、テストしようと思えばできなくはない(EX68+X1エミュレータでZ80環境は一応ある) んだけども^^;。

_ そーいや、Z80の昔話が上るたびによく言われること。「21とか3EとかCDとかC9とかC3とかED B0とか・・・死ぬまで忘れないんだろーね」・・・他のCPUではこういう話をあまり聞かない気がするんだが・・・気のせい?


[URL] [View Log()] [Trackback]
Name: Comment:



メールはこちらへ...[後藤浩昭 / Hiroaki GOTO / GORRY / gorry@hauN.org]

「表紙へ戻る」
「会議室」 「最新版」 「なびろぐindex」 「GNSソースを読む」