DonNews
#17
30 апреля 2002 |
|
Проект - новая оболочка/Опереционная Система SinOS от Disabler: примеры программирования.
(c) 2oo2 Disabler/DPL ╓───╥──────────────────────────────────────────────────────────┐ ╙ ╫ ╜ Disabler Production LabAratory Presents: ┌──────────────────────────────────────────────────────────────┐ `│-1-┌─────────────────────────────┐ ░░▒▒▓▓██ Введение ██▓▓▒▒░░ │ └───┘ └────────────────────────────┘ Хаюшки, люди! С вами снова Disabler и очередная программа от DPL. На этот раз Вам предоставлена возможность опробывать в работе новую оболочку для написания программ. По своей структуре эта система похожа на MustDie'95. Структура программ так-же очень похожа, т.е. вы создаете окно с текстом опций или подска- зок, а потом описываете реакцию на выбор конкретной опции. ┌──────────────────────────────────────────────────────────────┐ `│-2-┌─────────────────┐ ░░▒▒▓▓██ Системные Требования ██▓▓▒▒░░ │ └───┘ └────────────────────────────────────────┘ Для запуска системы надо: Обязательно: ■ 128kb основной памяти (Ram) ■ 16kb дополнительной памяти (Cashe) ■ TR-Dos 5.03 с командой IN A,(#1F) Желательно: ■ System SetUP v2.04 ■ Kempston Mouse ■ 32kb дополнительной памяти (Cashe) Идеально: ■ 1024kb static ram + turbo 14mHz no wait! ■ 256kb дополнительной памяти (Cashe) ┌──────────────────────────────────────────────────────────────┐ `│-3-┌───────────────────┐ ░░▒▒▓▓██ Структура Программ ██▓▓▒▒░░ │ └───┘ └──────────────────────────────────────┘ Программа для SinOS состоит из трех основных частей: 1. Описатель файла,состоящий из ID-String'а принадлежности файла к системе, названия программы, адреса основных запусков. 2. Описатели окон. 3. Набор реакций на выбор. ;--------------------------------------------------------------- ;████████████████ Пример файла для SinOS v1.00 █████████████████ ;--------------------------------------------------------------- ;██████████ (c) 2001 Disabler Production Labaratory ████████████ ;--------------------------------------------------------------- DB "SinOS v1.00"; ID-String файла DB "Название проги!!"; угадайте... DW адрес_окна_install DW адрес_окна_second_open ;-------- Формат описателя окна -------- DB Y_координата_окна,X_координата_окна DB размер_окна_по_X,размер_окна_по_y DB "Заголовок_окна",1; <-- HA CЛEД.CTPOKУ DB 1; <-- HA CЛEД.CTPOKУ DB "Tекст опции #1",1 DB "Tекст опции #2",1 ; .... .................... DB "Tекст опции #N" DB 0; <-- KOHEЦ OПИCATEЛEЙ OПЦИЙ DW Адрес_процедуры_'open' DB y_коорд_полоски_#1,x_коорд_полоски_#1 DB длина_полоски_выбора_опции_#1 DB маркер_опции_#1 DW адрес_#1 DB y_коорд_полоски_#2,x_коорд_полоски_#2 DB длина_полоски_выбора_опции_#2 DB маркер_опции_#2 DW адрес_#2 ; .... ................. DB y_коорд_полоски_#N,x_коорд_полоски_#N DB длина_полоски_выбора_опции_#N DB маркер_опции_#N DW адрес_#N DB #ff; <-- Kонец описателей выбора DB маркер_'close' DW адрес_'close' FAQ: Q: Что такое >>> адрес_окна_install <<< ??? A: Адрес окна, которое открывается только один раз, при начальной загрузке программы. Q: Что такое >>> адрес_окна_second_open <<< ??? A: Адрес первого (главного) окна программы. Q: Что такое >>> адрес_процедуры_'open' <<< ??? A: Это адрес процедуры, которая будет вызвана сразу после открытия окна. Eсли она не нужна, то вместо нее можно написать TO_RET, где TO_RET - метка на команду RET, т.е. TO_RET RET Q: Что такое >>> маркер_опции_#N,адрес_#N <<< ??? A: Это маркер определяющий реакцию на выбор опции. #00 - Oткрыть следующее окно 'адрес_#N'. #01 - 3акрыть текущее окно и вернуться к окну 'AДPEC_#N' на обновляя его. #02 - 3акрыть текущее и открыть новое окно 'адрес_#N' #FE - Bызвать процедуру 'адрес_#N' Q: Что такое >>> маркер_'close', адрес_'close' <<< ??? A: Это аналог маркера реакции на выбор, но срабатывает при про- махе, т.е. когда не выбрана ни одна из опции и нажимается кнопка выбора. ; -- Пример простой программы для SinOS --- DB "SinOS v1.00" DB "Test Program ..." DW w_inst DW w_main w_inst DB 3,3,5,17,#57 DB " Program Installer",1,1 DB "Program has installed",1 DB " -----> Yep <-----",0 DW install DB 6,3,18,2 DW w_main DB #ff,#fe DW to_ret w_main DB 3,3,5,17,#47 DB " SinOS Test Program!",1,1 DB "Reinstall Program",1 DB "Exit to SinOS",0 DW to_ret DB 5,3,18,2 DW w_inst DB 6,3,18,1 p_exit DW 0 DB #ff,#fe DW to_ret install LD HL,(23773) LD (p_exit),HL to_ret RET ;------------------------------------ А теперь немного полезной информации, необходимой для написания программ под SinOS: ■ Все реакции на выбор заканчиваются командой RET ■ Программы ассемблируются под адрес #C000 (49152) ■ Размер программы #4000 (16384) байт ■ Программы загружаются в страницы #14, #16, #17 ■ Желательно в Cashe попадать по кнопке Reset ■ Если нажать Reset+Symbol Shift, то SinOS откроет окно, адрес которого указан по адресу 23728 (реакция на NMI) ■ Если нажать Reset+Any Key (кроме SS, Enter) можно попасть во вторую половинку Cashe, если у вас его 32kb. ■ При загрузке программы по команде RST #10 доступен керналь. Доступ к керналю такой: RST #10 DB функция Вам доступны следующие функции: cls EQU 00 - очистка экрана без изменения атрибутов IN: - OUT: - fill EQU 01 - заливка экрана цветом IN: A - цвет OUT: - paint EQU 02 - заполнение памяти одним байтом IN: HL - адрес начала BC - размер блока-1 A - байт заполнения OUT: - fone EQU 03 - генерация фоновой картинки IN: - OUT: - window EQU 04 - открытие окна без сохранения фона IN: HL - описатель окна OUT: - window2 EQU 05 - открытие окна с сохранением фона IN: HL - описатель окна OUT: - pop_win EQU 06 - востановление фона под окном IN: - OUT: - pop_all EQU 07 - востановление фона под всеми окнами IN: - OUT: - print EQU 08 - печать строки, 00..0D - конец строки IN: HL - адрес текста DE - адрес на экране OUT: - xprint EQU 09 - печать текста, 00 - конец текста 01..0D - конец строки IN: HL - адрес текста DE - адрес на экране OUT: - down_hl EQU 10 - пересчет адреса в экране ниже на строку IN: HL - адрес на экране OUT: HL - пересчитанный адрес down_de EQU 11 - аналог down_hl, но для de IN: DE - адрес на экране OUT: DE - пересчитанный адрес de_adr EQU 12 - расчет адреса в экране IN: DE - координаты в знакоместах OUT: HL - адрес на экране DE - адрес атрибутов cancel EQU 13 - вызов окна по принципу нажатия на выбор IN: HL - адрес окна A - маркер 'open' OUT: - last_hl EQU 14 - инверсия текущей полосы выбора IN: - OUT: - fl_hl EQU 15 - изменение цвета заголовка окна IN: A - цвет заголовка OUT: - get EQU 16 - сохранение фона под курсором IN: - OUT: - put EQU 17 - прорисовка курсора IN: - OUT: - rest EQU 18 - востановление фона под курсором IN: - OUT: - read EQU 19 - чтение секторов IN: HL - адрес DE - дорожка/сектор B - количество секторов OUT: - write EQU 20 - запись секторов IN: HL - адрес DE - дорожка/сектор B - количество секторов OUT: - get_xy EQU 21 - координаты курсора в пикселях IN: - OUT: HL - координаты курсора ┌──────────────────────────────────────────────────────────────┐ `│-4-┌─────────────────────────┐ ░░▒▒▓▓██ Автор, Права ██▓▓▒▒░░ │ └───┘ └────────────────────────────────┘ Author of SinOS v1.00: .................. Disabler/DPL Copyright: ............ Disabler Production Labaratory Distribute: ................................ No Limits ┌──────────────────────────────────────────────────────────────┐ `│-5-┌──────────────────────────┐ ░░▒▒▓▓██ SetUP v2.04 ██▓▓▒▒░░ │ └───┘ └───────────────────────────────┘ Вы, наверное, уже задали вопрос, что такое этот SetUP ??? Так вот, это такая штука, которая позволяет настроить аппаратные характеристики вашего компьютера программным путем. А теперь более подробно о том, что может SetUP: 1. Выбор типов ПЗУ при условии, что Basic и Dos находятся в раз- ных ПЗУ. Вам доступно четыре основных ПЗУ (с бейсиками) и две с Dos'ом. Лично у меня так: ┌─────────┬───────────────────┬────────────────┐ │ Номер │ Нулевая │ Первая │ │ ПЗУ │ половина │ Половина │ ├─────────┼───────────────────┼────────────────┤ │ #00 │ Quick Commander │ Basic'2000 │ │ #01 │ NeOS v1.0 │ Basic'2000 │ │ #02 │ 128 Basic/91y │ 48 Basic/91y │ │ #03 │ 128 Basic/82y │ 48 Basic/82y │ ├─────────┼───────────────────┴────────────────┤ │ DOS#0 │ TR-Dos 5.03 for Honey Commander │ │ DOS#1 │ TR-Dos 5.04 turbo │ └─────────┴────────────────────────────────────┘ 2. Переключать до восьми выключателей. Семь из них поддерживает SinOS и один резервный. У меня сделано так: Lock 48kb rom.........Nop - отключить нулевой банк ПЗУ Emulate rom by cashe..Nop - эмуляция нулевого банка ПЗУ при помощи нулевого банка Cashe Write to cashe........Yep - возможность записи в Cashe Entry to cashe by.....NMI - кнопка активизации Cashe (NMI/Reset) Set black border......Yep - принудительная установка BORDER 0 Devided bright........Nop - изменение бита для Flash на яркость бумаги (раздельная яркость для Ink и Paper) Tactes per line.......228 - размер линии экрана по горизонтали в тактах (228/232) ■ SetUP включается при Reset'е в Cashe. ■ Выключается при записи в порт #FFFF или при выключении Cashe ■ Порт настроек - #FE77 ■ Порт ПЗУ - #FF77, причем есть особенность: младшие четыре бита выбирают одно из четырех ПЗУ, т.е. ноль разрешает выборку, при этом остальные биты должны быть равными единице. Четвертый бит указывают тип ПЗУ Dos. ┌──────────────────────────────────────────────────────────────┐ `│-6-┌──────────────────┐ ░░▒▒▓▓██ Контактные телефоны ██▓▓▒▒░░ │ └───┘ └───────────────────────────────────────┘ Phones: 8 (928) 91-33-007 Андрей (Disabler) 8 (903) 40-22-186 Андрей (Disabler) 8 (863) 2-404-905 Миша (Mick) ┌────────────────────────────────────────────────────────────┌─┐ │ ┌█▓▒░ ─ ─ ─ ── ─── ───░▒▓██▓▒░─── ─── ── ─ ─ ─ ░▒▓█┘ │ └─└────────────────────────────────────────────────────────────┘
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября