Top secrets sources NedoPC ngs

Rev

Rev 111 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?


;LAST UPDATE: 08.06.2013 savelij

                include macros.a80
                include sdcomand.a80
                include ports_ngs.a80
                include global_vars.a80

;ŠŽ‹ˆ—…‘’‚Ž ‘…Š’ŽŽ‚ ‚ Š‹€‘’…… ‚ ……Œ…Ž‰ BYTSSEC
;ŠŽ…– –…Ž—Šˆ ŽŒ…Ž‚ ‘’€˜ˆ‰ €‰’ 32 ˆ’ŽƒŽ —ˆ‘‹€ = 0XFF
;„‹Ÿ ƒ‘ …†ˆŒ€ “—ˆ’›‚€’œ Ž‹Ž†…ˆ… ‘’…Š€, €„…‘ €Ž’› ŠŽ„€ ˆ Ž‹Ž†…ˆ… ……Œ…›•

NGS             EQU 1                           ;0-ŠŽŒˆ‹Ÿ–ˆŸ „‹Ÿ ZSD, 1-ŠŽŒˆ‹Ÿ–ˆŸ „‹Ÿ NEOGS
CONV_NUMSEC     EQU 1                           ;0-‘Ž•€Ÿ’œ ŽŒ… Š‹€‘’…€, 1-‘Ž•€Ÿ’œ ŽŒ… ‘…Š’Ž€

;‘’€’Ž‚€Ÿ ‘’€ˆ–€ „‹Ÿ ‘ˆ‘Š€ Š‹€‘’…Ž‚, Ž ‡€Ž‹…ˆž ŽŒ… ‘’€ˆ–› „…Š…Œ…’ˆ’‘Ÿ
                IF NGS=1
NUM_PAGE        EQU 0X7F                        ;‘’€’Ž‚€Ÿ ‘’€ˆ–€ “Š‹€„Šˆ Š‹€‘’…Ž‚/‘…Š’ŽŽ‚                        
BUFF_SEC        EQU 0X5000                      ;€„…‘ “”…Ž‚ ˆ ……Œ…›•                                          
ADR_LOADING     EQU 0X8000                      ;€„…‘ “Š‹€„Šˆ ŽŒ…Ž‚ Š‹€‘’…Ž‚/‘…Š’ŽŽ‚                            
ADR_EXEC        EQU 0X6000                      ;€„…‘ ˆ‘Ž‹…ˆŸ ŠŽ„€                                                
                ELSE
NUM_PAGE        EQU 7                           ;‘’€’Ž‚€Ÿ ‘’€ˆ–€ “Š‹€„Šˆ Š‹€‘’…Ž‚/‘…Š’ŽŽ‚
BUFF_SEC        EQU 0X8000                      ;€„…‘ “”…Ž‚ ˆ ……Œ…›•
ADR_LOADING     EQU 0XC000                      ;€„…‘ “Š‹€„Šˆ ŽŒ…Ž‚ Š‹€‘’…Ž‚/‘…Š’ŽŽ‚
ADR_EXEC        EQU 0X6000                      ;€„…‘ ˆ‘Ž‹…ˆŸ ŠŽ„€
                ENDIF

                ORG ADR_EXEC                    ;-> ‡€Œ…ˆ’œ € ‹žŽ‰ “„Ž›‰
                DI
                LD HL,F_PATH                    ;€„…‘ ˆ’ˆ ˆ ˆŒ…ˆ ”€‰‹€ „‹Ÿ Žˆ‘Š€
                LD A,NUM_PAGE                   ;ŽŒ… ‘’€ˆ–› Š“„€ ‘Š‹€„›‚€’œ ŽŒ…€ Š‹€‘’…Ž‚/‘…Š’ŽŽ‚
                CALL READ_CLS
               
                JR $

;“’œ „Ž ”€‰‹€, ’Ž‹œŠŽ ‚ ‚…•…Œ …ƒˆ‘’… ˆŽ Žˆ‘Š ‚…„…’‘Ÿ Ž ŠŽŽ’ŠŽŒ“ ˆŒ…ˆ ‚ˆ„€ 8.3
F_PATH          IF NGS=0
                DB "DEMO/ANAMORIG.UDI",0
                ELSE
                DB "MP3/MIC-RO~1.MP3",0
                ENDIF
;ŒŽ†Ž “Š€‡€’œ “’œ ‚ ‚ˆ„… "DIR/DIR/FILE.EXT" 0 ‚ ŠŽ–… ‘’ŽŠˆ ŽŸ‡€’…‹…

;---------------------------------
;ƒ“‡ˆ‹Š€ ”€‰‹€ Ž “Š€‡€ŽŒ“ “’ˆ
BUF512          EQU BUFF_SEC                    ;200 “”… ‘…Š’Ž€
TDIRCLS         EQU BUF512+0X0200               ;400 “”… Š‹€‘’…Ž‚ ROOT „ˆ…Š’Žˆˆ
CAL_FAT         EQU TDIRCLS+0X0400              ;1 Š€‹ˆ FAT
BYTSSEC         EQU CAL_FAT+1                   ;1 ŠŽ‹ˆ—…‘’‚Ž ‘…Š’ŽŽ‚ ‚ Š‹€‘’……
ROOTCLS         EQU BYTSSEC+1                   ;4 Š‹€‘’… €—€‹€ ROOT „ˆ…Š’Žˆˆ
ROOTSEC         EQU ROOTCLS+4                   ;2 €‡Œ… ‚ ‘…Š’Ž€• ROOT „ˆ…Š’Žˆˆ
SEC_FAT         EQU ROOTSEC+2                   ;4 ŠŽ‹ˆ—…‘’‚Ž ‘…Š’ŽŽ‚ Ž„Ž‰ FAT
RSVDSEC         EQU SEC_FAT+4                   ;2 €‡Œ… …‡…‚Ž‰ Ž‹€‘’ˆ
STARTRZ         EQU RSVDSEC+2                   ;4 €—€‹Ž „ˆ‘Š€/€‡„…‹€
FRSTDAT         EQU STARTRZ+4                   ;4 €„…‘ …‚ŽƒŽ ‘…Š’Ž€ „€›• Ž’ BPB
SEC_DSC         EQU FRSTDAT+4                   ;4 ŠŽ‹ˆ—…‘’‚Ž ‘…Š’ŽŽ‚ € „ˆ‘Š…/€‡„…‹…
CLS_DSC         EQU SEC_DSC+4                   ;4 ŠŽ‹ˆ—…‘’‚Ž Š‹€‘’…Ž‚ € „ˆ‘Š…/€‡„…‹…
FATSTR          EQU CLS_DSC+4                   ;4 €—€‹Ž …‚Ž‰ FAT ’€‹ˆ–›
ADRPATH         EQU FATSTR+4                    ;2 €„…‘ ’…Š‘’€ “’ˆ ”€‰‹€
STATUS          EQU ADRPATH+2                   ;1 ‘’€’“‘ Ž‘‹… ‚›‡Ž‚€ LOAD_SD
OLD_SP          EQU STATUS+1                    ;2 ‘’…Š „‹Ÿ ‚›•Ž„€
FB_EXT          EQU OLD_SP+2                    ;B “”… 8.3 „‹Ÿ Žˆ‘Š€ ˆŒ…ˆ
LVL_DIR         EQU FB_EXT+0X0B                 ;1 ŽŒ… “Ž‚Ÿ „ˆ…Š’Žˆˆ
LSTLOAD         EQU LVL_DIR+1                   ;4 ŽŒ… ‘…Š’Ž€ ‡€ƒ“†…ŽƒŽ ‚ “”…

;SD Š€’€ … €‰„…€
ZAW003          LD A,0XEE
WR_STAT         LD SP,(OLD_SP)
                LD (STATUS),A
                IF NGS=1
                RET
                ELSE
CS__LOW         PUSH AF
                LD A,1
                OUT (P_CONF),A
                POP AF
                RET

CS_HIGH         PUSH AF
                LD A,3
                OUT (P_CONF),A
                XOR A
                OUT (P_DATA),A
                POP AF
                RET
                ENDIF

;—’…ˆ… ‘ˆ‘Š€ Š‹€‘’…Ž‚ ”€‰‹€
;€ ‚•Ž„…:A-‘’€ˆ–€ €—€‹€ ‡€ƒ“‡Šˆ
;HL-€„…‘ ’…Š‘’Ž‚Ž‰ ‘’ŽŠˆ
;“’ˆ Š ”€‰‹“ ‚Œ…‘’… ‘ ˆŒ……Œ ˆ €‘˜ˆ…ˆ…Œ ”€‰‹€. “’œ Ž‹Ž‘’œž Ž’ ROOT
;€ ‚›•Ž„…: A=
                ;0X00-OK
                ;0XAA-”€‰‹ … €‰„…
                ;0XDD-FAT … Ž€“†…
                ;0XEE-SD Š€’€ … Ž€“†…€
READ_CLS        LD IYL,A;LY,A                   ;‘Ž•€ˆ‹ˆ ŽŒ… ‘’€ˆ–› Š“„€ ƒ“‡ˆ’œ
                LD (ADRPATH),HL                 ;‘Ž•€ˆ‹ˆ €„…‘ ‘’ŽŠˆ “’ˆ
                LD (OLD_SP),SP                  ;‘Ž•€ˆ‹ˆ ‘’…Š
                LD A,0XFF
                LD (LSTLOAD+3),A                ;ˆ“„ˆ’…‹œ€Ÿ ‡€ƒ“‡Š€ ‘…Š’Ž€ …‡ Ž‚…Šˆ €‹ˆ—ˆŸ ‚ “”……
                IF NGS=1
                LD A,1
                OUT (GSCFG0),A                  ;Ž’Š‹ž—ˆ‹ˆ ‡“, ‚‘… ‘’€ˆ–€ Ž‡“
                LD A,%10011011
                OUT (SCTRL),A                   ;‘ŠŽ”ˆƒ“ˆ‹ˆ ƒ‘ ‘ CS=1 „‹Ÿ SD Š€’›
                ELSE
                CALL CS_HIGH
                ENDIF
                LD B,0X10
                LD A,0XFF
                IF NGS=1
                OUT (SD_SEND),A                 ;ˆ˜…Œ 0X10 €‰’ 0XFF ‚ Ž’ Š€’Ž—Šˆ
                ELSE
                OUT (P_DATA),A
                ENDIF
                DJNZ $-4
                XOR A                           ;256 Ž›’ŽŠ €‰’ˆ SD Š€’“
                EX AF,AF'
                IF NGS=1
                LD A,1
                OUT (SCTRL),A                   ;‚›€‹ˆ SD Š€’“ CS=0
                ENDIF
ZAW001          LD HL,CMD00
                CALL OUTCOM                     ;……‚Ž„ˆŒ Š€’Ž—Š“ ‚ …†ˆŒ SPI ŠŽŒ€„Ž‰ 0
                CALL IN_OOUT                    ;†„…Œ Ž’‚…’€
                EX AF,AF'

                DEC A
                JR Z,ZAW003                     ;†„…Œ Ž ‘—…’—ˆŠ“ 256 €‡
                EX AF,AF'
                DEC A
                JR NZ,ZAW001                    ;†„…Œ ŽŠ€ Š€’€ Ž’‚…’ˆ’ €‰’ŽŒ 1
                LD BC,SD_RSTR
                LD HL,CMD08
                CALL OUTCOM                     ;Ž…„…‹Ÿ…Œ ‘…–ˆ”ˆŠ€–ˆž Š€’›
                CALL IN_OOUT                    ;‚ "A" Ž’‚…’ Š€’› R1
                IN H,(C)
                NOP
                IN H,(C)       
                NOP
                IN H,(C)
                NOP
                IN H,(C)                        ;Ž—ˆ’€‹ˆ Ž‘’€‹œ›… €‰’› ‚ ˆŠ“„€
                BIT 2,A                         ;…‘‹ˆ Ž˜ˆŠ€, ’Ž
                LD HL,0                         ;Š€’€ ‘…–ˆ”ˆŠ€–ˆˆ 1.0
                JR NZ,ZAW006                    ;ˆ€—…
                LD H,0X40                       ;Š€’€ ‘…–ˆ”ˆŠ€–ˆˆ 2.0
ZAW006          LD A,CMD_55
                CALL OUT_COM                    ;‡€“‘Š€…Œ ‚“’…žž ˆˆ–ˆ€‹ˆ‡€–ˆž Š€’›
                CALL IN_OOUT
                IF NGS=1
                LD BC,SD_SEND
                ELSE
                LD BC,P_DATA
                ENDIF
                LD A,ACMD_41
                OUT (C),A
                LD A,H
                OUT (C),A
                XOR A
                OUT (C),A
                NOP
                OUT (C),A
                NOP
                OUT (C),A
                DEC A
                OUT (C),A
                CALL IN_OOUT
                AND A
                JR NZ,ZAW006                    ;†„…Œ ŽŠ€ Š€’› ……‰„…’ ‚ …†ˆŒ ƒŽ’Ž‚Ž‘’ˆ
ZAW004          LD A,CMD_59
                CALL OUT_COM                    ;ˆ“„ˆ’…‹œŽ Ž’Š‹ž—€…Œ CRC16
                CALL IN_OOUT
                AND A
                JR NZ,ZAW004
