mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2025-04-05 07:45:07 +01:00
Update documentation.
This commit is contained in:
parent
0cb2d21007
commit
76ee6ec6a2
89 changed files with 285 additions and 698 deletions
ZealOS-2021-07-02-04_23_15.iso
src
Apps
Compiler
Demo
Doc
AboutZealOS.DDBlkChain.DDBoot.DDChangeLog.DDCharter.DDCosmiC.DDCredits.DDCutCorners.DDDebugOverview.DDDemands.DDDolDocOverview.DDFAQ.DDFeatures.DDFileLowLevel.DDGlossary.DDGuideLines.DDInFile.DDInstall.DDKeyAlloc.DDMemoryOverview.DDQuirks.DDRedSea.DDReliability.DDRequirements.DDScopingLinkage.DDStdZealOSPC.DDStrategy.DDTOSZ.DDTips.DDWelcome.DDWhyNotMore.DD
Home
Kernel
Misc
Once.CCSystem
Binary file not shown.
|
@ -159,7 +159,7 @@ U0 BgtRegen()
|
|||
//It's tricky -- can't use old line num because of editor filters.
|
||||
|
||||
//The price we pay for using the standard document editor is this kludge.
|
||||
//When I originally wrote my budget program, I did not have separate budget
|
||||
//When Terry originally wrote the budget program, he did not have separate budget
|
||||
//and line entries, so we never had to resync.
|
||||
|
||||
doc_ce = pdoc->cur_entry;
|
||||
|
|
|
@ -239,16 +239,16 @@ class Obj
|
|||
} objs[OBJS_NUM], *ball, *human, *last_owner;
|
||||
|
||||
/*
|
||||
Just to be different, I didn't use the built-in
|
||||
Just to be different, Terry didn't use the built-in
|
||||
DCF_TRANSFORMATION flag in this game.
|
||||
Instead, I chose a 45 degree angle
|
||||
Instead, he chose a 45 degree angle
|
||||
between Y and Z as the view point.
|
||||
If I had used the transform, I would
|
||||
have to make all my men taller.
|
||||
If he had used the transform, he would
|
||||
have to make all the men taller.
|
||||
This is a little simpler, and faster,
|
||||
but adds lots of factor 2 vals.
|
||||
|
||||
I also didn't use the $LK,"CMathODE",A="MN:CMathODE"$ feat,
|
||||
Terry also didn't use the $LK,"CMathODE",A="MN:CMathODE"$ feat,
|
||||
just to be different.
|
||||
*/
|
||||
|
||||
|
@ -323,7 +323,7 @@ U0 DrawIt(CTask *task, CDC *dc)
|
|||
{
|
||||
if (o->has_ball && (ball->z + ball->radius * 2 >= o->z + HAND_Z_OFFSET || Abs(ball->DzDt) < 30))
|
||||
{
|
||||
//This is an approximation. My instinct tells me the viscosity term
|
||||
//This is an approximation. Terry's instinct told him the viscosity term
|
||||
//needs an $LK,"Exp",A="MN:Exp"$(). However, we should be syncronized to img frames,
|
||||
//so we don't have to be perfect.
|
||||
d_down = 1.0;
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
/*
|
||||
I got tricky by not defining a color
|
||||
Terry got tricky by not defining a color
|
||||
right away in these $LK,"CSprite",A="MN:CSprite"$s so they can
|
||||
work for both players by setting dc->color
|
||||
before drawing them. I actually made these
|
||||
before drawing them. He actually made these
|
||||
graphics by defining a color in the <CTRL-r>
|
||||
menu, drawing the unit and deleting the color.
|
||||
|
||||
I had to leave a gap between the tank tread
|
||||
He had to leave a gap between the tank tread
|
||||
and body because of how it is rendered when rotated.
|
||||
*/
|
||||
|
||||
|
|
|
@ -10,10 +10,10 @@
|
|||
'$$'= IEF_ENDING_ZERO Ending zero for ENTER.
|
||||
|
||||
$FG,4$Note:$FG$ ZealOS uses nonstandard opcodes.
|
||||
Asm is kind-of a bonus and I made changes
|
||||
Asm is kind-of a bonus and Terry made changes
|
||||
to make the assembler simpler. For opcodes
|
||||
which can have different numbers of
|
||||
args, I separated them out -- Like IMUL and IMUL2.
|
||||
args, he separated them out -- Like IMUL and IMUL2.
|
||||
The assembler will not report certain invalid
|
||||
forms. Get an Intel datasheet and learn
|
||||
which forms are valid.
|
||||
|
|
|
@ -590,7 +590,7 @@ RAX and R8 links intermediate codes together. R9 is used for stack machine
|
|||
temporaries. RBP is used as stack frame.
|
||||
|
||||
RSI, RDI, R10, R11, R12, R13, R14, R15 are used for reg vars. R12 and R13, however,
|
||||
have a unusual ModR addressing mode in the x86_64 architecture, so I only use
|
||||
have a unusual ModR addressing mode in the x86_64 architecture, so we only use
|
||||
R12 and R13 as non-pointer register variables, such as index variables i, j, k.
|
||||
|
||||
*/
|
||||
|
|
|
@ -13,7 +13,7 @@ U0 FileLinkIns()
|
|||
{
|
||||
U8 *st = PopUpPickFile;
|
||||
|
||||
st[0] = ':'; //This is my personal code, not production. LOL
|
||||
st[0] = ':'; //This is Terry's personal code, not production. LOL
|
||||
"$$LK,\"%s\",A=\"FI:%s\"$$", st + 2, st;
|
||||
Free(st);
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ U0 DirLinksIns()
|
|||
CDirEntry *tmpde, *tmpde1;
|
||||
U8 *st = PopUpPickDir, *st2;
|
||||
|
||||
st[0] = ':'; //This is my personal code, not production. LOL
|
||||
st[0] = ':'; //This is Terry's personal code, not production. LOL
|
||||
st2 = MStrPrint("%s/*", st);
|
||||
tmpde = tmpde1 = FilesFind(st2, FUF_JUST_FILES);
|
||||
while (tmpde)
|
||||
|
|
|
@ -6,7 +6,7 @@ it from the cmd line.
|
|||
*/
|
||||
|
||||
asm {
|
||||
//Opcodes are slightly different to make writing my x86_64 assembler easier.
|
||||
//Opcodes are slightly different to make writing the x86_64 assembler easier.
|
||||
//See $LK,"::/Compiler/OpCodes.DD"$.
|
||||
|
||||
IMPORT Beep;
|
||||
|
@ -33,7 +33,7 @@ _BEEPS::
|
|||
}
|
||||
|
||||
//_extern binds a asm sym to a function.
|
||||
//My convention is to put an underscore
|
||||
//The convention is to put an underscore
|
||||
//on C callable asm routines.
|
||||
_extern _BEEPS U0 Beeps(I64 count);
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ it from the cmd line.
|
|||
I64 global_ona = Freq2Ona(400), global_ona_step = 10, global_ona_base = Freq2Ona(100);
|
||||
|
||||
asm {
|
||||
//Opcodes are slightly different to make writing my x86_64 assembler easier.
|
||||
//Opcodes are slightly different to make writing the x86_64 assembler easier.
|
||||
//See $LK,"::/Compiler/OpCodes.DD"$.
|
||||
|
||||
JIFFIES_MESSAGE: DU8 "Jiffies:", 0;
|
||||
|
@ -50,7 +50,7 @@ _BEEPS2::
|
|||
RET1 8
|
||||
}
|
||||
|
||||
//My convention is to put an underscore
|
||||
//The convention is to put an underscore
|
||||
//on C callable asm routines.
|
||||
_extern _BEEPS2 U0 Beeps2(I64 count);
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ from C, preserve all other regs.
|
|||
*/
|
||||
|
||||
asm {
|
||||
//Opcodes are slightly different to make writing my x86_64 assembler easier.
|
||||
//Opcodes are slightly different to make writing the x86_64 assembler easier.
|
||||
//See $LK,"::/Compiler/OpCodes.DD"$.
|
||||
|
||||
MY_WORLD_MESSAGE:
|
||||
|
@ -28,7 +28,7 @@ MY_WORLD_MESSAGE:
|
|||
//on strings.
|
||||
DU8 "World\n", 0;
|
||||
|
||||
//My convention is to put an underscore
|
||||
//The convention is to put an underscore
|
||||
//on C callable asm routines.
|
||||
_HELLO_WORLD::
|
||||
PUSH RSI //See $LK,"REGG_LOCAL_VARS",A="MN:REGG_LOCAL_VARS"$ & $LK,"REGG_LOCAL_NON_PTR_VARS",A="MN:REGG_LOCAL_NON_PTR_VARS"$
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
/*When I was a kid with a Commodore 64,
|
||||
/*When Terry Davis was a kid with a Commodore 64,
|
||||
the 6502 chip had no multiply inst
|
||||
and this is how we had to do it, except,
|
||||
I used more regs in this example.
|
||||
and this is how he had to do it, except,
|
||||
he used more regs in this example.
|
||||
*/
|
||||
asm {
|
||||
//Opcodes are slightly different to make writing my x86_64 assembler easier.
|
||||
//Opcodes are slightly different to make writing the x86_64 assembler easier.
|
||||
//See $LK,"::/Compiler/OpCodes.DD"$.
|
||||
|
||||
//You can clobber RAX,RBX,RCX,RDX,R8,R9. The compiler expects that.
|
||||
|
@ -44,7 +44,7 @@ _MUL_U64_U64_TO_U128::
|
|||
RET1 24
|
||||
};
|
||||
|
||||
//My convention is to put an underscore
|
||||
//The convention is to put an underscore
|
||||
//on C callable asm routines.
|
||||
_extern _MUL_BY_HAND_U8_U8_TO_U16 U16 MulU8(U8 n1, U8 n2);
|
||||
|
||||
|
|
Binary file not shown.
|
@ -12,7 +12,7 @@ RegExe("ZealOS/Talons");
|
|||
#define DISPLAY_SCALE 100
|
||||
#define CTRLS_SCALE 0.05
|
||||
|
||||
//I think I did these so the heads-up showed intelligable numbers.
|
||||
//Terry thought he did these so the heads-up showed intelligable numbers.
|
||||
//Scaling is a mess.
|
||||
#define COORDINATE_SCALE 256
|
||||
#define COORDINATE_BITS 8
|
||||
|
@ -249,7 +249,7 @@ U0 CalcNormals()
|
|||
{/*Find the normal vect with a curl.
|
||||
|
||||
i,j and k are the axis unit vectors,
|
||||
not to be confused with my local index variables.
|
||||
not to be confused with local index variables.
|
||||
|
||||
i j k
|
||||
0 1 dz2
|
||||
|
@ -666,7 +666,7 @@ U0 MPDrawIt(CTask *task, CDC *dc)
|
|||
Mat4x4MulXYZ(s2w, &xh, &yh, &zh);
|
||||
|
||||
//The layer for core1 is not cleared automatically
|
||||
//it is persistent. I have carefully syncronized to the update
|
||||
//it is persistent. Terry carefully syncronized the update
|
||||
//cycle initiated by Core0 to prevent flicker.
|
||||
|
||||
dc->flags |= DCF_TRANSFORMATION;
|
||||
|
|
Binary file not shown.
|
@ -1,4 +1,4 @@
|
|||
$WW,1$$FG,5$$TX+CX,"64-Bit Assembly Quiz"$$FG$
|
||||
$WW,1$$PURPLE$$TX+CX,"64-Bit Assembly Quiz"$$FG$
|
||||
|
||||
1) In 64-bit mode, how many bytes are always pushed?
|
||||
|
||||
|
@ -82,7 +82,7 @@ ANSWERS:
|
|||
|
||||
11) PUSHAD is not available for 64-bit mode, so you do it by hand.
|
||||
|
||||
12) The TSS is no longer used to hold the task state because there are 16 regs and they are 64-bits, not 32-bits. I guess Intel decided doing it by hand was better than TSSes.
|
||||
12) The TSS is no longer used to hold the task state because there are 16 regs and they are 64-bits, not 32-bits.
|
||||
|
||||
13) 64-bit mode has 4K or 2Meg page size.
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
//$WW,1$You may wonder why I use "&" instead of "%".
|
||||
//$WW,1$You may wonder why "&" is used instead of "%".
|
||||
|
||||
#define SAMPLE_SIZE 100000000
|
||||
|
||||
|
|
|
@ -7,9 +7,9 @@ instead of dollars with a float.
|
|||
Fixed-point used to be much $TX,"faster",HTML="http://en.wikipedia.org/wiki/X87"$,
|
||||
but modern processors do well with
|
||||
floats. It also depends on the compiler
|
||||
and my compiler is poor with floats.
|
||||
and the CosmiC compiler is poor with floats.
|
||||
|
||||
I often use 64-bit ints with upper 32-bits
|
||||
Terry often used 64-bit ints with upper 32-bits
|
||||
as int and lower 32-bits as fraction.
|
||||
|
||||
See $LK,"::/Demo/SubIntAccess.CC"$ for how
|
||||
|
|
|
@ -7,9 +7,9 @@ instead of dollars with a float.
|
|||
Fixed-point used to be much $TX,"faster",HTML="http://en.wikipedia.org/wiki/X87"$,
|
||||
but modern processors do well with
|
||||
floats. It also depends on the compiler
|
||||
and my compiler is poor with floats.
|
||||
and the CosmiC compiler is poor with floats.
|
||||
|
||||
I often use 64-bit ints with upper 32-bits
|
||||
Terry often use 64-bit ints with upper 32-bits
|
||||
as int and lower 32-bits as fraction.
|
||||
|
||||
See $LK,"::/Demo/SubIntAccess.CC"$ for how
|
||||
|
|
|
@ -5,8 +5,8 @@ don't matter much on a modern Intel CPU
|
|||
because they convert complex insts
|
||||
to a stream of RISC insts.
|
||||
|
||||
I learned this the hard way when I thought
|
||||
I was greatly improving my compiler by
|
||||
Terry learned this the hard way when he thought
|
||||
he was greatly improving the compiler by
|
||||
cutting code by a third. No significant
|
||||
speed-up. Depressing.
|
||||
*/
|
||||
|
|
|
@ -57,7 +57,7 @@ U0 Main()
|
|||
Sleep(1000);
|
||||
"The keyboard and timer seem to be active.\n"
|
||||
"IntA:%d IntB:%d IntC:%d IntD:%d\n\n"
|
||||
"IntB is my keyboard and regs a single KEY-UP.\n"
|
||||
"IntB is Terry's keyboard and regs a single KEY-UP.\n"
|
||||
"Rerun and press a few keys.\n", progress1, progress2, progress3, progress4;
|
||||
|
||||
//Disable vects
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*$LK,"progress1",A="MN:progress1"$-$LK,"progress4",A="MN:progress4"$ are just global vars
|
||||
shown on the wallpaper. I use them in debugging a lot.
|
||||
shown on the wallpaper. Terry used them in debugging a lot.
|
||||
|
||||
If you set $LK,"progress1_max",A="MN:progress1_max"$-$LK,"progress4_max",A="MN:progress4_max"$,
|
||||
then a progress bar will display.
|
||||
|
|
|
@ -70,7 +70,7 @@ U0 PullDownMenuDemo()
|
|||
break;
|
||||
|
||||
case MESSAGE_CMD:
|
||||
//I Recommend making your menu
|
||||
//Feel free to make your menu
|
||||
//drive by key strokes, but you can
|
||||
//use the $LK,"MESSAGE_CMD",A="MN:MESSAGE_CMD"$ val.
|
||||
switch (arg1)
|
||||
|
|
|
@ -4,7 +4,7 @@ $FG,4$$TX,"ZealOS File Downloads (100% Public Domain)",HTML="http://www.templeos
|
|||
|
||||
ZealOS is a free, public domain, open source, x86_64, non-preemptive multi-tasking, multi-cored, ring-0-only, single-address-map (identity-mapped), non-networked, PC operating system. Paging is, basically, not used.
|
||||
|
||||
The CIA obsfucates to foil India, China, Russia and Korea. They make things more complicated than necessary. ZealOS is more simple than necessary. It is obnoxiously simple. If you look at this $TX,"\"Hello World\" joke",HTML="http://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer.html"$, you can see why I capped the line count of TempleOS at 100,000.
|
||||
The CIA obsfucates to foil India, China, Russia and Korea. They make things more complicated than necessary. ZealOS is more simple than necessary. It is obnoxiously simple. If you look at this $TX,"\"Hello World\" joke",HTML="http://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer.html"$, you can see why Terry capped the line count of TempleOS at 100,000.
|
||||
|
||||
God said TempleOS must be perfect, so backward compatibility is not promised.
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ an html document named "OutPage.html".
|
|||
Notice that an entry like $$TX,"GOOGLE",HTML="http://www.google.com"$$
|
||||
will be converted to text in the html with an html link.
|
||||
|
||||
I cheated by hardcoding $LK,"www.templeos.org",A="FF:::/Demo/ToHtmlToTXTDemo/ToHtml.CC,www.templeos.org"$ as the website
|
||||
Terry cheated by hardcoding $LK,"www.templeos.org",A="FF:::/Demo/ToHtmlToTXTDemo/ToHtml.CC,www.templeos.org"$ as the website
|
||||
for $LK,"ZealOS Links",A="MN:LK_FILE"$. Why don't you copy
|
||||
$LK,"::/Demo/ToHtmlToTXTDemo/ToHtml.CC"$ to your /Home directory
|
||||
and modify it? You are welcome to link to
|
||||
|
|
|
@ -18,13 +18,13 @@ $TX,"tdavis@templeos.org",HTML="mailto:tdavis@templeos.org"$
|
|||
|
||||
$FG,5$About Me:$FG$
|
||||
|
||||
I was a National Merit Scholar with a 1440 SAT at Arizona State University. I have a bachelor's in Computer System Engineering from ASU, basically, embedded systems, and a master's in Electrical Engineering from ASU, control systems. I worked as a software, hardware and mechanical engineer at Ticketmaster from 1990-1996.
|
||||
Terry Davis was a National Merit Scholar with a 1440 SAT at Arizona State University. He had a bachelor's in Computer System Engineering from ASU, basically, embedded systems, and a master's in Electrical Engineering from ASU, control systems. He worked as a software, hardware and mechanical engineer at Ticketmaster from 1990-1996.
|
||||
|
||||
I designed a 3 axis stepper-motor-driven milling machine 1996-1997 with a CAD/CAM package for a company I started called Home Automation and Robotic Equipment.
|
||||
He designed a 3 axis stepper-motor-driven milling machine 1996-1997 with a CAD/CAM package for a company he started called Home Automation and Robotic Equipment.
|
||||
|
||||
$HC,"<center><img src=\"http://www.templeos.org/images/Machine.jpg\" width=\"600\" height=\"400\" alt=\"\"></center>"$
|
||||
|
||||
I worked for a company named Xytec Corp. 1997-1999. We made FPGA-based image processing equipment. I wrote $FG,2$SimStructure$FG$ from 2000-2001 for H.A.R.E. I worked as head software/electrical engineer for a company called Graphic Technologies, 2001-2002, making replacement chips for toner printer cartridges so they could be refilled.
|
||||
Terry worked for a company named Xytec Corp. 1997-1999. They made FPGA-based image processing equipment. He wrote $FG,2$SimStructure$FG$ from 2000-2001 for H.A.R.E. He worked as head software/electrical engineer for a company called Graphic Technologies, 2001-2002, making replacement chips for toner printer cartridges so they could be refilled.
|
||||
|
||||
$FG,5$Credits:$FG$
|
||||
See $LK,"::/Doc/Credits.DD"$.
|
||||
|
|
|
@ -2,7 +2,7 @@ $WW,1$$FG,5$$TX+CX,"Block Chain"$$FG$
|
|||
|
||||
There was a technique on the Commodore 64 where disk blocks were chained together with a block pointer at the end of each block. This is far inferior to having a file allocation table, as in FAT32.
|
||||
|
||||
The $LK,"RedSea",A="FI:::/Doc/RedSea.DD"$ file system does not allow files to grow because it only has an allocation bitmap and not a FAT table. This "flaw" is by design. I am intentionally crippling this operating system, making it a toy with the wisdom that this will prevent commercialization and corruption. The toy spirit of the operating system will be preserved going into the future. The vision for this operating system was a modern Commodore 64, which was a fun toy.
|
||||
The $LK,"RedSea",A="FI:::/Doc/RedSea.DD"$ file system does not allow files to grow because it only has an allocation bitmap and not a FAT table. This "flaw" is by design. Terry intentionally crippled the operating system, making it a toy with the wisdom that this will prevent commercialization and corruption. The toy spirit of the operating system will be preserved going into the future. The vision for this operating system was a modern Commodore 64, which was a fun toy.
|
||||
|
||||
Doing whole file operations is the ZealOS way of doing thinks. It is the simplest and, ironically, the fastest. It is obnoxious in the characteristic way that ZealOS is obnoxious, flaunting massive modern resources in a way that makes old programmers protest.
|
||||
|
||||
|
@ -10,7 +10,7 @@ When doing large, whole-file operations, immediately memory fragmentation is a s
|
|||
|
||||
The file compression scheme in ZealOS only works on whole file operations and the $LK,"DolDoc",A="FI:::/Doc/DolDoc.DD"$ format cannot have text tacked onto the end, since binary data is at the end.
|
||||
|
||||
I don't want to spoil fun, so of course I offer a way to get awesome performance that is, ironically, superior. $LK,"FBlkRead",A="MN:FBlkRead"$() and $LK,"FBlkWrite",A="MN:FBlkWrite"$() allow you to read a block offset from the start of a file. Since files are all contiguous, this is incredibly efficient. You just have to declare the desired file size when you create it with $LK,"FOpen",A="MN:FOpen"$() and cannot change it. See $LK,"::/Demo/Disk/DataBase.CC"$.
|
||||
Terry didn't want to spoil fun, so of course offered a way to get awesome performance that is, ironically, superior. $LK,"FBlkRead",A="MN:FBlkRead"$() and $LK,"FBlkWrite",A="MN:FBlkWrite"$() allow you to read a block offset from the start of a file. Since files are all contiguous, this is incredibly efficient. You just have to declare the desired file size when you create it with $LK,"FOpen",A="MN:FOpen"$() and cannot change it. See $LK,"::/Demo/Disk/DataBase.CC"$.
|
||||
|
||||
If you like, you are encouraged to to do raw $LK,"BlkRead",A="MN:BlkRead"$() and $LK,"BlkWrite",A="MN:BlkWrite"$() directly on a drive. Just get a pointer to a $LK,"CDrive",A="MN:CDrive"$ with $LK,"Letter2Drive",A="MN:Letter2Drive"$() and you are on your way! Your computer is supposed to be a fun toy! You can make an entire partition used for a database, or invent a file system.
|
||||
|
||||
|
|
BIN
src/Doc/Boot.DD
BIN
src/Doc/Boot.DD
Binary file not shown.
|
@ -1,4 +1,8 @@
|
|||
$WW,1$$FG,5$$TX+CX,"ChangeLog"$$FG$
|
||||
$IV,1$----07/02/21 03:58:09----$IV,0$
|
||||
* Raised version number to 0.03.
|
||||
* Update all documentation, change 1st-person --> 3rd-person.
|
||||
|
||||
$IV,1$----07/01/21 23:51:14----$IV,0$
|
||||
* Raised version number to 0.02.
|
||||
* Added support for reading TempleOS, ZenithOS, and ZealOS ISOs.
|
||||
|
|
|
@ -8,7 +8,7 @@ $FG,5$$WW,1$$TX+CX,"ZealOS Charter"$$FG$
|
|||
|
||||
* There is a limit of 100,000 lines of code for all time, not including applications and demos. Currently, there are $TX,"80,849",D="DD_TEMPLEOS_LOC"$ lines of code. $FG,4$3rd party libraries are banned$FG$ because they circumvent the intent of this limit. The vision is a Commodore 64 ROM -- a fixed core API that is the only dependency of applications. Dependency on components and libraries creates a hell that is no longer blissful.
|
||||
|
||||
* The metric for resolving all ZealOS code governance issues is how fast the compiler compiles itself and the kernel with $LK,"BootHDIns",A="MN:BootHDIns"$(). The $LK,"CosmiC",A="FI:::/Doc/CosmiC.DD"$ language should be changed to optimize this metric, as I did when I changed type casting from prefix standard C to postfix $LK,"CosmiC",A="FI:::/Doc/CosmiC.DD"$, but we need a rule to prevent degenerating into a brainfuck language.
|
||||
* The metric for resolving all ZealOS code governance issues is how fast the compiler compiles itself and the kernel with $LK,"BootHDIns",A="MN:BootHDIns"$(). The $LK,"CosmiC",A="FI:::/Doc/CosmiC.DD"$ language should be changed to optimize this metric, as Terry Davis did when he changed type casting from prefix standard C to postfix $LK,"CosmiC",A="FI:::/Doc/CosmiC.DD"$, but we need a rule to prevent degenerating into a brainfuck language.
|
||||
|
||||
* Minimal abstraction is a goal. Sheep are fools. They always respect a design that is more complicated than another. Any genius can make it complicated. Like in physics, it takes a supra-genius to make it simple.
|
||||
|
||||
|
@ -26,8 +26,6 @@ $FG,5$$WW,1$$TX+CX,"ZealOS Charter"$$FG$
|
|||
|
||||
* $FG,2$Single-address-map$FG$ as though paging is not used. Long mode requires paging, however, so the nearest thing is keeping all memory $FG,2$identity-mapped$FG$.
|
||||
|
||||
* No encryption or passwords.
|
||||
|
||||
* $FG,2$Free$FG$ and $FG,2$public domain$FG$.
|
||||
|
||||
* $FG,2$100% open source$FG$ with all source included.
|
||||
|
@ -46,4 +44,4 @@ $FG$
|
|||
|
||||
$FG,5$$WW,1$$TX+CX,"Possible Amendments"$$FG$
|
||||
|
||||
The compiler's parser makes RISC code which it optimizes to CISC. I discovered this does not matter because the CPU converts it back to RISC and schedules it, internally. A ZealOS zealot with more zeal than I, might say we should save lines-of-code by removing the CISC optimizing.
|
||||
The compiler's parser makes RISC code which it optimizes to CISC. Terry Davis discovered this does not matter because the CPU converts it back to RISC and schedules it, internally. A ZealOS zealot with more zeal might say we should save lines-of-code by removing the CISC optimizing.
|
||||
|
|
|
@ -246,7 +246,7 @@ $FG$$ID,-2$
|
|||
|
||||
* You CAN $LK,"Free",A="MN:Free"$() a $FG,2$NULL$FG$ ptr. Useful variants of $LK,"MAlloc",A="MN:MAlloc"$() can be found $LK,"Here",A="MN:CAlloc"$. Each task has a heap and you can $FG,2$MAlloc$FG$ and $FG,2$Free$FG$ off-of other task's heaps, or make an independent heap with $LK,"HeapCtrlInit",A="MN:HeapCtrlInit"$(). See $LK,"HeapLog",A="MN:HeapLog"$() for an example.
|
||||
|
||||
* The stack does not grow because virtual mem is not used. I recommend allocating large local vars from the heap. You can change $LK,"MEM_DEFAULT_STACK",A="MN:MEM_DEFAULT_STACK"$ and recompile $FG,2$Kernel$FG$ or request more when doing a $LK,"Spawn",A="MN:Spawn"$(). You can use $LK,"CallStackGrow",A="MN:CallStackGrow"$(), but it's odd. See $LK,"::/Demo/StackGrow.CC"$.
|
||||
* The stack does not grow because virtual mem is not used. It's recommended to allocate large local vars from the heap. You can change $LK,"MEM_DEFAULT_STACK",A="MN:MEM_DEFAULT_STACK"$ and recompile $FG,2$Kernel$FG$ or request more when doing a $LK,"Spawn",A="MN:Spawn"$(). You can use $LK,"CallStackGrow",A="MN:CallStackGrow"$(), but it's odd. See $LK,"::/Demo/StackGrow.CC"$.
|
||||
|
||||
* Only one base class is allowed.
|
||||
|
||||
|
|
|
@ -1,42 +1,38 @@
|
|||
$WW,1$$FG,5$$TX+CX,"Credits"$$FG$
|
||||
|
||||
I, $FG,2$Terry A. Davis$FG$, wrote all of TempleOS over the past 15.4 years (full-time). It can run on some bare metal 64-bit PC's from about 2005-2010 with no layering, libraries, tools, modules or anything from other sources. Otherwise, you run it in a virtual machine, like $FG,2$VMware$FG$, $FG,2$QEMU$FG$ or $FG,2$VirtualBox$FG$. It is independent and stands alone. It has no networking, so it certainly doesn't call home. 100% of the src code is including on all distro's, from the kernel to the compiler to the boot loaders! It is public domain, not GPL.
|
||||
$FG,2$Terry A. Davis$FG$ wrote all of TempleOS over the past 15.4 years (full-time). ZealOS is a fork of ZenithOS, which itself is a fork of TempleOS. It can run on some bare metal 64-bit PC's from about 2007-2019 with no layering, libraries, tools, modules or anything from other sources. Otherwise, you run it in a virtual machine, like $FG,2$VMware$FG$, $FG,2$QEMU$FG$ or $FG,2$VirtualBox$FG$. It is independent and stands alone. 100% of the src code is including on all distro's, from the kernel to the compiler to the boot loaders! It is public domain, not GPL.
|
||||
|
||||
*) $LK,"ATA Reg and Cmd Definitions",A="MN:ATA_NOP"$ are originally from Linux. Later, I got the spec.
|
||||
*) $LK,"ATA Reg and Cmd Definitions",A="MN:ATA_NOP"$ are originally from Linux. Later, Terry got the spec.
|
||||
|
||||
*) The heap algorithm, $LK,"::/Kernel/Memory/MAllocFree.CC"$, is adapted from one I saw at Ticketmaster when I worked on their VAX operating system.
|
||||
|
||||
*) The LZW compression algorithm, $LK,"::/Kernel/Compress.CC"$, came from a magazine and I implemented it when I worked for Ticketmaster.
|
||||
*) The heap algorithm, $LK,"::/Kernel/Memory/MAllocFree.CC"$, is adapted from one Terry saw at Ticketmaster when he worked on their VAX operating system.
|
||||
|
||||
*) The adaptive-step-size-Runge-Kutta algorithm, $LK,"::/System/ZMathODE.CC"$, is adapted from the book, $UL,1$Numeric Recipies in C$UL,0$.
|
||||
|
||||
*) The mountain in some games is from $FG,4$$TX,"http://www.public-domain-photos.com",HTML="http://www.public-domain-photos.com"$$FG$. The wolf in BlackDiamond is also from there. I took watermarked photos and converted to 16 color.
|
||||
*) The mountain in some games is from $FG,4$$TX,"http://www.public-domain-photos.com",HTML="http://www.public-domain-photos.com"$$FG$. The wolf in BlackDiamond is also from there. Terry took watermarked photos and converted to 16 color.
|
||||
|
||||
*) The $FG,2$FAT32$FG$ file system is owned by MicroSoft.
|
||||
|
||||
*) A few features were inspired by $FG,2$MATLAB$FG$, such as $FG,2$ans$FG$ in expressions at the command-line. There is a lot of $FG,2$MSDOS$FG$ , $FG,2$Windows$FG$, $FG,2$VAXTMOS$FG$ (VAX Ticketmaster O.S.) and $FG,2$Unix$FG$ inspiration, too, such as drive letters, command names, etc.
|
||||
|
||||
*) I included $LK,"PCIDevice List File",A="FI:::/Misc/PCIDevices.DD",HTML="http://www.pcidatabase.com/reports.php?type=tab-delimeted"$.
|
||||
*) Terry included $LK,"PCIDevice List File",A="FI:::/Misc/PCIDevices.DD",HTML="http://www.pcidatabase.com/reports.php?type=tab-delimeted"$.
|
||||
|
||||
*) Thanks to whoever wrote this $FG,4$$TX,"CppHtml.CC",HTML="http://web.archive.org/web/20100325153025/http://home.scarlet.be/zoetrope/cpphtml.htm"$$FG$. I'm a novice on web stuff and you helped me with html. See $LK,"::/Demo/ToHtmlToTXTDemo/ToHtml.CC"$.
|
||||
|
||||
*) I looked at bootable CD boot sects, but didn't learn anything, finding it easier to make my own.
|
||||
*) Terry looked at bootable CD boot sects, but didn't learn anything, finding it easier to make his own.
|
||||
|
||||
*) I think I got my original PC speaker code from $FG,2$Borland C$FG$.
|
||||
*) Terry thought he got his original PC speaker code from $FG,2$Borland C$FG$.
|
||||
|
||||
*) I found PS/2 keyboard and mouse code on the net and documentation. My code is very different. I found VGA reg info on the net.
|
||||
*) Terry found PS/2 keyboard and mouse code on the net and documentation. His code is very different. He found VGA reg info on the net.
|
||||
|
||||
*) Thanks to $FG,4$$TX,"http://www.osdev.org",HTML="http://www.osdev.org"$$FG$ for a couple tips.
|
||||
|
||||
*) God told me to stick with 640x480 16 color and single-voice 8-bit signed MIDI-like sample for sound. He kept me from zombie-walking into making child windows like $FG,2$Windows$FG$. Instead, I made one window per task with no child windows. He also guided my progress, very obviously.
|
||||
|
||||
*) I got $FG,4$$TX,"Webster's Dictionary",HTML="http://www.templeos.org/files/DICTIONARY.DD"$$FG$ and $LK,"The King James Bible",A="FI:::/Misc/Bible.TXT"$ from $FG,4$$TX,"Project Gutenberg",HTML="http://web.archive.org/web/20110730111436/http://promo.net/pg/"$$FG$.
|
||||
|
||||
*) John Carmack inspired me to use "$LK,"Clamp",A="MN:Clamp"$" as a name instead of "Limit". He inspired me to use "needle" and "haystack" as names. He inspired me to simplify my Frames-Per-Second code.
|
||||
*) John Carmack inspired Terry to use "$LK,"Clamp",A="MN:Clamp"$" as a name instead of "Limit". He inspired Terry to use "needle" and "haystack" as names. He inspired Terry to simplify his Frames-Per-Second code.
|
||||
|
||||
*) Bill Gates inspired me to add comments to my $LK,"Help & Index",A="FI:::/Doc/HelpIndex.DD"$.
|
||||
*) Bill Gates inspired Terry to add comments to the $LK,"Help & Index",A="FI:::/Doc/HelpIndex.DD"$.
|
||||
|
||||
*) I hired an artist, Cody Rigby, for $$3,000 worth of pixel art.
|
||||
*) Terry hired an artist, Cody Rigby, for $$3,000 worth of pixel art.
|
||||
|
||||
*) Erik van der Karbargenbok wrote /Downloads shell scripts -- gw.
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
$WW,1$$FG,5$$TX+CX,"Cut Corners"$
|
||||
$FG$
|
||||
There are a few places where I cut corners in the interest of not junking-up code. This is part of the ZealOS mentality. I try not to let stupid legacy compatibility issues enter and junk-up ZealOS.
|
||||
There are a few places where corners are cut in the interest of not junking-up code. This is part of the ZealOS mentality. Try not to let stupid legacy compatibility issues enter and junk-up ZealOS.
|
||||
|
||||
* I made my type-casting operator post-fix because it makes the compiler way cleaner.
|
||||
* The type-casting operator was made post-fix because it makes the compiler way cleaner.
|
||||
|
||||
* ZealOS does not figure-out $FG,2$FAT32$FG$ short name alias numbers. $LK,"FAT32DirNew",A="MN:FAT32DirNew"$(). It can cause hard drive corruption, so I might have to do it. It would really take a lot of junky code for this hatefully, detestable, legacy issue. "Please don't make me ruin my beautiful shiny-new ZealOS with that!" I am also not enthused about $FG,2$FAT32$FG$ because it is in patent limbo. $FG,2$FAT32$FG$ might get removed from ZealOS. There is the $LK,"RedSea",A="FI:::/Doc/RedSea.DD"$ 64-bit file system that works perfectly well. $FG,2$FAT32$FG$ is useful, however, because it assists in transferring between dual booted operating systems.
|
||||
* ZealOS does not figure-out $FG,2$FAT32$FG$ short name alias numbers. $LK,"FAT32DirNew",A="MN:FAT32DirNew"$(). It can cause hard drive corruption, so it might have to do it eventually. It would really take a lot of junky code for this hatefully, detestable, legacy issue. "Please don't make us ruin the beautiful shiny-new ZealOS with that!" $FG,2$FAT32$FG$ is also unappealing because it is in patent limbo. $FG,2$FAT32$FG$ might get removed from ZealOS. There is the $LK,"RedSea",A="FI:::/Doc/RedSea.DD"$ 64-bit file system that works perfectly well. $FG,2$FAT32$FG$ is useful, however, because it assists in transferring between dual booted operating systems.
|
||||
|
||||
* I changed the $LK,"asm opcodes",A="FI:::/Compiler/OpCodes.DD"$ names to remove the ambiguity between insts with different numbers of arguments, making my $LK,"assembler",A="FI:::/Compiler/Asm.CC"$ simpler and I did minimal 16-bit asm support, since 64-bit is what you should be using, unless you're doing a $LK,"boot loader",A="FI:::/System/Boot/BootDVD.CC"$.
|
||||
* The $LK,"asm opcodes",A="FI:::/Compiler/OpCodes.DD"$ names were changed to remove the ambiguity between insts with different numbers of arguments, making the $LK,"assembler",A="FI:::/Compiler/Asm.CC"$ simpler and minimal 16-bit asm support was done, since 64-bit is what you should be using, unless you're doing a $LK,"boot loader",A="FI:::/System/Boot/BootDVD.CC"$.
|
||||
|
||||
* There are no user-controlled file-sharing locks. However, the drive and file system have locks and concurrent operations should be fine.
|
||||
|
||||
|
|
|
@ -6,9 +6,9 @@ $WW,1$$FG,5$$TX+CX,"Debugging Overview"$$FG$
|
|||
|
||||
* While debugging, you specify addresses of assembly routines with just the label, as in $FG,2$_MALLOC+0x20$FG$. You specify $LK,"CosmiC",A="FI:::/Doc/CosmiC.DD"$ function names with $FG,2$&$FG$ before functions as in $FG,2$&Print+0x10$FG$.
|
||||
|
||||
* I use $LK,"progress1",A="MN:progress1"$-$LK,"progress4",A="MN:progress4"$ for debugging because they show on the wallpaper. They're just global int vars.
|
||||
* You can use $LK,"progress1",A="MN:progress1"$-$LK,"progress4",A="MN:progress4"$ for debugging because they show on the wallpaper. They're just global int vars.
|
||||
|
||||
* You can use $LK,"SysLog",A="MN:SysLog"$() to send text to the $LK,"System Task",A="FF:::/Doc/Glossary.DD,System Task"$ window. It works like $LK,"Print",A="MN:Print"$(). I never use that. Instead, I use $LK,"RawPrint",A="MN:RawPrint"$().
|
||||
* You can use $LK,"SysLog",A="MN:SysLog"$() to send text to the $LK,"System Task",A="FF:::/Doc/Glossary.DD,System Task"$ window. It works like $LK,"Print",A="MN:Print"$(). You could also use $LK,"RawPrint",A="MN:RawPrint"$().
|
||||
|
||||
* $LK,"D",A="MN:D"$(), $LK,"DocD",A="MN:DocD"$(), $LK,"RawD",A="MN:RawD"$() to do 16 column hex dump mem with numbering from zero. With $LK,"DocD",A="MN:DocD"$ the values are updated continually and you can alter mem by editing.
|
||||
|
||||
|
|
|
@ -1,55 +0,0 @@
|
|||
$WW,1$$FG,5$$TX+CX,"Demands"$$FG$
|
||||
|
||||
Terry Davis was high priest of God's $FG,4$$TX,"official third temple",HTML="http://www.jewishvirtuallibrary.org/jsource/Judaism/The_Temple.html"$$FG$, TempleOS. ZealOS is an operating system for IBM PC x86_64 desktops that will always dual boot along-side Windows or Linux. I am in charge of the core 100,000 lines of ZealOS code and I do continual offerings to keep God entertained. I have divine authority to command any company in the computer industry to do anything that I deem necessary to make God's temple more beautiful, glorious and perfect. I have oversight authority similar to a building inspector or a person enforcing the Americans with Disability Act -- I make commands, God signs-off with a miraculous authentication from an oracle, and Intel, Microsoft or VMware obeys.
|
||||
|
||||
$HC,"<object width=\"640\" height=\"520\"><param name=\"movie\" value=\"http://www.youtube.com/v/RvL7T4gIJN8\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"http://www.youtube.com/v/RvL7T4gIJN8\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" width=\"640\" height=\"520\"></embed></object>"$
|
||||
|
||||
* Windows, Linux and VMware (because of mounted drives) must support $LK,"RedSea",A="FI:::/Doc/RedSea.DD"$ file system when mounting partition, so I can get rid of 1,000 lines of redundant, blemished code -- FAT32. God's temple must be perfect. Redundant code for multiple file systems is bad and imperfect. For this operating system, we want low line count. More than one driver for the same type of device is also bad.
|
||||
|
||||
See $LK,"::/Kernel/BlkDev/FileSysRedSea.CC"$ and $LK,"::/System/Boot/DiskISORedSea.CC"$.
|
||||
|
||||
$LK,"::/Kernel/BlkDev/FileSysFAT.CC"$ :974 lines for FAT32 gets eliminated.
|
||||
$LK,"::/Kernel/BlkDev/DiskClus.CC"$ :152 All the clus operations become blk.
|
||||
|
||||
* Microsoft must cancel SecureBoot because it makes dual booting impossible. ZealOS is an additional operating system that must be used along-side Windows or Linux, not as a replacement. It must dual boot because it has no networking. Real hardware as opposed to VMware is like the difference between looking in a telescope eye piece vs just looking at an off-line image. God said the C64/Apple II generation owned ancestral lands. VMware is like being taken off of our land and moved onto a reservation. In this case, however, it will not stand. In fact, God said to replace Windows with Wine, justice. We can make a 100% standard model PC with a standard software for everyone, backed-up in factory ROM.
|
||||
|
||||
* VMware needs to support ATAPI CD/DVD/Blu-ray disk burning, directly to real hardware. Industry needs write-just once media to stop Farenheit 451 non-sense.
|
||||
|
||||
* VMware has a bug stretching 640x480 16 color to full screen.
|
||||
|
||||
* VMware some PC speaker's distortion is a good idea -- squarewave -- but currently there is too much for hymns. CIA monkery made fart noises.
|
||||
|
||||
* VMware and others must list ZealOS as an official 64-bit operating system and automatically enforce 512 Meg min RAM requirement.
|
||||
|
||||
* VMware needs to support more than 16 cores. I had a 24 core Xeon with 128 Gig of RAM. I discovered VMware allocates memory too slowly, where QEMU had no problem.
|
||||
|
||||
* Until super-simple block devices are available, hard disk should be placed at IDE primary master 1F0/3F6 and CD/DVD/Blu-ray should be placed at the IDE secondary master 170/376. Currently, the wicked CIA plays musical chairs with controllers each time you make an install. With tons of ugly code, I do my best.
|
||||
$LK,"/Kernel/BlkDev/DiskATAId.CC",A="FI:::/Kernel/BlkDev/DiskATAId.CC"$ :286 lines to figure-out I/O ports is gone.
|
||||
$LK,"/Kernel/PCIBIOS.CC",A="FI:::/Kernel/PCIBIOS.CC"$ :290 could be eliminated, but maybe we will keep it so people can play with PCI devices.
|
||||
|
||||
* Until super-simple serial ports are available, PS/2 emulated keyboard and mouse must work. The BIOS must enable these. The plan is to transition the industry off of USB. Interum solution is to make virtual RS232 Octart for USB devices in the same way PS/2 mouse is emulated. All mice will be two button, one wheel. No more HID insanity, no more multi-end point, just simple tx rx fifos with soft/hard flowcontrol that can jump the queue. People with special needs can buy PCI cards. Our kids deserve code this simple $LK,"::/Doc/Comm.CC"$. The right to do your own port banging is what the C64 being our God given ancestral land means.
|
||||
|
||||
* The x86 IN/OUT port instructions, normally have a delay. Perhaps, VMware & Intel can enable faster x86 IN/OUT instruction timing for ATA/ATAPI PIO, so bandwidth isn't as bad when doing port I/O. See $LK,"IDEATAGetRes",A="MN:IDEATAGetRes"$(). We don't want to do DMA. Perhaps, x86 CPU chips need a new ZealOS mode for fast IN/OUT instructions? I think VMware already does something to speed disk I/O to faster than native speed.
|
||||
|
||||
* Perhaps, a new interrupt descriptor table entry type or a new x86 CPU mode can be made that cause fast software interrupts, doing exactly what the CALL REL32 does, but with IDT as indirection. We don't need to change privilege levels or stacks.
|
||||
|
||||
* Since I don't use paging (for anything), Intel should have an option for no-paging long mode, and optimize it!
|
||||
$LK,"::/Kernel/Memory/PageTables.CC"$ :135 lines to identity-map gets eliminated.
|
||||
|
||||
* Desktop computers must have a reset switch and a fast reboot option, skipping diagnostics. I recommend booting ZealOS from a ROM when the reset bttn is pressed and booting UEFI when the power bttn is pressed. Or, we could build UEFI on a ZealOS layer. Intel must burn ZealOS into a ROM in the factory for all desktop x86 CPUs to ensure tamper-proof trust in the oracle and because God deserves the glory. There will be just an English version. A new ROM version is released every seven years. The ROM should boot like the DVD boots, but with $LK,"BOOT_SRC_ROM",A="MN:BOOT_SRC_ROM"$.
|
||||
|
||||
* We do not want UTF, just 8-bit characters. $FG,2$<CTRL-ALT-f>$FG$ toggles between Cyrillic and Std Fonts. We need the twelve window $LK,"TextBorder",A="MN:TextBorder"$ characters added to the VGA font 0x02-0x0D. Japan, China and Korea must switch to alphabets. Maybe, the United States will change to metric, out of good will. I am beginning to plan fresh ASCII replacement, $LK,"::/Doc/NewASCII.DD"$.
|
||||
|
||||
* Microsoft Paint and Linux's Gimp must support ZealOS $LK,"GR Files",A="FI:::/Doc/GRFiles.DD"$. They are blemish free, unlike $TX,"BMP files",HTML="http://en.wikipedia.org/wiki/BMP_file_format"$. The TOSZ Linux utility can be used to make screencasts from ZealOS exported $LK,"GR Files",A="FI:::/Doc/GRFiles.DD"$ and AU Files.
|
||||
|
||||
* We must have a nice dictionary. Someone needs to do a $LK,"Spell Checker",A="FI:::/Demo/SuggestSpelling.CC"$, too.
|
||||
|
||||
* Intel needs to make $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.DD"$ versions of its x86 CPU data sheets documenting all hardware relevant to ZealOS.
|
||||
|
||||
* We must have the ultimate Bible search engine. Currently, all we have is $TX,"filter search",HTML="https://www.youtube.com/watch?v=ULJU8DzvQFo"$. In the end, it should be a low line-count technique. Maybe, I allocate 500 lines out of the 20,000 reserve.
|
||||
|
||||
* We will make a $LK,"Standard ZealOS PC",A="FI:::/Doc/StdZealOSPC.DD"$.
|
||||
$FG,8$
|
||||
* "VMware" is a trademark owned by VMware, Inc.
|
||||
* "Linux" is a trademark owned by Linus Torvalds.
|
||||
* "Windows" and "Paint" are trademarks owned by MicroSoft Corp.$FG$
|
|
@ -98,8 +98,8 @@ The expressions are relative to the current cursor location, unless you make the
|
|||
See $LK,"::/Demo/DolDoc/CursorMove.CC"$.
|
||||
|
||||
$ID,-2$$TR,"AN Anchor"$
|
||||
$ID,2$The $LK,"CDocEntry",A="MN:CDocEntry"$.aux_str arg $FG,2$A=""$FG$ is used for the anchor. I don't use these very often, but they're good sometimes.
|
||||
$ID,-2$$TR-C,"LK Link"$
|
||||
$ID,2$The $LK,"CDocEntry",A="MN:CDocEntry"$.aux_str arg $FG,2$A=""$FG$ is used for the anchor. Terry didn't use these very often, but they're good sometimes.
|
||||
$ID,-2$$TR,"LK Link"$
|
||||
$ID,2$The $LK,"CDocEntry",A="MN:CDocEntry"$.aux_str arg $FG,2$A=""$FG$ is used for the link text. With no aux the tag becomes the link text, as in example 3.
|
||||
|
||||
See $LK,"Link Types",A="MN:LK_FILE"$.
|
||||
|
@ -175,7 +175,7 @@ You can, optionally, include tag text to be displayed for the $FG,2$$$IB...$$$FG
|
|||
The reason for the $FG,2$$$IB...$$$FG$ cmd is to pass a arg to $LK,"Sprite",A="MN:Sprite"$() and $LK,"Sprite3",A="MN:Sprite3"$(). See $LK,"::/Demo/Graphics/SpritePlot.CC"$.
|
||||
|
||||
$ID,-2$$TR,"IS Insert Binary Size"$
|
||||
$ID,2$Inserts a number into the compiled stream describing the size of binary data associated with a bin number. I never use this.
|
||||
$ID,2$Inserts a number into the compiled stream describing the size of binary data associated with a bin number. Terry never used this.
|
||||
$ID,-2$$TR,"SO Song"$
|
||||
$ID,2$See $LK,"Play",A="MN:Play"$(). $LK,"CDocEntry",A="MN:CDocEntry"$.aux_str $FG,2$A=""$FG$ stores the song note text.
|
||||
$ID,-2$$TR,"HL Highlighting"$
|
||||
|
|
|
@ -1,41 +1,37 @@
|
|||
$WW,1$$FG,5$$TX+CX,"Frequently Asked Queuestions"$$FG$
|
||||
|
||||
$TR,"How come it is public domain, not GPL?"$
|
||||
$ID,2$I, $FG,2$Terry A. Davis$FG$, wrote all of ZealOS over the past $TX,"13.8",D="DD_TEMPLEOS_AGE"$ years (full-time). It can run on some bare metal 64-bit PC's from about 2005-2010 with no layering, libraries, tools, modules or anything from other sources. Otherwise, you run it in a virtual machine, like $FG,2$VMware$FG$, $FG,2$QEMU$FG$ or $FG,2$VirtualBox$FG$. It is independent and stands alone. It has no networking, so it certainly doesn't call home. 100% of the src code is including on all distro's, from the kernel to the compiler to the boot loaders! See $LK,"::/Doc/Credits.DD"$.
|
||||
$ID,2$$FG,2$Terry A. Davis$FG$, wrote all of TempleOS over the past $TX,"17.9",D="DD_TEMPLEOS_AGE"$ years (full-time). It can run on some bare metal 64-bit PC's from about 2005-2010 with no layering, libraries, tools, modules or anything from other sources. Otherwise, you run it in a virtual machine, like $FG,2$VMware$FG$, $FG,2$QEMU$FG$ or $FG,2$VirtualBox$FG$. It is independent and stands alone. It has no networking, so it certainly doesn't call home. 100% of the src code is including on all distro's, from the kernel to the compiler to the boot loaders! See $LK,"::/Doc/Credits.DD"$.
|
||||
$ID,-2$$TR,"Shouldn't it be GNU/ZealOS?"$
|
||||
$ID,2$ZealOS executes no code not written by me at any time except for a few $FG,2$BIOS$FG$ calls for configuration. I even wrote boot-loaders, so I do not need Grub. See $LK,"::/Doc/Credits.DD"$.
|
||||
$ID,2$ZealOS executes 100% public-domain code. Boot-loaders were even written, so we do not need Grub. See $LK,"::/Doc/Credits.DD"$.
|
||||
$ID,-2$$TR,"Don't you use GNU's gcc?"$
|
||||
$ID,2$ZealOS was written from scratch, starting with $FG,2$TASM$FG$ long ago, launching from real-mode DOS. Now, there is no $FG,2$Linux$FG$ or $FG,2$GNU$FG$ or any other code in ZealOS. Yes, I wrote the compiler from scratch. See $LK,"::/Doc/Credits.DD"$.
|
||||
$ID,2$ZealOS was written from scratch, starting with $FG,2$TASM$FG$ long ago, launching from real-mode DOS. Now, there is no $FG,2$Linux$FG$ or $FG,2$GNU$FG$ or any other code in ZealOS. Yes, the compiler was written from scratch. See $LK,"::/Doc/Credits.DD"$.
|
||||
$ID,-2$$TR,"Why do you dual boot?"$
|
||||
$ID,2$ZealOS is 100% independent -- it does not access the files of your primary operating system and ZealOS will work as the only operating system on your computer, but it has no networking. In your off hours, you will use your other operating system.
|
||||
$ID,2$ZealOS is 100% independent -- it does not access the files of your primary operating system and ZealOS will work as the only operating system on your computer. In your off hours, you will probably use your other operating system.
|
||||
$ID,-2$$TR,"It has links, so is it a browser?"$
|
||||
$ID,2$ZealOS is an operating system, not a browser. $LK,"ZealOS links",A="MN:LK_FILE"$ are a special format and only link too local files and symbol source addresses.
|
||||
$ID,-2$$TR,"Where are the animated 3D icon GIFs?"$
|
||||
$ID,2$3D $LK,"Sprites",A="FI:::/Doc/Sprite.DD"$ are stored as a mesh of triangles. There are no GIF files. It $LK,"rotates",A="MN:Mat4x4MulXYZ"$ 3D sprite objects on the fly.
|
||||
$ID,-2$$TR,"If the compiler is JIT, isn't it an interpretor?"$
|
||||
$ID,2$ZealOS compiles, doesn't $FG,2$interpret$FG$, and uses no $FG,2$byte code$FG$ anywhere. I loosely use the word $FG,2$script$FG$ sometimes, but it's actually compiled. The compiler's $LK,"optimization",A="MN:OptPass012"$ code is actually where the compiler evaluates constants to simplify them, like every optimizing compiler.
|
||||
$ID,-2$$TR,"Are you a Creationist?"$
|
||||
$ID,2$I am an evolutionist. $FG,2$System$FG$ is a better term for the first father of all tasks than $FG,2$root$FG$ was!
|
||||
$ID,2$ZealOS compiles, doesn't $FG,2$interpret$FG$, and uses no $FG,2$byte code$FG$ anywhere. Terry Davis loosely used the word $FG,2$script$FG$ sometimes, but it's actually compiled. The compiler's $LK,"optimization",A="MN:OptPass012"$ code is actually where the compiler evaluates constants to simplify them, like every optimizing compiler.
|
||||
$ID,-2$$TR,"Is 'Bt()' in the code Bit Torrent?"$
|
||||
$ID,2$$LK,"Bt",A="MN:Bt"$() is $FG,2$bit test$FG$, like the $FG,2$x86$FG$ inst, not $FG,2$bit torrent$FG$.
|
||||
$ID,-2$$TR,"Is 'Fs->' in the code file system?"$
|
||||
$ID,2$$LK,"Fs",A="MN:Fs"$ is a segment reg, not $FG,2$file system$FG$. ($LK,"Fs",A="MN:Fs"$ is kept pointing to the current task's record.) There is no memory segmentation. It is 64-bit and flat. FS and GS are used as general purpose regs, more or less.
|
||||
$ID,-2$$TR,"Is it Pascal?"$
|
||||
$ID,2$ZealOS uses a dialect of C/C++ called $LK,"CosmiC",A="FI:::/Doc/CosmiC.DD"$. It is not $FG,2$Pascal$FG$. I altered the syntax making parenthesis optional on function calls with no paramaters.
|
||||
$ID,2$ZealOS uses a dialect of C/C++ called $LK,"CosmiC",A="FI:::/Doc/CosmiC.DD"$. It is not $FG,2$Pascal$FG$. The syntax was altered making parenthesis optional on function calls with no parameters.
|
||||
$ID,-2$$TR,"Why doesn't Sleep() make my laptop hibernate?"$
|
||||
$ID,2$$LK,"Sleep",A="MN:Sleep"$() makes a program pause. It is not hibernation for a laptop.
|
||||
$ID,-2$$TR,"What is Yield() for in loops?"$
|
||||
$ID,2$$LK,"Yield",A="MN:Yield"$() saves the current task's regs (context) and loads in the next task. In a loop waiting for disk IO, it executes $LK,"Yield",A="MN:Yield"$() which pegs the CPU load, yet the system is responsive.
|
||||
$ID,-2$$TR,"What is JIT Compiled Mode?"$
|
||||
$ID,2$The term $LK,"JIT Compile Mode",A="FF:::/Doc/Glossary.DD,JIT Compile Mode"$ means it compiles and executes code placed into mem, not stored on disk.
|
||||
$ID,-2$$TR,"Why do files end in .Z? Are they encrypted?"$
|
||||
$ID,2$Files with names ending in $FG,2$.Z$FG$ are individually compressed using $LK,"ZealOS Compression",A="FI:::/Kernel/Compress.CC"$. They are not encrypted. $LK,"Copy",A="MN:Copy"$() or rename them with $LK,"Move",A="MN:Move"$() to a name without $FG,2$.Z$FG$ and they will be stored in an uncompressed form. See $LK,"TOSZ",A="FI:::/Doc/TOSZ.DD"$ for Linux or Windows uncompress C/C++ code.
|
||||
$ID,-2$$TR,"Is it open source?\tHow do I build it?"$
|
||||
$ID,2$ZealOS is 100% open src. All the src code is included in the distro. Use $LK,"BootHDIns",A="MN:BootHDIns"$() to compile the kernel and compiler. The rest is $LK,"JIT Compiled",A="FF:::/Doc/Glossary.DD,JIT Compile Mode"$ during boot. See $LK,"::/StartOS.CC"$.
|
||||
$ID,-2$$TR,"Is it open source? How do I build it?"$
|
||||
$ID,2$ZealOS is 100% open source. All the source code is included in the distro. Use $LK,"BootHDIns",A="MN:BootHDIns"$() to compile the kernel and compiler. The rest is $LK,"JIT Compiled",A="FF:::/Doc/Glossary.DD,JIT Compile Mode"$ during boot. See $LK,"::/StartOS.CC"$.
|
||||
$ID,-2$$TR,"Where are object files? How do I link?"$
|
||||
$ID,2$ZealOS does not use object files or a linker. $LK,"AOT Compile Mode",A="FF:::/Doc/Glossary.DD,AOT Compile Mode"$ is used to directly create flat binary files, $LK,"::/Kernel.BIN.C",A="FI:::/Kernel/Kernel.PRJ"$ and $LK,"::/Compiler/Compiler.BIN",A="FI:::/Compiler/Compiler.PRJ"$ with no object files and linking.$FG$ $LK,"JIT Compile Mode",A="FF:::/Doc/Glossary.DD,JIT Compile Mode"$ place code in memory, ready to run, with no object files or linking. Linking is done when $FG,2$BIN$FG$ modules are $LK,"Load",A="MN:Load"$()ed.
|
||||
$ID,-2$$TR,"What is the FPS refresh rate?"$
|
||||
$ID,2$The refresh rate is $TX,"(30000.0/1001)",D="WINMGR_FPS"$ frames-per-second. That is how often ZealOS updates screen mem. It is not syncronized to the hardware.
|
||||
$ID,2$The refresh rate is $TX,"(60000.0 / 1001)",D="WINMGR_FPS"$ frames-per-second. That is how often ZealOS updates screen mem. It is not synchronized to the hardware.
|
||||
$ID,-2$$TR,"How does a task own the speaker?"$
|
||||
$ID,2$No task or application has a lock on the speaker so apps will interfere with each other.
|
||||
$ID,-2$$TR,"Why does it leak memory?"$
|
||||
|
@ -45,7 +41,7 @@ $ID,2$The editor periodically takes a snap-shot of the document for $FG,2$UNDO$F
|
|||
$ID,-2$$TR,"Why is it in text mode?"$
|
||||
$ID,2$ZealOS runs in $FG,2$High-res 32-bit color VBE$FG$ graphics modes, not text mode. It changes to this mode with a $LK,"BIOS call",A="FF:::/Kernel/KStart16.CC,INT:9"$ while in real-mode before it switches to 64-bit mode. The text is $LK,"drawn by hand",A="MN:GrUpdateTextFG"$. See $LK,"::/Kernel/FontStd.CC"$.
|
||||
$ID,-2$$TR,"Where is the kernel memory?"$
|
||||
$ID,2$ZealOS identity-maps all memory, all the time. It is like paging is not used. There is no special kernel $FG,2$high half$FG$ memory space. ZealOS is ring-0-only, so everything is kernel, even user programs. There is a special task called $FG,2$System$FG$ and he doesn't die, so his heap never gets freed. That's as close to $FG,2$kernel memory$FG$ as it gets. All code goes in the lowest 2Gig of addresses, known as the $LK,"Code Heap",A="FF:::/Doc/Glossary.DD,Code and Data Heaps"$, so that the $FG,2$REL32$FG$ addressing mode can be used. See $LK,"MemoryOverview",A="FI:::/Doc/MemoryOverview.DD"$.
|
||||
$ID,2$ZealOS identity-maps all memory, all the time. It is like paging is not used. There is no special kernel $FG,2$high half$FG$ memory space. ZealOS is ring-0-only, so everything is kernel, even user programs. There is a special task called $FG,2$System$FG$ and it doesn't die, so its heap never gets freed. That's as close to $FG,2$kernel memory$FG$ as it gets. All code goes in the lowest 2Gig of addresses, known as the $LK,"Code Heap",A="FF:::/Doc/Glossary.DD,Code and Data Heaps"$, so that the $FG,2$REL32$FG$ addressing mode can be used. See $LK,"MemoryOverview",A="FI:::/Doc/MemoryOverview.DD"$.
|
||||
$ID,-2$$TR,"Why does it run code from stack addresses?"$
|
||||
$ID,2$ZealOS puts all code in the lowest 2Gig, known as the $LK,"Code Heap",A="FF:::/Doc/Glossary.DD,Code and Data Heaps"$, so that the $FG,2$REL32$FG$ addressing mode can be used. ZealOS is 64-bit, but $FG,2$2Gig$FG$ is enough for code. It actually puts global variables there, too, but you can turn that off with $LK,"OPTf_GLOBALS_ON_DATA_HEAP",A="MN:OPTf_GLOBALS_ON_DATA_HEAP"$. $LK,"MAlloc",A="MN:MAlloc"$() allocs higher memory.
|
||||
$ID,-2$$TR,"How does it SYSCALL?"$
|
||||
|
@ -59,7 +55,7 @@ $ID,2$If you use Grub, you $FG,2$chain-load$FG$ like Windows. See $LK,"Boot",A=
|
|||
$ID,-2$$TR,"How do I get Kernel.BIN to boot?"$
|
||||
$ID,2$The boot-loaders must be patched by you running $LK,"BootHDIns",A="MN:BootHDIns"$() or $LK,"BootMHDIns",A="MN:BootMHDIns"$(). Those will write the block address into the boot-loader because the boot-loaders do not navigate file systems to find the $LK,"Stage2",A="FI:::/Kernel/KStart16.CC"$ if you relocate it.
|
||||
$ID,-2$$TR,"Why is there some 16-Bit code?"$
|
||||
$ID,2$ZealOS is 64-bit. Like all PC operating systems, the boot-loader starts in 16-bit real-mode. ZealOS calls a few $FG,2$BIOS$FG$ info routines, switches to VGA-640x480x4bit, switches to 32-bit, then, 64-bit mode. There is an odd thing called a $FG,2$$TX,"PCI BIOS",HTML="http://www.o3one.org/hwdocs/bios_doc/pci_bios_21.pdf"$$FG$ which is 32-bit used for $FG,2$PCI$FG$ config space access. ZealOS calls $LK,"that",A="FI:::/Kernel/PCIBIOS.CC"$ a couple times. It must temporarily drop-out-of 64-bit mode for that and stop multi-tasking.
|
||||
$ID,2$ZealOS is 64-bit. Like all PC operating systems, the boot-loader starts in 16-bit real-mode. ZealOS calls a few $FG,2$BIOS$FG$ info routines, switches to VGA-640x480x4bit, switches to 32-bit, then, 64-bit mode. There is an odd thing called a $FG,2$$TX,"PCI BIOS",HTML="http://www.o3one.org/hwdocs/bios_doc/pci_bios_21.pdf"$$FG$ which is 32-bit used for $FG,2$PCI$FG$ config space access. If supported, ZealOS calls $LK,"that",A="FI:::/Kernel/PCIBIOS.CC"$ a couple times, otherwise using Port I/O for PCI. It must temporarily drop-out-of 64-bit mode for that and stop multi-tasking.
|
||||
$ID,-2$$TR,"Why are you pushing 32-bit values on the stack?"$
|
||||
$ID,2$$FG,2$PUSH EAX$FG$ : All stack operations in 64-bit mode are 64-bits.
|
||||
$ID,-2$$TR,"Why are you using 32-bit insts and not setting high 32-bits?"$
|
||||
|
@ -85,7 +81,7 @@ $ID,2$Sprites can be stored as vector graphics so they might take shockingly lit
|
|||
$ID,-2$$TR,"Why don't I need to recompile /System and /Home files?"$
|
||||
$ID,2$If you change code in the $FG,2$/System$FG$ or your $FG,2$/Home$FG$ directory, you don't need to recompile, you just need to reboot because those directories get recompiled when you boot. It uses $LK,"JIT Compile Mode",A="FF:::/Doc/Glossary.DD,JIT Compile Mode"$. There is no $FG,2$.BIN$FG$ file for $FG,2$JIT$FG$ compilation. See $LK,"::/StartOS.CC"$.
|
||||
$ID,-2$$TR,"Why does it finds files that aren't there?"$
|
||||
$ID,2$If not found, $FG,2$.Z$FG$ is added or removed from filename and a search is done again. If a file is still not found, the parent directories are searched for a file of the same name.
|
||||
$ID,2$If a file is not found, the parent directories are searched for a file of the same name.
|
||||
$ID,-2$
|
||||
$FG,8$
|
||||
* "Windows" is a trademark owned by MicroSoft Corp.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
$WW,1$$FG,5$$TX+CX,"ZealOS' Features"$$FG$
|
||||
$WW,1$$FG,5$$TX+CX,"ZealOS Features"$$FG$
|
||||
|
||||
* Oracle with $FG,2$<F7>$FG$ for words or $FG,2$<SHIFT-F7>$FG$ for passages.
|
||||
|
||||
|
@ -16,9 +16,9 @@
|
|||
|
||||
* Keyboard & Mouse support.
|
||||
|
||||
* ATA PIO Hard drives, support for $FG,2$FAT32$FG$ and $LK,"RedSea",A="FI:::/Doc/RedSea.DD"$ file systems with file compression.
|
||||
* AHCI ATA Hard drives, support for $FG,2$FAT32$FG$ and $LK,"RedSea",A="FI:::/Doc/RedSea.DD"$ file systems with file compression.
|
||||
|
||||
* ATAPI PIO $FG,2$CD/DVD$FG$ support with $FG,2$RedSea$FG$ file system. Can make bootable ISO files so you can roll-your-own distro's.
|
||||
* AHCI ATAPI $FG,2$CD/DVD$FG$ support with $FG,2$RedSea$FG$ file system. Can make bootable ISO files so you can roll-your-own distro's.
|
||||
|
||||
* $LK,"Partitioning",A="MN:DiskPart"$ tool, installer, $FG,2$boot loaders$FG$ for CD/DVD and hard disk.
|
||||
|
||||
|
|
Binary file not shown.
|
@ -151,7 +151,7 @@ $ID,2$The System task is immortal. The system task is created at start-up and ap
|
|||
$ID,-2$$TR,"Executive Tasks"$
|
||||
$ID,2$Each CPU core has an $FG,2$Executive$FG$ task that is immortal. The System task on $FG,2$Core0$FG$ is also its $FG,2$Executive$FG$ task.
|
||||
$ID,-2$$TR,"Code and Data Heaps"$
|
||||
$ID,2$ZealOS uses the asm $FG,2$CALL$FG$ inst, exclusively, and that inst is limited to calling routines $FG,2$+/-2Gig$FG$ from the current code location. To prevent out-of-range issues, I decided to separate code and data, placing all code within the lowest $FG,2$2Gig$FG$ of memory, addresses $FG,2$00000000$FG$-$FG,2$7FFFFFFF$FG$. The compiler and $LK,"Load",A="MN:Load"$()er alloc memory from the code heap to store code and global vars, unless the compiler option $LK,"OPTf_GLOBALS_ON_DATA_HEAP",A="MN:OPTf_GLOBALS_ON_DATA_HEAP"$ is used. When programs call $LK,"MAlloc",A="MN:MAlloc"$() is from the data heap, which in not limited in size, except by physical RAM memory. You can alloc from any heap in any task at any time on any core, even making $LK,"independent",A="MN:MemPagAlloc"$ heaps.
|
||||
$ID,2$ZealOS uses the asm $FG,2$CALL$FG$ inst, exclusively, and that inst is limited to calling routines $FG,2$+/-2Gig$FG$ from the current code location. To prevent out-of-range issues, code and data are separated, placing all code within the lowest $FG,2$2Gig$FG$ of memory, addresses $FG,2$00000000$FG$-$FG,2$7FFFFFFF$FG$. The compiler and $LK,"Load",A="MN:Load"$()er alloc memory from the code heap to store code and global vars, unless the compiler option $LK,"OPTf_GLOBALS_ON_DATA_HEAP",A="MN:OPTf_GLOBALS_ON_DATA_HEAP"$ is used. When programs call $LK,"MAlloc",A="MN:MAlloc"$() is from the data heap, which in not limited in size, except by physical RAM memory. You can alloc from any heap in any task at any time on any core, even making $LK,"independent",A="MN:MemPagAlloc"$ heaps.
|
||||
$ID,-2$$TR,"Parent, Child and PopUp Tasks"$
|
||||
$ID,2$Often a task will $LK,"Spawn",A="MN:Spawn"$() or $LK,"PopUp",A="MN:PopUp"$() a task as a helper. The helper is known as a child Task, though you can $LK,"Spawn",A="MN:Spawn"$ a task and assign it a different parent... like $FG,2$System$FG$. Links are kept as to who's whose child, so when one task is $LK,"Kill",A="MN:Kill"$()ed the child helper tasks die, too. You can get a report of current system tasks with $LK,"TaskRep",A="MN:TaskRep"$(). There is just one window per task, so child tasks are needed for pop-ups.
|
||||
$ID,-2$$TR,"CosmiC"$
|
||||
|
@ -230,7 +230,7 @@ $LK,"FILEMASK_AOT",A="MN:FILEMASK_AOT"$
|
|||
$LK,"FILEMASK_JIT",A="MN:FILEMASK_JIT"$
|
||||
$LK,"FILEMASK_GR",A="MN:FILEMASK_GR"$
|
||||
$ID,-2$$TR,"Naming Convention"$
|
||||
$ID,2$Since there are no $FG,2$namespaces$FG$ and I don't plan to implement name spaces, I highly recommend putting a 2-3 character module code prefix on syms. e.g. $FG,2$WS$FG$, $FG,2$Doc$FG$, $FG,2$Lex$FG$
|
||||
$ID,2$Since there are no $FG,2$namespaces$FG$, it is highly recommended to put a 2-3 character module code prefix on syms. e.g. $FG,2$WS$FG$, $FG,2$Doc$FG$, $FG,2$Lex$FG$
|
||||
|
||||
$FG,5$ALL_CAPS$FG$
|
||||
Assembly Language labels are capitalized with underscores between words. So are $FG,2$#define$FG$'s.
|
||||
|
@ -255,7 +255,7 @@ $FG,5$DOCG_????$FG$
|
|||
|
||||
$FG,5$res$FG$ is reserved for local variables that hold the function return val.
|
||||
|
||||
$FG,5$*$FG$ I used C++ like naming. I place $FG,2$New$FG$, $FG,2$Del$FG$, $FG,2$Init$FG$, $FG,2$Reset$FG$, ect. on the end of a function name instead of at the beginning. $FG,2$ResetMusicSettings$FG$ should be $FG,2$MusicSettingsReset$FG$.
|
||||
$FG,5$*$FG$ C++ like naming is used. $FG,2$New$FG$, $FG,2$Del$FG$, $FG,2$Init$FG$, $FG,2$Reset$FG$, ect. are placed on the end of a function name instead of at the beginning. $FG,2$ResetMusicSettings$FG$ should be $FG,2$MusicSettingsReset$FG$.
|
||||
$ID,-2$$TR,"Fs"$
|
||||
$ID,2$The CPU FS segment reg. This reg points to the current task's $LK,"CTask",A="MN:CTask"$.
|
||||
$ID,-2$$TR,"Gs"$
|
||||
|
@ -266,6 +266,6 @@ $ID,-2$$TR,"Join"$
|
|||
$ID,2$When two parts of a program have a common low-level routine, that routine is often labeled SomethingJoin.
|
||||
$ID,-2$$TR,"user_data"$
|
||||
$ID,2$Many operating system structures have space set aside for you to store values. You are on your own managing these with multiple applications and libraries.
|
||||
$ID,-2$$TR-C,"Multicore Core0/CoreAP"$
|
||||
$ID,-2$$TR,"Multicore Core0/CoreAP"$
|
||||
$ID,2$Core0, has the $LK,"System Task",A="FF:::/Doc/Glossary.DD,System Task"$$FG$, and it is the master. The $FG,2$application processors$FG$ have an $LK,"Executive Task",A="FF:::/Doc/Glossary.DD,Executive Tasks"$ and are the slave processors. Only $FG,2$Core0$FG$ tasks can have windows and can launch applications. Slave cores are used if the application explicitly $LK,"Spawn",A="MN:Spawn"$s() a task or $LK,"JobQueue",A="MN:JobQueue"$() a job on them.
|
||||
$ID,-2$
|
||||
|
|
|
@ -80,11 +80,11 @@ $ID,-5$
|
|||
|
||||
* Global vars in $FG,2$AOT$FG$ BIN modules are initialized to zero. They occupy space in BIN files.
|
||||
|
||||
* Bracketing code with $FG,2$PUSHFD CLI$FG$ and $FG,2$POPFD$FG$ will protect against simultaneous accesses from tasks on $UL,1$one$UL,0$ core. To protect against multiple cores, you need a locked semaphore. I think semiphores need to be in their own cache line, but I'm not sure. I use lock bits in a lot of places not aligned.
|
||||
* Bracketing code with $FG,2$PUSHFD CLI$FG$ and $FG,2$POPFD$FG$ will protect against simultaneous accesses from tasks on $UL,1$one$UL,0$ core. To protect against multiple cores, you need a locked semaphore. Semaphores might need to be in their own cache line. Lock bits are used in a lot of places not aligned.
|
||||
|
||||
* $LK,"SysDebug",A="MN:SysDebug"$() and $LK,"IsSysDebug",A="MN:IsSysDebug"$() are really handy when working on the compiler or kernel. It's just a bit you can set and test.
|
||||
|
||||
* I don't use $FG,2$U0 *$FG$ because the size is zero for ptr arithmetic.
|
||||
* $FG,2$U0 *$FG$ is not used because the size is zero for ptr arithmetic.
|
||||
|
||||
* Do not use $FG,2$#if$FG$ or $FG,2$#ifdef$FG$
|
||||
|
||||
|
@ -114,7 +114,7 @@ See $LK,"::/Doc/Asm.DD"$.
|
|||
|
||||
* When interacting with $LK,"CosmiC",A="FI:::/Doc/CosmiC.DD"$ compiled code, preserve $FG,2$RBP, RSI, RDI, R10-R15$FG$ because the compiler uses these for reg vars. You are free to clobber $FG,2$RAX, RBX, RCX, RDX$FG$, $FG,2$R8$FG$ and $FG,2$R9$FG$. See $LK,"Compiler Reg Masks",A="MN:REGG_LOCAL_VARS"$, $LK,"PUSH_C_REGS",A="MN:PUSH_C_REGS"$ and $LK,"POP_C_REGS",A="MN:POP_C_REGS"$
|
||||
|
||||
* I recommend using the standard stack frame for functions because $LK,"Caller",A="MN:Caller"$() is used to display the call stack, such as for the wallpaper.
|
||||
* It is recommended to use the standard stack frame for functions because $LK,"Caller",A="MN:Caller"$() is used to display the call stack, such as for the wallpaper.
|
||||
$FG,2$ PUSH RBP
|
||||
MOV RBP, RSP
|
||||
SUB RSP, nnnn
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
$WW,1$$FG,2$InFiles$FG$ are used to generate user input to automate operations. The ZealOS tour is done with an $FG,2$InFile$FG$. It reminds me of a Unix pipe because $FG,2$StdOut$FG$ of one gets chained into $FG,2$StdIn$FG$ of another.
|
||||
$WW,1$$FG,2$InFiles$FG$ are used to generate user input to automate operations. The ZealOS tour is done with an $FG,2$InFile$FG$. It is akin to a Unix pipe because $FG,2$StdOut$FG$ of one gets chained into $FG,2$StdIn$FG$ of another.
|
||||
|
||||
When an $FG,2$InFile$FG$ runs, a child task is $LK,"Spawn",A="MN:Spawn"$()ed which intercepts real user input and generates fake input. InFiles are $LK,"CosmiC",A="FI:::/Doc/CosmiC.DD"$ programs run by the child whose stdout goes to the parent's input buffer. $LK,"Message",A="MN:Message"$() can be included in an $FG,2$InFile$FG$ to send special keys or mouse cmds to the parent. While an $FG,2$InFile$FG$ is running, the normal input gets diverted to the InFile task and can be filtered and sent back to the parent task. Unless you are driving functions which prompt for data, you can probably use an $FG,2$#include$FG$ file in place of an $FG,2$InFile$FG$.
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ $WW,1$$FG,5$$TX+CX,"Installing ZealOS"$$FG$
|
|||
|
||||
Burn a CD with software that supports ISO files. Then, boot it. It's a live CD, so you can look around with or without installing.
|
||||
|
||||
Dual booting with another operating system is the best way to use ZealOS. I only use it in a virtual machine because it won't boot natively on my machine, though. For native dual booting, you need a partition for ZealOS. Windows often comes with a restore disk that does not allow repartitioning. I recommend connecting a spare additional hard drive and using the $FG,2$BIOS$FG$ to select which drive to boot.
|
||||
Dual booting with another operating system is the best way to use ZealOS. It is often used in a virtual machine because it won't boot natively on some machines, though. For native dual booting, you need a partition for ZealOS. Windows often comes with a restore disk that does not allow repartitioning. It's recommended to connect a spare additional hard drive and use the $FG,2$BIOS$FG$ to select which drive to boot.
|
||||
|
||||
The $LK,"::/Misc/OSInstall.CC"$ script will automate much of this. It runs if you boot the CD/DVD-ROM.
|
||||
|
||||
|
@ -12,7 +12,7 @@ Two ZealOS partitions are highly recommended, so you can boot to a back-up and f
|
|||
|
||||
1)
|
||||
$ID,2$$LK,"Mount",A="MN:Mount"$() use if the drive is partitioned.
|
||||
$ID,2$This command mounts a drive making it accessible. For simplicity, sel $FG,2$'C'$FG$ as the first drive letter for your hard drive. The first partition will be $FG,2$'C'$FG$, second, $FG,2$'D'$FG$, etc. ZealOS needs 3 numbers to utilize a hard drive -- base0, base1, and unit. When you enter a hexadecimal number, do it like in $FG,2$C$FG$ with a $FG,2$0x$FG$ prefix. If the probe was successful, you can just enter the number in the probe box instead of base0.
|
||||
$ID,2$This command mounts a drive making it accessible. For simplicity, sel $FG,2$'C'$FG$ as the first drive letter for your hard drive. The first partition will be $FG,2$'C'$FG$, second, $FG,2$'D'$FG$, etc. ZealOS needs only 1 number to utilize a hard drive -- port.
|
||||
$ID,-2$
|
||||
$LK,"DiskPart",A="MN:DiskPart"$($FG,2$'C'$FG$) use if drive is not partitioned
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ When you are at the cmd line, editing documents, browsing documentation and help
|
|||
|
||||
$FG,2$<ALT-keys>$FG$ and $FG,2$<ALT-SHIFT-keys>$FG$ Free for user configurations in your $LK,"MyPutKey",A="MN:MyPutKey"$() handler, except for $FG,2$ALT-BACKSPACE$FG$ (undo). There are a few examples pre-defined, but you can change them if you wish.
|
||||
|
||||
$FG,2$<CTRL-ALT-keys>$FG$ and $FG,2$<CTRL-ALT-SHIFT-keys>$FG$ Handled at a system level, NOT by the $LK,"CDoc",A="MN:CDoc"$ editor. I reserve the right to alloc these, but in the mean time, you can define your own handlers with $LK,"CtrlAltCBSet",A="MN:CtrlAltCBSet"$(). They operate either in a interrupt environment or in the window mgr when it queues kbd messages. You can do $LK,"Raw",A="MN:Raw"$() output. $FG,2$<CTRL-ALT-letter>$FG$ handlers take a scan_code as an arg.
|
||||
$FG,2$<CTRL-ALT-keys>$FG$ and $FG,2$<CTRL-ALT-SHIFT-keys>$FG$ Handled at a system level, NOT by the $LK,"CDoc",A="MN:CDoc"$ editor. You can define your own handlers with $LK,"CtrlAltCBSet",A="MN:CtrlAltCBSet"$(). They operate either in a interrupt environment or in the window mgr when it queues kbd messages. You can do $LK,"Raw",A="MN:Raw"$() output. $FG,2$<CTRL-ALT-letter>$FG$ handlers take a scan_code as an arg.
|
||||
|
||||
$FG,2$<CTRL-function key>$FG$ Auto-completes local words.
|
||||
|
||||
|
@ -18,8 +18,8 @@ $FG,2$<CTRL-SHIFT-function key>$FG$ $FG$Jumps to src code.
|
|||
|
||||
$FG,2$<CTRL-SHIFT-digit key>$FG$ Jumps to dictionary definition.
|
||||
|
||||
$FG,2$<function keys>$FG$ and $FG,2$<SHIFT-function keys>$FG$ $FG$I reserve the right to alloc these, but there are some free now.
|
||||
$FG,2$<function keys>$FG$ and $FG,2$<SHIFT-function keys>$FG$ $FG$There are some free for now.
|
||||
|
||||
$FG,2$<CTRL-key>$FG$ and $FG,2$<CTRL-SHIFT-key>$FG$ I reserve the right to alloc to these. There are not many free.
|
||||
$FG,2$<CTRL-key>$FG$ and $FG,2$<CTRL-SHIFT-key>$FG$ There are not many free.
|
||||
$AN,"",A="PutKeyHandling"$
|
||||
See $LK,"Keyboard Devices",A="HI:Keyboard Devices/System"$.
|
||||
|
|
|
@ -8,7 +8,7 @@ You can create new, independent heaps using $LK,"HeapCtrlInit",A="MN:HeapCtrlIni
|
|||
|
||||
Memory alloced by a task will be freed when the task is killed. The $LK,"System Task",A="FF:::/Doc/Glossary.DD,System Task"$ is a task that never dies. His memory is like kernel memory in other operating systems. See $LK,"ZCAlloc",A="MN:ZCAlloc"$(), $LK,"ZMAlloc",A="MN:ZMAlloc"$(), $LK,"ZMAllocIdent",A="MN:ZMAllocIdent"$() and $LK,"ZStrNew",A="MN:ZStrNew"$().
|
||||
|
||||
All of the regular page tables are marked, "cached". When accessing hardware, however, you need uncached page table. The lowest 4Gig addresses have an alias to access hardware located toward the top of mapped space, $FG,2$0x$TX,"01A0000000",D="DD_UNCACHED_ALIAS"$$FG$. See $LK,"dev.uncached_alias",A="FF:::/Kernel/MultiProc.CC,dev.uncached_alias"$.
|
||||
All of the regular page tables are marked, "cached". When accessing hardware, however, you need uncached page table. The lowest 4Gig addresses have an alias to access hardware located toward the top of mapped space, $FG,2$0x$TX,"0100000000",D="DD_UNCACHED_ALIAS"$$FG$. See $LK,"dev.uncached_alias",A="FF:::/Kernel/MultiProc.CC,dev.uncached_alias"$.
|
||||
|
||||
During an extended powered-on session of ZealOS, in theory, memory will become fragmented, requiring a reboot. It has never happens to me.
|
||||
|
||||
|
@ -17,7 +17,7 @@ See $LK,"MemRep",A="MN:MemRep"$() and $LK,"::/Demo/MemDemo.CC"$.
|
|||
|
||||
$FG,5$$TX+CX,"Single System-wide Memory Map"$
|
||||
|
||||
$FG,2$ 0x00$TX,"00007C00",D="DD_KERNEL"$- 0x00$TX,"000368EF",D="DD_KERNEL_END"$$FG$
|
||||
$FG,2$ 0x00$TX,"00007C00",D="DD_KERNEL"$- 0x00$TX,"00037E3F",D="DD_KERNEL_END"$$FG$
|
||||
$ID,2$Kernel module, placed here by the boot-loader, $LK,"BOOT_RAM_BASE",A="MN:BOOT_RAM_BASE"$.
|
||||
$ID,-2$
|
||||
$FG,2$ 0x00$TX,"00096600",D="DD_BOOT_HIGH_LOC_DVD"$- 0x00$TX,"00096FFF",D="DD_BOOT_HIGH_LOC_DVD_END"$$FG$
|
||||
|
@ -27,36 +27,36 @@ $FG,2$ 0x00$TX,"00097000",D="DD_MP_VECT"$- 0x00$TX,"00097030",D="DD_MP_VECT_END"
|
|||
$FG,2$~0x000009F000- 0x000009FFFF$FG$ Extended BIOS data area.
|
||||
$FG,2$ 0x00000A0000- 0x00000BFFFF$FG$ VGA graphics mem with alias at $LK,"text",A="MN:text"$.vga_alias.
|
||||
$FG,2$ 0x00$TX,"00100000",D="DD_SYS_FIXED_AREA_BASE"$- 0x00$TX,"00101FFF",D="DD_SYS_FIXED_AREA_END"$$FG$ $LK,"CSysFixedArea",A="MN:CSysFixedArea"$ for misc.
|
||||
$FG,2$ 0x00$TX,"0010F000",D="DD_MEM_HEAP_BASE"$- 0x00$TX,"7FFFFFFF",D="DD_MEM_HEAP_LIMIT"$$FG$ Code Heap mem.
|
||||
$FG,2$ 0x00$TX,"00104000",D="DD_MEM_HEAP_BASE"$- 0x00$TX,"7FF7F3FF",D="DD_MEM_HEAP_LIMIT"$$FG$ Code Heap mem.
|
||||
|
||||
$FG,2$ 0x00E0000000- 0x00FFFFFFFF$FG$
|
||||
$ID,2$32-bit devices could alloc memory at 0xF0000000 going up, but this is wrong, since some PCs already have devices at 0xF0000000. No PCI devices are supported, so $LK,"Mem32DevAlloc",A="MN:Mem32DevAlloc"$() flaws are not an issue.
|
||||
$ID,2$32-bit devices could alloc memory at 0xF0000000 going up, but this is wrong, since some PCs already have devices at 0xF0000000. PCI devices are supported, so $LK,"Mem32DevAlloc",A="MN:Mem32DevAlloc"$() flaws could become an issue.
|
||||
$ID,-2$
|
||||
$FG,2$ 0x0080000000-~0x00DFFFFFFF$FG$
|
||||
$FG,2$ 0x0100000000-~0x$TX,"019FFFFFFF",D="DD_PHYSICAL_SPACE_END"$$FG$
|
||||
$FG,2$ 0x0100000000-~0x$TX,"00FFFFFFFF",D="DD_PHYSICAL_SPACE_END"$$FG$
|
||||
$ID,2$Data Heap mem. (The physical memory that exists in this range is data heap.)
|
||||
$ID,-2$
|
||||
$FG,2$ 0x$TX,"01A0000000",D="DD_UNCACHED_ALIAS"$- 0x$TX,"029FFFFFFF",D="DD_MAPPED_SPACE_END"$$FG$
|
||||
$FG,2$ 0x$TX,"0100000000",D="DD_UNCACHED_ALIAS"$- 0x$TX,"01FFFFFFFF",D="DD_MAPPED_SPACE_END"$$FG$
|
||||
$ID,2$Uncached alias of first 4Gig. (For 32-bit device access.)
|
||||
$ID,-2$
|
||||
$FG,2$ - 0x$TX,"029FFFFFFF",D="DD_MAPPED_SPACE_END"$$FG$
|
||||
$ID,2$64-bit devices are alloced with $LK,"Mem64DevAlloc",A="MN:Mem64DevAlloc"$() counting backward, but no PCI devices are actually supported$WW,0$.
|
||||
$FG,2$ - 0x$TX,"01FFFFFFFF",D="DD_MAPPED_SPACE_END"$$FG$
|
||||
$ID,2$64-bit devices are alloced with $LK,"Mem64DevAlloc",A="MN:Mem64DevAlloc"$() counting backward$WW,0$.
|
||||
$ID,-2$
|
||||
|
||||
|
||||
$WW,1$* Note: There is a break in the data-heap block pool. This has no effect except the obvious effect that fragmentation has on contiguous requests. I can $LK,"MAlloc",A="MN:MAlloc"$() an 8Gig chunk on my 12Gig machine. I can $LK,"MAlloc",A="MN:MAlloc"$() an 32Gig chunk on my 64Gig machine.
|
||||
$WW,1$* Note: There is a break in the data-heap block pool. This has no effect except the obvious effect that fragmentation has on contiguous requests. You can $LK,"MAlloc",A="MN:MAlloc"$() an 8Gig chunk on a 12Gig machine. You can $LK,"MAlloc",A="MN:MAlloc"$() a 32Gig chunk on a 64Gig machine.
|
||||
|
||||
* Note: For systems with less than 2Gig RAM, the code and data heap block pools are the same. For systems with 2-4Gig of RAM, the code heap is 1/4 of the total. See $LK,"BlkPoolsInit",A="MN:BlkPoolsInit"$().
|
||||
|
||||
|
||||
$FG,5$$TX+CX,"History"$$FG$
|
||||
|
||||
In 2003, I wanted to make a no-paging ring-0-only 64-bit operating system for super speed with simplicity and full access. With paging, every memory request requires 5 accesses -- it must access the address itself, 4K, 2Meg, 1Gig, and 512Gig page tables, but the CPU's translation look-aside buffer mostly removes the penalty for using paging. So, I did not want to use paging, but long mode requires it. I did the next best thing -- I identity-mapped everything and achieved the simplicity I was after with subtle performance boosts, not wasting time changing address maps. And, I look forward to the day I command Intel to make an optimized no-paging long mode.
|
||||
In 2003, Terry Davis wanted to make a no-paging ring-0-only 64-bit operating system for super speed with simplicity and full access. With paging, every memory request requires 5 accesses -- it must access the address itself, 4K, 2Meg, 1Gig, and 512Gig page tables, but the CPU's translation look-aside buffer mostly removes the penalty for using paging. So, he did not want to use paging, but long mode requires it. He did the next best thing -- he identity-mapped everything and achieved the simplicity he was after with subtle performance boosts, not wasting time changing address maps. We look forward to the day Intel makes an optimized no-paging long mode.
|
||||
|
||||
I needed VGA A0000-BFFFF memory to be write-through and 0xE0000000-0xFFFFFFFF to be uncached for various devices. All 64-bit computers allow stopping address translation at 2Meg page size, not using 4K. I wanted to use 2Meg for everything because it's faster, with one less level of page tables. I had to make A0000-BFFFF write-through, though, so I could not use 2Meg size on the lowest page. I did the lowest 2Meg area as 4K pages. I also unmapped the first 4K to cause a fault when dereferencing NULL.
|
||||
Terry needed VGA A0000-BFFFF memory to be write-through and 0xE0000000-0xFFFFFFFF to be uncached for various devices. All 64-bit computers allow stopping address translation at 2Meg page size, not using 4K. He wanted to use 2Meg for everything because it's faster, with one less level of page tables. He had to make A0000-BFFFF write-through, though, so he could not use 2Meg size on the lowest page. He did the lowest 2Meg area as 4K pages. He also unmapped the first 4K to cause a fault when dereferencing NULL.
|
||||
|
||||
In 2016, I came-up with an alternate idea. I double mapped the lowest memory with an alias that was uncached. Accessing the lowest 2Meg area directly was cached but the alias I created up at the top of address space was uncached. See $LK,"UncachedAliasAlloc",A="MN:UncachedAliasAlloc"$(). Unfortunately, I could no longer boast of the simplicity of identity mapping everything. Since many of my users are familiar with A0000-BFFFF, it is actually pretty seriously unfortunate that they cannot use the easy-to-understand numbers of A0000-BFFFF, but must access the relocated alias location. See $LK,"text.vga_alias",A="FF:::/Kernel/KMain.CC,text.vga_alias"$. I also no longer cause a fault when dereferencing NULL.
|
||||
In 2016, Terry came-up with an alternate idea. He double mapped the lowest memory with an alias that was uncached. Accessing the lowest 2Meg area directly was cached but the alias he created up at the top of address space was uncached. See $LK,"UncachedAliasAlloc",A="MN:UncachedAliasAlloc"$(). Unfortunately, he could no longer boast of the simplicity of identity mapping everything. Since many of the users are familiar with A0000-BFFFF, it is actually pretty seriously unfortunate that they cannot use the easy-to-understand numbers of A0000-BFFFF, but must access the relocated alias location. See $LK,"text.vga_alias",A="FF:::/Kernel/KMain.CC,text.vga_alias"$. We also no longer cause a fault when dereferencing NULL.
|
||||
|
||||
Then, I switched to 1Gig page sizes. For the lowest 4Gig, I set-up an alias up at the top of address space. See $LK,"UncachedAliasAlloc",A="MN:UncachedAliasAlloc"$(). Not all computers support 1Gig page tables, however, so I also support 2Meg.
|
||||
Then, Terry switched to 1Gig page sizes. For the lowest 4Gig, he set-up an alias up at the top of address space. See $LK,"UncachedAliasAlloc",A="MN:UncachedAliasAlloc"$(). Not all computers support 1Gig page tables, however, so he also supported 2Meg.
|
||||
|
||||
My original plan was to allow changing the page tables as needed, so I had code for taking control of 2Meg pages and marking them uncached or whatever. When I did a HDAudio driver, I requested some 32-bit address space as uncached. Today, all of the first 4Gig can be accessed without caching at the $LK,"dev.uncached_alias",A="FF:::/Kernel/MultiProc.CC,dev.uncached_alias"$.
|
||||
Terry's original plan was to allow changing the page tables as needed, so he had code for taking control of 2Meg pages and marking them uncached or whatever. When he did an HDAudio driver, he requested some 32-bit address space as uncached. Today, all of the first 4Gig can be accessed without caching at the $LK,"dev.uncached_alias",A="FF:::/Kernel/MultiProc.CC,dev.uncached_alias"$.
|
||||
|
|
|
@ -4,7 +4,7 @@ $WW,1$* You run a risk of problems if you do file operations on the same files s
|
|||
|
||||
* When using $FG,2$FAT32$FG$, ZealOS does not generate unique short-entry names, the ones with the $FG,2$~$FG$s. Not all $FG,2$FAT32$FG$ filenames are valid ZealOS names and it will complain. Do not access $FG,2$FAT32$FG$ drives not dedicated to ZealOS. Disable them with $LK,"DriveEnable",A="MN:DriveEnable"$(OFF), or they will generate error messages. $FG,2$FAT32$FG$ involves a long and short name for each file.
|
||||
|
||||
* The stack does not grow because virtual mem is not used. I recommend allocating large local vars from the heap. You can change $LK,"MEM_DEFAULT_STACK",A="MN:MEM_DEFAULT_STACK"$ and recompile $FG,2$Kernel$FG$ or request more when doing a $LK,"Spawn",A="MN:Spawn"$().
|
||||
* The stack does not grow because virtual mem is not used. It is recommended that you allocate large local vars from the heap. You can change $LK,"MEM_DEFAULT_STACK",A="MN:MEM_DEFAULT_STACK"$ and recompile $FG,2$Kernel$FG$ or request more when doing a $LK,"Spawn",A="MN:Spawn"$().
|
||||
|
||||
* The syntax highlighting occassionally glitches. The compiler doesn't.
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ U32 char_bmp_filename[8] = {0x0000000, 0x03FF73FB, 0xEFFFFFFF, 0x2FFFFFFF, 0xFFF
|
|||
|
||||
public class CDirEntry //64-byte fixed-size
|
||||
{
|
||||
U16 attr; //See $LK,"RS_ATTR_DIR",A="MN:RS_ATTR_DIR"$. I would like to change these.
|
||||
U16 attr; //See $LK,"RS_ATTR_DIR",A="MN:RS_ATTR_DIR"$. Terry wanted to change these.
|
||||
U8 name[CDIR_FILENAME_LEN]; //See $LK,"char_bmp_filename",A="MN:char_bmp_filename"$, $LK,"FileNameCheck",A="MN:FileNameCheck"$
|
||||
I64 clus; $HL,0$$FG,7$(blk)$FG,0$$HL,1$ //One sector per clus.
|
||||
I64 size; //In bytes
|
||||
|
|
|
@ -2,9 +2,9 @@ $WW,1$$FG,5$$TX+CX,"RedSea Reliability"$$FG$
|
|||
|
||||
ZealOS is like the 1040EZ tax form compared to the full 1040 form. Obviously, it is simpler. If you allow mission creep, pretty soon the 1040EZ looks just like the 1040 and the messed-up 1040EZ has no purpose.
|
||||
|
||||
The Commodore 64 had a file system that was simple enough for peers in my generation to enjoy the thrill of knowing exactly what is going on at the hardware level and writing fun projects to access it.
|
||||
The Commodore 64 had a file system that was simple enough for peers in Terry's generation to enjoy the thrill of knowing exactly what is going on at the hardware level and writing fun projects to access it.
|
||||
|
||||
My primary design criteria is simplicity. If it is simple enough for only 100,000 people to learn, lets try to make it simpler so that 1 million can learn it.
|
||||
The primary design criteria is simplicity. If it is simple enough for only 100,000 people to learn, lets try to make it simpler so that 1 million can learn it.
|
||||
|
||||
Obviously, we don't do bad block tables, or redundant FATs.
|
||||
|
||||
|
|
|
@ -6,25 +6,25 @@ $FG,5$User Skills Required$FG$
|
|||
$FG,5$Supported Hardware$FG$
|
||||
* $FG,4$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ PC compatible computer. (Obviously, you need 64-bit hardware for a 64-bit operating system.)
|
||||
|
||||
* 640x480 16 color VGA graphics.
|
||||
* 32-bit color $FG,2$high-res VBE$FG$ graphics.
|
||||
|
||||
* Most$FG$ keyboards and mice.
|
||||
|
||||
* Minimum $TX,"512Meg",D="DD_MEM_MIN_MEG"$ RAM.
|
||||
* Minimum $TX,"256Meg",D="DD_MEM_MIN_MEG"$ RAM.
|
||||
|
||||
* Internal PC Speakers.
|
||||
|
||||
* CD/DVD-ROMs (not SCSI) but only RedSea file system.
|
||||
|
||||
* ATA and SATA hard drives.
|
||||
* SATA hard drives. (SATA, mSATA, m.2)
|
||||
|
||||
* A few networking cards.
|
||||
|
||||
$FG,5$Unsupported Hardware$FG$
|
||||
* No graphics acceleration.
|
||||
|
||||
* No sound cards.
|
||||
|
||||
* $FG,4$No networking$FG$.
|
||||
|
||||
* No USB devices, except keyboard and mouse in legacy mode. No, you can't use flash memory cards.
|
||||
|
||||
* No printers.
|
||||
|
|
|
@ -90,7 +90,7 @@ $FG,2$_extern$FG$ function G C F TR D
|
|||
$FG,2$_extern$FG$ var G C G TR D
|
||||
|
||||
$WW,1$
|
||||
* Goto labels must not have the same name as global scope objects. GoTo's are rare and I don't want to slow the compiler and add code to fix this. You will get errors if a collision happens, so it's not very dangerous, but the error message is baffling.
|
||||
* Goto labels must not have the same name as global scope objects. GoTo's are rare and we don't want to slow the compiler and add code to fix this. You will get errors if a collision happens, so it's not very dangerous, but the error message is baffling.
|
||||
|
||||
* The member names $FG,2$pad$FG$ and $FG,2$reserved$FG$ are special because multiple instances with the same name are allowed in a class.
|
||||
|
||||
|
|
|
@ -1,95 +0,0 @@
|
|||
$WW,1$$FG,5$$TX+CX,"The Standard ZealOS PC"$$FG$
|
||||
|
||||
All desktop PCs will have 8-channel OCTART super-simple high speed serial ports to replace USB. They are simpler because the driver is as simple as old school $LK,"RS232 Serial",A="FI:::/Doc/Comm.CC"$, they have no USB end-points and they have no USB human interface device reports. Computer mice will all have exactly two bttns and one wheel. Game controllers will all be the standard deluxe $TX,"game console controllers",HTML="http://www.gamestop.com/pc/accessories/steam-controller/121865"$ that are popular today. It will have 8 big TX and 8 big RX fifos that allow flow control characters to jump the queue. It should be locked-down to as few options as possible, like 8-1-N only, although hardware may use a USB frame, not an RS232, so stop bits might not be relevant. Perhaps, just two baud rates -- high and low speed are needed. Low speed is good for slow microcontrollers and allows longer cable length. Keyboard, mouse and game controller can be low speed.
|
||||
|
||||
The USB creators banned generic devices, requiring a signed, certified driver for everything! That's no good. We allow any device and will communicate, generically, using a serial terminal program like the old school HyperTerminal, XTalk or Telnet.
|
||||
|
||||
A mouse packet interface should be similar to this:
|
||||
|
||||
$ID,5$TX: <ENTER>
|
||||
RX: X:+3 Y:+0 Wheel:+0 LB:OFF RB:OFF
|
||||
TX: <ENTER>
|
||||
RX: X:+0 Y:-1 Wheel:+0 LB:ON RB:OFF
|
||||
$ID,-5$
|
||||
We aspire to be as simple as a Commodore 64 joystick driver:
|
||||
|
||||
$ID,5$VAL = PEEK(56321)
|
||||
if VAL AND 1 THEN y = y - 1
|
||||
if VAL AND 2 THEN y = y + 1
|
||||
if VAL AND 4 THEN x = x - 1
|
||||
if VAL AND 8 THEN x = x + 1
|
||||
$ID,-5$
|
||||
The game controller will be more complicated, but much simpler than USB. It will use a standard text packet of some kind.
|
||||
|
||||
On the other end, you might hook-up a thermostat microcontroller and interface as a generic serial device. The microcontroller in the thermostat would have something simple, not a crazy overkill ethernet connection.
|
||||
|
||||
$ID,5$$HL,1$U8 b;
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
b = ReadU8(2); //Read byte from high speed serial channel 2.
|
||||
//(Has been configured for low baud because thermostat should be slow.)
|
||||
if (b == CMD_UP)
|
||||
temperature++;
|
||||
else if (b == CMD_DOWN)
|
||||
temperature--;
|
||||
}$HL,0$
|
||||
$ID,-5$
|
||||
Super-simple block devices will replace ATA/ATAPI hard drives and CD/DVD/BlueRays. Today, the industry is in flux with nonvolitile memory just invented. We want a super-simple block device interface for non-volitile memory and for what is currently USB memory sticks, but only if they can be made without bad blocks. I don't think we want to deal with bad block memory, so maybe we will not do NV-memory. The standard ZealOS desktop will require a hard disk.
|
||||
|
||||
There will be minimal commands: READ_BLOCK, WRITE_BLOCK, GET_CAPACITY, GET_MODEL, GET_SERIAL_NUM, and EJECT.
|
||||
|
||||
We want a CPU mode with virtual IO port addresses similar to how paging creates virtual memory addresses. We want a 65536 word look-up table that converts virtual IO port numbers to physical IO port numbers. There will be a standard IO port configuration, so port numbers can be fixed in the code. We want the primary hard drive on one set of ports and the primary CD/DVD/Blu-ray on another set of ports. Choose a contiguous set of IO ports.
|
||||
|
||||
Meanwhile, a complicated PCI interface can be designed along-side the ZealOS interface for Windows and Linux. It would almost be possible to carry-on separate lives, however, the super-simple serial requires getting rid of USB since super-simple serial is a new hardware standard. People can add USB ports with a PCI device card.
|
||||
|
||||
God said He wants single-voice 8-bit signed MIDI-like sample for the sound. God does not want death screams, perhaps, because God has PTSD or soldiers have PTSD. (Imagine wounded on battlefields.)
|
||||
|
||||
The video will be a linear frame buffer 640x480 16 color with one-byte-per-pixel even though it is only 16 color with is 4-bit. Perhaps, we have a interrupt to sync with the refresh.
|
||||
|
||||
I am tmpted to help amateur hardware device designers by making the hardware interface for the PC simple. I have fond memories of 1993, when I made a wire-wrapped ISA data acquisition card which plugged into my 486 and had some analog-to-digital and digital-to-analog convertors. I am not designing a bus. Earlier, I said the super-simple high speed serial port replacement could be USB-like in hardware as long as the software driver interface was simple like old school RS232 serial ports. Requiring a complicated hardware handshake raises the bar, slightly, for the lowest level hardware designers. Most people will be connecting a microcontroller or something that already has a serial communication design, but if it's not a problem, maybe we should keep it simple at all stages. It was nice putting an oscilloscope on my serial port wires.
|
||||
|
||||
The original PC had general purpose digital IO through the parallel port. That was fun. I have enough battles to fight, so I'll leave being a savior to hobbiest hardware engineers to somebody else.
|
||||
|
||||
Digital cameras will be super-simple high speed serial, but ZealOS is forever limited to 16 colors and multimedia is banned because large files being loaded into memory fragments memory, so cameras are somewhat unwelcome. I have enough problems without making the Brits anxious about autonomous gun turrets and killer robots. The reason I say cameras will be super-simple serial is because we are replacing USB ports with super-simple serial. PC's will have only super-simple serial ports unless people buy a USB PCI expansion card. So, the digital cameras will be super-simple serial.
|
||||
|
||||
|
||||
$FG,5$$TX+CX,"Version 1.0"$$FG$
|
||||
|
||||
We will make a spec for a $$8,000, perfectly standardized, cryogenically-cooled, monster desktop PC. It will have 16 cores, integrated 4K graphics, and, hopefully, 6 Ghz continuous operation. Perhaps, 64 Gig of RAM will be standard? God said to help to poor buy them. It is pointless to have a high powered machine if other people have wimpy machines and cannot run programs you write. Therefore, everybody in the developed world will buy a Standard ZealOS IBM PC over the next ten years, so that will be a quantity of 400 million, perhaps. God said to pay the US national debt with the revenue. We will standardize everything, not just the ZealOS related items. The display will be 4K (and of course 640x480 16 color) and no others. Everybody gets just one monitor, unless you buy special PCI cards. Everybody gets two speakers, a headphone, a mic, a webcam and touch screen. We make the audio one sample rate and one sample size, but ZealOS still gets just a square wave. (HD Audio is really screwed-up and requires complicated artificial intelligence, just to route output to speakers.)
|
||||
|
||||
The Standard Temple IBM PC will be a full-sized tower. Perhaps, stain-glass will decorate the case because God is sentimentally attached to stained-glass. We should set the size at exactly 2.5 feet by 1.5 feet by 1.5 feet as in $LK,"Exodus 25:10",A="BF:Exodus,25:10"$ for all time. If there is extra room, make a storage shelf for DVDs. We do not want a race-to-the-bottom, shrinking the size. Instead of making it smaller, make it more powerful. We want to remove all cost pressure from making things small. It must have a CD/DVD/Blu-ray drive. The vision is CD/DVDs used for a library of games, not installed on the hard-drive. We need a network connection, possibly implemented as a super-simple high speed serial device. What about standard monitor and speakers? The C64's success was partially due to wide spread, completely standard, hardware. I think ZealOS will not do bad block devices, so we need a hard drive, not just NV-memory or SSD.
|
||||
|
||||
ZealOS will have the priority over Windows or Linux on hardware decisions. We could make it heterogenious multicore. I think we want 16 non-hyperthreaded cores. Core#0 is the only full-featured core needed. The other cores will have long mode, but not some of these: real mode, protected mode, ring-3, paging, interrupts, in/out port instructions, SSE instructions, MMX instructions.
|
||||
|
||||
God said Intel should do a simulation of heat produced by gates and try spreading-out the heat producing gate circuits on the chip.
|
||||
|
||||
God said Linux's Wine should replace Windows. We will install a standard software set-up on all Standard Temple IBM PC's.
|
||||
|
||||
|
||||
$FG,5$$TX+CX,"Usage"$$FG$
|
||||
|
||||
ZealOS is primarily for user developers, like the Commodore 64 was. I created a total of 50 Meg of content over ten years, so you shouldn't need much room, either. The installed hard drive space should stay small because the resolution is low, multimedia is banned, 3rd party libraries are banned, and applications can be distributed with ISO files or DVDs.
|
||||
|
||||
The ROM will have a command that copies the ROM onto the hard drive, creating identical C and D partitions, so you can have fun modifying ZealOS. You will have confidence you can fix it easily if you break it. It should be able to run everything from just the ROM, too. You will need to specify a /Home directory that is not in the ROM, but on the hard drive.
|
||||
|
||||
The standard set-up will be a C primary drive and a D back-up drive. Keep the size on each hard drive under 512 Meg and periodically copy all of C to D, so they stay mirrored. The file manager and other programs read the entire directory structures, so too many files causes problems (unbearably slow). Third party software should be distributed as ISO files or DVDs, like $FG,4$$TX,"TextAdventure.ISO",HTML="https://github.com/jwhitham/frotz"$$FG$. No 3rd party libraries are permitted because they circumvent the intent of the 100,000 line of code limit which is keeping it cognatively small enough to see the light at the end of the tunnel and easily master everything. Therefore, 3rd party ISO files must bring all required software components with them, except what is found in the ZealOS ROM.
|
||||
|
||||
Having all your 3rd party software on separate DVDs or ISO files and ZealOS running from a ROM, keeps it delightfully simple so you have complete understanding of what is going on. You will have complete confidence and it will be a joy to use. 3rd party applications can store saved data files into your /Home hard drive directory.
|
||||
|
||||
The Temple PC will stay unchanged for seven years at a time. The Bible speaks of a seven year release in $LK,"Deuteronomy 15:1",A="BF:Deuteronomy,15:1"$. The Commodore stayed unchanged for many years and people became intimately familiar with every aspect.
|
||||
|
||||
$HC,"<object width=\"640\" height=\"520\"><param name=\"movie\" value=\"http://www.youtube.com/v/bs_jcTuwPKo\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"http://www.youtube.com/v/bs_jcTuwPKo\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" width=\"640\" height=\"520\"></embed></object>"$
|
||||
|
||||
I thought 2.5' x 1.5' x 1.5' was ridiculously big, but it looks like it is reasonable for super-cooled refrigeration systems!
|
||||
|
||||
|
||||
$FG,5$$TX+CX,"Version 2.0"$$FG$
|
||||
|
||||
$HC,"<center><img src=\"http://i.imgur.com/zUdfEqy.jpg\" width=\"640\" height=\"500\" alt=\"\"></center>"$
|
||||
|
||||
The Standard Temple IBM PC V2.0 will be released seven years after V1.0. Each unit will have a full, uncut, silicon wafer. V2.0 will be sold, unchanged, for seven more years, like a Commodore 64.
|
||||
$FG,8$
|
||||
* "Commodore 64" is a trademark owned by Polabe Holding NV.
|
||||
* "Linux" is a trademark owned by Linus Torvalds.
|
||||
* "Windows" is a trademark owned by MicroSoft Corp.$FG$
|
|
@ -1,20 +1,12 @@
|
|||
$WW,1$$FG,5$$TX+CX,"Decisions Making ZealOS Simple"$
|
||||
$FG$
|
||||
Everybody is obsessed, Jedi mind-tricked, by the notion that when you scale-up, it doesn't get bad, it gets worse. They automatically think things are going to get bigger. Guess what happens when you scale down? It doesn't get good, it gets better!
|
||||
|
||||
I limited it to 100,000 lines of code, forever! I never need a linker or make utility and I can use small labels.
|
||||
|
||||
People mock Bill Gates for, "640K should be enough." I say, "2Gig for code should be enough." The same people who mock Bill Gates are probably just like the black woman who sued for a trillion dollars.
|
||||
|
||||
My Dad worked on converting the Titan missile to the Gemini Mission rocket. It had to be "man-rated". You can bet that everything got an order of magnitude more complexity and documentation. My vision is a souped-up C64, not a 1970's mainframe; a kayak, not a Titanic.
|
||||
|
||||
Linux is a semi-tractor -- you need professional drivers for 20 gears. Linux has file permissions. Common people are hurt by file permissions.
|
||||
|
||||
Windows is a car.
|
||||
|
||||
ZealOS is a motorcycle -- if you lean-over too far, a motorcycle will crash. Don't do that! There are no side air bags on a motorcycle. DOS and C64 had no memory protections and ran in ring-0, with no security. This saves an order of magnitude complexity.
|
||||
|
||||
Linux and Windows are general purpose operating systems. They attempt to do any task you want. ZealOS cherry-picks tasks and is designed to do the same things a C64 did. This saves and order of magnitude complexity. For example, the $LK,"RedSea",A="FI:::/Doc/RedSea.DD"$ file system allocates just contiguous files -- you load and save whole files at once. A benefit is this allows compression. Also, ZealOS does not do networking or multimedia. In theory, memory will fragment with lots of big files. The system would fall to pieces with multimedia, but God said 640x480 16 color is a permanent covenant like circumcision.
|
||||
Linux and Windows are general purpose operating systems. They attempt to do any task you want. ZealOS cherry-picks tasks and is designed to do the same things a C64 did. This saves and order of magnitude complexity. For example, the $LK,"RedSea",A="FI:::/Doc/RedSea.DD"$ file system allocates just contiguous files -- you load and save whole files at once. A benefit is this allows compression. Also, ZealOS does not do multimedia. In theory, memory will fragment with lots of big files. The system would fall to pieces with multimedia.
|
||||
|
||||
A three bttn mouse is like a leg you cannot put weight on. ZealOS just does hardware everybody has, with no divergent code bases for each machine's custom hardware. There is one graphics driver instead of 50 for different GPUs. This saves an order of magnitude complexity and makes for a delightful API, so developer's code is not like a frayed rope end.
|
||||
|
||||
|
@ -22,17 +14,15 @@ A three bttn mouse is like a leg you cannot put weight on. ZealOS just does hard
|
|||
|
||||
* Everything runs in kernel, $FG,2$ring 0$FG$, mode.
|
||||
|
||||
* $FG,2$One memory map$FG$ for all tasks on all cores with virtual addresses set equ to physical, just as though paging is not used.
|
||||
* $FG,2$One memory map$FG$ for all tasks on all cores with virtual addresses set equal to physical, just as though paging is not used.
|
||||
|
||||
* One platform -- $FG,4$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ PC's, no 32-bit support.
|
||||
|
||||
* No security or cryptography.
|
||||
|
||||
* No networking.
|
||||
* Least (greatest) common denominator hardware support. Mostly, one driver for each device class. We can't be in the business of different drivers. Compatibility is the greatest challenge for PC operating systems. Disk code does not use interrupts, avoiding compatibility risks. $FG,2$PS/2$FG$ keyboard/mouse is used instead of $FG,2$USB$FG$, also more compatible.
|
||||
|
||||
* Least (greatest) common denominator hardware support. Mostly, one driver for each device class. I can't be in the business of different drivers. Compatibility is the greatest challenge for PC operating systems. Disk code does not use interrupts, avoiding compatibility risks. $FG,2$PS/2$FG$ keyboard/mouse is used instead of $FG,2$USB$FG$, also more compatible.
|
||||
|
||||
* $FG,2$640x480$FG$ 16 colors. Updates whole screen at $FG,2$60 fps$FG$, optimized for full screen games where $FG,2$InvalidRectangle$FG$s are counter-productive.
|
||||
* Updates whole screen at $FG,2$60 fps$FG$, optimized for full screen games where $FG,2$InvalidRectangle$FG$s are counter-productive.
|
||||
|
||||
* One font, 8x8. Text and graphic layers done in software with text normally on an 8x8 grid.
|
||||
|
||||
|
@ -40,7 +30,7 @@ A three bttn mouse is like a leg you cannot put weight on. ZealOS just does hard
|
|||
|
||||
* No object files. Use $FG,2$JIT$FG$.
|
||||
|
||||
* Whole files are processed almost exclusively, allowing compression.
|
||||
* Whole files are processed almost exclusively.
|
||||
|
||||
* $LK,"One language",A="FI:::/Doc/CosmiC.DD"$ and compiler for command-line, scripts, songs, automations and code.
|
||||
|
||||
|
@ -60,4 +50,4 @@ A three bttn mouse is like a leg you cannot put weight on. ZealOS just does hard
|
|||
|
||||
* No need for namespaces -- scoping occurs automatically based on task symbol table hierarchy with the $LK,"System Task",A="FF:::/Doc/Glossary.DD,System Task"$$FG$'s symbol system-wide global.
|
||||
|
||||
* Sometimes, I $LK,"cut corners",A="FI:::/Doc/CutCorners.DD"$ in the interest of keeping the code beautiful.
|
||||
* Sometimes, we $LK,"cut corners",A="FI:::/Doc/CutCorners.DD"$ in the interest of keeping the code beautiful.
|
||||
|
|
|
@ -3,7 +3,7 @@ $WW,1$$FG,5$$TX+CX,"Linux TOSZ Utility"$$FG$
|
|||
|
||||
$FG,2$TOSZ [-ascii] filename$FG$
|
||||
|
||||
Will uncompress a single file from within Linux. The $FG,2$-ascii$FG$ flag will convert the irregular ZealOS ASCII 5 and ASCII 31 characters to spaces. (ASCII 5 is used to mark the cursor pos and ASCII 31 is used for shifted space characters and will cause problems unless you convert them.)
|
||||
Will uncompress a single file from within Linux. The $FG,2$-ascii$FG$ flag will convert the irregular TempleOS ASCII 5 and ASCII 31 characters to spaces. (ASCII 5 is used to mark the cursor pos and ASCII 31 is used for shifted space characters and will cause problems unless you convert them.)
|
||||
|
||||
$FG,8$
|
||||
* "Linux" is a trademark owned by Linus Torvalds.
|
||||
|
|
|
@ -12,8 +12,8 @@ $WW,1$$FG,5$$TX+CX,"Tips"$$FG$
|
|||
|
||||
* If you make changes to ZealOS files in your $FG,2$/Home$FG$ directory, generally you reboot to make them take effect. (You don't compile anything.) You should have two ZealOS partitions on your hard drive because a syntax error in a start-up file will make the partition unbootable. Boot to the second partition or boot to a standard ZealOS CD/DVD and use $LK,"Mount",A="MN:Mount"$() to mount your hard drive.
|
||||
|
||||
* I copy my files to a mirrored ident partition, periodically with $LK,"CopyTree",A="MN:CopyTree"$() commands in scripts. I do merge commands with a menu entry like this:
|
||||
$FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check my changes.
|
||||
* You can copy your files to a mirrored ident partition, periodically with $LK,"CopyTree",A="MN:CopyTree"$() commands in scripts. You can do merge commands with a menu entry like this:
|
||||
$FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check your changes.
|
||||
|
||||
* $FG,2$<CTRL-m>$FG$ at the cmd line to access your PersonalMenu. Place macros there with $FG,2$<CTRL-l>$FG$, or icon-like sprites with $FG,2$<CTRL-r>$FG$. Use the $FG,2$Pop-Up$FG$ option on macros to $LK,"Spawn",A="MN:Spawn"$() a task to run a file. It dies when it is finished. This returns mem to the system. Be sure to press $FG,2$<CTRL-s>$FG$ to save your macro/menu area after making changes.
|
||||
|
||||
|
@ -29,7 +29,7 @@ $FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check my changes.
|
|||
|
||||
* You can use $FG,2$filter_lines$FG$ in the editor text search form ($FG,2$<CTRL-f>$FG$) to temporarily display just lines near each match. A value of $FG,2$filter lines$FG$ set to $FG,2$5$FG$ will display lines within 5 lines of matches. Then, you can do another find to a different string and achieve a $FG,2$AND$FG$ search. When finished, press $FG,2$<ESC>$FG$.
|
||||
|
||||
* You can recompile and reinstall the kernel with $LK,"BootHDIns",A="MN:BootHDIns"$(). You'll probably want to make a function for recompiling that uses the $LK,"In",A="MN:In"$() function to answer the config questions. See my technique $LK,"Config Strs",A="FL:::/Demo/AcctExample/TOS/TOSConfig.CC,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOS/TOSDistro.CC,1"$.
|
||||
* You can recompile and reinstall the kernel with $LK,"BootHDIns",A="MN:BootHDIns"$(). You'll probably want to make a function for recompiling that uses the $LK,"In",A="MN:In"$() function to answer the config questions. See the technique $LK,"Config Strs",A="FL:::/Demo/AcctExample/TOS/TOSConfig.CC,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOS/TOSDistro.CC,1"$.
|
||||
|
||||
* $LK,"Scale2Mem",A="MN:Scale2Mem"$(min,max,limit=2*1024*1024*1024) can be used for config questions when recompiling. The $LK,"BootHDIns",A="MN:BootHDIns"$() config prompts accept expressions, not just numbers. The default disk cache is $FG,2$Scale2Mem(0x80000,0x8000000)$FG$.
|
||||
|
||||
|
@ -37,7 +37,7 @@ $FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check my changes.
|
|||
|
||||
* Boolean expressions $BK,1$not$BK,0$ in $FG,2$if$FG$ statements don't have short circuit logic and are compiled inefficiently.
|
||||
|
||||
* You can use $LK,"progress1",A="MN:progress1"$-$LK,"progress4",A="MN:progress4"$ in your programs for whatever you like. They're just global vars that are shown on the wallpaper. The original intent was to indicate how far along operations were. There's no coordination, so different apps might interfere. I use them most for debugging--just values easily viewed. See $LK,"::/Demo/Progress.CC"$.
|
||||
* You can use $LK,"progress1",A="MN:progress1"$-$LK,"progress4",A="MN:progress4"$ in your programs for whatever you like. They're just global vars that are shown on the wallpaper. The original intent was to indicate how far along operations were. There's no coordination, so different apps might interfere. They're most often used for debugging--just values easily viewed. See $LK,"::/Demo/Progress.CC"$.
|
||||
|
||||
* Use $LK,"DocMax",A="MN:DocMax"$() to adjust the size of the cmd line buf. It counts $LK,"CDoc",A="MN:CDoc"$ entries, not lines.
|
||||
|
||||
|
@ -103,7 +103,7 @@ $FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check my changes.
|
|||
|
||||
* When editing a sprite, you can cut and paste the elements in the sidebar text list window.
|
||||
|
||||
* I recommend keeping CSprite in vect format until you are done creating them, so you can edit the ctrl points. Then, convert them to bitmaps, so the flood fills work well. If you are doing interpolation, however, they must be vect.
|
||||
* It's recommended to keep CSprite in vector format until you are done creating them, so you can edit the ctrl points. Then, convert them to bitmaps, so the flood fills work well. If you are doing interpolation, however, they must be vector.
|
||||
|
||||
* $LK,"GrFloodFill",A="MN:GrFloodFill"$() is slow. $LK,"GrRect",A="MN:GrRect"$() is fast.
|
||||
|
||||
|
@ -121,7 +121,7 @@ $FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check my changes.
|
|||
|
||||
* The editor's sel-text mechanism allows for disjoint portions of sel text. This is a feature, not a bug -- you can cut-and-paste disjoint text.
|
||||
|
||||
* $LK,"counts.time_stamp_freq",A="MN:CCountsGlobals"$ is continuously calibrated. Be careful because expressions might decrease. Take a snap-shot, like this: $FG,2$timeout = $LK,"TSCGet",A="MN:TSCGet"$ + $LK,"counts.time_stamp_freq",A="MN:CCountsGlobals"$ x seconds;$FG$ and compare against $LK,"TSCGet",A="MN:TSCGet"$(). I recommend just using $LK,"tS",A="MN:tS"$ or $LK,"counts.jiffies",A="MN:CCountsGlobals"$.
|
||||
* $LK,"counts.time_stamp_freq",A="MN:CCountsGlobals"$ is continuously calibrated. Be careful because expressions might decrease. Take a snap-shot, like this: $FG,2$timeout = $LK,"TSCGet",A="MN:TSCGet"$ + $LK,"counts.time_stamp_freq",A="MN:CCountsGlobals"$ x seconds;$FG$ and compare against $LK,"TSCGet",A="MN:TSCGet"$(). It's recommended to just use $LK,"tS",A="MN:tS"$ or $LK,"counts.jiffies",A="MN:CCountsGlobals"$.
|
||||
|
||||
* Use $LK,"HeapLog",A="MN:HeapLog"$(), $LK,"HeapLogAddrRep",A="MN:HeapLogAddrRep"$() and $LK,"HeapLogSizeRep",A="MN:HeapLogSizeRep"$() to find leaks. Don't be confused by $LK,"CDoc",A="MN:CDoc"$ allocations. Those are generated when text is written to the cmd line buffer.
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ Simplicity is a goal to $LK,"keep the line count down",A="FI:::/Doc/Strategy.DD"
|
|||
|
||||
It's a kayak, not a Titanic -- it will crash if you do something wrong. You quickly reboot, however. DOS and the 8-bit home computers of the 80's worked fine without memory protection and most computers in the world -- the embedded ones -- operate without protection. The resulting simplicity of no protections is why ZealOS has value. In facts, that's the point of ZealOS. See the $LK,"ZealOS Charter",A="FI:::/Doc/Charter.DD"$.
|
||||
|
||||
Conventional thinking is "failure is not an option" for general purpose operating systems. Since this OS is used in addition to Windows or Linux, however, failure is an option -- just use Windows or Linux if you can't do something. I cherry-pick what it will and won't do, to make it maximally beautiful. The following applications more or less form a basis that spans the range of use that ZealOS is intended for:
|
||||
Conventional thinking is "failure is not an option" for general purpose operating systems. Since this OS is used in addition to Windows or Linux, however, failure is an option -- just use Windows or Linux if you can't do something. We cherry-pick what it will and won't do, to make it maximally beautiful. The following applications more or less form a basis that spans the range of use that ZealOS is intended for:
|
||||
|
||||
$LK,"/Demo/Games/BattleLines.CC",A="FI:::/Demo/Games/BattleLines.CC"$
|
||||
$LK,"/Demo/Games/BigGuns.CC",A="FI:::/Demo/Games/BigGuns.CC"$
|
||||
|
@ -49,27 +49,27 @@ $LK,"/Apps/Psalmody/Examples/prosper.CC",A="FI:::/Apps/Psalmody/Examples/prosper
|
|||
|
||||
Two things to know about ZealOS are that $UL,1$tasks$UL,0$ have $LK,"MAlloc",A="MN:MAlloc"$/$LK,"Free",A="MN:Free"$ heap memory, not applications, and tasks have compiler symbol tables that persist at a scope like environment variables in other operating systems, and the symbols can include functions.
|
||||
|
||||
For other operating systems, I hated learning one language for command line scripts and another for programming. With $FG,2$ZealOS$FG$, the command line feeds right into the $LK,"CosmiC",A="FI:::/Doc/CosmiC.DD"$ compiler, line by line, and it places code into memory it $LK,"MAlloc",A="MN:MAlloc"$()s. The compiler is paused at the command line, waiting for input. Naturally, you $FG,2$#include$FG$ a program to load it into memory and, usually, start it.
|
||||
With $FG,2$ZealOS$FG$, the command line feeds right into the $LK,"CosmiC",A="FI:::/Doc/CosmiC.DD"$ compiler, line by line, and it places code into memory it $LK,"MAlloc",A="MN:MAlloc"$()s. The compiler is paused at the command line, waiting for input. Naturally, you $FG,2$#include$FG$ a program to load it into memory and, usually, start it.
|
||||
|
||||
During the boot process, many files get $LK,"compiled",A="FI:::/StartOS.CC"$ before you have access to the command line. (Don't worry, booting takes only two seconds.) All the header declarations for the operating system are compiled and are available for use in your programs without needing to $FG,2$#include $FG$them. Everything is truly compiled to native $FG,2$$TX,"x86_64",HTML="http://en.wikipedia.org/wiki/Amd64#AMD64"$$FG$ machine code, nothing is $FG,2$interpreted$FG$ and there is no $FG,2$byte code$FG$.
|
||||
|
||||
Statements at the global scope -- outside the scope of functions -- execute immediately. There is no $FG,2$main()$FG$ function. Instead, you give meaningful names to what would be $FG,2$main()$FG$ functions and you invoke them by calling them with a statement in the global scope, usually at the bottom of your file.
|
||||
|
||||
I started with $FG,2$C$FG$ syntax, but didn't like the command line for a directory listing looking like this:
|
||||
Terry Davis started with $FG,2$C$FG$ syntax, but didn't like the command line for a directory listing looking like this:
|
||||
|
||||
>$FG,2$Dir("*.*",FALSE);
|
||||
|
||||
$FG$So, I added default args from $FG,2$C++$FG$ and it looked like this:
|
||||
$FG$So, he added default args from $FG,2$C++$FG$ and it looked like this:
|
||||
|
||||
>$FG,2$Dir();
|
||||
|
||||
$FG$I didn't like that, so I made parentheses optional on calls with no args and it, now, looks like this:
|
||||
$FG$He didn't like that, so he made parentheses optional on calls with no args and it, now, looks like this:
|
||||
|
||||
>$FG,2$Dir;$FG$
|
||||
|
||||
The syntax change created an ambiguity when specifying function addresses, like for calling $LK,"QuickSort",A="MN:QuickSort"$(). To resolve it, I made a '$FG,2$&$FG$' required in front of function names when specifying an address of a function, which is better anyway.
|
||||
|
||||
Once I was no longer using standard C/C++ syntax, I decided to change everything I didn't like and call it $LK,"CosmiC",A="FI:::/Doc/CosmiC.DD"$. Here are the new $LK,"operator precedence",A="FF:::/Doc/CosmiC.DD,operator precedence"$ rules. It's Biblical! See $LK,"Luke 5:37",A="BF:Luke,5:37"$.
|
||||
Once Terry was no longer using standard C/C++ syntax, he decided to change everything he didn't like and call it $LK,"HolyC",A="FI:::/Doc/CosmiC.DD"$. Here are the new $LK,"operator precedence",A="FF:::/Doc/CosmiC.DD,operator precedence"$ rules. It's Biblical! See $LK,"Luke 5:37",A="BF:Luke,5:37"$.
|
||||
|
||||
There are no object files in ZealOS and, normally, you don't make executable files either, but you can. That's known as $LK,"Ahead-of-Time",A="FF:::/Doc/Glossary.DD,AOT Compile Mode"$ compilation. Instead, you $LK,"Just in Time",A="FF:::/Doc/Glossary.DD,JIT Compile Mode"$ compile.
|
||||
|
||||
|
@ -81,13 +81,11 @@ ZealOS is geared toward reading and writing whole files. There is support for di
|
|||
|
||||
There is no $FG,2$PATH$FG$, but parent directories are searched when a file is not found. This feature is especially useful for default account files.
|
||||
|
||||
The graphic resolution is poor, $FG,2$640x480 16 color$FG$, but God said it was a covenant like circumcision. Also, that's all I feel comfortable with without GPU acceleration supported. A $FG,2$1600x1200x24$FG$ bit screen takes 37 times more memory, implying 37 times the CPU power. Also, a fixed size keeps it simple with everybody machine having the same appearance. Look on the bright-side -- you won't spend as much time twiddling pixels for your game art and you'll have tons of CPU power available, especially with multicore systems.
|
||||
|
||||
ZealOS is for hobbyist programmers on single user (at a time) home computers, not mainframes or servers. The focus task is all-important so symmetrical multiprocessing is almost pointless. Why does it matter running two apps at the same time twice as fast when you really want to run one faster? You could say ZealOS does master/slave multiprocessing. The anticipated use for multicore is primarily putting graphics on the screen. Hardware graphics acceleration is not used, so this is possible. See $LK,"ZealOS MultiCore",A="FI:::/Doc/MultiCore.DD"$.
|
||||
|
||||
There is no distinction between the terms $FG,2$task$FG$, $FG,2$process$FG$ or $FG,2$thread$FG$. All have a task record, $LK,"CTask",A="MN:CTask"$, pointed to by the $FG,2$FS$FG$ segment reg and are accessed with $FG,4$Fs->$FG$ while $FG,4$Gs->$FG$ points to a $LK,"CCPU",A="MN:CCPU"$ for the current CPU core. Each task can have just one window, but a task can have children with windows. (The segment regs are just used as extra regs -- there is nothing segmented about ZealOS' memory.) It is approximately the case that $FG,2$ZealOS$FG$ is multi-threading, single-processing.
|
||||
|
||||
In $FG,2$ZealOS$FG$, $LK,"System Task",A="FF:::/Doc/Glossary.DD,System Task"$$FG$ refers to the father of all tasks. He's never supposed to die. Since tasks inherit the symbols of parents, system-wide stuff is associated with $FG,2$System$FG$. His heap is like kernel memory in other operating systems. Since $FG,2$System$FG$ is immortal, it's safe to alloc objects, not tied to any mortal task, from $FG,2$System$FG$'s heap. He stays in a server mode, taking requests, so you can ask him to $FG,2$#include$FG$ something, placing that code system-wide. A funny story is that originally I called it the $FG,2$root$FG$ task and even had a $FG,2$/Root$FG$ directory :-) $FG,2$System$FG$ executes $LK,"::/StartOS.CC"$ at boot time.
|
||||
In $FG,2$ZealOS$FG$, $LK,"System Task",A="FF:::/Doc/Glossary.DD,System Task"$$FG$ refers to the father of all tasks. He's never supposed to die. Since tasks inherit the symbols of parents, system-wide stuff is associated with $FG,2$System$FG$. His heap is like kernel memory in other operating systems. Since $FG,2$System$FG$ is immortal, it's safe to alloc objects, not tied to any mortal task, from $FG,2$System$FG$'s heap. He stays in a server mode, taking requests, so you can ask him to $FG,2$#include$FG$ something, placing that code system-wide. A funny story is that originally Terry Davis called it the $FG,2$root$FG$ task and even had a $FG,2$/Root$FG$ directory :-) $FG,2$System$FG$ executes $LK,"::/StartOS.CC"$ at boot time.
|
||||
|
||||
For easy back-ups, place everything you author in your $FG,2$/Home$FG$ directory and subdirectories. Then, use $LK,"CopyTree",A="MN:CopyTree"$(). That should make upgrading easy, too. Customizable start-up scripts go in your $FG,2$/Home$FG$ directory. The default start-up scripts are in the root directory. Copy the start-up files you wish to customize into $FG,2$/Home$FG$ and modify them. See $LK,"Home Files",A="FF:::/Doc/GuideLines.DD,/Home Files"$. You can make your own distro that includes everything and is a bootable live CD with $LK,"::/Misc/DoDistro.CC"$.
|
||||
|
||||
|
@ -96,7 +94,7 @@ Typically, your usage pattern through the day will be repeatedly left or right c
|
|||
$FG,2$<CTRL-t>$FG$ toggles plain text mode, showing format commands, a little like viewing html code.
|
||||
$FG,2$<CTRL-l>$FG$ inserts a text widgets.
|
||||
$FG,2$<CTRL-r>$FG$ inserts or edit a graphic sprite resource at cursor location.
|
||||
$FG,2$<CTRL-d>$FG$ brings-up the file manager. It's pretty crappy. I find I don't need it very often, believe it or not.
|
||||
$FG,2$<CTRL-d>$FG$ brings-up the file manager. It's pretty crappy. Terry found he didn't need it very often, believe it or not.
|
||||
$FG,2$<CTRL-b>$FG$ toggles window border.
|
||||
|
||||
$FG,2$<ALT-m>$FG$ maximizes a window.
|
||||
|
@ -122,8 +120,6 @@ Ideally, do not install applications such as games onto your hard drive because
|
|||
|
||||
3rd party libraries are banned, since they circumvent the 100,000 line of code limit in the $LK,"ZealOS Charter",A="FI:::/Doc/Charter.DD"$. All applications must only depend on the core ZealOS files and whatever they bring along in the ISO. This is similar to how Commodore 64 applications only depended on the ROM.
|
||||
|
||||
Create a $LK,"RedSea",A="FI:::/Doc/RedSea.DD"$ ISO file with $LK,"RedSeaISO",A="MN:RedSeaISO"$(). Send an email to $TX,"tdavis@templeos.org",HTML="mailto:tdavis@templeos.org"$ if you want me to post a link to your ZealOS code in the App Store.
|
||||
|
||||
$MA-X+PU,"Take Tour",LM="User(\"Cd(\\\"::/Misc/Tour\\\");;InFile(\\\"Tour\\\");\n\");"$
|
||||
|
||||
$FG,8$
|
||||
|
|
|
@ -2,30 +2,21 @@ $WW,1$$FG,5$$TX+CX,"Why Not More?"$$FG$
|
|||
|
||||
If a feature cannot be made to work correctly and consistently, professional companies usually remove the feature. Because PC hardware is so diverse, getting things to work on all people's computers is really difficult. For one thing, you practically have to own all the different hardware to write drivers for it. If a company wanted to sell a PC operating system, they would offer a warranty and, therefore, could not get away with amateur behavior. ZealOS absolutely requires 64-bit computers, so we leave behind much trouble, but plenty remains.
|
||||
|
||||
The PCI bus interface is what modern hardware uses. Before PCI, life was simple and devices used I/O ports. After studying $LK,"PCI Interrupts",A="FI:::/Demo/Lectures/PCIInterrupts.CC"$ and attempting to do a HDAudio driver, I came to realize that modern PCI devices require ten times more code and I cannot even come close to making them work on everyone's machine because with PCI devices there are several models to worry about, unlike with the older ISA bus devices which can be done with one driver.
|
||||
The PCI bus interface is what modern hardware uses. Before PCI, life was simple and devices used I/O ports. After studying $LK,"PCI Interrupts",A="FI:::/Demo/Lectures/PCIInterrupts.CC"$ and attempting to do a HDAudio driver, Terry Davis came to realize that modern PCI devices require ten times more code and he cannot even come close to making them work on everyone's machine because with PCI devices there are several models to worry about, unlike with the older ISA bus devices which can be done with one driver.
|
||||
|
||||
Currently, I have no PCI drivers. My drivers use I/O ports and operate in ISA bus mode. At this point, I only have one driver for each type of device and it is delightfully simple that way. I have one $LK,"keyboard",A="FI:::/Kernel/SerialDev/Keyboard.CC"$ driver, one $LK,"mouse",A="FI:::/Kernel/SerialDev/Mouse.CC"$ driver, one $LK,"ATA hard drive",A="FI:::/Kernel/BlkDev/DiskATA.CC"$ driver, one $LK,"ATAPI CD/DVD",A="FI:::/Kernel/BlkDev/DiskATA.CC"$ driver, one $LK,"VGA 640x480 16 color",A="FI:::/System/Gr/GrScreen.CC"$ video driver and one $LK,"PC Speaker",A="MN:Sound"$ driver. I use the $LK,"PIT timer",A="MN:TimerInit"$ and $LK,"PIC Interrupt Controller",A="MN:IntPICInit"$. I use IRQ0 for timer, IRQ1 for keyboard, and IRQ12 for mouse. If IRQ12 is not firing, I am able to poll the mouse.
|
||||
Currently, ZealOS has no PCI drivers beyond AHCI and networking. Most drivers use I/O ports and operate in ISA bus mode. At this point, we only have one driver for each type of device and it is delightfully simple that way. ZealOS has one $LK,"keyboard",A="FI:::/Kernel/SerialDev/Keyboard.CC"$ driver, one $LK,"mouse",A="FI:::/Kernel/SerialDev/Mouse.CC"$ driver, one $LK,"ATA hard drive",A="FI:::/Kernel/BlkDev/DiskAHCI.CC"$ driver, one $LK,"ATAPI CD/DVD",A="FI:::/Kernel/BlkDev/DiskAHCI.CC"$ driver, one $LK,"32-bit color high-res VBE graphics",A="FI:::/System/Gr/GrScreen.CC"$ video driver and one $LK,"PC Speaker",A="MN:Sound"$ driver. We use the $LK,"PIT timer",A="MN:TimerInit"$ and $LK,"PIC Interrupt Controller",A="MN:IntPICInit"$. We use IRQ0 for timer, IRQ1 for keyboard, and IRQ12 for mouse. If IRQ12 is not firing, we are able to poll the mouse.
|
||||
|
||||
In the CPU department, I have state of the art 64-bit $LK,"long mode",A="FI:::/Kernel/KStart64.CC"$ with $LK,"multicore",A="FI:::/Kernel/MultiProc.CC"$ support. I use the $LK,"APIC",A="MN:MPAPICInit"$ and start-up $LK,"multicore",A="MN:Core0StartMP"$ operation.
|
||||
In the CPU department, ZealOS has state of the art 64-bit $LK,"long mode",A="FI:::/Kernel/KStart64.CC"$ with $LK,"multicore",A="FI:::/Kernel/MultiProc.CC"$ support. We use the $LK,"APIC",A="MN:MPAPICInit"$ and start-up $LK,"multicore",A="MN:Core0StartMP"$ operation.
|
||||
|
||||
I have made an incredible accomplishment by getting it to work on practically everyone's computer as long as it is 64-bit and they run inside VMware, QEMU or VirtualBox.
|
||||
Terry Davis made an incredible accomplishment by getting it to work on practically everyone's computer as long as it is 64-bit and they run inside VMware, QEMU or VirtualBox.
|
||||
|
||||
Adding a USB driver would be really ugly with UHCI, EHCI, OHCI, USB1, USB2, USB3, ICH6, ICH7, ICH8, ICH9, ICH10, ICH11, ICH12, boot mode and regular mode for keyboard/mouse and a diversity of HID reports. It's hopeless. I could never offer anything but crappy, limited support and it would just add a ton of crappy code that mostly didn't work. What would I gain? Nothing. A keyboard or mouse would not be improved. Solid State USB drives would be really nice, but it's not going to happen.
|
||||
Adding a USB driver would be really ugly with UHCI, EHCI, OHCI, USB1, USB2, USB3, ICH6, ICH7, ICH8, ICH9, ICH10, ICH11, ICH12, boot mode and regular mode for keyboard/mouse and a diversity of HID reports. It's hopeless. It could never offer anything but crappy, limited support and it would just add a ton of crappy code that mostly didn't work. What would ZealOS gain? Nothing. A keyboard or mouse would not be improved. Solid State USB drives would be nice, but it's not going to happen.
|
||||
|
||||
The same story is basically true for GPUs, audio, networking and AHCI hard drive drivers. God said 640x480 16 color was a covenant like circumcision, so the video will never change, even if a $LK,"Standard PC",A="FI:::/Doc/StdZealOSPC.DD"$ was made. If you attempt multimedia, everything will break because memory will get fragmented with huge multimedia files. Some day, if super-simple high speed serial allows networking, there will be no browser within the 100,000 line limit and, with only 16 colors, the world wide web is not tolerable. FTP and telnet might be possible, in the far distant future, if they could fit within the 100,000 line limit. Currently, there are $TX,"80,849",D="DD_TEMPLEOS_LOC"$ lines of code.
|
||||
The same story is basically true for GPUs and audio drivers. If you attempt multimedia, everything will break because memory will get fragmented with huge multimedia files.
|
||||
|
||||
I don't stand a chance working on native hardware, anymore. I could install and run natively on hardware from about 2005-2010. It requires BIOS's being nice enough to write USB mode PS/2 legacy keyboard/mouse support. As it turns-out, sometimes the BIOS has PS/2 drivers but purposely disables them, just to be mean. The CIA and whole industry is trying to mess everything up, on purpose. Perhaps, at a point of sale in a store, a thief could hack a credit card machine. Therefore, the BIOS companies actually want it difficult to make drivers and purposely make it broken.
|
||||
|
||||
The ATA/ATAPI hard drives often can be run with I/O ports if you can $LK,"find them",A="FI:::/Kernel/BlkDev/DiskATAId.CC"$. $FG,2$lspci -v$FG$ on Linux or system information on Windows can help you locate the SATA IO ports the hard drive and CD/DVD have. They no longer are enabled by the BIOS. It's hopeless. I'm stuck with very slow drive performance, but it works for everybody.
|
||||
|
||||
UEFI is pointless. If I am forced to run in VMware, QEMU or VirtualBox, they will always support non-UEFI mode. Without working, native hard drive and CD/DVD drivers, you can't get very far with UEFI on a native install, not to mention SecureBoot. UEFI is, first of all, redundant. If non-UEFI works in a virtual machine, supporting UEFI would only be redundant, ugly nasty code. My compiler does not create an ELF or PE format. I would have to ruin the beauty of my compiler, which would make me cry many tears.
|
||||
|
||||
God talks. It seems reasonable that I will get to make the rules for the whole industry, in the future when God is announced publically to the World.
|
||||
|
||||
I made $LK,"::/Doc/Demands.DD"$.
|
||||
|
||||
When the PC was created, they wanted flexibility because they did not know the future. Now, the industry is mature and it is time to make a 100% standard PC that everybody uses. $LK,"::/Doc/StdZealOSPC.DD"$
|
||||
UEFI is pointless. If ZealOS is forced to run in VMware, QEMU or VirtualBox, they will always support non-UEFI mode. Without working, native hard drive and CD/DVD drivers, you can't get very far with UEFI on a native install, not to mention SecureBoot. UEFI is, first of all, redundant. If non-UEFI works in a virtual machine, supporting UEFI would only be redundant, ugly nasty code. The compiler does not create an ELF or PE format. We would have to ruin the beauty of the compiler.
|
||||
|
||||
God talks.
|
||||
$FG,8$
|
||||
* "QEMU" is a trademark owned by Fabrice Bellard.
|
||||
* "VMware" is a trademark owned by VMware, Inc.
|
||||
|
|
|
@ -51,4 +51,4 @@ U0 MakeMyISO(U8 *_out_iso_filename)
|
|||
|
||||
MakeMyISO("/Tmp/MyDistro.ISO.C");
|
||||
|
||||
// Study my account examples $LK,"Config Strs",A="FL:::/Demo/AcctExample/TOS/TOSConfig.CC,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOS/TOSDistro.CC,1"$.
|
||||
// Study the account examples $LK,"Config Strs",A="FL:::/Demo/AcctExample/TOS/TOSConfig.CC,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOS/TOSDistro.CC,1"$.
|
||||
|
|
|
@ -115,7 +115,7 @@ Bool BlkDevInit(CBlkDev *bd)
|
|||
break;
|
||||
|
||||
case BDT_ATAPI:
|
||||
//0xFFFF*4 is too big for my taste
|
||||
//0xFFFF*4 is too big for Terry's taste
|
||||
bd->max_reads = 0x800 * 4;
|
||||
//max of maybe a quarter of disk cache
|
||||
if (bd->max_reads > blkdev.cache_size / BLK_SIZE / 4)
|
||||
|
|
|
@ -13,7 +13,7 @@ CTask *sys_winmgr_task,
|
|||
U8 *rev_bits_table; //Table with U8 bits reversed
|
||||
CDate local_time_offset;
|
||||
F64 *pow10_I64,
|
||||
sys_os_version = 0.02;
|
||||
sys_os_version = 0.03;
|
||||
|
||||
CAutoCompleteDictGlobals acd;
|
||||
CAutoCompleteGlobals ac;
|
||||
|
|
|
@ -131,7 +131,7 @@ Bool MouseHardReset()
|
|||
if (*0x40E(U16 *) == 0x9FC0)
|
||||
{
|
||||
_b = 0x9FC00+0x30;
|
||||
*_b = 1; //This enables my mouse. It might be for one machine.
|
||||
*_b = 1; //This enables Terry's mouse. It might be for one machine.
|
||||
//USB DMA packets, set-up by BIOS to make legacy PS/2?
|
||||
}
|
||||
|
||||
|
|
|
@ -1,271 +0,0 @@
|
|||
U0 InstallDrive(U8 drv_let)
|
||||
{
|
||||
U8 *st;
|
||||
|
||||
while (!DriveCheck(blkdev.let_to_drive[drv_let - 'A'], FALSE))
|
||||
Sleep(1);
|
||||
Sleep(1000);
|
||||
|
||||
ExePrint("CopyTree(\"::/\",\"%C:/\");", drv_let);
|
||||
ExePrint("DirMake(\"%C:/Tmp\");", drv_let);
|
||||
ExePrint("DirMake(\"%C:/Tmp/ScreenShots\");", drv_let);
|
||||
ExePrint("DirMake(\"%C:/Home\");", drv_let);
|
||||
|
||||
st = MStrPrint("%C:/Home/DoDistro.CC", drv_let);
|
||||
if (!FileFind(st))
|
||||
Copy("::/Misc/DoDistro.CC", st);
|
||||
Free(st);
|
||||
|
||||
st = MStrPrint("%C:/Home/MakeHome.CC", drv_let);
|
||||
if (!FileFind(st))
|
||||
Copy("::/MakeHome.CC", st);
|
||||
Free(st);
|
||||
}
|
||||
|
||||
Bool VMPartDisk(CTask *task, I64 ata_port)
|
||||
{
|
||||
if (ata_port > -1)
|
||||
{
|
||||
XTalkWait(task, "DiskPart(,0.5,0.5);\nC\n%d\nY", ata_port); // DOUBLE CHECK INFILE
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
U0 VMInstallDrive(CTask *task, U8 drv_let, I64 ata_port, I64 atapi_port)
|
||||
{// DOUBLE CHECK INFILE
|
||||
InstallDrive(drv_let);
|
||||
XTalkWait(task, "BootHDIns('%C');\n\nB\n0x20000\n", drv_let);
|
||||
if (ata_port > -1)
|
||||
XTalkWait(task, "C\n%d\n", ata_port);
|
||||
if (atapi_port > -1)
|
||||
XTalkWait(task, "T%d\n", atapi_port);
|
||||
XTalkWait(task, "\n1024\n768\n\n\n"); //Exit Drives, set Screen Resolution, skip Disk Cache and Options
|
||||
}
|
||||
|
||||
U0 VMInstallWiz()
|
||||
{
|
||||
CTask *task;
|
||||
I64 i, atapi_port = -1, ata_port = -1;
|
||||
CAHCIPort *port;
|
||||
|
||||
task = User;
|
||||
TaskWait(task);
|
||||
task->border_src = BDS_CONST;
|
||||
task->border_attr = LTGRAY << 4 + DriveTextAttrGet(':') & 15;
|
||||
task->text_attr = LTGRAY << 4 + BLUE;
|
||||
task->win_inhibit = WIG_TASK_DEFAULT - WIF_SELF_BORDER;
|
||||
WinHorz(Fs->win_left, Fs->win_right, task);
|
||||
WinVert(Fs->win_top, (Fs->win_top + Fs->win_bottom) >> 2 - 1, task);
|
||||
WinVert(task->win_bottom + 3, Fs->win_bottom);
|
||||
WinToTop(Fs);
|
||||
|
||||
|
||||
////////////////////////////////////
|
||||
SATARep;
|
||||
for (i = 0; i < AHCI_MAX_PORTS; i++)
|
||||
{
|
||||
if (Bt(&blkdev.ahci_hba->ports_implemented, i))
|
||||
{
|
||||
port = &blkdev.ahci_hba->ports[i];
|
||||
if (port->signature == AHCI_PxSIG_ATA)
|
||||
{
|
||||
ata_port = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (i = 0; i < AHCI_MAX_PORTS; i++)
|
||||
{
|
||||
if (Bt(&blkdev.ahci_hba->ports_implemented, i))
|
||||
{
|
||||
port = &blkdev.ahci_hba->ports[i];
|
||||
if (port->signature == AHCI_PxSIG_ATAPI)
|
||||
{
|
||||
atapi_port = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (VMPartDisk(task, ata_port))
|
||||
{
|
||||
VMInstallDrive(task, 'C', ata_port, atapi_port);
|
||||
VMInstallDrive(task, 'D', ata_port, atapi_port);
|
||||
BootMHDIns('C');
|
||||
}
|
||||
|
||||
////////////////////////////////////
|
||||
|
||||
WinVert(task->win_top, Fs->win_bottom);
|
||||
Kill(task);
|
||||
}
|
||||
|
||||
U0 RegularInstallWiz()
|
||||
{
|
||||
I64 drv_let;
|
||||
U8 *st, *port_st;
|
||||
I64 ch, res_num;
|
||||
CTask *task;
|
||||
|
||||
task = User;
|
||||
TaskWait(task);
|
||||
task->border_src = BDS_CONST;
|
||||
task->border_attr = LTGRAY << 4 + DriveTextAttrGet(':') & 15;
|
||||
task->text_attr = LTGRAY << 4 + BLUE;
|
||||
task->win_inhibit = WIG_TASK_DEFAULT - WIF_SELF_BORDER;
|
||||
WinHorz(Fs->win_left, Fs->win_right, task);
|
||||
WinVert(Fs->win_top, (Fs->win_top + Fs->win_bottom) >> 2 - 1, task);
|
||||
WinVert(task->win_bottom + 3, Fs->win_bottom);
|
||||
WinToTop(Fs);
|
||||
|
||||
XTalk(task, "Mount;\nC\n");
|
||||
|
||||
"\nSelect the port of the ATA drive to install on.\n";
|
||||
|
||||
"Hard Drive Port: ";
|
||||
while (TRUE)
|
||||
{
|
||||
port_st = StrGet;
|
||||
if ((0 <= Str2I64(port_st) < AHCI_MAX_PORTS) &&
|
||||
((&blkdev.ahci_hba->ports[Str2I64(port_st)])->signature == AHCI_PxSIG_ATA))
|
||||
{
|
||||
break;
|
||||
}
|
||||
Free(port_st);
|
||||
}
|
||||
|
||||
XTalkWait(task, "%s\n\n", port_st);
|
||||
|
||||
DriveRep;
|
||||
do
|
||||
{
|
||||
st = StrGet("\nDestination Partition Letter: ");
|
||||
if (*st)
|
||||
drv_let = Letter2Letter(*st);
|
||||
else
|
||||
drv_let = 0;
|
||||
Free(st);
|
||||
}
|
||||
while (!('A' <= drv_let <= 'Z'));
|
||||
|
||||
'\n';
|
||||
|
||||
"$$RED$$Format %C Partition?$$FG$$\n", drv_let;
|
||||
if (YorN)
|
||||
{
|
||||
'\n';
|
||||
do
|
||||
{
|
||||
"$$PURPLE$$1$$FG$$) Use FAT32\n"
|
||||
"$$PURPLE$$2$$FG$$) Use RedSea\n"
|
||||
"\nFile System Type: ";
|
||||
ch = CharGet;
|
||||
'\n';
|
||||
}
|
||||
while (!('1' <= ch <= '2'));
|
||||
|
||||
if (ch == '1')
|
||||
Format(drv_let,, FALSE, FSt_FAT32);
|
||||
else
|
||||
Format(drv_let,, FALSE, FSt_REDSEA);
|
||||
}
|
||||
InstallDrive(drv_let);
|
||||
|
||||
|
||||
XTalkWait(task, "BootHDIns('%C');\n\nB\n0x20000\nC\n%s\n\n", drv_let, port_st);
|
||||
VideoRep;
|
||||
res_num = I64Get("Enter desired list num ($$PURPLE$$<ENTER>$$FG$$ for max res): ",, 1);
|
||||
XTalkWait(task, "%d\n\n\n", res_num); //skip through Disk Cache, Options
|
||||
"$$RED$$Install Master Boot loader?$$FG$$";
|
||||
if (YorN)
|
||||
{
|
||||
'\n';
|
||||
BootMHDIns(drv_let);
|
||||
}
|
||||
|
||||
WinVert(task->win_top, Fs->win_bottom);
|
||||
Kill(task);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
U0 DoInstructions()
|
||||
{
|
||||
CTask *task = User;
|
||||
|
||||
AutoComplete;
|
||||
WinToTop(Fs);
|
||||
WinTileVert;
|
||||
XTalk(task, "Ed(\"::/Doc/Install.DD\");\n");
|
||||
}
|
||||
|
||||
Bool DoInstall(Bool prompt_reboot)
|
||||
{
|
||||
I64 res = FALSE, vm_install = TRUE, ch;
|
||||
CSMBIOSSystemInfo *sys_info = SMBIOSStructGet(SMBIOSt_SYSTEM);
|
||||
U8 *company = SMBIOSStr(sys_info, sys_info->manufacturer);
|
||||
|
||||
if (StrCompare(company, "VMware, Inc.") && StrCompare(company, "innotek GmbH") && StrCompare(company, "QEMU"))
|
||||
{
|
||||
"\n\n\n\n\nAre you installing inside VMware, QEMU, VirtualBox or a similar virtual machine? ";
|
||||
vm_install = YorN;
|
||||
}
|
||||
DocBottom;
|
||||
if (vm_install)
|
||||
{
|
||||
VMInstallWiz();
|
||||
res = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
"\n\nThis wizard works if you have a partition ready. You can partition the drive or BootHDIns() "
|
||||
"with more options if you do it by hand, not using this wizard.\n\n"
|
||||
"Continue Install Wizard ";
|
||||
if (YorN)
|
||||
{
|
||||
"\n\nUpgrade an existing install,"
|
||||
"\nor create new Installation? (U/I): ";
|
||||
do
|
||||
ch = ToUpper(CharGet(, FALSE));
|
||||
while (ch != 'U' && ch != 'I');
|
||||
|
||||
if (ch == 'I')
|
||||
{
|
||||
RegularInstallWiz();
|
||||
res = TRUE;
|
||||
}
|
||||
else if (ch == 'U')
|
||||
{
|
||||
"\n\n!!! TODO !!! #include \"::/Misc/OSMerge\" and do it manually...\n\n";
|
||||
prompt_reboot = FALSE;
|
||||
res = TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
prompt_reboot = FALSE;
|
||||
}
|
||||
if (prompt_reboot)
|
||||
{
|
||||
"Reboot Now ";
|
||||
if (YorN)
|
||||
{
|
||||
DiscEject(':');
|
||||
Reboot;
|
||||
};
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool OSInstall(Bool prompt_reboot=TRUE)
|
||||
{
|
||||
DoInstructions;
|
||||
|
||||
return DoInstall(prompt_reboot);
|
||||
}
|
||||
|
||||
#if __CMD_LINE__
|
||||
OSInstall(TRUE);
|
||||
#endif
|
|
@ -47,4 +47,4 @@ U0 MakeMyISO(U8 *_out_iso_filename)
|
|||
|
||||
MakeMyISO("/Tmp/MyDistro.ISO.C");
|
||||
|
||||
// Study my account examples $LK,"Config Strs",A="FL:::/Demo/AcctExample/TOS/TOSConfig.CC,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOS/TOSDistro.CC,1"$.
|
||||
// Study the account examples $LK,"Config Strs",A="FL:::/Demo/AcctExample/TOS/TOSConfig.CC,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOS/TOSDistro.CC,1"$.
|
||||
|
|
|
@ -2,6 +2,10 @@ U0 InstallDrive(U8 drv_let)
|
|||
{
|
||||
U8 *st;
|
||||
|
||||
while (!DriveCheck(blkdev.let_to_drive[drv_let - 'A'], FALSE))
|
||||
Sleep(1);
|
||||
Sleep(1000);
|
||||
|
||||
ExePrint("CopyTree(\"::/\",\"%C:/\");", drv_let);
|
||||
ExePrint("DirMake(\"%C:/Tmp\");", drv_let);
|
||||
ExePrint("DirMake(\"%C:/Tmp/ScreenShots\");", drv_let);
|
||||
|
@ -18,32 +22,33 @@ U0 InstallDrive(U8 drv_let)
|
|||
Free(st);
|
||||
}
|
||||
|
||||
Bool VMPartDisk(CTask *task, CATARep *ata_drive)
|
||||
Bool VMPartDisk(CTask *task, I64 ata_port)
|
||||
{
|
||||
if (ata_drive)
|
||||
if (ata_port > -1)
|
||||
{
|
||||
XTalkWait(task, "DiskPart(,0.5,0.5);\nC\np%d\nY", ata_drive->num);
|
||||
XTalkWait(task, "DiskPart(,0.5,0.5);\nC\n%d\nY", ata_port); // DOUBLE CHECK INFILE
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
U0 VMInstallDrive(CTask *task, U8 drv_let, CATARep *ata_drive, CATARep *atapi_drive)
|
||||
{
|
||||
U0 VMInstallDrive(CTask *task, U8 drv_let, I64 ata_port, I64 atapi_port)
|
||||
{// DOUBLE CHECK INFILE
|
||||
InstallDrive(drv_let);
|
||||
XTalkWait(task, "BootHDIns('%C');\n\nB\n0x20000\n", drv_let);
|
||||
if (ata_drive)
|
||||
XTalkWait(task, "C\np%d\n", ata_drive->num);
|
||||
if (atapi_drive)
|
||||
XTalkWait(task, "Tp%d\n", atapi_drive->num);
|
||||
if (ata_port > -1)
|
||||
XTalkWait(task, "C\n%d\n", ata_port);
|
||||
if (atapi_port > -1)
|
||||
XTalkWait(task, "T%d\n", atapi_port);
|
||||
XTalkWait(task, "\n1024\n768\n\n\n"); //Exit Drives, set Screen Resolution, skip Disk Cache and Options
|
||||
}
|
||||
|
||||
U0 VMInstallWiz()
|
||||
{
|
||||
CATARep *head = NULL, *ata_drive = NULL, *atapi_drive = NULL;
|
||||
CTask *task;
|
||||
CTask *task;
|
||||
I64 i, atapi_port = -1, ata_port = -1;
|
||||
CAHCIPort *port;
|
||||
|
||||
task = User;
|
||||
TaskWait(task);
|
||||
|
@ -56,25 +61,52 @@ U0 VMInstallWiz()
|
|||
WinVert(task->win_bottom + 3, Fs->win_bottom);
|
||||
WinToTop(Fs);
|
||||
|
||||
ATARep(FALSE, TRUE, &head);
|
||||
ATAIDDrives(head, &ata_drive, &atapi_drive);
|
||||
if (VMPartDisk(task, ata_drive))
|
||||
|
||||
////////////////////////////////////
|
||||
SATARep;
|
||||
for (i = 0; i < AHCI_MAX_PORTS; i++)
|
||||
{
|
||||
VMInstallDrive(task, 'C', ata_drive, atapi_drive);
|
||||
VMInstallDrive(task, 'D', ata_drive, atapi_drive);
|
||||
if (Bt(&blkdev.ahci_hba->ports_implemented, i))
|
||||
{
|
||||
port = &blkdev.ahci_hba->ports[i];
|
||||
if (port->signature == AHCI_PxSIG_ATA)
|
||||
{
|
||||
ata_port = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (i = 0; i < AHCI_MAX_PORTS; i++)
|
||||
{
|
||||
if (Bt(&blkdev.ahci_hba->ports_implemented, i))
|
||||
{
|
||||
port = &blkdev.ahci_hba->ports[i];
|
||||
if (port->signature == AHCI_PxSIG_ATAPI)
|
||||
{
|
||||
atapi_port = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (VMPartDisk(task, ata_port))
|
||||
{
|
||||
VMInstallDrive(task, 'C', ata_port, atapi_port);
|
||||
VMInstallDrive(task, 'D', ata_port, atapi_port);
|
||||
BootMHDIns('C');
|
||||
}
|
||||
LinkedListDel(head);
|
||||
|
||||
////////////////////////////////////
|
||||
|
||||
WinVert(task->win_top, Fs->win_bottom);
|
||||
Kill(task);
|
||||
}
|
||||
|
||||
U0 RegularInstallWiz()
|
||||
{
|
||||
I64 unit, drv_let;
|
||||
U8 *st, *base0, *base1;
|
||||
CATARep *head = NULL, *tmpha;
|
||||
I64 ch, num_hints, res_num;
|
||||
I64 drv_let;
|
||||
U8 *st, *port_st;
|
||||
I64 ch, res_num;
|
||||
CTask *task;
|
||||
|
||||
task = User;
|
||||
|
@ -87,46 +119,25 @@ U0 RegularInstallWiz()
|
|||
WinVert(Fs->win_top, (Fs->win_top + Fs->win_bottom) >> 2 - 1, task);
|
||||
WinVert(task->win_bottom + 3, Fs->win_bottom);
|
||||
WinToTop(Fs);
|
||||
XTalk(task, "Mount;\nC\np");
|
||||
|
||||
num_hints = ATARep(FALSE,, &head);
|
||||
"\nInclude '$$PURPLE$$0x$$FG$$' for hexidecimal numbers.\n\n";
|
||||
XTalk(task, "Mount;\nC\n");
|
||||
|
||||
"\nSelect the port of the ATA drive to install on.\n";
|
||||
|
||||
"Hard Drive Port: ";
|
||||
while (TRUE)
|
||||
{
|
||||
base0 = StrGet("Hard Drive I/O Port Base0 : ");
|
||||
if (0 < Str2I64(base0) <= 0xFFFF)
|
||||
port_st = StrGet;
|
||||
if ((0 <= Str2I64(port_st) < AHCI_MAX_PORTS) &&
|
||||
((&blkdev.ahci_hba->ports[Str2I64(port_st)])->signature == AHCI_PxSIG_ATA))
|
||||
{
|
||||
break;
|
||||
Free(base0);
|
||||
}
|
||||
if (1 <= Str2I64(base0) <= num_hints)
|
||||
{
|
||||
tmpha = ATARepFind(&head, Str2I64(base0));
|
||||
Free(base0);
|
||||
base0 = MStrPrint("0x%X", tmpha->base0);
|
||||
base1 = MStrPrint("0x%X", tmpha->base1);
|
||||
st = MStrPrint("0x%X", tmpha->unit);
|
||||
unit = Str2I64(st);
|
||||
Free(st);
|
||||
}
|
||||
else
|
||||
{
|
||||
while (TRUE)
|
||||
{
|
||||
base1 = StrGet("Hard Drive I/O Port Base1 : ");
|
||||
if (0 < Str2I64(base1) <= 0xFFFF)
|
||||
break;
|
||||
Free(base1);
|
||||
}
|
||||
do
|
||||
{
|
||||
st = StrGet("Unit--$$PURPLE$$0$$FG$$=Master or $$PURPLE$$1$$FG$$=Slave: ", "0");
|
||||
unit = Str2I64(st);
|
||||
Free(st);
|
||||
}
|
||||
while (!(0 <= unit <= 1));
|
||||
Free(port_st);
|
||||
}
|
||||
LinkedListDel(head);
|
||||
XTalkWait(task, "%s\n%s\n%C\n", base0, base1, '0' + unit);
|
||||
|
||||
XTalkWait(task, "%s\n\n", port_st);
|
||||
|
||||
DriveRep;
|
||||
do
|
||||
{
|
||||
|
@ -161,7 +172,9 @@ U0 RegularInstallWiz()
|
|||
Format(drv_let,, FALSE, FSt_REDSEA);
|
||||
}
|
||||
InstallDrive(drv_let);
|
||||
XTalkWait(task, "BootHDIns('%C');\n\nB\n0x20000\nC\ns%s\n%s\n%C\n", drv_let, base0, base1, '0' + unit);
|
||||
|
||||
|
||||
XTalkWait(task, "BootHDIns('%C');\n\nB\n0x20000\nC\n%s\n\n", drv_let, port_st);
|
||||
VideoRep;
|
||||
res_num = I64Get("Enter desired list num ($$PURPLE$$<ENTER>$$FG$$ for max res): ",, 1);
|
||||
XTalkWait(task, "%d\n\n\n", res_num); //skip through Disk Cache, Options
|
||||
|
@ -171,11 +184,12 @@ U0 RegularInstallWiz()
|
|||
'\n';
|
||||
BootMHDIns(drv_let);
|
||||
}
|
||||
Free(base0);
|
||||
Free(base1);
|
||||
|
||||
WinVert(task->win_top, Fs->win_bottom);
|
||||
Kill(task);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
U0 DoInstructions()
|
||||
|
@ -190,10 +204,10 @@ U0 DoInstructions()
|
|||
|
||||
Bool DoInstall(Bool prompt_reboot)
|
||||
{
|
||||
I64 res = FALSE, vm_install = TRUE;
|
||||
I64 res = FALSE, vm_install = TRUE, ch;
|
||||
CSMBIOSSystemInfo *sys_info = SMBIOSStructGet(SMBIOSt_SYSTEM);
|
||||
U8 *company = SMBIOSStr(sys_info, sys_info->manufacturer);
|
||||
|
||||
|
||||
if (StrCompare(company, "VMware, Inc.") && StrCompare(company, "innotek GmbH") && StrCompare(company, "QEMU"))
|
||||
{
|
||||
"\n\n\n\n\nAre you installing inside VMware, QEMU, VirtualBox or a similar virtual machine? ";
|
||||
|
@ -212,8 +226,23 @@ Bool DoInstall(Bool prompt_reboot)
|
|||
"Continue Install Wizard ";
|
||||
if (YorN)
|
||||
{
|
||||
RegularInstallWiz();
|
||||
res = TRUE;
|
||||
"\n\nUpgrade an existing install,"
|
||||
"\nor create new Installation? (U/I): ";
|
||||
do
|
||||
ch = ToUpper(CharGet(, FALSE));
|
||||
while (ch != 'U' && ch != 'I');
|
||||
|
||||
if (ch == 'I')
|
||||
{
|
||||
RegularInstallWiz();
|
||||
res = TRUE;
|
||||
}
|
||||
else if (ch == 'U')
|
||||
{
|
||||
XTalk(Fs, "#include \"::/Misc/OSMerge\";;\n");
|
||||
prompt_reboot = FALSE;
|
||||
res = TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
prompt_reboot = FALSE;
|
||||
|
@ -222,7 +251,10 @@ Bool DoInstall(Bool prompt_reboot)
|
|||
{
|
||||
"Reboot Now ";
|
||||
if (YorN)
|
||||
{
|
||||
DiscEject(':');
|
||||
Reboot;
|
||||
};
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
|
|
@ -80,3 +80,9 @@ U0 OSMerge(U8 dst_drv, U8 src_drv=':')
|
|||
BootHDIns(dst_drv);
|
||||
}
|
||||
|
||||
U0 OSUpgrade()
|
||||
{
|
||||
"\n\nTODO: OSUpgrade (base off OSInstall)\n\n";
|
||||
}
|
||||
|
||||
OSUpgrade;
|
|
@ -27,8 +27,7 @@ U0 Tmp()
|
|||
if (YorN)
|
||||
{
|
||||
DocBottom;
|
||||
// RunFile("::/Misc/OSInstall",, TRUE);
|
||||
RunFile("::/Misc/AHCIOSInstall",, TRUE);
|
||||
RunFile("::/Misc/OSInstall",, TRUE);
|
||||
}
|
||||
if (FileFind("::/Misc/Tour"))
|
||||
{
|
||||
|
|
|
@ -33,7 +33,7 @@ BDVD_GET_RIP:
|
|||
MOV AX, BOOT_HIGH_LOC_DVD
|
||||
MOV DS, AX
|
||||
|
||||
//My assembler doesn't support 16-bit very well.
|
||||
//The assembler doesn't support 16-bit very well.
|
||||
DU8 0xEA; //JMP BOOT_HIGH_LOC_DVD:BDVD_MAIN
|
||||
DU16 BDVD_MAIN - BDVD_START, BOOT_HIGH_LOC_DVD;
|
||||
|
||||
|
@ -174,7 +174,7 @@ BDVD_MAIN::
|
|||
SHL EAX, 16
|
||||
MOV AX, BOOT_SRC_DVD //$MA-X+PU,"See sys_boot_src",LM="Find(\"sys_boot_src\",\"/*\");View;\n"$
|
||||
|
||||
//My assembler doesn't support 16-bit very well.
|
||||
//The assembler doesn't support 16-bit very well.
|
||||
DU8 0xEA; //JMP BOOT_RAM_BASE:0000
|
||||
DU16 0, BOOT_RAM_BASE / 16;
|
||||
//Continues here $LK,"::/Kernel/KStart16.CC",A="FL:::/Kernel/KStart16.CC,1"$
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
//See $LK,"Install Documentation",A="FI:::/Doc/Install.DD"$.
|
||||
//Study my account examples: $LK,"Config Strs",A="FL:::/Demo/AcctExample/TOS/TOSConfig.CC,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOS/TOSDistro.CC,1"$
|
||||
//Study the account examples: $LK,"Config Strs",A="FL:::/Demo/AcctExample/TOS/TOSConfig.CC,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOS/TOSDistro.CC,1"$
|
||||
|
||||
#include "BootDVD"
|
||||
#include "DiskISORedSea"
|
||||
|
|
|
@ -36,7 +36,7 @@ BHD_GET_RIP:
|
|||
MOV AX, BOOT_HIGH_LOC_HD
|
||||
MOV DS, AX
|
||||
|
||||
//My assembler doesn't support 16-bit very well.
|
||||
//The assembler doesn't support 16-bit very well.
|
||||
DU8 0xEA; //JMP BOOT_HIGH_LOC_HD:BHD_HISTART
|
||||
DU16 BHD_HISTART - BHD_START, BOOT_HIGH_LOC_HD;
|
||||
|
||||
|
@ -82,7 +82,7 @@ BHD_HISTART:
|
|||
|
||||
XOR EBX, EBX
|
||||
MOV EAX, BOOT_SRC_HARDDRIVE //$MA-X+PU,"See sys_boot_src",LM="Find(\"sys_boot_src\",\"/*\");View;\n"$
|
||||
//My assembler doesn't support 16-bit very well.
|
||||
//The assembler doesn't support 16-bit very well.
|
||||
DU8 0xEA; //JMP BOOT_RAM_BASE:0000
|
||||
DU16 0, BOOT_RAM_BASE / 16;
|
||||
//Continues here $LK,"::/Kernel/KStart16.CC",A="FL:::/Kernel/KStart16.CC,1"$
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
//See $LK,"Install Documentation",A="FI:::/Doc/Install.DD"$.
|
||||
//Study my account examples: $LK,"Config Strs",A="FL:::/Demo/AcctExample/TOS/TOSConfig.CC,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOS/TOSDistro.CC,1"$
|
||||
//Study the account examples: $LK,"Config Strs",A="FL:::/Demo/AcctExample/TOS/TOSConfig.CC,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOS/TOSDistro.CC,1"$
|
||||
|
||||
#include "BootHD"
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ BMHD_GET_RIP:
|
|||
MOV AX, BOOT_HIGH_LOC_MHD
|
||||
MOV DS, AX
|
||||
|
||||
//My assembler doesn't support 16-bit very well.
|
||||
//The assembler doesn't support 16-bit very well.
|
||||
DU8 0xEA; //JMP BOOT_HIGH_LOC_MHD:BMHD_HISTART
|
||||
DU16 BMHD_HISTART - BMHD_START, BOOT_HIGH_LOC_MHD;
|
||||
|
||||
|
@ -96,7 +96,7 @@ BMHD_HISTART:
|
|||
|
||||
MOV DL, U8 [BMHD_BIOS_DRIVE_NUM - BMHD_START]
|
||||
MOV EBX, U32 [BMHD_OLD_CS_RIP - BMHD_START]
|
||||
//My assembler doesn't support 16-bit very well.
|
||||
//The assembler doesn't support 16-bit very well.
|
||||
DU8 0xEA; //JMP BOOT_RAM_BASE:0000
|
||||
DU16 0, BOOT_RAM_BASE / 16;
|
||||
//Continues here $LK,"BMHD2_START",A="FF:::/System/Boot/BootMHD2.CC,BMHD2_START"$
|
||||
|
|
|
@ -24,7 +24,7 @@ BMHD2_START::
|
|||
MOV AX, BOOT_HIGH_LOC_MHD2
|
||||
MOV DS, AX
|
||||
|
||||
//My assembler doesn't support 16-bit very well.
|
||||
//The assembler doesn't support 16-bit very well.
|
||||
DU8 0xEA; //JMP BOOT_HIGH_LOC_MHD2:BMHD2_HISTART
|
||||
DU16 BMHD2_HISTART - BMHD2_START, BOOT_HIGH_LOC_MHD2;
|
||||
|
||||
|
@ -111,7 +111,7 @@ BMHD2_HISTART:
|
|||
POP DS
|
||||
POPF
|
||||
|
||||
//My assembler doesn't support 16-bit very well.
|
||||
//The assembler doesn't support 16-bit very well.
|
||||
DU8 0xEA; //JMP xxxx:yyyy
|
||||
BMHD2_OLD_CS_RIP:
|
||||
DU16 0, 0;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
//See $LK,"Install Documentation",A="FI:::/Doc/Install.DD"$.
|
||||
//Study my account examples: $LK,"Config Strs",A="FL:::/Demo/AcctExample/TOS/TOSConfig.CC,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOS/TOSDistro.CC,1"$
|
||||
//Study the account examples: $LK,"Config Strs",A="FL:::/Demo/AcctExample/TOS/TOSConfig.CC,1"$, $LK,"Update Funs",A="FL:::/Demo/AcctExample/TOS/TOSDistro.CC,1"$
|
||||
|
||||
#include "BootMHD"
|
||||
#include "BootMHD2"
|
||||
|
|
|
@ -1,28 +1,28 @@
|
|||
Cd(__DIR__);;
|
||||
#include "ZExterns"
|
||||
#include "ZMath"
|
||||
#include "Externs"
|
||||
#include "Math"
|
||||
#include "Training"
|
||||
#include "ZMemory"
|
||||
#include "ZMathODE"
|
||||
#include "Memory"
|
||||
#include "MathODE"
|
||||
#include "Gr/MakeGr"
|
||||
#include "ZSound"
|
||||
#include "ZBlkDev/MakeZBlkDev"
|
||||
#include "Sound"
|
||||
#include "BlkDev/MakeZBlkDev"
|
||||
#include "Menu"
|
||||
#include "Win"
|
||||
#include "WinMgr"
|
||||
#include "ZDebug"
|
||||
#include "Debug"
|
||||
#include "::/System/God/GodExterns"
|
||||
#include "DolDoc/MakeDoc"
|
||||
LBts(&sys_run_level, RLf_DOC);
|
||||
#include "Ctrls/MakeCtrls"
|
||||
#include "InFile"
|
||||
#include "ZRegistry"
|
||||
#include "Registry"
|
||||
#include "AutoComplete/MakeAC"
|
||||
#include "God/MakeGod"
|
||||
#include "ZHash"
|
||||
#include "Hash"
|
||||
#include "TaskSettings"
|
||||
#include "DevInfo"
|
||||
#include "ZDefine"
|
||||
#include "Define"
|
||||
#include "WallPaper"
|
||||
#include "ZMouse"
|
||||
#include "Mouse"
|
||||
Cd("..");;
|
||||
|
|
|
@ -632,7 +632,7 @@ to provide ress good enough for games. It uses a runge-kutta
|
|||
integrator which is a better algorithm than doing it with Euler.
|
||||
|
||||
It is adaptive step-sized, so it slows down when an important
|
||||
event is taking place to improve accuracy, but in my implementation
|
||||
event is taking place to improve accuracy, but in this implementation
|
||||
it has a timeout.
|
||||
*/
|
||||
I64 i;
|
Loading…
Reference in a new issue