Jump to content
IGNORED

TI Extended BASIC (Stuff)


Omega-TI

Recommended Posts

I found this file on one of my old Diskettes that I had converted earlier this year... some of you might find a use for this....




===============================================================================

TI-99/4A Memory Map

===============================================================================

================== ============================================================

ADDRESS , VALUE(S) MEANING IN EXTENDED BASIC

================== ============================================================


CALL VERSION(X) IF X=100 100= NEWEST VERSION OF X/B CART

8192 , P USE (PEEK,P) IF P<> 70 OR <>121 THEN DO A CALL INIT

8194 , FIRST FREE ADDRESS IN LOW MEMORY

8196 , LAST FREE ADDRESS IN LOW MEMORY

-28672 , P P=0 SPEECH NOT ATTACHED P=96 OR P=255 SPEECH IS ATTACHED

-31572 , 0 TO 255 VARY KEYBOARD RESPONSE

-31740 , P , Q PUT IN DIFFERENT TO CHANGE BEEPS,WARNINGS, ETC

-31744 , 0 TO 15 CONTINUATION OF LAST SOUND (0=LOUD AND 15=SOFT)

-31748 , 0 TO 255 CHANGE THE CURSOR FLASHING AND RESPONSE TONE RATES

-31788 , 160 BLANK OUT THE SCREEN (MUST PUSH A KEY TO ACTIVATE)

, 192 NO AUTOMATIC SPRITE MOTION OR SOUND

, 224 NORMAL OPERATION

, 225 MAGNIFIED SPRITES

, 226 DOUBLE SIZE SPRITES

, 227 MAGNIFIED & DOUBLE SIZED SPRITES

, 232 MULTICOLOR MODE (48 BY 64 SQUARES)

-31794 , P TIMER FOR CALL SOUND (COUNTS FROM 255 TO 0)

-31804 , X , Y RETURN TO THE TITLE SCREEN (USE "PEEK (2,X,Y)")

, P CHANGE THE CURSOR FLASH RATE (0 TO 255)

-31806 , 0 NORMAL OPERATION

, 16 DISABLE QUIT KEY (FCTN =)

, 32 DISABLE SOUND (USE NEG DUR FOR CONTINOUS SOUND)

, 48 DISABLE SOUND & QUIT KEY

, 64 DISABLE AUTO SPRITE MOTION

, 80 DISABLE SPRITES & QUIT KEY

, 96 DISABLE SPRITES AND SOUND

, 128 DISABLE ALL THREE

-31808 , P , Q DOUBLE RANDOM NUMBERS (0 TO 255) NEED "RANDOMIZE"

-31860 , 4 GO FROM EX-BASIC TO CONSOLE BASIC (NEED "NEW")

, 8 AUTO RUN OF DSK1.LOAD

-31866 , P , Q END OF CPU PROGRAM ADDRESS (P*256+Q)

-31868 , 0 NO "RUN" OR "LIST" AFTER "BREAK" IS USED

, 0 , 0 TURNS OFF THE 32K MEMORY EXPANSION

, 255 , 231 TURNS ON THE 32K MEMORY EXPANSION

-31873 , 3 TO 30 SCREEN COLUMN TO START AT WITH A "PRINT"

-31877 , P P&32 = SPRITE COINCIDENCE P&64 = 5 SPRITES ON A LINE

-31878 , P HIGHEST NUMBER SPRITE IN MOTION (0 STOPS ALL)

-31879 , P TIMER FOR VDP INTERRUPTS EVERY 1/60 OF A SEC (0 TOP 255)

-31880 , P RANDOM NUMBER (0 TO 99) NEED "RANDOMIZE"

-31884 , 0 TO 5 CHANGE KEYBOARD MODE (LIKE "CALL KEY(K,...)")

-31888 , 63 , 255 DISABLE ALL DISK DRIVES (USE "NEW" TO FREE MEMORY)

