Login [Register]
Don't have an account? Register now to chat, post, use our tools, and much more.
So for like about the past week I have been working on a shell. The original goal was to make relocatable shared libraries on the CE... but I guess I kind of got carried away. Here's a list of features:

Features:
  • Running ASM, C, and Basic programs directly, and they can be archived or not
  • [Un]Archiving, deleting, hiding programs
  • Catalog-like searching for programs for quick lookup
  • Ability to block the [ON] key when running Basic programs
  • Support implemented for relocatable shared C and ASM libraries
  • Customizable icons for all file types
  • Battery indicator and clock
  • Customizable colors/theme
  • Available French version translated by Adriweb
  • ...


Download: Cesium

And some screenshots, courtesy of Adriweb: (NOTE: The name has been changed from CesiumOS to Cesium)
nikky wrote:
maybe name it "NikkyCE"




As I did write this whole shell in just about a week, it needs some beta testing. Of course, more features are probably going to be implemented, but this is not an all-inclusive shell like DoorsCE will be. It provides basic functionality, keeping it slim, and currently only provides library support to C and ASM programmers, of which have yet to be fully written. The source is included for your enjoyment, and is documented in parts where it makes sense. There are numerous optimizations, but that is why it is open source, licensed under the BSD 3 Clause. Wink

In addition, it automatically organizes your programs much faster than MirageOS ever could, and looks kind of nice, in my opinion, I guess.
If you want to make custom icons for your basic programs, you can use tifreak's DCSE icon generator. Use the following format:

For example:

Code:
::DCS
:"256 byte hex string"


To make custom icons for your assembly programs, start your program with the format as follows: (It uses xlibC like colors, where H==L)


Code:
 .org userMem-2
 .db tExtTok,tAsm84CeCmp
PACMAN_HEADER:
 jp PACMAN_START
 .db 1                        ; Signifies a Cesium program
 .db 16,16                 ; Width, Height of sprite
 .db 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
 .db 255,255,255,255,255,255,192,192,192,192,255,255,255,255,255,255
 .db 255,255,255,255,192,192,192,192,192,192,192,192,255,255,255,255
 .db 255,255,255,192,192,192,192,192,192,192,192,192,192,255,255,255
 .db 255,255,192,255,255,192,192,192,192,255,255,192,192,192,255,255
 .db 255,255,255,255,255,255,192,192,255,255,255,255,192,192,192,255
 .db 255,255,010,010,255,255,192,192,010,010,255,255,192,192,192,255
 .db 255,192,010,010,255,255,192,192,010,010,255,255,192,192,192,255
 .db 255,192,192,255,255,192,192,192,192,192,255,192,192,192,192,255
 .db 255,192,192,192,192,192,192,192,192,192,192,192,192,192,192,255
 .db 255,192,192,192,192,192,192,192,192,192,192,192,192,192,192,255
 .db 255,192,192,192,192,192,192,192,192,192,192,192,192,192,192,255
 .db 255,192,192,192,192,192,192,192,192,192,192,192,192,192,192,255
 .db 255,192,192,255,192,192,192,255,255,192,192,192,255,192,192,255
 .db 255,192,255,255,255,192,192,255,255,192,192,255,255,255,192,255
 .db 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
 .db "Pac-Man Version 1.1",0  ; string to display in the Cesium status bar
PACMAN_START:
...
Your code here


Congratulations on being the first to reach this important milestone, and for kicking my backside into action on Doors CE. I know this will be really bad for my upcoming paper deadline and my sleep schedule. Wink I have a few comments and questions:
1) Why not maintain the same BASIC header format as Doors C[S]E? Having a single BASIC header format would appear to be the best option to avoid having to already have a ridiculous variety of headers we each need to support.
2) One of the problems I've been trying to solve is bootstrapping the shell's first run. Do you use a BASIC program to do so, and then let the shell handle its own execution in the future?
3) I still want to work together; I wish we could meet on some common ground on working on Doors CE together. Smile
KermMartian wrote:
Congratulations on being the first to reach this important milestone, and for kicking my backside into action on Doors CE. I know this will be really bad for my upcoming paper deadline and my sleep schedule. Wink I have a few comments and questions:
1) Why not maintain the same BASIC header format as Doors C[S]E? Having a single BASIC header format would appear to be the best option to avoid having to already have a ridiculous variety of headers we each need to support.

