mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
495 lines
11 KiB
NASM
495 lines
11 KiB
NASM
;!TODO ª®¤ ¤¨ª® ª®áâë«ìë© ¨ ¡ã¤¥â ¯¥à¥¤¥« ¢¬¥áâ¥ á ¯à®æ¥¤ãன INITDVC
|
||
ReScanDRV:
|
||
.NUMBER_OF_SUBTABLES EQU 2 ;ª®«¨ç¥á⢮ â ¡«¨æ ¢â®à®£® ã஢ï (LOGDRV, RMDRIVE)
|
||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||
; 0. § ¯®¬¨ ¥¬ ¡ãâ-¤¨áª
|
||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||
LD A,B
|
||
LD (.old_letter),A
|
||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||
; 1. ª®¯¨à㥬 ¢ ¡ãä¥à â ¡«¨æë DEVICE, LOGDRV, RAMDTBL
|
||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||
LD HL,DEVICE
|
||
LD DE,OLD_TABLES.DEVICE
|
||
LD BC,OLD_TABLES.DEVICE - DEVICE
|
||
LDIR
|
||
;
|
||
LD A,.NUMBER_OF_SUBTABLES
|
||
LD (Fill_if_Exists.tbl),A
|
||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||
; 2. ¢ë§ë¢ ¥¬ ¨¨æ¨ «¨§ æ¨î ¤à ©¢®¢
|
||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||
CALL INITDVC_RET_DRIVE
|
||
LD (DRV_PAGE.LDRIVE),A
|
||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||
; 3. áà ¢¨¢ ¥¬ § ¯¨á¨ áâ àëå â ¡«¨æ á ®¢ë¬¨:
|
||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||
LD HL,OLD_TABLES.DEVICE
|
||
LD B,DSS_MAX_DRIVES_AMOUNT
|
||
.tbl_scanNew_mainLoop:
|
||
PUSH BC
|
||
PUSH HL
|
||
; ¯®«ãç ¥¬ ®¬¥à ¯à®æ¥¤ãàë ¤«ï í⮩ ¡ãª¢ë ¤¨áª
|
||
LD A,(HL)
|
||
;
|
||
CP #FF
|
||
JR Z,.nextN
|
||
;
|
||
LD B,A
|
||
INC HL
|
||
LD A,(HL)
|
||
INC HL
|
||
LD H,(HL)
|
||
LD L,A
|
||
; [¨é¥¬ çâ® § ¤à ©¢]
|
||
EX DE,HL
|
||
; FDD?
|
||
LD HL,FDDRIVE
|
||
AND A
|
||
SBC HL,DE
|
||
JR Z,.nextN ; ¯à®¯ã᪠FDD ¤à ©¢®¢
|
||
; HDD?
|
||
LD HL,HDDRIVE
|
||
AND A
|
||
SBC HL,DE
|
||
; HDD! ‘¢¥àª ¯® â ¡«¨æ¥ LOGDRV
|
||
JP Z,SCAN_TABLES.HARD_DRV
|
||
; RD?
|
||
LD HL,RMDRIVE
|
||
AND A
|
||
SBC HL,DE
|
||
; RAM Drive! ‘¢¥àª ¯® â ¡«¨æ¥ RAMDTBL
|
||
JP Z,SCAN_TABLES.RAM_DRV
|
||
; CD/DVD?
|
||
;LD HL,CDDRIVE
|
||
;AND A
|
||
;SUB HL,DE
|
||
; CD/DVD!
|
||
; JR Z,SCAN_TABLES.CD_ROM
|
||
|
||
; á«¥¤ãî騩 ¢¨â®ª
|
||
.nextN: POP HL
|
||
.nextN2:
|
||
INC HL
|
||
INC HL
|
||
INC HL
|
||
POP BC
|
||
DJNZ .tbl_scanNew_mainLoop
|
||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||
; 4. áà ¢¨¢ ¥¬ § ¯¨áì ®¢ëå â ¡«¨æ á® áâ à묨
|
||
; . ¥á«¨ ¤à ©¢ ⮫쪮 ¢ ®¢®©:
|
||
; 1) ¢âëª ¥¬ ¥£® ¢ ¯¥à¢ãî ᢮¡®¤ãî § ¯¨áì ¢ DEVICE (¨«¨ áâ ¢¨¬ ¯®á«¥ ¯®á«¥¤¥£® ¤à ©¢ )
|
||
;
|
||
; ‚•Ž„: IX - OLD_TABLES.DEVICE
|
||
; HL - OLD_TABLES.DEVICE.End
|
||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||
INC HL
|
||
LD (OLD_TABLES_CURRENT),HL
|
||
EXX
|
||
LD HL,OLD_TABLES.LOGDRV - LOGDRV
|
||
LD B,DSS_MAX_DRIVES_AMOUNT
|
||
EXX
|
||
; 室¨¬ ¢ áâ ன DEVICE ¯¥à¢ãî ᢮¡®¤ãî ï祩ªã (¯à®¢¥à塞 á ª®æ ¢ ç «®)
|
||
LD IX,OLD_TABLES.DEVICE + OLD_TABLES.DEVICE.Size - OLD_TABLES.DEVICE.TBL_Entry
|
||
LD IY,LOGDRV
|
||
LD DE,-OLD_TABLES.DEVICE.TBL_Entry ; ¤¢¨£ ¥¬áï ¯® â ¡«¨æ¥ § ¤
|
||
LD B,DSS_MAX_DRIVES_AMOUNT
|
||
;
|
||
.loop1: LD A,#FF
|
||
CP (IX+0)
|
||
JR NZ,.loop2_start
|
||
ADD IX,DE
|
||
DJNZ .loop1
|
||
.loop1_exit:
|
||
LD A,C ; § ª®ç¨«¨ áç¨â âì ¯¥à¥¬¥ãî LDRIVE
|
||
LD (DRV_PAGE.LDRIVE),A
|
||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||
|
||
; 5. ¯à®¢¥à塞, ¥ £à®åã«áï «¨ ¡ãâ-¤¨áª.
|
||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||
.old_letter+1:
|
||
LD A,0
|
||
_CALC_DEVICE_ENTRY OLD_TABLES.DEVICE
|
||
LD A,(HL)
|
||
INC A
|
||
SCF
|
||
;JP Z,ERROR_BOOTDRV_DIES
|
||
RET Z
|
||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||
|
||
; 6. § ¬¥ï¥¬ ®¢ë¥ â ¡«¨æë ¬®¤¨ä¨æ¨à®¢ ë¥ áâ àë¥
|
||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||
LD HL,OLD_TABLES.DEVICE
|
||
LD DE,DEVICE
|
||
LD BC,OLD_TABLES.DEVICE - DEVICE
|
||
LDIR
|
||
;
|
||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||
|
||
;7. ¢ë室
|
||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||
LD A,(DRV_PAGE.LDRIVE)
|
||
AND A
|
||
RET
|
||
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||
|
||
;-----------------------[]
|
||
.loop2_start:
|
||
LD C,B ; ç¨ ¥¬ áç¨â âì ¯¥à¥¬¥ãî LDRIVE
|
||
LD A,DSS_MAX_DRIVES_AMOUNT
|
||
SUB B ; ᪮«ìª® è £®¢ ¢¯¥àñ¤ ¯® â ¡«¨æ¥ ®áâ «®áì
|
||
LD B,A
|
||
;
|
||
.loop2: LD DE,DEVICE.TBL_Entry ; ⥯¥àì ¤¢¨£ ¥¬áï ¯® â ¡«¨æ¥ ¢¯¥àñ¤
|
||
ADD IX,DE
|
||
; âãâ 㪠§ â¥«ì ¯®ª §ë¢ ¥â ¯¥à¢ãî ᢮¡®¤ãî ï祩ªã ¯®á«¥ ¡«®ª á ¤ 묨 ¤à ©¢®¢
|
||
PUSH IX
|
||
PUSH BC
|
||
CALL Fill_if_Exists
|
||
POP BC
|
||
POP IX
|
||
; NC:
|
||
; DE = ¤à¥á ¯à®æ¥¤ãàë ®¡à ¡®â稪 â ¡«¨æë
|
||
; A = «®£¨ç¥áª¨© ®¬¥à ãáâனá⢠¢ â ¡«¨æ¥ ®¡à ¡®â稪
|
||
;
|
||
; CF - ¥â ¡®«ìè¥ ®¢ëå § ¯¨á¥©
|
||
JR C,.loop1_exit
|
||
|
||
LD (IX+0),A
|
||
LD (IX+1),E
|
||
LD (IX+2),D
|
||
;
|
||
INC C ; ¤®¡ ¢¨«¨ ¤à ©¢
|
||
;
|
||
DJNZ .loop2
|
||
JR .loop1_exit
|
||
;-----------------------[]
|
||
|
||
;-----------------------[]
|
||
Fill_if_Exists:
|
||
.tbl+1: LD B,ReScanDRV.NUMBER_OF_SUBTABLES
|
||
DJNZ 1F
|
||
; B=1, RAMDTBL
|
||
LD A,RAMDTBL.TBL_Entry
|
||
LD IY,RAMDTBL
|
||
CALL .RUN
|
||
LD DE,RMDRIVE
|
||
RET NC
|
||
LD A,(.tbl)
|
||
DEC A ;!!!!! ¬®¦¥â ¡ëâì ¯¥à¥¯®«¥¨¥
|
||
LD (.tbl),A
|
||
RET
|
||
;
|
||
1: DJNZ 1F
|
||
; B=2, LOGDRV
|
||
LD A,LOGDRV.TBL_Entry
|
||
LD IY,LOGDRV
|
||
CALL .RUN
|
||
LD DE,HDDRIVE
|
||
RET NC
|
||
; ¯¥à¥å®¤¨¬ ¤àã£ãî â ¡«¨æã - RAMDTBL
|
||
LD A,(.tbl)
|
||
DEC A ;!!!!! ¬®¦¥â ¡ëâì ¯¥à¥¯®«¥¨¥
|
||
LD (.tbl),A
|
||
LD HL,OLD_TABLES.RAMDTBL
|
||
LD (OLD_TABLES_CURRENT),HL
|
||
EXX
|
||
LD B,MAX_RAMDRIVES
|
||
EXX
|
||
JR Fill_if_Exists
|
||
;
|
||
1: SCF ; unknown table number
|
||
RET
|
||
;
|
||
.RUN: EXX
|
||
;
|
||
LD D,0
|
||
LD E,A
|
||
PUSH DE
|
||
;
|
||
LD A,#FE ; ’ ª ¯®¨áª § ª®ç¨âáï «¨¡® ®¬¥à¥ ¤à ©¢ , «¨¡® ¯® ª®æã â ¡«¨æë
|
||
PUSH BC
|
||
CALL Find_Record.loop1 ; ¨é¥â ¢ ®¢®© â ¡«¨æ¥ ®¢ãî § ¯¨áì
|
||
POP BC
|
||
JR NC,1F
|
||
;
|
||
POP DE
|
||
EXX
|
||
RET
|
||
;
|
||
1: PUSH IY ; á®åà 塞 ⥪ã騩 ¤à¥á ®¢®© â ¡«¨æë
|
||
;
|
||
LD IY,(OLD_TABLES_CURRENT)
|
||
;
|
||
LD A,#FF ; ’ ª ¯®¨áª § ª®ç¨âáï «¨¡® ¯ãá⮩ § ¯¨á¨, «¨¡® ¯® ª®æã â ¡«¨æë
|
||
LD C,D ; ®¬¥à § ¯¨á¨ ¢ â ¡«¨æ¥. D=0
|
||
PUSH BC
|
||
CALL Find_Record.loop2
|
||
LD A,C
|
||
POP BC
|
||
JR NC,1F
|
||
;
|
||
POP DE
|
||
POP DE
|
||
EXX
|
||
RET
|
||
;
|
||
1: EX (SP),IY ; ¯¥à¥ª«î票¥ á® áâ ன ®¢ãî â ¡«¨æã
|
||
PUSH IY
|
||
EXX
|
||
; ¯¥à¥ª¨¤ë¢ ¥¬ § ¯¨áì ¨§ ®¢®© ¢ áâ àãî
|
||
POP HL
|
||
POP DE
|
||
POP BC
|
||
LDIR
|
||
|
||
LD (IY),#FF ; £à®å ¥¬ ⮫쪮 çâ® ¯¥à¥ª¨ãâãî § ¯¨áì ¨§ ®¢®© â ¡«¨æë
|
||
AND A
|
||
RET
|
||
OLD_TABLES_CURRENT: WORD 0
|
||
;-----------------------[]
|
||
|
||
;-----------------------[]
|
||
; ‚•Ž„: A - Œ ᪠¤«ï áà ¢¥¨ï
|
||
; DE - „«¨ ®¤®© § ¯¨á¨
|
||
; IY - €¤à¥á ¤ ëå ¢ â ¡«¨æ¥
|
||
; ‚›•Ž„: NC:
|
||
; IY - ç «® ¯®¤å®¤ï饩 § ¯¨á¨
|
||
; C - ®¬¥à ®¢®© § ¯¨á¨ ¢ áâ ன â ¡«¨æ¥
|
||
; CF - <20>¥ ©¤¥®, â ¡«¨æ § ª®ç¨« áì
|
||
Find_Record:
|
||
.loop1: CP (IY)
|
||
RET NC
|
||
ADD IY,DE
|
||
INC C
|
||
DJNZ .loop1
|
||
; â ¡«¨æã ¯à®è¥àá⨫¨
|
||
SCF
|
||
RET
|
||
.loop2: CP (IY)
|
||
RET Z
|
||
ADD IY,DE
|
||
INC C
|
||
DJNZ .loop2
|
||
; â ¡«¨æã ¯à®è¥àá⨫¨
|
||
SCF
|
||
RET
|
||
;-----------------------[]
|
||
|
||
;-----------------------[]
|
||
; ERROR_BOOTDRV_DIES:
|
||
; DI
|
||
; LD E,1
|
||
; LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default
|
||
; RST ToBIOS
|
||
; ;
|
||
; LD HL,#2050
|
||
; LD DE,0
|
||
; LD BC,256*COLORS.CGA.PAPER.BLUE + BIOS.LP_CLS_WIN
|
||
; RST ToBIOS
|
||
; ;
|
||
; LD A,1
|
||
; OUT (SCREEN_SWITCH),A ; set scr-2
|
||
; ;
|
||
; LD HL,.ERROR_MSG
|
||
; LD DE,#A000
|
||
; LD BC,.ERROR_MSG.size
|
||
; LD A,C
|
||
; LDIR
|
||
; ;
|
||
; LD DE,16*256 + (80-.ERROR_MSG.size)/2 ;X=0, Y=16
|
||
; LD C,BIOS.LP_SET_PLACE
|
||
; RST ToBIOS
|
||
; ;
|
||
; LD HL,#A000
|
||
; LD DE,0*256 + COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE
|
||
; LD B,A
|
||
; LD C,BIOS.LP_PRINT_LINE3
|
||
; RST ToBIOS
|
||
; ;
|
||
; .loop: DI
|
||
; HALT
|
||
; JR .loop
|
||
; ;
|
||
; .ERROR_MSG: DZ "Kernel panic! Boot disk lost. Press Ctrl+Alt+Del or RESET."
|
||
; .ERROR_MSG.size EQU $-.ERROR_MSG
|
||
;-----------------------[]
|
||
|
||
|
||
;-----------------------[]
|
||
; <20>… ƒ<>Ž•€’œ HL!
|
||
; . ¥á«¨ ¤à ©¢ ¥áâì ¢ ®¢®© ¨ áâ ன, â® § â¨à ¥¬ ¢ ®¢®©
|
||
; â ¡«¨æ¥ ᮢ¯ ¢è¨© ¤à ©¢
|
||
; ¡. ¥á«¨ ¤à ©¢ ¥áâì ⮫쪮 ¢ áâ ன, â®:
|
||
; ¡1) £à®å ¥¬ ä ©«®¢ë¥ ¬ ¨¯ã«ïâ®àë á ¥£® ®¬¥à®¬
|
||
MODULE SCAN_TABLES
|
||
; ¢å®¤: B - «®£.®¬¥à ¤à ©¢ , DE
|
||
RAM_DRV:
|
||
; <20>®«ãç ¥¬ ®¬¥à à ¬¤¨áª ¢ OLD_TABLES.RAMDTBL
|
||
LD A,B
|
||
LD BC,OLD_TABLES.RAMDTBL
|
||
CALL GET_RAMDRV_NUM.skip_tbl
|
||
LD (.cur_drv),BC
|
||
AND #0F
|
||
LD C,A ; ®¬¥à à ¬¤¨áª
|
||
; ˆé¥¬ ¢ ®¢®© â ª®© ¦¥ ®¬¥à à ¬¤¨áª
|
||
LD B,MAX_RAMDRIVES
|
||
LD DE,RAMDTBL
|
||
.loop: LD A,(DE)
|
||
SUB C
|
||
JR Z,.found
|
||
INC DE
|
||
INC DE
|
||
DJNZ .loop
|
||
; ‡€<E280A1>ˆ‘œ <20>… <20>€‰„…<E2809E>€
|
||
; „®áâ ñ¬ ¯®«®¦¥¨¥ ¢ OLD_TABLES.DEVICE
|
||
POP HL
|
||
; „®áâ ñ¬ è £ ®¡é¥£® 横« ¤«ï ¯®«ãç¥¨ï «®£.®¬¥à ¤à ©¢ ¢ KILL_FM
|
||
POP BC
|
||
PUSH BC
|
||
; ƒà®å ¥¬ ”Œ ¨ § ¯¨áì ¢ OLD_TABLES.DEVICE
|
||
CALL KILL_FM
|
||
; £à®å ¥¬ ¢ áâ ன RAMDTBL íâ®â ¤à ©¢
|
||
EX DE,HL
|
||
.cur_drv+1:
|
||
LD HL,0
|
||
LD (HL),#FF
|
||
DEC HL
|
||
LD (HL),#FF
|
||
EX DE,HL
|
||
JP ReScanDRV.nextN2
|
||
;
|
||
.found: DEC A
|
||
; § â¨à ¥¬ ¢ ®¢®© â ¡«¨æ¥ ᮢ¯ ¢è¨© ¤à ©¢ (ç⮡ «¥£ç¥ ¡ë«® ¯ àá¨âì ®á⠢襥áï)
|
||
LD (DE),A
|
||
DEC DE
|
||
LD (DE),A
|
||
JP ReScanDRV.nextN
|
||
;-----[]
|
||
HARD_DRV:
|
||
LD L,B
|
||
LOGDRV_ENTRY_FIND OLD_TABLES.LOGDRV
|
||
LD IX,LOGDRV
|
||
LD DE,LOGDRV.TBL_Entry
|
||
LD B,DSS_MAX_DRIVES_AMOUNT
|
||
;
|
||
.loop: LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER)
|
||
;CP #FF
|
||
;JR Z,.skip
|
||
CP (IX+LOGDRV.PHISICAL_DRV_NUMBER)
|
||
JR NZ,.skip
|
||
;
|
||
LD A,(IY+LOGDRV.SECTOR_OFFSET)
|
||
CP (IX+LOGDRV.SECTOR_OFFSET)
|
||
JR NZ,.skip
|
||
LD A,(IY+LOGDRV.SECTOR_OFFSET+1)
|
||
CP (IX+LOGDRV.SECTOR_OFFSET+1)
|
||
JR NZ,.skip
|
||
LD A,(IY+LOGDRV.SECTOR_OFFSET+2)
|
||
CP (IX+LOGDRV.SECTOR_OFFSET+2)
|
||
JR NZ,.skip
|
||
LD A,(IY+LOGDRV.SECTOR_OFFSET+3)
|
||
CP (IX+LOGDRV.SECTOR_OFFSET+3)
|
||
JR NZ,.skip
|
||
LD A,(IY+LOGDRV.SIZE_IN_SECTORS)
|
||
CP (IX+LOGDRV.SIZE_IN_SECTORS)
|
||
JR NZ,.skip
|
||
LD A,(IY+LOGDRV.SIZE_IN_SECTORS+1)
|
||
CP (IX+LOGDRV.SIZE_IN_SECTORS+1)
|
||
JR NZ,.skip
|
||
LD A,(IY+LOGDRV.SIZE_IN_SECTORS+2)
|
||
CP (IX+LOGDRV.SIZE_IN_SECTORS+2)
|
||
JR NZ,.skip
|
||
LD A,(IY+LOGDRV.SIZE_IN_SECTORS+3)
|
||
CP (IX+LOGDRV.SIZE_IN_SECTORS+3)
|
||
JR Z,.found
|
||
;
|
||
.skip: ADD IX,DE
|
||
DJNZ .loop
|
||
; ‡€<E280A1>ˆ‘œ <20>… <20>€‰„…<E2809E>€
|
||
; ƒà®å ¥¬ áâ àãî § ¯¨áì ¢ OLD_TABLES.LOGDRV
|
||
LD A,#FF
|
||
LD (IY+LOGDRV.PHISICAL_DRV_NUMBER),A
|
||
; „®áâ ñ¬ ¯®«®¦¥¨¥ ¢ OLD_TABLES.DEVICE
|
||
POP HL
|
||
; „®áâ ñ¬ è £ ®¡é¥£® 横« ¤«ï ¯®«ãç¥¨ï «®£.®¬¥à ¤à ©¢ ¢ KILL_FM
|
||
POP BC
|
||
PUSH BC
|
||
; ƒà®å ¥¬ ”Œ ¨ § ¯¨áì ¢ OLD_TABLES.DEVICE
|
||
CALL KILL_FM
|
||
;
|
||
JP ReScanDRV.nextN2
|
||
;
|
||
.found: ; § â¨à ¥¬ ¢ ®¢®© â ¡«¨æ¥ ᮢ¯ ¢è¨© ¤à ©¢ (ç⮡ «¥£ç¥ ¡ë«® ¯ àá¨âì ®á⠢襥áï)
|
||
LD (IX+LOGDRV.PHISICAL_DRV_NUMBER),#FF
|
||
JP ReScanDRV.nextN
|
||
;
|
||
; CD_ROM:
|
||
; JP ReScanDRV.nextN
|
||
;-----[]
|
||
; ‚•Ž„: HL - ⥪ãé ï § ¯¨áì ¢ â ¡«¨æ¥ DEVICE
|
||
; B - è £ ®¡é¥£® 横«
|
||
KILL_FM:;
|
||
LD A,DSS_MAX_DRIVES_AMOUNT
|
||
SUB B
|
||
LD C,A
|
||
; ¢âëª ¥¬ áâà ¨æã ï¤à á â ¡«¨æ¥© ä ©«®¢ëå ¬ ¨¯ã«ïâ®à®¢
|
||
PUSH BC
|
||
LD A,(PORTAL.out_DRV.RETBANK)
|
||
LD B,A
|
||
LD C,SLOT3
|
||
IN A,(SLOT3)
|
||
OUT (C),B
|
||
POP BC
|
||
PUSH AF
|
||
; ˜¥àá⨬ ¬ ¨¯ã«ïâ®àë «¨ç¨¥ ¢ ¨å £à®åã⮣® ¤à ©¢
|
||
LD IY,CORE_BUFFERS.FM_BUF - CORE_BUFFERS.FM_BUF.Size + #C000
|
||
LD B,FMCOUNT
|
||
LD DE,CORE_BUFFERS.FM_BUF.Size
|
||
.loop_fm:
|
||
ADD IY,DE
|
||
LD A,(IY+_sFM.DRIVE)
|
||
CP C
|
||
JR NZ,.skip
|
||
XOR A
|
||
LD (IY+_sFM.FS_REC.NAME),A ; £à®å ¥¬ ¬ ¨¯ã«ïâ®à
|
||
.skip: DJNZ .loop_fm
|
||
;
|
||
POP AF
|
||
OUT (SLOT3),A
|
||
;
|
||
; £à®å ¥¬ ¢ OLD_TABLES.DEVICE 㡨âë© ¤à ©¢
|
||
LD (HL),#FF
|
||
;
|
||
RET
|
||
ENDMODULE
|
||
;-----------------------[]
|
||
|
||
/*
|
||
[DRIVE TABLES] .Size == DEVICE.Size + LOGDRV.Size + RAMDTBL.Size == 78+1 + 416 + 32 == 526
|
||
|
||
; «®£¨ç¥áª¨© ®¬¥à ãáâனá⢠+ ¤à¥á ®¡à ¡®â稪 .
|
||
; <20>®à浪®¢ë© ®¬¥à * 3 = ¡ãª¢ ¤¨áª + "A"
|
||
DEVICE EQU $
|
||
.TBL_Entry EQU 3
|
||
.End EQU 1 + $ + DSS_MAX_DRIVES_AMOUNT * .TBL_Entry ; ¤«ï á⮯-¡ ©â #FF
|
||
.Size EQU .End - $
|
||
|
||
;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||
;+01 LONG SECTOR OFFSET
|
||
;+05 LONG SIZE IN SECTORS
|
||
;+09 LONG Volume Serial Number in HEX ; [ ] ;!TODO
|
||
;+13 WORD FREE
|
||
;+15 BYTE FREE
|
||
; ‹®£¨ç¥áª¨© ®¬¥à à §¤¥« .
|
||
;<3B>®¬¥à £à㯯ë = «®£¨ç¥áª¨© ®¬¥à à §¤¥« HDD ¨§ DEVICE
|
||
LOGDRV EQU DEVICE + DEVICE.Size
|
||
.TBL_Entry EQU 16
|
||
.Size EQU DSS_MAX_DRIVES_AMOUNT * .TBL_Entry
|
||
|
||
; ’€<E28099>‹ˆ–€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆ‘Š€ ˆ …ƒŽ RAM-DISK ID
|
||
; Log Number: DB RAM_DRIVE_NUMBER, RAM_DRIVE_ID
|
||
RAMDTBL EQU $ + DEVICE.Size + LOGDRV.Size
|
||
.TBL_Entry EQU 2
|
||
.Size EQU .TBL_Entry * MAX_RAMDRIVES
|
||
*/ |