Jump to content
IGNORED

CS1 capabilities


Opry99er

Recommended Posts

Did you try:

 

SAVE "CS1",IV254

 

Remember you have to have a file to save larger than 256 bytes long or will not work.

 

Looks like I have to pull out my TI99/4A from storage and test it.

Yes, it always gives you I/O ERROR 3. You never even get to the prompts for the cassette. Also, see my post #49

  • Like 1
Link to comment
Share on other sites

Yes, it always gives you I/O ERROR 3. You never even get to the prompts for the cassette. Also, see my post #49

 

Yes, this was the same experience I had on my real hardware, even with SAVE "CS1",IV254 - it just displays I/O Error 03.

Link to comment
Share on other sites

 

Yes, this was the same experience I had on my real hardware, even with SAVE "CS1",IV254 - it just displays I/O Error 03.

Well this is the problem with GROM 0 of the TI99/4A as it has restrictions built in....

TI INTERN MANUAL GROM 0
Open, Restore
1387 : CZ @>834E Logical record length
1389 : BR GROM@>1391
138B : ST VDP@>FFFA(@>8356),>40 Decimal 64 default value
1391 : ADD VDP@>FFFA(@>8356),>3F
1397 : AND VDP@>FFFA(@>8356),>C0 Round to integer number 64

GROM 0 rounds to a values of 32 or 64, thus 254 will error out for RXB use of SAVE "CS1",IV254

 

Now RXB 2001 up to 2015 does have:

 

CALL IO(4,number of bytes,VDP-address)

 

There are no prompts as this is direct CRU Cassette control so this does not use any GROM 0 GPL.

Thus you would need to write a XB program to run this routine, so would need to be merged with current XB program.

And of course is limited to the amount of VDP RAM free.

 

Now for example from COMMAND mode:

1. type in a program to save. (I used AMSTEST as a test program)

2. type: CALL I0(3,8,12,1) :: CALL IO(4,3884,10411)

3.turn on Cassette RECORD

4. press ENTER

5. When you hear no more sound from speaker STOP CASSETTE

 

Line 2 turns ON the Audio CRU line so you can hear the RECORDING.

Also in line 2 3884 bytes are written to Cassette from 10411 up to 14295 into VDP RAM

Edited by RXB
Link to comment
Share on other sites

gallery_34177_1071_514527.gif

Here is a way to trick XB into saving and loading long programs of over 12K to/from cassette. There is a custom saver/loader program called CASS24K. When you run this a short assembly program is loaded to low memory.

There are two assembly language subroutines: CALL LINK("SAVECS") and CALL LINK("OLDCS"). If you save a program that is short enough to be saved normally on cassette, then it will be saved in one segment as usual.

 

It is pretty easy to fool XB into doing this. To save a long program, save the line number table pointers at >8330 and >8332, then change them to point to >D2AC and >D2AF. The program segment from >D2AC to >FFE7 will be saved. Then restore the line number table pointers and set >8384 to >D2AB. The program segment from the line number table to >D2AB is saved. To load the program, load the first part normally. Then set >8384 to >D2AB and load the second segment. Then set >8384 back to >FFE7. You could do all this by hand, but CASS24K automates it.

 

(edit) removed attachment - see post 59 for latest version.

 

Edited by senior_falcon
  • Like 5
Link to comment
Share on other sites

gallery_34177_1071_6219.gif

I made a slight adjustment to the program to further automate the process. It is attached and here's how to use it:

OLD DSK1.CASS24K

RUN (this puts the assembly routines into low memory)

Then edit line 10 by uncommenting CALL LINK("OLDCS")

