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

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

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


[第14回]


●27C256WRITERプログラム

この週末は27C256WRITERプログラムをND80Z3.5(ND80ZV)に組み込むための仕上げの作業をしていました。
テスト用の27C256WRITERプログラムはもう1ヶ月以上も前に作成済みで、動作テストも完了していたのですが、それを実用的な形に組み上げるのにはかなり手間がかかります。
本日になってやっと大体のところはできたのですが、まだちょっと気になるところがあって、引き続きテスト中です。

下はテスト用に作成した27C256WRITERの書き込みプログラムです。
現在最終的に組み上げてテスト中のプログラムはかなりこれにいろいろ機能を追加したものになっていますが、下のプログラムはその原型ともいうべきプログラムです。
2016/1/2  18:8  ndwr2c.txt
END=C22D
              ;;;; ROM WRITER FOR ND80Z3
              ;;; from ZBWRS 04/4/25
              ;15/9/25 9/30 10/3 10/16
              ;11/19
              ;16/1/2
              ;
                ORG $C000;for test
              ;
                ADISP=$1015
                DEDP=$1018
                CRLF=$101B
                SPJMP=$1024
                REENT=$1033
                SPDP=$1039
                HXDP2=$104B
                HXDP4=$104E
                ADRD=$1051
                CRLF2=$107B
              ;
                IXWK=$F0A9
                IYWK=$F0AE
                CHCKSM=$F0B1
                LOWSPDMK=$F0B3;HLWKL
              ;
C000 C362C0     JP W256
C003 C35DC0     JP W256L
              ;
C006 010080   R256:LD BC,$8000;32KB
C009 210000     LD HL,$0000
                    ;LD IX,$0000;for checksum
C00C 22B1F0     LD (CHCKSM),HL
C00F 51             LD D,C;for checksum
C010 3E82       LD A,82;PA out,PB in,PC out
C012 D383       OUT (83),A
C014 3E0F       LD A,0F
C016 D383       OUT (83),A
C018 3D         DEC A
C019 D383       OUT (83),A
C01B 3EFF       LD A,FF
C01D D39C       OUT (9C),A;ram select
C01F 7C       R256_2:LD A,H
C020 CD38C0         CALL RROMSB
C023 C21FC0         JP NZ,R256_2
C026 AF       R256_3:XOR A
C027 D39C       OUT (9C),A;rom select
              ; PUSH IX
              ;      POP HL
C029 2AB1F0     LD HL,(CHCKSM)
C02C CD1B10         CALL CRLF
C02F CD4E10         CALL HXDP4
C032 CD1B10         CALL CRLF
C035 C33310         JP REENT
              ;
C038 D380     RROMSB:OUT (80),A;High address set
C03A 3E01       LD A,01;PC0=1
C03C D383       OUT (83),A
C03E 3D         DEC A
C03F D383       OUT (83),A
C041 7D             LD A,L;low address
C042 D380           OUT (80),A
C044 3E0D       LD A,0D;PC6=1
C046 D383       OUT (83),A
C048 3D         DEC A
C049 D383       OUT (83),A
C04B DB81           IN A,(81)
C04D 77             LD (HL),A
C04E 5F             LD E,A
              ;      ADD IX,DE;cecksum
C04F E5         PUSH HL
C050 2AB1F0     LD HL,(CHCKSM)
C053 19         ADD HL,DE
C054 22B1F0     LD (CHCKSM),HL
C057 E1         POP HL
C058 23             INC HL
C059 0B             DEC BC
C05A 78             LD A,B
C05B B1             OR C
C05C C9             RET
              ;
C05D 3EFF     W256L:LD A,FF
C05F C363C0     JP W256_01
C062 AF       W256:XOR A
C063 32B3F0   W256_01:LD (LOWSPDMK),A
C066 CD2410     CALL SPJMP
C069 FE0D           CP 0D
C06B C277C0         JP NZ,W256_02
C06E 210000         LD HL,$0000
C071 11FF7F         LD DE,$7FFF
C074 C380C0         JP W2563
C077 FE2C     W256_02:CP 2C;,
C079 C27DC0         JP NZ,W2562
C07C 13             INC DE
C07D CD5110   W2562:CALL ADRD
C080 AF       W2563:XOR A
C081 EB             EX DE,HL      
C082 ED52           SBC HL,DE
C084 23             INC HL
C085 44             LD B,H
C086 4D             LD C,L
C087 22AEF0     LD (IYWK),HL
C08A EB             EX DE,HL
              ;      PUSH HL
              ;      POP IX
