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