Jump to content
jedimatt42

Force Command ver 1.5 : kinda like command.com from 1985

Recommended Posts

Force Command - a DOS in progress by Jedimatt42 for the TI-99/4A.   You can informally call it Jedimatt42's DOS, or Matt's DOS. However its name is 'Force Command'  ...  "Force Command DOS" sounds very wrong to me

( I know I sound like a jerk, but I'm sharing that with you along with my free software, cause nothing is actually free ) 

 

Ver 1.5 - November 28th, 2020 - forcecmd_1.5.zip

 

- Add ctrl-c/fctn-4 break out of all commands that loop and print. Including wildcard copy and delete after current item is processed.

- History command added to list in memory command history - if SAMS then 4k is given to history, if not-SAMS, then you get 1 item. History can be recalled with !<item-number>  like !7  or you can press up and down arrow to navigate around...  History is not persistent.

 

Ver 1.4 - November 16th, 2020 - 

 

- remove limit  on device names (was 20)

- remove limit from environment variable (was many)

 

Ver 1.3 - November 12th, 2020 - 

 

- Fix LOAD for programs that use SAMS/Expect certain default sams mappings/mapping off

- Fix LOAD after being in 80x26.5 mode, so 26.5 mode is off.

- Update README.md to describe configuration of ROM + GROM in classic99

- Include separate MAME RPK without GROM, cause JS99ER RPK with both doesn't work.

 

Ver 1.2 - November 9th, 2020 - 

 

- REDO and up-arrow will recall last command for editing

- FTP builtin has been removed, included as external command

- 80x26x2 mode on 9938

- Numerous internal tweaks.

 

Ver 1.1 - October 8th, 2020 - 

 

- Fix Variable unset

- Allow fully qualified path to scripts and external commands

- DELETE supports /y ( yes ) option and wildcards

 

Ver 1.0 - October 4th, 2020 - 

 

- Add command support, although API is not public yet

- Add PATH variable defining where to search for scripts and commands

- Removed CALL for running scripts... 

- Reworked memory map massively

- It's a single GROM and 128K ROM now

- STILL RESERVE the right to remove FTP, and move it to an external command, where it belongs

- improved COPY and CHECKSUM to use larger buffer for increased performance

- removed erroneous 0 block check from COPY and CHECKSUM

- fixed bug in CHECKSUM I think. So values as compared to version 0.M will be different

 

Ver 0.M - July 6th 2020 - 

 

- Fix buffer overrun in some string handling - affects all commands (almost all) 

- Add XB command to launch specified Extended BASIC program from command line

  - Requires TIPI and FinalGROM99, program can live on other devices, but TIPI is required for the necessary shim.

  - When launching from TIPI, TIPIMAP AUTO ON should be used IF the program requires additional files, or a TIPI mapping file should live in the program's directory

  - When launching from a non-TIPI DSK1., then TIPI automapping must be turned off.

  - Requires installation of utilities in included FC directory

  - Requires TIPI version 2.4

 

Ver 0.L - July 3rd 2020 - 

 

- Fix VDP registers when LOAD command is issued... ( Fixes game TI-REX, and TENNIS )

- Add /P option for permanent mount to CFMOUNT

- Added range parameters to CFMOUNT /V [10 20]  - defaults are 1 312, if you go beyond your max volumes, the nanopeb needs to be power-cycled.

 

Ver 0.K - June 19th 2020 - 

 

- Add CFMOUNT command.

 

Ver 0.J - June 18th 2020 - 

 

- Fix TIPIMAP for DSK4, and now target can be forward relative paths like the other commands take... so you can CD TIPI.DISKS.GAMES, and then TIPIMAP DSK4. STRATEGO  and it'll map to TIPI.DISKS.GAMES.STRATEGO

- Fix 80 column screen glitch when using any of the lvl2 io commands like checksum, copy, and mkdir.

- Fix relative pathing when on a drive that is not the first device in the chain with that device name, such as being at 1100.DSK1. (from a nanopeb maybe) while you have some device like a TIPI that also has DSK1 at >1000

 

Ver 0.I - June 15th 2020 - 

 

- Change parameter parsing of all commands that take a required single argument file or directory name to now accept full or descending relative file/dir path name

- fix DIR *W to list files ending in W, instead of a wide display listing. . which fixes bug also, where you could enter TALL EDIT instead of CALL EDIT

- recode help to use less memory. 

- fix displaying type of protected files

- fix TYPE /ANSI handling. 

- fix shriek when AUTOCMD doesn't invoke TIPIBEEPS

 

-- known issue

80 column mode, several commands drop a garbage character at what might have been the old 80x24 image pattern location end... even when no scrolling is necessary... or etc...

TIPIMAP DSK4. doesn't work

 

Older history:

 

Spoiler

 

Ver 0.H - June 13th 2020 - 

 

- Fix word wrapping for help system

- Improve style of help, and fix some language

- Fix TIPIMAP command crash - It was moved to bank6, and I forgot to update the caller.

 

Ver 0.G - June 1st 2020 - 

 

- Improvements to LOAD -

  • Now sets GPLWS as current workspace before BL into loaded program. This fixes known problem with EDIT80 and EDIT40 from Fred Kaal. Thanks to Fred for having his source code available!
  • Also moved launching instruction and reset instruction into ROM header chunk ( the part in all banks ) so that if the program fiddles with writing to cartridge ROM it can still return to my reset code. 

 

Ver 0.F - May 27th 2020 - 

 

- 80 column mode is now 80x30 mode. 

- added TIPIHALT command to issue shutdown request to PI - you have to wait yourself, I can't detect when the PI is shutdown without locking up the 4A. 

- added TIPIREBOOT command to issue reboot request to PI - next access to a TIPI device will block until PI is serving TIPI requests again.

 

Ver 0.E - May 23rd 2020 - 

 

- COPY supports wildcards

- Fixed/Replaced F18A banner - hope people find this enjoyable. 

- a few small cosmetic fixes

 

Wildcarding is prefix or suffix, not both. HELP COPY or HELP DIR describe it with examples. But basically, 

'*' is the wildcard character, and it can be at the beginning of a file name to copy all files with a matching suffix.

Or it can be at the end to copy all files that begin with some prefix. 

It does not match against device names. 

 

Examples:

 

COPY 1100.DSK1. TIPI.FOO. - copy all files in floppy controller DSK1. to directory FOO on TIPI. ( FOO must already exist. ) 

COPY TIPI.FOO.CFG* DSKA. - copy all files starting with CFG from directory TIPI.FOO. to DSKA.

COPY CFG1 DSK1. - copy just file CFG1 from current location to DSK1. 

COPY TIPI.ROS.*/S DSKR. - copy all files ending in '/S' to DSKR. 

 

Known bug: It will report error reading file if you try to copy a directory itself. If I have directory TIPI.FOO. and I try COPY TIPI.FOO DSK1. it will fail. If I try COPY TIPI.FOO. DSK1. it will copy all files in FOO to DSK1. I should fix it to skip the directories... maybe tomorrow.

Also, my copy is one 256 byte block at a time. So, for spinny things with seek time, it is probably painfully slow. MAME's track sound effects are funny... funny nostalgic, funny. 

 

DIR and COPY use the same matching code, so to see what it will try to copy, use DIR. 

 

Ver 0.D - May 21st 2020

 

- Fix EA5 loader breakage: 'LOAD' command. It was broke for any ea5 set that loaded into >BFD0->BFFF  

- Change DIR space reporting

 

Ver 0.C - May 19th 2020

 

- Fix breakage from 0.B. 4 commands... like checksum... ftp.. 

 

Ver 0.B - May 17th 2020

 

bugs : this version broke FTP, TYPE, CHECKSUM, LOAD, and a few others. -- fixed in versions 0.C and then LOAD in 0.D

 

- Fix file management routines for use with Horizon Ramdisk (tested in MAME)

- preparation for overlay commands:

    - Rearrange memory usage to make top 16k of expansion ram available.

    - Create a first cut at API table in rom bank 0 - not ready for use.

    - Ground work to move large chunk of terminal display code back into ROM ( currently copied into RAM for easier shared access )

 

Note, the README in version 0.B contains some fantasy - rough draft of spec for an API before I seriously enable it.

 

Ver 0.A - (counting in hex) November 24th 2019 - 

 

- Fix basic-link search code for lvl2 subroutines. Now works on IDE with Fred Kaal's DSR

- Fixed FTP error when downloading to a floppy.

- Fixed LVL2 command to list the lvl2 subroutine names as a single byte.

 

Ver 0.9 - October 25th 2019

 

- Fix device name to LVL2 operation mapping, tested against emulated Myarc HFDC. 

- Corrections for sloppy file catalog code... 

 

Ver 0.8 - May 28th 2019

 

- Add 'press any key for more...' prompt when scrolling if not in a script. Good for 'dir', ftp's 'dir', type, ftp.whtech.com's adverts on login.

 

Ver 0.7 - May 26th 2019

 

- Turn sound off immediately on program startup

- FTP: Set ascii transfer mode before opening data channel for directory command

- FTP: Wait properly for 226 end of transfer code after get command.

 

Ver 0.6 - May 11th 2019 -

- Added /ansi option to type command
- Fixed help suggestions from Lee, and found a few more.
- Increased variable value length, and added length checking

Ver 0.5 - May 6th 2019

- Added 'IF' statement

Ver 0.4 - May 5th 2019

- Added initial FTP get functionality

 


----

Now that it has 'if' you can use it to make pretty custom menus, get keyboard input and conditionally operate on that input...

----
Force Command

A auto starting command module GROM and ROM pair. The GROM just kicks off the ROM.

Contains all the commands from TIPIFM for file and directory management in a mult-DSK... and TIPI aware way.
So, you can copy files to and from TIPI. You can copy files to and from 2 devices that both think they are DSK1.

Since TIPIFM, this has added:
* scripting support with the 'call' command.
* EA5 loading with 'load' command.
* FG99 cartridge swapping with 'fg99' command.
* an FTP client that supports 'get', TIFILES, and foreign files
* variables, labels, goto, if, keyboard input from script
* ANSI display
----

Using PabloDraw on my linux machine, I created asample ANSI screen.


I use a script on the 4A that displays the file, then loops on keyboard input, and launches the option chosen.
```
readkey K
if $(K) == F then goto LNFB
...
LNFB:
tipimap DSK1 TIPI.FB4TH210
fg99 FBFORTH
```

Like how you might have done it back in MS DOS 2.11

You can also emit ansi escape codes with the echo command.

----
Full Help Dump see the wiki or built in help for relatively current info https://github.com/jedimatt42/fcmd/wiki

  • Like 19

Share this post


Link to post
Share on other sites

Since the shell terminal is ANSI, the 'type' command is an ANSI file viewer.

 

I don't know what format an ANSI file on the 4A or Geneve would have been in BITD. 'type' expects D/V80

 

[email protected]

  • Like 2

Share this post


Link to post
Share on other sites

Might want to add something along "TIPI compatible" in the subject heading. Almost did not realize this was a TIPI compatible program/etc. as I do not read all the topics for the TI-99/4A.

Share this post


Link to post
Share on other sites

For BBS and Geneve use cases only: DF128. ANSI files have been stored this way primarily to facilitate easy terminal-based file exchanges between PC and TI/Geneve systems and to distinguish from the variable-record TI-style text files. ANSI file content termination is often the null character 0x00 or the final record may be padded with nulls, carriage returns, or some other character like CTRL-Z. Not a standard, just the way it has been handled for these cases.

  • Like 1

Share this post


Link to post
Share on other sites

Might want to add something along "TIPI compatible" in the subject heading. Almost did not realize this was a TIPI compatible program/etc. as I do not read all the topics for the TI-99/4A.

By that logic I would have to add: Floppy, hard drive, ram disk, 32k, F18A, composite, FinalGrom, ubergrom, and TIPI compatible.

 

Of course I haven't tested ubergrom or ramdisks or hard drives, but they should work.

 

There is a checksum command you can run to see if the set of blocks for the file are the same before and after a copy.

 

Known bug: protected files mess up the directory listing.

 

[email protected]

Share this post


Link to post
Share on other sites

Ver 0.5 - May 6th 2019 - attachicon.gifforcecmd0_5.zip

 

:-o OMG! :-o

 

It looks like I've spent too much time away from AA lately. Could this be the holy grail?

I'm ashamed to admit that I just found out about this in a PM from Greg, but from what I've seen (so far), it looks FANTASTIC!

I will say, at first glance it looks like I'll have some studying to do.

 

This program is obviously worthy of a dedicated users thread to be sure. Maybe an entry level type document and more examples of user generated menus and stuff.

 

ATTENTION [email protected]: THANKS MAN! :thumbsup: :thumbsup: :thumbsup: :thumbsup: :thumbsup: :thumbsup: :thumbsup: :thumbsup: :thumbsup: :thumbsup:

  • Like 1

Share this post


Link to post
Share on other sites

updates in post #1

 

Fixed some help text issues.

Added '/ansi' option to 'type' command that opens in DISPLAY/FIXED, and terminates on CTRL-Z in file... so we don't have to see the SAUCE

 

---

Bugs:

 

Found some issues with the EA5 loader... TENNIS comes up with the racket garbled where in CALL TIPI, it comes up fine. So I'll need to go back and see what initialization I missed.

 

---

If you have a FinalGROM, TIPI, and F18A, you can see for yourself:

 

call PI.HTTPS://www.jedimatt42.com/4afiles/menu/GAMES005.TXT
(no there isn't 1-4... this just saves money on invalidation requests to aws-cloudfront)

(F18A needed cause this menu is for 80 column color, but techniques would work in 40 column mode)

 

You can look at that text file in your browser too for an example of a menu program...

This one has all the ansi art in the form of echo statements...

 

This picture is a little old, but gives you the idea:

post-42954-0-13938000-1557595279_thumb.jpg

 

[email protected]

  • Like 3

Share this post


Link to post
Share on other sites

Does anyone want to take the lead and make a users manual for this, or maybe a video as well? I'm probably going to end up making this program my main environment to work from within, but being and old dog, new tricks, and lack of time, means getting up and running will be a little slow.

Share this post


Link to post
Share on other sites

Does anyone want to take the lead and make a users manual for this, or maybe a video as well? I'm probably going to end up making this program my main environment to work from within, but being and old dog, new tricks, and lack of time, means getting up and running will be a little slow.

I've often thought it would be cool to do a retro style manual with the old 4A desktop publishing software... but really don't remember how to use any of that...

 

[email protected]

  • Like 1

Share this post


Link to post
Share on other sites
call PI.HTTPS://www.jedimatt42.com/4afiles/menu/GAMES005.TXT

 

Curious, any plans for an extended CALL command? Something like...

 

SEND MENU

 

Where SEND would act like the call command, but send the contents of a DV/80 file, in this case the text quoted above in a file called MENU. This would enable users to create their own shortcuts while eliminating a lot of typing.

 

** EDIT **

 

I imagine something like this could also be used to access the weather, sort of like Greg's program, but return the data in full 80 columns.

Edited by --- Ω ---

Share this post


Link to post
Share on other sites

Curious, any plans for an extended CALL command? Something like...

 

SEND MENU

 

Where SEND would act like the call command, but send the contents of a DV/80 file, in this case the text quoted above in a file called MENU. This would enable users to create their own shortcuts while eliminating a lot of typing.

 

** EDIT **

 

I imagine something like this could also be used to access the weather, sort of like Greg's program, but return the data in full 80 columns.

I don't think I really understand... The term 'SEND' isn't making sense to me... where is it sending the contents of the D/V80 file?

 

You can do this, if you just need a shortcut:

 

GAMES=call PI.HTTPS://www.jedimatt42.com/4afiles/menu/GAMES005.TXT
 
That can go in your TIPI.AUTOCMD file, then the variable can be referenced:

 

$GAMES
Variables are expanded in a pre-process pass on any command, so they don't have to just be used in IF statements. In fact, IF doesn't know about variables at all... variables are expanded before parsing as a command.

 

I would eventually want to add the PATH variable concept to search for scripts or programs to run from.

 

For now you can have a directory with shortcut scripts and just use call to invoke them. If you had shortcuts in directory TIPI.S. such as a file called TIPI.S.MENU that contains the big long CALL with the URL, then you can CALL TIPI.S.MENU

 

Scripts can CALL other scripts.

 

[email protected]

  • Like 1

Share this post


Link to post
Share on other sites

I must admit I made TIPI updates, and forgot they are required to get that web hosted menu to work.

 

[email protected]

 

Yup! That worked! Thanks [email protected]!

As for your message #19, I'll respond to that after I get home from work home tonight, right now I'm outta time and have to split.

post-35324-0-59349900-1557665818.jpg

Share this post


Link to post
Share on other sites

Is anyone else having issues trying to access physical disks?

 

Never mind! RTFM Omega! This Force Command is slicker than snot on ice!

 

The change directory command uses the CRUBASE as well, so I can actually have two DSK1.'s and can switch between them! Cool beans [email protected]!

 

CD 1000.DSK1. (for my TIPI DSK1.)

CD 1100.DSK1. (for my P-Box DSK1.)

 

As I ...slowly... learn more about this DOS, I'm convinced there will be a lot of us converting to and using this before too long.

Edited by --- Ω ---

Share this post


Link to post
Share on other sites

I don't think I really understand... The term 'SEND' isn't making sense to me... where is it sending the contents of the D/V80 file?

 

I'll try to be a little bit more precise in what I was thinking...

 

The idea would have been to 'send' the contents of an individual file to the Rpi via a modified "call pi.https://" to whatever was specified in the individual file without the need to modify the AUTOCMD file.

 

Say for instance I wanted to load your game menu up, instead of typing the whole thing every time, I could save that information in a DV/80 file called "GAMES" then when I wanted to load it up, I'd just type 'SEND GAMES' from the DOS command. Over time I could add additional DV/80 files for additional sites or applications and effectively "grow my DOS" to suit my personal needs without having to mess with my AUTOCMD file and risk effing it up along the way.

 

I hope that was little clearer.

Share this post


Link to post
Share on other sites

I'll try to be a little bit more precise in what I was thinking...

 

The idea would have been to 'send' the contents of an individual file to the Rpi via a modified "call pi.https://" to whatever was specified in the individual file without the need to modify the AUTOCMD file.

 

Say for instance I wanted to load your game menu up, instead of typing the whole thing every time, I could save that information in a DV/80 file called "GAMES" then when I wanted to load it up, I'd just type 'SEND GAMES' from the DOS command. Over time I could add additional DV/80 files for additional sites or applications and effectively "grow my DOS" to suit my personal needs without having to mess with my AUTOCMD file and risk effing it up along the way.

 

I hope that was little clearer.

I think you can just use the CALL command to do what you want...

 

create a D/V80 file named GAMES containing:

 

call PI.HTTPS://www.jedimatt42.com/4afiles/menu/GAMES005.TXT
  
and from the Force Command prompt type

 

call GAMES
[email protected]

 

Edit: I do plan to establish a PATH variable like in command.com for Force Command, and look for scripts after looking at built-ins in the command handler.

  • Like 1

Share this post


Link to post
Share on other sites

I think you can just use the CALL command to do what you want...

 

create a D/V80 file named GAMES containing:

 

call PI.HTTPS://www.jedimatt42.com/4afiles/menu/GAMES005.TXT
   
and from the Force Command prompt type

 

call GAMES

 

I'll be dammed! This is EXACTLY what I wanted! It works flawlessly!

I'm a totally happy camper!

  • Like 1

Share this post


Link to post
Share on other sites

When the need for feature creep sets in... "TIME" would be a nice addition to the command set. I'd like to eventually add the current TIME/DATE to my AUTOCMD bootup screen sometime in the future.

  • Like 3

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...