Jump to content
Bones-69

RXB - Rich Extended Basic

Recommended Posts

One other general note: you can't use the SAMS cards in a Geneve, so there are no byte reversal issues--you only have to make sure it works in a 99/4A.

 

On SAMS memory, my original post covers how it works--no matter how big (or small) the SAMS card is. The key to wrapping your mind around memory use is all in the bytes.

 

The first byte written is IGNORED by SAMS cards up to 1M in size, as they don't use the four high-order bits being written to. Even though they are ignored, SOMETHING has to be written there, as it is used to populate the top four bits of the bank registers. The 74LS612 then takes the second byte and uses it to set up the 8 low-order register bits. Some of these bits may also be ignored by the SAMS card, specifically when the card is smaller than 1M. A 256K SAMS card ignores the two highest-order bits in the second byte, a 128K AEMS card ignores the three highest-order bits in the second byte, and the earliest, 64K AEMS boards (these do exist, as I have actually seen/held one BITD) would ignore the four highest-order bits of the second byte. 

 

This behavior changes a bit with 4M and larger SAMS cards, as that first, high-order byte now has meaning to the entire card (and not just the 74LS612). The last two bits of the first btye select between four different 1M zones (with further subdivision within each 1M zone being controlled by the 8 bits of the low-order byte) on a 4M card. On a 16M card, all four of the high-order bits of relevance to the 74LS612 are used to select between 16 different 1M zones, again, with the low-order byte controlling paging within the currently visible 1M zone. The bits in the high-order byte set the 1M zone, and the bits in the low-order byte select the pages within that zone.

 

If you have been following that convention, I don't think you'll need to do a rewrite, Rich.

  • Like 5
  • Thanks 1

Share this post


Link to post
Share on other sites

It only took me 6 months to understand SAMS...not bad..whihooo. I'm on a roll...

Oops, just got passed by another turtle....

I think someone has a geneve booting from tipi though, but yeah, cannot use SAMs ram. So bad...I hope someone takes care of that issue.

  • Like 3

Share this post


Link to post
Share on other sites

RXB 2020 C DONE!

Just fixing things I forgot to put in package like this:

10 ! THIS PROGRAM HAS BEEN
11 ! MODIFIED SO NO ASSEMBLY
12 ! IS USED. RXB COMMANDS
13 ! ARE THE ONLY COMMANDS
14 ! USED. THAT MEANS THE
15 ! AMS CAN HAVE ANY PAGE
16 ! SWAPED FROM RXB.
17 !*********************
18 !*                   *
19 !*    XB AMS CARD    *
20 !*   QUERY PROGRAM   *
21 !*                   *
22 !*********************
23 !VERSION 1.07.951206
24 !BY P. E. SCHIPPNICK
25 !MODIFIED FOR RXB
26 !BY RICH GILBERTSON
27 CALL CLEAR :: GOSUB 28 :: GOTO 29
28 CALL VCHAR(1,31,31,96) :: RETURN
29 FOR I=1 TO 14 :: CALL COLOR(I,2,8) :: NEXT I
30 CALL SCREEN(15)
31 GOTO 33
32 DISPLAY AT(ROW,(28-LEN(TEXT$))/2):TEXT$ :: RETURN
33 ROW=10 :: TEXT$="TI EXTENDED BASIC" :: GOSUB 32
34 ROW=11 :: TEXT$="AMS CARD" :: GOSUB 32
35 ROW=12 :: TEXT$="QUERY PROGRAM" :: GOSUB 32
36 ROW=13 :: TEXT$="VERSION 1.07" :: GOSUB 32
37 ROW=15 :: TEXT$="BY P. E. SCHIPPNICK" :: GOSUB 32
38 ROW=17 :: TEXT$="MODIFIED FOR RXB" :: GOSUB 32
39 ! SET-UP ASSEM SUPPORT
40 GOSUB 109
41 ! TEST MAP/PASS
42 GOSUB 112
43 ! TEST FOR AMS SIZE
44 GOSUB 91
45 ! MAPPED PAGES
46 GOSUB 60
47 IF M2=M3 THEN CALL CLEAR :: GOSUB 28 :: PRINT :"* NO AMS CARD" :: CALL SOUND(150,219,5) :: END
48 CALL CLEAR :: GOSUB 28
49 ROW=1 :: TEXT$=" *** AMS QUERY PROGRAM ***" :: GOSUB 32 :: ROW=2 :: TEXT$="VERSION 1.07" :: GOSUB 32
50 AMSSIZE$=STR$(AMSSIZE)&"K RAM"
51 ROW=8 :: TEXT$=" AMS MEMORY = "&AMSSIZE$ :: GOSUB 32
52 IF MAPON=0 THEN ROW=12 :: TEXT$=" AMS CARD 32K PASS MODE" :: GOSUB 32 :: GOTO 59
53 ROW=9 :: TEXT$=" AMS IN MAPPED MEMORY MODE" :: GOSUB 32
54 ROW=12 :: TEXT$="PAGES 8K MEMORY:" :: GOSUB 32
55 ROW=13 :: TEXT$=STR$(M2+O*(M2>=O))&" "&STR$(M3+O*(M3>=O)) :: GOSUB 32
56 ROW=15 :: TEXT$="PAGES 24K MEMORY:" :: GOSUB 32
57 ROW=16 :: TEXT$=STR$(MA+O*(MA>=O))&" "&STR$(MB+O*(MB>=O))&" "&STR$(MC+O*(MC>=O))&" "&STR$(MD+O*(MD>=O))&" "&STR$(ME+O*(ME>=O))&" "&STR$(MF+O*(MF>=O)) :: GOSUB 32
58 ROW=18 :: TEXT$="1-"&STR$(AMSSIZE/4)&" PAGES AVAILBLE." :: GOSUB 32
59 END
60 ! MAPPED AT 23ABCDEF
61 CALL SAMS("ON")
62 CALL PEEK(24548,M2) :: CALL PEEK(24550,M3) :: CALL PEEK(24564,MA) :: CALL PEEK(24566,MB) :: CALL PEEK(24568,MC) :: CALL PEEK(24570,MD) :: CALL PEEK(24572,ME)
63 CALL PEEK(24574,MF)
64 CALL SAMS("OFF")
65 RETURN
66 ! MAP 2,3,A,B,C,D,E,F
67 CALL SAMS("ON")
68 CALL LOAD(24548,2) :: CALL LOAD(24550,3) :: CALL LOAD(24564,10) :: CALL LOAD(24566,11) :: CALL LOAD(24568,12) :: CALL LOAD(24570,13) :: CALL LOAD(24572,14)
69 CALL LOAD(24574,15)
70 CALL SAMS("OFF")
71 RETURN
72 ! MAP 23 ABCDEF
73 GOSUB 66
74 CALL SAMS("MAP")
75 RETURN
76 ! MAP 23 ABCDEF
77 GOSUB 66
78 CALL SAMS("PASS")
79 RETURN
80 ! MAP MODE ON/OFF
81 CALL SAMS("ON") :: CALL PEEK(-31804,H1,H2) :: IF H1+H2 THEN CALL ISROFF(ADDRESS)
82 CALL PEEK(24548,M2) :: CALL PEEK(24550,M3) :: CALL LOAD(24550,M2) :: CALL PEEK(8198,A1,B1) :: CALL PEEK(12294,A2,B2)
83 IF A1=A2 AND B1=B2 THEN MAPON=1 ELSE MAPON=0
84 CALL LOAD(24550,M3)
85 IF H1+H2 THEN CALL ISRON(ADDRESS)
86 CALL SAMS("OFF")
87 RETURN
88 CALL PEEK(12288,OLDV) :: NEWV=255-OLDV :: CALL LOAD(12288,NEWV) :: CALL PEEK(12288,TESTV) :: IF TESTV<>OLDV AND TESTV=NEWV THEN MEM=1 ELSE MEM=0
89 IF MEM=1 THEN CALL LOAD(12288,OLDV)
90 RETURN
91 ! FIND AMS SIZE
92 GOSUB 80 :: IF MAPON=0 THEN GOSUB 72
93 CALL PEEK(-31804,H1,H2) :: IF H1+H2 THEN CALL ISROFF(ADDRESS)
94 ! MAP LOWER PAGES 23
95 CALL SAMS("ON") :: CALL PEEK(24548,M2) :: CALL PEEK(24550,M3)
96 CALL LOAD(24548,2,"",24550,3) :: GOSUB 109
97 CALL PEEK(8194,MB1,LB1,MB2,LB2) :: CALL LOAD(8194,MB2,LB2,MB1,LB1)
98 ! 1024K/4=240+16 PAGES or 4096K/4=1008+16 PAGES or     65536K/4=16384 PAGES 
99 E=16384 :: CALL PEEK(24550,M3)
100 CALL LOAD(24550,2+E) :: CALL PEEK(12290,A,B,C,D) :: IF A=MB2 AND B=LB2 AND C=MB1 AND D=LB1 THEN AMSSIZE=E*4 :: GOTO 104
101 GOSUB 88 :: IF MEM=0 THEN AMSSIZE=E*4 :: GOTO 104
102 E=E+32 :: IF E<16384 THEN 100
103 AMSSIZE=E*4
104 CALL LOAD(24550,2) :: CALL LOAD(8194,MB1,LB1,MB2,LB2) :: CALL LOAD(24548,M2,"",24550,M3)
105 IF MAPON=0 THEN CALL SAMS("PASS")
106 IF H1+H2 THEN CALL ISRON(ADDRESS)
107 CALL SAMS("OFF")
108 RETURN
109 ! EXPANSION MEMORY?
110 CALL PEEK(-31863,A) :: IF A<>231 THEN CALL SOUND(150,218,0) :: PRINT "* NO EXPANSION MEMORY" :: STOP
111 RETURN
112 ! TEST MAP/PASS MODE?
113 CALL SAMS("ON") :: CALL PEEK(24544,M0) :: CALL LOAD(24544,0) :: CALL PEEK(24544,O) :: CALL LOAD(24544,M0) :: CALL SAMS("OFF") :: RETURN
114 END