Okay, I can totally do this. Smile

KermMartian wrote:
2) One of the problems I've been trying to solve is bootstrapping the shell's first run. Do you use a BASIC program to do so, and then let the shell handle its own execution in the future?

The BASIC program just has the Asm(pgrmCESIUM in it, and that's all. It recreates this program on each run to make sure it isn't deleted. Now for the fun part. pgrmCESIUM contains two programs, the loader and main program. On the first run, the original pgrmCESIUM is deleted, and then the loader is copied to it. The main program is copied into an appvar and then archived. On the runs after that, the loader is archived right when execution begins and is unarchived after the shell is executed. The loader relocates part of itself and then the other part from userMem in order to load the shell, and the shell itself relocates the reloader to appdata when it executes programs. Don't touch appdata unless you really want to have an epic crash Smile

KermMartian wrote:
3) I still want to work together; I wish we could meet on some common ground on working on Doors CE together. Smile

Sure, of course. I can help write routines and things you might need, and if you prefer to keep it closed-source, that is fine with me. Smile
Bug report:
Scrolling is very slow, changing TIOS time makes it slower.
willwac wrote:
Bug report:
Scrolling is very slow, changing TIOS time makes it slower.

I would recommend backing everything up, doing [2nd]-[DEL]-[ON]-Reset, and resending the OS and all relevant programs. If this has no effect, let me know! Smile
Feature request: a standard argv mechanism (preferably for BASIC too, but definitely for C/Asm)
elfprince13 wrote:
Feature request: a standard argv mechanism (preferably for BASIC too, but definitely for C/Asm)

I would totally love to implement this, but I am not entirely sure what you are getting at. Could you please detail it a little more? Thanks! Smile

MateoConLechuga wrote:
KermMartian wrote:
Congratulations on being the first to reach this important milestone, and for kicking my backside into action on Doors CE. I know this will be really bad for my upcoming paper deadline and my sleep schedule. Wink I have a few comments and questions:
1) Why not maintain the same BASIC header format as Doors C[S]E? Having a single BASIC header format would appear to be the best option to avoid having to already have a ridiculous variety of headers we each need to support.

Okay, I can totally do this. Smile

Fixed and re-uploaded Smile

MateoConLechuga wrote:
willwac wrote:
Bug report:
Scrolling is very slow, changing TIOS time makes it slower.

I would recommend backing everything up, doing [2nd]-[DEL]-[ON]-Reset, and resending the OS and all relevant programs. If this has no effect, let me know! Smile

Any luck with this issue? Smile
Wow, this is quite an achievement! This will totally help people with CE's, if all the topics about ASM program execution is any indication.

Now, I just wish I had a CE to beta test. :/
MateoConLechuga wrote:
elfprince13 wrote:
Feature request: a standard argv mechanism (preferably for BASIC too, but definitely for C/Asm)

I would totally love to implement this, but I am not entirely sure what you are getting at. Could you please detail it a little more? Thanks! Smile


Your standard entry point for programs should be akin to:

Code:

int main(int argc, char ** argv) {
    return 0;
}


This allows for reasonable terminal interfaces, file opening mechanisms, and all sorts of goodies, for the same reasons it's a standard everywhere else.

[edit]

Quote:

The function called at program startup is named main. The implementation declares no prototype for this function. It shall be defined with a return type of int and with no parameters:

int main(void) { /* ... */ }

or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared):

