マイコン独立大作戦
CRT/VGAIF+KEYIF+SDCARDIFボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
昔はそれが普通のことだったのですが、安価なCRTディスプレイが生産中止となって久しい今日ではそれ
は叶わぬことと諦めていたのですが…。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[総合第73回]
●VFCLRのダウンロード
前回「VFCLR.BINはND80Z3.5(ND80ZV)で実行しただけで、ND8080、MYCPU80では未確認なのでダウンロードについてはその確認が済んでからということにします」と書きました。
確認してよかったです。
ND8080で実行したらみごとにこけてしまいました。
むむ。
こんなに短いプログラムなのに、なぜじゃ。
見たところどこにもおかしいところはないようだが…。
おお、あった!
ありました。
ND8080やMYCPU80ではだめなところが。
こちらは修正後のソースプログラムリストです。
;;; VF clear program
;for nd80z3/nd8080
;
;17/5/12 5/15 5/18
;
ORG $E000
;
REENT=$1033
;
FATSIZE=$EA16
FATADRS=$E9FC;-FD fat1 top sector no.
FATADRSNOW=$E9FA;-FB
;
FATBF=$EC00;-EDFF
;
SCTRD=$7024
SCTWR=$7027
SDINIT=$703C
;
VFCOPY:CALL SDINIT
LD D,FF
LD HL,FATBF
LD BC,$0080
CALL BFCLR
LD D,00
LD BC,$0180
CALL BFCLR
LD HL,(FATADRS)
LD (FATADRSNOW),HL
CALL FATWR;first FAT,#0000-#00FF
LD HL,(FATADRSNOW)
INC HL
LD (FATADRSNOW),HL
CALL FATRD2
LD D,00
LD BC,$0080
LD HL,FATBF
CALL BFCLR
CALL FATWR;2nd FAT,#0100-#013F
JP REENT
;
BFCLR:LD (HL),D
INC HL
DEC BC
LD A,B
OR C
JP NZ,BFCLR
RET
;
;FAT re-write
FATWR:LD HL,(FATADRSNOW)
LD A,L
LD C,H
LD B,00
PUSH HL
LD HL,FATBF
CALL SCTWR
POP HL
EX DE,HL
LD HL,(FATSIZE)
ADD HL,DE
LD A,L
LD C,H
LD B,00
LD HL,FATBF
CALL SCTWR
RET
;
FATRD2:LD A,L
LD C,H
LD B,00
LD HL,FATBF
CALL SCTRD
RET
;
;END
|
じつは修正前は下から18行目
EX DE,HL
LD HL,(FATSIZE)
のところが
LD DE,(FATSIZE)
になっていました。
Z80は8080の全ての命令(バイナリコード)をそのまま実行できますけれど、8080はZ80の命令の全部は実行できません。
LD DE,(XXXX)という命令は8080にはありません。
そこのところでこけていたのでした。
こちらは当社オリジナルのZ80アセンブラでアセンブルしたアセンブルリストです。
2017/5/18 22:43 vfclr1b.txt
END=E06C
;;; VF clear program
;for nd80z3/nd8080
;
;17/5/12 5/15 5/18
;
ORG $E000
;
REENT=$1033
;
FATSIZE=$EA16
FATADRS=$E9FC;-FD fat1 top sector no.
FATADRSNOW=$E9FA;-FB
;
FATBF=$EC00;-EDFF
;
SCTRD=$7024
SCTWR=$7027
SDINIT=$703C
;
E000 CD3C70 VFCOPY:CALL SDINIT
E003 16FF LD D,FF
E005 2100EC LD HL,FATBF
E008 018000 LD BC,$0080
E00B CD3AE0 CALL BFCLR
E00E 1600 LD D,00
E010 018001 LD BC,$0180
E013 CD3AE0 CALL BFCLR
E016 2AFCE9 LD HL,(FATADRS)
E019 22FAE9 LD (FATADRSNOW),HL
E01C CD43E0 CALL FATWR;first FAT,#0000-#00FF
E01F 2AFAE9 LD HL,(FATADRSNOW)
E022 23 INC HL
E023 22FAE9 LD (FATADRSNOW),HL
E026 CD62E0 CALL FATRD2
E029 1600 LD D,00
E02B 018000 LD BC,$0080
E02E 2100EC LD HL,FATBF
E031 CD3AE0 CALL BFCLR
E034 CD43E0 CALL FATWR;2nd FAT,#0100-#013F
E037 C33310 JP REENT
;
E03A 72 BFCLR:LD (HL),D
E03B 23 INC HL
E03C 0B DEC BC
E03D 78 LD A,B
E03E B1 OR C
E03F C23AE0 JP NZ,BFCLR
E042 C9 RET
;
;FAT re-write
E043 2AFAE9 FATWR:LD HL,(FATADRSNOW)
E046 7D LD A,L
E047 4C LD C,H
E048 0600 LD B,00
E04A E5 PUSH HL
E04B 2100EC LD HL,FATBF
E04E CD2770 CALL SCTWR
E051 E1 POP HL
E052 EB EX DE,HL
E053 2A16EA LD HL,(FATSIZE)
E056 19 ADD HL,DE
E057 7D LD A,L
E058 4C LD C,H
E059 0600 LD B,00
E05B 2100EC LD HL,FATBF
E05E CD2770 CALL SCTWR
E061 C9 RET
;
E062 7D FATRD2:LD A,L
E063 4C LD C,H
E064 0600 LD B,00
E066 2100EC LD HL,FATBF
E069 CD2470 CALL SCTRD
E06C C9 RET
;
;END
BFCLR =E03A FATADRS =E9FC FATADRSNOW =E9FA
FATBF =EC00 FATRD2 =E062 FATSIZE =EA16
FATWR =E043 REENT =1033 SCTRD =7024
SCTWR =7027 SDINIT =703C VFCOPY =E000
|
私はZ80ニーモニックに慣れてしまっていますので、ついZ80ニーモニックで書いてしまいますが、このようにアセンブルしてマシン語プログラムにしてしまえば、Z80でも8080でもどちらでも同じように実行できます(もちろん8080については上で書いたように8080でも実行できる命令だけで書かなければなりません)。
そしてこちらが、マシン語プログラムです。
VFCLR.BBB
上のリンクをクリックしてVFCLR.BBBをND80Z3.5(ND80ZV、ND8080、MYCPU80)の実行プログラムのあるフォルダにコピーしてください。
ウイルスチェッカーなどが常駐しているとダウンロードを拒否されてしまうかもしれませんから拡張子をBBBに変えてあります。
ダウンロード(コピー)後は拡張子をBINに変えてください。
もっともこのままでもND80Z3.5〜MYCPU80はロード、実行に支障はありませんけれど。
実行の方法、実行のときの注意については[総合第71回]をよく読んでください。
CRT/VGAIF+KEYIF+SDCARDIFボードの製作[総合第73回]
2017.5.18upload
前へ
次へ
ホームページトップへ戻る