, 55 , 215 ENABLE ALL DISK DRIVES (USE "NEW" TO FREE DRIVES)

-31931 , 0 UNPROTECT X-B PROTECTION

, 2 SET "ON WARNING NEXT" COMMAND

, 4 SET "ON WARNING STOP" COMMAND

, 14 SET "UNTRACE" COMMAND

, 15 SET "UNTRACE" COMMAND & "NUM" COMMAND

, 16 SET "TRACE" COMMAND

, 64 SET "ON BREAK NEXT" COMMAND

, 128 PROTECT X/B PROGRAM

-31952 , P PEEK P=55 THEN 32K EXPANSION MEMORY IS OFF <>55 MEANS ON

-31962 , 32 RETURN TO THE TITLE SCREEN

, 255 RESTART X/B W/DSK1.LOAD

.


-31974 , P , Q END OF VDP STACK ADDRESS (P*256+Q)

-32112 , 8 SEARCHES DISK FOR ?

-32114 , 2 RANDOM GARBAGE

, 13 SCREEN GOES WILD

, 119 PRODUCE LINES

-32116 , 2 RANDOM CHARACTERS ON SCREEN

, 4 GO FROM X/BASIC TO BASIC

-32187 , 0 UNPROTECT XB PROGRAM

, 2 SET "ON WARNING NEXT" COMMAND

, 4 SET "ON WARNING STOP" COMMAND

, 9 SET 0 LINE NUMBER

, 14 SET "UNTRACE" COMMAND

, 15 SET "UNTRACE" COMMAND & "NUM" COMMAND

, 16 SET "TRACE" COMMAND

, 64 SET "ON BREAK NEXT" COMMAND

, 128 PROTECT XB PROGRAM

-32188 , 1 CHANGE COLOR AND RECEIVE SYNTAX ERROR

, 127 CHANGE COLOR AND RECEIVE BREAKPOINT

-32630 , 128 RESET TO TITLE SCREEN

-32699 , 0 UNPROTECT XB PROGRAM

, 2 SET "ON WARNING NEXT" COMMAND

, 4 SET "ON WARNING STOP" COMMAND

, 14 SET "UNTRACE" COMMAND

, 15 SET "UNTRACE" & "NUM" COMMAND

, 16 SET "TRACE" COMMAND

, 64 SET "ON BREAK NEXT"

, 128 PROTECT XB PROGRAM

-32700 , 0 CLEARS CREEN FOR AN INSTANT

-32729 , 0 RUN "DSK1.LOAD"

-32730 , 32 RESET TO TITLE SCREEN

-32961 , 51 RESET TO TITLE SCREEN

, 149 SETS "ON BREAK GOTO" LOCKS SYSTEM




  • Like 1
  • Thanks 1
Link to comment
Share on other sites

================================================================================

TI-99/4A Ram Disk 24K Initialization Instructions

================================================================================


If you need to work with quite a bit of data or would like to change programs,

but save the data after you press CALL QUIT, then you can set up the 24K of

High-Memory in the PEB as a single data file called "EXPMEM2". You open this

file just as you would a disk file with one exception - you must PRECEDE the

OPEN statement with a CALL LOAD to the location -24574 as follows:.


For INT/VAR files - 24

For DIS/VAR files - 16

For INT/FIX files - 8

For DIS/FIX files - 0


Here's an example:


If you want to open up the Expansion Memory for Display,Variable 80 files this

is what you'd do:.


100 CALL INIT

110 CALL LOAD(-24574,16)

120 OPEN #1:"EXPMEM2" ,RELATIVE,

UPDATE ,DISPLAY,VARIABLE 80 .


Then continue on as you would normally..


If you want to store both data and assembly language routines at the same time,

try:.


100 CALL INIT

110 CALL LOAD(-24574,-16)

120 OPEN #1:"EXPMEM2"

130 CALL LOAD ("DSK1.ASSM1")

140 CALL LOAD ("DSK2.ASSM2")

