マイコン独立大作戦
CRT/VGAIF+KEYIF+SDCARDIFボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
昔はそれが普通のことだったのですが、安価なCRTディスプレイが生産中止となって久しい今日ではそれ
は叶わぬことと諦めていたのですが…。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[総合第89回]
●VFMAKE.BINのダウンロード
下は前回説明しましたVFMAKEのソースプログラムリストです。
Z80ニーモニック(ザイログニーモニック)で書いてありますが、8080でも実行できる命令だけで書いてありますから、アセンブル後のバイナリファイル(マシン語プログラム)はND8080、MYCPU80でもそのまま実行できます。
;;; VF make program ;for z80 & 8080 ; ;17/5/12 5/25 6/13 ; ORG $E000 ; REENT=$1033 ; BFADRS=$E9FE;-FF FATADRS=$E9FC;-FD fat1 top sector no. FATADRSNOW=$E9FA;-FB DIRADRS=$E9F8;-F9 DIRADRSNOW=$E9F6;-F7 RWNMSRCMK=$E9EC NMBFWK=$E9E0 FATSIZE=$E9D8;-D9 ZDIRMK=$E9D7 ; FATBF=$EC00;-EDFF DIRBF=$EE00;-EFFF ; SCTRD=$7024 SCTWR=$7027 DIRRD=$7033 SDINIT=$703C ; VFSET:CALL SDINIT LD HL,(FATADRS) LD (FATADRSNOW),HL CALL FATRD2 LD HL,VFDNAME LD (NMBFWK),HL XOR A LD (ZDIRMK),A LD (RWNMSRCMK),A LD HL,$0040 LD (CLSTNOTOP),HL VFSET0:CALL NMSRC JP Z,VFSET01 LD (RWNMSRCMK),A CALL NMSRC;E5 search ;DIR save VFSET01:EX DE,HL LD B,0B;=11 LD HL,(NMBFWK) VFSET012:LD A,(HL) LD (DE),A INC HL INC DE DEC B JP NZ,VFSET012 EX DE,HL LD (HL),20; file type INC HL LD B,0E XOR A VFSET02:LD (HL),A INC HL DEC B JP NZ,VFSET02 EX DE,HL LD HL,(CLSTNOTOP);40,80,c0,100 EX DE,HL PUSH DE LD (HL),E INC HL LD (HL),D INC HL LD (HL),00;filesize=2MB INC HL LD (HL),00 INC HL LD (HL),20 INC HL LD (HL),00 CALL DIRWR POP DE;top cluster no. OR A LD A,E RLA LD C,A LD A,D RLA LD B,A CP 02 JP Z,DSET LD HL,FATBF ADD HL,BC JP FATMAKE DSET:CALL FATWR LD HL,(FATADRSNOW) INC HL LD (FATADRSNOW),HL CALL FATRD2 LD DE,$0100 LD HL,FATBF FATMAKE:LD B,40 FATMAKE2:INC DE LD (HL),E INC HL LD (HL),D INC HL DEC B JP NZ,FATMAKE2 DEC HL LD (HL),FF DEC HL LD (HL),FF LD A,D CP 01 JP NZ,FATMAKE3 LD A,E CP 40;D drive? JP NZ,FATMAKE3 CALL FATWR JP REENT FATMAKE3:EX DE,HL LD (CLSTNOTOP),HL EX DE,HL LD HL,(NMBFWK) LD BC,$000B;=11 ADD HL,BC LD (NMBFWK),HL JP VFSET0 ; VFDNAME:"A " " " "VFD" "B " " " "VFD" "C " " " "VFD" "D " " " "VFD" CLSTNOTOP:DB 00 DB 00 ; NMSRC:LD HL,(DIRADRS) LD A,(ZDIRMK) CP 01 JP NZ,NMSRC0 LD BC,$0020 ADD HL,BC NMSRC0:LD (DIRADRSNOW),HL CALL DIRRD LD B,10;=16 LD HL,DIRBF NMSRC1:PUSH HL EX DE,HL LD HL,(NMBFWK) EX DE,HL LD A,(HL) OR A JP Z,NMSRC6;dir end CP E5 JP Z,NMSRC5 LD C,0B;=11 NMSRC12:LD A,(DE) CP (HL) JP NZ,NMSRC51 INC HL INC DE DEC C JP NZ,NMSRC12 ;name match POP HL XOR A;zf on RET NMSRC5:POP DE;dummy LD A,(RWNMSRCMK) OR A RET NZ PUSH DE NMSRC51:POP HL LD DE,$0020 ADD HL,DE DEC B JP NZ,NMSRC1 ;next dirctry read LD HL,(DIRADRSNOW) INC HL JP NMSRC0 NMSRC6:POP DE;dummy INC A;reset zf RET ; ;dir write DIRWR:LD HL,(DIRADRSNOW) LD A,L LD C,H LD B,00 LD HL,DIRBF CALL SCTWR 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 |
下はND80Z3.5(ND80ZV)に付属のZ80アセンブラ(ZASM.COM)でアセンブルしたときに出力されるアセンブルリストです。
2017/6/13 15:19 vfmakeb.txt END=E173 ;;; VF make program ;for z80 & 8080 ; ;17/5/12 5/25 6/13 ; ORG $E000 ; REENT=$1033 ; BFADRS=$E9FE;-FF FATADRS=$E9FC;-FD fat1 top sector no. FATADRSNOW=$E9FA;-FB DIRADRS=$E9F8;-F9 DIRADRSNOW=$E9F6;-F7 RWNMSRCMK=$E9EC NMBFWK=$E9E0 FATSIZE=$E9D8;-D9 ZDIRMK=$E9D7 ; FATBF=$EC00;-EDFF DIRBF=$EE00;-EFFF ; SCTRD=$7024 SCTWR=$7027 DIRRD=$7033 SDINIT=$703C ; E000 CD3C70 VFSET:CALL SDINIT E003 2AFCE9 LD HL,(FATADRS) E006 22FAE9 LD (FATADRSNOW),HL E009 CD69E1 CALL FATRD2 E00C 21BAE0 LD HL,VFDNAME E00F 22E0E9 LD (NMBFWK),HL E012 AF XOR A E013 32D7E9 LD (ZDIRMK),A E016 32ECE9 LD (RWNMSRCMK),A E019 214000 LD HL,$0040 E01C 22E6E0 LD (CLSTNOTOP),HL E01F CDE8E0 VFSET0:CALL NMSRC E022 CA2BE0 JP Z,VFSET01 E025 32ECE9 LD (RWNMSRCMK),A E028 CDE8E0 CALL NMSRC;E5 search ;DIR save E02B EB VFSET01:EX DE,HL E02C 060B LD B,0B;=11 E02E 2AE0E9 LD HL,(NMBFWK) E031 7E VFSET012:LD A,(HL) E032 12 LD (DE),A E033 23 INC HL E034 13 INC DE E035 05 DEC B E036 C231E0 JP NZ,VFSET012 E039 EB EX DE,HL E03A 3620 LD (HL),20; file type E03C 23 INC HL E03D 060E LD B,0E E03F AF XOR A E040 77 VFSET02:LD (HL),A E041 23 INC HL E042 05 DEC B E043 C240E0 JP NZ,VFSET02 E046 EB EX DE,HL E047 2AE6E0 LD HL,(CLSTNOTOP);40,80,c0,100 E04A EB EX DE,HL E04B D5 PUSH DE E04C 73 LD (HL),E E04D 23 INC HL E04E 72 LD (HL),D E04F 23 INC HL E050 3600 LD (HL),00;filesize=2MB E052 23 INC HL E053 3600 LD (HL),00 E055 23 INC HL E056 3620 LD (HL),20 E058 23 INC HL E059 3600 LD (HL),00 E05B CD3CE1 CALL DIRWR E05E D1 POP DE;top cluster no. E05F B7 OR A E060 7B LD A,E E061 17 RLA E062 4F LD C,A E063 7A LD A,D E064 17 RLA E065 47 LD B,A E066 FE02 CP 02 E068 CA72E0 JP Z,DSET E06B 2100EC LD HL,FATBF E06E 09 ADD HL,BC E06F C385E0 JP FATMAKE E072 CD4AE1 DSET:CALL FATWR E075 2AFAE9 LD HL,(FATADRSNOW) E078 23 INC HL E079 22FAE9 LD (FATADRSNOW),HL E07C CD69E1 CALL FATRD2 E07F 110001 LD DE,$0100 E082 2100EC LD HL,FATBF E085 0640 FATMAKE:LD B,40 E087 13 FATMAKE2:INC DE E088 73 LD (HL),E E089 23 INC HL E08A 72 LD (HL),D E08B 23 INC HL E08C 05 DEC B E08D C287E0 JP NZ,FATMAKE2 E090 2B DEC HL E091 36FF LD (HL),FF E093 2B DEC HL E094 36FF LD (HL),FF E096 7A LD A,D E097 FE01 CP 01 E099 C2A8E0 JP NZ,FATMAKE3 E09C 7B LD A,E E09D FE40 CP 40;D drive? E09F C2A8E0 JP NZ,FATMAKE3 E0A2 CD4AE1 CALL FATWR E0A5 C33310 JP REENT E0A8 EB FATMAKE3:EX DE,HL E0A9 22E6E0 LD (CLSTNOTOP),HL E0AC EB EX DE,HL E0AD 2AE0E9 LD HL,(NMBFWK) E0B0 010B00 LD BC,$000B;=11 E0B3 09 ADD HL,BC E0B4 22E0E9 LD (NMBFWK),HL E0B7 C31FE0 JP VFSET0 ; E0BA 41202020 VFDNAME:"A " E0BE 20202020 " " E0C2 564644 "VFD" E0C5 42202020 "B " E0C9 20202020 " " E0CD 564644 "VFD" E0D0 43202020 "C " E0D4 20202020 " " E0D8 564644 "VFD" E0DB 44202020 "D " E0DF 20202020 " " E0E3 564644 "VFD" E0E6 00 CLSTNOTOP:DB 00 E0E7 00 DB 00 ; E0E8 2AF8E9 NMSRC:LD HL,(DIRADRS) E0EB 3AD7E9 LD A,(ZDIRMK) E0EE FE01 CP 01 E0F0 C2F7E0 JP NZ,NMSRC0 E0F3 012000 LD BC,$0020 E0F6 09 ADD HL,BC E0F7 22F6E9 NMSRC0:LD (DIRADRSNOW),HL E0FA CD3370 CALL DIRRD E0FD 0610 LD B,10;=16 E0FF 2100EE LD HL,DIRBF E102 E5 NMSRC1:PUSH HL E103 EB EX DE,HL E104 2AE0E9 LD HL,(NMBFWK) E107 EB EX DE,HL E108 7E LD A,(HL) E109 B7 OR A E10A CA39E1 JP Z,NMSRC6;dir end E10D FEE5 CP E5 E10F CA22E1 JP Z,NMSRC5 E112 0E0B LD C,0B;=11 E114 1A NMSRC12:LD A,(DE) E115 BE CP (HL) E116 C229E1 JP NZ,NMSRC51 E119 23 INC HL E11A 13 INC DE E11B 0D DEC C E11C C214E1 JP NZ,NMSRC12 ;name match E11F E1 POP HL E120 AF XOR A;zf on E121 C9 RET E122 D1 NMSRC5:POP DE;dummy E123 3AECE9 LD A,(RWNMSRCMK) E126 B7 OR A E127 C0 RET NZ E128 D5 PUSH DE E129 E1 NMSRC51:POP HL E12A 112000 LD DE,$0020 E12D 19 ADD HL,DE E12E 05 DEC B E12F C202E1 JP NZ,NMSRC1 ;next dirctry read E132 2AF6E9 LD HL,(DIRADRSNOW) E135 23 INC HL E136 C3F7E0 JP NMSRC0 E139 D1 NMSRC6:POP DE;dummy E13A 3C INC A;reset zf E13B C9 RET ; ;dir write E13C 2AF6E9 DIRWR:LD HL,(DIRADRSNOW) E13F 7D LD A,L E140 4C LD C,H E141 0600 LD B,00 E143 2100EE LD HL,DIRBF E146 CD2770 CALL SCTWR E149 C9 RET ; ;FAT re-write E14A 2AFAE9 FATWR:LD HL,(FATADRSNOW) E14D 7D LD A,L E14E 4C LD C,H E14F 0600 LD B,00 E151 E5 PUSH HL E152 2100EC LD HL,FATBF E155 CD2770 CALL SCTWR E158 E1 POP HL E159 EB EX DE,HL E15A 2AD8E9 LD HL,(FATSIZE) E15D 19 ADD HL,DE E15E 7D LD A,L E15F 4C LD C,H E160 0600 LD B,00 E162 2100EC LD HL,FATBF E165 CD2770 CALL SCTWR E168 C9 RET ; E169 7D FATRD2:LD A,L E16A 4C LD C,H E16B 0600 LD B,00 E16D 2100EC LD HL,FATBF E170 CD2470 CALL SCTRD E173 C9 RET ; ;END BFADRS =E9FE CLSTNOTOP =E0E6 DIRADRS =E9F8 DIRADRSNOW =E9F6 DIRBF =EE00 DIRRD =7033 DIRWR =E13C DSET =E072 FATADRS =E9FC FATADRSNOW =E9FA FATBF =EC00 FATMAKE =E085 FATMAKE2 =E087 FATMAKE3 =E0A8 FATRD2 =E169 FATSIZE =E9D8 FATWR =E14A NMBFWK =E9E0 NMSRC =E0E8 NMSRC0 =E0F7 NMSRC1 =E102 NMSRC12 =E114 NMSRC5 =E122 NMSRC51 =E129 NMSRC6 =E139 REENT =1033 RWNMSRCMK =E9EC SCTRD =7024 SCTWR =7027 SDINIT =703C VFDNAME =E0BA VFSET =E000 VFSET0 =E01F VFSET01 =E02B VFSET012 =E031 VFSET02 =E040 ZDIRMK =E9D7 |
そしてこちらが、マシン語プログラムです。
VFMAKE.BBB
上のリンクをクリックしてVFMAKE.BBBをND80Z3.5(ND80ZV、ND8080、MYCPU80)の実行プログラムのあるフォルダにコピーしてください。
ウイルスチェッカーなどが常駐しているとダウンロードを拒否されてしまうかもしれませんから拡張子をBBBに変えてあります。
ダウンロード(コピー)後は拡張子をBINに変えてください。
実行の方法については前回、[総合第88回]を参考にしてください(下記の通りに操作するだけです)。
ZB3BASICモードのときに、
/LD VFMAKE.BIN,E000[Enter]
JP E000[Enter]
を実行します。
その後
DIR[Enter]
で、A.VFD〜D.VFDが表示されれば正しく実行できています。
VFMAKE.BINはFORMATの実行後ならばどのタイミングでも実行できます。
また繰り返し実行してもファイルに影響はありません。
●VFCLR.BIN(修正版)のダウンロード
VFMAKE.BINを実行すれば、VFCLR.BINの出番はありませんから、もう使うことはないと思いますが、[第73回]でアップロードしたVFCLR.BINにまずいところがみつかりましたので、念のために修正版をアップロードしておきます。
下が修正版のソースプログラムリストです。
;;; VF clear program ;for nd80z3/nd8080 ; ;17/5/12 5/15 5/18 6/18 ; ORG $E000 ; REENT=$1033 ; FATSIZE=$E9D8 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 |
変更したのはFATSIZEのアドレスのみです。
新しくお送りしたROMではこのアドレスに変更する必要があります。
下はアセンブルリストです。
2017/6/18 22:16 vfclr1c.txt END=E06C ;;; VF clear program ;for nd80z3/nd8080 ; ;17/5/12 5/15 5/18 6/18 ; ORG $E000 ; REENT=$1033 ; FATSIZE=$E9D8 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 2AD8E9 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 =E9D8 FATWR =E043 REENT =1033 SCTRD =7024 SCTWR =7027 SDINIT =703C VFCOPY =E000 |
そしてこちらが、マシン語プログラムです。
VFCLR1C.BBB
上のリンクをクリックしてVFCLR1C.BBBをND80Z3.5(ND80ZV、ND8080、MYCPU80)の実行プログラムのあるフォルダにコピーしてください。
ウイルスチェッカーなどが常駐しているとダウンロードを拒否されてしまうかもしれませんから拡張子をBBBに変えてあります。
ダウンロード(コピー)後は拡張子をBINに変えてください。
旧VFCLR.BINは削除した上で、VFCLR1C.BINをVFCLR.BINに名前変更していただくほうがよいと思います。
CRT/VGAIF+KEYIF+SDCARDIFボードの製作[総合第89回]
2017.6.18upload
前へ
次へ
ホームページトップへ戻る