يكي از دوستان كامپايل كرده بود و گفت مشكل داره من هم وقتي كد رو ديدمنقل قول:
خودت كامپايل كردي؟
چون حتماَ بايد تست بشه.(من هنوز وقت نكردم :( )
متوجه شدم كد اشتباه هست و اجرا نميشه
يكي از دوستان كامپايل كرده بود و گفت مشكل داره من هم وقتي كد رو ديدمنقل قول:
خودت كامپايل كردي؟
چون حتماَ بايد تست بشه.(من هنوز وقت نكردم :( )
متوجه شدم كد اشتباه هست و اجرا نميشه
لاو جان اخر چی شد ؟ ما هنوز نتو نستیم نه مقاله و نه بر نامه رو به درستی اجرا کنیم . یه کا ر بکن
سلام مستر جان
من راهنما رو به نت دادم تا فونت مناسب براش انتخاب كنه و روي سايت قرار بده
هنوز نت خبري نداده كه چيكار كرده
سلام
به علت اينكه تعداد مقالات زياد شده
دارم يه سري تغييرات توي صفحه مقالات ميدم
و در ضمن مقالات رو بصورت html هم میذارم به این دلیل که توی سرچ گوگل هم بیام
مشكلي ندارهنقل قول:
سلام
به علت اينكه تعداد مقالات زياد شده
دارم يه سري تغييرات توي صفحه مقالات ميدم
و در ضمن مقالات رو بصورت html هم میذارم به این دلیل که توی سرچ گوگل هم بیام
مقالات كيبورد و صحفه بندي رو چرا هنوز روي سايت قرار ندادي
Wboot رو چكار كردي ؟ چقدر طول كشيد :blink:
راست میگه مقاله ای که ترجمه کردم چی باز بینی شد ؟ این وب روت لاو چی ؟ نت جان بگو .
سلام
اين چند وقت اول درگير همون كاري كه گفتم بودم
و بعد از اونهم جلوي در سفارت هند
ولي خدا رو شكر داره حل ميشه
مقالات رو ميذارم
صبر كنيد
Mr.Maste, i wish good luck for u and your friends and i am ready to join you and help you as much as i can.have good time your friend dj_sam
نت جان دل م برات تنگ می شه فتیر . .راستی کدوم ایالت می خوای بری . برو پنجاب اونج مسلمون هستن . جای دیگه گاو پرستن . گاو و بکشی خدای نکرده زبونم لال ما بی نت می شیم . اونجا سلام منو به سیتا هم برسون :blink: :blink: دی جی سم عزیز مقاله برای شما ارسال شد . . نت جان اونجا می ری ای اینترنت پر سرعت داری این فونت فورم اصلی رو درست کن . سر فرصت . قربونت .موفق باشی . خیر پیش .
خير پيش نت عزيز
كي مي ري ؟
بازم تو اين فورم مي تونيم ببينيمت ؟
وضعيتت در رابطه با گروه چطور ؟
مقاله رو فرستاد مستر ؟نقل قول:
Mr.Maste, i wish good luck for u and your friends and i am ready to join you and help you as much as i can.have good time your friend dj_sam
موفق باشي
_Love_Coder_
سلام
تو فورم كه حتماَ ميام بالاخره هرچي باشه منم عضو اين گروه هستم
در مورد رفتن هم تقريباَ اواخر اين ماه
در مورد كاري كه داشتم انجام ميدادم هم نصفه شده
ولي تا آخر اين هفته كمتر ميتونم سر بزنم
با سلام
بد نیست اینجا رو ببینید
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
با تشکر
اين وبلاگ رو دوستي به نمايندگي از گروه ما زده بود و خواستار اون شده بود كه ما كار رو در انجا ادامه بديم اما به دلايلي ما تصميم گرفتيم كا رو در همينجا ادامه بديم و از اون دوست خواستيم اگر مايله با گروه همكاري كنه مي تونه اخبار كارهاي گروه رو در اونجا قرار بده كه ظاهرا ايشون دارند به تنهاي فعاليت مي كنندنقل قول:
با سلام
بد نیست اینجا رو ببینید
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
با تشکر
سلام
ببخشيد
اگه ميشه در مورد Gdt يه توضيح بديد
ممنون
سلام پارس گيگا خوشحالم كه به جمع ما پيوستي در مورد سوالت چشم حتماَ
در مورد آقا مهدي .... نميدونم خودشون توضيح بدن ؟؟؟؟؟
سلام پارس ببين اصلاَ كلاَ توصيفگرها descriptionها چی هستند؟
در واقع descriptionها جایی هستند که آدرس واقعی را به حالت حافظت شده(مجازی) تبدیل کرده و در خود نگه میدارند.
خب حال GDT یعنی چه؟
G مخفف Global یعنی سراسری
D مخفف decriptor
T مخفف Table
منظور جدول همگانی توصیفگر
که این جدول در اختیار سیستم عامل بوده و در واقع سیستم عامل اولین برنامه ای هست که به حالت حفاظت شده دسترسی دارد و به نقاطی در این حالت دسترسی دارد که به آن ring 0 میگویند.
و وظیفه این جدول تبدیل آدرسهای واقعی و مجازی به یکدیگر برای سیستم عامل میباشد.
برای اطلاع بیشتر مقاله قسمت دوم حالت حفاظت شده را بخون
سلام پارس گيگانقل قول:
سلام
ببخشيد
اگه ميشه در مورد Gdt يه توضيح بديد
ممنون
خوشحالم كه به جمع ما پيوستي
در مورد GDT هم به اختصار نت توضيح داد مي توني تو قسمت مقالات مقاله حالت حفاظت رو مطالعه كني
براي همكاري هم بيشتر با گروه در تماس باش
موفق باشيد
AAKH1361
خيلي ممنون
خب آقا تا حالا چيزي هم نوشته ايد
سلام
ببخشيد يه سوال ديگه
اول a20 به چه دردی می خوره
دوم pmode بدون فعال کردن a20 چگونه است(یعنی آیا تفاوتی داره با فعال کردنش)
سوم اگر در real mode فعالش کنیم چه اتفاقی می افتد
سلام باز هم ببخشید
مگه وقتی بایوس سکتور را بار می کند در حالت حقیقی نیستسم
پس چرا بهضی کدها از [bits30] در ابتدای کدشون استفاده می کنند
مگه به حالت 32 بیتی منتقل شده اند
خودم جدس میزنم این کدها باید باgrub بار شن؟
سلام
پارس گيگا عزيز اگر سوالت رو تو گروه مطرح كني بهتر هست و به طور كامل جوابت رو ميدم
چون ممكنه ديگران هم اين سوال براشون پيش بياد و تو اونجا جوابش رو پيدا كنند
ما اينجا بيشتر براي هماهنگي ميايم
منظورتون كجاست؟
تو امضام نوشته گروه طراي سيستم عامل روش كليك كن
نت عزيز من امروز جمعه خونه بودم منتظر تماست
چرا تماس نگرفتي ؟
ببخشيد ها !
چرا نوشتي گروه طراي سيستم عامل
امیدوارم موفق و پیروز باشید.
متوجه نشدم يعني چي !نقل قول:
ببخشيد ها !
چرا نوشتي گروه طراي سيستم عامل
ممنوننقل قول:
امیدوارم موفق و پیروز باشید.
سلام
من يک شبيه ساز کنترل پنجره ي خيلي ساده نوشتم
خوشحال مي شو اگه:
1-نظر بديد
2-کاملش کنيد
راستش در نمايش پيکسل ها کند است
مي دونم اگه مستقيم در حافظه گرافيکي بنويسم سرعتس بيشتر مي شه
اما کار با vga را بلد نيستم
کد:/************************************
** ParsGIGA
** Windows simulator
************************************/
#include <Dos.h>
#include <Bios.h>
#include <Stdio.h>
#include <Conio.h>
#include <Stdlib.h>
#include <Graphics.h>
#define MAX_WIN 100
#define TITLE_HEIGHT 20
#define TITLE_UP 4
#define TITLE_SIDES 4
typedef char* string;
typedef short char bool;
typedef int IDwnd;
struct _Mouse
{
int X,Y,Button;
};
typedef struct _Mouse Mouse;
struct _Window
{
int Width,Height,StartX,StartY;
char Color;
string Text;
string Type;
void (*proc)(int);
};
typedef struct _Window Window;
int CounterWin=0;
Window *UserWins[MAX_WIN];
int Privilege[MAX_WIN];
/////////////////////////////////
void LoadGraph();
void UnLoadGraph();
IDwnd CreateWin(Window);
bool RemoveWin(IDwnd);
void ShowWin(Window*);
void Proc();
void ShowMouse();
void HideMouse();
Mouse GetMouse();
IDwnd FindWin(int,int);
IDwnd FindWin(Window*);
void ActiveWin(IDwnd);
void MoveWin(IDwnd,Mouse,Mouse);
void SetPrivilege(IDwnd);
void Refrash();
bool IsSelectedTitle(Window*,Mouse);
void FillRect(int,int,int,int,int);
///-- User functions
void Kernel();
void MyProc(int);
void main()
{
LoadGraph();
Kernel();
UnLoadGraph();
}
////////////////////////////////
void Kernel()
{
/////----------
Window w1;
w1.StartX=10;
w1.StartY=10;
w1.Width=100;
w1.Height=100;
w1.Color=4;
w1.Text="MyWin";
w1.proc=&(MyProc);
w1.Type=0;
int id1=CreateWin(w1);
Window w2;
w2.StartX=50;
w2.StartY=50;
w2.Width=150;
w2.Height=150;
w2.Color=5;
w2.Text="Notepad";
w2.proc=&(MyProc);
w2.Type=0;
int id2=CreateWin(w2);
Window w3;
w3.StartX=80;
w3.StartY=80;
w3.Width=200;
w3.Height=300;
w3.Color=6;
w3.Text="My computer";
w3.proc=&(MyProc);
w3.Type=0;
int id3=CreateWin(w3);
///////---------------------
Proc();
}
////////////////////////////////
void MyProc(int msg)
{
sound(100);
delay(100);
nosound();
}
///////////////////////////////////////////////////////////
////////////////////////////////
void LoadGraph()
{
puts("Switch to graphics mode");
int gdrive=DETECT,gmode=0;
initgraph(&gdrive,&gmode,"C:\\TC\\BGI");
}
////////////////////////////////
void UnLoadGraph()
{
closegraph();
puts("Switch to text mode");
}
////////////////////////////////
IDwnd CreateWin(Window w)
{
/* Allocation some memory for save window information */
if(CounterWin!=MAX_WIN)
UserWins[CounterWin]=(Window*)malloc(sizeof(Window));
if(UserWins[CounterWin]==NULL)
{
printf("Memory error");
getch();
exit(0);
}
UserWins[CounterWin]->Width=w.Width;
UserWins[CounterWin]->Height=w.Height;
UserWins[CounterWin]->StartX=w.StartX;
UserWins[CounterWin]->StartY=w.StartY;
UserWins[CounterWin]->Color=w.Color;
UserWins[CounterWin]->Text=w.Text;
UserWins[CounterWin]->Type=w.Type;
UserWins[CounterWin]->proc=w.proc;
SetPrivilege(CounterWin);
ShowWin(UserWins[CounterWin]);
return CounterWin++;
}
////////////////////////////////
bool RemoveWin(IDwnd id)
{
CounterWin--;
free(UserWins[id]);
return 1;
}
////////////////////////////////
void ShowWin(Window* w)
{
int bgcolor=w->Color;
int aticolor=1;
int oticolor=9;
int ticolor;
HideMouse();
// Draw background of window
setcolor(bgcolor);
setfillstyle(1,bgcolor);
bar(w->StartX+1,
w->StartY+1,
(w->StartX+w->Width-1),
(w->StartY+w->Height-1));
floodfill(w->StartX+2,w->StartY+2,bgcolor);
// draw title of window
int curid=FindWin(w);
if(Privilege[0]==curid)
ticolor=aticolor;
else
ticolor=oticolor;
setcolor(ticolor);
setfillstyle(1,ticolor);
rectangle(w->StartX+TITLE_SIDES,
w->StartY+TITLE_UP,
(w->StartX+w->Width-TITLE_SIDES),
(w->StartY+TITLE_HEIGHT));
floodfill(w->StartX+TITLE_SIDES+1,w->StartY+TITLE_SIDES+1,ticolor);
// Show text of window
setcolor(15);
outtextxy(w->StartX+5,w->StartY+8,w->Text);
ShowMouse();
}
///////////////////////////////
/*
void FillRect(int X,int Y,int Width,int Height,int Color)
{
unsigned char far* video=(unsigned char far*)0XA0000000L;
for(int y=Y;y<=Height;y++)
for(int x=X;x<=Width;x++)
// ??? video[(y<<8)+(y<<6)+x]=Color;
}
*/
///////////////////////////////
void ShowMouse()
{
asm Mov ax,0x1;
asm Int 0x33
}
////////////////////////////////
void HideMouse()
{
asm Mov ax,0x2;
asm Int 0x33
}
////////////////////////////////
Mouse GetMouse()
{
union REGS r;
Mouse mouse;
r.x.ax=0x3;
int86(0x33,&r,&r);
mouse.X=r.x.cx;
mouse.Y=r.x.dx;
mouse.Button=r.x.bx;
return mouse;
}
////////////////////////////////
void Proc()
{
int id;
ShowMouse();
setbkcolor(3);
while(1)
{
// Get Keyboard status
if(kbhit())
if((getch())==27)
break;
// Get Mouse status
Mouse m=GetMouse();
if(m.Button==0x01)
{
// Active window
id=FindWin(m.X,m.Y);
if(id!=-1)
ActiveWin(id);
// Move window
if(IsSelectedTitle(UserWins[id],m))
{
Mouse n=GetMouse();
if(m.X!=n.X || m.Y!=n.Y)
{
Mouse mnew,mold;
mold.X=m.X;
mold.Y=m.Y;
do
{
mnew=GetMouse();
MoveWin(id,mold,mnew);
mold.X=mnew.X;
mold.Y=mnew.Y;
}while(mnew.Button==0x01);
}
}
}
}
HideMouse();
for(int c=0;c<=CounterWin;c++)
RemoveWin(c);
}
////////////////////////////////
IDwnd FindWin(int X,int Y)
{
int winid=-1;
for(int i=0;i<=CounterWin;i++)
{
int id=Privilege[i];
if(X>=UserWins[id]->StartX &&
Y>=UserWins[id]->StartY &&
X<=(UserWins[id]->Width+UserWins[id]->StartX) &&
Y<=(UserWins[id]->Height+UserWins[id]->StartY))
{
winid=id;
break;
}
}
return winid;
}
////////////////////////////////
IDwnd FindWin(Window *w)
{
for(int i=0;i<=CounterWin;i++)
{
int id=Privilege[i];
if(UserWins[id]==w)
return id;
}
return -1;
}
////////////////////////////////
void ActiveWin(IDwnd id)
{
if(Privilege[0]!=id)
{
ShowWin(UserWins[id]);
SetPrivilege(id);
}
}
////////////////////////////////
void SetPrivilege(IDwnd id)
{
int pri=-1;
//---------- Search
for(int i=0;i<=CounterWin;i++)
{
if(Privilege[i]==id)
{
pri=i;
break;
}
}
//-- If find
if(pri!=-1)
{
// Replce privileges
for(int j=pri-1;j>=0;j--)
Privilege[j+1]=Privilege[j];
Privilege[0]=id;
}
//-- Else ,then is new
else
{
for(int high=CounterWin;high>=0;high--)
Privilege[high+1]=Privilege[high];
Privilege[0]=id;
}
}
////////////////////////////////
void MoveWin(IDwnd id,Mouse Oldm,Mouse Newm)
{
int OffsetX=Newm.X-Oldm.X;
int OffsetY=Newm.Y-Oldm.Y;
UserWins[id]->StartX+=OffsetX;
UserWins[id]->StartY+=OffsetY;
Refrash();
}
////////////////////////////////
void Refrash()
{
clearviewport();
for(int i=CounterWin;i>=0;i--)
ShowWin(UserWins[Privilege[i]]);
}
///////////////////////////////////////
bool IsSelectedTitle(Window* w,Mouse m)
{
if(w->StartX+TITLE_SIDES <= m.X &&
w->StartY+TITLE_UP <= m.Y &&
(w->StartX+w->Width-TITLE_SIDES) >= m.X &&
(w->StartY+TITLE_HEIGHT) >= m.Y)
return 1;
return 0;
}
سلام ببخشيد
فيلد limit در رکورد توصیفگر در حالت محافظت شده
حاوی اندازه ی سگمنت است یا آدرس پایان آن؟
اي ول درست زدي وسط خال.نقل قول:
نوشته شده توسط Harry Potter
قشنگ بودش شايد با كمي توسعه بشه تو كارمون ازش استفاده كردنقل قول:
1-نظر بديد
بجاي اينكه با هر حركت كل صحفه دوباره رسم بشه بهتره فقط شي اي كه حركت داده ميشه رو دوباره رسم كني
بعد از پايان نوشتن يك بوت سكتور مناسب كار توسعه يك كتابخانه رو براي پروژه مون شروع ميكنم بعدا ميشه از اين كتابخانه براي توسعه اش استفاده كردنقل قول:
2-کاملش کنيد
اندازه سگمنتنقل قول:
سلام ببخشيد
فيلد limit در رکورد توصیفگر در حالت محافظت شده
حاوی اندازه ی سگمنت است یا آدرس پایان آن؟
قدر زر زرگر شناسد .....نقل قول:
نقل قول:
نوشته شده توسط Harry Potter
کلا با این مسئله مخالفم ... چون چرخ رو که دوباره اختراع نمی کنن!
مطمئنا سیستم عامل ملی هم چیزی می شود مثل خودروی ملی ... غیر از اینه ؟
اي ول درست زدي وسط خال.
سلام پارس ممنون كد جالبي هست ولي من هنوز خودم بصورت عملي تستش نكردم ولي تو كدت از توابع كتابخانه اي داس استفاده كردي
اميدوارم بتونيم يه راه حلي واسه اين مشكل توي كارمون پيدا كنيم
در مورد اين بنده خدا فكر براي خالي نبودن عريضه همچين چيزي رو پروندن
در مورد سنشون هم فكر كنم ايشون 16 نهايت 17 سالشون هست و بقول قديميها فحش بچه صلواته!
شرمنده
واقعا مشكل شما نوشتن bootsector هستش؟
نه.
ولي شايد بهتر باشه نظر لاو رو هم در اين رابطه بدونيم.
درضمن من يه مقاله رو سايت دارم فكر كنم خونده باشي
بعدا تریب نوشتن یک کتابخانه رو می دم البته یک کتابخانه 32 بیتینقل قول:
اميدوارم بتونيم يه راه حلي واسه اين مشكل توي كارمون پيدا كنيم
نه عزیزم بوت سکتور که نوشتنش 20 دقیقه بیشتر نیست !نقل قول:
شرمنده
واقعا مشكل شما نوشتن bootsector هستش؟
ما بیشتر داریم مقالات اموزشی ارائه میدیم
هنوز کد نویسی اصلی شروع نشده
شاید چون مقاله هامون اکثرا در این زمینه هست چنین برداشتی کردی
فكر كنم يك ماه پيش بود كه گفتم قرار سورس يك برنامه چند ريسماني تحت داس رو كه خودم نوشتم براتون قرار بدم
حالا تصميم گرفتم كد رو براتون قرار بدم
البته الگوريتم زمان بنديش من دراوردي هست :happy: ولي بازم خوب جواب ميده
و بيشتر مايل به تخصيص زمان بيشتر به Task های با اولویت تر موجود هست
این برنامه رو با Turbo C 3.0 تحت داس کامپایل کنید اگر کار نکرد نوع مدل حافظه رو به Small یا medium تغییر بدید
این یک نمونه ازمایشی بود اما من بنا به مشکلاتی که داشتم روش دیگه کار نکردم
شرمنده که کد ها تمیز نیست چون دیگه رو این برنامه کار نکردم و کدهاش رو مرتب نکردم
کد یک برنامه چند ریسمانی تحت داس :
کد:#include <dos.h>
#include <graphics.h>
#include <math.h>
#include <string.h>
#include <mem.h>
#include <alloc.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define byte unsigned char
#define word unsigned int
#define dword unsigned long
#define Pointerw word *
#define Pointerb byte *
#define LocateSaveBaseSegment 0x6A000000
#define MaxCpu 15
#define SizeStack 0x150
#define LSBS (Pointerw) (LocateSaveBaseSegment)
#define INTR 0X8 /* The clock tick interrupt */
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
// Define Graphics
#define ScreenText (Pointerw) (0xB8000000L)
#define ScreenVideo (Pointerb) (0xA0000000L)
const nn= 250;
const WindowXX = 175;
const WindowYY = 110;
const Header = 1;
enum status {Create,Pause,Run,Dead};
enum SIGNAL {SIG_RESTART,SIG_DEAD};
enum {Very_Low=1*1,Low=1*3,Meddium=1*5,High=1*7,Very_High=1*9};
void interrupt ( *oldhandler)(__CPPARGS);
struct window
{
word MainXX,MainYY;
word X,Y;
word XX,YY;
Pointerw StartScr;
};
struct VCpu
{
word ds,es;
Pointerb Address;
Pointerb AddressTemp;
Pointerw StackPtr;
Pointerw StackTemp;
dword Count;
dword Run;
byte Status;
byte BaseSpeed;
byte SpeedCurrent;
};
struct TaskInfo
{
struct window Win;
struct VCpu Cpu;
};
struct AllData
{
dword Count;
byte VCpuEnable;
byte CurrentCpu;
word TempDs,TempEs,TempSs;
TaskInfo Task[MaxCpu];
};
struct AllData Base;
void Task0();
void Task1();
void Task2();
void Task3();
void Task4();
void Task5();
void Task6();
void Task7();
void Task8();
void Task9();
void Task10();
void Task11();
void Task12();
void Task13();
void Task14();
void CreateTask(byte n,void ( T)(),Pointerw Ss=0,word Ds=0,word Es=0);
void SetTask();
void JmpTask(byte n);
void PointToPoint(word x,word y);
void CircleFill(word x,word y);
void Circle(word x,word y);
void Line(word x,word y);
void LineDown(word x,word y);
void LineRight(word x,word y);
void Demo(word x,word y,byte n);
void SetTask(byte nTask,void (T)(),Pointerb Sscr,word XX,word YY,byte Speed)
{
CreateTask(nTask,T);
Base.Task[nTask].Win.StartScr=(Pointerw)Sscr;
Base.Task[nTask].Win.X=0;
Base.Task[nTask].Win.Y=0;
Base.Task[nTask].Win.XX=XX;
Base.Task[nTask].Win.YY=YY;
Base.Task[nTask].Win.MainXX=320;
Base.Task[nTask].Win.MainYY=200;
Base.Task[nTask].Cpu.Status=Run;
Base.Task[nTask].Cpu.BaseSpeed=Speed;
Base.Task[nTask].Cpu.SpeedCurrent=Speed;
};
void Signal(SIGNAL Sig)
{
//Save Segment VCpu Current
asm cli
asm push es
asm push ds
//Goto Kernel Mode
_AX=*LSBS;
_DS=_AX;
_ES=_AX;
switch(Sig)
{
/*
case SIG_RESTART:
{
Base.Task[Base.CurrentCpu].Cpu.Address=Base.Task[Base.CurrentCpu].Cpu.AddressTemp;
Base.Task[Base.CurrentCpu].Cpu.StackPtr=Base.Task[Base.CurrentCpu].Cpu.StackTemp;
*(--(Base.Task[Base.CurrentCpu].Cpu.StackPtr))=0x3246; // Flags
*(--(Base.Task[Base.CurrentCpu].Cpu.StackPtr))=FP_SEG(Base.Task[Base.CurrentCpu].Cpu.Address); // Cs
*(--(Base.Task[Base.CurrentCpu].Cpu.StackPtr))=FP_OFF(Base.Task[Base.CurrentCpu].Cpu.Address); // Ip
Base.Task[Base.CurrentCpu].Cpu.StackPtr-=4;
*(--Base.Task[Base.CurrentCpu].Cpu.StackPtr)=Base.Task[Base.CurrentCpu].Cpu.es;
*(--Base.Task[Base.CurrentCpu].Cpu.StackPtr)=Base.Task[Base.CurrentCpu].Cpu.ds;
Base.Task[Base.CurrentCpu].Cpu.StackPtr-=2;
*(--Base.Task[Base.CurrentCpu].Cpu.StackPtr)=(SizeStack>>1)-8;
asm pop ds
asm pop es
asm sti
JmpTask(Base.CurrentCpu);
// printf("Restart VCpu %i\n",Base.CurrentCpu);
break;
};
*/
case SIG_DEAD:
{
Base.VCpuEnable--;
Base.Task[Base.CurrentCpu].Cpu.Status=Dead;
free((void *)Base.Task[Base.CurrentCpu].Cpu.StackTemp);
char s[50];
byte n=getcolor();
setcolor(0);
sprintf(s,"Dead Virtual Cpu %i",Base.CurrentCpu);
outtextxy(20,470,"ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ");
setcolor(15);
outtextxy(20,470,s);
setcolor(n);
break;
};
};
asm pop ds
asm pop es
asm sti
for(;;);
};
void DeadTask(byte n)
{
if(Base.Task[n].Cpu.Status!=Dead)
{
free((void *)Base.Task[n].Cpu.StackTemp);
Base.VCpuEnable--;
Base.Task[n].Cpu.Status=Dead;
}
// for(;;);
};
void DeadTaskAll()
{
byte nCpuDead;
for(nCpuDead=0;nCpuDead<MaxCpu;nCpuDead++)
{
// if(Base.Task[nCpuDead].Cpu.Status!=0)
{
DeadTask(nCpuDead);
}
}
gotoxy(1,25);
printf("\nDEAD ALL TASK !!\n");
delay(500);
printf("System Shut Down\n");
delay(500);
};
void InitTask()
{
Base.CurrentCpu=0;
// Main Task
SetTask(0,0,0,0,0,Very_Low);
// Virtual Task
SetTask(1,Task1,ScreenVideo,0,0,Meddium);
SetTask(2,Task2,ScreenVideo,0,0,Very_High);
SetTask(3,Task3,ScreenVideo,0,0,High);
SetTask(4,Task4,ScreenVideo,0,0,Very_Low);
SetTask(5,Task5,ScreenVideo,0,0,Low);
SetTask(6,Task6,ScreenVideo,0,0,Meddium);
SetTask(7,Task7,ScreenVideo,0,0,Very_Low);
SetTask(8,Task8,ScreenVideo,0,0,High);
SetTask(9,Task9,ScreenVideo,0,0,Low);
// SetTask(10,Task10,ScreenVideo,0,0,Meddium);
// SetTask(11,Task11,ScreenVideo,0,0,High);
// SetTask(12,Task12,ScreenVideo,0,0,Very_High);
*LSBS=_DS;
};
byte NextVirtualCpu()
{
byte UpSpeed=0,nVCpu=255,a;
// Find High Task To Run
for (a=0;a<MaxCpu;a++)
{
if(Base.Task[a].Cpu.Status==Run)
{
if(Base.Task[a].Cpu.SpeedCurrent>=UpSpeed)
{
UpSpeed=Base.Task[a].Cpu.SpeedCurrent;
nVCpu=a;
}
};
}
// Add Speed To All Task No Add To Task Select
for (a=0;a<MaxCpu;a++)
{
if(Base.Task[a].Cpu.Status==Run)
{
if(a!=nVCpu)
{
Base.Task[a].Cpu.SpeedCurrent++;
};
}
}
// Restore SpeedCurrent To BaseSpeed
Base.Task[nVCpu].Cpu.SpeedCurrent=Base.Task[nVCpu].Cpu.BaseSpeed;
// Base.CurrentCpu++;
// if(Base.CurrentCpu>=MaxCpu)Base.CurrentCpu=0;
return nVCpu;// Base.CurrentCpu;
};
void interrupt ChangeTask(__CPPARGS)
{
asm cli
// Start Save And Change Task
_AX=*(Pointerw)LSBS;
asm mov es,ax
asm mov ds,ax
// Save Task Stack And All Data In Stack Current
Base.Task[Base.CurrentCpu].Cpu.StackPtr=(Pointerw)MK_FP(_SS,_SP);
Base.Task[Base.CurrentCpu].Cpu.Run++;
Base.Count++;
Base.CurrentCpu=NextVirtualCpu();;
// End Load And Change Task
// Restore All Register In Task And Set New Stack
_DX=FP_SEG(Base.Task[Base.CurrentCpu].Cpu.StackPtr);
_AX=FP_OFF(Base.Task[Base.CurrentCpu].Cpu.StackPtr);
asm mov ss,dx
asm mov sp,ax
asm sti
// Set Signal To Enable Timer For Next Run
asm push ax
asm mov al,0x20
asm out 0x20,al
asm pop ax
// oldhandler();
}
void CreateTask(byte n,void ( T)(),Pointerw Ss,word Ds,word Es)
{
Pointerw StackPtr;
static byte CounterInitStack=0;
if(Ss==0)
{
if((StackPtr=(Pointerw)malloc(SizeStack))==NULL)
{
for(;CounterInitStack!=0;CounterInitStack--)
{
DeadTask(CounterInitStack);
}
printf("No Engone Space For Stack Task \n");
exit(0);
}
} else StackPtr=Ss;
Base.VCpuEnable++;
CounterInitStack++;
Base.Task[n].Cpu.Address=(Pointerb)T;
Base.Task[n].Cpu.StackPtr=StackPtr;
Base.Task[n].Cpu.StackTemp=StackPtr;
Base.Task[n].Cpu.StackPtr+=(SizeStack>>1);
*(--(Base.Task[n].Cpu.StackPtr))=0x3246; // Flags
*(--(Base.Task[n].Cpu.StackPtr))=FP_SEG(Base.Task[n].Cpu.Address); // Cs
*(--(Base.Task[n].Cpu.StackPtr))=FP_OFF(Base.Task[n].Cpu.Address); // Ip
*(--(Base.Task[n].Cpu.StackPtr))=0; // Ax
*(--(Base.Task[n].Cpu.StackPtr))=0; // Bx
*(--(Base.Task[n].Cpu.StackPtr))=0; // Cx
*(--(Base.Task[n].Cpu.StackPtr))=0; // Dx
if(Es==0) *(--(Base.Task[n].Cpu.StackPtr))=_ES; // es
else *(--(Base.Task[n].Cpu.StackPtr))=Es; // es
if(Ds==0) *(--(Base.Task[n].Cpu.StackPtr))=_DS; // ds
else *(--(Base.Task[n].Cpu.StackPtr))=Ds; // ds
*(--(Base.Task[n].Cpu.StackPtr))=0; // DI
*(--(Base.Task[n].Cpu.StackPtr))=0; // SI
*(--(Base.Task[n].Cpu.StackPtr))=(SizeStack>>1)-8; // BP
Base.Task[n].Cpu.ds=*(Base.Task[n].Cpu.StackPtr+3);
Base.Task[n].Cpu.es=*(Base.Task[n].Cpu.StackPtr+4);
};
void JmpTask(byte n)
{
_DX=FP_SEG(Base.Task[n].Cpu.StackPtr);
_AX=FP_OFF(Base.Task[n].Cpu.StackPtr);
asm mov ss,dx
asm mov sp,ax
asm sti
// Set Signal To Enable Timer For Next
asm push ax
asm mov al,0x20
asm out 0x20,al
asm pop ax
asm pop bp
asm pop di
asm pop si
asm pop ds
asm pop es
asm pop dx
asm pop cx
asm pop bx
asm pop ax
asm iret
};
void InitTimer(word a)
{
asm cli
asm mov bx,a
asm mov ax,0x36
asm out 0x43,ax
asm mov ax,bx
asm out 0x40,al
asm xchg al,ah
asm out 0x40,al
asm sti
};
static char * GetSpeed(byte ncpu)
{
static char s[25]={0,};
switch(Base.Task[ncpu].Cpu.BaseSpeed)
{
case Very_Low:
{
strcpy(s,"Very Low");
break;
};
case Low:
{
strcpy(s,"Low");
break;
};
case Meddium:
{
strcpy(s,"Meddium");
break;
};
case High:
{
strcpy(s,"High");
break;
};
case Very_High:
{
strcpy(s,"Very High");
break;
};
};
return s;
};
void PrintDataTask(word x,word y,byte n)
{
char s[250]={0,};
sprintf(s,"Task %u | Run = %4u | Count = %6u| Speed %10s | %%%u\n",n,(word)Base.Task[n].Cpu.Run,(word)Base.Task[n].Cpu.Count,GetSpeed(n),(word) (((float)Base.Task[n].Cpu.Run/((float)Base.Count/(float)100))) );
outtextxy(x,y,s);
};
void Task1()
{
Demo(20,16,9);
// Dead Task !!!!!
// Set Signal To Kernel For Kill This Task
Signal(SIG_DEAD);
};
void Task2()
{
Demo(20*2+WindowXX,16,1);
// Dead Task !!!!!
// Set Signal To Kernel For Kill This Task
Signal(SIG_DEAD);
};
void Task3()
{
Demo(20*3+WindowXX*2,16,2);
// Dead Task !!!!!
// Set Signal To Kernel For Kill This Task
Signal(SIG_DEAD);
};
void Task4()
{
Demo(20,16*3+WindowYY,3);
// Dead Task !!!!!
// Set Signal To Kernel For Kill This Task
Signal(SIG_DEAD);
};
void Task5()
{
Demo(20*2+WindowXX,16*3+WindowYY,4);
// Dead Task !!!!!
// Set Signal To Kernel For Kill This Task
Signal(SIG_DEAD);
};
void Task6()
{
Demo(20*3+WindowXX*2,16*3+WindowYY,5);
// Dead Task !!!!!
// Set Signal To Kernel For Kill This Task
Signal(SIG_DEAD);
};
void Task7()
{
Demo(20,16*5+WindowYY*2,6);
// Dead Task !!!!!
// Set Signal To Kernel For Kill This Task
Signal(SIG_DEAD);
};
void Task8()
{
Demo(20*2+WindowXX,16*5+WindowYY*2,7);
// Dead Task !!!!!
// Set Signal To Kernel For Kill This Task
Signal(SIG_DEAD);
};
void Task9()
{
Demo(20*3+WindowXX*2,16*5+WindowYY*2,8);
// Dead Task !!!!!
// Set Signal To Kernel For Kill This Task
Signal(SIG_DEAD);
};
void CircleFill(word x,word y)
{
static word X,Y,StartX,StartY,XX=WindowXX,YY=WindowYY,Raidus,OldX,OldY;
static byte Color=rand()%getmaxcolor(),ncpu=0;
static char fx=1,fy=1;
asm push ds
asm push es
_AX=*LSBS;
_DS=_AX;
_AX=Base.CurrentCpu;
asm pop es
asm pop ds
ncpu=_AX;
char s[40]={0,};
StartX=x;
StartY=y;
asm cli
setcolor(ncpu);
rectangle(StartX-1,StartY-1-15,StartX+XX+1,StartY-1);
rectangle(StartX-1,StartY-1,StartX+XX+1,StartY+YY+1);
if (Header)
{
sprintf(s,"Task %i Speed %s",ncpu,GetSpeed(ncpu));
outtextxy(StartX,StartY-13,s);
}
Raidus=rand()%15;
X=(rand()%(XX-Raidus))+StartX+Raidus;
Y=(rand()%(YY-Raidus))+StartY+Raidus;
OldX=X;OldY=Y;
asm sti
for(;(dword)Base.Task[ncpu].Cpu.Count<=(dword)nn*nn;)
{
X+=fx;
Y+=fy;
if (X+Raidus>=(StartX+XX))fx=-1;
if (Y+Raidus>=(StartY+YY))fy=-1;
if (X-Raidus<=(StartX))fx=1;
if (Y-Raidus<=(StartY))fy=1;
asm cli;
if(Color==15)Color=rand()%getmaxcolor();
setcolor(Color++);
circle(X,Y,Raidus);
asm sti;
OldX=X;OldY=Y;
Base.Task[ncpu].Cpu.Count++;
}
};
void Circle(word x,word y)
{
static word X,Y,StartX,StartY,XX=WindowXX,YY=WindowYY,Raidus,OldX,OldY;
static byte Color=rand()%getmaxcolor(),ncpu=0;
static char fx=1,fy=1;
asm push ds
asm push es
_AX=*LSBS;
_DS=_AX;
_AX=Base.CurrentCpu;
asm pop es
asm pop ds
ncpu=_AX;
char s[40]={0,};
StartX=x;
StartY=y;
asm cli
setcolor(ncpu);
rectangle(StartX-1,StartY-1-15,StartX+XX+1,StartY-1);
rectangle(StartX-1,StartY-1,StartX+XX+1,StartY+YY+1);
if (Header)
{
sprintf(s,"Task %i Speed %s",ncpu,GetSpeed(ncpu));
outtextxy(StartX,StartY-13,s);
}
Raidus=rand()%15;
X=(rand()%(XX-Raidus))+StartX+Raidus;
Y=(rand()%(YY-Raidus))+StartY+Raidus;
OldX=X;OldY=Y;
asm sti
for(;(dword)Base.Task[ncpu].Cpu.Count<=(dword)nn*nn;)
{
X+=fx;
Y+=fy;
if (X+Raidus>=(StartX+XX))fx=-1;
if (Y+Raidus>=(StartY+YY))fy=-1;
if (X-Raidus<=(StartX))fx=1;
if (Y-Raidus<=(StartY))fy=1;
asm cli;
if(Color==15)Color=rand()%getmaxcolor();
setcolor(0);
circle(OldX,OldY,Raidus);
setcolor(Color++);
circle(X,Y,Raidus);
asm sti;
OldX=X;OldY=Y;
Base.Task[ncpu].Cpu.Count++;
}
};
void Line(word x,word y)
{
static word X,Y,X2,Y2,StartX,StartY,XX=WindowXX,YY=WindowYY;
static byte Color,ncpu;
char s[40]={0,};
asm push ds
asm push es
_AX=*LSBS;
_DS=_AX;
_AX=Base.CurrentCpu;
asm pop es
asm pop ds
ncpu=_AX;
StartX=x;
StartY=y;
asm cli
setcolor(ncpu);
rectangle(StartX-1,StartY-1-15,StartX+XX+1,StartY-1);
rectangle(StartX-1,StartY-1,StartX+XX+1,StartY+YY+1);
if (Header)
{
sprintf(s,"Task %i Speed %s",ncpu,GetSpeed(ncpu));
outtextxy(StartX,StartY-13,s);
}
asm sti
for(;(dword)Base.Task[ncpu].Cpu.Count<=(dword)nn*nn;)
{
asm cli;
X=rand()%XX+StartX;
Y=rand()%YY+StartY;
X2=rand()%XX+StartX;
Y2=rand()%YY+StartY;
setcolor(Color++);
line(X,Y,X2,Y2);
asm sti
Base.Task[ncpu].Cpu.Count++;
}
};
void PointToPoint(word x,word y)
{
static word X,Y,StartX,StartY,XX=WindowXX,YY=WindowYY;
static byte Color,ncpu;
char s[40]={0,};
asm push ds
asm push es
_AX=*LSBS;
_DS=_AX;
_AX=Base.CurrentCpu;
asm pop es
asm pop ds
ncpu=_AX;
StartX=x;
StartY=y;
asm cli
setcolor(ncpu);
rectangle(StartX-1,StartY-1-15,StartX+XX+1,StartY-1);
rectangle(StartX-1,StartY-1,StartX+XX+1,StartY+YY+1);
if (Header)
{
sprintf(s,"Task %i Speed %s",ncpu,GetSpeed(ncpu));
outtextxy(StartX,StartY-13,s);
}
asm sti
for(;(dword)Base.Task[ncpu].Cpu.Count<=(dword)nn*nn*20;)
{
asm cli;
X=rand()%XX+StartX;
Y=rand()%YY+StartY;
Color++;
putpixel(X,Y,Color);
asm sti
// Base.Task[ncpu].Cpu.Count*=4;
Base.Task[ncpu].Cpu.Count++;
// Base.Task[ncpu].Cpu.Count/=4;
}
};
void LineDown(word x,word y)
{
static word X,Y,StartX,StartY,XX=WindowXX,YY=WindowYY,OldY;
static byte Color,ncpu;
char s[40]={0,};
asm push ds
asm push es
_AX=*LSBS;
_DS=_AX;
_AX=Base.CurrentCpu;
asm pop es
asm pop ds
ncpu=_AX;
StartX=x;
StartY=y;
asm cli
setcolor(ncpu);
rectangle(StartX-1,StartY-1-15,StartX+XX+1,StartY-1);
rectangle(StartX-1,StartY-1,StartX+XX+1,StartY+YY+1);
if (Header)
{
sprintf(s,"Task %i Speed %s",ncpu,GetSpeed(ncpu));
outtextxy(StartX,StartY-13,s);
}
asm sti
Y=StartY;
OldY=Y;
for(;(dword)Base.Task[ncpu].Cpu.Count<=(dword)nn*nn;)
{
asm cli;
Color++;
Y++;
if (Y>StartY+YY)Y=StartY;
setcolor(0);
line(StartX,OldY,StartX+XX,OldY);
setcolor(Color);
line(StartX,Y,StartX+XX,Y);
asm sti
// OldY=Y;
// Base.Task[ncpu].Cpu.Count*=4;
Base.Task[ncpu].Cpu.Count++;
// Base.Task[ncpu].Cpu.Count/=4;
}
};
void LineRight(word x,word y)
{
static word X,Y,StartX,StartY,XX=WindowXX,YY=WindowYY,OldX;
static byte Color,ncpu;
char s[40]={0,};
asm push ds
asm push es
_AX=*LSBS;
_DS=_AX;
_AX=Base.CurrentCpu;
asm pop es
asm pop ds
ncpu=_AX;
StartX=x;
StartY=y;
asm cli
setcolor(ncpu);
rectangle(StartX-1,StartY-1-15,StartX+XX+1,StartY-1);
rectangle(StartX-1,StartY-1,StartX+XX+1,StartY+YY+1);
if (Header)
{
sprintf(s,"Task %i Speed %s",ncpu,GetSpeed(ncpu));
outtextxy(StartX,StartY-13,s);
}
asm sti
X=StartX;
OldX=X;
for(;(dword)Base.Task[ncpu].Cpu.Count<=(dword)nn*nn;)
{
asm cli;
//Color++;
Color=rand()%getmaxcolor();
X++;
if (X>(StartX+XX))X=StartX;
// if(Color==15)Color=getmaxcolor();
setcolor(0);
line(OldX,StartY,OldX,StartY+Y);
setcolor(Color);
line(X,StartY,X,StartY+YY);
asm sti
// OldX=X;
// Base.Task[ncpu].Cpu.Count*=4;
Base.Task[ncpu].Cpu.Count++;
// Base.Task[ncpu].Cpu.Count/=4;
}
};
void PointMove(word x,word y)
{
static word X,Y,StartX,StartY,XX=WindowXX,YY=WindowYY,Raidus,OldX,OldY;
static byte Color=rand()%getmaxcolor(),ncpu=0;
static char fx=1,fy=1;
asm push ds
asm push es
_AX=*LSBS;
_DS=_AX;
_AX=Base.CurrentCpu;
asm pop es
asm pop ds
ncpu=_AX;
char s[40]={0,};
StartX=x;
StartY=y;
asm cli
setcolor(ncpu);
rectangle(StartX-1,StartY-1-15,StartX+XX+1,StartY-1);
rectangle(StartX-1,StartY-1,StartX+XX+1,StartY+YY+1);
if (Header)
{
sprintf(s,"Task %i Speed %s",ncpu,GetSpeed(ncpu));
outtextxy(StartX,StartY-13,s);
}
Raidus=rand()%20;
X=(rand()%(XX))+StartX;
Y=(rand()%(YY))+StartY;
OldX=X;OldY=Y;
asm sti
//if(Color==15)
Color=rand()%getmaxcolor();
// Color=15;
for(;(dword)Base.Task[ncpu].Cpu.Count<=(dword)nn*nn;)
{
X+=fx;
Y+=fy;
if (X+1>=(StartX+XX))fx=-1;
if (Y+1>=(StartY+YY))fy=-1;
if (X-1<=(StartX))fx=1;
if (Y-1<=(StartY))fy=1;
asm cli;
setcolor(0);
line(OldX,StartY,OldX,StartY+YY);
line(StartX,OldY,StartX+XX,OldY);
setcolor(Color);
line(X,StartY,X,StartY+YY);
line(StartX,Y,StartX+XX,Y);
asm sti;
OldX=X;OldY=Y;
Base.Task[ncpu].Cpu.Count++;
}
};
void CircleLargeSmall(word x,word y)
{
static word X,Y,StartX,StartY,XX=WindowXX,YY=WindowYY,Raidus,OldX,OldY,MaxRaidus,t[5],t5,OldRaidus;
static byte Color=rand()%getmaxcolor(),ncpu=0;
static char f=1,s0=1;
asm push ds
asm push es
_AX=*LSBS;
_DS=_AX;
_AX=Base.CurrentCpu;
asm pop es
asm pop ds
ncpu=_AX;
char s[40]={0,};
StartX=x;
StartY=y;
asm cli
setcolor(ncpu);
rectangle(StartX-1,StartY-1-15,StartX+XX+1,StartY-1);
rectangle(StartX-1,StartY-1,StartX+XX+1,StartY+YY+1);
if (Header)
{
sprintf(s,"Task %i Speed %s",ncpu,GetSpeed(ncpu));
outtextxy(StartX,StartY-13,s);
}
OldX=X;OldY=Y;
asm sti
Color=15;
for(;(dword)Base.Task[ncpu].Cpu.Count<=(dword)nn*nn;)
{
X=(rand()%XX);
Y=(rand()%YY);
t[0]=0xFFFE;
t[1]=(XX-X);
t[2]=(YY-Y);
t[3]=XX-abs(X-XX);
t[4]=YY-abs(Y-YY);
X+=StartX;
Y+=StartY;
// Find Near Wall
for(t5=1;t5<5;t5++)
{
if(t[0]>t[t5])
{
t[0]=t[t5];
}
};
s0=1;
MaxRaidus=t[0];
Color=rand()%getmaxcolor();
for(;Raidus<MaxRaidus;Raidus+=f)
{
asm cli;
setcolor(0);
circle(OldX,OldY,OldRaidus);
setcolor(Color);
circle(X,Y,Raidus);
asm sti
OldX=X;OldY=Y;OldRaidus=Raidus;
Base.Task[ncpu].Cpu.Count++;
};
for(;Raidus>=1;Raidus+=-f)
{
asm cli;
setcolor(0);
circle(OldX,OldY,OldRaidus);
setcolor(Color);
circle(X,Y,Raidus);
asm sti
OldX=X;OldY=Y;OldRaidus=Raidus;
Base.Task[ncpu].Cpu.Count++;
};
}
};
void CircleFillLargeSmall(word x,word y)
{
static word X,Y,StartX,StartY,XX=WindowXX,YY=WindowYY,Raidus,OldX,OldY,MaxRaidus,t[5],t5,OldRaidus;
static byte Color=rand()%getmaxcolor(),ncpu=0;
static char f=1,s0=1;
asm push ds
asm push es
_AX=*LSBS;
_DS=_AX;
_AX=Base.CurrentCpu;
asm pop es
asm pop ds
ncpu=_AX;
char s[40]={0,};
StartX=x;
StartY=y;
asm cli
setcolor(ncpu);
rectangle(StartX-1,StartY-1-15,StartX+XX+1,StartY-1);
rectangle(StartX-1,StartY-1,StartX+XX+1,StartY+YY+1);
if (Header)
{
sprintf(s,"Task %i Speed %s",ncpu,GetSpeed(ncpu));
outtextxy(StartX,StartY-13,s);
}
OldX=X;OldY=Y;
asm sti
Color=15;
for(;(dword)Base.Task[ncpu].Cpu.Count<=(dword)nn*nn;)
{
X=(rand()%XX);
Y=(rand()%YY);
t[0]=0xFFFE;
t[1]=(XX-X);
t[2]=(YY-Y);
t[3]=XX-abs(X-XX);
t[4]=YY-abs(Y-YY);
X+=StartX;
Y+=StartY;
// Find Near Wall
for(t5=1;t5<5;t5++)
{
if(t[0]>t[t5])
{
t[0]=t[t5];
}
};
s0=1;
MaxRaidus=t[0];
Color=rand()%getmaxcolor();
for(;Raidus<MaxRaidus;Raidus+=f)
{
asm cli;
setcolor(Color);
circle(X,Y,Raidus);
asm sti
OldX=X;OldY=Y;OldRaidus=Raidus;
Base.Task[ncpu].Cpu.Count++;
};
for(;Raidus!=0;Raidus+=-f)
{
asm cli;
setcolor(0);
circle(OldX,OldY,OldRaidus);
asm sti
OldX=X;OldY=Y;OldRaidus=Raidus;
Base.Task[ncpu].Cpu.Count++;
};
setcolor(0);
circle(OldX,OldY,OldRaidus-1);
}
};
void LineDraw(word x,word y)
{
};
void Demo(word x,word y,byte n)
{
static byte Select[50]={0,};
if(Select[n]==1) return;
Select[n]=1;
switch(n)
{
case 1:
{
Circle(x,y);
break;
}
case 2:
{
CircleFill(x,y);
break;
}
case 3:
{
Line(x,y);
break;
}
case 4:
{
PointToPoint(x,y);
break;
}
case 5:
{
LineDown(x,y);
break;
}
case 6:
{
LineRight(x,y);
break;
}
case 7:
{
PointMove(x,y);
break;
}
case 8:
{
CircleLargeSmall(x,y);
break;
}
case 9:
{
CircleFillLargeSmall(x,y);
break;
}
}
};
int gm=DETECT,gd,errorcode;
void main()
{
randomize();
clrscr();
initgraph(&gd,&gm,"");
InitTask();
static byte a=0;
InitTimer(10);
// Install All Task In Stack Interrupt
oldhandler=getvect(INTR);
setvect(INTR,ChangeTask);
for(;Base.VCpuEnable>1;);
{
};
// JmpTask(0);
// *(Base.Task[0].Win.StartScr+(0*160))=a+++(5<<8);
// Base.Task[0].Cpu.Count++;
asm cli
// for(;Base.Count!=MaxCpu;) printf("%i\n",Base.Count);
setvect(INTR,oldhandler);
// Task5();
/*
gotoxy(1,10);
PrintDataTask(50,50,0);
PrintDataTask(50,50,1);
PrintDataTask(50,50,2);
PrintDataTask(50,50,3);
PrintDataTask(50,50,4);
printf("Total All Count = %u == %%100\n",Base.Count);
*/
gotoxy(1,10);
DeadTaskAll();
getch();
getch();
closegraph();
};
سلام
من به كار شما بسيار علاقه مند هستم براي شروع چيكار بايد بكنم :)
در ضمن من تمام مستندات رو از سايت شما دانلود كردم.:)
سلام خب مقالات رو بخون مطمئناَ خيلي جاهاش برات نامفهوم بايد باشه سوالي چيزي در ذهن داشتي بپرس.
اگر زبان برنامه نويسي هم بلد نيستي اول
اسمبلي
بعد سي
اسمبلي رو بايد خوب بلد باشي.
فعلاَ