Тема: gainOS
Показать сообщение отдельно
Старый 05.07.2011, 18:01   #1
PacMan
Нуждающийся
 
Регистрация: 02.01.2009
Сообщений: 87
Написано 18 полезных сообщений
(для 35 пользователей)
gainOS

Версия 0.3
gainOS - очередной проект "ОС" для мобильных телефонов выполненного на MIDlet Pascal.

Разработчики:
Что примечательного:
  • Ядро
  • Системные сообщения
  • Процессы
  • Интерпретатор
  • Консоль

Вообще gainOS - это доказательство того, что две головы лучше чем одна. Ведь мы создали это "нечто" за сравнительно небольшой промежуток времени, переплюнув проекты других псевдо-ОС.

Что нового?

Версия 0.3
  • Исправлены многочисленные баги
  • Изменено Bootmenu (теперь на Canvas'е)
  • Добавлена визуализация процесса копирования и перемещения
  • Добавлено сворачивание окон

Версия 0.2
Система:
  • Добавлено Bootmenu
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 [ Скачать ]
Вложения
Тип файла: zip gainOS.zip (155.5 Кб, 1545 просмотров)

Последний раз редактировалось PacMan, 11.07.2011 в 19:23.
(Offline)
 
Ответить с цитированием
Эти 9 пользователя(ей) сказали Спасибо PacMan за это полезное сообщение:
.:MaSe:. (02.11.2013), Artem_8086 (06.07.2012), DIMMON4IK (05.07.2011), Dream (06.07.2011), Igor (05.07.2011), JACUK (06.07.2011), mihailkirillov (26.11.2011), Romanzes (09.07.2011), Sobakka-rus (11.09.2012)