日本橋電気街徘徊日誌

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

FM-7用パラレルポート接続SPIシリアルフラッシュメモリアダプタ用のファームウェアを更新しました。(ソース)

2019-04-30 18:22:12 | 電子工作

 

FM-7用パラレルポート接続SPIフラッシュメモリアダプタのファームウェアのソースです。
; Copyright(C)2018 pakapoo All rights reserved.
; http://blog.goo.ne.jp/purupoo/
;
; パラレルポート セツゾク ノ シリアル
; フラッシュメモリ カラ 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
;
; 2018/07/?? ナントナク ウゴキハジメタ
; 2019/01/?? マトモニブートスルヨウニナッテキタ
; 2019/04/15 テンソウソクドガ1KB/S->2KB/Sニコウソクカ
; 2019/04/30 プリンタポートノシュツリョクノリヨウシナイBITヲ0カラ1ニヘンコウ
;            FD05デWRITE、FD08デREADトタダシイツカイワケヲシテイナイプログラムニタイオウ
;
;
 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 SPI2
;LDA  SPIIN
 STA ,X+
 LDA #$00
 LBSR SPI2
;LDA  SPIIN
 STA ,X+
 LDA #$00
 LBSR SPI2
;LDA  SPIIN
 STA ,X+
 RTS
;
;
 ORG $3060
 LDX #$3100
 LBSR UNSEL
 LDA #$77
 LBSR SPI2
 CLRA
 LBSR SPI2
 CLRA
 LBSR SPI2
 CLRA
 LBSR SPI2
L30601:EQU *
 LBSR SPI2
;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 $FFEB
PNUM:EQU $FFEC
PNUML:EQU $FFED
PAGE_H:EQU $FFEE
PAGE_L:EQU $FFEF
;
; BOOT
;
 BRA BOOTL1
 CLRA
 RTS
 NOP
;BRA  WTRD
;NOP
;BRA  WTRD
;
 NOP
 NOP
 NOP
;
WTRD:EQU *
 LDA ,X
 CMPA #10
 LBEQ READ
 LBRA WRITE
;
;
BOOTL1:EQU *
 LDA #$FD
 TFR A,DP
 CLR <PRT0
 CLRA
 DECA
 STA <PRT1
 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
DRVTBL:FCB $FC,$FC,$FE,$FE
;
;
;
;
;
UNSEL:EQU *
 CLR PRT0;CLKLO
 PSHS A
 LDA #$FF
 STA PRT1
 PULS A
 RTS
;
;
;
WAIT:EQU *
;       PSHS A
;       LDA  #1
;WAIT1: DECA
;       BNE  WAIT1
;       PULS A
 RTS
;
;
;
SPI2:EQU *
 PSHS X
 PSHS A,B,DP
 TFR S,X
;
 LDA #8
 STA 2,X
;
SPI2L1:LDA SS
 RORA
 ROL ,X
 ROLA
 STA PRT1
 LDA #$40;CLKHI
 STA PRT0;CLKHI
 LDA PRT2
 RORA
 RORA
 RORA
 RORA
 ROL 1,X
 CLR PRT0;CLKLO
;
 DEC 2,X
 BNE SPI2L1
;
 LDA 1,X
 LEAS 3,S
 PULS X
 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 SPI2
 CLRA
 BSR SPI2
 CLRA
 BSR SPI2
 LBSR UNSEL
 RTS
;
;
; 4 BYTE COMMAND
;
CMD4:EQU *
 BSR SSSEL
;
 LBSR SPI2
;      
;
TST1:EQU *
 LDB 5,X
 DECB
 LDY #PNUM
 CLR 0,Y
 STB 1,Y
;
 LDB 6,X
 ANDB #1
 LDA #16
 MUL
 ADDD ,Y
 STD ,Y
;
 LDB 4,X
 LDA #32
 MUL
 ADDD ,Y
;
 ADDD #SCOFST
;
 PSHS A,B
 LDA 7,X
 ANDA #3
 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 SPI2
 PULS A
 STA PAGE_L
 LBSR SPI2
;
 CLRA
 LBSR SPI2
;
;
 LBSR UNSEL
 RTS
;
;
;PNUM: FCB  0
;PNUML:FCB  0
;
;
CMD:EQU *
 LBSR SSSEL
;
 LBSR SPI2
 CLRA
 LBSR SPI2
 CLRA
 LBSR SPI2
 CLRA
 LBSR SPI2
