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

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

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