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

新製品の紹介(プチ連載です)
27C256WRITER組立キット

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
たまにはちょいと息抜きで小品も作ってみたいものです。
簡単にチョイチョイと…。
でも、なかなかそうは簡単にはいかなくて、いつものごとく回を重ねてしまうことになるのかも…。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜


[第21回]


●MYCPU80でも実行してみました

前回はND80ZV(ND80Z3.5)で/W256 SコマンドとJP@コマンドを使った、RAM上でのシステムプログラムの動作テストについて説明をしました。
その機能はMYCPU80でも全く同じように使うことができます。
ただしMYCPU80は標準ではTK80モニタしか搭載していないので、ZB3BASICの機能であるJPコマンドを使うことはできません。
MYCPU80についてはMYCPU80用ZB3BASIC+ZB3DOS(CP/M互換DOS)が必要になります。

●MYCPU80(ZB3DOS)システムROMメモリマップ

MYCPU80用ZB3BASIC+ZB3DOSシステムROMのメモリマップです(2016.2.27現在)。



●DMコマンドを書き換えてみる

前回と同じようにして、DMコマンドの機能を一部書き換えてみます。
DMコマンドプログラムはMENTRYプログラムの中にあります。
下はMENTRY4Cのアセンブルリストの先頭部分です。
DMへのジャンプはアドレス181Eにあります。
前回のND80ZV(ND80Z3.5)用のZENTRYプログラムのリストと基本的には同じですが、こちらは8080ニーモニックで記述しています。

2016/2/18  22:16  mentry4c.txt
END=1CFE
              ;;; ENTRY FOR NEW BASIC 03/08/11 8/13 12/5 04/4/25
              ;;; 05/08/24
              ;;;entry for nd80z3
              ;;;10/6/18 6/19 6/20 6/21 6/22 6/23 6/27 6/28 6/29
              ;7/1 7/2 7/3 7/23 8/6
              ;9/14
              ;
              ;entry for MYCPU80
              ;14/6/13 from zentry1x to mentry1x=mentry2a
              ;6/23 for debug $1>$9,$2>$A,$5>$D
              ;7/4 7/8 br,regdp
              ;7/9 for test,echo
              ;7/10
              ;7/15 $9>$1,$A>$2,$D>$5
              ;7/17 8/28 11/26 11/27
              ;from mentry3f+zentry2h 14.12.27
              ;16/2/18
              ;
              ORG $1800
              ;;;
              ;
              SOUT_M=$027C
              ;
              PRT0=$1057
              ;;;
              ADISP=$1015
              DEDSP=$1018
              CRLF=$101B
              SPJMP=$1024
              HDCMP=$1027
              WHTDP=$1030
              DECIN=$1036
              SPCDP=$1039
              ASHX1=$103F
              ASHX2=$1042
              ASHX4=$1045
              HXDP2=$104B
              HXDP4=$104E
              ADRD=$1051
              BREAK=$1054
              DECDP=$105D
              BITDP=$1066
                ATMKCK=$106C;*********14.12.26
              LSRC2=$1075
              LSRC0=$1078
              CRLF2=$107B
              ;SOUT_M=$10AB
              SIN=$10AE
                SBCHLDE=$10B4
                SIN_NODTRT=$10BD
              ;
              ;;;
              CMDTP=$16DF
              RGTBL=$1FB8
              ;;;
              CNVT=$56BF
              CNVTS=$56C2
              NEWSB=$56CE
              ;;;
              RUN=$2000
              RUN3=$2003
              ERRDP=$200F
              ;
              HELP=$5686
              BSSETSB=$56AD
              HELPSB=$56B6
              ;;
                RTRAM=$E239;***********14.12.26
                RAMWR=$E23F;
                RAMRD=$E242;
                RAMJP=$E245;
              ;
              VTOP=$DFFF
              LIMIT=$DFFF
              ;
              STCWK=$ED00
              ;
              ;;;
              KEYBF=$F000
              TXTS=$F052
              CADRS=$F054
              SFTCK=$F056
              TXTE=$F063
              PRTR=$F065
              TXTE2=$F066
              VEND=$F06A
              MODE=$F070
              DRCTE=$F078
              LPSW=$F079
              KETA=$F07C
              BRKAD=$F080
              BRKBF=$F082
              BRKCK=$F083
              HLBF2=$F084
              FLG1=$F08A;$F092
              ACC1=$F08B;$F093
                OUTWK=$F08C;HLBF1=$F08C
                INWK=$F08F
              IXH=$F097
              IREG=$F098
              SPBF=$F099
              PCL=$F09B
              PCH=$F09C
              NMEND=$F0B6
              DRCTS=$F0CF
              LCDMK=$F0D9
              INTMS=$F0DA
              INTCK=$F0DB
              TRSW=$F0DC
              BSBRKAD=$F0E9
              BSBRKA2=$F0ED
              WRITEP1=$F0FA
              WRITEP2=$F0FC
              ;;;
              ;;;
              SDATA=$F186
              ;;;
              ATCK=$F1A0
              DFLSW=$F1A1
              BFNO=$F1A5
              LNO=$F1AA
              ;
              TXBF=$F200
                RAMCK=$F2D1;*********14.12.26
              MODE2=$F2F7
              TXTS2=$F2FC
              TXBFC=$F2FE
              ;
              STC=$F500
              SPTOP=$F800
              ;
              ATD=$FEE0
              ATLN=$FEE2
              ATRNMK=$FEE4
              EIMK=$FEE6
              ;;;
              ;
              RST7JC=$FFCC
              RST7JA=$FFCD
              ;
              ;;;