;
 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 SPI2
 STA ,Y+
 DECB
 BNE READL1
 LBSR UNSEL
 CLRA
 RTS
;
;
WRITE:EQU *
 LDA #B1WT
 BSR CMD
 CLRB
 LDY 2,X
WTLP1:EQU *
 LDA ,Y+
 LBSR SPI2
;
 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





FM-7用パラレルポート接続SPIシリアルフラッシュメモリアダプタ用のファームウェアを更新しました。(高速化・互換性向上)

2019-04-30 18:19:05 | 電子工作

FM-7用パラレルポート接続SPIフラッシュメモリアダプタの
ファームを更新したのであげておきます。
前回のものより高速化し2キロバイト/秒に達しました。
また本来のromではfe05がwrite、fe08がreadということに
なっていますが、実は飛び先は同じでRCBのコマンドバイトに
よりwriteかreadを判断していましたが、ゲームのIPL部分を
いくつか読んでみたところ、fe05でreadしているものが
みつかりましたので本来のrom同様の処理に変更しました。



000000 20 11 4f 39 12 12 12 12 a6 84 81 0a 10 27 01 39
000010 16 01 57 86 fd 1f 8b 0f 00 4f 4a 97 01 10 ce fc
000020 7f 17 00 55 d6 04 c5 02 26 05 be fb fc 20 1d 86
000030 31 17 01 66 30 8d 00 35 17 01 0e 86 32 17 01 5a
000040 8e 01 00 4f 1f 8b 7e 01 00 be fb fe 4f 1f 8b ce
000050 fd 06 8d 0e ce fd 24 86 04 8d 07 33 42 4a 26 f9
000060 6e 84 6f 41 6f 41 6f 41 c6 40 e7 41 39 0a 00 01
000070 00 00 01 00 00 fc fc fe fe 7f fd 00 34 02 86 ff
000080 b7 fd 01 35 02 39 39 34 10 34 0e 1f 41 86 08 a7
000090 02 b6 ff eb 46 69 84 49 b7 fd 01 86 40 b7 fd 00
0000a0 b6 fd 02 46 46 46 46 69 01 7f fd 00 6a 02 26 e1
0000b0 a6 01 32 63 35 10 39 39 8d bf 34 06 a6 07 31 8d
0000c0 ff b3 31 a6 a6 a4 b7 ff eb 35 06 39 8d ea 86 d7
0000d0 8d b5 4f 8d b2 4f 8d af 17 ff 9e 39 8d da 17 ff
0000e0 a6 e6 05 5a 10 8e ff ec 6f 20 e7 21 e6 06 c4 01
0000f0 86 10 3d e3 a4 ed a4 e6 04 86 20 3d e3 a4 c3 00
000100 80 34 06 a6 07 84 03 81 00 27 0b 81 02 27 07 35
000110 06 c3 05 00 20 02 35 06 58 49 58 49 84 3f 34 04
000120 b7 ff ee 17 ff 61 35 02 b7 ff ef 17 ff 59 4f 17
000130 ff 55 17 ff 44 39 17 ff 7f 17 ff 4b 4f 17 ff 47
000140 4f 17 ff 43 4f 17 ff 3f 39 86 53 8d 8f 17 ff 7c
000150 81 ac 26 f9 86 d1 8d de 5f 10 ae 02 4f 17 ff 27
000160 a7 a0 5a 26 f7 17 ff 11 4f 39 86 84 8d c8 5f 10
000170 ae 02 a6 a0 17 ff 10 5a 26 f8 17 fe fc 86 83 17
000180 ff 5a 17 ff 47 81 ac 26 f9 86 58 17 ff 4e 17 ff
000190 3b 81 ac 26 f9 17 fe e1 4f 39 34 02 30 e4 cc 00
0001a0 01 8d 03 35 02 39 1f 12 32 7a 30 e4 34 06 86 14
0001b0 a7 84 6f 01 10 af 02 35 06 ed 04 bd f1 7d 32 66
0001c0 39 86 31 8d d5 39 d5 39 39 00 00 00 00 00 00 00
0001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
0001f0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff fe 00



パラレルポート用シリアルフラッシュメモリアダプタ用のファームウェアを更新しました。(ソース)

2019-04-16 15:49:47 | 電子工作