ZAW005          LD HL,CMD16
                CALL OUTCOM                     ;ˆ“„ˆ’…‹œ›‰ €‡Œ… ‘…Š’Ž€ 512 €‰’
                CALL IN_OOUT
                AND A
                JR NZ,ZAW005

;ˆˆ–ˆ€‹ˆ‡€–ˆŸ ……Œ…›• FAT
WC_FAT          LD DE,0
                LD B,D
                LD C,E
                CALL LOADLST                    ;—ˆ’€…Œ ‘…Š’Ž 0 Š€’Ž—Šˆ
                PUSH HL
                POP IX
                LD DE,0X01BE
                ADD HL,DE                       ;……•Ž„ˆŒ € ‘Œ…™…ˆ… „‹Ÿ— Ž‚…ŽŠ
                LD A,(HL)                       ;Ž‚…ŸŒ —’Ž› ›‹ 0, Š€’Ž—Šˆ … ŒŽƒ“’ ›’œ ‡€ƒ“‡Ž—›Œˆ
                AND A
                JR NZ,RDFAT05                   ;…‘‹ˆ … 0, Ž‚…ˆ’œ „“ƒŽ…
                LD DE,4
                ADD HL,DE                       ;……•Ž„ˆŒ Š Ž‚…Š… ’ˆ€ €‡„…‹€
                LD A,(HL)
                LD B,0
                CP 1                            ;FAT12?
                JR Z,RDFAT06
                LD B,2
                CP 0X0B                         ;FAT32?
                JR Z,RDFAT06
                CP 0X0C                         ;FAT32?
                JR Z,RDFAT06
                LD B,1
                CP 6                            ;FAT16?
                JR Z,RDFAT06
                CP 4                            ;FAT16?
                JR Z,RDFAT06
                CP 0X0E                         ;FAT16?
                JR NZ,RDFAT05          
RDFAT06         LD A,B                          ;……Œ ˆ‡ "B" ’ˆ €‡„…‹€
                LD (CAL_FAT),A                  ;‘Ž•€ˆ‹ˆ
                ADD HL,DE
                CALL LOADZP                     ;……Œ ŽŒ… ‘…Š’Ž€ €—€‹€ Ž‘Ž‚ŽƒŽ €‡„…‹€
                JR RDFAT00                      ;……•Ž„ˆŒ Š ˆˆ–ˆ€‹ˆ‡€–ˆˆ ……Œ…›• „‹Ÿ €Ž’› ‘ ”€’ŽŒ

;MBR … Ž€“†…, Ž‚…Ÿ…Œ ‘…Š’Ž 0 Š€’› Š€Š Žˆ‘€’…‹œ
RDFAT05         LD C,(IX+0X0D)                  ;C=ŠŽ‹ˆ—…‘’‚Ž ‘…Š’ŽŽ‚ ‚ Š‹€‘’……
                XOR A
                LD E,A
                LD B,8
                RR C
                ADC A,0
                DJNZ $-4                        ;ŠŽ‹ˆ—…‘’‚Ž ‘…Š’ŽŽ‚ ‚ Š‹€‘’…… „Ž‹†Ž ›’œ ‘’……œž 2
                DEC A
                JR NZ,$+3                       ;Ž‚…ˆ‹ˆ ŠŽ‹ˆ—…‘’‚Ž ˆ’
                INC E                           ;+1, …‘’œ ’€ŠŽ…
                LD A,(IX+0X0E)
                OR (IX+0X0F)
                JR Z,$+3                        ;ŠŽ‹ˆ—…‘’‚Ž ‡€…‡…‚ˆŽ‚€›• ‘…Š’ŽŽ‚ „Ž‹†Ž ›’œ >0
                INC E                           ;+1, …‘’œ ’€ŠŽ…
                LD A,(IX+0X13)
                OR (IX+0X14)
                JR NZ,$+3                       ;ŠŽ‹ˆ—…‘’‚Ž ‘…Š’ŽŽ‚ € €‡„…‹… „‹Ÿ ”€’16?
                INC E
                LD A,(IX+0X20)
                OR (IX+0X21)
                OR (IX+0X22)
                OR (IX+0X23)
                JR NZ,$+3                       ;ŠŽ‹ˆ—…‘’‚Ž ‘…Š’ŽŽ‚ € €‡„…‹… „‹Ÿ ”€’32?
                INC E                           ;Ž„Ž ˆ‡ ˆ• „Ž‹†Ž ›’œ =0, „“ƒŽ… >0
                LD A,(IX+0X15)
                AND 0XF0
                CP 0XF0
                JR NZ,$+3                       ;‘’€˜ˆ… ˆ’› „Ž‹†› ›’œ ‚ 1
                INC E
                LD A,E
                CP 4                            ;“‘‹Ž‚ˆŸ ‘Ž‚€‹ˆ?
                LD A,0XDD                       ;FAT … €‰„…
                JP NZ,WR_STAT
                LD A,0XFF
                LD (CAL_FAT),A                  ;’ˆ ”€’ ŽŠ€ … Ž…„…‹…
                LD DE,0
                LD B,D
                LD C,E

RDFAT00         LD (STARTRZ),DE
                LD (STARTRZ+2),BC               ;Ž‹Ž†ˆ‹ˆ ŽŒ… ‘’€’Ž‚ŽƒŽ ‘…Š’Ž€ €‡„…‹€
                CALL LOADLST                    ;‡€ƒ“‡ˆ‹ˆ …ƒŽ
                LD HL,0
                LD DE,(BUF512+0X16)             ;BPB_FATSZ16
                LD A,D
                OR E
                JR NZ,RDFAT01                   ;…‘‹ˆ … FAT12/16 (BPB_FATSZ16=0)
                LD DE,(BUF512+0X24)
                LD HL,(BUF512+0X26)             ;BPB_FATSZ32
                                                ;’Ž ……Œ ˆ‡ ‘Œ…™…ˆŸ +36
RDFAT01         LD (SEC_FAT+2),HL
                LD (SEC_FAT),DE                 ;—ˆ‘‹Ž ‘…Š’ŽŽ‚ € FAT-’€‹ˆ–“
                LD HL,0
                LD DE,(BUF512+0X13)             ;BPB_TOTSEC16
                LD A,D
                OR E
                JR NZ,RDFAT02                   ;…‘‹ˆ … FAT12/16 (BPB_TOTSEC16=0)
                LD DE,(BUF512+0X20)
                LD HL,(BUF512+0X22)             ;BPB_TOTSEC32
                                                ;’Ž ……Œ ˆ‡ ‘Œ…™…ˆŸ +32
