+Ksarul Posted April 12, 2018 Share Posted April 12, 2018 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. 2 Quote Link to comment Share on other sites More sharing options...
RXB Posted April 12, 2018 Share Posted April 12, 2018 (edited) 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 April 12, 2018 by RXB Quote Link to comment Share on other sites More sharing options...
RXB Posted April 12, 2018 Share Posted April 12, 2018 (edited) 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 April 12, 2018 by RXB 2 Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted April 12, 2018 Share Posted April 12, 2018 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. 4 Quote Link to comment Share on other sites More sharing options...
RXB Posted April 12, 2018 Share Posted April 12, 2018 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. 2 Quote Link to comment Share on other sites More sharing options...
RXB Posted April 13, 2018 Share Posted April 13, 2018 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. 5 Quote Link to comment Share on other sites More sharing options...
RXB Posted April 15, 2018 Share Posted April 15, 2018 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. Quote Link to comment Share on other sites More sharing options...
RXB Posted April 16, 2018 Share Posted April 16, 2018 (edited) 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 April 16, 2018 by RXB Quote Link to comment Share on other sites More sharing options...
RXB Posted April 17, 2018 Share Posted April 17, 2018 (edited) 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 April 17, 2018 by RXB Quote Link to comment Share on other sites More sharing options...
RXB Posted April 20, 2018 Share Posted April 20, 2018 RXB JOYMOTION DEMO2 1 Quote Link to comment Share on other sites More sharing options...
RXB Posted April 22, 2018 Share Posted April 22, 2018 RXB has a new version of SIZE that shows UNUSED MEMORY BY ADDRESS: 1 Quote Link to comment Share on other sites More sharing options...
RXB Posted April 23, 2018 Share Posted April 23, 2018 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 1 Quote Link to comment Share on other sites More sharing options...
RXB Posted April 26, 2018 Share Posted April 26, 2018 Hi First demo of JOYLOCATE 1 Quote Link to comment Share on other sites More sharing options...
RXB Posted May 28, 2018 Share Posted May 28, 2018 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? 1 Quote Link to comment Share on other sites More sharing options...
+OLD CS1 Posted May 29, 2018 Share Posted May 29, 2018 Really cool stuff, man! 1 Quote Link to comment Share on other sites More sharing options...
RXB Posted May 30, 2018 Share Posted May 30, 2018 (edited) 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 May 30, 2018 by RXB 1 Quote Link to comment Share on other sites More sharing options...
RXB Posted June 3, 2018 Share Posted June 3, 2018 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. 2 Quote Link to comment Share on other sites More sharing options...
RXB Posted June 5, 2018 Share Posted June 5, 2018 RXB routine EXECUTE is now rolled into CALL LINK instead: Old RXB 2015 CALL EXECUTE(address) New RXB 2018 CALL LINK(address) 1 Quote Link to comment Share on other sites More sharing options...
+Vorticon Posted June 5, 2018 Share Posted June 5, 2018 Rich, can you use a symbolic address instead of an absolute one with CALL LINK in RXB? Quote Link to comment Share on other sites More sharing options...
RXB Posted June 5, 2018 Share Posted June 5, 2018 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 Quote Link to comment Share on other sites More sharing options...
RXB Posted June 12, 2018 Share Posted June 12, 2018 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 2 Quote Link to comment Share on other sites More sharing options...
RXB Posted June 18, 2018 Share Posted June 18, 2018 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) Quote Link to comment Share on other sites More sharing options...
RXB Posted June 19, 2018 Share Posted June 19, 2018 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! Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted June 19, 2018 Share Posted June 19, 2018 (edited) 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 June 19, 2018 by senior_falcon Quote Link to comment Share on other sites More sharing options...
RXB Posted June 19, 2018 Share Posted June 19, 2018 (edited) 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 June 19, 2018 by RXB Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.