Welcome, Guest
You have to register before you can post on our site.

Username
  

Password
  





Search Forums

(Advanced Search)

Forum Statistics
» Members: 310
» Latest member: Roberthib
» Forum threads: 1,028
» Forum posts: 6,211

Full Statistics

Online Users
There are currently 241 online users.
» 0 Member(s) | 240 Guest(s)
Bing

Latest Threads
Includes in ASM
Forum: How-To & Tutorials
Last Post: boriel
Yesterday, 03:50 PM
» Replies: 1
» Views: 16
Intermittent errors
Forum: Help & Support
Last Post: zarsoft
03-12-2024, 12:39 PM
» Replies: 0
» Views: 78
Store array information i...
Forum: Help & Support
Last Post: rbiondi
03-10-2024, 09:42 PM
» Replies: 0
» Views: 102
ScrollLeft function scrol...
Forum: Bug Reports
Last Post: rbiondi
03-07-2024, 03:57 PM
» Replies: 2
» Views: 258
string.bas errors when co...
Forum: Bug Reports
Last Post: rbiondi
03-01-2024, 10:10 AM
» Replies: 2
» Views: 244
Using Beepola with ZX BAS...
Forum: How-To & Tutorials
Last Post: edtoo
02-29-2024, 09:47 AM
» Replies: 15
» Views: 30,289
Johnny Bravo
Forum: Gallery
Last Post: zarsoft
02-11-2024, 11:20 PM
» Replies: 0
» Views: 214
Compiling +D G+DOS progra...
Forum: ZX Basic Compiler
Last Post: boriel
01-22-2024, 08:32 AM
» Replies: 4
» Views: 7,906
VAL = ? (solved)
Forum: Bug Reports
Last Post: zarsoft
01-03-2024, 11:44 PM
» Replies: 8
» Views: 1,920
Wrong math (solved)
Forum: Bug Reports
Last Post: zarsoft
01-03-2024, 11:38 PM
» Replies: 4
» Views: 1,012

 
  Using PutcharLcd
Posted by: compiuter - 06-02-2010, 10:42 PM - Forum: How-To & Tutorials - Replies (8)

I was testing the Putchar Lcd´s routine and I think It´s very handly and work right for my games. Perhaps is not the fastest, but I´m happy with the facilities of modifying its code. Big Grin

Code:
'===========================
'= putchar lcd compiuter   =
'= version 1.100603 <-date =
'===========================
'#include <sinclair.bas>
'#include <memcopy.bas>
'#include <keys.bas>
'#include <print42.bas>
'#include <attr.bas>
'---
cls
border 5
'-------------------------------------
sub putcharLcd1x1(x as Uinteger,y as Uinteger,adr as Uinteger)
   dim scr as Uinteger
   dim a as Uinteger
   a=peek(@linebuffer+y)
   scr=(a<<5)+x+16384
   poke ubyte scr,peek(adr)
   poke ubyte scr+256,peek(adr+1)
   poke ubyte scr+512,peek(adr+2)
   poke ubyte scr+768,peek(adr+3)
   poke ubyte scr+1024,peek(adr+4)
   poke ubyte scr+1280,peek(adr+5)
   poke ubyte scr+1536,peek(adr+6)
   poke ubyte scr+1792,peek(adr+7)
   poke ubyte 22528+x+(y<<5),peek (adr+8)
End sub
'-------------------------------------------
sub putcharLcd1x2(x as Uinteger,y as Uinteger,adr as Uinteger)
   dim scr as Uinteger
   dim a as Uinteger
   a=peek(@linebuffer+y)
   scr=(a<<5)+x+16384
   poke ubyte scr,peek(adr)
   poke ubyte scr+256,peek(adr+1)
   poke ubyte scr+512,peek(adr+2)
   poke ubyte scr+768,peek(adr+3)
   poke ubyte scr+1024,peek(adr+4)
   poke ubyte scr+1280,peek(adr+5)
   poke ubyte scr+1536,peek(adr+6)
   poke ubyte scr+1792,peek(adr+7)
   poke ubyte 22528+x+(y<<5),peek (adr+8)
   x=x+1
   a=peek(@linebuffer+y)
   scr=(a<<5)+x+16384
   poke ubyte scr,peek(adr+9)
   poke ubyte scr+256,peek(adr+10)
   poke ubyte scr+512,peek(adr+11)
   poke ubyte scr+768,peek(adr+12)
   poke ubyte scr+1024,peek(adr+13)
   poke ubyte scr+1280,peek(adr+14)
   poke ubyte scr+1536,peek(adr+15)
   poke ubyte scr+1792,peek(adr+16)
   poke ubyte 22528+x+(y<<5),peek (adr+17)
End sub
'-------------------------------------------
sub putcharLcd2x1(x as Uinteger,y as Uinteger,adr as Uinteger)
   dim scr as Uinteger
   dim a as Uinteger
   a=peek(@linebuffer+y)
   scr=(a<<5)+x+16384
   poke ubyte scr,peek(adr)
   poke ubyte scr+256,peek(adr+1)
   poke ubyte scr+512,peek(adr+2)
   poke ubyte scr+768,peek(adr+3)
   poke ubyte scr+1024,peek(adr+4)
   poke ubyte scr+1280,peek(adr+5)
   poke ubyte scr+1536,peek(adr+6)
   poke ubyte scr+1792,peek(adr+7)
   poke ubyte 22528+x+(y<<5),peek (adr+8)
   y=y+1
   a=peek(@linebuffer+y)
   scr=(a<<5)+x+16384
   poke ubyte scr,peek(adr+9)
   poke ubyte scr+256,peek(adr+10)
   poke ubyte scr+512,peek(adr+11)
   poke ubyte scr+768,peek(adr+12)
   poke ubyte scr+1024,peek(adr+13)
   poke ubyte scr+1280,peek(adr+14)
   poke ubyte scr+1536,peek(adr+15)
   poke ubyte scr+1792,peek(adr+16)
   poke ubyte 22528+x+(y<<5),peek (adr+17)
End sub
'-------------------------------------------
sub putcharLcd2x2(x as Uinteger,y as Uinteger,adr as Uinteger)
   dim scr as Uinteger
   dim a as Uinteger
   a=peek(@linebuffer+y)
   scr=(a<<5)+x+16384
   poke ubyte scr,peek(adr)
   poke ubyte scr+256,peek(adr+1)
   poke ubyte scr+512,peek(adr+2)
   poke ubyte scr+768,peek(adr+3)
   poke ubyte scr+1024,peek(adr+4)
   poke ubyte scr+1280,peek(adr+5)
   poke ubyte scr+1536,peek(adr+6)
   poke ubyte scr+1792,peek(adr+7)
   poke ubyte 22528+x+(y<<5),peek (adr+8)
   x=x+1
   a=peek(@linebuffer+y)
   scr=(a<<5)+x+16384
   poke ubyte scr,peek(adr+9)
   poke ubyte scr+256,peek(adr+10)
   poke ubyte scr+512,peek(adr+11)
   poke ubyte scr+768,peek(adr+12)
   poke ubyte scr+1024,peek(adr+13)
   poke ubyte scr+1280,peek(adr+14)
   poke ubyte scr+1536,peek(adr+15)
   poke ubyte scr+1792,peek(adr+16)
   poke ubyte 22528+x+(y<<5),peek (adr+17)
   x=x-1
   y=y+1
   a=peek(@linebuffer+y)
   scr=(a<<5)+x+16384
   poke ubyte scr,peek(adr+18)
   poke ubyte scr+256,peek(adr+19)
   poke ubyte scr+512,peek(adr+20)
   poke ubyte scr+768,peek(adr+21)
   poke ubyte scr+1024,peek(adr+22)
   poke ubyte scr+1280,peek(adr+23)
   poke ubyte scr+1536,peek(adr+24)
   poke ubyte scr+1792,peek(adr+25)
   poke ubyte 22528+x+(y<<5),peek (adr+26)
   x=x+1
   a=peek(@linebuffer+y)
   scr=(a<<5)+x+16384
   poke ubyte scr,peek(adr+27)
   poke ubyte scr+256,peek(adr+28)
   poke ubyte scr+512,peek(adr+29)
   poke ubyte scr+768,peek(adr+30)
   poke ubyte scr+1024,peek(adr+31)
   poke ubyte scr+1280,peek(adr+32)
   poke ubyte scr+1536,peek(adr+33)
   poke ubyte scr+1792,peek(adr+34)
   poke ubyte 22528+x+(y<<5),peek (adr+35)
End sub
'---next will be probably putcharlcd1x3
'---
linebuffer:
asm
  defb 0,1,2,3,4,5,6,7,64,65,66,67,68,69,70,71,128,129,130,131,132,133,134,135
end asm
'--------------------------
start:
dim x,y as ubyte
dim adr as Uinteger

adr=@gfx1a
x=1
y=1
putcharLcd1x1(x,y,adr)

adr=@gfx1a
x=1
y=3
putcharLcd1x2(x,y,adr)

adr=@gfx1a
x=1
y=5
putcharLcd2x1(x,y,adr)

adr=@gfx1a
x=1
y=8
putcharLcd2x2(x,y,adr)
'---fin---
END
'----------------------------------------
gfx1a:
ASM
DEFB 0,8,8,8,8,8,8,0,00010001B
DEFB 0,60,4,4,60,32,60,0,00011001B
DEFB 0,60,4,4,60,4,60,0,00100001B
DEFB 0,36,36,36,60,4,4,0,00101001B
END ASM
'-----------------------------------------

Print this item

  Proportional pixel-precise printing anywhere on screen
Posted by: LCD - 06-02-2010, 01:11 PM - Forum: How-To & Tutorials - Replies (5)

Finally it works now and does not crash in a SUB. I love this routine! It will be included in BorIDE code library.

Code:
' Proportional printing anywhere on screen.
' Original routine by Christoph Odenthal (Odin)
' ZXBC modification by Leszek Chmielewski (LCD)
' Thanks to Boriel and Britlion for help and hints

dim text$
text$="This is a test for ZX Spectrum proportional print!"
dim x as ubyte
dim y as ubyte
dim spacesize as ubyte
dim xgap as ubyte

x=0
y=168
spacesize=2
xgap=0

propprint(x,y,spacesize,xgap,text$)

sub propprint(x as ubyte,y as ubyte,spacesize as ubyte, xgap as ubyte,txt$ as string)
dim b$ as string '
b$=txt$+chr(0)
poke Uinteger @PropPrintTxtadr,PEEK(Uinteger, @b$)+2 'textadr
poke @PropPrintTxtadr+2,x
poke @PropPrintTxtadr+3,y
poke @PropPrintTxtadr+4,spacesize
poke @PropPrintTxtadr+5,xgap
PropPrint:
Asm
;' --------------------------------
;'  Free Size N Place Text Print
;' --------------------------------
;' (c) 14.09.2002 C.Odenthal
;'
;' Last Modifications: 15.10.2002
;' Modification for Boriels ZXBC
;' By Leszek Chmielewski 02.06.2010
;' --------------------------------
;' ORG 32000
;' DUMP 45000
;' --------------------------------
;' Entry point
;' --------------------------------
Start:
    JR Start2
;' --------------------------------
;' Parameter
;' --------------------------------
end asm
PropPrintTxtadr:
asm
text_addr:
   DEFW 0 ;' Addr of text
x_pos:
   DEFB 4 ;' Pos of text
y_pos:
   DEFB 4
spc_size:
   DEFB 3 ;' Width of space char
x_gap:
   DEFB 1 ;' Gap between chars
y_gap:
   DEFB 1 ;' Gap between lines
end_symb:
   DEFB 0 ;' End of line char code
x_start:
   DEFB 0 ;' Start of window
y_start:
   DEFB 0
x_end:
   DEFB 255 ;' End of window
y_end:
   DEFB 191
x_zoom:
   DEFB 1 ;' Zooming factor
y_zoom:
   DEFB 1

;' --------------------------------
;' Main routine
;' --------------------------------

Start2:
   LD A,(x_pos) ;' Calc. scr addr.
   LD B,A
   LD A,(y_pos)
   LD C,A
   CALL PosToScr
   LD (scr_ad),DE ;' Store scr addr.
   LD A,L
   LD (pix_pos),A
   LD A,(end_symb) ;' Get line ending char
   LD (poke_here+1),A ;' Poke it into memory below
   LD HL,(text_addr)
Main_Loop:
   LD A,(HL);' Get char
poke_here:
   CP 0 ;' End of text? (poked!)
   JP Z,Exit1
   INC HL
   PUSH HL
   CP 32 ;' Replace ctrl chars
   JP NC,No_Ctrl
   LD A,32
No_Ctrl:
   CALL Copy_Chr ;' Copy char-gfx to work-buffer
   CALL Measure ;' Measure left rim + width
   PUSH BC ;' (Save results)
   LD A,C ;' No pixel set in char?
   AND A
   JP Z,Space_Chr
   LD A,(pix_pos);' size+bitpos (=1..15)
   ADD A,C
   CP 9 ;' > 8 ?
   JP NC,Overlap ;' Char overlaps
;' Calculate 8 bit rotation
   LD A,(pix_pos) ;' bitpos-l_rim (=-7..7)
   SUB B
   AND A ;' = 0 ?
   JP Z,PrintIt8
   JP C,Neg_8 ;' < 0 ?
