Compare commits

..

2 Commits

Author SHA1 Message Date
Tolik Trek
d2ba40c462 docs 2026-05-15 06:18:47 +10:00
Tolik Trek
8a927c6bfb ... 2026-05-15 05:31:41 +10:00
3 changed files with 2121 additions and 1 deletions

1435
Docs/BIOS functions.asm Normal file

File diff suppressed because it is too large Load Diff

685
Docs/DSS_1.71_Functions.asm Normal file
View File

@ -0,0 +1,685 @@
;███████████████████████████████████████████████████████████████████████████████████████████████████████
; Системные вызовы DSS (Disk SubSystem) v1.71
;███████████████████████████████████████████████████████████████████████████████████████████████████████
; Вызов функций DSS выполняется командой RST 10h. Номер функции загружается
; в регистр C,параметры — в остальные регистры согласно описанию.
; Для удобства определена константа:
; ToDSS = #10
;
; Соглашение о флагах:
; CF = 0 (NC) — успешное завершение, в регистрах возвращается результат
; CF = 1 — ошибка, в регистре A код ошибки (см. таблицу ошибок DSS)
; Многие функции могут портить альтернативные регистры и IX,IY, если
; не оговорено иное. Стек должен находиться в безопасной области.
;███████████████████████████████████████████████████████████████████████████████████████████████████████
; 1. Функции идентификации системы
;███████████████████████████████████████████████████████████████████████████████████████████████████████
;-------------------------------------------------------------------------------------------------------
DSS_Version: ; Версия DSS
LD C,Dss.Version ; #00
RST ToDSS ; D - номер версии
; E - модификация
; BC - номер сборки
;███████████████████████████████████████████████████████████████████████████████████████████████████████
; 2. Функции для работы с диском
;███████████████████████████████████████████████████████████████████████████████████████████████████████
;-------------------------------------------------------------------------------------------------------
DSS_ChDisk: ; Смена текущего диска
LD A,disk_num ; номер диска (0-A:, 1-B:, ...)
LD C,Dss.ChDisk ; #01
RST ToDSS ; CF=0: A - максимальный номер диска в системе
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_CurDisk: ; Номер текущего диска
LD C,Dss.CurDisk ; #02
RST ToDSS ; CF=0: A - текущий номер диска,
; C - максимальный номер диска
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_DskInfo: ; Информация о диске
LD A,disk_num ; номер диска (0-A:, 1-B:, ..., #FF - текущий)
; если A bit7=1 и A != #FF:
; HL - буфер 256 байт для расширенных данных
; (формат: длина поля, данные, ...)
; B = 0 - не подсчитывать свободные кластеры
LD C,Dss.DskInfo ; #03
RST ToDSS ; CF=0: A - размер кластера в секторах
; HL':HL - общее количество кластеров
; DE':DE - количество свободных кластеров
; BC - размер сектора в байтах
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_G_Entry: ; Зарезервированная функция
LD C,#04 ; #04
RST ToDSS ; не используется
;-------------------------------------------------------------------------------------------------------
DSS_RescanDrives: ; Пересканировать диски и вернуть последний логический
LD C,Dss.RescanDrives ; #08
RST ToDSS ; A - номер последнего логического диска
;-------------------------------------------------------------------------------------------------------
DSS_BootDSK: ; Номер системного диска (подфункции в B)
; --- Получить системный диск ---
LD BC,Dss.BootDSK.Get ; B=0, C=#09
RST ToDSS ; CF=0: A - номер системного диска (0-A:, ...)
; CF=1: A - код ошибки
; --- Установить системный диск ---
LD BC,Dss.BootDSK.Set ; B=1, C=#09
LD A,disk_num ; номер системного диска
RST ToDSS ; CF=0: успешно
; CF=1: A - код ошибки
;███████████████████████████████████████████████████████████████████████████████████████████████████████
; 3. Функции для работы с файлами
;███████████████████████████████████████████████████████████████████████████████████████████████████████
;-------------------------------------------------------------------------------------------------------
DSS_Create: ; Создание файла (если существует, перезаписывается)
LD HL,filespec ; указатель на файловую спецификацию (строка с 0)
LD A,file_attr ; атрибут файла
LD C,Dss.Create ; #0A
RST ToDSS ; CF=0: A - файловый манипулятор
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_Creat_N: ; Создание нового файла (если существует, ошибка)
LD HL,filespec ; указатель на файловую спецификацию
LD A,file_attr ; атрибут файла
LD C,Dss.Creat_N ; #0B
RST ToDSS ; CF=0: A - файловый манипулятор
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_Delete: ; Удаление файла
LD HL,filespec ; указатель на файловую спецификацию
LD C,Dss.Delete ; #0E
RST ToDSS ; CF=0: успешно
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_Rename: ; Переименование файла
LD HL,old_filespec ; указатель на старое имя
LD DE,new_filespec ; указатель на новое имя
LD C,Dss.Rename ; #10
RST ToDSS ; CF=0: успешно
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_Open: ; Открытие файла
LD HL,filespec ; указатель на файловую спецификацию
LD A,open_mode ; режим доступа: 0 = чтение/запись,
; 1 = чтение,
; 2 = запись
LD C,Dss.Open ; #11
RST ToDSS ; CF=0: A - файловый манипулятор
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_Close: ; Закрытие файла
LD A,file_handle ; файловый манипулятор
LD C,Dss.Close ; #12
RST ToDSS ; CF=0: успешно
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_Read: ; Чтение из файла
LD A,file_handle ; файловый манипулятор
LD HL,buffer ; адрес буфера в памяти
LD DE,bytes_to_read ; количество читаемых байт
LD C,Dss.Read ; #13
RST ToDSS ; CF=0: A - код завершения:
; A=0 - прочитаны все запрошенные байты
; A=#FF - прочитано меньше (или конец файла)
; DE - реальное количество прочитанных байт
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_Write: ; Запись в файл
LD A,file_handle ; файловый манипулятор
LD HL,buffer ; адрес данных в памяти
LD DE,bytes_to_write ; количество записываемых байт
LD C,Dss.Write ; #14
RST ToDSS ; DE - реальное количество записанных байт
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_Move_FP: ; Перемещение указателя в файле
LD A,file_handle ; файловый манипулятор
LD HL,offs_low ; смещение (младшая часть)
LD IX,offs_high ; смещение (старшая часть)
; (полное смещение = HL:IX)
LD B,move_method ; способ перемещения:
; B=0 - от начала файла
; B=1 - от текущей позиции
; B=2 - от конца файла
LD C,Dss.Move_FP ; #15
RST ToDSS ; CF=0: HL:IX - новое значение указателя
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_Attrib: ; Получение/изменение атрибутов файла
; -- Получить атрибут --;
LD BC,Dss.Attrib.Get ; B=0, C=#16
LD HL,filespec ; указатель на файловую спецификацию
RST ToDSS ; CF=0: A - атрибут файла
; CF=1: A - код ошибки
; - Установить атрибут -;
LD BC,Dss.Attrib.Set ; B=1, C=#16
LD HL,filespec ; указатель на файловую спецификацию
LD A,new_attr ; новый атрибут
RST ToDSS ; CF=0: успешно
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_Get_D_T: ; Получение даты и времени файла
LD A,file_handle ; файловый манипулятор
LD C,Dss.Get_D_T ; #17
RST ToDSS ; CF=0: D - день
; E - месяц
; IX - год
; H - час
; L - минуты
; B - секунды
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_Put_D_T: ; Установка даты и времени файла
LD A,file_handle ; файловый манипулятор
LD D,day ; день
LD E,month ; месяц
LD IX,year ; год
LD H,hour ; час
LD L,minute ; минуты
LD B,second ; секунды
LD C,Dss.Put_D_T ; #18
RST ToDSS ; CF=0: успешно
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_F_First: ; Поиск первого совпадающего файла
LD A,search_attr ; атрибуты, используемые при поиске
LD HL,filespec ; указатель на файловую спецификацию
LD DE,buffer ; рабочий буфер (44 или 46 байт в зависимости от B)
LD B,name_format ; формат имени:
; B=0 - 11 байт "FILENAMEEXT"
; B=1 - DOS-строка "filename.ext",0
; или с флагом поиска всех файлов:
; LD BC,Dss.F_First.All_DOSname ; B=1 + старший бит = #81, C=#19
LD C,Dss.F_First ; #19
RST ToDSS ; CF=0: буфер DE заполнен информацией о файле
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_F_Next: ; Поиск следующего совпадающего файла
LD DE,buffer ; указатель на рабочий буфер, заполненный F_First
LD C,Dss.F_Next ; #1A
RST ToDSS ; CF=0: буфер обновлён
; CF=1: A - код ошибки (в т.ч. файлов больше нет)
;-------------------------------------------------------------------------------------------------------
DSS_MkDir: ; Создание каталога
LD HL,filespec ; указатель на спецификацию каталога
LD C,Dss.MkDir ; #1B
RST ToDSS ; CF=0: успешно
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_RmDir: ; Удаление каталога
LD HL,filespec ; указатель на удаляемый каталог
LD C,Dss.RmDir ; #1C
RST ToDSS ; CF=0: успешно
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_ChDir: ; Смена текущего каталога
LD HL,filespec ; указатель на новый каталог
LD C,Dss.ChDir ; #1D
RST ToDSS ; CF=0: успешно
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_CurDir: ; Получение текущего каталога
LD HL,buffer ; буфер размером 256 байт
LD C,Dss.CurDir ; #1E
RST ToDSS ; CF=0: буфер заполнен строкой пути
; CF=1: A - код ошибки
;███████████████████████████████████████████████████████████████████████████████████████████████████████
; 4. Функции для работы с датой и временем
;███████████████████████████████████████████████████████████████████████████████████████████████████████
;-------------------------------------------------------------------------------------------------------
DSS_SysTime: ; Текущая дата и время
LD C,Dss.SysTime ; #21
RST ToDSS ; D - день
; E - месяц
; IX - год
; H - час
; L - минуты
; B - секунды
; C - день недели
;-------------------------------------------------------------------------------------------------------
DSS_SetTime: ; Установить текущую дату и время
LD D,day ; день
LD E,month ; месяц
LD IX,year ; год
LD H,hour ; час
LD L,minute ; минуты
LD B,second ; секунды
LD C,Dss.SetTime ; #22
RST ToDSS ; CF=0: успешно
; CF=1: A - код ошибки
;███████████████████████████████████████████████████████████████████████████████████████████████████████
; 5. Функции управления памятью
;███████████████████████████████████████████████████████████████████████████████████████████████████████
;-------------------------------------------------------------------------------------------------------
DSS_SetWin: ; Подключение страницы памяти в заданное окно
LD A,mem_blk_id ; идентификатор блока памяти
LD B,page_num ; номер страницы в блоке (0,1,2...)
LD H,win_slot ; биты 7-6: номер окна (0-3)
; 00 - окно 0 (PAGE0)
; 01 - окно 1 (PAGE1)
; 10 - окно 2 (PAGE2)
; 11 - окно 3 (PAGE3)
LD C,Dss.SetWin ; #38
RST ToDSS ; CF=0: A - номер страницы, замещённой в окне
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_SetWin1: ; Подключение страницы памяти в первое окно (PAGE1)
LD A,mem_blk_id ; идентификатор блока
LD B,page_num ; номер страницы
LD C,Dss.SetWin1 ; #39
RST ToDSS ; CF=0: A - замещённая страница
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_SetWin2: ; Подключение страницы памяти во второе окно (PAGE2)
LD A,mem_blk_id ; идентификатор блока
LD B,page_num ; номер страницы
LD C,Dss.SetWin2 ; #3A
RST ToDSS ; CF=0: A - замещённая страница
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_SetWin3: ; Подключение страницы памяти в третье окно (PAGE3)
LD A,mem_blk_id ; идентификатор блока
LD B,page_num ; номер страницы
LD C,Dss.SetWin3 ; #3B
RST ToDSS ; CF=0: A - замещённая страница
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_InfoMem: ; Информация о памяти
LD C,Dss.InfoMem ; #3C
RST ToDSS ; HL - общее количество страниц (по 16 Кбайт)
; BC - количество свободных страниц
;-------------------------------------------------------------------------------------------------------
DSS_GetMem: ; Выделение блока памяти
LD B,num_pages ; размер блока в страницах (16 Кбайт каждая)
LD C,Dss.GetMem ; #3D
RST ToDSS ; CF=0: A - идентификатор блока памяти
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_FreeMem: ; Освобождение блока памяти
LD A,mem_blk_id ; идентификатор блока
LD C,Dss.FreeMem ; #3E
RST ToDSS ; CF=0: успешно
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_SetMem: ; Изменение размера блока памяти
LD A,mem_blk_id ; идентификатор блока
LD B,new_size ; новый размер в страницах
LD C,Dss.SetMem ; #3F
RST ToDSS ; CF=0: успешно
; CF=1: A - код ошибки
;███████████████████████████████████████████████████████████████████████████████████████████████████████
; 6. Функции ввода с клавиатуры
;███████████████████████████████████████████████████████████████████████████████████████████████████████
;-------------------------------------------------------------------------------------------------------
DSS_WaitKey: ; Ожидание символа с клавиатуры
LD C,Dss.WaitKey ; #30
RST ToDSS ; A - код символа (ASCII/внутренний)
; D - позиционный код (скан-код)
; E - ASCII-код
; C - режим клавиатуры:
; bit7: RUS/LAT
; bit3: Num Lock
; bit2: Scroll Lock
; bit1: Insert
; bit0: Caps Lock
; B - состояние клавиш-модификаторов:
; bit7: Left Shift
; bit6: Right Shift
; bit5: Ctrl
; bit4: Alt
; bit3: Left Ctrl
; bit2: Left Alt
; bit1: Right Ctrl
; bit0: Right Alt
;-------------------------------------------------------------------------------------------------------
DSS_ScanKey: ; Опрос клавиатуры без ожидания
LD C,Dss.ScanKey ; #31
RST ToDSS ; ZF=1: нет нажатых клавиш
; ZF=0: A,D,E,C,B как у WaitKey
;-------------------------------------------------------------------------------------------------------
DSS_EchoKey: ; Ожидание символа с печатью без скролла
LD C,Dss.EchoKey ; #32
RST ToDSS ; работа аналогична WaitKey, символ отображается
;-------------------------------------------------------------------------------------------------------
DSS_CTRLKey: ; Получить состояние клавиатуры (без символа)
LD C,Dss.CTRLKey ; #33
RST ToDSS ; A = 0 - нет символов в буфере
; C,B - состояние клавиатуры (как у WaitKey)
;-------------------------------------------------------------------------------------------------------
DSS_K_CLEAR: ; Очистить буфер клавиатуры и выполнить функцию
LD B,fn_number ; номер функции: #30 (WaitKey), #31 (ScanKey),
; #32 (EchoKey), #33 (CTRLKey) или #34 (EDIT)
LD C,Dss.K_CLEAR ; #35
RST ToDSS ; выходные значения как у вызванной функции
;-------------------------------------------------------------------------------------------------------
DSS_K_SETUP: ; Управление настройками клавиатуры
; --- Установить раскладку ---
LD BC,Dss.K_SETUP.SetLayout ; B=0, C=#36
LD A,layout_num ; номер раскладки (0-7)
RST ToDSS
; --- Получить звуковые переменные ---
LD BC,Dss.K_SETUP.GetSoundVars ; B=1, C=#36
RST ToDSS ; A - значение переменных
; --- Установить звуковые переменные ---
LD BC,Dss.K_SETUP.SetSoundVars ; B=2, C=#36
LD A,sound_flags ; биты: 0 - сигнал переполнения буфера
; 1 - сигнал переключения раскладки
RST ToDSS
; --- Включить отображение курсора ---
LD BC,Dss.K_SETUP.ShowCursor ; B=3, C=#36
RST ToDSS
; --- Выключить отображение курсора ---
LD BC,Dss.K_SETUP.HideCursor ; B=4, C=#36
RST ToDSS
;-------------------------------------------------------------------------------------------------------
DSS_TestKey: ; Опрос буфера клавиатуры (без извлечения символа)
LD C,Dss.TestKey ; #37
RST ToDSS ; ZF=1: буфер пуст
; ZF=0: A,D,E,C,B как у WaitKey
;███████████████████████████████████████████████████████████████████████████████████████████████████████
; 7. Функции для исполнения программ
;███████████████████████████████████████████████████████████████████████████████████████████████████████
;-------------------------------------------------------------------------------------------------------
DSS_Exec: ; Загрузить и выполнить файл
LD HL,filespec ; указатель на файловую спецификацию
LD B,search_mode ; 0 - с поиском в PATH
; 1 - без поиска в PATH
LD C,Dss.Exec ; #40
RST ToDSS ; CF=0: A - код завершения программы
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_Exit: ; Завершение текущей программы
LD B,exit_code ; код завершения
LD C,Dss.Exit ; #41
RST ToDSS ; (возврата обычно не происходит)
;-------------------------------------------------------------------------------------------------------
DSS_Get_Err: ; Получить код завершения предыдущей программы
LD C,Dss.Get_Err ; #42
RST ToDSS ; A - код завершения
;███████████████████████████████████████████████████████████████████████████████████████████████████████
; 8. Функции для работы со строками и командной строкой
;███████████████████████████████████████████████████████████████████████████████████████████████████████
;-------------------------------------------------------------------------------------------------------
DSS_GSwitch: ; Выделить параметр из командной строки
LD HL,cmd_line ; указатель на командную строку
LD DE,param_buf ; буфер для выделяемого параметра
LD C,Dss.GSwitch ; #43
RST ToDSS ; HL - указатель на следующий параметр
; CF=0: ещё есть параметры
; CF=1: достигнут конец строки
;-------------------------------------------------------------------------------------------------------
DSS_DosName: ; Преобразование имени файла (11 символов / DOS-формат)
; --- 11-символьное имя -> DOS "name.ext",0 ---
LD BC,#00*256 + Dss.DosName ; B=0, C=#44
LD HL,name_11 ; указатель на 11-символьное имя
LD DE,dos_buf ; буфер для DOS-имени
RST ToDSS ; CF=0: успешно, CF=1: A - код ошибки
; --- DOS-имя -> 11-символьное ---
LD BC,#01*256 + Dss.DosName ; B=1, C=#44
LD HL,dos_name ; указатель на DOS-строку
LD DE,name_11 ; буфер для 11-символьного имени
RST ToDSS ; CF=0: успешно, CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_EX_Path: ; Расширенный разбор командной строки (подфункции)
; --- Разобрать строку на компоненты ---
LD BC,Dss.EX_Path.GET_ALL ; B=0, C=#45
LD HL,cmd_line ; указатель на командную строку
RST ToDSS ; CF=0: A - результат разбора (биты):
; bit7: найдены шаблоны ? или *
; bit3: указано имя диска
; bit2: указан путь
; bit1: указано расширение
; bit0: указано имя файла
; --- Выделить имя диска ---
LD BC,Dss.EX_Path.GET_DRIVE ; B=1, C=#45
LD HL,cmd_line
LD DE,drive_buf ; буфер (13 байт)
RST ToDSS ; CF=0: A - номер диска (0-...), буфер - "A:",0
; --- Выделить директорию ---
LD BC,Dss.EX_Path.GET_PATH ; B=2, C=#45
LD HL,cmd_line
LD DE,dir_buf ; буфер (256 байт)
RST ToDSS ; CF=0: A - результат разбора, буфер - путь
; --- Выделить имя файла ---
LD BC,Dss.EX_Path.GET_NAME ; B=3, C=#45
LD HL,cmd_line
LD DE,name_buf ; буфер (13 байт)
RST ToDSS ; CF=0: A - результат, буфер - "FILE.EXT",0
; --- Выделить расширение ---
LD BC,Dss.EX_Path.GET_TYPE ; B=4, C=#45
LD HL,cmd_line
LD DE,ext_buf ; буфер (4 байта)
RST ToDSS ; CF=0: A - результат, буфер - "EXT",0
; --- Выделить все компоненты вместе ---
LD BC,Dss.EX_Path.GET_ALL_EX ; B=5, C=#45
LD HL,cmd_line
LD DE,components_table ; адрес таблицы из 8 байт:
; DE+0: адрес буфера для диска
; DE+2: адрес буфера для директории
; DE+3: адрес буфера для имени файла
; DE+4: адрес буфера для расширения
RST ToDSS ; CF=0: A - результат, буферы заполнены
; --- Преобразовать 11-символьное имя -> DOS ---
LD BC,Dss.EX_Path.GETNAME ; B=8, C=#45
LD HL,name_11
LD DE,dos_buf
RST ToDSS
; --- Преобразовать DOS -> 11-символьное имя ---
LD BC,Dss.EX_Path.MASK ; B=9, C=#45
LD HL,dos_name
LD DE,name_11
RST ToDSS
;███████████████████████████████████████████████████████████████████████████████████████████████████████
; 9. Функции для работы с переменными
;███████████████████████████████████████████████████████████████████████████████████████████████████████
;-------------------------------------------------------------------------------------------------------
DSS_Environ: ; Работа с системным окружением
; --- Получить всё окружение ---
LD BC,Dss.Environ.Read ; B=0, C=#46
LD HL,buffer ; буфер для строк окружения
RST ToDSS ; CF=0: A=0 - успех
; --- Получить значение переменной ---
LD BC,Dss.Environ.Get ; B=1, C=#46
LD HL,var_name ; указатель на имя переменной
LD DE,value_buf ; буфер для значения
RST ToDSS ; CF=0: A=0 - найдена, A=#FF - не найдена
; --- Установить/удалить переменную ---
LD BC,Dss.Environ.Set ; B=2, C=#46
LD HL,var_string ; указатель на строку "ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ"
RST ToDSS ; CF=0: успех
;-------------------------------------------------------------------------------------------------------
DSS_AppInfo: ; Информация о текущем приложении
; --- Параметры командной строки ---
LD BC,Dss.AppInfo.CMD_Param ; B=0, C=#47
LD HL,buffer ; буфер для параметров
RST ToDSS ; CF=0: успех, CF=1: ошибка
; --- Полный путь к каталогу программы ---
LD BC,Dss.AppInfo.EXE_HomeDir ; B=1, C=#47
LD HL,buffer ; буфер для пути
RST ToDSS
; --- Полный путь и имя файла программы ---
LD BC,Dss.AppInfo.EXE_FullPath ; B=2, C=#47
LD HL,buffer
RST ToDSS
;███████████████████████████████████████████████████████████████████████████████████████████████████████
; 10. Функции работы с экраном
;███████████████████████████████████████████████████████████████████████████████████████████████████████
;-------------------------------------------------------------------------------------------------------
DSS_SetVMod: ; Выбор видеорежима
LD A,video_mode ; режим: 02h - текст 40x32
; 03h - текст 80x32
; 81h - графика 320x256
; 82h - графика 640x256
LD B,screen_page ; номер страницы экрана, которая будет активна (0/1)
LD C,Dss.SetVMod ; #50
RST ToDSS ; CF=0: успех, CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_GetVMod: ; Получить текущий видеорежим
LD C,Dss.GetVMod ; #51
RST ToDSS ; CF=0: A - текущий режим, B - активная страница (0/1)
; CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_Locate: ; Установить позицию курсора в текущем окне
LD D,row ; строка (вертикаль)
LD E,column ; столбец (горизонталь)
LD C,Dss.Locate ; #52
RST ToDSS ; (без возврата значений)
;-------------------------------------------------------------------------------------------------------
DSS_Cursor: ; Получить позицию курсора
LD C,Dss.Cursor ; #53
RST ToDSS ; D - строка, E - столбец
;-------------------------------------------------------------------------------------------------------
DSS_SelPage: ; Выбрать активную страницу экрана
LD B,screen_page ; 0 или 1
LD C,Dss.SelPage ; #54
RST ToDSS ; CF=0: успех, CF=1: A - код ошибки
;-------------------------------------------------------------------------------------------------------
DSS_Scroll: ; Прокрутка окна
LD D,row ; строка левого верхнего угла
LD E,column ; столбец левого верхнего угла
LD H,height ; высота окна в строках
LD L,width ; ширина окна в символах
LD B,direction ; 1 = вверх, 2 = вниз
LD A,clear_mode ; 0 = очищать освободившуюся строку пробелами
LD C,Dss.Scroll ; #55
RST ToDSS
;-------------------------------------------------------------------------------------------------------
DSS_Clear: ; Очистка прямоугольной области экрана
LD D,row ; строка левого верхнего угла
LD E,column ; столбец левого верхнего угла
LD H,height ; высота
LD L,width ; ширина
LD B,attr ; атрибут заполнения
LD A,char ; символ заполнения
LD C,Dss.Clear ; #56
RST ToDSS
;-------------------------------------------------------------------------------------------------------
DSS_RdChar: ; Прочитать символ и атрибут с экрана
LD D,row ; строка
LD E,column ; столбец
LD C,Dss.RdChar ; #57
RST ToDSS ; A - символ, B - атрибут
;-------------------------------------------------------------------------------------------------------
DSS_WrChar: ; Записать символ и атрибут в указанную позицию экрана
LD D,row ; строка
LD E,column ; столбец
LD A,char ; символ
LD B,attr ; атрибут
LD C,Dss.WrChar ; #58
RST ToDSS
;-------------------------------------------------------------------------------------------------------
DSS_WinCopy: ; Запомнить содержимое окна в буфер
LD D,row ; строка начала
LD E,column ; столбец начала
LD H,height ; высота
LD L,width ; ширина
LD B,buf_page ; страница буфера (если IX > #C000)
LD IX,buffer ; адрес буфера в памяти
LD C,Dss.WinCopy ; #59
RST ToDSS
;-------------------------------------------------------------------------------------------------------
DSS_WinRest: ; Восстановить окно из буфера
LD D,row ; строка начала
LD E,column ; столбец начала
LD H,height ; высота
LD L,width ; ширина
LD B,buf_page ; страница буфера (если IX > #C000)
LD IX,buffer ; адрес буфера в памяти
LD C,Dss.WinRest ; #5A
RST ToDSS
;-------------------------------------------------------------------------------------------------------
DSS_PutChar: ; Печать символа в текущей позиции курсора
LD A,char ; символ
LD C,Dss.PutChar ; #5B
RST ToDSS
;-------------------------------------------------------------------------------------------------------
DSS_PChars: ; Печать строки в текущей позиции курсора
LD HL,string ; указатель на строку (заканчивается 0)
LD C,Dss.PChars ; #5C
RST ToDSS ; HL - указатель на байт за концом строки
;-------------------------------------------------------------------------------------------------------;!FIXIT
DSS_Lib_Sub: ; Библиотечные подфункции
; --- Восстановить системный шрифт ---
LD BC,Dss.Lib_Sub.RestoreFont ; B=1, C=#5D
RST ToDSS ; восстанавливает знакогенератор по умолчанию
;███████████████████████████████████████████████████████████████████████████████████████████████████████
; 11. Функции для печати на принтере
;███████████████████████████████████████████████████████████████████████████████████████████████████████
;-------------------------------------------------------------------------------------------------------
DSS_Print: ; Вывод символа на принтер без ожидания
LD A,char ; символ для печати
LD C,Dss.Print ; #5F
RST ToDSS ; CF=0: символ отправлен в порт принтера
; CF=1: принтер не готов, B - символ не выведен

View File

@ -1,4 +1,4 @@
; ‘âப  ID ¡ãâ«® ¤¥à  ; ‘âப  ID ¡ãâ«® ¤¥à 
MACRO _mSYSID MACRO _mSYSID
DZ 'Starting...' ; ¯¥à¢ë© ᨬ¢®« ¢ § £àã§ç¨ª¥ Ž‘ § ¬¥­ï¥âáï ­  ­®¬¥à áâ à⮢®£® ¤à ©¢ , ¢â®à®© ­  ­®¬¥à  ªâ¨¢­®£® § £à㧮筮£® à §¤¥«  DZ 'Starting...' ; ¯¥à¢ë© ᨬ¢®« ¢ § £àã§ç¨ª¥ Ž‘ § ¬¥­ï¥âáï ­  ­®¬¥à áâ à⮢®£® ¤à ©¢ , ¢â®à®© ­  ­®¬¥à  ªâ¨¢­®£® § £à㧮筮£® à §¤¥« 
ENDM ENDM