goo blog サービス終了のお知らせ 

日本橋電気街徘徊日誌

いいとしのおっさんがジャンク屋で買ったものをいじったり電子工作したりします。

OSC2019大阪に富士通マイクロを研究する会としてコミュニティ参加しました。

2019-01-27 23:23:47 | 電子工作

OSC2019大阪に富士通マイクロを研究する会としてコミュニティ参加しました。

周知が不十分なこともあり、これを目当てにきていただいた方はほぼいませんでしたが、

年配の方を中心に興味をしめしていただけたようでよかったと思います。

あと、なんとなくそんな気はしていたのですが、当時FM-7にFDDを追加するよりは

型落ちで安くなったディスク付き後継機種を購入することで移行してしまうことが

多かったことが聞き取りできました。(私も中古のFM-7で一年ほどカセットで

遊び倒したあたは型落ちの77AV2を購入しました)

ソフトはブルーフォックスと、開発系のイベントということでDOH-CとDRACO-Cをもっていきました。

 

FM-7を2台動かして、プリンタポート用SPIフラッシュメモリアダプタ・漢字ROM・FDCエミュレータの

動作展示を行いましたが、基本的にはソフトウェアのイベントのためなのかなんなのかさっぱりわからない

というような方も多かったような印象でした。

 

今後の予定としてはRS232カードやSCSIカードの作成、FM-7へのメモリマッピングレジスタを追加して

OS-9 L2を動かすとかありますが、基本的に長いスパンでの開発になってるので次のイベントで何が実現できるのか。

やはりイベントに出る以上は何かしら前回とは違うものを出したいものです。

 


FM-7のDISK BASICをSPIフラッシュメモリに持ち込むためのツール

2019-01-05 02:17:50 | 電子工作


DISK BASICは結局のところトラック1の4キロバイトが本体で
トラック0の一部がIPLとかローダになってます。
トラック2の先頭がFATでトラック2の残りとトラック3は
ディレクトリエントリとなっています。
以下はDISK BASICをカセットに保存するツールとなりますが
430行目の0Aを09に変更するとDISK BASICを書き込むツールとなります。
ところで1/26(土)にOSC2019大阪に参加を予定しています。
大阪でFM-7の稼動環境を用意できる方は当日声をかけていただけたら
いいことがあるかもしれません。


100 ' TR READ
110 GOSUB 340
120 GOSUB 170
130 SAVEM "CAS0:DB",&H2000,&H5FFF
140 END
150 '
160 '
170 AD=&H20
180 FOR CY=0 TO 1
190   FOR SI=0 TO 1
200     FOR SC=1 TO 16
210       POKE &H1F0A,AD
220       POKE &H1F0C,CY
230       POKE &H1F0D,SC
240       POKE &H1F0E,SI
250       POKE &H1F0F,1
260       PRINT TR;SI;SC
270       EXEC &H1F00
280       AD=AD+1
290     NEXT
300   NEXT
310 NEXT
320 RETURN
330 '
340 ADR=&H1F00
350 WHILE A$ <> "END"
360   READ A$
370   A=VAL("&H"+A$)
380   PRINT HEX$(A)
390   POKE ADR,A
400   ADR=ADR+1
410 WEND
420 RETURN
430 DATA 8E,1F,08,AD,FF,FB,FA,39,0A,00,20,00,END





FM-7のプリンタポート接続SPIシリアルフラッシュメモリ用ブートROMのソース

2019-01-03 23:46:41 | 電子工作

 

一つ前の記事のFM-7のプリンタポート接続SPIシリアルフラッシュメモリ用
ブートROMのソースです。アセンブラはedas20を使用しました。
テスト用のコードがいろいろついてますが、$2E00~$2FFFが
ブートROM部分です。ブートROMのプログラム領域480バイトを

ほぼ使い切っているため、機能追加はわりと厳しそうです。

 

 

;Copyright (C) 2018 pakapoo http://blog.goo.ne.jp/purupoo. All rights reserved.
; パラレルポート セツゾク ノ シリアル
; フラッシュメモリ カラ BOOT スル BOOT ROM
; EBIOS6.A ヲ カイゾウ
;
; $FD00 BIT6 OUT STRB SCLK
; $FD01 BIT2 OUT D2   SS1
; $FD01 BIT1 OUT D1   SS0
; $FD01 BIT0 OUT D0   MO
; $FD02 BIT3 IN  PE   MI
;
;
 ORG $3000
;
; TEST MAIN
;
 LDX #RCB
 JSR READ
 RTS
;
 ORG $3010
 LDX #RCB
 JSR WRITE
 RTS
;
 ORG $3020
 LDX #RCB
 JSR [$FBFA]
 ANDA #$3F
;
 RTS
;
;
 ORG $3030
 LDX #$3080
 LBSR UNSEL
 LDA #$9F
 LBSR SPI
 LDA SPIIN
 STA ,X+
 LDA #$00
 LBSR SPI
 LDA SPIIN
 STA ,X+
 LDA #$00
 LBSR SPI
 LDA SPIIN
 STA ,X+
 RTS
;
;
 ORG $3060
 LDX #$3100
 LBSR UNSEL
 LDA #$77
 LBSR SPI
 CLRA
 LBSR SPI
 LBSR SPI
 LBSR SPI
L30601:EQU *
 LBSR SPI
 LDB SPIIN
 STB ,X+
 CMPX #$3180
 BNE L30601
 RTS
;
;
 ORG $3090
 LDA #100
L30901:PSHS A
 JSR $3000
 PULS A
 DECA
 BNE L30901
 RTS
;
;
;
;
;
 ORG $30C0
;
RCB:FCB 10
RCBST:FCB 0
RCBADR:FDB $3100
RCBTRK:FCB 0
RCBSCT:FCB 1
RCBSID:FCB 0
RCBUNT:FCB 0
TSTST:FDB 0
;
;
 ORG $2E00
;
SPICD:EQU $FD08
SPIDT:EQU $FD09
PRT0:EQU $FD00
PRT1:EQU $FD01
PRT2:EQU $FD02
;
STRD:EQU $D7
FTOB:EQU $53
B1RD:EQU $D1
B1WT:EQU $84
BTOF:EQU $83
APRW:EQU $58
;
;
SCOFST:EQU 128
;
;
;
SS:EQU $FC29
SPIIN:EQU $FC2A
PNUM:EQU $FC2B
PNUML:EQU $FC2C
PAGE_H:EQU $FC2D
PAGE_L:EQU $FC2E
;
; BOOT
;
 BRA BOOTL1
 CLRA
 NOP
 RTS
 LBRA WRITE
 LBRA READ
BOOTL1:EQU *
 CLR PRT0
 DECA
 STA PRT1
 LDA #$FD
 TFR A,DP
 LDS #$FC7F
 LBSR UNSEL
 LDB <$FD04
 BITB #$02
 BNE BOOTL2
 LDX $FBFC
 BRA BOOTL3
BOOTL2:EQU *
;
;
 LDA #$31
 LBSR PUTC
 LEAX BTRCB,PCR
 LBSR READ
 LDA #$32
 LBSR PUTC