150 CALL LINK ("START")

160 REM CONTINUE REST OF PROGRAM


In the above example, the 24 K of high-memory was saved for use as a DATA file

(DIS/VAR 80 format) then the assembly routines were loaded. The computer will

look for the best place to put the routines and will adjust the pointer

accordingly. After the routines are loaded, a LINK statement starts the first

routine and off we go.
  • Like 2
  • Thanks 1
Link to comment
Share on other sites

Here is a list I was working on some time back (hope the formatting isn't too painful.). There are quite a few duplicates compared to the OP but also some additional stuff. It was a work in progress so descriptions are a little on the rough side.

 

* Edit - Sorry. Formatting went crazy. I will attempt to import differently and re-post when sorted.

Edited by Bones-69
  • Like 2
Link to comment
Share on other sites

Hey Bones-69,

I loved your post, and was able to snag it before you edited it out! Anyway, I cleaned it up a little for you. :)

I did not test any of them though......

 

 

CALL LOADS

 

14586,0 Resets System?

-30945,0 Creates a white edge character

-31572,X Varies keyboard response

-31730,33 Quits extended basic to Master title screen

-31740,2,2 Continuation of the last sound generated

-31740,a,B Change sounds by changing a & b.Sound will stay on until another sound is made.

-31744,X Contines sound (0=loud 15=quiet)

-31745,0 Freezes screen then blanks it out (restore with FCTN-)

-31748,x x=0 makes all tones stop and the cursor halts. X can equal 0 to 18 with different results

-31788,160 Blanks screen on next keypress

-31788,192 Disable sprite action and automatic sound

-31788,232 * Do not know what this does

-31788,224 Normal operation

-31788,225 Magnified sprites

-31788,226 Double sized sprites

-31788,227 Magnified, double size sprites

-31788,232 Multi color mode (48 x 64 squares)

-31794,X Timer for CALL SOUND (x=0 TO 255)

-31804,1 Produces a very mushy keyboard

-31804,X Set cursor blink rate (0 to 255)

-31804,0,36) Quit extended basic to Master title screen

-31806,128 BIT 0 ON -31806,64 BIT 1 ON

-31806,32 BIT 2 ON -31806,16 BIT 3 ON

-31806,0 ALL BITS OFF -31806,48 BITS 2 & 3 ON

-31806,80 BITS 1 & 3 ON -31806,96 BITS 1& 2 ON

-31806,x Makes all sprites >X stop

-31860,0 Runs DSK1.load

-31860,4 Go from extended basic to console basic after NEW and cannot use memory expansion

-31860,8 run "DSK1.LOAD" and restart XB

-31862,128 Restarts XB, looks for DSK1.load and runs it

-31866, X Does not allow full access of 32K (X=1 to 159)

-31866,33,0 Gives console extra 8K of memory expansion

-31868,0 No RUN of LIST after FTCN-4

-31868,0,0 Turns the 32K memory off

-31868,255,231 turns the 32K memory back on

-31884,X Change keyboard mode (x=0 to 5)

-31885,255 Execute BYE command

-31888,63,255 Increases memory by turning off disk drives. Use NEW to free memory

-31888,55 Turns the disk drives back on

-31888,55,215 Turns the disk drives back on. Use NEW for buffers

-31873,X START PRINTING AT COLUM X (X=3 TO 30)

-31877,X 32 SPRITE COINCIDENCE. 64= 5 SPRITES ON A ROW

-31878,0 SHUTS OFF SPRITE CHECKING SO xb PROGRAMS RUN FASTER

-31878,X Turn off sprites (X= number of sprite. If X=0 then turn off all sprites)

-31879, X VDP timer (X=0 to 255)

-31888,63,255 Will not reserve any room in the VDP RAM for disk buffers

-31888,63,255 Shut down all disk drives, same as CALL FILES(0) to gain additional program memory

-31888,55,215 Turn drives back on.

