Rev 761 |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
| ?url?
;LAST UPDATE: 30.06.2019 savelij
;
COMINT_ EQU 0X026E
;
NeoGS
SETUPSD EQU 0X5B00
;
SD-CARD NGS
;
:
;HL-
;BCDE-32-
;A-
(=512 )
; /
;
:
;A=0-
;A=1-
COMSDG EX AF,AF'
LD A,IYL
AND A
LD A,(NEXTBYTERST8)
JR Z,COMSDG1
EX (SP),HL
LD A,(HL)
INC HL
EX (SP),HL
COMSDG1 ADD A,A
PUSH HL
LD HL,RET4SDG
EX (SP),HL
PUSH HL
LD HL,NGSSDT
ADD A,L
LD L,A
ADC A,H
SUB L
LD H,A
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
EX AF,AF'
EX (SP),HL
RET
RET4SDG PUSH AF
LD A,IYL
AND A
JR NZ,RET4SDG1
LD (RREG_L),HL
EX (SP),HL
LD (RREG_F),HL
EX (SP),HL
RET4SDG1 POP AF
RET
NGSSDT DW GSDINIT ; SD
DW GSDCMP ;
SD
DW SDRDMUL ; "A"
DW SDWRMUL ; "A"
; "A"
SDWRMUL EX AF,AF'
LD A,_DEV_WRITE
CALL COMM2SD
EX AF,AF'
PUSH DE
PUSH BC
LD BC,GSDAT
SDWRSN1 EX AF,AF'
OUT (GSCOM),A
CALL WC_
LD DE,0X0200
SDWRSN2 OUTI
CALL WD_
DEC DE
LD A,D
OR E
JR NZ,SDWRSN2
EX AF,AF'
DEC A
JR NZ,SDWRSN1
CALL WN_
IN A,(GSDAT)
CP 0X99 ;
/
JP Z,SD_CARD_LOST
POP BC
POP DE
XOR A
RET
;
"A"
SDRDMUL EX AF,AF'
LD A,_DEV_READ
CALL COMM2SD
EX AF,AF'
PUSH DE
PUSH BC
LD D,A
LD A,IYL
BIT 1,A
JR NZ,SDRDSN3
AND A
JR NZ,SDRDSN5
SDRDSN3
; LD A,(R_7FFD)
READ_7FFD
AND 0X10
LD BC,(B0_CPU2)
JR Z,SDRDSN4
LD BC,(B1_CPU2)
SDRDSN4 LD A,0X37
OR B
LD B,A
LD A,C
LD C,LOW (WIN_A0)
OUT (C),A
SDRDSN5 LD A,D
LD BC,GSDAT
SDRDSN1 EX AF,AF'
OUT (GSCOM),A
IN A,(GSCOM)
RRA
JR C,$-3
LD DE,0X0200 ;
SDRDSN2 IN A,(GSCOM)
RLA
JR NC,$-3
INI
DEC DE
LD A,D
OR E
JR NZ,SDRDSN2
EX AF,AF'
DEC A
JR NZ,SDRDSN1
IN A,(GSCOM)
RLA
JR NC,$-3
IN A,(GSDAT)
CP 0X99 ;
/
JP Z,SD_CARD_LOST
LD BC,WIN_P6
XOR A
OUT (C),A
POP BC
POP DE
RET
;
GSDCMP LD H,CMOS_BYTE_01
ROMCALL READCMOS,ROM_RST82
LD A,L
AND M_ACCESSSDG ;
SD
NEOGS
JR Z,SD_NO ;
LD A,(FLAGS_DRV)
AND B_INST_SDG
JR Z,SD_NO ;
XOR A
OUT (GSDAT),A
LD A,0X1D
OUT (GSCOM),A
IN A,(GSCOM)
RRA
JR C,$-3
IN A,(GSDAT)
LD D,A
AND 0X0F
LD E,A
LD A,D
AND 0XF0
RRCA
RRCA
RRCA
RRCA
CP E
LD A,1
JR NZ,GSDINIT1
CALL INSTSDD
;
GSDINIT XOR A
GSDINIT1 CALL COMM2SD
CALL WN_
GSDINIT2 IN A,(GSDAT)
GSDINIT3 CP 0X99 ;
/
JP Z,SD_CARD_LOST
CP 0X77
JR NZ,SD_NO
XOR A
RET
SD_NO LD A,1
RET
;
/
NeoGS
COMM2SD OUT (GSDAT),A ;
LD A,0X1E
OUT (GSCOM),A
CALL WC_ ;
LD A,B
OUT (GSDAT),A
CALL WD_ ; 31-24
LD A,C
OUT (GSDAT),A
CALL WD_ ; 23-16
LD A,D
OUT (GSDAT),A
CALL WD_ ; 15-8
LD A,E
OUT (GSDAT),A
CALL WD_ ; 7-0
EX AF,AF'
OUT (GSDAT),A
EX AF,AF'
DUPL 9,0
RET ; -
;
NeoGS
WD_ IN A,(GSCOM)
RLA
JR C,$-3
RET
;
NeoGS
WN_ IN A,(GSCOM)
RLA
JR NC,$-3
RET
;
NeoGS
WC_ IN A,(GSCOM)
RRA
JR C,$-3
RET
;
NeoGS
INSTSDD LD A,0X80
OUT (GSCTR),A ; NEOGS
EI
HALT
EI
HALT
EI
HALT
DI
LD A,0XF3
OUT (GSCOM),A
LD B,0X30
ISDD1 EI
HALT
DI
DEC B
JR Z,SD_NO
IN A,(GSCOM)
RRA
JR C,ISDD1
LD BC,GSDAT
IN A,(C)
LD DE,0X0300
LD HL,SETUPSD
OUT (C),E
LD A,0X14
OUT (GSCOM),A
CALL WC_
OUT (C),D
CALL WD_
OUT (C),L
CALL WD_
OUT (C),H
CALL WD_
LD HL,UKLAD1
ISDD3 OUTI
CALL WD_
DEC DE
LD A,D
OR E
JR NZ,ISDD3
LD HL,SETUPSD
OUT (C),L
LD A,0X13
OUT (GSCOM),A
CALL WC_
OUT (C),H
EI
HALT
EI
HALT
DI
LD B,3
IN A,(GSDAT)
DEC B
JP Z,SD_NO
CP 0X77
JP NZ,SD_NO
XOR A
RET
UKLAD1 ;
PHASE SETUPSD
;
NeoGS
DI
LD A,0X9C
OUT (SCTRL),A ; NeoGS
CALL AVTODET
AND A
LD A,0X77 ;0X77-NeoGS
JR Z,$+4
LD A,0XCC ;0XCC-
OLDGS
OUT (ZXDATWR),A
OUT (CLRCBIT),A
JP NZ,COMINT_
DI
IN A,(GSCFG0)
RES B_RAMRO,A
OUT (GSCFG0),A
LD HL,0X1D00
LD (0X0300+(0X1E*2)),HL
LD DE,UKLAD2
LD BC,GSDDRVE-GSDDRV
EX DE,HL
LDIR
IN A,(GSCFG0)
SET B_RAMRO,A
OUT (GSCFG0),A
JP COMINT_
;
NeoGS
24MHz
AVTODET IN A,(GSCFG0)
AND 0XCF
OUT (GSCFG0),A ;
; 5-4
; 24 æ
LD D,A
IN A,(GSCFG0)
CP D
LD A,0
RET Z
DEC A
RET
UKLAD2 ;
DEPHASE
PHASE 0X1D00
; SD
GSDDRV DI
IN A,(ZXDATRD) ;
OUT (CLRCBIT),A ; COMANDBIT
LD HL,COMINT_
PUSH HL
PUSH IY
LD IYH,0X77
ADD A,A
LD E,A
LD D,0
LD HL,TABLSDG
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
EX DE,HL
CALL WDY
IN A,(ZXDATRD) ;
31-24
LD B,A
CALL WDY
IN A,(ZXDATRD) ;
23-16
LD C,A
CALL WDY
IN A,(ZXDATRD) ;
15-8
LD D,A
CALL WDY
IN A,(ZXDATRD) ;
7-0
LD E,A
CALL WDY
IN A,(ZXDATRD) ;
-
JP (HL)
TABLSDG DW SDINITG ;0
,
A
;
2
DW SDCMPG ;1
SD
DW RDMULG ;2 "A"
DW WRMULG ;3 "A"
SDCMPG LD A,CMD_58
LD BC,SD_RSTR
CALL OUT_COG
CALL INOOUTG
IN A,(C)
NOP
IN H,(C)
NOP
IN H,(C)
NOP
IN H,(C)
INC A
JP NZ,OK_WORK
LD IYH,0X88 ;
JP OK_WORK
ZAW003G LD IYH,0XEE ;
JP OK_WORK
SDINITG CALL CSHIGHG
LD BC,SD_SEND
LD DE,0X20FF
OUT (C),E
DEC D
JR NZ,$-3
LD BC,SD_RSTR
XOR A
EX AF,AF'
ZAW001G LD HL,CMD00G
CALL OUTCOMG
CALL INOOUTG
EX AF,AF'
DEC A
JR Z,ZAW003G
EX AF,AF'
DEC A
JR NZ,ZAW001G
LD HL,CMD08G
CALL OUTCOMG
CALL INOOUTG
IN H,(C)
NOP
IN H,(C)
NOP
IN H,(C)
NOP
IN H,(C)
LD HL,0
BIT 2,A
JR NZ,ZAW006G
LD H,0X40
ZAW006G LD A,CMD_55
CALL OUT_COG
CALL INOOUTG
LD BC,SD_SEND
LD A,ACMD_41
OUT (C),A
NOP
OUT (C),H
NOP
OUT (C),L
NOP
OUT (C),L
NOP
OUT (C),L
LD A,0XFF
OUT (C),A
CALL INOOUTG
AND A
JR NZ,ZAW006G
ZAW004G LD A,CMD_59
CALL OUT_COG
CALL INOOUTG
AND A
JR NZ,ZAW004G
ZAW005G LD HL,CMD16G
CALL OUTCOMG
CALL INOOUTG
AND A
JR NZ,ZAW005G
JP OK_WORK
CSHIGHG PUSH AF
LD A,M_SDNCS+M_SNCLR ;0X81
OUT (SCTRL),A
POP AF
RET
CSLOWG PUSH AF
LD A,M_SDNCS ;1
OUT (SCTRL),A
POP AF
RET
OUTCOMG CALL CSLOWG
PUSH BC
LD BC,0X0600+SD_SEND
OTIR
POP BC
RET
OUT_COG PUSH BC
CALL CSLOWG
LD BC,SD_SEND
OUT (C),A
XOR A
OUT (C),A
NOP
OUT (C),A
NOP
OUT (C),A
NOP
OUT (C),A
DEC A
OUT (C),A
POP BC
RET
SECM20G PUSH HL
PUSH DE
PUSH BC
PUSH AF
PUSH BC
LD A,CMD_58
LD BC,SD_RSTR
CALL OUT_COG
CALL INOOUTG
IN A,(C)
NOP
IN H,(C)
NOP
IN H,(C)
NOP
IN H,(C)
INC A
JR NZ,SECN20G1
LD IYH,0X99 ;
SECN20G1 DEC A
BIT 6,A
POP HL
JR NZ,SECN20G
EX DE,HL
ADD HL,HL
EX DE,HL
ADC HL,HL
LD H,L
LD L,D
LD D,E
LD E,0
SECN20G POP AF
LD BC,SD_SEND
OUT (C),A
NOP
OUT (C),H
NOP
OUT (C),L
NOP
OUT (C),D
NOP
OUT (C),E
LD A,0XFF
OUT (C),A
POP BC
POP DE
POP HL
RET
INOOUTG PUSH DE
LD DE,0X80FF
INWAITG IN A,(SD_RSTR)
CP E
JR NZ,INEXITG
DEC D
JR NZ,INWAITG
INEXITG POP DE
RET
CMD00G DB 0X40,0X00,0X00,0X00,0X00,0X95 ;GO_IDLE_STATE
CMD08G DB 0X48,0X00,0X00,0X01,0XAA,0X87 ;SEND_IF_COND
CMD16G DB 0X50,0X00,0X00,0X02,0X00,0XFF ;SET_BLOCKEN
;
SD
WRSECTG LD BC,SD_SEND
OUT (SD_SEND),A
IN A,(ZXSTAT)
RRA
JR NC,$-3
OUT (CLRCBIT),A
LD HL,0X0200
WRSECTG1 CALL WDY
IN A,(ZXDATRD)
DEC HL
OUT (C),A
LD A,H
OR L
JR NZ,WRSECTG1
LD A,0XFF
OUT (C),A
NOP
OUT (C),A
RET
;
RDSECTG IN A,(ZXSTAT)
RRA
JR NC,$-3
OUT (CLRCBIT),A
LD BC,SD_RSTR
LD HL,0X0200
RDSECTG1 IN A,(C)
DEC HL
OUT (ZXDATWR),A
CALL WDN
LD A,H
OR L
JR NZ,RDSECTG1
IN A,(C)
NOP
IN A,(C)
RET
; "A"
WRMULG EX AF,AF'
LD A,CMD_25
CALL SECM20G
LD A,IYH
CP 0X99
JR Z,ERR_WR_LOST
WRMULG3 CALL INOOUTG
INC A
JR NZ,WRMULG3
EX AF,AF'
WRMULG1 EX AF,AF'
LD A,0XFC
CALL WRSECTG
WRMULG2 CALL INOOUTG
INC A
JR NZ,WRMULG2
EX AF,AF'
DEC A
JR NZ,WRMULG1
LD C,SD_SEND
LD A,0XFD
OUT (C),A
CALL INOOUTG
INC A
JR NZ,$-4
JR OK_WORK
ERR_WR_LOST LD BC,SD_SEND
OUT (SD_SEND),A
IN A,(ZXSTAT)
RRA
JR NC,$-3
OUT (CLRCBIT),A
LD HL,0X0200
ERRWRLOST1 CALL WDY
IN A,(ZXDATRD)
DEC HL
LD A,H
OR L
JR NZ,ERRWRLOST1
JP OK_WORK
ERR_RD_LOST IN A,(ZXSTAT)
RRA
JR NC,$-3
OUT (CLRCBIT),A
LD BC,SD_RSTR
LD HL,0X0200
ERRRDLOST1 XOR A
OUT (ZXDATWR),A
CALL WDN
DEC HL
LD A,H
OR L
JR NZ,ERRRDLOST1
JP OK_WORK
; "A"
RDMULG EX AF,AF'
LD A,CMD_18
CALL SECM20G
LD A,IYH
CP 0X99
JR Z,ERR_RD_LOST
EX AF,AF'
RDMULG1 EX AF,AF'
CALL INOOUTG
CP 0XFE
JR NZ,$-5
RDMULG5 CALL RDSECTG
EX AF,AF'
DEC A
JR NZ,RDMULG1
LD A,CMD_12
CALL OUT_COG
RDMULG3 CALL INOOUTG
INC A
JR NZ,RDMULG3
OK_WORK CALL CSHIGHG
LD A,IYH
POP IY
OUTSTAT OUT (ZXDATWR),A
;
WDN IN A,(ZXSTAT)
RLA
JR C,$-3
RET
;
WDY IN A,(ZXSTAT)
RLA
JR NC,$-3
RET
GSDDRVE
DEPHASE