2017.6.18
前へ
次へ
ホームページトップへ戻る

マイコン独立大作戦
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

前へ
次へ
ホームページトップへ戻る