10 CALL INIT :: CALL LOAD(8192,255,172):: CALL LINK("X")!::CALL LINK("OLDCS")
Rewind the cassette tape and SAVE CS1
Then OLD DSK1.APERTURE-X (or another long program)
CALL LINK("SAVECS") and follow the prompts. Now the tape is ready to go.
NEW or QUIT, then get into XB. (You don't have to turn off the disk system as in my earlier video, I did that just to show there were no tricks)
Rewind the tape and RUN "CS1". Press enter until the program is running.
To find out if you need to load in 2 parts type SIZE. You need to do this two part loading if there are less than 12904 bytes of program space remaining.
(edit) Removed attachment - see post 59 for latest version
Edited by senior_falcon
  • Like 2
Link to comment
Share on other sites

CASS24K by Harry Wilhelm – 2018
Normally a TI99/4A with Extended BASIC, 32K memory expansion and a cassette player can only save to or load from cassette an XB program around 12K or 13K long. With the memory expansion you could write much longer programs than this, but unless you had a disk drive there was no way to save it
Two programs in this folder give the cassette only user the ability to use the cassette drive for XB programs of up to 24K in length. The programs do the same thing, but in different ways.
CASS24K1 will save and load programs using one internal, fixed 192 file
CASS24K2 fools XB into saving a long program as two shorter programs. When loading, these two halves are loaded, then recombined back into a single program.
APERTURE-X is a compiled program for testing that is about 17K long.
The steps are the same to use either one:
First, load either CASS24K1 or CASS24K2 from disk.
RUN will load the assembly routines to low memory.
Modify line 10 by removing the exclamation point after CALL LINK(“X”)
SAVE CS1 so the loader is first on the tape.
Load the XB program you want to save to tape. (OLD DSK1.program)
CALL LINK(“SAVECS”) and follow the prompts. (Don't rewind!)
To run the tape you just made:
Rewind to the beginning, type RUN “CS1” and follow the prompts.
These have been tested with the Win994a simulator. CASS24K1 is much slower on this simulator, but based on the tape counter I believe there will be no significant speed difference on a real TI99. Try them both out and use the one that works best for you.
(edit) I have uploaded a new version that fixes a bug in CASS24K2. If using CASS24K2 you must CALL FILES(1) before using it.
(edit2) I have uploaded the same program but with more information about the use of CALL FILES(1);
"When creating the tape, be sure you entered CALL FILES(1). After the tape is been created, only if the TI is connected to a disk system should you type CALL FILES(1) before RUN “CS1”. With only a cassette drive just type RUN “CS1”.
You do not have to SAVE CS1. You can save to disk if that makes it easier to use a WAV conversion program such as cs1er.
For example, a program called FRED could be saved as:
SAVE DSK1.FREDL (the loader)
SAVE DSK1.FRED1 (part 1)
SAVE DSK1.FRED2 (part 2)"

 

CASS24K070918.zip

Edited by senior_falcon
  • Like 2
Link to comment
Share on other sites


Wow, Really Thanks Harry, it also seems like the one that i hoped to have lately while archiving my cassette tapes for load long programs in Basic or XB that don't loading if a PEB with a disk controller is connected (it stops after the starting whistle and also CALL FILES (1) not solve)

I'll do some trials and hope it will work in this case too :P

Edited by ti99iuc
Link to comment
Share on other sites

 

Wow, Really Thanks Harry, it also seems like the one that i hoped to have lately while archiving my cassette tapes for load long programs in Basic or XB that don't loading if a PEB with a disk controller is connected (it stops after the starting whistle and also CALL FILES (1) not solve)
I'll do some trials and hope it will work in this case too :P

 

If I understand correctly, the presence of the disk drive keeps you from saving/loading lengthy XB programs to cassette that can be saved when the disk drive is not there. The utilities posted above can handle programs up to 24K long, but there is another possibility to do what you want.

No guarantee this will work, but you could try this:

OLD DSK1.program to load the XB program from disk

CALL INIT

CALL LOAD(-31974,63,255,"",-31936,63,255,"",-31888,63,255) This should tell the TI to use VDP ram that is normally reserved for the disk system.

SAVE CS1 or OLD CS1

 

 

CALL FILES(3) to reactivate the disk system or you may need to restart.

 

(This assumes you have the 32K expansion system)

Edited by senior_falcon
  • Like 1
Link to comment
Share on other sites

[...] you could try this:

OLD DSK1.program to load the XB program from disk

CALL INIT

CALL LOAD(-31974,63,255,""-31936,63,255,""-31888,63,255) This should tell the TI to use VDP ram that is normally reserved for the disk system.

SAVE CS1 or OLD CS1

 

CALL FILES(3) to reactivate the disk system or you may need to restart[...]

nice code ! :love:

starting the TI99 in XB connected to the PEB (and 32K inside of course) i copied the lines but had an error at the CALL LOAD one.

So i tried to split that line in three different CALL LOAD and was accepted without errors.

so, tried to load the program from CS1 and it worked too.

 

The Program can be executed but i can't save it on the disk.

CALL FILES (3) freeze the computer and i can only turn off and on again the TI99. :(

 

maybe exist another CALL LOAD to ability again the floppy drive and save the program on floppy disk ? :P

it should be so good and help me to save lot of time.

Edited by ti99iuc
Link to comment
Share on other sites

I have a list of CALL LOADs i keep handy, and according to it,

CALL LOAD(-31888,55,215)

should turn disk drives back on.

 

attachicon.gifcall load - call peek.xb goodies.ti994a.txt

really thanks for sharing the file and this info. I tried to use this instruction before to save on floppy disk.

now the disk controller led power on but sadly the drive not start to save :(

maybe something more still missing.

 

I also tried to digit CALL INIT again and so the CALL LOAD but it not change the problem.

Link to comment
Share on other sites

I left out two commas in that line. It should work now.

 

i have this on the real TI99

post-24673-0-67887900-1528901010.png

 

instead splitting the CALL LOADs it seems to work

post-24673-0-99226800-1528901027.png

 

maybe something change ?

it have to work only in single line ?

 

I just looking to understand a way to save it on Cassette tape using your suggested method because it seems to be a good one but i can't understand why the controller do not save it after i reactivate.
maybe because the program it is fully loaded in the 32k and not in the main one ?
a way to use your Cass24K1 or 2 and this method togheter, could be helpful to solve also my problem?
Edited by ti99iuc
Link to comment
Share on other sites

 

 

i have this on the real TI99

attachicon.gif1.png

 

instead splitting the CALL LOADs it seems to work

attachicon.gif2.png

 

maybe something change ?

it have to work only in single line ?

 

I just looking to understand a way to save it on Cassette tape using your suggested method because it seems to be a good one but i can't understand why the controller do not save it after i reactivate.
maybe because the program it is fully loaded in the 32k and not in the main one ?
a way to use your Cass24K1 or 2 and this method togheter, could be helpful to solve also my problem?

 

I just corrected the line. There should be a comma before and a comma after the double quotes. I fixed it before but must have forgotten to post it.

It could be that this method does not work. I haven't tested it. The programs I posted, CASS24K1 and CASS24K2 will do the job, with the slight cost of having to load a loader before loading the program.

Link to comment
Share on other sites

 

 

i have this on the real TI99

attachicon.gif1.png

 

instead splitting the CALL LOADs it seems to work

attachicon.gif2.png

 

maybe something change ?

it have to work only in single line ?

 

I just looking to understand a way to save it on Cassette tape using your suggested method because it seems to be a good one but i can't understand why the controller do not save it after i reactivate.
maybe because the program it is fully loaded in the 32k and not in the main one ?
a way to use your Cass24K1 or 2 and this method togheter, could be helpful to solve also my problem?

 

Ok as the author of RXB and I know the XB GPL source code intimately I will explain why you the one line will crash.

 

When you put in a ADDRESS then a list of numbers XB does not know you want to make another ADDRESS then list of numbers.

 

Hence the crash, but if you put the ADDRESS then list it works as designed, after all XB can not read minds.

Edited by RXB
Link to comment
Share on other sites

Ok as the author of RXB and I know the XB GPL source code intimately I will explain why you the one line will crash.

 

When you put in a ADDRESS then a list of numbers XB does not know you want to make another ADDRESS then list of numbers.

 

Hence the crash, but if you put the ADDRESS then list it works as designed, after all XB can not read minds.

Rich, that is just plain wrong. I could quote my credentials too, but none of that matters. This requires zero expertise; all you have to do is read the XB manual. On page 116 you will read:

 

"The LOAD subprogram can specify one or more files from which to load object data or lists of

direct load data, which consists of an address followed by data bytes. The address and data

bytes are separated by commas. Direct load data must be separated by file:field, which is a

string expression specifying a file from which to load assembly language object code.

Flle:field may be a null string when it is used merely to separate direct load data fields."

 

In my post #67 I wrote: "I just corrected the line. There should be a comma before and a comma after the double quotes. I fixed it before but must have forgotten to post it." The line should be: CALL LOAD(-31974,63,255,"",-31936,63,255,"",-31888,63,255)

If you look at the photo Ciro posted you will see that two commas are missing from the line, which is how I originally posted it. That is the reason the line crashes.

  • Like 1
Link to comment
Share on other sites

I stand corrected.

[0400]               ***********************************************************
[0401]               * ASSEMBLY LANGUAGE SUPPORT FOR 99/4
[0402]               *
[0403]               * LOAD, INIT, PEEK, LINK, CHARPAT      JDH  08/21/80
[0404]               ***********************************************************
[0405]               * FORMAT FOR LOAD:
[0406]               *  CALL LOAD open load-directive (comma load-directive)
[0407]               *            close
[0408]               *    load-directive = file-name / address (comma data)
[0409]               *                     (null / file-name)
[0410]               *    file-name      = string-expression
[0411]               *    address        = numeric-expression
[0412]               *    data           = numeric-expression
[0413]               *
[0414]               *  FILE TYPE = FIXED 80, DISPLAY , SEQUENTIAL FILE
[0415]               *
[0416]               * FUNCTION:
[0417]               *  LOADS ASSEMBLY LANGUAGE CODE INTO EXPANSION RAM
[0418]               *  ADDRESSES: >2000 - >>3FFF RELOCATING
[0419]               *  RELOCATABLE CODE INTO AVAILABLE MEMORY, ABSOLUTE CODE
[0420]               *  IS LOADED
[0421]               *  INTO ITS ABSOLUTE ADDRESS, ENTRY POINTS ARE DEFINED BY
[0422]               *  'DEF' STATEMENTS, AND ARE LOADED INTO HIGH END OF ERAM
[0423]               *
[0424]               *  RELOACATABLE OR ABSOLUTE CODE MAY BE STORED ON A FILE
[0425]               *  9900 OBJECT CODE FORMAT.
[0426]               *   VALID TAGS = 0, 5, 6, 7, 9, A, B, C, F,:
[0427]               *         TAGS 1, 2, I, M, ARE IGNORED
[0428]               *  THE SYMT OPTION IS NOT SUPPORTED.
[0429]               *  ABSOLUTE CODE MAY BE LOADED DIRECTLY FROM PROGRAM
[0430]               *  BY SPECIFYING AN ADDRESS INSTEAD OF A FILE NAME,
[0431]               *  FOLLOWED BY THE DATA TO BE LOADED (WHICH IS PUT IN THE
[0432]               *   RANGE 0 to 255
[0433]               *  THE RANGE OF THE ADDRESS OR DATA IS LIMITED TO
[0434]               *   32767 to -32768
[0435]               *  MULTIPLE DIRECT LOADS CAN BE IN THE SAME LOAD COMMAND
[0436]               *  PROVIDED THEY ARE SEPARATED BY EITHER A FILENAME OR A
[0437]               *   NULL STRING.
[0438]               *
[0439]               * RXB CHANGED MVUP TO GPL MOVE AS MOVING 2 BYTES USING 14 
[0440]               * BYTES OF GPL TO MOVE RAM TO SCRATCH PAD WAS SLOWER.
[0441]               *
[0442]               *  MVUP WAS USED TO TRANSFER DATA FROM CPU RAM TO ERAM
[0443]               *  SINCE IT WAS NOT KNOWN AT FIRST THAT THE MOVE
[0444]               *  INSTRUCTION COULD TRANSFER FROM CPU RAM TO ERAM
[0445]               *   (PROVIDED THAT >8300 IS SUBTRACTED FROM THE ADDRESSES)
[0446]               ***********************************************************
[0447]               * RXB PATCH CHANGED CALL INIT TO A GPL MOVE ALL 1 CHUNK 
[0448]               * REPLACING ORIGINAL TI MOVING 4 CHUNKS WITH MULTIPLE LOOPS
[0449]               ***********************************************************
Link to comment
Share on other sites

CASS24K is meant to save to cassette long XB programs that are too long to be saved normally. The workflow would normally be to read a program from disk and then save the program to cassette.

 

Ciro wants to do just the opposite. He wants to read a program from cassette and save it to disk. The problem is that in the old days long programs were written and saved to cassette. This works fine, but if you add a disk system some of the VDP memory is needed for disk operations. Now those long programs will not load from cassette. If you could load them they could then be saved to disk. I wrote a little utility for him that does what he needs.

 

The program is called DSKONOFF. Download the program and get it over to the TI. Load and run the program. This will copy the assembly routines into low memory.

 

If you CALL LINK("DSKOFF") the disk system is disabled which frees up the vdp ram so you have enough room to load a long cassette program with OLD CS1

Then CALL LINK("DSKON") and the disk system is enabled so you can save the program to disk.

 

 

DSKONOFF.zip

  • Like 3
Link to comment
Share on other sites

 

Ciro wants to do just the opposite. He wants to read a program from cassette and save it to disk. The problem is that in the old days long programs were written and saved to cassette. This works fine, but if you add a disk system some of the VDP memory is needed for disk operations. Now those long programs will not load from cassette. If you could load them they could then be saved to disk. I wrote a little utility for him that does what he needs.

 

 

 

I just popped in here and have not read this entire thread, but if Ciro has an HDX another method is to simply pull the FDC out of the P-Box. Turn on the system, load the tape and save to the HDX. Once the program is there, the sky is the limit.

 

<< Reference >>

Link to comment
Share on other sites

CASS24K is meant to save to cassette long XB programs that are too long to be saved normally. The workflow would normally be to read a program from disk and then save the program to cassette.

 

Ciro wants to do just the opposite. He wants to read a program from cassette and save it to disk. The problem is that in the old days long programs were written and saved to cassette. This works fine, but if you add a disk system some of the VDP memory is needed for disk operations. Now those long programs will not load from cassette. If you could load them they could then be saved to disk. I wrote a little utility for him that does what he needs.

 

The program is called DSKONOFF. Download the program and get it over to the TI. Load and run the program. This will copy the assembly routines into low memory.

 

If you CALL LINK("DSKOFF") the disk system is disabled which frees up the vdp ram so you have enough room to load a long cassette program with OLD CS1

Then CALL LINK("DSKON") and the disk system is enabled so you can save the program to disk.

 

 

 

Wow!!! I'm curious how you accomplished this!!

Link to comment
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.
Note: Your post will require moderator approval before it will be visible.

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...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...