-31926,255 Restart XB and will run LOAD program if It exists

-31931,0 Unprotects XB program

-31931,2 Set command ON WARNING NEXT

-31931,4 Set command ON WARNING STOP

-31931,16 Set command TRACE

-31931,64 Set command ON BREAK NEXT

-31931,128 Add XP protection

-31961,149 Restarts XB, looks for DSK1.load and runs it

-31961,51 Quite XB and return to master title screen

-31962,0,32 Execute power up routine - does not close files

-31962,33,111 Go directly to TI BASIC

-31962,99,114 RUN "DSK1.LOAD" and restart XB

-31962,100,124 Execute NSW command

-31962,100,126 Execute CONTINUE command

-31962,100,128 Execute LIST command

-31962,100,130 Execute BYE command. Closes all files

-31962,100,132 Execute NUM command. Interesting results when run from program.

-31962,100,136 Execute RES command.

-31962,100,155 Execute RUN command

-31962,160,000) Returns to title screen but corrupts display

-31962,160,04 Executes RUN without PRESCAN

-31962,101,190 Execute LIST from command prompt. Interesting results when placed in program

-31962,55 Runs DSK1.load -31962,72 Return to title screen

-31962,255 Look for DSK1.load

-31931,0 Deletes XB protection

-31931,128 Adds XB protection

-31932,0 Removes **ready** at command prompt

-31932,1 Returnes **Ready** at command prompt

-31961,149 Will re-set console and load DSK1.LOAD

-31962,255 Restarts XB

-31962,8787 Go from XB to basic. Ignore error message. Type new & enter

-372272,0,"",-30945,0) Will change to 40 column

-32116,4 Go from XB to basic and not loose program

-32112,8 Searches disk??

-32114,2 Loads random garbage on screen

-32114,3 Screen goes wild

-32114,13) Screen goes wild

-32114,119 Puts wild lines & boxes on screen

-32116,1 Puts random characters on screen

-32116,2 Random characters on screen

-32116,4 Puts you into Basic from Extended Basic without losing the program in memory

-32116,8 searches disk and loads a program call load

-32187,9 0 LINE NUMBER which can't be used

-32188,127 Changes screen color and gives a breakpoint

-32188,1 Changes screen color and gives a syntax error

-32352,0 Makes the screen transparent

-32572,1 Produce distorted keyboard response

-32572,128 Disable keyboard

-32630,0 Master title screen without graphics

-32630,128 Restarts XB and runs LOAD program if found

-32699,0 Deletes XB protection

-32699,2 Activates ON WARNING NEXT

-32699,4 Activates ON WARNING STOP

-32699,14 Stop TRACE

-32699,16 Activates trace

-32699,64 Activates ON BREAK NEXT

-32699,128 Potect XB program

-32700,0 Stops program without ready prompt

-32729,0 loads DSK1.LOAD

-32730,32 Returns to title screen

-32748,X x=0-255 cursor flash rate

-32766,0 will put you in bitmap mode

-32768,0 Puts you in basic from XB

 

CALL PEEK

 

8198,A,B IF A=170 & B=85 then CALL INIT has already been executed

8192,X x=32 you are in extended basic X=165 you are in basic with EA or MM modules inserted

-27648,x,x,x,x Speech chip locations

-28672,X X=0 THEN SPEECH NOT ATTACHED X=96 THEN THE SPEECH SYNTHESIZER IS ATTACHED

-31808,X X=Random number between 0-255

-31808,x,x Double random number. Requires RANDOMIZE

-31863,A A=231 IF 32k IS PRESENT

-31877,X X=32 THEN THERE IS A SPRITE COINCEDENCE, X=64 5 sprites on a row

-31878 poke 0-26 highest #sprite in motion.

-31879,A Video interupt timer. Increases every 60th of a sec. Produces numbers between 0-256

-31880,X X= Random number between 0-99

