Advertisement
DimkaM

api_base

Jul 12th, 2020
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.99 KB | None | 0 0
  1. Определения, описанные в этом документе, объявлены в файле 'sys_h.asm',
  2. который в свою очередь линкует файл 'sysdefs.asm'.
  3.  
  4. Данный документ подразумевает использование асм-компилятора sjasmplus из репозитория NedoOS.
  5. sjasmplus поставляется в виде исполнияемого файла sjasmplus.exe для OS Windows.
  6. А также в виде исходного кода для самостоятельной сбоки под вами используюмую OS.
  7.  
  8. ************************* Используемые выражения *************************
  9. байт - минимальня единица хранения данных в ОЗУ ZX-Spectrum, равная 8 битам.
  10.  
  11. 0x - приставка к константе, обозначающая число представленное в шестнадцатиричной систаме измерения.
  12.  
  13. little-endian - представление числа в ОЗУ. Это представление использует процессор z80.
  14. Сначала младший байт, затем старший. В этом документе, по умолчанию, все числа little-endian.
  15. К примеру 16 битное число 0x1234 располагается в памяти как DEFB 0x34,0x12
  16.  
  17. string(строка) - нуль-терминированный массив байтов, как правило содержащий строку символов.
  18. Пример: DEFB "Hello Work!",0
  19.  
  20. страница ОЗУ(page) - 16килобайт физического ОЗУ.
  21.  
  22. окно(окно памяти) - окно адрестного пространства процессора z80.
  23. В NedoOS используется четыре окна располагаемых в адресах
  24. 0x0000...0x3fff, 0x4000...0x7fff, 0x8000...0xbfff, 0xc000...0xffff
  25.  
  26. Палитра - палитра цветов видеовывода
  27.  
  28. фокус - доступность вывода на экран и чтение клавиатуры.
  29. В момент времени фокус может принадлежать только одному процессу, остальным процессам в этот момент фокус недоступен.
  30. Фокус переключается при вызове OS_SETGFX, при закрытии процесса, а так же хоткеем.
  31.  
  32. процесс - задача.
  33. Процессу доступно адресное пространство PROGSTART...0xffff.
  34. Стек(регистр SP) процесса может располагатся в диапазоне адресов 0x3b00...0xffff.
  35. У каждого процесса свой квант времени, переключение процессов происходит
  36. по сигналу n_int процессора, либо если процесс отдал свой квант времени.
  37. У каждого процесса своя палитра.
  38. При создании процесса ему выделяется четыре страницы ОЗУ, которые подключаются
  39. во все 4 окна адресного пространства. Адреса 0x0000...0x00ff заполняются служебной информацией.
  40. Также устанавливается системная цветовая палитра.
  41. При старте процесса управление передается на адрес PROGSTART
  42.  
  43. программа - исполняемый файл с расширением '.com', максимальный размер программы 0x10000-PROGSTART
  44. При запуске программы она помещается в отдельный процесс.
  45. Исходный код программы, как правило, начинается строками:
  46. DEVICE ZXSPECTRUM128
  47. include "../_sdk/sys_h.asm"
  48. ORG PROGSTART
  49. И заканчивается строкой
  50. savebin "progname.com",PROGSTART,$-PROGSTART
  51.  
  52. 8.3 - формат имени файла либо директории, до 8 символов имя и до 3 символов расширение.
  53. В случае присутствия раширения, используется символ '.' в качестве разделителя имени и расширения
  54.  
  55. ***********************************************************
  56. *********************** Определения ***********************
  57. ***********************************************************
  58. При вызове функций ядра считается, что возможна порча всех регистров(за исключением SP).
  59.  
  60. *********************** PROGSTART **********************
  61. Идентификатор, определяющий начало компиляции и стартовый адрес программы.
  62. В текущей реализации равен 0x0100
  63.  
  64. Пример использования, а также минимальный исходный код программы:
  65. DEVICE ZXSPECTRUM128
  66. include "../_sdk/sys_h.asm"
  67. ORG PROGSTART
  68. ;исходный код программы
  69. QUIT
  70. savebin "progname.com",PROGSTART,$-PROGSTART
  71.  
  72. *********************** QUIT **********************
  73. Макрос, вызова функции ядра.
  74. Закрывает текущий процесс, освобождая все используемые им страницы ОЗУ,
  75. дескрипторы файлов и сокетов.
  76. Переключает исполнение и фокус видеовывода на следующий процесс.
  77.  
  78. Аргументы не используются.
  79.  
  80. Пример использования смотри в описании PROGSTART
  81.  
  82.  
  83. *********************** OS_SETGFX **********************
  84. Макрос вызова функции ядра.
  85. Устанавливает видео-режим.
  86. При старте процесса вывод на экран, процессом, недоступен без установки видеорежима.
  87.  
  88. Все аргументы в регистрах:
  89. E - видеорежим, допустимы следующие значения:
  90. 0 - EGA
  91. 2 - Аппаратный мультиколор
  92. 3 - 6912
  93. 6 - текстовый видеорежим, так же устанвливает фокус на процесс
  94. -1 - отключает видеовывод и переключает фокус видеовывода на следующий процесс
  95. Возвращаемые значения в регистрах:
  96. E - видеорежим до вызова OS_SETGFX
  97.  
  98. Пример установки текстового видеорежима:
  99. LD E,6
  100. OS_SETGFX
  101.  
  102.  
  103. *********************** PRCHAR **********************
  104. Макрос вызова функции ядра.
  105. Выводит символ на экран, ипользуется только в текстовом видеорежиме.
  106. Фактичеси вывод происходит только процессом с фокусом.
  107.  
  108. Все аргументы в регистрах:
  109. A - символ. символы '\r' и '\n' являются управляющими.
  110. Возвращаемых значений нет.
  111.  
  112. Пример печати строки "Hello Work!":
  113. DEVICE ZXSPECTRUM128
  114. include "../_sdk/sys_h.asm"
  115. ORG PROGSTART
  116. LD E,6
  117. OS_SETGFX
  118. LD HL,STR_HELLO
  119. PRINT_LOOP:
  120. LD A,(HL)
  121. OR A
  122. JR Z,PRINT_LOOP_END
  123. PUSH HL
  124. PRCHAR
  125. POP HL
  126. INC HL
  127. JR PRINT_LOOP
  128. PRINT_LOOP_END:
  129. QUIT
  130. STR_HELLO:
  131. DEFB "Hello Work!",0
  132. savebin "progname.com",PROGSTART,$-PROGSTART
  133.  
  134. *********************** GET_KEY **********************
  135. Макрос вызова функции ядра.
  136. Возвращает нажатую кнопку клавиатуры, кнопки мыши и координаты мыши.
  137. Фактичеси чтение происходит только процессом с фокусом.
  138.  
  139. Аргументов нет.
  140. Возвращаемые значения в регистрах:
  141. A - код символа(кнопки). Допустимые коды смотри в 'sysdefs.asm' секция 'Internal keyboard values'
  142. C - код символа(кнопки) без учёта языковой раскладки.
  143. DE - позиция мыши (y,x)
  144. L - кнопки мыши (bits 0,1,2: 0=pressed)
  145.  
  146. Пример ожидания символа:
  147. LD E,6
  148. OS_SETGFX
  149. WAIT_LOOP:
  150. GET_KEY
  151. OR A
  152. JR Z,WAIT_LOOP
  153. CP key_esc
  154. JP Z,CLOSE_PROC
  155. ;получили код символа в A
  156. ...
  157. CLOSE_PROC:
  158. QUIT
  159.  
  160. Примечание: желательна обработка кода key_esc для завершения программы.
  161.  
  162. *********************** OS_OPENHANDLE **********************
  163. Макрос вызова функции ядра.
  164. Открывает существующий файл для чтения/записи.
  165.  
  166. Все аргументы в регистрах:
  167. DE - строка с именем файла, может содержать относительный либо абсолютный путь к файлу.
  168. в текущей реализации поддержан формат имен 8.3
  169. Возвращаемые значения в регистрах:
  170. А - ошибка. Если 0x00 то ошибки нет.
  171. B - дескриптор файла если нет ошибки.
  172.  
  173. Пример открытия файла 'pyraster.txt' располеженного в директории '../fu/ckco':
  174. LD DE,FILE_NAME
  175. OS_OPENHANDLE
  176. OR A
  177. JP NZ,ERR_EXIT ;обработка ошибок
  178. LD A,B
  179. LD (FILE),A ;сохраняем дескриптор
  180. ...
  181. FILE_NAME:
  182. DEFB "../fu/ckco/pyraster.txt",0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement