Jump to content

Photo

CS1 capabilities


79 replies to this topic

#51 senior_falcon OFFLINE  

senior_falcon

    Stargunner

  • 1,215 posts
  • Location:Lansing, NY, USA

Posted Fri Jun 8, 2018 9:30 PM

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


  • RXB likes this

#52 Casey ONLINE  

Casey

    Moonsweeper

  • 276 posts

Posted Sat Jun 9, 2018 7:08 AM

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.



#53 RXB OFFLINE  

RXB

    River Patroller

  • 3,242 posts
  • Location:Vancouver, Washington, USA

Posted Sat Jun 9, 2018 8:46 AM

 

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, Sat Jun 9, 2018 8:49 AM.


#54 senior_falcon OFFLINE  

senior_falcon

    Stargunner

  • 1,215 posts
  • Location:Lansing, NY, USA

Posted Sat Jun 9, 2018 8:54 PM

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, Tue Jun 12, 2018 8:27 PM.


#55 Opry99er OFFLINE  

Opry99er

    Quadrunner

  • Topic Starter
  • 9,797 posts
  • Location:Hustisford, WI

Posted Sat Jun 9, 2018 9:42 PM

:o

#56 jrhodes OFFLINE  

jrhodes

    Chopper Commander

  • 131 posts
  • RUN "CS1"

Posted Sat Jun 9, 2018 10:03 PM

:o

Ditto :o



#57 senior_falcon OFFLINE  

senior_falcon

    Stargunner

  • 1,215 posts
  • Location:Lansing, NY, USA

Posted Sun Jun 10, 2018 7:06 AM

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, Tue Jun 12, 2018 8:26 PM.


#58 Opry99er OFFLINE  

Opry99er

    Quadrunner

  • Topic Starter
  • 9,797 posts
  • Location:Hustisford, WI

Posted Sun Jun 10, 2018 8:54 PM

Unreal.... thank you so much for this, Harry!!! :)

I am looking forward to exploiting this soon.

#59 senior_falcon OFFLINE  

senior_falcon

    Stargunner

  • 1,215 posts
  • Location:Lansing, NY, USA

Posted Tue Jun 12, 2018 8:24 PM

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)"

 

Attached Files


Edited by senior_falcon, Mon Jul 9, 2018 8:10 PM.


#60 ti99iuc OFFLINE  

ti99iuc

    Stargunner

  • 1,483 posts
  • Location:Italy

Posted Wed Jun 13, 2018 4:25 AM

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, Wed Jun 13, 2018 4:28 AM.


#61 senior_falcon OFFLINE  

senior_falcon

    Stargunner

  • 1,215 posts
  • Location:Lansing, NY, USA

Posted Wed Jun 13, 2018 5:48 AM

 

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, Wed Jun 13, 2018 9:52 AM.


#62 ti99iuc OFFLINE  

ti99iuc

    Stargunner

  • 1,483 posts
  • Location:Italy

Posted Wed Jun 13, 2018 7:04 AM

[...] 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, Wed Jun 13, 2018 7:14 AM.


#63 jrhodes OFFLINE  

jrhodes

    Chopper Commander

  • 131 posts
  • RUN "CS1"

Posted Wed Jun 13, 2018 7:52 AM

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.

 

Attached File  call load - call peek.xb goodies.ti994a.txt   6.48KB   11 downloads



#64 senior_falcon OFFLINE  

senior_falcon

    Stargunner

  • 1,215 posts
  • Location:Lansing, NY, USA

Posted Wed Jun 13, 2018 8:23 AM

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. 

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



#65 ti99iuc OFFLINE  

ti99iuc

    Stargunner

  • 1,483 posts
  • Location:Italy

Posted Wed Jun 13, 2018 8:34 AM

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.



#66 ti99iuc OFFLINE  

ti99iuc

    Stargunner

  • 1,483 posts
  • Location:Italy

Posted Wed Jun 13, 2018 8:48 AM

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

 

i have this on the real TI99

Attached File  1.png   266.42KB   4 downloads

 

instead splitting the CALL LOADs it seems to work
Attached File  2.png   388.52KB   3 downloads

 

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, Wed Jun 13, 2018 9:05 AM.


#67 senior_falcon OFFLINE  

senior_falcon

    Stargunner

  • 1,215 posts
  • Location:Lansing, NY, USA

Posted Wed Jun 13, 2018 9:56 AM

 

 

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.



#68 Opry99er OFFLINE  

Opry99er

    Quadrunner

  • Topic Starter
  • 9,797 posts
  • Location:Hustisford, WI

Posted Wed Jun 13, 2018 10:41 AM

Yes. I have a 20K XB program with embedded assembly code that I would like to be able to put on cassette for folks with tape only systems (with a sidecar 32k of course).

This will get me there!!

#69 senior_falcon OFFLINE  

senior_falcon

    Stargunner

  • 1,215 posts
  • Location:Lansing, NY, USA

Posted Wed Jun 13, 2018 12:54 PM

Yes. I have a 20K XB program with embedded assembly code that I would like to be able to put on cassette for folks with tape only systems (with a sidecar 32k of course).

This will get me there!!

Compare the two loaders for speed, convenience, etc. and post the results.



#70 RXB OFFLINE  

RXB

    River Patroller

  • 3,242 posts
  • Location:Vancouver, Washington, USA

Posted Thu Jun 14, 2018 8:30 AM

 

 

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, Thu Jun 14, 2018 8:30 AM.


#71 senior_falcon OFFLINE  

senior_falcon

    Stargunner

  • 1,215 posts
  • Location:Lansing, NY, USA

Posted Thu Jun 14, 2018 10:22 AM

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.



#72 RXB OFFLINE  

RXB

    River Patroller

  • 3,242 posts
  • Location:Vancouver, Washington, USA

Posted Thu Jun 14, 2018 1:13 PM

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]               ***********************************************************


#73 senior_falcon OFFLINE  

senior_falcon

    Stargunner

  • 1,215 posts
  • Location:Lansing, NY, USA

Posted Fri Jun 15, 2018 9:15 PM

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.

 

 

Attached Files



#74 --- Ω --- OFFLINE  

--- Ω ---

    --- Ω ---

  • 12,480 posts
  • Location:워싱턴 주

Posted Fri Jun 15, 2018 9:35 PM

 

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 >>



#75 Opry99er OFFLINE  

Opry99er

    Quadrunner

  • Topic Starter
  • 9,797 posts
  • Location:Hustisford, WI

Posted Fri Jun 15, 2018 10:17 PM

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!!




0 user(s) are browsing this forum

0 members, 0 guests, 0 anonymous users