-31936,A,B A*256+B-2487 IS EXACT AMOUNT OF FREE STACK SPACE WHILE PROGRAM IS RUNNING

-31952 PEEK a,b,c,d. Recovers program with load

-31952,X IF x=55 then memory expansion is off else it is on.

-31952,x,x,x,x Line number table in memory expansion

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

Hey Bones-69,

I loved your post, and was able to snag it before you edited it out! Anyway, I cleaned it up a little for you. :)

I did not test any of them though......

 

 

CALL LOADS

 

...

-31788,232 * Do not know what this does

...

 

That's storing E8h at 83D4h, which KSCAN uses to update VDP Register 1 (VR1) every keystroke. E8h sets bits 0, 1, 2 and 4 (TI's counting from the high bit down!?!) of VR1. Bit 0 sets VRAM to 4/16KB for 0/1. Bit 1 turns the display off/on for 0/1. Bit 2 sets VDP interrupt to disable/enable for 0/1. Bit 4 puts the VDP in multicolor mode if it is set to 1. So, I guess this line should be labeled "Sets display to multicolor mode".

 

...lee

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

  • 1 month later...

Is any part of VDP RAM save to use with XB (32K assumed)? Can you, for instance, limit the size of the stack?

 

I'm thinking it would be interesting to write some F18A support routines for XB, but anything except palette changes and single page scrolling would require the use of extra VDP RAM. Two page horizontal scrolling, for instance, would require 2K.

  • Like 1
Link to comment
Share on other sites

Is any part of VDP RAM save to use with XB (32K assumed)? Can you, for instance, limit the size of the stack?

 

I'm thinking it would be interesting to write some F18A support routines for XB, but anything except palette changes and single page scrolling would require the use of extra VDP RAM. Two page horizontal scrolling, for instance, would require 2K.

 

Well—you should be able to keep track of VRAM use by checking a couple of PAD RAM locations. 8370h has this highest available VRAM value (37D7h for 3 simultaneously open files). XB string space starts at the highest available VRAM when XB starts up. Both the string space (bottom in 831Ah; top in 8318h) and the PAB linked list (first link in 833Ch—0000 at startup) grow down from high VRAM. The value stack (top in 836Eh) grows up from 0958h. That leaves a startup amount of ~11,900 bytes. This information is from Thierry's site.

 

I don't know whether XB creates file buffers with the PABs or uses the native buffers in high VRAM (likely); but, I should think you could track what's avaiable to your program by monitoring the high-value-stack and low-string-space addresses along with PABs.

 

...lee

  • Thanks 1
Link to comment
Share on other sites

  • 3 years later...

Live Again old topic you! Rise!

OK, enough of the theatrics.

 

So i have been saving cassette programs I found to disk only one of them is copy protected.

 

That's when I was directed here.

With XB cart inserted and loaded, I OLD CS1 the program without issues.

Trying to save to disk or "LIST" the program and I get a "Protection violation" error.

So trying to understand the above topic.

 

I have the program loaded from tape.

I then type each line below hitting enter after each. Then I can save the program to disk?

 

CALL INIT

CALL LOAD(-31931 , 0)

Link to comment
Share on other sites

Is any part of VDP RAM save to use with XB (32K assumed)? Can you, for instance, limit the size of the stack?

 

I'm thinking it would be interesting to write some F18A support routines for XB, but anything except palette changes and single page scrolling would require the use of extra VDP RAM. Two page horizontal scrolling, for instance, would require 2K.

Hi Rasmus:

Take a look at post #9 in the thread "80 columns with F18A and Extended BASIC". Download the attached file and look at 80TEST.TXT. What you want to do is described there.

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

Is any part of VDP RAM save to use with XB (32K assumed)? Can you, for instance, limit the size of the stack?

 

I'm thinking it would be interesting to write some F18A support routines for XB, but anything except palette changes and single page scrolling would require the use of extra VDP RAM. Two page horizontal scrolling, for instance, would require 2K.

