TempleOSCDV3.11.ISO
This commit is contained in:
1 parent
f8c05f98f4
commit
ed64d7e3b8
549 files changed
+10643
-12855
No files matched your search
@@ -1,4 +1,4 @@
|
||||
$FG,2$$WW,1$AutoComplete$FG$ is the $FG,7$LTGRAY$FG$ window on the right of the screen. $LK,"ACInit",A="MN:ACInit"$() collects words from all text files in subdirectories. Normally, the call to $LK,"ACInit",A="MN:ACInit"$() is in $LK,"AdamSys.CPP",A="FF:/Home/AdamSys.CPP,ACInit"$. It provides auto-complete for typing, jump-to-code and jump-to-dictionary functionality.
|
||||
$FG,2$$WW,1$AutoComplete$FG$ is the $FG,7$LTGRAY$FG$ window on the right of the screen. $LK,"ACInit",A="MN:ACInit"$() collects words from all text files in subdirectories. Normally, the call to $LK,"ACInit",A="MN:ACInit"$() is in $LK,"HomeSys.CPP",A="FF:/Home/HomeSys.CPP,ACInit"$. It provides auto-complete for typing, jump-to-code and jump-to-dictionary functionality.
|
||||
|
||||
$FG,2$<ALT-SHIFT-A>$FG$ Closes the $FG,7$LTGRAY$FG$ AutoComplete window.
|
||||
$FG,2$<ALT-a>$FG$ Opens the $FG,7$LTGRAY$FG$ AutoComplete window.
|
||||
|
||||
Binary file not shown.
+138
-25
@@ -2,7 +2,120 @@
|
||||
|
||||
Use $LK,"R",A="MN:R"$() to rename if I change a label.
|
||||
|
||||
$IV,1$----07/20/15 11:24:35----$IV,0$
|
||||
$IV,1$----09/27/15 21:18:10----$IV,0$
|
||||
|
||||
$IV,1$----09/27/15 11:46:44----$IV,0$
|
||||
* Got rid of preemption.
|
||||
|
||||
$IV,1$----09/23/15 14:17:35----$IV,0$
|
||||
* No arrays in fun args.
|
||||
* Got rid of 4x4 array dimensions in function args.
|
||||
|
||||
$IV,1$----09/05/15 11:26:12----$IV,0$
|
||||
* Gave $LK,"I_DIV_ZERO",A="MN:I_DIV_ZERO"$ its own vector instead of common fault vector.
|
||||
* $LK,"R",A="MN:R"$("$FG,4$Dsk$FG$","$FG,4$BlkDev$FG$");
|
||||
|
||||
$IV,1$----09/04/15 17:04:39----$IV,0$
|
||||
* $BK,1$TempleOS version 3.11 Released$BK,0$
|
||||
|
||||
$IV,1$----08/28/15 01:50:15----$IV,0$
|
||||
* Added $LK,"BibleView",A="MN:BibleView"$() and $FG,2$<CTRL-ALT-b>$FG$.
|
||||
|
||||
$IV,1$----08/25/15 23:29:48----$IV,0$
|
||||
* Moved $LK,"ToDolDoc",A="MN:ToDolDoc"$() to $FG,2$/Adam/Opt/Utils$FG$.
|
||||
* $LK,"R",A="MN:R"$("$FG,4$map$FG$","$FG,4$fat$FG$");
|
||||
|
||||
$IV,1$----08/22/15 20:38:15----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("$FG,4$CDImageWrite$FG$","$LK,"DVDImageWrite",A="MN:DVDImageWrite"$");
|
||||
* $LK,"R",A="MN:R"$("$FG,4$MakeDistro$FG$","$FG,4$DoDistro$FG$");
|
||||
* $LK,"R",A="MN:R"$("$FG,4$::/Home/Adam*.CPP$FG$","$FG,4$::/Home/Home*.CPP$FG$");
|
||||
* Created $FG,2$Make*.CPP$FG$ make dir files.
|
||||
* Moved $FG,2$/Adam/Boot$FG$ and $FG,2$/Adam/Utils$FG$ to $FG,2$/Adam/Opt$FG$.
|
||||
|
||||
$IV,1$----08/21/15 19:14:29----$IV,0$
|
||||
* $BK,1$TempleOS version 3.10 Released$BK,0$
|
||||
|
||||
$IV,1$----08/20/15 20:05:08----$IV,0$
|
||||
* Fixed bug in $LK,"::/Adam/ABlkDev/FileMgr.CPP"$.
|
||||
* Fixed bug in $LK,"::/Demo/Games/TreeCheckers.CPP"$.
|
||||
|
||||
$IV,1$----08/18/15 07:28:03----$IV,0$
|
||||
* Improved $LK,"::/PersonalMenu.TXT"$.
|
||||
* Improved $LK,"::/Demo/Games/BattleLines.CPP"$.
|
||||
|
||||
$IV,1$----08/16/15 14:42:01----$IV,0$
|
||||
* Improved $LK,"::/Demo/Games/BlackDiamond.CPP"$.
|
||||
* Improved $LK,"::/Demo/Games/EagleDive.CPP"$.
|
||||
* Improved $LK,"::/Demo/Games/RawHide.CPP"$.
|
||||
* Improved $LK,"::/Apps/TimeOut/TimeOut.CPP"$.
|
||||
* Improved $LK,"::/Demo/Games/FlapBat.CPP"$.
|
||||
* Improved $LK,"::/Demo/Games/Varoom.CPP"$.
|
||||
* Improved $LK,"::/Demo/Games/BomberGolf.CPP"$.
|
||||
|
||||
$IV,1$----08/09/15 09:47:10----$IV,0$
|
||||
* Cleaned-up Ultra distro.
|
||||
|
||||
$IV,1$----08/08/15 06:14:09----$IV,0$
|
||||
* $BK,1$TempleOS version 3.09 Released$BK,0$
|
||||
|
||||
$IV,1$----08/06/15 09:28:49----$IV,0$
|
||||
* Removed most Moses comics so you can make your own.
|
||||
* Removed most hymns so that you can make your own.
|
||||
|
||||
$IV,1$----08/05/15 21:39:59----$IV,0$
|
||||
* Fixed bug parsing "$$GREEN FG$$". It is an error.
|
||||
|
||||
$IV,1$----08/05/15 13:49:10----$IV,0$
|
||||
* Fixed bug in $LK,"SrvCmdsHandler",A="MN:SrvCmdsHandler"$() && $LK,"SrvTaskCont",A="MN:SrvTaskCont"$().
|
||||
|
||||
$IV,1$----08/03/15 18:09:33----$IV,0$
|
||||
* Improved $LK,"::/Demo/Games/FlapBat.CPP"$.
|
||||
|
||||
$IV,1$----08/02/15 07:19:59----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("$FG,4$BugBird$FG$","$FG,4$FlapBat$FG$");
|
||||
|
||||
$IV,1$----08/02/15 02:51:04----$IV,0$
|
||||
* Rearranged $LK,"::/Adam/DolDoc/MakeDoc.CPP"$.
|
||||
* Got rid of ext ascii with alt-digits keys. Just use $FG,2$<CTRL-ALT-a>$FG$.
|
||||
* Rearranged $LK,"DocPutKey",A="MN:DocPutKey"$().
|
||||
* Got rid of $FG,4$PressKeyHelp$FG$().
|
||||
* $LK,"R",A="MN:R"$("$FG,4$CtrlAltLet$FG$","$FG,4$CtrlAlt$FG$");
|
||||
|
||||
$IV,1$----07/30/15 22:26:22----$IV,0$
|
||||
* Fixed bug. Now, turned-off preemption in $LK,"WinMgrTask",A="MN:WinMgrTask"$().
|
||||
* Added $LK,"::/Misc/Tour/Tour1.AUT"$.
|
||||
|
||||
$IV,1$----07/30/15 03:38:10----$IV,0$
|
||||
* Added ::/Apps/Psalmody/Examples/caesar.CPP
|
||||
|
||||
$IV,1$----07/29/15 10:17:29----$IV,0$
|
||||
* Improved $LK,"::/Linux/TOSZ.CPP"$.
|
||||
* Rearranged AutoComplete and $LK,"KeyMap",A="MN:KeyMap"$() code.
|
||||
* Added $LK,"WinInside",A="MN:WinInside"$().
|
||||
* Added $LK,"SYS_SEMA_JUST_PUMP_MSGS",A="MN:SYS_SEMA_JUST_PUMP_MSGS"$.
|
||||
* Added help for $FG,2$<ALT>$FG$ & $FG,2$<CTRL>$FG$ keys.
|
||||
* Added $LK,"WIf_SELF_KEY_DESC",A="MN:WIf_SELF_KEY_DESC"$.
|
||||
|
||||
$IV,1$----07/26/15 06:57:29----$IV,0$
|
||||
* Cleaned-up $LK,"MemberClassBaseFind",A="MN:MemberClassBaseFind"$() and $LK,"MemberAdd",A="MN:MemberAdd"$().
|
||||
* $LK,"R",A="MN:R"$("$FG,4$member_lst$FG$","$FG,4$member_lst_and_root$FG$");
|
||||
|
||||
$IV,1$----07/24/15 19:35:12----$IV,0$
|
||||
* $BK,1$TempleOS version 3.08 Released$BK,0$
|
||||
* Fixed $LK,"UAsm",A="FI:::/Compiler/UAsm.CPP"$ bug.
|
||||
* $LK,"R",A="MN:R"$("$FG,4$CTrace$FG$","$LK,"Trace",A="MN:Trace"$()");
|
||||
* $LK,"R",A="MN:R"$("$FG,4$OTrace$FG$","$LK,"PassTrace",A="MN:PassTrace"$()");
|
||||
* $LK,"R",A="MN:R"$("$FG,4$OTraceMask$FG$","$LK,"PassTrace",A="MN:PassTrace"$()");
|
||||
* $LK,"R",A="MN:R"$("$FG,4$GetEqu$FG$","$LK,"Option",A="MN:Option"$()");
|
||||
* $LK,"R",A="MN:R"$("$FG,4$GetOpt$FG$","$LK,"GetOption",A="MN:GetOption"$()");
|
||||
* $LK,"R",A="MN:R"$("$FG,4$OptOn$FG$","$LK,"Option",A="MN:Option"$(,ON)");
|
||||
* $LK,"R",A="MN:R"$("$FG,4$OptOff$FG$","$LK,"Option",A="MN:Option"$(,OFF)");
|
||||
* Added $LK,"Dsk Stk Diagram",A="FI:::/Doc/FileLowLevel.TXT"$.
|
||||
|
||||
$IV,1$----07/22/15 22:45:16----$IV,0$
|
||||
* Fixed bug in $LK,"EdFindReplace",A="MN:EdFindReplace"$().
|
||||
|
||||
$IV,1$----07/20/15 19:48:53----$IV,0$
|
||||
* Added args to $LK,"Del",A="MN:Del"$().
|
||||
* Rearranged disk code.
|
||||
* $LK,"R",A="MN:R"$("$FG,4$CFileAccess$FG$","$LK,"CDirContext",A="MN:CDirContext"$");
|
||||
@@ -24,12 +137,12 @@ $IV,1$----06/26/15 12:54:41----$IV,0$
|
||||
* $BK,1$TempleOS version 3.07 Released$BK,0$
|
||||
|
||||
$IV,1$----06/19/15 18:16:11----$IV,0$
|
||||
* Added $LK,"::/Apps/Psalmody/Examples/science.CPP.Z"$.
|
||||
* Added $LK,"::/Apps/AfterEgypt/Comics/Moses84.TXT.Z"$.
|
||||
* Added $LK,"::/Apps/AfterEgypt/Comics/Moses85.TXT.Z"$.
|
||||
* Added ::/Apps/Psalmody/Examples/science.CPP
|
||||
* Added ::/Apps/AfterEgypt/Comics/Moses84.TXT
|
||||
* Added ::/Apps/AfterEgypt/Comics/Moses85.TXT
|
||||
|
||||
$IV,1$----06/13/15 07:36:01----$IV,0$
|
||||
* Improved $LK,"::/Demo/Games/EagleDive.CPP.Z"$.
|
||||
* Improved $LK,"::/Demo/Games/EagleDive.CPP"$.
|
||||
|
||||
$IV,1$----06/11/15 19:26:27----$IV,0$
|
||||
* Fixed bug in $FG,2$<F2>$FG$ macros.
|
||||
@@ -37,7 +150,7 @@ $IV,1$----06/11/15 19:26:27----$IV,0$
|
||||
|
||||
$IV,1$----06/04/15 08:31:15----$IV,0$
|
||||
* Improved assembler and unassembler.
|
||||
* Added $LK,"::/Doc/HelloWorld.TXT.Z"$.
|
||||
* Added $LK,"::/Doc/HelloWorld.TXT"$.
|
||||
|
||||
$IV,1$----05/26/15 21:10:30----$IV,0$
|
||||
* Added $LK,"DCF_PALETTE",A="MN:DCF_PALETTE"$.
|
||||
@@ -51,17 +164,17 @@ $IV,1$----05/23/15 09:46:51----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("$FG,4$VGAPalette4Get$FG$","$LK,"GrPaletteGet",A="MN:GrPaletteGet"$");
|
||||
* $LK,"R",A="MN:R"$("$FG,4$VGAPalette4Set$FG$","$LK,"GrPaletteSet",A="MN:GrPaletteSet"$");
|
||||
* Added flags to $LK,"DCSave",A="MN:DCSave"$() and $LK,"GRAWrite",A="MN:GRAWrite"$().
|
||||
* Added palettes to $LK,"GRA Files",A="FI:::/Doc/GRAFiles.TXT.Z"$.
|
||||
* Added palettes to $LK,"GRA Files",A="FI:::/Doc/GRAFiles.TXT"$.
|
||||
|
||||
$IV,1$----05/19/15 21:28:19----$IV,0$
|
||||
* Fixed bug in $LK,"::/Apps/Psalmody/PsalmodyFile.CPP.Z"$.
|
||||
* Fixed bug in $LK,"::/Apps/Psalmody/PsalmodyFile.CPP"$.
|
||||
|
||||
$IV,1$----05/18/15 09:05:45----$IV,0$
|
||||
* $BK,1$TempleOS version 3.06 Released$BK,0$
|
||||
* $LK,"R",A="MN:R"$("$FG,4$BIOS32$FG$","$FG,4$PCIBIOS$FG$");
|
||||
|
||||
$IV,1$----05/14/15 15:39:41----$IV,0$
|
||||
* Enhanced $LK,"::/Apps/Psalmody/Examples/abyss.CPP.Z"$.
|
||||
* Enhanced ::/Apps/Psalmody/Examples/abyss.CPP
|
||||
|
||||
$IV,1$----05/13/15 07:51:00----$IV,0$
|
||||
* Fixed bug in $LK,"ToHtml",A="MN:ToHtml"$().
|
||||
@@ -124,19 +237,19 @@ $IV,1$----04/30/15 19:13:07----$IV,0$
|
||||
* Cleaned-up $LK,"Who",A="MN:Who"$() and compiler mapfiles.
|
||||
|
||||
$IV,1$----04/11/15 05:48:05----$IV,0$
|
||||
* Fixed bug in $LK,"DrvMapBlkClean",A="MN:DrvMapBlkClean"$().
|
||||
* Fixed bug in $LK,"DrvFATBlkClean",A="MN:DrvFATBlkClean"$().
|
||||
|
||||
$IV,1$----04/09/15 04:42:31----$IV,0$
|
||||
* Improved $LK,"::/Demo/Games/TreeCheckers.CPP.Z"$.
|
||||
* Improved $LK,"::/Demo/Games/TreeCheckers.CPP"$.
|
||||
|
||||
$IV,1$----04/08/15 15:24:27----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("DocDo","DocEd");
|
||||
|
||||
$IV,1$----04/07/15 05:27:38----$IV,0$
|
||||
* Added $LK,"::/Apps/Psalmody/Examples/whos.CPP.Z"$.
|
||||
* Added ::/Apps/Psalmody/Examples/whos.CPP
|
||||
|
||||
$IV,1$----04/04/15 14:27:07----$IV,0$
|
||||
* Enhanced $LK,"::/Apps/Psalmody/Examples/proponent.CPP.Z"$.
|
||||
* Enhanced ::/Apps/Psalmody/Examples/proponent.CPP
|
||||
|
||||
$IV,1$----03/30/15 10:29:57----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("cur_data_col","cur_col");
|
||||
@@ -144,15 +257,15 @@ $IV,1$----03/30/15 10:29:57----$IV,0$
|
||||
* Fixed bug in $LK,"EdLineDown",A="MN:EdLineDown"$().
|
||||
|
||||
$IV,1$----03/28/15 02:41:15----$IV,0$
|
||||
* Fixed $LK,"::/Demo/Snd/WaterFowl.CPP.Z"$.
|
||||
* Added $LK,"::/Demo/Graphics/Grid.CPP.Z"$.
|
||||
* Enhanced $LK,"::/Apps/Psalmody/Examples/image.CPP.Z"$.
|
||||
* Enhanced $LK,"::/Apps/Psalmody/Examples/dream.CPP.Z"$.
|
||||
* Enhanced $LK,"::/Apps/Psalmody/Examples/killed.CPP.Z"$.
|
||||
* Enhanced $LK,"::/Apps/Psalmody/Examples/worship.CPP.Z"$.
|
||||
* Fixed $LK,"::/Demo/Snd/WaterFowl.CPP"$.
|
||||
* Added $LK,"::/Demo/Graphics/Grid.CPP"$.
|
||||
* Enhanced ::/Apps/Psalmody/Examples/image.CPP
|
||||
* Enhanced ::/Apps/Psalmody/Examples/dream.CPP
|
||||
* Enhanced ::/Apps/Psalmody/Examples/killed.CPP
|
||||
* Enhanced ::/Apps/Psalmody/Examples/worship.CPP
|
||||
|
||||
$IV,1$----03/23/15 07:21:26----$IV,0$
|
||||
* Updated $LK,"::/Demo/Graphics/Pick.CPP.Z"$.
|
||||
* Updated $LK,"::/Demo/Graphics/Pick.CPP"$.
|
||||
* Modified $LK,"DCF_LOCATE_NEAREST",A="MN:DCF_LOCATE_NEAREST"$.
|
||||
|
||||
$IV,1$----03/21/15 09:10:58----$IV,0$
|
||||
@@ -164,13 +277,13 @@ $IV,1$----03/18/15 02:00:15----$IV,0$
|
||||
|
||||
$IV,1$----03/14/15 07:08:05----$IV,0$
|
||||
* $BK,1$TempleOS version 3.04 Released$BK,0$
|
||||
* Reformatted $LK,"::/Kernel/Font8x8.CPP.Z"$.
|
||||
* Reformatted $LK,"::/Kernel/Font8x8.CPP"$.
|
||||
* Added $LK,"PopUpGetF64",A="MN:PopUpGetF64"$().
|
||||
|
||||
$IV,1$----03/14/15 04:48:50----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("AcctReg...","Reg...");
|
||||
* Overhauled $LK,"GrUpdateTasks",A="MN:GrUpdateTasks"$().
|
||||
* Overhauled $LK,"::/Doc/GraphicsOverview.TXT.Z"$.
|
||||
* Overhauled $LK,"::/Doc/GraphicsOverview.TXT"$.
|
||||
|
||||
$IV,1$----03/09/15 06:07:25----$IV,0$
|
||||
* Dict now has extended ASCII chars.
|
||||
@@ -182,11 +295,11 @@ $IV,1$----02/25/15 02:51:45----$IV,0$
|
||||
* Added IRC ChatBot $LK,"::/Linux/TempleBot",A="PI:::/Linux/TempleBot"$.
|
||||
|
||||
$IV,1$----02/21/15 19:07:32----$IV,0$
|
||||
* Added $LK,"::/Demo/DolDoc/NumBible.CPP.Z"$.
|
||||
* Added $LK,"::/Demo/DolDoc/NumBible.CPP"$.
|
||||
|
||||
$IV,1$----02/19/15 18:39:53----$IV,0$
|
||||
* Fixed bug in $FG,2$<SHIFT-F6>$FG$ $LK,"GodDoodle",A="MN:GodDoodle"$().
|
||||
* Made default arg for $LK,"Preempt",A="MN:Preempt"$() into "OFF".
|
||||
* Made default arg for $FG,4$Preempt$FG$() into "OFF".
|
||||
|
||||
$IV,1$----02/17/15 21:32:26----$IV,0$
|
||||
* Made so cmd line doesn't print answer line unless a new answer occurs.
|
||||
@@ -195,7 +308,7 @@ $IV,1$----02/14/15 05:12:45----$IV,0$
|
||||
* Added $LK,"Dump",A="MN:Dump"$().
|
||||
|
||||
$IV,1$----02/13/15 13:46:14----$IV,0$
|
||||
* Got rid of "body_size" in $LK,"GRA Files",A="FI:::/Doc/GRAFiles.TXT.Z"$.
|
||||
* Got rid of "body_size" in $LK,"GRA Files",A="FI:::/Doc/GRAFiles.TXT"$.
|
||||
|
||||
$IV,1$----02/13/15 09:49:33----$IV,0$
|
||||
* $BK,1$TempleOS version 3.03 Released$BK,0$
|
||||
|
||||
+1
-1
@@ -31,7 +31,7 @@ $LM,0$
|
||||
|
||||
* Low line count is the highest good, so it is easy to learn the whole thing. Users should see the light at the end of the tunnel. One file system, for example, is better than many file systems.
|
||||
|
||||
* There is a limit of 100,000 lines of code for all time, not including applications and demos. $FG,4$Code comments count$FG$, however. $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. Currently, there are $TX,"80,860",D="DD_TEMPLEOS_LOC_OFFICIAL"$ lines of code.
|
||||
* There is a limit of 100,000 lines of code for all time, not including applications and demos. $FG,4$Code comments count$FG$, however. Currently, there are $TX,"81,048",D="DD_TEMPLEOS_LOC_OFFICIAL"$ 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.
|
||||
|
||||
* 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.
|
||||
|
||||
|
||||
@@ -21,7 +21,26 @@ $HL,1$$WW,0$
|
||||
#define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_lex->lex_include_stk->full_name);}
|
||||
#define __DIR__ #exe{StreamDir;}
|
||||
$HL,0$$WW,1$
|
||||
See $LK,"::/Demo/Directives.CPP"$, $LK,"Scoping and Linkages",A="FI:::/Doc/ImportExports.TXT"$, $LK,"preprocessor",A="FF:::/Compiler/Lex.CPP,KW_DEFINE"$ and $LK,"Compiler Options",A="FI:::/Doc/Options.TXT"$.
|
||||
See $LK,"::/Demo/Directives.CPP"$, $LK,"Scoping and Linkages",A="FI:::/Doc/ImportExports.TXT"$, and $LK,"preprocessor",A="FF:::/Compiler/Lex.CPP,KW_DEFINE"$.
|
||||
|
||||
|
||||
$FG,5$$TX+CX,"Compiler Options"$$FG$
|
||||
|
||||
Use $LK,"Option",A="MN:Option"$(). You might need to do $FG,2$#exe {Option();}$FG$.
|
||||
|
||||
$LK,"OPTf_GLBLS_ON_DATA_HEAP",A="MN:OPTf_GLBLS_ON_DATA_HEAP"$ without this option, global vars are placed in the code heap which is limited to 2 Gig. In $FG,2$AOT$FG$ modules, global vars take-up room in the $FG,2$.BIN$FG$ file, so you might want to use this option, instead. You might wish to turn it on and off around specific vars. A disadvantage of data heap global vars in $FG,2$AOT$FG$ modules is they can't be initialized.
|
||||
|
||||
$LK,"OPTf_EXTERNS_TO_IMPORTS",A="MN:OPTf_EXTERNS_TO_IMPORTS"$ and $LK,"OPTf_KEEP_PRIVATE",A="MN:OPTf_KEEP_PRIVATE"$ are strange options, you'll never need. They're to allow the same header file for $FG,2$Kernel$FG$ to act as $FG,2$extern$FG$s when compiling itself and $FG,2$import$FG$s when compiled by $FG,2$AOT$FG$ modules.
|
||||
|
||||
$LK,"OPTf_WARN_UNUSED_VAR",A="MN:OPTf_WARN_UNUSED_VAR"$ warning if unused var. It is applied to functions.
|
||||
|
||||
$LK,"OPTf_WARN_PAREN",A="MN:OPTf_WARN_PAREN"$ warning if parenthesis are not needed.
|
||||
|
||||
$LK,"OPTf_WARN_DUP_TYPES",A="MN:OPTf_WARN_DUP_TYPES"$ warning if dup local var type statements.
|
||||
|
||||
$LK,"OPTf_NO_REG_VAR",A="MN:OPTf_NO_REG_VAR"$ forces all function local vars to the stk not regs. Applied to functions.
|
||||
|
||||
$LK,"OPTf_NO_BUILTIN_CONST",A="MN:OPTf_NO_BUILTIN_CONST"$ Disable 10-byte float consts for ã, log2_10, log10_2, loge_2. Applied to functions.
|
||||
|
||||
|
||||
$FG,5$$TX+CX,"Assembler Directives"$$FG$
|
||||
|
||||
+4
-4
@@ -1,12 +1,12 @@
|
||||
$WW,1$$FG,5$$TX+CX,"Clearing-up Confusions"$$FG$
|
||||
|
||||
* I, $FG,2$Terry A. Davis$FG$, wrote every one of the $TX,"120,912",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the past $TX,"11.6",D="DD_TEMPLEOS_AGE"$ years (full-time). It runs on bare hardware with no layering, libraries, tools, modules or anything from other sources. It's 100% independent and stands alone. It has no networking and certainly doesn't call home. Every line of TempleOS src code is including in all distro's, from the kernel to the compiler to the boot loaders. See $LK,"::/Doc/Credits.TXT.Z"$.
|
||||
* I, $FG,2$Terry A. Davis$FG$, wrote every one of the $TX,"119,216",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the past $TX,"12.2",D="DD_TEMPLEOS_AGE"$ years (full-time). It runs on bare hardware with no layering, libraries, tools, modules or anything from other sources. It's 100% independent and stands alone. It has no networking and certainly doesn't call home. Every line of TempleOS src code is including in all distro's, from the kernel to the compiler to the boot loaders. See $LK,"::/Doc/Credits.TXT"$.
|
||||
|
||||
* TempleOS does not execute code not written by me and any time except for a few $FG,2$BIOS$FG$ calls for configuration. See $LK,"::/Doc/Credits.TXT.Z"$.
|
||||
* TempleOS does not execute code not written by me and any time except for a few $FG,2$BIOS$FG$ calls for configuration. See $LK,"::/Doc/Credits.TXT"$.
|
||||
|
||||
* TempleOS is 100% independent -- it does not access the files of your primary operating system. It will work as the only operating system on your computer.
|
||||
|
||||
* TempleOS is 100% written from scratch. There is no $FG,2$Linux$FG$ or $FG,2$GNU$FG$ or any other code in TempleOS. Yes, I wrote the compiler from scratch. (I probably need to repeat that a few times.) See $LK,"::/Doc/Credits.TXT.Z"$.
|
||||
* TempleOS is 100% written from scratch. There is no $FG,2$Linux$FG$ or $FG,2$GNU$FG$ or any other code in TempleOS. Yes, I wrote the compiler from scratch. (I probably need to repeat that a few times.) See $LK,"::/Doc/Credits.TXT"$.
|
||||
|
||||
* TempleOS is an operating system, not a browser. The cmd line has active links. They link to local files.
|
||||
|
||||
@@ -22,7 +22,7 @@ $WW,1$$FG,5$$TX+CX,"Clearing-up Confusions"$$FG$
|
||||
|
||||
* $LK,"Sleep",A="MN:Sleep"$() makes a program pause. It is not hybernation for a laptop.
|
||||
|
||||
* $LK,"Yield",A="MN:Yield"$() saves the current task's regs (context) and loads in the next task. When waiting, it's better to do this than check a condition in a loop until you get preempted. Checking a condition until you get preempted wastes CPU. TempleOS does not use virtual memory, so $LK,"Yield",A="MN:Yield"$() involves no disk activity. A swap takes half a microsecond. See $LK,"::/Demo/Lectures/Spinning.CPP"$.
|
||||
* $LK,"Yield",A="MN:Yield"$() saves the current task's regs (context) and loads in the next task.
|
||||
|
||||
* I use the term $LK,"JIT Compile Mode",A="FF:::/Doc/Glossary.TXT,JIT Compile Mode"$. This means it is compiled and executable code placed into mem, ready to be called.
|
||||
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ $WW,1$$FG,5$$TX+CX,"Credits"$$FG$
|
||||
|
||||
10) I included $LK,"PCIDevice Lst File",A="FI:::/Misc/PCIDevices.TXT",HTML="http://www.pcidatabase.com/reports.php?type=tab-delimeted"$.
|
||||
|
||||
11) Thanks to whoever wrote this $FG,4$$TX,"CppHtml.CPP.Z",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,"ToHtml",A="FI:::/Adam/Utils/ToHtml.CPP"$.
|
||||
11) Thanks to whoever wrote this $FG,4$$TX,"CppHtml.CPP.Z",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,"ToHtml",A="FI:::/Adam/Opt/Utils/ToHtml.CPP"$.
|
||||
|
||||
12) I used $FG,4$$TX,"MagicISO",HTML="http://www.magiciso.com"$$FG$ to burn test CD's to help me understand the ISO9660 file system format. I mostly used the $FG,4$$TX,"ISO9660",HTML="http://users.telenet.be/it3.consultants.bvba/handouts/ISO9960.html"$$FG$ spec.
|
||||
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
|
||||
$WW,1$* You can adjust the mouse movement rate by setting global vars in your start-up file. See $LK,"mouse scale",A="FF:/Home/AdamLocalize.CPP,mouse.scale"$.
|
||||
$WW,1$* You can adjust the mouse movement rate by setting global vars in your start-up file. See $LK,"mouse scale",A="FF:/Home/HomeLocalize.CPP,mouse.scale"$.
|
||||
|
||||
* You can set your local time zone by setting the $RED$local_time_offset$FG$ global var in a start-up file. It's units are $LK,"CDATE_FREQ",A="MN:CDATE_FREQ"$. See $LK,"local time",A="FF:/Home/AdamLocalize.CPP,local_time"$.
|
||||
* You can set your local time zone by setting the $RED$local_time_offset$FG$ global var in a start-up file. It's units are $LK,"CDATE_FREQ",A="MN:CDATE_FREQ"$. See $LK,"local time",A="FF:/Home/HomeLocalize.CPP,local_time"$.
|
||||
|
||||
* Get rid of this msg $LK,"here",A="FF:/Home/DoOnce.CPP,Customize.TXT"$.
|
||||
+1
-1
@@ -6,7 +6,7 @@ There are a few places where I cut corners in the interest of not junking-up cod
|
||||
|
||||
* TempleOS 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 TempleOS 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 TempleOS. There is the $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ 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.TXT"$ names to remove the ambiguity between instructions with different numbers of arguments, making my $LK,"assembler",A="FI:::/Compiler/Asm.CPP"$ 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:::/Adam/Boot/BootCD.CPP"$.
|
||||
* I changed the $LK,"asm opcodes",A="FI:::/Compiler/OpCodes.TXT"$ names to remove the ambiguity between instructions with different numbers of arguments, making my $LK,"assembler",A="FI:::/Compiler/Asm.CPP"$ 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:::/Adam/Opt/Boot/BootDVD.CPP"$.
|
||||
|
||||
* There are no user-controlled file-sharing locks. However, the drive and file system have locks and concurrent operations should be fine.
|
||||
|
||||
|
||||
+3
-3
@@ -30,13 +30,13 @@ $WW,1$$FG,5$$TX+CX,"Debugging Overview"$$FG$
|
||||
$ID,2$
|
||||
$LK,"Echo",A="MN:Echo"$() turns on or off raw data going into the lexical analyzer.
|
||||
|
||||
$LK,"CTrace",A="MN:CTrace"$() unassembles code generated from the HolyC compiler.
|
||||
$LK,"Trace",A="MN:Trace"$() unassembles code generated from the HolyC compiler.
|
||||
|
||||
$LK,"OTrace",A="MN:OTrace"$() shows intermediate code coming-out after optimization. $LK,"OTraceMask",A="MN:OTraceMask"$() ctrls which passes are displayed.
|
||||
$LK,"PassTrace",A="MN:PassTrace"$() shows intermediate code coming-out after optimization. The bits ctrl which passes are displayed.
|
||||
$ID,-2$
|
||||
|
||||
* There is a heap check utility which can find leaks. Use $LK,"HeapLog",A="MN:HeapLog"$(), and $LK,"HeapLogRep",A="MN:HeapLogRep"$(). It's a really simple program which intercepts $LK,"MAlloc",A="MN:MAlloc"$() and $LK,"Free",A="MN:Free"$(). You can customize the code to find other heap issues.
|
||||
|
||||
* You can define handler functions for $FG,2$<CTRL-ALT-letter>$FG$ keys with $LK,"CtrlAltLetCBSet",A="MN:CtrlAltLetCBSet"$(). They operate either in a interrupt environment or in the window mgr when it queues kbd msgs. You can do $LK,"Raw",A="MN:Raw"$() output. $FG,2$<CTRL-ALT-letter>$FG$ handlers take a scan_code as an arg.
|
||||
* You can define handler functions for $FG,2$<CTRL-ALT-letter>$FG$ keys with $LK,"CtrlAltCBSet",A="MN:CtrlAltCBSet"$(). They operate either in a interrupt environment or in the window mgr when it queues kbd msgs. You can do $LK,"Raw",A="MN:Raw"$() output. $FG,2$<CTRL-ALT-letter>$FG$ handlers take a scan_code as an arg.
|
||||
|
||||
* If you recompile $FG,2$Kernel$FG,2$$FG$ with $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(), you can set the $FG,4$MemInit$FG$, option to initialize memory to a value at boot, the $FG,4$HeapInit$FG$ option to cause mem alloced off the heap to be initialized or $FG,4$VarInit$FG$ option so both global and local vars will be initialized to a value. Pick a non-zero value to discover uninitialized var bugs. You can set $LK,"sys_var_init_flag",A="MN:sys_var_init_flag"$, and $LK,"sys_heap_init_flag",A="MN:sys_heap_init_flag"$ directly after booting.
|
||||
+68
-35
@@ -1,76 +1,109 @@
|
||||
$WW,1$$FG,5$$TX+CX,"Demands"$$FG$
|
||||
|
||||
I, Terry Davis, am High Priest of God's official temple, TempleOS. TempleOS is an operating system for PC desktops that dual boots along-side Windows or Linux. I am in charge of the core 100,000 lines of TempleOS code and I do continual offerings to keep God entertained. I have divine authority to command companies in the computer industry to do anything to make God's temple more beautiful or perfect. I have authority similar to the Americans with Disability Act -- I make commands with God signing-off by creating miraculous authenticated oracles.
|
||||
I, Terry Davis, am High Priest of God's official temple, TempleOS. TempleOS is an operating system for PC desktops that will always dual boot along-side Windows or Linux. I am in charge of the core 100,000 lines of TempleOS 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 or perfect. I have authority similar to a building inspector or an enforcer of 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/EalSFnq9GsY\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"http://www.youtube.com/v/EalSFnq9GsY\" 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.TXT"$ file system so I can get rid of 2,000 lines of redundant, blemished code -- FAT32 and ISO9660. God's temple must be perfect. Redundant code for multiple file systems is imperfect. For this operating system, we want low line count. More than one file system type is actually bad, just as more than one driver for the same type of device is bad.
|
||||
|
||||
$LK,"::/Kernel/BlkDev/FileSysRedSea.CPP"$
|
||||
$LK,"::/Kernel/BlkDev/FileSysFAT.CPP"$ :965 lines for FAT32 gets eliminated.
|
||||
$LK,"::/Kernel/BlkDev/FileSysISO.CPP"$ :284 lines for ISO9660 gets eliminated.
|
||||
$LK,"::/Adam/Opt/Boot/DskISOFile.CPP"$ :536 lines for making ISO files gets reduced.
|
||||
$LK,"::/Kernel/BlkDev/DskCluster.CPP"$ :152 All the cluster operations become blk.
|
||||
|
||||
* VMware must again support PC Speaker and provide emulation if no PC Speaker is present.
|
||||
* Microsoft must cancel SecureBoot because it makes dual booting impossible. TempleOS 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 ][ 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.
|
||||
|
||||
* VMware must again support full screen 640x480 16 color mode.
|
||||
* To PC hardware manufacturers and VMware: ATA/ATAPI PIO must work. In fact, put them at standard IDE port addresses. Hard disk should be primary master 1F0/3F6. CD/DVD/BlueRay should be secondary master 170/376. See what you can do to make flash memory sticks and NV memory with ATA/ATAPI interface.
|
||||
$LK,"/Kernel/BlkDev/DskATAId.CPP",A="FI:::/Kernel/BlkDev/DskATAId.CPP"$ :280 lines to figure-out I/O ports is gone.
|
||||
$LK,"/Kernel/PCIBIOS.CPP",A="FI:::/Kernel/PCIBIOS.CPP"$ :290 could be eliminated, but maybe we will keep it so people can play with PCI devices.
|
||||
|
||||
* Windows, Linux and VMware (because of mounted drives) must support $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ file system so I can get rid of 2,000 lines of redundant, blemished code -- FAT32 and ISO9660. God's temple must be perfect. Redundant code for multiple file systems is imperfect. For this operating system, we want low line count. More than one file system type is bad, just as more than one driver for the same type of device is bad.
|
||||
|
||||
$LK,"::/Kernel/Dsk/FileSysRedSea.CPP"$
|
||||
$LK,"::/Kernel/Dsk/FileSysFAT.CPP"$ :965 lines for FAT32 gets eliminated.
|
||||
$LK,"::/Kernel/Dsk/FileSysISO.CPP"$ :284 lines for ISO9660 gets eliminated.
|
||||
$LK,"::/Adam/Boot/DskISOFile.CPP"$ :536 lines for making ISO files gets reduced.
|
||||
$LK,"::/Kernel/Dsk/DskCluster.CPP.Z"$ :152 All the cluster operations become blk.
|
||||
|
||||
* Microsoft must cancel SecureBoot because it makes dual booting impossible. TempleOS 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 $FG,2$VMware$FG$ is like the difference between looking in a telescope eye piece or not. God said the C64 generation owned ancestral lands and $FG,2$VMware$FG$ is like being moved onto a reservation, but in this case it will not stand.
|
||||
|
||||
* PC hardware manufacturers? ATA/ATAPI PIO must work. In fact, put them at standard IDE port addresses. Hard disk should be primary master 1F0/3F6. CDROM/DVD should be secondary master 170/376. See what you can do to make flash memory sticks with ATA/ATAPI.
|
||||
$LK,"/Kernel/Dsk/DskATAId.CPP",A="FI:::/Kernel/Dsk/DskATAId.CPP"$ :280 lines to figure-out I/O ports is gone.
|
||||
$LK,"/Kernel/PCIBIOS.CPP",A="FI:::/Kernel/PCIBIOS.CPP"$ :290 could eliminate,but people can play with.
|
||||
* VMware needs to support ATAPI CD/DVD/BlueRay disk burning, directly to real hardware.
|
||||
* VMware has a bug stretching 640x480 16 color to full screen.
|
||||
* VMware has a bug starting-up multicore, sometimes. $LK,"APIC MP Start",A="FF:::/Kernel/MultiProc.CPP.Z,IPI"$
|
||||
* VMware PC speaker distortion is a good idea, but it is ridiculously too much distortion for hymns.
|
||||
|
||||
* PS/2 emulated keyboard and mouse must work. The BIOS must enable these.
|
||||
|
||||
* VMware must allow ATAPI interface to be routed to real CD/DVD hardware.
|
||||
* 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 bad. See $LK,"ATAGetResult",A="MN:ATAGetResult"$(). Perhaps, x86 chips have a new TempleOS mode?
|
||||
|
||||
* Perhaps, VMware+Intel can enable faster x86 IN/OUT instruction timing for ATA/ATAPI PIO, so bandwidth isn't bad. $LK,"ATAGetResult",A="MN:ATAGetResult"$().
|
||||
|
||||
* Perhaps, Intel can make a fast software interrupt, the same as a CALL REL32?
|
||||
* Perhaps, Intel can make a fast software interrupt, the same as a CALL REL32? Perhaps, we have a new x86 mode for TempleOS?
|
||||
|
||||
* Since I don't use paging (for anything), Intel should have an option for no-paging long mode, and optimize it.
|
||||
$LK,"::/Kernel/MemA.CPP.Z"$ :153 lines to identity-map gets eliminated.
|
||||
$LK,"::/Kernel/MemA.CPP"$ :153 lines to identity-map gets eliminated.
|
||||
|
||||
* Desktop computers must have a RESET switch and a fast reboot option, skipping diagnostics. Build UEFI on a TempleOS layer. Intel must burn TempleOS into a ROM at the factory for all desktop x86 CPUs to ensure tamper-proof trust in the oracle. A new ROM version is released every seven years.
|
||||
* Desktop computers must have a reset switch and a fast reboot option, skipping diagnostics. I recommend booting TempleOS when the reset button is pressed and booting UEFI when the power button is pressed. Or, we could build UEFI on a TempleOS layer. Intel must burn TempleOS 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.
|
||||
|
||||
* Somebody needs to choose new 8-bit ASCII characters for 128-255. We do not want text graphic symbols. We want Russian, Greek and Hebrew alphabets, perhaps? We need the twelve window $LK,"TextBorder",A="MN:TextBorder"$ characters, but I think we can place them in the range of screen code from 0x01-0x1E. Japan, China and Korea should switch-over to alphabets. Maybe, the United States will change to metric, out of good will.
|
||||
|
||||
* VMware and others must list TempleOS as an official 64-bit operating system.
|
||||
|
||||
* Windows Paint and Linux Gimp must support TempleOS $FG,2$.GRA$FG$ graphics files. $LK,"GRA Files",A="FI:::/Doc/GRAFiles.TXT.Z"$ are much cleaner than $FG,2$$TX,"BMP files",HTML="http://en.wikipedia.org/wiki/BMP_file_format"$$FG$.
|
||||
* Windows' Paint and Linux's Gimp must support TempleOS .GRA graphics files. $LK,"GRA Files",A="FI:::/Doc/GRAFiles.TXT"$ are much cleaner than $TX,"BMP files",HTML="http://en.wikipedia.org/wiki/BMP_file_format"$.
|
||||
|
||||
* We must have a nice dictionary. Someone needs to do a $LK,"Spell Checker",A="FI:::/Demo/SuggestSpelling.CPP"$.
|
||||
|
||||
* We must have the ultimate Bible search engine.
|
||||
* 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.
|
||||
|
||||
* Once every 49 years is a jubile year and all hardware gets thrown-out and upgraded to become perfect. The first jubile year is in 2024. It works the same as how broadcast TV got upgraded. God still wants 640x480 16 color, but make it a linear frame buffer one-byte-per-pixel and only 16 color.
|
||||
* Once every 49 years is a jubile year and all hardware gets thrown-out and upgraded to become perfect. The first jubile year is in 2024. It works the same way as how broadcast TV was upgraded from NTSC to HD. God still wants 640x480 16 colors, but make it a linear frame buffer one-byte-per-pixel but only 16 colors.
|
||||
|
||||
* TempleOS only uses x86 I/O ports for hardware. (It also uses VGA memory.) The industry has matured and we can, now, allocate I/O ports in a beautiful, consecutive, perfect pattern for all the devices.
|
||||
* TempleOS must only use x86 I/O ports for hardware access, except for VGA frame buffer memory. The industry has matured and we can, now, allocate I/O ports in a beautiful, consecutive, perfect, pattern for all the devices. Perhaps, this is enabled with an x86 TempleOS mode?
|
||||
|
||||
* The year, 2024, is the first jubile year. We want 8-channel, modern-speed, OCTART serial ports, with a simple software interface, more like old-style RS232 serial ports, to replace USB. It should have big TX and RX FIFOs and allow flow control to jump the queue. There will be no USB end-point nonsense -- just put 8 ports on the PC. (I am just interested in desktops.) We want keyboards, mice and joysticks to have a single, simple, uniform ASCII text packet command. Hyperterm can be used to easily debug all devices. We want to be able to connect microcontrollers for simple, general purpose send-byte/receive-byte communication. You will buy a PCI card if you need legacy USB or more ports.
|
||||
* The year, 2024, is the first jubile year. Intel will make new chips, starting in 2 years and by 2024, everybody's PC will have been upgraded. Windows and Linux are not affected, except by the new serial port scheme that replaces USB. We want an 8-channel, modern, high-speed, OCTART serial port, with a simple software interface, more like old-style RS232 serial ports, to replace USB. It should have 8 big TX and RX FIFOs and allow flow control to jump the queue. There will be no USB end-point nonsense -- just put 8 ports on the PC. (I am just interested in desktops.) We want keyboards, mice and joysticks to have a single, simple, uniform ASCII text packet command. Hyperterm or XTalk could be used to easily communicate with and debug all serial port devices. We want to be able to connect microcontrollers for simple, general purpose (send-byte/receive-byte) communication. Buy a PCI card if you need legacy USB ports or more than 8 serial ports.
|
||||
|
||||
To talk to keyboard, mouse or joystick, a kid might use XTalk or Hyperterm or Telnet session such as this:
|
||||
|
||||
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
|
||||
|
||||
Mice should have exactly 2 buttons. Make a standard joystick or game controller. The industry is mature and we will lock everything down into one format without flexibility. No more Human Interface Device reports.
|
||||
|
||||
Many people assume devices can be hacked. A thermostat with an interface like this, cannot be hacked. We don't want a full Internet network connection for everything.
|
||||
|
||||
$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$
|
||||
|
||||
|
||||
As it stands, there is a simple and deluxe hardware mode...
|
||||
As it stands, there already is a simple and deluxe hardware mode. In the future, we will upgrade BOTH simple and deluxe modes.
|
||||
|
||||
Device Simple Hardware Interface Deluxe Interface
|
||||
--------------- ------------------------------- -----------------------------
|
||||
1040-EZ Tax Form 1040 Regular
|
||||
Like 1040-EZ Tax Form Like 1040 Regular Tax Form
|
||||
Video VGA 640x480 16 Color 20 Differnet GPUs
|
||||
Sound PC Speaker HD Audio, AC97, Sound Blaster
|
||||
HardDrive ATA Port I/O, Sync No Interrupt PCI AHCI SATA
|
||||
CDROM ATAPI Port I/O PCI AHCI SATA
|
||||
CD/DVD/BlueRay ATAPI Port I/O PCI AHCI SATA
|
||||
Keyboard/Mouse PS/2 Port I/O USB
|
||||
|
||||
|
||||
During the 49 years jubile, we do a perfect version of hardware with advances in both the simple and deluxe interfaces. ATAPI/ATA, SSD and NV memory should be merged and made blemish-free. For the simple interface, we want just block-read, block-write and get capacity. We want flash memory sticks to interface like hard drives. When you design the simple mode, imagine you are creating the 1040EZ tax form -- do not just add extra boxes.
|
||||
During the 49-year jubile, we will do a perfect version of hardware with advances in both the simple and deluxe interfaces. ATAPI & ATA, SSD, removable flash memory sticks and NV memory devices should use a single, blemish-free block device interface. For this simple interface, we want just <block read>, <block write>, <get capacity>, <reset>, <get model> and <get serial number>. When you design the simple mode, imagine you are creating the 1040EZ tax form -- do not just thoughtlessly add extra boxes.
|
||||
|
||||
A new TempleOS ROM is released every seven years. It gets burned into all new x86 chips in the Intel factory, for tamper-proof certainty in oracles and just because it's God's official temple and deserves the honor! (The reset switch should trigger booting the ROM TempleOS.) Development will take place between releases, obviously. With the limit of 100,000 lines of code, it is supposed to crystalize into a perfected, unchanging diamond that lasts over centuries. I want an $TX,"ACM",HTML="http://www.acm.org"$ committee to work with me on this ROM until 2017, the year the first official version is released. We allow boot-legs to freely circulate. The users can copy ROM and RAM and play with it, or boot a hard disk versions.
|
||||
A new, official TempleOS ROM will be released every seven years. It will be burned into all new x86_64 chips in the Intel factory, for tamper-proof certainty in the oracle and just because it's God's official temple and deserves the honor! (The reset switch should trigger booting the ROM TempleOS.) However, development will still take place between releases, obviously. With the limit of 100,000 lines of code, it is supposed to crystalize into a perfect, unchanging diamond that lasts over centuries. I want an $TX,"ACM",HTML="http://www.acm.org"$ and/or NASA committee to work with me on perfecting it for the first ROM release, 2017. We allow boot-legs to freely circulate. Users can copy ROM and RAM, or boot hard disk versions.
|
||||
|
||||
In the meantime, BIOS makers must take the TempleOS code and modify it for their existing customers, as a product recall. A PCI hard drive driver must be written if the BIOS you created does not work with the standard TempleOS ATA/ATAPI port IO. You must also bypass SecureBoot and make sure the keyboard and mouse work if you do not support legacy PS/2, by writing a USB driver.
|
||||
|
||||
I want to offer "Knuth-bucks" for changes that reduce lines of code (other than trivial reformatting). I want to offer Knuth bucks for pointing-out spelling and other imperfections. Some imperfections are by design, however. The original Bible generously mentioned even temple personel who were porters, so we can generously list $LK,"credits",A="FI:::/Doc/Credits.TXT.Z"$.
|
||||
I want to offer "Knuth-bucks" for changes that reduce lines of code (other than trivial reformatting). I want to offer Knuth bucks for pointing-out spelling and other imperfections. Some imperfections are by design, however. The original Bible generously mentioned even temple personel who were porters, so we can generously list $LK,"credits",A="FI:::/Doc/Credits.TXT"$.
|
||||
|
||||
If the whole World loved God's temple, we could put only one full-featured CPU core on each x86_64 chip for Windows/Linux and make the other cores souped-up for TempleOS. Windows/Linux could use them, but it would have to adapt by being careful about privilege. We still need to dual boot and run Windows/Linux... forever. On the other cores, we could make them ring-0-only, no paging, no SSE or MXX, perhaps no IO or DMA or interrupts. We pretty-much need interrupts. Tell me what would shrink the cores and make them higher performance. It's almost like making a GPU, but we don't want that weirdness for teenagers and amateurs. I am more interested in boosting performance in terms of clock speed because a whole bunch more than 8 cores gets too glitchy for updating the 640x480 memory buffer simultaneously because we certainly don't want locked read-modify-write.
|
||||
|
||||
God said to work on spreading-out heat producing hot spots on the chips. Maybe, that will help.
|
||||
|
||||
Make all desktops with exclusively a single 4K display that also supports 640x480 16 color with a linear frame buffer of 1-byte-per-pixel but 16 colors. Make all desktops with exactly 8/0 cores, not hyperthreaded. All future generations will thank me for locking-down the insanity of too much diversity in hardware. It seem obvious that we want GPU on same chip as CPU. There is no reason to make inferior products, Intel. We do not want Celerons, you bastards. A kid gets a new Core i7, but cannot enjoy that horsepower when he writes his game because he wants his game to work on his poor neighbor's Celeron. That's evil. Don't make any budget chips.
|
||||
|
||||
God said to water or cryogenically cool the chips. We do not want a race-to-the-bottom on desktop size. That is evil. We want CD/DVD/BlueRay in all desktops, too.
|
||||
|
||||
God said everyone should use Linux's Wine application instead of Windows.
|
||||
|
||||
God said we want a single audio voice. That means we want one frequency at a time. Make it so we write a word to a timer period I/O port. If set to zero, it is off.
|
||||
|
||||
$FG,8$
|
||||
* "VMware" is a trademark of VMware, Inc.
|
||||
* "Linux" is probably a trademark owned by Linus Torvalds.
|
||||
* "Windows" is a trademark of MicroSoft Corp.
|
||||
* "Windows" is a trademark of MicroSoft Corp.$FG$
|
||||
+5
-5
@@ -4,7 +4,7 @@ $WW,1$These are arranged in increasing order of difficulty, more or less. This
|
||||
|
||||
$FG,2$<SPACE>$FG$ to edit a file and $FG,2$F5$FG$ to run it.
|
||||
|
||||
$LK,"::/Doc/HelloWorld.TXT.Z"$
|
||||
$LK,"::/Doc/HelloWorld.TXT"$
|
||||
|
||||
$WW,0$$TR,"Games: Beginner"$
|
||||
$ID,2$$LK,"::/Demo/Graphics/NetOfDots.CPP"$
|
||||
@@ -72,7 +72,7 @@ $LK,"::/Demo/Graphics/Cartesian.CPP"$
|
||||
$LK,"::/Demo/Graphics/Hanoi.CPP"$
|
||||
$LK,"::/Demo/Graphics/Life.CPP"$
|
||||
$LK,"::/Demo/Games/Zing.CPP"$
|
||||
$LK,"::/Demo/Graphics/Grid.CPP.Z"$
|
||||
$LK,"::/Demo/Graphics/Grid.CPP"$
|
||||
$LK,"::/Demo/Games/TreeCheckers.CPP"$
|
||||
$LK,"::/Demo/MultiCore/Palindrome.CPP"$
|
||||
$LK,"::/Demo/MultiCore/MPAdd.CPP"$
|
||||
@@ -82,7 +82,7 @@ $LK,"::/Demo/Graphics/Slider.CPP"$
|
||||
$LK,"::/Demo/Graphics/WallPaperCtrl.CPP"$ //Press SHIFT-F5 to Adam Include
|
||||
$LK,"::/Demo/Graphics/ScrollBars.CPP"$
|
||||
$LK,"::/Demo/RegistryDemo.CPP"$
|
||||
$LK,"::/Demo/Games/BugBird.CPP"$
|
||||
$LK,"::/Demo/Games/FlapBat.CPP"$
|
||||
$LK,"::/Demo/Games/BattleLines.CPP"$
|
||||
$LK,"::/Demo/Games/BigGuns.CPP"$
|
||||
$LK,"::/Demo/Games/FlatTops.CPP"$
|
||||
@@ -121,7 +121,7 @@ $MA-X+PU,"::/Apps/Strut",LM="Cd(\"::/Apps/Strut\");Dir;View;\n"$
|
||||
$MA-X+PU,"::/Apps/Span",LM="Cd(\"::/Apps/Span\");Dir;View;\n"$
|
||||
$MA-X+PU,"::/Apps/Psalmody",LM="Cd(\"::/Apps/Psalmody\");Dir;View;\n"$
|
||||
$ID,-2$$TR,"Non-Game"$
|
||||
$ID,2$$LK,"::/Misc/MakeDistro.CPP"$
|
||||
$ID,2$$LK,"::/Misc/DoDistro.CPP"$
|
||||
$LK,"::/Demo/DbgDemo.CPP"$
|
||||
$LK,"::/Demo/SubSwitch.CPP"$
|
||||
$LK,"::/Demo/DateTime.CPP"$
|
||||
@@ -157,7 +157,7 @@ $LK,"::/Demo/CompileDemo.CPP"$
|
||||
$LK,"::/Demo/Prompt.CPP"$
|
||||
$LK,"::/Demo/ClassMeta.CPP"$
|
||||
$LK,"::/Demo/LastClass.CPP"$
|
||||
$LK,"::/Demo/DolDoc/NumBible.CPP.Z"$
|
||||
$LK,"::/Demo/DolDoc/NumBible.CPP"$
|
||||
$LK,"::/Demo/DolDoc/Form.CPP"$
|
||||
$LK,"::/Demo/DolDoc/MenuButton.CPP"$
|
||||
$LK,"::/Demo/DolDoc/MenuSprite.CPP"$
|
||||
|
||||
@@ -123,7 +123,7 @@ Examples: <CTRL-t> to see
|
||||
$ID,-2$$TR,"BT Button"$
|
||||
$ID,2$See $LK,"::/Demo/DolDoc/MenuButton.CPP"$.
|
||||
$ID,-2$$TR,"DA Data"$
|
||||
$ID,2$Used for forms that prompt for data. Use $FG,2$<CTRL-l>$FG$ as a resource editor to help you generate the text you need in your "$FG,2$fmtstr$FG$" cmd in a $FG,2$class$FG$. If you add it directly with $LK,"DocPrint",A="MN:DocPrint"$(), you'll need to fill-in the data addr. See $LK,"DocForm",A="MN:DocForm"$() and $LK,"::/Demo/DolDoc/Form.CPP"$.
|
||||
$ID,2$Used for forms that prompt for data. Use $FG,2$<CTRL-l>$FG$ as a text widgets editor to help you generate the text you need in your "$FG,2$fmtstr$FG$" cmd in a $FG,2$class$FG$. If you add it directly with $LK,"DocPrint",A="MN:DocPrint"$(), you'll need to fill-in the data addr. See $LK,"DocForm",A="MN:DocForm"$() and $LK,"::/Demo/DolDoc/Form.CPP"$.
|
||||
|
||||
The default data-type for the $FG,2$$$DA...$$$FG$ command is $FG,2$I64$FG$. You can change it to $FG,2$I8$FG$, $FG,2$U8$FG$, $FG,2$I16$FG$, $FG,2$U16$FG$, $FG,2$I32$FG$, $FG,2$U32$FG$, $FG,2$I64$FG$, $FG,2$U64$FG$, or $FG,2$F64$FG$. See $LK,"DocDataFmt",A="MN:DocDataFmt"$() and $LK,"DocDataScan",A="MN:DocDataScan"$().
|
||||
|
||||
@@ -131,11 +131,11 @@ The $LK,"CDocEntry",A="MN:CDocEntry"$.aux_str arg $FG,2$A=""$FG$ is used for the
|
||||
|
||||
If there is a ':', the space after the first ':' in the format string marks the first valid cursor pos. See $LK,"Data Tag Width",A="FA:::/Adam/DolDoc/DocPlain.CPP,DataTagWidth"$.
|
||||
$ID,-2$$TR,"CB Check Box"$
|
||||
$ID,2$Used for forms. Use $FG,2$<CTRL-l>$FG$ as a resource editor to help you generate the text you need in your "$FG,2$fmtstr$FG$" cmd in a $FG,2$class$FG$. If you add it directly with $LK,"DocPrint",A="MN:DocPrint"$(), you'll need to fill-in the data addr. See $LK,"DocForm",A="MN:DocForm"$(), $LK,"CEdFindText",A="MN:CEdFindText"$ and $LK,"::/Demo/DolDoc/Form.CPP"$.
|
||||
$ID,2$Used for forms. Use $FG,2$<CTRL-l>$FG$ as a text widgets editor to help you generate the text you need in your "$FG,2$fmtstr$FG$" cmd in a $FG,2$class$FG$. If you add it directly with $LK,"DocPrint",A="MN:DocPrint"$(), you'll need to fill-in the data addr. See $LK,"DocForm",A="MN:DocForm"$(), $LK,"CEdFindText",A="MN:CEdFindText"$ and $LK,"::/Demo/DolDoc/Form.CPP"$.
|
||||
|
||||
The default data-type for the $FG,2$$$CB...$$$FG$ command is $FG,2$I8$FG$ which is $FG,2$Bool$FG$. You can change it to $FG,2$I8$FG$, $FG,2$U8$FG$, $FG,2$I16$FG$, $FG,2$U16$FG$, $FG,2$I32$FG$, $FG,2$U32$FG$, $FG,2$I64$FG$, or $FG,2$U64$FG$. See $LK,"DocDataFmt",A="MN:DocDataFmt"$() and $LK,"DocDataScan",A="MN:DocDataScan"$().
|
||||
$ID,-2$$TR,"LS List Widget"$
|
||||
$ID,2$Used for forms that prompt for data. You must specify a define list, $FG,2$D=""$FG$. Use $FG,2$<CTRL-l>$FG$ as a resource editor to help you generate the text you need in your "$FG,2$fmtstr$FG$" cmd in a $FG,2$class$FG$. If you add it directly with $LK,"DocPrint",A="MN:DocPrint"$(), you'll need to fill-in the data addr. See $LK,"DocForm",A="MN:DocForm"$() and $LK,"::/Demo/DolDoc/Form.CPP"$.
|
||||
$ID,2$Used for forms that prompt for data. You must specify a define list, $FG,2$D=""$FG$. Use $FG,2$<CTRL-l>$FG$ as a text widgets editor to help you generate the text you need in your "$FG,2$fmtstr$FG$" cmd in a $FG,2$class$FG$. If you add it directly with $LK,"DocPrint",A="MN:DocPrint"$(), you'll need to fill-in the data addr. See $LK,"DocForm",A="MN:DocForm"$() and $LK,"::/Demo/DolDoc/Form.CPP"$.
|
||||
|
||||
The default data-type for the $FG,2$$$LS...$$$FG$ command is $FG,2$I64$FG$. You can change it to $FG,2$I8$FG$, $FG,2$U8$FG$, $FG,2$I16$FG$, $FG,2$U16$FG$, $FG,2$I32$FG$, $FG,2$U32$FG$, $FG,2$I64$FG$, or $FG,2$U64$FG$. See $LK,"DocDataFmt",A="MN:DocDataFmt"$() and $LK,"DocDataScan",A="MN:DocDataScan"$().
|
||||
$ID,-2$$TR,"MA Macro"$
|
||||
@@ -180,7 +180,7 @@ $ID,2$The $LK,"ToHtml",A="MN:ToHtml"$() or $LK,"Doc2Html",A="MN:Doc2Html"$() rou
|
||||
$ID,-2$$TR,"ER Error"$
|
||||
$ID,2$When errors are detected in DolDoc cmds, an $FG,2$ER$FG$ entry is generated.
|
||||
$ID,-2$
|
||||
<$LK,"FlagCode",A="FF:::/Adam/DolDoc/DocInit.CPP,ST_DOC_FLAGS"$> See $LK,"Flag Defines",A="MN:DOCEf_LEFT_CB"$ and $LK,"Simple Flags",A="FI:::/Doc/Widget.TXT.Z"$.
|
||||
<$LK,"FlagCode",A="FF:::/Adam/DolDoc/DocInit.CPP,ST_DOC_FLAGS"$> See $LK,"Flag Defines",A="MN:DOCEf_LEFT_CB"$ and $LK,"Simple Flags",A="FI:::/Doc/Widget.TXT"$.
|
||||
$TR,"+H Hold"$
|
||||
$ID,2$Causes not to delete this cmd when cleared with $FG,2$CL$FG$ or when the doc->max_entries is exceeded. Word wrap is a good to hold. There is no way to delete these entries, at this point.
|
||||
$ID,-2$$TR,"+L Link"$
|
||||
|
||||
+2
-2
@@ -29,8 +29,8 @@ Edit
|
||||
|
||||
Insert
|
||||
{
|
||||
Widget(,CH_CTRLL,0x42600000426);
|
||||
Resource(,CH_CTRLR,0x41300000413);
|
||||
TextWidgets(,CH_CTRLL,0x42600000426);
|
||||
GraphicResource(,CH_CTRLR,0x41300000413);
|
||||
FileName(,,0x3E0000003E);
|
||||
DirName(,,0x23E0000023E);
|
||||
GodWord(,,0x4100000041);
|
||||
|
||||
+2
-2
@@ -20,13 +20,13 @@
|
||||
|
||||
* ATAPI PIO $FG,2$CD/DVD$FG$ support with $FG,2$ISO9660$FG$ file system. Can make bootable $FG,2$ISO9660$FG$ ISO files so you can roll-your-own distro's.
|
||||
|
||||
* $LK,"Partitioning",A="MN:PrtDsk"$ tool, installer, $FG,2$boot loaders$FG$ for CD-ROM and hard disk.
|
||||
* $LK,"Partitioning",A="MN:PrtDsk"$ tool, installer, $FG,2$boot loaders$FG$ for CD/DVD and hard disk.
|
||||
|
||||
* $FG,2$Editor/Browser$FG$ for a new $LK,"Document Format",A="FI:::/Doc/DolDocOverview.TXT"$. Source files and the command line window can have graphics, links, icons, trees, colors, super/sub scripts, margins. Everything is seamless through-out the tool chain. No need for separate resource files.
|
||||
|
||||
* 8-bit $FG,2$ASCII$FG$, not just 7-bit. Supported in entire tool chain. $FG,2$<CTRL-ALT-a>$FG$
|
||||
|
||||
* $FG,2$Graphics in source code$FG$, no resource files, $FG,2$graphic resource editor$FG$. $FG,2$<CTRL-r>$FG$
|
||||
* $FG,2$Graphics in source code$FG$, no resource files, $FG,2$graphic sprite editor$FG$. $FG,2$<CTRL-r>$FG$
|
||||
|
||||
* $FG,2$64-bit pointers$FG$. All memory, even more than 4 Gig, can be directly accessed by all tasks on all cores at all times.
|
||||
|
||||
|
||||
Binary file not shown.
+3
-3
@@ -43,10 +43,10 @@ $FG,2$'f'$FG$
|
||||
$ID,2$Format drive.
|
||||
$ID,-2$
|
||||
$FG,2$'M'$FG$
|
||||
$ID,2$Make CD/DVD ISO file. This creates a file image of the directory the cursor is on. The name of the ISO file is $LK,"dsk.dft_iso_filename",A="MN:CDskGlbls"$ and can be redefined in your start-up scripts. You may wish to place it on a different drive.
|
||||
$ID,2$Make CD/DVD ISO file. This creates a file image of the directory the cursor is on. The name of the ISO file is $LK,"blkdev.dft_iso_filename",A="MN:CBlkDevGlbls"$ and can be redefined in your start-up scripts. You may wish to place it on a different drive.
|
||||
$ID,-2$
|
||||
$FG,2$'B'$FG$
|
||||
$ID,2$Burn CD/DVD ISO file. This burns a CD/DVD using the image file, $LK,"dsk.dft_iso_filename",A="MN:CDskGlbls"$ to the drive the cursor is on.
|
||||
$ID,2$Burn CD/DVD ISO file. This burns a CD/DVD using the image file, $LK,"blkdev.dft_iso_filename",A="MN:CBlkDevGlbls"$ to the drive the cursor is on.
|
||||
$ID,-2$
|
||||
|
||||
$FG,5$Instructions on Using CD/DVD's$FG$
|
||||
@@ -56,5 +56,5 @@ $ID,-2$
|
||||
$FG,5$Instructions on Burning CD/DVD's$FG$
|
||||
$ID,2$Create a temporary holding drive in RAM or on disk, copy files into the holding drive. Make an ISO image of the drive by pressing $FG,2$'M'$FG$ when on top of the holding drive. Press $FG,2$'B'$FG$ when on top of the CD/DVD ROM drive to burn the ISO to disk. If you have not recompiled $FG,2$Kernel$FG$ and defined your CD/DVD drive, exit the file mgr and use $LK,"Mount",A="MN:Mount"$.
|
||||
|
||||
$LK,"Making Your Own Distro",A="FI:::/Misc/MakeDistro.CPP"$
|
||||
$LK,"Making Your Own Distro",A="FI:::/Misc/DoDistro.CPP"$
|
||||
$ID,-2$
|
||||
+6
-4
@@ -39,6 +39,7 @@ $FG,2$Desc$FG$ Descriptor, Description
|
||||
$FG,2$Dev$FG$ Device
|
||||
$FG,2$Dft$FG$ Default
|
||||
$FG,2$Dir$FG$ Directory, Direction
|
||||
$FG,2$Div$FG$ Divide
|
||||
$FG,2$Doc$FG$ Document
|
||||
$FG,2$Drv$FG$ Drive
|
||||
$FG,2$Dsk$FG$ Disk
|
||||
@@ -65,7 +66,7 @@ $FG,2$IDT$FG$ Interrupt Descriptor Table
|
||||
$FG,2$Init$FG$ Initialize
|
||||
$FG,2$Ins$FG$ Insert
|
||||
$FG,2$Int$FG$ Interrupt
|
||||
$FG,2$ip_$FG$ Input Pointer. See $LK,"InputPointer.CPP",A="FI:::/Kernel/KbdMouse/InputPointer.CPP"$.
|
||||
$FG,2$ip_$FG$ Input Pointer. See $LK,"InputPointer.CPP",A="FI:::/Kernel/SerialDev/InputPointer.CPP"$.
|
||||
$FG,2$Irq$FG$ Interrupt (Request)
|
||||
$FG,2$JIT$FG$ Just-in-Time
|
||||
$FG,2$Kbd$FG$ Keyboard
|
||||
@@ -87,6 +88,7 @@ $FG,2$Num$FG$ Number
|
||||
$FG,2$Obj$FG$ Object
|
||||
$FG,2$Occ$FG$ Occurrence
|
||||
$FG,2$ODE$FG$ Ordinary Differential Equation
|
||||
$FG,2$Opt$FG$ Option, Optimize
|
||||
$FG,2$Paren$FG$ Parenthesis
|
||||
$FG,2$Pix$FG$ Pixel
|
||||
$FG,2$$FG,2$Pkg$FG$ Package
|
||||
@@ -140,7 +142,7 @@ $FG,2$Wiz$FG$ Wizard
|
||||
$ID,-2$$TR,"Task/Process/Thread"$
|
||||
$ID,2$There is no distinction between $FG,2$task$FG$, $FG,2$process$FG$ or $FG,2$thread$FG$. The $FG,2$Fs$FG$ segment reg is kept pointing to the current task's $LK,"CTask",A="MN:CTask"$. There is only one window per task, and only $FG,2$core#0$FG$ tasks can have windows. Each task has a code and data heap so memory is returned when it dies. Each task has a $LK,"hash",A="HI:Hash"$ symbol table.
|
||||
$ID,-2$$TR,"Adam Task"$
|
||||
$ID,2$This is Adam, as in Adam and Eve, the parent of all tasks and immortal. This task is created at start-up and appears in the small window at the top beneath the user windows. On it's heap are all memory objects which you don't want destroyed by a task's death. When created, Adam runs the file $LK,"::/Adam.CPP"$. When start-up is finished, the adam task enters a server mode where it accepts requests from other tasks. The $LK,"Adam",A="MN:Adam"$("") routine will make Adam compile and run text src code. $FG,2$#include$FG$ statements can be sent to $LK,"Adam",A="MN:Adam"$(""), creating system-wide code and data which don't disappear when any particular task ends.
|
||||
$ID,2$This is Adam, as in Adam and Eve, the parent of all tasks and immortal. This task is created at start-up and appears in the small window at the top beneath the user windows. On it's heap are all memory objects which you don't want destroyed by a task's death. When created, Adam runs the file $LK,"::/StartOS.CPP"$. When start-up is finished, the adam task enters a server mode where it accepts requests from other tasks. The $LK,"Adam",A="MN:Adam"$("") routine will make Adam compile and run text src code. $FG,2$#include$FG$ statements can be sent to $LK,"Adam",A="MN:Adam"$(""), creating system-wide code and data which don't disappear when any particular task ends.
|
||||
$ID,-2$$TR,"Seth Task"$
|
||||
$ID,2$$FG,2$Seth$FG$ is Adam and Eve's child. Each CPU core has a special task which is immortal and which is special. The Adam task on $FG,2$CPU#0$FG$ is also it's $FG,2$Seth$FG$ task.
|
||||
$ID,-2$$TR,"Code and Data Heaps"$
|
||||
@@ -158,7 +160,7 @@ There is no $FG,2$main()$FG$ routine. Instead, statements outside functions are
|
||||
$ID,-2$$TR,"JIT Compile Mode"$
|
||||
$ID,2$In $FG,2$just-in-time$FG$ mode, the compiler places code and data in memory alloced from the heap, incrementally, making them immediately ready for in-place execution. This mode is used during cmd line operations. When you $FG,2$#include$FG$ a file, it is compiled function by function and code ends-up all over in the memory, at least in the first 2Gig of memory. The $LK,"ExeFile",A="MN:ExeFile"$() routine is the same as $FG,2$#include$FG$ but can be used in programs. $LK,"ExePrint",A="MN:ExePrint"$() routine will compile and run a string.
|
||||
$ID,-2$$TR,"Compiler Intermediate Code"$
|
||||
$ID,2$The compiler generates instructions one step before making actual assembly (machine) language instructions. This code is reverse polish stack machine in nature and can be viewed with $LK,"OTrace",A="MN:OTrace"$(). The compiler does not $FG,2$interpret$FG$ code, except in the process of optimization to make the final machine code. Assembly language output can be viewed when code is compiled with the $LK,"CTrace",A="MN:CTrace"$(), or, afterward, with $LK,"U",A="MN:U"$() or $LK,"Uf",A="MN:Uf"$("").
|
||||
$ID,2$The compiler generates instructions one step before making actual assembly (machine) language instructions. This code is reverse polish stack machine in nature and can be viewed with $LK,"PassTrace",A="MN:PassTrace"$(). The compiler does not $FG,2$interpret$FG$ code, except in the process of optimization to make the final machine code. Assembly language output can be viewed when code is compiled with the $LK,"Trace",A="MN:Trace"$(), or, afterward, with $LK,"U",A="MN:U"$() or $LK,"Uf",A="MN:Uf"$("").
|
||||
$ID,-2$$TR,"Drive/Partition"$
|
||||
$ID,2$There is no distinction between $FG,2$drive$FG$ or $FG,2$partition$FG$. They are specified with a single letter from $FG,2$A$FG$-$FG,2$Z$FG$.
|
||||
|
||||
@@ -200,7 +202,7 @@ $FG,5$*.BIN.Z;*.BIN.C;*.BIN$FG$
|
||||
$FG,5$*.DAT.Z;*.DAT$FG$
|
||||
Data files
|
||||
$FG,5$*.ISO$FG$
|
||||
CD-ROM image file--ISO9660.
|
||||
CD/DVD image file--ISO9660.
|
||||
$FG,5$*.AUT.Z;*.AUT$FG$
|
||||
$FG,2$AutoFile$FG$ Basically a HolyC program whose stdout goes to the input of a task when $LK,"AutoFile",A="MN:AutoFile"$() is called.
|
||||
$FG,5$*.GRA.Z;*.GRA$FG$
|
||||
|
||||
Binary file not shown.
+1
-1
@@ -2,7 +2,7 @@ $FG,5$$TX+CX,"The Grub Master Bootloader"$$FG$
|
||||
|
||||
$WW,1$Here are my $FG,2$grub.cfg$FG$ file entries for my TempleOS partitions. I don't have the patience to do it correctly and GRUB obfuscates. Chain loading is just the normal way an operating system like Windows boots. They do drives, zero-based, and partitions on drives, one-based. They call traditional partitioning a "msdos" partition and I presume, if there is a new way to partition drives, it has a new name.
|
||||
|
||||
In addition to a Windows and a Linux partition, I have a Primary TempleOS $FG,2$'D'$FG$, Backup TempleOS $FG,2$'E'$FG$ and a Transfer $FG,2$'I'$FG$ partition for transferring between Windows and TempleOS. "hd0" is 1st hard drive, zero-based numbering. "msdos1" is partition #1, traditional msdos partitioning. I keep $FG,2$'D'$FG$, $FG,2$'E'$FG$, and $FG,2$'I'$FG$ identical by frequently copying all files and I use $FG,2$'I'$FG$ to transfer files. They only need to be a couple Gig in size. Every time I copy files, use $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() to $LK,"MakeAll",A="MN:MakeAll"$ and prepare the partition $LK,"boot sector",A="FI:::/Adam/Boot/BootHD.CPP"$ for chainloading by patching the new block address and size of $FG,2$Kernel.BIN.C$FG$.
|
||||
In addition to a Windows and a Linux partition, I have a Primary TempleOS $FG,2$'D'$FG$, Backup TempleOS $FG,2$'E'$FG$ and a Transfer $FG,2$'I'$FG$ partition for transferring between Windows and TempleOS. "hd0" is 1st hard drive, zero-based numbering. "msdos1" is partition #1, traditional msdos partitioning. I keep $FG,2$'D'$FG$, $FG,2$'E'$FG$, and $FG,2$'I'$FG$ identical by frequently copying all files and I use $FG,2$'I'$FG$ to transfer files. They only need to be a couple Gig in size. Every time I copy files, use $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() to $LK,"MakeAll",A="MN:MakeAll"$ and prepare the partition $LK,"boot sector",A="FI:::/Adam/Opt/Boot/BootHD.CPP"$ for chainloading by patching the new block address and size of $FG,2$Kernel.BIN.C$FG$.
|
||||
|
||||
menuentry "TempleOS D" {
|
||||
insmod chain
|
||||
|
||||
+7
-5
@@ -2,7 +2,7 @@ $WW,1$$FG,5$$TX+CX,"Directory Structure"$$FG$
|
||||
|
||||
$FG,2$/Home$FG$ All your user data should be placed in here to ease backing-up your data. When you install an application it will create a subdirectory of your $FG,2$/Home$FG$ directory for storage.
|
||||
|
||||
$FG,2$/Apps$FG$ Applications are placed in subdirectories of $FG,2$/Apps$FG$. Applications should have a file called $FG,2$Install.CPP.Z$FG$ which will install the app for the current user acct. The file, $FG,2$Load.CPP.Z$FG$ will load the application into mem. The file, $FG,2$Run.CPP.Z$FG$, will usually load and execute the app. To add an app to your PersonalMenu, use $FG,2$<CTRL-l>$FG$, insert a macro with the PopUp option checked and invoke the $FG,2$Run.CPP.Z$FG$ file.
|
||||
$FG,2$/Apps$FG$ Applications are placed in subdirectories of $FG,2$/Apps$FG$. Applications should have a file called $FG,2$Install.CPP.Z$FG$ which will install the app, possibly making files or directories in $FG,2$/Home$FG$. The file, $FG,2$Load.CPP.Z$FG$ will load the application into mem. The file, $FG,2$Run.CPP.Z$FG$, will usually load and execute the app. To add an app to your PersonalMenu, use $FG,2$<CTRL-l>$FG$, insert a macro with the PopUp option checked and invoke the $FG,2$Run.CPP.Z$FG$ file.
|
||||
|
||||
$FG,2$/Demo$FG$ Here you can find lots of sample code to do various things.
|
||||
|
||||
@@ -12,9 +12,9 @@ $FG,2$/Kernel$FG$ The core of the operating system is found here. Since privile
|
||||
|
||||
$FG,2$/Compiler$FG$ The compiler module src code is found here. The compiler is $FG,2$AOT$FG$ compiled to produce a binary file which is loaded at boot. It, too, is $FG,2$AOT$FG$ compiled by $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$().
|
||||
|
||||
$FG,2$/Adam$FG$ The non-kernel part of the operating system is found here. It is $FG,2$JIT$FG$ compiled during boot.
|
||||
$FG,2$/Adam$FG$ The non-kernel part of the operating system is found here. It is $FG,2$JIT$FG$ compiled during boot. The $LK,"Adam Task",A="FF:::/Doc/Glossary.TXT,Adam Task"$ is the father of all tasks, like Adam and Eve.
|
||||
|
||||
$FG,2$/0000Boot$FG$ Misc boot files go here. Stage 2 of the TempleOS hard drive master boot loader, the old hard drive master boot record which is just blk#0, and the CD/DVD $FG,2$0000Kernel.BIN.C$FG$ file go here. ASCII $FG,2$0000$FG$ is near the top, alphabetically, in case you use $TX,"MagicISO",HTML="http://www.magiciso.com"$.
|
||||
$FG,2$/0000Boot$FG$ Boot files go here. Stage 2 of the TempleOS hard drive master boot loader, the old hard drive master boot record which is just blk#0, and the CD/DVD $FG,2$0000Kernel.BIN.C$FG$ file go here. ASCII $FG,2$0000$FG$ is near the top, alphabetically, in case you use $TX,"MagicISO",HTML="http://www.magiciso.com"$.
|
||||
|
||||
|
||||
|
||||
@@ -26,7 +26,9 @@ $LK,"::/Home/PersonalMenu.TXT"$ a menu viewed with the $FG,2$<CTRL-m>$FG$ key or
|
||||
|
||||
$LK,"::/Home/PersonalNotes.TXT"$ a personal note file viewed with the $FG,2$<CTRL-SHIFT-M>$FG$ key.
|
||||
|
||||
$FG,4$::/Home/Adam*$FG$ Copy $FG,2$Adam*$FG$ files from the root into $FG,2$::/Home$FG$ and customize them. These files are invoked when the adam task starts-up.
|
||||
$LK,"::/Home/MakeHome.CPP"$ a file compiled by the $LK,"Adam Task",A="FF:::/Doc/Glossary.TXT,Adam Task"$ during $LK,"StartOS",A="FF:::/StartOS.CPP,MakeHome"$.
|
||||
|
||||
$FG,4$::/Home/Home*$FG$ Copy $FG,2$Home*$FG$ files from the root into $FG,2$::/Home$FG$ and customize them. These files are invoked when the adam task starts-up.
|
||||
|
||||
$LK,"::/Home/DoOnce.CPP"$ a file invoked at the start-up of the first user. Customize this!
|
||||
|
||||
@@ -86,7 +88,7 @@ $LM,0$
|
||||
|
||||
* I don't use $FG,2$U0 *$FG$ because the size is zero for ptr arithmetic.
|
||||
|
||||
* Use $FG,2$$LK,"CH_SHIFT_SPACE",A="MN:CH_SHIFT_SPACE"$$FG$ for spaces in quotes in source code because I run $LK,"Spaces-to-Tabs",A="FF:::/Adam/Utils/StrUtils.CPP,S2T"$ on source code.
|
||||
* Use $FG,2$$LK,"CH_SHIFT_SPACE",A="MN:CH_SHIFT_SPACE"$$FG$ for spaces in quotes in source code because I run $LK,"Spaces-to-Tabs",A="FF:::/Adam/Opt/Utils/StrUtils.CPP,S2T"$ on source code.
|
||||
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
+2
-2
@@ -196,9 +196,9 @@ $FG$$ID,-2$
|
||||
$FG,2$||$FG$$FG$
|
||||
$FG,2$=$FG$,$FG,2$<<=$FG$,$FG,2$>>=$FG$,$FG,2$*=$FG$,$FG,2$/=$FG$,$FG,2$&=$FG$,$FG,2$|=$FG$,$FG,2$^=$FG$,$FG,2$+=$FG$,$FG,2$-=$FG$
|
||||
|
||||
* You can use $LK,"OptOn",A="MN:OptOn"$($LK,"OPTf_WARN_PAREN",A="MN:OPTf_WARN_PAREN"$) to find unnecessary parentheses in code.
|
||||
* You can use $LK,"Option",A="MN:Option"$($LK,"OPTf_WARN_PAREN",A="MN:OPTf_WARN_PAREN"$,ON) to find unnecessary parentheses in code.
|
||||
|
||||
* You can use $LK,"OptOn",A="MN:OptOn"$($LK,"OPTf_WARN_DUP_TYPES",A="MN:OPTf_WARN_DUP_TYPES"$) to find dup local var type statements.
|
||||
* You can use $LK,"Option",A="MN:Option"$($LK,"OPTf_WARN_DUP_TYPES",A="MN:OPTf_WARN_DUP_TYPES"$,ON) to find dup local var type statements.
|
||||
|
||||
* With the $FG,2$#exe{}$FG$ feature in your src code, you can place programs that insert text into the stream of code being compiled. See $LK,"#exe {}",A="FF:::/Kernel/KEnd.CPP,#exe {"$ for an example where the date/time and compile-time prompting for cfguration data is placed into a program. $LK,"StreamPrint",A="MN:StreamPrint"$() places text into a src program stream following the conclusion of the $FG,2$#exe{}$FG$ blk.
|
||||
|
||||
|
||||
+4
-4
@@ -26,19 +26,19 @@ $ID,-2$
|
||||
$ID,-2$2) $LK,"Fmt",A="MN:Fmt"$($FG,2$'D'$FG$,$FG,2$TRUE,FALSE,DVT_FAT32$FG$)
|
||||
$ID,2$This command formats a drive with $FG,2$FAT32$FG$ or the $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ file system type. Use the drive letter of the partition in place of $FG,2$'D'$FG$.
|
||||
|
||||
$BK,1$WARNING:$BK,0$ If you are upgrading, be sure not to lose the file, $FG,2$/0000Boot/OldMBR.BIN.C$FG$.
|
||||
$BK,1$WARNING:$BK,0$ If you are upgrading, be sure not to lose the file, $FG,2$/0000Adam/Opt/Boot/OldMBR.BIN.C$FG$.
|
||||
|
||||
$ID,-2$3) $LK,"CopyTree",A="MN:CopyTree"$($FG,2$"T:/"$FG$,$FG,2$"D:/"$FG$)
|
||||
$ID,2$This command is used to copy files onto a hard drive partition from the CD-ROM. Use the drive letter of the partition in place of $FG,2$'D'$FG$.
|
||||
$ID,2$This command is used to copy files onto a hard drive partition from the CD/DVD. Use the drive letter of the partition in place of $FG,2$'D'$FG$.
|
||||
|
||||
$ID,-2$4) $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$($FG,2$'D'$FG$)
|
||||
$ID,2$This command recompiles the source code on a drive and writes to the $UL,1$drive's$UL,0$ boot record. You'll need to reenter the $LK,"Mount",A="MN:Mount"$ information so it can be stored in the kernel.
|
||||
|
||||
$ID,-2$5) Use Linux's $LK,"Grub",A="FI:::/Doc/Grub.TXT"$ or TempleOS' $LK,"MasterBootIntall",A="MN:MasterBootIntall"$($FG,2$'D'$FG$)
|
||||
$ID,2$
|
||||
The $LK,"MasterBootIntall",A="MN:MasterBootIntall"$() command places a boot loader on a drive. It saves the old master boot record to $FG,2$/0000Boot/OldMBR.BIN.C$FG$ and replaces it. When you boot, you will have the option of booting the old master boot record. This command can be skipped if you already have a boot loader. Be sure not to lose the copy of the old boot record, like if you reformat the drive.
|
||||
The $LK,"MasterBootIntall",A="MN:MasterBootIntall"$() command places a boot loader on a drive. It saves the old master boot record to $FG,2$/0000Adam/Opt/Boot/OldMBR.BIN.C$FG$ and replaces it. When you boot, you will have the option of booting the old master boot record. This command can be skipped if you already have a boot loader. Be sure not to lose the copy of the old boot record, like if you reformat the drive.
|
||||
|
||||
Delete $FG,2$/0000Boot/OldMBR.BIN.C$FG$ if you want to get a fresh copy of a mbr, like if installing from your own custom CD containing it's own $FG,2$/0000Boot/OldMBR.BIN.C$FG$ onto a system with a non-TempleOS boot loader.
|
||||
Delete $FG,2$/0000Adam/Opt/Boot/OldMBR.BIN.C$FG$ if you want to get a fresh copy of a mbr, like if installing from your own custom CD containing it's own $FG,2$/0000Adam/Opt/Boot/OldMBR.BIN.C$FG$ onto a system with a non-TempleOS boot loader.
|
||||
|
||||
If you have anti-virus software, it might object to having a different master boot record.
|
||||
$ID,-2$
|
||||
|
||||
+1
-3
@@ -8,9 +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$<ALT-digit keys>$FG$ Extended ASCII (3 digit decimal number).
|
||||
|
||||
$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,"CtrlAltLetCBSet",A="MN:CtrlAltLetCBSet"$(). They operate either in a interrupt environment or in the window mgr when it queues kbd msgs. 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. 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 msgs. 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.
|
||||
|
||||
|
||||
+8
-5
@@ -17,11 +17,11 @@ $FG,5$$TX+CX,"Single System-wide Mem Map"$
|
||||
$FG,2$ 0x0000000000- 0x00$TX,"00006FFF",D="DD_PROTECTED_LOW"$$FG$
|
||||
$ID,2$Pages marked not present so NULL ptr dereference causes a fault.
|
||||
$ID,-2$
|
||||
$FG,2$ 0x00$TX,"00007C00",D="DD_KERNEL"$- 0x00$TX,"0003569F",D="DD_KERNEL_END"$$FG$
|
||||
$FG,2$ 0x00$TX,"00007C00",D="DD_KERNEL"$- 0x00$TX,"00034EAF",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_CD"$- 0x00$TX,"00096FFF",D="DD_BOOT_HIGH_LOC_CD_END"$$FG$
|
||||
$ID,2$$FG$Boot block relocated here before loading the Kernel module, $LK,"BootCD",A="FI:::/Adam/Boot/BootCD.CPP"$ & $LK,"BootHD",A="FI:::/Adam/Boot/BootHD.CPP"$.
|
||||
$FG,2$ 0x00$TX,"00096600",D="DD_BOOT_HIGH_LOC_DVD"$- 0x00$TX,"00096FFF",D="DD_BOOT_HIGH_LOC_DVD_END"$$FG$
|
||||
$ID,2$$FG$Boot block relocated here before loading the Kernel module, $LK,"BootDVD",A="FI:::/Adam/Opt/Boot/BootDVD.CPP"$ & $LK,"BootHD",A="FI:::/Adam/Opt/Boot/BootHD.CPP"$.
|
||||
$ID,-2$
|
||||
$FG,2$ 0x00$TX,"00097000",D="DD_MP_VECT"$- 0x00$TX,"00097030",D="DD_MP_VECT_END"$$FG$
|
||||
$ID,2$Multicore start-up vect code, $LK,"MPN_VECT",A="MN:MPN_VECT"$.
|
||||
@@ -35,15 +35,18 @@ $ID,-2$
|
||||
$FG,2$ 0x00$TX,"00100000",D="DD_SYS_FIXED_AREA_BASE"$- 0x00$TX,"001845FF",D="DD_SYS_FIXED_AREA_END"$$FG$
|
||||
$ID,2$$LK,"CSysFixedArea",A="MN:CSysFixedArea"$ for page tables and misc. $TX,"128 Gig",D="DD_MEM_MAPPED_SPACE_GIG"$ of address space mapped.
|
||||
$ID,-2$
|
||||
$FG,2$ 0x00$TX,"00184600",D="DD_SYS_HEAP_BASE"$- 0x00$TX,"3FFE3DFF",D="DD_SYS_HEAP_LIMIT"$$FG$
|
||||
$FG,2$ 0x00$TX,"00184600",D="DD_SYS_HEAP_BASE"$- 0x00$TX,"3FFDFEFF",D="DD_SYS_HEAP_LIMIT"$$FG$
|
||||
$ID,2$Code Heap mem.
|
||||
$ID,-2$
|
||||
$FG,2$ - 0x007FFFFFFF$FG$
|
||||
$ID,2$Data Heap mem. (This exists if there is less than 2 Gig of code heap.)
|
||||
$ID,-2$
|
||||
$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$
|
||||
$FG,2$ 0x0080000000-~0x00DFFFFFFF$FG$
|
||||
$FG,2$ 0x0100000000-~0x$TX,"1FFFFFFFFF",D="DD_MEM_MAPPED_SPACE_END"$$FG$
|
||||
$ID,2$Data Heap mem.
|
||||
$ID,2$Data Heap mem. (The physical memory that exists in this range is data heap.)
|
||||
$ID,-2$
|
||||
$FG,2$ - 0x$TX,"1FFFFFFFFF",D="DD_MEM_MAPPED_SPACE_END"$$FG$$FG$
|
||||
$ID,2$64-bit devices are alloced with $LK,"Mem64DevAlloc",A="MN:Mem64DevAlloc"$() counting bwd from $TX,"128 Gig",D="DD_MEM_MAPPED_SPACE_GIG"$, but no PCI devices are actually supported$WW,0$.
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
$FG,5$$TX+CX,"MultiTasking"$$FG$
|
||||
|
||||
$WW,1$TempleOS is a preemptive multitasking operating system. However, you can turn-off preemption on a task by task basis and the task will not yield ctrl unless it volunteers with $LK,"Yield",A="MN:Yield"$(), $LK,"Sleep",A="MN:Sleep"$() or a call to I/O which yields ctrl.
|
||||
|
||||
Use the $LK,"Preempt",A="MN:Preempt"$() cmd to turn on or off preemption. This is useful when you have multiple tasks modifying data structures, simultaneously. Interrupts still occur when preemption is off. Turning-off preemption does not protect against multicore simultaneous access.
|
||||
|
||||
$BK,1$Preemption is turned-off by default when a task is $LK,"Spawn",A="MN:Spawn"$()ed.$BK,0$
|
||||
|
||||
The time-slice rate is set by $LK,"JIFFY_FREQ",A="MN:JIFFY_FREQ"$.
|
||||
|
||||
TempleOS does not remove tasks from $FG,2$the queue$FG$ when they are waiting. They swap-in, check whatever condition they are waiting for and swap-out. This keeps it simple, but would cause problems with too many tasks. TempleOS is intended for non-server, home computers with a maximum of around ten, or so, tasks. See $LK,"Scheduler",A="FL:::/Kernel/Sched.CPP,1"$.
|
||||
|
||||
TempleOS has no task priority scheme.
|
||||
|
||||
Disk requests are not broken into pieces for sharing. Therefore, if one task makes a big request, the drive is locked onto that task until it is done. During that time, other tasks can do CPU-only operations, however.
|
||||
|
||||
|
||||
$FG,5$$TX+CX,"Interrupts"$$FG$
|
||||
|
||||
You can turn on and off interrupts in your user programs. This is part of the mission statement, giving complete freedom to programmers. Use $FG,2$CLI$FG$ or $FG,2$STI$FG$. TempleOS currently doesn't use interrupt besides the timer, keyboard and sometimes mouse interrupt. Since the interrupt flag is part of your task context and since you are voluntarily swapped-out if you call $LK,"GetChar",A="MN:GetChar"$() or whatever, you won't even notice if you turn-off interrupts at the cmd prompt because you are being swapped-out and interrupts are being turned-on by the next task.
|
||||
|
||||
I saw no reason to make the hard drive or CD-ROM code interrupt driven -- it just creates potential compatibility issues. On a home system, you do one thing at a time, mostly. TempleOS can do multiple things at once, but not as efficiently as a server operating system. It would bogg down with a hundred tasks asking for service. It is much simpler, though, the way it is.
|
||||
|
||||
The disk code does not break-up large requests in pieces, if you are curious why one task must wait until another finishes an operation.
|
||||
|
||||
See $LK,"::/Demo/Lectures/Spinning.CPP"$.
|
||||
+3
-3
@@ -12,7 +12,7 @@ $WW,1$$FG,5$$TX+CX,"Mysteries"$$FG$
|
||||
|
||||
* There is no $FG,2$PATH$FG$. You do not enter filenames at the command-line and expect them to run. You enter C-like code. $LK,"Get Started Here",A="FI:::/Doc/CmdLineOverview.TXT"$.
|
||||
|
||||
* If you use $LK,"Grub",A="FI:::/Doc/Grub.TXT"$, you $FG,2$chain-load$FG$ like Windows. You can use the TempleOS boot-loader. $LK,"Master-Boot-Loader-Stage1",A="FI:::/Adam/Boot/BootMHD.CPP"$, $LK,"Master-Boot-Loader-Stage2",A="FI:::/Adam/Boot/BootMHD2.CPP"$, $LK,"Partition-Boot-Loader",A="FI:::/Adam/Boot/BootHD.CPP"$, $LK,"CD-DVD-Boot-Loader",A="FI:::/Adam/Boot/BootCD.CPP"$.
|
||||
* If you use $LK,"Grub",A="FI:::/Doc/Grub.TXT"$, you $FG,2$chain-load$FG$ like Windows. You can use the TempleOS boot-loader. $LK,"Master-Boot-Loader-Stage1",A="FI:::/Adam/Opt/Boot/BootMHD.CPP"$, $LK,"Master-Boot-Loader-Stage2",A="FI:::/Adam/Opt/Boot/BootMHD2.CPP"$, $LK,"Partition-Boot-Loader",A="FI:::/Adam/Opt/Boot/BootHD.CPP"$, $LK,"CD-DVD-Boot-Loader",A="FI:::/Adam/Opt/Boot/BootDVD.CPP"$.
|
||||
|
||||
* The boot-loaders must be patched by you running $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() or $LK,"MasterBootIntall",A="MN:MasterBootIntall"$(). 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/KStart.CPP"$ if you relocate it.
|
||||
|
||||
@@ -28,7 +28,7 @@ $WW,1$$FG,5$$TX+CX,"Mysteries"$$FG$
|
||||
|
||||
* TempleOS has a dictionary that is shipped compressed. When you boot the first time it is uncompressed. TempleOS has a Windows utility for uncompressing. That utility needs $FG,2$Microsoft DLL$FG$ files. TempleOS does not use any libraries, modules or code from other sources -- I wrote it all from scratch and it is self-contained.
|
||||
|
||||
* There are no OBJ or EXE files. There are only two files compiled ahead-of-time -- $FG,2$Kernel.BIN.C$FG$ and $FG,2$Compiler.BIN.Z$FG$. You can delete them and recompile with $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). TempleOS is $TX,"120,629",D="DD_TEMPLEOS_LOC"$ lines. Roughly 50,000 is compiled AOT and 50,000 during boot $FG,2$JIT$FG$. The rest is $FG,2$JIT$FG$ demos and applications.
|
||||
* There are no OBJ or EXE files. There are only two files compiled ahead-of-time -- $FG,2$Kernel.BIN.C$FG$ and $FG,2$Compiler.BIN.Z$FG$. You can delete them and recompile with $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$(). TempleOS is $TX,"119,216",D="DD_TEMPLEOS_LOC"$ lines. Roughly 50,000 is compiled AOT and 50,000 during boot $FG,2$JIT$FG$. The rest is $FG,2$JIT$FG$ demos and applications.
|
||||
|
||||
* A major difference between TempleOS and other systems is that the heap and compiler sym table are associated with tasks, not applications.
|
||||
|
||||
@@ -60,7 +60,7 @@ $WW,1$$FG,5$$TX+CX,"Mysteries"$$FG$
|
||||
|
||||
* TempleOS supports $FG,2$FAT32$FG$ and $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ file systems. The $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ partitions will appear as $FG,2$FAT32$FG$ to other operating systems, but will not work. Do not access the native TempleOS partitions from other operating systems. This was to fool a bootloader when I tricked it to use it's recovery partition feature.
|
||||
|
||||
* The CPU usage during disk operation expands to 99%. It polls while swapping-out. You can do other, non-disk activity during disk operations because it swaps-out a lot and task swaps take only half a microsecond, probably a hundred times faster than a typical OS. See $LK,"Cooperative Multitasking",A="FI:::/Demo/Lectures/Spinning.CPP"$. It does not break-up disk operations into small pieces for sharing, however, so the disk is lock onto that one task.
|
||||
* The CPU usage during disk operation expands to 99%. It polls while swapping-out. You can do other, non-disk activity during disk operations because it swaps-out a lot and task swaps take only half a microsecond, probably a hundred times faster than a typical OS. It does not break-up disk operations into small pieces for sharing, however, so the disk is lock onto that one task.
|
||||
|
||||
$FG,8$
|
||||
* "Windows" is a trademark of MicroSoft Corp.
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
$WW,1$$FG,5$$TX+CX,"Compiler Options"$$FG$
|
||||
|
||||
Use $LK,"OptOn",A="MN:OptOn"$() $LK,"OptOff",A="MN:OptOff"$(). You might need to do $FG,2$#exe {OptOn();}$FG$.
|
||||
|
||||
$LK,"OPTf_GLBLS_ON_DATA_HEAP",A="MN:OPTf_GLBLS_ON_DATA_HEAP"$ without this option, global vars are placed in the code heap which is limited to 2 Gig. In $FG,2$AOT$FG$ modules, global vars take-up room in the $FG,2$.BIN$FG$ file, so you might want to use this option, instead. You might wish to turn it on and off around specific vars. A disadvantage of data heap global vars in $FG,2$AOT$FG$ modules is they can't be initialized.
|
||||
|
||||
$LK,"OPTf_EXTERNS_TO_IMPORTS",A="MN:OPTf_EXTERNS_TO_IMPORTS"$ and $LK,"OPTf_KEEP_PRIVATE",A="MN:OPTf_KEEP_PRIVATE"$ are strange options, you'll never need. They're to allow the same header file for $FG,2$Kernel$FG$ to act as $FG,2$extern$FG$s when compiling itself and $FG,2$import$FG$s when compiled by $FG,2$AOT$FG$ modules.
|
||||
|
||||
$LK,"OPTf_WARN_UNUSED_VAR",A="MN:OPTf_WARN_UNUSED_VAR"$ warning if unused var. It is applied to functions.
|
||||
|
||||
$LK,"OPTf_WARN_PAREN",A="MN:OPTf_WARN_PAREN"$ warning if parenthesis are not needed.
|
||||
|
||||
$LK,"OPTf_WARN_DUP_TYPES",A="MN:OPTf_WARN_DUP_TYPES"$ warning if dup local var type statements.
|
||||
|
||||
$LK,"OPTf_NO_REG_VAR",A="MN:OPTf_NO_REG_VAR"$ forces all function local vars to the stk not regs. Applied to functions.
|
||||
|
||||
$LK,"OPTf_NO_BUILTIN_CONST",A="MN:OPTf_NO_BUILTIN_CONST"$ Disable 10-byte float consts for ã, log2_10, log10_2, loge_2. Applied to functions.
|
||||
@@ -1,3 +1 @@
|
||||
$WW,1$A $FG,2$Queue$FG$ is a bunch of $LK,"MAlloc",A="MN:MAlloc"$()ed chunks of mem linked together in a circle with one ptr to the $FG,2$next$FG$ value and another ptr to the $FG,2$last$FG$ value. These ptrs must be stored in the first locations in the structure.
|
||||
|
||||
Be careful when writing multitasking code not to access $FG,2$Queues$FG$ while in the middle of a change. You might turn-off preemption or interrupts.
|
||||
+1
-1
@@ -10,7 +10,7 @@ $WW,1$* You run a risk of problems if you do file operations on the same files s
|
||||
|
||||
* Call $LK,"ChgDsk",A="MN:ChgDsk"$() when you insert a new removable media.
|
||||
|
||||
* Accessing CD-ROM's is flacky. Try $LK,"Drv",A="MN:Drv"$() or $LK,"ChgDsk",A="MN:ChgDsk"$() twice.
|
||||
* Accessing CD/DVD's is flacky. Try $LK,"Drv",A="MN:Drv"$() or $LK,"ChgDsk",A="MN:ChgDsk"$() twice.
|
||||
|
||||
* You can only $FG,2$extern$FG$ something once. There is a varient called $FG,2$_extern$FG$ which binds a HolyC definition to a asm sym. This, too, can only be done once.
|
||||
|
||||
|
||||
+2
-2
@@ -15,7 +15,7 @@ public class CDirEntry //64-byte fixed-size
|
||||
U8 name[CDIR_FILENAME_LEN]; //See $LK,"chars_bmp_filename",A="MN:chars_bmp_filename"$, $LK,"FileNameChk",A="MN:FileNameChk"$
|
||||
I64 cluster; (blk) //One sector per cluster.
|
||||
I64 size; //In bytes
|
||||
CDate datetime; //See $LK,"DateTime",A="::/Doc/TimeDate.TXT"$, $LK,"Implementation of DateTime",A="FI:::/Kernel/Date.CPP"$
|
||||
CDate datetime; //See $LK,"DateTime",A="::/Doc/TimeDate.TXT"$, $LK,"Implementation of DateTime",A="FI:::/Kernel/KDate.CPP"$
|
||||
};
|
||||
|
||||
public class CRedSeaBoot //RedSea is type FAT32 in partition table to fool BIOS.
|
||||
@@ -31,7 +31,7 @@ public class CRedSeaBoot //RedSea is type FAT32 in partition table to fool BIOS.
|
||||
U16 signature2; //0xAA55
|
||||
};
|
||||
$HL,0$
|
||||
See $LK,"implementation of RedSea file system",A="::/Kernel/Dsk/FileSysRedSea.CPP"$.
|
||||
See $LK,"implementation of RedSea file system",A="::/Kernel/BlkDev/FileSysRedSea.CPP"$.
|
||||
|
||||
File with names ending in .Z are stored compressed.
|
||||
See $LK,"implementation of LZW compression",A="::/Kernel/Compress.CPP"$.
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
$WW,1$$FG,5$$TX+CX,"Graphic Resource Help"$$FG$
|
||||
$WW,1$$FG,5$$TX+CX,"Graphic Sprite Resource Help"$$FG$
|
||||
|
||||
A sprite is an ordered list of elements such as lines, rectangles, bitmaps and color changes. In a program's source code, you first make a sprite. Then, you insert a pointer to it.
|
||||
|
||||
|
||||
+13
-15
@@ -8,9 +8,9 @@ $WW,1$$FG,5$$TX+CX,"Tips"$$FG$
|
||||
|
||||
* See $MA-X+PU,"Key Map",LM="KeyMap;View;\n"$ for a list of defined keys. Define your own keys in $LK,"MyPutKey",A="MN:MyPutKey"$(). See $LK,"Keyboard Devices",A="HI:Keyboard Devices/System"$.
|
||||
|
||||
* $FG,2$<ALT-m>$FG$ maximizes a window. $FG,2$<ALT-SHIFT-w>$FG$ closes AutoComplete. $FG,2$<ALT-w>$FG$ brings back AutoComplete. $FG,2$<ALT-v>$FG$ vertically tiles windows. $FG,2$<ALT-h>$FG$ horizontally tiles windows. The $FG,2$ALT$FG$ keys are defined in $LK,"::/Home/AdamKeyPlugIns.CPP"$. You can customize them.
|
||||
* $FG,2$<ALT-m>$FG$ maximizes a window. $FG,2$<ALT-SHIFT-w>$FG$ closes AutoComplete. $FG,2$<ALT-w>$FG$ brings back AutoComplete. $FG,2$<ALT-v>$FG$ vertically tiles windows. $FG,2$<ALT-h>$FG$ horizontally tiles windows. The $FG,2$ALT$FG$ keys are defined in $LK,"::/Home/HomeKeyPlugIns.CPP"$. You can customize them.
|
||||
|
||||
* If you make changes to TempleOS 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 TempleOS 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 TempleOS CD-ROM and use $LK,"Mount",A="MN:Mount"$() to mount your hard drive.
|
||||
* If you make changes to TempleOS 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 TempleOS 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 TempleOS CD/DVD and use $LK,"Mount",A="MN:Mount"$() to mount your hard drive.
|
||||
|
||||
* I copy my files to a mirrored identical 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.
|
||||
@@ -21,9 +21,9 @@ $FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* Use the PullDown menu at the top of the screen to learn commands, or for finding the keyboard controls to games.
|
||||
|
||||
* You can adjust the mouse movement rate by setting global vars in your start-up file. See $LK,"mouse scale",A="FF:/Home/AdamLocalize.CPP,mouse.scale"$.
|
||||
* You can adjust the mouse movement rate by setting global vars in your start-up file. See $LK,"mouse scale",A="FF:/Home/HomeLocalize.CPP,mouse.scale"$.
|
||||
|
||||
* You can set your local time zone by setting the $LK,"local_time_offset",A="MN:local_time_offset"$ global var in a start-up file. It's units are $LK,"CDATE_FREQ",A="MN:CDATE_FREQ"$. See $LK,"local time",A="FF:/Home/AdamLocalize.CPP,local_time"$.
|
||||
* You can set your local time zone by setting the $LK,"local_time_offset",A="MN:local_time_offset"$ global var in a start-up file. It's units are $LK,"CDATE_FREQ",A="MN:CDATE_FREQ"$. See $LK,"local time",A="FF:/Home/HomeLocalize.CPP,local_time"$.
|
||||
|
||||
* $FG,2$<CTRL-SHIFT-L>$FG$ in the editor to reindent a $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ function or renumber an asm routine's local labels.
|
||||
|
||||
@@ -33,7 +33,7 @@ $FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* $LK,"Scale2Mem",A="MN:Scale2Mem"$(min,max,limit=2*1024*1024*1024) can be used for cfg questions when recompiling. The $LK,"MakeOSDrvBootInstall",A="MN:MakeOSDrvBootInstall"$() cfg prompts accept expressions, not just numbers. The dft disk cache is $FG,2$Scale2Mem(0x80000,0x8000000)$FG$.
|
||||
|
||||
* You can permanently disable $FG,2$AutoComplete$FG$ commenting-out $LK,"ACInit",A="FF:/Home/AdamSys.CPP,ACInit"$() in $LK,"::/Home/AdamSys.CPP",A="FF:/Home/AdamSys.CPP,ACInit"$.
|
||||
* You can permanently disable $FG,2$AutoComplete$FG$ commenting-out $LK,"ACInit",A="FF:/Home/HomeSys.CPP,ACInit"$() in $LK,"::/Home/HomeSys.CPP",A="FF:/Home/HomeSys.CPP,ACInit"$.
|
||||
|
||||
* Boolean expressions $BK,1$not$BK,0$ in $FG,2$if$FG$ statements don't have short circuit logic and are compiled inefficiently.
|
||||
|
||||
@@ -51,13 +51,13 @@ $FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* There is a utility $LK,"LinkChk",A="MN:LinkChk"$() which will check for broken links in documentation.
|
||||
|
||||
* You can use $LK,"OptOn",A="MN:OptOn"$($LK,"OPTf_WARN_PAREN",A="MN:OPTf_WARN_PAREN"$) to find unnecessary parentheses in code.
|
||||
* You can use $LK,"Option",A="MN:Option"$($LK,"OPTf_WARN_PAREN",A="MN:OPTf_WARN_PAREN"$,ON) to find unnecessary parentheses in code.
|
||||
|
||||
* You can use $LK,"OptOn",A="MN:OptOn"$($LK,"OPTf_WARN_DUP_TYPES",A="MN:OPTf_WARN_DUP_TYPES"$) to find unnecessary local var type statements.
|
||||
* You can use $LK,"Option",A="MN:Option"$($LK,"OPTf_WARN_DUP_TYPES",A="MN:OPTf_WARN_DUP_TYPES"$,ON) to find unnecessary local var type statements.
|
||||
|
||||
* $LK,"OptEqu",A="MN:OptEqu"$($LK,"OPTf_ECHO",A="MN:OPTf_ECHO"$,ON) can be placed in $LK,"Adam.CPP",A="FI:::/Adam.CPP"$ to echo start-up scripts.
|
||||
* $LK,"Option",A="MN:Option"$($LK,"OPTf_ECHO",A="MN:OPTf_ECHO"$,ON) can be placed in $LK,"StartOS.CPP",A="FI:::/StartOS.CPP"$ to echo start-up scripts.
|
||||
|
||||
* Use $LK,"Plain",A="MN:Plain"$() to edit a plain text file. You'll need this if your file has $FG,2$$$$FG$'s. Use the $LK,"::/Misc/ToDolDoc.CPP"$ utility to convert plain text to DolDoc's.
|
||||
* Use $LK,"Plain",A="MN:Plain"$() to edit a plain text file. You'll need this if your file has $FG,2$$$$FG$'s. Use the $LK,"ToDolDoc",A="MN:ToDolDoc"$() utility to convert plain text to DolDoc's by doubling $FG,2$$$$FG$'s.
|
||||
|
||||
* Use $LK,"Silent",A="MN:Silent"$() to disable screen text output.
|
||||
|
||||
@@ -75,7 +75,7 @@ $FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* You can eye-dropper colors in the $FG,2$<CTRL-r>$FG$ sprite editor by pressing $FG,2$'c'$FG$. Press $FG,2$'t'$FG$ for transparent.
|
||||
|
||||
* There are handy functions--$FG,2$F(),R(),FD()$FG$ and $FG,2$RD()$FG$ which are defined in $LK,"::/Home/AdamWrappers.CPP"$. You are encouraged to change them and add more. They will perform find-and-replace operations accross multiple files. The $FG,2$+l$FG$ flag is particularly useful since it limits to whole labels. The $FG,2$+lb$FG$ and $FG,2$+la$FG$ flags limit to whole labels just before or after. You are encouraged to add or modify handy wrapper functions to make cmd line operations easier.
|
||||
* There are handy functions--$FG,2$F(),R(),FD()$FG$ and $FG,2$RD()$FG$ which are defined in $LK,"::/Home/HomeWrappers.CPP"$. You are encouraged to change them and add more. They will perform find-and-replace operations accross multiple files. The $FG,2$+l$FG$ flag is particularly useful since it limits to whole labels. The $FG,2$+lb$FG$ and $FG,2$+la$FG$ flags limit to whole labels just before or after. You are encouraged to add or modify handy wrapper functions to make cmd line operations easier.
|
||||
|
||||
* When using $LK,"Find",A="MN:Find"$() while modifying code, work from the bottom-up so that line numbers are correct. If you work top-down, then inserting or deleting lines causes the lower file links will be incorrect.
|
||||
|
||||
@@ -89,13 +89,11 @@ $FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* Use $LK,"View",A="MN:View"$() in Pop-up macros to linger until the user presses $FG,2$<ESC>$FG$ or $FG,2$<SHIFT-ESC>$FG$.
|
||||
|
||||
* You can access the word under the cursor at $LK,"ac.cur_word",A="MN:CAutoCompleteGlbls"$, but you should probably turn-off preemption or interrupts momentarily to copy it.
|
||||
* You can access the word under the cursor at $LK,"ac.cur_word",A="MN:CAutoCompleteGlbls"$.
|
||||
|
||||
* You can reactivate $FG,2$AutoComplete$FG$ after closing it by pressing $FG,2$<CTRL-Fun Key>$FG$ or $FG,2$<ALT-w>$FG$ if you have it defined.
|
||||
|
||||
* $LK,"Preempt",A="MN:Preempt"$() is used to keep a task from being interrupted and swapped-out. It has a similar effect to turning-off interrupts. Each task has it's own preemption ctrl. A task with preemption turned-off can voluntarily $LK,"Yield",A="MN:Yield"$() with preemption off.
|
||||
|
||||
* You can set a color for different drives with $LK,"DrvTextAttrSet",A="MN:DrvTextAttrSet"$(). Place calls to this in $LK,"::/Home/AdamLocalize.CPP"$.
|
||||
* You can set a color for different drives with $LK,"DrvTextAttrSet",A="MN:DrvTextAttrSet"$(). Place calls to this in $LK,"::/Home/HomeLocalize.CPP"$.
|
||||
|
||||
* $FG,2$<CTRL-SHIFT-T>$FG$ to toggle to/from plain text just the $LK,"CDoc",A="MN:CDoc"$ cmd under the cursor. See $LK,"::/Demo/DolDoc/TextDemo.CPP"$.
|
||||
|
||||
@@ -123,7 +121,7 @@ $FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* You can delete the $FG,4$/Home/Registry.CPP.Z$FG$ file. The policy is that deleting it will restore defaults. It is a text doc, if you want to edit it. Be careful of tree indentations.
|
||||
|
||||
* Study $LK,"::/Adam/Utils/MemRep.CPP"$ and $LK,"WallPaper",A="MN:WallPaper"$() to learn how the system resources are put together.
|
||||
* Study $LK,"::/Adam/Opt/Utils/MemRep.CPP"$ and $LK,"WallPaper",A="MN:WallPaper"$() to learn how the system resources are put together.
|
||||
|
||||
* The editor's select-text mechanism allows for disjoint portions of selected text. This is a feature, not a bug -- you can cut-and-paste disjoint text.
|
||||
|
||||
|
||||
+15
-17
@@ -7,17 +7,17 @@ $ID,2$* Professionals doing hobby projects
|
||||
* Teenagers doing projects
|
||||
* Non-professional, older-persons projects
|
||||
$ID,-2$
|
||||
Simplicity is a goal to $LK,"keep the line count down",A="FI:::/Doc/Strategy.TXT"$, so it's easy to tinker with. As it turns-out, simplicity makes it faster in some ways, too. It never switches privilege levels, never changes address maps, tends to load whole contiguous files and other, similar things which boost speed. It's only $TX,"122,766",D="DD_TEMPLEOS_LOC"$ lines of code including the kernel, the 64-bit compiler, the graphics library and all the tools. More importantly, it's designed to keep the user's line count down -- you can do a "hello world" application in one line of code and can put graphics on the screen with a three line program!
|
||||
Simplicity is a goal to $LK,"keep the line count down",A="FI:::/Doc/Strategy.TXT"$, so it's easy to tinker with. As it turns-out, simplicity makes it faster in some ways, too. It never switches privilege levels, never changes address maps, tends to load whole contiguous files and other, similar things which boost speed. It's only $TX,"118,745",D="DD_TEMPLEOS_LOC"$ lines of code including the kernel, the 64-bit compiler, the graphics library and all the tools. More importantly, it's designed to keep the user's line count down -- you can do a $LK,"Hello World",A="FI:::/Doc/HelloWorld.TXT.Z"$ application in one line of code and can put graphics on the screen with a three line program!
|
||||
|
||||
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 TempleOS has value. In facts, that's the point of TempleOS. See the $LK,"TempleOS Charter",A="FI:::/Doc/Charter.TXT"$.
|
||||
|
||||
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 if you can't do something.
|
||||
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 if you can't do something. I cherry-pick what it will and won't do to make it maximally beautiful.
|
||||
|
||||
Two things to know about TempleOS 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.
|
||||
|
||||
In other operating systems, I hated learning one language for command line scripts and another for programming. With $FG,2$TempleOS$FG$, the command line feeds right into the $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ 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. See $LK,"::/Doc/HelloWorld.TXT.Z"$.
|
||||
In other operating systems, I hated learning one language for command line scripts and another for programming. With $FG,2$TempleOS$FG$, the command line feeds right into the $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ 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. See $LK,"::/Doc/HelloWorld.TXT"$.
|
||||
|
||||
During the boot process, many files get $LK,"compiled",A="FI:::/Adam.CPP"$ before you have access to the command line. (Don't worry, booting takes only a couple of 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$.
|
||||
During the boot process, many files get $LK,"compiled",A="FI:::/StartOS.CPP"$ before you have access to the command line. (Don't worry, booting takes only a couple of 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.
|
||||
|
||||
@@ -37,9 +37,9 @@ The syntax change created an ambiguity when specifying function addresses. To r
|
||||
|
||||
Once I was no longer using standard C/C++ syntax, I decided to change everything I didn't like and call it $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$. Here are the new $LK,"operator precedence",A="FF:::/Doc/HolyC.TXT,operator precedence"$ rules. It's Biblical! See $LK,"Luke,5:37",A="BF:Luke,5:37"$.
|
||||
|
||||
There are no object files in TempleOS and, normally, you don't make executable files either, but you can. That's known as "$FG,2$Ahead-Of-Time$FG$" compilation. Instead, you "$FG,2$Just-In-Time$FG$" compile.
|
||||
There are no object files in TempleOS and, normally, you don't make executable files either, but you can. That's known as $LK,"Ahead-of-Time",A="FF:::/Doc/Glossary.TXT,AOT Compile Mode"$ compilation. Instead, you $LK,"Just in Time",A="FF:::/Doc/Glossary.TXT,JIT Compile Mode"$ compile.
|
||||
|
||||
Tasks have no priority and are never removed from the queue. Instead, they often poll whatever they are waiting on and swap-out. (Swapping tasks takes half a microsecond and does not involve disk activity or memory maps.) See $LK,"Scheduler",A="FL:::/Kernel/Sched.CPP,1"$. Polling keeps it simple. It's might be a problem if you had lots of tasks busy, which rarely happens on a home computer. The order of the tasks in the queue determines front-to-back window order. See $LK,"TempleOS MultiTasking",A="FI:::/Doc/MultiTasking.TXT"$.
|
||||
Tasks have no priority and are never removed from the queue. Instead, they often poll whatever they are waiting on and swap-out. (Swapping tasks takes half a microsecond and does not involve disk activity or memory maps.) See $LK,"Scheduler",A="FL:::/Kernel/Sched.CPP,1"$. Polling keeps it simple. It's might be a problem if you had lots of tasks busy, which rarely happens on a home computer. The order of the tasks in the queue determines front-to-back window order.
|
||||
|
||||
The $FG,2$FAT32$FG$ filesystem is supported to makes exchanging files with a dual booted other operating system easy and there is the simple, 64-bit TempleOS $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ filesystem. The $LK,"RedSea",A="FI:::/Doc/RedSea.TXT"$ has allocation bitmap for clusters and all files are stored contiguously. You can't grow files.
|
||||
|
||||
@@ -47,23 +47,21 @@ TempleOS is geared toward reading and writing whole files. Since whole files ar
|
||||
|
||||
If a file is not found, "$FG,2$.Z$FG$" is added or removed and a search is done, again. 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.
|
||||
|
||||
It's fun being able to turn-off interrupts with the asm instruction, CLI, $FG$and on with STI. $FG,2$TempleOS$FG$ runs all programs in kernel mode, ring 0, so no instructions are off-limits. Turning-off and on preemption with $LK,"Preempt",A="MN:Preempt"$() is a less drastic measure that is usually sufficient. A newly $LK,"Spawn",A="MN:Spawn"$()ed task begins with preemption off.
|
||||
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.
|
||||
|
||||
The graphic resolution is poor, $FG,2$640x480 16 color$FG$, but God said that and 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.
|
||||
TempleOS 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 TempleOS 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,"TempleOS MultiCore",A="FI:::/Doc/MultiCore.TXT"$.
|
||||
|
||||
TempleOS is for hobbyist programmers on single user (at a time) home computers, not mainframes or servers, but it is preemptive multitasking. 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 TempleOS 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,"TempleOS MultiCore",A="FI:::/Doc/MultiCore.TXT"$.
|
||||
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 TempleOS' memory.) It is approximately the case that $FG,2$TempleOS$FG$ is multi-threading, single-processing.
|
||||
|
||||
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 TempleOS' memory.)
|
||||
In $FG,2$TempleOS$FG$, $LK,"Adam Task",A="FF:::/Doc/Glossary.TXT,Adam 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$Adam$FG$. His heap is like kernel memory in other operating systems. Since $FG,2$Adam$FG$ is immortal, it's safe to alloc objects, not tied to any mortal task, from $FG,2$Adam$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$Adam$FG$ executes $LK,"::/StartOS.CPP"$ at boot time.
|
||||
|
||||
In TempleOS, $FG,2$Adam$FG$ refers to a task that is 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$Adam$FG$. His heap is like kernel memory in other operating systems. Since $FG,2$Adam$FG$ is immortal, it's safe to alloc objects, not tied to any mortal task, from $FG,2$Adam$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$Adam$FG$ executes $LK,"::/Adam.CPP"$ 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.TXT,/Home Files"$. You can make your own distro that includes everything and is a bootable live CD with $LK,"::/Misc/MakeDistro.CPP"$.
|
||||
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.TXT,/Home Files"$. You can make your own distro that includes everything and is a bootable live CD with $LK,"::/Misc/DoDistro.CPP"$.
|
||||
|
||||
Typically, your usage pattern through the day will be repeatedly left or right clicking on filenames in a cmd line $LK,"Dir",A="MN:Dir"$() listing. You left-click files to edit them and right-click to $FG,2$#include$FG$ them. To begin a project, type $LK,"Ed",A="MN:Ed"$("filename");, supplying a filename. You can also run programs with $FG,2$<F5>$FG$ when in the editor. $FG,2$<ESC>$FG$ to save and exit the file. You'll need to do a new $LK,"Dir",A="MN:Dir"$() cmd, periodically, so make a macro on your PersonalMenu. Access your PersonalMenu by pressing $FG,2$<CTRL-m>$FG$, cursoring until you are on top of it and pressing $FG,2$<SPACE>$FG$.
|
||||
|
||||
$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 nongraphic widget.
|
||||
$FG,2$<CTRL-r>$FG$ inserts a graphic resource or edits the graphic under the cursor.
|
||||
$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-b>$FG$ toggles window border.
|
||||
|
||||
@@ -72,11 +70,11 @@ $FG,2$<ALT-SHIFT-a>$FG$ closes AutoComplete.
|
||||
$FG,2$<ALT-a>$FG$ brings back AutoComplete.
|
||||
$FG,2$<ALT-v>$FG$ vertically tiles windows.
|
||||
$FG,2$<ALT-h>$FG$ horizontally tiles windows.
|
||||
The $FG,2$ALT$FG$ keys are defined in $LK,"::/Home/AdamKeyPlugIns.CPP"$. You can customize them.
|
||||
The $FG,2$ALT$FG$ keys are defined in $LK,"::/Home/HomeKeyPlugIns.CPP"$. You can customize them.
|
||||
|
||||
$FG,2$<CTRL-ALT-e>$FG$ creates a new terminal window. $FG,2$<CTRL-ALT-x>$FG$ kills a window. You'll do these periodically.
|
||||
|
||||
$LK,"Find",A="MN:Find"$() is your best friend. There's a wrapper function called $LK,"F",A="MN:F"$() in your $FG,2$/Home/AdamWrappers.CPP.Z$FG$ file. Feel free to make wrapper functions for functions you use often and customize the args. By the way, $LK,"Find",A="MN:Find"$() or $LK,"R",A="MN:R"$() can be used to replace strings across multiple files. You can access $LK,"Find",A="MN:Find"$() using $FG,2$<CTRL-SHIFT-f>$FG$.
|
||||
$LK,"Find",A="MN:Find"$() is your best friend. There's a wrapper function called $LK,"F",A="MN:F"$() in your $FG,2$/Home/HomeWrappers.CPP.Z$FG$ file. Feel free to make wrapper functions for functions you use often and customize the args. By the way, $LK,"Find",A="MN:Find"$() or $LK,"R",A="MN:R"$() can be used to replace strings across multiple files. You can access $LK,"Find",A="MN:Find"$() using $FG,2$<CTRL-SHIFT-f>$FG$.
|
||||
|
||||
As you browse code, use the $FG,2$AutoComplete$FG$ window to look-up functions, etc. $FG,2$<CTRL-SHIFT-F1>$FG$ (or whatever number) to follow a sym to it's source. You can browse deeper and deeper. You go back with $FG,2$<SHIFT-ESC>$FG$.
|
||||
|
||||
|
||||
Reference in new issue
Block a user