Learn Agon

Learn Agon

Learn about the Agon Light 2 Microcomputer!!!

Agon Light 2 - LOADFONT (part 1)

Agon Light 2 - LOADFONT (part 1)

Agon Light 2 - MATRIX.BAS

Agon Light 2 - MATRIX.BAS

Agon Light 2 - My Leaf

Agon Light 2 - My Leaf

Agon Light 2 - STRING$

Agon Light 2 - STRING$

Пікірлер

  • @RobertoAlexFigueroa
    @RobertoAlexFigueroaКүн бұрын

    You cannot change the first two lines that show the MOS and VDP versions. This is because during boot, BEFORE loading the autoexec and BBC-Basic itself, MOS is responsible for sending the command to the VDP to display the MOS and VDP versions, long before starting to load the autoexec. In short, if you want to change those fonts, you will have to modify MOS directly from the sources, which is already somewhat difficult to do, at least for me. A cordial greeting and a hug.

  • @TSteffi
    @TSteffiКүн бұрын

    On a traditional computer, the characters on the screen are generated by the graphics chip. They would get the bitmap data for the characters, aka the font, either from a ROM chip or from video memory. You would then write ASCII codes to the video memory, and the graphics chip would generate the individual pixels on the screen. It looks like the Agon doesn't work that way. The graphics on the Agon seem to be always in bitmap mode, and the CPU writes the individual pixels to video memory.

  • @RobertoAlexFigueroa
    @RobertoAlexFigueroaКүн бұрын

    @@TSteffi In the video aspect, Agon behaves practically like a graphical and/or text serial terminal, depending on the configuration that is defined. In fact, it has a specific teletext mode for this type of purpose, in addition to the other graphic modes, which are limited to a maximum of 64 colors, with resolutions of 640x480 due to limitations of its hardware, although it reaches up to 1024x768 but with two colors only. Despite its limitations, the community continues to enhance the graphics capabilities almost periodically, so until now it is somewhat difficult to define Agon's graphics system to establish it as something definitive. Kind regards.

  • @LearnAgon
    @LearnAgon21 сағат бұрын

    Thanks for your input!

  • @MikePerigo
    @MikePerigoКүн бұрын

    100th of a second is a centisecond. A millisecond is 1000th. (like centimeters vs millimeters) I'm not that surprised that the number of times your program prints TIME varies for each number (although I am surprised it varies so much) however I am very intrigued as to why it increments by two each time. Every instruction you add in between the initial setting of T and the test of whether the UNTIL condition is met, takes time to execute and can vary slightly depending on what interrupts occur due to other processes running on the hardware. In theory this shouldn't affect the incrementing of the TIME pseudo variable which should be based on a hardware timer (it was on the Beeb, not sure about the Agon) however using the PRINT command on the Agon is probably the one most likely to take different times, each time through the loop, due to the use of the VDP over the serial link. All the VDU commands sent to the VDP will be stored in a buffer that can be filled and stop accepting new codes until it has processed the ones it has already.

  • @LearnAgon
    @LearnAgonКүн бұрын

    Thanks for your help, I’ll be experimenting with other keywords to see how the results vary

  • @RobertoAlexFigueroa
    @RobertoAlexFigueroa2 күн бұрын

    I'm glad you were able to start using the new fonts, now you can choose the one you like and load your preferred font by adding your autoexec.txt, a line that refers to the font you want to set as default from Agon startup. You can add something like this in your autoexec, for example: Font /Fonts/Invaders.F08 Then you will have that font installed on your Agon by default, which you can change whenever you like. A hug and a cordial greeting.

  • @LearnAgon
    @LearnAgonКүн бұрын

    I’m grateful for your help, will try this out soon!

  • @tonedef71
    @tonedef713 күн бұрын

    After a bit of time, TIME will return a negative value.

  • @LearnAgon
    @LearnAgon2 күн бұрын

    This is interesting…

  • @tonedef71
    @tonedef712 күн бұрын

    @LearnAgon Yeah, after your Agonlight has been up and running for over an hour, the centiseconds value of TIME in BBC BASIC overflows the register value, I think. The highest bit of the register, when set to 1, makes the value negative.

  • @tonedef71
    @tonedef713 күн бұрын

    20 PRINT CHR$(12) or VDU 12 has the effect you were looking for to replace CHR$(147). Of course, the CLS does it just as well.

  • @LearnAgon
    @LearnAgon2 күн бұрын

    Yes! Thanks for reminding me about this.

  • @RobertoAlexFigueroa
    @RobertoAlexFigueroa3 күн бұрын

    In the off-topic section of the Agon channel on Discord, I have left a pack with more than 90 fonts of all types (Roman, Script, Sans, Epson, etc.) for you to download and use as you like. The instructions are in the same section of the channel. A cordial greeting and a hug.

  • @LearnAgon
    @LearnAgon3 күн бұрын

    That’s wonderful! Thank you

  • @MikePerigo
    @MikePerigo3 күн бұрын

    Not milliseconds but centiseconds. Since TIME is incremented every 100th of a second it makes timing delays easy. My favourite way to generate a 1 second delay is T=TIME+100:REPEATUNTILTIME>T

  • @LearnAgon
    @LearnAgon3 күн бұрын

    This is very creative! Thank you

  • @tonedef71
    @tonedef715 күн бұрын

    You can remove line 40 altogether; it is not needed. You can use CLEAR in place of CLR, but it probably is not necessary for this program to work.

  • @LearnAgon
    @LearnAgon5 күн бұрын

    Will give it a try, thank you

  • @VascoCosta
    @VascoCosta5 күн бұрын

    In BBC BASIC, the variable is called TIME. You can use that.

  • @LearnAgon
    @LearnAgon5 күн бұрын

    I tried it and couldn’t get it to work, maybe I should make it an INT()…maybe I tried using the MOS TIME instead

  • @VascoCosta
    @VascoCosta4 күн бұрын

    @@LearnAgon Actually TIME is a statement. Try to first store it inside a variable like for instance T=TIME and then use T inside RND.

  • @VascoCosta
    @VascoCosta5 күн бұрын

    Wow, amazing. What a nice way to pay tribute to your dad.

  • @LearnAgon
    @LearnAgon5 күн бұрын

    Gracias!!

  • @RobertoAlexFigueroa
    @RobertoAlexFigueroa6 күн бұрын

    MC allows you to copy files between directories, move them, rename files and directories, edit text files and navigate between your directories. The programs you can run from MC are the BIN programs, not your BBC Basic programs. I recommend that you use it more often and learn how to use it, it will be of great help when managing your files and directories. Kind regards.

  • @LearnAgon
    @LearnAgon6 күн бұрын

    Thank you for your help!

  • @lennartbenschop656
    @lennartbenschop6566 күн бұрын

    What do you see with the command loadfont luigi.psf none The none parameter will not do code translation and You may have all teh ascii chars then.

  • @LearnAgon
    @LearnAgon6 күн бұрын

    Will try it out and let you know

  • @keyboard_g
    @keyboard_g7 күн бұрын

    Its very cool to see the Agon platform grow into something up from what was originally just a prompt.

  • @LearnAgon
    @LearnAgon7 күн бұрын

    Si! I agree completely! It’s getting harder to stay up to speed with the latest developments since so many folks are constantly working on new things!

  • @okee9
    @okee98 күн бұрын

    Want to get one of these, any advice on whether to buy the Agon light 2 with case or a console8, does the console8 have extras hardware ?

  • @LearnAgon
    @LearnAgon8 күн бұрын

    Glad to hear that! I’m only familiar with the Agon Light 2. However, others have mentioned it is very similar and compatible with the Console 8. The immediate difference between the two appears to be the integrated joystick ports on the Console 8. There are other differences in that the GPIO pins I believe are different but I could be wrong. It depends on what you see yourself using it for the most I guess! Keep me posted and enjoy your journey!

  • @kaligari88
    @kaligari8810 күн бұрын

    Thanks to you I discovered Agon Light 2, thank you. Great demo as well.

  • @LearnAgon
    @LearnAgon10 күн бұрын

    I’m glad, it’s a great little machine that can do so many things and it is helping me learn so much!

  • @TheBraderek
    @TheBraderek12 күн бұрын

    Thanks for sharing, this is indeed an amazing piece of work! Btw. This is an agon version of original Amiga Demo: ST-NICCC OCS / Oxyron (link below). IT looks more fluent on agon to me 🙂 kzread.info/dash/bejne/epp3z6uqkre7d9Y.html

  • @TheBraderek
    @TheBraderek12 күн бұрын

    * Which on Amiga is a port of Atari ST demo 'STNICCC2000' 😀

  • @LearnAgon
    @LearnAgon11 күн бұрын

    Very cool!

  • @aldob5681
    @aldob568112 күн бұрын

    you have found the next project: a file transfer program like laplink

  • @LearnAgon
    @LearnAgon12 күн бұрын

    Never heard of laplink…will have to check it out

  • @VascoCosta
    @VascoCosta12 күн бұрын

    What sorcery is this? 😍This feels almost impossible on such a low spec machine. Mesmerising and definitely something to include on the next release of Agon Mite.

  • @VascoCosta
    @VascoCosta12 күн бұрын

    Nice way to kill boredom. This is truly abstract art. Now imagine there's a randomly generated drawing that you really like and would like to reproduce. How would you change the code to allow reproducible abstract art? You'd need to take note of each random number generated per cycle. Or, ideally, you could try to have a common seed to initiate the random number generator, which I don't know if it is possible in BBC BASIC.

  • @LearnAgon
    @LearnAgon12 күн бұрын

    This sounds like a very good idea! Will see if I can display the values inside of a text viewport

  • @s0ygecko
    @s0ygecko12 күн бұрын

    Ohhh! Now all seems so BASIC 😊

  • @VascoCosta
    @VascoCosta13 күн бұрын

    Maybe you can also play around with the height of each slot of the grid, trying to find some number that aligns with all the numbers. Although I'm not sure it is possible to find such balance.

  • @LearnAgon
    @LearnAgon13 күн бұрын

    Good idea, did not consider that option!

  • @archibaldbuttle7
    @archibaldbuttle714 күн бұрын

    a big part of what's making this "abstract" is the fact that when you're sequentially going up through the PLOT codes you will be drawing (in sequence) things using the foreground colour, then inverting the on-screen pixels, and using the background colour. (it's actually a pattern of four, with the first entry in that pattern is a "move" command.) the "invert" plots help make things "abstract" - a pixel on-screen that's colour 0 will be turned into colour 63, colour 1 -> 62, colour 2 -> 61, etc. another way to go "abstract" using the Agon's PLOT system is to look into changing the painting mode. that's the first value given to the GCOL command, which your program currently is always setting to 0. it will actually accept values 0-7, where 0 sets on-screen pixels, but other values will do some interesting things.

  • @LearnAgon
    @LearnAgon13 күн бұрын

    I’m going to try this out next! Thanks

  • @VascoCosta
    @VascoCosta15 күн бұрын

    After two weeks out, I can see the progression is noticeable. This project is becoming closer to what I anticipated. Good job on refactoring the code into two loops to plot the grid. At the core of programming is automating what can be automated, doing less and less manual work.

  • @LearnAgon
    @LearnAgon14 күн бұрын

    Thanks!

  • @PeterDoingStuff
    @PeterDoingStuff19 күн бұрын

    nice to learn more about the plot and draw commands

  • @MikePerigo
    @MikePerigo24 күн бұрын

    Kudos to @tone_def for another great program and for documenting it so well. Good job of following along by you. Gotta love how the program goes to all that trouble to ensure green is used whatever screen mode is chosen and your first change is to randomise it 😂

  • @MrGareth1973
    @MrGareth197324 күн бұрын

    Looks great :)

  • @LearnAgon
    @LearnAgon23 күн бұрын

    Thank you! Cheers!

  • @TELsBENCH
    @TELsBENCH24 күн бұрын

    You have a broadcasting quality voice. You could do commercials or pretty much anything.

  • @LearnAgon
    @LearnAgon24 күн бұрын

    Many thanks for your kind words !!!

  • @TELsBENCH
    @TELsBENCH24 күн бұрын

    On the Acorn BBC Micro from 40 + years ago, there is an ADC built in and this is what they used for Joysticks or for whatever reason someone might need .perhaps if you were using it to monitor signals in a lab or a manufacturing environment perhaps. Although AL has the I2C, thats useful if you want to add your own ADC or other device and get the values back into the system to use. I will be watching this project, as I find it interesting. I have a scope/analyser so I dont really need this, but it is nevertheless interesting. Good start, and I'm interested to see how things develop. Keep up the good work TEL

  • @LearnAgon
    @LearnAgon24 күн бұрын

    Thanks for your encouragement! I’m very excited about it too but I don’t really know how it will turn out since I don’t have any experience with Oscilloscopes yet! So crossing my fingers here!

  • @TSteffi
    @TSteffi25 күн бұрын

    I have a guess for what the (-113) means. You see, when dealing with negative numbers, the highest bit of a byte is used as the sign indicator. If that bit is 1, then the number is negative. Now the inkey command looks for a specific byte from the keyboard I guess, and the (-113) is the decimal representation of the code for a certain key.

  • @LearnAgon
    @LearnAgon24 күн бұрын

    Thanks for your comment. I’m not sure I understand yet, I will look into what the ascii 113 character is next. It looks like it may be the lower case ‘q’

  • @MikePerigo
    @MikePerigo24 күн бұрын

    If the Agon implementation follows the original then the manual gives this information... INKEY negative argument If INKEY is followed by a negative argument, the state of a particular key is tested. If the key is currently pressed INKEY will return the value -1 (TRUE); if the key is not pressed INKEY will return the value 0 (FALSE). -113 tests the state of the ESCAPE key.

  • @MikePerigo
    @MikePerigo24 күн бұрын

    R.T.Russell's online manual for BBC BASIC for Windows is a great way to quickly look up the original commands with helpful diagrams and examples. Especially the plot commands and graphics viewport use. Just be aware that the Agon implementation is still a work in progress and doesn't handle all the options yet.

  • @codenamegreen1
    @codenamegreen125 күн бұрын

    I was spending way too much time with eZ80asm multiplication and division routines getting them to work with their registers. I finally went back to the BASIC / ASM version to use BBC BASIC multiplication and division as it was so much easier to use. I have a rough test version (working) ready to send to you to look at. I haven't added any graphic view ports or any bells/whistles yet as you look like your on top of it with videos like this. What it does so far is draw lines left to right (256 pixels across) for the MSB values. So if you turn the potentiometer the lines will be drawn at various heights up and down which makes sense as you are changing the voltages from 0 to 3.3 vdc indicated by the up/down lines. I will continue working on it but wanted to get this out for you to see "something" or progress made. I suppose the next steps are to clean this up and remove the potentiometer and use some sort of a 5vdc (with the level shifters) or 3.3vdc circuit of a clock or function generator showing the waveforms. A lot more detail can be done to what is there now but its in a working graphical condition for the moment. I will try to send it out to my GitHub site tonight for you to download. FYI - I'm flying to NY Wednesday for a week for mothers day to see my mom and return on the 14th.

  • @LearnAgon
    @LearnAgon25 күн бұрын

    I’m grateful for your work and will try to study it once I have the opportunity to download it. Have a great time with your mother my friend!!

  • @MikePerigo
    @MikePerigo28 күн бұрын

    Congratulations!

  • @LearnAgon
    @LearnAgon26 күн бұрын

    Thank you!

  • @MikePerigo
    @MikePerigo28 күн бұрын

    It was actually interesting to see what happened at each stage. Now you just need to follow what the book says each code is doing and see if you can figure out what the effect is going to be before you execute it :) Also, instead of REMing out all the remaining code, you could have just put an END line where you wanted the program to stop, or in this case GOTO 1000 would also work. Which brings up another point. BBC BASIC (and most others) don't need an END and will just stop when it runs out of lines to execute. END is usually only needed when the main program code is followed by subprograms or other code that the main program uses during execution but doesn't want running after it has finished.

  • @LearnAgon
    @LearnAgon28 күн бұрын

    This is very good information! Thanks for sharing your knowledge with me in this post. I incorporated what I learned so far into my next video which will be published soon

  • @MikePerigo
    @MikePerigo28 күн бұрын

    Try changing the loop terminating lines to PRINT TAB (0,0)"Code=";code% :G=GET :NEXT so that it shows which operation it has just performed and then waits for you to press a key before doing the next one. That way you can see which operations are doing outputs you can see. Remember that the text and graphics cursors act independently unless you deliberately link them together. Also try using MOVE and DRAW or their VDU equivalents to start at and move to known coordinates.

  • @LearnAgon
    @LearnAgon28 күн бұрын

    This is great advice

  • @axelanderson2030
    @axelanderson203029 күн бұрын

    cheers mate, you arent the only computer - philosophy nerd out there.

  • @LearnAgon
    @LearnAgon29 күн бұрын

    Glad to hear that!!!

  • @eldorado3523
    @eldorado352329 күн бұрын

    Very nice presentation of this topic. I somewhat agree with it, but I'm not a fan of the abstraction of consciousness as an ethereal solution to the problem of perception. I see consciousness as a result of a lot of simpler chemical and physical events which lead to complex behavior, and different perceptions are caused by different events in one's lifetime (a matter of time and place). On the one hand it's a much bleaker view of our experience of the universe, but on the other hand it allows for a more physical description of what we experience without resorting to intangible abstractions.

  • @LearnAgon
    @LearnAgon29 күн бұрын

    Thank you for sharing your thoughts! I find it all very interesting and am inclined towards a more concrete explanation also, but then again certain concepts tend towards some degree of complexity and uncertainty when we dive deeper into them such as energy, the atom, ideas, thoughts, etc.

  • @lak0803
    @lak0803Ай бұрын

    Can you try doing lissajpus curves from a recent video for Commander X16? Code: 10 REM ****************************** 11 REM ** LISSAJOUS CURVES - X16 ** 12 REM ****************************** 15 CLS: SCREEN$80: COLOR5,0: GOSUB 99 20 C=1:DX=35: DY=35: PI=3.1415926535 25 FOR A=1 TO 4 30 FOR B=1 TO 3 35 COLORC,0: C=C+1 40 FOR T=0 TO 2*PI STEP .02 45 X=DX*(2*A-1)+DX*SIN(A*T+T+1)*.75+15 50 Y=DY*(2*B-1)+DY*SIN(B*T+T)*.75+15 55 IFT=0 THENPSETX,Y,C:XS=X:YS=Y:GOTO65 60 LINE XS,YS,X,Y,C: XS=X: YS=Y: 65 NEXT T, B, A 70 GET A$: IF A$="" THEN GOTO 70 75 GOSUB 99: COLOR5,0: CLS: LIST: END 99 FOR I=0 TO 239: LINE0,I,319,I,0:NEXT I:RETURN

  • @LearnAgon
    @LearnAgonАй бұрын

    I think I saw something like this somewhere recently and thought about doing it too! Thanks for your comment, I’ll definitely look into this

  • @apiario2899
    @apiario2899Ай бұрын

    It is so welcoming to see you learn in a realistic and contemporary fashion. Our modern world is missing out on your enthusiasm for gaining and sharing knowledge. Never forget that each and every single day is a granted or missed opportunity for learning or engaging in something new and different.

  • @LearnAgon
    @LearnAgonАй бұрын

    Thanks for your kind words!!

  • @tonedef71
    @tonedef71Ай бұрын

    If you replace VDU 25 with the PLOT keyword, does it still work?

  • @LearnAgon
    @LearnAgonАй бұрын

    Will try it out next

  • @TSteffi
    @TSteffiАй бұрын

    Great video. Graphics stuff is always the hardest to get working, but also the most exciting. Can't wait to see you combining this with the ADC code to draw lines using the values from the ADC

  • @user-ro1ce5pf5l
    @user-ro1ce5pf5lАй бұрын

    do you plan on buying a new pc and screen? im not hating but i just want to know

  • @LearnAgon
    @LearnAgonАй бұрын

    Not really 😅why do you ask

  • @FlavorPhx
    @FlavorPhxАй бұрын

    Learn Agon without writhing in agony by following this channel! 😄

  • @LearnAgon
    @LearnAgonАй бұрын

    Gracias!!

  • @apiario2899
    @apiario2899Ай бұрын

    The binary to decimal and hexadecimal suggestion I mentioned previously would be very helpful here. Draw out three columns on a piece of paper, one for binary, one for decimal, and one for hexadecimal (octal is no longer widely used). Write the numbers 0 through 255 in the decimal column. Then write down the binary and hexadecimal equivalent to those numbers in their respective columns. Then match up the codes you are reading with values from your chart and compare them to each column. As an example decimal 255 equals 11111111 in binary and &FF in hexadecimal. Most calculator programs can help with this but I encourage you to learn how to do the conversion by hand first.

  • @VascoCosta
    @VascoCostaАй бұрын

    Finally something my ZX Spectrum's BASIC did better. It actually had a CIRCLE keyword, which made is super easy to play around with circles. I have fond memories of using it to create patterns with many circles using loops.

  • @LearnAgon
    @LearnAgonАй бұрын

    Do you still have a program of that around? It would be nice to see one for that machine

  • @MikePerigo
    @MikePerigoАй бұрын

    Welcome to the world of graphical plot options. All the answers are in the manual but you have chosen to use the commands with the smallest visible effects to experiment with. Although this is the logical place to start and you are doing a great job of working out what is happening I would suggest using larger objects to see the more subtle effects. Examine the graphics example programs given in the BBC BASIC manual and see where the built in graphics keywords can be directly replaced by the equivalent VDU plot commands. Remember that although text and graphics displays share the same physical screen they are independently controlled. GCOL = COLOUR, moving using plot is equivalent to PRINT AT or TAB. (actually the original BBC could link the text and graphics cursor together).

  • @LearnAgon
    @LearnAgonАй бұрын

    Indeed 😂I think I will try using other codes next time 😅

  • @TSteffi
    @TSteffiАй бұрын

    Graphics stuff was always a bit mysterious to me. Once it starts with sine and cosine and angles and all that, my brain just doesn't get it. I can write low level system functions just fine, but graphics is still beyond me.

  • @TSteffi
    @TSteffiАй бұрын

    Since you mentioned double buffering, here is how it works: When the VDP is drawing the screen, it has to read the actual pixel data from some buffer in memory. If the CPU wants to change a pixel, it has to write to that same buffer. That creates a conflict. If the CPU changes the content of the screen buffer while the VDP is drawing the screen, you get corrupted screen output. This still happens on modern graphics cards, just search for "screen tearing" on YT. Now, one way to fix this issue is double buffering. You take two whole screen buffers, lets call them buf-1 and buf-2. You only allow the VDP to read from buf-1, and you only allow the CPU to write to buf-2. And only once the CPU has finished drawing, it can flip the two buffers. Now buf-2 is the one that the VDP can read, and buf-1 is what the CPU can write to. By doing it that way, the CPU always has a screen buffer to work on, the VDP always has a buffer to draw from, but you only ever get complete screens being drawn.

  • @LearnAgon
    @LearnAgonАй бұрын

    Amazingly clear explanation! Thanks

  • @VascoCosta
    @VascoCostaАй бұрын

    I use LEFT/RIGHT/MID in tasks.bas, but there's a place where I need to pad something with a lot of spaces, which I did using a literal string. That's a perfect candidate for STRING$(N, " ").

  • @LearnAgon
    @LearnAgonАй бұрын

    Thanks for sharing

  • @apiario2899
    @apiario2899Ай бұрын

    I agree with @MikePerigo in that it is very important to understand the fundamentals before you proceed to more advanced topics such as the oscilloscope or assembly language programming. My involvement in computer science started with basic concepts like number systems. I encourage you to practice converting from one base number system to another. Basically, write down four columns representing binary, octal, decimal, and hexadecimal, and then convert a set of numbers from one system to another. Maybe write the numbers 1 through 20 in the decimal column and start by converting those to binary. Then proceed to the other bases, base-2, base-8, and base-16. Another good place to start is with Alice (search "alice programming"). There you can explore the ins and outs of procedural programming. You can then use the same site to progress towards the object-oriented programming style. Further, I encourage you to follow the famous philosopher and computer scientist/engineer, Bernardo Kastrup, aka @thebyteattic on KZread. He started the whole Agon project and creates many other didactical systems. While quite the intellectual, do not be spooked by his brilliance. We all have to start somewhere and there is no time like the present and no age too young or old to start. I wish you all the success in the world with your journeys. Your perseverance with this is highly commendable.

  • @LearnAgon
    @LearnAgonАй бұрын

    I’m grateful for your comment and encouragement! I’m sure going to try this out. I have watched some interviews where he talks about philosophy and other interesting topics! Thanks again

  • @MikePerigo
    @MikePerigoАй бұрын

    Great job to tone_def. They have beaten me to a more accurate conversion of the whole two stage C64 program. The first stage converts the graphics in the data statements into 3 values per line and uses them to define the graphics needed. I cheated and used those values to skip to the second stage and print the output using simpler characters. 😁

  • @MikePerigo
    @MikePerigoАй бұрын

    Yay! Love seeing STRING$ getting some well deserved attention. FORn=0TO9:PRINT STRING$(n*3,” “);”Yay”:NEXT