This RXB 2020C SAMS test works on any AMS or SAMS card and handles up to 32Meg SAMS size.

Works on a 32K AMS or 1Meg AMS or 1Meg SAMS or even Classic99 32Meg SAMS.

  • Like 6

Share this post


Link to post
Share on other sites

Update fixed the issue with SAMS now working with SIZE command and works great now.

 

Currently found that REA 2020 (Editor Assembly) does not catalog TIPI. correctly so working on why?

  • Like 1
  • Thanks 1

Share this post


Link to post
Share on other sites
On 1/24/2021 at 1:16 AM, HOME AUTOMATION said:

I just love :lust: Frosty balls!

We get those here in Canada. You can fix 'em with a hair dryer.  🤣

Share this post


Link to post
Share on other sites
11 minutes ago, atrax27407 said:

FYI, I have RXB2020C up and running from the HSGPL Card in MAME. So far, it is doing great!

Great. Can you point me to the files that I need for this ?

I want to try in the SNUG machine

 

  • Like 1

Share this post


Link to post
Share on other sites

Well the dream is dead.....sad!

Worked on making a ENDLESS XB program possible.

 

 

Share this post


Link to post
Share on other sites

You would have to control the pointer that moves the table? Or is it just not going that way.

Edited by GDMike

Share this post


Link to post
Share on other sites
1 hour ago, GDMike said:

You would have to control the pointer that moves the table? Or is it just not going that way.