;' --------------------------------
   CP 5 ;' Not in 1..4 ?
   JP NC,Left_8
;' --------------------------------
   LD B,A
   CALL Chr_Rgt8 ;' Rotate right 8 bit
   JP PrintIt8
;' --------------------------------
Left_8:
   NEG ;' = 8 - A
   ADD A,8
   LD B,A
   CALL Chr_Left8 ;' Rotate left 8 bit
   JP PrintIt8
;' --------------------------------
Neg_8:
   NEG
   CP 5 ;' Not in 1..4 ?
   JP NC,Right_8
;' --------------------------------
   LD B,A
   CALL Chr_Left8 ;' Rotate left 8 bit
   JP PrintIt8
;' --------------------------------
Right_8:
   NEG ;' = 8 - A
   ADD A,8
   LD B,A
   CALL Chr_Rgt8 ;' Rotate right 8 bit
   JP PrintIt8
;' --------------------------------
;' Calculate 16 bit rotation
;' --------------------------------
Overlap:
   LD A,(pix_pos);' bitpos-l_rim (=-7..7)
   SUB B
   AND A ;' = 0 ?
   JP Z,PrintIt8
;' --------------------------------
   LD B,A
   CALL Chr_Rgt16 ;' Rotate right 16 bit
PrintIt16:
   LD DE,(scr_ad);' Check for screen end
   LD A,E
   AND 31
   CP 31 ;' (2nd byte outside ?)
   JP Z,Outside
   CALL Print16 ;' Display char (16 bit)
   JP Next_Loc
;' --------------------------------
PrintIt8:
   LD DE,(scr_ad);' Display char (8 bit)
   CALL Print8
   JP Next_Loc
;' --------------------------------
Space_Chr:
   LD A,(spc_size);' Skip pixels
   LD DE,(scr_ad);' Get screen addr.
   POP BC ;' Throw away values
   LD B,0
   LD C,A
   JP Next_Loc2
;' --------------------------------
Next_Loc:
   POP BC ;' Move to next char location
Next_Loc2:
   LD A,(pix_pos);' =bitpos+x_gap+size
   LD L,A
   LD A,(x_gap)
   ADD A,L
   ADD A ,C
   LD L ,A
   AND 7 ;' New pix_pos
   LD (pix_pos),A
   LD H,0 ;' =result/8
   SRL L
   SRL L
   SRL L
   ADD HL,DE ;' New byte pos
   LD A ,E ;' Check for screen end
   AND 31
   LD E,A
   LD A,L
   AND 31
   CP E ;' New pos smaller than old ?
   JP C ,Exit2 ;' -> End of printing
   LD (scr_ad),HL ;' Store new scr ad.
   POP HL ;' Restore text pointer
   JP Main_Loop
;' --------------------------------
Outside:
   POP BC ;' Stop printing
   POP HL ;' Char not printed!
   DEC HL
   JP Exit1
;' --------------------------------
Exit2:
   POP HL ;' Return nr of printed chars
Exit1:
   LD DE,(text_addr)
   XOR A
   SBC HL,DE
   LD B,H ;' Return value in BC to Basic
   LD C,L
     jp PropPrintTxtadr2
;' --------------------------------
;' Calc. scr adr from x,y
;' --------------------------------
;' In : B  = x / C = y (preserved)
;' Out: DE = scr adr / L = pixpos
;' Usd: A, BC, DE, L
;' --------------------------------
PosToScr:
   LD A,C ;' Range check
   CP 185
   JP C,ValOk
   LD C,184
ValOk:
   LD A,B ;' Pix pos
   AND 7
   LD L,A
   LD E,B
   SRL E
   SRL E
   SRL E
   LD A,C ;' Scr pos
   AND 7
   LD D,A
   LD A,C
   AND 56
   RLA
   RLA
   OR E
   LD E,A
   LD A,C
   AND 192
   RRA
   RRA
   RRA
   OR D
   OR 64
   LD D,A
   RET
;' --------------------------------
;' Copy char into buffer
;' --------------------------------
;' In : A = Char
;' Out: -
;' Usd: A, HL, DE, BC
;' --------------------------------
Copy_Chr:
   LD DE,(23606);' SysVar CHARS
   LD H,0
   LD L,A
   ADD HL,HL ;' * 8
   ADD HL,HL
   ADD HL,HL
   ADD HL,DE ;' + Chartable
   EX DE,HL
   LD HL,Chr_Buf
   LD B,8
Copy_Loop:
   LD A,(DE);' Double to 16 pixel/row
   INC DE
   LD (HL),A ;' Low-byte in memory!
   INC HL
   LD (HL),0 ;' High-byte in memory!
   INC HL
   DJNZ Copy_Loop
   RET
;' --------------------------------
;' Measure left border and width
;' --------------------------------
;' In : -
;' Out: B = left rim / C = width
;' Usd: A, HL, BC
;' --------------------------------
Measure:
   LD HL,Chr_Buf ;' "OR" together all 8 bytes
   LD B,8
   XOR A
Msr_Loop:
   OR (HL)
   INC HL
   INC HL
   DJNZ Msr_Loop
   LD BC,0
   AND A ;' Check if zero
   RET Z
Msr_Loop2:
   INC B ;' Measure left border
   RLCA
   JP NC,Msr_Loop2
   RRCA
   DEC B
   LD C,9 ;' Measure width
Msr_Loop3:
   DEC C
   RRCA
   JP NC,Msr_Loop3
   RET
;' --------------------------------
;' Move char to left, 8 bit
;' --------------------------------
;' In : B = Nr of bits to shift
;' Out: -
;' Usd: A, B, HL
;' --------------------------------
Chr_Left8:
   PUSH BC
   LD HL,Chr_Buf ;' Rotate char left 8 bit
   LD C,B ;' 1st row
   LD A,(HL )
Chr_LLp1:
   RLCA
   DJNZ Chr_LLp1
   LD (HL),A
   LD B,C
   INC HL
   INC HL
   LD C,B ;' 2nd row
   LD A,(HL)
Chr_LLp2:
   RLCA
   DJNZ Chr_LLp2
   LD (HL),A
   LD B,C
   INC HL
   INC HL
   LD C,B ;' 3rd row
   LD A ,(HL)
Chr_LLp3:
   RLCA
   DJNZ Chr_LLp3
   LD (HL),A
   LD B,C
   INC HL
   INC HL
   LD C,B ;' 4th row
   LD A,(HL)
Chr_LLp4:
   RLCA
   DJNZ Chr_LLp4
   LD (HL),A
   LD B,C
   INC HL
   INC HL
   LD C,B ;' 5th row
   LD A,(HL)
