Rev 573 |
Rev 678 |
Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
| ?url?
;LAST UPDATE: 25.11.2012 savelij
BUF_512_ EQU DRV_VAR ;200
NUM_DEVICE EQU DRV_VAR+0X2FF ;1
MAS_SLA EQU NUM_DEVICE-1 ;1 MASTER/SLAVE
LOADSCS1 EQU MAS_SLA-2 ;2
LENGHT EQU LOADSCS1-2 ;2
;
: A-
; BCDE-
DI
LD A,(NUM_DEVICE)
AND A
LD HL,READ_SD ;4
SD ZC
JR Z,SETLOADER
DEC A
LD HL,READNGS ;5
SD NGS
JR Z,SETLOADER
DEC A
LD HL,RD_HDDN ;6
HDD NEMO
JR Z,SETLOADER
DEC A
LD HL,RD_HDDS ;7
HDD SMUC
JR Z,SETLOADER
DEC A
LD HL,RD_HDDD ;8
HDD DIVIDE
JR Z,SETLOADER
LD HL,RD_HDDP
SETLOADER LD (LOADSCS1),HL ;
LD A,(MAS_SLA)
AND A
LD A,0XE0
JR Z,SETMASL
LD A,0XF0
SETMASL LD (MAS_SLA),A
LD HL,(FILE_SRC+0X14)
LD (AFILCLS+2),HL
LD HL,(FILE_SRC+0X1A)
LD (AFILCLS),HL
LD A,(FILE_SRC+8)
CP "S"
JP Z,RUNSPG2 ;
SPG
CALL REALSEC ;
CALL LOADLST ;
EXX
LD HL,(BUF_512_+9)
LD (0X5D45),HL ;
LD HL,(BUF_512_+0X0B)
LD (LENGHT),HL ;
LD DE,0X11
ADD HL,DE ; HOBETA
LD A,L
AND A
JR Z,READ01 ;
0
INC H ; +1
READ01 LD A,H
SRL A ;
2
512
ADC A,0 ;
/
DEC A ;
, 1
EXX
JP Z,LDIRBUF ;
1
LD IXL,A ;
-1
EXX
CALL LD_ONES ;
PUSH DE ;
EXX
LD HL,1 ;
ADD HL,DE ;
EX DE,HL
JR NC,READ04
INC BC ;BCDE=BCDE+1
READ04 POP HL ; HL
LD IY,(BYTSSEC) ;LY=-
LD A,IXL
CP IYL ;
JR C,READ02 ;
INC IXL
LD A,IYL
CP 2
JR C,READ07
DEC A
JR READ05
READ07 PUSH HL
CALL RDFATZP ;
CALL LST_CLS ;
FAT
POP HL
JR C,RUNLOAD ;
,
PUSH HL
CALL REALSEC ;
POP HL
LD A,IXL ;
CP IYL ;
JR C,READ02 ;
,
LD A,IYL ;
READ05 CALL LOADSCS ;
LD A,IXL ;
SUB IYL ;
JR Z,RUNLOAD ;
,
LD IXL,A ;
JR READ07 ;
;
,
READ02 AND A
JR Z,READ03
CALL LOADSCS
READ03 PUSH HL
LD A,IXL
DEC A
LD L,A
LD H,0
ADD HL,DE
EX DE,HL
JR NC,READ06
INC BC
READ06 CALL LOADLST
LD BC,(LENGHT)
EX DE,HL
LD HL,0X11
ADD HL,BC
LD B,H
LD C,L
EX DE,HL
POP DE
LD A,B
AND 1
LD B,A
LDIR
;
RUNLOAD LD HL,0X2758
EXX
LD IY,0X5C3A
EI
JP 0X1B7D ;
LDIRBUF LD HL,0X200-0X11
LD DE,(BUF_512_+0X0B)
AND A
SBC HL,DE
JR NC,LDIRBUF1
CALL LD_ONES
JP RUNLOAD
LDIRBUF1 LD HL,BUF_512_+0X11
LD DE,(BUF_512_+9)
LD BC,(BUF_512_+0X0B)
LDIR
JP RUNLOAD
;
,
=501
LD_ONES LD HL,BUF_512_+0X11
LD DE,(BUF_512_+9)
LD BC,0X200-0X11
LDIR
RET
;
LOADSCS PUSH HL
LD HL,(LOADSCS1)
EX (SP),HL
RET
;LX-
;HX-
;LY-TEMP VAR
;HY-
;IXL-
;IXH-TEMP VAR
;IYL-
;IYH-
LD_FILE PUSH BC ;
16
PUSH DE ;
16
PUSH HL ;
CALL REALSEC ;
LD IX,(BYTSSEC)
LD A,IYH ;HY
LD L,A
LD H,0
ADD HL,DE
EX DE,HL
JR NC,LDFILE1
INC BC ;BCDE=
LDFILE1 LD A,IYL;IXL ;LX
CP IXL;IXH ;HX
JP C,LDFILE2
LD A,IXL;IXH ;HX
LDFILE2 ADD A,IYH ;HY
CP IXL;IXH ;HX
LD A,IYL;IXL ;LX
JP C,LDFILE5
LD A,IXL;IXH ;HX
SUB IYH ;HY
LDFILE5 LD IXH,A;IYL,A ;LY,A TEMP VAR ;
POP HL ;
CALL LOADSCS ;
POP DE
POP BC ;
LD A,IYH ;HY
ADD A,IXH;IYL ;LY TEMP VAR
CP IXL;IXH ;HX
JP C,LDFILE3
SUB IXL;IXH ;HX
LDFILE3 LD IYH,A ;HY,A
JP C,LDFILE4
PUSH HL ;
CALL RDFATZP ;
CALL LST_CLS ;
,
?
POP HL ;
RET C ;
,
LDFILE4 LD A,IYL;IXL ;LX
SUB IXH;IYL ;LY TEMP VAR
RET Z
LD IYL,A;IXL,A ;LX,A
JP NZ,LD_FILE
RET
LST_CLS LD A,(CAL_FAT)
AND A
JR NZ,LST_CL1
LD HL,0X0FF7
SBC HL,DE
RET
LST_CL1 DEC A
JR NZ,LST_CL2
LD HL,0XFFF7
SBC HL,DE
RET
LST_CL2 LD HL,0X0FFF
SBC HL,BC
RET NZ
LD HL,0XFFF7
SBC HL,DE
RET
RDFATZP LD BC,(AFILCLS+2)
LD DE,(AFILCLS)
LD A,(CAL_FAT)
AND A
JR Z,RDFATS0
DEC A
JR Z,RDFATS1
EX DE,HL
ADD HL,HL
EX DE,HL
LD HL,0
ADC HL,BC
ADD HL,BC
LD A,E
LD E,D
LD D,L
LD C,H
LD B,0
CALL RDFATS2
INC HL
LD C,(HL)
INC HL
LD B,(HL)
RDFATS5 LD (AFILCLS+2),BC
LD (AFILCLS),DE
RET
RDFATS1 LD BC,0
LD A,E
LD E,D
LD D,C
RDFATS2 PUSH AF
PUSH BC
LD HL,FATSTR
CALL BCDEHLP
CALL LOADLST
POP BC
POP AF
LD E,A
LD D,0
ADD HL,DE
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
JR RDFATS5
RDFATS0 LD H,D
LD L,E
ADD HL,HL
ADD HL,DE
SRL H
RR L
LD A,E
LD E,H
LD D,0
LD B,D
LD C,D
SRL E
PUSH AF
PUSH HL
LD HL,FATSTR
CALL BCDEHLP
CALL LOADLST
POP BC
LD A,B
AND 1
LD B,A
ADD HL,BC
LD B,(HL)
INC HL
LD A,H
CP HIGH (BUF_512_)+2
JR NZ,RDFATS4
PUSH BC
LD BC,0
INC DE
CALL LOADLST
POP BC
RDFATS4 POP AF
LD D,(HL)
LD E,B
LD BC,0
RRA
JR NC,RDFATS3
REPT 4
SRL D
RR E
ENDM
RDFATS3 LD A,D
AND 0X0F
LD D,A
JR RDFATS5
;
;
BCDE=
FAT
;
BCDE=
REALSEC LD BC,(AFILCLS+2)
LD DE,(AFILCLS)
LD A,B
OR C
OR D
OR E
JR NZ,REALSE1
LD DE,(FATSTR)
LD BC,(FATSTR+2)
LD HL,SEC_FAT
PUSH HL
CALL BCDEHLP
POP HL
JP BCDEHLP
REALSE1 LD HL,0XFFFE
EX DE,HL
ADD HL,DE
EX DE,HL
INC HL
ADC HL,BC ;
-2
LD A,(BYTSSEC)
JR REALSE3
REALSE2 SLA E
RL D
RL L
RL H
REALSE3 RRCA
JR NC,REALSE2 ;
LD B,H
LD C,L
LD HL,STARTRZ
CALL BCDEHLP ;
LD HL,FRSTDAT
JP BCDEHLP ;
BCDE200 LD E,D
LD D,C
LD C,B
LD B,0
LD A,2
JR BCDE_A
;BCDE>>A=BCDE
BCDE_A1 SRL B
RR C
RR D
RR E
BCDE_A RRCA
JR NC,BCDE_A1
RET
;(ADR)-BCDE=BCDE
BCDEHLM LD A,(HL)
INC HL
SUB E
LD E,A
LD A,(HL)
INC HL
SBC A,D
LD D,A
LD A,(HL)
INC HL
SBC A,C
LD C,A
LD A,(HL)
SBC A,B
LD B,A
RET
;(ADR)+BCDE=BCDE
BCDEHLP LD A,(HL)
INC HL
ADD A,E
LD E,A
LD A,(HL)
INC HL
ADC A,D
LD D,A
LD A,(HL)
INC HL
ADC A,C
LD C,A
LD A,(HL)
ADC A,B
LD B,A
RET
;HLDE+BC=HLDE
HLDEPBC EX DE,HL
ADD HL,BC
EX DE,HL
LD BC,0
ADC HL,BC
RET
;
LOADLST LD HL,BUF_512_
PUSH HL
LD A,1
CALL LOADSCS
POP HL
RET
;================ ZC SD ===================
READ_SD PUSH AF
LD A,1
OUT (P_CONF),A
POP AF
EX AF,AF'
LD A,CMD_18
CALL SECM200
EX AF,AF'
RDMULT1 EX AF,AF'
RDMULT2 CALL IN_OOUT
CP 0XFE
JR NZ,RDMULT2
PUSH BC
LD BC,P_DATA
INIR
NOP
INIR
NOP
IN A,(C)
NOP
IN A,(C)
POP BC
EX AF,AF'
DEC A
JR NZ,RDMULT1
LD A,CMD_12
CALL OUT_COM
RDMULT3 CALL IN_OOUT
INC A
JR NZ,RDMULT3
PUSH AF
LD A,3
OUT (P_CONF),A
XOR A
OUT (P_DATA),A
POP AF
RET
SECM200 PUSH HL
PUSH DE
PUSH BC
PUSH AF
PUSH BC
LD A,CMD_58
LD BC,P_DATA
CALL OUT_COM
CALL IN_OOUT
IN A,(C)
NOP
IN H,(C)
NOP
IN H,(C)
NOP
IN H,(C)
BIT 6,A
POP HL
JR NZ,SECN200
EX DE,HL
ADD HL,HL
EX DE,HL
ADC HL,HL
LD H,L
LD L,D
LD D,E
LD E,0
SECN200 POP AF
LD BC,P_DATA
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
OUT_COM PUSH BC
LD BC,P_DATA
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
IN_OOUT PUSH DE
LD DE,0X20FF
IN_WAIT IN A,(P_DATA)
CP E
JR NZ,IN_EXIT
IN_NEXT DEC D
JR NZ,IN_WAIT
IN_EXIT POP DE
RET
;=========================================================
;===============
SD NEOGS=========================
;
"A"
READNGS EX AF,AF'
LD A,_DEV_READ
CALL COMM2SD
EX AF,AF'
PUSH DE
PUSH BC
LD BC,GSDAT
SDRDSN1 EX AF,AF'
OUT (GSCOM),A
CALL WC_
LD DE,0X0200
SDRDSN2 CALL WN_
INI
DEC DE
LD A,D
OR E
JR NZ,SDRDSN2
EX AF,AF'
DEC A
JR NZ,SDRDSN1
CALL WN_
SDRDSN3 IN A,(C)
CP 0X77
JR NZ,SDRDSN3
POP BC
POP DE
XOR A
RET
;
/
NeoGS
COMM2SD OUT (GSDAT),A ;
LD A,0X1E
OUT (GSCOM),A ;
CALL WC_
LD A,B
OUT (GSDAT),A ; 31-24
CALL WD_
LD A,C
OUT (GSDAT),A ; 23-16
CALL WD_
LD A,D
OUT (GSDAT),A ; 15-8
CALL WD_
LD A,E
OUT (GSDAT),A ; 7-0
CALL WD_
EX AF,AF'
OUT (GSDAT),A ; -
EX AF,AF'
DUPL 9,0
RET
;
NeoGS
WD_ IN A,(GSCOM)
RLA
JR C,WD_
RET
;
NeoGS
WN_ IN A,(GSCOM)
RLA
JR NC,WN_
RET
;
NeoGS
WC_ IN A,(GSCOM)
RRA
JR C,WC_
RET
;==========================================================
;==================
NEMO HDD=======================
P_1F7 EQU 0XF0 ;
/
P_1F6 EQU 0XD0 ;CHS-
/LBA
24-27
P_1F5 EQU 0XB0 ;CHS- 8-15/LBA
16-23
P_1F4 EQU 0X90 ;CHS- 0-7/LBA
8-15
P_1F3 EQU 0X70 ;CHS-
/LBA
0-7
P_1F2 EQU 0X50 ;
P_1F1 EQU 0X30 ; /
P_1F0 EQU 0X10 ;
P_3F6 EQU 0XC8 ;
/
P_HI EQU 0X11 ;
8
PRT_RW EQU P_1F0*256+P_HI ;
/
RD_HDDN PUSH BC
PUSH DE
PUSH DE
EX AF,AF'
LD A,(MAS_SLA)
OR B
LD E,C
LD BC,0XFF00+P_1F6
OUT (C),A
LD C,P_1F5
OUT (C),E
POP DE
LD C,P_1F4
OUT (C),D
LD C,P_1F3
OUT (C),E
LD C,P_1F2
EX AF,AF'
OUT (C),A
EX AF,AF'
LD C,P_1F7
LD A,0X20
OUT (C),A
LD C,P_1F7
HDDRD1 IN A,(C)
AND 0X88
CP 8
JR NZ,HDDRD1
EX AF,AF'
HDDRD2 EX AF,AF'
LD A,0X40
LD C,P_1F0
READSC1 IN E,(C)
INC C
IN D,(C)
DEC C
LD (HL),E
INC HL
LD (HL),D
INC HL
IN E,(C)
INC C
IN D,(C)
DEC C
LD (HL),E
INC HL
LD (HL),D
INC HL
IN E,(C)
INC C
IN D,(C)
DEC C
LD (HL),E
INC HL
LD (HL),D
INC HL
IN E,(C)
INC C
IN D,(C)
DEC C
LD (HL),E
INC HL
LD (HL),D
INC HL
DEC A
JR NZ,READSC1
LD C,P_1F7
HDDRD3 IN A,(C)
AND 0X80
JR NZ,HDDRD3
EX AF,AF'
DEC A
JR NZ,HDDRD2
POP DE
POP BC
XOR A
RET
;=============================================================
;==================
=======================
PS1F7 EQU 0XFF ;0XFFBE
/
PS1F6 EQU 0XFE ;0XFEBE CHS-
/LBA
24-27
PS1F5 EQU 0XFD ;0XFDBE CHS- 8-15/LBA
16-23
PS1F4 EQU 0XFC ;0XFCBE CHS- 0-7/LBA
8-15
PS1F3 EQU 0XFB ;0XFBBE CHS-
/LBA
0-7
PS1F2 EQU 0XFA ;0XFABE
PS1F1 EQU 0XF9 ;0XF9BE /
PS1F0 EQU 0XF8 ;0XF8BE
PS3F6 EQU 0XFE ;0XFEBE
/
PSHI EQU 0XD8 ;0XD8BE
8
PRTSRW EQU PS1F0*256+PSHI ;
/
LOW_PRT EQU 0XBE ;
SMUC IDE
SMUCSYS EQU 0XFFBA ;
SMUC
SMUCVER EQU 0X5FBA ;
SMUC
RD_HDDS PUSH BC
PUSH DE
CALL SETSREG
EX AF,AF'
LD B,PS1F7
LD A,0X20
CALL SOUTPRT
HDSRDM2 CALL SINPRT
AND 0X88
CP 8
JR NZ,HDSRDM2
EX AF,AF'
HDSRDM1 PUSH AF
LD DE,PRTSRW
LD A,0X40
RDCSSC1 EX AF,AF'
LD B,D
CALL SINPRT
LD (HL),A
INC HL
LD B,E
CALL SINPRT
LD (HL),A
INC HL
LD B,D
CALL SINPRT
LD (HL),A
INC HL
LD B,E
CALL SINPRT
LD (HL),A
INC HL
LD B,D
CALL SINPRT
LD (HL),A
INC HL
LD B,E
CALL SINPRT
LD (HL),A
INC HL
LD B,D
CALL SINPRT
LD (HL),A
INC HL
LD B,E
CALL SINPRT
LD (HL),A
INC HL
EX AF,AF'
DEC A
JR NZ,RDCSSC1
LD B,PS1F7
HDSRDM3 CALL SINPRT
AND 0X80
JR NZ,HDSRDM3
POP AF
DEC A
JR NZ,HDSRDM1
POP DE
POP BC
RET
SETSREG PUSH DE
LD D,B
LD E,C
EX AF,AF'
LD A,(MAS_SLA)
OR D
LD BC,(PS1F6*0X0100)+LOW_PRT
CALL SOUTPRT
LD B,PS1F5
LD A,E
CALL SOUTPRT
POP DE
LD B,PS1F4
LD A,D
CALL SOUTPRT
LD B,PS1F3
LD A,E
CALL SOUTPRT
LD B,PS1F2
EX AF,AF'
SOUTPRT PUSH HL
LD HL,0X3FF0
EX (SP),HL
JP 0X3D2F
SINPRT PUSH HL
LD HL,0X3FF3
EX (SP),HL
JP 0X3D2F
;=============================================================
;==================
DIVEDE ======================
PV1F7 EQU 0XBF ;
/
PV1F6 EQU 0XBB ;CHS-
/LBA
24-27
PV1F5 EQU 0XB7 ;CHS- 8-15/LBA
16-23
PV1F4 EQU 0XB3 ;CHS- 0-7/LBA
8-15
PV1F3 EQU 0XAF ;CHS-
/LBA
0-7
PV1F2 EQU 0XAB ;
PV1F1 EQU 0XA7 ; /
PV1F0 EQU 0XA3 ;
PV3F6 EQU 0XC8 ;
/
(UNUSED ON DIVIDE)
PVHI EQU 0XA3 ;
8
PRTVRW EQU PV1F0*256+PVHI ;
/
RD_HDDD PUSH BC
PUSH DE
CALL SETVREG
EX AF,AF'
LD C,PV1F7
LD A,0X20
OUT (C),A
LD C,PV1F7
HDVRD1 IN A,(C)
AND 0X88
CP 8
JR NZ,HDVRD1
EX AF,AF'
HDVRD2 EX AF,AF'
CALL READVSEC
LD C,PV1F7
HDVRD3 IN A,(C)
AND 0X80
JR NZ,HDVRD3
EX AF,AF'
DEC A
JR NZ,HDVRD2
EXITVHD POP DE
POP BC
LD A,B
AND 0X0F
LD B,A
XOR A
RET
SETVREG PUSH DE
LD D,B
LD E,C
LD BC,0XFF00+PV1F6
OUT (C),D
EX AF,AF'
LD C,PV1F7
SETVRE1 IN A,(C)
AND 0X80
JR NZ,SETVRE1
LD C,PV1F5
OUT (C),E
POP DE
LD C,PV1F4
OUT (C),D
LD C,PV1F3
OUT (C),E
LD C,PV1F2
EX AF,AF'
OUT (C),A
RET
;READ SECTOR (512 BYTES)
READVSEC LD A,0X40
LD C,PV1F0
READVSC1 REPT 8
INI
INC B
ENDM
DEC A
JR NZ,READVSC1
RET
;==================
DIVIDE ======================
;==================
PROFI =======================
PP_1F7W EQU 0X07EB ;W
PP_1F7R EQU 0X07CB ;R
PP_1F6W EQU 0X06EB ;W CHS-
/LBA
24-27
PP_1F6R EQU 0X06CB ;R CHS-
/LBA
24-27
PP_1F5W EQU 0X05EB ;W CHS- 8-15/LBA
16-23
PP_1F5R EQU 0X05CB ;R CHS- 8-15/LBA
16-23
PP_1F4W EQU 0X04EB ;W CHS- 0-7/LBA
8-15
PP_1F4R EQU 0X04CB ;R CHS- 0-7/LBA
8-15
PP_1F3W EQU 0X03EB ;W CHS-
/LBA
0-7
PP_1F3R EQU 0X03CB ;R CHS-
/LBA
0-7
PP_1F2W EQU 0X02EB ;W
PP_1F2R EQU 0X02CB ;R
PP_1F1W EQU 0X01EB ;W
PP_1F1R EQU 0X01CB ;R
PP_1F0W EQU 0X00EB ;W
8
PP_1F0R EQU 0X00CB ;R
8
PP_3F6 EQU 0X06AB ;W
/
PP_HIW EQU 0XFFCB ;W
8
PP_HIR EQU 0XFFEB ;R
8
RD_HDDP PUSH BC
PUSH DE
PUSH AF
PUSH BC
LD BC,0XDFFD
LD A,0X20
OUT (C),A
POP BC
LD A,(MAS_SLA)
OR B
LD B,A
POP AF
CALL SETHPREG
EX AF,AF'
LD BC,PP_1F7W
LD A,0X20
OUT (C),A
LD BC,PP_1F7R
HDDPRD1 IN A,(C)
AND 0X88
CP 8
JR NZ,HDDPRD1
EX AF,AF'
HDDPRD2 EX AF,AF'
CALL READPSEC
LD BC,PP_1F7R
HDDPRD3 IN A,(C)
AND 0X80
JR NZ,HDDPRD3
EX AF,AF'
DEC A
JR NZ,HDDPRD2
LD BC,0XDFFD
XOR A
OUT (C),A
POP DE
POP BC
LD A,B
AND 0X0F
LD B,A
XOR A
RET
SETHPREG PUSH DE
LD D,B
LD E,C
LD BC,PP_1F6W
OUT (C),D
EX AF,AF'
LD BC,PP_1F7R
SETHPRE1 IN A,(C)
AND 0X80
JR NZ,SETHPRE1
LD BC,PP_1F5W
OUT (C),E
POP DE
LD BC,PP_1F4W
OUT (C),D
LD BC,PP_1F3W
OUT (C),E
LD BC,PP_1F2W
EX AF,AF'
OUT (C),A
RET
READPSEC LD A,0X40
READPSC1 REPT 4
LD BC,PP_1F0R
IN E,(C)
LD BC,PP_HIR
IN D,(C)
LD (HL),E
INC HL
LD (HL),D
INC HL
ENDM
DEC A
JR NZ,READPSC1
RET
;==================
PROFI =======================