;
 LDX #$0100
 CLRA
 TFR A,DP
 JMP $0100
;      BRA  BOOTL3
;
;
BOOTL4:EQU *
 LDX $FBFE
;
;
BOOTL3:EQU *
 CLRA
;
COMINI:EQU *
 TFR A,DP
;      JMP  ,X
;
;
 LDU #$FD06
 BSR COMIN1
 LDU #$FD24
 LDA #$04
COMIN2:BSR COMIN1
 LEAU 2,U
 DECA
 BNE COMIN2
 JMP ,X
;
COMIN1:EQU *
 CLR 1,U
 CLR 1,U
 CLR 1,U
 LDB #$40
 STB 1,U
 RTS
;
;
;
;
BTRCB:FCB $0A,0,$01,$00,0,1,0,0
;
;
; DRIVE TABLE
DRVTBL:FCB 4,4,2,2
;
;
UNSEL:EQU *
 BSR CLKLO
 PSHS A
 LDA #$FF
 STA PRT1
 PULS A
 RTS
;
;
CLKHI:EQU *
 PSHS A
 LDA #$40
CLKHI1:STA PRT0
 PULS A
 BSR WAIT
 RTS
;
WAIT:EQU *
;       PSHS A
;       LDA  #1
;WAIT1: DECA
;       BNE  WAIT1
;       PULS A
 RTS
;
CLKLO:EQU *
 PSHS A
 CLRA
 BRA CLKHI1
;
;
SPIBIT:EQU *
 PSHS B
 LDB SS
 ROLA
 BCC SPIB1
 ORB #$01
SPIB1:EQU *
 STB PRT1
 BSR CLKHI
 PSHS A,B
 LDB SPIIN
 LDA PRT2
 RORA
 RORA
 RORA
 RORA
 ROLB
 STB SPIIN
 PULS A,B
 BSR CLKLO
 PULS B
 RTS
;
SPI:EQU *
 BSR SPIBIT
 BSR SPIBIT
 BSR SPIBIT
 BSR SPIBIT
 BSR SPIBIT
 BSR SPIBIT
 BSR SPIBIT
 BSR SPIBIT
 RTS
;
;
;
;
SPIWT:EQU *
 RTS
;
SSSEL:EQU *
 BSR UNSEL
 PSHS A,B
 LDA 7,X
 LEAY DRVTBL,PCR
 LEAY A,Y
 LDA ,Y
 STA SS
 PULS A,B
 RTS
;
;
RDYCHK:EQU *
 BSR SSSEL
 LDA #STRD
 BSR SPI
 CLRA
 BSR SPI
 CLRA
 BSR SPI
 LDA SPIIN
 LBSR UNSEL
 RTS
;
;
; 4 BYTE COMMAND
;
CMD4:EQU *
 BSR SSSEL
;
 LBSR SPI
;      
;
TST1:EQU *
 LDB 5,X
 DECB
 LDY #PNUM
 CLR 0,Y
 STB 1,Y
;
 LDB 6,X
 LDA #16
 MUL
 ADDD ,Y
 STD ,Y
;
 LDB 4,X
 LDA #32
 MUL
 ADDD ,Y
;
 ADDD #SCOFST
;
 PSHS A,B
 LDA 7,X
 CMPA #0
 BEQ CMDL1
 CMPA #2
 BEQ CMDL1
 PULS A,B
 ADDD #1280
 BRA CMDL2
CMDL1:EQU *
 PULS A,B
;
;
CMDL2:EQU *
 LSLB
 ROLA
;
 LSLB
 ROLA
;
 ANDA #$3F
;
 PSHS B
 STA PAGE_H
 LBSR SPI
 PULS A
 STA PAGE_L
 LBSR SPI
;
 CLRA
 LBSR SPI
;
;
 LBSR UNSEL
 RTS
;
;
;PNUM: FCB  0
;PNUML:FCB  0
;
;
CMD:EQU *
 LBSR SSSEL
;
 LBSR SPI
 CLRA
 LBSR SPI
 CLRA
 LBSR SPI
 CLRA
 LBSR SPI
;
 RTS
;
;
;
READ:EQU *
 LDA #FTOB
 BSR CMD4
READL2:LBSR RDYCHK
 CMPA #$AC
 BNE READL2
 LDA #B1RD
 BSR CMD
 CLRB
 LDY 2,X
READL1:EQU *
 CLRA
 LBSR SPI
 LDA SPIIN
 STA ,Y+
 DECB
 BNE READL1
 LBSR UNSEL
 CLRA
 RTS
;
;
WRITE:EQU *
 LDA #B1WT
 BSR CMD
 CLRB
 LDY 2,X
WTLP1:EQU *
 LDA ,Y+
 LBSR SPI
;
 DECB
 BNE WTLP1
;
 LBSR UNSEL
;
 LDA #BTOF
 LBSR CMD4
WTLP2:EQU *
 LBSR RDYCHK
 CMPA #$AC
 BNE WTLP2
;
 LDA #APRW
 LBSR CMD4
WTLP3:EQU *
 LBSR RDYCHK
 CMPA #$AC
 BNE WTLP3
;
 LBSR UNSEL
 CLRA
 RTS
ENDADR:EQU *
;
;
PUTC:EQU *
 PSHS A
 LEAX ,S
 LDD #1
 BSR PUTS
 PULS A
 RTS
;
;
PUTS:EQU *
 TFR X,Y
 LEAS -6,S
 LEAX ,S
 PSHS A,B
 LDA #20
 STA ,X
 CLR 1,X
 STY 2,X
 PULS A,B
 STD 4,X
 JSR $F17D
 LEAS 6,S
 RTS
;
 LDA #$31
 BSR PUTC
 RTS
;
;
;
;      INTERRUPT VECTOR
;
 ORG $2FF0
 FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
 FCB $FF,$FF,$FF,$FF,$FF,$FF,$FE,$00






SPIフラッシュメモリ用のBOOT ROMがそれなりに動くようになってきたので公開します。

2019-01-03 23:45:13 | 電子工作

夏にFM-7のプリンタポートにSPIフラッシュメモリを接続して、
そこから起動するブートROMを書いて、FM-7の環境を改善するような
記事を書きましたが、ハードウェア記事を書いてほぼ半年たちました。
夏にほぼ動いてたんですが、実際にROMを焼いて動かしてみると
電源オンでは動作せずに、いったんROM BASICを起動して、
ブートROMをディップスイッチで自作部分にきりかえてから
exec-512だと起動するといういやらしい状態で改善しないので
9月ぐらいには放り出した状態でした。
正月休みにまとまった時間をとれたので再度バグ取りに
チャレンジしたところ、根本的なところはよくわかりませんが
それらしく動作しだしたので公開します。
以下の512バイトをブートROMの空き部分の$600~$7FFに書き込んで
バンク3から電源オンでプリンタポートに接続したSPIフラッシュメモリ
(AT45DB161D専用です)から起動します。