RDFAT02         LD (SEC_DSC+2),HL
                LD (SEC_DSC),DE                 ;Š-‚Ž ‘…Š’ŽŽ‚ € „ˆ‘Š…/€‡„…‹…

;‚›—ˆ‘‹Ÿ…Œ ROOTDIRSECTORS
                LD BC,(BUF512+0X0B)             ;BPB_BYTSPERSEC
                LD DE,(BUF512+0X11)             ;BPB_ROOTENTCNT
                LD HL,0
                LD A,D
                OR E
                JR Z,RDFAT03
                LD B,H
                LD C,L
                LD A,0X10
                CALL BCDE_A
                EX DE,HL

;’Ž …€‹ˆ‡Ž‚€€ ”ŽŒ“‹€
;ROOTDIRSECTORS=((BPB_ROOTENTCNT*32)+(BPB_BYTSPERSEC-1))/BPB_BYTSPERSEC
;‚ HL=ROOTDIRSECTORS. …‘‹ˆ FAT32, ’Ž HL=0 ‚‘…ƒ„€

RDFAT03         PUSH HL                         ;ROOTDIRSECTORS
                LD (ROOTSEC),HL
                LD A,(BUF512+0X10)
                LD DE,(SEC_FAT)
                LD HL,(SEC_FAT+2)
                DEC A
                EX DE,HL
                ADD HL,HL
                EX DE,HL
                ADC HL,HL
                DEC A
                JR NZ,$-6
                POP BC                          ;Ž‹›‰ €‡Œ… FAT-Ž‹€‘’ˆ ‚ ‘…Š’Ž€•
                CALL HLDEPBC                    ;ˆ€‚ˆ‹ˆ ROOTDIRSECTORS
                LD BC,(BUF512+0X0E)             ;BPB_RSVDSECCNT
                LD (RSVDSEC),BC
                CALL HLDEPBC                    ;ˆ€‚ˆ‹ˆ BPB_RESVDSECCNT
                LD (FRSTDAT),DE
                LD (FRSTDAT+2),HL               ;Ž‹Ž†ˆ‹ˆ ŽŒ… …‚ŽƒŽ ‘…Š’Ž€ „€›•
                LD B,H
                LD C,L
                LD HL,SEC_DSC                   ;BCDE+32-®¥ —ˆ‘‹Ž Ž €„…‘“ HL
                CALL BCDEHLM                    ;‚›—‹ˆ ˆ‡ Ž‹ŽƒŽ Š-‚€ ‘…Š’ŽŽ‚ €‡„…‹€
                LD A,(BUF512+0X0D)
                LD (BYTSSEC),A
                CALL BCDE_A                     ;€‡„…‹ˆ‹ˆ € Š-‚Ž ‘…Š’ŽŽ‚ ‚ Š‹€‘’……
                LD (CLS_DSC),DE
                LD (CLS_DSC+2),BC               ;Ž‹Ž†ˆ‹ˆ ŠŽ‹-‚Ž Š‹€‘’…Ž‚ € €‡„…‹…

                LD A,(CAL_FAT)
                CP 0XFF
                JR NZ,RDFAT04
;Ž…„…‹…ˆ… ’ˆ€ FAT ˆ Ž’‘“‘’‚ˆˆ MBR
                LD DE,(SEC_FAT-1)
                LD BC,(SEC_FAT+1)
                LD E,0                          ;BCDE=ŠŽ‹ˆ—…‘’‚Ž ‘…Š’ŽŽ‚ *0X100
                PUSH BC
                PUSH DE                         ;‘Ž•€ˆ‹ˆ
                SRL B
                RR C
                RR D
                RR E                            ;BCDE=ŠŽ‹ˆ—…‘’‚Ž ‘…Š’ŽŽ‚ *0X80
                LD HL,CLS_DSC                   ;ŠŽ‹ˆ—…‘’‚Ž Š‹€‘’…Ž‚ € FAT
                PUSH HL                         ;‘Ž•€ˆ‹ˆ
                CALL HLBCDEM                    ;ŠŽ‹ˆ—…‘’‚Ž Š‹€‘’…Ž‚-(ŠŽ‹ˆ—…‘’‚Ž ‘…Š’ŽŽ‚*0X80)
                LD A,E
                AND 0X80                        ;ŠŽ‹ˆ—…‘’‚Ž Œ……… 128 Š‹€‘’…Ž‚ ‚ ‘…Š’Ž… „‹Ÿ FAT32
                OR D
                OR C
                OR B
                LD A,2
                POP HL
                POP DE
                POP BC
                JR Z,RDFAT04                    ;FAT32 …‘‹ˆ ”‹€ƒ Z=0
                CALL HLBCDEM                    ;ŠŽ‹ˆ—…‘’‚Ž Š‹€‘’…Ž‚-(ŠŽ‹ˆ—…‘’‚Ž ‘…Š’ŽŽ‚*0X100)
                LD A,D
                OR C
                OR B
                LD A,1
                JR Z,RDFAT04                    ;FAT16 …‘‹ˆ ”‹€ƒ Z=0
                XOR A                           ;ˆ€—… FAT12

;„‹Ÿ FAT12/16 ‚›—ˆ‘‹Ÿ…Œ €„…‘ …‚ŽƒŽ ‘…Š’Ž€ „ˆ…Š’Žˆˆ
;„‹Ÿ FAT32 ……Œ Ž ‘Œ…™…Œˆž +44, € ‚›•Ž„… BCDE-‘…Š’Ž ROOTDIR
RDFAT04         LD (CAL_FAT),A                  ;“’Ž—ˆ‹ˆ ’ˆ ”€’€
                EX AF,AF'

                LD DE,(RSVDSEC)
                LD BC,0
                LD HL,STARTRZ
                CALL BCDEHLP
                LD (FATSTR),DE
                LD (FATSTR+2),BC                ;‚›—ˆ‘‹ˆ‹ˆ ˆ Ž‹Ž†ˆ‹ˆ ŽŒ… ‘…Š’Ž€ €—€‹€ FAT-T€‹ˆ–
                EX AF,AF'
                AND A
                LD DE,0
                LD B,D
                LD C,E
                JR Z,FSRROO2                    ;FAT12-NONE
                DEC A
                JR Z,FSRROO2                    ;FAT16
                LD DE,(BUF512+0X2C)
                LD BC,(BUF512+0X2E)             ;FAT32
FSRROO2         LD (ROOTCLS),DE
                LD (ROOTCLS+2),BC               ;Ž‹Ž†ˆ‹ˆ ŽŒ… Š‹€‘’… ROOT „ˆ…Š’Žˆˆ

                XOR A
                LD (LVL_DIR),A                  ;€—ˆ€…Œ ‘ ROOT „ˆ…Š’Žˆˆ
                LD HL,(ADRPATH)                 ;‚…“‹ˆ €„…‘ ‘’ŽŠˆ “’ˆ „Ž ”€‰‹€