It would have worked if the address of lines would remain the same, but add a variable or change a line length or do  garbage collection....

All things that just mess up any predictions or sense of sameness for next block to replace last block.

  • Like 1

Share this post


Link to post
Share on other sites

Rich,

 

I'm going to say I rarely do anything in Extended Basic, or even ABASIC on the Geneve so what I am saying, outside of a couple of times on the FinalGrom, I haven't used RXB and this isn't a request from me.

 

I was going through some of the issues of 9640 News yesterday, and I came across the XHI source code for utilities that could be used in Extended Basic.  Basically, it gave Graphics Mode 6 capability to Extended Basic.  Granted, it was for a 9938 video processor.  I'm not sure what all the F18 and MK2 potential is, but if you wanted to incorporate some of that functionality into RXB, go for it.  I know you like GPL, so what I was thinking was even though the source is assembly, it had the flow which may assist in any GPL coding.  I noticed there was even code to load MyArt images within Extended Basic.

 

PC99 users I think can use your RXB, and what I could tell with Classic 99, it has only 80 column text mode capability. Not sure  how many EVPC users are out there or when CADD will release their 9938 card.

 

I don't know where the next generation F18MK2 is going to know if it will have full graphics (9938) capability or not.

 

Anyways, just wanted to point it out to you if you were wondering where you might go next with RXB.

 

  • Like 3

Share this post


Link to post
Share on other sites

Hi Rich,

Time traveling back a few or more pages...🛸

On 12/13/2018 at 3:38 PM, RXB said:

Been looking over XB ROMs source code to see what modifications I can make in the future.

 

Would like some help if possible on this project.

 

On 12/18/2018 at 8:17 PM, RXB said:

 

What is needed in XB ROMs is finding duplicate code and eliminating it or adding in better Assembly tricks then used by TI in XB ROMs.

 

On 12/23/2018 at 4:20 PM, RXB said:

There are 14 token that TI never used by the way. >80, >AB, >AC, >AD, >AE, >AF, >B9, >E2, >E3, >E4, >E5, >E6, >E7, >F2

 

Would be nice to add more tokens that work more like SEG$, INT, RND, POS, PI, and others.

 

On 12/19/2018 at 12:51 PM, HOME AUTOMATION said:

Abstract reasoning skills are high over here at HA. While reviewing commented source code, sometimes solutions just reach in...

This has all finally started to coalesce in my mind somewhat:idea:...

I have some new tricks/skills have improved a bit.

I believe I'm finally making some progress, attempting to find ways to expand RXB...

If you're still interested/no-one's  beaten me to it...

I have something to submit for review/testing. I can post here or PM.:?:

:)

  • Like 1

Share this post


Link to post
Share on other sites

** FAIR WARNING **
You are now entering into an area designated as:
High degrees of CONJECTURE & ABSTRACTION ...Proceed at your own risk!

 

1. I've returned to only paging the upper 4k.
2. I've made the upper 4k, RAM.
3. I've made the GROM, GRAM.
4. I've patched some of the lower 4k code to another page(copy of 1st page), by transitioning through an intermediate page. Thus creating some free space on the first page, while also allowing for the sections of relocated code to perhaps be expanded somewhat within the intermediate page.

 

I chose the initial code to patch out, so as to create some free space where a list of tokens are processed in immediate mode and during program execution, in hopes the token list can be expanded. This space could perhaps also be used for patches to yet another page for routines associated with the new tokens.

 

I could use an example of a new routine, and a token to try to associate it with ...if you have. I think you mentioned having removed somethings in order to make room for others.

 

The GRAM can be reloaded from RAM/ROM, by using trampoline code. This should allow you to add more GROM based software images, such as EXPLORER. Perhaps you can also make some of the extra RAM available to programmers... for loading graphics or blocks of data.

 

Since I'm doing these experiments using the FinalGROM 99, and using RAM/4k paging, this doesn't seem to be directly compatible with other carts/emulators. But, I think the patching, new tokens, and code expansion can be adjusted for 8k, ROM pages.

 