000000 20 09 4f 12 39 16 01 74 16 01 4d 7f fd 00 4a b7
000010 fd 01 86 fd 1f 8b 10 ce fc 7f 17 00 55 d6 04 c5
000020 02 26 05 be fb fc 20 1d 86 31 17 01 7f 30 8d 00
000030 35 17 01 24 86 32 17 01 73 8e 01 00 4f 1f 8b 7e
000040 01 00 be fb fe 4f 1f 8b ce fd 06 8d 0e ce fd 24
000050 86 04 8d 07 33 42 4a 26 f9 6e 84 6f 41 6f 41 6f
000060 41 c6 40 e7 41 39 0a 00 01 00 00 01 00 00 04 04
000070 02 02 8d 17 34 02 86 ff b7 fd 01 35 02 39 34 02
000080 86 40 b7 fd 00 35 02 8d 01 39 39 34 02 4f 20 f2
000090 34 04 f6 fc 29 49 24 02 ca 01 f7 fd 01 8d df 34
0000a0 06 f6 fc 2a b6 fd 02 46 46 46 46 59 f7 fc 2a 35
0000b0 06 8d d8 35 04 39 8d d8 8d d6 8d d4 8d d2 8d d0
0000c0 8d ce 8d cc 8d ca 39 39 8d a8 34 06 a6 07 31 8d
0000d0 ff 9c 31 a6 a6 a4 b7 fc 29 35 06 39 8d ea 86 d7
0000e0 8d d4 4f 8d d1 4f 8d ce b6 fc 2a 17 ff 84 39 8d
0000f0 d7 17 ff c2 e6 05 5a 10 8e fc 2b 6f 20 e7 21 e6
000100 06 86 10 3d e3 a4 ed a4 e6 04 86 20 3d e3 a4 c3
000110 00 80 34 06 a6 07 81 00 27 0b 81 02 27 07 35 06
000120 c3 05 00 20 02 35 06 58 49 58 49 84 3f 34 04 b7
000130 fc 2d 17 ff 81 35 02 b7 fc 2e 17 ff 79 4f 17 ff
000140 75 17 ff 2e 39 17 ff 80 17 ff 6b 4f 17 ff 67 4f
000150 17 ff 63 4f 17 ff 5f 39 86 53 8d 93 17 ff 7d 81
000160 ac 26 f9 86 d1 8d de 5f 10 ae 02 4f 17 ff 47 b6
000170 fc 2a a7 a0 5a 26 f4 17 fe f8 4f 39 86 84 8d c5
000180 5f 10 ae 02 a6 a0 17 ff 2d 5a 26 f8 17 fe e3 86
000190 83 17 ff 5b 17 ff 45 81 ac 26 f9 86 58 17 ff 4f
0001a0 17 ff 39 81 ac 26 f9 17 fe c8 4f 39 34 02 30 e4
0001b0 cc 00 01 8d 03 35 02 39 1f 12 32 7a 30 e4 34 06
0001c0 86 14 a7 84 6f 01 10 af 02 35 06 ed 04 bd f1 7d
0001d0 32 66 39 86 31 8d d5 39 39 06 ed 06 bd f1 7d 32
0001e0 68 35 30 39 8e fe 00 1f 10 34 04 8d d1 35 02 8d
0001f0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff fe 00


その後どのようにして環境を構築していくかというと
稼働環境からDISK BASICをテープにセーブして、
SPIフラッシュメモリを接続したFM-7にロードして
書き込んでいくという手順になりますが、手順の詳細や
サポート用のツールについては次回以降の記事に
書きます。


FM-7本体だけある場合にいかに手間暇費用をかけずに楽しめるかを考えました。

2018-09-04 19:58:29 | 電子工作


いままでFM-7にFDCエミュレータボードや漢字ROMボードを
作りましたが、これはそれなりに手間暇費用がかかりますので
誰にでもできることではないとなと感じています。

そこで、以前ディスクイメージを作成して、現在エミュレータで
使用されている方を対象に手軽にDISK BASICを利用できるできる
方法を考えました。

いつもの私のDISK BASIC起動画面です。

 

filesできます。

 

いつもの

 

いつものホバーアタックです。

今回こんな基板を作成しました。
3.3Vを作るためのレギュレータ群と抵抗分圧用の抵抗6個と
前回使ったのと同じAT45DB161D(シリアルフラッシュメモリ)しか
載ってません。

裏側はこんな感じ。

 

基板はプリンタポートに挿して使います。
電源はどこからとってもいいんですが、
50ピン拡張ポートからとりました。

 

 

 回路図はこんな感じです。
これ以上簡単にシリアルフラッシュメモリは接続できないはず。
三端子レギュレータやパスコンは書いてませんが、パスコンは
AT45DB161Dに1つで大丈夫なようです。

プリンタポートに接続してFM-7本体側からソフトで全部やることに
したので遅いですが(1.2キロバイト/秒くらいでてます)、
DISK BASICが使えるので価値はあるんじゃないかと思います。

AT45DB161Dをドライブするソフトはどうするのかというと、
ブートROMのバンク3に置きます。

いちおうこれでブートROMを入手できればテープイメージをWAV化
することにより、カセット経由でDISK BASICとDISK BASICをAT45DB161Dに
書き込みソフトを転送して実機の環境を構築することが可能となります。

ブートROMはまだブートローダ部分の動きが怪しいので、次回以降公開します。

 


FM-7のFDCエミュカードのバグもとれてないのにまた拡張カードを作った件(6809側コード等)

2018-08-20 23:24:10 | 電子工作


拡張BIOSと漢字ROMの隙間に置くローダーです。
ここまでの情報で基板は作成できると思いますが、コメント等で
リクエストいただければ一式をメール等でお送りできます。



ebios6.a

;

;Copyright (C) 2018 pakapoo http://blog.goo.ne.jp/purupoo. All rights reserved.
;
ORG $3000
;
; TEST MAIN
;
 LDX #RCB
 JSR READ
 RTS
;
 ORG $3010
 LDX #RCB
 JSR WRITE
 RTS
;
 ORG $3020
 LDX #RCB
 JSR [$FBFA]
 RTS
;
 ORG $30C0
RCB:FCB 10
RCBST:FCB 0
RCBADR:FDB $3100
RCBTRK:FCB 0
RCBSCT:FCB 1
RCBSID:FCB 0
RCBUNT:FCB 0
TSTST:FDB 0
 ORG $3C00
;
SPICD:EQU $FD08
SPIDT:EQU $FD09
STRD:EQU $D7
FTOB:EQU $53
B1RD:EQU $D1
B1WT:EQU $84
BTOF:EQU $83
APRW:EQU $58
;
;
SCOFST:EQU 128
ORGBIO:EQU $F17D
;
; BIOS EXTEND
;
 PSHS CC
 ORCC #$50
 LEAX ENDADR,PCR
 STX EASAVE,PCR
;
 LEAX BIOS,PCR
 LDY $33
 STY $DF
;
BIOL1:LDA ,X+
 STA ,Y+
 CMPX EASAVE,PCR
 BNE BIOL1
;
 CLR ,Y+
 STY $33
;
 PULS CC
;
;      CLRA
;      JSR  $8F32
 RTS
