Jump to content

TheBF

+AtariAge Subscriber
  • Content Count

    2,740
  • Joined

  • Last visited

Everything posted by TheBF

  1. Ah! I need to learn about those. I have never pressed my DSR into service on the Level-2 Subprograms. Thanks for the reminder.
  2. Very neat to see that hi performance XB. How much extra space did it take to add the ALC versus the old way?
  3. See the #bytes parameter. That's controls how many bytes to read or write. With functions 5 & 6 the # of bytes goes into what is normally the record# field of the PAB. Max size is 8K. (>2000) These things are so fast you could have 3 or 4 code blocks and load them as needed.
  4. Don't know if this helps but I love disk functions 5 and 6 for this kind of thing. They just blast in and out as long as you don't need more than 8K which you don't. Here it is Forth. I can answer any questions. But really you just set up the PAB and hit 6 to save and 5 to load. Differences from TF below: VC! writes one byte. V! writes 2bytes (one CELL) ior means I/O response (error number) HEX \ PRE-FAB file access mode selectors for default file binary type 0B CONSTANT W/O100 \ WRITE ONLY, binary, relative, fixed 100 0D CONSTANT R/O100 \ READ ONLY, binary, relative, fixed 100 \ 13 CONSTANT PROG : NEWPAB ( file$ len VDPaddr #bytes mode -- ) -30 ^PAB +! \ create new pab in VDP RAM with NO buffer [PAB 30 0 VFILL \ erase PAB and file name 0 [PAB RECLEN] VC! \ set reclen (0 means >100 (256) bytes) \ pulls params from the stack to init the PAB [PAB FLG] VC! \ set file access mode byte [PAB REC#] V! \ set #bytes to save (integer) [PAB FBUFF] V! \ set where the file will load VDP Ram [PAB FNAME] VPLACE \ set file name ; : SAVE-FILE ( file$ len VDPaddr #bytes -- ior) W/O100 NEWPAB 6 FILEOP 30 ^PAB +! ; : LOAD-FILE ( file$ len VDPaddr size -- ior) R/O100 NEWPAB 5 FILEOP 30 ^PAB +! ;
  5. So the E/A loader would load the code block as object code? If you have the way to do it, saving the data as a binary program, or converting the object to a binary program, would mean FOXIT could load the 4K block itself when it starts in about .5 seconds. Wouldn't that be BL @ >3456 ?
  6. Since I never work in conventional assembler, I am curious if it would be worthwhile to give the 4K overlays some kind of jump table at the top so you could call the code by number? Of course that means you need a standard calling sequence for each one too so maybe too complicated. (?)
  7. Super helpful analysis. Thanks @Tursi. I will compare these ratios to the one that JS99er likes and see what it takes to the fix the cross-compiler.
  8. Thank you. So far it is every file generated by my DOS cross-compiler, but none that I save from Camel99 Forth. To be fair the code is entirely different. The DOS version is clunky from when I was just getting back to this stuff. Here is one the JS99er complains about. Ignore the error on startup. It's just looking for the START file that is like autoexec. CAMEL268.zip
  9. How cool it that. Thanks. What tool(s) are used to make the cart.
  10. So now that I know how to use the emulator a bit I have found that programs I create with Camel99 Forth like theMatrix demo load fine on JS99ER. The Camel99 program that is cross-compile with my DOS compiler are called "too short". So I will be spending some time learning what I have wrong in my cross-compiler. Interesting that TI-99 and Classic99 load the files. I suspect there is something wrong with the cross-compiler as it was my first journey back into TI-99 space.
  11. I think I might have found an earlier version of JS99er. It defaulted to TI BASIC and Editor/Assembler in the menu. That's the one that gave me the "too short" message. I have not learned how to add cartridges to JS99er to use it for my purposes. I will look for some docs.
  12. To me the full meal deal would be an IDE, something like DOS Turbo C/Pascal , built with Stevie that lets you edit, compile,and run TI-BASIC programs. I have no idea if such a thing is realistic but perhaps with a liberal use of overlays it could be done.
  13. When I manually edited the binary file and changed the length from >2040 to >2042, JS99er says the same thing and Classic99 won't load it. Change it back and all is well again with Classic99.
  14. So this is interesting. JS99er reports that my binary files are "too short" I will have take a look at what that is all about. I put the size of the binary image in the file header not the total size of the file. TI-99 seems to load them ok. Things that make you say hmm...
  15. TheMatrix II. Slightly new internal code but with a proper WARM boot of the Forth system before starting the rest of the program. I tried to improve the shimmering of the green letters and twinkle the white ones a little. A few more threads. THEMATRIXII.zip
  16. Well that's concerning. I never play with that one. I didn't do a full warm boot on the Forth system when I started it. It worked on Classic99 so I moved on. Can I give you another one to try?
  17. I spent some time reviewing files for a Github refresh and found this "THEMATRIX" demo screen saver. It also is a good demo of how to spawn tasks in low RAM at startup time so you don't take program space the task memory. I think it looks better now and the screen doesn't timeout now (duh!) so I made it into a binary program and it could be a cute screen saver. updated-matrix-screensaver.mp4 THEMATRIX.ZIP
  18. I realize now that this is sometimes called the "Elvis" operator. Think emoticon with hair ?:-) So I am still curious is it just a syntax convenience or does it generate different code?
  19. So testing seems to be important in software. 🤣 I had never test Neils' century day program against another computation and either I copied it wrong (most likely) or it is not correct. I had posted a Rossetta code solution using this so I have to revisit that and correct it. The other solution in Forth uses Zeller's congruence and seems to be correct so that's my go to method for now. Here is the new DATEFORM.FTH library. I put it all in one file. I had no idea date manipulation was so complicated.
  20. Right back at you. All the best to you are your family.
  21. Yes you did. But... I just discovered the century day is giving me the wrong number! And I cannot find the original site where I saw that code. I am now trying to find information on how to calculate the number of days from any date. What a hobby!
  22. Over on the "Substantial Programs in Forth" topic, we were talking about a demo program suggested by @neglectoru The demo program needed to deal with time and it made me realize that I didn't have a time module in my library files. So here is one that gives some degree of versatility. I have opted to use a the stack order: ( -- sec mins hrs ) because it's faster to convert back and forth to seconds. However there are also two words that let you change that order to ( -- hrs mins sec) and another to switch back so the bases are covered. In our discussion over in the other topic @neglectoru was struggling with the how in the heck you could manage all those stack elements for dates and times in Forth. It is true that variables can make some things much simpler but in this case I think factoring allowed us to do the job without too much mental strain. I opted to not pull-in the entire doubles library and just used the CORE Forth words in the kernel plus D= and DU< defined here. I have a DATE library that is borrowed from the work of the late great Neil Baud (aka Wil Baden) in the second spoiler. It lets us calculate the "century day" so we can compare dates for before and after and also from the century-day we can compute the day of the week. With these two little files we could continue to flesh out the calendar application. TIME.FTH DATE.FTH I also have a very old file I made for HsForth, for date printing in different dates in misc. formats so let's recycle that. It used to be together with DATES.FTH but in a small system let's keep them separate. Note: I finally learned how to make these sequential string arrays work on 9900. I had to add ALIGNED to NTH$ because of course S, does an ALIGNED after it compiles a string into memory to keep on even address boundaries. DATEFORM.FTH
  23. I concur it's the only way to *go. Sadly, I was not thinking of you. I saw it first with the Billy Ball Demo that @Retrospect did. Very solid looking code. *Unless you have threads.
  24. I think idea was pioneered in LISP. LISP - Cond Construct (tutorialspoint.com) Does the C version generate better code than if else ?
  25. It that the format that I saw where you use lots of narrow focused sub-routines and a big main game loop that just calls them as needed?
×
×
  • Create New...