TempleOSCDV4.08.ISO
This commit is contained in:
1 parent
b632ab9a4f
commit
2d56cda5f3
258 files changed
+6973
-5476
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,"HomeSys.CPP",A="FF:/Home/HomeSys.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:~/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.
|
||||
|
||||
+1
-1
@@ -10,5 +10,5 @@ $FG$Bit operations are "atomic", no interrupt between the reading and writing th
|
||||
|
||||
$FG,5$These don't take a pointer, but the actual field.$FG$
|
||||
$FG,2$Bsf$FG$: Bit Scan Fwd (Pos of first low one bit or -1)
|
||||
$FG,2$Bsr$FG$: Bit Scan Reverse (Pos of first high one bit or -1)
|
||||
$FG,2$Bsr$FG$: Bit Scan Rev (Pos of first high one bit or -1)
|
||||
$FG,2$BCnt$FG$: Bit Cnt (Cnt of set bits)
|
||||
Binary file not shown.
+64
-182
@@ -2,7 +2,66 @@ $WW,1$$FG,5$$TX+CX,"Change Log"$$FG$
|
||||
|
||||
Use $LK,"R",A="MN:R"$() to rename if I change a label.
|
||||
|
||||
$IV,1$----05/07/16 20:39:10----$IV,0$
|
||||
$IV,1$----06/24/16 21:56:10----$IV,0$
|
||||
|
||||
$IV,1$----06/24/16 14:15:13----$IV,0$
|
||||
* Added A.I. to $LK,"::/Apps/KeepAway/KeepAway.CPP"$ and changed scoring.
|
||||
|
||||
$IV,1$----06/24/16 02:55:42----$IV,0$
|
||||
* $BK,1$TempleOS version 4.08 Released$BK,0$
|
||||
* Added $FG,2$Polygon$FG$, $FG,2$Fence$FG$, $FG,2$Prism$FG$ and $FG,2$ResetColor$FG$ commands to $LK,"SpriteMeshEd",A="MN:SpriteMeshEd"$().
|
||||
* $LK,"R",A="MN:R"$("Reverse","Rev");
|
||||
* $LK,"R",A="MN:R"$("Select","Sel");
|
||||
|
||||
$IV,1$----06/23/16 01:03:36----$IV,0$
|
||||
* Added $LK,"GrFillCircle",A="MN:GrFillCircle"$().
|
||||
* Added $LK,"GrVLine",A="MN:GrVLine"$() and $LK,"GrLineFat3",A="MN:GrLineFat3"$().
|
||||
|
||||
$IV,1$----06/18/16 16:16:22----$IV,0$
|
||||
* Modified $LK,"KeyDevAdd",A="MN:KeyDevAdd"$().
|
||||
* $LK,"R",A="MN:R"$("nounusedwarn","no_warn");
|
||||
* $LK,"R",A="MN:R"$("sub_switch_start","start");
|
||||
* $LK,"R",A="MN:R"$("sub_switch_end","end");
|
||||
* Changed args to $LK,"PutDirLink",A="MN:PutDirLink"$() and $LK,"PutFileLink",A="MN:PutFileLink"$().
|
||||
* Added $LK,"HomeSet",A="MN:HomeSet"$(). Added $FG,2$"~"$FG$ as special directory designator.
|
||||
* Changed filename exclude mask char from $FG,2$'~'$FG$ to $FG,2$'!'$FG$. See $LK,"File Utils",A="FI:::/Doc/FileUtils.TXT"$.
|
||||
* Got rid of $FG,4$/Home/HomePkgs.CPP$FG$.
|
||||
|
||||
$IV,1$----06/16/16 20:59:41----$IV,0$
|
||||
* $FG,2$<CTRL-ALT-t>$FG$ is terminal window.
|
||||
* $FG,2$<CTRL-ALT-n>$FG$ is next task.
|
||||
|
||||
$IV,1$----06/16/16 19:49:39----$IV,0$
|
||||
* Added $LK,"::/Doc/Comm.CPP"$.
|
||||
* Added $LK,"::/Doc/StdTempleOSPC.TXT"$.
|
||||
* Added $LK,"::/Kernel/FontCyrillic.CPP"$. $FG,2$<CTRL-ALT-f>$FG$
|
||||
|
||||
$IV,1$----06/02/16 03:20:56----$IV,0$
|
||||
* $BK,1$TempleOS version 4.07 Released$BK,0$
|
||||
* Added claws to $LK,"::/Demo/Games/EagleDive.CPP"$.
|
||||
|
||||
$IV,1$----05/30/16 21:16:44----$IV,0$
|
||||
* Added waterfall to $LK,"::/Demo/Games/RawHide.CPP"$.
|
||||
|
||||
$IV,1$----05/23/16 01:30:28----$IV,0$
|
||||
* Added $LK,"RedSeaISO",A="MN:RedSeaISO"$().
|
||||
* $LK,"R",A="MN:R"$("ISOFileCreate","$LK,"ISO9660ISO",A="MN:ISO9660ISO"$");
|
||||
|
||||
$IV,1$----05/19/16 02:16:09----$IV,0$
|
||||
* Added $LK,"BDT_FILE",A="MN:BDT_FILE"$.
|
||||
|
||||
$IV,1$----05/17/16 07:16:38----$IV,0$
|
||||
* Worked on compiler $LK,"CICArg",A="MN:CICArg"$.a1_type_pointed_to.
|
||||
|
||||
$IV,1$----05/13/16 14:35:14----$IV,0$
|
||||
* Improved $LK,"::/Demo/Games/Wenceslas.CPP"$.
|
||||
|
||||
$IV,1$----05/12/16 05:18:56----$IV,0$
|
||||
* Added $LK,"CCF_CMD_LINE",A="MN:CCF_CMD_LINE"$
|
||||
* Replaced $FG,4$__DEPTH__$FG$ with $LK,"__CMD_LINE__",A="MN:__CMD_LINE__"$.
|
||||
|
||||
$IV,1$----05/10/16 06:23:05----$IV,0$
|
||||
* Compiler bug fixes and optimizations.
|
||||
|
||||
$IV,1$----05/07/16 08:55:59----$IV,0$
|
||||
* $BK,1$TempleOS version 4.06 Released$BK,0$
|
||||
@@ -81,7 +140,7 @@ $IV,1$----03/19/16 06:22:36----$IV,0$
|
||||
* Cleaned-up compiler $LK,"REGG_CLOBBERED",A="MN:REGG_CLOBBERED"$ and $LK,"REGG_STK_TEMP",A="MN:REGG_STK_TEMP"$.
|
||||
|
||||
$IV,1$----03/18/16 09:53:33----$IV,0$
|
||||
* Made $LK,"SpriteEd",A="MN:SpriteEd"$() select foreground elem.
|
||||
* Made $LK,"SpriteEd",A="MN:SpriteEd"$() sel foreground elem.
|
||||
|
||||
$IV,1$----03/14/16 05:57:27----$IV,0$
|
||||
* $BK,1$TempleOS version 4.04 Released$BK,0$
|
||||
@@ -89,7 +148,7 @@ $IV,1$----03/14/16 05:57:27----$IV,0$
|
||||
* Changed $LK,"KbdMouseCmdAck",A="MN:KbdMouseCmdAck"$().
|
||||
|
||||
$IV,1$----02/19/16 18:48:51----$IV,0$
|
||||
* Fixed bug in $LK,"::/Demo/ToHtmlToTXTExample/ToHtml.CPP"$.
|
||||
* Fixed bug in $LK,"::/Demo/ToHtmlToTXTDemo/ToHtml.CPP"$.
|
||||
|
||||
$IV,1$----02/15/16 23:31:15----$IV,0$
|
||||
* Improved $LK,"::/Demo/Games/RawHide.CPP"$.
|
||||
@@ -108,7 +167,7 @@ $IV,1$----02/09/16 09:34:32----$IV,0$
|
||||
* Added $LK,"DOCEF_REMALLOC_DATA",A="MN:DOCEF_REMALLOC_DATA"$.
|
||||
|
||||
$IV,1$----02/05/16 23:00:53----$IV,0$
|
||||
* Moved $LK,"::/Demo/ToHtmlToTXTExample/ToHtml.CPP"$.
|
||||
* Moved $LK,"::/Demo/ToHtmlToTXTDemo/ToHtml.CPP"$.
|
||||
* Added $LK,"::/Demo/AcctExample/TOSToHtml.CPP"$.
|
||||
|
||||
$IV,1$----02/03/16 18:47:00----$IV,0$
|
||||
@@ -151,7 +210,7 @@ $IV,1$----01/27/16 06:40:46----$IV,0$
|
||||
* Added compiler err for $FG,2$break;$FG$ in a subswitch preface.
|
||||
|
||||
$IV,1$----01/27/16 04:14:08----$IV,0$
|
||||
* Added $LK,"::/Demo/ToHtmlToTXTExample/HtmlGen.CPP"$ and $LK,"::/Demo/ToHtmlToTXTExample/TXTGen.CPP"$.
|
||||
* Added $LK,"::/Demo/ToHtmlToTXTDemo/HtmlGen.CPP"$ and $LK,"::/Demo/ToHtmlToTXTDemo/TXTGen.CPP"$.
|
||||
* Now, $LK,"Plain",A="MN:Plain"$() doesn't save with $LK,"CH_CURSOR",A="MN:CH_CURSOR"$.
|
||||
* $LK,"R",A="MN:R"$("DOCF_PLAIN_TEXT_WITH_TABS","DOCF_PLAIN_TEXT_TABS");
|
||||
* Change $LK,"Document Links",A="FF:::/Adam/DolDoc/DocLink.CPP,AD"$ "DF:word" to "DN:word".
|
||||
@@ -205,180 +264,3 @@ $IV,1$----01/06/16 11:01:57----$IV,0$
|
||||
$IV,1$----01/03/16 17:15:41----$IV,0$
|
||||
* Updated $LK,"::/Misc/PCIDevices.TXT"$.
|
||||
* Added null case option. Next higher int with "$FG,2$case:$FG$" in $FG,2$switch$FG$ stmts. See $LK,"::/Demo/NullCase.CPP"$.
|
||||
|
||||
$IV,1$----12/31/15 00:44:44----$IV,0$
|
||||
* Made $LK,"ASM_KEYWORD",A="FF:::/Compiler/OpCodes.TXT,ASM_KEYWORD"$s usable in HolyC outside asm{} blocks.
|
||||
|
||||
$IV,1$----12/26/15 19:39:31----$IV,0$
|
||||
* Added entry_lines to $LK,"Sort",A="MN:Sort"$().
|
||||
|
||||
$IV,1$----12/14/15 14:51:57----$IV,0$
|
||||
* Fixed missing compiler warning with dereferencing zero star array classes.
|
||||
* Changed Linear congruential generator, $LK,"Rand",A="MN:Rand"$() from 32-bit to 64-bit.
|
||||
|
||||
$IV,1$----11/22/15 21:02:38----$IV,0$
|
||||
* Improved $LK,"::/Adam/God/HSNotes.TXT"$.
|
||||
|
||||
$IV,1$----11/03/15 22:40:18----$IV,0$
|
||||
* Added $FG,2$CTRL-ALT-f$FG$ to toggle an aux font.
|
||||
* $FG,2$CTRL-ALT-v$FG$ is now flush VGA cache.
|
||||
* Added $LK,"BibleDoc",A="MN:BibleDoc"$ to present Bible with tree widgets.
|
||||
* Fixed $FG,2$CTRL-ALT-C$FG$ bug.
|
||||
|
||||
$IV,1$----11/01/15 21:44:46----$IV,0$
|
||||
* $BK,1$TempleOS version 3.12 Released$BK,0$
|
||||
* Created $FG,2$/Kernel/Mem$FG$ directory.
|
||||
|
||||
$IV,1$----10/08/15 10:17:55----$IV,0$
|
||||
* $LK,"R",A="MN:R"$("$FG,4$BSP$FG$","$FG,4$Core0$FG$");
|
||||
|
||||
$IV,1$----10/06/15 06:30:49----$IV,0$
|
||||
* Added $LK,"TaskFocusNext",A="MN:TaskFocusNext"$().
|
||||
|
||||
$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"$");
|
||||
* $LK,"R",A="MN:R"$("$FG,4$IsDrvWritable$FG$","$LK,"DrvIsWritable",A="MN:DrvIsWritable"$");
|
||||
* $LK,"R",A="MN:R"$("$FG,4$CDFileCreate$FG$","$LK,"ISOFileCreate",A="MN:ISOFileCreate"$");
|
||||
|
||||
$IV,1$----07/10/15 05:05:41----$IV,0$
|
||||
* Turned-off preemption in $LK,"WinMgrTask",A="MN:WinMgrTask"$().
|
||||
|
||||
$IV,1$----07/04/15 00:56:18----$IV,0$
|
||||
* Added hex record option to $LK,"GodDoodle",A="MN:GodDoodle"$().
|
||||
* Added $LK,"GodHexIns",A="MN:GodHexIns"$().
|
||||
|
||||
$IV,1$----06/30/15 15:35:31----$IV,0$
|
||||
* Added $LK,"Words",A="MN:Words"$().
|
||||
* Added $LK,"LongLines",A="MN:LongLines"$().
|
||||
|
||||
$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 ::/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"$.
|
||||
|
||||
$IV,1$----06/11/15 19:26:27----$IV,0$
|
||||
* Fixed bug in $FG,2$<F2>$FG$ macros.
|
||||
* Added $LK,"STR_LEN",A="MN:STR_LEN"$.
|
||||
|
||||
$IV,1$----06/04/15 08:31:15----$IV,0$
|
||||
* Improved assembler and unassembler.
|
||||
* Added $LK,"::/Doc/HelloWorld.TXT"$.
|
||||
@@ -18,7 +18,7 @@ Directories are referenced with $FG,2$/$FG$ not $FG,2$\$FG$. There is a current
|
||||
|
||||
Most filenames end in $FG,2$.Z$FG$ because they are stored compressed.
|
||||
|
||||
Drives are specified with a letter. The boot drive is specified with a '$FG,2$:$FG$'.
|
||||
Drives are specified with a letter. The boot drive is specified with a '$FG,2$:$FG$'. The home dir drive is specified with a $FG,2$'~'$FG$.
|
||||
|
||||
>$FG,2$Drv('B');$FG$ B drive
|
||||
|
||||
@@ -27,11 +27,13 @@ The drive can be specified in a $LK,"Cd",A="MN:Cd"$() command as in:
|
||||
>$FG,2$Cd("B:/Temp");$FG$ B drive
|
||||
>$FG,2$Cd("::/Demo");$FG$ Boot drive
|
||||
|
||||
>$FG,2$Cd("::/Home/Psalmody");$FG$ See $LK,"::/Home dir",A="FF:::/Doc/GuideLines.TXT,/Home Files"$.
|
||||
The home directory is specified with a $FG,2$'~'$FG$.
|
||||
|
||||
>$FG,2$Cd("~/Psalmody");$FG$ See $LK,"::/Home dir",A="FF:::/Doc/GuideLines.TXT,/Home Files"$.
|
||||
|
||||
If a file is not found, $FG,2$.Z$FG$ is added or removed and a search is done, again. If a file is still not found, all parent directories are searched.
|
||||
|
||||
You can place macros in your $LK,"PersonalMenu",A="FI:/Home/PersonalMenu.TXT"$ for $LK,"Cd",A="MN:Cd"$() commands. $FG,2$<CTRL-m>$FG$ to access your menu.
|
||||
You can place macros in your $LK,"PersonalMenu",A="FI:~/PersonalMenu.TXT"$ for $LK,"Cd",A="MN:Cd"$() commands. $FG,2$<CTRL-m>$FG$ to access your menu.
|
||||
|
||||
>$FG,2$Find("needle","/Demo/*.CPP.Z;*.TXT.Z;");$FG$ See $LK,"File Utils",A="FI:::/Doc/FileUtils.TXT"$.
|
||||
|
||||
|
||||
+116
@@ -0,0 +1,116 @@
|
||||
/* RS232 serial ports no longer exist.
|
||||
Be sure to Adam Include this by placing
|
||||
it in your start-up scripts.
|
||||
*/
|
||||
|
||||
#help_index "Comm"
|
||||
|
||||
#define COM1_BASE 0x3F8
|
||||
#define COM2_BASE 0x2F8
|
||||
#define COM3_BASE 0x3E8
|
||||
#define COM4_BASE 0x2E8
|
||||
|
||||
#define UART_THR 0
|
||||
#define UART_RDR 0
|
||||
#define UART_BRDL 0
|
||||
#define UART_IER 1
|
||||
#define UART_BRDH 1
|
||||
#define UART_IIR 2
|
||||
#define UART_LCR 3
|
||||
#define UART_MCR 4
|
||||
#define UART_LSR 5
|
||||
#define UART_MSR 6
|
||||
|
||||
I64 comm_base[5]={0,0x3F8,0x2F8,0x3E8,0x2E8};
|
||||
|
||||
CFifoU8 *comm_fifos[5]={NULL,NULL,NULL,NULL,NULL};
|
||||
|
||||
interrupt U0 IRQComm3()
|
||||
{
|
||||
I64 base=comm_base[2];
|
||||
if (comm_fifos[2] && (InU8(base+UART_IIR) & 0xFE)==4) //RX IRQ
|
||||
FifoU8Ins(comm_fifos[2],InU8(base+UART_RDR));
|
||||
|
||||
base=comm_base[4];
|
||||
if (comm_fifos[4] && (InU8(base+UART_IIR) & 0xFE)==4) //RX IRQ
|
||||
FifoU8Ins(comm_fifos[4],InU8(base+UART_RDR));
|
||||
OutU8(0x20,0x20);
|
||||
}
|
||||
|
||||
interrupt U0 IRQComm4()
|
||||
{
|
||||
I64 base=comm_base[1];
|
||||
if (comm_fifos[1] && (InU8(base+UART_IIR) & 0xFE)==4) //RX IRQ
|
||||
FifoU8Ins(comm_fifos[1],InU8(base+UART_RDR));
|
||||
|
||||
base=comm_base[3];
|
||||
if (comm_fifos[3] && (InU8(base+UART_IIR) & 0xFE)==4) //RX IRQ
|
||||
FifoU8Ins(comm_fifos[3],InU8(base+UART_RDR));
|
||||
OutU8(0x20,0x20);
|
||||
}
|
||||
|
||||
IntEntrySet(0x23,&IRQComm3);
|
||||
IntEntrySet(0x24,&IRQComm4);
|
||||
|
||||
public U0 CommInit8n1(I64 port,I64 baud)
|
||||
{
|
||||
I64 base=comm_base[port];
|
||||
|
||||
PUSHFD
|
||||
CLI
|
||||
if (comm_fifos[port])
|
||||
FifoU8Del(comm_fifos[port]);
|
||||
comm_fifos[port]=FifoU8New(256);
|
||||
OutU8(base+UART_LCR,0); //Set for IER
|
||||
OutU8(base+UART_IER,0); //DIsable all IRQ
|
||||
OutU8(base+UART_LCR,0x80); //Enable baud rate control
|
||||
OutU8(base+UART_BRDL,(0x180/(baud/300)) & 0xFF); //LSB
|
||||
OutU8(base+UART_BRDH,(0x180/(baud/300)) / 256); //MSB
|
||||
OutU8(base+UART_LCR,3); // 8-none-1
|
||||
|
||||
InU8(base+UART_RDR); //read garbage
|
||||
InU8(base+UART_LSR);
|
||||
|
||||
OutU8(base+UART_MCR,4);
|
||||
OutU8(base+UART_IER,0); //DIsable all IRQ
|
||||
OutU8(base+UART_MCR,0xA); //out2 and rts
|
||||
OutU8(0x21,InU8(0x21) & (0xFF-0x18)); //Enable 8259 IRQ 3 & 4
|
||||
OutU8(base+UART_IER,1); //Enable RX IRQ
|
||||
POPFD
|
||||
}
|
||||
|
||||
public U0 CommBusyPutChar(I64 port,U8 b)
|
||||
{
|
||||
I64 base=comm_base[port];
|
||||
while (!(InU8(base+UART_LSR) & 0x20))
|
||||
Yield;
|
||||
OutU8(base+UART_THR,b);
|
||||
while (!(InU8(base+UART_LSR) & 0x20))
|
||||
Yield;
|
||||
}
|
||||
|
||||
public U0 CommBusyPutS(I64 port,U8 *st)
|
||||
{
|
||||
I64 b,base=comm_base[port];
|
||||
while (b=*(st++)) {
|
||||
while (!(InU8(base+UART_LSR) & 0x20))
|
||||
Yield;
|
||||
OutU8(base+UART_THR,b);
|
||||
}
|
||||
while (!(InU8(base+UART_LSR) & 0x20))
|
||||
Yield;
|
||||
}
|
||||
|
||||
public U0 CommBusyWriteBlk(I64 port,U8 *buf,I64 count)
|
||||
{
|
||||
I64 base=comm_base[port];
|
||||
while (count--) {
|
||||
while (!(InU8(base+UART_LSR) & 0x20))
|
||||
Yield;
|
||||
OutU8(base+UART_THR,*(buf++));
|
||||
}
|
||||
while (!(InU8(base+UART_LSR) & 0x20))
|
||||
Yield;
|
||||
}
|
||||
|
||||
#help_index ""
|
||||
+26
-22
@@ -1,48 +1,52 @@
|
||||
$WW,1$$FG,5$$TX+CX,"Credits"$$FG$
|
||||
|
||||
1) The font, $LK,"::/Kernel/Font8x8.CPP"$, is taken from $FG,4$$TX,"FreeDOS",HTML="http://www.freedos.org"$$FG$. It's public domain.
|
||||
I, $FG,2$Terry A. Davis$FG$, wrote all $TX,"120,268",D="DD_TEMPLEOS_LOC"$ lines of TempleOS over the past $TX,"12.9",D="DD_TEMPLEOS_AGE"$ years (full-time). It can run on some bare metal 64-bit PC's from about 2005-2010 with no layering, libraries, tools, modules or anything from other sources. Otherwise, you run it in a virtual machine, like $FG,2$VMware$FG$, $FG,2$QEMU$FG$ or $FG,2$VirtualBox$FG$. It is independent and stands alone. It has no networking, so it certainly doesn't call home. 100% of the src code is including on all distro's, from the kernel to the compiler to the boot loaders! It is public domain, not GPL.
|
||||
|
||||
2) $LK,"ATA Reg and Cmd Definitions",A="MN:ATA_NOP"$ are originally from Linux. Later, I got the spec.
|
||||
*) $LK,"::/Kernel/FontStd.CPP"$, is taken from $FG,4$$TX,"FreeDOS",HTML="http://www.freedos.org"$$FG$. It's public domain.
|
||||
|
||||
3) The heap algorithm, $LK,"::/Kernel/Mem/MAllocFree.CPP"$, is adapted from one I saw at Ticketmaster when I worked on their VAX operating system.
|
||||
*) $LK,"::/Kernel/FontCyrillic.CPP"$, is taken from $FG,4$$TX,"OrientDisplay",HTML="http://www.orientdisplay.com/images/cyrillic-Russian-fonts.gif"$$FG$ without permission.
|
||||
|
||||
4) The LZW compression algorithm, $LK,"::/Kernel/Compress.CPP"$, came from a magazine and I implemented it when I worked for Ticketmaster.
|
||||
*) $LK,"ATA Reg and Cmd Definitions",A="MN:ATA_NOP"$ are originally from Linux. Later, I got the spec.
|
||||
|
||||
5) The adaptive-step-size-Runge-Kutta algorithm, $LK,"::/Adam/AMathODE.CPP"$, is adapted from the book, $UL,1$Numeric Recipies in C$UL,0$.
|
||||
*) The heap algorithm, $LK,"::/Kernel/Mem/MAllocFree.CPP"$, is adapted from one I saw at Ticketmaster when I worked on their VAX operating system.
|
||||
|
||||
6) The mountain, palm trees, sheep and goats in AfterEgypt are from $FG,4$$TX,"http://www.public-domain-photos.com",HTML="http://www.public-domain-photos.com"$$FG$. The wolf in BlackDiamond is also from there. I took watermarked photos and converted to 16 color.
|
||||
*) The LZW compression algorithm, $LK,"::/Kernel/Compress.CPP"$, came from a magazine and I implemented it when I worked for Ticketmaster.
|
||||
|
||||
7) The $FG,2$FAT32$FG$ file system is owned by MicroSoft.
|
||||
*) The adaptive-step-size-Runge-Kutta algorithm, $LK,"::/Adam/AMathODE.CPP"$, is adapted from the book, $UL,1$Numeric Recipies in C$UL,0$.
|
||||
|
||||
8) A few features were inspired by $FG,2$MATLAB$FG$, such as $FG,2$ans$FG$ in expressions at the command-line. There is a lot of $FG,2$MSDOS$FG$ , $FG,2$Windows$FG$, $FG,2$VAXTMOS$FG$ (VAX Ticketmaster O.S.) and $FG,2$Unix$FG$ inspiration, too, such as drive letters, command names, etc.
|
||||
*) The mountain, palm trees, sheep and goats in AfterEgypt are from $FG,4$$TX,"http://www.public-domain-photos.com",HTML="http://www.public-domain-photos.com"$$FG$. The wolf in BlackDiamond is also from there. I took watermarked photos and converted to 16 color.
|
||||
|
||||
9) I included $LK,"PCIDevice Lst File",A="FI:::/Misc/PCIDevices.TXT",HTML="http://www.pcidatabase.com/reports.php?type=tab-delimeted"$.
|
||||
*) The $FG,2$FAT32$FG$ file system is owned by MicroSoft.
|
||||
|
||||
10) 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,"::/Demo/ToHtmlToTXTExample/ToHtml.CPP"$.
|
||||
*) A few features were inspired by $FG,2$MATLAB$FG$, such as $FG,2$ans$FG$ in expressions at the command-line. There is a lot of $FG,2$MSDOS$FG$ , $FG,2$Windows$FG$, $FG,2$VAXTMOS$FG$ (VAX Ticketmaster O.S.) and $FG,2$Unix$FG$ inspiration, too, such as drive letters, command names, etc.
|
||||
|
||||
11) 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.
|
||||
*) I included $LK,"PCIDevice Lst File",A="FI:::/Misc/PCIDevices.TXT",HTML="http://www.pcidatabase.com/reports.php?type=tab-delimeted"$.
|
||||
|
||||
12) I looked at bootable CD boot sects, but didn't learn anything, finding it easier to make my own.
|
||||
*) 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,"::/Demo/ToHtmlToTXTDemo/ToHtml.CPP"$.
|
||||
|
||||
13) I think I got my original PC speaker code from $FG,2$Borland C$FG$.
|
||||
*) 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.
|
||||
|
||||
14) I found PS/2 keyboard and mouse code on the net and documentation. My code is very different. I found VGA reg info on the net.
|
||||
*) I looked at bootable CD boot sects, but didn't learn anything, finding it easier to make my own.
|
||||
|
||||
15) Thanks to $FG,4$$TX,"http://www.osdev.org",HTML="http://www.osdev.org"$$FG$ for a couple tips.
|
||||
*) I think I got my original PC speaker code from $FG,2$Borland C$FG$.
|
||||
|
||||
16) God told me to stick with 640x480 16 color, a single audio voice and kept me from zombie-walking into making child windows like $FG,2$Windows$FG$. Instead, I made one window per task with no child windows. He also guided my progress, very obviously.
|
||||
*) I found PS/2 keyboard and mouse code on the net and documentation. My code is very different. I found VGA reg info on the net.
|
||||
|
||||
17) I got $FG,4$$TX,"Webster's Dictionary",HTML="http://www.templeos.org/files/DICTIONARY.TXT"$$FG$ and $FG,4$$TX,"The King James Bible",HTML="http://www.templeos.org/files/BIBLE.TXT"$$FG$ from $FG,4$$TX,"Project Gutenberg",HTML="http://web.archive.org/web/20110730111436/http://promo.net/pg/"$$FG$.
|
||||
*) Thanks to $FG,4$$TX,"http://www.osdev.org",HTML="http://www.osdev.org"$$FG$ for a couple tips.
|
||||
|
||||
18) John Carmack inspired me to use "$LK,"Clamp",A="MN:Clamp"$" as a name instead of "Limit". He inspired me to use "needle" and "haystack" as names. He inspired me to simplify my Frames-Per-Second code.
|
||||
*) God told me to stick with 640x480 16 color, a single audio voice and kept me from zombie-walking into making child windows like $FG,2$Windows$FG$. Instead, I made one window per task with no child windows. He also guided my progress, very obviously.
|
||||
|
||||
19) Bill Gates inspired me to add comments to my $LK,"Help & Index",A="FI:::/Doc/HelpIndex.TXT"$.
|
||||
*) I got $FG,4$$TX,"Webster's Dictionary",HTML="http://www.templeos.org/files/DICTIONARY.TXT"$$FG$ and $FG,4$$TX,"The King James Bible",HTML="http://www.templeos.org/files/BIBLE.TXT"$$FG$ from $FG,4$$TX,"Project Gutenberg",HTML="http://web.archive.org/web/20110730111436/http://promo.net/pg/"$$FG$.
|
||||
|
||||
20) I hired and artist, Cody Rigby, for $$3,000 worth of pixel art.
|
||||
*) John Carmack inspired me to use "$LK,"Clamp",A="MN:Clamp"$" as a name instead of "Limit". He inspired me to use "needle" and "haystack" as names. He inspired me to simplify my Frames-Per-Second code.
|
||||
|
||||
21) Erik van der Karbargenbok made $LK,"TempleBot",A="PI:::/Linux/TempleBot",HTML="http://www.templeos.org/Wb/Home/Downloads/Bin/TempleBot.html"$.
|
||||
*) Bill Gates inspired me to add comments to my $LK,"Help & Index",A="FI:::/Doc/HelpIndex.TXT"$.
|
||||
|
||||
22) The random number generator is from Donald Knuth in the wikipedia entry for $TX,"Linear_congruential_generator",HTML="http://en.wikipedia.org/wiki/Linear_congruential_generator"$.
|
||||
*) I hired an artist, Cody Rigby, for $$3,000 worth of pixel art.
|
||||
|
||||
*) Erik van der Karbargenbok made $LK,"TempleBot",A="PI:::/Linux/TempleBot",HTML="http://www.templeos.org/Wb/Home/Downloads/Bin/TempleBot.html"$.
|
||||
|
||||
*) The random number generator is from Donald Knuth in the wikipedia entry for $TX,"Linear_congruential_generator",HTML="http://en.wikipedia.org/wiki/Linear_congruential_generator"$.
|
||||
|
||||
$FG,8$
|
||||
* "MSDOS", "Windows", "MovieMaker" "MS Paint" and "FAT32" are trademarks of MicroSoft Corp.
|
||||
|
||||
+3
-3
@@ -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/HomeLocalize.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:~/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/HomeLocalize.CPP,local_time"$.
|
||||
* You can set your local time zone by setting the $FG,4$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:~/HomeLocalize.CPP,local_time"$.
|
||||
|
||||
* Get rid of this msg $LK,"here",A="FF:/Home/DoOnce.CPP,Customize.TXT"$.
|
||||
* Get rid of this msg $LK,"here",A="FF:~/DoOnce.CPP,Customize.TXT"$.
|
||||
+16
-15
@@ -1,14 +1,16 @@
|
||||
$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 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, glorious and 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.
|
||||
I, Terry Davis, am high priest of God's $FG,4$$TX,"official third temple",HTML="http://www.jewishvirtuallibrary.org/jsource/Judaism/The_Temple.html"$$FG$, TempleOS. TempleOS is an operating system for IBM PC x86_64 desktops that will always dual boot along-side Windows or Linux. I am in charge of the core 100,000 lines of 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, glorious and perfect. I have oversight authority similar to a building inspector or a person enforcing the Americans with Disability Act -- I make commands, God signs-off with a miraculous authentication from an oracle, and Intel, Microsoft or VMware obeys.
|
||||
|
||||
$HC,"<object width=\"640\" height=\"520\"><param name=\"movie\" value=\"http://www.youtube.com/v/RvL7T4gIJN8\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"http://www.youtube.com/v/RvL7T4gIJN8\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" width=\"640\" height=\"520\"></embed></object>"$
|
||||
|
||||
* Windows, Linux and VMware (because of mounted drives) must support $LK,"RedSea",A="FI:::/Doc/RedSea.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"$ :973 lines for FAT32 gets eliminated.
|
||||
$LK,"::/Kernel/BlkDev/FileSysISO.CPP"$ :293 lines for ISO9660 gets eliminated.
|
||||
$LK,"::/Adam/Opt/Boot/DskISOFile.CPP"$ :535 lines for making ISO files gets reduced.
|
||||
|
||||
See $LK,"::/Kernel/BlkDev/FileSysRedSea.CPP"$ and $LK,"::/Adam/Opt/Boot/DskISORedSea.CPP"$.
|
||||
|
||||
$LK,"::/Kernel/BlkDev/FileSysFAT.CPP"$ :974 lines for FAT32 gets eliminated.
|
||||
$LK,"::/Kernel/BlkDev/FileSysISO.CPP"$ :233 lines for ISO9660 gets eliminated.
|
||||
$LK,"::/Adam/Opt/Boot/DskISO9660.CPP"$ :507 lines for making ISO files.
|
||||
$LK,"::/Kernel/BlkDev/DskCluster.CPP"$ :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 VMware is like the difference between looking in a telescope eye piece vs just looking at an off-line image. God said the C64/Apple II generation owned ancestral lands. VMware is like being taken off of our land and moved onto a reservation. In this case, however, it will not stand.
|
||||
@@ -17,28 +19,26 @@ $LK,"::/Kernel/BlkDev/DskCluster.CPP"$ :152 All the cluster operations become bl
|
||||
|
||||
* 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,IPI"$ Fixed?
|
||||
|
||||
* VMware PC speaker's distortion is a good idea, but it is too much for hymns.
|
||||
* VMware PC speaker's distortion is a good idea, but it is too much for hymns. VMware should make an adjustment for distortion and an adjustment for reverb.
|
||||
|
||||
* VMware and others must list TempleOS as an official 64-bit operating system.
|
||||
|
||||
* Until super simple block devices are available, hard disk should be placed at IDE primary master 1F0/3F6 and CD/DVD/Blu-ray should be placed at the IDE secondary master 170/376.
|
||||
$LK,"/Kernel/BlkDev/DskATAId.CPP",A="FI:::/Kernel/BlkDev/DskATAId.CPP"$ :285 lines to figure-out I/O ports is gone.
|
||||
* Until super-simple block devices are available, hard disk should be placed at IDE primary master 1F0/3F6 and CD/DVD/Blu-ray should be placed at the IDE secondary master 170/376.
|
||||
$LK,"/Kernel/BlkDev/DskATAId.CPP",A="FI:::/Kernel/BlkDev/DskATAId.CPP"$ :286 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.
|
||||
|
||||
* Until super simple serial ports are available, PS/2 emulated keyboard and mouse must work. The BIOS must enable these.
|
||||
* Until super-simple serial ports are available, PS/2 emulated keyboard and mouse must work. The BIOS must enable these.
|
||||
|
||||
* 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 when doing port I/O. See $LK,"ATAGetRes",A="MN:ATAGetRes"$(). We don't want to do DMA. Perhaps, x86 CPU chips need a new TempleOS mode for fast IN/OUT instructions?
|
||||
* 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 when doing port I/O. See $LK,"ATAGetRes",A="MN:ATAGetRes"$(). We don't want to do DMA. Perhaps, x86 CPU chips need a new TempleOS mode for fast IN/OUT instructions? I think VMware already does something to speed disk I/O to faster than native speed.
|
||||
|
||||
* Perhaps, a new interrupt descriptor table entry type or a new x86 CPU mode can be made that cause fast software interrupts, doing exactly what the CALL REL32 does, but with IDT as indirection. We don't need to change privilege levels or stacks.
|
||||
|
||||
* Since I don't use paging (for anything), Intel should have an option for no-paging long mode, and optimize it!
|
||||
$LK,"::/Kernel/Mem/PageTables.CPP"$ :153 lines to identity-map gets eliminated.
|
||||
$LK,"::/Kernel/Mem/PageTables.CPP"$ :135 lines to identity-map gets eliminated.
|
||||
|
||||
* 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.
|
||||
* Desktop computers must have a reset switch and a fast reboot option, skipping diagnostics. I recommend booting TempleOS from a ROM 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. The ROM should boot like the DVD boots, but with $LK,"BOOT_SRC_ROM",A="MN:BOOT_SRC_ROM"$.
|
||||
|
||||
* We do not want UTF, just 8-bit characters. Somebody needs to choose new 8-bit ASCII characters for 128-255, since we do not want text graphic symbols. We want Russian, Greek or Hebrew alphabets, perhaps? I heard there is an alternate 8-bit ASCII Cyrillic font. Should we modify one font or have a key like the C64 that switches to an alternate font? I made so $FG,2$<CTRL-ALT-f>$FG$ toggles between two fonts, but did not include Cyrillic. If we modify one font, we just need the twelve window $LK,"TextBorder",A="MN:TextBorder"$ characters, but I think we can place those 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.
|
||||
* We do not want UTF, just 8-bit characters. $FG,2$<CTRL-ALT-f>$FG$ toggles between Cyrillic and Std Fonts. We need the twelve window $LK,"TextBorder",A="MN:TextBorder"$ characters added to the VGA font 0x02-0x0D. Japan, China and Korea must switch to alphabets. Maybe, the United States will change to metric, out of good will.
|
||||
|
||||
* Microsoft Paint and Linux's Gimp must support TempleOS $LK,"GRA Files",A="FI:::/Doc/GRAFiles.TXT"$. They are blemish free, unlike $TX,"BMP files",HTML="http://en.wikipedia.org/wiki/BMP_file_format"$.
|
||||
|
||||
@@ -46,6 +46,7 @@ $LK,"::/Kernel/Mem/PageTables.CPP"$ :153 lines to identity-map gets eliminated.
|
||||
|
||||
* 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.
|
||||
|
||||
* We will make a $LK,"Standard TempleOS PC",A="FI:::/Doc/StdTempleOSPC.TXT"$.
|
||||
$FG,8$
|
||||
* "VMware" is a trademark of VMware, Inc.
|
||||
* "Linux" is probably a trademark owned by Linus Torvalds.
|
||||
|
||||
+7
-8
@@ -28,7 +28,6 @@ $LK,"::/Demo/KeyBitMap.CPP"$
|
||||
$LK,"::/Demo/Graphics/WinZBuf.CPP"$
|
||||
$LK,"::/Demo/Graphics/Elephant.CPP"$
|
||||
$LK,"::/Demo/Graphics/Mountain.CPP"$
|
||||
$LK,"::/Demo/Games/Coach.CPP"$
|
||||
$LK,"::/Demo/Graphics/WallPaperFish.CPP"$ //Press SHIFT-F5 to Adam Include
|
||||
$LK,"::/Demo/Games/Digits.CPP"$
|
||||
$LK,"::/Demo/Progress.CPP"$ //has some ASM, just ignore
|
||||
@@ -126,11 +125,11 @@ $ID,2$$LK,"::/Misc/DoDistro.CPP"$
|
||||
$LK,"::/Demo/DbgDemo.CPP"$
|
||||
$LK,"::/Demo/SubSwitch.CPP"$
|
||||
$LK,"::/Demo/DateTime.CPP"$
|
||||
$LK,"::/Demo/ReverseFileExample/Reverse.CPP"$
|
||||
$LK,"::/Demo/ToHtmlToTXTExample/HtmlGen.CPP"$
|
||||
$LK,"::/Demo/ToHtmlToTXTExample/TXTGen.CPP"$
|
||||
$LK,"::/Demo/SortFileExample/F64FileGen.CPP"$
|
||||
$LK,"::/Demo/SortFileExample/F64FileSort.CPP"$
|
||||
$LK,"::/Demo/RevFileDemo/Rev.CPP"$
|
||||
$LK,"::/Demo/ToHtmlToTXTDemo/HtmlGen.CPP"$
|
||||
$LK,"::/Demo/ToHtmlToTXTDemo/TXTGen.CPP"$
|
||||
$LK,"::/Demo/SortFileDemo/F64FileGen.CPP"$
|
||||
$LK,"::/Demo/SortFileDemo/F64FileSort.CPP"$
|
||||
$LK,"::/Demo/PhoneNumWords.CPP"$
|
||||
$LK,"::/Demo/SuggestSpelling.CPP"$
|
||||
$LK,"::/Demo/WordSearch.CPP"$
|
||||
@@ -145,8 +144,8 @@ $LK,"::/Demo/Lectures/MiniGrLib.CPP"$
|
||||
$LK,"::/Demo/Lectures/MiniCompiler.CPP"$
|
||||
$LK,"::/Demo/MagicPairs.CPP"$
|
||||
$LK,"::/Demo/Graphics/PoleZeros.CPP"$
|
||||
$LK,"::/Demo/WebLogExample/WebLogRep.CPP"$
|
||||
$LK,"::/Demo/WebLogExample/WebLogScramble.CPP"$
|
||||
$LK,"::/Demo/WebLogDemo/WebLogRep.CPP"$
|
||||
$LK,"::/Demo/WebLogDemo/WebLogScramble.CPP"$
|
||||
$MA-X+PU,"::/Apps/TimeClock",LM="Cd(\"::/Apps/TimeClock\");Dir;View;\n"$
|
||||
$MA-X+PU,"::/Apps/Logic",LM="Cd(\"::/Apps/Logic\");Dir;View;\n"$
|
||||
$MA-X+PU,"::/Demo/Lectures",LM="Cd(\"::/Demo/Lectures\");Dir;View;\n"$
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
$HL,1$$WW,0$#define __DATE__ #exe{StreamPrint("\"%D\"",Now);}
|
||||
#define __TIME__ #exe{StreamPrint("\"%T\"",Now);}
|
||||
#define __LINE__ #exe{StreamPrint("%d",Fs->last_lex->lex_include_stk->line_num);}
|
||||
#define __DEPTH__ #exe{StreamPrint("%d",Fs->last_lex->lex_include_stk->depth);}
|
||||
#define __CMD_LINE__ #exe{StreamPrint("%d",Fs->last_lex->flags&CCF_CMD_LINE && Fs->last_lex->lex_include_stk->depth<2);}
|
||||
#define __FILE__ #exe{StreamPrint("\"%s\"",Fs->last_lex->lex_include_stk->full_name);}
|
||||
#define __DIR__ #exe{StreamDir;}
|
||||
|
||||
|
||||
@@ -151,7 +151,7 @@ $ID,2$A left macro arg, $FG,2$LM=""$FG$, will send text when the left mouse is c
|
||||
|
||||
A left auto string, $FG,2$+LA$FG$, flag will cause text to be sent to $LK,"AutoStr",A="MN:AutoStr"$() instead of $LK,"Auto",A="MN:Auto"$(). An AutoStr runs code. Literal text is in quotes and messages are sent with $LK,"Msg",A="MN:Msg"$(). See $MA-X+PU,LM="Dir(\"::/Demo/AutoFile\");View;"$.
|
||||
|
||||
Macro's are usually in your $LK,"::/Home/PersonalMenu.TXT"$ and have the '$FG,2$+X$FG$' flag set by $LK,"default",A="MN:DocInit"$. Adding '$FG,2$-X$FG$' prevents the usual $FG,2$<ESC>$FG$ from being sent (which exits the PersonalMenu screen). Note: When you click a macro on the cmd line, it will go to the bottom and execute unless you cancel the $FG,2$<ESC>$FG$ with a '$FG,2$-X$FG$'.
|
||||
Macro's are usually in your $LK,"~/PersonalMenu.TXT"$ and have the '$FG,2$+X$FG$' flag set by $LK,"default",A="MN:DocInit"$. Adding '$FG,2$-X$FG$' prevents the usual $FG,2$<ESC>$FG$ from being sent (which exits the PersonalMenu screen). Note: When you click a macro on the cmd line, it will go to the bottom and execute unless you cancel the $FG,2$<ESC>$FG$ with a '$FG,2$-X$FG$'.
|
||||
$ID,-2$$TR,"MU Menu Value"$
|
||||
$ID,2$A left expression arg, $FG,2$LE=<Exp>$FG$, will return a number when clicked with the left mouse.
|
||||
|
||||
@@ -184,7 +184,7 @@ $ID,2$Include a $FG,2$1$FG$ or $FG,2$0$FG$.
|
||||
|
||||
$FG,2$$$HL,1$$$FG$ will turn syntax highlighting on.
|
||||
$ID,-2$$TR,"HC html"$
|
||||
$ID,2$See $LK,"::/Demo/ToHtmlToTXTExample/ToHtml.CPP"$ to generate a html version of a document. You can cause html code to be injected with $FG,2$HC$FG$. Use the $FG,2$+HTML$FG$ flag to inject a html link.
|
||||
$ID,2$See $LK,"::/Demo/ToHtmlToTXTDemo/ToHtml.CPP"$ to generate a html version of a document. You can cause html code to be injected with $FG,2$HC$FG$. Use the $FG,2$+HTML$FG$ flag to inject a html link.
|
||||
$ID,-2$$TR,"ER Error"$
|
||||
$ID,2$When errors are detected in DolDoc cmds, an $FG,2$ER$FG$ entry is generated.
|
||||
$ID,-2$
|
||||
@@ -236,7 +236,7 @@ For indirection, the tag will be regenerated by substituting the value of a syst
|
||||
|
||||
For $FG,2$LS$FG$ widgets, see $LK,"::/Demo/DolDoc/Form.CPP"$.
|
||||
$ID,-2$$TR,"HTML=\"\""$
|
||||
$ID,2$See $LK,"::/Demo/ToHtmlToTXTExample/ToHtml.CPP"$ to generate a html version of a document. You can cause html link on an item with $FG,2$HTML=""$FG$.
|
||||
$ID,2$See $LK,"::/Demo/ToHtmlToTXTDemo/ToHtml.CPP"$ to generate a html version of a document. You can cause html link on an item with $FG,2$HTML=""$FG$.
|
||||
$ID,-2$$TR,"LE=<Exp> Left Expression"$
|
||||
$ID,2$Left expression. $FG,2$CM$FG$ has this by default for X offset and you can leave-off the $FG,2$LE=$FG$, just putting the $FG,2$<Exp>$FG$.
|
||||
|
||||
|
||||
+2
-2
@@ -39,11 +39,11 @@ $ID,2$The refresh rate is $TX,"30",D="WINMGR_FPS"$ frames-per-second. That is h
|
||||
$ID,-2$$TR,"How does a task own the speaker?"$
|
||||
$ID,2$No task or application has a lock on the speaker so apps will interfere with each other.
|
||||
$ID,-2$$TR,"Why does it leak memory?"$
|
||||
$ID,2$TempleOS allocs mem as more items are displayed in the window. Also, TempleOS allocs mem for code as it is compiled at the cmd line. If you $FG,2$#include$FG$ a file twice, it allocs more mem for it. If you have a 50,000 line program with each line taking twenty bytes on a machine with 1 Gig, you could $FG,2$#include$FG$ it a thousand times if it had no data or graphics and no other use of mem. If it bothers you, hit $FG,2$<CTRL-ALT-x>$FG$ and $FG,2$<CTRL-ALT-e>, $FG$periodically, to kill and recreate the task$FG$. Use the pop-up flag on macros in your $LK,"PersonalMenu",A="FI:::Home/PersonalMenu.TXT"$ to spawn new tasks, run applications and free the applications when they are finished. Small mem chunks stick to the task when they are freed until it is killed. The only way to get in trouble is allocating multiple Meg chunks and freeing them. These can only be reused if the same size gets alloced again. Use $LK,"HeapLog",A="MN:HeapLog"$(), $LK,"HeapLogAddrRep",A="MN:HeapLogAddrRep"$() and $LK,"HeapLogSizeRep",A="MN:HeapLogSizeRep"$() to see who alloced mem and didn't free it. See $LK,"MemOverview",A="FI:::/Doc/MemOverview.TXT"$.
|
||||
$ID,2$TempleOS allocs mem as more items are displayed in the window. Also, TempleOS allocs mem for code as it is compiled at the cmd line. If you $FG,2$#include$FG$ a file twice, it allocs more mem for it. If you have a 50,000 line program with each line taking twenty bytes on a machine with 1 Gig, you could $FG,2$#include$FG$ it a thousand times if it had no data or graphics and no other use of mem. If it bothers you, hit $FG,2$<CTRL-ALT-x>$FG$ and $FG,2$<CTRL-ALT-t>, $FG$periodically, to kill and recreate the task$FG$. Use the pop-up flag on macros in your $LK,"PersonalMenu",A="FI:::Home/PersonalMenu.TXT"$ to spawn new tasks, run applications and free the applications when they are finished. Small mem chunks stick to the task when they are freed until it is killed. The only way to get in trouble is allocating multiple Meg chunks and freeing them. These can only be reused if the same size gets alloced again. Use $LK,"HeapLog",A="MN:HeapLog"$(), $LK,"HeapLogAddrRep",A="MN:HeapLogAddrRep"$() and $LK,"HeapLogSizeRep",A="MN:HeapLogSizeRep"$() to see who alloced mem and didn't free it. See $LK,"MemOverview",A="FI:::/Doc/MemOverview.TXT"$.
|
||||
$ID,-2$$TR,"Why do I get a memory leak when editing big files?"$
|
||||
$ID,2$The editor periodically takes a snap-shot of the document for $FG,2$UNDO$FG$ and this looks like a memory leak.
|
||||
$ID,-2$$TR,"Why is it in text mode?"$
|
||||
$ID,2$TempleOS runs in $FG,2$VGA 640x480 16 color$FG$ graphics mode, not text mode. It changes to this mode with a $LK,"BIOS call",A="FF:::/Kernel/KStart.CPP,INT 0x10"$ while in real-mode before it switches to 64-bit mode. The text is $LK,"drawn by hand",A="MN:GrUpdateTextFG"$. See $LK,"::/Kernel/Font8x8.CPP"$. If graphics mode fails, it falls-back on text mode. You can force text mode with an $LK,"Kernel config",A="FI:::/Kernel/KCfg.CPP"$ option.
|
||||
$ID,2$TempleOS runs in $FG,2$VGA 640x480 16 color$FG$ graphics mode, not text mode. It changes to this mode with a $LK,"BIOS call",A="FF:::/Kernel/KStart.CPP,INT 0x10"$ while in real-mode before it switches to 64-bit mode. The text is $LK,"drawn by hand",A="MN:GrUpdateTextFG"$. See $LK,"::/Kernel/FontStd.CPP"$. If graphics mode fails, it falls-back on text mode. You can force text mode with an $LK,"Kernel config",A="FI:::/Kernel/KCfg.CPP"$ option.
|
||||
$ID,-2$$TR,"Where is the kernel memory?"$
|
||||
$ID,2$TempleOS identity-maps all memory, all the time. It is like paging is not used. There is no special kernel $FG,2$high half$FG$ memory space. TempleOS is ring-0-only, so everything is kernel, even user programs. There is a special task called $FG,2$Adam$FG$ and he doesn't die, so his heap never gets freed. That's as close to $FG,2$kernel memory$FG$ as it gets. All code goes in the lowest 2 Gig of addresses, known as the $LK,"Code Heap",A="FF:::/Doc/Glossary.TXT,Code and Data Heaps"$, so that the $FG,2$REL32$FG$ addressing mode can be used. See $LK,"MemOverview",A="FI:::/Doc/MemOverview.TXT"$.
|
||||
$ID,-2$$TR,"Why does it run code from stack addresses?"$
|
||||
|
||||
+2
-2
@@ -1,13 +1,13 @@
|
||||
$WW,1$$FG,5$$TX+CX,"File Manager"$$FG$
|
||||
|
||||
$FG,2$<SHIFT CURSOR>$FG$
|
||||
$ID,2$Select files.
|
||||
$ID,2$Sel files.
|
||||
$ID,-2$
|
||||
$FG,2$<CTRL-y> or <DELETE>$FG$
|
||||
$ID,2$Delete file or tree.
|
||||
$ID,-2$
|
||||
$FG,2$<CTRL-c> or <CTRL-INS>$FG$
|
||||
$ID,2$Copy selected files to clipboard.
|
||||
$ID,2$Copy sel files to clipboard.
|
||||
$ID,-2$
|
||||
$FG,2$<CTRL-v> or <SHIFT-INS>$FG$
|
||||
$ID,2$Paste clipboard.
|
||||
|
||||
+2
-2
@@ -1,11 +1,11 @@
|
||||
$WW,1$$FG,5$$TX+CX,"File Utils"$$FG$
|
||||
|
||||
File util $LK,"FilesFind",A="MN:FilesFind"$() wildcard mask consists of a single base dir with multiple file masks separated by $FG,2$';'$FG$. The $FG,2$'*'$FG$ and $FG,2$'?'$FG$ wildcard chars are accepted. A $FG,2$'~'$FG$ indicates an exclusion mask.
|
||||
File util $LK,"FilesFind",A="MN:FilesFind"$() wildcard mask consists of a single base dir with multiple file masks separated by $FG,2$';'$FG$. The $FG,2$'*'$FG$ and $FG,2$'?'$FG$ wildcard chars are accepted. The $FG,2$'~'$FG$ is your home directory and $FG,2$'!'$FG$ indicates an exclusion mask.
|
||||
|
||||
|
||||
$FG,2$"/Kernel/*"$FG$ BaseDir: $FG,2$/Kernel$FG$ Mask: $FG,2$*$FG$
|
||||
$FG,2$"/Demo/*.BMP*;*.GRA*"$FG$ BaseDir: $FG,2$/Demo$FG$ Mask: $FG,2$*.BMP*$FG$ | $FG,2$*.GRA*$FG$
|
||||
$FG,2$"/*.TXT*;~*/Bible*"$FG$ BaseDir: $FG,2$Root$FG$ Mask: $FG,2$*.TXT*$FG$ but not $FG,2$*/Bible*$FG$
|
||||
$FG,2$"/*.TXT*;!*/Bible*"$FG$ BaseDir: $FG,2$Root$FG$ Mask: $FG,2$*.TXT*$FG$ but not $FG,2$*/Bible*$FG$
|
||||
|
||||
See $LK,"FilesFindMatch",A="MN:FilesFindMatch"$().
|
||||
|
||||
|
||||
+4
-2
@@ -115,13 +115,15 @@ $FG,2$Reg$FG$ Register, Registry, Regular
|
||||
$FG,2$Rem$FG$ Remove
|
||||
$FG,2$Rep$FG$ Report, Repeat
|
||||
$FG,2$Res$FG$ Result
|
||||
$FG,2$Rev$FG$ Reverse, Reversed
|
||||
$FG,2$Rqst$FG$ Request
|
||||
$FG,2$Rst$FG$ Reset
|
||||
$FG,2$Rot$FG$ Rotation
|
||||
$FG,2$Rx$FG$ Receive
|
||||
$FG,2$Sched$FG$ Sceduler
|
||||
$FG,2$Sec$FG$ Second, Secondary
|
||||
$FG,2$$FG,2$Sect$FG$ Sector
|
||||
$FG,2$Sect$FG$ Sector
|
||||
$FG,2$Sel$FG$ Select, Selected
|
||||
$FG,2$Seq$FG$ Sequence
|
||||
$FG,2$Snd$FG$ Sound
|
||||
$FG,2$SP$FG$ SingleProcessor
|
||||
@@ -167,7 +169,7 @@ There is no $FG,2$main()$FG$ routine. Instead, stmts outside functions are auto
|
||||
$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 insts one step before making actual assembly (machine) language insts. 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$The compiler generates insts one step before making actual assembly (machine) language insts. This code is rev 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$.
|
||||
|
||||
|
||||
Binary file not shown.
+7
-9
@@ -20,19 +20,19 @@ $FG,2$/0000Boot$FG$ Boot files go here. Stage 2 of the TempleOS hard drive mast
|
||||
|
||||
$FG,5$$TX+CX,"::/Home Files"$$FG$
|
||||
|
||||
An empty $FG,2$::/Home$FG$ directory should be valid because it will get default files from the root directory.
|
||||
The home dir is specified with $FG,2$'~'$FG$. The home dir is $FG,2$::/Home$FG$ unless you change it with $LK,"HomeSet",A="MN:HomeSet"$() or compile the kernel with a cfg option. An empty $FG,2$/Home$FG$ dir should be valid because it will get default files from the root dir.
|
||||
|
||||
$LK,"::/Home/PersonalMenu.TXT"$ a menu viewed with the $FG,2$<CTRL-m>$FG$ key or by clicking "$FG,2$MENU$FG$" in the upper left border area of a window.
|
||||
$LK,"~/PersonalMenu.TXT"$ a menu viewed with the $FG,2$<CTRL-m>$FG$ key or by clicking "$FG,2$MENU$FG$" in the upper left border area of a window.
|
||||
|
||||
$LK,"::/Home/PersonalNotes.TXT"$ a personal note file viewed with the $FG,2$<CTRL-SHIFT-M>$FG$ key.
|
||||
$LK,"~/PersonalNotes.TXT"$ a personal note file viewed with the $FG,2$<CTRL-SHIFT-M>$FG$ key.
|
||||
|
||||
$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"$.
|
||||
$LK,"~/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.
|
||||
$FG,4$~/Home*$FG$ Copy $FG,2$Home*$FG$ files from the root into $FG,2$~$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!
|
||||
$LK,"~/DoOnce.CPP"$ a file invoked at the start-up of the first user. Customize this!
|
||||
|
||||
$LK,"::/Home/Registry.CPP"$ can be edited by hand or deleted to reset to defaults. Takes affect next boot.
|
||||
$LK,"~/Registry.CPP"$ can be edited by hand or deleted to reset to defaults. Takes affect next boot.
|
||||
|
||||
|
||||
|
||||
@@ -80,8 +80,6 @@ $ID,-5$
|
||||
|
||||
* Glbl vars in $FG,2$AOT$FG$ BIN modules are initialized to zero. They occupy space in BIN files.
|
||||
|
||||
* If you use floats in your interrupt routine, save and restore the fpu state with $LK,"Fxsave",A="MN:Fxsave"$() and $LK,"Fxrstor",A="MN:Fxrstor"$(). The timer interrupt does this. The keyboard and mouse don't use floats.
|
||||
|
||||
* Bracketing code with $FG,2$PUSHFD CLI$FG$ and $FG,2$POPFD$FG$ will protect against simultaneous accesses from tasks on $UL,1$one$UL,0$ core. To protect against multiple cores, you need a locked semaphore. I think semiphores need to be in their own cache line, but I'm not sure. I use lock bits in a lot of places not aligned.
|
||||
|
||||
* $LK,"SysDbg",A="MN:SysDbg"$() and $LK,"IsSysDbg",A="MN:IsSysDbg"$() are really handy when working on the compiler or kernel. It's just a bit you can set and test.
|
||||
|
||||
Binary file not shown.
+68
-68
@@ -1,12 +1,12 @@
|
||||
$WW,1$$PURPLE$$TX+CX,"HolyC"$$FG$
|
||||
$WW,1$$FG,5$$TX+CX,"HolyC"$$FG$
|
||||
|
||||
* See $LK,"::/Doc/CompilerOverview.TXT"$.
|
||||
|
||||
* See $LK,"Scoping and Linkage",A="FI:::/Doc/ScopingLinkage.TXT"$ for details on $GREEN$extern$FG$, $GREEN$import$FG$, $GREEN$_extern$FG$, $GREEN$_import$FG$, etc.
|
||||
* See $LK,"Scoping and Linkage",A="FI:::/Doc/ScopingLinkage.TXT"$ for details on $FG,2$extern$FG$, $FG,2$import$FG$, $FG,2$_extern$FG$, $FG,2$_import$FG$, etc.
|
||||
|
||||
* Built-in types include $GREEN$I0,I8,I16,I32,I64$FG$ for signed 0-8 byte ints and $GREEN$U0,U8,U16,U32,U64$FG$ for unsigned 0-8 byte ints and $GREEN$F64$FG$ for 8 byte floats.
|
||||
* Built-in types include $FG,2$I0,I8,I16,I32,I64$FG$ for signed 0-8 byte ints and $FG,2$U0,U8,U16,U32,U64$FG$ for unsigned 0-8 byte ints and $FG,2$F64$FG$ for 8 byte floats.
|
||||
|
||||
$GREEN$ U0 void, but ZERO size!
|
||||
$FG,2$ U0 void, but ZERO size!
|
||||
I8 char
|
||||
U8 unsigned char
|
||||
I16 short
|
||||
@@ -16,16 +16,16 @@ $GREEN$ U0 void, but ZERO size!
|
||||
I64 long (64-bit)
|
||||
U64 unsigned long (64-bit)
|
||||
F64 double$FG$
|
||||
$RED$no F32 float.$FG$
|
||||
$FG,4$no F32 float.$FG$
|
||||
|
||||
* Function with no args, or just default args can be called without parentheses.
|
||||
|
||||
>$GREEN$Dir("*");$FG$
|
||||
>$GREEN$Dir();$FG$
|
||||
>$GREEN$Dir;$FG$
|
||||
>$FG,2$Dir("*");$FG$
|
||||
>$FG,2$Dir();$FG$
|
||||
>$FG,2$Dir;$FG$
|
||||
|
||||
* Default args don't have to be on the end. This code is valid:
|
||||
$ID,2$$GREEN$U0 Test(I64 i=4,I64 j,I64 k=5)
|
||||
$ID,2$$FG,2$U0 Test(I64 i=4,I64 j,I64 k=5)
|
||||
{
|
||||
Print("%X %X %X\n",i,j,k);
|
||||
}
|
||||
@@ -34,7 +34,7 @@ Test(,3);$FG$
|
||||
$ID,-2$
|
||||
* A char const all alone is sent to $LK,"PutChars",A="MN:PutChars"$(). A string with or without args is sent to $LK,"Print",A="MN:Print"$(). An empty string literal signals a variable fmt_str follows.
|
||||
|
||||
$ID,2$$GREEN$void DemoC(char drv,char *fmt,char *name,int age)
|
||||
$ID,2$$FG,2$void DemoC(char drv,char *fmt,char *name,int age)
|
||||
{
|
||||
printf("Hello World!\n");
|
||||
printf("%s age %d\n",name,age);
|
||||
@@ -52,15 +52,15 @@ U0 DemoHolyC(U8 drv,U8 *fmt,U8 *name,I64 age)
|
||||
'*';
|
||||
}
|
||||
$FG$$ID,-2$
|
||||
* When dealing with function addresses such as for callbacks, precede the name with "$GREEN$&$FG$".
|
||||
* When dealing with function addresses such as for callbacks, precede the name with "$FG,2$&$FG$".
|
||||
|
||||
* Type casting is postfix. To typecast int or F64, use $LK,"ToI64",A="MN:ToI64"$(), $LK,"ToBool",A="MN:ToBool"$() or $LK,"ToF64",A="MN:ToF64"$(). (TempleOS follows normal C float<-->int conversion, but sometimes you want to override. These functions are better than multiplying by "1.0" to convert to float.)
|
||||
|
||||
* There is no $GREEN$main()$FG$ function. Any code outside of functions gets executed upon start-up, in order.
|
||||
* There is no $FG,2$main()$FG$ function. Any code outside of functions gets executed upon start-up, in order.
|
||||
|
||||
* There are no bit fields, but there are $LK,"bit access",A="HI:Bit"$ routines and you can access bytes or words within any int. See $LK,"I64 declaration",A="MN:I64"$. A class can be accessed as a whole are subints, if you put a type in front of the $GREEN$class$FG$ declaration.
|
||||
* There are no bit fields, but there are $LK,"bit access",A="HI:Bit"$ routines and you can access bytes or words within any int. See $LK,"I64 declaration",A="MN:I64"$. A class can be accessed as a whole are subints, if you put a type in front of the $FG,2$class$FG$ declaration.
|
||||
$ID,2$
|
||||
$GREEN$public I64i union I64 //"I64i" is intrinsic. We are defining "I64".
|
||||
$FG,2$public I64i union I64 //"I64i" is intrinsic. We are defining "I64".
|
||||
{
|
||||
I8i i8[8];
|
||||
U8i u8[8];
|
||||
@@ -73,9 +73,9 @@ $GREEN$public I64i union I64 //"I64i" is intrinsic. We are defining "I64".
|
||||
I64 i=0x123456780000DEF0;
|
||||
i.u16[1]=0x9ABC;
|
||||
$FG$$ID,-2$
|
||||
* Variable arg count functions ($GREEN$...$FG$) can access their args with built-in variables similar to '$GREEN$this$FG$' in C++. They are '$GREEN$I64 argc$FG$' and '$GREEN$I64 argv[]$FG$'.
|
||||
* Variable arg count functions ($FG,2$...$FG$) can access their args with built-in variables similar to '$FG,2$this$FG$' in C++. They are '$FG,2$I64 argc$FG$' and '$FG,2$I64 argv[]$FG$'.
|
||||
$ID,2$$WW,0$
|
||||
$GREEN$I64 AddNums(...)
|
||||
$FG,2$I64 AddNums(...)
|
||||
{
|
||||
I64 i,res=0;
|
||||
for (i=0;i<argc;i++)
|
||||
@@ -83,9 +83,9 @@ $GREEN$I64 AddNums(...)
|
||||
return res;
|
||||
}
|
||||
|
||||
$FG$>$GREEN$AddNums(1,2,3);$FG$
|
||||
$FG$>$FG,2$AddNums(1,2,3);$FG$
|
||||
ans=6
|
||||
$GREEN$
|
||||
$FG,2$
|
||||
|
||||
public U0 GrPrint(CDC *dc,I64 x,I64 y,U8 *fmt,...)
|
||||
{
|
||||
@@ -101,20 +101,20 @@ public U0 GrPrint(CDC *dc,I64 x,I64 y,U8 *fmt,...)
|
||||
...
|
||||
|
||||
$WW,1$$FG$$ID,-2$
|
||||
* Allows "$GREEN$5<i<j+1<20$FG$" instead of "$GREEN$5<i && i<j+1 && j+1<20$FG$".
|
||||
* Allows "$FG,2$5<i<j+1<20$FG$" instead of "$FG,2$5<i && i<j+1 && j+1<20$FG$".
|
||||
$ID,2$
|
||||
$GREEN$if (13<=age<20)
|
||||
$FG,2$if (13<=age<20)
|
||||
"Teen-ager";
|
||||
$FG$$ID,-2$
|
||||
* if you know a switch stmt will not exceed the lowest or highest case values. $GREEN$switch []$FG$ is a little faster because it doesn't check.
|
||||
* if you know a switch stmt will not exceed the lowest or highest case values. $FG,2$switch []$FG$ is a little faster because it doesn't check.
|
||||
|
||||
* $GREEN$switch$FG$ stmts always use a jump table. Don't use them with cases with really big, sparse ranges.
|
||||
* $FG,2$switch$FG$ stmts always use a jump table. Don't use them with cases with really big, sparse ranges.
|
||||
|
||||
* Allows ranges like "$GREEN$case 4...7:$FG$" in $GREEN$switch$FG$ stmts.
|
||||
* Allows ranges like "$FG,2$case 4...7:$FG$" in $FG,2$switch$FG$ stmts.
|
||||
|
||||
* A no case number causes next higher int case in $GREEN$switch$FG$ stmts. See $LK,"::/Demo/NullCase.CPP"$.
|
||||
* A no case number causes next higher int case in $FG,2$switch$FG$ stmts. See $LK,"::/Demo/NullCase.CPP"$.
|
||||
|
||||
$ID,2$$GREEN$I64 i;
|
||||
$ID,2$$FG,2$I64 i;
|
||||
for (i=0;i<20;i++)
|
||||
switch (i) {
|
||||
case: "Zero\n"; break; //Starts at zero
|
||||
@@ -125,37 +125,37 @@ for (i=0;i<20;i++)
|
||||
case: "Eleven\n"; break; //One plus prev case.
|
||||
}$FG$$ID,-2$
|
||||
|
||||
* $GREEN$sub_switch_start$FG$/$GREEN$sub_switch_end$FG$ allow a new type of nested-switch control flow. (Don't goto, throw exception or return out of $GREEN$sub_switch_start$FG$ front porch area.) See $LK,"::/Demo/SubSwitch.CPP"$.
|
||||
* Switch statements can be nestled with a single switch expression! This is known as a "sub_switch" statement. $FG,2$start$FG$/$FG,2$end$FG$ are used to group cases. Don't goto out of, throw an exception out of, or return out of the $FG,2$start$FG$ front porch area. See $LK,"::/Demo/SubSwitch.CPP"$.
|
||||
|
||||
$ID,2$$GREEN$I64 i;
|
||||
$ID,2$$FG,2$I64 i;
|
||||
for (i=0;i<10;i++)
|
||||
switch (i) {
|
||||
case 0: "Zero "; break;
|
||||
case 2: "Two "; break;
|
||||
case 4: "Four "; break;
|
||||
sub_switch_start:
|
||||
start:
|
||||
"[";
|
||||
case 1: "One"; break;
|
||||
case 3: "Three"; break;
|
||||
case 5: "Five"; break;
|
||||
sub_switch_end:
|
||||
end:
|
||||
"] ";
|
||||
break;
|
||||
}$FG$
|
||||
$BG$OutPut:
|
||||
>$GREEN$Zero [One] Two [Three] Four [Five]$FG$
|
||||
>$FG,2$Zero [One] Two [Three] Four [Five]$FG$
|
||||
$ID,-2$
|
||||
* A $GREEN$nounusedwarn$FG$ stmt will suppress an unused var warning.
|
||||
* A $FG,2$no_warn$FG$ stmt will suppress an unused var warning.
|
||||
|
||||
* You can have multiple member vars of a class named "$GREEN$pad$FG$" or "$GREEN$reserved$FG$", and it won't issue warnings.
|
||||
* You can have multiple member vars of a class named "$FG,2$pad$FG$" or "$FG,2$reserved$FG$", and it won't issue warnings.
|
||||
|
||||
* $GREEN$noreg$FG$ or $GREEN$reg$FG$ can be placed before a function local var name. You can, optionally, specify a reg after the $GREEN$reg$FG$ keyword.
|
||||
* $FG,2$noreg$FG$ or $FG,2$reg$FG$ can be placed before a function local var name. You can, optionally, specify a reg after the $FG,2$reg$FG$ keyword.
|
||||
|
||||
$ID,2$$GREEN$U0 Main()
|
||||
$ID,2$$FG,2$U0 Main()
|
||||
{
|
||||
//Only use $LK,"REGG_LOCAL_VARS",A="MN:REGG_LOCAL_VARS"$ or $LK,"REGG_LOCAL_NON_PTR_VARS",A="MN:REGG_LOCAL_NON_PTR_VARS"$ for reg vars or else clobbered.
|
||||
I64 reg R15 i=5, noreg j=4;
|
||||
nounusedwarn i;
|
||||
no_warn i;
|
||||
asm {
|
||||
MOV RAX,R15
|
||||
CALL &PUT_HEX_U64
|
||||
@@ -168,11 +168,11 @@ $ID,2$$GREEN$U0 Main()
|
||||
}
|
||||
}
|
||||
$FG$$ID,-2$
|
||||
* $GREEN$interrupt$FG$, $GREEN$haserrcode$FG$, $GREEN$public$FG$, $GREEN$argpop$FG$ or $GREEN$noargpop$FG$ are function flags. See $LK,"::/Demo/Lectures/Mem/PageTableEntries.CPP"$.
|
||||
* $FG,2$interrupt$FG$, $FG,2$haserrcode$FG$, $FG,2$public$FG$, $FG,2$argpop$FG$ or $FG,2$noargpop$FG$ are function flags. See $LK,"::/Demo/Lectures/Mem/PageTableEntries.CPP"$.
|
||||
|
||||
* A single quote can encompass multiple characters. $GREEN$'ABC'$FG$ is equ to $GREEN$0x434241$FG$. $LK,"PutChars",A="MN:PutChars"$() takes multiple characters.
|
||||
* A single quote can encompass multiple characters. $FG,2$'ABC'$FG$ is equ to $FG,2$0x434241$FG$. $LK,"PutChars",A="MN:PutChars"$() takes multiple characters.
|
||||
|
||||
$ID,2$$GREEN$asm {
|
||||
$ID,2$$FG,2$asm {
|
||||
HELLO_WORLD::
|
||||
PUSH RBP
|
||||
MOV RBP,RSP
|
||||
@@ -187,67 +187,67 @@ Call(HELLO_WORLD);
|
||||
PutChars('Hello ');
|
||||
PutChars('World\n');
|
||||
$FG$$ID,-2$
|
||||
* The "$GREEN$`$FG$" operator raises a base to a power.
|
||||
* The "$FG,2$`$FG$" operator raises a base to a power.
|
||||
|
||||
* There is no question-colon operator.
|
||||
|
||||
* TempleOS $LK,"operator precedence",A="FF:::/Compiler/CInit.CPP,cmp.binary_ops"$
|
||||
$GREEN$`$FG$,$GREEN$>>$FG$,$GREEN$<<$FG$
|
||||
$GREEN$*$FG$,$GREEN$/$FG$,$GREEN$%$FG$
|
||||
$GREEN$&$FG$
|
||||
$GREEN$^$FG$
|
||||
$GREEN$|$FG$
|
||||
$GREEN$+$FG$,$GREEN$-$FG$
|
||||
$GREEN$$GREEN$<$FG$,$GREEN$>$FG$,$GREEN$<=$FG$,$GREEN$>=$FG$
|
||||
$GREEN$==$FG$,$GREEN$!=$FG$
|
||||
$GREEN$&&$FG$
|
||||
$GREEN$$GREEN$^^$FG$
|
||||
$GREEN$||$FG$$FG$
|
||||
$GREEN$=$FG$,$GREEN$<<=$FG$,$GREEN$>>=$FG$,$GREEN$*=$FG$,$GREEN$/=$FG$,$GREEN$&=$FG$,$GREEN$|=$FG$,$GREEN$^=$FG$,$GREEN$+=$FG$,$GREEN$-=$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$,$FG,2$-$FG$
|
||||
$FG,2$$FG,2$<$FG$,$FG,2$>$FG$,$FG,2$<=$FG$,$FG,2$>=$FG$
|
||||
$FG,2$==$FG$,$FG,2$!=$FG$
|
||||
$FG,2$&&$FG$
|
||||
$FG,2$$FG,2$^^$FG$
|
||||
$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,"Option",A="MN:Option"$($LK,"OPTf_WARN_PAREN",A="MN:OPTf_WARN_PAREN"$,ON) to find unnecessary parentheses in code.
|
||||
|
||||
* 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 stmts.
|
||||
|
||||
* With the $GREEN$#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 $GREEN$#exe{}$FG$ blk.
|
||||
* 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.
|
||||
|
||||
* No $GREEN$#define$FG$ functions exist (I'm not a fan)
|
||||
* No $FG,2$#define$FG$ functions exist (I'm not a fan)
|
||||
|
||||
* No $GREEN$typedef$FG$, use $GREEN$class$FG$.
|
||||
* No $FG,2$typedef$FG$, use $FG,2$class$FG$.
|
||||
|
||||
* No type-checking
|
||||
|
||||
* Can't use $GREEN$<>$FG$ with $GREEN$#include$FG$, use $GREEN$""$FG$.
|
||||
* Can't use $FG,2$<>$FG$ with $FG,2$#include$FG$, use $FG,2$""$FG$.
|
||||
|
||||
* "$GREEN$$$$FG$" is an escape character. Two dollar signs signify an ordinary $$. See $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$. In $GREEN$asm$FG$ or $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ code, it also refers to the inst's address or the offset in a $GREEN$class$FG$ definition.
|
||||
* "$FG,2$$$$FG$" is an escape character. Two dollar signs signify an ordinary $$. See $LK,"DolDoc",A="FI:::/Doc/DolDocOverview.TXT"$. In $FG,2$asm$FG$ or $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ code, it also refers to the inst's address or the offset in a $FG,2$class$FG$ definition.
|
||||
|
||||
* $GREEN$union$FG$ is more like a class, so you don't reference it with a $GREEN$union$FG$ label after you define it. Some common unions are declared in $LK,"KernelA.HPP",A="MN:U16"$ for 1,2,4 and 8 byte objects. If you place a type in front of a union declaration, that is the type when used by itself. See $LK,"::/Demo/SubIntAccess.CPP"$.
|
||||
* $FG,2$union$FG$ is more like a class, so you don't reference it with a $FG,2$union$FG$ label after you define it. Some common unions are declared in $LK,"KernelA.HPP",A="MN:U16"$ for 1,2,4 and 8 byte objects. If you place a type in front of a union declaration, that is the type when used by itself. See $LK,"::/Demo/SubIntAccess.CPP"$.
|
||||
|
||||
* $GREEN$class$FG$ member vars can have meta data. $GREEN$fmtstr$FG$ and $GREEN$fmtdata$FG$ are two meta data types now used. All compiler structures are saved and you can access the compiler's info about classes and vars. See $LK,"::/Demo/ClassMeta.CPP"$ and $LK,"DocForm",A="MN:DocForm"$().
|
||||
* $FG,2$class$FG$ member vars can have meta data. $FG,2$fmtstr$FG$ and $FG,2$fmtdata$FG$ are two meta data types now used. All compiler structures are saved and you can access the compiler's info about classes and vars. See $LK,"::/Demo/ClassMeta.CPP"$ and $LK,"DocForm",A="MN:DocForm"$().
|
||||
|
||||
* There is a keyword $GREEN$lastclass$FG$ you use as a dft arg. It is set to the class name of the prev arg. See $LK,"::/Demo/LastClass.CPP"$, $LK,"ClassRep",A="MN:ClassRep"$(), $LK,"DocForm",A="MN:DocForm"$() and $LK,"::/Demo/Dsk/BlkDevRep.CPP"$.
|
||||
* There is a keyword $FG,2$lastclass$FG$ you use as a dft arg. It is set to the class name of the prev arg. See $LK,"::/Demo/LastClass.CPP"$, $LK,"ClassRep",A="MN:ClassRep"$(), $LK,"DocForm",A="MN:DocForm"$() and $LK,"::/Demo/Dsk/BlkDevRep.CPP"$.
|
||||
|
||||
* See $LK,"::/Demo/Exceptions.CPP"$. $GREEN$try{} catch{}$FG$ and $GREEN$throw$FG$ are different from C++. $GREEN$throw$FG$ is a function with an 8-byte or less char arg. The char string passed in $GREEN$throw()$FG$ can be accessed from within a $GREEN$catch{}$FG$ using the $GREEN$Fs->except_ch$FG$. Within a $GREEN$catch {}$FG$ blk, set the var $GREEN$Fs->catch_except$FG$ to $GREEN$TRUE$FG$ if you want to terminate the search for a handler. Use $LK,"PutExcept",A="MN:PutExcept"$() as a handler, if you like.
|
||||
* See $LK,"::/Demo/Exceptions.CPP"$. $FG,2$try{} catch{}$FG$ and $FG,2$throw$FG$ are different from C++. $FG,2$throw$FG$ is a function with an 8-byte or less char arg. The char string passed in $FG,2$throw()$FG$ can be accessed from within a $FG,2$catch{}$FG$ using the $FG,2$Fs->except_ch$FG$. Within a $FG,2$catch {}$FG$ blk, set the var $FG,2$Fs->catch_except$FG$ to $FG,2$TRUE$FG$ if you want to terminate the search for a handler. Use $LK,"PutExcept",A="MN:PutExcept"$() as a handler, if you like.
|
||||
|
||||
* A function is available similar to $GREEN$sizeof$FG$ which provides the offset of a member of a class. It's called $GREEN$offset$FG$. You place the class name and member inside as in $GREEN$offset(classname.membername)$FG$. It has nothing to do with 16-bit code. Both $GREEN$sizeof$FG$ and $GREEN$offset$FG$ only accept one level of member vars. That is, you can't do $GREEN$sizeof(classname.membername.submembername)$FG$.$FG$
|
||||
* A function is available similar to $FG,2$sizeof$FG$ which provides the offset of a member of a class. It's called $FG,2$offset$FG$. You place the class name and member inside as in $FG,2$offset(classname.membername)$FG$. It has nothing to do with 16-bit code. Both $FG,2$sizeof$FG$ and $FG,2$offset$FG$ only accept one level of member vars. That is, you can't do $FG,2$sizeof(classname.membername.submembername)$FG$.$FG$
|
||||
|
||||
* There is no $GREEN$continue$FG$ stmt. Use $GREEN$goto$FG$.
|
||||
* There is no $FG,2$continue$FG$ stmt. Use $FG,2$goto$FG$.
|
||||
|
||||
* $GREEN$lock{}$FG$ can be used to apply asm $GREEN$LOCK$FG$ prefixes to code for safe multicore read-modify-write accesses. The code bracked with have $GREEN$LOCK$FG$ asm prefix's applied to relevant insts within. It's a little shoddy. See $LK,"::/Demo/MultiCore/Lock.CPP"$.
|
||||
* $FG,2$lock{}$FG$ can be used to apply asm $FG,2$LOCK$FG$ prefixes to code for safe multicore read-modify-write accesses. The code bracked with have $FG,2$LOCK$FG$ asm prefix's applied to relevant insts within. It's a little shoddy. See $LK,"::/Demo/MultiCore/Lock.CPP"$.
|
||||
|
||||
* There is a function called $LK,"MSize",A="MN:MSize"$() which gives the size of an object alloced off the heap. For larger size allocations, the system rounds-up to a power of two, so $GREEN$MSize()$FG$ lets you know the real size and you can take full advantage of it.
|
||||
* There is a function called $LK,"MSize",A="MN:MSize"$() which gives the size of an object alloced off the heap. For larger size allocations, the system rounds-up to a power of two, so $FG,2$MSize()$FG$ lets you know the real size and you can take full advantage of it.
|
||||
|
||||
* You CAN $LK,"Free",A="MN:Free"$() a $GREEN$NULL$FG$ ptr. Useful variants of $LK,"MAlloc",A="MN:MAlloc"$() can be found $LK,"Here",A="MN:CAlloc"$. Each task has a heap and you can $GREEN$MAlloc$FG$ and $GREEN$Free$FG$ off-of other task's heaps, or make an independent heap with $LK,"HeapCtrlInit",A="MN:HeapCtrlInit"$(). See $LK,"HeapLog",A="MN:HeapLog"$() for an example.
|
||||
* You CAN $LK,"Free",A="MN:Free"$() a $FG,2$NULL$FG$ ptr. Useful variants of $LK,"MAlloc",A="MN:MAlloc"$() can be found $LK,"Here",A="MN:CAlloc"$. Each task has a heap and you can $FG,2$MAlloc$FG$ and $FG,2$Free$FG$ off-of other task's heaps, or make an independent heap with $LK,"HeapCtrlInit",A="MN:HeapCtrlInit"$(). See $LK,"HeapLog",A="MN:HeapLog"$() for an example.
|
||||
|
||||
* The stk does not grow because virtual mem is not used. I recommend allocating large local vars from the heap. You can change $LK,"MEM_DFT_STK",A="MN:MEM_DFT_STK"$ and recompile $GREEN$Kernel$FG$ or request more when doing a $LK,"Spawn",A="MN:Spawn"$(). You can use $LK,"CallStkGrow",A="MN:CallStkGrow"$(), but it's odd. See $LK,"::/Demo/StkGrow.CPP"$.
|
||||
* The stk does not grow because virtual mem is not used. I recommend allocating large local vars from the heap. You can change $LK,"MEM_DFT_STK",A="MN:MEM_DFT_STK"$ and recompile $FG,2$Kernel$FG$ or request more when doing a $LK,"Spawn",A="MN:Spawn"$(). You can use $LK,"CallStkGrow",A="MN:CallStkGrow"$(), but it's odd. See $LK,"::/Demo/StkGrow.CPP"$.
|
||||
|
||||
* Only one base class is allowed.
|
||||
|
||||
* $GREEN$printf()$FG$ has new codes. See $LK,"Print(\"\") Fmt Strings",A="FI:::/Doc/Print.TXT"$.
|
||||
* $FG,2$printf()$FG$ has new codes. See $LK,"Print(\"\") Fmt Strings",A="FI:::/Doc/Print.TXT"$.
|
||||
|
||||
* All values are extended to 64-bit when accessed. Intermediate calculations are done with 64-bit values.
|
||||
|
||||
$ID,2$$GREEN$U0 Main()
|
||||
$ID,2$$FG,2$U0 Main()
|
||||
{
|
||||
I16 i1;
|
||||
I32 j1;
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@ $WW,1$$FG,5$$TX+CX,"Installing TempleOS"$$FG$
|
||||
|
||||
Burn a CD with software that supports ISO files. Then, boot it. It's a live CD, so you can look around with or without installing.
|
||||
|
||||
Dual booting with another operating system is the best way to use TempleOS. I only use it in a virtual machine because it won't boot natively on my machine, though. For native dual booting, you need a partition for TempleOS. Windows often comes with a restore disk that does not allow repartitioning. I recommend connecting a spare additional hard drive and using the $FG,2$BIOS$FG$ to select which drive to boot.
|
||||
Dual booting with another operating system is the best way to use TempleOS. I only use it in a virtual machine because it won't boot natively on my machine, though. For native dual booting, you need a partition for TempleOS. Windows often comes with a restore disk that does not allow repartitioning. I recommend connecting a spare additional hard drive and using the $FG,2$BIOS$FG$ to sel which drive to boot.
|
||||
|
||||
The $LK,"::/Misc/OSInstall.CPP"$ script will automate much of this. It runs if you boot the CD/DVD-ROM.
|
||||
|
||||
@@ -12,7 +12,7 @@ Two TempleOS partitions are highly recommended, so you can boot to a back-up and
|
||||
|
||||
1)
|
||||
$ID,2$$LK,"Mount",A="MN:Mount"$() use if the drive is partitioned.
|
||||
$ID,2$This command mounts a drive making it accessible. For simplicity, select $FG,2$'C'$FG$ as the first drive letter for your hard drive. The first partition will be $FG,2$'C'$FG$, second, $FG,2$'D'$FG$, etc. TempleOS needs 3 numbers to utilize a hard drive -- base0, base1, and unit. When you enter a hexadecimal number, do it like in $FG,2$C$FG$ with a $FG,2$0x$FG$ prefix. If the probe was successful, you can just enter the number in the probe box instead of base0.
|
||||
$ID,2$This command mounts a drive making it accessible. For simplicity, sel $FG,2$'C'$FG$ as the first drive letter for your hard drive. The first partition will be $FG,2$'C'$FG$, second, $FG,2$'D'$FG$, etc. TempleOS needs 3 numbers to utilize a hard drive -- base0, base1, and unit. When you enter a hexadecimal number, do it like in $FG,2$C$FG$ with a $FG,2$0x$FG$ prefix. If the probe was successful, you can just enter the number in the probe box instead of base0.
|
||||
$ID,-2$
|
||||
$LK,"PrtDsk",A="MN:PrtDsk"$($FG,2$'C'$FG$) use if drive is not partitioned
|
||||
|
||||
|
||||
+1
-1
@@ -47,7 +47,7 @@ $FG,2$"%Z"$FG$ $LK,"DefineLstLoad",A="MN:DefineLstLoad"$() subentry. Pass sub_e
|
||||
|
||||
$FG,2$"%Q"$FG$ convert "\" to "\\" and quote to backslash quote. (For use in creating strs in strs.)
|
||||
|
||||
$FG,2$"%q"$FG$ reverse a $FG,2$"%Q"$FG$.
|
||||
$FG,2$"%q"$FG$ rev a $FG,2$"%Q"$FG$.
|
||||
$ID,-2$
|
||||
|
||||
$FG,5$$TX+CX,"Print Family"$$FG$
|
||||
|
||||
+3
-4
@@ -22,7 +22,7 @@ public class CRedSeaBoot //RedSea is type FAT32 in partition table to fool BIOS.
|
||||
{
|
||||
U8 jump_and_nop[3];
|
||||
U8 signature,reserved[4]; //MBR_PT_REDSEA=0x88. Distinguish from real FAT32.
|
||||
I64 base_offset; //For CD/DVD image copy.
|
||||
I64 drv_offset; //For CD/DVD image copy.
|
||||
I64 sects;
|
||||
I64 root_cluster; (root_blk)
|
||||
I64 bitmap_sects;
|
||||
@@ -31,10 +31,9 @@ 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/BlkDev/FileSysRedSea.CPP"$.
|
||||
See $LK,"::/Kernel/BlkDev/FileSysRedSea.CPP"$ and $LK,"::/Adam/Opt/Boot/DskISORedSea.CPP"$.
|
||||
|
||||
File with names ending in .Z are stored compressed.
|
||||
See $LK,"implementation of LZW compression",A="::/Kernel/Compress.CPP"$.
|
||||
Files with names ending in .Z are compressed. See $LK,"::/Kernel/Compress.CPP"$.
|
||||
|
||||
To replace ISO9660, make hard-drive partition image of a measured size and copy onto a CD/DVD starting at about sector 20, with EL TORITO booting. 512-byte sectors will be placed on top of 2048-byte CD/DCD sectors, so there will be four blocks per CD/DVD sector.
|
||||
|
||||
|
||||
+1
-1
@@ -2,4 +2,4 @@ $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 $FG,2$make a sprite$FG$ somewhere outside a function. Then, you $FG,2$insert a pointer$FG$ to the sprite as an "*elems" arg when calling $LK,"Sprite",A="MN:Sprite"$() or $LK,"Sprite3",A="MN:Sprite3"$(). See $LK,"Sprites",A="HI:Sprites"$.
|
||||
|
||||
You can create a $FG,2$sprite macro$FG$ on your $LK,"PersonalMenu",A="FI:::/Home/PersonalMenu.TXT"$ with a payload of $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ source code to execute when it ESC's back to the cmd line. If you check "Pop-Up", it will spawn a new task and run the payload. A pop-up macro can be placed in any document.
|
||||
You can create a $FG,2$sprite macro$FG$ on your $LK,"PersonalMenu",A="FI:~/PersonalMenu.TXT"$ with a payload of $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ source code to execute when it ESC's back to the cmd line. If you check "Pop-Up", it will spawn a new task and run the payload. A pop-up macro can be placed in any document.
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
$WW,1$$FG,5$$TX+CX,"Sprite Edit Menu Help"$$FG$
|
||||
|
||||
Order of elements matters. They are executed in the order they appear in the side-bar. You can select or unselect elements graphically, or with text in the sidebar. Then, cut, copy, paste, shift or transform them.
|
||||
Order of elements matters. They are executed in the order they appear in the side-bar. You can sel or unsel elements graphically, or with text in the sidebar. Then, cut, copy, paste, shift or transform them.
|
||||
|
||||
You can set the current insert point element by clicking the element in the side-bar and making it RED.
|
||||
|
||||
|
||||
+3
-3
@@ -2,10 +2,10 @@ $WW,1$$FG,5$$TX+CX,"Sprite Main Menu Help"$$FG$
|
||||
|
||||
Order of elements matters. They are executed in the order they appear in the side-bar. You can set the insert point for new elements by click the element in the side-bar and making it RED.
|
||||
|
||||
After you create a 3D Mesh, you can edit it by selecting it in the side-bar so it is colored RED. Then, click EDIT-3D-MESH. A shiftable 3D mesh has a 2D offset to position the origin. You can convert between shiftable and non-shiftable by editing it with the other command.
|
||||
After you create a 3D Mesh, you can edit it by seling it in the side-bar so it is colored RED. Then, click EDIT-3D-MESH. A shiftable 3D mesh has a 2D offset to position the origin. You can convert between shiftable and non-shiftable by editing it with the other command.
|
||||
|
||||
You can convert all elements to a BitMap if END is RED in the side-bar and you CONVERT-TO-BITMAP. Later, you can edit that bitmap by selecting it in the side bar so it is colored RED and clicking EDIT-BITMAP.
|
||||
You can convert all elements to a BitMap if END is RED in the side-bar and you CONVERT-TO-BITMAP. Later, you can edit that bitmap by seling it in the side bar so it is colored RED and clicking EDIT-BITMAP.
|
||||
|
||||
If you have a 3D icon, you might want to place a background-colored rectangle under the 3D icon, so it hovers above. Use TRANSFORM-OFF and TRANSFORM-ON. You will also need to set the Z offset of the icon. Go to the Edit menu and select EDIT-AS-TEXT and change the third INT to Z offset. Good luck.
|
||||
If you have a 3D icon, you might want to place a background-colored rectangle under the 3D icon, so it hovers above. Use TRANSFORM-OFF and TRANSFORM-ON. You will also need to set the Z offset of the icon. Go to the Edit menu and sel EDIT-AS-TEXT and change the third INT to Z offset. Good luck.
|
||||
|
||||
While inserting vector elements, you can usually press $FG,2$'c'$FG$ to eye-dropper the color under the mouse. Press $FG,2$'t'$FG$ for transparent.
|
||||
@@ -0,0 +1,86 @@
|
||||
$WW,1$$FG,5$$TX+CX,"The Standard TempleOS PC",HTML="http://www.templeos.org/Wb/Home/Web/TAD/TAD.html"$$FG$
|
||||
|
||||
All desktop PCs will have 8-channel OCTART super-simple high speed serial ports to replace USB. They are simpler because the driver is as simple as old school $LK,"RS232 Serial",A="FI:::/Doc/Comm.CPP"$, they have no USB end-points and they have no USB human interface device reports. Computer mice will all have exactly two buttons and one wheel. Game controllers will all be the standard deluxe $TX,"game console controllers",HTML="http://www.gamestop.com/pc/accessories/steam-controller/121865"$ that are popular today. It will have 8 big TX and 8 big RX fifos that allow flow control characters to jump the queue. It should be locked-down to as few options as possible, like 8-1-N only, although hardware may use a USB frame, not an RS232, so stop bits might not be relevant. Perhaps, just two baud rates -- high and low speed are needed. Low speed is good for slow microcontrollers and allows longer cable length. Keyboard, mouse and game controller can be low speed.
|
||||
|
||||
The USB creators banned generic devices, requiring a signed, certified driver for everything! That's no good. We allow any device and will communicate, generically, using a serial terminal program like the old school HyperTerminal, XTalk or Telnet.
|
||||
|
||||
A mouse packet interface should be similar to this:
|
||||
|
||||
$ID,5$TX: <ENTER>
|
||||
RX: X:+3 Y:+0 Wheel:+0 LB:OFF RB:OFF
|
||||
TX: <ENTER>
|
||||
RX: X:+0 Y:-1 Wheel:+0 LB:ON RB:OFF
|
||||
$ID,-5$
|
||||
We aspire to be as simple as a Commodore 64 joystick driver:
|
||||
|
||||
$ID,5$VAL=PEEK(56321)
|
||||
if VAL AND 1 THEN y=y-1
|
||||
if VAL AND 2 THEN y=y+1
|
||||
if VAL AND 4 THEN x=x-1
|
||||
if VAL AND 8 THEN x=x+1
|
||||
$ID,-5$
|
||||
The game controller will be more complicated, but much simpler than USB. It will use a standard text packet of some kind.
|
||||
|
||||
On the other end, you might hook-up a thermostat microcontroller and interface as a generic serial device. The microcontroller in the thermostat would have something simple, not a crazy overkill ethernet connection.
|
||||
|
||||
$ID,5$$HL,1$U8 b;
|
||||
while (TRUE) {
|
||||
b=ReadU8(2); //Read byte from high speed serial channel 2.
|
||||
//(Has been configured for low baud because thermostat should be slow.)
|
||||
if (b==CMD_UP)
|
||||
temperature++;
|
||||
else if (b==CMD_DOWN)
|
||||
temperature--;
|
||||
}$HL,0$
|
||||
$ID,-5$
|
||||
Super-simple block devices will replace ATA/ATAPI hard drives and CD/DVD/BlueRays. Today, the industry is in flux with nonvolitile memory just invented. We want a super-simple block device interface for non-volitile memory and for what is currently USB memory sticks, but only if they can be made without bad blocks. I don't think we want to deal with bad block memory, so maybe we will not do NV-memory. The standard TempleOS desktop will require a hard disk.
|
||||
|
||||
There will be minimal commands: READ_BLOCK, WRITE_BLOCK, GET_CAPACITY, GET_MODEL, GET_SERIAL_NUM, and EJECT.
|
||||
|
||||
We want a CPU mode with virtual IO port addresses similar to how paging creates virtual memory addresses. We want a 65536 word look-up table that converts virtual IO port numbers to physical IO port numbers. There will be a standard IO port configuration, so port numbers can be fixed in the code. We want the primary hard drive on one set of ports and the primary CD/DVD/Blu-ray on another set of ports. Choose a contiguous set of IO ports.
|
||||
|
||||
Meanwhile, a complicated PCI interface can be designed along-side the TempleOS interface for Windows and Linux. It would almost be possible to carry-on separate lives, however, the super-simple serial requires getting rid of USB since super-simple serial is a new hardware standard. People can add USB ports with a PCI device card.
|
||||
|
||||
God said He wants single audio voice for the sound. I think we want a word-sized IO port for period with zero causing it to be off. The period should allow for 20Hz to 20,000 Hz. The PIT period register for PC speaker seems okay, whatever it is.
|
||||
|
||||
The video will be a linear frame buffer 640x480 16 color with one-byte-per-pixel even though it is only 16 color with is 4-bit. Perhaps, we have a interrupt to sync with the refresh.
|
||||
|
||||
I am tempted to help amateur hardware device designers by making the hardware interface for the PC simple. I have fond memories of 1993, when I made a wire-wrapped ISA data acquisition card which plugged into my 486 and had some analog-to-digital and digital-to-analog convertors. I am not designing a bus. Earlier, I said the super-simple high speed serial port replacement could be USB-like in hardware as long as the software driver interface was simple like old school RS232 serial ports. Requiring a complicated hardware handshake raises the bar, slightly, for the lowest level hardware designers. Most people will be connecting a microcontroller or something that already has a serial communication design, but if it's not a problem, maybe we should keep it simple at all stages. It was nice putting an oscilloscope on my serial port wires.
|
||||
|
||||
The original PC had general purpose digital IO through the parallel port. That was fun. I have enough battles to fight, so I'll leave being a savior to hobbiest hardware engineers to somebody else.
|
||||
|
||||
Digital cameras will be super-simple high speed serial, but TempleOS is forever limited to 16 colors and multimedia is banned because large files being loaded into memory fragments memory, so cameras are somewhat unwelcome. I have enough problems without making the Brits anxious about autonomous gun turrets and killer robots. The reason I say cameras will be super-simple serial is because we are replacing USB ports with super-simple serial. Windows/Linux will have only super-simple serial ports unless people buy a USB PCI expansion card. So, the digital cameras will be super-simple serial.
|
||||
|
||||
|
||||
$FG,5$$TX+CX,"Version One"$$FG$
|
||||
|
||||
We will make a spec for a $$4,000, perfectly standardized, cryogenically-cooled, monster desktop PC. It will have 16 cores, integrated 4K graphics, and, hopefully, 6 Ghz continuous operation. Perhaps, 64 Gig of RAM will be standard? God said to help to poor buy them. It is pointless to have a high powered machine if other people have wimpy machines and cannot run programs you write. Therefore, everybody in the developed world will buy a Standard TempleOS IBM PC over the next ten years, so that will be a quantity of 400 million, perhaps. God said to pay the US national debt with the revenue. We will standardize everything, not just the TempleOS related items. The display will be 4K (and of course 640x480 16 color) and no others. Everybody gets just one monitor, unless you buy special PCI cards. Everybody gets two speakers, a headphone, a mic and a webcam. We make the audio one sample rate and one sample size, but TempleOS still gets just a square wave. (HD Audio is really screwed-up and requires complicated artificial intelligence, just to route output to speakers.)
|
||||
|
||||
The Standard Temple IBM PC will be a full-sized tower. We should set the size at exactly 2.5 feet by 1.5 feet by 1.5 feet as in the $LK,"Exodus,25:10-10",A="BF:Exodus,25:10-10"$ for all time. If there is extra room, make a storage shelf for DVDs. We do not want a race-to-the-bottom, shrinking the size. Instead of making it smaller, make it more powerful. We want to remove all cost pressure from making things small. It must have a CD/DVD/Blu-ray drive. We need a network connection, possibly implemented as a super-simple high speed serial device. What about standard monitor and speakers? The C64's success was partially due to wide spread, completely standard, hardware. I think TempleOS will not do bad block devices, so we need a hard drive, not just NV-memory or SSD.
|
||||
|
||||
TempleOS will have the priority over Windows or Linux on hardware decisions. We could make it heterogenious multicore. I think we want 16 non-hyperthreaded cores. Core#0 is the only full-featured core needed. The other cores will have long mode, but not some of these: real mode, protected mode, ring-3, paging, interrupts, in/out port instructions, SSE instructions, MMX instructions. This $LK,"Graphics Job",A="FI:~/Web/TAD/GraphicsPerformance.TXT"$ is what to optimize for.
|
||||
|
||||
God said Intel should do a simulation of heat produced by gates and try spreading-out the heat producing gate circuits on the chip.
|
||||
|
||||
God said Linux's Wine should replace Windows. We will install a standard software set-up on all Standard Temple IBM PC's.
|
||||
|
||||
|
||||
$FG,5$$TX+CX,"Usage"$$FG$
|
||||
|
||||
TempleOS is primarily for user developers, like the Commodore 64 was. I created a total of 50 Meg of content over ten years, so you shouldn't need much room, either. The installed hard drive space should stay small because the resolution is low, multimedia is banned, 3rd party libraries are banned, and applications can be distributed with ISO files or DVDs.
|
||||
|
||||
The ROM will have a command that copies the ROM onto the hard drive, creating identical C and D partitions, so you can have fun modifying TempleOS. You will have confidence you can fix it easily if you break it. It should be able to run everything from just the ROM, too. You will need to specify a /Home directory that is not in the ROM, but on the hard drive.
|
||||
|
||||
The standard set-up will be a C primary drive and a D back-up drive. Keep the size on each hard drive under 512 Meg and periodically copy all of C to D, so they stay mirrored. The file manager and other programs read the entire directory structures, so too many files causes problems (unbearably slow). Third party software should be distributed as ISO files or DVDs, like $FG,4$$TX,"TextAdventure.ISO",HTML="https://github.com/jwhitham/frotz"$$FG$. No 3rd party libraries are permitted because they circumvent the intent of the 100,000 line of code limit which is keeping it cognatively small enough to see the light at the end of the tunnel and easily master everything. Therefore, 3rd party ISO files must bring all required software components with them, except what is found in the TempleOS ROM.
|
||||
|
||||
The Temple PC will stay unchanged for seven years at a time. The Bible speaks of a seven year release in $LK,"Deuteronomy,15:1",A="BF:Deuteronomy,15:1",HTML="http://www.biblegateway.com/verse/en/Deutoronomy%2015:1"$. The Commodore stayed unchanged for many years and people became intimately familiar with every aspect.
|
||||
|
||||
Having all your 3rd party software on separate DVDs or ISO files and TempleOS running from a ROM, keeps it delightfully simple so you have complete understanding of what is going on. You will have complete confidence and it will be a joy to use. 3rd party applications can store saved data files into your /Home hard drive directory.
|
||||
|
||||
$HC,"<object width=\"640\" height=\"520\"><param name=\"movie\" value=\"http://www.youtube.com/v/bs_jcTuwPKo\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"http://www.youtube.com/v/bs_jcTuwPKo\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" width=\"640\" height=\"520\"></embed></object>"$
|
||||
|
||||
I thought 2.5' x 1.5' x 1.5' was ridiculously big, but it looks like it is reasonable for super-cooled refrigeration systems!
|
||||
$FG,8$
|
||||
* "Commodore 64" was a trademark of Commodore Business Machines.
|
||||
* "Linux" is probably a trademark owned by Linus Torvalds.
|
||||
* "Windows" is a trademark of MicroSoft Corp.$FG$
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
$WW,1$There are no streams in the traditional sense. The cmd line output gets sent to the cursor location of a document being edited and by using cursor keys, text can be injected all over the document. $LK,"Sprites",A="HI:Sprites"$ can be injected and are not serialized! Furthermore, the input can come from triggering macro widgets. See $LK,"Doc Overview",A="FI:::/Doc/DolDocOverview.TXT"$ and $LK,"Doc Routines",A="HI:DolDoc"$.
|
||||
|
||||
If you had a remote term and sent key $LK,"Scan Codes",A="MN:SC_INS"$, the user would press $FG,2$<CTRL-m>$FG$ to access his $FG,2$Personal Menu$FG$ to trigger his macros. However, the local $LK,"::/Home/PersonalMenu.TXT"$ might differ from the remote, causing loss of sync between local and remote sessions. Also, the window size of local and remote might differ, so word-wrapped text would be different. Injecting output text with different windows sizes would cause remote and local documents to not be in sync.
|
||||
If you had a remote term and sent key $LK,"Scan Codes",A="MN:SC_INS"$, the user would press $FG,2$<CTRL-m>$FG$ to access his $FG,2$Personal Menu$FG$ to trigger his macros. However, the local $LK,"~/PersonalMenu.TXT"$ might differ from the remote, causing loss of sync between local and remote sessions. Also, the window size of local and remote might differ, so word-wrapped text would be different. Injecting output text with different windows sizes would cause remote and local documents to not be in sync.
|
||||
|
||||
See $LK,"Char Overview",A="FI:::/Doc/CharOverview.TXT"$ and $LK,"Char Routines",A="HI:Char"$.
|
||||
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ Bits 16-20 Signed X pos shift val
|
||||
Bits 21-25 Signed Y pos shift val
|
||||
Bit 28 $LK,"Blink",A="MN:ATTRF_BLINK"$
|
||||
Bit 29 $LK,"Invert",A="MN:ATTRF_INVERT"$ed (Swap foreground and background)
|
||||
Bit 30 $LK,"Selected",A="MN:ATTRF_SELECTED"$ (XOR colors with FF)
|
||||
Bit 30 $LK,"Sel",A="MN:ATTRF_SEL"$ (XOR colors with FF)
|
||||
Bit 31 $LK,"Underline",A="MN:ATTRF_UNDERLINE"$
|
||||
|
||||
$LK,"GrUpdateTaskWin",A="MN:GrUpdateTaskWin"$() calls $LK,"DocUpdateTaskDocs",A="MN:DocUpdateTaskDocs"$() which calls $LK,"DocRecalc",A="MN:DocRecalc"$() where the document text is plotted into $LK,"gr.text_base",A="MN:CGrGlbls"$. Then, $LK,"GrUpdateTextBG",A="MN:GrUpdateTextBG"$() and $LK,"GrUpdateTextFG",A="MN:GrUpdateTextFG"$() render the $LK,"gr.text_base",A="MN:CGrGlbls"$ onto $LK,"gr.dc2",A="MN:CGrGlbls"$, a raw graphic bitmap.
|
||||
|
||||
+10
-8
@@ -8,7 +8,7 @@ $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/HomeKeyPlugIns.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,"~/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/DVD and use $LK,"Mount",A="MN:Mount"$() to mount your hard drive.
|
||||
|
||||
@@ -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/HomeLocalize.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:~/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/HomeLocalize.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:~/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/HomeSys.CPP,ACInit"$() in $LK,"::/Home/HomeSys.CPP",A="FF:/Home/HomeSys.CPP,ACInit"$.
|
||||
* You can permanently disable $FG,2$AutoComplete$FG$ commenting-out $LK,"ACInit",A="FF:/Home/HomeSys.CPP,ACInit"$() in $LK,"~/HomeSys.CPP",A="FF:/Home/HomeSys.CPP,ACInit"$.
|
||||
|
||||
* Boolean expressions $BK,1$not$BK,0$ in $FG,2$if$FG$ stmts don't have short circuit logic and are compiled inefficiently.
|
||||
|
||||
@@ -69,13 +69,15 @@ $FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* Use $FG,2$<CTRL-ALT-a>$FG$ to enter an extended ASCII char.
|
||||
|
||||
* Use $FG,2$<CTRL-ALT-f>$FG$ to toggle between $LK,"Std Font",A="FI:::/Kernel/FontStd.CPP"$ and $LK,"Cyrillic Font",A="FI:::/Kernel/FontCyrillic.CPP"$.
|
||||
|
||||
* Use $FG,2$<CTRL-ALT-s>$FG$ will capture the screen as a sprite on the clipboard. You can save the cmd line doc as text with $FG,2$<CTRL-a>$FG$.
|
||||
|
||||
* You can save a sprite as a $FG,2$.BMP$FG$ file in $FG,2$<CTRL-r>$FG$ on the Sprite BitMap Menu.
|
||||
|
||||
* 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/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.
|
||||
* There are handy functions--$FG,2$F(),R(),FD()$FG$ and $FG,2$RD()$FG$ which are defined in $LK,"~/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.
|
||||
|
||||
@@ -117,11 +119,11 @@ $FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* Using a sub-int array, $FG,2$i.u8[3]$FG$, for example, will force a local var to non-reg.
|
||||
|
||||
* 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.
|
||||
* You can delete the $FG,4$~/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/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.
|
||||
* The editor's sel-text mechanism allows for disjoint portions of sel text. This is a feature, not a bug -- you can cut-and-paste disjoint text.
|
||||
|
||||
* $LK,"cnts.time_stamp_freq",A="MN:CCntsGlbls"$ is continuously calibrated. Be careful because expressions might decrease. Take a snap-shot, like this: $FG,2$timeout=$LK,"GetTSC",A="MN:GetTSC"$+$LK,"cnts.time_stamp_freq",A="MN:CCntsGlbls"$ x seconds;$FG$ and compare against $LK,"GetTSC",A="MN:GetTSC"$(). I recommend just using $LK,"tS",A="MN:tS"$ or $LK,"cnts.jiffies",A="MN:CCntsGlbls"$.
|
||||
|
||||
@@ -141,7 +143,7 @@ $FG,2$Merge(\"C:/*\",\"D:/*\",\"+r+d\");$FG$ to check my changes.
|
||||
|
||||
* $LK,"ZipRep",A="MN:ZipRep"$() can highlight src files with lots of redundancy.
|
||||
|
||||
* With $FG,2$sub_switch_start$FG$/$FG,2$sub_switch_end$FG$, common trailing code is fast. Common leading code is slow.$FG$
|
||||
* With $FG,2$start$FG$/$FG,2$end$FG$, common trailing code is fast. Common leading code is slow.$FG$
|
||||
|
||||
* The first line of the $MA-X+PU,"Psalmody",LM="#include \"::/Apps/Psalmody/Run\"\n"$ $LK,"HolyC",A="FI:::/Doc/HolyC.TXT"$ song files is a comment with a category recognized by $LK,"JukeBox",A="FF:::/Apps/Psalmody/JukeBox.CPP,JukeBox"$(). The categories are $FG,2$"no nothing"$FG$, $FG,2$"has words"$FG$, $FG,2$"has graphics"$FG$, or $FG,2$"special"$FG$. The third character in the song comment is a digit rating number, shown in $LK,"JukeBox",A="FF:::/Apps/Psalmody/JukeBox.CPP,JukeBox"$(). You can set the song rating in $LK,"JukeBox",A="FF:::/Apps/Psalmody/JukeBox.CPP,JukeBox"$() by pressing $FG,2$0$FG$-$FG,2$9$FG$. You can press $FG,2$<DELETE>$FG$ to delete songs.
|
||||
|
||||
|
||||
+5
-4
@@ -7,7 +7,7 @@ $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,"80,590",D="DD_TEMPLEOS_LOC_OFFICIAL"$ 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"$ 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,"80,120",D="DD_TEMPLEOS_LOC_OFFICIAL"$ 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"$ 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 resing 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"$.
|
||||
|
||||
@@ -70,11 +70,12 @@ $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/HomeKeyPlugIns.CPP"$. You can customize them.
|
||||
The $FG,2$ALT$FG$ keys are defined in $LK,"~/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.
|
||||
$FG,2$<CTRL-ALT-t>$FG$ new terminal window.
|
||||
$FG,2$<CTRL-ALT-x>$FG$ kills a window.
|
||||
|
||||
$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$.
|
||||
$LK,"Find",A="MN:Find"$() is your best friend. There's a wrapper function called $LK,"F",A="MN:F"$() in your $FG,2$~/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$.
|
||||
|
||||
|
||||
+1
-1
@@ -39,4 +39,4 @@ $FG,5$Escape$FG$ For macro's, send an $FG,2$<ESC>$FG$ char to exit before runnin
|
||||
|
||||
$FG,5$Refresh Data$FG$ updates $FG,2$$$DA...$$$FG$ entry continuously.
|
||||
|
||||
$FG,5$Html Link$FG$ stores a link which will be embedded if you generate a html version of a document with $LK,"::/Demo/ToHtmlToTXTExample/ToHtml.CPP"$.
|
||||
$FG,5$Html Link$FG$ stores a link which will be embedded if you generate a html version of a document with $LK,"::/Demo/ToHtmlToTXTDemo/ToHtml.CPP"$.
|
||||
Reference in new issue
Block a user