Rev 782 |
Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
| ?url?
;LAST UPDATE: 30.06.2019 savelij
MASTER EQU 0
SLAVE EQU 0X80
;DRV_A EQU 0 ;DRIVE A
;DRV_B EQU 1 ;DRIVE B
;DRV_C EQU 2 ;DRIVE C
;DRV_D EQU 3 ;DRIVE D
;SDZ EQU 4 ;SD ZC
;SDG EQU 5 ;SD NEOGS
;HDDN EQU 6 ;HDD NEMO
;HDDS EQU 7 ;HDD SMUC
;HDDV EQU 8 ;HDD DIVIDE
EXTERNAL EQU 0 ;
INTERNAL EQU 1 ;
INT4EXT EQU 3 ;
B_SDZ EQU %00000001
B_SDG EQU %00000010
B_HDD EQU %00000100
B_NEW_SD EQU %01000000
B_INST_SDG EQU %10000000
;
TO_DRV PUSH HL
LD L,A
LD A,IYL
AND A
LD A,L
JR NZ,TO_DRV1
CALL P5_READ_BYTE
LD A,(RREG_A)
LD DE,(RREG_E)
LD BC,(RREG_C)
LD HL,(RREG_L)
EX (SP),HL
TO_DRV1 LD HL,(GO_DEV)
EX (SP),HL
RET
;
COM_DEV EX AF,AF'
CALL P5_READ_BYTE
LD A,(NEXTBYTERST8)
PUSH IY
LD IYL,EXTERNAL ;
NEXT_ICOM_DEV PUSH IX
PUSH HL
LD HL,EXITDEV
EX (SP),HL
PUSH HL
ADD A,A
ADD A,LOW (TABLDEV)
LD L,A
ADC A,HIGH (TABLDEV)
SUB L
LD H,A
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
EX AF,AF'
EX (SP),HL
RET
EXITDEV POP IX
POP IY
RET
;
ICOM_DEV EX AF,AF'
EX (SP),HL
LD A,(HL)
INC HL
EX (SP),HL
PUSH IY
LD IYL,INTERNAL ;
JR NEXT_ICOM_DEV
TABLDEV DW DEVFIND ;00
DW SET_VOL ;01
DW KOL_VOL ;02
DW GET_FNDVOLUME ;03
DW TO_DRV ;04
DW SET_DEVICE ;05 LBA
DW CONTROL_SD ;06 SD
DW COMHDDNEX ;07
HDD NEMO (
)
DW FREINIT_VOL ;08
;
;+0(1)-0-DRIVE A
; 1-DRIVE B
; 2-DRIVE C
; 3-DRIVE D
; 4-SD ZC
; 5-SD NEOGS
; 6-HDD NEMO
; 7-HDD SMUC
; 8-HDD DIVIDE
;+1(1)- SD- 0
;
HDD/CD 0-MASTER, 1-SLAVE
;+2(1)-
,
;
:
;00=01-FAT12
;01=04,06,0E-FAT16
;02=0B,0C-FAT32
;+3(4)-
;+7(1)-
;
;HL-
;
:
;A--
DEVFIND LD A,(FLAGS_DRV)
AND B_NEW_SD
JR NZ,.L1
LD HL,0XFE
LD IX,BUF_TABLVOL
ROMCALL CRC16_FAST,ROM_RST81
LD BC,(BUF_TABLVOL+0XFE)
AND A
SBC HL,BC
JP Z,KOL_VOL
.L1 LD HL,FLAGS_DRV
LD A,B_NEW_SD!0XFF
AND (HL)
LD (HL),A
PUSH IY
XOR A
LD (KOLDVOL),A
LD HL,BUF_TABLVOL
LD DE,BUF_TABLVOL+1
LD BC,0XEF
LD (HL),B
LDIR
LD IX,DEVICES
LD IYL,INTERNAL
LD A,(HDDTIMEOUT)
.L2 EI
HALT
HALT
DI
DEC A
JR NZ,.L2
INC A
LD (HDDTIMEOUT),A
;NEMO
LD HL,BUF_512 ;
(512 )
CALL COMHDDN
DB _DEV_INIT ;
LD A,H
AND A
JR NZ,.L3
LD (IX+0),_HDD_NEMO_MASTER+MASTER
INC IX
.L3
;SD ON NEOGS
LD H,CMOS_BYTE_01
ROMCALL READCMOS,ROM_RST82
LD A,L
AND M_ACCESSSDG ;
SD
NEOGS
JR Z,.L4 ;
,
CALL INSTSDD ;C
SD NEOGS
AND A
JR NZ,.L4 ;
NEOGS
LD HL,FLAGS_DRV
SET 7,(HL) ;
CALL COMSDG
DB _DEV_INIT ; SD NEOGS
AND A
JR NZ,.L4
LD (IX+0),_SD_SDG
INC IX
.L4
;USB FLASH
IF USB_ENABLE
CALL COMUSBF
DB _DEV_INIT
AND A
JR Z,.L8
LD (IX+0),_SL_USBF
INC IX
ENDIF
.L8
;SD ON Z-CONTROLLER
CALL COMSDZ
DB _DEV_INIT ; SD
AND A
JR NZ,.L5
LD (IX+0),_SD_SDZ
INC IX
.L5 LD (IX+0),0XFF ;
CALL FIND_SD
LD HL,DEVICES
LD IX,BUF_TABLVOL
LD A,(HL)
INC A
JR Z,.L7
.L6 CALL FINDVOL
INC HL
LD A,(HL)
INC A
JR NZ,.L6
.L7 CALL SETVOLD ;
POP IY
SCF
JP Z,KOLVOL1 ;
DEC A
LD (SETDVOL),A
;====
====
INIT_VOLS LD IX,BUF_TABLVOL
LD A,(SETDVOL)
PUSH AF ;
LD A,(KOLDVOL)
LD E,A
LD D,0
IV_SETDRV2 PUSH AF
LD A,D
LD (SETDVOL),A
LD A,(IX+0)
CP _SD_SDZ
LD HL,COMSDZ
JR Z,IV_SETDRV1
CP _SL_USBF
LD HL,COMUSBF
JR Z,IV_SETDRV1
CP _SD_SDG
LD HL,COMSDG
JR Z,IV_SETDRV1
LD HL,COMHDDN
IV_SETDRV1 LD (GO_DEV),HL ;
LD A,(IX+2)
LD HL,BUF_TABLVOL
PUSH DE
CALL ICOM_FAT
DB _INIT_FATVARS
PUSH AF
CALL SAVE_FNDVOL
POP AF
POP DE
CALL C,DEL_VOL ;
,
INC D
LD BC,8
ADD IX,BC
POP AF
DEC A
JR NZ,IV_SETDRV2
;====
====
POP AF
CALL SET_VOL1 ;
LD A,(KOLDVOL)
DEC A
CALL C,SET_VOL1 ;
,
CALL ICOM_FAT
DB _INIT_TEKDIR
LD HL,0XFE
LD IX,BUF_TABLVOL
ROMCALL CRC16_FAST,ROM_RST81
LD (CRC_DRVS),HL
KOL_VOL LD A,IYL
AND A
JR NZ,IKOL_VOL
LD HL,(ADRTEKV) ;
INC HL
INC HL
LD A,(HL) ;
LD HL,(KOLDVOL) ;D-
, E-
LD (RREG_E),HL
AND A
KOLVOL1 PUSH AF
POP HL
LD (RREG_F),HL
RET
;
DEL_VOL PUSH DE
PUSH IX
POP HL
EX DE,HL
LD HL,8
ADD HL,DE
LD C,L
LD A,26*8
SUB C
LD C,A
LD B,0
LDIR
LD BC,-8
ADD IX,BC
LD HL,KOLDVOL
DEC (HL)
POP DE
DEC D
RET
FINDVOL PUSH HL
LD A,(HL)
LD (TEK_TYPE),A
AND 0X7F
CP _HDD_NEMO_MASTER
LD HL,COMHDDN
JR Z,FINDVOL1
CP _SD_SDG
LD HL,COMSDG
JR Z,FINDVOL1
LD HL,COMSDZ
FINDVOL1 LD (GO_DEV),HL ;
LD DE,0
LD B,D
LD C,D ;
0
LD A,1 ;1
LD HL,BUF_512 ;
PUSH HL
LD IYL,INTERNAL
CALL TO_DRV
DB _DEV_READ
DEC HL
LD D,(HL)
DEC HL
LD E,(HL)
LD HL,0XAA55
AND A
SBC HL,DE
POP IY
LD (ADRTEKV),IX
CALL Z,READ_MBR
POP HL
RET
;
IKOL_VOL LD HL,(ADRTEKV) ;
INC HL
INC HL
LD A,(HL) ;
LD DE,(KOLDVOL) ;D-
, E-
LD HL,BUF_TABLVOL ;
AND A
RET
;
SETVOLD LD A,IXL
RRCA
RRCA
RRCA
AND 0X1F
LD (KOLDVOL),A
RET
;
FREINIT_VOL LD L,A
LD A,IYL
AND A
JR Z,FREINITVOL1
LD A,(RREG_A)
FREINITVOL1 LD IYL,INTERNAL
CALL SET_VOL1
CALL INIT_FATVARS
JP INIRTSC
;
SET_VOL LD L,A
LD A,IYL
AND A
LD A,L
JR NZ,SET_VOL1
LD A,(RREG_A)
LD HL,KOLVOL1
PUSH HL
SET_VOL1 PUSH AF
CALL SAVE_FNDVOL
POP AF
SET_VOL_MNT LD HL,KOLDVOL
CP (HL)
CCF
RET C
LD (SETDVOL),A
LD L,A
LD H,0
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD DE,BUF_TABLVOL
ADD HL,DE
LD (ADRTEKV),HL
LD A,(HL)
; CP 4
; LD HL,DISKETA ;
; JR C,SET_DRV
CP _SL_USBF
LD HL,COMUSBF
JR Z,SET_DRV
CP _SD_SDZ
LD HL,COMSDZ
JR Z,SET_DRV
CP _SD_SDG
LD HL,COMSDG
JR Z,SET_DRV
LD HL,COMHDDN
SET_DRV LD (GO_DEV),HL
CALL LOAD_FNDVOL
LD HL,0XFE
PUSH IX
LD IX,BUF_TABLVOL
ROMCALL CRC16_FAST,ROM_RST81
POP IX
LD (CRC_DRVS),HL
XOR A
RET
SAVE_FNDVOL PUSH IX
LD HL,0XFE
LD IX,ERORDRV
ROMCALL CRC16_FAST,ROM_RST81
POP IX
LD (CRC_VOL),HL ;
CRC
EVOPORT WIN_P5,RAM_FATVARS
LD A,(SETDVOL)
ADD A,HIGH (CPU5+BUF_ALLVOL)+4
LD D,A
LD E,0
LD HL,BUF_TEKVOL
LD BC,0X100
LDIR
RET
LOAD_FNDVOL EVOPORT WIN_P5,RAM_FATVARS
LD A,(SETDVOL)
ADD A,HIGH (CPU5+BUF_ALLVOL)+4
LD H,A
LD L,0
LD DE,BUF_TEKVOL
LD BC,0X100
LDIR
; PUSH IX
; LD HL,0XFE
; LD IX,ERORDRV
; ROMCALL CRC16_FAST,P_ADDON1
; POP IX
; LD DE,(CRC_VOL)
; AND A
; SBC HL,DE
; JP NZ,REDEVFIND
CALL ICOM_FAT
DB _INIT_TEKDIR
RET
CMP_SDCARD LD A,(SETDVOL)
CP _SD_SDG
JR NZ,CMPSDCARD1
LD H,CMOS_BYTE_01
ROMCALL READCMOS,ROM_RST82
LD A,L
AND M_ACCESSSDG ;
SD
NEOGS
RET Z
CMPSDCARD1 PUSH IY
LD IYL,INTERNAL
CALL TO_DRV
DB _DEV_STATUS
POP IY
INC A
RET
READ_MBR LD DE,0X01BE ;
0
MBR
PUSH IY
ADD IY,DE ;
LD BC,0X0400 ;
4
FAT
RDMBR0 LD A,(IY) ;
16
AND A ;
0
JR Z,RDMBR1
CP 0X80 ; 0X80 (
)
JR NZ,RDMBR2
RDMBR1 LD A,(IY+4) ;
CALL CP_RAZD ;
JR NZ,RDMBR2 ;
FAT
16
INC C
RDMBR2 LD DE,0X10
ADD IY,DE
DJNZ RDMBR0 ;
16 MBR
LD A,C
AND A
POP HL
JP NZ,SCANMBR
PUSH HL
POP IY
LD C,(IY+0X0D)
XOR A
LD E,A
LD B,8
RR C
ADC A,0
DJNZ $-4
DEC A
JR NZ,$+3
INC E
LD A,(IY+0X0E)
OR (IY+0X0F)
JR Z,$+3
INC E
; LD A,(IY+0X13)
; OR (IY+0X14)
; JR Z,$+3
; INC E
; LD A,(IY+0X20)
; OR (IY+0X21)
; OR (IY+0X22)
; OR (IY+0X22)
; JR Z,$+3
; INC E
LD A,(IY+0X15)
AND 0XF0
CP 0XF0
JR NZ,$+3
INC E
LD A,E
CP 3;4
RET NZ
LD A,(TEK_TYPE)
BIT 7,A
LD B,0
JR Z,$+3
INC B
AND 0X7F
LD C,A
PUSH IX
POP HL
XOR A
LD (HL),C
INC HL
LD (HL),B
INC HL
LD (HL),0XFF
INC HL
LD (HL),A
INC HL
LD (HL),A
INC HL
LD (HL),A
INC HL
LD (HL),A
INC HL
LD (HL),A
LD DE,8
ADD IX,DE
INIT_VOL PUSH IY
LD IYL,INTERNAL
CALL SETVOLD
DEC A
LD (SETDVOL),A
LD L,A
LD H,0
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD DE,BUF_TABLVOL
ADD HL,DE
LD (ADRTEKV),HL
LD A,(HL)
AND 0X7F
; CP 4
; LD HL,DISKETA ;
; JR C,DSET_DRV
CP _SL_USBF
LD HL,COMUSBF
JR Z,DSET_DRV
CP _SD_SDZ
LD HL,COMSDZ
JR Z,DSET_DRV
CP _SD_SDG
LD HL,COMSDG
JR Z,DSET_DRV
LD HL,COMHDDN
DSET_DRV LD (GO_DEV),HL
CALL IKOL_VOL
CALL ICOM_FAT
DB _INIT_FATVARS
LD (IX-6),A
POP IY
RET
;
:
;A-BIT 7-0/1-MASTER/SLAVE
;BITS 6-0-
SCANMBR LD DE,0X01BE
ADD HL,DE
EXX
LD A,(TEK_TYPE)
BIT 7,A
LD B,0
JR Z,$+3
INC B
AND 0X7F
LD C,A
EXX
LD A,4
SCNMBR0 PUSH AF
LD A,(HL)
LD C,4
ADD HL,BC
LD C,0X0C
AND A
JR Z,SCNMBR1
CP 0X80
JR NZ,SCNMBR2
SCNMBR1 LD A,(HL)
AND A
JR Z,SCNMBR2
CALL CP_RAZD
JR NZ,SCNMBR2
SCNMBR3 EXX
LD (IX+0),C
LD (IX+1),B
EXX
LD (IX+2),E ; FAT
PUSH IX
POP DE
INC DE
INC DE
INC DE
LD C,4
ADD HL,BC
LDI
LDI
LDI
LDI
LD (IX+7),0 ;
SCNMBR4 LD C,8
ADD IX,BC
LD C,4
SCNMBR2 ADD HL,BC
POP AF
DEC A
JR NZ,SCNMBR0
RET
SET_DEVICE PUSH AF
PUSH HL
LD A,B
AND 0X0F
LD B,A
LD HL,(ADRTEKV)
INC HL
LD A,(HL)
AND 1 ;MASTER SLAVE?
RLCA
RLCA
RLCA
RLCA
OR 0XE0 ;
LBA
OR B
LD B,A ;
MASTER SLAVE
POP HL
POP AF
RET
;
CP_RAZD LD E,1 ;FAT16
CP 4
RET Z
CP 6
RET Z
CP 0X0E
RET Z
LD E,2 ;FAT32
CP 0X0B
RET Z
CP 0X0C
RET Z
LD E,0 ;FAT12
CP 1
RET
;
HDD NEMO
COMHDDNEX CALL P5_READ_BYTE
LD A,(RREG_AA)
EX AF,AF'
LD A,(RREG_A)
LD DE,(RREG_E)
LD BC,(RREG_C)
LD HL,(RREG_L)
CALL COMHDDN
LD (RREG_A),A
LD (RREG_L),HL
LD (RREG_E),DE
LD (RREG_C),BC
RET
;
GET_FNDVOLUME LD BC,0X100 ;
256
LD DE,(RREG_L) ;
LD HL,BUF_TABLVOL-CPU6
JP LDIR_BYTES
CONTROL_SD LD A,(FLAGS_DRV)
PUSH AF
CALL FIND_SD
LD C,A
AND 3
LD (RREG_A),A
LD A,C
POP BC
CP B
JP NZ,SD_CARD_LOST
RET
FIND_SD PUSH IY
LD IYL,INTERNAL
LD E,0
LD A,(FLAGS_DRV)
AND B_INST_SDG
JR Z,CRTLSD1 ;
PUSH HL
PUSH DE
CALL COMSDG
DB _DEV_STATUS
POP DE
POP HL
AND A
SET 1,E ;
SD NEOGS
JR Z,CRTLSD1
RES 1,E ;
EX DE,HL
LD HL,FLAGS_DRV
RES 7,(HL)
EX DE,HL
CRTLSD1 PUSH HL
CALL COMSDZ
DB _DEV_STATUS
POP HL
AND A
SET 0,E ;
SD ZC
JR Z,CRTLSD2
RES 0,E ;
CRTLSD2 POP IY
LD HL,FLAGS_DRV
LD A,0XFC
AND (HL)
OR E
LD (HL),A
RET