新製品の紹介(プチ連載です)
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
前へ
次へ
ホームページトップへ戻る