Chr_LLp5:
   RLCA
   DJNZ Chr_LLp5
   LD (HL),A
   LD B,C
   INC HL
   INC HL
   LD C,B ;' 6th row
   LD A,(HL)
Chr_LLp6:
   RLCA
   DJNZ Chr_LLp6
   LD (HL),A
   LD B,C
   INC HL
   INC HL
   LD C,B ;' 7th row
   LD A,(HL)
Chr_LLp7:
   RLCA
   DJNZ Chr_LLp7
   LD (HL),A
   LD B,C
   INC HL
   INC HL
   LD C,B ;' 8th row
   LD A,(HL)
Chr_LLp8:
   RLCA
   DJNZ Chr_LLp8
   LD (HL),A
   LD B,C
   POP BC
   RET
;' --------------------------------
;' Move char to right, 8 bit
;' --------------------------------
;' In : B = Nr of bits to shift
;' Out: -
;' Usd: A, B, HL
;' --------------------------------
Chr_Rgt8:
   PUSH BC
   LD HL,Chr_Buf ;' Rotate char right 8 bit
   LD C,B ;' 1st row
   LD A,(HL)
Chr_RLp1:
   RRCA
   DJNZ Chr_RLp1
   LD (HL),A
   LD B,C
   INC HL
   INC HL
   LD C,B ;' 2nd row
   LD A,(HL)
Chr_RLp2:
   RRCA
   DJNZ Chr_RLp2
   LD (HL),A
   LD B,C
   INC HL
   INC HL
   LD C,B ;' 3rd row
   LD A,(HL)
Chr_RLp3:
   RRCA
   DJNZ Chr_RLp3
   LD (HL),A
   LD B,C
   INC HL
   INC HL
   LD C,B ;' 4th row
   LD A,(HL)
Chr_RLp4:
   RRCA
   DJNZ Chr_RLp4
   LD (HL),A
   LD B,C
   INC HL
   INC HL
   LD C,B ;' 5th row
   LD A,(HL)
Chr_RLp5:
   RRCA
   DJNZ Chr_RLp5
   LD (HL),A
   LD B,C
   INC HL
   INC HL
   LD C,B ;' 6th row
   LD A ,(HL )
Chr_RLp6:
   RRCA
   DJNZ Chr_RLp6
   LD (HL),A
   LD B,C
   INC HL
   INC HL
   LD C,B ;' 7th row
   LD A,(HL)
Chr_RLp7:
   RRCA
   DJNZ Chr_RLp7
   LD (HL),A
   LD B,C
   INC HL
   INC HL
   LD C,B ;' 8th row
   LD A,(HL)
Chr_RLp8:
   RRCA
   DJNZ Chr_RLp8
   LD (HL),A
   LD B,C
   POP BC
   RET
;' --------------------------------
;' Move char to right 16 bit
;' --------------------------------
;' In : B = Nr of bits to shift
;' Out:
;' Usd: A, B, HL
;' --------------------------------
Chr_Rgt16:
   LD HL,(Chr_Buf);' Rotate char right 16 bit
   LD A,B ;' 1st row
Chr_R2Lp1:
   SRL L
   RR H ;' Insert carry
   DJNZ Chr_R2Lp1
   LD B,A
   LD (Chr_Buf),HL
   LD HL,(Chr_Buf+2);' 2nd row
   LD A,B
Chr_R2Lp2:
   SRL L
   RR H ;' Insert carry
   DJNZ Chr_R2Lp2
   LD B,A
   LD (Chr_Buf+2),HL
   LD HL,(Chr_Buf+4);' 3rd row
   LD A,B
Chr_R2Lp3:
   SRL L
   RR H ;' Insert carry
   DJNZ Chr_R2Lp3
   LD B,A
   LD (Chr_Buf+4),HL
   LD HL,(Chr_Buf+6);' 4th row
   LD A,B
Chr_R2Lp4:
   SRL L
   RR H ;' Insert carry
   DJNZ Chr_R2Lp4
   LD B,A
   LD (Chr_Buf+6),HL
   LD HL,(Chr_Buf+8);' 5th row
   LD A,B
Chr_R2Lp5:
   SRL L
   RR H ;' Insert carry
   DJNZ Chr_R2Lp5
   LD B,A
   LD (Chr_Buf+8),HL
   LD HL,(Chr_Buf+10);' 6th row
   LD A,B
Chr_R2Lp6:
   SRL L
   RR H ;' Insert carry
   DJNZ Chr_R2Lp6
   LD B,A
   LD (Chr_Buf+10),HL
   LD HL,(Chr_Buf+12);' 7th row
   LD A,B
Chr_R2Lp7:
   SRL L
   RR H ;' Insert carry
   DJNZ Chr_R2Lp7
   LD B,A
   LD (Chr_Buf+12),HL
   LD HL,(Chr_Buf+14);' 8th row
   LD A,B
Chr_R2Lp8:
   SRL L
   RR H ;'Insert carry
   DJNZ Chr_R2Lp8
   LD B,A
   LD (Chr_Buf+14),HL
   RET
;' --------------------------------
;' Print 8 bit wide char on screen
;' --------------------------------
;' In : DE = screen adr.
;' Out: -
;' Usd: A, HL, DE, B
;' --------------------------------
Print8:
   LD HL,Chr_Buf
   PUSH DE ;' save scr ad.
   EX DE,HL
   LD B,8 ;' 8 lines
Prt8_L:
   LD A,(DE);' set 1 byte
   XOR (HL)
   LD (HL),A
   INC DE ;' skip 1 byte
   INC DE ;' next byte
   INC H ;' calc. next line
   LD A,H
   AND 7
   JP NZ,Prt8_C
   LD A,L
   ADD A,32
   LD L,A
   JR C,Prt8_C
   LD A,H
   SUB 8
   LD H,A
Prt8_C:
   DJNZ Prt8_L ;' next round
   POP DE ;' restore scr ad.
   RET
;'--------------------------------
;' Print 16 bit wide char on screen
;' --------------------------------
;' In : DE = screen adr.
;' Out: -
;' Usd: A, HL, DE, B
;' --------------------------------
Print16:
   LD HL,Chr_Buf
   PUSH DE ;' save scr ad.
   EX DE,HL
   LD B,8 ;' 8 lines
Prt16_L:
   LD A,(DE);' set 1 byte
   XOR (HL)
   LD (HL),A
   INC HL ;' next scr pos
   INC DE ;' next byte
   LD A,(DE);' set 1 byte
   XOR (HL)
   LD (HL),A
   DEC HL ;' prev scr pos
   INC DE ;' next byte
   INC H ;' calc. next line
   LD A,H
   AND 7
   JP NZ,Prt16_C
   LD A,L
   ADD A,32
   LD L,A
   JR C,Prt16_C
   LD A,H
   SUB 8
   LD H,A