;
EASAVE:FDB 0
;
BIOS:EQU *
 PSHS CC,A,B,X,Y
 LDA ,X
 CMPA #8
 BNE BIOSL1
 BSR REST
 BRA BIOSEX
BIOSL1:CMPA #9
 BNE BIOSL2
 LBSR WRITE
 BRA BIOSEX
BIOSL2:CMPA #10
 BNE BIOSL3
 LBSR READ
 BRA BIOSEX
BIOSL3:EQU *
 PULS CC,A,B,X,Y
 JMP ORGBIO
;
;
;
;
;
BIOSEX:EQU *
 PULS CC,A,B,X,Y
 CLR 1,X
 RTS
;
;
REST:EQU *
;      CLR  1,X
 RTS
;
;
; DRIVE TABLE
DRVTBL:FCB 1,1,2,2
;
;
SPIWT:EQU *
 TST SPICD
 BMI SPIWT
 RTS
;
SSSEL:EQU *
 PSHS A,B
 LDA 7,X
 LEAY DRVTBL,PCR
 LEAY A,Y
 LDA ,Y
 STA SPICD
 PULS A,B
 RTS
;
;
RDYCHK:EQU *
 BSR SSSEL
;
 LDA #STRD
 STA SPIDT
 BSR SPIWT
 CLR SPIDT
 BSR SPIWT
 LDA SPIDT
;
 CLR SPICD
 RTS
;
;
; 4 BYTE COMMAND
;
CMD4:EQU *
 BSR SSSEL
;
 STA SPIDT
 BSR SPIWT
;
TST1:EQU *
 LDB 5,X
 DECB
 LEAY PNUM,PCR
 CLR 0,Y
 STB 1,Y
;
 LDB 6,X
 LDA #16
 MUL
 ADDD ,Y
 STD ,Y
;
 LDB 4,X
 LDA #32
 MUL
 ADDD ,Y
;
 ADDD #SCOFST
 TST 7,X
 BEQ CMDL1
 ADDD #1280
CMDL1:EQU *
;
;
 ANDA #$3F
 LSLB
 ROLA
;
 LSLB
 ROLA
;
 STA SPIDT
 BSR SPIWT
 STB SPIDT
 BSR SPIWT
 CLR SPIDT
 BSR SPIWT
;
 CLR SPICD
 RTS
;
;
PNUM:FCB 0
PNUML:FCB 0
;
;
CMD:EQU *
 BSR SSSEL
;
 STA SPIDT
 BSR SPIWT
 CLR SPIDT
 BSR SPIWT
 CLR SPIDT
 LBSR SPIWT
 CLR SPIDT
 LBSR SPIWT
 RTS
;
;
;
READ:EQU *
 LDA #FTOB
 BSR CMD4
READL2:LBSR RDYCHK
 CMPA #$AC
 BNE READL2
 LDA #B1RD
 BSR CMD
 CLRB
 LDY 2,X
READL1:EQU *
 CLR SPIDT
 LBSR SPIWT
 LDA SPIDT
 STA ,Y+
 DECB
 BNE READL1
 CLR SPICD
 RTS
;
;
WRITE:EQU *
 LDA #B1WT
 BSR CMD
 CLRB
 LDY 2,X
WTLP1:EQU *
 LDA ,Y+
 STA SPIDT
 LBSR SPIWT
 DECB
 BNE WTLP1
;
 CLR SPICD
;
 LDA #BTOF
 LBSR CMD4
WTLP2:EQU *
 LBSR RDYCHK
 CMPA #$AC
 BNE WTLP2
;
 LDA #APRW
 LBSR CMD4
WTLP3:EQU *
 LBSR RDYCHK
 CMPA #$AC
 BNE WTLP3
;
 CLR SPICD
 RTS
ENDADR:EQU *









spirom.a
ORG $3000
 LDA #1
 STA $FD08
 LDA #$03
 BSR SPI
 CLRA
 BSR SPI
 BSR SPI
 BSR SPI
 LDX #$2000
LP1:BSR SPI
 LDA $FD09
 STA ,X+
 CMPX #$4000
 BNE LP1
 CLR $FD08
 JSR $2000
;RTS
;NOP
;NOP
SPI:STA $FD09
SPIWT:LDB $FD08
 BMI SPIWT
 RTS
;
;
  B $FD08
 BMI SPIWT
 RTS


FM-7のFDCエミュカードのバグもとれてないのにまた拡張カードを作った件(ツール)

2018-08-18 23:42:12 | 電子工作

SPIフラッシュにDISK BASICと拡張BIOSとそのブートコードを
書き込みツールとディスクイメージをSPIフラッシュに書き込む
ツールです。

ファイル名: spi_t4
2300行から実行するとSPIフラッシュにDISK BASICと
拡張BIOSのローダーを書き込みます。
また、途中テストコードが入ってます。

