From e20a714f08cde5ac5fe94b8e1a11342f4ef542c4 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sat, 15 Jun 2024 04:49:18 +1000 Subject: [PATCH] bugfixes --- BOOT/DSSBOOT.ASM | 6 +-- BOOT/boot.asm | 27 ++++++----- DSS/API/Attribute.asm | 11 ++++- DSS/API/ChDir.asm | 9 ++++ DSS/API/Create.asm | 20 ++++++++- DSS/API/Delete.asm | 10 ++++- DSS/API/Execute.ASM | 84 ++++++++++++++++++++++------------- DSS/API/Find.asm | 8 ++++ DSS/API/MkDir.asm | 9 +++- DSS/API/Open.asm | 9 +++- DSS/API/Read.asm | 17 +------ DSS/API/Rename.asm | 8 ++++ DSS/API/RmDir.asm | 7 +++ DSS/API/ScanDRV.asm | 22 ++++++++- DSS/API/Write.asm | 17 +------ DSS/API/curDisk.asm | 8 ++++ DSS/API/diskINF.asm | 14 ++++-- DSS/FS/FAT/FAT.asm | 4 +- DSS/FS/FAT/FAT_X.asm | 22 ++++----- DSS/Procedures.asm | 2 +- DSS/Structures.inc | 24 +++++----- DSS/VERSION.INC | 13 +++++- DSS/VIDEO.ASM | 25 ++++++----- DSS/build.txt | 2 +- DSS/defines.inc | 3 ++ DSS/drivers/media/ide-drv.asm | 14 +++--- 26 files changed, 263 insertions(+), 132 deletions(-) diff --git a/BOOT/DSSBOOT.ASM b/BOOT/DSSBOOT.ASM index 265a29d..11278c2 100644 --- a/BOOT/DSSBOOT.ASM +++ b/BOOT/DSSBOOT.ASM @@ -591,7 +591,7 @@ GET_BPB: LD HL,#0000 ; LD A,(FatBuffer.SectorsPerCluster) ; HL:DE / A => DE:BC, H=0, L - остаток - ;CALL DIV_for_SPC + ;CALL DIV_by_Shifts LD C,A DEC A JR Z,.DIV_exit @@ -624,7 +624,7 @@ GET_BPB: LD HL,#0000 LD A,FAT_TYPE.x12 JR NC,.SET_VARS ; - LD HL,65525 + LD HL,65524 SBC HL,BC LD A,FAT_TYPE.x16 JR NC,.SET_VARS @@ -865,7 +865,7 @@ LOAD_CORE: LD (READMEM),DE ; ; HL:DE / A => DE:BC, H=0, L - остаток -; DIV_for_SPC: +; DIV_by_Shifts: ; LD C,A ; DEC A ; JR Z,.DIV_exit diff --git a/BOOT/boot.asm b/BOOT/boot.asm index 807fd47..855099d 100644 --- a/BOOT/boot.asm +++ b/BOOT/boot.asm @@ -6,7 +6,6 @@ ; [x] - bug fixes and optimizations))) //////////////////////////////////////////////////////////////////////// - ; Программа записи на FDD/HDD boot-загрузчика и файлов системы. ; ; Загружает сист. файлы из корня диска, с которого была @@ -59,7 +58,7 @@ ;.READ_PG: BYTE #00 ;!TODO не используются некоторые значения, но задумка неплохая))) ;.S_X_H: DWORD #0000 ; количество секторов на цилиндре ENDS - + includelua 'Shared_includes/lua/Functions.lua' include 'shared_includes/constants/sp2000.inc' include 'shared_includes/constants/bios_equ.inc' include 'shared_includes/constants/dss_equ.inc' @@ -69,6 +68,15 @@ ;include 'DSS/structures.inc' include '../DSS/defines.inc' + LUA PASS1 + local date, month, year = Get_date_RU(sj.get_define("__DATE__")) + BuildDate = "'" .. date .. "." .. month .. "." .. year .. "'" + sj.insert_define("SYS_BUILD_DATE", BuildDate) + ENDLUA + LUA ALLPASS + sj.insert_define("SYS_BUILD_DATE", BuildDate) + ENDLUA + DEFINE EXEinfoMACRO 0 DEFINE App_EXE_Version 1 MACRO _mEXEinfo @@ -473,7 +481,7 @@ write_to_BPB: PUSH BC ; ; -write_no_BPB: ld a,(disk) ; номер заданного диска +write_no_BPB: ld a,(disk) ; номер заданного диска ld de,#55AA ld bc,Dss.DRV.GenIOCTL.GetParams rst ToDSS.DRV @@ -482,9 +490,9 @@ write_no_BPB: ld a,(disk) ; ld b,a inc c scf - ret z ; !TODO загрузка с расширенного раздела не поддерживается + ret z dec c - CP #80 ;!HARDCODE тип драйва - HDD + CP #80 ;!HARDCODE тип драйва - HDD JR NC,.skip_FAT_check PUSH BC ; B - PHISICAL DRIVE NUMBER, C - PARTITION RECORD NUMBER IN DRIVE MBR @@ -566,10 +574,6 @@ get_drive_letter: get_drive_err: scf ; ошибка ret - - - - ;---------------------------------------------------- ; сохр. тек. системный диск и путь ;---------------------------------------------------- @@ -630,8 +634,9 @@ messages: db 0 db "\r\nBoot and System files Installer v" ;0 db major_version + '0','.' db (minor_version / 10) + '0',(minor_version % 10) + '0','.' - db "\r\n\nCopyright (c) 2006 Vasil Ivanov." - db "\r\n\nCopyright (c) 2023-2024 Sprinter Team." + db "\r\nBuild date ",SYS_BUILD_DATE + db "\r\nCopyright (c) 2006 Vasil Ivanov." + db "\r\nCopyright (c) 2023-2024 Sprinter Team." db "\r\n\n",0 ; db "System successfully installed on disk " ;1 diff --git a/DSS/API/Attribute.asm b/DSS/API/Attribute.asm index a973978..f0dcb81 100644 --- a/DSS/API/Attribute.asm +++ b/DSS/API/Attribute.asm @@ -8,13 +8,22 @@ //////////////////////////////////////////////////////////////////////// ATTRIB: ;!TEST Current Dir ;[x] 15/10/23 LD C,A + ; + IF OLD_DSS_FOR_OLD_EXE + ; [ ] 10/06/24 + LD A,(EXE_VERSION) + OR A + JR Z,.old_EXE + ; + ENDIF + ; PUSH HL PUSH BC CALL DIR_PATH_CHECK POP BC POP HL RET C - LD A,C +.old_EXE: LD A,C ; ; INC B diff --git a/DSS/API/ChDir.asm b/DSS/API/ChDir.asm index daaec16..5a50614 100644 --- a/DSS/API/ChDir.asm +++ b/DSS/API/ChDir.asm @@ -11,6 +11,15 @@ //////////////////////////////////////////////////////////////////////// CHDIR_FN: ;!TEST Current Dir ;[x] 15/10/23 + ; + IF OLD_DSS_FOR_OLD_EXE + ; [ ] 10/06/24 + LD A,(EXE_VERSION) + OR A + JR Z,CHDIR + ; + ENDIF + ; PUSH HL CALL DIR_PATH_CHECK POP HL diff --git a/DSS/API/Create.asm b/DSS/API/Create.asm index 85cdc5d..6189a72 100644 --- a/DSS/API/Create.asm +++ b/DSS/API/Create.asm @@ -6,12 +6,20 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23 ;CREATE_FN: PUSH HL LD C,A + ; + IF OLD_DSS_FOR_OLD_EXE + ; [ ] 10/06/24 + LD A,(EXE_VERSION) + OR A + JR Z,.old_EXE + ENDIF + ; PUSH BC CALL DIR_PATH_CHECK POP BC POP HL RET C - LD A,C +.old_EXE: LD A,C ; CALL .Prepare RET C @@ -33,12 +41,20 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23 ;CREATE_FN: .NEW: ;!TEST Current Dir ;[x] 15/10/23 PUSH HL LD C,A + ; + IF OLD_DSS_FOR_OLD_EXE + ; [ ] 10/06/24 + LD A,(EXE_VERSION) + OR A + JR Z,.old_EXE + ENDIF + ; PUSH BC CALL DIR_PATH_CHECK POP BC POP HL RET C - LD A,C +.old_EXE_: LD A,C ; CALL .Prepare RET C diff --git a/DSS/API/Delete.asm b/DSS/API/Delete.asm index d03c56f..25017f3 100644 --- a/DSS/API/Delete.asm +++ b/DSS/API/Delete.asm @@ -4,12 +4,20 @@ //////////////////////////////////////////////////////////////////////// DEL_FN: ;!TEST ;!TEST Current Dir ;[x] 15/10/23 + ; + IF OLD_DSS_FOR_OLD_EXE + ; [ ] 10/06/24 + LD A,(EXE_VERSION) + OR A + JR Z,.old_EXE + ENDIF + ; PUSH HL CALL DIR_PATH_CHECK POP HL RET C ; - CALL GETWORD ; тест на допуст. имя и настр. на диск +.old_EXE: CALL GETWORD ; тест на допуст. имя и настр. на диск RET C CALL MASK RET C diff --git a/DSS/API/Execute.ASM b/DSS/API/Execute.ASM index a6bc6fe..7f22599 100644 --- a/DSS/API/Execute.ASM +++ b/DSS/API/Execute.ASM @@ -87,7 +87,7 @@ EXEC: LD (CMDLINE),HL ;LD HL,(CMDLINE) JR C,EXEC0_SHORT .VAR_2: CALL EXEC_1 - ;LD A,DSS_Error.sys.FILE_NOT_FOUND + LD A,DSS_Error.sys.FILE_NOT_FOUND SCF RET ; File not found - exit @@ -124,8 +124,11 @@ EXEC_1: ;LD (CMDLINE),HL ; ;SHORT NAME ;TRY TO FIND IN CURRENT DIRECTORY -EXEC0_SHORT: CALL EXEC_1 - RET C +EXEC0_SHORT: ; если убрать, то будет как в linux - короткое имя запускает EXE только из прописанных директорий, + ; а если нужно запустить файл из текущей директории, то так: ".\run.exe" + CALL EXEC_1 + RET C + ; ;FILE NOT FOUND, SEARCHING IN PATH ; GET PATH AND ETC. LD HL,ENVPATH @@ -149,7 +152,7 @@ COPYEXN: LD A,(HL) ; EXEC02: LD (EXE_FM),A LD HL,CORE_BUFFERS.EXEBUFF - LD DE,#0080 ;!#0200(512) ;R02 + LD DE,_sEXE_HEADER.UnUsedPoint ; #0080 ;!#0200(512) ;R02 LD A,(EXE_FM) CALL READ JP C,ERREXE @@ -169,6 +172,7 @@ EXEC02: LD (EXE_FM),A ;JP NZ,ERREXE LD A,MINIMUM_EXE_VERSION CP (IX + _sEXE_HEADER.VERSION) + LD A,DSS_Error.sys.UNKNOWN_EXE JP C,ERREXE ; ; @@ -300,20 +304,30 @@ _TST_PROC: CALL GETMEM POP DE ;снимаем со стека адрес возврата LD HL,#0000 ADD HL,SP - LD SP,(EXSTACK) - PUSH HL - PUSH DE + LD SP,(EXSTACK) + ; ! Далее стек в нулевой странице! BIOS и не DSS-MAIN не вызывать + PUSH HL ; +2 EXSTACK size for 1 task + PUSH DE ; +2 + ; + IF OLD_DSS_FOR_OLD_EXE + ; [ ] 10/06/24 + LD A,(EXE_VERSION) + PUSH AF ; +2 + ; + ENDIF + ; IN A,(SLOT3) LD D,A IN A,(SLOT2) LD E,A IN A,(SLOT1) - PUSH DE - PUSH AF + PUSH DE ; +2 + PUSH AF ; +2 LD (EXSTACK),SP LD SP,HL + ; ; EXX - ; + ; ;!TEST 27/03/2024 LD DE,RAMMAP+3 LD A,(EXE_MEM) @@ -360,9 +374,9 @@ _TST_PROC: CALL GETMEM LD A,#80 ;!HARDCODE cmd line size SUB B LD (CORE_BUFFERS.SECTOR_BUFFER),A - ;R02 - LD SP,CORE_BUFFERS.EXEBUFF+510 ;Вставляется в SHARED_PAGE ; + LD SP,CORE_BUFFERS.EXEBUFF + _sEXE_HEADER ;R02 + ; ! Далее стек в нулевой странице! BIOS и не DSS-MAIN не вызывать LD A,SHARED_PAGE OUT (SLOT1),A OUT (SLOT2),A @@ -372,15 +386,9 @@ _TST_PROC: CALL GETMEM LD A,H AND #C0 ;!TEST - CP #80 - JR Z,FR8000 - JR NC,FRC000 - ;CP #40 - ;JR Z,FR4000 - ;CP #80 - ;JR Z,FR8000 - ;CP #C0 - ;JR Z,FRC000 + CP #80 + JR Z,FR8000 + JR NC,FRC000 ; FR4000: LD A,(DE) OUT (SLOT1),A @@ -397,9 +405,8 @@ FRC000: LD A,(DE) LD B,high Dss.Move_FP.FrStart LD A,(EXE_FM) CALL MOVE_FP - ;R02 - LD SP,#403F ;!HARDCODE STACK before start EXE. Устанавливается когда воткнуты SHARED_PAGE - ; + ; + LD SP,#403F ;R02 ;!HARDCODE STACK before start EXE. Устанавливается когда воткнуты SHARED_PAGE _ret+1: JP 0 _TST_PROC_2: LD SP,(CORE_BUFFERS.EXEBUFF.SP_REG) @@ -418,6 +425,12 @@ _TST_PROC_2: LD SP,(CORE_BUFFERS.EXEBUFF.SP_REG) PUSH IX LD HL,CORE_BUFFERS.CurrentPath LD A,(CORE_BUFFERS.EXEBUFF.VERSION) + ; + IF OLD_DSS_FOR_OLD_EXE + ; [ ] 10/06/24 + LD (EXE_VERSION),A + ; + ENDIF OR A JR NZ,.set_path CALL DIR_PATH_CHANGE.FullCurrent @@ -426,6 +439,7 @@ _TST_PROC_2: LD SP,(CORE_BUFFERS.EXEBUFF.SP_REG) ; RET ;----------------------------------------------------------------------- +; ! вызывается когда стек в нулевой странице! M_PSP: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR) DEC H LD D,H @@ -517,6 +531,10 @@ SCOPYS: LD BC,#80*256 + ' '+1 ;!HARDCODE cmd line size ENVPATH: DB "PATH=",0 EXE_EXT: DB "EXE" TASK: DB #01 ; уровень текущей программы +; + IF OLD_DSS_FOR_OLD_EXE +EXE_VERSION: DB #01 ; [ ] 10/06/24 + ENDIF RAMMAP: DB #00,#00,#00,#00 ErrorLevel: DB #00 ; код завершения программы (процесса) EXE_FM: DB #00 ; дескр. файла @@ -550,20 +568,26 @@ LEAVE: LD A,B _mDECTASK LD SP,(EXSTACK) ; тут стек в нулевой странице! - POP AF - POP HL + POP AF ; -2 EXSTACK size for 1 task + POP HL ; -2 OUT (SLOT1),A LD A,L OUT (SLOT2),A LD A,H OUT (SLOT3),A - POP DE - POP HL + ; [ ] 10/06/24 + IF OLD_DSS_FOR_OLD_EXE + POP AF ; -2 + LD (EXE_VERSION),A + ENDIF + ; + POP DE ; -2 + POP HL ; -2 LD (EXSTACK),SP LD SP,HL ; ;!TEST - EI + ;EI ; EX DE,HL LD A,(ErrorLevel) @@ -650,7 +674,7 @@ CHECKPATH: ; !TODO сде RET Z ; CP '/' ;ALT SLASH ; RET Z - CP '!' + CP " "+1 JR NC,CHECKPATH RET ;----------------------------------------------------------------------- diff --git a/DSS/API/Find.asm b/DSS/API/Find.asm index b600da9..ae10617 100644 --- a/DSS/API/Find.asm +++ b/DSS/API/Find.asm @@ -20,9 +20,17 @@ F_FIRST: LD (.FNDMODE),A PUSH HL ;!TEST Current Dir ;[x] 15/10/23 + ; [ ] 10/06/24 + IF OLD_DSS_FOR_OLD_EXE + LD A,(EXE_VERSION) + OR A + JR Z,.old_EXE + ENDIF + ; CALL DIR_PATH_CHECK RET C ; +.old_EXE: POP HL CALL GETWORD ;CALL LOADDIR diff --git a/DSS/API/MkDir.asm b/DSS/API/MkDir.asm index b0a290a..55b3a95 100644 --- a/DSS/API/MkDir.asm +++ b/DSS/API/MkDir.asm @@ -14,7 +14,14 @@ MKDIR: RET ; ; Entry point ;!TEST Current Dir ;[x] 15/10/23 -.B: PUSH HL +.B: ; [ ] 10/06/24 + IF OLD_DSS_FOR_OLD_EXE + LD A,(EXE_VERSION) + OR A + JR Z,.START + ENDIF + ; + PUSH HL CALL DIR_PATH_CHECK POP HL RET C diff --git a/DSS/API/Open.asm b/DSS/API/Open.asm index 331fb20..d0393f2 100644 --- a/DSS/API/Open.asm +++ b/DSS/API/Open.asm @@ -15,11 +15,18 @@ OPEN_FN: ;!TEST Current Dir ;[x] 15/10/23 ;AND #7F ; ACCESS_MODE bit7 - для внутреннего использования))) ;!TODO LD (.TMP),A + ; [ ] 10/06/24 + IF OLD_DSS_FOR_OLD_EXE + LD A,(EXE_VERSION) + OR A + JR Z,.old_EXE + ENDIF + ; PUSH HL CALL DIR_PATH_CHECK.forceCheck POP HL RET C - ;JR .start +.old_EXE: ;JR .start ;!FIXIT сделать как в mkdir или rmdir? ;R008 ; .start: CALL GETWORD diff --git a/DSS/API/Read.asm b/DSS/API/Read.asm index 77cd97b..9ca4bae 100644 --- a/DSS/API/Read.asm +++ b/DSS/API/Read.asm @@ -16,22 +16,7 @@ READ: LD (.R_POINT),HL CALL OPENDSK JP C,.ERR_1 CALL GET_OFFSET_IN_SECTORS - ; ;Расчёт смещения в секторах ;!HARDCODE sector size - ; LD H,0 ;!HARDCODE max file size = 8 gb - ; LD E,(IY+_sFM.F_POSITION+1) - ; LD D,(IY+_sFM.F_POSITION+2) - ; LD L,(IY+_sFM.F_POSITION+3) - ; LD A,E - ; AND #01 - ; LD B,A - ; LD C,(IY+_sFM.F_POSITION) - ; RR L - ; RR D - ; RR E - ; ;HL:DE FP (in sectors) - ; ;BC FP residue (in bytes) - ; ; - ; OR C + ; JP NZ,.ROV1 .ROV4: POP BC PUSH BC diff --git a/DSS/API/Rename.asm b/DSS/API/Rename.asm index cf18e26..df90e5d 100644 --- a/DSS/API/Rename.asm +++ b/DSS/API/Rename.asm @@ -10,6 +10,13 @@ ; DE - "new_name.ext",#00 without simbols * ? //////////////////////////////////////////////////////////////////////// RENAME: ;!TEST Current Dir ;[x] 15/10/23 + ; [ ] 10/06/24 + IF OLD_DSS_FOR_OLD_EXE + LD A,(EXE_VERSION) + OR A + JR Z,.old_EXE + ENDIF + ; PUSH HL PUSH DE CALL DIR_PATH_CHECK.forceCheck @@ -17,6 +24,7 @@ RENAME: ;!TEST Current Dir ;[x] 15/10/23 POP HL RET C ; +.old_EXE: PUSH DE ;LD DE,MASKARE CALL MASK.name diff --git a/DSS/API/RmDir.asm b/DSS/API/RmDir.asm index 84d5cbf..fc7a0b9 100644 --- a/DSS/API/RmDir.asm +++ b/DSS/API/RmDir.asm @@ -9,6 +9,13 @@ ; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0 //////////////////////////////////////////////////////////////////////// RMDIR: ;!TEST Current Dir ;[x] 15/10/23 + ; [ ] 10/06/24 + IF OLD_DSS_FOR_OLD_EXE + LD A,(EXE_VERSION) + OR A + JR Z,.START + ENDIF + ; PUSH HL CALL DIR_PATH_CHECK POP HL diff --git a/DSS/API/ScanDRV.asm b/DSS/API/ScanDRV.asm index 88663d4..9a43347 100644 --- a/DSS/API/ScanDRV.asm +++ b/DSS/API/ScanDRV.asm @@ -35,9 +35,17 @@ SCANDRV: ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ; 4. на всякий случай перечитываем дирректорию ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; + ; [ ] 10/06/24 + IF OLD_DSS_FOR_OLD_EXE + LD A,(EXE_VERSION) + OR A + JR Z,.old_EXE + ENDIF + ; LD A,(CORE_BUFFERS.CurrentPath) SUB 'A' CALL OPENDSK + ; LD HL,CORE_BUFFERS.CurrentDirectory CALL CHDIR JR NC,.exit @@ -51,8 +59,20 @@ SCANDRV: EI RET ; +; [ ] 10/06/24 + IF OLD_DSS_FOR_OLD_EXE +.old_EXE: LD A,(CORE_BUFFERS.FatBuffer.DRIVE) + CALL OPENDSK + ; + LD HL,CORE_BUFFERS.WorkDirectory + CALL CHDIR + JR NC,.exit + LD HL,CORE_BUFFERS.WorkDirectory + LD (HL),0 + JR .exit + ENDIF + .BOOT_DSK_LOST: DZ "Boot drive lost o_O" .BOOT_DSK_LOST.size EQU $-.BOOT_DSK_LOST ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ;/////////////////////////////////////////////////////////////////////// -; \ No newline at end of file diff --git a/DSS/API/Write.asm b/DSS/API/Write.asm index aa5b773..8a1473c 100644 --- a/DSS/API/Write.asm +++ b/DSS/API/Write.asm @@ -38,22 +38,7 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ] CALL OPENDSK JR C,.ERR1 CALL GET_OFFSET_IN_SECTORS - ; ;Расчёт смещения в секторах ;!HARDCODE sector size - ; LD H,0 ;!HARDCODE max file size = 8 gb - ; LD E,(IY+_sFM.F_POSITION+1) - ; LD D,(IY+_sFM.F_POSITION+2) - ; LD L,(IY+_sFM.F_POSITION+3) - ; LD A,E - ; AND #01 - ; LD B,A - ; LD C,(IY+_sFM.F_POSITION) - ; RR L - ; RR D - ; RR E - ; ;HL:DE FP (in sectors) - ; ;BC FP residue (in bytes) - ; ; - ; OR C + ; JP NZ,.WOV1 ; .WOV4: POP BC diff --git a/DSS/API/curDisk.asm b/DSS/API/curDisk.asm index 3eb0638..a3e9f3b 100644 --- a/DSS/API/curDisk.asm +++ b/DSS/API/curDisk.asm @@ -6,6 +6,14 @@ ; C - номер последнего диска в системе ;///////////////////////////////////////////////////////////////////// CURDISK_FN: + ; + IF OLD_DSS_FOR_OLD_EXE + ; [ ] 10/06/24 + LD A,(EXE_VERSION) + OR A + JR Z,CURDISK + ; + ENDIF LD A,(LDRIVE) LD C,A LD A,(CORE_BUFFERS.CurrentPath) diff --git a/DSS/API/diskINF.asm b/DSS/API/diskINF.asm index 7981773..6693d13 100644 --- a/DSS/API/diskINF.asm +++ b/DSS/API/diskINF.asm @@ -122,11 +122,19 @@ DISKINF: LD C,B RET ; CP #FF ; !FIXIT WorkDirectory - ;!TEST Current Dir + ;!TEST !Current Dir ;JR Z,CURRDS ;R06 -.CurrentDisk: LD A,(CORE_BUFFERS.CurrentPath) +.CurrentDisk: ; [ ] 10/06/24 + IF OLD_DSS_FOR_OLD_EXE + LD A,(EXE_VERSION) + OR A + LD A,(CORE_BUFFERS.FatBuffer.DRIVE) + JR Z,.old_EXE + ENDIF + ; + LD A,(CORE_BUFFERS.CurrentPath) SUB 'A' - LD HL,CORE_BUFFERS.FatBuffer.DRIVE +.old_EXE: LD HL,CORE_BUFFERS.FatBuffer.DRIVE CP (HL) JR Z,.CheckFreeSpace ; diff --git a/DSS/FS/FAT/FAT.asm b/DSS/FS/FAT/FAT.asm index 2e7ad33..cebeac6 100644 --- a/DSS/FS/FAT/FAT.asm +++ b/DSS/FS/FAT/FAT.asm @@ -922,7 +922,7 @@ RD_BPB: ; LD C,SLOT3 ; LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster) ; HL:DE / A => DE:BC, H=0, L - остаток - CALL DIV_for_SPC + CALL DIV_by_Shifts ; выясняем разрядность FAT LD A,D OR E @@ -932,7 +932,7 @@ RD_BPB: ; LD C,SLOT3 SBC HL,BC JR NC,.its_FAT12 ; - LD HL,65525 + LD HL,65524 SBC HL,BC JR C,.its_FAT32 ; diff --git a/DSS/FS/FAT/FAT_X.asm b/DSS/FS/FAT/FAT_X.asm index b69ab5e..0ee5739 100644 --- a/DSS/FS/FAT/FAT_X.asm +++ b/DSS/FS/FAT/FAT_X.asm @@ -1027,8 +1027,8 @@ BLOCK_READ: LD (READ.PointerOnBuffer),IX LD C,A PUSH BC ; B - количество секторов для чтения, C - SectorsPerCluster ; HL:DE / A => DE:BC, H=0, L - остаток - CALL DIV_for_SPC - PUSH HL ; остаток DIV_for_SPC + CALL DIV_by_Shifts + PUSH HL ; остаток DIV_by_Shifts ; [x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE PUSH BC ; младшее слово номера кластера PUSH DE ; [x] fat32 старшее слово номера кластера @@ -1086,7 +1086,7 @@ BLOCK_READ: LD (READ.PointerOnBuffer),IX POP BC ; младшее слово номера кластера CALL SaveGotCluster ; - POP DE ; D = 0, E = остаток DIV_for_SPC + POP DE ; D = 0, E = остаток DIV_by_Shifts POP BC ; B - количество секторов для чтения, C - SectorsPerCluster ; (SP) = (RET) ; работа с остатком от деления @@ -1105,9 +1105,9 @@ BLOCK_READ: LD (READ.PointerOnBuffer),IX EXX PUSH HL ; номер кластера младшая часть PUSH BC ; B = количество секторов на дочитку, C = (SectorsPerCluster - остаток) либо количество секторов для чтения - PUSH DE ; D = 0, E = остаток DIV_for_SPC + PUSH DE ; D = 0, E = остаток DIV_by_Shifts CALL CLUSTER_TO_SECTOR - POP DE ; D = 0, E = остаток DIV_for_SPC + POP DE ; D = 0, E = остаток DIV_by_Shifts ADD IX,DE JR NC,.skip2 INC HL @@ -1200,7 +1200,7 @@ BLOCK_READ: LD (READ.PointerOnBuffer),IX ; ZF = 0 если первого кластера нет CHECK_FIRST_CLUSTER: EXX - LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_H) ; START CLUSTER High + 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 @@ -1222,8 +1222,8 @@ BLOK_WRITE: LD (READ.PointerOnBuffer),IX LD C,A PUSH BC ; B - количество секторов для чтения, C - SectorsPerCluster ; HL:DE / A => DE:BC, H=0, L - остаток - CALL DIV_for_SPC - PUSH HL ; остаток DIV_for_SPC + CALL DIV_by_Shifts + PUSH HL ; остаток DIV_by_Shifts ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE PUSH BC ; младшее слово номера кластера PUSH DE ; fat32 старшее слово номера кластера @@ -1310,7 +1310,7 @@ BLOK_WRITE: LD (READ.PointerOnBuffer),IX POP BC CALL SaveGotCluster ; - POP DE ; D = 0, E = остаток DIV_for_SPC + POP DE ; D = 0, E = остаток DIV_by_Shifts POP BC ; B - количество секторов для чтения, C - SectorsPerCluster ; (SP) = (RET) ; @@ -1329,9 +1329,9 @@ BLOK_WRITE: LD (READ.PointerOnBuffer),IX EXX PUSH HL ; номер кластера младшая часть PUSH BC ; B = количество секторов на дочитку, C = (SectorsPerCluster - остаток) либо количество секторов для чтения - PUSH DE ; D = 0, E = остаток DIV_for_SPC + PUSH DE ; D = 0, E = остаток DIV_by_Shifts CALL CLUSTER_TO_SECTOR - POP DE ; D = 0, E = остаток DIV_for_SPC + POP DE ; D = 0, E = остаток DIV_by_Shifts ADD IX,DE JR NC,.skip2 INC HL diff --git a/DSS/Procedures.asm b/DSS/Procedures.asm index 05d8222..c5db6f0 100644 --- a/DSS/Procedures.asm +++ b/DSS/Procedures.asm @@ -322,7 +322,7 @@ BC_Div_DE: ;----------------------------------------------------------------------; ; HL:DE / A => DE:BC, H=0, L - остаток -DIV_for_SPC: +DIV_by_Shifts: LD C,A DEC A JR Z,.exit diff --git a/DSS/Structures.inc b/DSS/Structures.inc index fbaee5d..593f5be 100644 --- a/DSS/Structures.inc +++ b/DSS/Structures.inc @@ -6,17 +6,19 @@ ; ; - STRUCT _sEXE_HEADER ; 512 bytes -.EXE_EXT TEXT 3,{"EX","E"} ; 0-2 EXE Сигнатура -.VERSION BYTE 0 ; 3 Version of EXE file -.OFFCOD1 WORD 00 ; 4-5 С какого смещения в файле будет грузиться код в -.OFFCOD2 WORD 00 ; 6-7 память по адресу (Code_addr) Low addr, High addr. -.LOADER WORD 00 ; 8-9 Размер первичного загрузчика или 0 -.RESERVED BLOCK 6,0 ; 10-15 Reserved -.LD_ADDR WORD 00 ; 16-17 Адрес расположения кода в памяти (#4100-#FFFF) -.PC_REG WORD 00 ; 18-19 Адрес в памяти с которого запустится код (Reg. PC) -.SP_REG WORD 00 ; 20-21 Адрес стека (Reg. SP) -.RESERVED2 BLOCK 490,0 ; 22-512 Можно использовать под текст для выпендрёжа или не использовать + STRUCT _sEXE_HEADER ; 512 bytes +.EXE_EXT TEXT 3,{"EX","E"} ; 0-2 EXE Сигнатура +.VERSION BYTE 0 ; 3 Version of EXE file +.OFFCOD1 WORD 00 ; 4-5 С какого смещения в файле будет грузиться код в +.OFFCOD2 WORD 00 ; 6-7 память по адресу (Code_addr) Low addr, High addr. +.LOADER WORD 00 ; 8-9 Размер первичного загрузчика или 0 +.RESERVED BLOCK 6,0 ; 10-15 Reserved +.LD_ADDR WORD 00 ; 16-17 Адрес расположения кода в памяти (#4100-#FFFF) +.PC_REG WORD 00 ; 18-19 Адрес в памяти с которого запустится код (Reg. PC) +.SP_REG WORD 00 ; 20-21 Адрес стека (Reg. SP) +.UnUsedPoint BYTE 0 ; 22 +; в .RESERVED2 нельзя прописать BLOCK 512-.UnUsedPoint,0; поэтому хардкод +.RESERVED2 BLOCK 512-23,0 ; 23-512 Можно использовать под текст для выпендрёжа или не использовать ENDS ; diff --git a/DSS/VERSION.INC b/DSS/VERSION.INC index 583cb64..984fa6c 100644 --- a/DSS/VERSION.INC +++ b/DSS/VERSION.INC @@ -1,7 +1,18 @@ + IFNDEF INCREASE_BUILD + DEFINE INCREASE_BUILD 0 + ELSE + DEFINE+ INCREASE_BUILD 1 + ENDIF ;------------------[ Достаём текущую дату и BUILD++ ]-----------------[] LUA PASS1 dss_date, dss_month, dss_year = Get_date_RU(sj.get_define("__DATE__")) - dss_build = increase_build("./DSS/build.txt") + + if sj.get_define("INCREASE_BUILD") > "0" then + dss_build = increase_build("./DSS/build.txt") + else + dss_build = get_build("./DSS/build.txt") + end + if dss_build > 999 then dss_build = 999 print("WARNING! Build > 999","WARNING! Build > 999","WARNING! Build > 999","WARNING! Build > 999","\aWARNING! Build > 999\a") diff --git a/DSS/VIDEO.ASM b/DSS/VIDEO.ASM index 3bae86b..b00b26e 100644 --- a/DSS/VIDEO.ASM +++ b/DSS/VIDEO.ASM @@ -113,6 +113,18 @@ PUTCHAR: .CR_: CALL CURSOR LD E,0 JP LOCATE + ; +.control_characters: + CP #0D + JR Z,.CR_ + CP #0A + JR Z,.LF_ + CP #09 + JR Z,.TB_ + CP #08 + JR Z,.BK_ + CP #07 ; [x] Beep in PChars/PUTCHAR + RET NZ ; [x] Beep in PChars/PUTCHAR .BELL: LD DE,1200 PUSH HL @@ -128,18 +140,7 @@ PUTCHAR: ._CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM JP ToBIOS ; -.control_characters: - CP #0D - JR Z,.CR_ - CP #0A - JR Z,.LF_ - CP #09 - JR Z,.TB_ - CP #08 - JR Z,.BK_ - CP #07 - JR Z,.BELL ; [x] Beep in PChars/PUTCHAR - RET + ;-----[] ; ; diff --git a/DSS/build.txt b/DSS/build.txt index a88135e..40b9b19 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -988 \ No newline at end of file +990 \ No newline at end of file diff --git a/DSS/defines.inc b/DSS/defines.inc index 4db938b..03662e3 100644 --- a/DSS/defines.inc +++ b/DSS/defines.inc @@ -102,6 +102,9 @@ DSS_MAX_DRIVES_AMOUNT EQU 26 DEFINE MINIMUM_BIOS_VERSION 2*256 + 55 ; version 2.55 DEFINE CHECK_DRIVE_CHANGE 1 ; 1 - тормознее, но безопаснее DEFINE NON_REMOVABLE_FDD 0 + ; + DEFINE OLD_DSS_FOR_OLD_EXE 0 ; !TODO + ; ;-------------------[MEMORY]-------------------------; DEFINE PORTAL.RSTx18_SWITCH_ADDRESS #82 diff --git a/DSS/drivers/media/ide-drv.asm b/DSS/drivers/media/ide-drv.asm index 59d8a11..306d487 100644 --- a/DSS/drivers/media/ide-drv.asm +++ b/DSS/drivers/media/ide-drv.asm @@ -348,13 +348,13 @@ HFRTRAC LD A,DSS_Error.drv.GENERAL_FAILURE SCF RET -; HL:DE - SECTORS ON LOGICAL DISK -; C - PARTITION RECORD NUMBER IN DRIVE MBR. if #FF - then not supported ;[x] 17.12.2023 загрузка с активного раздела, а не с первого -; HL' - CYLINDERS ON PHISICAL DISK -; DE' - HEADS ON PHISICAL DISK -; BC' - SECTORS PER TRACK ON PHISICAL DISK -; A' - PHISICAL DRIVE NUMBER -; A - DRIVE/HEAD REGISTER PHISICAL DISK: +; HL:DE - SECTORS ON LOGICAL DISK +; C - PARTITION RECORD NUMBER IN DRIVE MBR. if #FF - then not supported ;[x] 17.12.2023 загрузка с активного раздела, а не с первого +; HL' - CYLINDERS ON PHISICAL DISK +; DE' - HEADS ON PHISICAL DISK +; BC' - SECTORS PER TRACK ON PHISICAL DISK +; A' - PHISICAL DRIVE NUMBER +; A - DRIVE/HEAD REGISTER PHISICAL DISK: ; bit7 - reserved "1" ; bit6 - ADDRESSING MODE LBA/CHS ; bit5 - reserved "1"