Prt16_C:
   DJNZ Prt16_L ;' next round
   POP DE ;' restore scr ad.
   RET
;' --------------------------------
;'  Variables
;' --------------------------------
Chr_Buf:
   DEFS 16
scr_ad:
   DEFW 0
pix_pos:
   DEFB 0
;' -----------------
PropPrintTxtadr2:
end asm
end sub

Print this item

  POKE STRING and @string$
Posted by: LCD - 06-01-2010, 11:30 PM - Forum: Help & Support - Replies (17)

Just converted the Proportional text routine to a SUB, so it won't crash at exit, but I ran into some problems.
I remember, I asked about it, but the thread was closed then, but you promised to look at this: POKE and PEEK STRING do not work, and something else: @a$ does not return the correct adress of the string stored in a$. It returns a adress, but peeking memory in emulator reveals that the text stored in string is not at the adress. Testing @variable reveals that the adress of normal ubyte variables is correct.
Is this a bug or "feature"? If it is a feature, how to find out the adress of a string stored in Variable?

Print this item

  Compiler Returncode
Posted by: LCD - 05-31-2010, 05:57 PM - Forum: Wishlist - Replies (11)

Hi Boriel, I have noticed that your compiler exits with returncode Zero if no errors was found, One if Errors found, but also One if a warning was generated, and the compilation was otherwise successfull. Can you change this?
0=No errors
1=Warnings, compilation was OK.
2=Error, compilation failed
Or:
0=No Errors or just warnings
1=Error, compilation failed.
The BorIDE does now mark Warning and error lines. It can start the emulator after compilation, but if a warning was issued, it still missinterprets it as compilation fail.

Print this item

  PutTile16x16 Pixels + Attributes
Posted by: LCD - 05-29-2010, 10:12 AM - Forum: How-To & Tutorials - Replies (26)

This will put Tiles of 2x2 characters with attributes on screen, and is not restricted to use a particular number of tiles, as it uses a memory pointer to the adress of tile in memory, and it is almost fast enough for games (until someone will write a ASM version)
Note: Lines(23) is used for screen adress calculation. I used only 24 bytes for this table (without bAND function I need a Table for this). not using a array but InLine ASM DEFB data can save 3 bytes.
POKE and PEEK UINTEGER use two-Byte transfer, so this is much faster than transfer of a single byte.
Screen adress calculation is splited (so variable A had to be created) because of a calculation problem. Usualy I would write these lines:

Code:
a=peek(@lines+y+3)
scr=(a<<5)+x+16384
as:
Code:
scr=peek(@lines+y+3)<<5+x+16384
but it does not work (yet)
also if y is not uinteger but ubyte type, scr value is calculated wrong, so even if y is in range of ubyte, do not change it as binary shifts on Ubyte also results in a ubyte.

Code:
Dim lines(23) As uByte => { _
    0,1,2,3,4,5,6,7,64,65,66,67,68,69,70,71,128,129,130,131,132,133,134,135 }
sub puttile(x as Uinteger,y as Uinteger,adr as Uinteger)
    dim scr as Uinteger
    dim a as Uinteger
    a=peek(@lines+y+3)
    scr=(a<<5)+x+16384
    poke Uinteger scr,peek(Uinteger,adr)
    poke Uinteger scr+256,peek(Uinteger,adr+2)
    poke Uinteger scr+512,peek(Uinteger,adr+4)
    poke Uinteger scr+768,peek(Uinteger,adr+6)
    poke Uinteger scr+1024,peek(Uinteger,adr+8)
    poke Uinteger scr+1280,peek(Uinteger,adr+10)
    poke Uinteger scr+1536,peek(Uinteger,adr+12)
    poke Uinteger scr+1792,peek(Uinteger,adr+14)
    poke Uinteger 22528+x+(y<<5),peek(Uinteger,adr+32)
    a=peek(@lines+y+4)
    scr=(a<<5)+x+16384
    poke Uinteger scr,peek(Uinteger,adr+16)
    poke Uinteger scr+256,peek(Uinteger,adr+18)
    poke Uinteger scr+512,peek(Uinteger,adr+20)
    poke Uinteger scr+768,peek(Uinteger,adr+22)
    poke Uinteger scr+1024,peek(Uinteger,adr+24)
    poke Uinteger scr+1280,peek(Uinteger,adr+26)
    poke Uinteger scr+1536,peek(Uinteger,adr+28)
    poke Uinteger scr+1792,peek(Uinteger,adr+30)
    poke Uinteger 22560+x+(y<<5),peek(Uinteger,adr+34)
End sub

dim x,y as ubyte
dim adr as Uinteger
adr=0
for y=0 to 11
    for x=0 to 15
        puttile(x<<1,y<<1,adr)
        'adr=adr+36
    next x
next y
end

Print this item

  Most useful/needed stuff which should be added
Posted by: na_th_an - 05-28-2010, 10:20 AM - Forum: Wishlist - Replies (17)

This is somewhat a wish list to which I may contribute (coding my second suggestion).

1.- Types. I'm a nightmare, I keep repeating this, but types are most needed. They would make every coding chore way easier, specially when you have to pass parameters or create arrays of structured data. Game coding can be pretty messing without the ability to create proper data structures.

2.- A nice, fast, simple, hassle-less Putchar (x, y, attr, ascii) function which draws character ascii with attributes attr at coordinates (x, y).

3.- Less important, but may come handy, the ability use Attr as a modifier for Print which combines Ink, Bright, Paper, and Flash in a single command:

Code:
Print At 2, 2; Attr 71; "Bright white text on black"

4.- A fill routine which allows you to use patterns (for example, a 8x8 pattern defined by a character bitmap).

5.- Allow comments in broken lines, such as this:

Code:
Dim myLevel(2) as uByte => { _
   0, _     ' Number of exists
   10, _    ' Baddies life gauge
   7 _      ' Water level
}

Currently, the compiler refuses to compile such snippets. Comments aren't allowed after compiler directives, either, for example:

Code:
#include once "fsp2.1.bas"    ' The sprite library

Fails to compile due to the inline comment.

As I said, I will probably code a ROM-independent version of "2" and I hope someone makes it properly faster 'cause my ASM is dire. My main problem is that I don't know how to properly interface BASIC/ASM, so it may look cheesy. I'll take a glance at the examples, to see if I can work out how to do it so it's fast and not very ugly. Suggestions?

Print this item

  InLine ASM Bug
Posted by: LCD - 05-27-2010, 11:23 PM - Forum: Bug Reports - Replies (5)