FINDFL1         PUSH BC
                PUSH DE                         ;‘Ž•€ˆ‹ˆ ŽŒ… Š‹€‘’…€
                CALL FNDBUF                     ;€‘€ŠŽ‚Š€ —€‘’ˆ ’…Š‘’Ž‚Ž‰ ‘’ŽŠˆ „‹Ÿ ‘Ž‡„€ˆŸ Œ€‘Šˆ Žˆ‘Š€
                POP DE
                POP BC                          ;‚Ž‘‘’€Ž‚ˆ‹ˆ ŽŒ… Š‹€‘’…€
                PUSH HL                         ;‘Ž•€ˆ‹ˆ ’…Š“™ˆ‰ €„…‘ ’…Š‘’Ž‚Ž‰ ‘’ŽŠˆ

                LD HL,TDIRCLS                   ;€„…‘ ’€‹ˆ–› Š‹€‘’…Ž‚ ’…Š“™…‰ „ˆ…Š’Žˆˆ
                LD A,D
                OR E
                OR B
                OR C
                CALL SAVEZP                     ;‘Ž•€ˆ‹ˆ ‚ ’€‹ˆ–“ ŽŒ… ’…Š“™…ƒŽ Š‹€‘’…€
                JR Z,LASTCLS                    ;…‘‹ˆ ŽŒ… Š‹€‘’…€ 0, ’Ž ’Ž ROOT „ˆ€ („‹Ÿ ”€’12/16)
NEXTCLS         PUSH HL
                CALL RDFATZP                    ;—ˆ’€…Œ ‘‹…„“™ˆ‰ ŽŒ… Š‹€‘’…€ ˆ‡ –…Ž—Šˆ „ˆ…Š’Žˆˆ
                CALL LST_CLS                    ;Ž‚…Ÿ…Œ € ŠŽ…– –…Ž—Šˆ
                POP HL
                JR C,LASTCLS
                CALL SAVEZP                     ;…‘‹ˆ … Ž‘‹…„ˆ‰ ‘Ž•€Ÿ…Œ ‚ ’€‹ˆ–“
                JR NEXTCLS                      ;‘‹…„“ž™ˆ‰ ŽŒ… Š‹€‘’…€

LASTCLS         LD BC,0XFFFF
                CALL SAVEZP                     ;Š‹€„…Œ Œ€Š… ŠŽ–€ –…Ž—Šˆ
                EXX
                LD HL,LVL_DIR
                LD A,(HL)                       ;’…Š“™ˆ‰ “Ž‚…œ „ˆ…Š’Žˆˆ
                INC (HL)                        ;‘‹…„“ž™ˆ‰ “Ž‚…œ „ˆ…Š’Žˆˆ
                AND A
                LD BC,0                         ;ŠŽ‹ˆ—…‘’‚Ž ‡€ˆ‘…‰ ROOT „ˆ…Š’Žˆˆ
                JR NZ,LASTCLS1
                LD A,(CAL_FAT)
                CP 2
                JR NC,LASTCLS1
                LD HL,(ROOTSEC)                 ;“†… … ROOT „ˆ…Š’ŽˆŸ
                ADD HL,HL
                ADD HL,HL
                ADD HL,HL
                ADD HL,HL
                ADD HL,HL
                LD B,H
                LD C,L
LASTCLS1        EXX
FINDFL          INC BC                          ;ˆ™…Œ Ž ‡€„€Ž‰ Œ€‘Š… €—ˆ€Ÿ ‘ 0
                CALL RDDIRSC                    ;ƒ“‡ˆŒ Ž ŽŒ…“ Žˆ‘€’…‹Ÿ ‘…Š’Ž „ˆ…Š’Žˆˆ
                LD A,C
                AND 0X0F                        ;‚ ‘…Š’Ž… Œ€Š‘ˆŒ“Œ 16 Žˆ‘€’…‹…‰
                LD E,A
                LD D,0
                EX DE,HL
                ADD HL,HL
                ADD HL,HL
                ADD HL,HL
                ADD HL,HL
                ADD HL,HL
                ADD HL,DE                       ;Ž‹“—ˆ‹ˆ €„…‘ “†ŽƒŽ Žˆ‘€’…‹Ÿ
                EXX
                DEC BC
                LD A,B
                OR C                            ;Ž‚…Š€ € ŽŠŽ—€ˆ… ROOT „ˆ…Š’Žˆˆ
                EXX
                LD A,0XAA
                JP Z,WR_STAT
                LD A,(HL)                       ;Ž‚…Ÿ…Œ …‚›‰ €‰’ ˆŒ…ˆ Žˆ‘€’…‹Ÿ
                AND A
                LD A,0XAA                       ;…‘‹ˆ €‰’ =0, ’Ž
                JP Z,WR_STAT                    ;……•Ž„ Ž Ž˜ˆŠ… = ”€‰‹ … €‰„…
                PUSH HL
                PUSH BC
                CALL COMPARE                    ;‘€‚ˆ‚€…Œ ‘ ‡€„€Ž‰ Œ€‘ŠŽ‰
                POP BC
                POP DE
                PUSH DE
                POP IX                          ;‘Ž„…†ˆŒŽ… IX=€„…‘ Žˆ‘€’…‹Ÿ
                JR NZ,FINDFL                    ;… ‘Ž‚€„€…’, ……•Ž„ˆŒ Š ‘‹…„“ž™…Œ“ Žˆ‘€’…‹ž
                CALL RD_CLAS                    ;‡€ˆ€…Œ ŽŒ… Š‹€‘’…€ ˆ‡ €‰„…ŽƒŽ Žˆ‘€’…‹Ÿ
                EX (SP),HL                      ;‚Ž‘‘’€Ž‚ˆ‹ˆ ’…Š“™ˆ‰ €„…‘ ‚ ‘’ŽŠ… “’ˆ „Ž ”€‰‹€
                INC SP
                INC SP                          ;Œ€‘ŠˆŽ‚Š€ € ‘’…Š… €„…‘€ €‡Œ…€ ‚ €‰’€• ’…Š“™…ƒŽ ”€‰‹€
                LD A,(HL)
                AND A                           ;’…Š‘’Ž‚€Ÿ ‘’ŽŠ€ ŠŽ—ˆ‹€‘œ?
                JR NZ,FINDFL1                   ;…‘‹ˆ …’, ’Ž ˆ™…Œ „€‹œ˜…
                LD A,(IX+0X0B)                  ;Ž‚…Ÿ…Œ ’Ž „ˆ€ ˆ‹ˆ ”€‰‹?
                AND 0X10
                LD A,0XAA                       ;…‘‹ˆ „ˆ€, ’Ž Ž˜ˆŠ€
                JP NZ,WR_STAT                   ;’…Š‘’Ž‚€Ÿ ‘’ŽŠ€ „Ž‹†€ “Š€‡›‚€’œ € ”€‰‹