Since I've packed away my TIPI, and because my cassette input is out of order ...I haven't been able to test this out with more than a few lines of BASIC code. Perhaps you can run some better test programs to make sure my changes wont cause RXB to crash. Immediate mode should be tested more thoroughly as well.

 

This is all quite preliminary... I haven't studied the GPL yet. I have some questions, hopefully you can illuminate.

 

I have already spent the better part of a couple days on this, so I need to catch up on some neglected personal responsibilities.

 

These experiments grew out from some of the work I'd been doing on the Tutankhamun cart issue, and also some realizations from 32k-expansion-question thread.

 

I have been using a HEX EDITOR and OP-CODE scratch sheet, exclusively. So, there is no source code yet. Hopefully you can disassemble, and expand on my work!

 

Though you've stated that you're not too experienced at assembly ...your commented code is seemingly insightful. Hopefully you will be able at some point to continue this by using an assembler and/or other tools.

 

So far, I have only moved the main body from one section of code('LET' statement handler) I will need to go over it again to move it's entry point and/or the exit line and error trap. The error trap seems to eventually lead back to GPL. This is probably sometimes happening from the alternate first page, without my paging back first, so it seems that GPL is reverting back to page 1, or reentering ROM from a point that does. I'm guessing that the original XB module started up on PAGE 2, so it is switched back both initially and redundantly. If so, this should prove to be extremely convenient. Some other nearby routines(ON, GOSUB, RETURN...) also jump to this error trap address, so I may have to move them as well(if possible) in order to move that last line of code.

 

Next, I will try to move the "Relational operators" routine. That should allow for the token list preceding it to be expanded on. That list doesn't seem to end with a delimiter, so I suppose there's a routine that scans the list, already knowing it's max. length. If so, that will need to be adjusted as well.

 

------------------------

So, I haven't added anything new here. Just chopped things up a bit. I'm hoping this wont cause any crashes!

 

RXB PATCHED.rar

 

    P.S. ...Fingers crossed🤞

Edited by HOME AUTOMATION
  • Thanks 1

Share this post


Link to post
Share on other sites

Interesting can we add  4K upper RAM banks?

I suppose I need to make another version of GROM that pages the upper 4K you turned into RAM.

This would allow multiple 4K pages in upper what used to be ROM but is now RAM.

That would allow us to use F18 features like XHI does with 9938 or 9958.

I could add a RXB GROM list of routines like CALL LINK but rename it something using the new RAM routines for F18.

Like CALL F18(graphics mode)

 

This works great as currently in RXB 2020 you can move VDP STACK and Upper 24K locations now.

  • Like 2

Share this post


Link to post
Share on other sites

Here is a list of what I found in XB ROMs and address 

 

Spoiler

LIST OF XB XML TABELS IN EACH GROM AND ADDRESS IN XB ROM IN HEX

A=XB ROM bank 1
B=XB ROM bank 2
If the name not the same in GROM as XB ROM the new name is listed.

>6000 GROM 
*    Equates for XMLs
SYNCHK EQU  >00               SYNCHK XML selector             >6400
SEETWO EQU  >03               SEETWO XML selector             >6EF0
COMPCT EQU  >70               PREFORM A GARBAGE COLLECTION    >73D8 A
MEMCHK EQU  >72               MEMORY check routine: VDP       >72D8 A
PARSE  EQU  >74               Parse a value                   >6480
VPUSH  EQU  >77               Push on value stack             >6BAA
VPOP   EQU  >78               Pop off value stack             >6C2A
PGMCHR EQU  >79               GET PROGRAM CHARACTER           >6C74 
SYM    EQU  >7A               Find Symbol entry               >6312
SMB    EQU  >7B               Find Symbol table entry         >61DC
SCHSYM EQU  >7D               Search symbol table             >618C    FBSYMB
SPEED  EQU  >7E               SPEED UP XML                    >6EE2
CRUNCH EQU  >7F               Crunch an input line            >7B88 B
CONTIN EQU  >81               Continue after a break          >65CC
SCROLL EQU  >83               SCROLL THE SCREEN               >7ADA A
IO     EQU  >84               IO utility (KW table search)    >7B48 A  
GREAD  EQU  >85               READ DATA FROM ERAM             >7EB4 A
GWRITE EQU  >86               WRITE DATA TO ERAM              >7ED8 A
DELREP EQU  >87               REMOVE CONTENT FROM VDP/ERAM    >7EF4 A 
MVDN   EQU  >88               MOVE DATA IN                    >7F7E A


