From 7a40f43798aa37022478549bbbd0151110dc3bbc Mon Sep 17 00:00:00 2001 From: Tolik Trek Date: Sat, 11 Oct 2025 15:46:43 +1000 Subject: [PATCH] work in progress --- DSS/API/Attribute.asm | 21 +--- DSS/DOS_FS.ASM | 107 +------------------- DSS/DRV-MAIN.ASM | 53 +++++----- DSS/DSS-MAIN.ASM | 6 +- DSS/FS/FAT.asm | 145 +++++++++++++++++++++++----- DSS/FS/FS.ASM | 2 + DSS/drivers/media/ReScanDRV.ASM | 140 +++++++++++++-------------- DSS/drivers/media/Shared.asm | 6 +- DSS/drivers/media/ata_atapi-drv.asm | 110 ++++++++++----------- DSS/drivers/media/ram_disk-drv.asm | 16 +-- DSS/first_init.asm | 10 +- SHELL/build.txt | 2 +- Shared_Includes | 2 +- 13 files changed, 296 insertions(+), 324 deletions(-) diff --git a/DSS/API/Attribute.asm b/DSS/API/Attribute.asm index a06e1cc..8b7ac2c 100644 --- a/DSS/API/Attribute.asm +++ b/DSS/API/Attribute.asm @@ -6,7 +6,7 @@ ; 1 SET ATTRIB ; OUTPUT: A - ATTRIB //////////////////////////////////////////////////////////////////////// -ATTRIB: ;!TEST Current Dir ;[x] 15/10/23 +ATTRIB: ; Current Dir ;[x] 15/10/23 LD C,A ; PUSH HL @@ -25,20 +25,9 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23 INC B DJNZ .B_1 ; B = 0 -.READ: ;!TEST ;[x] 16/11/23 optimize get attribute - ;XOR A - ; - CALL .OPENATR ;R002 +.READ: CALL .OPENATR ;R002 RET C - ;!TEST ;[x] 16/11/23 optimize get attribute - LD A,(CORE_BUFFERS.HANDBUF + FAT_DIRECTORY_RECORD.ATTRIBUT) - ;LD B,(IY+_sFM.ATTRIBUT) - ;PUSH BC - ;CALL CLOSE - ;POP BC - ;RET C - ;LD A,B - ; + LD A,(CORE_BUFFERS.HANDBUF + FAT_DIRECTORY_RECORD.ATTRIBUT) RET ; .B_1: DJNZ .B_2 @@ -46,9 +35,7 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23 .WRITE_FN: AND FAT_ATTR.NoVolID ; [x] 2/12/23 фикс для volume ID .WRITE: PUSH AF XOR A - ;!TEST ;[x] 16/11/23 optimize get attribute - LD (OPEN_FN.TMP),A - ; + LD (OPEN_FN.TMP),A CALL .OPENATR ;R002 CALL NC,OPEN_FN.FM ; diff --git a/DSS/DOS_FS.ASM b/DSS/DOS_FS.ASM index 7fbafa4..2c9186b 100644 --- a/DSS/DOS_FS.ASM +++ b/DSS/DOS_FS.ASM @@ -71,7 +71,7 @@ SetPath_GetName: INC HL ; .dir_loop: LD DE,CORE_BUFFERS.TMPNAME - LD BC,#0DFF + LD BC,256*CORE_BUFFERS.TMPNAME.Size + #FF .loop: LD A,(HL) INC HL CP '\' ; @@ -208,111 +208,6 @@ OPENDSK: ;!TEST DRV.Open ;----------------------------------------------------------------------; -;----------------------------------------------------------------------; -; Преобразовать имя 8.3 -> 11 формат -; вход: hl = 8.3 имя -; de = буфер имени 11 симв. формата -; при ошибке CF - недоп. имя -; -; HL - MASK "file*.t??" -; DE - 11 bytes filename -; RET: C=2 FILE WITHOUT EXTENTION -; C=1 FILE WITH EXTENTION -MASK: LD HL,CORE_BUFFERS.TMPNAME -.name: LD DE,CORE_BUFFERS.MASKARE -.custom: PUSH HL - PUSH DE - LD H,D - LD L,E - INC DE - LD (HL),' ' - LD BC,10 ;!HARDCODE = size (FileName + Extension - 1) - LDIR - POP DE - POP HL - LD A,(HL) - CP '.' ;R007 - SCF ;R007 - JR Z,.MASKB ;R007 - CP ' '+1 -.MASKB: LD A,DSS_Error.sys.INVALID_NAME - RET C - LD BC,#0902 ; B - счетчик -.MASK1: LD A,(HL) - CP ' '+1 - CCF - RET NC - ; - CP '*' - JR Z,.MASK3 - CP '.' - JR Z,.MASK5 - CP '"' - JR Z,.MASK_ERR - CP '+' - JR Z,.MASK_ERR - CP ',' - JR Z,.MASK_ERR - CP '/' - JR Z,.MASK_ERR - CP ':' - JR Z,.MASK_ERR - CP ';' - JR Z,.MASK_ERR - CP '<' - JR Z,.MASK_ERR - CP '=' - JR Z,.MASK_ERR - CP '>' - JR Z,.MASK_ERR - CP '[' - JR Z,.MASK_ERR - CP '\' - JR Z,.MASK_ERR - CP ']' - JR Z,.MASK_ERR - CP '|' - JR Z,.MASK_ERR - CALL UPPER ; a..z -> A..Z -.MASK2: LD (DE),A - INC HL - INC DE - DJNZ .MASK1 - ; -.MASK_ERR: LD A,DSS_Error.sys.INVALID_NAME - SCF - RET - ; -.MASK3: LD A,'?' - INC HL - DJNZ .MASK6 - JR .MASK_ERR - ; -.MASK6: LD (DE),A - INC DE - DJNZ .MASK6 - LD B,1 - JR .MASK1 - ; -.MASK5: LD A,' ' - INC HL - DJNZ .MASK4 - LD B,4 - DEC C - JR NZ,.MASK1 - JR .MASK_ERR - ; -.MASK4: LD (DE),A - INC DE - DJNZ .MASK4 - LD B,4 - DEC C - JR NZ,.MASK1 - JR .MASK_ERR -;----------------------------------------------------------------------; - - - ;----------------------------------------------------------------------; ;!TEST Current Dir ;[x] 15/10/23 DIR_PATH_CHANGE: diff --git a/DSS/DRV-MAIN.ASM b/DSS/DRV-MAIN.ASM index 453727b..b9a7798 100644 --- a/DSS/DRV-MAIN.ASM +++ b/DSS/DRV-MAIN.ASM @@ -1,12 +1,6 @@ -;[BEGIN] -;//MODULE: DRV-MAIN AUTHOR: Denis Parinov -;//CREATE: 2003-03-12 -;--------------------------------------------------------------- -;Rev Date Name Description -;--------------------------------------------------------------- -;R00 2003-03-19 DNS Initial version -;--------------------------------------------------------------- -DRV_MODULE_START EQU $ + MODULE DRIVES_DRIVER + +MODULE_START EQU $ ; ORG #0000 ;PAGEDRV EQU 0 @@ -194,8 +188,8 @@ A0066: JP DRV_PAGE.NMI ; //////////////////////////////////////////////////////////////////////// ; <[DRIVE PAGE SWITCH]> ; - BLOCK PORTAL.RSTx18_SWITCH_ADDRESS-$-(PORTAL.out_DRV.switch - PORTAL.out_DRV),#C7 -PORTAL.out_DRV: PUSH BC + BLOCK PORTAL.RSTx18_SWITCH_ADDRESS-$-(PORTAL.out.switch - PORTAL.out),#C7 +PORTAL.out: PUSH BC .RETBANK+2: LD BC,SLOT0 + 0*256; ;!!!!! ReScnDRV использует это значение .switch: OUT (C),B ASSERT $!=84,'-> Portal error!'; @@ -204,10 +198,10 @@ PORTAL.out_DRV: PUSH BC POP BC POP AF .ADCALL+1: CALL DISPATCH ; патчится на INTDISK - JR NC,PORTAL.out_DRV + JR NC,PORTAL.out OR DSS_Error.DRV_MASK SCF - JP PORTAL.out_DRV + JP PORTAL.out //////////////////////////////////////////////////////////////////////// @@ -228,7 +222,7 @@ DRV_PAGE.LDRIVE: DB #00 DISPATCH: LD HL,INTDISK - LD (PORTAL.out_DRV.ADCALL),HL + LD (PORTAL.out.ADCALL),HL INITDVC_RET_DRIVE: CALL INITDVC LD A,(DRV_PAGE.LDRIVE) @@ -295,7 +289,7 @@ LOGDRV EQU DEVICE + DEVICE.End ;-----------------------[ram_disk-drv.asm table]-----------------------; ; ТАБЛИЦА СООТВЕТСТВИЯ МЕЖДУ ФИЗИЧЕСКИМ НОМЕРОМ РАМДИСКА И ЕГО RAM-DISK ID ; Log Number: DB RAM_Drive_Log_Number, RAM_Drive_ID ;(BIOS 0-15), (Block ID for BIOS) -RAMDTBL EQU LOGDRV + LOGDRV.Size +RAMDTBL EQU LOGDRV +DRIVES_DRIVER.LOGDRV.Size .TBL_Entry EQU 2 .Size EQU .TBL_Entry * MAX_RAMDRIVES ; RAMDTBL: DUP MAX_RAMDRIVES * RAMDTBL.TBL_Entry @@ -311,10 +305,10 @@ RAMDTBL EQU LOGDRV + LOGDRV.Size MODULE OLD_TABLES ; ;--------------------------[shared.asm table]--------------------------; -DEVICE EQU @RAMDTBL + @RAMDTBL.Size -.TBL_Entry EQU @DEVICE.TBL_Entry -.Size: EQU @DEVICE.Size -.End EQU @DEVICE.End +DEVICE EQU @DRIVES_DRIVER.RAMDTBL + @DRIVES_DRIVER.RAMDTBL.Size +.TBL_Entry EQU @DRIVES_DRIVER.DEVICE.TBL_Entry +.Size: EQU @DRIVES_DRIVER.DEVICE.Size +.End EQU @DRIVES_DRIVER.DEVICE.End ;----------------------------------------------------------------------; ; @@ -326,8 +320,8 @@ DEVICE EQU @RAMDTBL + @RAMDTBL.Size ;+09 FREE ;+15 LOGDRV EQU DEVICE + DEVICE.End -.TBL_Entry EQU @LOGDRV.TBL_Entry -.Size EQU @LOGDRV.Size +.TBL_Entry EQU @DRIVES_DRIVER.LOGDRV.TBL_Entry +.Size EQU @DRIVES_DRIVER.LOGDRV.Size ;----------------------------------------------------------------------; ; @@ -335,15 +329,15 @@ LOGDRV EQU DEVICE + DEVICE.End ;-----------------------[ram_disk-drv.asm table]-----------------------; ; ТАБЛИЦА СООТВЕТСТВИЯ МЕЖДУ ФИЗИЧЕСКИМ НОМЕРОМ РАМДИСКА И ЕГО RAM-DISK ID ; Log Number: DB RAM_Drive_Log_Number, RAM_Drive_ID ;(BIOS 0-15), (Block ID for BIOS) -RAMDTBL EQU LOGDRV + LOGDRV.Size -.TBL_Entry EQU @RAMDTBL.TBL_Entry -.Size EQU @RAMDTBL.Size +RAMDTBL EQU LOGDRV + DRIVES_DRIVER.LOGDRV.Size +.TBL_Entry EQU @DRIVES_DRIVER.RAMDTBL.TBL_Entry +.Size EQU @DRIVES_DRIVER.RAMDTBL.Size ; RAMDTBL: DUP MAX_RAMDRIVES * RAMDTBL.TBL_Entry ; DB #FF ; EDUP ; .Size EQU $-RAMDTBL ;----------------------------------------------------------------------; - ENDMODULE + ENDMODULE ;OLD_TABLES ////////////////////////////////////////////////////////////////////////; ;DISPLAY "DEVICE start: ", /H, DEVICE @@ -355,14 +349,15 @@ RAMDTBL EQU LOGDRV + LOGDRV.Size ; ;DRV_TEMP_BUFFER: -DRV_MODULE_START.Size EQU (OLD_TABLES.RAMDTBL + OLD_TABLES.RAMDTBL.Size) - DRV_MODULE_START - DISPLAY "DRV MODULE SIZE: ",/A,DRV_MODULE_START.Size +MODULE_START.Size EQU (OLD_TABLES.RAMDTBL + OLD_TABLES.RAMDTBL.Size) - MODULE_START + DISPLAY "DRV MODULE SIZE: ",/A,MODULE_START.Size ;!TODO ;---------[256 bytes stack for return pages of RST #18 callers]--------; ; #3F00 - #4000 DRV_PAGE.RSTx18_RET_PAGES EQU #4000 ;----------------------------------------------------------------------; -; ASSERT ((#4000-DRV_TEMP_BUFFER-256) > (DEVICE.Size + LOGDRV.Size + RAMDTBL.Size)), "No space for DRV_TEMP_BUFFER in DRV-MAIN page" +; ASSERT ((#4000-DRV_TEMP_BUFFER-256) > (DEVICE.Size +DRIVES_DRIVER.LOGDRV.Size + RAMDTBL.Size)), "No space for DRV_TEMP_BUFFER in DRV-MAIN page" ; ENDMODULE ; OUTEND -;[END] \ No newline at end of file +;[END] + ENDMODULE ;DRIVES_DRIVER \ No newline at end of file diff --git a/DSS/DSS-MAIN.ASM b/DSS/DSS-MAIN.ASM index 9450566..6982b17 100644 --- a/DSS/DSS-MAIN.ASM +++ b/DSS/DSS-MAIN.ASM @@ -368,11 +368,11 @@ BANKTBL EQU ($ & #FF00) + (1 DE:BC, H=0, L - остаток CALL DIV_by_Shifts PUSH HL ; остаток DIV_by_Shifts - ; [x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE + ; GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE PUSH BC ; младшее слово номера кластера PUSH DE ; [x] fat32 старшее слово номера кластера ; - ; EXX - ; LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_H) ; START CLUSTER High - ; LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_H+1) - ; LD A,L - ; OR H - ; EXX - ; LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) ; START CLUSTER Low - ; LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1) - ; OR L - ; OR H CALL CHECK_FIRST_CLUSTER JR Z,.fast_exit_4 CALL GetSavedCluster @@ -2273,7 +2263,7 @@ BLOCK_READ: LD (READ.PointerOnBuffer),IX DJNZ .loop1_big ;;;; ; - ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE + ; GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE POP DE ; [x] fat32 старшее слово номера кластера POP BC ; младшее слово номера кластера CALL SaveGotCluster @@ -2285,21 +2275,21 @@ BLOCK_READ: LD (READ.PointerOnBuffer),IX LD A,C SUB E LD C,A - CP B ; (SectorsPerCluster - остаток) - количество секторов для чтения - JR C,.skip1 ; SIZE > RESIDUE CLUSTER - LD C,B ; SIZE < CLUSTER + CP B ; (SectorsPerCluster - остаток) - количество секторов для чтения + JR C,.skip1 ; SIZE > RESIDUE CLUSTER + LD C,B ; SIZE < CLUSTER .skip1: LD A,B SUB C LD B,A ; EXX - PUSH HL ; номер кластера старшая часть - EXX - PUSH HL ; номер кластера младшая часть - PUSH BC ; B = количество секторов на дочитку, C = (SectorsPerCluster - остаток) либо количество секторов для чтения - PUSH DE ; D = 0, E = остаток DIV_by_Shifts + PUSH HL ; номер кластера старшая часть + EXX + PUSH HL ; номер кластера младшая часть + PUSH BC ; B = количество секторов на дочитку, C = (SectorsPerCluster - остаток) либо количество секторов для чтения + PUSH DE ; D = 0, E = остаток DIV_by_Shifts CALL CLUSTER_TO_SECTOR - POP DE ; D = 0, E = остаток DIV_by_Shifts + POP DE ; D = 0, E = остаток DIV_by_Shifts ADD IX,DE JR NC,.skip2 INC HL @@ -2310,7 +2300,7 @@ BLOCK_READ: LD (READ.PointerOnBuffer),IX RST ToDSS.DRV ; JR C,.Error - POP BC ; B = количество секторов на дочитку, C = (SectorsPerCluster - остаток) либо количество секторов для чтения + POP BC ; B = количество секторов на дочитку, C = (SectorsPerCluster - остаток) либо количество секторов для чтения LD HL,(READ.PointerOnBuffer) LD DE,(CORE_BUFFERS.FS_Buffer.BytesPerSector) ;!TEST @@ -2320,12 +2310,12 @@ BLOCK_READ: LD (READ.PointerOnBuffer),IX DJNZ .loop2 ; LD (READ.PointerOnBuffer),HL - POP DE ; номер кластера младшая часть + POP DE ; номер кластера младшая часть EXX - POP HL ; номер кластера старшая часть + POP HL ; номер кластера старшая часть EXX OR A - RET Z ; количество секторов на дочитку = 0? + RET Z ; количество секторов на дочитку = 0? LD B,A ; .loop4: LD HL,CORE_BUFFERS.FS_Buffer.SectorsPerCluster @@ -2775,6 +2765,111 @@ CHECK_64kb_CLUSTER: ; ;----------------------------------------------------------------------; + +;----------------------------------------------------------------------; +; Преобразовать имя 8.3 -> 11 формат +; вход: hl = 8.3 имя +; de = буфер имени 11 симв. формата +; при ошибке CF - недоп. имя +; +; HL - MASK "file*.t??" +; DE - 11 bytes filename +; RET: C=2 FILE WITHOUT EXTENTION +; C=1 FILE WITH EXTENTION +MASK: LD HL,CORE_BUFFERS.TMPNAME +.name: LD DE,CORE_BUFFERS.MASKARE +.custom: PUSH HL + PUSH DE + LD H,D + LD L,E + INC DE + LD (HL),' ' + LD BC,10 ;!HARDCODE = size (FileName + Extension - 1) + LDIR + POP DE + POP HL + LD A,(HL) + CP '.' ;R007 + SCF ;R007 + JR Z,.MASKB ;R007 + CP ' '+1 +.MASKB: LD A,DSS_Error.sys.INVALID_NAME + RET C + LD BC,#0902 ; B - счетчик +.MASK1: LD A,(HL) + CP ' '+1 + CCF + RET NC + ; + CP '*' + JR Z,.MASK3 + CP '.' + JR Z,.MASK5 + CP '"' + JR Z,.MASK_ERR + CP '+' + JR Z,.MASK_ERR + CP ',' + JR Z,.MASK_ERR + CP '/' + JR Z,.MASK_ERR + CP ':' + JR Z,.MASK_ERR + CP ';' + JR Z,.MASK_ERR + CP '<' + JR Z,.MASK_ERR + CP '=' + JR Z,.MASK_ERR + CP '>' + JR Z,.MASK_ERR + CP '[' + JR Z,.MASK_ERR + CP '\' + JR Z,.MASK_ERR + CP ']' + JR Z,.MASK_ERR + CP '|' + JR Z,.MASK_ERR + CALL UPPER ; a..z -> A..Z +.MASK2: LD (DE),A + INC HL + INC DE + DJNZ .MASK1 + ; +.MASK_ERR: LD A,DSS_Error.sys.INVALID_NAME + SCF + RET + ; +.MASK3: LD A,'?' + INC HL + DJNZ .MASK6 + JR .MASK_ERR + ; +.MASK6: LD (DE),A + INC DE + DJNZ .MASK6 + LD B,1 + JR .MASK1 + ; +.MASK5: LD A,' ' + INC HL + DJNZ .MASK4 + LD B,4 + DEC C + JR NZ,.MASK1 + JR .MASK_ERR + ; +.MASK4: LD (DE),A + INC DE + DJNZ .MASK4 + LD B,4 + DEC C + JR NZ,.MASK1 + JR .MASK_ERR +;----------------------------------------------------------------------; + + MODULE_SIZE EQU $ - MODULE_START ; ENDMODULE ;███████████████████████████████████████████████████████████████████████████████████████████████████████; \ No newline at end of file diff --git a/DSS/FS/FS.ASM b/DSS/FS/FS.ASM index 5222613..5a9a015 100644 --- a/DSS/FS/FS.ASM +++ b/DSS/FS/FS.ASM @@ -1,3 +1,5 @@ +FS_MODULE_START EQU $ + ;----------------------------------------------------------------------; ; [x] fat32 ; [ ] CDFS RD_BPB: CALL READ_BPB ; [ ] cdfs diff --git a/DSS/drivers/media/ReScanDRV.ASM b/DSS/drivers/media/ReScanDRV.ASM index ea9edcd..2b433e2 100644 --- a/DSS/drivers/media/ReScanDRV.ASM +++ b/DSS/drivers/media/ReScanDRV.ASM @@ -10,8 +10,8 @@ ReScanDRV: ; 1. копируем в буфер таблицы DEVICE, LOGDRV, RAMDTBL ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; LD HL,DEVICE - LD DE,OLD_TABLES.DEVICE - LD BC,OLD_TABLES.DEVICE - DEVICE + LD DE,DRIVES_DRIVER.OLD_TABLES.DEVICE + LD BC,DRIVES_DRIVER.OLD_TABLES.DEVICE - DEVICE LDIR ; LD A,.NUMBER_OF_SUBTABLES @@ -24,7 +24,7 @@ ReScanDRV: ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ; 3. сравниваем записи старых таблиц с новыми: ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; - LD HL,OLD_TABLES.DEVICE + LD HL,DRIVES_DRIVER.OLD_TABLES.DEVICE LD B,DSS_MAX_DRIVES_AMOUNT .tbl_scanNew_mainLoop: PUSH BC @@ -55,7 +55,7 @@ ReScanDRV: ; HDD! Сверка по таблице LOGDRV JP Z,SCAN_TABLES.HARD_DRV ; RD? - LD HL,RAMDSK_DRV.API_TABLE + LD HL,DRIVES_DRIVER.RAMDSK_DRV.API_TABLE AND A SBC HL,DE ; RAM Drive! Сверка по таблице RAMDTBL @@ -86,11 +86,11 @@ ReScanDRV: INC HL LD (OLD_TABLES_CURRENT),HL EXX - LD HL,OLD_TABLES.LOGDRV - LOGDRV + LD HL,DRIVES_DRIVER.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 IX,DRIVES_DRIVER.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 @@ -119,9 +119,9 @@ ReScanDRV: ; 6. заменяем новые таблицы на модифицированные старые ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; - LD HL,OLD_TABLES.DEVICE + LD HL,DRIVES_DRIVER.OLD_TABLES.DEVICE LD DE,DEVICE - LD BC,OLD_TABLES.DEVICE - DEVICE + LD BC,DRIVES_DRIVER.OLD_TABLES.DEVICE - DEVICE LDIR ; ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; @@ -167,13 +167,13 @@ ReScanDRV: ;-----------------------[] Fill_if_Exists: -.tbl+1: LD B,ReScanDRV.NUMBER_OF_SUBTABLES +.tbl+1: LD B,DRIVES_DRIVER.ReScanDRV.NUMBER_OF_SUBTABLES DJNZ 1F ; B=1, RAMDTBL - LD A,RAMDTBL.TBL_Entry - LD IY,RAMDTBL + LD A,DRIVES_DRIVER.RAMDTBL.TBL_Entry + LD IY,DRIVES_DRIVER.RAMDTBL CALL .RUN - LD DE,RAMDSK_DRV.API_TABLE + LD DE,DRIVES_DRIVER.RAMDSK_DRV.API_TABLE RET NC LD A,(.tbl) DEC A ;!!!!! может быть переполнение @@ -182,7 +182,7 @@ Fill_if_Exists: ; 1: DJNZ 1F ; B=2, LOGDRV - LD A,LOGDRV.TBL_Entry + LD A,DRIVES_DRIVER.LOGDRV.TBL_Entry LD IY,LOGDRV CALL .RUN LD DE,IDE_DRV.API_TABLE @@ -191,7 +191,7 @@ Fill_if_Exists: LD A,(.tbl) DEC A ;!!!!! может быть переполнение LD (.tbl),A - LD HL,OLD_TABLES.RAMDTBL + LD HL,DRIVES_DRIVER.OLD_TABLES.RAMDTBL LD (OLD_TABLES_CURRENT),HL EXX LD B,MAX_RAMDRIVES @@ -287,14 +287,14 @@ Find_Record: RAM_DRV: ; Получаем номер рамдиска в OLD_TABLES.RAMDTBL LD A,B - LD BC,OLD_TABLES.RAMDTBL - CALL RAMDSK_DRV.GET_RAMDRV_NUM.skip_tbl + LD BC,DRIVES_DRIVER.OLD_TABLES.RAMDTBL + CALL DRIVES_DRIVER.RAMDSK_DRV.GET_RAMDRV_NUM.skip_tbl LD (.cur_drv),BC AND #0F LD C,A ; номер рамдиска ; Ищем в новой такой же номер рамдиска LD B,MAX_RAMDRIVES - LD DE,RAMDTBL + LD DE,DRIVES_DRIVER.RAMDTBL .loop: LD A,(DE) SUB C JR Z,.found @@ -317,51 +317,51 @@ RAM_DRV: DEC HL LD (HL),#FF EX DE,HL - JP ReScanDRV.nextN2 + JP DRIVES_DRIVER.ReScanDRV.nextN2 ; .found: DEC A ; затираем в новой таблице совпавший драйв (чтоб легче было парсить оставшееся) LD (DE),A DEC DE LD (DE),A - JP ReScanDRV.nextN + JP DRIVES_DRIVER.ReScanDRV.nextN ;-----[] HARD_DRV: LD L,B - LOGDRV_ENTRY_FIND OLD_TABLES.LOGDRV - LD IX,LOGDRV - LD DE,LOGDRV.TBL_Entry + LOGDRV_ENTRY_FIND @DRIVES_DRIVER.OLD_TABLES.LOGDRV + LD IX,DRIVES_DRIVER.LOGDRV + LD DE,DRIVES_DRIVER.LOGDRV.TBL_Entry LD B,DSS_MAX_DRIVES_AMOUNT ; -.loop: LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER) +.loop: LD A,(IY+DRIVES_DRIVER.LOGDRV.PHISICAL_DRV_NUMBER) ;CP #FF ;JR Z,.skip - CP (IX+LOGDRV.PHISICAL_DRV_NUMBER) + CP (IX+DRIVES_DRIVER.LOGDRV.PHISICAL_DRV_NUMBER) JR NZ,.skip ; - LD A,(IY+LOGDRV.SECTOR_OFFSET) - CP (IX+LOGDRV.SECTOR_OFFSET) + LD A,(IY+DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET) + CP (IX+DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET) JR NZ,.skip - LD A,(IY+LOGDRV.SECTOR_OFFSET+1) - CP (IX+LOGDRV.SECTOR_OFFSET+1) + LD A,(IY+DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET+1) + CP (IX+DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET+1) JR NZ,.skip - LD A,(IY+LOGDRV.SECTOR_OFFSET+2) - CP (IX+LOGDRV.SECTOR_OFFSET+2) + LD A,(IY+DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET+2) + CP (IX+DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET+2) JR NZ,.skip - LD A,(IY+LOGDRV.SECTOR_OFFSET+3) - CP (IX+LOGDRV.SECTOR_OFFSET+3) + LD A,(IY+DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET+3) + CP (IX+DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET+3) JR NZ,.skip - LD A,(IY+LOGDRV.SIZE_IN_SECTORS) - CP (IX+LOGDRV.SIZE_IN_SECTORS) + LD A,(IY+DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS) + CP (IX+DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS) JR NZ,.skip - LD A,(IY+LOGDRV.SIZE_IN_SECTORS+1) - CP (IX+LOGDRV.SIZE_IN_SECTORS+1) + LD A,(IY+DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS+1) + CP (IX+DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS+1) JR NZ,.skip - LD A,(IY+LOGDRV.SIZE_IN_SECTORS+2) - CP (IX+LOGDRV.SIZE_IN_SECTORS+2) + LD A,(IY+DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS+2) + CP (IX+DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS+2) JR NZ,.skip - LD A,(IY+LOGDRV.SIZE_IN_SECTORS+3) - CP (IX+LOGDRV.SIZE_IN_SECTORS+3) + LD A,(IY+DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS+3) + CP (IX+DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS+3) JR Z,.found ; .skip: ADD IX,DE @@ -369,7 +369,7 @@ HARD_DRV: ; ЗАПИСЬ НЕ НАЙДЕНА ; Грохаем старую запись в OLD_TABLES.LOGDRV LD A,#FF - LD (IY+LOGDRV.PHISICAL_DRV_NUMBER),A + LD (IY+DRIVES_DRIVER.LOGDRV.PHISICAL_DRV_NUMBER),A ; Достаём положение в OLD_TABLES.DEVICE POP HL ; Достаём шаг общего цикла для получения лог.номера драйва в KILL_FM @@ -378,14 +378,14 @@ HARD_DRV: ; Грохаем ФМ и запись в OLD_TABLES.DEVICE CALL KILL_FM ; - JP ReScanDRV.nextN2 + JP DRIVES_DRIVER.ReScanDRV.nextN2 ; .found: ; затираем в новой таблице совпавший драйв (чтоб легче было парсить оставшееся) - LD (IX+LOGDRV.PHISICAL_DRV_NUMBER),#FF - JP ReScanDRV.nextN + LD (IX+DRIVES_DRIVER.LOGDRV.PHISICAL_DRV_NUMBER),#FF + JP DRIVES_DRIVER.ReScanDRV.nextN ; ; CD_ROM: -; JP ReScanDRV.nextN +; JP DRIVES_DRIVER.ReScanDRV.nextN ;-----[] ; ВХОД: HL - текущая запись в таблице DEVICE ; B - шаг общего цикла @@ -395,7 +395,7 @@ KILL_FM:; LD C,A ; втыкаем страницу ядра с таблицей файловых манипуляторов PUSH BC - LD A,(PORTAL.out_DRV.RETBANK) + LD A,(DRIVES_DRIVER.PORTAL.out.RETBANK) LD B,A LD C,SLOT3 IN A,(SLOT3) @@ -425,31 +425,29 @@ KILL_FM:; ENDMODULE ;-----------------------[] -/* -[DRIVE TABLES] .Size == DEVICE.Size + LOGDRV.Size + RAMDTBL.Size == 78+1 + 416 + 32 == 526 +; [DRIVE TABLES] .Size == DEVICE.Size +DRIVES_DRIVER.LOGDRV.Size + RAMDTBL.Size == 78+1 + 416 + 32 == 526 -; логический номер устройства + адрес обработчика. -; Порядковый номер * 3 = буква диска + "A" -DEVICE EQU $ -.TBL_Entry EQU 3 -.End EQU 1 + $ + DSS_MAX_DRIVES_AMOUNT * .TBL_Entry ; для стоп-байта #FF -.Size EQU .End - $ +; ; логический номер устройства + адрес обработчика. +; ; Порядковый номер * 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 -; Логический номер раздела. -;Номер группы = логический номер раздела HDD из DEVICE -LOGDRV EQU DEVICE + DEVICE.Size -.TBL_Entry EQU 16 -.Size EQU DSS_MAX_DRIVES_AMOUNT * .TBL_Entry +; ;+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 +; ; Логический номер раздела. +; ;Номер группы = логический номер раздела HDD из DEVICE +; LOGDRV EQU DEVICE + DEVICE.Size +; .TBL_Entry EQU 16 +; .Size EQU DSS_MAX_DRIVES_AMOUNT * .TBL_Entry -; ТАБЛИЦА СООТВЕТСТВИЯ МЕЖДУ ФИЗИЧЕСКИМ НОМЕРОМ РАМДИСКА И ЕГО 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 -*/ \ No newline at end of file +; ; ТАБЛИЦА СООТВЕТСТВИЯ МЕЖДУ ФИЗИЧЕСКИМ НОМЕРОМ РАМДИСКА И ЕГО RAM-DISK ID +; ; Log Number: DB RAM_DRIVE_NUMBER, RAM_DRIVE_ID +; RAMDTBL EQU $ + DEVICE.Size +DRIVES_DRIVER.LOGDRV.Size +; .TBL_Entry EQU 2 +; .Size EQU .TBL_Entry * MAX_RAMDRIVES \ No newline at end of file diff --git a/DSS/drivers/media/Shared.asm b/DSS/drivers/media/Shared.asm index 6b19888..5a599ab 100644 --- a/DSS/drivers/media/Shared.asm +++ b/DSS/drivers/media/Shared.asm @@ -129,7 +129,7 @@ INITDVC: XOR A LD HL,DEVICE LD (HL),#FF LD DE,DEVICE+1 - LD BC,DEVICE.Size + LOGDRV.Size + RAMDTBL.Size - 1 + LD BC,DEVICE.Size +DRIVES_DRIVER.LOGDRV.Size + RAMDTBL.Size - 1 LDIR ; FDD девайсы CALL FDD_DRV.Init ; узнать число FDD-девайсов @@ -140,8 +140,8 @@ INITDVC: XOR A LD DE,IDE_DRV.API_TABLE CALL MAKEDVC ; RAM-диски - CALL RAMDSK_DRV.Init - LD DE,RAMDSK_DRV.API_TABLE + CALL DRIVES_DRIVER.RAMDSK_DRV.Init + LD DE,DRIVES_DRIVER.RAMDSK_DRV.API_TABLE CALL MAKEDVC XOR A RET diff --git a/DSS/drivers/media/ata_atapi-drv.asm b/DSS/drivers/media/ata_atapi-drv.asm index 31c71f1..f77bdb5 100644 --- a/DSS/drivers/media/ata_atapi-drv.asm +++ b/DSS/drivers/media/ata_atapi-drv.asm @@ -223,7 +223,7 @@ Init: PUSH IY XOR A LD (.count),A ; - LD HL,LOGDRV + LD HL,DRIVES_DRIVER.LOGDRV LD (LOGDRV_OFFSET),HL LD IX,SYS_PAGE.TMP_BUFFER @@ -313,14 +313,14 @@ SelectDrive: PUSH DE LD A,BIOS.Error.UnknownDevice JR C,.error_pop ; - LOGDRV_ENTRY_FIND LOGDRV + LOGDRV_ENTRY_FIND @DRIVES_DRIVER.LOGDRV ; POP HL CALL .get_data JR C,.error_pop2 ; POP DE - LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER) + LD A,(IY+DRIVES_DRIVER.LOGDRV.PHISICAL_DRV_NUMBER) RET ; .error_pop: POP HL @@ -332,11 +332,11 @@ SelectDrive: PUSH DE LD A,BIOS.Error.UnknownDevice RET C ; - LD E,(IY+LOGDRV.SECTOR_OFFSET) - LD D,(IY+LOGDRV.SECTOR_OFFSET+1) + LD E,(IY+DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET) + LD D,(IY+DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET+1) ADD IX,DE - LD E,(IY+LOGDRV.SECTOR_OFFSET+2) - LD D,(IY+LOGDRV.SECTOR_OFFSET+3) + LD E,(IY+DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET+2) + LD D,(IY+DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET+3) ADC HL,DE LD A,BIOS.Error.SectorNotFound RET @@ -424,9 +424,9 @@ GetParams: EX DE,HL PUSH IX PUSH IY ; - LOGDRV_ENTRY_FIND LOGDRV + LOGDRV_ENTRY_FIND @DRIVES_DRIVER.LOGDRV ; - LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/... + LD A,(IY+DRIVES_DRIVER.LOGDRV.PHISICAL_DRV_NUMBER) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/... PUSH IY LD C,BIOS.DRV_GET_PAR RST ToBIOS @@ -451,13 +451,13 @@ GetParams: EX DE,HL PUSH DE AND A LD DE,#FFFF - LD L,(IY+LOGDRV.SIZE_IN_SECTORS+0) - LD H,(IY+LOGDRV.SIZE_IN_SECTORS+1) + LD L,(IY+DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS+0) + LD H,(IY+DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS+1) SBC HL,DE JR NZ,.ReDEFINE_SP ; - LD L,(IY+LOGDRV.SIZE_IN_SECTORS+2) - LD H,(IY+LOGDRV.SIZE_IN_SECTORS+3) + LD L,(IY+DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS+2) + LD H,(IY+DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS+3) SBC HL,DE JR Z,.ReDEFINE_Skip ; @@ -490,13 +490,13 @@ GetParams: EX DE,HL RLA ; ; SECTORS ON LOGICAL DISK - LD E,(IY+LOGDRV.SIZE_IN_SECTORS+0) - LD D,(IY+LOGDRV.SIZE_IN_SECTORS+1) - LD L,(IY+LOGDRV.SIZE_IN_SECTORS+2) - LD H,(IY+LOGDRV.SIZE_IN_SECTORS+3) + LD E,(IY+DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS+0) + LD D,(IY+DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS+1) + LD L,(IY+DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS+2) + LD H,(IY+DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS+3) ; ;[x] 17.12.2023 загрузка с активного раздела, а не с первого - LD C,(IY+LOGDRV.PARTITION_RECORD_NUM) ; номер партиции в MBR диска + LD C,(IY+DRIVES_DRIVER.LOGDRV.PARTITION_RECORD_NUM) ; номер партиции в MBR диска ; ;[ ] 04/01/2025 возвращение размера сектора ; 00 - undefined @@ -511,7 +511,7 @@ GetParams: EX DE,HL ;EX AF,AF' LD B,A ; - LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/... + LD A,(IY+DRIVES_DRIVER.LOGDRV.PHISICAL_DRV_NUMBER) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/... EX AF,AF' ; AND A @@ -559,7 +559,7 @@ MediaCheck: PUSH IY SCF ; [ ] media changed .next_step: PUSH AF ; Сохраняем CF и код ошибки UNKNOWN_FORMAT, если CF=1 - LD A,(IY + LOGDRV.PHISICAL_DRV_NUMBER) + LD A,(IY +DRIVES_DRIVER.LOGDRV.PHISICAL_DRV_NUMBER) LD C,BIOS.DRV_GET_PAR ;[ ] media change переделать логику тут и в биос? ; !FIXIT PUSH IY RST ToBIOS @@ -574,7 +574,7 @@ MediaCheck: PUSH IY POP IY RET ; -.next_check: BIT 1,(IY + LOGDRV.MediaParameters) +.next_check: BIT 1,(IY +DRIVES_DRIVER.LOGDRV.MediaParameters) JR NZ,.Reinit ; POP AF ; Восстанавливаем CF и код ошибки UNKNOWN_FORMAT, если CF=1 @@ -604,8 +604,8 @@ MediaCheck: PUSH IY ; [ ] custorm sector size CHECK_IDE_SECTOR_SIZE: ;RET - LD E,(IY+LOGDRV.SECTOR_SIZE) - LD D,(IY+LOGDRV.SECTOR_SIZE+1) + LD E,(IY+DRIVES_DRIVER.LOGDRV.SECTOR_SIZE) + LD D,(IY+DRIVES_DRIVER.LOGDRV.SECTOR_SIZE+1) PUSH HL LD HL,-DSS_MAX_SECTOR_SIZE - 1 ADD HL,DE @@ -618,10 +618,10 @@ ReDEFINE_PARTITIONS: LD B,A ; HDD_INIT_TABLE.RemovableMedia LD A,DSS_MAX_DRIVES_AMOUNT - 1 ; ограничитель, чтоб не детектить больше 1 раздела LD (Init.count),A - LD A,(IY + LOGDRV.PHISICAL_DRV_NUMBER) + LD A,(IY +DRIVES_DRIVER.LOGDRV.PHISICAL_DRV_NUMBER) LD (CURRENT_DRIVE.Number),A LD (LOGDRV_OFFSET),IY - ;RES 1,(IY + LOGDRV.MediaParameters) - сбрасывается в DEFINE_PARTITIONS + ;RES 1,(IY +DRIVES_DRIVER.LOGDRV.MediaParameters) - сбрасывается в DEFINE_PARTITIONS ;LD B,%0000'0011 ;!HARDCODE drive changed, removable media JP DEFINE_PARTITIONS @@ -718,7 +718,7 @@ Exec_BIOS: PUSH IY CP BIOS.Error.ATAPI.UnitAttention SCF RET NZ - SET 1,(IY + LOGDRV.MediaParameters) + SET 1,(IY +DRIVES_DRIVER.LOGDRV.MediaParameters) RET ; @@ -759,26 +759,26 @@ DEFINE_PARTITIONS: LD E,XL ;BPB SECTOR LD IX,(LOGDRV_OFFSET) - LD (IX + LOGDRV.SECTOR_OFFSET + 0),E - LD (IX + LOGDRV.SECTOR_OFFSET + 1),D - LD (IX + LOGDRV.SECTOR_OFFSET + 2),L - LD (IX + LOGDRV.SECTOR_OFFSET + 3),H + LD (IX +DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET + 0),E + LD (IX +DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET + 1),D + LD (IX +DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET + 2),L + LD (IX +DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET + 3),H LD E,(IY + BOOT_SECTOR.Partition.Size_LBA + 0) LD D,(IY + BOOT_SECTOR.Partition.Size_LBA + 1) LD L,(IY + BOOT_SECTOR.Partition.Size_LBA + 2) LD H,(IY + BOOT_SECTOR.Partition.Size_LBA + 3) ;SIZE DISK - LD (IX + LOGDRV.SIZE_IN_SECTORS + 0),E - LD (IX + LOGDRV.SIZE_IN_SECTORS + 1),D - LD (IX + LOGDRV.SIZE_IN_SECTORS + 2),L - LD (IX + LOGDRV.SIZE_IN_SECTORS + 3),H + LD (IX +DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS + 0),E + LD (IX +DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS + 1),D + LD (IX +DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS + 2),L + LD (IX +DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS + 3),H ; [ ] sector size CALL GetSectorSize LD IX,(LOGDRV_OFFSET) - LD (IX + LOGDRV.SECTOR_SIZE),C - LD (IX + LOGDRV.SECTOR_SIZE + 1),B + LD (IX +DRIVES_DRIVER.LOGDRV.SECTOR_SIZE),C + LD (IX +DRIVES_DRIVER.LOGDRV.SECTOR_SIZE + 1),B LD A,(CURRENT_DRIVE.Removable) - LD (IX + LOGDRV.MediaParameters),A + LD (IX +DRIVES_DRIVER.LOGDRV.MediaParameters),A ;[x] 17.12.2023 загрузка с активного раздела, а не с первого .ExtendedPartitionFlag+1: LD A,0 @@ -790,7 +790,7 @@ DEFINE_PARTITIONS: PUSH BC LD A,+(_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD) ; Number of entries in the partition table SUB B -.not_supported: LD (IX + LOGDRV.PARTITION_RECORD_NUM),A +.not_supported: LD (IX +DRIVES_DRIVER.LOGDRV.PARTITION_RECORD_NUM),A ; CALL INC_DRV_COUNT RET NC @@ -817,8 +817,8 @@ DEFINE_PARTITIONS: JP .NextPartition ; раздел не поддерживается ; .set_drv_tbl: LD A,(CURRENT_DRIVE.Number) - LD (IX + LOGDRV.PHISICAL_DRV_NUMBER),A - LD DE,LOGDRV.TBL_Entry ;DSKITEM + LD (IX +DRIVES_DRIVER.LOGDRV.PHISICAL_DRV_NUMBER),A + LD DE,DRIVES_DRIVER.LOGDRV.TBL_Entry ;DSKITEM ADD IX,DE LD (LOGDRV_OFFSET),IX RET @@ -849,20 +849,20 @@ DEFINE_PARTITIONS: .set_LOGDRV: ;BPB SECTOR ;!TODO если CD-ROM, то другой номер сектора LD IX,(LOGDRV_OFFSET) LD A,(CURRENT_DRIVE.Removable) - LD (IX + LOGDRV.MediaParameters),A + LD (IX +DRIVES_DRIVER.LOGDRV.MediaParameters),A XOR A - LD (IX + LOGDRV.SECTOR_OFFSET + 0),A - LD (IX + LOGDRV.SECTOR_OFFSET + 1),A - LD (IX + LOGDRV.SECTOR_OFFSET + 2),A - LD (IX + LOGDRV.SECTOR_OFFSET + 3),A + LD (IX +DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET + 0),A + LD (IX +DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET + 1),A + LD (IX +DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET + 2),A + LD (IX +DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET + 3),A ; [ ] SIZE DISK - LD (IX + LOGDRV.SIZE_IN_SECTORS + 0),E - LD (IX + LOGDRV.SIZE_IN_SECTORS + 1),D - LD (IX + LOGDRV.SIZE_IN_SECTORS + 2),L - LD (IX + LOGDRV.SIZE_IN_SECTORS + 3),H + LD (IX +DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS + 0),E + LD (IX +DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS + 1),D + LD (IX +DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS + 2),L + LD (IX +DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS + 3),H ; [ ] sector size - LD (IX + LOGDRV.SECTOR_SIZE),C - LD (IX + LOGDRV.SECTOR_SIZE + 1),B + LD (IX +DRIVES_DRIVER.LOGDRV.SECTOR_SIZE),C + LD (IX +DRIVES_DRIVER.LOGDRV.SECTOR_SIZE + 1),B RET ; ; вход: B - bit0=1 removable, bit1=1 drive changed, bit7..2 reserved @@ -981,8 +981,8 @@ DEFINE_PARTITIONS: LD C,XL CALL .set_LOGDRV LD A,(CURRENT_DRIVE.Removable) - LD (IX + LOGDRV.MediaParameters),A - LD (IX + LOGDRV.PARTITION_RECORD_NUM),#FF + LD (IX +DRIVES_DRIVER.LOGDRV.MediaParameters),A + LD (IX +DRIVES_DRIVER.LOGDRV.PARTITION_RECORD_NUM),#FF CALL .set_drv_tbl JP INC_DRV_COUNT ; @@ -1028,7 +1028,7 @@ EXT_Partition: ;CURRENT PARTITION TABLE .Low: DW #0000 .High: DW #0000 ; -LOGDRV_OFFSET: DW LOGDRV ;POINTER ON CURRENT DISK RECORD +LOGDRV_OFFSET: DW DRIVES_DRIVER.LOGDRV ;POINTER ON CURRENT DISK RECORD ;======================================================================= - ENDMODULE \ No newline at end of file + ENDMODULE ;IDE_DRV \ No newline at end of file diff --git a/DSS/drivers/media/ram_disk-drv.asm b/DSS/drivers/media/ram_disk-drv.asm index 3687f03..9d3e009 100644 --- a/DSS/drivers/media/ram_disk-drv.asm +++ b/DSS/drivers/media/ram_disk-drv.asm @@ -190,7 +190,7 @@ ; MACRO CALL GET_RAMDRV_NUM -; LD BC,RAMDTBL +; LD BC,DRIVES_DRIVER.RAMDTBL ; SLA A ; ADD A,C ; LD C,A @@ -316,7 +316,7 @@ WriteLong: PUSH BC ; ; LD (S_P_P),A ; LD BC,#0*256 + BIOS.GET_RAMD_ST ; Получение идентификатора блока, назначенного на RAM-Disk -; LD DE,RAMDTBL +; LD DE,DRIVES_DRIVER.RAMDTBL ; .initLoop: ; PUSH BC ; LD A,B @@ -335,11 +335,11 @@ WriteLong: PUSH BC ; JP 1F ; .noDRV: POP BC ; 1: INC B -; LD A,RAMDTBL.Size / RAMDTBL.TBL_Entry +; LD A,DRIVES_DRIVER.RAMDTBL.Size / RAMDTBL.TBL_Entry ; CP B ; JR NZ,.initLoop -; LD HL,RAMDTBL ;!FIXIT LD HL,-RAMDTBL +; LD HL,DRIVES_DRIVER.RAMDTBL ;!FIXIT LD HL,-RAMDTBL ; EX DE,HL ; AND A ;!FIXIT ---- ; SBC HL,DE ;!FIXIT ADD HL,DE @@ -368,7 +368,7 @@ Init: ; LD (S_P_P),A LD BC,0*256+BIOS.GET_RAMD_ST ; Получение идентификатора блока, назначенного на RAM-Disk - LD DE,RAMDTBL + LD DE,DRIVES_DRIVER.RAMDTBL .initLoop: PUSH BC LD A,B PUSH DE @@ -390,11 +390,11 @@ Init: ; .noDRV: POP BC .skip_pop: INC B - LD A,RAMDTBL.Size/RAMDTBL.TBL_Entry + LD A,DRIVES_DRIVER.RAMDTBL.Size/DRIVES_DRIVER.RAMDTBL.TBL_Entry CP B JR NZ,.initLoop - LD HL,RAMDTBL ;!FIXIT LD HL,-RAMDTBL + LD HL,DRIVES_DRIVER.RAMDTBL ;!FIXIT LD HL,-RAMDTBL EX DE,HL AND A ;!FIXIT ---- SBC HL,DE ;!FIXIT ADD HL,DE @@ -516,7 +516,7 @@ GenIOCTL: BIT 7,B ; .RSETPRM: AND A ; RET -GET_RAMDRV_NUM: LD BC,RAMDTBL +GET_RAMDRV_NUM: LD BC,DRIVES_DRIVER.RAMDTBL .skip_tbl: ADD A,A ADD A,C LD C,A diff --git a/DSS/first_init.asm b/DSS/first_init.asm index ecf373d..45bc434 100644 --- a/DSS/first_init.asm +++ b/DSS/first_init.asm @@ -63,13 +63,13 @@ F_START: DI DEPLOY: ;Allocate memory LD BC,USING_MEMPAGES*256 + BIOS.GetMem RST ToBIOS - RET C + RET C LD C,A ; IN A,(SLOT3) PUSH AF - IN A,(SLOT0) - LD (DRV_CONTENT + DRV_PAGE.MAIN_PAGE_NUMBER),A + IN A,(SLOT0) + LD (DRV_CONTENT + DRIVES_DRIVER.DRV_PAGE.MAIN_PAGE_NUMBER),A OUT (SLOT3),A ; LD A,C @@ -82,7 +82,7 @@ DEPLOY: ;Allocate memory IN A,(SLOT0) LD (HL),A ; для API драйвера мышки - LD (MOUSE_HANDLER.CorePage),A + LD (DRIVES_DRIVER.MOUSE_HANDLER.CorePage),A LD A,(BANKTBL + DRVPAGE) LD (RST_0x30.drv_page),A ; @@ -111,6 +111,6 @@ DEPLOY: ;Allocate memory ; POP AF OUT (SLOT3),A - AND A + AND A RET ;-----------------------------------------------------------------------; \ No newline at end of file diff --git a/SHELL/build.txt b/SHELL/build.txt index 1fc188d..3c2af95 100644 --- a/SHELL/build.txt +++ b/SHELL/build.txt @@ -1 +1 @@ -525 \ No newline at end of file +526 \ No newline at end of file diff --git a/Shared_Includes b/Shared_Includes index a0e68ce..1dabd78 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit a0e68ce3a19bd47537585e49bfbf5e45fab197a1 +Subproject commit 1dabd783c85be491b704d038f9efabbaf8fe697e