Welcome, Guest |
You have to register before you can post on our site.
|
Online Users |
There are currently 274 online users. » 0 Member(s) | 273 Guest(s) Bing
|
Latest Threads |
Includes in ASM
Forum: How-To & Tutorials
Last Post: bracckets
04-04-2024, 12:17 AM
» Replies: 2
» Views: 894
|
Intermittent errors
Forum: Help & Support
Last Post: zarsoft
03-12-2024, 12:39 PM
» Replies: 0
» Views: 461
|
Store array information i...
Forum: Help & Support
Last Post: rbiondi
03-10-2024, 09:42 PM
» Replies: 0
» Views: 612
|
ScrollLeft function scrol...
Forum: Bug Reports
Last Post: rbiondi
03-07-2024, 03:57 PM
» Replies: 2
» Views: 1,190
|
string.bas errors when co...
Forum: Bug Reports
Last Post: rbiondi
03-01-2024, 10:10 AM
» Replies: 2
» Views: 1,049
|
Using Beepola with ZX BAS...
Forum: How-To & Tutorials
Last Post: edtoo
02-29-2024, 09:47 AM
» Replies: 15
» Views: 34,574
|
Johnny Bravo
Forum: Gallery
Last Post: zarsoft
02-11-2024, 11:20 PM
» Replies: 0
» Views: 630
|
Compiling +D G+DOS progra...
Forum: ZX Basic Compiler
Last Post: boriel
01-22-2024, 08:32 AM
» Replies: 4
» Views: 9,230
|
VAL = ? (solved)
Forum: Bug Reports
Last Post: zarsoft
01-03-2024, 11:44 PM
» Replies: 8
» Views: 4,248
|
Wrong math (solved)
Forum: Bug Reports
Last Post: zarsoft
01-03-2024, 11:38 PM
» Replies: 4
» Views: 2,322
|
|
|
DEFADD trick with ZX BASIC compiler? |
Posted by: maeloterkim - 09-22-2021, 07:45 PM - Forum: Help & Support
- Replies (1)
|
|
Hi
In the normal basic of zx spectrum 48k there is a behaviour or trick like this
you can change the address of DEFADD variable
and after this you can copy bytes very fast Is like an assembler LDIR
I will explain more
you can have 2 variables A$ and B$ for example
every one of this variables can have 1000 bytes
when you do A$ = B$ the 1000 bytes of B$ are copied on A$
Normally DEFADD points to the beginning of the variables definitions
for example (invented numbers)
DEFADD_POINTER_ADDRESS ;;'' defadd initial definitions of variables
A$ begins on 30000 and have 1000 bytes of size
B$ begins on 32000 and have 1000 bytes of size
etc ...
The trick is that in BASIC we can change the DEFADD address and put any thing
for example we can do
CHANGED_DEFADD_POINTER_ADDRESS ;;'' CHANGED defadd initial definitions of variables
A$ begins on 16384 and have 256 bytes of size
B$ begins on 32000 and have 256 bytes of size
etc ...
This way we can do A$ = B$ and copy 256 very fast to the screen !!!
this is better explained here in spanish
https://blog.jafma.net/2020/03/16/effici...m-iv/#sp_5
and here in english
https://blog.jafma.net/2020/03/16/effici...m-iv/#en_5
and here a video in spanish explaining this trick
https://www.youtube.com/watch?v=VKJ2dePykdA
I tried this trick with compiled zx basic but is not working because seems
that string variables are not doing the same behavior that original ROM
|
|
|
Is there a list somewhere that explains how to optimize? |
Posted by: maeloterkim - 09-15-2021, 06:19 AM - Forum: Help & Support
- Replies (2)
|
|
Hi
Is there a list somewhere that explains how to optimize?
i explain
Normally in compilers if you put the code in one way it is more efficient than if you put the code in another way
For example you can do
variable ++ or variable = variable + 1
or maybe if you use local variables it is more efficient than if you use global variables
perhaps the compiler translates with fewer bytes and more efficiently one way or another
Is there somewhere a recomended list of tricks to write a more efficient syntax that translates better to assembler
and uses less memory and fewer bytes?
|
|
|
warning: [W180] Unreachable code problem? |
Posted by: maeloterkim - 09-10-2021, 06:17 PM - Forum: Bug Reports
- Replies (5)
|
|
Hi if i compile this, says
warning: [W180] Unreachable code
but i don't know why
the version is zxbasic-1.15.2
Code: ' EXAMPE UNRECHABLE CODE
declare sub mySub()
Dim myNumber As uByte
cls
myBucle:
for myNumber = 0 to 7
mySub()
next myNumber
goto myBucle
sub mySub()
end sub
|
|
|
why is there 2 halt on waitretrace macro? |
Posted by: maeloterkim - 09-09-2021, 06:02 PM - Forum: Help & Support
- Replies (1)
|
|
why is there 2 halt on waitretrace macro?
i found in the library this waitretrace macro in the retrace.bas file
REM simple WaitRetrace macro
#ifndef waitretrace
#define waitretrace 'REM Retrace \
asm \
halt \
halt \
end asm
#endif
Is not better put only one halt for better timer control of the programmer?
if there was only one halt is more easy to control
with one halt we can do
waitretrace -> only 1 halt 1/50 seconds
2 halt -> 2/50seconds
waitretrace
waitretrace
N halt -> N/50seconds
for i = 1 to N
waitretrace
next i
|
|
|
Is posible put a ubyte variable just after DIM |
Posted by: maeloterkim - 09-04-2021, 02:17 PM - Forum: Help & Support
- Replies (2)
|
|
Hi
Is posible put a ubyte variable just after DIM WITHOUT ASSEMBLER maybe with AT @ or something
Example:
Code: DIM udg(1, 7) AS uByte => {{0,1,3,7,15,31,63,127}, _
{1,2,4,7,15,31,63,127}}
DIM myVariable as ubyte
I WANT THIS VARIABLE VALUE JUST THE NEXT BYTE AT THE END OF LAST UDG DIM BYTE LIKE THIS
ADDRESS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
VALUE 0 1 3 7 15 31 63 127 1 2 4 7 15 31 63 127 myVariable
-------------------- DIM UDG -------------------------------
|
|
|
struggle on using/implementing sprite libraries |
Posted by: nitrofurano - 08-25-2021, 08:02 PM - Forum: Wishlist
- Replies (2)
|
|
since a long time i was thinking how simple or possible would be using sprite engines/libraries on zxbasic-compiler (just like those used on z88dk and so on)
so i started to try this (very glitchy and inefficient, as the code shows... )
(wsad or cursors for moving)
Code: ink 1
border 1:ink 5:bright 1: paper 1: cls
sub putudgsprite(txp1 as uinteger,typ1 as uinteger,tad1 as uinteger)
poke uinteger $5C7B,tad1+(7-(typ1 mod 8))+(txp1 mod 8)*32
print at int(typ1/8),int(txp1/8);"\A\C"
print at 1+int(typ1/8),int(txp1/8);"\B\D"
end sub
yo=0:xo=0
putudgsprite(xo,yo,@udg01)
x1=128:y1=128
do
cn1=((255-(in 64510)) band 2)/2 bor ((255-(in 65022)) band 2) bor ((255-(in 65022)) band 1)*4 bor ((255-(in 65022)) band 4)*2 :'- wsad
cn2=((255-(in 61438)) band 8)/8 bor ((255-(in 61438)) band 16)/8 bor ((255-(in 63486)) band 16)/4 bor ((255-(in 61438)) band 4)*2 :'-7658
cn0=cn1 bor cn2
x1=x1-((cn0 band 4)/4)
x1=x1+((cn0 band 8)/8)
y1=y1-((cn0 band 1)/1)
y1=y1+((cn0 band 2)/2)
over 1
putudgsprite(xo,yo,@udg01)
xo=x1:yo=y1
putudgsprite(x1,y1,@udg01)
pause 1
loop
do:loop
udg01:
asm
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %11111111
defb %11111111
defb %11111111
defb %11111111
defb %11111111
defb %11111111
defb %11111111
defb %11111111
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %01111111
defb %01111111
defb %01111111
defb %01111111
defb %01111111
defb %01111111
defb %01111111
defb %01111111
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %10000000
defb %10000000
defb %10000000
defb %10000000
defb %10000000
defb %10000000
defb %10000000
defb %10000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00111111
defb %00111111
defb %00111111
defb %00111111
defb %00111111
defb %00111111
defb %00111111
defb %00111111
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %11000000
defb %11000000
defb %11000000
defb %11000000
defb %11000000
defb %11000000
defb %11000000
defb %11000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00011111
defb %00011111
defb %00011111
defb %00011111
defb %00011111
defb %00011111
defb %00011111
defb %00011111
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %11100000
defb %11100000
defb %11100000
defb %11100000
defb %11100000
defb %11100000
defb %11100000
defb %11100000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00001111
defb %00001111
defb %00001111
defb %00001111
defb %00001111
defb %00001111
defb %00001111
defb %00001111
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %11110000
defb %11110000
defb %11110000
defb %11110000
defb %11110000
defb %11110000
defb %11110000
defb %11110000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000111
defb %00000111
defb %00000111
defb %00000111
defb %00000111
defb %00000111
defb %00000111
defb %00000111
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %11111000
defb %11111000
defb %11111000
defb %11111000
defb %11111000
defb %11111000
defb %11111000
defb %11111000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000011
defb %00000011
defb %00000011
defb %00000011
defb %00000011
defb %00000011
defb %00000011
defb %00000011
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %11111100
defb %11111100
defb %11111100
defb %11111100
defb %11111100
defb %11111100
defb %11111100
defb %11111100
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000001
defb %00000001
defb %00000001
defb %00000001
defb %00000001
defb %00000001
defb %00000001
defb %00000001
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %11111110
defb %11111110
defb %11111110
defb %11111110
defb %11111110
defb %11111110
defb %11111110
defb %11111110
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
defb %00000000
end asm
so, any idea of using "true" sprites instead of that attempt above?
|
|
|
|