>8000 GROM
*    Equates for XMLs
SYNCHK EQU  >00               SYNCHK XML selector           >6400
FILSPC EQU  >01               Fill-space utility            >7BAA A
CSTRIN EQU  >02               Copy-string utility           >7B72 A
SEETWO EQU  >03               SEETWO XML selector           >6EF0
COMPCT EQU  >70               PREFORM A GARBAGE COLLECTION  >73D8 A
GETSTR EQU  >71               SYSTEM GET STRING             >736C A
MEMCHK EQU  >72               MEMORY check routine: VDP     >72D8 A
XCNS   EQU  >73               Convert number to string      >7016 B
* Warning Default changed in >0073
PARSE  EQU  >74               Parse a value                 >6480
CONT   EQU  >75               Continue parsing              >64C8
VPUSH  EQU  >77               Push on value stack           >6BAA 
VPOP   EQU  >78               Pop off value stack           >6C2A
PGMCHR EQU  >79               GET PROGRAM CHARACTER         >6C74
SYM    EQU  >7A               Find SYMBOL entry             >6312
SMB    EQU  >7B               Also for ARRAYS               >61DC
ASSGNV EQU  >7C               Assign VARIABLE               >61AE
SCHSYM EQU  >7D               Search symbol table           >618C    FBSYMB
SPEED  EQU  >7E               SPEED UP XML                  >6EE2
CRUNCH EQU  >7F               Crunch an input line          >7B88 B
CIF    EQU  >80               Convert INTEGER to FLOATING P >74AA A
CONTIN EQU  >81               Continue after a break        >65CC 
SCROLL EQU  >83               SCROLL THE SCREEN             >7ADA A
IO     EQU  >84               IO utility (KW table search)  >7B48 A
GREAD  EQU  >85               READ DATA FROM ERAM           >7EB4 A
GWRITE EQU  >86               WRITE DATA TO ERAM            >7ED8 A
DELREP EQU  >87               REMOVE CONTENT FROM VDP/ERAM  >7EF4 A 
MVDN   EQU  >88               MOVE DATA IN VDP/ERAM         >7F7E A 
MVUP   EQU  >89               MOVE DATA IN VDP/ERAM         >6F98
VGWITE EQU  >8A               MOVE DATA FROM VDP TO ERAM    >7FC0 A
GVWITE EQU  >8B               WRITE DATA FROM GRAM TO VRAM  >7FDA A
GREAD1 EQU  >8C               READ DATA FROM ERAM           >7EA6 A
GDTECT EQU  >8E               ERAM DETECT&ROM PAGE 1 ENABLE >6050 
SCNSMT EQU  >8F               SCAN STATEMENT FOR PRESCAN    >7C56 A  PSCAN

