Jump to content

Photo

RXB - Rich Extended Basic


835 replies to this topic

#801 Ksarul OFFLINE  

Ksarul

    River Patroller

  • 4,631 posts

Posted Wed Apr 11, 2018 8:03 PM

Rich, you could always try and recode the routines you're pulling out in Assembly and put them into additional banks of ROM. The UberGROM board would allow you to continue growth for quite some time using that particular expansion trick.



#802 RXB OFFLINE  

RXB

    River Patroller

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

Posted Thu Apr 12, 2018 3:53 AM

Rich, you could always try and recode the routines you're pulling out in Assembly and put them into additional banks of ROM. The UberGROM board would allow you to continue growth for quite some time using that particular expansion trick.

Thanks but who is using SCSI and Hard drives now? 

I use mostly Clasic99 and sometime PC99 and MESS.

 

As I am not a hardware guy upkeep of the TI99/4A equipment can be expensive and time consuming.

 

i only removed those commands no one is really using at all including me when using my hard-drive.

 

I DO PLAN ON ADDING A UBERGROM BOARD VERSION.

Honestly why call it UBERGROM when it is not GROM but ROM?

This is like calling VDP is RAM, clearly they are not the same thing.


Edited by RXB, Thu Apr 12, 2018 3:54 AM.


#803 RXB OFFLINE  

RXB

    River Patroller

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

Posted Thu Apr 12, 2018 4:22 AM

UPDATE on RXB new features:

 

SIZE in RXB is going to have a new feature:

 

Not only does it report SAMS size and number of pages, but Assembly space and VDP in RXB.

 

But a new feature is going to show ranges of memory used in report.

Example:

VDP RAM >0B00 = 2816 to >37D7 = 14295 

Assemby RAM >2000 = 8192 to >3FFF = 16383

RXB RAM >A000 = -24476 to >FFE7 = -25

 

This gives you a memory map of how much and where memory is being used.

 

I could also add a memory map of SAMS but a to determine if being used would have to look at all ZEROS (0)  to decide if empty or not and a 4 MEG version would take a few seconds.


Edited by RXB, Thu Apr 12, 2018 4:24 AM.


#804 Ksarul OFFLINE  

Ksarul

    River Patroller

  • 4,631 posts

Posted Thu Apr 12, 2018 5:15 AM

It is called the UberGROM because it has 120K of simulated GROM on an AVR (which can be divided into as many as 15 GROM bases, but with no more than 40K of GROM in any one GROM base). The board also happens to have 512K of bank-switched ROM. It is flexible, in that software needing GROM can be permanently loaded into the AVR--and the ROM only needs to be present if needed by the software. Using RXB as an example, it uses all five available GROM slots in a single GROM base along with two banks of ROM, but the cartridge still has 10 available GROM slots that could be assigned to additional GROM bases and 62 additional ROM banks.

 

As to no one using hard disks anymore, I don't agree--it is true that not everyone out there has a system with a SCSI hard disk, but there are a number of us who DO have them (and we use them too). One of the nice things about RXB is its built-in support for a number of third-party hardware expansions. That support is a very good thing in my eyes, as it makes that third-party hardware much more useful.

 

Maybe you could expand to use of multiple GROM bases and keep everything while still having room to expand? Just a thought on my part, as I like the added functionality of RXB and that would increase your available headroom.



#805 RXB OFFLINE  

RXB

    River Patroller

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

Posted Thu Apr 12, 2018 6:27 AM

That was the long term plan, I already released (before these new carts were created like UBERGROM)

a version of RXB that used a GPL command called SWAP GROM that switches banks of GROM 

so say >9806 is RXB and >980C is REA (Rich Editor Assembler).

 

The really cool thing about this was it could find the other GROM once booted, so say you go to REA

and press period key to switch to RXB it would page thru all 16 pages of GROM looking for RXB and 

opposite is if in RXB press the period key it would do the same looking for REA.

 

This would allow RXB to take up 80K in GROM thus really free up from the lack of memory.

 

The ROM approach would also be used later to expand like say put XB PLOT like SXB cart had in it.



#806 RXB OFFLINE  

RXB

    River Patroller

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

Posted Fri Apr 13, 2018 3:16 PM

Been side tracked with recent changes to RXB. 

 

I have moved all the slower commands and up to end of search list.

 

