From b38d6ccd486242686b0059d72f2259ad7cebf8e0 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 27 Mar 2026 00:16:01 +1000 Subject: [PATCH] removed #55aa for GenIOCTL new subfunction GetMoreParams for GenIOCTL --- BOOT/boot.asm | 2 +- DSS/API/bootDsk.asm | 2 +- DSS/API/diskINF.asm | 21 +- DSS/DRV-MAIN.ASM | 19 +- DSS/DSS_API.TXT | 803 ++++++++++++++++++++++++++++ DSS/DSS_MACROSES.Z80 | 7 +- DSS/FS/FAT.asm | 4 + DSS/Structures.inc | 1 + DSS/drivers/media/ReScanDRV.ASM | 6 +- DSS/drivers/media/Shared.asm | 7 +- DSS/drivers/media/ata_atapi-drv.asm | 37 +- DSS/drivers/media/fdd-drv.asm | 15 +- DSS/drivers/media/ram_disk-drv.asm | 15 +- SHELL/Commands/INFO.ASM | 2 +- Shared_Includes | 2 +- 15 files changed, 884 insertions(+), 59 deletions(-) create mode 100644 DSS/DSS_API.TXT diff --git a/BOOT/boot.asm b/BOOT/boot.asm index 9e4ff3b..d1014df 100644 --- a/BOOT/boot.asm +++ b/BOOT/boot.asm @@ -499,7 +499,7 @@ write_to_BPB: PUSH BC ; write_no_BPB: ld a,(disk) ; ᪠ - ld de,Dss.DRV.GenIOCTL.Enter + ;ld de,Dss.DRV.GenIOCTL.Enter ld bc,Dss.DRV.GenIOCTL.GetParams rst ToDSS.DRV ex af,af' diff --git a/DSS/API/bootDsk.asm b/DSS/API/bootDsk.asm index 0361015..5499fea 100644 --- a/DSS/API/bootDsk.asm +++ b/DSS/API/bootDsk.asm @@ -31,7 +31,7 @@ BOOTDSK: ; .loop: PUSH BC LD A,C - LD DE,Dss.DRV.GenIOCTL.Enter + ;LD DE,Dss.DRV.GenIOCTL.Enter LD BC,Dss.DRV.GenIOCTL.GetParams RST ToDSS.DRV ;[x] 17.12.2023 㧪 ⨢ ࠧ, ࢮ diff --git a/DSS/API/diskINF.asm b/DSS/API/diskINF.asm index d0655a5..374df1c 100644 --- a/DSS/API/diskINF.asm +++ b/DSS/API/diskINF.asm @@ -9,19 +9,20 @@ ; HL - (256 ⮢) ७ : ; B != 0 - ᢮ ; ; -; ࠧ - 1 +; ࠧ (BYTE) ; ⥬ ; ; -; ࠧ - 1 +; ࠧ (BYTE) ; ਩ ᪠ ; ; -; ࠧ - 1 +; ࠧ (BYTE) ; ⪠ ᪠ ; ; -; ࠧ - 1 -; 䨧᪨ ᪠, ࠧ +; ࠧ (BYTE) +; 䨧᪨ ᪠ +; ࠧ ; ; -; ࠧ - 1 +; ࠧ (BYTE) ; १ࢨ஢ ; ; ; 室: CF=0: @@ -59,7 +60,7 @@ DISKINF: LD C,B ;;;; ; EX DE,HL - LD HL,FAT_STRING ;!HARDCODE FAT FS + LD HL,.FAT_STRING ;!HARDCODE FAT FS LD C,5 ;!HARDCODE _sBOOT_SECTOR_PARAMS.ID_FAT.length CALL .mCOPY_LOOP ; 12, 16 or 32 @@ -94,7 +95,7 @@ DISKINF: LD C,B POP AF PUSH DE ;LD A,XH - LD DE,Dss.DRV.GenIOCTL.Enter + ;LD DE,Dss.DRV.GenIOCTL.Enter LD BC,Dss.DRV.GenIOCTL.GetParams RST ToDSS.DRV POP DE @@ -104,6 +105,7 @@ DISKINF: LD C,B POP DE EXX JR C,.error_drv + ; LD A,2 ;!HARDCODE 4 2 : 䨧 ᪠, ࠧ ᪠ LD (DE),A INC DE @@ -182,6 +184,8 @@ DISKINF: LD C,B LDIR RET ; +.FAT_STRING: DB 'FAT12' + ; ; GetFreeSpace: LD A,1 LD (CORE_BUFFERS.FS_Buffer.UPD_FSINFO),A @@ -234,7 +238,6 @@ GetFreeSpace: LD A,1 EXX JP .loop_free_space ; -FAT_STRING: DB 'FAT12' ; ; DE - GET_LABEL: PUSH DE diff --git a/DSS/DRV-MAIN.ASM b/DSS/DRV-MAIN.ASM index b9a7798..b409f05 100644 --- a/DSS/DRV-MAIN.ASM +++ b/DSS/DRV-MAIN.ASM @@ -108,7 +108,7 @@ RST_30: JP MOUSE_DRV.API ;!FIXIT //////////////////////////////////////////////////////////////////////// ; <[MAIN INT]> ; - BLOCK #38-$,#C7 ; + BLOCK #38-$,#C7 ;shortblock-ok /* ;!TEST SIO INT ; reg 0 - error reset @@ -267,21 +267,6 @@ LOGDRV EQU DEVICE + DEVICE.End .Reserved_1 EQU 13 .Reserved_2 EQU 14 .Reserved_3 EQU 15 -; : L - ᪨ ⠡ -; : IY - 砫 -; : HL, IY. HL<-->DE -; MACRO LOGDRV_ENTRY_FIND tbl_addr -; LD H,0 -; ADD HL,HL -; ADD HL,HL -; ADD HL,HL -; ADD HL,HL -; ;LD B,H -; ;LD C,L -; EX DE,HL -; LD IY,tbl_addr -; ADD IY,DE -; ENDM ;----------------------------------------------------------------------; ; @@ -289,7 +274,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 +DRIVES_DRIVER.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 diff --git a/DSS/DSS_API.TXT b/DSS/DSS_API.TXT new file mode 100644 index 0000000..5c92b68 --- /dev/null +++ b/DSS/DSS_API.TXT @@ -0,0 +1,803 @@ +## Системные вызовы дисковой подсистемы (DSS) v1.71 + + Вызов функций DSS в системе Estex выполняется из ассемблера. +Необходимые параметры указываются в различных регистрах, регистр **C** +используется для указания номера функции. + +Так, наша программа для Estex будет выглядеть наподобие: + + ORG #8100 ;адрес точки входа + + LD HL,MSG ;сообщение для вывода + + LD C,5Ch ;номер системного вызова (PCHARS) + + RST 10h ;вызов подсистемы + + LD C,41h ;номер системного вызова (EXIT) + + RST 10h ;вызов подсистемы + + MSG db "Hello, world!",0Dh,0Ah ;наша строка + + db 0 ;конец строки + +Следом за таблицей есть пояснение по двум новым функциям 0Ch и 0Dh. + ++------------------------------------------------------------------------------------------------------------+ ++------------------------------------------------------------------------------------------------------------+ +| **Функции идентификации системы** | ++------------------------------------------------------------------------------------------------------------+ +| **00h (00) VERSION (Версия DSS)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| C - 00h | D - номер версии | +| | E - модификация | +| | BC - номер сборки | ++----------------------------------------------------------------------+-------------------------------------+ +| **Функции для работы с диском** | ++------------------------------------------------------------------------------------------------------------+ +| **01h (01) CHDISK (Смена текущего диска)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| A - номер диска (0-A,1-B...) | A - код ошибки, если CF=1 | +| C - 01h | A - максимальный номер диска, если | +| | CF=0 | ++----------------------------------------------------------------------+-------------------------------------+ +| **02h (02) CURDISK (Номер текущего диска)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| C - 02h | A - код ошибки, если CF=1 | +| | A - текущий номер диска | +| | (0-A,1-B...), если CF=0 | +| | C - максимальный номер диска, | +| | если CF=0 | ++----------------------------------------------------------------------+-------------------------------------+ +| **03h (03) DSKINFO (Информация о диске) добавить описание** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| A - номер диска (0-A,1-B...#FF-текущий) | A - код ошибки, если CF=1 | +| C - 03h | A - размер кластера в секторах, | +| | если CF=0 | +| Если A bit7 = 1 и A != #FF: | HL':HL - общее кол-во кластеров | +| | DE':DE - свободных кластеров | +| HL - буфер (256 байтов) для расширенных данных: | BC - размер сектора в байтах | +| | | +| Формат полей - длина поля (1 байт), данные поля. | | +| | | +| Файловая система; **string** | | +| | | +| Серийный номер диска; **dword** | | +| | | +| Метка диска; **string** | | +| | | +| Физический номер диска, номер раздела; **word** | | +| | | +| **Остальные поля зарезервированы** | | +| | | +| B -- если равен нулю, то подсчёт свободных кластеров на разделе | | +| осуществляться не будет | | ++----------------------------------------------------------------------+-------------------------------------+ +| **09h (09) BOOTDSK (Номер системного диска)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| C - 09h | A - код ошибки, если CF=1 | +| B = 0 | A - номер системного диска | +| | (0-A,1-B...), если CF=0 | ++----------------------------------------------------------------------+-------------------------------------+ +| **Функции для работы с файлами** | ++------------------------------------------------------------------------------------------------------------+ +| **0Ah (10) CREATE (Создание файла)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| HL - указатель на файловую спецификацию | A - код ошибки, если CF=1 | +| A - атрибут файла | A - файловый манипулятор, если CF=0 | +| C - 0Ah | | ++----------------------------------------------------------------------+-------------------------------------+ +| **0Bh (11) CREATE NEW FILE (Создание нового файла)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| HL - указатель на файловую спецификацию | A - код ошибки, если CF=1 | +| A - атрибут файла | A - файловый манипулятор, если CF=0 | +| C - 0Bh | | ++----------------------------------------------------------------------+-------------------------------------+ +| **0Eh (14) DELETE (Удаление файла)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| HL - указатель на файловую спецификацию | A - код ошибки, если CF=1 | +| C - 0Eh | | ++----------------------------------------------------------------------+-------------------------------------+ +| **10h (16) RENAME (Переименование файла)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| HL - указатель на старое имя файла | A - код ошибки, если CF=1 | +| DE - указатель на новое имя файла | | +| C - 10h | | ++----------------------------------------------------------------------+-------------------------------------+ +| **11h (17) OPEN (Открытие файла)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| HL - указатель на файловую спецификацию | A - код ошибки, если CF=1 | +| A - режим доступа | A - файловый манипулятор, если CF=0 | +| A=0 чтение/запись | | +| A=1 чтение | | +| A=2 запись | | +| C - 11h | | ++----------------------------------------------------------------------+-------------------------------------+ +| **12h (18) CLOSE (Закрытие файла)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| A - файловый манипулятор | A - код ошибки, если CF=1 | +| C - 12h | | ++----------------------------------------------------------------------+-------------------------------------+ +| **13h (19) READ (Чтение из файла)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| A - файловый манипулятор | A - код ошибки, если CF=1 | +| HL - адрес в памяти | если CF=0: | +| DE - количество читаемых байт | DE - реальное количество | +| C - 13h | прочитанных байт | +| | A = 0 прочитаны все байты | +| | A = #FF прочитано меньшее число | +| | байт или конец файла | ++----------------------------------------------------------------------+-------------------------------------+ +| **14h (20) WRITE (Запись в файл)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| A - файловый манипулятор | A - код ошибки, если CF=1 | +| HL - адрес в памяти | DE - реальное количество записанных | +| DE - количество записываемых байт | байт | +| C - 14h | | ++----------------------------------------------------------------------+-------------------------------------+ +| **15h (21) MOVE_FP (Перемещение указателя в файле)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| A - файловый манипулятор | A - код ошибки, если CF=1 | +| HL:IX - смещение указателя в файле | HL:IX - новое значение указателя | +| B - способ перемещения: | | +| B=0 от начала файла | | +| B=1 от текущего значения указателя | | +| B=2 от конца файла | | +| C - 15h | | ++----------------------------------------------------------------------+-------------------------------------+ +| **16h (22) ATTRIB (Получение/изменение атрибута файла)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| HL - указатель на файловую спецификацию | A - код ошибки, если CF=1 | +| B - режим доступа | A - атрибут файла, если CF=0 | +| B = 0 получить атрибут | | +| B = 1 установить атрибут | | +| A - атрибут файла | | +| C - 16h | | ++----------------------------------------------------------------------+-------------------------------------+ +| **17h (23) GET_D_T (Информация о дате и времени файла)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| A - файловый манипулятор | A - код ошибки, если CF=1 | +| C - 17h | D - день | +| | E - месяц | +| | IX - год | +| | H - час | +| | L - минуты | +| | B - секунды | ++----------------------------------------------------------------------+-------------------------------------+ +| **18h (24) PUT_D_T (Изменение даты и времени файла)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| A - файловый манипулятор | A - код ошибки, если CF=1 | +| D - день | | +| E - месяц | | +| IX - год | | +| H - час | | +| L - минуты | | +| B - секунды | | +| C - 18h | | ++----------------------------------------------------------------------+-------------------------------------+ +| **19h (25) F_FIRST (Поиск первого совпадающего файла)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| A - атрибуты, используемые при поиске | A - код ошибки, если CF=1 | +| HL - указатель на файловую спецификацию | | +| DE - рабочий буфер 44 байта, если B=0, если B=1, то максимум 46 байт | | +| B = 0 - имя найденного файла в формате 11 байт "FilenameExt" | | +| B = 1 - имя найденного файла в формате DOS "filename.ext",0 | | +| C - 19h | | ++----------------------------------------------------------------------+-------------------------------------+ +| **1Ah (26) F_NEXT (Поиск следующего совпадающего файла)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| DE - указатель на рабочий буфер | A - код ошибки, если CF=1 | +| C - 1Ah | | ++----------------------------------------------------------------------+-------------------------------------+ +| **1Bh (27) MKDIR (Создание каталога)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| HL - указатель на файловую спецификацию | A - код ошибки, если CF=1 | +| C - 1Bh | | ++----------------------------------------------------------------------+-------------------------------------+ +| **1Ch (28) RMDIR (Устранение каталога)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| HL - указатель на файловую спецификацию | A - код ошибки, если CF=1 | +| C - 1Ch | | ++----------------------------------------------------------------------+-------------------------------------+ +| **1Dh (29) CHDIR (Смена текущего каталога)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| HL - указатель на файловую спецификацию | A - код ошибки, если CF=1 | +| C - 1Dh | | ++----------------------------------------------------------------------+-------------------------------------+ +| **1Eh (30) CURDIR (Информация о текущем каталоге)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| HL - буфер в памяти 256 байт | A - код ошибки, если CF=1 | +| C - 1Eh | | ++----------------------------------------------------------------------+-------------------------------------+ +| **Функции для работы с датой и временем** | ++------------------------------------------------------------------------------------------------------------+ +| **21h (33) SYSTIME (Текущая дата и время)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| C - 21h | D - день | +| | E - месяц | +| | IX - год | +| | H - час | +| | L - минуты | +| | B - секунды | +| | C - день недели | ++----------------------------------------------------------------------+-------------------------------------+ +| **22h (34) SETTIME (Установить текущую дату и время)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| D - день | A - код ошибки, если CF=1 | +| E - месяц | | +| IX - год | | +| H - час | | +| L - минуты | | +| B - секунды | | +| C - 22h | | ++----------------------------------------------------------------------+-------------------------------------+ +| **Функции управления памятью** | ++------------------------------------------------------------------------------------------------------------+ +| **38h (56) SETWIN (Подключение страницы памяти)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| A - идентификатор блока памяти | A - код ошибки, если CF=1 | +| B - номер страницы в блоке (0,1,2...) | A - номер замещенной страницы, если | +| H - биты 6 и 7 задают номер окна, в которое будет подключена | CF=0 | +| страница | | +| C - 38h | | ++----------------------------------------------------------------------+-------------------------------------+ +| **39h (57) SETWIN1 (Подключение страницы памяти в первое окно)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| A - идентификатор блока памяти | A - код ошибки, если CF=1 | +| B - номер страницы в блоке (0,1,2...) | A - номер замещенной страницы, если | +| C - 39h | CF=0 | ++----------------------------------------------------------------------+-------------------------------------+ +| **3Ah (58) SETWIN2 (Подключение страницы памяти во второе окно)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| A - идентификатор блока памяти | A - код ошибки, если CF=1 | +| B - номер страницы в блоке (0,1,2...) | A - номер замещенной страницы, если | +| C - 3Ah | CF=0 | ++----------------------------------------------------------------------+-------------------------------------+ +| **3Bh (59) SETWIN3 (Подключение страницы памяти в третье окно)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| A - идентификатор блока памяти | A - код ошибки, если CF=1 | +| B - номер страницы в блоке (0,1,2...) | A - номер замещенной страницы, если | +| C - 3Bh | CF=0 | ++----------------------------------------------------------------------+-------------------------------------+ +| **3Ch (60) INFOMEM (Информация о памяти)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| C - 3Ch | HL - общее количество страниц | +| | BC - количество свободных страниц | ++----------------------------------------------------------------------+-------------------------------------+ +| **3Dh (61) GETMEM (Выделение блока памяти)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| B - размер блока в страницах по 16 килобайт | A - код ошибки, если CF=1 | +| C - 3Dh | A - идентификатор блока памяти, | +| | если CF=0 | ++----------------------------------------------------------------------+-------------------------------------+ +| **3Eh (62) FREEMEM (Освобождение блока памяти)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| A - идентификатор блока памяти | A - код ошибки, если CF=1 | +| C - 3Eh | | ++----------------------------------------------------------------------+-------------------------------------+ +| **3Fh (63) SETMEM (Изменение блока памяти)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| A - идентификатор блока памяти | A - код ошибки, если CF=1 | +| B - новый размер блока | | +| C - 3Fh | | ++----------------------------------------------------------------------+-------------------------------------+ +| **Функции ввода с клавиатуры** | ++------------------------------------------------------------------------------------------------------------+ +| **30h (48) WAITKEY (Ожидание символа с клавиатуры)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| C - 30h | A - код символа | +| | D - позиционный код | +| | E - ASCII код | +| | C - режим клавиатуры: | +| | bit7 - RUS/LAT | +| | bit3 - Num Lock | +| | bit2 - Scroll Lock | +| | bit1 - Insert | +| | bit0 - Caps Lock | +| | B - состояние shift'ов: | +| | bit7 - Left Shift | +| | bit6 - Right Shift | +| | bit5 - Ctrl | +| | bit4 - Alt | +| | bit3 - Left Ctrl | +| | bit2 - Left Alt | +| | bit1 - Right Ctrl | +| | bit0 - Right Alt | ++----------------------------------------------------------------------+-------------------------------------+ +| **31h (49) SCANKEY (Опрос клавиатуры без ожидания)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| C - 31h | ZF = 1 - нет клавиш | +| | A - код символа | +| | D - позиционный код | +| | E - ASCII код | +| | C - режим клавиатуры: | +| | bit7 - RUS/LAT | +| | bit3 - Num Lock | +| | bit2 - Scroll Lock | +| | bit1 - Insert | +| | bit0 - Caps Lock | +| | B - состояние shift'ов: | +| | bit7 - Left Shift | +| | bit6 - Right Shift | +| | bit5 - Ctrl | +| | bit4 - Alt | +| | bit3 - Left Ctrl | +| | bit2 - Left Alt | +| | bit1 - Right Ctrl | +| | bit0 - Right Alt | ++----------------------------------------------------------------------+-------------------------------------+ +| **32h (50) ECHOKEY (Ожидание символа с клавиатуры с печатью без скролла)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| C - 32h | A - код символа | +| | D - позиционный код | +| | E - ASCII код | +| | C - режим клавиатуры: | +| | bit7 - RUS/LAT | +| | bit3 - Num Lock | +| | bit2 - Scroll Lock | +| | bit1 - Insert | +| | bit0 - Caps Lock | +| | B - состояние shift'ов: | +| | bit7 - Left Shift | +| | bit6 - Right Shift | +| | bit5 - Ctrl | +| | bit4 - Alt | +| | bit3 - Left Ctrl | +| | bit2 - Left Alt | +| | bit1 - Right Ctrl | +| | bit0 - Right Alt | ++----------------------------------------------------------------------+-------------------------------------+ +| **33h (51) CTRLKEY (Получить состояние клавиатуры)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| C - 33h | A = 0 - нет символов в буфере | +| | C - режим клавиатуры: | +| | bit7 - RUS/LAT | +| | bit3 - Num Lock | +| | bit2 - Scroll Lock | +| | bit1 - Insert | +| | bit0 - Caps Lock | +| | B - состояние shift'ов: | +| | bit7 - Left Shift | +| | bit6 - Right Shift | +| | bit5 - Ctrl | +| | bit4 - Alt | +| | bit3 - Left Ctrl | +| | bit2 - Left Alt | +| | bit1 - Right Ctrl | +| | bit0 - Right Alt | ++----------------------------------------------------------------------+-------------------------------------+ +| **35h (53) K_CLEAR (Очистить буфер клавиатуры и выполнить функцию)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| B - номер функции 30h, 31h, 32h, 33h или 34h | В зависимости от указанной функции | +| C - 35h | в регистре B. | ++----------------------------------------------------------------------+-------------------------------------+ +| **36h (54) K_SETUP (Управление настройками клавиатуры)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| B - номер подфункции | В зависимости от указанной функции | +| C - 36h | в регистре B. | +| | | +| B = 0, установить раскладку клавиатуры | | +| A - номер раскладки | | +| | | +| > 0 - normal | | +| > 1 - shift | | +| > 2 - caps lock | | +| > 3 - caps lock + shift | | +| > 4 - normal (альтернативная кл.) | | +| > 5 - shift (альтернативная кл.) | | +| > 6 - caps lock (альтернативная кл.) | | +| > 7 - caps lock + shift (альтернативная кл.) | | +| | | +| -------------------------------------------------------------------- | | +| | | +| B = 1, получить состояние звуковых переменных | | +| B = 2, установить звуковые переменные | | +| A - значение переменной | | +| bit0 - сигнал переполнения буфера клавиатуры | | +| bit1 - сигнал переключения на альтернативную раскладку клавиатуры | | +| | | +| ------------------------------------------------------------------- | | +| | | +| B = 3, включить отображение курсора | | +| | | +| B = 4, выключить отображение курсора | | ++----------------------------------------------------------------------+-------------------------------------+ +| **37h (55) TESTKEY (Опрос буфера клавиатуры)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| C - 37h | ZF = 1 - нет символов в буфере | +| | A - код символа | +| | D - позиционный код | +| | E - ASCII код | +| | C - режим клавиатуры: | +| | bit7 - RUS/LAT | +| | bit3 - Num Lock | +| | bit2 - Scroll Lock | +| | bit1 - Insert | +| | bit0 - Caps Lock | +| | B - состояние shift'ов: | +| | bit7 - Left Shift | +| | bit6 - Right Shift | +| | bit5 - Ctrl | +| | bit4 - Alt | +| | bit3 - Left Ctrl | +| | bit2 - Left Alt | +| | bit1 - Right Ctrl | +| | bit0 - Right Alt | ++----------------------------------------------------------------------+-------------------------------------+ +| **Функции для исполнения программ** | ++------------------------------------------------------------------------------------------------------------+ +| **40h (64) EXEC (Выполнить файл)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| HL - указатель на файловую спецификацию | A - код ошибки, если CF=1 | +| B = 0 - загрузить и выполнить программу с поиском в PATH | A - код завершения, если CF=0 | +| B = 1 - загрузить и выполнить программу без поиска в PATH | | +| C - 40h | | ++----------------------------------------------------------------------+-------------------------------------+ +| **41h (65) EXIT (Завершение программы)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| B - код завершения | A - код ошибки, если CF=1 | +| C - 41h | A - код завершения, если CF=0 | ++----------------------------------------------------------------------+-------------------------------------+ +| **42h (66) GET_ERR (Получить код завершения программы)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| C - 42h | A - код завершения | ++----------------------------------------------------------------------+-------------------------------------+ +| **Функции для работы со строками и командной строкой** | ++------------------------------------------------------------------------------------------------------------+ +| **43h (67) GSWITCH (Выделить параметр командной строки)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| HL - указатель командной строки | HL - указатель на следующий | +| DE - буфер для выделяемого параметра | параметр командной строки | +| C - 43h | CF = 0 - конец строки не достигнут | +| | (есть другие параметры) | +| | CF = 1 - конец строки (в буфер | +| | перенесён последний параметр или | +| | ноль) | ++----------------------------------------------------------------------+-------------------------------------+ +| **44h (68) DOSNAME (Преобразовать имя файла)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| C - 44h | A - код ошибки, если CF=1 | +| B = 0, преобразовать из 11 символьного формата в формат ДОС | | +| HL - 11 символов имени файла | | +| DE - буфер для имени в формате ДОС | | +| B = 1, преобразовать из формата ДОС в 11 символьный формат | | +| HL - имя файла в формате ДОС | | +| DE - 11 символов имени файла | | ++----------------------------------------------------------------------+-------------------------------------+ +| **45h (69) EXCMDLN (Разбор командной строки)** | ++------------------------------------------------------------------------------------------------------------+ +| Входные значения: | +| HL - указатель командной строки | +| DE - указатель на буфер пользователя | +| C - 45h | +| B - номер подфункции: | +| | +| 0 - Разобрать строку; | +| 1 - Выделить имя диска; | +| 2 - Выделить директорию; | +| 3 - Выделить имя файла; | +| 4 - Выделить расширение файла; | +| 5 - Выделить имя диска, путь к файлу, имя файла и расширение файла; | +| 6 - Зарезервирована; | +| 7 - Выделить параметр командной строки; | +| 8 - Преобразовать из 11 символьного формата в формат ДОС; | +| 9 - Преобразовать из формата ДОС в 11 символьный формат; | ++------------------------------------------------------------------------------------------------------------+ +| | +| +---------------------------------------------------------------------------------------+ | +| | **Подфункция 0 - Разобрать строку:** | | +| +--------------------------------------+------------------------------------------------+ | +| | Входные значения: | Выходные значения: | | +| | HL - указатель командной строки | A - код ошибки, если CF=1 | | +| | C - 45h | A - результат разбора, если CF=0 | | +| | B = 0 - Разобрать строку | bit7 - В строке обнаружены символы ? или * | | +| | | bit3 - В строке указано имя диска; | | +| | | bit2 - В строке указан путь к файлу; | | +| | | bit1 - В строке указано расширение файла; | | +| | | bit0 - В строке указано имя файла; | | +| +--------------------------------------+------------------------------------------------+ | +| | **Подфункция 1 - Выделить имя диска:** | | +| +--------------------------------------+------------------------------------------------+ | +| | Входные значения: | Выходные значения: | | +| | HL - указатель командной строки | A - код ошибки, если CF=1 | | +| | DE - буфер (макс. 13 байт) | A - номер диска (0 - A, 1 - B, 2 - C и т.д.), | | +| | C - 45h | если CF=0 | | +| | B = 1 - Выделить имя диска | буфер - имя диска "A:",0 | | +| +--------------------------------------+------------------------------------------------+ | +| | **Подфункция 2 - Выделить директорию:** | | +| +--------------------------------------+------------------------------------------------+ | +| | Входные значения: | Выходные значения: | | +| | HL - указатель командной строки | A - код ошибки, если CF=1 | | +| | DE - буфер (макс. 256 байт) | A - результат разбора, если CF=0 | | +| | C - 45h | bit7 - В строке обнарxужены символы ? или * | | +| | B = 2 - Выделить директорию | bit3 - В строке указано имя диска; | | +| | | bit2 - В строке указан путь к файлу; | | +| | | bit1 - В строке указано расширение файла; | | +| | | bit0 - В строке указано имя файла; | | +| | | буфер - директория "DIR1\DIR2\DIR3\",0 | | +| +--------------------------------------+------------------------------------------------+ | +| | **Подфункция 3 - Выделить имя файла:** | | +| +--------------------------------------+------------------------------------------------+ | +| | Входные значения: | Выходные значения: | | +| | HL - указатель командной строки | A - код ошибки, если CF=1 | | +| | DE - буфер (макс. 13 байт) | A - результат разбора, если CF=0 | | +| | C - 45h | bit7 - В строке обнаружены символы ? или * | | +| | B = 3 - Выделить имя файла | bit3 - В строке указано имя диска; | | +| | | bit2 - В строке указан путь к файлу; | | +| | | bit1 - В строке указано расширение файла; | | +| | | bit0 - В строке указано имя файла; | | +| | | буфер - имя файла "FILE.EXT",0 | | +| +--------------------------------------+------------------------------------------------+ | +| | **Подфункция 4 - Выделить расширение файла:** | | +| +--------------------------------------+------------------------------------------------+ | +| | Входные значения: | Выходные значения: | | +| | HL - указатель командной строки | A - код ошибки, если CF=1 | | +| | DE - буфер (макс. 4 байт) | A - результат разбора, если CF=0 | | +| | C - 45h | bit7 - В строке обнаружены символы ? или * | | +| | B = 4 - Выделить расширение файла | bit3 - В строке указано имя диска; | | +| | | bit2 - В строке указан путь к файлу; | | +| | | bit1 - В строке указано расширение файла; | | +| | | bit0 - В строке указано имя файла; | | +| | | буфер - расширение "TXT",0 или "C ",0 | | +| +--------------------------------------+------------------------------------------------+ | +| | **Подфункция 5 - Выделить имя диска, путь к файлу, имя файла и расширение файла:** | | +| +--------------------------------------+------------------------------------------------+ | +| | Входные значения: | Выходные значения: | | +| | HL - указатель командной строки | A - код ошибки, если CF=1 | | +| | DE - буфер (макс. 8 байт) | A - результат разбора, если CF=0 | | +| | DE+0 адрес буфера для имени диска | bit7 - В строке обнаружены символы ? или * | | +| | (макс. 13 байт) | bit3 - В строке указано имя диска; | | +| | DE+2 адрес буфера для директории | bit2 - В строке указан путь к файлу; | | +| | (макс. 256 байт) | bit1 - В строке указано расширение файла; | | +| | DE+3 адрес буфера для имени файла | bit0 - В строке указано имя файла; | | +| | (макс. 13 байт) | | | +| | DE+4 адрес буфера для расширения | | | +| | файла (макс. 4 байта) | | | +| | C - 45h | | | +| | B = 5 - Выделить имя диска, путь к | | | +| | файлу, имя файла и расширение файла | | | +| +--------------------------------------+------------------------------------------------+ | +| | **Подфункция 7 - Выделить параметр командной строки** | | +| +--------------------------------------+------------------------------------------------+ | +| | Входные значения: | Выходные значения: | | +| | HL - указатель командной строки | HL - указатель на следующий параметр командной | | +| | DE - буфер для выделяемого | строки | | +| | параметра | CF = 0 - конец строки не достигнут (есть | | +| | C - 45h | другие параметры) | | +| | B = 7 - Выделить параметр командной | CF = 1 - конец строки (в буфер перенесён | | +| | строки | последний параметр или ноль) | | +| +--------------------------------------+------------------------------------------------+ | +| | **Подфункция 8 - Преобразовать из 11 символьного формата в формат ДОС** | | +| +--------------------------------------+------------------------------------------------+ | +| | Входные значения: | Выходные значения: | | +| | C - 45h | A - код ошибки, если CF=1 | | +| | B = 8 - преобразовать из 11 | | | +| | символьного формата в формат ДОС | | | +| | HL - 11 символов имени файла | | | +| | DE - буфер для имени в формате ДОС | | | +| +--------------------------------------+------------------------------------------------+ | +| | **Подфункция 9 - Преобразовать из формата ДОС в 11 символьный формат** | | +| +--------------------------------------+------------------------------------------------+ | +| | Входные значения: | Выходные значения: | | +| | C - 45h | A - код ошибки, если CF=1 | | +| | B = 9 - преобразовать из формата | | | +| | ДОС в 11 символьный формат | | | +| | HL - имя файла в формате ДОС | | | +| | DE - буфер для 11 символов имени | | | +| | файла | | | +| +--------------------------------------+------------------------------------------------+ | +| | ++------------------------------------------------------------------------------------------------------------+ +| **Функции для работы с переменными** | ++------------------------------------------------------------------------------------------------------------+ +| **46h (70) ENVIRON (Системное окружение)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| B - номер подфункции | A - состояние, если CF=0 | +| C - 46h | A=0 - переменная обнаружена | +| B=0 **Получение системного | A=#FF - переменная не обнаружена | +| окружения** | DE - указывает на конец буфера | +| HL - буфер | A - код ошибки, если CF=1 | +| B=1 **Получить переменную | | +| окружения** | | +| HL - имя переменной | | +| DE - буфер для значения переменной | | +| B=2 **Установить/удалить переменную | | +| окружения** | | +| HL - имя переменной и значение, | | +| разделенные символом '=', | | +| (ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ) | | ++----------------------------------------------------------------------+-------------------------------------+ +| **47h (71) APPINFO (Получение информации приложения) -- функция глючная, | +| информацию берёт из CLP_Buffer страницы загрузки кода приложения** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| B - номер подфункции | A - код ошибки, если CF=1 | +| C - 47h | | +| HL - буфер данных | | +| B=0 - получение параметров | | +| командной строки | | +| B=1 - получение полного пути к | | +| каталогу программы | | +| B=2 - получение полного пути и | | +| имени файла программы | | ++----------------------------------------------------------------------+-------------------------------------+ +| **Функции работы с экраном** | ++----------------------------------------------------------------------+-------------------------------------+ +| **50h (80) SETVMOD (Выбор режима экрана) -- изменяет на обоих экранах** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| A - режим экрана | A - код ошибки, если CF=1 | +| 02h - текстовый 40x32x16 цветов | | +| 03h - текстовый 80x32x16 цветов | | +| 81h - графический 320x256x256 | | +| цветов | | +| 82h - графический 640x256x16 | | +| цветов | | +| B - страница активного экрана на | | +| выходе 0/1 | | +| C - 50h | | ++----------------------------------------------------------------------+-------------------------------------+ +| **51h (81) GETVMOD (Получить текущий режим экрана)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| C - 51h | A - код ошибки, если CF=1 | +| | A - текущий режим экрана, если CF=0 | +| | B - страница экрана 0/1 | ++----------------------------------------------------------------------+-------------------------------------+ +| **52h (82) LOCATE (Установить позицию курсора) [Сразу прыгает в биос]** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| D - строка курсора | нет | +| E - столбец курсора | | +| C - 52h | | ++----------------------------------------------------------------------+-------------------------------------+ +| **53h (83) CURSOR (Получить позицию курсора) [Сразу прыгает в биос]** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| C - 53h | D - строка курсора | +| | E - столбец курсора | ++----------------------------------------------------------------------+-------------------------------------+ +| **54h (84) SELPAGE (Выбрать активную страницу экрана)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| B - страница экрана 0/1 | A - код ошибки, если CF=1 | +| C - 54h | | ++----------------------------------------------------------------------+-------------------------------------+ +| **55h (85) SCROLL (Прокрутка окна)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| D - строка левого верхнего угла | нет | +| окна | | +| E - столбец левого верхнего угла | | +| окна | | +| H - высота окна | | +| L - ширина окна | | +| B = 1 - прокрутка вверх | | +| B = 2 - прокрутка вниз | | +| A = 0 - очищать строку | | +| C - 55h | | ++----------------------------------------------------------------------+-------------------------------------+ +| **56h (86) CLEAR (Очистка окна) [Сразу прыгает в биос]** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| D - строка левого верхнего угла | нет | +| окна | | +| E - столбец левого верхнего угла | | +| окна | | +| H - высота окна | | +| L - ширина окна | | +| B - атрибут заполнитель | | +| A - символ заполнитель | | +| C - 56h | | ++----------------------------------------------------------------------+-------------------------------------+ +| **57h (87) RDCHAR (Считать символ с экрана) почти [Сразу прыгает в биос] | +| лучше использовать WIN_GET_SYM** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| D - строка | A - символ | +| E - столбец | B - атрибут | +| C - 57h | | ++----------------------------------------------------------------------+-------------------------------------+ +| **58h (88) WRCHAR (Напечатать символ на экране)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| D - строка | нет | +| E - столбец | | +| A - символ | | +| B - атрибут | | +| C - 58h | | ++----------------------------------------------------------------------+-------------------------------------+ +| **59h (89) WINCOPY (Запомнить окно экрана)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| D - строка | нет | +| E - столбец левого верхнего угла | | +| окна | | +| H - высота окна | | +| L - ширина окна | | +| B - страница буфера для IX > | | +| #C000 | | +| IX - адрес буфера | | +| C - 59h | | ++----------------------------------------------------------------------+-------------------------------------+ +| **5Ah (90) WINREST (Восстановить окно экрана)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| D - строка | нет | +| E - столбец левого верхнего угла | | +| окна | | +| H - высота окна | | +| L - ширина окна | | +| B - страница буфера для IX > | | +| #C000 | | +| IX - адрес буфера | | +| C - 5Ah | | ++----------------------------------------------------------------------+-------------------------------------+ +| **5Bh (91) PUTCHAR (Напечатать символ в текущей позиции курсора)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| A - символ | нет | +| C - 5Bh | | ++----------------------------------------------------------------------+-------------------------------------+ +| **5Ch (92) PCHARS (Напечатать строку символов в текущей позиции курсора)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| HL - указатель на начало строки | HL - указатель на следующую строку | +| символов | символов | +| C - 5Ch | | ++----------------------------------------------------------------------+-------------------------------------+ +| **Функции для печати на принтере** | ++----------------------------------------------------------------------+-------------------------------------+ +| **5Fh (95) PRINT (Вывод символа на принтер без ожидания)** | ++----------------------------------------------------------------------+-------------------------------------+ +| Входные значения: | Выходные значения: | +| A - символ | B - символ | +| C - 5Fh | CF = 1 - принтер не готов | ++------------------------------------------------------------------------------------------------------------+ diff --git a/DSS/DSS_MACROSES.Z80 b/DSS/DSS_MACROSES.Z80 index 6a6a81f..772d2f6 100644 --- a/DSS/DSS_MACROSES.Z80 +++ b/DSS/DSS_MACROSES.Z80 @@ -2,16 +2,19 @@ ; : L - ᪨ ⠡ ; : IY - 砫 ; : HL, DE, IY. - MACRO LOGDRV_ENTRY_FIND tbl_addr + MACRO LOGDRV_ENTRY LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL EX DE,HL - LD IY,tbl_addr ADD IY,DE ENDM + MACRO LOGDRV_ENTRY_FIND tbl_addr + LD IY,tbl_addr + LOGDRV_ENTRY + ENDM ; ; diff --git a/DSS/FS/FAT.asm b/DSS/FS/FAT.asm index 9941a61..7bd8a5b 100644 --- a/DSS/FS/FAT.asm +++ b/DSS/FS/FAT.asm @@ -389,6 +389,10 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE) LD HL,#FFFF LD A,FAT_TYPE.x16 .set_vars: EXX + ; LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.FAT.HIDDEN) + ; LD (CORE_BUFFERS.FS_Buffer.PartitionStartSector),HL + ; LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.FAT.HIDDEN + 2) + ; LD (CORE_BUFFERS.FS_Buffer.PartitionStartSector + 2),HL ;!TODO ࠧ root-४ਨ ࠭ FS_Buffer? LD HL,0 LD (CORE_BUFFERS.FS_Buffer.END_CHAIN_CLUSTER_H),HL diff --git a/DSS/Structures.inc b/DSS/Structures.inc index b72f70b..c014242 100644 --- a/DSS/Structures.inc +++ b/DSS/Structures.inc @@ -112,6 +112,7 @@ .UPD_FSINFO: BYTE 0 .FREE_CLUSTERS_COUNT_L: WORD #FFFF .FREE_CLUSTERS_COUNT_H: WORD #FFFF +;.PartitionStartSector: DWORD #00000000 ; For directory cache .DirBlock BYTE #00 ; [ ] big dir. ४ਨ 㦥 ४਩ DIRPAGE ;.DirBlockDrive BYTE #00 diff --git a/DSS/drivers/media/ReScanDRV.ASM b/DSS/drivers/media/ReScanDRV.ASM index 2b433e2..6afa0cc 100644 --- a/DSS/drivers/media/ReScanDRV.ASM +++ b/DSS/drivers/media/ReScanDRV.ASM @@ -328,7 +328,11 @@ RAM_DRV: ;-----[] HARD_DRV: LD L,B - LOGDRV_ENTRY_FIND @DRIVES_DRIVER.OLD_TABLES.LOGDRV + ; + ;LOGDRV_ENTRY_FIND @DRIVES_DRIVER.OLD_TABLES.LOGDRV + LD IY,@DRIVES_DRIVER.OLD_TABLES.LOGDRV + CALL GET_LOGDRV_ENTRY + ; LD IX,DRIVES_DRIVER.LOGDRV LD DE,DRIVES_DRIVER.LOGDRV.TBL_Entry LD B,DSS_MAX_DRIVES_AMOUNT diff --git a/DSS/drivers/media/Shared.asm b/DSS/drivers/media/Shared.asm index 5a599ab..38a3907 100644 --- a/DSS/drivers/media/Shared.asm +++ b/DSS/drivers/media/Shared.asm @@ -62,7 +62,6 @@ ; ; INPUT: A - DRIVE ; B - SUBCOMMAND -; DE - MAGIC NUMBER (55AAh) ; SUBCOMMAND ;---------------------- ; 00 - GET DEVICE PARAMETERS @@ -181,6 +180,12 @@ MAKEDVC: LD C,A LD (HL),A RET +;------------------------------------------------- +GET_LOGDRV_ENTRY: + LOGDRV_ENTRY + RET +;------------------------------------------------- + ;------------------------------------------------- ; RST 18h. ᪮ ன diff --git a/DSS/drivers/media/ata_atapi-drv.asm b/DSS/drivers/media/ata_atapi-drv.asm index a5d35f9..adf42a1 100644 --- a/DSS/drivers/media/ata_atapi-drv.asm +++ b/DSS/drivers/media/ata_atapi-drv.asm @@ -110,7 +110,6 @@ ; ;Input: C = #08 ; B = Subcommand -; DE = #55AA Magic Number ; A = Drive ; ;Subcommands: #00 - Get Device Parameters @@ -343,9 +342,25 @@ SelectDrive: PUSH DE +GetMoreParams: PUSH IX + PUSH IY + LD L,A + LD IY,@DRIVES_DRIVER.LOGDRV + CALL @GET_LOGDRV_ENTRY + LD H,(IY + DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET + 3) + LD L,(IY + DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET + 2) + LD D,(IY + DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET + 1) + LD E,(IY + DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET + 0) + POP IY + POP IX + RET + + + ; 00 - GET DEVICE PARAMETERS ; 01 - READ TRACK ; 02 - TEST TRACK +; 03 - GET MORE DEVICE PARAMETERS ; 80 - SET DEVICE PARAMETERS ; 81 - WRITE TRACK ; 82 - FORMAT TRACK @@ -358,6 +373,8 @@ GenIOCTL: BIT 7,B JR Z,.error ;ReadTrack DEC B JR Z,TestTRK + DEC B + JR Z,GetMoreParams LD A,BIOS.Error.InvalidSubFunction SCF RET @@ -412,19 +429,21 @@ TestTRK: LD C,BIOS.DRV_VERIFY ; 32 - 4096 bytes ; 64 - 8192 bytes ; 128 - 16384 bytes -GetParams: EX DE,HL - LD BC,#55AA ;!FIXIT ᤥ 楤ன shared.asm ࠬ - AND A - SBC HL,BC +GetParams: ;EX DE,HL + ;LD BC,Dss.DRV.GenIOCTL.Enter + ;AND A + ;SBC HL,BC LD L,A - LD A,BIOS.Error.Failure - SCF - RET NZ + ;LD A,BIOS.Error.Failure + ;SCF + ;RET NZ ; PUSH IX PUSH IY ; - LOGDRV_ENTRY_FIND @DRIVES_DRIVER.LOGDRV + ;LOGDRV_ENTRY_FIND @DRIVES_DRIVER.LOGDRV + LD IY,@DRIVES_DRIVER.LOGDRV + CALL GET_LOGDRV_ENTRY ; LD A,(IY+DRIVES_DRIVER.LOGDRV.PHISICAL_DRV_NUMBER) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/... PUSH IY diff --git a/DSS/drivers/media/fdd-drv.asm b/DSS/drivers/media/fdd-drv.asm index da250b2..6c015d3 100644 --- a/DSS/drivers/media/fdd-drv.asm +++ b/DSS/drivers/media/fdd-drv.asm @@ -93,7 +93,6 @@ ; ;Input : C = 08h ; B - Subcommand -; DE = 55AAh Magic Number ; Subcommand ;---------------------- ; 00h - Get Device Parameters @@ -343,15 +342,15 @@ GenIOCTL: BIT 7,B ; D5 - "1" RESERVED ; D4 - DEVICE MASTER/SLAVE ; D1..D3 - "0" RESERVED (MAY BE OTHER) -.GetParams: EX DE,HL - LD BC,#55AA ;!FIXIT ᤥ 楤ன shared.asm ࠬ +.GetParams: ;EX DE,HL + ;LD BC,Dss.DRV.GenIOCTL.Enter AND #0F - SBC HL,BC - JR Z,.next + ;SBC HL,BC + ;JR Z,.next ; - LD A,BIOS.Error.Failure - SCF - RET + ;LD A,BIOS.Error.Failure + ;SCF + ;RET ; .next: PUSH AF PUSH IY diff --git a/DSS/drivers/media/ram_disk-drv.asm b/DSS/drivers/media/ram_disk-drv.asm index b66b04c..f74403c 100644 --- a/DSS/drivers/media/ram_disk-drv.asm +++ b/DSS/drivers/media/ram_disk-drv.asm @@ -118,7 +118,6 @@ ; ;Input : C = 08h ; B - Subcommand -; DE = 55AAh Magic Number ; Subcommand ;---------------------- ; 00h - Get Device Parameters @@ -462,14 +461,14 @@ GenIOCTL: BIT 7,B ; D5 - "1" RESERVED ; D6 - ADDRESSING MODE LBA/CHS ; D7 - "1" RESERVED -.RGETPRM: EX DE,HL - LD BC,#55AA ;!FIXIT ᤥ 楤ன shared.asm ࠬ - AND A - SBC HL,BC +.RGETPRM: ;EX DE,HL + ;LD BC,Dss.DRV.GenIOCTL.Enter + ;AND A + ;SBC HL,BC LD L,A - LD A,BIOS.Error.Failure - SCF - RET NZ + ;LD A,BIOS.Error.Failure + ;SCF + ;RET NZ ; EX AF,AF' LD A,L diff --git a/SHELL/Commands/INFO.ASM b/SHELL/Commands/INFO.ASM index b20b2f9..e4d82cd 100644 --- a/SHELL/Commands/INFO.ASM +++ b/SHELL/Commands/INFO.ASM @@ -97,7 +97,7 @@ cmd_info: CALL Get_Path CP "C" - "A" JR C,.ItIsFDD ; - LD DE,Dss.DRV.GenIOCTL.Enter + ;LD DE,Dss.DRV.GenIOCTL.Enter LD BC,Dss.DRV.GenIOCTL.GetParams RST ToDSS.DRV JR C,.noMedia diff --git a/Shared_Includes b/Shared_Includes index b9c54c9..e1233b2 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit b9c54c9a1e027b35fba71efa26378a555cfd75db +Subproject commit e1233b24a06f9be0c80349b47ab34cfceacc2486