I have here a Assembly code for Proportional printing (Created by Odin), but zxb throws it out because of a "Unexpected token '-' [MINUS]" at the line "DJNZ Chr_R2Lp2". The compiler tells me the line, but a minus sign is not present here (this is the bug report). Anyway, this could be turned by our friends here into a nice SUB for the library, once it works, I think. It supports pixel precise printing.
I imported it from Tornado source code using my own importer, I wrote for BorIDE.

Code:
Asm
; --------------------------------
;  Free Size N Place Text Print
; --------------------------------
; (c) 14.09.2002 C.Odenthal
;
; Last Modifications: 15.10.2002
; --------------------------------
; ORG 32000
; DUMP 45000
; --------------------------------
; Entry point
; --------------------------------
Start:
    JR Start2
; --------------------------------
; Parameter
; --------------------------------
text_addr:
    DEFW test_text ; Addr of text
x_pos:
    DEFB 4 ; Pos of text
y_pos:
    DEFB 4
spc_size:
    DEFB 3 ; Width of space char
x_gap:
    DEFB 1 ; Gap between chars
y_gap:
    DEFB 1 ; Gap between lines
end_symb:
    DEFB 0 ; End of line char code
x_start:
    DEFB 0 ; Start of window
y_start:
    DEFB 0
x_end:
    DEFB 255 ; End of window
y_end:
    DEFB 191
x_zoom:
    DEFB 1 ; Zooming factor
y_zoom:
    DEFB 1
; --------------------------------
; Main routine
; --------------------------------
Start2:
    LD A,(x_pos); Calc. scr addr.
    LD B,A
    LD A,(y_pos)
    LD C,A
    CALL PosToScr
    LD (scr_ad),DE ; Store scr addr.
    LD A,L
    LD (pix_pos),A
    LD A,(end_symb); Get line ending char
    LD (poke_here+1),A ; Poke it into memory below
    LD HL,(text_addr)
Main_Loop:
    LD A,(HL); Get char
poke_here:
    CP 0 ; End of text? (poked!)
    JP Z,Exit1
    INC HL
    PUSH HL
    CP 32 ; Replace ctrl chars
    JP NC,No_Ctrl
    LD A,32
No_Ctrl:
    CALL Copy_Chr ; Copy char-gfx to work-buffer
    CALL Measure ; Measure left rim + width
    PUSH BC ; (Save results)
    LD A,C ; No pixel set in char?
    AND A
    JP Z,Space_Chr
    LD A,(pix_pos); size+bitpos (=1..15)
    ADD A,C
    CP 9 ; > 8 ?
    JP NC,Overlap ; Char overlaps
; Calculate 8 bit rotation
    LD A,(pix_pos) ; bitpos-l_rim (=-7..7)
    SUB B
    AND A ; = 0 ?
    JP Z,PrintIt8
    JP C,Neg_8 ; < 0 ?
; --------------------------------
    CP 5 ; Not in 1..4 ?
    JP NC,Left_8
; --------------------------------
    LD B,A
    CALL Chr_Rgt8 ; Rotate right 8 bit
    JP PrintIt8
; --------------------------------
Left_8:
    NEG ; = 8 - A
    ADD A,8
    LD B,A
    CALL Chr_Left8 ; Rotate left 8 bit
    JP PrintIt8
; --------------------------------
Neg_8:
    NEG
    CP 5 ; Not in 1..4 ?
    JP NC,Right_8
; --------------------------------
    LD B,A
    CALL Chr_Left8 ; Rotate left 8 bit
    JP PrintIt8
; --------------------------------
Right_8:
    NEG ; = 8 - A
    ADD A,8
    LD B,A
    CALL Chr_Rgt8 ; Rotate right 8 bit
    JP PrintIt8
; --------------------------------
; Calculate 16 bit rotation
; --------------------------------
Overlap:
    LD A,(pix_pos); bitpos-l_rim (=-7..7)
    SUB B
    AND A ; = 0 ?
    JP Z,PrintIt8
; --------------------------------
    LD B,A
    CALL Chr_Rgt16 ; Rotate right 16 bit
PrintIt16:
    LD DE,(scr_ad); Check for screen end
    LD A,E
    AND 31
    CP 31 ; (2nd byte outside ?)
    JP Z,Outside
    CALL Print16 ; Display char (16 bit)
    JP Next_Loc
; --------------------------------
PrintIt8:
    LD DE,(scr_ad); Display char (8 bit)
    CALL Print8
    JP Next_Loc
; --------------------------------
Space_Chr:
    LD A,(spc_size); Skip pixels
    LD DE,(scr_ad); Get screen addr.
    POP BC ; Throw away values
    LD B,0
    LD C,A
    JP Next_Loc2
; --------------------------------
Next_Loc:
    POP BC ; Move to next char location
Next_Loc2:
    LD A,(pix_pos); =bitpos+x_gap+size
    LD L,A
    LD A,(x_gap)
    ADD A,L
    ADD A ,C
    LD L ,A
    AND 7 ; New pix_pos
    LD (pix_pos),A
    LD H,0 ; =result/8
    SRL L
    SRL L
    SRL L
    ADD HL,DE ; New byte pos
    LD A ,E ; Check for screen end
    AND 31
    LD E,A
    LD A,L
    AND 31
    CP E ; New pos smaller than old ?
    JP C ,Exit2 ; -> End of printing
    LD (scr_ad),HL ; Store new scr ad.
    POP HL ; Restore text pointer
    JP Main_Loop
; --------------------------------
Outside:
    POP BC ; Stop printing
    POP HL ; Char not printed!
    DEC HL
    JP Exit1
; --------------------------------
Exit2:
    POP HL ; Return nr of printed chars
Exit1:
    LD DE,(text_addr)
    XOR A
    SBC HL,DE
    LD B,H ; Return value in BC to Basic
    LD C,L
    RET
; --------------------------------
; --------------------------------
; Calc. scr adr from x,y
; --------------------------------
; In : B  = x / C = y (preserved)
; Out: DE = scr adr / L = pixpos
; Usd: A, BC, DE, L
; --------------------------------
PosToScr:
    LD A,C ; Range check
    CP 185
    JP C,ValOk
    LD C,184
ValOk:
    LD A,B ; Pix pos
    AND 7
    LD L,A
    LD E,B
    SRL E
    SRL E
    SRL E
    LD A,C ; Scr pos
    AND 7
    LD D,A
    LD A,C
    AND 56
    RLA
    RLA
    OR E
    LD E,A
    LD A,C
    AND 192
    RRA
    RRA
    RRA
    OR D
    OR 64
    LD D,A
    RET