一つ前の記事のソースファイルです。edas20で書きました。
スタックにデータを置いて、インデックスレジスタで参照しつつ
アクセスするという6809でたぶん定番的な使い方がようやく
理解できたので(高校生当時は後方のデータ領域にデータを置く
使い方しかしていなかった)一番速度に効いてくると思われる
SPIの1バイト転送部分を書き直しました。だいぶ短く速くなったので
ここからはあまり高速化はできそうにない。


;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 SPI2
;LDA  SPIIN
 STA ,X+
 LDA #$00
 LBSR SPI2
;LDA  SPIIN
 STA ,X+
 LDA #$00
 LBSR SPI2
;LDA  SPIIN
 STA ,X+
 RTS
;
;
 ORG $3060
 LDX #$3100
 LBSR UNSEL
 LDA #$77
 LBSR SPI2
 CLRA
 LBSR SPI2
 CLRA
 LBSR SPI2
 CLRA
 LBSR SPI2
L30601:EQU *
 LBSR SPI2
;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 $FFEB
PNUM:EQU $FFEC
PNUML:EQU $FFED
PAGE_H:EQU $FFEE
PAGE_L:EQU $FFEF
;
; BOOT
;
 BRA BOOTL1
 CLRA
 NOP
 RTS
 LBRA WRITE
 LBRA READ
;
BOOTL1:EQU *
 LDA #$FD
 TFR A,DP
 CLR <PRT0
 CLRA
 DECA
 STA <PRT1
 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
;
;
;
SPI2:EQU *
 PSHS X
 PSHS A,B,DP
 TFR S,X
;
 LDA #8
 STA 2,X
;
SPI2L1:LDA SS
 RORA
 ROL ,X
 ROLA
 STA PRT1
 BSR CLKHI
 LDA PRT2
 RORA
 RORA
 RORA
 RORA
 ROL 1,X
 BSR CLKLO
;
 DEC 2,X
 BNE SPI2L1
;
 LDA 1,X
 LEAS 3,S
 PULS X
 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 SPI2
 CLRA
 BSR SPI2
 CLRA
 BSR SPI2
 LBSR UNSEL
 RTS
;
;
; 4 BYTE COMMAND
;
CMD4:EQU *
 BSR SSSEL
;
 LBSR SPI2
;      
;
TST1:EQU *
 LDB 5,X
 DECB
 LDY #PNUM
 CLR 0,Y
 STB 1,Y
;
 LDB 6,X
 ANDB #1
 LDA #16
 MUL
 ADDD ,Y
 STD ,Y
;
 LDB 4,X
 LDA #32
 MUL
 ADDD ,Y
;
 ADDD #SCOFST
;
 PSHS A,B
 LDA 7,X
 ANDA #3
 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 SPI2
 PULS A
 STA PAGE_L
 LBSR SPI2
;
 CLRA
 LBSR SPI2
;
;
 LBSR UNSEL
 RTS
;
;
;PNUM: FCB  0
;PNUML:FCB  0
;
;
CMD:EQU *
 LBSR SSSEL
;
 LBSR SPI2
 CLRA
 LBSR SPI2
 CLRA
 LBSR SPI2
 CLRA
 LBSR SPI2
;
 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 SPI2
 STA ,Y+
 DECB
 BNE READL1
 LBSR UNSEL
 CLRA
 RTS
;
;
WRITE:EQU *
 LDA #B1WT
 BSR CMD
 CLRB
 LDY 2,X
WTLP1:EQU *
 LDA ,Y+
 LBSR SPI2
;
 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




パラレルポート用シリアルフラッシュメモリアダプタ用のファームウェアを更新しました。

2019-04-16 15:38:11 | 電子工作


パラレルポート用シリアルフラッシュメモリアダプタが
それなりに安定したのでメインでDOH-CやEDASを使用していましたが、
最近ysflight.comさんがd77イメージをRS232C経由で母艦PCから読ます
ソフトを作成され、刺激を受けたのでソースの整理と若干の高速化
(1キロバイト/秒->1.4キロバイト/秒)を行いましたので公開します。
前の版はテグザーのエンディングでハングしていましたが、高速化が
よかったのか、潜在的なバグが修正されたのかハングしなくなりました。

 

以下にファームを示します。
FM-7ブートROMの空きバンクであるバンク3に焼いて使うのが便利です。

