;[Вызов функций DSS]-------------------- ToDSS EQU #10 .DRV EQU #18 ;--------------------------------------- ;---[Буфер под служебную строку DSS]---- ; Command_Line_parameters (CLP) ; Смещения относительно значения в IX ; при старте EXE из DSS. CLP_Buffer EQU 131 ; Полная длина буфера CLP_FM EQU -3 ; Файловый манипулятор, если exe-файл с первичным загрузчиком CLP_MemBlockID EQU -2 ; Идентификатор блока памяти CLP_ProgLevel EQU -1 ; Уровень текущей программы CLP_CLLength EQU 0 ; Длинна командной строки CLP_Parameters EQU 1 ; Параметры командной строки, заканчивается нулем (127 bytes) ;!FIXIT а если длина строки будет больше? ; (CLP_CLLength) + 3 ; начало полного пути до запускаемого приложения (вместе с именем EXE) ;--------------------------------------- FAT_ATTR: .ARCHIVE EQU #20 .DIRECTORY EQU #10 .VOLUME_ID EQU #08 .SYSTEM EQU #04 .HIDDEN EQU #02 .READ_ONLY EQU #01 .NoDIRnoVolID EQU .READ_ONLY + .HIDDEN + .SYSTEM + .ARCHIVE .NoVolID EQU .READ_ONLY + .HIDDEN + .SYSTEM + .DIRECTORY + .ARCHIVE .NoSYSnoVolID EQU .READ_ONLY + .HIDDEN + .DIRECTORY + .ARCHIVE ;------------[DSS Functions]------------ Dss: .Version EQU #00 .ChDisk EQU #01 .CurDisk EQU #02 .DskInfo EQU #03 .G_ENTRY EQU #04 ; EQU #05 ; EQU #06 ; EQU #07 ; вход: нет ; выход: A - номер последнего лог. диска в системе .RescanDrives EQU #08 .BootDSK EQU #09 ; ; File i/o .Create EQU #0A .Creat_N EQU #0B ; EQU #0C .ERASE EQU #0D .Delete EQU #0E .Move EQU #0F .Rename EQU #10 .Open EQU #11 .Open.RW EQU 0 .Open.R EQU 1 .Open.W EQU 2 .Close EQU #12 .Read EQU #13 .Write EQU #14 .Move_FP EQU #15 .Move_FP.FrStart EQU 0 .Move_FP.FrCurrent EQU 1 .Move_FP.FrEnd EQU 2 .Attrib EQU #16 .Get_D_T EQU #17 .Put_D_T EQU #18 .F_First EQU #19 .F_Next EQU #1A .MkDir EQU #1B .RmDir EQU #1C .ChDir EQU #1D .CurDir EQU #1E ; EQU #1F ; EQU #20 .SysTime EQU #21 .SetTime EQU #22 ; EQU #23 ; EQU #24 ; EQU #25 ; EQU #26 ; EQU #27 ; EQU #28 ; EQU #29 ; EQU #2A ; EQU #2B ; EQU #2C ; EQU #2D ; EQU #2E ; EQU #2F ; ; Keyboard .WaitKey EQU #30 .ScanKey EQU #31 .EchoKey EQU #32 .CTRLKey EQU #33 .EDIT EQU #34 .K_CLEAR EQU #35 .K_SETUP EQU #36 .TestKey EQU #37 ; ; Memory .SetWin EQU #38 .SetWin1 EQU #39 .SetWin2 EQU #3A .SetWin3 EQU #3B .INFOMEM EQU #3C .GetMem EQU #3D .FreeMem EQU #3E .SetMem EQU #3F ; ; Execution .Exec EQU #40 .Exit EQU #41 ;!TODO расписать что в регистре B .Wait EQU #42 .GSwitch EQU #43 .DosName EQU #44 .EX_Path EQU #45 .EX_Path.GET_ALL EQU 0 ; Разобрать строку .EX_Path.GET_DRIVE EQU 1 ; Выделить имя диска .EX_Path.GET_PATH EQU 2 ; Выделить директорию .EX_Path.GET_NAME EQU 3 ; Выделить имя файла .EX_Path.GET_TYPE EQU 4 ; Выделить расширение файла .EX_Path.GET_ALL_EX EQU 5 ; Выделить имя диска, путь к файлу, имя файла и расширение файла .EX_Path.RESR EQU 6 ; Зарезервировано .EX_Path.GSWITCH EQU 7 ; Выделить параметр командной строки .EX_Path.GETNAME EQU 8 ; Преобразовать из 11 символьного формата в формат ДОС .EX_Path.MASK EQU 9 ; Преобразовать из формата ДОС в 11 символьный формат .Environ EQU #46 .Environ.Init EQU #FF .Environ.Read EQU #0 .Environ.Get EQU #1 .Environ.Set EQU #2 .AppInfo EQU #47 ; EQU #48 ; EQU #49 ; EQU #4A ; EQU #4B ; EQU #4C ; EQU #4D ; EQU #4E ; EQU #4F ; ; Video .SetVMod EQU #50 .SetVMod.txt40x32 EQU 2 .SetVMod.txt80x32 EQU 3 .SetVMod.grf320x256 EQU #81 .SetVMod.grf6400x256 EQU #82 .GetVMod EQU #51 .Locate EQU #52 .Cursor EQU #53 .SelPage EQU #54 .Scroll EQU #55 .Clear EQU #56 .RdChar EQU #57 .WrChar EQU #58 .WinCopy EQU #59 .WinRest EQU #5A .PutChar EQU #5B .PChars EQU #5C ; ; Printer .RES_PRN EQU #5D .CTRLPRN EQU #5E .Print EQU #5F ;--------------------------------------- .DRV.Init EQU #00 .DRV.Open EQU #01 .DRV.Close EQU #02 .DRV.MediaCheck EQU #03 .DRV.GetBPB EQU #04 .DRV.Read EQU #05 .DRV.Write EQU #06 .DRV.Removable EQU #07 .DRV.GenIOCTL EQU #08 ;.DRV.Reserved EQU #09 .DRV.LongRead EQU #10 .DRV.LongWrite EQU #11 ; .DRV.RescanDRV EQU #FF ;--------------------------------------- ; ;------------[Video modes]-------------- DssVmod: .txt40 EQU #02 ; (02) - текстовый 40x32x16 цветов .txt80 EQU #03 ; (03) - текстовый 80x32x16 цветов .gfx320 EQU #81 ; (129) - графический 320x256x256 цветов .gfx640 EQU #82 ; (130) - графический 640x256x16 цветов ;--------------------------------------- ; ; ;------------[Error codes]-------------- MODULE DSS_Error sys: .NO_ERROR EQU #00 ; 00 - нет ошибок .INVALID_FUNCTION EQU #01 ; 01 - неверный номер функции .INVALID_DRIVE EQU #02 ; 02 - неправильный номер устройства .FILE_NOT_FOUND EQU #03 ; 03 - файл не обнаружен .PATH_NOT_FOUND EQU #04 ; 04 - неверный путь .INVALID_HANDLE EQU #05 ; 05 - несуществующий файловый манипулятор .NO_HANDLES EQU #06 ; 06 - нет свободного файлового манипулятора .FILE_EXISTS EQU #07 ; 07 - файл существует .READONLY EQU #08 ; 08 - файл только для чтения .ROOT_OVERFLOW EQU #09 ; 09 - переполнение ROOT (корневого каталога) .DISK_FULL EQU #0A ; 10 - нет свободного места на диске .DIR_NOT_EMPTY EQU #0B ; 11 - каталог не пуст .CURRENT_DIR EQU #0C ; 12 - неудачная попытка удалить текущий каталог .UNKNOWN_FORMAT EQU #0D ; 13 - неизвестный формат .INVALID_ACCESS EQU #0E ; 14 - невозможная операция .DIR_EXISTS EQU #0F ; 15 - каталог уже есть .INVALID_NAME EQU #10 ; 16 - неверное имя .INVALID_EXE EQU #11 ; 17 - неправильный EXE-файл .UNKNOWN_EXE EQU #12 ; 18 - не поддерживаемая версия EXE-файла .ACCESS_DENIED EQU #13 ; 19 - ресурс не доступен .NOT_READY EQU #14 ; 20 - нет готовности .SEEK_ERROR EQU #15 ; 21 - ошибка позиционирования .SECTOR_NOT_FOUND EQU #16 ; 22 - сектор не найден .CRC_ERROR EQU #17 ; 23 - ошибка CRC .WRITE_PROTECT EQU #18 ; 24 - защита записи .READ_ERROR EQU #19 ; 25 - ошибка чтения .WRITE_ERROR EQU #1A ; 26 - ошибка записи ;.GENERAL_FAILURE EQU #1B ; 27 - общая ошибка .DRIVE_FAILURE EQU #1B ; 27 - сбой диска ;.RESERVED_28 EQU #1C ; 28 - зарезервирован ;.RESERVED_29 EQU #1D ; 29 - зарезервирован .NOT_ENOUGH_MEMORY EQU #1E ; 30 - недостаточно памяти .INVALID_MEMORY_HND EQU #1F ; 31 - несуществующий блок памяти ;.RESERVED_32 EQU #20 ; 32 - зарезервировано .ENV_ITEM_OVERFLOW EQU #21 ; 33 - превышен максимальный размер переменной ;.RESERVED_34 EQU #22 ; 34 - зарезервировано .TOO_MANY_FILES_IN_DIR EQU #23 ; 35 - слишком много файлов в директории .TOO_DEEP_DIR_DEPTH EQU #24 ; 36 - слишком большая вложенность каталогов или количество папок > 1023 .USER_ABORT EQU #25 ; 37 - операция прервана пользователем .COMMON_ERROR EQU #26 ; 38 - общая ошибка .UNEXPECTED_APP_TRMN EQU #27 ; 39 - unexpected application termination / неожиданное завершение приложения ;.RESERVED_40 EQU #28 ; 40 - зарезервировано ;.RESERVED_41 EQU #29 ; 41 - зарезервировано ;.RESERVED_42 EQU #2A ; 42 - зарезервировано ;.RESERVED_43 EQU #2B ; 43 - зарезервировано ;.RESERVED_44 EQU #2C ; 44 - зарезервировано ;.RESERVED_45 EQU #2D ; 45 - зарезервировано ;.RESERVED_46 EQU #2E ; 46 - зарезервировано ;.RESERVED_47 EQU #2F ; 47 - зарезервировано .INVALID_VIDEO_MODE EQU #30 ; 48 - неправильный видеорежим ; drv: .NO_ERROR EQU #00 ; 00 - NO ERRORS .INVALID_COMMAND EQU #01 ; 01 - BAD COMMAND .INVALID_DRIVE EQU #02 ; 02 - BAD DRIVE NUMBER .UNKNOWN_FORMAT EQU #03 ; 03 - UNKNOW FORMAT .NOT_READY EQU #04 ; 04 - NOT READY .SEEK_ERROR EQU #05 ; 05 - SEEK ERROR .SECTOR_NOT_FOUND EQU #06 ; 06 - SECTOR NOT FOUND .CRC_ERROR EQU #07 ; 07 - CRC ERROR .WRITE_PROTECT EQU #08 ; 08 - WRITE PROTECT .READ_ERROR EQU #09 ; 09 - READ ERROR .WRITE_ERROR EQU #0A ; 10 - WRITE ERROR .GENERAL_FAILURE EQU #0B ; 11 - FAILURE .DEVICE_BUSY EQU #0C ; 12 - BUSY (DEVICE OPENED) ;.RESERVED EQU #0D ; 13 - RESERVED ; mouse: .NO_ERROR EQU #00 ; 0 - NO ERROR .INVALID_COMMAND EQU #01 ; 1 - COMMAND NOT PRESENT .DEVICE_ABSENT EQU #02 ; 2 - DEVICE ABSENT .CURSOR_ON EQU #03 ; 3 - CURSOR ON (already) .CURSOR_OFF EQU #04 ; 4 - CURSOR OFF (already) .CURSOR_TOO_BIG EQU #05 ; 5 - CURSOR IMAGE VERY BIG ENDMODULE /* ; DB #00 ; DB "Bad command or file name",0 01: DB "Invalid function",0 02: DB "Invalid drive number",0 03: DB "File not found",0 04: DB "Path not found",0 ; неверный путь 05: DB "Invalid handle",0 06: DB "Extended error 6",0 ; нет свободного файлового манипулятора 07: DB "File exist",0 08: DB "File read only",0 09: DB "Root overflow",0 10: DB "No free space",0 11: DB "Directory not empty",0 12: DB "Can't delete current directory",0 13: DB "Invalid media",0 14: DB "Unknown operation",0 ; невозможная операция 15: DB "Directory exist",0 16: DB "Invalid filename",0 17: DB "Invalid EXE-file",0 18: DB "Not supported EXE-file",0 19: DB "Access denied",0 20: DB "Not ready",0 21: DB "Seek error",0 22: DB "Sector not found",0 23: DB "CRC error",0 24: DB "Write protect",0 25: DB "Read error",0 26: DB "Write error",0 27: DB "Drive failure",0 ; общая ошибка 28: DB "Extended error 28",0 29: DB "Extended error 29",0 30: DB "No free memory",0 31: DB "Invalid memory block",0 32: DB "Extended error 32",0 33: DB "Extended error 33",0 34: DB "Extended error 34",0 ; DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 */ ;--------------------------------------- ; ; ;---------------[Files]----------------- FileMode: .RW EQU 00 .Read EQU 01 .Write EQU 02 ; FileAttrib: .Normal EQU 00 ; Normal file, no attributes .RDOnly EQU 01 ; Read only attribute .Hidden EQU 02 ; Hidden file .System EQU 04 ; System file .Label EQU 08 ; Volume label .Direc EQU #10 ; Directory .Arch EQU #20 ; Archive ;--------------------------------------- ; ; ;---------[control characters]---------- _cc: .cr EQU #0D ;возврат коретки .lf EQU #0A ;новая строка .tab EQU 9 ;символ табуляции ;--------------------------------------- ; ; Приложение Б. Таблица позиционных кодов ; key ASCII/SCAN key ASCII/SCAN ; ` 000h 000h V 056h 02Dh ; Esc 01Bh 001h B 042h 02Eh ; 1 031h 002h N 04Eh 02Fh ; 2 032h 003h M 04Dh 030h ; 3 033h 004h , 02Ch 031h ; 4 034h 005h . 02Eh 032h ; 5 035h 006h / 02Fh 033h ; 6 036h 007h RShift ---- 034h ; 7 037h 008h \ 05Ch 035h ; 8 038h 009h LCtrl ---- 036h ; 9 039h 00Ah LAlt ---- 037h ; 0 030h 00Bh Space 020h 038h ; - 02Dh 00Ch RAlt ---- 039h ; = 03Dh 00Dh RCtrl ---- 03Ah ; BackSpace 008h 00Eh F1 000h 03Bh ; Tab 009h 00Fh F2 000h 03Ch ; Q 051h 010h F3 000h 03Dh ; W 057h 011h F4 000h 03Eh ; E 045h 012h F5 000h 03Fh ; R 052h 013h F6 000h 040h ; T 054h 014h F7 000h 041h ; Y 059h 015h F8 000h 042h ; U 055h 016h F9 000h 043h ; I 049h 017h F10 000h 044h ; O 04Fh 018h F11 000h 045h ; P 050h 019h F12 000h 046h ; [ 05Bh 01Ah PrScrn ---- 047h ; ] 05Dh 01Bh ScrlLock 000h 048h ; CapsLock 000h 01Ch NumLock 000h 049h ; A 041h 01Dh / 02Fh 04Ah ; S 053h 01Eh * 02Ah 04Bh ; D 044h 01Fh - 02Dh 04Ch ; F 046h 020h + 02Bh 04Dh ; G 047h 021h enter 00Dh 04Eh ; H 048h 022h Del . 000h 04Fh ; J 04Ah 023h Ins 0 000h 050h ; K 04Bh 024h End 1 000h 051h ; L 04Ch 025h Down 2 000h 052h ; ; 03Bh 026h PgDw 3 000h 053h ; ' 027h 027h Left 4 000h 054h ; Enter 00Dh 028h 5 000h 055h ; LShift ---- 029h Right 6 000h 056h ; Z 05Ah 02Ah Home 7 000h 057h ; X 058h 02Bh Up 8 000h 058h ; C 043h 02Ch PgUp 9 000h 059h ; Приложение В. Байт атрибутов текстового экрана ; бит 7 - Признак мерцания символа ; биты 6,5,4 - Цвет фона символа 8 цветов (0...7) RGB ; биты 3,2,1,0 - Цвет символа 16 цветов (0...15) IRGB ; Цвета для фона и для символа: ; 0 0h 0000b - Чёрный ; 1 1h 0001b - Синий ; 2 2h 0010b - Зелёный ; 3 3h 0011b - Голубой (циан) ; 4 4h 0100b - Красный ; 5 5h 0101b - Фиолетовый ; 6 6h 0110b - Коричневый ; 7 7h 0111b - Белый ; Только для символа: ; 8 8h 1000b - Серый ; 9 9h 1001b - Ярко-синий ; 10 Ah 1010b - Ярко-зелёный ; 11 Bh 1011b - Ярко-голубой ; 12 Ch 1100b - Ярко-красный ; 13 Dh 1101b - Ярко-фиолетовый ; 14 Eh 1110b - Жёлтый ; 15 Fh 1111b - Ярко-белый ;