The following warnings occurred:
Warning [2] Undefined array key "attachments" - Line: 20 - File: portal.php(680) : eval()'d code PHP 8.2.31 (Linux)
File Line Function
/inc/class_error.php 157 errorHandler->error
/portal.php(680) : eval()'d code 20 errorHandler->error_callback
/portal.php 680 eval
Warning [2] Undefined array key "attachments" - Line: 20 - File: portal.php(680) : eval()'d code PHP 8.2.31 (Linux)
File Line Function
/inc/class_error.php 157 errorHandler->error
/portal.php(680) : eval()'d code 20 errorHandler->error_callback
/portal.php 680 eval
Warning [2] Undefined array key "attachments" - Line: 20 - File: portal.php(680) : eval()'d code PHP 8.2.31 (Linux)
File Line Function
/inc/class_error.php 157 errorHandler->error
/portal.php(680) : eval()'d code 20 errorHandler->error_callback
/portal.php 680 eval
Warning [2] Undefined array key "attachments" - Line: 20 - File: portal.php(680) : eval()'d code PHP 8.2.31 (Linux)
File Line Function
/inc/class_error.php 157 errorHandler->error
/portal.php(680) : eval()'d code 20 errorHandler->error_callback
/portal.php 680 eval
Warning [2] Undefined array key "attachments" - Line: 20 - File: portal.php(680) : eval()'d code PHP 8.2.31 (Linux)
File Line Function
/inc/class_error.php 157 errorHandler->error
/portal.php(680) : eval()'d code 20 errorHandler->error_callback
/portal.php 680 eval
Warning [2] Undefined array key "attachments" - Line: 20 - File: portal.php(680) : eval()'d code PHP 8.2.31 (Linux)
File Line Function
/inc/class_error.php 157 errorHandler->error
/portal.php(680) : eval()'d code 20 errorHandler->error_callback
/portal.php 680 eval
Warning [2] Undefined array key "attachments" - Line: 20 - File: portal.php(680) : eval()'d code PHP 8.2.31 (Linux)
File Line Function
/inc/class_error.php 157 errorHandler->error
/portal.php(680) : eval()'d code 20 errorHandler->error_callback
/portal.php 680 eval
Warning [2] Undefined array key "attachments" - Line: 20 - File: portal.php(680) : eval()'d code PHP 8.2.31 (Linux)
File Line Function
/inc/class_error.php 157 errorHandler->error
/portal.php(680) : eval()'d code 20 errorHandler->error_callback
/portal.php 680 eval
Warning [2] Undefined array key "attachments" - Line: 20 - File: portal.php(680) : eval()'d code PHP 8.2.31 (Linux)
File Line Function
/inc/class_error.php 157 errorHandler->error
/portal.php(680) : eval()'d code 20 errorHandler->error_callback
/portal.php 680 eval
Warning [2] Undefined array key "attachments" - Line: 20 - File: portal.php(680) : eval()'d code PHP 8.2.31 (Linux)
File Line Function
/inc/class_error.php 157 errorHandler->error
/portal.php(680) : eval()'d code 20 errorHandler->error_callback
/portal.php 680 eval




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

Username
  

Password
  





Search Forums

(Advanced Search)

Forum Statistics
» Members: 277
» Latest member: Elemento26
» Forum threads: 1,087
» Forum posts: 6,490

Full Statistics

Online Users
There are currently 134 online users.
» 0 Member(s) | 132 Guest(s)
Bing, Google

Latest Threads
GuSprites
Forum: Help & Support
Last Post: zedex82
2026-06-19, 06:39 PM
» Replies: 2
» Views: 355
New video Couse / Nuevo c...
Forum: News
Last Post: Duefectu
2026-04-29, 11:02 PM
» Replies: 0
» Views: 2,698
location of heap manageme...
Forum: Help & Support
Last Post: boriel
2026-03-07, 12:13 AM
» Replies: 1
» Views: 745
non-paged supervisor code...
Forum: Help & Support
Last Post: sdo303
2026-02-20, 06:38 PM
» Replies: 8
» Views: 1,847
How to open fuse as an ex...
Forum: How-To & Tutorials
Last Post: Duefectu
2026-02-09, 01:52 PM
» Replies: 3
» Views: 1,742
Old zxbasic game errors
Forum: Help & Support
Last Post: boriel
2025-11-09, 11:52 AM
» Replies: 7
» Views: 2,538
Error: Undefined GLOBAL l...
Forum: Help & Support
Last Post: ardentcrest
2025-11-04, 05:46 PM
» Replies: 3
» Views: 1,395
A Fast(er) Plot Routine f...
Forum: How-To & Tutorials
Last Post: tubz74
2025-10-30, 03:16 PM
» Replies: 2
» Views: 1,478
Hall of Fame - Include fo...
Forum: How-To & Tutorials
Last Post: tubz74
2025-10-28, 03:48 PM
» Replies: 0
» Views: 819
[SOLVED] Array layout bug...
Forum: Bug Reports
Last Post: Zoran
2025-10-25, 05:48 PM
» Replies: 2
» Views: 1,539

 
  Using PutcharLcd
Posted by: compiuter - 2010-06-02, 11: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 - 2010-06-02, 02: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 - 2010-06-02, 12:30 AM - 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 - 2010-05-31, 06: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 - 2010-05-29, 11: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 - 2010-05-28, 11: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 - 2010-05-28, 12:23 AM - 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 - 2010-05-26, 11: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 - 2010-05-26, 12:53 AM - 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 - 2010-05-23, 11: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