Top secrets sources NedoPC pentevo

Rev

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