; --------------------------------
; Copy char into buffer
; --------------------------------
; In : A = Char
; Out: -
; Usd: A, HL, DE, BC
; --------------------------------
Copy_Chr:
    LD DE,(23606); SysVar CHARS
    LD H,0
    LD L,A
    ADD HL,HL ; * 8
    ADD HL,HL
    ADD HL,HL
    ADD HL,DE ; + Chartable
    EX DE,HL
    LD HL,Chr_Buf
    LD B,8
Copy_Loop:
    LD A,(DE); Double to 16 pixel/row
    INC DE
    LD (HL),A ; Low-byte in memory!
    INC HL
    LD (HL),0 ; High-byte in memory!
    INC HL
    DJNZ Copy_Loop
    RET
; --------------------------------
; Measure left border and width
; --------------------------------
; In : -
; Out: B = left rim / C = width
; Usd: A, HL, BC
; --------------------------------
Measure:
    LD HL,Chr_Buf ; "OR" together all 8 bytes
    LD B,8
    XOR A
Msr_Loop:
    OR (HL)
    INC HL
    INC HL
    DJNZ Msr_Loop
    LD BC,0
    AND A ; Check if zero
    RET Z
Msr_Loop2:
    INC B ; Measure left border
    RLCA
    JP NC,Msr_Loop2
    RRCA
    DEC B
    LD C,9 ; Measure width
Msr_Loop3:
    DEC C
    RRCA
    JP NC,Msr_Loop3
    RET
; --------------------------------
; Move char to left, 8 bit
; --------------------------------
; In : B = Nr of bits to shift
; Out: -
; Usd: A, B, HL
; --------------------------------
Chr_Left8:
    PUSH BC
    LD HL,Chr_Buf ; Rotate char left 8 bit
    LD C,B ; 1st row
    LD A,(HL )
Chr_LLp1:
    RLCA
    DJNZ Chr_LLp1
    LD (HL),A
    LD B,C
    INC HL
    INC HL
    LD C,B ; 2nd row
    LD A,(HL)
Chr_LLp2:
    RLCA
    DJNZ Chr_LLp2
    LD (HL),A
    LD B,C
    INC HL
    INC HL
    LD C,B ; 3rd row
    LD A ,(HL)
Chr_LLp3:
    RLCA
    DJNZ Chr_LLp3
    LD (HL),A
    LD B,C
    INC HL
    INC HL
    LD C,B ; 4th row
    LD A,(HL)
Chr_LLp4:
    RLCA
    DJNZ Chr_LLp4
    LD (HL),A
    LD B,C
    INC HL
    INC HL
    LD C,B ; 5th row
    LD A,(HL)
Chr_LLp5:
    RLCA
    DJNZ Chr_LLp5
    LD (HL),A
    LD B,C
    INC HL
    INC HL
    LD C,B ; 6th row
    LD A,(HL)
Chr_LLp6:
    RLCA
    DJNZ Chr_LLp6
    LD (HL),A
    LD B,C
    INC HL
    INC HL
    LD C,B ; 7th row
    LD A,(HL)
Chr_LLp7:
    RLCA
    DJNZ Chr_LLp7
    LD (HL),A
    LD B,C
    INC HL
    INC HL
    LD C,B ; 8th row
    LD A,(HL)
Chr_LLp8:
    RLCA
    DJNZ Chr_LLp8
    LD (HL),A
    LD B,C
    POP BC
    RET
; --------------------------------
; Move char to right, 8 bit
; --------------------------------
; In : B = Nr of bits to shift
; Out: -
; Usd: A, B, HL
; --------------------------------
Chr_Rgt8:
    PUSH BC
    LD HL,Chr_Buf ; Rotate char right 8 bit
    LD C,B ; 1st row
    LD A,(HL)
Chr_RLp1:
    RRCA
    DJNZ Chr_RLp1
    LD (HL),A
    LD B,C
    INC HL
    INC HL
    LD C,B ; 2nd row
    LD A,(HL)
Chr_RLp2:
    RRCA
    DJNZ Chr_RLp2
    LD (HL),A
    LD B,C
    INC HL
    INC HL
    LD C,B ; 3rd row
    LD A,(HL)
Chr_RLp3:
    RRCA
    DJNZ Chr_RLp3
    LD (HL),A
    LD B,C
    INC HL
    INC HL
    LD C,B ; 4th row
    LD A,(HL)
Chr_RLp4:
    RRCA
    DJNZ Chr_RLp4
    LD (HL),A
    LD B,C
    INC HL
    INC HL
    LD C,B ; 5th row
    LD A,(HL)
Chr_RLp5:
    RRCA
    DJNZ Chr_RLp5
    LD (HL),A
    LD B,C
    INC HL
    INC HL
    LD C,B ; 6th row
    LD A ,(HL )
Chr_RLp6:
    RRCA
    DJNZ Chr_RLp6
    LD (HL),A
    LD B,C
    INC HL
    INC HL
    LD C,B ; 7th row
    LD A,(HL)
Chr_RLp7:
    RRCA
    DJNZ Chr_RLp7
    LD (HL),A
    LD B,C
    INC HL
    INC HL
    LD C,B ; 8th row
    LD A,(HL)
Chr_RLp8:
    RRCA
    DJNZ Chr_RLp8
    LD (HL),A
    LD B,C
    POP BC
    RET
; --------------------------------
; Move char to right 16 bit
; --------------------------------
; In : B = Nr of bits to shift
; Out:
; Usd: A, B, HL
; --------------------------------
Chr_Rgt16:
    LD HL,(Chr_Buf); Rotate char right 16 bit
    LD A,B ; 1st row
Chr_R2Lp1:
    SRL L
    RR H ; Insert carry
    DJNZ Chr_R2Lp1
    LD B,A
    LD (Chr_Buf),HL
    LD HL,(Chr_Buf+2); 2nd row
    LD A,B
Chr_R2Lp2:
    SRL L
    RR H ; Insert carry
    DJNZ Chr_R2Lp2
    LD B,A
    LD (Chr_Buf+2),HL
    LD HL,(Chr_Buf+4); 3rd row
    LD A,B
Chr_R2Lp3:
    SRL L
    RR H ; Insert carry
    DJNZ Chr_R2Lp3
    LD B,A
    LD (Chr_Buf+4),HL
    LD HL,(Chr_Buf+6); 4th row
    LD A,B
Chr_R2Lp4:
    SRL L
    RR H ; Insert carry
    DJNZ Chr_R2Lp4
    LD B,A
    LD (Chr_Buf+6),HL
    LD HL,(Chr_Buf+8); 5th row
    LD A,B
Chr_R2Lp5:
    SRL L
    RR H ; Insert carry
    DJNZ Chr_R2Lp5
    LD B,A
    LD (Chr_Buf+8),HL
    LD HL,(Chr_Buf+10); 6th row
    LD A,B