1800 C35418   JMP START
1803 C3A318   JMP ENTRY
1806 C35219   JMP SDTIN
1809 C31510   JMP ADISP
180C C3AE10   JMP SIN
180F C38119   JMP ASOUT
1812 C31D19   JMP LNSRC
1815 C3F818   JMP ENT4
1818 C39119   JMP AUTO
181B C3E319   JMP MVDBI
181E C3FD19   JMP DM
1821 C3761A   JMP CM
1824 C3EE1B   JMP BP
1827 C3BA1B   JMP RT
182A C3191B   JMP IN
182D C3EB1A   JMP OUT
1830 C3C31C   JMP LCDOT
1833 C3C51C   JMP LINIT
1836 C3C61C   JMP JPIN
1839 C3C41C   JMP LCDINSB
183C C3D81C   JMP RRCOPYSB
183F C33E1B   JMP RGDSP
1842 C3AE10   JMP SIN;   from INPUT$
1845 C3BD10   JMP SIN_NODTRT;  from INKEY$,INPUT$
1848 C3951C   JMP LD
184B C3AC1C   JMP SV
184E C3151A   JMP DMSB
1851 C37A1B     JMP BROUT1;***********14.12.26
              ;;;
1854 3EEF     START:MVI A,EF
1856 D398       OUT 98;ND80Z3 DMOFF
1858 AF       XRA A


下はDMプログラムの先頭の部分です。

              ;
19FD CD6C10   DM:CALL ATMKCK;*********14.12.26  
1A00 CD5110   CALL ADRD
1A03 CD151A   DM1:CALL DMSB
1A06 CD5410   CALL BREAK
1A09 CD2710   CALL HDCMP
1A0C CA031A   JZ DM1
1A0F DA031A   JC DM1
1A12 C3A318   JMP ENTRY
              ;
1A15 E5       DMSB:PUSH H
1A16 E5       PUSH H


下は同じDMプログラム(MENTRY4Cプログラムの一部分)のソースプログラムです。

