Rev 961 |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
| ?url?
; LAST UPDATE: 10.02.2024 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
include fat_dir.a80
INIT_VAR DRV_VAR
SETVAR BUF_512_, 0x200 ; ¡ãä¥à ᥪâ®à
include ../../fat_vars.a80
SETVAR_ALIGN
SUBVAR (WORD + WORD + BYTE + BYTE)
SETVAR LENGHT, WORD ; ¤«¨ ä ©« ¢ ¡ ©â å
SETVAR LOADSCS1, WORD ; ¤à¥á ¢ë§ë¢ ¥¬®£® ¤à ©¢¥à
SETVAR MAS_SLA, BYTE ; ¬ ᪠¤«ï MASTER/SLAVE
SETVAR NUM_DEVICE, BYTE ; ®¬¥à ãáâனá⢠¤«ï § ¯ã᪠ª®¤
ORG INITVAR
; ¢å®¤¥: A - ®¬¥à ¢ë¡à ®£® ãáâனáâ¢
; BCDE - ®¬¥à ª« áâ¥à § ¯ã᪠¥¬®£® ä ©«
DI
LD A,(NUM_DEVICE)
CP _SD_SDZ
LD HL,READ_ZSD ; ¤à ©¢¥à SD ZC ª àâë
JR Z,SETLOADER
CP _SD_SDG
LD HL,READ_NEOGS ; ¤à ©¢¥à SD NGS ª àâë
JR Z,SETLOADER
CP _HDD_NEMO_MASTER
LD HL,RD_HDD_NEMO ; ¤à ©¢¥à HDD NEMO
IFDEF ALL_DRVS
JR Z,SETLOADER
CP _HDD_SMUC_MASTER
LD HL,RD_HDD_SMUC ; ¤à ©¢¥à HDD SMUC
JR Z,SETLOADER
CP _HDD_DIVIDE_MASTER
LD HL,RD_HDD_DIVIDE ; ¤à ©¢¥à HDD DIVIDE
JR Z,SETLOADER
LD HL,RD_HDD_PROFI ; ¤à ©¢¥à HDD PROFI
ENDIF
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 BC,(FILE_SRC + _DIR_FstClusHI)
LD (AFILCLS+2),BC
LD DE,(FILE_SRC + _DIR_FstClusLO)
LD (AFILCLS),DE
LD A,(FILE_SRC + _DIR_Ext + 1)
CP "P"
JP Z,RUNSPG2 ; ¯¥à¥å®¤ § ¯ã᪠SPG ä ©«
CP "N"
JP Z,RUNSNA ; ¯¥à¥å®¤ § ¯ã᪠SNA ä ©«
CALL REALSEC ; ¯à¥®¡à §®¢ «¨ ¢ ®¬¥à ᥪâ®à
CALL LOADLST ; § £à㧨«¨ ¢ ¡ãä¥à
EXX
LD HL,(BUF_512_ + _DIR_Ext + 1)
LD (0x5D45),HL ; ¤à¥á áâ àâ ª®¤
LD HL,(BUF_512_ + _DIR_Attr)
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 ¨¡® FAT ᥪâ®à 512 ¡ ©â
ADC A,0 ; ãç¨âë¢ ¥¬ ç¥â/¥ç¥â
DEC A ; ¯¥à¢ë© ᥪâ®à § £à㦥, £à㧨âì 1 ¬¥ìè¥
EXX
JP Z,LDIRBUF ; ¥á«¨ ᥪâ®à 1 ¯¥à¥®á ¨ § ¯ãáª
DEC A
LD IXL,A ; § ¯®¬¨«¨ ª®«¨ç¥á⢮ ᥪâ®à®¢ - 1
JP Z,READ08 ; ¥á«¨ ä ©« ¢«¥§ ¢ 2 ᥪâ®à
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,(SecPerClus) ; 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
LD DE,(AFILCLS)
LD BC,(AFILCLS + 2)
CALL RD_NEXT_CLUSTER ; ¯®«ãç¨âì ®¬¥à á«¥¤ãî饣® ª« áâ¥à
LD (AFILCLS),DE
LD (AFILCLS + 2),BC
CALL CHECK_LAST_CLUSTER ; ¯à®¢¥àª ®ª®ç ¨¥ 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 ; ¯à®¤®«¦ ¥¬ § £à㧪ã
; à §¬¥à ª®¤ ¢ Hobeta ¬¥¥¥ 2 ᥪâ®à®¢
; ª®¯¨à㥬 墮áâ ¯¥à¢®£® ᥪâ®à ¨ ¤®£à㦠¥¬ ¨§ ¢â®à®£® á ¯¥à¥®á®¬
READ08 EXX
CALL LD_ONES
PUSH DE
EXX
POP HL
LD IXL,1
JR READ03
; § £à㧪 ª®«¨ç¥á⢠ᥪâ®à®¢, ¥á«¨ ®áâ «®áì ¬¥¥¥ à §¬¥à ª« áâ¥à
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
; ç⥨¥ ä ©«
; BCDE - ®¬¥à ª« áâ¥à ®âªã¤ £à㧨âì
; IXL - à §¬¥à ª« áâ¥à
; IXH - ¢à¥¬¥ë¥ ¯¥à¥¬¥ë¥
; IYL - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï § £à㧪¨
; IYH - ᬥ饨¥ ¢ ª« áâ¥à¥
LOAD_FILE PUSH BC ; áâ à訥 16 ¡¨â ®¬¥à ª« áâ¥à
PUSH DE ; ¬« ¤è¨¥ 16 ¡¨â ®¬¥à ª« áâ¥à
PUSH HL ; á®åà ¨«¨ ¤à¥á § £à㧪¨
CALL REALSEC ; ¯¥à¥¢¥«¨ ®¬¥à ª« áâ¥à ¢ ®¬¥à ᥪâ®à
LD IX,(SecPerClus)
LD A,IYH ; ᬥ饨¥ ¢ ª« áâ¥à¥
LD L,A
LD H,0
ADD HL,DE
EX DE,HL
JR NC,.L1
INC BC ; BCDE = ®¬¥à ᥪâ®à ®âªã¤ £à㧨âì
.L1 LD A,IYL ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï § £à㧪¨
CP IXL ; à §¬¥à ª« áâ¥à
JP C,.L2
LD A,IXL ; à §¬¥à ª« áâ¥à
.L2 ADD A,IYH ; ᬥ饨¥ ¢ ª« áâ¥à¥
CP IXL ; à §¬¥à ª« áâ¥à
LD A,IYL ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï § £à㧪¨
JP C,.L5
LD A,IXL ; à §¬¥à ª« áâ¥à
SUB IYH ; ᬥ饨¥ ¢ ª« áâ¥à¥
.L5 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,.L3
SUB IXL ; à §¬¥à ª« áâ¥à
.L3 LD IYH,A ; ᬥ饨¥ ¢ ª« áâ¥à¥
JP C,.L4
PUSH HL ; á®åà ¨«¨ ¤à¥á § £à㧪¨
CALL RD_NEXT_CLUSTER ; ¯à®ç¨â «¨ ®¬¥à á«¥¤ãî饣® ª« áâ¥à
CALL CHECK_LAST_CLUSTER ; ¯à®¢¥à¨«¨, ¬®¦¥â íâ® ¯®á«¥¤¨© ª« áâ¥à?
POP HL ; ¢®ááâ ®¢¨«¨ ¤à¥á § £à㧪¨
RET C ; ¥á«¨ ¯®á«¥¤¨©, ¢ë室¨¬
.L4 LD A,IYL ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï § £à㧪¨
SUB IXH ; TEMP VAR
RET Z
LD IYL,A ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï § £à㧪¨
JP NZ,LOAD_FILE
RET
; ¯à®¢¥àª ®¬¥à ª« áâ¥à
CHECK_LAST_CLUSTER
LD A,(FATType)
AND A
JR NZ,.L1
LD HL,0x0FF7
SBC HL,DE
RET
.L1 DEC A
JR NZ,.L2
LD HL,0xFFF7
SBC HL,DE
RET
.L2 LD HL,0x0FFF
SBC HL,BC
RET NZ
LD HL,0xFFF7
SBC HL,DE
RET
; ç⥨¥ á«¥¤ãî饣® ª« áâ¥à
RD_NEXT_CLUSTER LD A,(FATType)
AND A
JR Z,.L1
DEC A
JR Z,.L2
EX DE,HL
ADD HL,HL
EX DE,HL
LD HL,0
ADC HL,BC
ADD HL,BC ; HLDE = BCDE * 2
LD A,E
LD E,D
LD D,L
LD C,H
LD B,0
CALL .L3
INC HL
LD C,(HL)
INC HL
LD B,(HL)
RET
.L2 LD BC,0
LD A,E
LD E,D
LD D,C
.L3 PUSH AF
PUSH BC
LD HL,NumSecFAT1
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)
RET
.L1 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 DE,(NumSecFAT1)
LD BC,(NumSecFAT1 + 2)
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,.L4
PUSH BC
LD BC,0
INC DE
CALL LOADLST
POP BC
.L4 POP AF
LD D,(HL)
LD E,B
LD BC,0
RRA
JR NC,.L5
REPT 4
SRL D
RR E
ENDM
.L5 LD A,D
AND 0x0F
LD D,A
RET
; ¯à¥®¡à §®¢ ¨¥ ®¬¥à ª« áâ¥à
; ¢ëç¨á«¥¨¥ ॠ«ì®£® ᥪâ®à
; ¢å®¤¥: BCDE = ®¬¥à ª« áâ¥à
; ¢ë室¥: BCDE = ®¬¥à ᥪâ®à
REALSEC LD A,B
OR C
OR D
OR E
JR NZ,REALSE1
LD DE,(NumSecRootDir)
LD BC,(NumSecRootDir + 2)
RET
REALSE1 LD HL,0xFFFE
EX DE,HL
ADD HL,DE
EX DE,HL
INC HL
ADC HL,BC ; ®¬¥à ª« áâ¥à - 2
LD A,(SecPerClus)
JR REALSE2
REALSE3 SLA E
RL D
RL L
RL H
REALSE2 RRCA
JR NC,REALSE3 ; 㬮¦¨«¨ à §¬¥à ª« áâ¥à
LD B,H
LD C,L
LD HL,FirstSecData
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
include drivers/drv_zc.a80
include drivers/drv_neogs.a80
include drivers/drv_nemo.a80
IFDEF ALL_DRVS
include drivers/drv_smuc.a80
include drivers/drv_divide.a80
include drivers/drv_profi.a80
ENDIF
include spg2_run.a80
include sna_run.a80