;[Вызов функций DSS]-------------------- ToDSS EQU #10 .DRV EQU #18 .Mouse EQU #30 ;--------------------------------------- ;---[Буфер под служебную строку 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) ;--------------------------------------- ;----------------------------------------------------------; ;!TODO не только FAT FAT_ATTR: .ARCHIVE EQU %0010'0000 ; bit 5 .DIRECTORY EQU %0001'0000 ; bit 4 .VOLUME_ID EQU %0000'1000 ; bit 3 .SYSTEM EQU %0000'0100 ; bit 2 .HIDDEN EQU %0000'0010 ; bit 1 .READ_ONLY EQU %0000'0001 ; bit 0 .NoDIRnoVolID EQU .READ_ONLY + .HIDDEN + .ARCHIVE + .SYSTEM .NoVolID EQU .READ_ONLY + .HIDDEN + .DIRECTORY + .ARCHIVE + .SYSTEM .NoSYSnoVolID EQU .READ_ONLY + .HIDDEN + .DIRECTORY + .ARCHIVE .HiddenSysDir EQU + .HIDDEN + .DIRECTORY + + .SYSTEM ; .LFS_Entry EQU .READ_ONLY + .HIDDEN + .SYSTEM + .VOLUME_ID .LFS_Entry_Mask EQU %0011'1111 CDFS_ATTR: .NOT_LAST_EXTENT EQU %1000'0000 ; bit 7 .RESERVED_6 EQU %0100'0000 ; bit 6 .RESERVED_5 EQU %0010'0000 ; bit 5 .EXTENDED_PERMISSIONS EQU %0001'0000 ; bit 4 .EXTENDED_FORMAT EQU %0000'1000 ; bit 3 .ASSOCIATED EQU %0000'0100 ; bit 2 .DIRECTORY EQU %0000'0010 ; bit 1 .HIDDEN EQU %0000'0001 ; bit 0 ;----------------------------------------------------------------------; ;------------[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 .BootDSK.Get EQU #00*256 + .BootDSK .BootDSK.Set EQU #01*256 + .BootDSK ; ; File i/o .Create EQU #0A .Creat_N EQU #0B ; EQU #0C ;.ERASE EQU #0D .Delete EQU #0E ;.Move EQU #0F ;!TODO .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 #00*256 + .Move_FP .Move_FP.FrCurrent EQU #01*256 + .Move_FP .Move_FP.FrEnd EQU #02*256 + .Move_FP .Attrib EQU #16 .Get_D_T EQU #17 .Put_D_T EQU #18 .F_First EQU #19 .F_First.FATname EQU 0*256 + .F_First .F_First.DOSname EQU 1*256 + .F_First ; from FAT ; .NAME: BLOCK 8 ;+ #00 +00 NAME ; .EXT: BLOCK 3 ;+ #08 +08 EXT ; search attribute BYTE ;+ #0B +11 ; .RESERVED_NT: BYTE ;+ #0C +12 RESERVED ; .RESERVED_FAT32: BYTE ;+ #0D +13 RESERVED ; .CREATE_TIME_FAT32: WORD ;+ #0E +14 RESERVED ; .CREATE_DATE_FAT32: WORD ;+ #10 +16 RESERVED ; .RESERVED_FAT32_1: WORD ;+ #12 +18 RESERVED ; .FIRST_CLUSTER_H: WORD ;+ #14 +20 START CLUSTER high ; .TIME: WORD ;+ #16 +22 TIME ; .DATE: WORD ;+ #18 +24 DATE ; .FIRST_CLUSTER_L: WORD ;+ #1A +26 START CLUSTER low ; .F_SIZE: DWORD ;+ #1C +28 SIZE FILE ; .ATTRIBUT: BYTE ;+ #20 +32 ATTRIBUT ; file name ;+ #21 +33 name FAT or DOS (with zero end of str) 11 or 2..13 bytes ; последний байт ;+ #2D +45 FAT name or max + #2E +46 for DOS name .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 .K_SETUP.SetLayout EQU 0*256 + .K_SETUP .K_SETUP.GetSoundVars EQU 1*256 + .K_SETUP .K_SETUP.SetSoundVars EQU 2*256 + .K_SETUP .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 .Exec.Here EQU 1*256 + .Exec .Exit EQU #41 .Get_Err EQU #42 ; .Wait .GSwitch EQU #43 .DosName EQU #44 .EX_Path EQU #45 .EX_Path.GET_ALL EQU #00*256 + .EX_Path ; Разобрать строку .EX_Path.GET_DRIVE EQU #01*256 + .EX_Path ; Выделить имя диска .EX_Path.GET_PATH EQU #02*256 + .EX_Path ; Выделить директорию .EX_Path.GET_NAME EQU #03*256 + .EX_Path ; Выделить имя файла .EX_Path.GET_TYPE EQU #04*256 + .EX_Path ; Выделить расширение файла .EX_Path.GET_ALL_EX EQU #05*256 + .EX_Path ; Выделить имя диска, путь к файлу, имя файла и расширение файла .EX_Path.RESR EQU #06*256 + .EX_Path ; Зарезервировано .EX_Path.GSWITCH EQU #07*256 + .EX_Path ; Выделить параметр командной строки .EX_Path.GETNAME EQU #08*256 + .EX_Path ; Преобразовать из 11 символьного формата в формат ДОС .EX_Path.MASK EQU #09*256 + .EX_Path ; Преобразовать из формата ДОС в 11 символьный формат .Environ EQU #46 .Environ.Init EQU 255*256 + .Environ .Environ.Read EQU #00*256 + .Environ .Environ.Get EQU #01*256 + .Environ .Environ.Set EQU #02*256 + .Environ .AppInfo EQU #47 .AppInfo.CMD_Param EQU #00*256 + .AppInfo .AppInfo.EXE_HomeDir EQU #01*256 + .AppInfo .AppInfo.EXE_FullPath EQU #02*256 + .AppInfo ; EQU #48 ; EQU #49 ; EQU #4A ; EQU #4B ; EQU #4C ; EQU #4D ; EQU #4E ; EQU #4F ; ; Video .SetVMod EQU #50 .SetVMod.Screen_0 EQU 0*256+.SetVMod .SetVMod.Screen_1 EQU 1*256+.SetVMod .SetVMod.txt40x32 EQU 2 ; текстовый 40x32x16 цветов .SetVMod.txt80x32 EQU 3 ; текстовый 80x32x16 цветов .SetVMod.grf320x256 EQU #81 ; графический 320x256x256 цветов .SetVMod.grf640x256 EQU #82 ; графический 640x256x16 цветов .GetVMod EQU #51 .Locate EQU #52 .Cursor EQU #53 .SelPage EQU #54 .Scroll EQU #55 .Scroll.Up EQU 256*1 + .Scroll .Scroll.Down EQU 256*2 + .Scroll .Clear EQU #56 .RdChar EQU #57 .WrChar EQU #58 .WinCopy EQU #59 .WinRest EQU #5A .PutChar EQU #5B .PChars EQU #5C .Lib_Sub EQU #5D ;[ ] 11/02/2024 - Функция с пополняемыми подфункциями))) .Lib_Sub.RestoreFont EQU #01*256 + .Lib_Sub ; 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.GenIOCTL.GetParams EQU #00*256 + .DRV.GenIOCTL ; Get Device Parameters .DRV.GenIOCTL.ReadTrack EQU #01*256 + .DRV.GenIOCTL ; Read track .DRV.GenIOCTL.TestTRK EQU #02*256 + .DRV.GenIOCTL ; Test track .DRV.GenIOCTL.SetParams EQU #80*256 + .DRV.GenIOCTL ; Set Device Parameters .DRV.GenIOCTL.WriteTRK EQU #81*256 + .DRV.GenIOCTL ; Write track .DRV.GenIOCTL.FormatTRK EQU #82*256 + .DRV.GenIOCTL ; Format track .DRV.GenIOCTL.Enter EQU #55AA ; for DE ;.DRV.Reserved EQU #09 .DRV.LongRead EQU #10 .DRV.LongWrite EQU #11 ; .DRV.RescanDRV EQU #FF ;----------------------------------------------------------------------; ;----------------------------------------------------------------------; .Mouse.Init EQU #00 .Mouse.ShowCursor EQU #01 .Mouse.HideCursor EQU #02 .Mouse.ReadState EQU #03 .Mouse.SetXY EQU #04 ;.Mouse.RESERVED EQU #05 ;.Mouse.RESERVED EQU #06 .Mouse.SetBoundsY EQU #07 .Mouse.SetBoundsX EQU #08 .Mouse.SetCursorImage EQU #09 .Mouse.SetCursorChar EQU #0A .Mouse.GetCursorImage EQU #0B ;.Mouse.RESERVED EQU #0C ;.Mouse.RESERVED EQU #0D .Mouse.GetSensitive EQU #0E .Mouse.SetSensitive EQU #0F .Mouse.GetPackets EQU #80 ; Interrupt routine .Mouse.SetVideoMode EQU #81 ;.Mouse.RESERVED EQU #82 .Mouse.RefreshCursor EQU #83 ;----------------------------------------------------------------------; ; ;------------[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 ;символ табуляции ;--------------------------------------- ; ; STRUCT BUFFER_FIND ; From FAT .NAME: TEXT 8,{". "," "} ; DIR_Name #00 +00 NAME .EXT: TEXT 3,{" "," "} ; --//--//; #08 +08 EXT .ATTRIBUT: BYTE #10 ; DIR_Attr; #0B +11 ATTRIBUT .RESERVED_NT: BYTE #00 ; DIR_NTRes; #0C +12 RESERVED .RESERVED_FAT32: BYTE #00 ; DIR_CrtTimeHundth #0D +13 Десятые доли секунды создания файла (0-1.99) .CREATE_TIME_FAT32: WORD #0000 ; DIR_CrtTime #0E +14 Время создания файла .CREATE_DATE_FAT32: WORD #0000 ; DIR_CrtDate #10 +16 Дата создания файла .LAST_ACCESS_DATE_FAT32: WORD #0000 ; DIR_LstAccDate #12 +18 Дата последнего доступа (r/w) .FIRST_CLUSTER_H: WORD #0000 ; DIR_FstClusHI #14 +20 START CLUSTER high ;!TODO fat32 .TIME: WORD #0000 ; DIR_WrtTime #16 +22 Time of last write. .DATE: WORD #0000 ; DIR_WrtDate #18 +24 Date of last write. .FIRST_CLUSTER_L: WORD #0000 ; DIR_FstClusLO #1A +26 START CLUSTER low .F_SIZE: DWORD #00000000 ; DIR_FileSize #1C +28 SIZE FILE ; From DSS .REC_Attr: BYTE #00 ; DIR_Attr; #20 +32 ATTRIBUT .REC_Name BYTE #00 ; #21 +33 File name (FAT or DOS or May be LFN) ENDS ; ; STRUCT DSS_FCB_MAIN ; File Control Block .NAME: BLOCK 8," " ;+ #00 +00. NAME .EXT: BLOCK 3," " ;+ #08 +08. EXT .SEARCH_ATTRIBUT BYTE FAT_ATTR.DIRECTORY ;+ #0B +11. .RESERVED_NT: BYTE 0 ;+ #0C +12. RESERVED .RESERVED_FAT32: BYTE 0 ;+ #0D +13. RESERVED .CREATE_TIME_FAT32: WORD 0 ;+ #0E +14. RESERVED .CREATE_DATE_FAT32: WORD 0 ;+ #10 +16. RESERVED .RESERVED_FAT32_1: WORD 0 ;+ #12 +18. RESERVED .FIRST_CLUSTER_H: WORD 0 ;+ #14 +20. START CLUSTER high .TIME: WORD 0 ;+ #16 +22. TIME .DATE: WORD 0 ;+ #18 +24. DATE .FIRST_CLUSTER_L: WORD 0 ;+ #1A +26. START CLUSTER low .F_SIZE: DWORD 0 ;+ #1C +28. SIZE FILE .ATTRIBUT: BYTE FAT_ATTR.DIRECTORY ;+ #20 +32. ATTRIBUT ENDS ;+ #21 +33. ; STRUCT DSS_FCB_FAT_NAME .MAIN DSS_FCB_MAIN .FULL_FILE_NAME BLOCK 11," " ;+ #21 +33. 11 symbols fat name ENDS ;+ #2B +43. STRUCT DSS_FCB_DOS_NAME .MAIN DSS_FCB_MAIN .FULL_FILE_NAME BLOCK 13," " ;+ #21 +33. 12 symbols fat name + zero byte ENDS ;+ #2E +46. for DOS name ; !TODO STRUCT DSS_EFCB ; Extended File Control Block ; LFN ; Many files in dir ; ... ENDS ; Приложение Б. Таблица позиционных кодов ; key ASCII/SCAN key ASCII/SCAN ; ` #00 #00 V #56 #2D ; Esc #1B #01 B #42 #2E ; 1 #31 #02 N #4E #2F ; 2 #32 #03 M #4D #30 ; 3 #33 #04 , #2C #31 ; 4 #34 #05 . #2E #32 ; 5 #35 #06 / #2F #33 ; 6 #36 #07 RShift --- #34 ; 7 #37 #08 \ #5C #35 ; 8 #38 #09 LCtrl --- #36 ; 9 #39 #0A LAlt --- #37 ; 0 #30 #0B Space #20 #38 ; - #2D #0C RAlt --- #39 ; = #3D #0D RCtrl --- #3A ; BackSpace #08 #0E F1 #00 #3B ; Tab #09 #0F F2 #00 #3C ; Q #51 #10 F3 #00 #3D ; W #57 #11 F4 #00 #3E ; E #45 #12 F5 #00 #3F ; R #52 #13 F6 #00 #40 ; T #54 #14 F7 #00 #41 ; Y #59 #15 F8 #00 #42 ; U #55 #16 F9 #00 #43 ; I #49 #17 F10 #00 #44 ; O #4F #18 F11 #00 #45 ; P #50 #19 F12 #00 #46 ; [ #5B #1A PrScrn --- #47 ; ] #5D #1B ScrlLock #00 #48 ; CapsLock #00 #1C NumLock #00 #49 ; A #41 #1D / #2F #4A ; S #53 #1E * #2A #4B ; D #44 #1F - #2D #4C ; F #46 #20 + #2B #4D ; G #47 #21 enter #0D #4E ; H #48 #22 Del . #00 #4F ; J #4A #23 Ins 0 #00 #50 ; K #4B #24 End 1 #00 #51 ; L #4C #25 Down 2 #00 #52 ; ; #3B #26 PgDw 3 #00 #53 ; ' #27 #27 Left 4 #00 #54 ; Enter #0D #28 5 #00 #55 ; LShift --- #29 Right 6 #00 #56 ; Z #5A #2A Home 7 #00 #57 ; X #58 #2B Up 8 #00 #58 ; C #43 #2C PgUp 9 #00 #59 ; Приложение В. Байт атрибутов текстового экрана ; бит 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 - Ярко-белый ;