C08B 22A9F0     LD (IXWK),HL
              ;      PUSH BC
              ;      POP IY
                    ;
C08E 3E80       LD A,80;PA out,PB out,PC out
C090 D383       OUT (83),A
C092 3E1E       LD A,1E;VPP=12.5V,VCC=6V,OE=CE=H,C7,C4,C3,C2,C1=H
C094 D383       OUT (83),A
C096 3E0F       LD A,0F;pc7=H
C098 D383       OUT (83),A
C09A 3D         DEC A;pc7=L
C09B D383       OUT (83),A
C09D 3EFF       LD A,FF
C09F D39C       OUT (9C),A;*** ram select ***
C0A1 7C       W256_1:LD A,H
C0A2 D380           OUT (80),A;High address set
C0A4 3E01       LD A,01;PC0=1
C0A6 D383       OUT (83),A
C0A8 3D         DEC A
C0A9 D383       OUT (83),A
C0AB 7D         LD A,L;low address
C0AC D380           OUT (80),A
C0AE 3E0D       LD A,0D
C0B0 D383       OUT (83),A
C0B2 3D         DEC A
C0B3 D383       OUT (83),A
C0B5 1E00           LD E,00
C0B7 1C       W256_2:INC E
C0B8 7E             LD A,(HL)
C0B9 FEFF       CP FF
C0BB CA01C1     JP Z,W256G2
C0BE D381           OUT (81),A
C0C0 1601       LD D,01
C0C2 CD69C1     CALL WPULS
C0C5 3E82           LD A,82;PB IN
C0C7 D383           OUT (83),A
              ; LD A,L;low address
              ; OUT (80),A
C0C9 3E1C           LD A,1C;OE=L,CE=H
C0CB D382           OUT (82),A
C0CD 3E0F       LD A,0F;pc7=H
C0CF D383       OUT (83),A
C0D1 3D         DEC A;pc7=L
C0D2 D383       OUT (83),A
C0D4 00             NOP
C0D5 00             NOP
C0D6 DB81           IN A,(81)
C0D8 F5             PUSH AF
C0D9 3E80           LD A,80;PB OUT
C0DB D383           OUT (83),A
C0DD 3E1E           LD A,1E;OE,CE=H
C0DF D382           OUT (82),A
C0E1 3E0F       LD A,0F;pc7=H
C0E3 D383       OUT (83),A
C0E5 3D         DEC A;pc7=L
C0E6 D383       OUT (83),A
C0E8 F1             POP AF
C0E9 BE             CP (HL)
C0EA CAF7C0         JP Z,W256G
C0ED 57             LD D,A
C0EE 7B             LD A,E
C0EF FE19           CP 19;=25
C0F1 C2B7C0     JP NZ,W256_2
C0F4 C361C1         JP WROMVF_ER
              W256G:;LD A,L;low address
              ;      OUT (80),A
C0F7 7E             LD A,(HL)
C0F8 D381           OUT (81),A
C0FA 7B         LD A,E
C0FB 87             ADD A,A;*2
C0FC 83             ADD A,E;*3
C0FD 57             LD D,A
C0FE CD69C1     CALL WPULS
C101 23       W256G2:INC HL
C102 7D             LD A,L
C103 B7             OR A
C104 C213C1         JP NZ,W256G3
C107 AF         XOR A
C108 D39C       OUT (9C),A;*** rom select ***
C10A 3E2A           LD A,2A;*
C10C CD1510         CALL ADISP
C10F 3EFF       LD A,FF
C111 D39C       OUT (9C),A;*** ram select ***
C113 0B       W256G3:DEC BC
C114 78             LD A,B
C115 B1             OR C
C116 C2A1C0         JP NZ,W256_1
              ;VERIFY
C119 AF         XOR A
C11A D39C       OUT (9C),A;*** rom select ***
C11C CD1B10         CALL CRLF
C11F 111CC2         LD DE,VFT
C122 AF             XOR A
C123 CD1810         CALL DEDP
              ;      LD DE,$00FF