000000 20 09 4f 12 39 16 01 66 16 01 42 86 fd 1f 8b 0f
000010 00 4f 4a 97 01 10 ce fc 7f 17 00 55 d6 04 c5 02
000020 26 05 be fb fc 20 1d 86 31 17 01 72 30 8d 00 35
000030 17 01 1a 86 32 17 01 66 8e 01 00 4f 1f 8b 7e 01
000040 00 be fb fe 4f 1f 8b ce fd 06 8d 0e ce fd 24 86
000050 04 8d 07 33 42 4a 26 f9 6e 84 6f 41 6f 41 6f 41
000060 c6 40 e7 41 39 0a 00 01 00 00 01 00 00 04 04 02
000070 02 8d 17 34 02 86 ff b7 fd 01 35 02 39 34 02 86
000080 40 b7 fd 00 35 02 8d 01 39 39 34 02 4f 20 f2 34
000090 10 34 0e 1f 41 86 08 a7 02 b6 ff eb 46 69 84 49
0000a0 b7 fd 01 8d d8 b6 fd 02 46 46 46 46 69 01 8d da
0000b0 6a 02 26 e5 a6 01 32 63 35 10 39 39 8d b3 34 06
0000c0 a6 07 31 8d ff a7 31 a6 a6 a4 b7 ff eb 35 06 39
0000d0 8d ea 86 d7 8d b9 4f 8d b6 4f 8d b3 17 ff 92 39
0000e0 8d da 17 ff aa e6 05 5a 10 8e ff ec 6f 20 e7 21
0000f0 e6 06 c4 01 86 10 3d e3 a4 ed a4 e6 04 86 20 3d
000100 e3 a4 c3 00 80 34 06 a6 07 84 03 81 00 27 0b 81
000110 02 27 07 35 06 c3 05 00 20 02 35 06 58 49 58 49
000120 84 3f 34 04 b7 ff ee 17 ff 65 35 02 b7 ff ef 17
000130 ff 5d 4f 17 ff 59 17 ff 38 39 17 ff 7f 17 ff 4f
000140 4f 17 ff 4b 4f 17 ff 47 4f 17 ff 43 39 86 53 8d
000150 8f 17 ff 7c 81 ac 26 f9 86 d1 8d de 5f 10 ae 02
000160 4f 17 ff 2b a7 a0 5a 26 f7 17 ff 05 4f 39 86 84
000170 8d c8 5f 10 ae 02 a6 a0 17 ff 14 5a 26 f8 17 fe
000180 f0 86 83 17 ff 5a 17 ff 47 81 ac 26 f9 86 58 17
000190 ff 4e 17 ff 3b 81 ac 26 f9 17 fe d5 4f 39 34 02
0001a0 30 e4 cc 00 01 8d 03 35 02 39 1f 12 32 7a 30 e4
0001b0 34 06 86 14 a7 84 6f 01 10 af 02 35 06 ed 04 bd
0001c0 f1 7d 32 66 39 86 31 8d d5 39 00 00 00 00 00 00
0001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0001f0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff fe 00




FM-7のDOH-Cコンパイラで割り込みの記述方法を確認してみた

2019-04-06 19:52:54 | 電子工作

ちょぼちょぼFM-7を動かしています。
津田伸秀氏のDOH-CコンパイラとOH!FM87年8月9月掲載の
seという組み合わせで利用しています。
この組み合わせだとコンパイラ本体とエディタをメモリに
常駐させて使えるので7やNew7のような64KBしかメモリが
ない環境では非常に快適です。
DOH-Cは当時買ったはいいものの、その後すぐにPC286VSを
買ったので使い込まないままほっていました。
最近FM-7でそれなりのサイズのアプリを作りたい気が
してきたのであらためてDOH-Cに取り組んでみました。
お題としては割り込み処理をDOH-Cで書けるかどうか
試してみましたが、あまり変なことをせずに素直に
記述できましたのでウェブ上に他に全く情報も
ないようなのでここに書いておきます。

DOH-Cはブレークキーを押されたら処理が中断する処理が
あり、プログラム終了時にFIRQのフックを元の値に
書き戻すので、割り込みフックに割り込み処理のアドレスを
書いてやればそれでよいようです。(前後に割り込みマスク・
許可はあったほうがよさそうです)
IRQの場合はDOH-Cは何もしていないようなので、IRQの
割り込みフックに値を設定する場合は自分で元に戻す必要が
ありそうです。

割り込み処理側では最後にRTIで終わってやればよいようです。
画像はFIRQなので処理の最初と最後でレジスタの退避と戻しを
行っています。(画像ではPC以外すべてを退避していますが、
マニュアルによるとDOH-CはABXYSしか使わないようですので
code文のところは0x34,0x36と0x35,0x36とかでよさそうです)