マイコン独立大作戦
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
前へ
次へ
ホームページトップへ戻る