C126 3E82       LD A,82;PB IN
C128 D383           OUT (83),A
C12A 3E06           LD A,06;OE=H,CE=H
C12C D382           OUT (82),A
C12E 3E0F       LD A,0F;pc7=H
C130 D383       OUT (83),A
C132 3D         DEC A;pc7=L
C133 D383       OUT (83),A
C135 CDF8C1         CALL TM1
C138 3E00           LD A,00;OE=0,CE=0
C13A D382           OUT (82),A
C13C 3E0F       LD A,0F;pc7=H
C13E D383       OUT (83),A
C140 3D         DEC A;pc7=L
C141 D383       OUT (83),A
              ;      PUSH IX
              ;      POP HL
              ;      PUSH IY
              ;      POP BC
              ;      LD IX,$0000
C143 210000     LD HL,$0000
C146 22B1F0     LD (CHCKSM),HL
C149 2AAEF0     LD HL,(IYWK)
C14C 44         LD B,H
C14D 4D         LD C,L
C14E 2AA9F0     LD HL,(IXWK)
C151 1600           LD D,00
C153 3EFF       LD A,FF
C155 D39C       OUT (9C),A;*** ram select ***
C157 7C       WROMVF2:LD A,H
C158 CD83C1         CALL WROMVFSB
C15B C257C1         JP NZ,WROMVF2
C15E C326C0         JP R256_3
              ;
C161 7A       WROMVF_ER:LD A,D
C162 5E       WROMVF_ER2:LD E,(HL)
C163 CDC0C1     CALL WERRSB
C166 C33310         JP REENT
              ;
C169 3E1A     WPULS:LD A,1A;OE=H,CE=L
C16B D382           OUT (82),A
C16D 3E0F       LD A,0F;pc7=H
C16F D383       OUT (83),A
C171 3D         DEC A;pc7=L
C172 D383       OUT (83),A
C174 CDF1C1         CALL TM
C177 3E1E           LD A,1E;OE,CE=H
C179 D382           OUT (82),A
C17B 3E0F       LD A,0F;pc7=H
C17D D383       OUT (83),A
C17F 3D         DEC A;pc7=L
C180 D383       OUT (83),A
C182 C9         RET
              ;
C183 D380     WROMVFSB:OUT (80),A;High address set
C185 3E01       LD A,01;PC0=1
C187 D383       OUT (83),A
C189 3D         DEC A
C18A D383       OUT (83),A
C18C 7D             LD A,L;low address
C18D D380           OUT (80),A
C18F 3E0D       LD A,0D
C191 D383       OUT (83),A
C193 3D         DEC A
C194 D383       OUT (83),A
              ;      PUSH HL
              ;      POP HL
C196 DB81           IN A,(81)
C198 BE             CP (HL)
C199 CAA0C1     JP Z,WROMVFSB1
C19C C1         POP BC;dummy
C19D C362C1         JP WROMVF_ER2
C1A0 5F       WROMVFSB1:LD E,A
              ;      ADD IX,DE
C1A1 E5         PUSH HL
C1A2 2AB1F0     LD HL,(CHCKSM)
C1A5 19         ADD HL,DE
C1A6 22B1F0     LD (CHCKSM),HL
C1A9 E1         POP HL
C1AA 23             INC HL
C1AB 7D             LD A,L
C1AC B7             OR A
C1AD C2BCC1         JP NZ,WROMVFSB2
C1B0 AF         XOR A
C1B1 D39C       OUT (9C),A;*** rom select ***
C1B3 3E2A           LD A,2A;*
C1B5 CD1510         CALL ADISP
C1B8 3EFF       LD A,FF
C1BA D39C       OUT (9C),A;*** ram select ***
C1BC 0B       WROMVFSB2:DEC BC
C1BD 78             LD A,B
C1BE B1             OR C
C1BF C9             RET
              ;
C1C0 F5       WERRSB:PUSH AF
C1C1 3E06       LD A,06
C1C3 D382           OUT (82),A
C1C5 3E0F       LD A,0F;pc7=H
C1C7 D383       OUT (83),A
C1C9 3D         DEC A;pc7=L
C1CA D383       OUT (83),A
C1CC AF         XOR A
C1CD D39C       OUT (9C),A;rom select
C1CF CD7B10         CALL CRLF2
C1D2 CD4E10         CALL HXDP4
C1D5 CD3910         CALL SPDP
C1D8 63             LD H,E
C1D9 CD4B10         CALL HXDP2
C1DC 3E2D           LD A,2D
C1DE CD1510         CALL ADISP
C1E1 F1             POP AF
C1E2 67             LD H,A
C1E3 CD4B10         CALL HXDP2
C1E6 CD1B10         CALL CRLF
C1E9 1116C2         LD DE,ERRT
C1EC AF             XOR A
C1ED CD1810         CALL DEDP
C1F0 C9             RET
              ;