int main(int argc, char *argv[]) { /* ... */ }

or equivalent; or in some other implementation-defined manner.

If they are declared, the parameters to the main function shall obey the following constraints:

The value of argc shall be nonnegative.

argv[argc] shall be a null pointer.

If the value of argc is greater than zero, the array members argv[0] through argv[argc-1] inclusive shall contain pointers to strings, which are given implementation-defined values by the host environment prior to program startup. The intent is to supply to the program information determined prior to program startup from elsewhere in the hosted environment. If the host environment is not capable of supplying strings with letters in both uppercase and lowercase, the implementation shall ensure that the strings are received in lowercase.

If the value of argc is greater than zero, the string pointed to by argv[0] represents the program name; argv[0][0] shall be the null character if the program name is not available from the host environment. If the value of argc is greater than one, the strings pointed to by argv[1] through argv[argc-1] represent the program parameters.

The parameters argc and argv and the strings pointed to by the argv array shall be modifiable by the program, and retain their last-stored values between program startup and program termination.
elfprince13 wrote:
Your standard entry point for programs should be akin to:

Code:

int main(int argc, char ** argv) {
    return 0;
}


This allows for reasonable terminal interfaces, file opening mechanisms, and all sorts of goodies, for the same reasons it's a standard everywhere else.

That is more terminal-based, however, which would require some form of input. I'm more inclined to believe input falls on the program, but that might just be me.
Please keep the int return as well (though of course feel free to disregard its value in your shell). You should feel free to pass argc=0 and argv=null, or just argc=1, argv={"prgmNAME"}, so long as you are supporting the standardized entry point.
elfprince13 wrote:
Please keep the int return as well (though of course feel free to disregard its value in your shell). You should feel free to pass argc=0 and argv=null, or just argc=1, argv={"prgmNAME"}, so long as you are supporting the standardized entry point.

Okay, that makes sense. Perhaps I will add in option to input text to send in to the program as well Smile
Great work, and triple bonus points for making it open-source (albeit under a license which allows the making of proprietary derivatives) Smile
Nice work as always, Mateo! I imagine the information window (a nice touch, btw) could be a bit wider, possibly to make room for some icons regarding the filetype, etc., assuming filenames are still limited to 8 characters, at least.

And as Lionel says, thanks for releasing the source.
This looks fantastic, sir! And thanks for the plug!

I have to admit, it took some time to figure out what you were talking about with this highlight:

11:16 PM <saxjax> [MateoConLechuga] tifreak: Your icon program now has an icon! Smile

I look forward to throwing this at one of my CE's soon to test.
Does this progress mean work on Doors CSE 9 for 84PCE can begin?
Yes! Outstanding achievement, congratulations Mateo!
If needed, I might help with translating this to German (as you said there is a French version of it, I thought you might want to have it in multiple languages).
But as I already mentioned in SAX and other threads, unfortunately I only own a TI-83+ and so I won't be able to test this. Also, calculators other than the 83+ aren't really popular in Germany, so I don't think the translation would be widely used.
Bug report: Does not like basic programs to use Stop command: it will reset ram. I found out the hard way Surprised

Oh and by the way, this is awesome! Very Happy
andressevilla wrote:
Bug report: Does not like basic programs to use Stop command: it will reset ram. I found out the hard way Surprised

Yep, he knows about it and says he'll handle that later Smile

Same issue if you use ON, but for that, you can always use the ON Blocker from the settings.
  
Register to Join the Conversation
Have your own thoughts to add to this or any other topic? Want to ask a question, offer a suggestion, share your own programs and projects, upload a file to the file archives, get help with calculator and computer programming, or simply chat with like-minded coders and tech and calculator enthusiasts via the site-wide AJAX SAX widget? Registration for a free Cemetech account only takes a minute.

» Go to Registration page
Page 1 of 19
» All times are GMT - 5 Hours
 
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

 

Advertisement