Jump to content

Willsy

Members
  • Content Count

    3,144
  • Joined

  • Last visited

Everything posted by Willsy

  1. BLASPHEMY! If you're gonna go British on us, as least go for one of these: What a handsome machine!
  2. Latest version of TurboForth V1.2.1 (build 4) is now available on the website. This is the last version of V1.2.1 - the next release (don't know when) will be 1.3 and it will be a monster. V1.2.1:4 New Features: Can now use lower case characters for digits when base >10. For example, try: $feed $. Added "round" upper case 0 instead of horrible TI square O Added SAVE#5 - TurboForth can now save a blob of VDP RAM (up to 8192 bytes) to disk as a binary/program image file. WOOHOO! Syntax: s"DSKx.FILENAME" #bytesToSave SAVE#5 Great for saving character sets or other funky stuff. Added LOAD#5 - TurboForth can now load program image/binary type files. Loads into VDP RAM from >1420 onwards. Syntax: S" DSKx.FILENAME" LOAD#5 Great for loading character sets and the like. Added COINC for sprite collision detection Added the variable KDEL for setting the keyboard auto-repeat rate to be used in the block editor. This is intended for Geneve compatibility as the editor is unusable on the Geneve due to the delays being too short. This work-around poses a neat fix. Geneve users can set the delay by writing to KDEL in their BLOCKS startup file, or by typing directly at the command line (the command line works fine on the Geneve, though the cursor flash rate is somewhat rapid!). The value stored in KDEL has the following format: 0xIISS Where II is the initial delay (before auto-repeat starts) divided by 2. At power up, this value is 0xED. SS is the short delay (when auto-repeat is active). At power-up this value is 0x1E. Maximum value is FF. Added V2! - VDP Write Word ( address value -- ) to allow writing 16 bits to VDP in a single instruction. Added [email protected] - VDP Read Word ( vdp_address -- n ) added to read 16 bits from VDP in a single instruction. Added VWTR - VDP Write To Register ( value register -- ) to permit writing to the VDP registers. On the blocks disk: Included a copy of the standard TF font. Load block 74 to restore your font. Once loaded, just type FONT. To save a font, type SAVEFONT - the font as currently defined in VDP memory from VDP >800 to >FFF will be saved to the blocks disk. FONT will subsequently load the new font. Useful if you want to replace the standard TurboForth font. The gory details (for geeks only): 0-00-Header.a99Changed cartridge header to include build number on cart select screen. 0-02-Stack.a99Optimised .S saving 10 bytes. 0-09-Console.a99Redundant code removed from TYPE 0-10-Compilation.a99Added ALIGN to DOES> 014-Variables.a99Redundant variable WWRAP removed 0-16-Graphics.a99Added stub entry for COINC support (code is in bank 1) 0-20-Sound.a99Assembly language code moved to bank 1 0-21-Editor.a99 Removed old redundant code. Saved space. Block number now displayed using Forth code in bank 0 rather than assembler code in bank 1. Large space saving gain in bank 1. Changed the order that things happen. There's no lengthy blank screen anymore when moving to the next block in the editor. 1-00-Header.a99Changed cartridge header to include build number on cart select screen. 1-02-Console.a99Removed redundant code from CLS routine. Saved 8 bytes. 1-03-Graphics.a99Added assembler code for COINC. At last! Hooray! 1-08-Parsing.a99Modified NUMBER such that lower case characters are permitted for bases greater than ten. For example, $FEED and $feed are now equivalent. Same when in HEX mode (or any base >10) For example: hex ffff is now legal. 1-11-Editor.a99 Optimised initialisation in 1-11-Editor.a99 Removed code for display of block number. This is now done in bank 0. 1-15-Sound.a99New file. Hosts assembler code for the SOUND word. Also modified it to briefly enable interrupts. 1-16-Initialiase.a99 Optimised part of the initialisation code responsible for loading the customised characters. Added a nice round capital O instead of that horrible square O that TI always used. Optimised block buffer initialisation code Throughout: Changed TOTERM to save 2 bytes per call, and changed the TOTERM routine in 0-01-Startup.a99 suit.
  3. Indeed. It's physically possible to do it (I mean, the hardware can do it) as long as the keys are on different columns (or is it rows? I always forget). We'd need to add a little machine routine to do it. Something that looks for all three keys and gives you a bit code: 1 = boost 2 = fire 4 = left 8 = right or something like that. Alternatively, you could make Jetman fire whenever he's boosting. When I used to play the game as a kid I would set the joystick on auto-fire and blast the sh*t out of everything!
  4. As you suspect, you can't use an immediate value with the SONY instruction. You'd use the AI instruction. AI R2,-8 That would do it. :-)
  5. Willsy

    Bouncy

    I agree. Hat's off to those that do it, but it's not for me!
  6. Willsy

    Bouncy

    This is insanely good. Can you imagine if this was possible back in the day? TI would have ruled. I know it *was* possible, at least in terms of the hardware, but developing it on a 1980s system would be a major PITA!
  7. Yes. Sounds right. I built the cable that fred has on his site. It's a DB25 on the TI end to two 9 pin Ds. One for HDX the other for serial. From there, it's a 9-pin null modem to your PC.
  8. It would do it in a loop until it sees ]data. That way, broken lines and multiple lines and blank lines would make no difference. You would have to check for special cases such as comments. The simplest way to do that is to do a BL WORD and convert directly to a number. If the conversion doesn't work then check for a comment. If not a comment then error. If an open bracket is detected then enter a state where you throw everything away (BL WORD in a loop) until you get a closed bracket.
  9. I can't make it but I send you all my love and big man hugs and back slaps!
  10. I think maybe DATA[ should execute EXPECT and get its own data from the keyboard (when not loading a block) into a buffer and process it itself.
  11. Can it move >IN (our whatever the FIG equivalent is) back to point to the null?
  12. Very very sad news. A huge loss to us 99ers and of course even more to his family. Rest in peace.
  13. Yes. I have a third state but it's not implemented via state. Like you say it's at a068 (called 'coding') IIRC.
  14. Assembling TurboForth on my laptop: just over two seconds. Assembling on the TI: 10 minutes. Then it runs out of labels space. 'Nuff said!
  15. https://www.kickstarter.com/projects/1744798558/growing-the-8-bit-generation?ref=category
  16. https://www.kickstarter.com/projects/1744798558/growing-the-8-bit-generation?ref=category Neat!
  17. Gonna use xas99 for my next project. I have a slightly different use case: Building multi-banked cartridges, but I already have some tools to convert a single object file (which has multiple AORG >6000 directives in it, one for each bank) into an appropriately padded totally raw binary file which is suitable for classic99/MESS rom cart images, or burning into an EPROM. A nice feature would be a ROM_BANK <n> directive: ROM_BANK 0 Internally, sets AORG to >6000 During the final file emit, ROM-BANK directives would pad the current memory image from the current PC address to 7FFF with zeros so that each rom bank is aligned on an 8K boundary. That's basically what my utilities do (that Tursi wrote for me years ago), but it does it by scanning the tags in the object file for an AORG. Like I say, I have this issue covered, so it's not a big problem. But anything to shorten the toolchain is a good thing!
  18. Woops. I see I've taken this thread totally off topic. Apologies to Adamantyr. I'll repost this in the appropriate thread.
  19. Yep - anything to make Forth development more comfortable (it's not the easiest of languages to learn) is a good thang!
  20. Gonna use xas99 for my next project. [... snipped .... moved to the correct topic/thread ]
  21. Ah! But in your interpreter, you would say: state @ 2 = if bl word number abort" Not a legal number" , else \ states 0 and 1 .... .... .... then So, you wouldn't do a dictionary search at all if state==2. You'd use the same feature for CODE definitions, too. That's how TF works, which is why TF doesn't need to 'comma in' the op-codes in a CODE def. You'd still need to update the cart though Still, the cool thing about Forth is, you can write a new interpreter in fbForth itself - at least for testing. I've done this in TF many times. ABORT breaks out of it though. Would be good enough for getting the concept right though.
×
×
  • Create New...