Message board for the users of flat assembler.
> OS Construction > FOOL (Fool Object Oriented Library)
this is a library develloped for assembly graphic/system programming.
The main goal of this project is to provide a cross platform system with a special set of structures letting the applicaitons and data being altered at run time, and fragments of any code/data being shared by any application or data from other parts.
This is object oriented in any aspect, data, functions, applications and even the library itself are objects and can be nested as needed.
here is the logo of this project
very cool isn't it?
Here are links to specific items in this lib.
bootwriter, BW06 an application to write raw data on hard drives, support virtual drives, files and so on. This application should compile and work, if not, it means fool have a regression.
[url=]Tetris[/url] this version is made for the birthday of tetris, it took 3 days to made it as it is now. Add the support for beep.
[url=]fool3D[/url] this is the version for 3D support, it will be merged into fool (or fool will be merged into fool3D) in order to have 3D/2D/xD programming accessible from any line of fool code.
[url=]foolW[/url] this is the version of fool for windows, it supports win32 api an give you simplified interface to basic functions.
it also give you the possibility to modify the code at run time (because fool is designed to be runtime self modifiable), fool/fool3D will be merged into foolW
[url=]foolOs[/url] this Proof of concept is the goal of fool at it's begining, being an obejct oriented os able toself modify itself at runtime, and give user the experience to have a total control of the machine.
foolg this is the generic version of fool, for the moment, it is in development under windows, and the fool code inside should be the same used in foolos, the goal there is to get the minimal win32 interface in order to simulate the computer needed by foolos. next, it will be ported in linux and propagated to every fool versions.
[url=]foolGl[/url] this is the version with opengl support, will be factorised with fool3D in order to give a unique interface for any 3D development.
[url=]foolTr[/url] this is the full fool langage, based on very atomic objects, here, any instruction is fool based. it introduce the concept of "Real Programming Langage" because any item can call any other item and then, give the possibility to build items from items. next step will be to expand the function list with complex items, and give a real New instruction.
click here to download fool.zip from fasmboard, need to be logged
click here to download fool.zip from fool.asm4u, no need to be logged
foolos is a real project now
Last edited by edfed on 21 Jun 2019, 15:00; edited 53 times in total
|24 Apr 2008, 16:30||
as i am building a shell, i want to have some ideas form fasm users.
what commands and syntax do you prefer?
the shell will permit to explore trees, edit trees, execute programs, and the best, execute commands like a script. then, as i am not informatician, and used to the GUI, i invite you to list some good stuff you want to see in this shell.
don't speak about DOS or LINUX commands, just about What do you prefer to have for intuitive use. it can be inspirated from existing command lines, but i'd prefer to have a really new vision of shell, more asm oriented.
i have a little idea about the navigation, a sort of intuitive command, not cd or ls oriented, but directlly edit the desired path and hit enter
the comand path used to remember the current path in comand line.
and to change the current node, just change teh path and hit enter.
it will be updated in the path buffer, and remembered with path command.
existing comands are not definitive, for example, the x, q, quit commands can be reassigned.
About the syntax, what about the fasm syntax?
will create a new box in the current path.
the path is a reference in the tree.
the tree begin at [desk], [desk] hold the start of the tree.
[desk] is a value used by main, contained in the system memory of the application.
an application will be affected to each 1 MegaBytes, oriented in a V86 mode, supporting the vesa high resolution as a composition of little screen.
all screens will be decomposed in smaller screens.
then, it is a tree.
a visual file system.
the problem now is ot create new objects in this struture.
Last edited by edfed on 23 Apr 2019, 22:30; edited 4 times in total
|25 Apr 2008, 21:43||
as i coded some gui for my entertainment, i sudently saw this error:
txt x y xl yl txt colors font
put x y xl yl bmp colors
box x y xl yl colors
when i started to add the fader and buttons functions, it appears to be a problem.
because theses functions will call a text, an image and a rectangle
and the "color" parameter have to be always after the coordinates, to keep a compatibility, and if an item cannot access it's onw structures like image or text, it can display a coloured rectangle, this is interresting in case of html parsing with access problems to the ressources.
it took me only 1 hour to modify everything in my poor testdemo code to work with this update.
but now, it is more friendly to create complex graphic objects.
but why do i create this librairy? does anyone use it's functions?
i create this librairy because it is my vision of intelligence.
something with a general structure like grammar, geometry, objects.
and something platform independant.
i need to create a set of addressing modes for fool. a feature that can use parameters as pointers, values, files, structures, etc etc.
the finality is to save memory and create a new instruction set.
the proof is:
i use a functions list.
each function have a pointer and this pointer have a fixed position inside the function list.
the flist is created during compile.
in order to use less memory, i want to create a sort of transparent initialisation layer.
something you don't have to do while coding your application.
the OS is a set of functions loaded at a reserved location in ram or cache.
for the moment, all my functions occupies less than 64k, largelly less than code cache on my PIII.
this OS have a function list located at the start of it's segment.
each pointer is a composed of:
function's id, function's far pointer.
functionlist dd size
when creating your application, you will create a list of imported functions as this:
f dd size
.func1 dd fid1,0
.func2 dd fid2,0
then, when the application is loaded, to keep transparency, the OS will copy
the pointers from it's list.
but as MS DOS don't do that, i include all the pointers and functions inside the application.
and i don't want to code on RM all my life.
|25 Nov 2008, 22:06||
new feature with fool, and evolution.
now, it have the support for mouse and keyboard can emulate mouse "transparentlly".
CTRL + M toogle the mouse beetwen key and normal mode.
normal mode uses int33h for the moment.
buttons call objets when pressed and / or released.
zone call objet [esi+zone.event] when mouse hotspot is inside zone [x,y,xl,yl]
the mouse is active by default in the comheader.inc file.
to use the mouse, just read the coordinates, deltas, and status in mouse structure.
mouse dd f.int33,.x,.y,.dx,.dy,.color,.bmp,.status,.wheel,.item
added the function f.grab, in order to grab graphic items.
2Dmap.asm is a test, to create a very big game map. more than 1000000*1000000 is very possible.
testfpu.asm is an attempt to mix real32 and fool, in order to make some precise computations.
justlib.asm is the minimal code required to use the comheader under dos.
oscilloscope.asm is an application to display some ram in a signal form.
it is also the start of a "win98 like" gui definition.
view application is a sort of hexadecimal reader in devellopment.
it will be the same base as oscilloscope, and will be the base of file system viewer.
update and backup of fool.
it will be the official package on fasm board. for THE REAL OS CONTEST.
this backup is more for me because tests will be very dangerous theses next days.
to use correctlly the system and ad applications, i will create the .app file type.
it will be a sort of MZ, but a little different.
the header will contain position and size of the local flist (updated at load time), and the offset of entry, generaly a gnode.
to execute these, i will create the anode, to execute applications into other segment.
then it will be possible to load external applications, with restricted access if coded exclusivelly in fool style.
Last edited by edfed on 20 Nov 2009, 16:51; edited 1 time in total
|11 Jan 2009, 23:49||
as i am building a "real" interface, i need items to be handled by any user item.
theses "user items" are mouse, keyboard or any human device that will reflect the human action.
when i tell this, it is mainly to remember that computers don't need a system but we, we need one to use the power of this machine.
the keyboard can be avoided for many purposes because of need devices.
then, a human device will be used to drive the system.
the human device will integrate a set of functions.
two or more families of devices will be possible. like pointing, keyboard, microphone, etc...
theses families will have a common main structure.
one human peripheral detected will install itself as a system object.
the system will give the hability to applications to use transparentlly the devices.
and the main major change is to reorganise the execution process.
basically, the execution process is to dive into the fool tree using "main" item, and dive more and more with "gnode", "node", "xnode".
but now, a change occured, i decided to add a new item able to call items.
the buttons and screen zones.
(maybe later, the keyboard will too..)
it gives me some problems but nothing very sad, just a priority problem.
Last edited by edfed on 14 May 2009, 21:57; edited 2 times in total
|09 Apr 2009, 18:05||
Maybe some screenshots may help, this topic .
|09 Apr 2009, 19:19||
i have the honor and regress to anounce that edfed will take a very long rest.
then, i'll stop all my coding/electronics/researches activities to travel and live a little more.
i lost my job about the power supply 1 week before it's achievment.
a little fed up by this stuff.
i'll ride my bike over the french roads.
i hope i'll recover the passion for coding after that.
i post the very last state of my dear FOOL machine just for the eventuality of material loss of my PC.
hope it will be there when i'll be back.
Last edited by edfed on 20 Nov 2009, 16:51; edited 1 time in total
|14 May 2009, 21:56||
Good luck edfed. Enjoy your travels.
|14 May 2009, 22:02||
Sorry to hear that edfed, go recharge your batteries and come back with some new great ideas
|15 May 2009, 14:28||
now, bootwriter0.6 for dos available.
it needs a little fix to select drive and update the parameters accordingly to the drive selected.
after, the lib itself is still the dumb version, but it don't limit the functionality of bw06.
be carefull when using this utility. for the moment, it is limited on floppy drive 0, but when drive selection popup will work, it will be able to write to any bios drive. and on usb pen under win98.
Last edited by edfed on 23 Nov 2009, 00:01; edited 2 times in total
|20 Nov 2009, 16:39||
Nice - Glad to see your making progress!
|20 Nov 2009, 20:06||
i got really big idea for you, coz i knew u r the guy who is capable to produce the output
mind if i chip in some idea?
|21 Nov 2009, 02:29||
boot writer is an application made all in fool and a little assembly, to run under any DOS compatible environment.
the gui is simple.
first, the title bar:
displays a button to exit, and the name of the application.
just under this bar, the first form.
this edit form is the path of the file to load in the DOS file system.
to load the file, you should click on the form.
! when you load the file, the button "write it!" in the left down corner will display a "pixel image" of the file content, it is a cool trick i find usefull because it lets you verify the content with just one single look.
the second form lets you choose a drive detected via BIOS int13h.
valid drives will show their geometry in the drive popup window.
ones you selected the destination drive, you should verify the first sector coordinate in CHS.
for BOOT sector, all field should be C=0 H=0 S=1
for the second sector, CHS=0 0 2
the down right corner shows the size of the file in real sectors, and in bytes.
a single boot sector is 200h bytes, and 1 sector.
when you click on write it button
here is the screen shot of bootwriter application with ramview application.
bios int 13h (write sectors),
dos int 21h (open & read file),
dos int 33h (mouse driver),
todo list for the next version (0.7):
keyboard useage of all this application, and dependances, possibility to edits every forms, by selecting them with some tab (or a surprise. ..)
possibility to select the sectors in LBA form (Hexa or decimal), with automatic CHS<->LBA update.
possibility to view and edit content of file in a choosen editor.
possibility to load file from sectors, file system, file editor.
possibility to store file to sectors, ram, file system, file editor.
caution, be carefull with bootwriter, you can lose your datas forever!
But be confiant, i added a confirmation button.
a big one that should be clicked to launch the process.
Last edited by edfed on 05 May 2011, 13:35; edited 8 times in total
|21 Nov 2009, 11:35||
if you want to play a little, there is a sort of "how long can you survive", but it needs a speed in Pixels/s for balls, with int8.inc, it is possible to have the same speed on any compute.
the basic desktop in 320*200.
the desktop during a zoom test.
it is a little better each time i update it.
|18 Jan 2010, 17:26||
as it is the fool's day, i decide to post a up for the fool lib.
then, for those who don't know how to use fool:
alt+a for zoom out
alt+z for zoom in
grab the window will allow to move it on the screen.
while zoom, it will pt it alway at cursor position, i wait a little to fix the zoom in and out hot spot in the middle of the screen.
to test applications in applications folder:
put a line at the begining like this one:
and you will have the application ready to use.
to include the same application in shell.asm, comment the line described above
remember, everytime you want a stand-alone fool application, you need to include comsys.inc, then, it will include all the complete lib.
and then, it will limit the size for application to some 21kilobytes. but it is lagelly enough because fool doesn't need a lot of code to be exploited.
comsys.inc fits in 42799bytes ones it is compiled.
the windowed application bootwriter fits in 3214 bytes, including a lot of data buffers like the preview bitmap the total compiled size is 46013 bytes. 42799 bytes for the lib.
of course, the lib will be optimised one day, as it is in the prealpha devellopment stage, i don't seek for size optimisatoin, but only working version, full of bad tricks (sham on me), but one day, i will try to fit the lib in only 10 or 20kilobytes, i think it is possible, but it is not the goal for the moment.
there are some extra segment capability that can allow the useage of more than the 64k code segment.
the magic of:
then, 8 bytes to define a memory zone in real mode.
there are very few functions in fool that needs to be modified to be ported to PM.
the lib is always in expansion, and each time i cross a problem, i try to solve it, even it take me many mounth of code to fix. ones it is fixed, it will work without any bug.
but as it is code, it is not bug incompatible, some care should be taken when designing applications or functions.
read the whatsnew.asm file for more infos.
happy fools day! and thanks for those who down my dear lib.
many fucntions can be converted to use with different calling conventions. then, you can modify them to test in your code.
enjoy, and thanks again.
3 functions are added:
will crypt a memory zone (fptr) with a random seed, initialised with a key
the seed can be up to many bits (tested ok with seeds of 60000 *8bits) and a very long initialisation key, up to as memory you have in the segment. seed too long will be very slow, key are threaded only one time for a crypting, seed is used for each byte to crypt. using XOR
will crypt a memory zone (fptr) with a fixed key, using XOR instruction on bytes.
save a file using dos INTs, if the file still exist, it will overwrite it, if the file doesn't exist, it will create it.
New update of fool with corrections to work with fasm 1.69.
crypt is bugged, then, bypassed with a ret for the moment. it needs a complete rewrite to work well.
crypt is debugged, then, it works very well.
i've tested it with many combinaisons of seeds/keys. and it always give an acceptable result.
up to 32000 bits seeds are acceptable, but are very slow.
develloping a vectorial pong game using FPU. for the moment, only the ball is vectorial, after, i need to do some advanced vectorial maths to detect and compute collisions.
added tetris project.
modifiction to apply in applications using kb.otk and kb.tmk.
simplified comsys.inc for "applications/tetris.inc" to compile in less than 64k.
added life_game like effect as an application, modified some files, cleaned the fool archive, etc...
you can see the useage of the CPU in %, and the free cpu time in %
by toogling the button on the right of fps indicator, you can switch on or off the vsync polling.
it will then use 100% of the cpu, or let the cpu do pauses during the time between the last effective code and the next vsync.
during vsync, the cpu cannot do anything else than wait.
the moskito application is an idea for a game where you will have to crutch randomly flying moskitoes with a tap.
and many other things there, and to come...
added 10 conditional items.
CC is condition code, and can be
if var1 CC var2, do func
var1 and var2 are pointers to values, if pointer(s) = 0, nothing done at all.
|01 Apr 2010, 09:41||
< Last Thread | Next Thread >
Copyright © 1999-2020, Tomasz Grysztar. Also on YouTube, Twitter.
Website powered by rwasa.