DM:CALL ATMKCK;*********14.12.26        
CALL ADRD
DM1:CALL DMSB
CALL BREAK
CALL HDCMP
JZ DM1
JC DM1
JMP ENTRY
;
DMSB:PUSH H
PUSH H
CALL HXDP4
POP H
CALL SPCDP
MVI B,08
CALL DM2SB1
MVI A,2D
CALL ADISP
CALL DM2SB
MVI B,07
CALL DM2SB1
POP H
CALL SPCDP
CALL SPCDP
MVI B,10
DM3:CALL MEMRD;******14.12.26
CALL DM4
INX H
        DCR B;DJNZ *DM3
        JNZ DM3
JMP CRLF
;
DM4:CPI 20
JC DM5
CPI 80
JC ADSPJ
CPI A0
JC DM5
CPI E0
JC ADSPJ
DM5:MVI A,2E
ADSPJ:JMP ADISP
;
DM2SB1:CALL SPCDP
CALL DM2SB
        DCR B;DJNZ *DM22
        JNZ DM2SB1
        RET
DM2SB:PUSH H
        CALL MEMRD;*******14.12.26
        MOV H,A;*********14.12.26
CALL HXDP2
POP H
INX H
RET


その一部分(DM4:以下の部分)を下のように書き換えました。

DM4:CPI 20
JC DM5
JMP ADISP
DM5:MVI A,2E
ADSPJ:JMP ADISP


この作業も前回と同じです。
もとのプログラムでは、16進数ダンプの右側に表示されるASCII文字のところで、00〜1F、80〜9F、E0〜FFはピリオド(”.”、ASCIIコード2E)に置き換えて表示しているところを、00〜1F以外はそのままASCII文字とみなして表示するように変更しました。

そのように変更したあと、MENTRYWK.TXTというファイル名で保存し、それをASM80でアセンブルしました。



画面には表示されませんが、アセンブル作業がエラーなく終了すると、マシン語のバイナリファイルMENTRYWK.BINが作成されます。
このあと下の作業で書き換え後のDM4:の中身の確認をしますから、その部分のアセンブルリストを示します。

1A47 FE20     DM4:CPI 20
1A49 DA4F1A   JC DM5
1A4C C31510   JMP ADISP
1A4F 3E2E     DM5:MVI A,2E
1A51 C31510   ADSPJ:JMP ADISP


前回は先にROM上で普通のDMコマンドを実行して、どのように表示されるかを確認しましたが今回は手順が逆になってしまいました。
最初に/W256 Sを実行して、そのあと/LD MENTRYWK.BIN,1800を実行してから、DM 1F00,1F3Fを実行しました。
手順は逆になってしまいましたが、いずれのコマンドもROM上で実行していますから、前回と同じ結果になります。
/W256 Sの実行によってシステムROMの内容が「裏RAM」にコピーされました。
/LDコマンドでさきほど作成したMENTRYWK.BINを「裏RAM」にロードしてMENTRYプログラムを上書きしました。
DMコマンドを実行してASCII文字の表示を確認しました。
画面右側のASCII文字表示のところで、上で説明した範囲のコードが”.”に置き換えられています。



前回と同様念のために、/LDコマンドによってDMプログラムが上書きされたかどうかをDM@コマンドで確認してみました。
さきほどのアセンブルリストのDM4:のところの通りに、アドレス1A4C〜が書き換えられていることが確認できました。

そこまで確認したあと、JP@1033[Enter]を実行して「裏RAM」に行って、DMコマンドを実行しました。
画面右側のASCII文字表示が最初に実行したときと一部異なっていることがわかります。

●MYCPU80もWindows10に接続できました

長野県のN様からメールをいただきました。
Windows10 HOMEおよびWindows10 ProでMYCPU80のZB3DOS(CP/M互換DOS)が動きました、とのことです。
N様。
前回のND80ZVをWindows10に接続して正常に動作しましたとのご連絡に続いて今回のMYCPU80の接続のご連絡有難うございました。
ご協力に感謝申し上げます。
今後ともご支援ご協力をお願いいたします。

27C256WRITER組立キット[第21回]
2016.2.28upload

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