Rev 831 |
Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
| ?url?
;LAST UPDATE: 13.03.2020 savelij
include ../../macros.a80
include ../../define.a80
include ../../global_vars.a80
include ../../ports_ngs.a80
include ../../sdcomand.a80
include ../../ports_ide.a80
include ../../nums_devices.a80
DRV_VAR EQU 0X4000
ORG DRV_VAR+0X200
include fat_vars.a80
ORG DRV_VAR+0X300
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)
CP _SD_SDZ
LD HL,READ_SD ;
SD ZC
JR Z,SETLOADER
CP _SD_SDG
LD HL,READNGS ;
SD NGS
JR Z,SETLOADER
CP _HDD_NEMO_MASTER
LD HL,RD_HDDN ;
HDD NEMO
JR Z,SETLOADER
CP _HDD_SMUC_MASTER
LD HL,RD_HDDS ;
HDD SMUC
JR Z,SETLOADER
CP _HDD_DIVIDE_MASTER
LD HL,RD_HDDD ;
HDD DIVIDE
JR Z,SETLOADER
LD HL,RD_HDDP ;
HDD PROFI
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+9)
CP "P"
JP Z,RUNSPG2 ;
SPG
CP "N"
JP Z,RUNSNA ;
SNA
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
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
OR C
JR Z,RUNLOAD
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
;[
]
;IXL-
;IXH-TEMP VAR
;IYL-
;IYH-
LD_FILE PUSH BC ;
16
PUSH DE ;
16
PUSH HL ;
CALL REALSEC ;
LD IX,(BYTSSEC)
LD A,IYH ;
LD L,A
LD H,0
ADD HL,DE
EX DE,HL
JR NC,LDFILE1
INC BC ;BCDE=
LDFILE1 LD A,IYL ;
CP IXL ;
JP C,LDFILE2
LD A,IXL ;
LDFILE2 ADD A,IYH ;
CP IXL ;
LD A,IYL ;
JP C,LDFILE5
LD A,IXL ;
SUB IYH ;
LDFILE5 LD IXH,A ;TEMP VAR,
POP HL ;
CALL LOADSCS ;
POP DE
POP BC ;
LD A,IYH ;
ADD A,IXH ;TEMP VAR
CP IXL ;
JP C,LDFILE3
SUB IXL ;
LDFILE3 LD IYH,A ;
JP C,LDFILE4
PUSH HL ;
CALL RDFATZP ;
CALL LST_CLS ;
,
?
POP HL ;
RET C ;
,
LDFILE4 LD A,IYL ;
SUB IXH ;TEMP VAR
RET Z
LD IYL,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
LD A,(MANYFAT)
.L0 DEC A
JP Z,BCDEHLP
PUSH HL
PUSH AF
CALL BCDEHLP
POP AF
POP HL
JP .L0
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 ;
;[BCDE/512]
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
;[INCLUDES]
include drivers/drv_zc.a80
include drivers/drv_neogs.a80
include drivers/drv_nemo.a80
include drivers/drv_smuc.a80
include drivers/drv_divide.a80
include drivers/drv_profi.a80
include spg2_run.a80
include sna_run.a80