flat assembler
Message board for the users of flat assembler.

Index > OS Construction > FOOL (Fool Object Oriented Library)

Thread Post new topic Reply to topic

Joined: 20 Feb 2006
Posts: 4330
Location: Now
edfed 24 Apr 2008, 16:30
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? Smile 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 Smile

Filesize: 10.82 KB
Viewed: 44927 Time(s)


Description: foolos
Supports keyboard
foolos.img no longer works in virtualbox
Apparently, oracle chaged something.

USE QEMU instead

Filename: foolos.zip
Filesize: 62.27 KB
Downloaded: 976 Time(s)

Description: contains my prng validated here http://www.cacert.at/random/
Filename: foolw.zip
Filesize: 38.94 KB
Downloaded: 1562 Time(s)

Last edited by edfed on 18 Mar 2023, 23:53; edited 56 times in total
Post 24 Apr 2008, 16:30
View user's profile Send private message Visit poster's website Reply with quote

Joined: 20 Feb 2006
Posts: 4330
Location: Now
edfed 25 Apr 2008, 21:43

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.

for example:

existing commands:
x, exit, q, quit to exit teh shell

help, h toggle the global help file

keymap toogle the keymap

rdtsc toogle the rdtsc application

null point the reply to null char

color %n% ,c %n% to change the color

path, p to set the comand line with the current path.

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?

function operand1,operand2,operand3,operand4,.,.,...

for example;
box x,y,xl,yl,c

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.

Description: 24/04/2019 current state of foolg. g stands for generic, not related to fasmg
Filename: foolg.zip
Filesize: 1.25 MB
Downloaded: 1275 Time(s)

Description: fool graphic render in windows, the starting point of generic fool implementation, based on foolos and floor demo from Alfonso Víctor Caballero Hurtado
Filename: foolg.zip
Filesize: 65.28 KB
Downloaded: 811 Time(s)

Last edited by edfed on 18 Mar 2023, 23:50; edited 6 times in total
Post 25 Apr 2008, 21:43
View user's profile Send private message Visit poster's website Reply with quote

Joined: 20 Feb 2006
Posts: 4330
Location: Now
edfed 25 Nov 2008, 22:06
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
dd fid1,ffp1,0
dd fid2,ffp2,0
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.
i don't want to code on RM all my life.

Last edited by edfed on 18 Mar 2023, 23:53; edited 2 times in total
Post 25 Nov 2008, 22:06
View user's profile Send private message Visit poster's website Reply with quote

Joined: 20 Feb 2006
Posts: 4330
Location: Now
edfed 11 Jan 2009, 23:49
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.

about files: bad idea, don't do it
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 18 Mar 2023, 23:55; edited 2 times in total
Post 11 Jan 2009, 23:49
View user's profile Send private message Visit poster's website Reply with quote

Joined: 20 Feb 2006
Posts: 4330
Location: Now
edfed 09 Apr 2009, 18:05
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.

Filesize: 17.17 KB
Viewed: 45569 Time(s)


Last edited by edfed on 14 May 2009, 21:57; edited 2 times in total
Post 09 Apr 2009, 18:05
View user's profile Send private message Visit poster's website Reply with quote

Joined: 08 Feb 2005
Posts: 1601
Location: web
Dex4u 09 Apr 2009, 19:19
Maybe some screenshots may help, this topic Smile.
Post 09 Apr 2009, 19:19
View user's profile Send private message Reply with quote

Joined: 20 Feb 2006
Posts: 4330
Location: Now
edfed 14 May 2009, 21:56
hello all.
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.

bye bye.

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
Post 14 May 2009, 21:56
View user's profile Send private message Visit poster's website Reply with quote
When all else fails, read the source

Joined: 24 Aug 2004
Posts: 20217
Location: In your JS exploiting you and your system
revolution 14 May 2009, 22:02
Good luck edfed. Enjoy your travels.
Post 14 May 2009, 22:02
View user's profile Send private message Visit poster's website Reply with quote

Joined: 08 Feb 2005
Posts: 1601
Location: web
Dex4u 15 May 2009, 14:28
Sorry to hear that edfed, go recharge your batteries and come back with some new great ideas Smile
Post 15 May 2009, 14:28
View user's profile Send private message Reply with quote

Joined: 20 Feb 2006
Posts: 4330
Location: Now
edfed 20 Nov 2009, 16:39
batteires charged.

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
Post 20 Nov 2009, 16:39
View user's profile Send private message Visit poster's website Reply with quote

Joined: 24 Aug 2007
Posts: 337
dosin 20 Nov 2009, 20:06
Nice - Glad to see your making progress! Cool
Post 20 Nov 2009, 20:06
View user's profile Send private message Reply with quote

Joined: 05 Oct 2006
Posts: 12623
Location: ˛                             ⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣Posts: 0010456
sleepsleep 21 Nov 2009, 02:29
hi edfed,
i got really big idea for you, coz i knew u r the guy who is capable to produce the output Smile

mind if i chip in some idea?
Post 21 Nov 2009, 02:29
View user's profile Send private message Reply with quote

Joined: 20 Feb 2006
Posts: 4330
Location: Now
edfed 21 Nov 2009, 11:35
Boot writer:

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),
fool library.

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. Wink ..)

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.

Description: unzip and execute with, or without parameter

>bw06.com [folder\file.ext]

exit with alt+F4
edit the path
load the file with enter

Filename: bw06.zip
Filesize: 17.65 KB
Downloaded: 804 Time(s)

Last edited by edfed on 05 May 2011, 13:35; edited 8 times in total
Post 21 Nov 2009, 11:35
View user's profile Send private message Visit poster's website Reply with quote

Joined: 20 Feb 2006
Posts: 4330
Location: Now
edfed 18 Jan 2010, 17:26

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.
Post 18 Jan 2010, 17:26
View user's profile Send private message Visit poster's website Reply with quote

Joined: 20 Feb 2006
Posts: 4330
Location: Now
edfed 01 Apr 2010, 09:41
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:

open shell.asm

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:
include '../comsys.inc'

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.

for example:
the windowed application bootwriter fits in 3214 bytes, including a lot of data buffers like the preview bitmap Smile 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:
.offset=0 ;word
.segment=2 ;word
.size=4 ;dword

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! Smile 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.

[edit] 25/apr/2010
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.

[edit] 30/apr/2010

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.

[edit] 09/may/2010

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.

[edit] 06/june/2010

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.

[edit] 19/july/2011
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...

[edit] 9/november/2011

added 10 conditional items.

IfCCdo var1,var2,func

CC is condition code, and can be

  • e, ne
  • l, nl
  • g, ng
  • a, na
  • b, nb

if var1 CC var2, do func
var1 and var2 are pointers to values, if pointer(s) = 0, nothing done at all.
Post 01 Apr 2010, 09:41
View user's profile Send private message Visit poster's website Reply with quote
Display posts from previous:
Post new topic Reply to topic

Jump to:  

< Last Thread | Next Thread >
Forum Rules:
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
You cannot attach files in this forum
You can download files in this forum

Copyright © 1999-2024, Tomasz Grysztar. Also on GitHub, YouTube.

Website powered by rwasa.