FINDFL2         LD A,IYL
                DEC IYL
                IF NGS=1
                OUT (MPAG),A                    ;‚Š‹ž—€…Œ ‡€„€“ž ‘’€ˆ–“ „‹Ÿ ‡€ƒ“‡Šˆ
                ELSE
                CALL PAGE_7FFD
                ENDIF
                LD HL,ADR_LOADING
FINDFL3         IF CONV_NUMSEC=1
                PUSH BC
                PUSH DE
                PUSH HL
                CALL REALSEC                    ;ŠŽ‚…‘ˆŸ ŽŒ…€ Š‹€‘’…€ ‚ ŽŒ… ‘…Š’Ž€
                POP HL
                CALL SAVEZP                     ;“Š‹€„Š€ ‚ “”… ŽŒ…€ ‘…Š’Ž€
                POP DE
                POP BC
                ELSE
                CALL SAVEZP                     ;“Š‹€„Š€ ‚ “”… ŽŒ…€ Š‹€‘’…€
                ENDIF
                LD A,H
                AND A
                JR Z,FINDFL2                    ;Ž‚…Š€ € ŠŽ…– €ŒŸ’ˆ
                PUSH HL
                CALL RDFATZP
                CALL LST_CLS
                POP HL
                JR NC,FINDFL3
                XOR A
                LD B,0XFF
                JP SAVEZP                       ;ŠŽ…– –…Ž—Šˆ ‘’€˜ˆ‰ €‰’ ŽŒ…€ = FF

SAVEZP          LD (HL),E
                INC HL
                LD (HL),D
                INC HL
                LD (HL),C
                INC HL
                LD (HL),B
                INC HL
                RET

LOADZP          LD E,(HL)
                INC HL
                LD D,(HL)
                INC HL
                LD C,(HL)
                INC HL
                LD B,(HL)
                INC HL
                RET

;—’…ˆ… ‘…Š’Ž€ DIR Ž ŽŒ…“ BC
RDDIRSC         PUSH BC
                LD D,B
                LD E,C
                LD BC,0
                LD A,0X10
                CALL BCDE_A
                LD A,E
                PUSH AF
                LD A,(BYTSSEC)
                PUSH AF
                CALL BCDE_A
                LD HL,TDIRCLS
                EX DE,HL
                ADD HL,HL
                ADD HL,HL
                ADD HL,DE
                CALL LOADZP
                CALL REALSEC
                POP AF
                DEC A
                LD L,A
                POP AF
                AND L
                LD L,A
                LD H,0
                ADD HL,DE
                EX DE,HL
                LD HL,0
                ADC HL,BC
                LD B,H
                LD C,L
                CALL LOADLST
                POP BC
                RET

;Ž‚…Š€ € Ž‘‹…„ˆ‰ Š‹€‘’… ‚ –…Ž—Š…
LST_CLS         LD A,(CAL_FAT)                  ;‡€‚ˆ‘ˆ’ Ž’ €‡Ÿ„Ž‘’ˆ ”€’€
                AND A
                JR NZ,LST_CL1
                LD HL,0X0FF7                    ;Ž‚…Š€ „‹Ÿ ”€’12
                SBC HL,DE
                RET

LST_CL1         DEC A
                JR NZ,LST_CL2
LST_CL3         LD HL,0XFFF7                    ;Ž‚…Š€Œ „‹Ÿ ”€’16 ˆ Œ‹€„˜ˆ• ˆ’ ”€’32
                SBC HL,DE
                RET

LST_CL2         LD HL,0X0FFF                    ;Ž‚…Š€ „‹Ÿ ‘’€˜ˆ• ˆ’ ”€’32
                SBC HL,BC
                RET NZ
                JR LST_CL3

;—’…ˆ… ‘‹…„“ž™…ƒŽ ŽŒ…€ Š‹€‘’…€ ‚ –…Ž—Š…
RDFATZP         LD A,(CAL_FAT)                  ;—’…ˆ… ‡€‚ˆ‘ˆ’ Ž’ €‡€„Ž‘’ˆ ”€’€
                AND A
                JR Z,RDFATS0                    ;……•Ž„ ‚……„ „‹Ÿ ”€’12
                DEC A
                JR Z,RDFATS1                    ;……•Ž„ ‚……„ „‹Ÿ ”€’16
                EX DE,HL                        ;‡„…‘œ —’…ˆ… „‹Ÿ ”€’32
                ADD HL,HL
                EX DE,HL
                LD HL,0
                ADC HL,BC
                ADC HL,BC                       ;“ŒŽ†ˆ‹ˆ ŽŒ… Š‹€‘’…€ € 2
                LD A,E
                LD E,D
                LD D,L
                LD C,H
                LD B,0                          ;€‡„…‹ˆ‹ˆ ŽŒ… Š‹€‘’…€ € 256
                CALL RDFATS2                    ;—ˆ’€…Œ Œ‹€„˜ˆ… 16 ˆ’ ˆ‘Ž‹œ‡“Ÿ —’…ˆ… „‹Ÿ ”€’16
                INC HL
                LD C,(HL)
                INC HL
                LD B,(HL)                       ;Ž—ˆ’€‹ˆ Ž‘‹…„“ž™ˆ… ‘’€˜ˆ… 16 ˆ’
                RET

;—’…ˆ… 16 ˆ’ŽƒŽ ŽŒ…€ Š‹€‘’…€ ˆ‡ –…Ž—Šˆ „‹Ÿ ”€’16
RDFATS1         LD BC,0
                LD A,E
                LD E,D
                LD D,C                          ;€‡„…‹ˆ‹ˆ ŽŒ… Š‹€‘’…€ € 256, ‘’€˜ˆ… 16 ˆ’ =0
RDFATS2         PUSH AF                         ;Ž™…… —’…ˆ… 16 ˆ’ŽƒŽ ŽŒ…€ Š‹€‘’…€ „‹Ÿ ”€’16/32
                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)                       ;Ž‹“—ˆ‹ˆ 16 ˆ’ ŽŒ…€ Š‹€‘’…€
                RET