Chr_R2Lp6:
    SRL L
    RR H ; Insert carry
    DJNZ Chr_R2Lp6
    LD B,A
    LD (Chr_Buf+10),HL
    LD HL,(Chr_Buf+12); 7th row
    LD A,B
Chr_R2Lp7:
    SRL L
    RR H ; Insert carry
    DJNZ Chr_R2Lp7
    LD B,A
    LD (Chr_Buf+12),HL
    LD HL,(Chr_Buf+14); 8th row
    LD A,B
Chr_R2Lp8:
    SRL L
    RR H ;Insert carry
    DJNZ Chr_R2Lp8
    LD B,A
    LD (Chr_Buf+14),HL
    RET
; --------------------------------
; Print 8 bit wide char on screen
; --------------------------------
; In : DE = screen adr.
; Out: -
; Usd: A, HL, DE, B
; --------------------------------
Print8:
    LD HL,Chr_Buf
    PUSH DE ; save scr ad.
    EX DE,HL
    LD B,8 ; 8 lines
Prt8_L:
    LD A,(DE); set 1 byte
    XOR (HL)
    LD (HL),A
    INC DE ; skip 1 byte
    INC DE ; next byte
    INC H ; calc. next line
    LD A,H
    AND 7
    JP NZ,Prt8_C
    LD A,L
    ADD A,32
    LD L,A
    JR C,Prt8_C
    LD A,H
    SUB 8
    LD H,A
Prt8_C:
    DJNZ Prt8_L ; next round
    POP DE ; restore scr ad.
    RET
--------------------------------
; Print 16 bit wide char on screen
; --------------------------------
; In : DE = screen adr.
; Out: -
; Usd: A, HL, DE, B
; --------------------------------
Print16:
    LD HL,Chr_Buf
    PUSH DE ; save scr ad.
    EX DE,HL
    LD B,8 ; 8 lines
Prt16_L:
    LD A,(DE); set 1 byte
    XOR (HL)
    LD (HL),A
    INC HL ; next scr pos
    INC DE ; next byte
    LD A,(DE); set 1 byte
    XOR (HL)
    LD (HL),A
    DEC HL ; prev scr pos
    INC DE ; next byte
    INC H ; calc. next line
    LD A,H
    AND 7
    JP NZ,Prt16_C
    LD A,L
    ADD A,32
    LD L,A
    JR C,Prt16_C
    LD A,H
    SUB 8
    LD H,A
Prt16_C:
    DJNZ Prt16_L ; next round
    POP DE ; restore scr ad.
    RET
; --------------------------------
;  Variables
; --------------------------------
Chr_Buf:
    DEFS 16
scr_ad:
    DEFW 0
pix_pos:
    DEFB 0
test_text:
    DEFM "This is a test for proportional print!"
    DEFB 0,0
; --------------------------------
end asm

Print this item

  Fast Integer Square Roots
Posted by: britlion - 05-26-2010, 10:12 PM - Forum: How-To & Tutorials - Replies (3)

A few of you have wondered why I've been obsessing over speeding up math functions, cos the compiler is for games! :-)

Well, here's a concrete example of Fast square roots in action. Part of the football algorithm is "Who do I move, and where?" on the field. I'm hoping for better graphics, but this was a mock up to look at the math of that problem. If a player is moving with the ball, who is nearest to their path to intercept them?

With players all over the place, you have to work out distances to vectors. I finally got this working correctly (it sometimes broke, the last time I looked at this - and it turned out I was crossing the 16 bit number barrier. With a newer, longer sqrt function I can go back and make the algorithm work) and here it is in two versions - one using the ROM sqr() function, and the other using isqrt.bas from http://www.boriel.com/wiki/en/index.php/...:ISqrt.bas - this is a concrete example of why the slow ROM routines can become a problem for certain aspects of certain games. The speed difference is startling. The ONLY difference in the source code is changing the square root used from ROM to library. A matter of a couple of characters and an include.

It picks a point for a ball, and draws the pass line to another player. Then every other player has a line drawn to the nearest point on that line, or the nearest end if that IS the nearest point on the line. But look at the speed difference!

Note: press ENTER for a new screen.

ROM - http://sites.google.com/site/britlion/Passing-sqr.tzx

isqrt - http://sites.google.com/site/britlion/Pa...sqrtLF.tzx

Print this item

  As BorIDE progresses...
Posted by: LCD - 05-25-2010, 11:53 PM - Forum: ZX Basic Compiler - Replies (143)

Hallo my friends...

Currently the BorIDE is progressing very good. But Multitab coding is not working yet. I just want to ask if I added ALL available keywords, or are there some missing? Or are some not working?
Commands:
"And As Asm At Bold Beep Border Bright ByRef ByVal Cast Circle Cls Code Const Continue Dim Do Draw Else Elseif End Exit Fastcall Flash For Function Go Gosub Goto If Ink Inverse Italic Let Loop Malloc Multikeys Next Not Or Out Over Paper Pause Pi Plot Poke Print Randomize Realloc Return Stdcall Sub Then To Until Wend While"
Okay, I know! Pi is a constant and not a command.
Functions:
"Abs Acs Asn Atn Chr Chr$ Cos Exp Getkeyscancodes Hex Hex16 In Inkey Inkey$ Input Int Len Ln Mod Peek Point Rnd Sgn Shl Shr Sin Sqr Str Str$ Tan Val"
Assembler (I think, this is complete):
"adc add and bit call ccf cp cpd cpdr cpi cpir cpl daa dec di ei ex exx im in inc ind indr ini inir jp jr ld ldd lddr ldi ldir neg nop or outd outi pop push res ret reti retn rl rlc rlca rld rr rrc rrca rrcb rrcc rrcd rrce rrch rrcl rrd rst sbc scf set sla sra srl xor org defb defw defs defm equ"
Compiler:
"#Include Once"
Types:
"Byte Float Integer Long String Ubyte Uinteger Ulong"
Comments:
"Rem ' "
The latest version recognises now two-word commands like "Continue Do" and allow code folding. There are also different syntax coloring styles for commands, functions, comments and so. Unfortunally SUB clashes because it is available in ASM and in BASIC. Maybe changing the name from SUB to PROC will help, but then it goes away from FreeBasic names...

Print this item

  typo in scroll.bas
Posted by: programandala.net - 05-23-2010, 10:16 AM - Forum: Bug Reports - Replies (1)

In library/scroll.bas, the name of the last

Code:
sub fastcall ScrollLeft

should be

Code:
sub fastcall ScrollUp

(I'm using 1.2.6, but just realized "zxb.py --version" reports 1.2.5-r1513. Maybe I confused the files?)

Print this item