Example is CALL VERSION(numeric-variable) is now at end of list. 

 

Commands moved are:

CALL BYE

CALL INIT (reason is it is not called often enough to be at first of list)

CALL NEW

CALL BASIC

CALL XB

CALL FCOPY("path.filename","path.filename")

CALL FILES(numeric-variable) 

CALL MKDIR("path.","directory-name")

CALL QUITON

CALL QUITOFF

CALL RENAME("path.","old-filename","new-filename")

 

Also changing command list search in RXB to be different then normal XB.

Yea I know the difference in speed will not be much, but over all efficiency will be increased.

 

People are going to use CALL LOAD or CALL LINK much more often then CALL INIT or CALL VERSION.



#807 RXB OFFLINE  

RXB

    River Patroller

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

Posted Sat Apr 14, 2018 8:44 PM

OK DEMO OF JOYMOTION:

 

 

In the video I did not notice that PRINT X;Y,XX,YY

would drop down a line and I forgot I only had one Joystick plugged in.



#808 RXB OFFLINE  

RXB

    River Patroller

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

Posted Mon Apr 16, 2018 8:48 AM

Ok now working on

 
CALL JOYLOCATE(keyunit,X,Y,INDEX,#sprite,drow,dcol)   
or  
CALL JOYLOCATE(keyunit,X,Y,INDEX,#sprite,drow,dcol,KEY)  
 or
CALL JOYLOCATE(keyunit,X,Y,iNDEX,#sprite,drow,dcol,KEY)   GOTO line-number                                         *
 
But there is a difference in that as INDEX comes before LOCATE you can not use anything but
numeric variables as the values for Dot-Row and Dot-Column are updated and returned.
If you put numbers there instead of numeric variables it will crash.
In order to set up location you need to either use CALL SPRITE or CALL LOCATE to place
a Sprite at a location. 
This was the result of a simple fact that I would have to have fetched the values then backtracked
to update the values again, thus really slowing down the results or moving sprites with Joysticks.

Edited by RXB, Mon Apr 16, 2018 8:48 AM.


#809 RXB OFFLINE  

RXB

    River Patroller

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

Posted Tue Apr 17, 2018 5:41 AM

Hello again....

Had to modify and update JOYMOTION as was not always useful due to restriction of INDEX 

for both Row Velocity and Column Velocity duplicated by one value,

thus new version of JOYMOTION allows for either Row-index or Column-index to be a 0 (zero)

And this allows for scroll of sprite in only horizontal or vertical movements now.

 

 
CALL JOYMOTION(keyunit,X,Y,#sprite,Row-index,Column-index)
or
CALL JOYMOTION(keyunit,X,Y,#sprite,Row-index,Column-index,KEY)
or 
CALL JOYMOTION(keyunit,X,Y,#sprite,Row-index,Column-index,KEY) GOTO line-number  
 
This allows movement of Joystick Sprite Motion up and down or left and right only.
 
(Discovered this when testing games using JOYMOTION to replace JOYST & KEY)

Edited by RXB, Tue Apr 17, 2018 5:43 AM.


#810 RXB OFFLINE  

RXB

    River Patroller

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

Posted Fri Apr 20, 2018 8:14 AM

RXB JOYMOTION DEMO2

 



#811 RXB OFFLINE  

RXB

    River Patroller

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

Posted Sun Apr 22, 2018 1:56 AM

RXB has a new version of SIZE that shows UNUSED MEMORY BY ADDRESS:

 



#812 RXB OFFLINE  

RXB

    River Patroller

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

Posted Mon Apr 23, 2018 12:46 PM

Hello

 

Updated RXB CALL SIZE in this demo of RXB 2018 

 

Now you can run CALL SIZE in a XB program to show exactly how much memory and where in TI99/4A

 



#813 RXB OFFLINE  

RXB

    River Patroller

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

Posted Thu Apr 26, 2018 5:16 PM

Hi

First demo of JOYLOCATE

 



#814 RXB OFFLINE  

RXB

    River Patroller

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

Posted Mon May 28, 2018 5:45 PM

New RXB routine of SIZE in Edit mode and CALL SIZE in Program mode.

Now in Edit mode VDP garbage collection is done to reset VDP memory, in Program mode VDP is not reset.

 

I should note in this video I had already made a rejected video so the CALL INIT reported incorrectly >6924 when it should read >8192

I forgot to shut down Classic99 and restart the video, but saw mistake after I posted this video.

 

Enjoy and tell me what you think?

 

 



#815 OLD CS1 OFFLINE  

OLD CS1

    Quadrunner

  • 5,237 posts
  • Technology Samurai
  • Location:Tallahassee, FL

Posted Tue May 29, 2018 12:30 PM

Really cool stuff, man!


  • RXB likes this

#816 RXB OFFLINE  

RXB

    River Patroller

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

Posted Wed May 30, 2018 1:38 AM

Update changes in RXB 2018 that has been discussed and I have resolved:

 

If you type into RXB in EDIT mode:

 

ACCEPT A

or 

INPUT A 

 

(error honks sound)

* Only Legal in a Program

 

All the errors reported with this are now null and void and as it should be...

 

NOTE: Only took 4 lines of code to fix this error and should have been addressed by TI originally.


Edited by RXB, Wed May 30, 2018 1:40 AM.


#817 RXB OFFLINE  

RXB

    River Patroller

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

Posted Sun Jun 3, 2018 12:13 AM

New RXB subroutine and video demo of it.

 

CALL VDPSTACK(address) 

 

This locates the VDP STACK where you want it in VDP, of course sane restrictions apply here.

 



#818 RXB OFFLINE  

RXB

    River Patroller

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

Posted Tue Jun 5, 2018 12:23 AM

RXB routine EXECUTE is now rolled into CALL LINK instead:

 

Old RXB 2015

CALL EXECUTE(address)

 

New RXB 2018

CALL LINK(address)

 



#819 Vorticon OFFLINE  

Vorticon

    River Patroller

  • 3,202 posts
  • Location:Eagan, MN, USA

Posted Tue Jun 5, 2018 5:31 AM

Rich, can you use a symbolic address instead of an absolute one with CALL LINK in RXB?



#820 RXB OFFLINE  

RXB

    River Patroller

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

Posted Tue Jun 5, 2018 4:29 PM

Rich, can you use a symbolic address instead of an absolute one with CALL LINK in RXB?

Do you mean A=9838 or XR(5)=10202 then yes you can.

10 ! CALL LINK(address) is  faster then a CALL LINK.
20 CALL INIT :: X=9838
30 CALL LOAD(X,47,0,38,114,4,32,32,44,3,128)
40 CALL LOAD(12032,0,0,48,0,2,255)
50 CALL LINK(X) :: ! Save screen.
60 CALL LOAD(X,47,0,38,114,4,32,32,36,3,128)
70 CALL LOAD(12032,0,0,48,0,2,255)
80 ! This program copies    the screen then clears it.  Then it repeats.
90 FOR L=1 TO 800
100 CALL LINK(X)! Restore saved screen.
110 CALL CLEAR
120 NEXT L


#821 RXB OFFLINE  

RXB

    River Patroller

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

Posted Tue Jun 12, 2018 12:41 AM

RXB 2018 changes are:

CALL SWAPCHAR( character number,character number) is now CALL CHAR(S, character number,character number)

CALL SWAPCOLOR(set#,set#) is now CALL COLOR(S, set#,set#)

CALL INVERSE(character number) is now CALL CHAR(I,character number)

 

RXB 2015 commands removed are:

CALL DUPCHAR

CALL DUPCOLOR

 



#822 RXB OFFLINE  

RXB

    River Patroller

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

Posted Mon Jun 18, 2018 4:08 PM

Changes in RXB 2018 include SAMS support now:

 

Original RXB 2001 to RXB 2015 commands for SAMS support:

CALL AMSON 

CALL AMSOFF

CALL AMSPASS

CALL AMSMAP

CALL AMSBANK(low page,high page)

 

RXB 2018 SAMS support:

CALL SAMS("ON")

CALL SAMS("OFF")

CALL SAMS("PASS')

CALL SAMS("MAP")

CALL SAMS(low page,high page)

 



#823 RXB OFFLINE  

RXB

    River Patroller

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

Posted Tue Jun 19, 2018 9:38 AM

In reworking RXB and XB ROMs I run into some crazy problems created by Texas Instruments creation of XB.

 

GPL command MOVE will move any type of memory to any type of memory, but takes 7 bytes of GPL code.

Example:

LABEL MOVE @ARG,@VAR9,@PAD   

*  ARG=number bytes, VAR9=source address in VDP/RAM/GROM, PAD=destination address in VDP/RAM/GROM

 

This GPL command MOVE takes up 7 bytes of GPL memory.

 

XB ROM command MVUP will only move RAM to RAM

Example:

LABEL    MOV  @ARG,R1           Number of bytes

               MOV  @VAR9,R3         Source address in RAM

               MOV  @PAD,R5           Destination address in RAM

MVUP05 MOVB *R3+,*R5+         Move a byte   
                DEC  R1                       Decrement the counter   
               JNE  MVUP05               Loop if more to move  
               RT   
 
But  in  XB ROMs is MVDN moves VDP to VDP or RAM to RAM that uses a total different set of variables and registers????
And  then we have VGWITE moves VDP to RAM again total different set of  variables and registers?????
And GVWITE moves RAM to VDP which of course uses another set of variables and registers???
 
Obviously none of the management at Texas Instruments let anyone ever talk to anyone else working on the same project!


#824 senior_falcon OFFLINE  

senior_falcon

    Stargunner

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

Posted Tue Jun 19, 2018 10:33 AM


Obviously none of the management at Texas Instruments let anyone ever talk to anyone else working on the same project!

 

It seems likely that this was done to enhance performance so XB could use assembly code in the rom rather than using GPL. Remember that your tidy 7 byte MOVE command actually takes many words of assembly instructions to execute.

From pages 25-26 of INTERN here are the instructions used by GPL to perform just the loop moving data from rom/ram and into ram:

>0653 B *R6

           MOVB *R1+,R11

           B *R7

           MOVB R11,*R2+

           JMP >06CA

>06CA DEC R8

            JGT >0653

 

Compare that with the assembly version of the loop:

MVUP05 MOVB *R3+,*R5+         Move a byte   
                DEC  R1                       Decrement the counter   
               JNE  MVUP05               Loop if more to move
 
So maybe there was method to what you perceive as TI's madness.

Edited by senior_falcon, Tue Jun 19, 2018 10:34 AM.


#825 RXB OFFLINE  

RXB

    River Patroller

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

Posted Tue Jun 19, 2018 2:57 PM

What XB (or RXB) needs is a single XB ROM routine that will do like GPL MOVE and any memory to any memory.

 

VDP to VDP

VDP to RAM

RAM to VDP

GROM to RAM

GROM to VDP

 

Now in XB ROMs we have MVDN does do VDP to VDP or RAM to RAM,

but have to use GVWITE is for GROM to VDP

and VGWITE is for GROM to RAM (go figure the name).

 

Current XB ROM routines:

99/4 ASSEMBLER
MVUPS                                                        PAGE 0049
  2169            * WITH ERAM    : Move the contents in ERAM FROM a higher  
  2170            *                 address to a lower address  
  2171            *                ARG    : byte count  
  2172            *                VAR9   : source address  
  2173            *                VAR0   : destination address   
  2174                
  2175 6F98 C060  MVUP   MOV  @ARG,R1           Get byte count  
       6F9A 835C  
  2176 6F9C C0E0         MOV  @VAR9,R3          Get source  
       6F9E 8316  
  2177 6FA0 C160         MOV  @VAR0,R5          Get destination   
       6FA2 8300  
  2178 6FA4 DD73  MVUP05 MOVB *R3+,*R5+         Move a byte   
  2179 6FA6 0601         DEC  R1                Decrement the counter   
  2180 6FA8 16FD         JNE  MVUP05            Loop if more to move  
  2181 6FAA 045B         RT   
  2182            ************************************************************
  3939            ************************************************************
  3940 7EA6              AORG >7EA6   
  3942                
  3943            * (RAM to RAM)  

 99/4 ASSEMBLER
GREADS                                                       PAGE 0091
  3944            * Read data from ERAM   
  3945            * @GSRC  : Source address on ERAM   
  3946            * @DEST  : Destination address in CPU   
  3947            *           Where the data stored after read from ERAM  
  3948            * @BCNT3 : byte count   
  3949 7EA6 0203  GREAD1 LI   R3,BCNT3          # of bytes to move  
       7EA8 8356  
  3950 7EAA 0202         LI   R2,GSRC           Source in ERAM  
       7EAC 8354  
  3951 7EAE 0201         LI   R1,DEST           Destination in CPU  
       7EB0 8358  
  3952 7EB2 1006         JMP  GRZ1              Jump to common routine  
  3953            * Read data from ERAM to CPU  
  3954            * @ADDR1 : Source address on ERAM   
  3955            * @ADDR2 : Destination address in CPU   
  3956            *           Where the data stored after read from ERAM  
  3957            * @BCNT1 : byte count   
  3958 7EB4 0203  GREAD  LI   R3,BCNT1          # of bytes to move  
       7EB6 834E  
  3959 7EB8 0202         LI   R2,ADDR1          Source in ERAM  
       7EBA 834C  
  3960 7EBC 0201         LI   R1,ADDR2          Destination in CPU  
       7EBE 8350  
  3961            * Common ERAM to CPU transfer routine   
  3962 7EC0 C112  GRZ1   MOV  *R2,R4  
  3963 7EC2 DC74  GRZ2   MOVB *R4+,*R1+         Move byte from ERAM to CPU  
  3964 7EC4 0613         DEC  *R3               One less to move, done?   
  3965 7EC6 16FD         JNE  GRZ2              No, copy the rest   
  3966 7EC8 045B         RT   
  3967            ************************************************************
  3968                
  3969 7ECA              AORG >7ECA   
  3971                
  3972            * (RAM to RAM)  
  3973            * Write the data whcih is stored in CPU to ERAM   
  3974            * @GDST  : Destination address on ERAM where data is going  
  3975            *           to be stored  
  3976            * @CSRC  : Soruce address on CPU where data stored  
  3977            * @BCNT2 : byte count   
  3978 7ECA 0203  GWITE1 LI   R3,BCNT2          Count   
       7ECC 8308  
  3979 7ECE 0202         LI   R2,GDST           Destination   
       7ED0 8302  
  3980 7ED2 0201         LI   R1,CSRC           Source  
       7ED4 830C  
  3981 7ED6 1006         JMP  GWZ1  
  3982            * Write the data which is stored in CPU to ERAM   
  3983            * @ADDR1 : Destination address on ERAM where data is going  
  3984            *           to be stroed  
  3985            * @ADDR2 : Source address on CPU where dta is stored  
  3986            * @BCNT1 : byte count   
  3987 7ED8 0203  GWRITE LI   R3,BCNT1          Count   
       7EDA 834E  
  3988 7EDC 0202         LI   R2,ADDR1          Destination   
       7EDE 834C  
  3989 7EE0 0201         LI   R1,ADDR2          Source  
       7EE2 8350  
  3990            * Common routine to copy from CPU to ERAM   
  3991      7EE4  GWZ1   EQU  $   

 99/4 ASSEMBLER
GWRITES                                                      PAGE 0092
  3992 7EE4 C112         MOV  *R2,R4            Get distination address   
  3993 7EE6 C051         MOV  *R1,R1            Get CPU RAM address   
  3994 7EE8 0221         AI   R1,PAD0           Add in CPU offset   
       7EEA 8300  
  3995 7EEC DD31  GWZ2   MOVB *R1+,*R4+         Move a byte   
  3996 7EEE 0613         DEC  *R3               One less to move, done?   
  3997 7EF0 16FD         JNE  GWZ2              No, more to move  
  3998 7EF2 045B         RT   
  3999            ************************************************************
  4000                
  4001 7EF4              AORG >7EF4   
  4003                
  4004            * Delete the text in crunched program on VDP or ERAM  
  4005            *  point to the line # (to be deleted) in the line # table  
  4006            * RAMTOP  0 if no ERAM  
  4007            * ENLN    Last location used by the line # table  
  4008            * STLN    First location used by the line # table   
  4009            *   
  4010                
  4011 7EF4 C20B  DELREP MOV  R11,R8            Save return   
  4012 7EF6 05E0         INCT @EXTRAM           Point to line ptr in table  
       7EF8 832E  
  4013 7EFA C0E0         MOV  @EXTRAM,R3        Prepare to read it  
       7EFC 832E  
  4014 7EFE C1E0         MOV  @RAMTOP,R7        Check ERAM flag & get in reg  
       7F00 8384  
  4015 7F02 1603         JNE  DE01              ERAM, get from it   
  4016 7F04 06A0         BL   @GET1             Get line ptr from VDP   
       7F06 6C9E  
  4017 7F08 1002         JMP  DE02  
  4018 7F0A 06A0  DE01   BL   @GETG2            Get line ptr from ERAM  
       7F0C 6CCE  
  4019 7F0E 0601  DE02   DEC  R1                Point to line length  
  4020 7F10 C0C1         MOV  R1,R3             Prepare to read length  
  4021 7F12 C241         MOV  R1,R9             Save copy for use later   
  4022 7F14 C1C7         MOV  R7,R7             Editing in ERAM?  
  4023 7F16 1603         JNE  DE03              ERAM, get length from it  
  4024 7F18 06A0         BL   @GETV1            Get line length from VDP  
       7F1A 1880  
  4025 7F1C 1001         JMP  DE04  
  4026 7F1E D053  DE03   MOVB *R3,R1  
  4027 7F20 D081  DE04   MOVB R1,R2             Move text length for use  
  4028 7F22 0982         SRL  R2,8              Need as a word  
  4029 7F24 0582         INC  R2                Text length = length + length 
  4030            *                              byte   
  4031 7F26 C0E0         MOV  @ENLN,R3          Get end of line # table   
       7F28 8332  
  4032 7F2A 0583         INC  R3                Adjust for inside loop  
  4033            * UPDATE THE LINE # TABLE   
  4034 7F2C 0643  DEREA  DECT R3                Point to line pointer   
  4035 7F2E C1C7         MOV  R7,R7             Editing in ERAM?  
  4036 7F30 1603         JNE  DE05              ERAM, read it as such   
  4037 7F32 06A0         BL   @GET1             Get line pointer from VDP   
       7F34 6C9E  
  4038 7F36 1002         JMP  DE06  
  4039 7F38 06A0  DE05   BL   @GETG2            Get line pointer from ERAM  
       7F3A 6CCE  
  4040 7F3C C141  DE06   MOV  R1,R5             Move for use  
  4041 7F3E 0605         DEC  R5                Point to length byte  

 99/4 ASSEMBLER
DELREPS                                                      PAGE 0093
  4042 7F40 8149         C    R9,R5             Compare location of delete  
  4043            *                              line & this line   
  4044 7F42 1209         JLE  DEREB             This line won't move ,  
  4045            *                              don't fix pointer  
  4046 7F44 A042         A    R2,R1             Add distance to move to pointe
  4047 7F46 C103         MOV  R3,R4             Write it to same place  
  4048 7F48 C1C7         MOV  R7,R7             Editing in ERAM?  
  4049 7F4A 1603         JNE  DE10              Yes   
  4050 7F4C 06A0         BL   @PUT1             Put back into line # table  
       7F4E 6CB2  
  4051 7F50 1002         JMP  DEREB   
  4052 7F52 06A0  DE10   BL   @PUTG2            Put back into line # table  
       7F54 6CD8  
  4053 7F56 0643  DEREB  DECT R3                Point at the line #   
  4054 7F58 8803         C    R3,@STLN          At last line in table?  
       7F5A 8330  
  4055 7F5C 16E7         JNE  DEREA             No, loop for more   
  4056            * UPDATA OF LINE # TABLE IS COMPLETE, NOW DELETE TEXT   
  4057            * R9 still contains pointer to length byte of text to delete
  4058            * R2 still contains text length   
  4059 7F5E 0609         DEC  R9  
  4060 7F60 C0C9         MOV  R9,R3   
  4061 7F62 C149         MOV  R9,R5   
  4062 7F64 A142         A    R2,R5             Point to 1st token  
  4063 7F66 C043         MOV  R3,R1             Save for later use  
  4064 7F68 6060         S    @STLN,R1          VDP, calculate # of bytes to m
       7F6A 8330  
  4065 7F6C 0581         INC  R1                Correct offset by one   
  4066 7F6E 06A0         BL   @MVDN2            Delete the text   
       7F70 7F8A  
  4067            * NOW SET UP POINTERS TO LINE TABLE   
  4068 7F72 0201  DE18   LI   R1,EXTRAM         Start with EXTRAM   
       7F74 832E  
  4069 7F76 AC42         A    R2,*R1+           Update EXTRAM   
  4070 7F78 AC42         A    R2,*R1+           Update STLN   
  4071 7F7A A442         A    R2,*R1            Update ENLN   
  4072 7F7C 0458         B    *R8               And return  
  4073            ************************************************************
  4074 7F7E              AORG >7F7E   
  4076                
  4077            * (VDP to VDP) or (RAM to RAM)  
  4078            * WITHOUT ERAM : Move the contents in VDP RAM from a lower  
  4079            *                address to a higher address avoiding a   
  4080            *                possible over-write of data  
  4081            * >835C          ARG    : byte count  
  4082            * >8300          VAR0   : source address  
  4083            * >8306          VARY2  : destination address   
  4084            * WITH ERAM    Same as above except moves ERAM to ERAM  
  4085                
  4086 7F7E C060  MVDN   MOV  @ARG,R1           Get byte count  
       7F80 835C  
  4087 7F82 C160         MOV  @VARY2,R5         Get destination   
       7F84 8306  
  4088 7F86 C0E0         MOV  @VAR0,R3          Get source  
       7F88 8300  
  4089 7F8A C1E0  MVDN2  MOV  @RAMTOP,R7        ERAM or VDP?  
       7F8C 8384  
  4090 7F8E 1612         JNE  MV01              ERAM, so handle it  
  4091 7F90 1002         JMP  MV05              VDP, so jump into loop  

 99/4 ASSEMBLER
MVDNS                                                        PAGE 0094
  4092 7F92 0605  MVDN1  DEC  R5  
  4093 7F94 0603         DEC  R3  
  4094      7F96  MV05   EQU  $   
  4095 7F96 D7E0         MOVB @R3LB,*R15        Write out read address  
       7F98 83E7  
  4096 7F9A D7C3         MOVB R3,*R15   
  4097 7F9C D1E0         MOVB @XVDPRD,R7        Read a byte   
       7F9E 8800  
  4098 7FA0 D7E0         MOVB @R5LB,*R15        Write out write address   
       7FA2 83EB  
  4099 7FA4 0265         ORI  R5,WRVDP          Enable VDP write  
       7FA6 4000  
  4100 7FA8 D7C5         MOVB R5,*R15   
  4101 7FAA D807         MOVB R7,@XVDPWD        Write the byte  
       7FAC 8C00  
  4102 7FAE 0601         DEC  R1                One less byte to move   
  4103 7FB0 16F0         JNE  MVDN1             Loop if more to move  
  4104 7FB2 045B         RT   
  4105      7FB4  MV01   EQU  $   
  4106 7FB4 D553  MVDNZ1 MOVB *R3,*R5           Move a byte   
  4107 7FB6 0603         DEC  R3                Decrement destination   
  4108 7FB8 0605         DEC  R5                Decrement source  
  4109 7FBA 0601         DEC  R1                One less byte to move   
  4110 7FBC 16FB         JNE  MVDNZ1            Loop if more to move  
  4111 7FBE 045B         RT   
  4112            ************************************************************
  4113                
  4114 7FC0              AORG >7FC0   
  4116                
  4117            * (VDP to RAM) >834C=ADDR1,>8350=ADDR2,>834E=BCNT1  
  4118            * Move data from VDP to ERAM  
  4119            * @ADDR1 : Source address where the data stored on VDP  
  4120            * @ADDR2 : Destination address on ERAM  
  4121            * @BCNT1 : byte count   
  4122                
  4123      7FC0  VGWITE EQU  $   
  4124 7FC0 D7E0         MOVB @ADDR11,*R15      LSB of VDP address  
       7FC2 834D  
  4125 7FC4 C0A0         MOV  @ADDR2,R2         Address in ERAM   
       7FC6 8350  
  4126 7FC8 D7E0         MOVB @ADDR1,*R15       MSB of VDP address  
       7FCA 834C  
  4127 7FCC 1000         NOP  
  4128 7FCE DCA0  VGZ1   MOVB @XVDPRD,*R2+      Move a byte   
       7FD0 8800  
  4129 7FD2 0620         DEC  @BCNT1            One less to move  
       7FD4 834E  
  4130 7FD6 16FB         JNE  VGZ1              If not done, loop for more  
  4131 7FD8 045B         RT                     Return  
  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                
  4152 7FFE              AORG >7FFE   
  4153 7FFE 9226         DATA >9226   
  4154                
  4155            ************************************************************
  4156                
  4157                   END  

Edited by RXB, Tue Jun 19, 2018 2:59 PM.





0 user(s) are browsing this forum

0 members, 0 guests, 0 anonymous users