Середовище програмування MADL

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



PDK

Сообщений 1 страница 11 из 11

1

PDK

2

PDK.
Почну з того, що я давно, з певних причин, не займався програмуванням.
Спіймав себе на думці, що все вже забув. Причому напроч.
Програмування для мене ніяка не діяльність від слова зовсім, тому скільки
б я цим не займався, воно все одно для мене залишається лише розвагою для
початківців. -:)
Відповідно й так звані проекти мої для розваг та всіляких експериментів.
Але, якщо хтось може умудриться використовувати це для чогось більш серйозного,
то я звісно не буду проти :-)
От одного разу мені захотілось зробити, щось таке, щоб написаний код, нехай
навіть простий та дитячий, можна було б з легкістю адаптувати в інше середовище
програмування або навіть й в іншу операційну систему.
Виглядати це повинно так:
Написав я код в ТП 4.0, звісно в ТП 7.0 він запрацює без усяких коригувань,
в FreePascal можливо, щось прийдеться підлаштувати, а от в Delphi, вже
побільше треб буде адаптувати, навіть при тому, що дельфі, найбільш
паскалеподібне середовище програмування. В усьому іншому Basic, C, Asm, там
взагалі своя мнемоніка та специфіка. І от вирішив я, цю всю специфіку
відмінного від ТП, максимально 'зрівняти' на ТП, через модулі. Тобто зробити
модулі, під різні середовища, які будуть працювати 'за принципами' ТП.
Модулі, яки мають, максимально аналогічний спосіб виведення на екран,
такий же розмір екрану, таку ж кількість кольорів і таку ж відповідність
кольору та номеру. І тоді, такий код буде легше адаптувати під інше
середовище програмування, якщо використовувати такі модулі, в яких наприклад,
існують процедури типа PutPixel(X,Y,Color) і їм подібні, які часто
використовуються.
Короче, я думаю, це можна назвати такім собі, емітатором модулів ТП.
Ну на цьому, як для першого пояснення, мабуть все.
Далі розглядайте архіви з PDK самостійно.
Проект розрахований на тих, хто має уявлення, що таке програмування, в першу
чергу на мові Турбо Паскаль. В другу чергу, знайомий з іншими паскалеподібними
середовищами, такими, як TurboPascal, FreePascal, Delphi.
Архіви PDK планується викладати в хронологічному порядку. І кожен останній
архів буде вміщувати в собі попередні версії PDK, за виключенням явної втрати
актуальності якихось файлів з попередніх версій.
В першу чергу, плануються робити проби й експерименти можливої адаптації,
для таких середовищ програмування, як TurboPascal, FreePascal, Delphi,
ASM (для Колібрі, http://kolibrios.org/ru/). Скоріш за все будуть спроби
адаптації прикладів під інші компілятори і середовища.
Проект чимось схожий на проект SEFA (http://madl.frmbb.ru/viewtopic.php?id=52),
але SEFA виявився дуже складним та заплутаним, з за мого бажання зробити все
"в одному флаконі" для паскелеподібних середовищ програмування.
Код та приклади будуть використовуватись з SEFA.

PDK PDK

3

TP4_0:
Для проекту використовувався
Turbo Pascal v.4.0  02.10.1987
Контольні суми МД5 деяких файлів

f60c05a84410ebb6dc74be8ac6722f22 *ATT.BGI
afe423b369e78fc7b466f4a54cf87490 *CGA.BGI
5d484da8ccfc65373137bea07155ec78 *EGAVGA.BGI
2a2dfe6f4efa156f440d8e33c2c7713d *HERC.BGI
e76a3f50a67934ee78949a433be2e8ca *PC3270.BGI

c4ee170bbbfe042de4b7c7e931455b27 *TPC.EXE
e99202cd33e0d59449503ce070b4dde6 *TPCONFIG.EXE
4a954fe66a8d70b366c6e3157a97df32 *TPUMOVER.EXE
f38b6518084af7a4e477a1cc09ae8aa0 *TURBO.EXE
bd3c25fa208e455cd8c5f84b37da359d *UNPACK.EXE
cba67dd108b81928c28fd47c038ee348 *TINST.EXE
8e7336f04f7039ba59f5af63c00986ae *TURBO.TPL

TP7_0:
Для проекту використовувався
Turbo Pascal v.7.0
Контольні суми МД5 деяких файлів

f874e4ec7c9258f7e2739951a3535926 *ATT.BGI
78d66c9fc59175ef632d771b51472e4c *EGAVGA.BGI
7b6db74166970218272f6a0fde5754d6 *HERC.BGI
0bf5927282186d45f43f3815c01ffbe7 *IBM8514.BGI
1f23a98ddf37a2a0ac79a3e5947095c7 *PC3270.BGI

d93c01f2a7683f0f21fc0d03be69559f *TPC.EXE
9557f853e714db1cf785d37585b6b461 *TURBO.EXE
da4d05a7f5c99c8045acdddee3464094 *TURBO.TPL
2622dedcb05e31acbfa4d2e416314706 *BP.EXE
71f4380298b68cd4b936f6e13260f6c1 *BPC.EXE
5402c1ad8147f07149fb2a9dd1a69e57 *BPW.EXE

FPC:
Для проекту використовувався
Free Pascal (FPC 2.6.2)
http://www.freepascal.org/

Інсталяції та встановлені Free Pascal (FPC) різних версій
Інсталяції та встановлені Free Pascal (FPC) різних версій

Контольні суми МД5 деяких EXE-файлів FASM

c68920f0fd5c34204d1df7bd1711b6db *fp.exe
29a77b486fe9ad9d837be1f0082f38d4 *fpc.exe

PascalGUI:
Для проекту використовувався PascalGUI 4.07 arm

Встановлення PascalGUI 4.07 на мобільний.
SEFA

Скачати можете звідси:
http://forumstatic.ru/files/001b/d4/a7/79470.7z

Контольні суми МД5 деяких файлів

700b26c1e0683b68765692f696663a94 *PascalGUI_4.07_arm.apk

Delphi 7:
Для проекту використовувався
Delphi7
Контольні суми МД5 деяких файлів

c8511f91b5db01de4fbed64492efbaaa *delphi32.exe
fa843a390c598b686024b052f66a3d2b *dcc32.exe

664ba337328f59c3569a4155832474ef *BORdbg70.exe
fc3a22d7340560bbfca6c40c44a600e7 *brc32.exe
2fb16be51a5e3c853c6ade20cc445b58 *brcc32.exe
40ab75a2a71188ebe4312254e626adf6 *CABARC.EXE
b9315529dfb7c5e42ea2cae4026c5167 *convert.exe
6475283568ad278b0e4f0ac03dd85a72 *datapump.exe
4f6a2a566fbe7228d9837995b1abaf85 *dbexplor.exe
fa843a390c598b686024b052f66a3d2b *dcc32.exe
97164cfdf051aaddab7a063f04c17af6 *dcc32speed.exe
6175ddb1a607e407a9cb99e398d3fc5c *dof2want.exe
0487aae68e4a9c84af7dc0efb6c20fcd *etm70.exe
007d991b4bbaf577dfec5dbe5b2f2119 *grep.exe
cff04ef61c62ae115ea7d8d0c98713dd *imagedit.exe
ca04274e57a174ca02da42bcf1df2842 *make.exe
333ea4a1b8a04f5ecf46962c3b829f7d *mtsinst.exe
2f1db38e65018b8fe19e9a640dbb5955 *oh.exe
584fa82a369bac1d95e555cfb33847d2 *pce.exe
868bdd7986a7be161d9d51d39eaf3350 *Project1.exe
bba0a37d581b7e843d0a89131d33d5e3 *ResBuilder.exe
771cc5b8a0d40604805eba84d40bc312 *ScktSrvr.exe
fc75486a00c55484a9524ddae8d45591 *ServerInfo.exe
c6950da04d2713eef4cc82498baba655 *sqlmon.exe
25b3b024147804f0e7622f915e29873e *tasm32.exe
50d575b03d96d47ef31131df41d30fe4 *TDUMP.EXE
cddfc104962256f1e055aa491f376833 *tlibimp.exe
3c27a99fa0ad4ce88a166c2947dbfc5d *tregsvr.exe
17be1e5282a25ccb928fbe7041715444 *want.exe
e2a69edb36ccb8f0478b5ae74daee2fb *WebAppDbg.exe
0015a2e86649ea8307a6673f3113786b *WS32.EXE
0c9b9e019699beb9554c8e749c1bb1c6 *WSDLImp.exe
aa650e9aedbbb096e34420eb871565d5 *xmlmapper.exe

KolibriOS:
Для проекту використовувався
flat assembler  version 1.73.25
https://flatassembler.net/

FASM інсталяції, старі версії
FASM інсталяції, старі версії

Контольні суми МД5 деяких EXE-файлів FASM

29fd59f5d67ea2148efb798b3c99032e

c69444cf0b39babc680cba591735eb1c
12496f8894e9b540192107cb4d4da874
3d2df30aa2ef694b67c8f282bccd6411

4

00NewProect.7z - http://forumstatic.ru/files/001b/d4/a7/42025.7z

Простий приклад програми "пустишки" з модулями, який нічого не робить.

Опис файлів програми та файлів модулів.

(В дужках вказані назви файлів в залежності від середовища)

ProjectP.* (ProjectP.pas   ProjectP.dpr   ProjectP.pp  ProjectP.asm)
           - самий головний файл проекту з якого все починається, який
           стартує програму користувача, тобто викликає процедуру
           StartProgram  модулю uMain.

uMain.* (uMain.pas   Main.asm)
           - головний модуль проекту в якому пишеться програма користувача
           в процедурі StartProgram.

uPDK.* (uPDK.pas   uPDK.asm )
           - файл на який "зав'язуються" усі процедури, які використовуються
           в PDK.
           Може бути "оптимізований" використанням цих процедур "напряму"
           без цього модулю.

Надалі опис модулів та їх процедур робити не планується,
так як по можливості буду описувати прямо все в модулях.
Правда, через деякий час, пояснювальна інформація може
бути видалена й там.

5

01NewProectGraph - http://forumstatic.ru/files/001b/d4/a7/41977.7z

Проект ініціалізує (або емітує в деяких середовища) графічний
режим VGA 640х480, 16 кольорів. Очікує натиснення клавіші Q (Shift+"q")
або закриття форми та виходить з програми.

Опис файлів програми та файлів модулів.

(В дужках вказані назви файлів в залежності від середовища)

ProjectP.* (ProjectP.pas   ProjectP.dpr   ProjectP.pp  ProjectP.asm)
           - самий головний файл проекту з якого все починається, який
           стартує програму користувача, тобто викликає процедуру
           StartProgram  модулю uMain.

uMain.* (uMain.pas   Main.asm)
           - головний модуль проекту в якому пишеться програма користувача
           в процедурі StartProgram.

uPDK.* (uPDK.pas   uPDK.asm )
           - файл на який "зав'язуються" усі процедури, які використовуються
           в PDK.
           Може бути "оптимізований" використанням цих процедур "напряму"
           без цього модулю.

uTypes.* (uTypes.pas)
           - Файл використовується для "вирівнювання" назв типів данних, які
             використовуються в програмі.
             Типи даних, назви яких починаються з Opt- будуть вживатись,
             там де потрібно, щоб вони були оптимізовані під конкретне
             середовище (16 або 32 бітне тощо)
   
uCrt.* (uCrt.pas   uCrt.asm)   
          - файл на який "зав'язуються" усі процедури, які використовуються в
            модулі паскаля Crt та WinCrt.

uFORM.* (uFORM.pas   uFORM.asm)   
          - файл на який "зав'язуються" усі процедури, які виводять на екран
  або в форму.
   
uGraph.* (uGraph.pas   uGraph.asm)   
          - файл на який "зав'язуються" усі процедури, які використовуються в
  модулі паскаля Graph.
      
uMacro.asm - файл макросів функцій ОС КОЛІБРІ.

uOther.* (uOther.pas   uOther.asm)   
          - файл для функцій та процедур, які ще не визначені в якому вони
  будуть модулі або модуля ще не існує.

6

02PutPixel.7z - http://forumstatic.ru/files/001b/d4/a7/92488.7z

Проект ініціалізує (або емітує в деяких середовища) графічний
режим VGA 640х480, 16 кольорів.
Проказує приклад використання процедур
Procedure PutPixelPas(X,Y:OptInt16;Pixel:OptWord);stdCall;
{Вивід точки (пікселя) на екран}
та
procedure APM;{Application.ProcessMessages;}
яку потрібно використовувати після процедур виводу на екран,
перед опитуванням клавіатури та можливо в деяких інших ситуаціях,
в деяких середовищах програмування.
Далі...
Очікує натиснення клавіші Q (Shift+"q")
або закриття форми та виходить з програми.

Примітки.
Регулювання щодо відповідності кольорів, кольорам ТП можна
робити в константі-масиві ColorGPas, модуля uFORM.* (uFORM.pas, uFORM.asm)

На майбутнє.
Для власних проб та експериментів, використовуйте останню програму PDK,
так як,в попередніх можуть бути помилки.

В ФАСМі буде використовуватись принцип виклику процедур stdCall.
Усі данні які будуть застосовуватись при передачі в процедури та повертатись
з функцій будуть 32 бітні.
{Cardinal 0..4294967295 unsigned 32-bit}
або
{Longint -2147483648..2147483647 signed 32-bit}
в деяких випадках варто звертати увагу, на те, чи дані знакові чи беззнакові.
Як приклад PutPixelPas(X,Y:OptInt16;Pixel:OptWord);
В ФАСМ, X,Y обробляються як знакові {-2147483648..2147483647 signed 32-bit},
Pixel, - як беззнакові {0..4294967295 unsigned 32-bit}. Така тенденція буде
й надалі. Тобто, усі дані знакові та беззнакові, незалежно від їх діапазону
будуть 32 бітні.

На процедурі PutPixelPas будуть оснований вивід на екран.
Процедур діагональних ліній та кругів скоріше всього не буде, так як вони
можуть явно по різному відтворюватись на екрані в різних середовищах.
Навіть якщо процедура буде однакова. Не впевнений що круг буде однаково
виводитись на екран в ТП, Дельфі та Колібрі, так як використовує SIN та COS,
які можуть давати різні значення після коми, а отже й результат теж.
Хоча, круг треба буде спробувати. :-)

По можливості кожна процедура PDK буде "вирівнюватись" макросами модуля uPDK.*
для схожості виклику. Зверніть увагу  на виклик процедури PutPixelPas в
середовищах ТП-подібних та ФАСМу.

ТП-подібні: PutPixelPas(x,y+TS,color1)
ФАСМ:
mov eax,[Y]
add eax,[TS]
PutPixelPas  [X],eax,[Color1]

Зберігання даних регістрів, після виконання процедур не планується.
Тому, якщо вам потрібні, якісь дані в регістрах, до виконання якоїсь
процедури-PDK, зберігайте їх самостійно, наприклад, через Push/Pop, тощо.

Результат роботи програми:
http://upforme.ru/uploads/001b/d4/a7/2/958820.png

7

03Line.7z - http://forumstatic.ru/files/001b/d4/a7/93459.7z

Проект ініціалізує (або емітує в деяких середовища) графічний
режим VGA 640х480, 16 кольорів.
Проказує приклад використання процедур
procedure Line(X1,Y1,X2,Y2:OptInt16;Color:OptWord);{Вивід  лінії}

В Delphi7, процедура Line використовує процедури
    procedure LineX(X1,X2,Y:OptInt16;Color:OptWord);{Вивід горизонтальної лінії}
    procedure LineY(X,Y1,Y2:OptInt16;Color:OptWord);{Вивід вертикальної лінії}
    procedure LineD(X1,Y1,X2,Y2:OptInt16;Color:OptWord);{Вивід діагональ лінії}

Очікує натиснення клавіші Q (Shift+"q") (декілька разів, після кожного)
або закриття форми та виходить з програми.

Примітки.
Розробку 070KolibriOS під FASM (Kolibri OS) я припиняю.
Причини: Ніде толком Kolibri OS у мене не робить!
"На пряму" вона не робить!
В емуляторі QEMU з якимись "фокусами"!
В Microsoft Virtual PC теж!

http://upforme.ru/uploads/001b/d4/a7/2/278335.png
http://upforme.ru/uploads/001b/d4/a7/2/149818.png
http://upforme.ru/uploads/001b/d4/a7/2/119660.png

8

04Rectangle.7z - http://forumstatic.ru/files/001b/d4/a7/97129.7z

Проект ініціалізує (або емітує в деяких середовища) графічний
режим VGA 640х480, 16 кольорів.
Проказує приклад використання процедур
procedure Rectangle(X1,Y1,X2,Y2:OptInt16;Color:OptWord);{Малює прямокутник}

Очікує натиснення клавіші Q (Shift+"q")
або закриття форми та виходить з програми.

http://upforme.ru/uploads/001b/d4/a7/2/972070.png

9

05Bar.7z -http://forumstatic.ru/files/001b/d4/a7/80766.7z
Проект ініціалізує (або емітує в деяких середовища) графічний
режим VGA 640х480, 16 кольорів.
Проказує приклад використання процедур
procedure Bar(X1,Y1,X2,Y2:OptInt16;Color:OptWord);{Малює зафарбований прямокутник}

Очікує натиснення клавіші Q (Shift+"q")
або закриття форми та виходить з програми.

http://upforme.ru/uploads/001b/d4/a7/2/149506.png

10

06Random.7z - http://forumstatic.ru/files/001b/d4/a7/50171.7z

Проект ініціалізує (або емітує в деяких середовища) графічний
режим VGA 640х480, 16 кольорів.
Проказує приклад використання процедур

{Генератори випадкових чисел}
Var RandSeedB1:Byte;{стартове значення}
Function RandomB1:Byte;{Генератор 1, для діапазону 0..255}
Var RandSeedB2:Byte;{стартове значення}
Function RandomB2:Byte;{Генератор 2, для діапазону 0..255}
var RandSeedW1:Word;{стартове значення}
function RandomW1:Word;{Генератор 1, для діапазону 0..65535}
var RandSeedW2:Word;{стартове значення}
function RandomW2:Word;{Генератор 2, для діапазону 0..65535}

Очікує натиснення клавіші Q (Shift+"q")
або закриття форми та виходить з програми.

http://upforme.ru/uploads/001b/d4/a7/2/357836.png

11

"07Circle Ellipse Petal.7z" - http://forumstatic.ru/files/001b/d4/a7/60980.7z

В PDK додано деякі функції та процедури, а саме:

Function GetMaxX:OptInt16;{Повертає максимальне значення граф.режиму по X (639)}

Function GetMaxY:OptInt16;{Повертає максимальне значення граф.режиму по Y (479)}

Function GetPixel(X,Y:OptInt16):OptWord;{Отримати колір конкретного пікселу}

Procedure Circle(X,Y:OptInt16;Radius:OptWord;Color:OptByte);
{Малює коло X,Y - координати,Radius - радіус, Color - колір}

procedure Ellipse(X,Y:OptInt16;RadiusX,RadiusY:OptWord;Color:OptByte);
{Малює Еліпс, X,Y - координати, RadiusX,RadiusY, - радіус, Color - колір}

procedure Petal(X,Y:OptInt16;StartAngle,EndAngle,RadiusX,RadiusY:OptWord;Color:OptByte);
{Малює Дугу, X,Y - координати, Color - колір, StartAngle,EndAngle - початковий та кінцевий угол,
RadiusX,RadiusY, - радіус}

procedure ClearScreen(Color:OptByte);{Очистка екрану. Color - колір заповнення}

Ці функції та процедури є аналогом процедур та функцій Turbo Pascal, -
GetMaxX, GetMaxY, GetPixel, Circle, Ellipse, Arc.
В прикладі Procedure P07, модуля uMain, показано,
порівняння виконання цих функцій та процедур Turbo Pascal та PDK.

В модуль uTypes додано тип Real48=Real;

Також з'явився новий модуль uTest де будуть процедури які тестують усі
процедури та функції PDK. Зверніть увагу на послідовність виконання
процедур та функцій в uMain, в процедурі StartProgram.

В каталозі DOC, є каталог "Чернетки", це така собі барахолка кода
та різної всячини, яка не пішла в PDK, але колись якось може бути використана.

http://upforme.ru/uploads/001b/d4/a7/2/293224.png