100 CLEAR 300,&H1FFF
110 DEFINT A-Z
130 'main
140 GOSUB 1660
980 'GOTO 10
990 END
1000 '
1010 PRINT HEX$(PEEK(&HFD09));":";
1020 RETURN
1030 '
1040 'status register read(D7h)
1050 POKE &HFD08,1
1060 POKE &HFD09,&HD7
1070 POKE &HFD09,0
1080 ST1=PEEK(&HFD09)
1082 POKE &HFD09,0
1084 ST2=PEEK(&HFD09)
1090 'PRINT HEX$(ST1);":";HEX$(ST2)
1100 POKE &HFD08,0
1110 RETURN
1120 '
1130 '
1140 '
1150 '
1160 '
1170 '4 byte command
1180 POKE &HFD08,1
1190 POKE &HFD09,OPCD
1200 POKE &HFD09,PH
1210 POKE &HFD09,PL
1220 POKE &HFD09,0
1230 POKE &HFD08,0
1240 RETURN
1250 '
1260 'buffer write 1
1270 POKE &HFD08,1
1280 POKE &HFD09,&H84
1290 POKE &HFD09,0
1300 POKE &HFD09,BH
1310 POKE &HFD09,BL
1320 'FOR I=255 TO 0 STEP -1
1330 FOR I=0 TO 255
1340 'POKE &HFD09,I
1350 POKE &HFD09,&H39
1360 NEXT
1370 POKE &HFD08,0
1380 RETURN
1390 '
1400 'buffer read 1(low freq)
1410 POKE &HFD08,1
1420 POKE &HFD09,&HD1
1430 POKE &HFD09,0
1440 POKE &HFD09,BH
1450 POKE &HFD09,BL
1460 FOR I=0 TO 255
1470   POKE &HFD09,0
1480   POKE &H2000+I,PEEK(&HFD09)
1490 NEXT
1500 POKE &HFD08,0
1510 RETURN
1520 '
1530 'page 0 fill
1540 OPCD=&H53:PH=0:PL=0:GOSUB 1160
1550 GOSUB 1250
1560 OPCD=&H83:PH=0:PL=0:GOSUB 1160
1570 OPCD=&H58:PH=0:PL=0:GOSUB 1160
1580 RETURN
1590 '
1600 'page 0 read
1610 OPCD=&H53:PH=0:PL=4:GOSUB 1160
1620 GOSUB 1390
1630 RETURN
1640 '
1650 'manufacturer and devicd id read
1660 POKE &HFD08,1
1670 POKE &HFD09,&H9F
1680 POKE &HFD09,0:GOSUB 1000
1690 POKE &HFD09,0:GOSUB 1000
1700 POKE &HFD09,0:GOSUB 1000
1710 'POKE &HFD09,0:GOSUB 1000
1720 'POKE &HFD09,0:GOSUB 1000
1730 POKE &HFD08,0
1740 RETURN
1750 '
1760 'continuous array read(low freq)
1770 POKE &HFD08,1
1780 POKE &HFD09,&H3
1790 POKE &HFD09,0
1800 POKE &HFD09,0
1810 POKE &HFD09,0
1820 FOR ADR=&H2000 TO &H23FF
1830   POKE &HFD09,0
1840   POKE ADR,PEEK(&HFD09)
1850 NEXT
1860 RETURN
1870 '
1880 'BIOS DREAD set
1890 RESTORE
1900 READ PO$:ADR=&H2000
1910 WHILE(PO$ <> "end")
1920   PO=VAL("&H"+PO$)
1930   POKE ADR,PO
1940   ADR=ADR+1
1950   READ PO$
1960 WEND
1970 RETURN
1980 DATA 8e,20,08,ad,ff,fb,fa,39,end
1990 '
2000 'BIOS DREAD CALL
2010 POKE &H2008,10
2020 POKE &H2009,0
2030 POKE &H200A,BADR
2040 POKE &H200B,0
2050 POKE &H200C,TR
2060 POKE &H200D,SC
2070 POKE &H200E,HD
2080 POKE &H200F,0
2090 EXEC &H2000
2100 RETURN
2110 '
2120 'BIOS DREAD test
2130 GOSUB 1870
2140 TR=0:SC=15:HD=0:BADR=&H21
2150 GOSUB 1990
2160 RETURN
2170 '
2180 'fdd tr0 tr1 to $2000-$3fff
2190 GOSUB 1870
2200 TR=0
2210 BADR=&H30
2220 FOR HD=0 TO 1
2230 FOR SC=1 TO 16
2240 POKE &H200A,BADR
2250 GOSUB 1990
2260 BADR=BADR+1
2270 NEXT
2280 NEXT
2290 RETURN
2300 '
2310 'basic tr0 to spi
2320 PRINT "tr 0 read before"
2330 GOSUB 2170
2340 PRINT "tr 0 read after"
2350 '
2360 POKE &H3000,&H39
2370 LOADM "1:spi_b1.m",&H1000
2380 LOADM "1:ebios6.m"
2390 DST=&H3F00
2400 FOR I=&HFDC0 TO &HFDF4
2410   POKE DST,PEEK(I)
2420 ' PRINT HEX$(I)
2430   DST=DST+1
2440 NEXT
2450 POKE &H3F23,&H2C
2460 'END
2470 '
2480 PADR=&H3000
2490 FOR PL=0 TO 60 STEP 4
2500   PRINT PL
2510   OPCD=&H53:PH=0:GOSUB 1160
2520 ' GOSUB 1120
2530 '
2540 'buffer write 1
2550   POKE &HFD08,1
2560   POKE &HFD09,&H84
2570   POKE &HFD09,0
2580   POKE &HFD09,0
2590   POKE &HFD09,0
2600   FOR I=0 TO 527
2610   POKE &HFD09,PEEK(PADR)
2620   PADR=PADR+1
2630   NEXT
2640   POKE &HFD08,0
2650   OPCD=&H83:PH=0:GOSUB 1160
2660   PRINT "R/B":GOSUB 1040:IF ST1<>&HAC THEN 2680
2670   OPCD=&H58:PH=0:GOSUB 1160
2680   PRINT "R/B":GOSUB 1040:IF ST1<>&HAC THEN 2680
2690   OPCD=&H60:PH=0:GOSUB 1160
2700   PRINT "R/B":GOSUB 1040:IF ST1<>&HAC THEN 2680
2710 NEXT

ファイル名: SCTTST2
ディスクイメージをフラッシュメモリに書き込みます。
ドライブ選択はRCBのドライブをあらかじめ書き換えてから
実行することにより行います。

1000 DEFINT A-Z
1010 FOR TRK=0 TO 39
1020   POKE &H30C4,TRK
1030   FOR SID=0 TO 1
1040     POKE &H30C6,SID
1050     FOR SCT=1 TO 16
1060       POKE &H30C5,SCT
1065       PRINT USING " trk=## sid=# sct=##";TRK;SID;SCT
1070       EXEC &H3020
1080       EXEC &H3010
1090     NEXT
1100   NEXT
1110 NEXT


あとは拡張BIOSのソースと漢字ROMの隙間に置く
DISK BASICをロードするコードのソースですが、
これはEDASで書いてるので変換に手間取ってます。
明日以降掲載します。


FM-7のFDCエミュカードのバグもとれてないのにまた拡張カードを作った件(基板仕様)

2018-08-18 11:26:00 | 電子工作

基板の仕様を書いていなかったので書きます。

$fd08 SPI送出状況/SPI選択
読み込んでビット7が1なら転送中です。
TSTしてBMIで転送待ちループに使います。
ビット1・ビット0はSPIのセレクト線を示します。
00 SS0=1 SS1=1 SS2=1(選択なし)
01 SS0=0 SS1=1 SS2=1(SS0が選択)
10 SS0=1 SS1=0 SS2=1(SS1が選択)
11 SS0=1 SS1=1 SS2=0(SS2が選択)

$fd09 SPIデータ
書き込むとSPIに転送しつつデータが読み込まれます。
$fd08のフラグを見つつ読み書きします。


$fd20 漢字ROMアドレス上位8ビット
$fd21 漢字ROMアドレス下位8ビット
$fd22 漢字ROMデータ左側8ビット
$fd23 漢字ROMデータ右側8ビット
FM-7ユーザーズマニュアルシステム仕様の
漢字ROMカードと同じ機能を持ちます。


$fdc0~$fdff
漢字ROMの非漢字と漢字の隙間$73c0~$73f0の値が現れます。
漢字ROMの$6000~$73ffは空いているようなので
SPIにシリアルフラッシュメモリをつながない場合でも
小さいプログラムをこの隙間に焼いて利用することも可能です。

以上となります。


FM-7のFDCエミュカードのバグもとれてないのにまた拡張カードを作った件(基板資料その2)

2018-08-17 22:39:56 | 電子工作


Quartus II Version 9.0 Build 235 06/17/2009 Service Pack 2 SJ Web Edition
CHIP  "fm7-kanji"  ASSIGNED TO AN: EPM3128ATC100-10

Pin Name/Usage  : Location  : Dir.   : I/O Standard  : Voltage : I/O Bank  : User Assignment
-------------------------------------------------------------------------------------------------------------
RESERVED    : 1     :    :  :     :       :                
RESERVED    : 2     :    :  :     :       :                
VCCIO       : 3     : power  :  : 3.3V    :       :                
TDI         : 4     : input  : 3.3-V LVTTL   :     :       : N              
RESERVED    : 5     :    :  :     :       :                
RESERVED    : 6     :    :  :     :       :                
RESERVED    : 7     :    :  :     :       :                
RESERVED    : 8     :    :  :     :       :                
RESERVED    : 9     :    :  :     :       :                
RESERVED    : 10    :    :  :     :       :                
GND         : 11    : gnd    :  :     :       :                
RESERVED    : 12    :    :  :     :       :                
RESERVED    : 13    :    :  :     :       :                
RESERVED    : 14    :    :  :     :       :                
TMS         : 15    : input  : 3.3-V LVTTL   :     :       : N              
RESERVED    : 16    :    :  :     :       :                
RESERVED    : 17    :    :  :     :       :                
VCCIO       : 18    : power  :  : 3.3V    :       :                
RESERVED    : 19    :    :  :     :       :                
RESERVED    : 20    :    :  :     :       :                
RESERVED    : 21    :    :  :     :       :                
RESERVED    : 22    :    :  :     :       :                
RESERVED    : 23    :    :  :     :       :                
RESERVED    : 24    :    :  :     :       :                
RESERVED    : 25    :    :  :     :       :                
GND         : 26    : gnd    :  :     :       :                
EE          : 27    : input  : 3.3-V LVTTL   :     :       : Y              
EQ          : 28    : input  : 3.3-V LVTTL   :     :       : Y              
EAB[7]      : 29    : input  : 3.3-V LVTTL   :     :       : Y              
EAB[6]      : 30    : input  : 3.3-V LVTTL   :     :       : Y              
EAB[5]      : 31    : input  : 3.3-V LVTTL   :     :       : Y              
EAB[4]      : 32    : input  : 3.3-V LVTTL   :     :       : Y              
GND         : 33    : gnd    :  :     :       :                
VCCIO       : 34    : power  :  : 3.3V    :       :                
EAB[3]      : 35    : input  : 3.3-V LVTTL   :     :       : Y              
EAB[2]      : 36    : input  : 3.3-V LVTTL   :     :       : Y              
EAB[1]      : 37    : input  : 3.3-V LVTTL   :     :       : Y              
GND         : 38    : gnd    :  :     :       :                
VCCINT      : 39    : power  :  : 3.3V    :       :                
EAB[0]      : 40    : input  : 3.3-V LVTTL   :     :       : Y              
EDB[7]      : 41    : bidir  : 3.3-V LVTTL   :     :       : Y              
OKnjAdr[10] : 42    : output : 3.3-V LVTTL   :     :       : Y              
GND         : 43    : gnd    :  :     :       :                
OKnjAdr[11] : 44    : output : 3.3-V LVTTL   :     :       : Y              
EDB[6]      : 45    : bidir  : 3.3-V LVTTL   :     :       : Y              
OKnjAdr[9]  : 46    : output : 3.3-V LVTTL   :     :       : Y              
EDB[5]      : 47    : bidir  : 3.3-V LVTTL   :     :       : Y              
OKnjAdr[8]  : 48    : output : 3.3-V LVTTL   :     :       : Y              
EDB[4]      : 49    : bidir  : 3.3-V LVTTL   :     :       : Y              
OKnjAdr[13] : 50    : output : 3.3-V LVTTL   :     :       : Y              
VCCIO       : 51    : power  :  : 3.3V    :       :                
nEIOS       : 52    : input  : 3.3-V LVTTL   :     :       : Y              
GND         : 53    : gnd    :  :     :       :                
ERW         : 54    : input  : 3.3-V LVTTL   :     :       : Y              
OKnjAdr[14] : 55    : output : 3.3-V LVTTL   :     :       : Y              
OKnjAdr[0]  : 56    : output : 3.3-V LVTTL   :     :       : Y              
EDB[3]      : 57    : bidir  : 3.3-V LVTTL   :     :       : Y              
OKnjAdr[1]  : 58    : output : 3.3-V LVTTL   :     :       : Y              
GND         : 59    : gnd    :  :     :       :                
OKnjAdr[2]  : 60    : output : 3.3-V LVTTL   :     :       : Y              
EDB[2]      : 61    : bidir  : 3.3-V LVTTL   :     :       : Y              
TCK         : 62    : input  : 3.3-V LVTTL   :     :       : N              
EDB[1]      : 63    : bidir  : 3.3-V LVTTL   :     :       : Y              
OKnjAdr[3]  : 64    : output : 3.3-V LVTTL   :     :       : Y              
GND         : 65    : gnd    :  :     :       :                
VCCIO       : 66    : power  :  : 3.3V    :       :                
EDB[0]      : 67    : bidir  : 3.3-V LVTTL   :     :       : Y              
OKnjAdr[4]  : 68    : output : 3.3-V LVTTL   :     :       : Y              
OKnjAdr[5]  : 69    : output : 3.3-V LVTTL   :     :       : Y              
OKnjAdr[6]  : 70    : output : 3.3-V LVTTL   :     :       : Y              
OKnjAdr[7]  : 71    : output : 3.3-V LVTTL   :     :       : Y              
OKnjAdr[12] : 72    : output : 3.3-V LVTTL   :     :       : Y              
TDO         : 73    : output : 3.3-V LVTTL   :     :       : N              
GND         : 74    : gnd    :  :     :       :                
OKnjAdr[15] : 75    : output : 3.3-V LVTTL   :     :       : Y              
OKnjAdr[16] : 76    : output : 3.3-V LVTTL   :     :       : Y              
nOKnjOE     : 77    : output : 3.3-V LVTTL   :     :       : Y              
GND         : 78    : gnd    :  :     :       :                
nOKnjCS     : 79    : output : 3.3-V LVTTL   :     :       : Y              
SCLK        : 80    : output : 3.3-V LVTTL   :     :       : Y              
SS0         : 81    : output : 3.3-V LVTTL   :     :       : Y              
VCCIO       : 82    : power  :  : 3.3V    :       :                
SS1         : 83    : output : 3.3-V LVTTL   :     :       : Y              
SS2         : 84    : output : 3.3-V LVTTL   :     :       : Y              
MOSI        : 85    : output : 3.3-V LVTTL   :     :       : Y              
GND         : 86    : gnd    :  :     :       :                
GCLK        : 87    : input  : 3.3-V LVTTL   :     :       : Y              
GND+        : 88    :    :  :     :       :                
nERESET     : 89    : input  : 3.3-V LVTTL   :     :       : Y              
GND+        : 90    :    :  :     :       :                
VCCINT      : 91    : power  :  : 3.3V    :       :                
MISO        : 92    : input  : 3.3-V LVTTL   :     :       : Y              
RESERVED    : 93    :    :  :     :       :                
LED5        : 94    : output : 3.3-V LVTTL   :     :       : Y              
GND         : 95    : gnd    :  :     :       :                
LED4        : 96    : output : 3.3-V LVTTL   :     :       : Y              
LED3        : 97    : output : 3.3-V LVTTL   :     :       : Y              
LED2        : 98    : output : 3.3-V LVTTL   :     :       : Y              
LED1        : 99    : output : 3.3-V LVTTL   :     :       : Y              
LED0        : 100   : output : 3.3-V LVTTL   :     :       : Y              