;—’…ˆ… 12 ˆ’ŽƒŽ ŽŒ…€ Š‹€‘’…€ ˆ‡ –…Ž—Šˆ „‹Ÿ ”€’12
RDFATS0         LD H,D
                LD L,E
                ADD HL,HL
                ADD HL,DE                       ;HL=HL*3
                SRL H
                RR L                            ;HL=HL/2 - ‚ ˆ’Žƒ… “ŒŽ†ˆ‹ˆ ŽŒ… Š‹€‘’…€ € 1,5
                LD A,E                          ;A-€Œ ˆ’……‘… ’Ž‹œŠŽ ˆ’ ŽŒ… ‘’€ŽƒŽ ŽŒ…€ Š‹€‘’…€
                LD E,H
                LD D,0
                LD B,D
                LD C,D                          ;€‡„…‹ˆ‹ˆ ŽŒ… Š‹€‘’…€ € 256
                SRL E
                PUSH AF
                PUSH HL
                LD HL,FATSTR
                CALL BCDEHLP                    ;ˆ€‚ˆ‹ˆ ‘Œ…™…ˆ… Ž’ €—€‹€ ”€’ ’€‹ˆ–›
                CALL LOADLST                    ;‡€ƒ“‡ˆ‹ˆ ‚›‚—ˆ‘‹…›‰ ‘…Š’Ž
                POP BC
                LD A,B
                AND 1
                LD B,A                          ;BC=‘Œ…™…ˆ… ‚ ‡€ƒ“†…ŽŒ ‘…Š’Ž…
                ADD HL,BC                       ;HL=€„…‘ Ž’Š“„€ —ˆ’€’œ €‰’› ŽŒ…€ Š‹€‘’…€
                LD B,(HL)                       ;Ž—ˆ’€‹ˆ Œ‹€„˜“ž —€‘’œ ŽŒ…€ Š‹€‘’…€
                INC HL                          ;€„…‘ ‘‹…„“ž™…ƒŽ €‰’€
                LD A,H
                CP HIGH (BUF512)+2              ;Ž‚…Š€ € ……•Ž„ ƒ€ˆ–› ‡€ƒ“†…ŽƒŽ ‘…Š’Ž€
                JR NZ,RDFATS4
                PUSH BC                         ;‚›•Ž„ ‡€ …„…‹› ’…Š“™…ƒŽ ‡€ƒ“†…ŽƒŽ ‘…Š’Ž€
                LD BC,0
                INC DE
                CALL LOADLST                    ;‡€ƒ“†€…Œ ‘‹…„“ž™ˆ‰ ‘…Š’Ž ”€’ ’€‹ˆ–›
                POP BC
RDFATS4         POP AF
                LD D,(HL)                       ;—ˆ’€…Œ ‘’€˜ˆ… ˆ’› ŽŒ…€ Š‹€‘’…€
                LD E,B                          ;’……œ DE=ŽŒ… ‘‹…„“ž™…ƒŽ Š‹€‘’…€ ‚ –…Ž—Š…
                LD BC,0
                RRA                             ;Ž‚…Ÿ…Œ ˆ’ 0 ‘’€ŽƒŽ ŽŒ…€ Š‹€‘’…€
                JR NC,RDFATS3
                SRL D                           ;‘„‚ˆƒ€…Œ ŽŒ… Ž—ˆ’€ŽƒŽ ŽŒ…€ Š‹€‘’…€ ‚ Œ‹€„˜ˆ… 12 ˆ’
                RR E
                SRL D
                RR E
                SRL D
                RR E
                SRL D
                RR E
RDFATS3         LD A,D
                AND 0X0F
                LD D,A                          ;‘Ž‘ˆ‹ˆ …‡€—€™ˆ… ‘’€˜ˆ… 4 ˆ’€ “ Ž‹“—…ŽƒŽ ŽŒ…€ Š‹€‘’…€
                RET

;‚›—ˆ‘‹…ˆ… …€‹œŽƒŽ ‘…Š’Ž€
;€ ‚•Ž„… BCDE=ŽŒ… Š‹€‘’…€ FAT
;€ ‚›•Ž„… BCDE=ŽŒ… …€‹œŽƒŽ ‘…Š’Ž€
REALSEC         LD A,B
                OR C
                OR D
                OR E
                JR NZ,REALSE1                   ;BCDE=0?
                LD HL,SEC_FAT                   ;’Ž ROOT „ˆ…Š’ŽˆŸ “ ”€’12/16
                LD DE,(FATSTR)                  ;Œ…‘’ŽŽ‹Ž†…ˆ… ROOT „ˆ› ‘€‡“ Ž‘‹… ”€’ ’€‹ˆ–›
                LD BC,(FATSTR+2)
                PUSH HL
                CALL BCDEHLP                    ;ˆ€‚ˆ‹ˆ Š €—€‹“ ”€’ ’€‹ˆ–› …… €‡Œ…
                POP HL
                JP BCDEHLP                      ;ˆ€‚ˆ‹ˆ …™… €‡ ˆ Ž‹“—ˆ‹ˆ ŽŒ… ‘…Š’Ž€ €—€‹€ ROOT „ˆ›

REALSE1         LD HL,0XFFFE
                EX DE,HL
                ADD HL,DE
                EX DE,HL
                INC HL
                ADC HL,BC                       ;HLDE=ŽŒ… Š‹€‘’…€-2
                LD A,(BYTSSEC)                  ;“†Ž “ŒŽ†ˆ’œ € €‡Œ… Š‹€‘’…€
                JR REALSE2

REALSE3         SLA E
                RL D
                RL L
                RL H
REALSE2         RRCA
                JR NC,REALSE3                   ;“ŒŽ†ˆ‹ˆ € €‡Œ… Š‹€‘’…€
                LD B,H
                LD C,L
                LD HL,STARTRZ
                CALL BCDEHLP                    ;ˆ€‚ˆ‹ˆ ‘Œ…™…ˆ… Ž’ €—€‹€ „ˆ‘Š€
                LD HL,FRSTDAT
                JP BCDEHLP                      ;ˆ€‚ˆ‹ˆ ‘Œ…™…ˆ… Ž’ €—€‹€ €‡„…‹€

;BCDE=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

;BCDE-(ADR)=BCDE
HLBCDEM         LD A,E
                SUB (HL)
                INC HL
                LD E,A
                LD A,D
                SBC A,(HL)
                INC HL
                LD D,A
                LD A,C
                SBC A,(HL)
                INC HL
                LD C,A
                LD A,B
                SBC A,(HL)
                LD B,A
                RET

;ƒ“‡ˆ‹Š€ Ž„ŽƒŽ ‘…Š’Ž€
LOADLST         CALL CPNUMSC                    ;Ž‚…Š€ ŽŒ…€ ‘…Š’Ž€ ‡€ƒ“†…ŽƒŽ ‚ “”…
                JR NZ,LOADLST1
                LD HL,BUF512                    ;‚ “”…… “†… ‡€ƒ“†… “Š€‡€›‰ ‘…Š’Ž
                RET