You can modify the VDP DATA STACK with a CALL LOAD but a ERROR of any kind or Garbage Collection resets it back to normal.

  • Thanks 1
Link to comment
Share on other sites

You can modify the VDP DATA STACK with a CALL LOAD but a ERROR of any kind or Garbage Collection resets it back to normal.

This is true, but it is not the whole story. There is a way around it. If there weren't, then how could The Missing Link or XB256 possibly work? If you are interested, I refer you to post #9 in the thread "80 columns with F18A and Extended BASIC".

 

I should add that this thread can be found in TI-99/4A Computers, not in TI99/4A Development

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

Sinphaltimus, if it isn't a hybrid Assembly/XB program (or one that explicitly tests to see if that CALL LOAD has been used), it should work.

Thanks, I actually waited all this time for an answer. :) I can try that. I'll do it sometime this week and let you know if it worked.

 

EDIT: IT WORKED! thanks. I actually understood something on the first go.

Edited by Sinphaltimus
  • Like 3
Link to comment
Share on other sites

This is true, but it is not the whole story. There is a way around it. If there weren't, then how could The Missing Link or XB256 possibly work? If you are interested, I refer you to post #9 in the thread "80 columns with F18A and Extended BASIC".

 

I should add that this thread can be found in TI-99/4A Computers, not in TI99/4A Development

The Missing Link is not compatible with anything other than itself actually. Great product as long as you do not leave this restricted environment.

 

And XB256 has the same issue as both take over interrupts. I have tested both and once you return to XB it will crash as it does not restore normal pointers.

 

Yes you can do this but honestly it is not backwards compatible. Great products but do not paint a rosey picture without honesty.

 

Example: Try to load any other Assembly support with the TML or XB256 and it will crash especially with extended memory cards like:

 

http://www.ninerpedia.org/index.php?title=Memory_Expansion_Cards

 

Maybe these can be updated to be more backwards compatible.

Edited by RXB
  • Thanks 1
Link to comment
Share on other sites

The Missing Link is not compatible with anything other than itself actually. Great product as long as you do not leave this restricted environment.

 

And XB256 has the same issue as both take over interrupts. I have tested both and once you return to XB it will crash as it does not restore normal pointers.

 

Yes you can do this but honestly it is not backwards compatible. Great products but do not paint a rosey picture without honesty.

 

Example: Try to load any other Assembly support with the TML or XB256 and it will crash especially with extended memory cards like:

 

http://www.ninerpedia.org/index.php?title=Memory_Expansion_Cards

 

Maybe these can be updated to be more backwards compatible.

The code for both XB256 and Missing Link resides in low memory. Both of these use an interrupt driven routine to check for a few things, the most important of which is to see whether a 'garbage collection' has happened. If you use a memory expansion such as your beloved SAMS card that pages in different code at >2000 then of course the program will crash. So the SAMS card and perhaps other memory expansions are out, which is probably the kiss of death as far as you wanting to use these. (I am also guessing that "Not invented here" is also a factor.) I think that some memory expansion cards page in memory at >4000 and so they should be compatible.

 

When you talk about a 'restricted environment", for the life of me I am not sure what you refer to. With both you can type in or modify programs normally using the XB line editor. It is true that with Missing Link you are pretty much restricted to bit mapped graphics. Many would find that liberating rather than restrictive, but each to their own. There is a way to use the normal graphics mode while running a Missing Link program which is detailed in the manual.

 

You say that with XB256 "once you return to XB it will crash". Since both of these run in the XB environment I have no idea what you are referring to with this statement. If you want to use XB without XB256 - i.e. turn off the interrupt routine, the procedure is not terribly arduous. CALL LINK("OFF") or if that is too complex you can quit to the title screen and start over with the interrupts turned off.

 