疲れたのでローダーや拡張BIOS、その他ツール類は
明日以降に掲載します。


FM-7のFDCエミュカードのバグもとれてないのにまた拡張カードを作った件(基板資料)

2018-08-17 21:57:32 | 電子工作


CPLDのソース(VHDL)は以下の通りです。
素人が独学でなんとなく書いたものなので
まともに勉強されている方からするとぼろぼろだと
思いますが暖かく見守ってアドバイスなどいただけると
ありがたいです。

MAX3128Aは5Vトレラントなので、基本的に
信号名に対応するFM-7の拡張バスのピンと
漢字ROMのピンにつないでいくだけです。

注意点はGCLKは使用するCPLDのグローバルクロックを
使用する。nERESETはCPLDのグローバルリセットを
使用する。SCLKはプルダウンする(CPLD起動時は0以外に
なってると誤動作のもと)。MISOはプルダウンする
(入力はフローティングになってると最悪壊れる)。
SCLKはノイズ取りに直列抵抗(1Kを入れました)や
小さなコンデンサ(22ピコFを入れました)をつなぐ。
バイパスコンデンサはつけられるだけつける。
ぐらいでしょうか。


GCLKに接続する発振器ですが、私は25MHzを使用しましたが
多少違っても問題ありません。
SPIには大概のものは接続できると思いますが、拡張BIOSでは
たまたま入手できたAT45DB161Dをターゲットとしていますので
他のSPIシリアルフラッシュでは動かないと思います。
ウェブでSPIシリアルフラッシュの用例を検索しましたが
どうやら普通は読み込みに03コマンド、書き込みに02コマンドを
使用するようですがAT45DB161Dは02コマンドがないため
AT45DB161D専用となっています。
ただ、AT45DB161D専用コードから03・02コマンドに書き直すのは
たいした手間ではないと思いますので興味のある方はチャレンジ
してみてください。


----------------------------------------------------------------------------------
--
-- FM-7 kanji-spi-loaderrom card
-- Copyright (C) 2018 pakapoo http://blog.goo.ne.jp/purupoo. All rights reserved.
--
--

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity top is
    Port (
        EAB            : in std_logic_vector(7 downto 0);
        EDB            : inout std_logic_vector(7 downto 0);
        EQ            : in std_logic;
        EE            : in std_logic;
        nEIOS        : in std_logic;
        nERESET        : in std_logic;
        ERW            : in std_logic;
--        nEEXTDET    : out std_logic;
--        nEIRQ        : inout std_logic;
--        CLK2p5        : in std_logic;
--
        OKnjAdr        : out std_logic_vector(16 downto 0);
        nOKnjCS        : out std_logic;
        nOKnjOE        : out std_logic;
--
        GCLK        : in std_logic;
        LED5        : out std_logic;
        LED4        : out std_logic;
        LED3        : out std_logic;
        LED2        : out std_logic;
        LED1        : out std_logic;
        LED0        : out std_logic;
--
        SCLK        : out std_logic;
        MISO        : in  std_logic;
        MOSI        : out std_logic;
        SS0            : out std_logic;
        SS1            : out std_logic;
        SS2            : out std_logic);
end top;

architecture Behavioral of top is


signal S_LED3    : std_logic;
signal S_LED0    : std_logic;



signal    S_EQ_trg    : std_logic_vector(1 downto 0);
signal    S_EQ_DBUF    : std_logic;
signal    S_EE_trg    : std_logic_vector(1 downto 0);
signal    S_EE_DBUF    : std_logic;
signal    S_BUS        : std_logic_vector(7 downto 0);


signal S_cnt    : std_logic_vector(20 downto 0);

signal S_KnjadrH    : std_logic_vector(7 downto 0);
signal S_KnjadrL    : std_logic_vector(7 downto 0);
signal S_OknjAdr0    : std_logic;
signal S_nOKnjOE    : std_logic;


--signal S_SPIC    : std_logic_vector(7 downto 0);
--signal S_SPIC_BUSY    : std_logic;
signal S_SPIC_SS    : std_logic_vector(1 downto 0);
signal S_SPID        : std_logic_vector(7 downto 0);
signal S_LED1        : std_logic;
constant LEDCNTWIDTH    : integer:=8;
constant LCWLN            : std_logic_vector(2 downto 0) := "000";
signal S_LEDCNT        : std_logic_vector(LEDCNTWIDTH downto 0);
signal S_LEDTRG        : std_logic;
signal S_LEDEND        : std_logic;
signal S_SS0        : std_logic;
signal S_SS1        : std_logic;
signal S_SS2        : std_logic;
signal S_SCLK        : std_logic;
signal S_MOSI        : std_logic;
signal S_MISO        : std_logic;
signal S_MISO_DBUF    : std_logic;
signal S_SPIDIN        : std_logic_vector(7 downto 0);

begin