>A000 GROM
*    Equates for XMLs
SYNCHK EQU  >00               SYNCHK XML selector             >6400
PARCOM EQU  >01               PARse to a COMma selector       >7BAA A
RANGE  EQU  >02               RANGE selector                  >7B72 A
* FADD   EQU  >06               Floating ADD *RXB RND*
FMUL   EQU  >08               Floating MULtiply
FDIV   EQU  >09               Floating DIVide
FCOMP  EQU  >0A               Floating COMPare
* SADD   EQU  >0B               Stack ADD *RXB RND*
SSUB   EQU  >0C               Stack SUBtract
CSNUM  EQU  >10               Convert String to Number
CFI    EQU  >12               Convert to two byte integer
FLTINT EQU  >12               Convert floating to integer
GETSTR EQU  >71               SYSTEM GET STRING               >736C A
XCNS   EQU  >73               Convert number to string        >7016 B
* Warning Defualt changfd in >0079
PARSE  EQU  >74               Parse a value                   >6480
CONT   EQU  >75               Continue parsing                >64C8 
EXECG  EQU  >76               Execute a XB stmt or program    >6500 
VPUSH  EQU  >77               Push on value stack             >6BAA
VPOP   EQU  >78               Pop off value stack             >6C2A
PGMCHR EQU  >79               GET PROGRAM CHARACTER           >6C74
SYM    EQU  >7A               Find SYMBOL entry               >6312
SMB    EQU  >7B               Find symbol table entry         >61DC  
ASSGNV EQU  >7C               Assign VARIABLE                 >61AE
SPEED  EQU  >7E               SPEED UP XML                    >6EE2
CIF    EQU  >80               Convert INTEGER to FLOATING P   >74AA A
RTNB   EQU  >82               Return                          >6630    RTNG
SCROLL EQU  >83               SCROLL THE SCREEN               >7ADA A
GVWITE EQU  >8B               WRITE DATA FROM GRAM TO VRAM    >7FDA A
GREAD1 EQU  >8C               READ DATA FROM ERAM             >7EA6 A

>C000 GROM
*    Equates for XMLs
SEETWO EQU  >03               SEETWO XML selector            >6EF0
ALSUP  EQU  >20               XML to user AssembLy SUBrouti
COMPCT EQU  >70               PREFORM A GARBAGE COLLECTION   >73D8 A
GETSTR EQU  >71               SYSTEM GET STRING              >736C A
XBCNS  EQU  >73               Convert number to string       >7016 B
PARSE  EQU  >74               Parse a value                  >6480
VPUSH  EQU  >77               Push on value stack            >6BAA 
VPOP   EQU  >78               Pop off value stack            >6C2A
PGMCHR EQU  >79               GET PROGRAM CHARACTER          >6C74 
SYM    EQU  >7A               Find SYMBOL entry              >6312
SMB    EQU  >7B               Find symbol table entry        >61DC
ASSGNV EQU  >7C               Assign VARIABLE                >61AE
SPEED  EQU  >7E               SPEED UP XML                   >6EE2
CRUNCH EQU  >7F               Crunch an input line           >7B88 B 
CIF    EQU  >80               Convert INTEGER to FLOATING P  >74AA A 
SCROLL EQU  >83               SCROLL THE SCREEN              >7ADA A
* GREAD  EQU  >85               READ DATA FROM ERAM          >7EB4 A
* MVDN   EQU  >88               MOVE DATA IN VDP/ERAM        >7F7E A
MVUP   EQU  >89               MOVE DATA IN VDP/ERAM          >6F98
* GREAD1 EQU  >8C               READ DATA FROM ERAM          >7EA6 A

 

  • Like 1

Share this post


Link to post
Share on other sites

I have had some free time to study RXB2020 in more detail. To assist in this I made the RXBDOC2020 clickable for easier navigation. I ran this by Rich and got the ok to post here as others might find this useful. You can return to the TOC by either right click - select previous screen or go to the end of an entry and click TOC.

RXBDOC2020.pdf

  • Like 3
  • Thanks 3

Share this post


Link to post
Share on other sites
56 minutes ago, MikeV said:

I have had some free time to study RXB2020 in more detail. To assist in this I made the RXBDOC2020 clickable for easier navigation. I ran this by Rich and got the ok to post here as others might find this useful. You can return to the TOC by either right click - select previous screen or go to the end of an entry and click TOC.