LOADLST1        LD (LSTLOAD+2),BC
                LD (LSTLOAD),DE                 ;‘Ž•€ˆ‹ˆ ŽŒ… ‘…Š’Ž€ ‡€ƒ“†€…ŒŽƒŽ ‚ “”…
                LD HL,BUF512                    ;€„…‘ “”…€ ‘…Š’Ž€
                LD A,1                          ;ƒ“‡ˆ’œ 1 ‘…Š’Ž
                PUSH HL
                CALL RDMULTI                    ;‡€ƒ“‡ˆ‹ˆ ‘…Š’Ž
                POP HL                          ;€ ‚›•Ž„… HL=€„…‘ €—€‹€ “”…€ ‡€ƒ“†…ŽƒŽ ‘…Š’Ž€
                RET

;Ž‚…Š€ € “†… ‡€ƒ“†…›‰ ‘…Š’Ž
CPNUMSC         LD HL,LSTLOAD
                LD A,(HL)
                INC HL
                CP E
                RET NZ
                LD A,(HL)
                INC HL
                CP D
                RET NZ
                LD A,(HL)
                INC HL
                CP C
                RET NZ
                LD A,(HL)
                CP B
                RET

;Ž„€—€ ŠŽŒ€„› ‚ SD Š€’“ …‡ €€Œ…’Ž‚
OUTCOM          PUSH BC
                IF NGS=1
                LD BC,0X0600+SD_SEND            ;‚›„€’œ ‚ Ž’ 6 €‰’
                ELSE
                LD BC,0X600+P_DATA
                ENDIF
                OTIR
                POP BC
                RET

;‚›„€—€ ‚ Ž’ SD Š€’› ŠŽŒ€„› ‘ €€Œ…’ŽŒ 0
OUT_COM         PUSH BC
                IF NGS=1
                LD BC,SD_SEND
                ELSE
                CALL CS__LOW
                LD BC,P_DATA
                ENDIF
                OUT (C),A                       ;Ž’€‚ˆ‹ˆ ŠŽ„ ŠŽŒ€„›
                XOR A
                OUT (C),A                       ;ˆ’› 31-24 €€Œ…’€
                NOP
                OUT (C),A                       ;ˆ’› 23-16 €€Œ…’€
                NOP
                OUT (C),A                       ;ˆ’› 15-8 €€Œ…’€
                NOP
                OUT (C),A                       ;ˆ’› 7-0 €€Œ…’€
                DEC A
                OUT (C),A                       ;…‡ CRC16
                POP BC
                RET

SECM200         PUSH HL
                PUSH BC
                LD A,CMD_58
                CALL OUT_COM
                CALL IN_OOUT
                IF NGS=1
                LD BC,SD_RSTR
                ELSE
                LD BC,P_DATA
                ENDIF
                IN H,(C)
                NOP
                IN A,(C)
                NOP
                IN A,(C)
                NOP
                IN A,(C)
                BIT 6,H
                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         LD A,CMD_18
                IF NGS=1
                LD C,SD_SEND
                ELSE
                LD C,P_DATA
                ENDIF
                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 HL
                RET

IN_OOUT         EXX
                LD DE,0X20FF
IN_WAIT         IF NGS=1
                IN A,(SD_RSTR)
                ELSE
                IN A,(P_DATA)
                ENDIF
                CP E
                JR NZ,IN_EXIT
IN_NEXT         DEC D
                JR NZ,IN_WAIT
IN_EXIT         EXX
                RET

CMD00           DB 0X40,0X00,0X00,0X00,0X00,0X95;GO_IDLE_STATE
CMD08           DB 0X48,0X00,0X00,0X01,0XAA,0X87;SEND_IF_COND
CMD16           DB 0X50,0X00,0X00,0X02,0X00,0XFF;SET_BLOCKEN

;ŒŽƒŽ ‘…Š’ŽŽ… —’…ˆ… ‘ SD Š€’›
RDMULTI         EX AF,AF'

                CALL SECM200
                EX AF,AF'
                IF NGS=1
                LD BC,SD_RSTR
                ELSE
                LD BC,P_DATA
                ENDIF
RDMULT1         EX AF,AF'

                CALL IN_OOUT
                CP 0XFE
                JR NZ,$-5
                INIR
                NOP
                INIR
                NOP
                IN A,(C)
                NOP
                IN A,(C)
                EX AF,AF'
                DEC A
                JR NZ,RDMULT1
                LD A,CMD_12
                CALL OUT_COM
                CALL IN_OOUT
                INC A
                JR NZ,$-4
                RET

;‚›ŽŠ€ ŽŒ…€ Š‹€‘’…€ ˆ‡ ”€‰‹Ž‚ŽƒŽ Žˆ‘€’…‹Ÿ
RD_CLAS         EX DE,HL
                LD DE,0X14                      ;‘’€˜ˆ… 16 ˆ’ —ˆ’€…Œ ˆ‡ ‘Œ…™…ˆŸ +20
                ADD HL,DE
                LD C,(HL)
                INC HL
                LD B,(HL)
                LD E,5                          ;Œ‹€„˜ˆ… 16 ˆ’ —ˆ’€…Œ ˆ‡ ‘Œ…™…ˆŸ +26
                ADD HL,DE
                LD E,(HL)
                INC HL
                LD D,(HL)
                INC HL
                RET

PAGE_7FFD       PUSH BC
                LD BC,CONF_128
                OR 0X10
                OUT (C),A
                POP BC
                RET

;Ž‚…Š€ Ž Œ€‘Š…
COMPARE         LD DE,FB_EXT
                LD B,0X0B
                LD A,(DE)
                CP (HL)
                RET NZ
                INC HL
                INC DE
                DJNZ $-5
                RET

;€‘€ŠŽ‚™ˆŠ “’ˆ Š ”€‰‹“
FNDBUF          LD BC,0X0802
                LD DE,FB_EXT
FNDBUF4         LD A,(HL)
                INC HL
                CP "."
                JR Z,FNDBUF2
                CP "/"
                JR Z,FNDBUF5
                LD (DE),A
                INC DE
                DJNZ FNDBUF4
                LD A,(HL)
                AND A
                RET Z
                INC HL
                JR FNDBUF3

FNDBUF5         LD A,C
                AND A
                RET Z
FNDBUF2         LD A,B
                AND A
                JR Z,FNDBUF3
                LD A," "
                LD (DE),A
                INC DE
                DJNZ $-2
FNDBUF3         LD B,3
                DEC C
                DEC HL
                LD A,(HL)
                CP "/"
                JR Z,FNDBUF4
                INC HL
                JR FNDBUF4