-- EQトリガー取得
    process(GCLK) begin
        if(GCLK = '1' and GCLK'event) then
            S_EQ_trg(1)
            S_EQ_DBUF               S_EQ_trg(0)         end if;    
    end process;
-- EEトリガー取得
    process(GCLK) begin
        if(GCLK = '1' and GCLK'event) then
            S_EE_trg(1)
            S_EE_DBUF               S_EE_trg(0)         end if;    
    end process;

--    process(GCLK) begin
--        if(S_RESET = '0') then
--            S_cnt '0');
--            S_RESET <= '1';
--        elsif(GCLK = '1' and GCLK'event) then
--            S_cnt --            S_LED0 --        end if;    
--    end process;



--    FM-7から書き込まれた場合の対応
    process (GCLK,nERESET) begin
        if(nERESET = '0') then
            S_LED0 <= '0';
        elsif(GCLK = '1' and GCLK'event) then
            if(S_EQ_trg="10" and nEIOS='0' and ERW='0') then
                if(EAB = X"20") then
                    S_KnjadrH --                    S_LED3 <= '1';
                    S_LED0                 elsif(EAB = X"21") then
                    S_KnjadrL                 else
                end if;
            end if;
        end if;
    end process;
    process (GCLK,nERESET) begin
        if(nERESET = '0') then
            S_SPIC_SS <= "00";
            S_SPID --            S_LEDCNT '0');
            S_LEDTRG <= '0';
        elsif(GCLK = '1' and GCLK'event) then
            if(S_EQ_trg="10" and nEIOS='0' and ERW='0') then
                if(EAB = X"08") then
                    S_SPIC_SS                 elsif(EAB = X"09") then
                    S_SPID                     S_LEDTRG <= '1';
                else
                end if;
            end if;
            if(S_LEDEND = '1') then
                S_LEDTRG <= '0';
            end if;
        end if;
    end process;
    process (GCLK,nERESET) begin
        if(nERESET = '0') then
            S_LED1 <= '0';
            S_LEDCNT '0');
            S_LEDEND <= '0';
            S_SCLK <= '0';
            S_MOSI <= '0';
            S_SPIDIN '0');
        elsif(GCLK = '1' and GCLK'event) then
            if(S_LEDTRG = '1') then
                S_LED1 <= '1';
                if(S_LEDCNT = "000000"&LCWLN) then
                    S_MOSI                 elsif(S_LEDCNT = "000100"&LCWLN) then
                    S_SCLK <= '1';
                elsif(S_LEDCNT = "001000"&LCWLN) then
                    S_SPIDIN(7)                 elsif(S_LEDCNT = "001001"&LCWLN) then
                    S_SCLK <= '0';
                elsif(S_LEDCNT = "001010"&LCWLN) then
                    S_MOSI                 elsif(S_LEDCNT = "001011"&LCWLN) then
                    S_SCLK <= '1';
                elsif(S_LEDCNT = "001100"&LCWLN) then
                    S_SPIDIN(6)                 elsif(S_LEDCNT = "001101"&LCWLN) then
                    S_SCLK <= '0';
                elsif(S_LEDCNT = "001110"&LCWLN) then
                    S_MOSI                 elsif(S_LEDCNT = "001111"&LCWLN) then
                    S_SCLK <= '1';
                elsif(S_LEDCNT = "010000"&LCWLN) then
                    S_SPIDIN(5)                 elsif(S_LEDCNT = "010001"&LCWLN) then
                    S_SCLK <= '0';
                elsif(S_LEDCNT = "010010"&LCWLN) then
                    S_MOSI                 elsif(S_LEDCNT = "010011"&LCWLN) then
                    S_SCLK <= '1';
                elsif(S_LEDCNT = "010100"&LCWLN) then
                    S_SPIDIN(4)                 elsif(S_LEDCNT = "010101"&LCWLN) then
                    S_SCLK <= '0';
                elsif(S_LEDCNT = "010110"&LCWLN) then
                    S_MOSI                 elsif(S_LEDCNT = "010111"&LCWLN) then
                    S_SCLK <= '1';
                elsif(S_LEDCNT = "011000"&LCWLN) then
                    S_SPIDIN(3)                 elsif(S_LEDCNT = "011001"&LCWLN) then
                    S_SCLK <= '0';
                elsif(S_LEDCNT = "011010"&LCWLN) then
                    S_MOSI                 elsif(S_LEDCNT = "011011"&LCWLN) then
                    S_SCLK <= '1';
                elsif(S_LEDCNT = "011100"&LCWLN) then
                    S_SPIDIN(2)                 elsif(S_LEDCNT = "011101"&LCWLN) then
                    S_SCLK <= '0';
                elsif(S_LEDCNT = "011110"&LCWLN) then
                    S_MOSI                 elsif(S_LEDCNT = "011111"&LCWLN) then
                    S_SCLK <= '1';
                elsif(S_LEDCNT = "100000"&LCWLN) then
                    S_SPIDIN(1)                 elsif(S_LEDCNT = "100001"&LCWLN) then
                    S_SCLK <= '0';
                elsif(S_LEDCNT = "100010"&LCWLN) then
                    S_MOSI                 elsif(S_LEDCNT = "100011"&LCWLN) then
                    S_SCLK <= '1';
                elsif(S_LEDCNT = "100100"&LCWLN) then
                    S_SPIDIN(0)                 elsif(S_LEDCNT = "100101"&LCWLN) then
                    S_SCLK <= '0';
                elsif(S_LEDCNT = "110000"&LCWLN) then
                    S_LEDEND <= '1';
                elsif(S_LEDCNT = "110001"&LCWLN) then
                elsif(S_LEDCNT = "110010"&LCWLN) then
                elsif(S_LEDCNT = "110011"&LCWLN) then
                elsif(S_LEDCNT = "110100"&LCWLN) then
                elsif(S_LEDCNT = "110101"&LCWLN) then
                elsif(S_LEDCNT = "110110"&LCWLN) then
                elsif(S_LEDCNT = "110111"&LCWLN) then
                end if;
                S_LEDCNT             else
                S_LED1 <= '0';
                S_LEDEND <= '0';
                S_LEDCNT '0');
            end if;
        end if;
    end process;
    process (GCLK,nERESET) begin
        if(nERESET = '0') then
            S_SS0 <= '1';
            S_SS1 <= '1';
            S_SS2 <= '1';
        elsif(GCLK = '1' and GCLK'event) then
            if(S_SPIC_SS = "00") then
                S_SS0 <= '1';
                S_SS1 <= '1';
                S_SS2 <= '1';
            elsif(S_SPIC_SS = "01") then
                S_SS0 <= '0';
                S_SS1 <= '1';
                S_SS2 <= '1';
            elsif(S_SPIC_SS = "10") then
                S_SS0 <= '1';
                S_SS1 <= '0';
                S_SS2 <= '1';
            elsif(S_SPIC_SS = "11") then
                S_SS0 <= '1';
                S_SS1 <= '1';
                S_SS2 <= '0';
            else
                S_SS0 <= '1';
                S_SS1 <= '1';
                S_SS2 <= '1';
            end if;
        end if;
    end process;



    process(GCLK,nERESET) begin
        if(nERESET = '0') then
            S_LED3 <= '0';
        elsif(GCLK = '1' and GCLK'event) then
--        if(GCLK = '1' and GCLK'event) then
            if(nEIOS='0' and EAB=X"20") then
                S_LED3 <= '1';
            end if;
        end if;
    end process;







--    FM-7からの読み込みに対応
    process (GCLK) begin
        if(GCLK = '1' and GCLK'event) then
            if(S_EQ_trg="10" and nEIOS='0' and ERW='1') then
                if(EAB = X"20") then
                    S_BUS                 elsif(EAB = X"21") then
                    S_BUS                 elsif(EAB = X"08") then
                    S_BUS                 elsif(EAB = X"09") then
                    S_BUS                 elsif(EAB(7 downto 6) = "11") then

                else
                end if;
            end if;
        end if;
    end process;
    process (GCLK) begin
        if(GCLK = '1' and GCLK'event) then
            if(S_EQ_trg="10" and nEIOS='0' and ERW='1') then
                if(EAB = X"22") then
                    S_OKnjAdr0 <= '0';
                    S_nOKnjOE <= '0';
                elsif(EAB = X"23") then
                    S_OKnjAdr0 <= '1';
                    S_nOKnjOE <= '0';
                else
                    S_OKnjAdr0 <= '0';
                    S_nOKnjOE <= '1';
                end if;
            end if;
        end if;
    end process;


--    バスが0x18台以外の場合はハイインピーダンスにする
    EDB             else     "ZZZZZZZZ";

    LED5 <= '0';
    LED4 <= '0';


--    OKnjAdr     OKnjAdr                 else    S_KnjAdrH & S_KnjAdrL & S_OknjAdr0;
    
    nOKnjCS <= '0';
--    nOKnjOE <= '1';
--    nOKnjOE     nOKnjOE                 else    S_nOKnjOE;

    LED3     LED2 <= '0';
    LED1     LED0


    SCLK     MOSI --    S_MISO_DBUF --    S_MISO     S_MISO     SS0     SS1     SS2



end Behavioral;

 


ピンの割り当ては次の記事に掲載します。