Welcome, Guest |
You have to register before you can post on our site.
|
Online Users |
There are currently 241 online users. » 0 Member(s) | 237 Guest(s) Bing, Facebook, Google, Yandex
|
Latest Threads |
Includes in ASM
Forum: How-To & Tutorials
Last Post: bracckets
04-04-2024, 12:17 AM
» Replies: 2
» Views: 576
|
Intermittent errors
Forum: Help & Support
Last Post: zarsoft
03-12-2024, 12:39 PM
» Replies: 0
» Views: 333
|
Store array information i...
Forum: Help & Support
Last Post: rbiondi
03-10-2024, 09:42 PM
» Replies: 0
» Views: 430
|
ScrollLeft function scrol...
Forum: Bug Reports
Last Post: rbiondi
03-07-2024, 03:57 PM
» Replies: 2
» Views: 847
|
string.bas errors when co...
Forum: Bug Reports
Last Post: rbiondi
03-01-2024, 10:10 AM
» Replies: 2
» Views: 747
|
Using Beepola with ZX BAS...
Forum: How-To & Tutorials
Last Post: edtoo
02-29-2024, 09:47 AM
» Replies: 15
» Views: 32,896
|
Johnny Bravo
Forum: Gallery
Last Post: zarsoft
02-11-2024, 11:20 PM
» Replies: 0
» Views: 493
|
Compiling +D G+DOS progra...
Forum: ZX Basic Compiler
Last Post: boriel
01-22-2024, 08:32 AM
» Replies: 4
» Views: 8,706
|
VAL = ? (solved)
Forum: Bug Reports
Last Post: zarsoft
01-03-2024, 11:44 PM
» Replies: 8
» Views: 3,290
|
Wrong math (solved)
Forum: Bug Reports
Last Post: zarsoft
01-03-2024, 11:38 PM
» Replies: 4
» Views: 1,800
|
|
|
New beta release 1.2.6r1603b |
Posted by: boriel - 06-06-2010, 10:14 AM - Forum: Bug Reports
- Replies (3)
|
|
This version just adds little improvements to the previous one: - Multiplication of bytes a little faster and smaller.
- Compatibility for DO UNTIL <cond>... LOOP and DO WHILE <cond> ... LOOP as programandala asked.
Download at the Archive.
Note: If you want to be automagically you can register into the wiki and click on "Watch this", so each time the page is changed you will receive a notification (I think it would be a good idea). :roll:
|
|
|
Wiki Improvements |
Posted by: britlion - 06-04-2010, 07:35 PM - Forum: Documentation
- Replies (11)
|
|
All I can say is wow. I like!
I love the new navigation bars that are appearing. Much easier to find your way around with those as an option - I kept having to reload the start page.
Bravo! Thank you for this and all your efforts, Boriel.
|
|
|
BritLion's Putchars |
Posted by: britlion - 06-04-2010, 05:35 PM - Forum: How-To & Tutorials
- Replies (39)
|
|
LCD play with this.
The question is, this doesn't do attributes right now. How would you want that handled?
1> Assume it's at the end of the data block? (So if you use putchars for one character, it's the 9th byte. For a 2X2 block, it's the 65th, 66th, 67th and 68th...
2> A separate putAttribs function that works the same way
3> Leave it up to the user to do print at y,x, over 1, paper x, ink y;"<space>"
Something else?
I haven't tested mine against yours, I'm just assuming because of code efficiency, this is faster screen handling.
Edit: See below for test results
Edit: Fixed a bug - in BLPutCharNextThird add HL,DE and POP DE were backwards. Thanks to Compiuter for reporting this.
Edit: Shaved a few clock cycles off the graphics printing, and added a paint sub
Edit: Added a paintData sub
Code: SUB paint (x as uByte,y as uByte, width as uByte, height as uByte, attribute as ubyte)
asm
ld a,(IX+7) ;ypos
rrca
rrca
rrca ; Multiply by 32
ld l,a ; Pass to L
and 3 ; Mask with 00000011
add a,88 ; 88 * 256 = 22528 - start of attributes. Change this if you are working with a buffer or somesuch.
ld h,a ; Put it in the High Byte
ld a,l ; We get y value *32
and 224 ; Mask with 11100000
ld l,a ; Put it in L
ld a,(IX+5) ; xpos
add a,l ; Add it to the Low byte
ld l,a ; Put it back in L, and we're done. HL=Address.
push HL ; save address
LD A, (IX+13) ; attribute
LD DE,32
LD c,(IX+11) ; height
BLPaintHeightLoop:
LD b,(IX+9) ; width
BLPaintWidthLoop:
LD (HL),a ; paint a character
INC L ; Move to the right (Note that we only would have to inc H if we are crossing from the right edge to the left, and we shouldn't be needing to do that)
DJNZ BLPaintWidthLoop
BLPaintWidthExitLoop:
POP HL ; recover our left edge
DEC C
JR Z, BLPaintHeightExitLoop
ADD HL,DE ; move 32 down
PUSH HL ; save it again
JP BLPaintHeightLoop
BLPaintHeightExitLoop:
end asm
END SUB
SUB paintData (x as uByte,y as uByte, width as uByte, height as uByte, address as uInteger)
asm
ld a,(IX+7) ;ypos
rrca
rrca
rrca ; Multiply by 32
ld l,a ; Pass to L
and 3 ; Mask with 00000011
add a,88 ; 88 * 256 = 22528 - start of attributes. Change this if you are working with a buffer or somesuch.
ld h,a ; Put it in the High Byte
ld a,l ; We get y value *32
and 224 ; Mask with 11100000
ld l,a ; Put it in L
ld a,(IX+5) ; xpos
add a,l ; Add it to the Low byte
ld l,a ; Put it back in L, and we're done. HL=Address.
push HL ; save address
LD D, (IX+13)
LD E, (IX+12)
LD c,(IX+11) ; height
BLPaintDataHeightLoop:
LD b,(IX+9) ; width
BLPaintDataWidthLoop:
LD a,(DE)
LD (HL),a ; paint a character
INC L ; Move to the right (Note that we only would have to inc H if we are crossing from the right edge to the left, and we shouldn't be needing to do that)
INC DE
DJNZ BLPaintDataWidthLoop
BLPaintDataWidthExitLoop:
POP HL ; recover our left edge
DEC C
JR Z, BLPaintDataHeightExitLoop
PUSH DE
LD DE,32
ADD HL,DE ; move 32 down
POP DE
PUSH HL ; save it again
JP BLPaintDataHeightLoop
BLPaintDataHeightExitLoop:
end asm
END SUB
SUB putChars(x as uByte,y as uByte, width as uByte, height as uByte, dataAddress as uInteger)
asm
BLPutChar:
LD a,(IX+5)
;AND 31
ld l,a
ld a,(IX+7) ; Y value
ld d,a
AND 24
add a,64 ; 256 byte "page" for screen - 256*64=16384. Change this if you are working with a screen address elsewhere, such as a buffer.
ld h,a
ld a,d
AND 7
rrca
rrca
rrca
OR l
ld l,a
PUSH HL ; save our address
LD E,(IX+12) ; data address
LD D,(IX+13)
LD B,(IX+9) ; width
PUSH BC ; save our column count
BLPutCharColumnLoop:
LD B,(IX+11) ; height
BLPutCharInColumnLoop:
; gets screen address in HL, and bytes address in DE. Copies the 8 bytes to the screen
ld a,(DE) ; First Row
LD (HL),a
INC DE
INC H
ld a,(DE)
LD (HL),a ; second Row
INC DE
INC H
ld a,(DE)
LD (HL),a ; Third Row
INC DE
INC H
ld a,(DE)
LD (HL),a ; Fourth Row
INC DE
INC H
ld a,(DE)
LD (HL),a ; Fifth Row
INC DE
INC H
ld a,(DE)
LD (HL),a ; Sixth Row
INC DE
INC H
ld a,(DE)
LD (HL),a ; Seventh Row
INC DE
INC H
ld a,(DE)
LD (HL),a ; Eigth Row
INC DE ; Move to next data item.
DEC B
JR Z,BLPutCharNextColumn
;The following code calculates the address of the next line down below current HL address.
PUSH DE ; save DE
ld a,l
and 224
cp 224
jp z,BLPutCharNextThird
BLPutCharSameThird:
ld de,-1760
;and a
add hl,de
POP DE ; get our data point back.
jp BLPutCharInColumnLoop
BLPutCharNextThird:
ld de,32
;and a
add hl,de
POP DE ; get our data point back.
JP BLPutCharInColumnLoop
BLPutCharNextColumn:
POP BC
POP HL
DEC B
JP Z, BLPutCharsEnd
INC L ; Note this would normally be Increase HL - but block painting should never need to increase H, since that would wrap around.
PUSH HL
PUSH BC
JP BLPutCharColumnLoop
BLPutCharsEnd:
end asm
END SUB
goto start
datapoint:
asm
defb 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32
defb 33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64
defb 65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96
defb 97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128
end asm
start:
cls
putChars(10,10,3,3,@datapoint)
paint(10,10,3,3,79)
|
|
|
New beta release 1.2.6r1603 |
Posted by: boriel - 06-03-2010, 11:37 PM - Forum: Bug Reports
- Replies (3)
|
|
Hi
This beta release, 1.2.6r1603 adds the following: - #preprocessor directives into ASM BLOCKS are allowed again.
- New command-line option, --enable-break that will make your program stoppable pressing BREAK (as in BASIC). This might be useful for debugging purposes, as the ROM error message will print the source line where break was pressed.
- For loops scheme is now 10 T-states faster per loop.
- PLOT, DRAW and CIRCLE are now 1% faster (better than nothing).
- Array accesses are now 50-100% faster (thanks to Britlion for suggesting this).
- Multi-line comments /' ... '/ now allowed (see Wiki), and also line comments after line break
If interested, please, download as always at <!-- m --><a class="postlink" href="http://www.boriel.com/files/zxb">http://www.boriel.com/files/zxb</a><!-- m -->
Intensive testing is needed.
|
|
|
Assembler shortcut |
Posted by: britlion - 06-03-2010, 05:45 PM - Forum: Wishlist
- Replies (1)
|
|
Not sure where else to put this - Not really a bug, per se, as an efficiency; I mentioned it elsewhere but I think it got lost.
With a sub that pokes memory based on labels:
eg:
Code: SUB pokethis(data as uByte)
poke @label+1,data
return
label:
asm
LD A,00
end asm
Seems to produce assembler that does this:
Code: ld hl, __LABEL__BLPutCharHeight
inc hl
Can the compiler not shortcut that to
Code: ld hl, __LABEL__BLPutCharHeight+N ?
and work out at assembly time where that should be, thus producing shorter and faster code for what is, after all, a constant?
(or is there something clever in the optimizer that spots that sort of thing - load followed by incs or fixed adds?)
|
|
|
Unnecessary Push/Pop |
Posted by: britlion - 06-03-2010, 05:41 PM - Forum: Bug Reports
- Replies (3)
|
|
Not sure why the .asm ends up this way, but each time it pulls a parameter in a sub or function it seems to do this:
Code: push hl
ld a, (ix+11)
pop hl
Why stack the HL register before loading the A register each time, and then unstack it immediately afterwards?
|
|
|
SyntaxError: invalid syntax in zxb.py (Resolved) |
Posted by: ccowley - 06-03-2010, 12:13 PM - Forum: Help & Support
- Replies (2)
|
|
I've just downloaded ZX BASIC from the zxbasic-latest-version.zip link to give it a try. I have Python 3.1.2 installed on a Windows 7 box.
Running zxb.py gives the following error:-
Code: File "C:\Users\Chris\speccy\zxbasic\zxb.py", line 60
print m # IGNORE # line directives as PASMO does not support them
^
SyntaxError: invalid syntax
I guess I must be doing something wrong, but what?
EDIT: Resolved. I uninstalled Python 3.1.2 and installed Python 2.6 instead. The zxbasic website says "you will need the python interpreter version 2.5 or higher installed on your system" - this should probably be amended to point out to non-python programmers (like me) that actually Python 3.x is no good as it's not backwardly compatible with v2.x.
|
|
|
|