C1F1 3AB3F0   TM:LD A,(LOWSPDMK)
C1F4 B7         OR A
C1F5 CA0DC2     JP Z,TM01
              ;1MS TIMER
C1F8 C5       TM1:PUSH BC
C1F9 0605     LD B,05
C1FB CD04C2   TM11:CALL TM02
C1FE 05       DEC B
C1FF C2FBC1   JP NZ,TM11
C202 C1       POP BC
C203 C9       RET
              ;0.2ms TIMER
C204 C5       TM02:PUSH BC
C205 0E55     LD C,55;=85
C207 0D       TM022:DEC C;4
C208 C207C2   JP NZ,TM022;10,,,14/6*85=198us
C20B C1       POP BC
C20C C9       RET
              ;0.1ms TIMER
C20D C5       TM01:PUSH BC
C20E 0E2B     LD C,2B;=43
C210 0D       TM012:DEC C;4
C211 C210C2   JP NZ,TM012;10,,,14/6*43=100us
C214 C1       POP BC
C215 C9       RET
              ;
C216 45       ERRT:DB 45;E
C217 52       DB 52;R
C218 52       DB 52;R
C219 2C       DB 2C;,
C21A 57       DB 57;W
C21B 0D       DB 0D
              ;
C21C 56455249 VFT:"VERI"
C220 4659     "FY"
C222 0D       DB 0D
              ;
C223 434F5059 COPYT:"COPY"
C227 0D       DB 0D
C228 44415441 DATAT:"DATA"
C22C 20       DB 20
C22D 00       DB 00
              ;
ADISP        =1015  ADRD         =1051  CHCKSM       =F0B1  
COPYT        =C223  CRLF         =101B  CRLF2        =107B  
DATAT        =C228  DEDP         =1018  ERRT         =C216  
HXDP2        =104B  HXDP4        =104E  IXWK         =F0A9  
IYWK         =F0AE  LOWSPDMK     =F0B3  R256         =C006  
R256_2       =C01F  R256_3       =C026  REENT        =1033  
RROMSB       =C038  SPDP         =1039  SPJMP        =1024  
TM           =C1F1  TM01         =C20D  TM012        =C210  
TM02         =C204  TM022        =C207  TM1          =C1F8  
TM11         =C1FB  VFT          =C21C  W256         =C062  
W2562        =C07D  W2563        =C080  W256G        =C0F7  
W256G2       =C101  W256G3       =C113  W256L        =C05D  
W256_01      =C063  W256_02      =C077  W256_1       =C0A1  
W256_2       =C0B7  WERRSB       =C1C0  WPULS        =C169  
WROMVF2      =C157  WROMVFSB     =C183  WROMVFSB1    =C1A0  
WROMVFSB2    =C1BC  WROMVF_ER    =C161  WROMVF_ER2   =C162  


27C256は32KBですから、書き込み用のバッファとして32KBのRAMエリアが必要です。
ND80Z3.5(ND80ZV)はROM32KB、RAM32KBを実装していますが、そのRAM32KBの一部はシステムのワークエリアとして使っていますから、それを書き込み用のバッファとして全部使ってしまうことはできません。
幸いND80Z3.5(ND80ZV)用のZB3DOS(CP/M互換DOS)システムではアドレス0000〜7FFFにRAMを増設して、バンク切換えによってシステムROMと使い分けています。
その増設RAMを27C256WRITERのバッファ用に使います。
ですので、27C256WRITERを使うためには、ZB3DOS(CP/M互換DOS)は必須ではありませんが、少なくともRAM32KBを増設する必要があります。

上のプログラムは27C256WRITERのテストソケットに実装した書き込み済みの27C256からバッファ用RAMエリアに読み込むR256プログラムとバッファRAMエリアの内容を27C256に書き込むW256プログラムに分かれています。
さらにW256プログラムは書き込みパルスが1msの古いタイプの27C256書き込み用と書き込みパルスが0.1msの新しいタイプの27C256書き込み用の2つを兼ねています。

説明の途中ですが時間がなくなってしまいました。
この続きは次回にいたします。

27C256WRITER組立キット[第14回]
2016.2.15upload

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