From cc6ab20c6c2574b0f1c9423dca2070f36acb6332 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sat, 30 Dec 2023 02:49:31 +1000 Subject: [PATCH] ... --- DSS/API/bootDsk.asm | 16 +-- DSS/FS/FAT/FAT12_16.asm | 4 +- DSS/VIDEO.ASM | 207 +++++++++++++++++----------------- DSS/build.txt | 2 +- SHELL/Messages/errors_txt.asm | 60 ---------- SHELL/SHELL.ASM | 54 ++++----- SHELL/build.txt | 2 +- Shared_Includes | 2 +- 8 files changed, 143 insertions(+), 204 deletions(-) delete mode 100644 SHELL/Messages/errors_txt.asm diff --git a/DSS/API/bootDsk.asm b/DSS/API/bootDsk.asm index 2459c5f..1db9326 100644 --- a/DSS/API/bootDsk.asm +++ b/DSS/API/bootDsk.asm @@ -2,8 +2,12 @@ ; Функция #09. Номер системного диска. ; Возвращает номер диска, c которого загружена система. ; -; вход: B = 0 (01h - исп. boot-загрузчик системы) -; выход: A - номер системного диска (0=A,1=B,..) +; При B = 0 (GET) +; вход: B = 0 (01h - исп. boot-загрузчик системы) +; выход: A - номер системного диска (0=A,1=B,..) +; При B = 1 (SET - исп. boot-загрузчик системы, после чего функция недоступна) +; вход: A - номер устройства, L - номер раздела на устройстве +; выход: ;///////////////////////////////////////////////////////////////////// BOOTDSK: INC B @@ -21,11 +25,9 @@ BOOTDSK: ; Сообщить DSS с какого диска загружается система. ; Исп. загрузчик системы для иниц. ячейки "boot_disk". -.SET: ;[ ] 17.12.2023 загрузка с активного раздела, а не с первого - ;LD B,A ;SET BOOT DISK - ;LD C,0 - LD B,A - LD C,0 +.SET: LD B,A ;SET BOOT DISK + LD C,0 + ;[ ] 17.12.2023 загрузка с активного раздела, а не с первого LD (.part),HL ; .loop: PUSH BC diff --git a/DSS/FS/FAT/FAT12_16.asm b/DSS/FS/FAT/FAT12_16.asm index 2541602..338612a 100644 --- a/DSS/FS/FAT/FAT12_16.asm +++ b/DSS/FS/FAT/FAT12_16.asm @@ -362,8 +362,8 @@ READ_FAT: ;LD IX,0 ;ADD IX,DE ; номер лог. сектора ; - LD HL,0 ; ст. разряд ; HL:IX - SECTOR FAT FOR READING - LD DE,FATPAGE.cache ; куда ; DE - FAT ADDRESS + LD HL,0 ; ст. разряд ; HL:IX - SECTOR FAT FOR READING ;!TODO FAT32 + LD DE,FATPAGE.cache ; куда ; DE - FAT ADDRESS LD A,(FatBuffer.DRIVE) ; номер диска LD BC,FAT_CACHE.Sectors*256 + Dss.DRV.Read ;рег B * FAT_CACHE.Sector_Size = CASH SIZE RST ToDSS.DRV diff --git a/DSS/VIDEO.ASM b/DSS/VIDEO.ASM index ac510dd..33e0530 100644 --- a/DSS/VIDEO.ASM +++ b/DSS/VIDEO.ASM @@ -22,9 +22,9 @@ ; выход: нет ;///////////////////////////////////////////////////////////////////// CLEAR: LD C,BIOS.LP_CLS_WIN2 - RST ToBIOS - AND A - RET + JP ToBIOS + ;AND A + ;RET ; ;///////////////////////////////////////////////////////////////////// ; Функция #5C. Вывод строки на экран. @@ -181,7 +181,7 @@ RDCHAR: XOR A RST ToBIOS LD A,L LD B,H - AND A + ;AND A RET ;///////////////////////////////////////////////////////////////////// @@ -205,9 +205,9 @@ WRCHAR: LD C,A POP HL XOR A LD C,BIOS.WIN_PUT_SYM - RST ToBIOS - AND A - RET + JP ToBIOS + ;AND A + ;RET ;///////////////////////////////////////////////////////////////////// ; Функция #59. Сохранить окно экрана. @@ -266,7 +266,7 @@ WINREST: AND A ; A = 0 - очищать строку ; выход: нет ;///////////////////////////////////////////////////////////////////// -SCROLL: DJNZ SCR_DW ;!TODO заменить на BIOS.LP_SCROLL_UD и посмотреть, что шустрее +SCROLL: DJNZ .SCR_DW ;!TODO заменить на BIOS.LP_SCROLL_UD и посмотреть, что шустрее ;[x] 04/04/23 ;LD B,A ;LD C,H @@ -289,9 +289,9 @@ SCROLL: DJNZ SCR_DW ;!TODO RST ToBIOS ;[x] 29/9/23 POP AF - JP PO,1F + JP PO,.skip_EI EI -1: ; +.skip_EI: POP HL POP DE ;[x] 04/04/23 @@ -313,11 +313,11 @@ SCROLL: DJNZ SCR_DW ;!TODO LD C,BIOS.LP_PRINT_SYM RST ToBIOS POP DE ;R01 - CALL LOCATE ;R01 - AND A - RET - -SCR_DW: DJNZ SCR_ERR + JP LOCATE ;R01 + ;AND A + ;RET +.SCR_DW: + DJNZ .SCR_ERR ;[x] 04/04/23 ;LD B,A ;LD C,H @@ -340,9 +340,9 @@ SCR_DW: DJNZ SCR_ERR RST ToBIOS ; [x] 29/9/23 POP AF - JP PO,1F + JP PO,.skip2_EI: EI -1: ; +.skip2_EI: POP HL POP DE ;[x] 29/9/23 @@ -354,8 +354,7 @@ SCR_DW: DJNZ SCR_ERR ; RET NZ JP SCROLL.print - -SCR_ERR: +.SCR_ERR: LD A,DSS_Error.sys.INVALID_FUNCTION SCF RET @@ -387,7 +386,8 @@ SELPAGE: ; выход: A - текущий режим экрана ; B - страница экрана 0/1 ;///////////////////////////////////////////////////////////////////// -GETVMOD IN A,(SCREEN_SWITCH) +GETVMOD: + IN A,(SCREEN_SWITCH) LD B,A LD A,(VMODE) AND A @@ -610,93 +610,90 @@ ScreenDescriptorTable.Size EQU ($ - ScreenDescriptorTable)/6 ;---------------------------------------------------------------------- ; Сохранить экран текст. режима. ; Для буфера экрана исп. 2-я банка расширения ДОС. -SAVETXT PUSH AF - LD A,(VMODE) - ;BIT 7,A - CP %1000'0000 - JR NC,NOSAVET - SUB #02 - JR C,NOSAVET - - PUSH BC - PUSH DE - PUSH HL - PUSH IX - - PUSH AF - LD C,BIOS.LP_GET_PLACE - RST ToBIOS - LD (TCURS),DE - POP AF - LD IX,#C000 - LD HL,#2050 - OR A - JR NZ,SVTEXT1 - LD L,#28 -SVTEXT1 LD (SVHL1),HL - LD DE,#0000 - LD A,(BANKTBL+TXTPAGE) - LD B,A - LD C,BIOS.WIN_COPY - ;[x] 29/9/23 - LD A,R - PUSH AF - ; - XOR A - DI - RST ToBIOS - ;[x] 29/9/23 - POP AF - JP PO,1F - EI -1: ; - POP IX - POP HL - POP DE - POP BC -NOSAVET: POP AF - RET +SAVETXT: PUSH AF + LD A,(VMODE) + ;BIT 7,A + CP %1000'0000 + JR NC,.NOSAVET + SUB #02 + JR C,.NOSAVET + ; + PUSH BC + PUSH DE + PUSH HL + PUSH IX + ; + PUSH AF + LD C,BIOS.LP_GET_PLACE + RST ToBIOS + LD (TCURS),DE + POP AF + LD IX,#C000 + LD HL,#2050 + OR A + JR NZ,.SVTEXT1 + LD L,#28 +.SVTEXT1: LD (SVHL1),HL + LD DE,#0000 + LD A,(BANKTBL+TXTPAGE) + LD B,A + LD C,BIOS.WIN_COPY + ;[x] 29/9/23 + LD A,R + PUSH AF + ; + XOR A + DI + RST ToBIOS + ;[x] 29/9/23 + POP AF + JP PO,.skip_EI + EI +.skip_EI: ; + POP IX + POP HL + POP DE + POP BC +.NOSAVET: POP AF + RET ;---------------------------------------------------------------------- -BACKTXT PUSH AF -VVMODE+1: - LD A,#00 - ;BIT 7,A - CP %1000'0000 - JR C,NOBACKT - - PUSH BC - PUSH DE - PUSH HL - PUSH IX - LD IX,#C000 -SVHL1+1: - LD HL,#2050 - LD DE,#0000 - LD A,(BANKTBL+TXTPAGE) - LD B,A - LD C,BIOS.WIN_RESTORE - ;[x] 29/9/23 - LD A,R - PUSH AF - ; - XOR A - DI - RST ToBIOS - ;[x] 29/9/23 - POP AF - JP PO,1F - EI -1: ; -TCURS+1: - LD DE,#0000 - CALL LOCATE - POP IX - POP HL - POP DE - POP BC -NOBACKT: POP AF - RET +BACKTXT: PUSH AF +VVMODE+1: LD A,#00 + ;BIT 7,A + CP %1000'0000 + JR C,NOBACKT + ; + PUSH BC + PUSH DE + PUSH HL + PUSH IX + LD IX,#C000 +SVHL1+1: LD HL,#2050 + LD DE,#0000 + LD A,(BANKTBL+TXTPAGE) + LD B,A + LD C,BIOS.WIN_RESTORE + ;[x] 29/9/23 + LD A,R + PUSH AF + ; + XOR A + DI + RST ToBIOS + ;[x] 29/9/23 + POP AF + JP PO,1F + EI +1: ; +TCURS+1: LD DE,#0000 + CALL LOCATE + POP IX + POP HL + POP DE + POP BC +NOBACKT: POP AF + RET ;///////////////////////////////////////////////////////////////////// ; Функция #5F. Вывод символа на принтер без ожидания. diff --git a/DSS/build.txt b/DSS/build.txt index 779a873..cb22560 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -826 \ No newline at end of file +827 \ No newline at end of file diff --git a/SHELL/Messages/errors_txt.asm b/SHELL/Messages/errors_txt.asm deleted file mode 100644 index da24021..0000000 --- a/SHELL/Messages/errors_txt.asm +++ /dev/null @@ -1,60 +0,0 @@ -;----------------------------------------------------------------------- -;!FIXIT функция вызывающая вывод ошибки делает в начале фильтр по номерам и несколько первых отшиваются -ERR0: DB #00 - DZ "Bad command or file name" - DZ "Invalid function" ; 01 - неверный номер функции - DZ "Invalid drive number" ; 02 - неправильный номер устройства - DZ "File not found" ; 03 - файл не обнаружен - DZ "Path not found" ; 04 - неверный путь - DZ "Invalid handle" ; 05 - несуществующий файловый манипулятор - DZ "Too many open files" ; 06 - нет свободного файлового манипулятора - DZ "File already exist" ; 07 - файл существует - DZ "File read only" ; 08 - файл только для чтения - DZ "Root overflow" ; 09 - переполнение ROOT (корневого каталога) - DZ "No free space" ; 10 - нет свободного места на диске - DZ "Directory not empty" ; 11 - каталог не пуст - DZ "Can't delete current directory" ; 12 - неудачная попытка удалить текущий каталог - DZ "Invalid media" ; 13 - неизвестный формат - DZ "Unknown operation" ;R02 ; 14 - невозможная операция - DZ "Directory exist" ; 15 - каталог уже есть - DZ "Invalid filename" ; 16 - неверное имя - DZ "Invalid EXE-file" ; 17 - неправильный EXE-файл - DZ "Not supported EXE-file" ; 18 - не поддерживаемая версия EXE-файла - DZ "Access denied" ; 19 - ресурс не доступен - DZ "Not ready" ; 20 - нет готовности - DZ "Seek error" ; 21 - ошибка позиционирования - DZ "Sector not found" ; 22 - сектор не найден - DZ "CRC error" ; 23 - ошибка CRC - DZ "Write protect" ; 24 - защита записи - DZ "Read error" ; 25 - ошибка чтения - DZ "Write error" ; 26 - ошибка записи - DZ "Drive failure" ; 27 - сбой диска - DZ "Extended error 28" - DZ "Extended error 29" - DZ "Not enough memory" ; 30 - недостаточно памяти - DZ "Invalid memory block" ; 31 - несуществующий блок памяти - DZ "Extended error 32" - DZ "Maximum PATH size exceeded" ; 33 - превышен максимальный размер переменной - DZ "Extended error 34" - DZ "Too many files in directory" ; 35 - слишком много файлов в директории - DZ "Directory nesting too large or number of folders > 1023" ; 36 - слишком большая вложенность каталогов или количество папок > 1023 - DZ "Operation aborted by user" ; 37 - операция прервана пользователем - DZ "Common error" ; 38 - общая ошибка - DZ "Unexpected application termination" ; 39 - unexpected application termination / неожиданное завершение приложения - DZ "40" - DZ "41" - DZ "42" - DZ "43" - DZ "44" - DZ "45" - DZ "46" - DZ "Wrong video mode" ; 48 - неправильный видеорежим - DZ "48" - DZ "49" - DZ "50" - ;R11 - DB 0 ; ограничитель, чтоб при ошибке больше, чем есть сообщений выдавалось общее: - DZ "Unknown error" - ; -.Size EQU $-ERR0 -;----------------------------------------------------------------------- \ No newline at end of file diff --git a/SHELL/SHELL.ASM b/SHELL/SHELL.ASM index 90d5ca5..ca68d38 100644 --- a/SHELL/SHELL.ASM +++ b/SHELL/SHELL.ASM @@ -35,6 +35,7 @@ ;R02 19-11-2002 DNS CORRECT SOME ERROR MESSAGES ;R01 19-11-2002 DNS ADD ENVIRONMENT %VARIABLE% IN ECHO ;=====================================================================[] + DEFINE SHELL_COMPILATION 1 includelua 'Shared_includes/lua/Functions.lua' include 'shared_includes/constants/bios_equ.inc' @@ -530,34 +531,33 @@ T8C21: db "ON",0 T8C24: db "OFF",0 - include 'edline.asm' ; строка редактирования - include 'batch.asm' ; парсинг bat-файлов - include 'exec.asm' ; выполн. введ. команд с консоли - include 'procedures/print.asm' ; функции вывода сообщений - include 'messages/errors_txt.asm' ; сообщения об ошибках - include 'messages/main_txt.asm' ; сообщения - include 'procedures/parsers.asm' ; функции прочесывания и выбора - include 'procedures/math.asm' ; функции математические - + include 'edline.asm' ; строка редактирования + include 'batch.asm' ; парсинг bat-файлов + include 'exec.asm' ; выполн. введ. команд с консоли + include 'procedures/print.asm' ; функции вывода сообщений + include '../Shared_includes/constants/dss_errors.z80' ; сообщения об ошибках + include 'messages/main_txt.asm' ; сообщения + include 'procedures/parsers.asm' ; функции прочесывания и выбора + include 'procedures/math.asm' ; функции математические ; - include 'Commands/exit.asm' ; выход в родит. процесс - include 'Commands/break.asm' ; выход из парсера bat - include 'Commands/pause.asm' ; пауза - include 'Commands/rem.asm' ; комментарий - include 'Commands/ver.asm' ; вывод версии ДОС - include 'Commands/cls.asm' ; очистка экрана - include 'Commands/date.asm' ; вывод или установка даты/времени - include 'Commands/dir.asm' ; вывод списка директории - include 'Commands/chdir.asm' ; смена тек. каталога - include 'Commands/mkdir.asm' ; создание каталога - include 'Commands/rmdir.asm' ; удаление каталога - include 'Commands/del.asm' ; удаление файла - include 'Commands/ren.asm' ; переименование файла или каталога - include 'Commands/echo.asm' ; эхо-режим - include 'Commands/help.asm' ; вывод экрана помощи - include 'Commands/path.asm' ; задать сист. путь - include 'Commands/set.asm' ; задать переменную окружения - include 'Commands/reboot.asm' ; софт ресет + include 'Commands/exit.asm' ; выход в родит. процесс + include 'Commands/break.asm' ; выход из парсера bat + include 'Commands/pause.asm' ; пауза + include 'Commands/rem.asm' ; комментарий + include 'Commands/ver.asm' ; вывод версии ДОС + include 'Commands/cls.asm' ; очистка экрана + include 'Commands/date.asm' ; вывод или установка даты/времени + include 'Commands/dir.asm' ; вывод списка директории + include 'Commands/chdir.asm' ; смена тек. каталога + include 'Commands/mkdir.asm' ; создание каталога + include 'Commands/rmdir.asm' ; удаление каталога + include 'Commands/del.asm' ; удаление файла + include 'Commands/ren.asm' ; переименование файла или каталога + include 'Commands/echo.asm' ; эхо-режим + include 'Commands/help.asm' ; вывод экрана помощи + include 'Commands/path.asm' ; задать сист. путь + include 'Commands/set.asm' ; задать переменную окружения + include 'Commands/reboot.asm' ; софт ресет ; DISPLAY "Empty space for buffers from ",/H,$ work_buffer1 equ $ ; 2-й раб. буфер ; 128 bytes diff --git a/SHELL/build.txt b/SHELL/build.txt index fb32aea..da4c6e9 100644 --- a/SHELL/build.txt +++ b/SHELL/build.txt @@ -1 +1 @@ -296 \ No newline at end of file +297 \ No newline at end of file diff --git a/Shared_Includes b/Shared_Includes index f112b13..54298bf 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit f112b1359045d7fe7aa47f843011fddc5e03eba2 +Subproject commit 54298bfb52826572bda5ccd0609320a9418d08c9