From 631099a53d929581debcbb717d9afd5ab15fb037 Mon Sep 17 00:00:00 2001 From: xamidev Date: Wed, 24 Jul 2024 15:08:39 +0200 Subject: [PATCH] Add: program: words version 1 --- iso/boot/kernel.elf | Bin 25720 -> 26192 bytes os.iso | Bin 501760 -> 501760 bytes src/kernel/kmain.c | 2 +- src/kernel/shell.c | 5 ++++ src/kernel/system.h | 3 +++ src/kernel/timer.c | 13 ++++------ src/libc/crypto.c | 24 +++++++++++++++++++ src/libc/crypto.h | 9 +++++++ src/programs/programs.h | 6 +++++ src/programs/words.c | 52 ++++++++++++++++++++++++++++++++++++++++ 10 files changed, 104 insertions(+), 10 deletions(-) create mode 100644 src/libc/crypto.h create mode 100644 src/programs/programs.h create mode 100644 src/programs/words.c diff --git a/iso/boot/kernel.elf b/iso/boot/kernel.elf index 8602aa2fe2693c51cfac1cb2ec14547b5b2e1ebd..a94e3f25cf198061eb0064ce164c656af642788d 100755 GIT binary patch literal 26192 zcmeHvdwf(yo^N&1fli2YgP^=Q2$6>n9svx>I0R@2LLiVtQH*V;`y|~-r#to|4;3VK z)buvN%nZ8Yt~%pu*U_spvpR^6(MT9^9A^zzcl7S)h+fo_>5N8=kU_NX_g8hQ`y`9b z?&sb=?&q^P$?sJC9`&nV{pweB>YO^KZ?RIBOVy>z=#J%JTT&c5f6-bV8jC>9vJb!hzCYIFyev#ng=H6;-(vRFw;#I z)6`tExg9s~(?BOUZe{Edk|`Q%xiw?$IawJG{RSd<8o=0UfCo3^VWcVk`eF5f zL-*>}0rulT0)IAuJkdygkAbEDZwGXO*^G3Et_Gn?0r`IbPC#Ze(jhYIgbdl+0~j-o zvFS#ctGLO$J^i3tz@K5{UoH3wXg0Kc6!^b3@~KU~O53pm`5@l|)x%SA_v z$a=Viy#|>D1!-R^pdANo>iLX4iM+9njK|V;m@^oA6f%p3$*4kv`)wX%o`lThMwyHa zsaPlm|6TCkH1f%BuchnpL8fC8V*|rw`qDC;kg1%^SpG1XYTXtE^rs+G1DQ3$WSR~3 zz73fuWUevFWb91YI|%-Z;6HBUlf4fMB`}jsL%$SHVT}4a<-3j1Op3EY@UELG#z2bK zEaHgxJHfvR{F%t7_`3vO0jU}M8^QlBpWg$SHpmR|MQyr{=fVFW_&betWR!COvf&-@ zUj=`*k?%;`a0dL}gMXWmPd?Zqd_X!B4BW-YtTM_((l)FCzZm>wM!r8?$93Re4gS4G zKGkt&x{fx;yaAboMj21Kj)%a1?>p)^0{&;kKdR&0a8o+-VnM%Z8DlW*@iVW@$8uJGr z(|-ZRo6!#YZJAMX<|8H=^1?L?YFHO!o93XOkT>evDcsA)?g_|*AoGAxCgVP?h1z7s zgVis=KU*IXe-8Mg^BCJSq`aM%S3p}2{u1yzjeP3kc40)uFCIsf;TiC@9VbrLF3^67 zIWO^z)iiNZsf|@1va$Vd@9)}we80B8=g)WHxwD0JTTRoIoi^5ex|Y?l-p^2&a;Dyo z^;|~pyLv9O_YFN~?)|Nv%j$hm&yDK+m7W{j`xwtzdLPs&*}Zr3Tu$!~csiyx#?##1 zR-T@dxaoB5*hCZ6Y)v#!VoP`_8JDP{WPD;5CFdr}DVdNcp=4rW110ArzE8>di9$*y zC6-b$IkA9}DT&#XOifIqWLjb(CDRjQDVdQNP07pzyKcrP>rbtZ82uAFUV7-%`8Jm9 z*=hZm_5RT_ozWwf*GXOxhRqU&T_6mbEex9@49gRST__BjD-4?_44W?uTObU(NEo(I z7`8|lmM;uj{H=zCCk!_XUK}|_JTT&c5f6-bV8jC>9{B&z0~N6kqkR_bV=Vu&zFxvu zyktVWVp4m_nf8joctvjPSiHhg9oyG)dMtPqxi9_M#!2n_dd^77BuPnfiV&bOg97Je zqVHRw3B|tQM2q#{0iKN=vmUG%jDFCc{i;-xl7JEWdcKBy=Wn}VXIZq*tgVHit=;9Y zwEAe&hKCd9vyLcL6pM}rhNY1Hr(KXtCZk6tcwUFsJ^z4HZ4x|_mSd#5I#l6UvBG}hOFQnEa^u>rvo?EYu2tny{+Az#k{SPaC4m;-4Uf)V$mtU z;0_Pg%4n~kmTJGt1@(wcdtt!P1Z@nNKMPvW0WdYTud@)PJ1fbj+9$Zr$TAD&(KgP3 zSvr?{yay7k-5=yrg_hcJwTkvO?we5!M?F7)L~7NXyec6E=oG0%RORBI_kQzr9H zw;kJ`!xj#
  • ZXKTkK{XHXnj`obCe`KWRY4=O|UySq%wV0$2 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 TMcMZJO8gg8Bh_CrO6h+9o+#L$ diff --git a/os.iso b/os.iso index 1eea564951b8ac8967767c7650fe03f81d782508..ca153f1c12d39855c5b9b572a52b8e58b7b904dd 100644 GIT binary patch delta 9529 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 delta 8135 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 diff --git a/src/kernel/kmain.c b/src/kernel/kmain.c index 4371303..246ca7c 100644 --- a/src/kernel/kmain.c +++ b/src/kernel/kmain.c @@ -36,7 +36,7 @@ int kmain(int retvalue) // TODO: Grub modules to load programs - //timer_install(); + timer_install(); keyboard_install(); shell_install(); diff --git a/src/kernel/shell.c b/src/kernel/shell.c index d94cb2c..7129da8 100644 --- a/src/kernel/shell.c +++ b/src/kernel/shell.c @@ -1,6 +1,7 @@ #include "system.h" #include "../libc/stdio.h" #include "../libc/string.h" +#include "../programs/programs.h" #define BUFFER_SIZE 256 @@ -26,6 +27,10 @@ void shell_install() { printf("%d", 4/0); } + else if (strcmp(input_buffer, "words") == 0) + { + program_words(); + } else { printf("Unknown command %s\n", input_buffer); } diff --git a/src/kernel/system.h b/src/kernel/system.h index 09933cf..f551d0c 100644 --- a/src/kernel/system.h +++ b/src/kernel/system.h @@ -22,5 +22,8 @@ void delay(int ticks); void keyboard_install(); char keyboard_getchar(); void shell_install(); + +extern volatile unsigned long global_ticks; + #endif diff --git a/src/kernel/timer.c b/src/kernel/timer.c index 36539a7..5e28741 100644 --- a/src/kernel/timer.c +++ b/src/kernel/timer.c @@ -1,16 +1,11 @@ #include "system.h" #include "../libc/stdio.h" -int timer_ticks = 0; +volatile unsigned long global_ticks = 0; void timer_handler() { - timer_ticks++; - - if(timer_ticks % 18 == 0) - { - puts("One second has passed\n"); - } + global_ticks++; } void timer_install() @@ -21,6 +16,6 @@ void timer_install() void delay(int ticks) { unsigned long eticks; - eticks = timer_ticks + ticks; - while ((unsigned long)timer_ticks < eticks); + eticks = global_ticks + ticks; + while (global_ticks < eticks); } diff --git a/src/libc/crypto.c b/src/libc/crypto.c index e69de29..df39fe7 100644 --- a/src/libc/crypto.c +++ b/src/libc/crypto.c @@ -0,0 +1,24 @@ +#include "crypto.h" + +int lcg(int seed) +{ + int x = seed; + + // Constants (ZX81 LCG) + int a = 75; + int c = 74; + long m = 65537; + + for (int i=0; i<10; i++) + { + x = (a*x + c) % m; + } + + return x; +} + +int randint(int seed) +{ + int x = lcg(seed); + return x; +} diff --git a/src/libc/crypto.h b/src/libc/crypto.h new file mode 100644 index 0000000..dd8c561 --- /dev/null +++ b/src/libc/crypto.h @@ -0,0 +1,9 @@ +#ifndef CRYPTO_H +#define CRYPTO_H + +#define RAND_MAX 1024 + +int lcg(int seed); +int randint(int seed); + +#endif diff --git a/src/programs/programs.h b/src/programs/programs.h new file mode 100644 index 0000000..9842cd9 --- /dev/null +++ b/src/programs/programs.h @@ -0,0 +1,6 @@ +#ifndef PROGRAMS_H +#define PROGRAMS_H + +void program_words(); + +#endif diff --git a/src/programs/words.c b/src/programs/words.c new file mode 100644 index 0000000..129f1e6 --- /dev/null +++ b/src/programs/words.c @@ -0,0 +1,52 @@ + +#include "../libc/stdio.h" +#include "../libc/crypto.h" +#include "../kernel/system.h" + +char* words[] = +{ + "I", "us", "they", "my", + "a", "an", "is", "are", "for", "while", "not", "none", "yes", "no", + "absolutely", "addition", "additive", "afternoon", "architect", "ask", + "be", "blindfold", "brilliant", "boy", "brilliant", "bring", "buddy", + "career", "caterpillar", "change", "cheeky", "chop", + "decide", "demonstrate", "draw", "druggist", + "eagle", "ear", "effort", "evening", + "fabric", "famous", "fuse", + "generation", "generous", "girl", "gypsy", "grip", + "habit", "handsome", "helmet", "help", "horror", + "insist", "inventor", "itself", "ivory", + "jog", "joint", "joke", "judge", + "karate", "kebab", "kitchen", + "lamb", "lawnmower", "left", "lock", + "math", "medicine", "most", + "noodles", "nowadays", "nowhere", + "ocean", "older", "ounce", + "part", "pathetic", "pastime", + "quite", "quits", "quotation", + "race", "raise", "reality", + "safe", "scare", "screen", + "taught", "temple", "that", "this", + "unable", "unkind", "usual", + "velvet", "vivid", "vote", + "we", "warm", "watch", + "xylophone", + "yolk", "young", "your", + "zebra", "zodiac", "zucchini", +}; + +int words_size = sizeof(words)/sizeof(words[0]); + +// Generates 5 random words +void program_words() +{ + for (int i=0; i<10; i++) + { + int random = randint(global_ticks); + char* word = words[random%words_size]; + //printf("Global ticks: %d\nRandom integer: %d\nWord: %s\n", global_ticks, random, word); + printf("%s ", word); + delay(10); + } + puts("\n"); +}