RXBDOC2020.pdf 418.35 kB · 4 downloads

Very nice work indeed.

  • Thanks 1

Share this post


Link to post
Share on other sites

Well this is one weird result of testing.

Using ROM 3 added to XB above ROM 1 and ROM 2 that XB normally has resulted in working but here is the strange result.

Originally RXB has the Character Definition loaded from GROM into VDP tables using GPL. i.e. GROM to VDP speeds

So I thought WOW if I loaded the Character Definitions from ROM it should be faster right?

WRONG it was 10 minutes slower with a 10,000 loop test????

WTH? Yea moving the same Character Definition from ROM to VDP is slower by 10 minutes in a loop executing 10,000 times.

 

So looking for a solution to both resulted in this thought:

"How about using Assembly instead to do this, but how do you use a ROM routine from another ROM page?"

I found this in XB ROMS:

Spoiler

 4132            ************************************************************
  4133                
  4134 7FDA              AORG >7FDA   
  4136                
  4137            * Move data from ERAM to VDP (RAM to VDP)   
  4138            * @GSRC  : Source address where the data stored on ERAM   
  4139            * @DEST  : Destination address on VDP   
  4140            * @BCNT3 : byte count   
  4141                
  4142 7FDA C0A0  GVWITE  MOV  @DEST,R2          VDP address   

 99/4 ASSEMBLER
GVWITES                                                      PAGE 0095
       7FDC 8358  
  4143 7FDE D7E0               MOVB @R2LB,*R15        LSB of VDP address  
       7FE0 83E5  
  4144 7FE2 0262               ORI  R2,WRVDP          Enable VDP write  
       7FE4 4000  
  4145 7FE6 D7C2              MOVB R2,*R15           MSB of VDP address  
  4146 7FE8 C0E0              MOV  @GSRC,R3          ERAM address  
       7FEA 8354  
  4147 7FEC D833  GVZ1   MOVB *R3+,@XVDPWD      Move a byte   
       7FEE 8C00  
  4148 7FF0 0620              DEC  @BCNT3            One less to move  
       7FF2 8356  
  4149 7FF4 16FB             JNE  GVZ1              If not done, loop for more  
  4150 7FF6 045B             RT                     Return  
  4151      

***************************************************************************         

But of course it is in a another ROM so that is a problem, thus I came up with this:

Spoiler

********************************************************************************
       AORG >8300
       TITL 'GVWITES'

* Move data from ERAM to VDP (RAM to VDP)
* @>834A : Source address where the data stored on ERAM      
* @>834C : Destination address on VDP                         
* @>834E : byte count                                         
*  
GVWITE MOV  @>834C,R2          * VDP address
            MOVB @>83E5,*R15      * LSB R2 of VDP address
            ORI    R2,>4000             * Enable VDP write
            MOVB R2,*R15               * MSB of VDP address
            MOV   @>834A,R3         * ERAM address
GVZ1    MOVB *R3+,@>8C00     * Move a byte
            DEC   @>834E               * One less to move
            JNE    GVZ1                   * If not done, loop for more
            RT                                * Return
********************************************************************************
       END

I load FAC (>834A, >834C and >834E) with values move this 30 byte program into Scratch Pad and use a GPL XML to run it.

Now I can move anything from ROM 3 to a VDP location,  but additionally from RAM to VDP also if wanted.

This should speed up RXB slightly as the Character Definition is re-installed each time you exist Program mode or break or edit.

Oh or if you use CALL CHARSET and RXB routine CALL CHARSET(ALL) that resets all characters from 30 to 159.

 

  • Like 3

Share this post


Link to post
Share on other sites
3 hours ago, senior_falcon said:

Instead of moving that 30 byte program to >8300, why not leave it in rom3 and run it from there?

Good idea though the registers are in Scratch Pad RAM and putting the program into Scratch Pad RAM would benefit some speed.

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

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...