"Try to load any other Assembly support with the TML or XB256 and it will crash." Provide an assembly subroutine that you would like to load (that doesn't involve paging in code at >2000) and I can show you how to load it.

 

I have mentioned earlier that a useful addition to RXB would be the ability to reserve VDP memory for the users purposes. Instead of the top of the stack being at >0958 you could set it to whatever you want. This would eliminate the need for an interrupt routine to keep track of this housekeeping chore.

  • Like 2
Link to comment
Share on other sites

That's how I do it when I use bit-mapped graphics in Pascal. The UCSD p-system for the 99/4A isn't intended for that mode. It supports the normal graphics mode, text mode (default) and multicolor, but not bit-map, due to the memory requirement. But provided the p-system hasn't already reserved too much memory in VDP RAM, you can modify a location called "interpreter's memory pointer" to tell it that most of VDP RAM is unavailable. Then it's actually possible to run bit-mapped graphics on the 99/4A too. The system will automatically load Pascal programs to the memory expansion instead.

  • Like 1
Link to comment
Share on other sites

The Missing Link is not compatible with anything other than itself actually.

 

Careful, the same could be said about the RXB environment and multitudes of software and hardware. ;)

 

I've used XB256 under the conditions you mention and it seemed to work just fine, no crashing that I experienced. I was using my SAMS card but I wasn't doing any paging operations. What sort of program was crashing?

  • Like 2
Link to comment
Share on other sites

When you talk about a 'restricted environment", for the life of me I am not sure what you refer to. With both you can type in or modify programs normally using the XB line editor. It is true that with Missing Link you are pretty much restricted to bit mapped graphics. Many would find that liberating rather than restrictive, but each to their own. There is a way to use the normal graphics mode while running a Missing Link program which is detailed in the manual.

 

You say that with XB256 "once you return to XB it will crash". Since both of these run in the XB environment I have no idea what you are referring to with this statement. If you want to use XB without XB256 - i.e. turn off the interrupt routine, the procedure is not terribly arduous. CALL LINK("OFF") or if that is too complex you can quit to the title screen and start over with the interrupts turned off.

 

"Try to load any other Assembly support with the TML or XB256 and it will crash." Provide an assembly subroutine that you would like to load (that doesn't involve paging in code at >2000) and I can show you how to load it.

 

I have mentioned earlier that a useful addition to RXB would be the ability to reserve VDP memory for the users purposes. Instead of the top of the stack being at >0958 you could set it to whatever you want. This would eliminate the need for an interrupt routine to keep track of this housekeeping chore.

I have a RXB demo from RXB version 2001 that I showed at the Utah Fest West that ran many varied Lower 8K products from various vendors all from XB Lower 8K using RXB.

 

The original demo had 22 Assembly Lower 8K programs all running from a single XB program demo that took up 176K of my 512K SAMS at that time.

 

(Actual demo starts at 8:30 into video, not my best demo)

 

(A much better video demo of what the fist video was attempting to do.)

 

Wish to hell I had the original USER file I made to run this demo as it was created but lost that in a SCSI hard drive crash along with other stuff.

 

 

 

As for moving VDP DATA STACK from >0958 this would crash many other programs as they expect VDP DATA STACK to be at the correct location.

  • Thanks 1
Link to comment
Share on other sites

As for moving VDP DATA STACK from >0958 this would crash many other programs as they expect VDP DATA STACK to be at the correct location.

Don't believe that's true unless they use virtually all the 11840 bytes of string space. I'd be happy to test out any program that you think will crash as described above. Most programs do not use huge amounts of strings. I have given Rasmus the information he needs to move the top of the stack using an interrupt routine and I fully expect to see some great things from him for the F18A (hint, hint). When released, many people will enjoy using them. But I suspect that you will be the odd man out, complaining about the lack of compatibility with SAMS.

 

By the way, I believe there is a fairly simple way to use XB256 along with SAMS. I'd have to move the interrupt routine so it is above >3000. Then page in SAMS from >2000 to >2FFF, CALL INIT, then use a CALL LOAD to set the pointer at >2004 to be >3000. Then you should be able to load assembly routines into SAMS via CALL LOAD.

  • Like 4
Link to comment
Share on other sites

Don't believe that's true unless they use virtually all the 11840 bytes of string space. I'd be happy to test out any program that you think will crash as described above. Most programs do not use huge amounts of strings. I have given Rasmus the information he needs to move the top of the stack using an interrupt routine and I fully expect to see some great things from him for the F18A (hint, hint). When released, many people will enjoy using them. But I suspect that you will be the odd man out, complaining about the lack of compatibility with SAMS.

 

By the way, I believe there is a fairly simple way to use XB256 along with SAMS. I'd have to move the interrupt routine so it is above >3000. Then page in SAMS from >2000 to >2FFF, CALL INIT, then use a CALL LOAD to set the pointer at >2004 to be >3000. Then you should be able to load assembly routines into SAMS via CALL LOAD.

RXB has a built in SAMS routine to switch banks >2000->2FFF and >3000->3FFF

 

CALL SAMS(lowerbank,upperbank) ! Numbers range from 0 to 240 (960k) presently as 32K is allotted to PASS mode and 32K is reserved by me for future use. (Multiple XB 24K upper memory)

 

And I will include routines you ask for like F18 support.

 

Loading Assembly with CALL LOAD is slow and troublesome so RXB has CALL BLOAD and CALL BSAVE that saves/loads lower 8K from Program Image files being much faster. (No CALL INIT needed)

 

I suppose you could move the VDP DATA STACK to >37D7->3797 and just assume a CALL FILES(3) like XB normally does. (Problem is a CALL FILES(1 or 2) would be useless for freeing up memory)

 

I will make a note to test this. And what are the routines I would need to install for F18 support?

  • Like 1
Link to comment
Share on other sites

The routine that does a garbage collection will change the pointers so they are >0958. If you can make that so the user can set the top of the stack instead of defaulting to >0958 then vdp ram can be reserved that XB will not touch. A new call like SETSTACK(4096) or RESVDP(4096) could store the number passed somewhere, maybe in the unused part of the color table or someplace else. Then, when a garbage collection happens the routine sets the pointer to that number instead of defaulting to >0958. That's the main part of the interrupt routine used by TML and XB256. The value 4096 equals >1000, so VDP memory from >0958 to >0FFF would not be used by the XB interpreter and is available to the user. I don't think resetting the top of the stack is safe to do from a running program, which is why both TML and XB256 loaders set up the interrupt and then end the XB program.

  • Like 1
Link to comment
Share on other sites

>0958 up to >0FFF is normally the VDP DATA STACK default location.

Now XB ROMs do have XML VPUSH and XML VPOP to push/pop data onto the 64 bytes of the VDP DATA STACK and changing the location does not affect the XB ROMs unless Garbage Collection is done.

 

Many locations in GPL of XB and a couple in XB ROMs would need to be changed, overall the biggest issue is these are hard coded not floating locations.

 

Also buffer space can be from 1 byte to 11.7K in size created by XB ROM routine XML GETSTR (This allocates VDP space for temporary buffers or strings.)

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

this is all really neat stuff!

 

I've spent today looking at my dad's Extended Basic code, and it amazes me how compact the coding is for what it does. I learned some new commands too:

 

Pre-scan control

Pre-scan is used to allocate memory before the BASIC program starts. It causes a notable pause before the first statement executes, because the pre-scan process scans the whole program for variables and subprograms. Extended Basic allows for a quicker start-up by turning pre-scan off and on; these lines are specific comment lines.

100 GOTO 150
110 A=0 :: B$=""
120 DATA 1
150 !@P-

 

this is some cool stuff!

 

plus looking at the way he coded subroutines and assigned variables for music notes, which i found was really similar to how i did it by pure dumb luck and reading the Extended Basic manual. :)

  • Like 3
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...