ここから本文です
Dr.Kikkie (KIKI) : 不許無断天才|免責:本稿を真に受けて損害があっても知らん。

書庫全体表示

えいや!っと。まだデバッグ中ですが、アップロードのテストしてみました。
ここにアップロードするとTABが半角スペースに変換されるので、コメントなどに半角スペースを使わないようにしました。いったんメモ帳などにコピーして、半角スペースをTABに置換したら元に戻るかな?と。
【追記】やってみると、そう簡単にはいかないようで。
でもASM.COMにはかけられるかもしんまい。

内容について。
コマンドレスポンスは正常に戻りますが、実際に読み書きできていないようです。ダメじゃん?CLKの上げ下げに問題があるのかなと試行錯誤中であります。

;===========================
;SD3.ASM
;
;ASM_SD2.ASM_XCD/B->SD2.OBJ
;Use_J-PORT_B
;(C)KIKI_2015
;===========================
PSGA EQU 0A0H ;PSG_R/W_ADRS
PSGW EQU 0A1H ;PSG_Write
PSGR EQU 0A2H ;PSG_Read
DO EQU 0 ;DO(#14-0)B-1pin
CS EQU 2 ;CS(#15-2)B-6pin
DIN EQU 3 ;DIN(#15-3)B-7pin
CLK EQU 5 ;CLK(#15-5)B-8pin
JPTB EQU 6 ;JPort-B(#15-6)
BREAKX EQU 000B7H ;BIOS_Ctrl+STOP
BDOS EQU 0F37DH ;BDOS_Call
WAIT EQU 01H ;WaitLoop
 ORG 0C000H
MAIN:;----------
 JP SDR ;USR0      =C000H
 JP SDW ;USR1      =C003H
;WORK----------
CMD0RS: DEFB 0FFH ;CMD0Res   =C006H
CMD1RS: DEFB 0FFH ;CMD1Res   =C007H
CMD16R: DEFB 0FFH ;CMD16Res  =C008H
CMD17R: DEFB 0FFH ;CMD17Res  =C009H
CMD24R: DEFB 0FFH ;CMD24Res  =C00AH
C24DR: DEFB 0FFH ;CMD24DR   =C00BH
STTBYT: DEFB 0FFH ;CMD17Start=C00CH
USRAG1: DEFB 00H ;USR_ARG1  =C00DH
USRAG2: DEFB 00H ;USR_AUG2  =C00EH
USRAG3: DEFB 00H ;USR_AUG3  =C00FH
USRAG4: DEFB 00H ;USR_AUG4  =C010H
CHAR: DEFB 40H ;WritDATA  =C011H
C24STB: DEFB 0FEH ;CMD24STB  =C012H
BUFF: DEFS 512 ;BUFF      =C013H
CRC: DEFS 2 ;BUFF_CRC
PSG0: DEFS 1 ;PSG_OrgData
PSG1: DEFS 1 ;PSG_NewData
CMD0: DEFB 40H,00H,00H,00H,00H,095H
CMD1: DEFB 41H,00H,00H,00H,00H,0F9H
CMD16: DEFB 50H,00H,00H,02H,00H,00H
CMD17: DEFB 51H
CMD17A: DEFB 00H
 DEFB 00H
 DEFB 00H
 DEFB 00H
 DEFB 00H
CMD24: DEFB 58H
CMD24A: DEFB 00H
 DEFB 00H
 DEFB 00H
 DEFB 00H
 DEFB 00H
SDR:;---------------------------
 DI
 CALL INIT
 CALL CMD7S
 CALL REPSG
 EI
 RET
SDW:;---------------------------
 DI
 CALL INIT
 CALL CMD4S
 CALL REPSG
 EI
 RET
INIT:;-------------------------------------------
 LD A,15  ;SavePSG_Data
 OUT (PSGA),A
 IN A,(PSGR)
 LD (PSG0),A
 SET JPTB,A  ;UseJPT-B
 LD (PSG1),A
;DummyCLK80------------------------------------
 CALL CSH  ;/CS=H
 CALL DINH  ;DIN=H
 CALL CLKL  ;CLK=L
 LD B,80  ;Dummy80CLK
DMY80L: CALL CLKH
 CALL CLKL
 DJNZ DMY80L
 CALL CSL  ;/CS=L
CMD0S:;-------------------------------------------
 LD HL,CMD0  ;CMD0_Start
 CALL CMDX
 LD B,80  ;Counter
 LD E,0FFH  ;E:Temp.
CMD0L: CALL CLKH
 LD A,14
 OUT (PSGA),A
 IN A,(PSGR)
 CALL CLKL
 RRA   ;bit0->Cy
 RL E  ;Ebit0<-Cy
 LD A,E
 LD (CMD0RS),A ;SaveCMD0Res
 CP 01H  ;A=01H?
 JR Z,CMD0OK ;Yes->CMD0OK
 SLA E  ;ShiftLeft
 DJNZ CMD0L
 LD DE,CMD0TO ;CMD0:TimeOut
 CALL PUTS
 RET
CMD0TO: DEFM 'CMD_0:TimeOut'
 DEFB 0DH,0AH,'$'
CMD0OK: LD DE,CMD0C ;CMD0:OK
 CALL PUTS
 JR CMD0E
CMD0C: DEFM 'CMD_0:Done'
 DEFB 0DH,0AH,'$'
CMD0E: CALL DMY8
CMD1S:;-----------------------------------------
 LD B,080H  ;Counter
 LD E,0FFH  ;E:Temp.
CMD1L1: LD HL,CMD1
 CALL CMDX
 LD C,32
CMD1L2: CALL CLKH
 LD A,14
 OUT (PSGA),A
 IN A,(PSGR)
 CALL CLKL
 RRA
 RL E
 LD A,E
 LD (CMD1RS),A ;SaveCMD1RS
 CP 00H  ;A=00H?
 JR Z,CMD1OK
 DEC C
 JR NZ,CMD1L2
 DJNZ CMD1L1
 LD DE,CMD1TO ;CMD1:TimeOut
 CALL PUTS
 RET
CMD1TO: DEFM 'CMD_1:TimeOut'
 DEFB 0DH,0AH,'$'
CMD1OK: LD DE,CMD1C
 CALL PUTS
 JR CMD1E
CMD1C: DEFM 'CMD_1:Done'
 DEFB 0DH,0AH,'$'
CMD1E: CALL DMY8
CMD6S:;CMD16-----------------------------------
 LD HL,CMD16 ;CMD16_Start
 CALL CMDX
 LD B,80  ;Counter
 LD E,0FFH  ;E:Temp.
CMD6L: CALL CLKH
 LD A,14
 OUT (PSGA),A
 IN A,(PSGR)
 CALL CLKL
 RRA   ;bit0->Cy
 RL E  ;Ebit0<-Cy
 LD A,E
 LD (CMD16R),A ;SaveCMD16Res
 CP 00H  ;A=00H?
 JR Z,CMD6OK ;Yes->CMD16OK
 SLA E  ;ShiftLeft
 DJNZ CMD6L
 LD DE,CMD6TO ;CMD16:TimeOut
 CALL PUTS
 RET
CMD6TO: DEFM 'CMD16:TimeOut'
 DEFB 0DH,0AH,'$'
CMD6OK: LD DE,CMD6C ;CMD16:OK
 CALL PUTS
 JR CMD6E
CMD6C: DEFM 'CMD16:Done'
 DEFB 0DH,0AH,'$'
CMD6E: CALL DMY8
 RET
CMD7S:;CMD17=Read-----------------------------------
 LD BC,4
 LD DE,CMD17A
 LD HL,USRAG1
 LDIR
 LD HL,CMD17 ;CMD17_Start
 CALL CMDX
 LD B,80  ;Counter
 LD E,0FFH  ;E:Temp.
CMD7L: CALL CLKH
 LD A,14
 OUT (PSGA),A
 IN A,(PSGR)
 CALL CLKL
 RRA   ;bit0->Cy
 RL E  ;Ebit0<-Cy
 LD A,E
 LD (CMD17R),A ;SaveCMD17Res
 CP 00H  ;A=00H?
 JR Z,CMD7OK ;Yes->CMD7OK
 SLA E  ;ShiftLeft
 DJNZ CMD7L
 LD DE,CMD7TO ;CMD7:TimeOut
 CALL PUTS
 RET
CMD7TO: DEFM 'CMD17:TimeOut'
 DEFB 0DH,0AH,'$'
CMD7OK: LD DE,CMD7C ;CMD7:OK
 CALL PUTS
 JR CMD7E
CMD7C: DEFM 'CMD17:Done'
 DEFB 0DH,0AH,'$'
CMD7E: LD B,80  ;Counter
 LD E,0FFH  ;E:Temp.
CMD7L2: CALL CLKH
 LD A,14
 OUT (PSGA),A
 IN A,(PSGR)
 CALL CLKL
 RRA   ;bit0->Cy
 RL E  ;Ebit0<-Cy
 LD A,E
 LD (STTBYT),A ;SaveStartByte
 CP 0FEH  ;A=FEH?
 JR Z,CMD7RK ;Yes->CMD17RK
 SLA E  ;SiftLeft
 DJNZ CMD7L2
 LD DE,CMD7RO ;CMD17:ReadTimeOut
 CALL PUTS
 RET
CMD7RO: DEFM 'CMD17:ReadTimeOut'
 DEFB 0DH,0AH,'$'
CMD7RK: LD DE,CMD7RC ;CMD17:ReadStartOK
 CALL PUTS
 JR CMD7RE
CMD7RC: DEFM 'CMD17:ReadStart'
 DEFB 0DH,0AH,'$'
CMD7RE: LD HL,BUFF
 LD BC,512  ;512Bytes
CMD7L3: PUSH BC
 PUSH HL
 LD E,0FFH  ;E:Temp.
 LD B,8
CMD7L4: CALL CLKH
 LD A,14
 OUT (PSGA),A
 IN A,(PSGR)
 CALL CLKL
 RRA   ;bit0->Cy
 RL E  ;Ebit0<-Cy
 DJNZ CMD7L4
 POP HL
 LD (HL),E
 INC HL
 POP BC
 DEC BC
 LD A,B
 OR C
 JR NZ,CMD7L3
 LD DE,CMD7EB ;CMD17:ReadEnd
 CALL PUTS
 JR CMD7ED
CMD7EB: DEFM 'CMD17:ReadEnd'
 DEFB 0DH,0AH,'$'
CMD7ED: CALL DMY8  ;CRC1
 CALL DMY8  ;CRC2
 CALL DMY8
 RET
CMD4S:;CMD24=Write-----------------------------------
 LD BC,512  ;Fill_BUFF_Char.
 LD HL,BUFF
 LD A,(CHAR)
 LD E,A
CMD4L1: LD (HL),E
 INC HL
 DEC BC
 LD A,B
 OR C
 JR NZ,CMD4L1
 LD BC,4
 LD DE,CMD24A
 LD HL,USRAG1
 LDIR
 LD HL,CMD24 ;CMD24_Start
 CALL CMDX
 LD B,80  ;Counter
 LD E,0FFH  ;E:Temp.
CMD4L2: CALL CLKH
 LD A,14
 OUT (PSGA),A
 IN A,(PSGR)
 CALL CLKL
 RRA   ;bit0->Cy
 RL E  ;Ebit0<-Cy
 LD A,E
 LD (CMD24R),A ;SaveCMD24Res
 CP 00H  ;A=00H?
 JR Z,CMD4OK ;Yes->CMD24OK
 SLA E  ;ShiftLeft
 DJNZ CMD4L2
 LD DE,CMD4TO ;CMD24:TimeOut
 CALL PUTS
 RET
CMD4TO: DEFM 'CMD24:TimeOut'
 DEFB 0DH,0AH,'$'
CMD4OK: LD DE,CMD4C ;CMD24:OK
 CALL PUTS
 JR CMD4E
CMD4C: DEFM 'CMD24:Done'
 DEFB 0DH,0AH,'$'
CMD4E: LD HL,C24STB ;CMD24StartByte
 LD BC,515  ;STB+512+CRC2Bytes
CMD4L3: PUSH BC
 LD A,(HL)
 CALL CMDW8
 INC HL
 POP BC
 DEC BC
 LD A,B
 OR C
 JR NZ,CMD4L3
CMD4L4: CALL CLKH
 LD A,14
 OUT (PSGA),A
 IN A,(PSGR)
 CALL CLKL
 RRA   ;bit0->Cy
 RL E  ;Ebit0<-Cy
 LD A,E
 LD (C24DR),A ;SaveCMD24DataRes
 AND 1FH  ;Mask  (00011111B)
 CP 05H  ;A=05H?(00000101B)
 JR Z,CMD4WK ;Yes->CMD24WK
 SLA E  ;ShiftLeft
 DJNZ CMD4L4
 LD DE,CMD4WO ;CMD24:ReadTimeOut
 CALL PUTS
 RET
CMD4WO: DEFM 'CMD24:TimeOut'
 DEFB 0DH,0AH,'$'
CMD4WK: LD DE,CMD4WT ;CMD24:WriteOK
 CALL PUTS
 JR CMD4BS
CMD4WT: DEFM 'CMD24:WriteOK'
 DEFB 0DH,0AH,'$'
CMD4BS: LD B,0  ;Counter
 LD E,0FFH  ;E:Temp.
CMD4L5: CALL CLKH
 LD A,14
 OUT (PSGA),A
 IN A,(PSGR)
 CALL CLKL
 RRA   ;bit0->Cy
 RL E  ;Ebit0<-Cy
 LD A,E
 CP 00H  ;A=00H(=Bussy)
 JR NZ,CMD4BK ;No->CMD24BK
 SLA E  ;ShiftLeft
 DJNZ CMD4L5
 LD DE,CMD4BO ;CMD24:BussyTimeOut
 CALL PUTS
 RET
CMD4BO: DEFM 'CMD24:BussyTimeOut'
 DEFB 0DH,0AH,'$'
CMD4BK: LD DE,CMD4FN ;CMD24:WriteFinished
 CALL PUTS
 JR CMD4WE
CMD4FN: DEFM 'CMD24:Finish'
 DEFB 0DH,0AH,'$'
CMD4WE: CALL DMY8
 RET
DMY8:;DummyCLK8-------------------
 CALL CSH  
 CALL DINH
 CALL CLKL
 LD B,8
DMY8L: CALL CLKH
 CALL CLKL
 DJNZ DMY8L
 CALL DINL
 CALL CSL
 RET
CMDX:;CMD_Handler-----------------
 LD A,(HL) ;CMD
 CALL CMDW8
 INC HL
 LD A,(HL) ;ARG1
 CALL CMDW8
 INC HL
 LD A,(HL) ;ARG2
 CALL CMDW8
 INC HL
 LD A,(HL) ;ARG3
 CALL CMDW8
 INC HL
 LD A,(HL) ;ARG4
 CALL CMDW8
 INC HL
 LD A,(HL) ;CRC
 CALL CMDW8
 RET
CMDW8: LD B,8
 CALL CLKL
CMDW8L: CALL CLKH
 RLA
 CALL C,DINH
 CALL NC,DINL
 CALL CLKL
 DJNZ CMDW8L
 RET
;CS_H/L------------------
CSH: PUSH AF
 LD A,15
 OUT (PSGA),A
 LD A,(PSG1)
 SET CS,A
 OUT (PSGW),A
 LD (PSG1),A
 POP AF
 RET
CSL: PUSH AF
 LD A,15
 OUT (PSGA),A
 LD A,(PSG1)
 RES CS,A
 OUT (PSGW),A
 LD (PSG1),A
 POP AF
 RET
;CLK_H/L------------------
CLKH: PUSH AF
 LD A,15
 OUT (PSGA),A
 LD A,(PSG1)
 SET CLK,A
 OUT (PSGW),A
 LD (PSG1),A
 CALL WLP
 POP AF
 RET
CLKL: PUSH AF
 LD A,15
 OUT (PSGA),A
 LD A,(PSG1)
 RES CLK,A
 OUT (PSGW),A
 LD (PSG1),A
 CALL WLP
 POP AF
 RET
;DIN_H/L------------------
DINH: PUSH AF
 LD A,15
 OUT (PSGA),A
 LD A,(PSG1)
 SET DIN,A
 OUT (PSGW),A
 LD (PSG1),A
 LD (DE),A
 POP AF
 RET
DINL: PUSH AF
 LD A,15
 OUT (PSGA),A
 LD A,(PSG1)
 RES DIN,A
 OUT (PSGW),A
 LD (PSG1),A
 LD (DE),A
 POP AF
 RET
REPSG:;RestorePSG---------------
 PUSH AF
 LD A,15
 OUT (PSGA),A
 LD A,(PSG0)
 OUT (PSGW),A
 POP AF
 RET
WLP:;WaitLoop-----------------
 PUSH AF
 PUSH BC
 LD B,WAIT
WLPL: DJNZ WLPL
 POP BC
 POP AF
 RET
;MarkingForDebug----------
MK: PUSH DE
 LD DE,MARK
 CALL PUTS
 POP DE
 RET
MARK: DEFM '.$'
;PutString(BDOS-CALL)-----
PUTS: PUSH AF
 PUSH BC
 PUSH DE
 PUSH HL
 LD C,9
 CALL BDOS
 POP HL
 POP DE
 POP BC
 POP AF
 RET
 END

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

過去の記事一覧

最新のコメント最新のコメント

すべて表示

kik**41010
kik**41010
非公開 / 非公開
人気度
Yahoo!ブログヘルプ - ブログ人気度について

よしもとブログランキング

もっと見る
本文はここまでですこのページの先頭へ

[PR]お得情報

ふるさと納税サイト『さとふる』
11/30まで5周年記念キャンペーン中!
Amazonギフト券1000円分当たる!

その他のキャンペーン

みんなの更新記事