Нуждающийся
Регистрация: 02.01.2009
Сообщений: 87
Написано 18 полезных сообщений (для 35 пользователей)
|
gainOS
Версия 0.3 gainOS - очередной проект "ОС" для мобильных телефонов выполненного на MIDlet Pascal.
Разработчики:
Что примечательного:- Ядро
- Системные сообщения
- Процессы
- Интерпретатор
- Консоль
Вообще gainOS - это доказательство того, что две головы лучше чем одна. Ведь мы создали это "нечто" за сравнительно небольшой промежуток времени, переплюнув проекты других псевдо-ОС.
Что нового?
Версия 0.3- Исправлены многочисленные баги
- Изменено Bootmenu (теперь на Canvas'е)
- Добавлена визуализация процесса копирования и перемещения
- Добавлено сворачивание окон
Версия 0.2
Система: gASM: - добавлены функции для работы с файлами (подробная информация в файле gASMreadme.txt)
- теперь можно обратиться к адрессу, который записан в другом ячейке памяти с помощью знака $ (подробно в gASMreadme.txt)
Терминал: - добавлена комманда ps
- улучшена комманда help
Команды терминала:
install - выполнить инсталяцию системы
version - версия терминала
cd [путь] - выбрать текущую папку
ls - содержимое папки
help - список комманд терминала
kill [pid] - уничтожить процесс с указанным айди
create [приложение] - создать процесс
time - текущее время
pwd - путь к текущей папке
dl - список дисков
shutdown - завершение системы
clear - очистка экрана
edit [файл] - текстовый редактор
env [переменная="значение"]- переменные окружения
mkdir [имя папки] - создать папку
rename [имя] [новое имя] - переименовать файл или папку
rm [файл/папка]- удалить файл или папку ( если не пуста )
view [файл] - просмотр текстового файла
copy [адрес файла] [новый адрес файла] - копировать файл
move [адрес файла] [новый адрес файла] - переместить файл
Документация к интерпритатору:
Структура простого приложения
====================
1.| MODE #APPLICATION TYPE#
2.| $APP
3.| Start:
4.| hlt
====================
В 1 строчке идет объявление типа приложения. Всего существует 3 типа
Console - Консольное приложение. Можно запустить только из консоли (Terminal) ОС, запрещена работа с окнами
Window - Оконное приложение. Можно запускать только из графической оболочки (Descktop) ОС, запрещена работа с функциями консольного приложения
Deamon - Демон. Запуск возможен как из консоли (Terminal), так и графической оболочки (Desctop) ОС. Запрещена работа с функциями консольного и оконного приложения
Далее следует набор настроек программы. Настройка приложения идет с помощью специальных деректив, которые имеют следующий синтаксис
====================
1.| #code parameter
====================
Где:
# - обязательный символ, без которого деректива не будет восприниматься
code - имя директивы. Полный список директив смотрите ниже
parameter - список параметров для директивы (отделяются запятой)
Вот основной список директив
include - вставка заголовочного файла, находящегося по пути указанноу в параметрах.В этих файлах указывается список функций, упрощающих работу программиста со сложными функциями. Заголовочные файлы находятся в системной папке "headers" ОС. Пример: #include winapi.h
После того, как были указанны все нужные директивы пишется строка $APP, которая говорит о том, что объевлние настроек программы завершено. Далее следует непосредственный код программы.
! СИНТАКСИС gASM
Весь синтаксис состоит из меток и инструкций. Объевление меток происходит сл. образом
=====================
1.| LabelName:
=====================
Для того чтобы применить исструкцию требуется воспользоваться такой конструкцией
=====================
1.| code par1, par2, ...
=====================
Где:
code - имя инструкции (полный список смотрите ниже)
par1, par2, ... - список передаваемых параметров инструкции. Каждый параметр отделяется с помощью запятой
Для работы с адресами используется 2 символа # и $. Первый (#) - используется для поиска адреса по имени указанному после этого символа, второй - задает конкретный адресс ячейки. Для примера можно рассмотреть следующий листинг
=====================
1.| ...
2.| mov #myVar, $5
3.| ...
=====================
Здесь в переменную по адресу #myVar записывается значение из ячейки находящейся по адрессу 5.
У приложения есть регистры. Они сущуствуют для того, чтобы передавать параметры из-вне функций (подробности ниже). Всего на приложение выделяется 15 регистров. Доступ к ним обеспечивается с помощью имени rN, где N - это номер регистра, который должен находиться в диапозоне [0,14]
Так же gAsm поддерживает комментарии. Комментарий начинается с символа ; и идет на протяжении всей строчки. Например
=====================
1.| ...
2.| ;This is comment
3.| mov #r0, $1 ;This is comment too
4.| mov #r1, "my ;This is comment too string"
5.|
=====================
В четвертой строке мы видим, что ; находится внутри строки. Но в 1 регистр запишется лишь часть строки: my, т.к. остальная часть является комментарием
! ИНСТРУКЦИИ
Вот полный список инструкций
mov a1, a2 - записывает в ячейку по адресу a1, значение из ячейки a2 или же a2, если ячейка не существует. Так же можно записать адресс ячейки по имени, используя @varName. !!!Предупреждение: такая конструкция работает только в этой инструкции
db a1, a2, a3 - выделяет ячейку в памяти и назначеет ей имя a1, тип a2 {0 - integer; 1 - real; 2 - string} и записывает начальное значение a3 (именно значение, а не адресс ячейки)
uns a1 - очищает ячейку в памяти по адрессу a1
call - вызывает функцию по имени (список функций смотрите ниже)
jmp a1 - перемещение на метку или определенное кол-во шагов вперед\назад. Для того чтобы перейти на метку используется такая конструкция ^LabelName. Чтобы перейти на N шагов вперед используйте обычное число, на N шагов назад используйте отрицательное значение. !!!Предупреждение: в a1 пишется конкретное значение, а не адресс ячейки.
Пример:
=====================
1.| jmp ^Start ;переместиться на начало программы
2.| jmp 5 ;перейти на 5 шагов вперед
3.| jmp -3 ;перейти на 3 шага назад
=====================
cmp a1, a2 - сравнение 2 чисел из ячеек по адрессам a1 и a2. Сравнение происходит по методу вычитания из a1 a2. Если в результате получается 0, то пропускается ближняя инструкция jnz. В противном случаее пропускается инструкция jz. (Подробнее ниже)
jz a1 - аналог jmp, но срабатывает только в том случаее, когда cmp возвращает 0
jnz a1 - аналог jmp, но срабатывает только в том случае, когда cmp возвращает число отличное от 0
ret - возвращение к предыдущей точке скачка. Эта инструкция пригодится для создания собственный функций.
Пример:
=====================
1.| MyFunction:
2.| mov #r0, #r1 ;Здесь любые действия
3.| call debug
4.| ret ;возвращаемся к основной программе
5.| Start:
6.| mov #r1, "Hello"
7.| jmp ^MyFunction
=====================
hlt - корректное завершение программы
{В следующем списке инструкций результат записывается в ячейку по адрессу a1. Ячейки обязательно не должны иметь тип string}
sub a1, a2 - a1 - a2
add a1, a2 - a1 + a2
div a1, a2 - a1 / a2 !!!Предупреждение: ячейка по адрессу a1 должна иметь тип real
idiv a1, a2 - a1 div a2 !!!Предупреждение: ячейки по адрессу a1 и a2 должны иметь тип integer
mul a1, a2 - a1 * a2
dec a1 - a1 - 1 !!!Предупреждение: ячейка по адрессу a1 должна иметь тип integer
inc a1 - a1 + 1 !!!Предупреждение: ячейка по адрессу a1 должна иметь тип integer
and a1, a2 - a1 and a2 !!!Предупреждение: ячейки по адрессу a1 и a2 должны иметь тип integer
or a1, a2 - a1 or a2 !!!Предупреждение: ячейки по адрессу a1 и a2 должны иметь тип integer
shl a1, a2 - a1 shl a2 (Побитовое смещение влево) !!!Предупреждение: ячейки по адрессу a1 и a2 должны иметь тип integer
shr a1, a2 - a1 shr a2 (Побитовое смещение вправо) !!!Предупреждение: ячейки по адрессу a1 и a2 должны иметь тип integer
not a1 - not a1 !!!Предупреждение: ячейка по адрессу a1 должна иметь тип integer
neg a1 - смена знака значения ячейки по адрссу a1
! Функции
Функции вызываются с помощью инструкции call. Передача параметров происходит с помощью предварительного занесения значений в регистры. Имена функций не чувствительны к регистру
Список функций доступных только для консольных приложений:
write - вывод текста (r0) в консоль без перехода на новую строчку
writeln - вывод текста (r0) в консоль с переходом на новую строку
read - чтение строки (r1) из консоли с подсказкой (r0) без перехода на новую строчку
readln - чтение строки (r1) из консоли с подсказкой (r0) с переходом на новую строчку
clrscr - очистка экрана консоли
Список основных функций (доступны для любого типа приложения):
fileexists - существует ли файл по пути (r0). Возвращает (r1) 1 - существует; 0 - нет
getdirlist - возвращает (r1) список папок по пути (r0), разделенный символом |
getfilelist - аналогичен getdirlist, только список файлов
getdisklist - возвращает (r0) список дисков, разделенных символом |
sleep - подождать (r0) милисеккунд
strpos - возвращает (r2) позицию символа (r1) в строке (r0). Аналог Pos из MP
strcop - копирует все символы с r1 по r2 из строки r0 и записывает результат в r3. Аналог Copy из MP
strdel - аналогично strcop, только удаляет указанный промижуток из заданной строки
strcmp - сравнивает 2 строки r0 и r1, возвращает (r2) 1 - если равны и 0 - если разные
concat - склеивает 2 строки r0 и r1 и пишет в r2
cos - Принимает r0 в радианах и возвращает r1
sin - Принимает r0 в радианах и возвращает r1
Следующая версия:
В следующей версии будет пользовательский интерфейс.
Вот скриншот:
gainOS 0.3 [ Скачать ]
Последний раз редактировалось PacMan, 11.07.2011 в 19:23.
|